# Openfire Server Bootstrap with Netty The following diagram shows how, on start of the XMPPServer, a Netty server is initialised and bound to a port. ```mermaid sequenceDiagram title Server Bootstrap with Netty autonumber XMPPServer->>+XMPPServer: start() XMPPServer-->>+XMPPServer: loadModules() XMPPServer-->>+XMPPServer: startModules() XMPPServer->>+ConnectionManagerImpl: start() ConnectionManagerImpl-->>+ConnectionManagerImpl: startListeners() ConnectionManagerImpl->>+ConnectionListener: start() ConnectionListener->>+NettyConnectionAcceptor: start() Note over NettyConnectionAcceptor: Connection Acceptor initialises a new Netty
pipeline with an appropriate Netty handler
for the type of connection (C2S/S2S) NettyConnectionAcceptor-->>+NettyConnectionHandler: <> NettyConnectionAcceptor->>+ServerBootstrap: initialiseWith(NettyConnectionHandler) ServerBootstrap->>+ServerBootstrap: bind(address, port) ServerBootstrap->>+NettyServerInitializer: initChannel() NettyServerInitializer->>+NettyConnectionHandler: handlerAdded(ChannelHandlerContext) Note over NettyConnectionHandler: Adds client (C2S) or server (S2S) StanzaHandler,
NettyConnection, and XMLLightweightParser
to Channel attributes NettyConnectionHandler->>Channel: attr(XML_PARSER).set(XMLLightweightParser) NettyConnectionHandler->>NettyConnectionHandler: createNettyConnection() NettyConnectionHandler->>Channel: attr(CONNECTION).set(NettyConnection) Note over NettyConnectionHandler: NettyConnection passed to StanzaHandler
will be used to send responses out NettyConnectionHandler->>NettyConnectionHandler: createStanzaHandler(NettyConnection) NettyConnectionHandler->>-Channel: attr(HANDLER).set(StanzaHandler) ServerBootstrap->>+NioEventLoopGroup: register(address, port) NioEventLoopGroup->>+NioEventLoop: register() NioEventLoop->>+Channel: register() Channel->>+NioEventLoop: execute() loop NIO loop NioEventLoop->>+NioEventLoop: startThread() NioEventLoop->>+NioEventLoop: run() NioEventLoop->>+NioEventLoop: processInput() end ```