Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [milo-dev] ClientServerExample.java failed and fix bug ?

This error does not happen for me when I run ClientServerExample. What endpoint URLs did UaTcpStackServer log that it was binding to on startup?

On Wed, Jun 29, 2016 at 11:08 PM, Shigeru Ishida <ishida_shigeru@xxxxxxxxxxx> wrote:
Hi Kevin,

I tried to run ClientServerExample.java and this stack trace was output below.

ClientServerExample.java)
-----
https://github.com/eclipse/milo/blob/master/opc-ua-stack/stack-examples/src/main/java/org/eclipse/milo/opcua/stack/examples/ClientServerExample.java

stack trace)
-----
org.eclipse.milo.opcua.stack.server.handlers.UaTcpServerAsymmetricHandler exceptionCaught - [remote=/127.0.0.1:53797] Exception caught; sent ErrorMessage{error=StatusCode{name=Bad_UnexpectedError,
value=0x80010000, quality=bad}, reason=java.lang.IllegalArgumentException: securityPolicyUri length cannot be greater than 255 bytes}
io.netty.handler.codec.DecoderException: java.lang.IllegalArgumentException: securityPolicyUri length cannot be greater than 255 bytes
        at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:442)
        at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:248)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:334)
        at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:326)
        at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1320)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:334)
        at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:905)
        at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:123)
        at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:563)
        at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:504)
        at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:418)
        at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:390)
        at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:742)
        at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.IllegalArgumentException: securityPolicyUri length cannot be greater than 255 bytes
        at com.google.common.base.Preconditions.checkArgument(Preconditions.java:122)
        at org.eclipse.milo.opcua.stack.core.channel.headers.AsymmetricSecurityHeader.<init>(AsymmetricSecurityHeader.java:44)
        at org.eclipse.milo.opcua.stack.core.channel.headers.AsymmetricSecurityHeader.decode(AsymmetricSecurityHeader.java:139)
        at org.eclipse.milo.opcua.stack.server.handlers.UaTcpServerAsymmetricHandler.onOpenSecureChannel(UaTcpServerAsymmetricHandler.java:134)
        at org.eclipse.milo.opcua.stack.server.handlers.UaTcpServerAsymmetricHandler.decode(UaTcpServerAsymmetricHandler.java:103)
        at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:411)
        ... 15 more
-----

Therefore I modified decode() method in AsymmetricSecurityHeader.java and
run it successfully. I will send this patch to you.

Regards,

--Shigeru

--- AsymmetricSecurityHeader.java.orig  2016-06-23 07:38:21.000000000 +0900
+++ AsymmetricSecurityHeader.java       2016-06-30 14:33:24.008478166 +0900
@@ -121,20 +121,25 @@
     public static AsymmetricSecurityHeader decode(ByteBuf buffer) {
         /* SecurityPolicyUri */
         int securityPolicyUriLength = buffer.readInt();
-        String securityPolicyUri = new String(
-            buffer.readBytes(securityPolicyUriLength).array(),
-            Charset.forName("UTF-8")
-        );
+        byte[] bytes = new byte[securityPolicyUriLength];
+        buffer.readBytes(bytes);
+        String securityPolicyUri = new String(bytes, Charset.forName("UTF-8"));

         /* SenderCertificate */
         int senderCertificateLength = buffer.readInt();
-        byte[] senderCertificate = senderCertificateLength >= 0 ?
-            buffer.readBytes(senderCertificateLength).array() : null;
+        byte[] senderCertificate = null;
+        if (senderCertificateLength >= 0) {
+               senderCertificate = new byte[senderCertificateLength];
+            buffer.readBytes(senderCertificate);
+        }

         /* ReceiverCertificateThumbprint */
         int thumbprintLength = buffer.readInt();
-        byte[] receiverCertificateThumbprint = thumbprintLength >= 0 ?
-            buffer.readBytes(thumbprintLength).array() : null;
+        byte[] receiverCertificateThumbprint = null;
+        if (thumbprintLength >= 0) {
+               receiverCertificateThumbprint = new byte[thumbprintLength];
+            buffer.readBytes(receiverCertificateThumbprint);
+        }

         return new AsymmetricSecurityHeader(
             securityPolicyUri,

_______________________________________________
milo-dev mailing list
milo-dev@xxxxxxxxxxx
To change your delivery options, retrieve your password, or unsubscribe from this list, visit
https://dev.eclipse.org/mailman/listinfo/milo-dev



Back to the top