Add TODO for SNMP traps processing

This commit is contained in:
ViacheslavKlimov 2023-06-27 11:50:29 +03:00
parent a045718e94
commit 83641e285f
2 changed files with 12 additions and 3 deletions

View File

@ -17,7 +17,8 @@ package org.thingsboard.server.common.data.transport.snmp;
public enum SnmpMethod { public enum SnmpMethod {
GET(-96), GET(-96),
SET(-93); SET(-93),
TRAP(-89);
// codes taken from org.snmp4j.PDU class // codes taken from org.snmp4j.PDU class
private final int code; private final int code;

View File

@ -297,7 +297,14 @@ public class SnmpTransportService implements TbTransportService, CommandResponde
}); });
} }
/* SNMP notifications handler */ /*
* SNMP notifications handler
*
* TODO: add check for host uniqueness when saving device (for backward compatibility - only for the ones using from-device RPC requests)
*
* TODO: this won't work properly in a cluster mode, due to load-balancing of requests from devices:
* session might not be on this instance
* */
@Override @Override
public void processPdu(CommandResponderEvent event) { public void processPdu(CommandResponderEvent event) {
Address sourceAddress = event.getPeerAddress(); Address sourceAddress = event.getPeerAddress();
@ -331,6 +338,7 @@ public class SnmpTransportService implements TbTransportService, CommandResponde
RequestContext requestContext = RequestContext.builder() RequestContext requestContext = RequestContext.builder()
.communicationSpec(communicationConfig.getSpec()) .communicationSpec(communicationConfig.getSpec())
.responseMappings(communicationConfig.getAllMappings()) .responseMappings(communicationConfig.getAllMappings())
.method(SnmpMethod.TRAP)
.build(); .build();
responseProcessingExecutor.execute(() -> { responseProcessingExecutor.execute(() -> {
@ -400,7 +408,7 @@ public class SnmpTransportService implements TbTransportService, CommandResponde
responseProcessors.put(SnmpCommunicationSpec.TO_SERVER_RPC_REQUEST, (responseData, requestContext, sessionContext) -> { responseProcessors.put(SnmpCommunicationSpec.TO_SERVER_RPC_REQUEST, (responseData, requestContext, sessionContext) -> {
TransportProtos.ToServerRpcRequestMsg toServerRpcRequestMsg = TransportProtos.ToServerRpcRequestMsg.newBuilder() TransportProtos.ToServerRpcRequestMsg toServerRpcRequestMsg = TransportProtos.ToServerRpcRequestMsg.newBuilder()
.setRequestId(0) .setRequestId(0)
.setMethodName("TRAP") .setMethodName(requestContext.getMethod().name())
.setParams(JsonConverter.toJson(responseData)) .setParams(JsonConverter.toJson(responseData))
.build(); .build();
transportService.process(sessionContext.getSessionInfo(), toServerRpcRequestMsg, null); transportService.process(sessionContext.getSessionInfo(), toServerRpcRequestMsg, null);