From 1110ace1be2cddc4a3b50aec1ffceaea490fdd0b Mon Sep 17 00:00:00 2001 From: Minji Park Date: Thu, 21 Jul 2016 10:36:17 +0900 Subject: [PATCH] Add response handler in cloud interface to set uri in response - response handler added in DiResource in interface to make response have uri with di prefix Change-Id: I02806e81c65b29bcf9d4b7a3ed8bcb586cc09d31 Signed-off-by: Minji Park Reviewed-on: https://gerrit.iotivity.org/gerrit/9529 Tested-by: jenkins-iotivity Reviewed-by: Jee Hyeok Kim --- .../cloud/ciserver/resources/DiResource.java | 56 +++++++++++++++++----- .../cloud/base/protocols/MessageBuilder.java | 10 ++++ 2 files changed, 55 insertions(+), 11 deletions(-) diff --git a/cloud/interface/src/main/java/org/iotivity/cloud/ciserver/resources/DiResource.java b/cloud/interface/src/main/java/org/iotivity/cloud/ciserver/resources/DiResource.java index 84b8675..332fc28 100644 --- a/cloud/interface/src/main/java/org/iotivity/cloud/ciserver/resources/DiResource.java +++ b/cloud/interface/src/main/java/org/iotivity/cloud/ciserver/resources/DiResource.java @@ -36,6 +36,7 @@ import org.iotivity.cloud.base.exception.ServerException.PreconditionFailedExcep import org.iotivity.cloud.base.protocols.IRequest; import org.iotivity.cloud.base.protocols.IResponse; import org.iotivity.cloud.base.protocols.MessageBuilder; +import org.iotivity.cloud.base.protocols.coap.CoapResponse; import org.iotivity.cloud.base.protocols.enums.ContentFormat; import org.iotivity.cloud.base.protocols.enums.ResponseStatus; import org.iotivity.cloud.base.resource.Resource; @@ -92,6 +93,20 @@ public class DiResource extends Resource { return uriPath.toString(); } + private IResponse convertReponseUri(IResponse response, String di) { + + String convertedUri = new String(); + + CoapResponse coapResponse = (CoapResponse) response; + + if (coapResponse.getUriPath().isEmpty() == false) { + convertedUri = "/di/" + di + "/" + coapResponse.getUriPath(); + } + + return MessageBuilder + .modifyResponse(response, convertedUri, null, null); + } + class LinkInterfaceHandler implements IResponseEventHandler { private Cbor>> mCbor = new Cbor<>(); private String mTargetDI = null; @@ -117,9 +132,11 @@ public class DiResource extends Resource { convertHref(linkPayload); } - mSrcDevice.sendResponse(MessageBuilder.modifyResponse(response, - ContentFormat.APPLICATION_CBOR, linkPayload != null - ? mCbor.encodingPayloadToCbor(linkPayload) : null)); + mSrcDevice.sendResponse(MessageBuilder.modifyResponse( + convertReponseUri(response, mTargetDI), + ContentFormat.APPLICATION_CBOR, + linkPayload != null ? mCbor + .encodingPayloadToCbor(linkPayload) : null)); } } @@ -133,12 +150,27 @@ public class DiResource extends Resource { String deviceId = request.getUriPathSegments().get(1); - requestChannel.sendRequest( - MessageBuilder.modifyRequest(request, - extractTargetUriPath(request), null, null, null), + requestChannel.sendRequest(MessageBuilder.modifyRequest(request, + extractTargetUriPath(request), null, null, null), new LinkInterfaceHandler(deviceId, srcDevice)); } + class DefaultResponseHandler implements IResponseEventHandler { + private String mTargetDI = null; + private Device mSrcDevice = null; + + public DefaultResponseHandler(String targetDI, Device srcDevice) { + mTargetDI = targetDI; + mSrcDevice = srcDevice; + } + + @Override + public void onResponseReceived(IResponse response) { + + mSrcDevice.sendResponse(convertReponseUri(response, mTargetDI)); + } + } + // This is optional method for packet handling @Override public void onDefaultRequestReceived(Device srcDevice, IRequest request) @@ -150,9 +182,11 @@ public class DiResource extends Resource { throw new NotFoundException(); } - requestChannel.sendRequest( - MessageBuilder.modifyRequest(request, - extractTargetUriPath(request), null, null, null), - srcDevice); + String deviceId = request.getUriPathSegments().get(1); + + requestChannel.sendRequest(MessageBuilder.modifyRequest(request, + extractTargetUriPath(request), null, null, null), + new DefaultResponseHandler(deviceId, srcDevice)); } -} + +} \ No newline at end of file diff --git a/cloud/stack/src/main/java/org/iotivity/cloud/base/protocols/MessageBuilder.java b/cloud/stack/src/main/java/org/iotivity/cloud/base/protocols/MessageBuilder.java index c68954a..5a703b7 100644 --- a/cloud/stack/src/main/java/org/iotivity/cloud/base/protocols/MessageBuilder.java +++ b/cloud/stack/src/main/java/org/iotivity/cloud/base/protocols/MessageBuilder.java @@ -44,6 +44,7 @@ public class MessageBuilder { if (request instanceof CoapRequest) { CoapRequest coapRequest = (CoapRequest) request; CoapResponse coapResponse = new CoapResponse(responseStatus); + coapResponse.setUriPath(coapRequest.getUriPath()); coapResponse.setToken(coapRequest.getToken()); if (payload != null) { coapResponse.setContentFormat(format); @@ -117,8 +118,17 @@ public class MessageBuilder { public static IResponse modifyResponse(IResponse orgResponse, ContentFormat contentFormat, byte[] payload) { + return modifyResponse(orgResponse, null, contentFormat, payload); + } + + public static IResponse modifyResponse(IResponse orgResponse, + String uriPath, ContentFormat contentFormat, byte[] payload) { + CoapResponse coapResponse = (CoapResponse) orgResponse; + if (uriPath != null) { + coapResponse.setUriPath(uriPath); + } if (payload != null) { coapResponse.setContentFormat(contentFormat); coapResponse.setPayload(payload); -- 2.7.4