3.3.4.1.2 Changing Resource Handler Availability State for a Fanout Session

As specified in section 3.3.5.6, the receiving session has a ResourceHandlerAvailability state variable for each addressed fanout device entry contained in the FanoutAddressingList collection, and an AggregateResourceHandlerAvailability state variable representing the overall readiness of all fanout resource handlers.

The higher-layer can change the ResourceHandlerAvailability state for a resource handler which is the destination of a local multi-drop session. For such destinations, the higher-layer MUST provide notifications of changes in resource availability, and set the associated ResourceHandlerAvailability state as follows:

ResourceHandlerAvailability state

Description

ready

Can accept and process application data

notReady

Temporarily inaccessible, or not ready to accept and process application data

fault

Inaccessible, or has failed, or access has been denied by the higher-layer

When the higher-layer indicates the loss of the resource handler because of a fault, it MUST supply an application defined StatusId for the resultant SessionStatus command to be sent to the session originator. The StatusId MUST be one of QuotaWouldBeExceeded (0x04) or LockedOut (0x05).

For those FanoutAddressingList entries which correspond to outbound single-hop sessions, as specified in section 3.3.5.6.1, the associated ResourceHandlerAvailability state variable indicates the state of the locally originated outbound single-hop session. For those sessions, the ResourceHandlerAvailability change notifications are generated by the relay server, as follows:

ResourceHandlerAvailability state

Description

ready

Generated as specified in section 3.3.5.7 when the outbound session state is set to ‘ready’

notReady

Generated as specified in section 3.3.5.7 when the outbound session state is set to ‘opening’, ‘suspended’, or ‘blocked’

fault

Generated as specified in:

  • section 3.3.5.7 when the session state is removed

  • section 3.3.5.8 when a SessionStatus command is received

  • section 3.3.5.9 when session state is removed

  • section 3.3.7.1 when session state is removed


When the specified sections indicate the loss of a single-hop session because of a fault, the StatusId for the resultant SessionStatus command to be sent to the session originator is supplied as specified in the corresponding section. If the Version state variable of the SSTP connection (1) to the session originator indicates that the originator’s connection (1) Version is SSTP 1.6, then the higher-layer MAY aggregate the list of faulting resources into a single SessionStatus reply to the session originator by supplying multiple devices in the FanoutDeviceIndexes field of the SessionStatus command rather than sending individual SessionStatus replies for each device<18>.

The receiving session MUST process the notification of change to a ResourceHandlerAvailability state as follows:

New ResourceHandlerAvailability state

Session Receiver Action

ready

Set the AggregateResourceHandlerAvailability state to ‘ready’ if the ResourceHandlerAvailability state for all entries in the FanoutAddressingList is ‘ready’.

notReady

Set the AggregateResourceHandlerAvailability state to ‘notReady’ if the ResourceHandlerAvailability state for any entry in the FanoutAddressingList is ‘notReady’.

fault

  • MUST send a SessionStatus command to the session originator. The StatusId field MUST contain the StatusId provided with the fault notification.

    • If the StatusId is QuotaWouldBeExceeded (0x04) or LockedOut (0x05), the device URL and identity URL of the failed resource handler as provided by the higher-layer MUST be set in the DeviceURL and IdentityURL fields.

    • If the StatusId is one of DNSLookupFailed (0x01), HostNotReachable (0x02), or ConnectionClosed (0x03), the RelayURL of the failed remote relay as provided by the originator of the notification MUST be set in the DeviceURL field.

  • MUST mark the resource handler(s) from the FanoutAddressingList as unavailable for the receiving session.

    • If all entries in the FanoutAddressingList are marked unavailable then the session receiver MUST send a Close command with ReasonId of EmptySession (0x15) to the session originator, and remove all session state.

If session state still exists, and these actions have caused a change to the AggregateResourceHandlerAvailability state for the receiving session, the session MUST then process the new AggregateResourceHandlerAvailability as follows:

Session state(session receiver)

New AggregateResourceHandlerAvailability

Session Receiver Action

suspended

ready

MUST send OpenResponse with ResponseId of StartSending (0x09). Session state MUST be set to ‘ready’

suspended

notReady

None

ready

ready

None

ready

notReady

MUST send OpenResponse with ResponseId of StopSending (0x0a). Session state MUST be set to ‘blocked’

blocked

ready

MUST send OpenResponse with ResponseId of  StartSending (0x09). Session state MUST be set to ‘ready’

blocked

notReady

None