/** * 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()); }