Пример #1
0
  /**
   * Updates the endpoint parameters from POST and PUT requests.
   *
   * @param request A POST or PUT request with a {?et,lt,con} URI Template query and a Link Format
   *     payload.
   */
  public boolean setParameters(Request request) {

    LinkAttribute attr;

    String newEndpointType = "";
    int newLifeTime = NetworkConfig.getStandard().getInt("RD_DEFAULT_LIFETIME");
    String newContext = "";

    /*
     * get lifetime from option query - only for PUT request.
     */
    List<String> query = request.getOptions().getURIQueries();
    for (String q : query) {
      // FIXME Do not use Link attributes for URI template variables
      attr = LinkAttribute.parse(q);

      if (attr.getName().equals(LinkFormat.END_POINT_TYPE)) {
        newEndpointType = attr.getValue();
      }

      if (attr.getName().equals(LinkFormat.LIFE_TIME)) {
        newLifeTime = attr.getIntValue();

        if (newLifeTime < 60) {
          LOGGER.warning("Enforcing minimal RD lifetime of 60 seconds (was " + newLifeTime + ")");
          newLifeTime = 60;
        }
      }

      if (attr.getName().equals(LinkFormat.CONTEXT)) {
        newContext = attr.getValue();
      }
    }

    setEndpointType(newEndpointType);
    setLifeTime(newLifeTime);

    // TODO check with draft authors if update should be atomic
    if (newContext.equals("")) {
      context = "coap://" + request.getSource() + ":" + request.getSourcePort();
    } else {
      Request checkRequest = Request.newGet();

      try {
        checkRequest.setURI(context);
      } catch (Exception e) {
        LOGGER.warning(e.toString());
        return false;
      }
    }

    return updateEndpointResources(request.getPayloadString());
  }
Пример #2
0
    @Override
    public void run() {

      LOGGER.info("Validating endpoint: " + getContext());

      Request validationRequest = Request.newGet();
      validationRequest.setURI(getContext() + "/.well-known/core");
      if (etag != null) {
        validationRequest.getOptions().addETag(etag);
      }
      Response response = null;

      try {
        validationRequest.send();
        response = validationRequest.waitForResponse();

      } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }

      if (response == null) {

        delete();

      } else if (response.getCode() == ResponseCode.VALID) {

        LOGGER.fine("Resources up-to-date: " + getContext());

      } else if (response.getCode() == ResponseCode.CONTENT) {

        List<byte[]> etags = response.getOptions().getETags();

        if (!etags.isEmpty()) {
          etag = etags.get(0);
        }

        updateEndpointResources(response.getPayloadString());
        setLifeTime(lifeTime);

        LOGGER.fine("Updated Resources: " + getContext());
      }
    }