Мило: получить IP клиента

Есть ли способ получить IP-адрес клиента в контексте записи? Я хочу получить IP-адрес клиента, который пишет на мой Milo-OPCUA-сервер, поэтому я могу обрабатывать эти записи по-разному в зависимости от IP-адреса клиентов (локальные клиенты должны иметь возможность писать непосредственно на сервере, в то время как другие записи должны перенаправляться на другой сервер)

1 ответ

Решение

Хорошо, сейчас это не является частью какого-либо официального API, так что в будущем оно почти наверняка сломается, но:

С OperationContext вы получаете при реализации AttributeManager#write(WriteContext, List<WriteValue>):

context.getSession().ifPresent(session -> {
    UaStackServer stackServer = context.getServer().getServer();

    if (stackServer instanceof UaTcpStackServer) {
        ServerSecureChannel secureChannel = ((UaTcpStackServer) stackServer)
            .getSecureChannel(session.getSecureChannelId());

        Channel channel = secureChannel.attr(UaTcpStackServer.BoundChannelKey).get();

        SocketAddress remoteAddress = channel.remoteAddress();
    }
});

Для этого мне нужно добавить официальный API, возможно, что-то Session объект.

Другие вопросы по тегам