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;
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<List<HashMap<String, Object>>> mCbor = new Cbor<>();
private String mTargetDI = null;
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));
}
}
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)
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
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);
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);