use of org.eclipse.leshan.ObserveSpec in project leshan by eclipse.
the class ObjectResource method handlePUT.
@Override
public void handlePUT(CoapExchange coapExchange) {
ServerIdentity identity = extractServerIdentity(coapExchange, bootstrapHandler);
String URI = coapExchange.getRequestOptions().getUriPathString();
// get Observe Spec
ObserveSpec spec = null;
if (coapExchange.advanced().getRequest().getOptions().getURIQueryCount() != 0) {
List<String> uriQueries = coapExchange.advanced().getRequest().getOptions().getUriQuery();
spec = ObserveSpec.parse(uriQueries);
}
// Manage Write Attributes Request
if (spec != null) {
WriteAttributesResponse response = nodeEnabler.writeAttributes(identity, new WriteAttributesRequest(URI, spec));
if (response.getCode().isError()) {
coapExchange.respond(toCoapResponseCode(response.getCode()), response.getErrorMessage());
} else {
coapExchange.respond(toCoapResponseCode(response.getCode()));
}
return;
} else // Manage Write and Bootstrap Write Request (replace)
{
LwM2mPath path = new LwM2mPath(URI);
if (!coapExchange.getRequestOptions().hasContentFormat()) {
coapExchange.respond(ResponseCode.BAD_REQUEST, "Content Format is mandatory");
return;
}
ContentFormat contentFormat = ContentFormat.fromCode(coapExchange.getRequestOptions().getContentFormat());
if (!decoder.isSupported(contentFormat)) {
coapExchange.respond(ResponseCode.UNSUPPORTED_CONTENT_FORMAT);
return;
}
LwM2mNode lwM2mNode;
try {
LwM2mModel model = new LwM2mModel(nodeEnabler.getObjectModel());
lwM2mNode = decoder.decode(coapExchange.getRequestPayload(), contentFormat, path, model);
if (identity.isLwm2mBootstrapServer()) {
BootstrapWriteResponse response = nodeEnabler.write(identity, new BootstrapWriteRequest(path, lwM2mNode, contentFormat));
if (response.getCode().isError()) {
coapExchange.respond(toCoapResponseCode(response.getCode()), response.getErrorMessage());
} else {
coapExchange.respond(toCoapResponseCode(response.getCode()));
}
} else {
WriteResponse response = nodeEnabler.write(identity, new WriteRequest(Mode.REPLACE, contentFormat, URI, lwM2mNode));
if (response.getCode().isError()) {
coapExchange.respond(toCoapResponseCode(response.getCode()), response.getErrorMessage());
} else {
coapExchange.respond(toCoapResponseCode(response.getCode()));
}
}
return;
} catch (CodecException e) {
LOG.warn("Unable to decode payload to write", e);
coapExchange.respond(ResponseCode.BAD_REQUEST);
return;
}
}
}
use of org.eclipse.leshan.ObserveSpec in project leshan by eclipse.
the class DownlinkRequestSerDesTest method ser_and_des_write_attributes_request.
@Test
public void ser_and_des_write_attributes_request() throws Exception {
ObserveSpec os = new ObserveSpec.Builder().minPeriod(10).maxPeriod(60).build();
ser_and_des_are_equals(new WriteAttributesRequest(3, 0, 1, os));
}
Aggregations