in connect-proxy/Sources/ConnectProxy/ConnectHandler.swift [48:83]
func channelRead(context: ChannelHandlerContext, data: NIOAny) {
switch self.upgradeState {
case .idle:
self.handleInitialMessage(context: context, data: self.unwrapInboundIn(data))
case .beganConnecting:
// We got .end, we're still waiting on the connection
if case .end = self.unwrapInboundIn(data) {
self.upgradeState = .awaitingConnection(pendingBytes: [])
self.removeDecoder(context: context)
}
case .awaitingEnd(let peerChannel):
if case .end = self.unwrapInboundIn(data) {
// Upgrade has completed!
self.upgradeState = .upgradeComplete(pendingBytes: [])
self.removeDecoder(context: context)
self.glue(peerChannel, context: context)
}
case .awaitingConnection(var pendingBytes):
// We've seen end, this must not be HTTP anymore. Danger, Will Robinson! Do not unwrap.
self.upgradeState = .awaitingConnection(pendingBytes: [])
pendingBytes.append(data)
self.upgradeState = .awaitingConnection(pendingBytes: pendingBytes)
case .upgradeComplete(pendingBytes: var pendingBytes):
// We're currently delivering data, keep doing so.
self.upgradeState = .upgradeComplete(pendingBytes: [])
pendingBytes.append(data)
self.upgradeState = .upgradeComplete(pendingBytes: pendingBytes)
case .upgradeFailed:
break
}
}