18.104.22.168.2 Receiving an SSTP_MSG_CALL_CONNECT_REQUEST Message
If CurrentState 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_Connect_Request_Pending:
Process the message as indicated later in this section.
Else if CurrentState has any other value:
Change CurrentState to Call_Abort_In_Progress_1.
Send an SSTP_MSG_CALL_ABORT (section 2.2.13) message.
Start the TIMER_VAL_ABORT_STATE_TIMER_1 timer (section 22.214.171.124).
Change CurrentState to Call_Abort_Pending.
If CurrentState is set to Server_Connect_Request_Pending, the following message processing takes place.
The SSTP_MSG_CALL_CONNECT_REQUEST message MUST be either the first message that is received by an SSTP server, or it MUST be received in response to the Call Connect Negative Acknowledgment message that is sent by the server. The Call Connect Request message MUST contain an Encapsulated Protocol ID attribute with Protocol ID = PPP. For more information about PPP, see [RFC1661].
If the preceding conditions are true, the server SHOULD:
Receive the PPP control frames from the client.
Request the PPP layer to start the FSM.
The server MUST:
Start the negotiation timer.
Respond with an SSTP_MSG_CALL_CONNECT_ACK (section 2.2.10) message.
Change CurrentState to Server_Call_Connected_Pending.
If the message is invalid due to any of the following conditions, an SSTP_MSG_CALL_CONNECT_NAK (section 2.2.12) message MUST be sent. This message contains the Status Info attributes (section 2.2.8) for all attributes that are not acceptable to the server.
If the message contains an attribute with Attribute ID equal to SSTP_ATTRIB_STATUS_INFO and status not equal to ATTRIB_STATUS_NO_ERROR, then Attribute ID is set to SSTP_ATTRIB_STATUS_INFO and the status field is set to ATTRIB_STATUS_STATUS_INFO_NOT_SUPPORTED_IN_MSG.
If the length of an attribute is incorrect, then the Attribute ID with invalid length in the Call Connect Request message is used for the Attribute ID in this message, with the status field set to ATTRIB_STATUS_INVALID_ATTRIB_VALUE_LENGTH.
If there is a duplicate attribute, then the Attribute ID of the duplicate attribute received in the Call Connect Request message is used for the Attribute ID in this message, with the status field set to ATTRIB_STATUS_DUPLICATE_ATTRIBUTE.
If the attribute is not recognized on the server side, then the unrecognized Attribute ID received in the Call Connect Request message is used in the Attribute ID of this message, with the status field set to ATTRIB_STATUS_UNRECOGNIZED_ATTRIBUTE.
If the encapsulated protocol is not supported, then Attribute ID is set to SSTP_ATTRIB_ENCAPSULATED_PROTOCOL_ID, and status is set to ATTRIB_STATUS_VALUE_NOT_SUPPORTED.
If the encapsulated protocol Attribute ID is not received in the Call Connect Request message, then the Attribute ID is set to SSTP_ATTRIB_STATUS_INFO and status is set to ATTRIB_STATUS_REQUIRED_ATTRIBUTE_MISSING.
The server SHOULD maintain an implementation-dependent retry counter<14> that limits the number of times it sends a NAK to an unacceptable Call Connect Request message. If this count is exceeded, then the server MUST send a Call Abort message and start the process of bringing down (disconnecting) the connection. In this case, the Call Abort message MUST have the following field values:
The Attribute ID is set to SSTP_ATTRIB_STATUS_INFO and the status field is set to ATTRIB_STATUS_RETRY_COUNT_EXCEEDED.