Class NettyConnectionHandler<H extends StanzaHandler>

java.lang.Object
io.netty.channel.ChannelHandlerAdapter
io.netty.channel.ChannelInboundHandlerAdapter
io.netty.channel.SimpleChannelInboundHandler<String>
org.jivesoftware.openfire.nio.NettyConnectionHandler<H>
All Implemented Interfaces:
io.netty.channel.ChannelHandler, io.netty.channel.ChannelInboundHandler
Direct Known Subclasses:
NettyClientConnectionHandler, NettyComponentConnectionHandler, NettyMultiplexerConnectionHandler, NettyOutboundConnectionHandler, NettyServerConnectionHandler

public abstract class NettyConnectionHandler<H extends StanzaHandler> extends io.netty.channel.SimpleChannelInboundHandler<String>
A NettyConnectionHandler is responsible for creating new sessions, destroying sessions and delivering received XML stanzas to the proper StanzaHandler.

Subclasses of this will supply a specific StanzaHandler implementation depending on the type of connection to be handled, e.g. C2S, S2S.

Author:
Matthew Vivian, Alex Gidman
  • Field Details

    • CONNECTION

      public static final io.netty.util.AttributeKey<NettyConnection> CONNECTION
    • READ_BYTES

      public static final io.netty.util.AttributeKey<Long> READ_BYTES
    • WRITTEN_BYTES

      public static final io.netty.util.AttributeKey<Long> WRITTEN_BYTES
    • IDLE_FLAG

      public static final io.netty.util.AttributeKey<Boolean> IDLE_FLAG
    • PARSER_CACHE

      protected static final ThreadLocal<XMPPPacketReader> PARSER_CACHE
    • sslInitDone

      protected boolean sslInitDone
    • configuration

      protected final ConnectionConfiguration configuration
      The configuration for new connections.
  • Constructor Details

  • Method Details

    • getMaxIdleTime

      public abstract Duration getMaxIdleTime()
      Returns the time that a connection can be idle before being closed.
      Returns:
      the time a connection can be idle.
    • handlerAdded

      public void handlerAdded(io.netty.channel.ChannelHandlerContext ctx)
      Specified by:
      handlerAdded in interface io.netty.channel.ChannelHandler
      Overrides:
      handlerAdded in class io.netty.channel.ChannelHandlerAdapter
    • getStanzaHandlerFuture

      public CompletableFuture<H> getStanzaHandlerFuture()
      Returns a future that completes when the StanzaHandler for this connection has been created and added to the Netty pipeline. This is used to safely coordinate with asynchronous Netty handler initialization and avoids race conditions where the handler is accessed before handlerAdded(io.netty.channel.ChannelHandlerContext) has executed.
      Returns:
      a future that completes with the stanza handler once it is available
    • handlerRemoved

      public void handlerRemoved(io.netty.channel.ChannelHandlerContext ctx)
      Specified by:
      handlerRemoved in interface io.netty.channel.ChannelHandler
      Overrides:
      handlerRemoved in class io.netty.channel.ChannelHandlerAdapter
    • channelRead0

      public void channelRead0(io.netty.channel.ChannelHandlerContext ctx, String message)
      Specified by:
      channelRead0 in class io.netty.channel.SimpleChannelInboundHandler<String>
    • 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
    • channelUnregistered

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

      public void userEventTriggered(io.netty.channel.ChannelHandlerContext ctx, Object evt) throws Exception
      Specified by:
      userEventTriggered in interface io.netty.channel.ChannelInboundHandler
      Overrides:
      userEventTriggered in class io.netty.channel.ChannelInboundHandlerAdapter
      Throws:
      Exception
    • toString

      public String toString()
      Overrides:
      toString in class Object