diff --git a/opc-ua-stack/transport/src/main/java/org/eclipse/milo/opcua/stack/transport/client/uasc/UascClientAcknowledgeHandler.java b/opc-ua-stack/transport/src/main/java/org/eclipse/milo/opcua/stack/transport/client/uasc/UascClientAcknowledgeHandler.java index 0695895fb5..625a036367 100644 --- a/opc-ua-stack/transport/src/main/java/org/eclipse/milo/opcua/stack/transport/client/uasc/UascClientAcknowledgeHandler.java +++ b/opc-ua-stack/transport/src/main/java/org/eclipse/milo/opcua/stack/transport/client/uasc/UascClientAcknowledgeHandler.java @@ -35,6 +35,7 @@ import org.eclipse.milo.opcua.stack.core.types.UaRequestMessageType; import org.eclipse.milo.opcua.stack.core.types.builtin.StatusCode; import org.eclipse.milo.opcua.stack.transport.client.ClientApplicationContext; +import org.eclipse.milo.opcua.stack.transport.client.uasc.InboundUascResponseHandler.DelegatingUascResponseHandler; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -254,7 +255,16 @@ private void onAcknowledge(ChannelHandlerContext ctx, ByteBuf buffer) { awaitingHandshake, channelParameters); - ctx.pipeline().addFirst(messageHandler); + // Insert immediately before DelegatingUascResponseHandler rather than at + // position 0, so any pipeline-customizer handlers at the head (e.g. a + // PcapWriteHandler installed via addFirst) keep seeing raw wire bytes. + ChannelHandlerContext responseCtx = + ctx.pipeline().context(DelegatingUascResponseHandler.class); + if (responseCtx != null) { + ctx.pipeline().addBefore(responseCtx.name(), null, messageHandler); + } else { + ctx.pipeline().addFirst(messageHandler); + } }); }