示例#1
0
  protected boolean checkResponse(Request request, Response response) {
    boolean success = true;

    success &= checkType(Type.NON, response.getType());
    success &= checkInt(EXPECTED_RESPONSE_CODE.value, response.getCode().value, "code");
    success &= hasContentType(response);
    success &= hasNonEmptyPalyoad(response);

    return success;
  }
  /**
   * This method is used to apply resource-specific knowledge on the exchange. If the request was
   * successful, it sets the Observe option for the response. It is important to use the
   * notificationOrderer of the resource here. Further down the layer, race conditions could cause
   * local reordering of notifications. If the response has an error code, no observe relation can
   * be established and if there was one previously it is canceled. When this resource allows to be
   * observed by clients and the request is a GET request with an observe option, the {@link
   * ServerMessageDeliverer} already created the relation, as it manages the observing endpoints
   * globally.
   *
   * @param exchange the exchange
   * @param response the response
   */
  public void checkObserveRelation(Exchange exchange, Response response) {
    /*
     * If the request for the specified exchange tries to establish an observer
     * relation, then the ServerMessageDeliverer must have created such a relation
     * and added to the exchange. Otherwise, there is no such relation.
     * Remember that different paths might lead to this resource.
     */

    ObserveRelation relation = exchange.getRelation();
    if (relation == null) return; // because request did not try to establish a relation

    if (CoAP.ResponseCode.isSuccess(response.getCode())) {
      response.getOptions().setObserve(notificationOrderer.getCurrent());

      if (!relation.isEstablished()) {
        relation.setEstablished(true);
        addObserveRelation(relation);
      } else if (observeType != null) {
        // The resource can control the message type of the notification
        response.setType(observeType);
      }
    } // ObserveLayer takes care of the else case
  }
 /**
  * Checks if the response code is a successful code.
  *
  * @return true, if is success
  */
 public boolean isSuccess() {
   return CoAP.ResponseCode.isSuccess(response.getCode());
 }
 /**
  * Gets the response code code.
  *
  * @return the response code
  */
 public ResponseCode getCode() {
   return response.getCode();
 }
示例#5
0
  @Override
  protected synchronized void executeRequest(
      Request request, String serverURI, String resourceUri) {

    // defensive check for slash
    if (!serverURI.endsWith("/") && !resourceUri.startsWith("/")) {
      resourceUri = "/" + resourceUri;
    }

    URI uri = null;
    try {
      uri = new URI(serverURI + resourceUri);
    } catch (URISyntaxException use) {
      throw new IllegalArgumentException("Invalid URI: " + use.getMessage());
    }

    request.setURI(uri);

    // for observing
    int observeLoop = 2;

    // print request info
    if (verbose) {
      System.out.println("Request for test " + this.testName + " sent");
      Utils.prettyPrint(request);
    }

    // execute the request
    try {
      Response response = null;
      boolean success = true;
      long time = 5000;

      request.send();

      System.out.println();
      System.out.println("**** TEST: " + testName + " ****");
      System.out.println("**** BEGIN CHECK ****");

      response = request.waitForResponse(time);
      if (response != null) {
        success &= checkType(Type.ACK, response.getType());
        success &= checkInt(EXPECTED_RESPONSE_CODE.value, response.getCode().value, "code");
        success &= checkToken(request.getToken(), response.getToken());
        success &= hasContentType(response);
        success &= hasNonEmptyPalyoad(response);
        success &= hasObserve(response);

        if (success) {

          time = response.getOptions().getMaxAge() * 1000;
          System.out.println("+++++ Max-Age: " + time + " +++++");
          if (time == 0) time = 5000;

          for (int l = 0; success && (l < observeLoop); ++l) {

            response = request.waitForResponse(time + 1000);

            // checking the response
            if (response != null) {
              System.out.println("Received notification " + l);

              // print response info
              if (verbose) {
                System.out.println("Response received");
                System.out.println("Time elapsed (ms): " + response.getRTT());
                Utils.prettyPrint(response);
              }

              success &= checkResponse(request, response);

            } else {
              System.out.println("FAIL: Notifications stopped");
              success = false;
              break;
            } // response != null
          } // observeLoop

          if (response != null) {

            System.out.println("+++++++ Canceling +++++++");
            request.cancel(); // stack should send RST

            Thread.sleep(time + time / 2);

          } else {
            System.out.println("FAIL: Notifications stopped");
            success = false;
          }
        }
      } else {
        System.out.println("FAIL: No notification after registration");
        success = false;
      }

      if (success) {
        System.out.println("**** TEST PASSED ****");
        addSummaryEntry(testName + ": PASSED (conditionally)");
      } else {
        System.out.println("**** TEST FAILED ****");
        addSummaryEntry(testName + ": --FAILED--");
      }

      tickOffTest();

    } catch (InterruptedException e) {
      System.err.println("Interupted during receive: " + e.getMessage());
      System.exit(-1);
    }
  }