Class ThreeWayHandshakeClientHandler<R extends RequestMessage,​O extends ResponseMessage<?>>

  • All Implemented Interfaces:
    io.netty.channel.ChannelHandler, io.netty.channel.ChannelInboundHandler, io.netty.channel.ChannelOutboundHandler
    Direct Known Subclasses:
    ClientConnectionHandler

    public abstract class ThreeWayHandshakeClientHandler<R extends RequestMessage,​O extends ResponseMessage<?>>
    extends SimpleChannelDuplexHandler<Message,​Message>
    This handler performs the client-side part of a three-way handshake to create a session. It automatically requests the server for a new session. The server must confirm this request and then offers the client a session. Then the client has to confirm the offered session again.
    • Field Detail

      • ATTRIBUTE_PUBLIC_KEY

        public static final io.netty.util.AttributeKey<CompressedPublicKey> ATTRIBUTE_PUBLIC_KEY
      • timeout

        protected final Duration timeout
      • pipeline

        protected final Pipeline pipeline
      • networkId

        protected final int networkId
      • identity

        protected final Identity identity
      • timeoutFuture

        protected io.netty.util.concurrent.ScheduledFuture<?> timeoutFuture
    • Constructor Detail

      • ThreeWayHandshakeClientHandler

        protected ThreeWayHandshakeClientHandler​(int networkId,
                                                 Identity identity,
                                                 Duration timeout,
                                                 Pipeline pipeline,
                                                 R requestMessage)
      • ThreeWayHandshakeClientHandler

        protected ThreeWayHandshakeClientHandler​(int networkId,
                                                 Identity identity,
                                                 Duration timeout,
                                                 Pipeline pipeline,
                                                 CompletableFuture<Void> handshakeFuture,
                                                 io.netty.util.concurrent.ScheduledFuture<?> timeoutFuture,
                                                 R requestMessage)
    • Method Detail

      • doHandshake

        protected void doHandshake​(io.netty.channel.ChannelHandlerContext ctx,
                                   Message message)
      • handlerAdded

        public void handlerAdded​(io.netty.channel.ChannelHandlerContext ctx)
                          throws Exception
        Specified by:
        handlerAdded in interface io.netty.channel.ChannelHandler
        Overrides:
        handlerAdded in class io.netty.channel.ChannelHandlerAdapter
        Throws:
        Exception
      • requestSession

        protected void requestSession​(io.netty.channel.ChannelHandlerContext ctx)
      • validateSessionOffer

        protected abstract ErrorMessage.Error validateSessionOffer​(O offerMessage)
        This method validates the session offered by the server and must return an ErrorMessage.Error in case of error. Otherwise null must be returned.
        Parameters:
        offerMessage - the message that should be validated
        Returns:
        ErrorMessage.Error in case of error, otherwise null
      • confirmSession

        protected void confirmSession​(io.netty.channel.ChannelHandlerContext ctx,
                                      O offerMessage)
      • createConnection

        protected abstract void createConnection​(io.netty.channel.ChannelHandlerContext ctx,
                                                 O offerMessage)
      • processUnexpectedMessageDuringHandshake

        protected void processUnexpectedMessageDuringHandshake​(io.netty.channel.ChannelHandlerContext ctx,
                                                               Message message)
      • getLogger

        protected abstract org.slf4j.Logger getLogger()
      • processMessageAfterHandshake

        protected void processMessageAfterHandshake​(io.netty.channel.ChannelHandlerContext ctx,
                                                    Message message)
      • channelActive

        public void channelActive​(io.netty.channel.ChannelHandlerContext ctx)
                           throws Exception
        Specified by:
        channelActive in interface io.netty.channel.ChannelInboundHandler
        Overrides:
        channelActive in class io.netty.channel.ChannelInboundHandlerAdapter
        Throws:
        Exception
      • startTimeoutGuard

        protected void startTimeoutGuard​(io.netty.channel.ChannelHandlerContext ctx)
      • rejectSession

        protected void rejectSession​(io.netty.channel.ChannelHandlerContext ctx,
                                     String error)
      • exceptionCaught

        public void exceptionCaught​(io.netty.channel.ChannelHandlerContext ctx,
                                    Throwable cause)
        Specified by:
        exceptionCaught in interface io.netty.channel.ChannelHandler
        Specified by:
        exceptionCaught in interface io.netty.channel.ChannelInboundHandler
        Overrides:
        exceptionCaught in class io.netty.channel.ChannelInboundHandlerAdapter