Browse Source

Lwm2m: content format for observe fx bug

pull/4791/head
nickAS21 5 years ago
parent
commit
a4e3049c27
  1. 7
      common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/client/LwM2mClient.java
  2. 22
      common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/downlink/DefaultLwM2mDownlinkMsgHandler.java

7
common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/client/LwM2mClient.java

@ -236,6 +236,12 @@ public class LwM2mClient implements Cloneable {
.getResourceModel(pathIds.getObjectId(), pathIds.getResourceId()) : null;
}
public boolean isResourceMultiInstances(String pathIdVer, LwM2mModelProvider modelProvider) {
ResourceModel resourceModel = getResourceModel(pathIdVer, modelProvider);
return resourceModel.multiple;
}
public ObjectModel getObjectModel(String pathIdVer, LwM2mModelProvider modelProvider) {
LwM2mPath pathIds = new LwM2mPath(fromVersionedIdToObjectId(pathIdVer));
String verSupportedObject = registration.getSupportedObject().get(pathIds.getObjectId());
@ -273,7 +279,6 @@ public class LwM2mClient implements Cloneable {
}
public String resourceToString(LwM2mResource lwM2mResource) {
return lwM2mResource.isMultiInstances() ? lwM2mResource.getInstances().toString() : lwM2mResource.getValue().toString();
}

22
common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/downlink/DefaultLwM2mDownlinkMsgHandler.java

@ -48,6 +48,7 @@ import org.eclipse.leshan.core.response.WriteAttributesResponse;
import org.eclipse.leshan.core.response.WriteCompositeResponse;
import org.eclipse.leshan.core.response.WriteResponse;
import org.eclipse.leshan.core.util.Hex;
import org.eclipse.leshan.server.model.LwM2mModelProvider;
import org.eclipse.leshan.server.registration.Registration;
import org.springframework.stereotype.Service;
import org.thingsboard.common.util.JacksonUtil;
@ -119,7 +120,7 @@ public class DefaultLwM2mDownlinkMsgHandler extends LwM2MExecutorAwareService im
@Override
public void sendReadRequest(LwM2mClient client, TbLwM2MReadRequest request, DownlinkRequestCallback<ReadRequest, ReadResponse> callback) {
validateVersionedId(client, request);
ReadRequest downlink = new ReadRequest(getRequestContentFormat(client, request), request.getObjectId());
ReadRequest downlink = new ReadRequest(getRequestContentFormat(client, request, this.config.getModelProvider()), request.getObjectId());
sendRequest(client, downlink, request.getTimeout(), callback);
}
@ -155,7 +156,7 @@ public class DefaultLwM2mDownlinkMsgHandler extends LwM2MExecutorAwareService im
Set<Observation> observations = context.getServer().getObservationService().getObservations(client.getRegistration());
if (observations.stream().noneMatch(observation -> observation.getPath().equals(resultIds))) {
ObserveRequest downlink;
ContentFormat contentFormat = getRequestContentFormat(client, request);
ContentFormat contentFormat = getRequestContentFormat(client, request, this.config.getModelProvider());
if (resultIds.isResource()) {
downlink = new ObserveRequest(contentFormat, resultIds.getObjectId(), resultIds.getObjectInstanceId(), resultIds.getResourceId());
} else if (resultIds.isObjectInstance()) {
@ -457,16 +458,23 @@ public class DefaultLwM2mDownlinkMsgHandler extends LwM2MExecutorAwareService im
throw new CodecException("Invalid ResourceModel_Type for %s ContentFormat.", type);
}
private static ContentFormat getRequestContentFormat(LwM2mClient client, HasContentFormat request) {
private static ContentFormat getRequestContentFormat(LwM2mClient client, HasContentFormat request, LwM2mModelProvider modelProvider) {
if (request.getRequestContentFormat() != null) {
return request.getRequestContentFormat();
} else {
String versionedId = fromVersionedIdToObjectId(((TbLwM2MReadRequest) request).getVersionedId());
if (versionedId != null && (new LwM2mPath(versionedId).isObject() || new LwM2mPath(versionedId).isObjectInstance())) {
return ContentFormat.DEFAULT;
} else {
String versionedId = null;
if (request instanceof TbLwM2MReadRequest) {
versionedId = ((TbLwM2MReadRequest) request).getVersionedId();
} else if (request instanceof TbLwM2MObserveRequest) {
versionedId = ((TbLwM2MObserveRequest) request).getVersionedId();
}
String id = fromVersionedIdToObjectId(versionedId);
if (id != null && !client.isResourceMultiInstances(versionedId, modelProvider)) {
return client.getDefaultContentFormat();
}
else {
return ContentFormat.DEFAULT;
}
}
}
}

Loading…
Cancel
Save