in Sources/NIOSSH/Child Channels/SSHChannelMultiplexer.swift [101:150]
func receiveMessage(_ message: SSHMessage) throws {
let channel: SSHChildChannel?
switch message {
case .channelOpen:
channel = try self.openNewChannel(initializer: self.childChannelInitializer)
case .channelOpenConfirmation(let message):
channel = try self.existingChannel(localID: message.recipientChannel)
case .channelOpenFailure(let message):
channel = try self.existingChannel(localID: message.recipientChannel)
case .channelEOF(let message):
channel = try self.existingChannel(localID: message.recipientChannel)
case .channelClose(let message):
channel = try self.existingChannel(localID: message.recipientChannel)
if channel == nil, let errorIndex = self.erroredChannels.firstIndex(of: message.recipientChannel) {
// This is the end of our need to keep track of the channel.
self.erroredChannels.remove(at: errorIndex)
}
case .channelWindowAdjust(let message):
channel = try self.existingChannel(localID: message.recipientChannel)
case .channelData(let message):
channel = try self.existingChannel(localID: message.recipientChannel)
case .channelExtendedData(let message):
channel = try self.existingChannel(localID: message.recipientChannel)
case .channelRequest(let message):
channel = try self.existingChannel(localID: message.recipientChannel)
case .channelSuccess(let message):
channel = try self.existingChannel(localID: message.recipientChannel)
case .channelFailure(let message):
channel = try self.existingChannel(localID: message.recipientChannel)
default:
// Not a channel message, we don't do anything more with this.
return
}
if let channel = channel {
channel.receiveInboundMessage(message)
}
}