3.3.5.6.1 Single-Hop Processing

For each FanoutAddressingList entry containing a remote relay RelayURL, the higher-layer MUST determine if there is a suitable SSTP connection (1) with the designated remote relay server that is in the ‘established’ state.

The FanoutDeviceEntries field of the received FanoutOpen MUST be parsed as specified in section 2.2.6.1 based upon the connection (1) Version state variable of the receiving connection (1). If the version-specific parsing does not process exactly the number of bytes indicated by the FanoutOpen CommandLength field, then the recipient MUST send a ConnectClose as specified in section 3.1.4.2 with a ReasonId of ProtocolError (0x03).

If a connection (1) in the ‘established’ state to the remote relay server is located, the relay server MUST open a fanout session to that server, as specified in section 3.1.4.3.3. The OutboundFanoutAddressingList supplied to the outbound single-hop session MUST be those addressing entries from the FanoutAddressingList for the receiving session of section 3.3.5.6, where the RelayURL matches the URL of the remote relay on the SSTP connection (1).

If no such connection (1) exists, the server MUST attempt to establish an underlying transport to the destination and establish an SSTP connection (1), as specified in section 3.1.4.1. If a transport connection (2) to a relay server cannot be established, the higher-layer MUST generate a ResourceHandlerAvailability fault notification for the specific FanoutAddressingList entry, specifying a failure code of either DNSLookupFailed (0x01), or HostNotReachable (0x02), and the RelayURL of the unreachable relay, to be processed as specified in section 3.3.4.1.2.