3.4.5.1.1 Receiving a KeepAlive-GET-Request (Handshake)

Upon receipt of a KeepAlive-GET-Request, the server transitions the ConnectionState and GetSessionState to the 'Connected' state. If the GetSessionState is uninitialized, the ConnectionEstablishment timer MUST be started.

The server validates the KeepAlive-GET-Request message (see section 2.2.3.1) using the following procedure:

  1. The server MUST validate the KeepAlive-GET-Request-URI (see section 2.2.3.1.1) and extract the version, server name, virtual connection GUID, encapsulation type, content length, and Request ID. If the parsing fails, it is a protocol error and the server MUST close the connections (see section 3.3.4.2).

  2. The server SHOULD<30> check the KeepAlive-Encapsulation-Version and send a KeepAlive-Response with a status code of 400. See section 3.4.5.1.1.2. If the version does not equal the required version (see section 2.2.3.1.1.2).

  3. If the encapsulation type is not KeepAlive, it is a protocol error and the virtual connection MUST be closed.

  4. The server SHOULD<31> verify that the server name in the message equals its own name and close the virtual connection if the names are not equal.

  5. The server SHOULD ignore the Request ID.

  6. The server MUST examine the Virtual-Connection-GUID to validate that the KeepAlive-GET-Request is a new connection request. The Virtual-Connection-GUID SHOULD be maintained in the VirtualConnectionGUIDList. If the PostSessionState is 'Connected', then the Virtual-Connection-GUID SHOULD be found in the VirtualConnectionGUIDList. If the PostSessionState is uninitialized, the Virtual-Connection-GUID MUST be new and the Virtual-Connection-GUID SHOULD be added to VirtualConnectionGUIDList. If the PostSessionState is anything else, it is a protocol error and the server closes the virtual KeepAlive connection (see section 3.3.4.2).

If the PostSessionState is not 'Connected', the processing stops here.

If the PostSessionState is 'Connected', the virtual connection is established. The server transitions the GetSessionState and the PostSessionState and the ConnectionState to the 'Established' state. The server clears the ConnectionEstablishment timer.

The server continues as described in section 3.4.5.1.1.1 to complete the handshake by sending a KeepAlive-GET-Response.