3.3.5.2.3 Receiving an SSTP_MSG_CALL_CONNECTED Message

If the CurrentState state variable (described in section 3.3.1) is set to Call_Abort_Timeout_Pending, Call_Abort_Pending, Call_Disconnect_Ack_Pending, or Call_Disconnect_Timeout_Pending:

  • Ignore the message.

If CurrentState is set to Server_Call_Connected_Pending:

  • Process the message as indicated later in this section.

Else if CurrentState has any other value:

  1. Change CurrentState to Call_Abort_In_Progress_1.

  2. Send an SSTP_MSG_CALL_ABORT (section 2.2.13) message.

  3. Start the TIMER_VAL_ABORT_STATE_TIMER_1 timer (section 3.1.2.1)

  4. Change CurrentState to Call_Abort_Pending.

If CurrentState is Server_Call_Connected_Pending, the following message processing takes place.

The SSTP_MSG_CALL_CONNECTED message MUST be received by an SSTP server only in response to a Call Connect Acknowledge message that is sent by the SSTP server before the negotiation timer expires.

The server MUST verify the following:

  • A Crypto Binding attribute is present.

  • The Crypto Binding attribute contains the same nonce that it sent in the Call Connect Acknowledge message.

  • The Crypto Binding attribute contains the hash of the certificate that the server used for establishing the HTTPS connection, ServerCertificateHash.

  • The Crypto Binding attribute contains a hash protocol that is supported by the server and specified in the ServerHashProtocolSupported state variable described in section 3.3.1 (that is, it uses one of the hash protocols that it inserted into the Call Connect Acknowledge message).

  • The server MUST verify that the binding attribute contains a valid Compound MAC. To accomplish this, the server computes a new compound MAC (3.2.5.2) using the stored ServerHLAKKey variable from the connection table and then compares the same against the compound MAC sent by the client inside SSTP_MSG_CALL_CONNECTED.

If all the preceding checks passed, then the server updates CurrentState to Server_Call_Connected. The server SHOULD<17> allow the PPP data frames to pass through only if the server has received a valid Call Connected message from the client in response to its Call Connect Acknowledge message. Until a valid Call Connected message is received, the server MUST allow only PPP control frames to flow through, and all PPP data frames will be ignored (or discarded). For more information about PPP, see [RFC1661].

If any of the preceding checks fail, the server MUST start the abort processing procedure by sending a Call Abort message. The server starts the TIMER_VAL_ABORT_STATE_TIMER_1 timer (section 3.1.2.1) and changes CurrentState to Call_Abort_Pending.

The Call Abort message MUST have the Attribute Id field set to SSTP_ATTRIB_STATUS_INFO and the status field MUST be set to ATTRIB_STATUS_ATTRIB_NOT_SUPPORTED_IN_MSG under the following condition: The crypto binding attribute is not present OR an invalid length is given for the attribute OR the Attribute Id is set to SSTP_ATTRIB_STATUS_INFO and the status is not equal to ATTRIB_STATUS_NO_ERROR.

The Call Abort message MUST have the attribute id set to SSTP_ATTRIB_CRYPTO_BINDING and the status field MUST be set to ATTRIB_STATUS_VALUE_NOT_SUPPORTED under the following condition: The nonce is not matching OR the certificate does not match OR the hash algorithm does not match OR the Compound MAC is invalid.

If an unacceptable packet is received, error handling SHOULD occur. For error handling, see section 3.1.5.1. For security considerations, see section 5.