2.2.8 Status Info Attribute

The following diagram specifies the format that MUST be used for the Status Info attribute. Both the client and server use this attribute to indicate to each other the reason for failure and the unsupported attributes. This attribute can be used to indicate the status of only one attribute at a time; that is, if the server wants to indicate the status of multiple attributes, then it is necessary to respond with multiple Status Info attributes.

The fields of the structure MUST be transmitted as bytes from left to right.


0


1


2


3


4


5


6


7


8


9

1
0


1


2


3


4


5


6


7


8


9

2
0


1


2


3


4


5


6


7


8


9

3
0


1

Reserved

Attribute ID

LengthPacket

Reserved1

AttribID

Status

AttribValue (variable)

...

Reserved (1 byte): This 8-bit field is reserved for future use. MUST be set to zero when sent and MUST be ignored on receipt.

Attribute ID (1 byte): An 8-bit (1-byte) field that is used to specify the type of attribute; its value MUST be 0x02 for the Status Info attribute.

LengthPacket (2 bytes): A 16-bit unsigned integer in network byte order that packs data for two fields, configured in the following format.

0

1

2

3

4

5

6

7

8

9

1

0

1

2

3

4

5

R

Length

R (4 bits): This 4-bit field is reserved for future use. MUST be set to zero when sent and MUST be ignored on receipt.

Length (12 bits): A 12-bit unsigned integer in network byte order that MUST specify the length of the Status Info attribute. Its value MUST be the length of the AttribValue field plus 12.

Reserved1 (3 bytes): This 24-bit field is reserved for future use. MUST be set to zero when sent and MUST be ignored on receipt.

AttribID (1 byte): A 1-byte field that specifies the attribute ID whose status is given by the Status Info attribute. Its value MUST be one of the following.

Name

Value

SSTP_ATTRIB_NO_ERROR

0x00

SSTP_ATTRIB_ENCAPSULATED_PROTOCOL_ID

0x01

SSTP_ATTRIB_STATUS_INFO

0x02

SSTP_ATTRIB_CRYPTO_BINDING

0x03

SSTP_ATTRIB_CRYPTO_BINDING_REQ

0x04

For example, if the Encapsulated Protocol ID that is suggested by the client is not acceptable to the server, then it replies with a Status Info attribute that contains AttribID = 0x01 (that is, SSTP_ATTRIB_ENCAPSULATED_PROTOCOL_ID), Status = 0x00000004 (that is, ATTRIB_STATUS_VALUE_NOT_SUPPORTED), and AttribValue = the value proposed by the client.

Status (4 bytes): A 4-byte field that specifies the reason for the failure. Its value MUST be one of the following.

Value

Meaning

ATTRIB_STATUS_NO_ERROR

0x00000000

This Status value SHOULD be used as part of the Status Info attribute to indicate the scenario in which there is no error event to report. For example, the higher-layer initiated disconnect is a normal scenario. In such a case, the SSTP peer can send a Status Info attribute that has this status value.

ATTRIB_STATUS_DUPLICATE_ATTRIBUTE

0x00000001

This status value MUST be used to indicate multiple occurrences of a specific attribute. The AttribID of the Status Info attribute denotes the attribute that is occurring more than one time in the message.

ATTRIB_STATUS_UNRECOGNIZED_ATTRIBUTE

0x00000002

This status value MUST be used to indicate the presence of an unrecognized attribute that is received from the far end. The AttribID field of the Status Info attribute specifies the attribute that is received from the far end that is not recognized by the SSTP peer.

ATTRIB_STATUS_INVALID_ATTRIB_VALUE_LENGTH

0x00000003

This status value MUST be used when the length of the attribute (specified by AttribID in the Status Info attribute) that is received from the SSTP far end differs from the expected length of the attribute defined in each attribute id section.

ATTRIB_STATUS_VALUE_NOT_SUPPORTED

0x00000004

This status value MUST be used when the value of the attribute (specified by AttribID in the Status Info attribute) that is received from the SSTP far end is not supported by this SSTP peer.

ATTRIB_STATUS_UNACCEPTED_FRAME_RECEIVED

0x00000005

This status value MUST be used when the message type that is received from the far end is not acceptable for the current state of the SSTP peer.

ATTRIB_STATUS_RETRY_COUNT_EXCEEDED

0x00000006

This status value MUST be used when the connection is being aborted because the retry count is exceeded for an operation. For example, if the SSTP client failed to provide the acceptable values for the attributes in the connect request that are rejected by the server with a call connect NACK for a predefined number<2> of consecutive times, then the server aborts the connection and uses this status value.

ATTRIB_STATUS_INVALID_FRAME_RECEIVED

0x00000007

This status MUST be used to stop connections when the message type or the frame format that is received from the SSTP far end is not recognized by the SSTP peer.

ATTRIB_STATUS_NEGOTIATION_TIMEOUT

0x00000008

This status MUST be used to abort connections when the far end has not responded in a timely manner and a time-out results. See sections 3.2.2 and 3.1.2 for timeout value in various scenarios.

ATTRIB_STATUS_ATTRIB_NOT_SUPPORTED_IN_MSG

0x00000009

 This status MUST be used while sending a SSTP_MSG_CALL_ABORT when the attribute that is received from the far end is not supported in the specified message or the expected attribute is not received in the specified message. For example:

  • The SSTP server receives an SSTP_MSG_CALL_CONNECTED message with one of the attributes with attribute Id equal to SSTP_ATTRIB_STATUS_INFO and status not equal to ATTRIB_STATUS_NO_ERROR.

  • The SSTP server receives an SSTP_MSG_CALL_CONNECTED message not having Crypto Binding attribute.

ATTRIB_STATUS_REQUIRED_ATTRIBUTE_MISSING

0x0000000a

This status MUST be used in the NACK of a Call Connect Request message when a mandatory attribute for the message was not sent by the far end. The SSTP client MUST send SSTP_ATTRIB_ENCAPSULATED_PROTOCOL_ID as a part of SSTP_MSG_CALL_CONNECT_REQUEST. If this value is not present, then the SSTP server MUST send an SSTP_MSG_CALL_CONNECT_NAK that has a status of this value and an AttribID of SSTP_ATTRIB_ENCAPSULATED_PROTOCOL_ID.

ATTRIB_STATUS_STATUS_INFO_NOT_SUPPORTED_IN_MSG

0x0000000b

This status MUST be used while sending a NACK when the SSTP server receives an SSTP_MSG_CALL_CONNECT_REQUEST message, and one of the attributes with attribute ID equal to SSTP_ATTRIB_STATUS_INFO has status not equal to ATTRIB_STATUS_NO_ERROR.

AttribValue (variable): A variable-length field in network byte order that specifies the original value of the attribute that is proposed by the client in the Call Connect Request message that is sent back by the server in the Call Connect Negative Acknowledgment message. It is not present (that is, it is of zero length) in the Call Connect Negative Acknowledgment message if the mandatory attribute is not sent by the client in the Call Connect Request message; or if the attribute that is sent by the client in the Call Connect Request message is not understood by the server. The mandatory and optional attributes for a given message are covered in the respective message description. This field MUST NOT be present (that is, it is of zero length) in any other case where the Status Info attribute is present. The maximum length of this field MUST be 64 bytes. If the original attribute is greater than 64 bytes, only the first 64 bytes are sent back.