|
@@ -462,26 +462,26 @@ public class MqttTransportHandler extends ChannelInboundHandlerAdapter implement |
|
@@ -462,26 +462,26 @@ public class MqttTransportHandler extends ChannelInboundHandlerAdapter implement |
462
|
String clientId = msg.payload().clientIdentifier();
|
462
|
String clientId = msg.payload().clientIdentifier();
|
463
|
if (DataConstants.PROVISION.equals(userName) || DataConstants.PROVISION.equals(clientId)) {
|
463
|
if (DataConstants.PROVISION.equals(userName) || DataConstants.PROVISION.equals(clientId)) {
|
464
|
deviceSessionCtx.setProvisionOnly(true);
|
464
|
deviceSessionCtx.setProvisionOnly(true);
|
465
|
- ctx.writeAndFlush(createMqttConnAckMsg(CONNECTION_ACCEPTED));
|
465
|
+ ctx.writeAndFlush(createMqttConnAckMsg(CONNECTION_ACCEPTED, msg));
|
466
|
} else {
|
466
|
} else {
|
467
|
X509Certificate cert;
|
467
|
X509Certificate cert;
|
468
|
if (sslHandler != null && (cert = getX509Certificate()) != null) {
|
468
|
if (sslHandler != null && (cert = getX509Certificate()) != null) {
|
469
|
- processX509CertConnect(ctx, cert);
|
469
|
+ processX509CertConnect(ctx, cert, msg);
|
470
|
} else {
|
470
|
} else {
|
471
|
processAuthTokenConnect(ctx, msg);
|
471
|
processAuthTokenConnect(ctx, msg);
|
472
|
}
|
472
|
}
|
473
|
}
|
473
|
}
|
474
|
}
|
474
|
}
|
475
|
|
475
|
|
476
|
- private void processAuthTokenConnect(ChannelHandlerContext ctx, MqttConnectMessage msg) {
|
|
|
477
|
- String userName = msg.payload().userName();
|
476
|
+ private void processAuthTokenConnect(ChannelHandlerContext ctx, MqttConnectMessage connectMessage) {
|
|
|
477
|
+ String userName = connectMessage.payload().userName();
|
478
|
log.info("[{}] Processing connect msg for client with user name: {}!", sessionId, userName);
|
478
|
log.info("[{}] Processing connect msg for client with user name: {}!", sessionId, userName);
|
479
|
TransportProtos.ValidateBasicMqttCredRequestMsg.Builder request = TransportProtos.ValidateBasicMqttCredRequestMsg.newBuilder()
|
479
|
TransportProtos.ValidateBasicMqttCredRequestMsg.Builder request = TransportProtos.ValidateBasicMqttCredRequestMsg.newBuilder()
|
480
|
- .setClientId(msg.payload().clientIdentifier());
|
480
|
+ .setClientId(connectMessage.payload().clientIdentifier());
|
481
|
if (userName != null) {
|
481
|
if (userName != null) {
|
482
|
request.setUserName(userName);
|
482
|
request.setUserName(userName);
|
483
|
}
|
483
|
}
|
484
|
- String password = msg.payload().password();
|
484
|
+ String password = connectMessage.payload().password();
|
485
|
if (password != null) {
|
485
|
if (password != null) {
|
486
|
request.setPassword(password);
|
486
|
request.setPassword(password);
|
487
|
}
|
487
|
}
|
|
@@ -489,19 +489,19 @@ public class MqttTransportHandler extends ChannelInboundHandlerAdapter implement |
|
@@ -489,19 +489,19 @@ public class MqttTransportHandler extends ChannelInboundHandlerAdapter implement |
489
|
new TransportServiceCallback<ValidateDeviceCredentialsResponse>() {
|
489
|
new TransportServiceCallback<ValidateDeviceCredentialsResponse>() {
|
490
|
@Override
|
490
|
@Override
|
491
|
public void onSuccess(ValidateDeviceCredentialsResponse msg) {
|
491
|
public void onSuccess(ValidateDeviceCredentialsResponse msg) {
|
492
|
- onValidateDeviceResponse(msg, ctx);
|
492
|
+ onValidateDeviceResponse(msg, ctx, connectMessage);
|
493
|
}
|
493
|
}
|
494
|
|
494
|
|
495
|
@Override
|
495
|
@Override
|
496
|
public void onError(Throwable e) {
|
496
|
public void onError(Throwable e) {
|
497
|
log.trace("[{}] Failed to process credentials: {}", address, userName, e);
|
497
|
log.trace("[{}] Failed to process credentials: {}", address, userName, e);
|
498
|
- ctx.writeAndFlush(createMqttConnAckMsg(MqttConnectReturnCode.CONNECTION_REFUSED_SERVER_UNAVAILABLE));
|
498
|
+ ctx.writeAndFlush(createMqttConnAckMsg(MqttConnectReturnCode.CONNECTION_REFUSED_SERVER_UNAVAILABLE, connectMessage));
|
499
|
ctx.close();
|
499
|
ctx.close();
|
500
|
}
|
500
|
}
|
501
|
});
|
501
|
});
|
502
|
}
|
502
|
}
|
503
|
|
503
|
|
504
|
- private void processX509CertConnect(ChannelHandlerContext ctx, X509Certificate cert) {
|
504
|
+ private void processX509CertConnect(ChannelHandlerContext ctx, X509Certificate cert, MqttConnectMessage connectMessage) {
|
505
|
try {
|
505
|
try {
|
506
|
if (!context.isSkipValidityCheckForClientCert()) {
|
506
|
if (!context.isSkipValidityCheckForClientCert()) {
|
507
|
cert.checkValidity();
|
507
|
cert.checkValidity();
|
|
@@ -512,18 +512,18 @@ public class MqttTransportHandler extends ChannelInboundHandlerAdapter implement |
|
@@ -512,18 +512,18 @@ public class MqttTransportHandler extends ChannelInboundHandlerAdapter implement |
512
|
new TransportServiceCallback<ValidateDeviceCredentialsResponse>() {
|
512
|
new TransportServiceCallback<ValidateDeviceCredentialsResponse>() {
|
513
|
@Override
|
513
|
@Override
|
514
|
public void onSuccess(ValidateDeviceCredentialsResponse msg) {
|
514
|
public void onSuccess(ValidateDeviceCredentialsResponse msg) {
|
515
|
- onValidateDeviceResponse(msg, ctx);
|
515
|
+ onValidateDeviceResponse(msg, ctx, connectMessage);
|
516
|
}
|
516
|
}
|
517
|
|
517
|
|
518
|
@Override
|
518
|
@Override
|
519
|
public void onError(Throwable e) {
|
519
|
public void onError(Throwable e) {
|
520
|
log.trace("[{}] Failed to process credentials: {}", address, sha3Hash, e);
|
520
|
log.trace("[{}] Failed to process credentials: {}", address, sha3Hash, e);
|
521
|
- ctx.writeAndFlush(createMqttConnAckMsg(MqttConnectReturnCode.CONNECTION_REFUSED_SERVER_UNAVAILABLE));
|
521
|
+ ctx.writeAndFlush(createMqttConnAckMsg(MqttConnectReturnCode.CONNECTION_REFUSED_SERVER_UNAVAILABLE, connectMessage));
|
522
|
ctx.close();
|
522
|
ctx.close();
|
523
|
}
|
523
|
}
|
524
|
});
|
524
|
});
|
525
|
} catch (Exception e) {
|
525
|
} catch (Exception e) {
|
526
|
- ctx.writeAndFlush(createMqttConnAckMsg(CONNECTION_REFUSED_NOT_AUTHORIZED));
|
526
|
+ ctx.writeAndFlush(createMqttConnAckMsg(CONNECTION_REFUSED_NOT_AUTHORIZED, connectMessage));
|
527
|
ctx.close();
|
527
|
ctx.close();
|
528
|
}
|
528
|
}
|
529
|
}
|
529
|
}
|
|
@@ -547,11 +547,11 @@ public class MqttTransportHandler extends ChannelInboundHandlerAdapter implement |
|
@@ -547,11 +547,11 @@ public class MqttTransportHandler extends ChannelInboundHandlerAdapter implement |
547
|
doDisconnect();
|
547
|
doDisconnect();
|
548
|
}
|
548
|
}
|
549
|
|
549
|
|
550
|
- private MqttConnAckMessage createMqttConnAckMsg(MqttConnectReturnCode returnCode) {
|
550
|
+ private MqttConnAckMessage createMqttConnAckMsg(MqttConnectReturnCode returnCode, MqttConnectMessage msg) {
|
551
|
MqttFixedHeader mqttFixedHeader =
|
551
|
MqttFixedHeader mqttFixedHeader =
|
552
|
new MqttFixedHeader(CONNACK, false, AT_MOST_ONCE, false, 0);
|
552
|
new MqttFixedHeader(CONNACK, false, AT_MOST_ONCE, false, 0);
|
553
|
MqttConnAckVariableHeader mqttConnAckVariableHeader =
|
553
|
MqttConnAckVariableHeader mqttConnAckVariableHeader =
|
554
|
- new MqttConnAckVariableHeader(returnCode, true);
|
554
|
+ new MqttConnAckVariableHeader(returnCode, !msg.variableHeader().isCleanSession());
|
555
|
return new MqttConnAckMessage(mqttFixedHeader, mqttConnAckVariableHeader);
|
555
|
return new MqttConnAckMessage(mqttFixedHeader, mqttConnAckVariableHeader);
|
556
|
}
|
556
|
}
|
557
|
|
557
|
|
|
@@ -627,9 +627,10 @@ public class MqttTransportHandler extends ChannelInboundHandlerAdapter implement |
|
@@ -627,9 +627,10 @@ public class MqttTransportHandler extends ChannelInboundHandlerAdapter implement |
627
|
}
|
627
|
}
|
628
|
}
|
628
|
}
|
629
|
|
629
|
|
630
|
- private void onValidateDeviceResponse(ValidateDeviceCredentialsResponse msg, ChannelHandlerContext ctx) {
|
630
|
+
|
|
|
631
|
+ private void onValidateDeviceResponse(ValidateDeviceCredentialsResponse msg, ChannelHandlerContext ctx, MqttConnectMessage connectMessage) {
|
631
|
if (!msg.hasDeviceInfo()) {
|
632
|
if (!msg.hasDeviceInfo()) {
|
632
|
- ctx.writeAndFlush(createMqttConnAckMsg(CONNECTION_REFUSED_NOT_AUTHORIZED));
|
633
|
+ ctx.writeAndFlush(createMqttConnAckMsg(CONNECTION_REFUSED_NOT_AUTHORIZED, connectMessage));
|
633
|
ctx.close();
|
634
|
ctx.close();
|
634
|
} else {
|
635
|
} else {
|
635
|
deviceSessionCtx.setDeviceInfo(msg.getDeviceInfo());
|
636
|
deviceSessionCtx.setDeviceInfo(msg.getDeviceInfo());
|
|
@@ -640,7 +641,7 @@ public class MqttTransportHandler extends ChannelInboundHandlerAdapter implement |
|
@@ -640,7 +641,7 @@ public class MqttTransportHandler extends ChannelInboundHandlerAdapter implement |
640
|
public void onSuccess(Void msg) {
|
641
|
public void onSuccess(Void msg) {
|
641
|
transportService.registerAsyncSession(deviceSessionCtx.getSessionInfo(), MqttTransportHandler.this);
|
642
|
transportService.registerAsyncSession(deviceSessionCtx.getSessionInfo(), MqttTransportHandler.this);
|
642
|
checkGatewaySession();
|
643
|
checkGatewaySession();
|
643
|
- ctx.writeAndFlush(createMqttConnAckMsg(CONNECTION_ACCEPTED));
|
644
|
+ ctx.writeAndFlush(createMqttConnAckMsg(CONNECTION_ACCEPTED, connectMessage));
|
644
|
log.info("[{}] Client connected!", sessionId);
|
645
|
log.info("[{}] Client connected!", sessionId);
|
645
|
}
|
646
|
}
|
646
|
|
647
|
|
|
@@ -651,7 +652,7 @@ public class MqttTransportHandler extends ChannelInboundHandlerAdapter implement |
|
@@ -651,7 +652,7 @@ public class MqttTransportHandler extends ChannelInboundHandlerAdapter implement |
651
|
} else {
|
652
|
} else {
|
652
|
log.warn("[{}] Failed to submit session event", sessionId, e);
|
653
|
log.warn("[{}] Failed to submit session event", sessionId, e);
|
653
|
}
|
654
|
}
|
654
|
- ctx.writeAndFlush(createMqttConnAckMsg(MqttConnectReturnCode.CONNECTION_REFUSED_SERVER_UNAVAILABLE));
|
655
|
+ ctx.writeAndFlush(createMqttConnAckMsg(MqttConnectReturnCode.CONNECTION_REFUSED_SERVER_UNAVAILABLE, connectMessage));
|
655
|
ctx.close();
|
656
|
ctx.close();
|
656
|
}
|
657
|
}
|
657
|
});
|
658
|
});
|