@Override
    public Plc4xProtocolBase<BASE_PACKET_CLASS> configurePipeline(PlcConnectionConfiguration configuration, ChannelPipeline pipeline,
                                                                  PlcAuthentication authentication, boolean passive,
                                                                  List<EventListener> listeners) {
        if (null == protocol) {
            if (this.encryptionHandler != null) {
                pipeline.addLast("ENCRYPT", this.encryptionHandler);
            }
            pipeline.addLast("CODEC", getMessageCodec(configuration));
            protocol = configure(configuration, createInstance(protocolClass));
            if (driverContextClass != null) {
                protocol.setDriverContext(configure(configuration, createInstance(driverContextClass)));
            }
            pipeline.addLast(new EventListenerMessageCodec(listeners));
            Plc4xNettyWrapper<BASE_PACKET_CLASS> context = new Plc4xNettyWrapper<>(new NettyHashTimerTimeoutManager(), pipeline, passive, protocol,
                authentication, basePacketClass);
            pipeline.addLast("WRAPPER", context);
        }

        return protocol;

    }
Applies the given Stack to the Pipeline
plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/protocol/S7HSingleProtocolStackConfigurer.java