func connected()

in TLSify/Sources/TLSifyLib/TLSProxy.swift [61:114]


    func connected(partnerChannel: Channel,
                   myChannel: Channel,
                   contextForInitialData: ChannelHandlerContext) {
        self.logger.debug("connected to \(partnerChannel)")
        
        let bytes: ByteBuffer
        switch self.state {
        case .waitingToBeAdded, .connected:
            self.illegalTransition()
        case .error(let error):
            partnerChannel.pipeline.fireErrorCaught(error)
            myChannel.pipeline.fireErrorCaught(error)
            partnerChannel.close(promise: nil)
            return
        case .closed:
            self.logger.warning("discarding \(partnerChannel) because we're already closed.")
            partnerChannel.close(promise: nil)
            return
        case .connecting(let buffer):
            bytes = buffer
            self.state = .connected
            // fall through
        }
        
        var partnerLogger = self.logger
        partnerLogger[metadataKey: "side"] = "Proxy <--[TLS]--> Target"
        let myGlue = GlueHandler(logger: self.logger)
        let partnerGlue = GlueHandler(logger: partnerLogger)
        myGlue.partner = partnerGlue
        partnerGlue.partner = myGlue
        
        assert(partnerChannel.eventLoop === myChannel.eventLoop)
        myChannel.pipeline.addHandler(myGlue, position: .after(contextForInitialData.handler)).flatMap {
            partnerChannel.pipeline.handler(type: CloseOnErrorHandler.self)
        }.flatMap { errorHandler in
            partnerChannel.pipeline.addHandler(partnerGlue)
        }.whenFailure { error in
            self.gotError(error)

            partnerChannel.pipeline.fireErrorCaught(error)
            contextForInitialData.fireErrorCaught(error)
        }
        guard case .connected = self.state else {
            return
        }
        assert(myGlue.context != nil)
        assert(partnerGlue.context != nil)
        
        if bytes.readableBytes > 0 {
            contextForInitialData.fireChannelRead(self.wrapInboundOut(bytes))
            contextForInitialData.fireChannelReadComplete()
        }
        contextForInitialData.read()
    }