Commit b9b82446ebe87b5bb892e48305ed7710cb17a587

Authored by Andrii Shvaika
1 parent d440d500

Transport Type check

@@ -24,6 +24,7 @@ import org.eclipse.californium.core.network.ExchangeObserver; @@ -24,6 +24,7 @@ import org.eclipse.californium.core.network.ExchangeObserver;
24 import org.eclipse.californium.core.server.resources.CoapExchange; 24 import org.eclipse.californium.core.server.resources.CoapExchange;
25 import org.eclipse.californium.core.server.resources.Resource; 25 import org.eclipse.californium.core.server.resources.Resource;
26 import org.springframework.util.ReflectionUtils; 26 import org.springframework.util.ReflectionUtils;
  27 +import org.thingsboard.server.common.data.DeviceTransportType;
27 import org.thingsboard.server.common.data.security.DeviceTokenCredentials; 28 import org.thingsboard.server.common.data.security.DeviceTokenCredentials;
28 import org.thingsboard.server.common.msg.session.FeatureType; 29 import org.thingsboard.server.common.msg.session.FeatureType;
29 import org.thingsboard.server.common.msg.session.SessionMsgType; 30 import org.thingsboard.server.common.msg.session.SessionMsgType;
@@ -145,7 +146,7 @@ public class CoapTransportResource extends CoapResource { @@ -145,7 +146,7 @@ public class CoapTransportResource extends CoapResource {
145 return; 146 return;
146 } 147 }
147 148
148 - transportService.process(TransportProtos.ValidateDeviceTokenRequestMsg.newBuilder().setToken(credentials.get().getCredentialsId()).build(), 149 + transportService.process(DeviceTransportType.DEFAULT, TransportProtos.ValidateDeviceTokenRequestMsg.newBuilder().setToken(credentials.get().getCredentialsId()).build(),
149 new DeviceAuthCallback(transportContext, exchange, sessionInfo -> { 150 new DeviceAuthCallback(transportContext, exchange, sessionInfo -> {
150 UUID sessionId = new UUID(sessionInfo.getSessionIdMSB(), sessionInfo.getSessionIdLSB()); 151 UUID sessionId = new UUID(sessionInfo.getSessionIdMSB(), sessionInfo.getSessionIdLSB());
151 try { 152 try {
@@ -30,6 +30,7 @@ import org.springframework.web.bind.annotation.RequestMethod; @@ -30,6 +30,7 @@ import org.springframework.web.bind.annotation.RequestMethod;
30 import org.springframework.web.bind.annotation.RequestParam; 30 import org.springframework.web.bind.annotation.RequestParam;
31 import org.springframework.web.bind.annotation.RestController; 31 import org.springframework.web.bind.annotation.RestController;
32 import org.springframework.web.context.request.async.DeferredResult; 32 import org.springframework.web.context.request.async.DeferredResult;
  33 +import org.thingsboard.server.common.data.DeviceTransportType;
33 import org.thingsboard.server.common.data.id.DeviceId; 34 import org.thingsboard.server.common.data.id.DeviceId;
34 import org.thingsboard.server.common.transport.SessionMsgListener; 35 import org.thingsboard.server.common.transport.SessionMsgListener;
35 import org.thingsboard.server.common.transport.TransportContext; 36 import org.thingsboard.server.common.transport.TransportContext;
@@ -78,7 +79,7 @@ public class DeviceApiController { @@ -78,7 +79,7 @@ public class DeviceApiController {
78 @RequestParam(value = "sharedKeys", required = false, defaultValue = "") String sharedKeys, 79 @RequestParam(value = "sharedKeys", required = false, defaultValue = "") String sharedKeys,
79 HttpServletRequest httpRequest) { 80 HttpServletRequest httpRequest) {
80 DeferredResult<ResponseEntity> responseWriter = new DeferredResult<>(); 81 DeferredResult<ResponseEntity> responseWriter = new DeferredResult<>();
81 - transportContext.getTransportService().process(ValidateDeviceTokenRequestMsg.newBuilder().setToken(deviceToken).build(), 82 + transportContext.getTransportService().process(DeviceTransportType.DEFAULT, ValidateDeviceTokenRequestMsg.newBuilder().setToken(deviceToken).build(),
82 new DeviceAuthCallback(transportContext, responseWriter, sessionInfo -> { 83 new DeviceAuthCallback(transportContext, responseWriter, sessionInfo -> {
83 GetAttributeRequestMsg.Builder request = GetAttributeRequestMsg.newBuilder().setRequestId(0); 84 GetAttributeRequestMsg.Builder request = GetAttributeRequestMsg.newBuilder().setRequestId(0);
84 List<String> clientKeySet = !StringUtils.isEmpty(clientKeys) ? Arrays.asList(clientKeys.split(",")) : null; 85 List<String> clientKeySet = !StringUtils.isEmpty(clientKeys) ? Arrays.asList(clientKeys.split(",")) : null;
@@ -100,7 +101,7 @@ public class DeviceApiController { @@ -100,7 +101,7 @@ public class DeviceApiController {
100 public DeferredResult<ResponseEntity> postDeviceAttributes(@PathVariable("deviceToken") String deviceToken, 101 public DeferredResult<ResponseEntity> postDeviceAttributes(@PathVariable("deviceToken") String deviceToken,
101 @RequestBody String json, HttpServletRequest request) { 102 @RequestBody String json, HttpServletRequest request) {
102 DeferredResult<ResponseEntity> responseWriter = new DeferredResult<>(); 103 DeferredResult<ResponseEntity> responseWriter = new DeferredResult<>();
103 - transportContext.getTransportService().process(ValidateDeviceTokenRequestMsg.newBuilder().setToken(deviceToken).build(), 104 + transportContext.getTransportService().process(DeviceTransportType.DEFAULT, ValidateDeviceTokenRequestMsg.newBuilder().setToken(deviceToken).build(),
104 new DeviceAuthCallback(transportContext, responseWriter, sessionInfo -> { 105 new DeviceAuthCallback(transportContext, responseWriter, sessionInfo -> {
105 TransportService transportService = transportContext.getTransportService(); 106 TransportService transportService = transportContext.getTransportService();
106 transportService.process(sessionInfo, JsonConverter.convertToAttributesProto(new JsonParser().parse(json)), 107 transportService.process(sessionInfo, JsonConverter.convertToAttributesProto(new JsonParser().parse(json)),
@@ -114,7 +115,7 @@ public class DeviceApiController { @@ -114,7 +115,7 @@ public class DeviceApiController {
114 public DeferredResult<ResponseEntity> postTelemetry(@PathVariable("deviceToken") String deviceToken, 115 public DeferredResult<ResponseEntity> postTelemetry(@PathVariable("deviceToken") String deviceToken,
115 @RequestBody String json, HttpServletRequest request) { 116 @RequestBody String json, HttpServletRequest request) {
116 DeferredResult<ResponseEntity> responseWriter = new DeferredResult<ResponseEntity>(); 117 DeferredResult<ResponseEntity> responseWriter = new DeferredResult<ResponseEntity>();
117 - transportContext.getTransportService().process(ValidateDeviceTokenRequestMsg.newBuilder().setToken(deviceToken).build(), 118 + transportContext.getTransportService().process(DeviceTransportType.DEFAULT, ValidateDeviceTokenRequestMsg.newBuilder().setToken(deviceToken).build(),
118 new DeviceAuthCallback(transportContext, responseWriter, sessionInfo -> { 119 new DeviceAuthCallback(transportContext, responseWriter, sessionInfo -> {
119 TransportService transportService = transportContext.getTransportService(); 120 TransportService transportService = transportContext.getTransportService();
120 transportService.process(sessionInfo, JsonConverter.convertToTelemetryProto(new JsonParser().parse(json)), 121 transportService.process(sessionInfo, JsonConverter.convertToTelemetryProto(new JsonParser().parse(json)),
@@ -128,7 +129,7 @@ public class DeviceApiController { @@ -128,7 +129,7 @@ public class DeviceApiController {
128 public DeferredResult<ResponseEntity> claimDevice(@PathVariable("deviceToken") String deviceToken, 129 public DeferredResult<ResponseEntity> claimDevice(@PathVariable("deviceToken") String deviceToken,
129 @RequestBody(required = false) String json, HttpServletRequest request) { 130 @RequestBody(required = false) String json, HttpServletRequest request) {
130 DeferredResult<ResponseEntity> responseWriter = new DeferredResult<>(); 131 DeferredResult<ResponseEntity> responseWriter = new DeferredResult<>();
131 - transportContext.getTransportService().process(ValidateDeviceTokenRequestMsg.newBuilder().setToken(deviceToken).build(), 132 + transportContext.getTransportService().process(DeviceTransportType.DEFAULT, ValidateDeviceTokenRequestMsg.newBuilder().setToken(deviceToken).build(),
132 new DeviceAuthCallback(transportContext, responseWriter, sessionInfo -> { 133 new DeviceAuthCallback(transportContext, responseWriter, sessionInfo -> {
133 TransportService transportService = transportContext.getTransportService(); 134 TransportService transportService = transportContext.getTransportService();
134 DeviceId deviceId = new DeviceId(new UUID(sessionInfo.getDeviceIdMSB(), sessionInfo.getDeviceIdLSB())); 135 DeviceId deviceId = new DeviceId(new UUID(sessionInfo.getDeviceIdMSB(), sessionInfo.getDeviceIdLSB()));
@@ -143,7 +144,7 @@ public class DeviceApiController { @@ -143,7 +144,7 @@ public class DeviceApiController {
143 @RequestParam(value = "timeout", required = false, defaultValue = "0") long timeout, 144 @RequestParam(value = "timeout", required = false, defaultValue = "0") long timeout,
144 HttpServletRequest httpRequest) { 145 HttpServletRequest httpRequest) {
145 DeferredResult<ResponseEntity> responseWriter = new DeferredResult<>(); 146 DeferredResult<ResponseEntity> responseWriter = new DeferredResult<>();
146 - transportContext.getTransportService().process(ValidateDeviceTokenRequestMsg.newBuilder().setToken(deviceToken).build(), 147 + transportContext.getTransportService().process(DeviceTransportType.DEFAULT, ValidateDeviceTokenRequestMsg.newBuilder().setToken(deviceToken).build(),
147 new DeviceAuthCallback(transportContext, responseWriter, sessionInfo -> { 148 new DeviceAuthCallback(transportContext, responseWriter, sessionInfo -> {
148 TransportService transportService = transportContext.getTransportService(); 149 TransportService transportService = transportContext.getTransportService();
149 transportService.registerSyncSession(sessionInfo, new HttpSessionListener(responseWriter), 150 transportService.registerSyncSession(sessionInfo, new HttpSessionListener(responseWriter),
@@ -160,7 +161,7 @@ public class DeviceApiController { @@ -160,7 +161,7 @@ public class DeviceApiController {
160 @PathVariable("requestId") Integer requestId, 161 @PathVariable("requestId") Integer requestId,
161 @RequestBody String json, HttpServletRequest request) { 162 @RequestBody String json, HttpServletRequest request) {
162 DeferredResult<ResponseEntity> responseWriter = new DeferredResult<ResponseEntity>(); 163 DeferredResult<ResponseEntity> responseWriter = new DeferredResult<ResponseEntity>();
163 - transportContext.getTransportService().process(ValidateDeviceTokenRequestMsg.newBuilder().setToken(deviceToken).build(), 164 + transportContext.getTransportService().process(DeviceTransportType.DEFAULT, ValidateDeviceTokenRequestMsg.newBuilder().setToken(deviceToken).build(),
164 new DeviceAuthCallback(transportContext, responseWriter, sessionInfo -> { 165 new DeviceAuthCallback(transportContext, responseWriter, sessionInfo -> {
165 TransportService transportService = transportContext.getTransportService(); 166 TransportService transportService = transportContext.getTransportService();
166 transportService.process(sessionInfo, ToDeviceRpcResponseMsg.newBuilder().setRequestId(requestId).setPayload(json).build(), new HttpOkCallback(responseWriter)); 167 transportService.process(sessionInfo, ToDeviceRpcResponseMsg.newBuilder().setRequestId(requestId).setPayload(json).build(), new HttpOkCallback(responseWriter));
@@ -172,7 +173,7 @@ public class DeviceApiController { @@ -172,7 +173,7 @@ public class DeviceApiController {
172 public DeferredResult<ResponseEntity> postRpcRequest(@PathVariable("deviceToken") String deviceToken, 173 public DeferredResult<ResponseEntity> postRpcRequest(@PathVariable("deviceToken") String deviceToken,
173 @RequestBody String json, HttpServletRequest httpRequest) { 174 @RequestBody String json, HttpServletRequest httpRequest) {
174 DeferredResult<ResponseEntity> responseWriter = new DeferredResult<ResponseEntity>(); 175 DeferredResult<ResponseEntity> responseWriter = new DeferredResult<ResponseEntity>();
175 - transportContext.getTransportService().process(ValidateDeviceTokenRequestMsg.newBuilder().setToken(deviceToken).build(), 176 + transportContext.getTransportService().process(DeviceTransportType.DEFAULT, ValidateDeviceTokenRequestMsg.newBuilder().setToken(deviceToken).build(),
176 new DeviceAuthCallback(transportContext, responseWriter, sessionInfo -> { 177 new DeviceAuthCallback(transportContext, responseWriter, sessionInfo -> {
177 JsonObject request = new JsonParser().parse(json).getAsJsonObject(); 178 JsonObject request = new JsonParser().parse(json).getAsJsonObject();
178 TransportService transportService = transportContext.getTransportService(); 179 TransportService transportService = transportContext.getTransportService();
@@ -190,7 +191,7 @@ public class DeviceApiController { @@ -190,7 +191,7 @@ public class DeviceApiController {
190 @RequestParam(value = "timeout", required = false, defaultValue = "0") long timeout, 191 @RequestParam(value = "timeout", required = false, defaultValue = "0") long timeout,
191 HttpServletRequest httpRequest) { 192 HttpServletRequest httpRequest) {
192 DeferredResult<ResponseEntity> responseWriter = new DeferredResult<>(); 193 DeferredResult<ResponseEntity> responseWriter = new DeferredResult<>();
193 - transportContext.getTransportService().process(ValidateDeviceTokenRequestMsg.newBuilder().setToken(deviceToken).build(), 194 + transportContext.getTransportService().process(DeviceTransportType.DEFAULT, ValidateDeviceTokenRequestMsg.newBuilder().setToken(deviceToken).build(),
194 new DeviceAuthCallback(transportContext, responseWriter, sessionInfo -> { 195 new DeviceAuthCallback(transportContext, responseWriter, sessionInfo -> {
195 TransportService transportService = transportContext.getTransportService(); 196 TransportService transportService = transportContext.getTransportService();
196 transportService.registerSyncSession(sessionInfo, new HttpSessionListener(responseWriter), 197 transportService.registerSyncSession(sessionInfo, new HttpSessionListener(responseWriter),
@@ -24,6 +24,7 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; @@ -24,6 +24,7 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
24 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; 24 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
25 import org.springframework.stereotype.Component; 25 import org.springframework.stereotype.Component;
26 import org.springframework.util.StringUtils; 26 import org.springframework.util.StringUtils;
  27 +import org.thingsboard.server.common.data.DeviceTransportType;
27 import org.thingsboard.server.common.msg.EncryptionUtil; 28 import org.thingsboard.server.common.msg.EncryptionUtil;
28 import org.thingsboard.server.common.transport.TransportService; 29 import org.thingsboard.server.common.transport.TransportService;
29 import org.thingsboard.server.common.transport.TransportServiceCallback; 30 import org.thingsboard.server.common.transport.TransportServiceCallback;
@@ -157,7 +158,7 @@ public class MqttSslHandlerProvider { @@ -157,7 +158,7 @@ public class MqttSslHandlerProvider {
157 String sha3Hash = EncryptionUtil.getSha3Hash(strCert); 158 String sha3Hash = EncryptionUtil.getSha3Hash(strCert);
158 final String[] credentialsBodyHolder = new String[1]; 159 final String[] credentialsBodyHolder = new String[1];
159 CountDownLatch latch = new CountDownLatch(1); 160 CountDownLatch latch = new CountDownLatch(1);
160 - transportService.process(TransportProtos.ValidateDeviceX509CertRequestMsg.newBuilder().setHash(sha3Hash).build(), 161 + transportService.process(DeviceTransportType.MQTT, TransportProtos.ValidateDeviceX509CertRequestMsg.newBuilder().setHash(sha3Hash).build(),
161 new TransportServiceCallback<ValidateDeviceCredentialsResponse>() { 162 new TransportServiceCallback<ValidateDeviceCredentialsResponse>() {
162 @Override 163 @Override
163 public void onSuccess(ValidateDeviceCredentialsResponse msg) { 164 public void onSuccess(ValidateDeviceCredentialsResponse msg) {
@@ -39,6 +39,7 @@ import io.netty.util.concurrent.Future; @@ -39,6 +39,7 @@ import io.netty.util.concurrent.Future;
39 import io.netty.util.concurrent.GenericFutureListener; 39 import io.netty.util.concurrent.GenericFutureListener;
40 import lombok.extern.slf4j.Slf4j; 40 import lombok.extern.slf4j.Slf4j;
41 import org.springframework.util.StringUtils; 41 import org.springframework.util.StringUtils;
  42 +import org.thingsboard.server.common.data.DeviceTransportType;
42 import org.thingsboard.server.common.data.device.profile.MqttTopics; 43 import org.thingsboard.server.common.data.device.profile.MqttTopics;
43 import org.thingsboard.server.common.msg.EncryptionUtil; 44 import org.thingsboard.server.common.msg.EncryptionUtil;
44 import org.thingsboard.server.common.transport.SessionMsgListener; 45 import org.thingsboard.server.common.transport.SessionMsgListener;
@@ -366,7 +367,7 @@ public class MqttTransportHandler extends ChannelInboundHandlerAdapter implement @@ -366,7 +367,7 @@ public class MqttTransportHandler extends ChannelInboundHandlerAdapter implement
366 ctx.writeAndFlush(createMqttConnAckMsg(CONNECTION_REFUSED_BAD_USER_NAME_OR_PASSWORD)); 367 ctx.writeAndFlush(createMqttConnAckMsg(CONNECTION_REFUSED_BAD_USER_NAME_OR_PASSWORD));
367 ctx.close(); 368 ctx.close();
368 } else { 369 } else {
369 - transportService.process(ValidateDeviceTokenRequestMsg.newBuilder().setToken(userName).build(), 370 + transportService.process(DeviceTransportType.MQTT, ValidateDeviceTokenRequestMsg.newBuilder().setToken(userName).build(),
370 new TransportServiceCallback<ValidateDeviceCredentialsResponse>() { 371 new TransportServiceCallback<ValidateDeviceCredentialsResponse>() {
371 @Override 372 @Override
372 public void onSuccess(ValidateDeviceCredentialsResponse msg) { 373 public void onSuccess(ValidateDeviceCredentialsResponse msg) {
@@ -387,7 +388,7 @@ public class MqttTransportHandler extends ChannelInboundHandlerAdapter implement @@ -387,7 +388,7 @@ public class MqttTransportHandler extends ChannelInboundHandlerAdapter implement
387 try { 388 try {
388 String strCert = SslUtil.getX509CertificateString(cert); 389 String strCert = SslUtil.getX509CertificateString(cert);
389 String sha3Hash = EncryptionUtil.getSha3Hash(strCert); 390 String sha3Hash = EncryptionUtil.getSha3Hash(strCert);
390 - transportService.process(ValidateDeviceX509CertRequestMsg.newBuilder().setHash(sha3Hash).build(), 391 + transportService.process(DeviceTransportType.MQTT, ValidateDeviceX509CertRequestMsg.newBuilder().setHash(sha3Hash).build(),
391 new TransportServiceCallback<ValidateDeviceCredentialsResponse>() { 392 new TransportServiceCallback<ValidateDeviceCredentialsResponse>() {
392 @Override 393 @Override
393 public void onSuccess(ValidateDeviceCredentialsResponse msg) { 394 public void onSuccess(ValidateDeviceCredentialsResponse msg) {
@@ -16,6 +16,7 @@ @@ -16,6 +16,7 @@
16 package org.thingsboard.server.common.transport; 16 package org.thingsboard.server.common.transport;
17 17
18 import org.thingsboard.server.common.data.DeviceProfile; 18 import org.thingsboard.server.common.data.DeviceProfile;
  19 +import org.thingsboard.server.common.data.DeviceTransportType;
19 import org.thingsboard.server.common.data.id.DeviceProfileId; 20 import org.thingsboard.server.common.data.id.DeviceProfileId;
20 import org.thingsboard.server.common.transport.auth.GetOrCreateDeviceFromGatewayResponse; 21 import org.thingsboard.server.common.transport.auth.GetOrCreateDeviceFromGatewayResponse;
21 import org.thingsboard.server.common.transport.auth.ValidateDeviceCredentialsResponse; 22 import org.thingsboard.server.common.transport.auth.ValidateDeviceCredentialsResponse;
@@ -45,10 +46,10 @@ public interface TransportService { @@ -45,10 +46,10 @@ public interface TransportService {
45 46
46 GetTenantRoutingInfoResponseMsg getRoutingInfo(GetTenantRoutingInfoRequestMsg msg); 47 GetTenantRoutingInfoResponseMsg getRoutingInfo(GetTenantRoutingInfoRequestMsg msg);
47 48
48 - void process(ValidateDeviceTokenRequestMsg msg, 49 + void process(DeviceTransportType transportType, ValidateDeviceTokenRequestMsg msg,
49 TransportServiceCallback<ValidateDeviceCredentialsResponse> callback); 50 TransportServiceCallback<ValidateDeviceCredentialsResponse> callback);
50 51
51 - void process(ValidateDeviceX509CertRequestMsg msg, 52 + void process(DeviceTransportType transportType, ValidateDeviceX509CertRequestMsg msg,
52 TransportServiceCallback<ValidateDeviceCredentialsResponse> callback); 53 TransportServiceCallback<ValidateDeviceCredentialsResponse> callback);
53 54
54 void process(GetOrCreateDeviceFromGatewayRequestMsg msg, 55 void process(GetOrCreateDeviceFromGatewayRequestMsg msg,
@@ -27,6 +27,7 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; @@ -27,6 +27,7 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
27 import org.springframework.stereotype.Service; 27 import org.springframework.stereotype.Service;
28 import org.thingsboard.common.util.ThingsBoardThreadFactory; 28 import org.thingsboard.common.util.ThingsBoardThreadFactory;
29 import org.thingsboard.server.common.data.DeviceProfile; 29 import org.thingsboard.server.common.data.DeviceProfile;
  30 +import org.thingsboard.server.common.data.DeviceTransportType;
30 import org.thingsboard.server.common.data.EntityType; 31 import org.thingsboard.server.common.data.EntityType;
31 import org.thingsboard.server.common.data.id.DeviceId; 32 import org.thingsboard.server.common.data.id.DeviceId;
32 import org.thingsboard.server.common.data.id.DeviceProfileId; 33 import org.thingsboard.server.common.data.id.DeviceProfileId;
@@ -252,20 +253,20 @@ public class DefaultTransportService implements TransportService { @@ -252,20 +253,20 @@ public class DefaultTransportService implements TransportService {
252 } 253 }
253 254
254 @Override 255 @Override
255 - public void process(TransportProtos.ValidateDeviceTokenRequestMsg msg, TransportServiceCallback<ValidateDeviceCredentialsResponse> callback) { 256 + public void process(DeviceTransportType transportType, TransportProtos.ValidateDeviceTokenRequestMsg msg, TransportServiceCallback<ValidateDeviceCredentialsResponse> callback) {
256 log.trace("Processing msg: {}", msg); 257 log.trace("Processing msg: {}", msg);
257 TbProtoQueueMsg<TransportApiRequestMsg> protoMsg = new TbProtoQueueMsg<>(UUID.randomUUID(), TransportApiRequestMsg.newBuilder().setValidateTokenRequestMsg(msg).build()); 258 TbProtoQueueMsg<TransportApiRequestMsg> protoMsg = new TbProtoQueueMsg<>(UUID.randomUUID(), TransportApiRequestMsg.newBuilder().setValidateTokenRequestMsg(msg).build());
258 - doProcess(protoMsg, callback); 259 + doProcess(transportType, protoMsg, callback);
259 } 260 }
260 261
261 @Override 262 @Override
262 - public void process(TransportProtos.ValidateDeviceX509CertRequestMsg msg, TransportServiceCallback<ValidateDeviceCredentialsResponse> callback) { 263 + public void process(DeviceTransportType transportType, TransportProtos.ValidateDeviceX509CertRequestMsg msg, TransportServiceCallback<ValidateDeviceCredentialsResponse> callback) {
263 log.trace("Processing msg: {}", msg); 264 log.trace("Processing msg: {}", msg);
264 TbProtoQueueMsg<TransportApiRequestMsg> protoMsg = new TbProtoQueueMsg<>(UUID.randomUUID(), TransportApiRequestMsg.newBuilder().setValidateX509CertRequestMsg(msg).build()); 265 TbProtoQueueMsg<TransportApiRequestMsg> protoMsg = new TbProtoQueueMsg<>(UUID.randomUUID(), TransportApiRequestMsg.newBuilder().setValidateX509CertRequestMsg(msg).build());
265 - doProcess(protoMsg, callback); 266 + doProcess(transportType, protoMsg, callback);
266 } 267 }
267 268
268 - private void doProcess(TbProtoQueueMsg<TransportApiRequestMsg> protoMsg, TransportServiceCallback<ValidateDeviceCredentialsResponse> callback) { 269 + private void doProcess(DeviceTransportType transportType, TbProtoQueueMsg<TransportApiRequestMsg> protoMsg, TransportServiceCallback<ValidateDeviceCredentialsResponse> callback) {
269 ListenableFuture<ValidateDeviceCredentialsResponse> response = Futures.transform(transportApiRequestTemplate.send(protoMsg), tmp -> { 270 ListenableFuture<ValidateDeviceCredentialsResponse> response = Futures.transform(transportApiRequestTemplate.send(protoMsg), tmp -> {
270 TransportProtos.ValidateDeviceCredentialsResponseMsg msg = tmp.getValue().getValidateTokenResponseMsg(); 271 TransportProtos.ValidateDeviceCredentialsResponseMsg msg = tmp.getValue().getValidateTokenResponseMsg();
271 ValidateDeviceCredentialsResponse.ValidateDeviceCredentialsResponseBuilder result = ValidateDeviceCredentialsResponse.builder(); 272 ValidateDeviceCredentialsResponse.ValidateDeviceCredentialsResponseBuilder result = ValidateDeviceCredentialsResponse.builder();
@@ -283,6 +284,11 @@ public class DefaultTransportService implements TransportService { @@ -283,6 +284,11 @@ public class DefaultTransportService implements TransportService {
283 deviceProfiles.put(tdi.getDeviceProfileId(), profile); 284 deviceProfiles.put(tdi.getDeviceProfileId(), profile);
284 } 285 }
285 } 286 }
  287 + if (transportType != DeviceTransportType.DEFAULT
  288 + && profile != null && profile.getTransportType() != DeviceTransportType.DEFAULT && profile.getTransportType() != transportType) {
  289 + log.debug("[{}] Device profile [{}] has different transport type: {}, expected: {}", tdi.getDeviceId(), tdi.getDeviceProfileId(), profile.getTransportType(), transportType);
  290 + throw new IllegalStateException("Device profile has different transport type: " + profile.getTransportType() + ". Expected: " + transportType);
  291 + }
286 result.deviceProfile(profile); 292 result.deviceProfile(profile);
287 } 293 }
288 } 294 }