mutating func send()

in Sources/NIOSSH/Key Exchange/SSHKeyExchangeStateMachine.swift [181:203]


    mutating func send(keyExchange message: SSHMessage.KeyExchangeMessage) {
        switch self.state {
        case .idle:
            self.state = .keyExchangeSent(message: message)
        case .keyExchangeReceived(let exchanger, let negotiated, let expectingGuess):
            switch self.role {
            case .server:
                // Ok, we're waiting for a key exchange init message.
                if expectingGuess {
                    self.state = .awaitingKeyExchangeInitInvalidGuess(exchange: exchanger, negotiated: negotiated)
                } else {
                    self.state = .awaitingKeyExchangeInit(exchange: exchanger, negotiated: negotiated)
                }

            case .client:
                // We're going to send a key exchange init message.
                self.state = .awaitingKeyExchangeInit(exchange: exchanger, negotiated: negotiated)
            }
        case .keyExchangeSent, .awaitingKeyExchangeInit, .awaitingKeyExchangeInitInvalidGuess, .keyExchangeInitReceived, .keyExchangeInitSent, .keysExchanged, .newKeysSent, .newKeysReceived, .complete:
            // This is a precondition not a throw because we control the sending of this message.
            preconditionFailure("Cannot send key exchange message after idle")
        }
    }