1875 lines
55 KiB
C
1875 lines
55 KiB
C
|
/*
|
||
|
* domain.h
|
||
|
*
|
||
|
* Copyright (c) 1993 - 1995 by DataBeam Corporation, Lexington, KY
|
||
|
*
|
||
|
* Abstract:
|
||
|
* This is the interface file for the domain class. This class contains
|
||
|
* all code necessary to maintain a domain information base within the
|
||
|
* MCS system. When a domain object is first created, it is completely
|
||
|
* empty. That is, it has no user attachments, no MCS connections, and
|
||
|
* therefore no outstanding resources, such as channels and tokens.
|
||
|
*
|
||
|
* A word of caution about terminology. Throughout the MCS documentation
|
||
|
* the word "attachment" is used in conjunction with a USER attachment. The
|
||
|
* word "connection" is used in conjunction with a TRANSPORT connection. In
|
||
|
* this class, the two types of "attachments" are NOT differentiated (most
|
||
|
* of the time). They are both referred to as attachments. When deleting
|
||
|
* an attachment, it is necessary to know the difference, however, and so
|
||
|
* there is an enumerated type (AttachmentType) to distinguish. The type
|
||
|
* of each attachment is stored in a dictionary for easy access (see
|
||
|
* description of AttachmentType below).
|
||
|
*
|
||
|
* This class keeps a list of "attachments" that are hierarchically below
|
||
|
* the local provider within the domain. It also keeps a pointer to the
|
||
|
* one attachment that is hierarchically above the local provider (if any).
|
||
|
*
|
||
|
* Since this class inherits from CommandTarget, it processes MCS commands
|
||
|
* as member function calls (see cmdtar.h for a description of how this
|
||
|
* mechanism works). In essence, domain objects are just big command
|
||
|
* routers who react to incoming commands according to the contents of the
|
||
|
* information base. That information base, in turn, is modified by the
|
||
|
* commands that are handled.
|
||
|
*
|
||
|
* Domain objects keep lists of both channel objects and token objects,
|
||
|
* who maintain information about the current state of various channels
|
||
|
* and tokens. Objects of this class are the heart of MCS.
|
||
|
*
|
||
|
* Caveats:
|
||
|
* None.
|
||
|
*
|
||
|
* Author:
|
||
|
* James P. Galvin, Jr.
|
||
|
*/
|
||
|
|
||
|
#ifndef _DOMAIN_
|
||
|
#define _DOMAIN_
|
||
|
|
||
|
/*
|
||
|
* Interface files.
|
||
|
*/
|
||
|
#include "userchnl.h"
|
||
|
#include "privchnl.h"
|
||
|
#include "token.h"
|
||
|
#include "randchnl.h"
|
||
|
#include "attmnt.h"
|
||
|
|
||
|
/*
|
||
|
* This enumeration defines the errors that a domain object can return when
|
||
|
* instructed to do something by its creator.
|
||
|
*/
|
||
|
typedef enum
|
||
|
{
|
||
|
DOMAIN_NO_ERROR,
|
||
|
DOMAIN_NOT_HIERARCHICAL,
|
||
|
DOMAIN_NO_SUCH_CONNECTION,
|
||
|
DOMAIN_CONNECTION_ALREADY_EXISTS
|
||
|
} DomainError;
|
||
|
typedef DomainError * PDomainError;
|
||
|
|
||
|
/*
|
||
|
* This enumeration defines the different merge states that a domain can be in
|
||
|
* at any given time. They can be described as follows:
|
||
|
*
|
||
|
* MERGE_INACTIVE
|
||
|
* There is no merge operation underway. This is the normal operational
|
||
|
* state.
|
||
|
* MERGE_USER_IDS
|
||
|
* The domain is currently merging user IDs into the upper domain.
|
||
|
* MERGE_STATIC_CHANNELS
|
||
|
* The domain is currently merging static channels into the upper domain.
|
||
|
* MERGE_ASSIGNED_CHANNELS
|
||
|
* The domain is currently merging assigned channels into the upper domain.
|
||
|
* MERGE_PRIVATE_CHANNELS
|
||
|
* The domain is currently merging private channels into the upper domain.
|
||
|
* MERGE_TOKENS
|
||
|
* The domain is currently merging tokens into the upper domain.
|
||
|
* MERGE_COMPLETE
|
||
|
* The merge operation is complete (this is a transitional state).
|
||
|
*/
|
||
|
typedef enum
|
||
|
{
|
||
|
MERGE_INACTIVE,
|
||
|
MERGE_USER_IDS,
|
||
|
MERGE_STATIC_CHANNELS,
|
||
|
MERGE_ASSIGNED_CHANNELS,
|
||
|
MERGE_PRIVATE_CHANNELS,
|
||
|
MERGE_TOKENS,
|
||
|
MERGE_COMPLETE
|
||
|
} MergeState;
|
||
|
typedef MergeState * PMergeState;
|
||
|
|
||
|
/*
|
||
|
* This collection type is used to hold the height of the domain across
|
||
|
* various downward attachments. The Domain object needs to know this in order
|
||
|
* to calculate the effect of attachment loss on the height of the domain.
|
||
|
*/
|
||
|
class CDomainHeightList2 : public CList2
|
||
|
{
|
||
|
DEFINE_CLIST2(CDomainHeightList2, UINT, PConnection)
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
* This is the class definition for the Domain class.
|
||
|
*/
|
||
|
class Domain
|
||
|
{
|
||
|
public:
|
||
|
|
||
|
Domain ();
|
||
|
~Domain ();
|
||
|
|
||
|
BOOL IsTopProvider(void) { return (NULL == m_pConnToTopProvider); }
|
||
|
|
||
|
Void GetDomainParameters (
|
||
|
PDomainParameters domain_parameters,
|
||
|
PDomainParameters min_domain_parameters,
|
||
|
PDomainParameters max_domain_parameters);
|
||
|
Void BindConnAttmnt (
|
||
|
PConnection originator,
|
||
|
BOOL upward_connection,
|
||
|
PDomainParameters domain_parameters);
|
||
|
Void PlumbDomainIndication (
|
||
|
PConnection originator,
|
||
|
ULong height_limit);
|
||
|
Void ErectDomainRequest (
|
||
|
PConnection originator,
|
||
|
ULong height_in_domain,
|
||
|
ULong throughput_interval);
|
||
|
Void MergeChannelsRequest (
|
||
|
PConnection originator,
|
||
|
CChannelAttributesList *merge_channel_list,
|
||
|
CChannelIDList *purge_channel_list);
|
||
|
Void MergeChannelsConfirm (
|
||
|
PConnection originator,
|
||
|
CChannelAttributesList *merge_channel_list,
|
||
|
CChannelIDList *purge_channel_list);
|
||
|
Void PurgeChannelsIndication (
|
||
|
PConnection originator,
|
||
|
CUidList *purge_user_list,
|
||
|
CChannelIDList *purge_channel_list);
|
||
|
Void MergeTokensRequest (
|
||
|
PConnection originator,
|
||
|
CTokenAttributesList *merge_token_list,
|
||
|
CTokenIDList *purge_token_list);
|
||
|
Void MergeTokensConfirm (
|
||
|
PConnection originator,
|
||
|
CTokenAttributesList *merge_token_list,
|
||
|
CTokenIDList *purge_token_list);
|
||
|
Void PurgeTokensIndication (
|
||
|
PConnection originator,
|
||
|
CTokenIDList *purge_token_list);
|
||
|
Void DisconnectProviderUltimatum (
|
||
|
CAttachment *originator,
|
||
|
Reason reason);
|
||
|
Void RejectUltimatum (
|
||
|
PConnection originator,
|
||
|
Diagnostic diagnostic,
|
||
|
PUChar octet_string_address,
|
||
|
ULong octet_string_length);
|
||
|
Void AttachUserRequest (
|
||
|
CAttachment *originator);
|
||
|
Void AttachUserConfirm (
|
||
|
PConnection originator,
|
||
|
Result result,
|
||
|
UserID uidInitiator);
|
||
|
Void DetachUserRequest (
|
||
|
CAttachment *originator,
|
||
|
Reason reason,
|
||
|
CUidList *user_id_list);
|
||
|
Void DetachUserIndication (
|
||
|
PConnection originator,
|
||
|
Reason reason,
|
||
|
CUidList *user_id_list);
|
||
|
Void ChannelJoinRequest (
|
||
|
CAttachment *originator,
|
||
|
UserID uidInitiator,
|
||
|
ChannelID channel_id);
|
||
|
Void ChannelJoinConfirm (
|
||
|
PConnection originator,
|
||
|
Result result,
|
||
|
UserID uidInitiator,
|
||
|
ChannelID requested_id,
|
||
|
ChannelID channel_id);
|
||
|
Void ChannelLeaveRequest (
|
||
|
CAttachment *originator,
|
||
|
CChannelIDList *channel_id_list);
|
||
|
Void ChannelConveneRequest (
|
||
|
CAttachment *originator,
|
||
|
UserID uidInitiator);
|
||
|
Void ChannelConveneConfirm (
|
||
|
PConnection originator,
|
||
|
Result result,
|
||
|
UserID uidInitiator,
|
||
|
ChannelID channel_id);
|
||
|
Void ChannelDisbandRequest (
|
||
|
CAttachment *originator,
|
||
|
UserID uidInitiator,
|
||
|
ChannelID channel_id);
|
||
|
Void ChannelDisbandIndication (
|
||
|
PConnection originator,
|
||
|
ChannelID channel_id);
|
||
|
Void ChannelAdmitRequest (
|
||
|
CAttachment *originator,
|
||
|
UserID uidInitiator,
|
||
|
ChannelID channel_id,
|
||
|
CUidList *user_id_list);
|
||
|
Void ChannelAdmitIndication (
|
||
|
PConnection originator,
|
||
|
UserID uidInitiator,
|
||
|
ChannelID channel_id,
|
||
|
CUidList *user_id_list);
|
||
|
Void ChannelExpelRequest (
|
||
|
CAttachment *originator,
|
||
|
UserID uidInitiator,
|
||
|
ChannelID channel_id,
|
||
|
CUidList *user_id_list);
|
||
|
Void ChannelExpelIndication (
|
||
|
PConnection originator,
|
||
|
ChannelID channel_id,
|
||
|
CUidList *user_id_list);
|
||
|
Void SendDataRequest (
|
||
|
CAttachment *originator,
|
||
|
UINT type,
|
||
|
PDataPacket data_packet);
|
||
|
Void SendDataIndication (
|
||
|
PConnection originator,
|
||
|
UINT type,
|
||
|
PDataPacket data_packet);
|
||
|
Void TokenGrabRequest (
|
||
|
CAttachment *originator,
|
||
|
UserID uidInitiator,
|
||
|
TokenID token_id);
|
||
|
Void TokenGrabConfirm (
|
||
|
PConnection originator,
|
||
|
Result result,
|
||
|
UserID uidInitiator,
|
||
|
TokenID token_id,
|
||
|
TokenStatus token_status);
|
||
|
Void TokenInhibitRequest (
|
||
|
CAttachment *originator,
|
||
|
UserID uidInitiator,
|
||
|
TokenID token_id);
|
||
|
Void TokenInhibitConfirm (
|
||
|
PConnection originator,
|
||
|
Result result,
|
||
|
UserID uidInitiator,
|
||
|
TokenID token_id,
|
||
|
TokenStatus token_status);
|
||
|
Void TokenGiveRequest (
|
||
|
CAttachment *originator,
|
||
|
PTokenGiveRecord pTokenGiveRec);
|
||
|
Void TokenGiveIndication (
|
||
|
PConnection originator,
|
||
|
PTokenGiveRecord pTokenGiveRec);
|
||
|
Void TokenGiveResponse (
|
||
|
CAttachment *originator,
|
||
|
Result result,
|
||
|
UserID receiver_id,
|
||
|
TokenID token_id);
|
||
|
Void TokenGiveConfirm (
|
||
|
PConnection originator,
|
||
|
Result result,
|
||
|
UserID uidInitiator,
|
||
|
TokenID token_id,
|
||
|
TokenStatus token_status);
|
||
|
Void TokenPleaseRequest (
|
||
|
CAttachment *originator,
|
||
|
UserID uidInitiator,
|
||
|
TokenID token_id);
|
||
|
Void TokenPleaseIndication (
|
||
|
PConnection originator,
|
||
|
UserID uidInitiator,
|
||
|
TokenID token_id);
|
||
|
Void TokenReleaseRequest (
|
||
|
CAttachment *originator,
|
||
|
UserID uidInitiator,
|
||
|
TokenID token_id);
|
||
|
Void TokenReleaseConfirm (
|
||
|
PConnection originator,
|
||
|
Result result,
|
||
|
UserID uidInitiator,
|
||
|
TokenID token_id,
|
||
|
TokenStatus token_status);
|
||
|
Void TokenTestRequest (
|
||
|
CAttachment *originator,
|
||
|
UserID uidInitiator,
|
||
|
TokenID token_id);
|
||
|
Void TokenTestConfirm (
|
||
|
PConnection originator,
|
||
|
UserID uidInitiator,
|
||
|
TokenID token_id,
|
||
|
TokenStatus token_status);
|
||
|
|
||
|
private:
|
||
|
Void LockDomainParameters (
|
||
|
PDomainParameters domain_parameters,
|
||
|
BOOL parameters_locked);
|
||
|
ChannelID AllocateDynamicChannel ();
|
||
|
BOOL ValidateUserID (
|
||
|
UserID user_id,
|
||
|
CAttachment *pOrigAtt);
|
||
|
Void PurgeDomain (
|
||
|
Reason reason);
|
||
|
Void DeleteAttachment (
|
||
|
CAttachment *pAtt,
|
||
|
Reason reason);
|
||
|
Void DeleteUser (
|
||
|
UserID user_id);
|
||
|
Void DeleteChannel (
|
||
|
ChannelID channel_id);
|
||
|
Void DeleteToken (
|
||
|
TokenID token_id);
|
||
|
Void ReclaimResources ();
|
||
|
Void MergeInformationBase ();
|
||
|
Void SetMergeState (
|
||
|
MergeState merge_state);
|
||
|
Void AddChannel (
|
||
|
PConnection pConn,
|
||
|
PChannelAttributes merge_channel,
|
||
|
CChannelAttributesList *merge_channel_list,
|
||
|
CChannelIDList *purge_channel_list);
|
||
|
Void AddToken (
|
||
|
PTokenAttributes merge_token,
|
||
|
CTokenAttributesList *merge_token_list,
|
||
|
CTokenIDList *purge_token_list);
|
||
|
Void CalculateDomainHeight ();
|
||
|
|
||
|
MergeState Merge_State;
|
||
|
UShort Outstanding_Merge_Requests;
|
||
|
UINT Number_Of_Users;
|
||
|
UINT Number_Of_Channels;
|
||
|
UINT Number_Of_Tokens;
|
||
|
DomainParameters Domain_Parameters;
|
||
|
BOOL Domain_Parameters_Locked;
|
||
|
|
||
|
PConnection m_pConnToTopProvider;
|
||
|
CAttachmentList m_AttachmentList;
|
||
|
|
||
|
CAttachmentQueue m_AttachUserQueue;
|
||
|
CConnectionQueue m_MergeQueue;
|
||
|
|
||
|
CChannelList2 m_ChannelList2;
|
||
|
CTokenList2 m_TokenList2;
|
||
|
|
||
|
UINT m_nDomainHeight;
|
||
|
CDomainHeightList2 m_DomainHeightList2;
|
||
|
|
||
|
RandomChannelGenerator
|
||
|
Random_Channel_Generator;
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
* Domain ()
|
||
|
*
|
||
|
* Functional Description:
|
||
|
* This is the constructor for the domain class. It initializes the state
|
||
|
* of the domain, which at creation is empty. It also initializes the
|
||
|
* domain parameters structure that will be used by this domain for all
|
||
|
* future parameters and negotiation.
|
||
|
*
|
||
|
* Formal Parameters:
|
||
|
* None.
|
||
|
*
|
||
|
* Return Value:
|
||
|
* None.
|
||
|
*
|
||
|
* Side Effects:
|
||
|
* None.
|
||
|
*
|
||
|
* Caveats:
|
||
|
* None.
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
* ~Domain ()
|
||
|
*
|
||
|
* Functional Description:
|
||
|
* This is the destructor for the domain class. It purges the entire
|
||
|
* domain by first sending disconnect provider ultimatums to ALL
|
||
|
* attachments (both user attachments and MCS connections). It then frees
|
||
|
* up all resources in use by the domain (which is just objects in its
|
||
|
* various containers).
|
||
|
*
|
||
|
* Note that doing this will result in all user attachments and MCS
|
||
|
* connections being broken. Furthermore, all providers that are
|
||
|
* hierarchically below this one, will respond by purging their domains
|
||
|
* as well.
|
||
|
*
|
||
|
* Formal Parameters:
|
||
|
* None.
|
||
|
*
|
||
|
* Return Value:
|
||
|
* None.
|
||
|
*
|
||
|
* Side Effects:
|
||
|
* The domain from this provider downward is completely eradicated.
|
||
|
*
|
||
|
* Caveats:
|
||
|
* None.
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
* BOOL IsTopProvider ()
|
||
|
*
|
||
|
* Functional Description:
|
||
|
* This function is used to ask the domain if it is the top provider in
|
||
|
* the domain that it represents.
|
||
|
*
|
||
|
* Formal Parameters:
|
||
|
* None.
|
||
|
*
|
||
|
* Return Value:
|
||
|
* TRUE if this is the top provider. FALSE otherwise.
|
||
|
*
|
||
|
* Side Effects:
|
||
|
* None.
|
||
|
*
|
||
|
* Caveats:
|
||
|
* None.
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
* Void GetDomainParameters (
|
||
|
* PDomainParameters domain_parameters,
|
||
|
* PDomainParameters min_domain_parameters,
|
||
|
* PDomainParameters max_domain_parameters)
|
||
|
*
|
||
|
* Functional Description:
|
||
|
* This function is used to ask the domain what the minimum and maximum
|
||
|
* acceptable values for domain parameters are. If the domain has no
|
||
|
* connections (and therefore has not yet locked its domain parameters),
|
||
|
* then it will return min and max values based on what it can handle.
|
||
|
* If it has locked its domain parameters, then both the min and max values
|
||
|
* will be set to the locked set (indicating that it will not accept
|
||
|
* anything else).
|
||
|
*
|
||
|
* Formal Parameters:
|
||
|
* domain_parameters (o)
|
||
|
* Pointer to a structure to be filled with the current domain
|
||
|
* parameters (those that are in use). Setting this to NULL will
|
||
|
* prevent current domain parameters from being returned.
|
||
|
* min_domain_parameters (o)
|
||
|
* Pointer to a structure to be filled with the minimum domain
|
||
|
* parameters. Setting this to NULL will prevent minimum domain
|
||
|
* parameters from being returned.
|
||
|
* max_domain_parameters (o)
|
||
|
* Pointer to a structure to be filled with the maximum domain
|
||
|
* parameters. Setting this to NULL will prevent maximum domain
|
||
|
* parameters from being returned.
|
||
|
*
|
||
|
* Return Value:
|
||
|
* None (except as specified in the parameter list above).
|
||
|
*
|
||
|
* Side Effects:
|
||
|
* None.
|
||
|
*
|
||
|
* Caveats:
|
||
|
* None.
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
* Void BindConnAttmnt (
|
||
|
* PConnection originator,
|
||
|
* BOOL upward_connection,
|
||
|
* PDomainParameters domain_parameters,
|
||
|
* AttachmentType attachment_type)
|
||
|
*
|
||
|
* Functional Description:
|
||
|
* This function is used when an attachment wishes to bind itself to the
|
||
|
* domain. This will occur only after the connection has been been
|
||
|
* completely and successfully negotiated.
|
||
|
*
|
||
|
* Formal Parameters:
|
||
|
* originator (i)
|
||
|
* This is the attachment that wishes to bind.
|
||
|
* upward_connection (i)
|
||
|
* A boolean flag indicating whether or not this is an upward
|
||
|
* connection.
|
||
|
* domain_parameters (i)
|
||
|
* A pointer to a domain parameters structure that holds the parameters
|
||
|
* that were negotiated for the connection. If the domain has not
|
||
|
* already locked its parameters, it will accept and lock these.
|
||
|
* attachment_type (i)
|
||
|
* What type of attachment is this (local or remote).
|
||
|
*
|
||
|
* Return Value:
|
||
|
* None.
|
||
|
*
|
||
|
* Side Effects:
|
||
|
* None.
|
||
|
*
|
||
|
* Caveats:
|
||
|
* None.
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
* Void PlumbDomainIndication (
|
||
|
* PCommandTarget originator,
|
||
|
* ULong height_limit)
|
||
|
*
|
||
|
* Functional Description:
|
||
|
* This member function represents the reception of a plumb domain
|
||
|
* indication from the top provider. If the height limit is zero, then
|
||
|
* the connection to the top provder will be severed. If its not, then
|
||
|
* it will be decremented and broadcast to all downward attachments.
|
||
|
*
|
||
|
* Formal Parameters:
|
||
|
* originator (i)
|
||
|
* This is the attachment from which the command originated.
|
||
|
* height_limit (i)
|
||
|
* This is initially the height limit for the domain. It is
|
||
|
* decremented at each layer in the domain. When it reaches zero,
|
||
|
* the recipient is too far from the top provider, and must
|
||
|
* disconnect.
|
||
|
*
|
||
|
* Return Value:
|
||
|
* None.
|
||
|
*
|
||
|
* Side Effects:
|
||
|
* None.
|
||
|
*
|
||
|
* Caveats:
|
||
|
* None.
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
* Void ErectDomainRequest (
|
||
|
* PCommandTarget originator,
|
||
|
* ULong height_in_domain,
|
||
|
* ULong throughput_interval)
|
||
|
*
|
||
|
* Functional Description:
|
||
|
* This member function represents the reception of an erect domain request
|
||
|
* from one of its downward attachments. This contains information needed
|
||
|
* by higher providers to know what's going on below (such as total
|
||
|
* height of domain).
|
||
|
*
|
||
|
* Formal Parameters:
|
||
|
* originator (i)
|
||
|
* This is the attachment from which the command originated.
|
||
|
* height_in_domain (i)
|
||
|
* This is the height of the domain from the originator down.
|
||
|
* throughput_interval (i)
|
||
|
* This is not currently supported and will always be zero (0).
|
||
|
*
|
||
|
* Return Value:
|
||
|
* None.
|
||
|
*
|
||
|
* Side Effects:
|
||
|
* None.
|
||
|
*
|
||
|
* Caveats:
|
||
|
* None.
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
* Void MergeChannelsRequest (
|
||
|
* PCommandTarget originator,
|
||
|
* CChannelAttributesList *merge_channel_list,
|
||
|
* CChannelIDList *purge_channel_list)
|
||
|
*
|
||
|
* Functional Description:
|
||
|
* This member function represents the reception of a merge channel
|
||
|
* request from one of this domain's attachments. If this is the top
|
||
|
* provider, then the merge request will be processed locally (which
|
||
|
* will result in the transmission of merge channel confirms back to
|
||
|
* the originating attachment). If this is not the top provider, then
|
||
|
* the command will be forwarded toward the top provider, and this
|
||
|
* provider will remember how to route it back.
|
||
|
*
|
||
|
* Formal Parameters:
|
||
|
* originator (i)
|
||
|
* This is the attachment from which the command originated.
|
||
|
* merge_channel_list (i)
|
||
|
* This is a list of strutures that contains the attributes of channels
|
||
|
* that are being merged into the upper domain.
|
||
|
* purge_channel_list (i)
|
||
|
* This is a list of channel IDs for those channels that are determined
|
||
|
* to be invalid even before this request reaches the Top Provider.
|
||
|
*
|
||
|
* Return Value:
|
||
|
* None.
|
||
|
*
|
||
|
* Side Effects:
|
||
|
* None.
|
||
|
*
|
||
|
* Caveats:
|
||
|
* None.
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
* Void MergeChannelsConfirm (
|
||
|
* PCommandTarget originator,
|
||
|
* CChannelAttributesList *merge_channel_list,
|
||
|
* CChannelIDList *purge_channel_list)
|
||
|
*
|
||
|
* Functional Description:
|
||
|
* This member function represents the reception of a merge channel
|
||
|
* confirm from the top provider. If this is the former top provider of
|
||
|
* a lower domain, the confirm will contain information indicating
|
||
|
* acceptance or rejection of the named channel. If a channel is rejected,
|
||
|
* the former top provider will issue a purge channel indication
|
||
|
* downwards. If this is not the former top provider, then it must be
|
||
|
* an intermediate provider. The command will be forwarded downward towards
|
||
|
* the former top provider. The intermediate providers will also add the
|
||
|
* channel to their channel lists if it was accepted into the upper
|
||
|
* domain.
|
||
|
*
|
||
|
* Formal Parameters:
|
||
|
* originator (i)
|
||
|
* This is the attachment from which the command originated.
|
||
|
* merge_channel_list (i)
|
||
|
* This is a list of strutures that contains the attributes of channels
|
||
|
* that are being merged into the upper domain.
|
||
|
* purge_channel_list (i)
|
||
|
* This is a list of channel IDs for those channels that are to be
|
||
|
* purged from the lower domain.
|
||
|
*
|
||
|
* Return Value:
|
||
|
* None.
|
||
|
*
|
||
|
* Side Effects:
|
||
|
* None.
|
||
|
*
|
||
|
* Caveats:
|
||
|
* None.
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
* Void PurgeChannelsIndication (
|
||
|
* PCommandTarget originator,
|
||
|
* CUidList *purge_user_list,
|
||
|
* CChannelIDList *purge_channel_list)
|
||
|
*
|
||
|
* Functional Description:
|
||
|
* This member function represents the reception of a purge channel
|
||
|
* indication from the top provider. This will cause the local
|
||
|
* provider to remove the channel from the local information base (if
|
||
|
* it are there). It will also broadcast the message downward in the
|
||
|
* domain. Note that this will be translated by user objects into either
|
||
|
* a detach user indication or a channel leave indication, depending on
|
||
|
* which type of channel is being left.
|
||
|
*
|
||
|
* Formal Parameters:
|
||
|
* originator (i)
|
||
|
* This is the attachment from which the command originated.
|
||
|
* purge_user_list (i)
|
||
|
* This is a list of users that are being purged from the lower
|
||
|
* domain.
|
||
|
* purge_channel_list (i)
|
||
|
* This is a list of channels that are being purged from the lower
|
||
|
* domain.
|
||
|
*
|
||
|
* Return Value:
|
||
|
* None.
|
||
|
*
|
||
|
* Side Effects:
|
||
|
* None.
|
||
|
*
|
||
|
* Caveats:
|
||
|
* None.
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
* Void MergeTokensRequest (
|
||
|
* PCommandTarget originator,
|
||
|
* CTokenAttributesList *merge_token_list,
|
||
|
* CTokenIDList *purge_token_list)
|
||
|
*
|
||
|
* Functional Description:
|
||
|
* This member function represents the reception of a merge token
|
||
|
* request from one of this domain's attachments. If this is the top
|
||
|
* provider, then the merge request will be processed locally (which
|
||
|
* will result in the transmission of merge token confirms back to
|
||
|
* the originating attachment). If this is not the top provider, then
|
||
|
* the command will be forwarded toward the top provider, and this provider
|
||
|
* will remember how to route it back.
|
||
|
*
|
||
|
* Formal Parameters:
|
||
|
* originator (i)
|
||
|
* This is the attachment from which the command originated.
|
||
|
* merge_token_list (i)
|
||
|
* This is a list of token attributes structures, each of which
|
||
|
* describes one token to be merged.
|
||
|
* purge_token_list (i)
|
||
|
* This is a list of tokens that are to be purged from the lower
|
||
|
* domain.
|
||
|
*
|
||
|
* Return Value:
|
||
|
* None.
|
||
|
*
|
||
|
* Side Effects:
|
||
|
* None.
|
||
|
*
|
||
|
* Caveats:
|
||
|
* None.
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
* Void MergeTokensConfirm (
|
||
|
* PCommandTarget originator,
|
||
|
* CTokenAttributesList *merge_token_list,
|
||
|
* CTokenIDList *purge_token_list)
|
||
|
*
|
||
|
* Functional Description:
|
||
|
* This member function represents the reception of a merge token
|
||
|
* confirm from the top provider. If this is the former top provider of
|
||
|
* a lower domain, the confirm will contain information indicating
|
||
|
* acceptance or rejection of the named token. If a token is rejected,
|
||
|
* the former top provider will issue a purge token indication
|
||
|
* downwards. If this is not the former top provider, then it must be
|
||
|
* an intermediate provider. The command will be forwarded downward towards
|
||
|
* the former top provider. The intermediate providers will also add the
|
||
|
* token to their token lists if it was accepted into the upper
|
||
|
* domain.
|
||
|
*
|
||
|
* Formal Parameters:
|
||
|
* originator (i)
|
||
|
* This is the attachment from which the command originated.
|
||
|
* merge_token_list (i)
|
||
|
* This is a list of token attributes structures, each of which
|
||
|
* describes one token to be merged.
|
||
|
* purge_token_list (i)
|
||
|
* This is a list of tokens that are to be purged from the lower
|
||
|
* domain.
|
||
|
*
|
||
|
* Return Value:
|
||
|
* None.
|
||
|
*
|
||
|
* Side Effects:
|
||
|
* None.
|
||
|
*
|
||
|
* Caveats:
|
||
|
* None.
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
* Void PurgeTokensIndication (
|
||
|
* PCommandTarget originator,
|
||
|
* CTokenIDList *purge_token_list)
|
||
|
*
|
||
|
* Functional Description:
|
||
|
* This member function represents the reception of a purge token
|
||
|
* indication from the top provider. This will cause the local
|
||
|
* provider to remove the token from the local information base (if
|
||
|
* it are there). It will also broadcast the message downward in the
|
||
|
* domain. Note that this will be translated by user objects into a
|
||
|
* token release indication.
|
||
|
*
|
||
|
* Formal Parameters:
|
||
|
* originator (i)
|
||
|
* This is the attachment from which the command originated.
|
||
|
* purge_token_list (i)
|
||
|
* This is a list of tokens that are to be purged from the lower
|
||
|
* domain.
|
||
|
*
|
||
|
* Return Value:
|
||
|
* None.
|
||
|
*
|
||
|
* Side Effects:
|
||
|
* None.
|
||
|
*
|
||
|
* Caveats:
|
||
|
* None.
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
* Void DisconnectProviderUltimatum (
|
||
|
* PCommandTarget originator,
|
||
|
* Reason reason)
|
||
|
*
|
||
|
* Functional Description:
|
||
|
* This member function represents the reception of a disconnect provider
|
||
|
* ultimatum. The attachment from which this command is received is
|
||
|
* automatically terminated. Any resources that are held by users on
|
||
|
* the other side of the attachment are automatically freed by the top
|
||
|
* provider (if it was a downward attachment). If it was an upward
|
||
|
* attachment then the domain is purged completely (which means that it
|
||
|
* is returned to its initialized state).
|
||
|
*
|
||
|
* Formal Parameters:
|
||
|
* originator (i)
|
||
|
* This is the attachment from which the command originated.
|
||
|
* reason (i)
|
||
|
* This is the reason for the disconnect. This will be one of the
|
||
|
* reasons defined in "mcatmcs.h".
|
||
|
*
|
||
|
* Return Value:
|
||
|
* None.
|
||
|
*
|
||
|
* Side Effects:
|
||
|
* An attachment will be severed, and potentially the entire domain can
|
||
|
* be purged.
|
||
|
*
|
||
|
* Caveats:
|
||
|
* None.
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
* Void RejectUltimatum (
|
||
|
* PCommandTarget originator,
|
||
|
* Diagnostic diagnostic,
|
||
|
* PUChar octet_string_address,
|
||
|
* ULong octet_string_length)
|
||
|
*
|
||
|
* Functional Description:
|
||
|
* This command represents the reception of a reject ultimatum. This
|
||
|
* indicates that the remote side was unable to correctly process a PDU
|
||
|
* that was sent to them. At this time we simply sever the connection
|
||
|
* that carried the reject.
|
||
|
*
|
||
|
* Formal Parameters:
|
||
|
* originator (i)
|
||
|
* This is the attachment from which the command originated.
|
||
|
* diagnostic (i)
|
||
|
* This is a diagnostic code describing the nature of the problem.
|
||
|
* octet_string_address (i)
|
||
|
* This is address of an optional octet string that contains the
|
||
|
* bad PDU.
|
||
|
* octet_string_length (i)
|
||
|
* This is the length of the above octet string.
|
||
|
*
|
||
|
* Return Value:
|
||
|
* None.
|
||
|
*
|
||
|
* Side Effects:
|
||
|
* None.
|
||
|
*
|
||
|
* Caveats:
|
||
|
* None.
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
* Void AttachUserRequest (
|
||
|
* PCommandTarget originator)
|
||
|
*
|
||
|
* Functional Description:
|
||
|
* This member function represents the reception of an attach user request.
|
||
|
* If this is the top provider, the domain will attempt to add the
|
||
|
* new user into the channel list (as a user channel). A confirm will
|
||
|
* be issued in the direction of the requesting user, letting it know
|
||
|
* the outcome of the attach operation (as well as the user ID if the
|
||
|
* attach was successful). If his is not the top provider, then the
|
||
|
* request will be forwarded in the direction of the top provider.
|
||
|
*
|
||
|
* Formal Parameters:
|
||
|
* originator (i)
|
||
|
* This is the attachment from which the command originated.
|
||
|
*
|
||
|
* Return Value:
|
||
|
* None.
|
||
|
*
|
||
|
* Side Effects:
|
||
|
* None.
|
||
|
*
|
||
|
* Caveats:
|
||
|
* None.
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
* Void AttachUserConfirm (
|
||
|
* PCommandTarget originator,
|
||
|
* Result result,
|
||
|
* UserID uidInitiator)
|
||
|
*
|
||
|
* Functional Description:
|
||
|
* This member function represents the reception of an attach user confirm.
|
||
|
* If this provider has an outstanding attach user request, then it
|
||
|
* will forward the confirm in the direction of the requester. It will
|
||
|
* also add the new user channel to the local channel list. If there
|
||
|
* are no outstanding requests (as a result of the requester being
|
||
|
* disconnected), then this provider will issue a detach user request
|
||
|
* upward to eliminate the user ID that is no longer needed (it will only
|
||
|
* do this if the result of the attach was successful).
|
||
|
*
|
||
|
* Formal Parameters:
|
||
|
* originator (i)
|
||
|
* This is the attachment from which the command originated.
|
||
|
* result (i)
|
||
|
* This is the result of the attach operation. Anything but
|
||
|
* RESULT_SUCCESSFUL indicates that the attach did not succeed.
|
||
|
* uidInitiator (i)
|
||
|
* If the attach succeeded, then this field will contain the user ID
|
||
|
* of the newly attached user.
|
||
|
*
|
||
|
* Return Value:
|
||
|
* None.
|
||
|
*
|
||
|
* Side Effects:
|
||
|
* None.
|
||
|
*
|
||
|
* Caveats:
|
||
|
* None.
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
* Void DetachUserRequest (
|
||
|
* PCommandTarget originator,
|
||
|
* Reason reason,
|
||
|
* CUidList *user_id_list)
|
||
|
*
|
||
|
* Functional Description:
|
||
|
* This member function represents the reception of a detach user request.
|
||
|
* This causes the user channels associated with all users in the list to
|
||
|
* be deleted from the user information base. If this is not the top
|
||
|
* provider, the request will then be forwarded upward. Additionally,
|
||
|
* all resources owned by the detaching users will be reclaimed by all
|
||
|
* providers along the way.
|
||
|
*
|
||
|
* Formal Parameters:
|
||
|
* originator (i)
|
||
|
* This is the attachment from which the command originated.
|
||
|
* reason (i)
|
||
|
* This is the reason for th detachment.
|
||
|
* user_id_list (i)
|
||
|
* This is a list of the users that are detaching.
|
||
|
*
|
||
|
* Return Value:
|
||
|
* None.
|
||
|
*
|
||
|
* Side Effects:
|
||
|
* None.
|
||
|
*
|
||
|
* Caveats:
|
||
|
* None.
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
* Void DetachUserIndication (
|
||
|
* PCommandTarget originator,
|
||
|
* Reason reason,
|
||
|
* CUidList *user_id_list)
|
||
|
*
|
||
|
* Functional Description:
|
||
|
* This member function represents the reception of a detach user
|
||
|
* indication. This indication will be repeated to all downward
|
||
|
* attachments (both user attachments and MCS connections). Then, if
|
||
|
* the user IDs represent any users in the local sub-tree, those users will
|
||
|
* be removed from the information base.
|
||
|
*
|
||
|
* Formal Parameters:
|
||
|
* originator (i)
|
||
|
* This is the attachment from which the command originated.
|
||
|
* reason (i)
|
||
|
* This is the reason for the detachment.
|
||
|
* user_id_list (i)
|
||
|
* This is a list of the users that are detaching.
|
||
|
*
|
||
|
* Return Value:
|
||
|
* None.
|
||
|
*
|
||
|
* Side Effects:
|
||
|
* None.
|
||
|
*
|
||
|
* Caveats:
|
||
|
* None.
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
* Void ChannelJoinRequest (
|
||
|
* PCommandTarget originator,
|
||
|
* UserID uidInitiator,
|
||
|
* ChannelID channel_id)
|
||
|
*
|
||
|
* Functional Description:
|
||
|
* This member function represents the reception of a channel join request.
|
||
|
* If the channel exists in the local information base, then the
|
||
|
* domain will attempt to join the requesting attachment to the channel.
|
||
|
* A channel join confirm will be sent to the requesting attachment
|
||
|
* informing the requester of the result. If the channel is not already
|
||
|
* in the information base, then one of two things will happen. If this
|
||
|
* is the top provider, then the domain will attempt to add the channel
|
||
|
* (if it is a static channel). If this is not the top provider, then
|
||
|
* the request will be forwarded upward.
|
||
|
*
|
||
|
* Formal Parameters:
|
||
|
* originator (i)
|
||
|
* This is the attachment from which the command originated.
|
||
|
* uidInitiator (i)
|
||
|
* This is the user ID of the user requesting the join.
|
||
|
* channel_id (i)
|
||
|
* This is the ID of the channel to be joined.
|
||
|
*
|
||
|
* Return Value:
|
||
|
* None.
|
||
|
*
|
||
|
* Side Effects:
|
||
|
* None.
|
||
|
*
|
||
|
* Caveats:
|
||
|
* None.
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
* Void ChannelJoinConfirm (
|
||
|
* PCommandTarget originator,
|
||
|
* Result result,
|
||
|
* UserID uidInitiator,
|
||
|
* ChannelID requested_id,
|
||
|
* ChannelID channel_id)
|
||
|
*
|
||
|
* Functional Description:
|
||
|
* This member function represents the reception of a channel join confirm.
|
||
|
* If the channel has not already been added to the channel, it will
|
||
|
* be put there now. The confirm will then be forwarded in the direction
|
||
|
* of the requesting user.
|
||
|
*
|
||
|
* Formal Parameters:
|
||
|
* originator (i)
|
||
|
* This is the attachment from which the command originated.
|
||
|
* result (i)
|
||
|
* This is the result of the join. Anything but RESULT_SUCCESSFUL
|
||
|
* means that the join failed.
|
||
|
* uidInitiator (i)
|
||
|
* This is the user ID of the user that requested the channel join.
|
||
|
* This is used to properly route the confirm.
|
||
|
* requested_id (i)
|
||
|
* This is the ID of the channel the user originally requested, which
|
||
|
* may be 0.
|
||
|
* channel_id (i)
|
||
|
* This is the ID of the channel that has been joined. If the original
|
||
|
* request was for channel 0, then this field will indicate to the
|
||
|
* user which assigned channel was selected by the top provider.
|
||
|
*
|
||
|
* Return Value:
|
||
|
* None.
|
||
|
*
|
||
|
* Side Effects:
|
||
|
* None.
|
||
|
*
|
||
|
* Caveats:
|
||
|
* None.
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
* Void ChannelLeaveRequest (
|
||
|
* PCommandTarget originator,
|
||
|
* CChannelIDList *channel_id_list)
|
||
|
*
|
||
|
* Functional Description:
|
||
|
* This member function represents the reception of a channel leave
|
||
|
* request. The domain removes the requesting attachment from all channels
|
||
|
* in the channel list. If this results in any empty channels, then the
|
||
|
* channel leave request will be forwarded to the next higher provider in
|
||
|
* the domain (unless this is the top provider). Furthermore, if a static
|
||
|
* or assigned channel is left empty, it is automatically removed from the
|
||
|
* channel list.
|
||
|
*
|
||
|
* Formal Parameters:
|
||
|
* originator (i)
|
||
|
* This is the attachment from which the command originated.
|
||
|
* channel_id_list (i)
|
||
|
* This is a list of channels to be left.
|
||
|
*
|
||
|
* Return Value:
|
||
|
* None.
|
||
|
*
|
||
|
* Side Effects:
|
||
|
* None.
|
||
|
*
|
||
|
* Caveats:
|
||
|
* None.
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
* Void ChannelConveneRequest (
|
||
|
* PCommandTarget originator,
|
||
|
* UserID uidInitiator)
|
||
|
*
|
||
|
* Functional Description:
|
||
|
* This member function represents the reception of a channel convene
|
||
|
* request. If this is not the Top Provider, the request will be sent
|
||
|
* upward. If this is the Top Provider, then a new private channel will
|
||
|
* be created (if domain parameters allow).
|
||
|
*
|
||
|
* Formal Parameters:
|
||
|
* originator (i)
|
||
|
* This is the attachment from which the command originated.
|
||
|
* uidInitiator (i)
|
||
|
* This is the user ID of the user that requested the creation of a
|
||
|
* new private channel. This is used to properly route the confirm.
|
||
|
*
|
||
|
* Return Value:
|
||
|
* None.
|
||
|
*
|
||
|
* Side Effects:
|
||
|
* None.
|
||
|
*
|
||
|
* Caveats:
|
||
|
* None.
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
* Void ChannelConveneConfirm (
|
||
|
* PCommandTarget originator,
|
||
|
* Result result,
|
||
|
* UserID uidInitiator,
|
||
|
* ChannelID channel_id)
|
||
|
*
|
||
|
* Functional Description:
|
||
|
* This member function represents the reception of a channel convene
|
||
|
* confirm. This causes the local provider to add the new private channel
|
||
|
* to the local information base, and route the confirm on toward the
|
||
|
* initiator of the request.
|
||
|
*
|
||
|
* Formal Parameters:
|
||
|
* originator (i)
|
||
|
* This is the attachment from which the command originated.
|
||
|
* result (i)
|
||
|
* This is the result of the convene. Anything but RESULT_SUCCESSFUL
|
||
|
* means that the convene failed.
|
||
|
* uidInitiator (i)
|
||
|
* This is the user ID of the user that requested the channel convene.
|
||
|
* This is used to properly route the confirm.
|
||
|
* channel_id (i)
|
||
|
* This is the ID of the new private channel that has been created.
|
||
|
*
|
||
|
* Return Value:
|
||
|
* None.
|
||
|
*
|
||
|
* Side Effects:
|
||
|
* None.
|
||
|
*
|
||
|
* Caveats:
|
||
|
* None.
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
* Void ChannelDisbandRequest (
|
||
|
* PCommandTarget originator,
|
||
|
* UserID uidInitiator,
|
||
|
* ChannelID channel_id)
|
||
|
*
|
||
|
* Functional Description:
|
||
|
* This member function represents the reception of a channel disband
|
||
|
* request. If this is not the Top Provider, then the request will be
|
||
|
* forwarded upward. If this is the Top Provider, then the specified
|
||
|
* private channel will be destroyed (after appropriate identity
|
||
|
* verification). This will cause channel disband and channel expel
|
||
|
* indications to be sent downward to all admitted users.
|
||
|
*
|
||
|
* Formal Parameters:
|
||
|
* originator (i)
|
||
|
* This is the attachment from which the command originated.
|
||
|
* uidInitiator (i)
|
||
|
* This is the user ID of the user that requested the channel disband.
|
||
|
* If this does not correspond to the channel manager, then the request
|
||
|
* will be ignored.
|
||
|
* channel_id (i)
|
||
|
* This is the ID of the channel to be disbanded.
|
||
|
*
|
||
|
* Return Value:
|
||
|
* None.
|
||
|
*
|
||
|
* Side Effects:
|
||
|
* None.
|
||
|
*
|
||
|
* Caveats:
|
||
|
* None.
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
* Void ChannelDisbandIndication (
|
||
|
* PCommandTarget originator,
|
||
|
* ChannelID channel_id)
|
||
|
*
|
||
|
* Functional Description:
|
||
|
* This member function represents the reception of a channel disband
|
||
|
* indication. This causes the specified private channel to be removed
|
||
|
* from the information base. The indication is then forwarded to all
|
||
|
* attachments that are either admitted or the channel manager.
|
||
|
*
|
||
|
* Formal Parameters:
|
||
|
* originator (i)
|
||
|
* This is the attachment from which the command originated.
|
||
|
* channel_id (i)
|
||
|
* This is the ID of the channel being disbanded.
|
||
|
*
|
||
|
* Return Value:
|
||
|
* None.
|
||
|
*
|
||
|
* Side Effects:
|
||
|
* None.
|
||
|
*
|
||
|
* Caveats:
|
||
|
* None.
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
* Void ChannelAdmitRequest (
|
||
|
* PCommandTarget originator,
|
||
|
* UserID uidInitiator,
|
||
|
* ChannelID channel_id,
|
||
|
* CUidList *user_id_list)
|
||
|
*
|
||
|
* Functional Description:
|
||
|
* This member function represents the reception of a channel admit
|
||
|
* request. If this is not the Top Provider, then the request will be
|
||
|
* forwarded upward. If this is the Top Provider, then the user IDs
|
||
|
* will be added to the admitted list, and a channel admit indication will
|
||
|
* be sent downward toward all attachments that contain an admitted user.
|
||
|
*
|
||
|
* Formal Parameters:
|
||
|
* originator (i)
|
||
|
* This is the attachment from which the command originated.
|
||
|
* uidInitiator (i)
|
||
|
* This is the user ID of the user that requested the channel admit.
|
||
|
* This must be the channel manager for the admit to succeed.
|
||
|
* channel_id (i)
|
||
|
* This is the ID of the private channel whose admitted list is to
|
||
|
* be expanded.
|
||
|
* user_id_list (i)
|
||
|
* This is a container holding the user IDs of those users to be
|
||
|
* admitted to the private channel.
|
||
|
*
|
||
|
* Return Value:
|
||
|
* None.
|
||
|
*
|
||
|
* Side Effects:
|
||
|
* None.
|
||
|
*
|
||
|
* Caveats:
|
||
|
* None.
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
* Void ChannelAdmitIndication (
|
||
|
* PCommandTarget originator,
|
||
|
* UserID uidInitiator,
|
||
|
* ChannelID channel_id,
|
||
|
* CUidList *user_id_list)
|
||
|
*
|
||
|
* Functional Description:
|
||
|
* This member function represents the reception of a channel admit
|
||
|
* indication. If the specified private channel does not yet exist in the
|
||
|
* information base, it will be created now. The users specified will be
|
||
|
* added to the admitted list, and this indication will be forwarded to
|
||
|
* all attachments that contain an admitted user.
|
||
|
*
|
||
|
* Formal Parameters:
|
||
|
* originator (i)
|
||
|
* This is the attachment from which the command originated.
|
||
|
* uidInitiator (i)
|
||
|
* This is the user ID of the manager of this private channel.
|
||
|
* channel_id (i)
|
||
|
* This is the ID of the private channel for which this indication
|
||
|
* is intended.
|
||
|
* user_id_list (i)
|
||
|
* This is a container holding the list of user IDs to be added to
|
||
|
* the admitted list.
|
||
|
*
|
||
|
* Return Value:
|
||
|
* None.
|
||
|
*
|
||
|
* Side Effects:
|
||
|
* None.
|
||
|
*
|
||
|
* Caveats:
|
||
|
* None.
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
* Void ChannelExpelRequest (
|
||
|
* PCommandTarget originator,
|
||
|
* UserID uidInitiator,
|
||
|
* ChannelID channel_id,
|
||
|
* CUidList *user_id_list)
|
||
|
*
|
||
|
* Functional Description:
|
||
|
* This member function represents the reception of a channel expel
|
||
|
* request. If this is not the Top Provider, then the request will be
|
||
|
* forwarded upward. If this is the Top Provider, then the specifed users
|
||
|
* will be removed from the private channel, and an expel indication will
|
||
|
* be sent downward to all attachments that contain (or did contain) an
|
||
|
* admitted user.
|
||
|
*
|
||
|
* Formal Parameters:
|
||
|
* originator (i)
|
||
|
* This is the attachment from which the command originated.
|
||
|
* uidInitiator (i)
|
||
|
* This is the user ID of the user that requested the channel expel.
|
||
|
* This must be the channel manager for the expel to succeed.
|
||
|
* channel_id (i)
|
||
|
* This is the ID of the private channel whose admitted list is to
|
||
|
* be reduced.
|
||
|
* user_id_list (i)
|
||
|
* This is a container holding the user IDs of those users to be
|
||
|
* expelled from the private channel.
|
||
|
*
|
||
|
* Return Value:
|
||
|
* None.
|
||
|
*
|
||
|
* Side Effects:
|
||
|
* None.
|
||
|
*
|
||
|
* Caveats:
|
||
|
* None.
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
* Void ChannelExpelIndication (
|
||
|
* PCommandTarget originator,
|
||
|
* ChannelID channel_id,
|
||
|
* CUidList *user_id_list)
|
||
|
*
|
||
|
* Functional Description:
|
||
|
* This member function represents the reception of a channel expel
|
||
|
* indication. The specified users will be removed from the admitted
|
||
|
* list of the channel. If the channel is empty, and the channel manager
|
||
|
* is not in the sub-tree of this provider, then the channel will be
|
||
|
* removed from the local information base. The expel indication will
|
||
|
* also be forwarded to all attachments that contain (or did contain( an
|
||
|
* admitted user.
|
||
|
*
|
||
|
* Formal Parameters:
|
||
|
* originator (i)
|
||
|
* This is the attachment from which the command originated.
|
||
|
* channel_id (i)
|
||
|
* This is the ID of the private channel for which this indication
|
||
|
* is intended.
|
||
|
* user_id_list (i)
|
||
|
* This is a container holding the list of user IDs to be removed
|
||
|
* from the admitted list.
|
||
|
*
|
||
|
* Return Value:
|
||
|
* None.
|
||
|
*
|
||
|
* Side Effects:
|
||
|
* None.
|
||
|
*
|
||
|
* Caveats:
|
||
|
* None.
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
* Void SendDataRequest (
|
||
|
* PCommandTarget originator,
|
||
|
* UINT type,
|
||
|
* PDataPacket data_packet)
|
||
|
*
|
||
|
* Functional Description:
|
||
|
* This member function represents the reception of a send data request.
|
||
|
* If this is not the top provider, the request will be repeated
|
||
|
* upward toward the top provider. The data will also be sent downward
|
||
|
* to all attachments that are joined to the channel (except for the
|
||
|
* originator) in the form of a send data indication.
|
||
|
*
|
||
|
* Formal Parameters:
|
||
|
* originator (i)
|
||
|
* This is the attachment from which the command originated.
|
||
|
* type (i)
|
||
|
* Normal or uniform send data request.
|
||
|
* data_packet (i)
|
||
|
* This is a pointer to a DataPacket object containing the channel
|
||
|
* ID, the User ID of the data sender, segmentation flags, priority of
|
||
|
* the data packet and a pointer to the packet to be sent.
|
||
|
*
|
||
|
* Return Value:
|
||
|
* None.
|
||
|
*
|
||
|
* Side Effects:
|
||
|
* None.
|
||
|
*
|
||
|
* Caveats:
|
||
|
* None.
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
* Void SendDataIndication (
|
||
|
* PCommandTarget originator,
|
||
|
* UINT type,
|
||
|
* PDataPacket data_packet)
|
||
|
*
|
||
|
* Functional Description:
|
||
|
* This member function represents the reception of a send data indication.
|
||
|
* This indication will be repeated downward to all attachments that
|
||
|
* are joined to the channel.
|
||
|
*
|
||
|
* Formal Parameters:
|
||
|
* originator (i)
|
||
|
* This is the attachment from which the command originated.
|
||
|
* type (i)
|
||
|
* normal or uniform send data indication
|
||
|
* data_packet (i)
|
||
|
* This is a pointer to a DataPacket object containing the channel
|
||
|
* ID, the User ID of the data sender, segmentation flags, priority of
|
||
|
* the data packet and a pointer to the packet to be sent.
|
||
|
*
|
||
|
* Return Value:
|
||
|
* None.
|
||
|
*
|
||
|
* Side Effects:
|
||
|
* None.
|
||
|
*
|
||
|
* Caveats:
|
||
|
* None.
|
||
|
*/
|
||
|
/*
|
||
|
* Void TokenGrabRequest (
|
||
|
* PCommandTarget originator,
|
||
|
* UserID uidInitiator,
|
||
|
* TokenID token_id)
|
||
|
*
|
||
|
* Functional Description:
|
||
|
* This member function represents the reception of a token grab request.
|
||
|
* If this is not the top provider, the request will be forwarded
|
||
|
* upward towards the top provider. If this is the top provider, the
|
||
|
* domain will attempt to grab the token on behalf of the requesting user.
|
||
|
* A token grab confirm will be issued to the requesting user informing
|
||
|
* it of the outcome.
|
||
|
*
|
||
|
* Formal Parameters:
|
||
|
* originator (i)
|
||
|
* This is the attachment from which the command originated.
|
||
|
* uidInitiator (i)
|
||
|
* This is the ID of the user that is requesting the token grab.
|
||
|
* token_id (i)
|
||
|
* This is the ID of the token that the user is attempting to grab.
|
||
|
*
|
||
|
* Return Value:
|
||
|
* None.
|
||
|
*
|
||
|
* Side Effects:
|
||
|
* None.
|
||
|
*
|
||
|
* Caveats:
|
||
|
* None.
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
* Void TokenGrabConfirm (
|
||
|
* PCommandTarget originator,
|
||
|
* Result result,
|
||
|
* UserID uidInitiator,
|
||
|
* TokenID token_id,
|
||
|
* TokenStatus token_status)
|
||
|
*
|
||
|
* Functional Description:
|
||
|
* This member function represents the reception of a token grab confirm.
|
||
|
* This confirm will simply be forwarded in the direction of the
|
||
|
* requesting user.
|
||
|
*
|
||
|
* Formal Parameters:
|
||
|
* originator (i)
|
||
|
* This is the attachment from which the command originated.
|
||
|
* result (i)
|
||
|
* This is the result of the grab request. If it is anything but
|
||
|
* RESULT_SUCCESSFUL, the grab request failed.
|
||
|
* uidInitiator (i)
|
||
|
* This is the ID of the user that is requesting the token grab.
|
||
|
* token_id (i)
|
||
|
* This is the ID of the token that the user is attempting to grab.
|
||
|
* token_status (i)
|
||
|
* This is the state of the token after the grab request was
|
||
|
* processed at the top provider.
|
||
|
*
|
||
|
* Return Value:
|
||
|
* None.
|
||
|
*
|
||
|
* Side Effects:
|
||
|
* None.
|
||
|
*
|
||
|
* Caveats:
|
||
|
* None.
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
* Void TokenInhibitRequest (
|
||
|
* PCommandTarget originator,
|
||
|
* UserID uidInitiator,
|
||
|
* TokenID token_id)
|
||
|
*
|
||
|
* Functional Description:
|
||
|
* This member function represents the reception of a token inhibit
|
||
|
* request. If this is not the top provider, the request will be forwarded
|
||
|
* upward towards the top provider. If this is the top provider, the
|
||
|
* domain will attempt to inhibit the token on behalf of the requesting
|
||
|
* user. A token inhibit confirm will be issued to the requesting user
|
||
|
* informing it of the outcome.
|
||
|
*
|
||
|
* Formal Parameters:
|
||
|
* originator (i)
|
||
|
* This is the attachment from which the command originated.
|
||
|
* uidInitiator (i)
|
||
|
* This is the ID of the user that is requesting the token inhibit.
|
||
|
* token_id (i)
|
||
|
* This is the ID of the token that the user is attempting to inhibit.
|
||
|
*
|
||
|
* Return Value:
|
||
|
* None.
|
||
|
*
|
||
|
* Side Effects:
|
||
|
* None.
|
||
|
*
|
||
|
* Caveats:
|
||
|
* None.
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
* Void TokenInhibitConfirm (
|
||
|
* PCommandTarget originator,
|
||
|
* Result result,
|
||
|
* UserID uidInitiator,
|
||
|
* TokenID token_id,
|
||
|
* TokenStatus token_status)
|
||
|
*
|
||
|
* Functional Description:
|
||
|
* This member function represents the reception of a token inhibit
|
||
|
* confirm. This confirm will simply be forwarded in the direction of the
|
||
|
* requesting user.
|
||
|
*
|
||
|
* Formal Parameters:
|
||
|
* originator (i)
|
||
|
* This is the attachment from which the command originated.
|
||
|
* result (i)
|
||
|
* This is the result of the inhibit request. If it is anything but
|
||
|
* RESULT_SUCCESSFUL, the inhibit request failed.
|
||
|
* uidInitiator (i)
|
||
|
* This is the ID of the user that is requesting the token inhibit.
|
||
|
* token_id (i)
|
||
|
* This is the ID of the token that the user is attempting to inhibit.
|
||
|
* token_status (i)
|
||
|
* This is the state of the token after the inhibit request was
|
||
|
* processed at the top provider.
|
||
|
*
|
||
|
* Return Value:
|
||
|
* None.
|
||
|
*
|
||
|
* Side Effects:
|
||
|
* None.
|
||
|
*
|
||
|
* Caveats:
|
||
|
* None.
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
* Void TokenGiveRequest (
|
||
|
* PCommandTarget originator,
|
||
|
* PTokenGiveRecord pTokenGiveRec)
|
||
|
*
|
||
|
* Functional Description:
|
||
|
* This member function represents the reception of a token give request.
|
||
|
* If this is not the top provider, the request will be forwarded upward
|
||
|
* towards the top provider. If this is the top provider, the domain will
|
||
|
* issue a token give indication in the direction of the user identified
|
||
|
* to receive the token.
|
||
|
*
|
||
|
* Formal Parameters:
|
||
|
* originator (i)
|
||
|
* This is the attachment from which the command originated.
|
||
|
* pTokenGiveRec (i)
|
||
|
* This is the address of a structure containing the following information:
|
||
|
* The ID of the user attempting to give away the token.
|
||
|
* The ID of the token being given.
|
||
|
* The ID of the user that the token is being given to.
|
||
|
*
|
||
|
* Return Value:
|
||
|
* None.
|
||
|
*
|
||
|
* Side Effects:
|
||
|
* None.
|
||
|
*
|
||
|
* Caveats:
|
||
|
* None.
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
* Void TokenGiveIndication (
|
||
|
* PCommandTarget originator,
|
||
|
* PTokenGiveRecord pTokenGiveRec)
|
||
|
*
|
||
|
* Functional Description:
|
||
|
* This member function represents the reception of a token give
|
||
|
* indication. This indication will be forwarded toward the user that
|
||
|
* is to receive the token.
|
||
|
*
|
||
|
* Formal Parameters:
|
||
|
* originator (i)
|
||
|
* This is the attachment from which the command originated.
|
||
|
* pTokenGiveRec (i)
|
||
|
* This is the address of a structure containing the following information:
|
||
|
* The ID of the user attempting to give away the token.
|
||
|
* The ID of the token being given.
|
||
|
* The ID of the user that the token is being given to.
|
||
|
*
|
||
|
* Return Value:
|
||
|
* None.
|
||
|
*
|
||
|
* Side Effects:
|
||
|
* None.
|
||
|
*
|
||
|
* Caveats:
|
||
|
* None.
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
* Void TokenGiveResponse (
|
||
|
* PCommandTarget originator,
|
||
|
* Result result,
|
||
|
* UserID receiver_id,
|
||
|
* TokenID token_id)
|
||
|
*
|
||
|
* Functional Description:
|
||
|
* This member function represents the reception of a token give response.
|
||
|
* If this is not the top provider, the response will be forwarded
|
||
|
* upward towards the top provider. If this is the top provider, the
|
||
|
* domain will make the appropriate changes to the state of the token in
|
||
|
* the local information base, and then issue a token give confirm to the
|
||
|
* user that initiated the give request.
|
||
|
*
|
||
|
* Formal Parameters:
|
||
|
* originator (i)
|
||
|
* This is the attachment from which the command originated.
|
||
|
* result (i)
|
||
|
* This specifies whether or not the token was accepted. Anything but
|
||
|
* RESULT_SUCCESSFUL indicates that the token was rejected.
|
||
|
* receiver_id (i)
|
||
|
* This is the ID of the user that has either accepted or rejected the
|
||
|
* token.
|
||
|
* token_id (i)
|
||
|
* This is the ID of the token that the user has been given.
|
||
|
*
|
||
|
* Return Value:
|
||
|
* None.
|
||
|
*
|
||
|
* Side Effects:
|
||
|
* None.
|
||
|
*
|
||
|
* Caveats:
|
||
|
* None.
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
* Void TokenGiveConfirm (
|
||
|
* PCommandTarget originator,
|
||
|
* Result result,
|
||
|
* UserID uidInitiator,
|
||
|
* TokenID token_id,
|
||
|
* TokenStatus token_status)
|
||
|
*
|
||
|
* Functional Description:
|
||
|
* This member function represents the reception of a token give confirm.
|
||
|
* This is forwarded toward the user that initiated the give request to
|
||
|
* inform it of the outcome.
|
||
|
*
|
||
|
* Formal Parameters:
|
||
|
* originator (i)
|
||
|
* This is the attachment from which the command originated.
|
||
|
* result (i)
|
||
|
* This parameter specifies whether or not the token was accepted.
|
||
|
* Anything but RESULT_SUCCESSFUL indicates that the token was not
|
||
|
* accepted.
|
||
|
* uidInitiator (i)
|
||
|
* This is the ID of the user that originally requested the token
|
||
|
* give request.
|
||
|
* token_id (i)
|
||
|
* This is the ID of the token that the user is attempting to give.
|
||
|
* token_status (i)
|
||
|
* This specifies the status of the token after the give operation
|
||
|
* was complete.
|
||
|
*
|
||
|
* Return Value:
|
||
|
* None.
|
||
|
*
|
||
|
* Side Effects:
|
||
|
* None.
|
||
|
*
|
||
|
* Caveats:
|
||
|
* None.
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
* Void TokenPleaseRequest (
|
||
|
* PCommandTarget originator,
|
||
|
* UserID uidInitiator,
|
||
|
* TokenID token_id)
|
||
|
*
|
||
|
* Functional Description:
|
||
|
* This member function represents the reception of a token please
|
||
|
* request. If this is not the top provider, the request will be forwarded
|
||
|
* upward towards the top provider. If this is the top provider, the
|
||
|
* domain will issue a token please indication in the direction of all
|
||
|
* users that currently own the token.
|
||
|
*
|
||
|
* Formal Parameters:
|
||
|
* originator (i)
|
||
|
* This is the attachment from which the command originated.
|
||
|
* uidInitiator (i)
|
||
|
* This is the ID of the user that is asking for the token.
|
||
|
* token_id (i)
|
||
|
* This is the ID of the token that the user is asking for.
|
||
|
*
|
||
|
* Return Value:
|
||
|
* None.
|
||
|
*
|
||
|
* Side Effects:
|
||
|
* None.
|
||
|
*
|
||
|
* Caveats:
|
||
|
* None.
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
* Void TokenPleaseIndication (
|
||
|
* PCommandTarget originator,
|
||
|
* UserID uidInitiator,
|
||
|
* TokenID token_id)
|
||
|
*
|
||
|
* Functional Description:
|
||
|
* This member function represents the reception of a token please
|
||
|
* indication. This indication is forwarded to all users who currently
|
||
|
* own the specified token.
|
||
|
*
|
||
|
* Formal Parameters:
|
||
|
* originator (i)
|
||
|
* This is the attachment from which the command originated.
|
||
|
* uidInitiator (i)
|
||
|
* This is the ID of the user that is asking for the token.
|
||
|
* token_id (i)
|
||
|
* This is the ID of the token that the user is asking for.
|
||
|
*
|
||
|
* Return Value:
|
||
|
* None.
|
||
|
*
|
||
|
* Side Effects:
|
||
|
* None.
|
||
|
*
|
||
|
* Caveats:
|
||
|
* None.
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
* Void TokenReleaseRequest (
|
||
|
* PCommandTarget originator,
|
||
|
* UserID uidInitiator,
|
||
|
* TokenID token_id)
|
||
|
*
|
||
|
* Functional Description:
|
||
|
* This member function represents the reception of a token release
|
||
|
* request. If this is not the top provider, the request will be forwarded
|
||
|
* upward towards the top provider. If this is the top provider, the
|
||
|
* domain will attempt to release the token on behalf of the requesting
|
||
|
* user. A token release confirm will be issued to the requesting user
|
||
|
* informing it of the outcome.
|
||
|
*
|
||
|
* Formal Parameters:
|
||
|
* originator (i)
|
||
|
* This is the attachment from which the command originated.
|
||
|
* uidInitiator (i)
|
||
|
* This is the ID of the user that is requesting the token release.
|
||
|
* token_id (i)
|
||
|
* This is the ID of the token that the user is attempting to release.
|
||
|
*
|
||
|
* Return Value:
|
||
|
* None.
|
||
|
*
|
||
|
* Side Effects:
|
||
|
* None.
|
||
|
*
|
||
|
* Caveats:
|
||
|
* None.
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
* Void TokenReleaseConfirm (
|
||
|
* PCommandTarget originator,
|
||
|
* Result result,
|
||
|
* UserID uidInitiator,
|
||
|
* TokenID token_id,
|
||
|
* TokenStatus token_status)
|
||
|
*
|
||
|
* Functional Description:
|
||
|
* This member function represents the reception of a token release
|
||
|
* confirm. This confirm will simply be forwarded in the direction of the
|
||
|
* requesting user.
|
||
|
*
|
||
|
* Formal Parameters:
|
||
|
* originator (i)
|
||
|
* This is the attachment from which the command originated.
|
||
|
* result (i)
|
||
|
* This is the result of the release request. If it is anything but
|
||
|
* RESULT_SUCCESSFUL, the release request failed.
|
||
|
* uidInitiator (i)
|
||
|
* This is the ID of the user that is requesting the token release.
|
||
|
* token_id (i)
|
||
|
* This is the ID of the token that the user is attempting to release.
|
||
|
* token_status (i)
|
||
|
* This is the state of the token after the release request was
|
||
|
* processed at the top provider.
|
||
|
*
|
||
|
* Return Value:
|
||
|
* None.
|
||
|
*
|
||
|
* Side Effects:
|
||
|
* None.
|
||
|
*
|
||
|
* Caveats:
|
||
|
* None.
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
* Void TokenTestRequest (
|
||
|
* PCommandTarget originator,
|
||
|
* UserID uidInitiator,
|
||
|
* TokenID token_id)
|
||
|
*
|
||
|
* Functional Description:
|
||
|
* This member function represents the reception of a token test request.
|
||
|
* If this is not the top provider, the request will be forwarded
|
||
|
* upward towards the top provider. If this is the top provider, the
|
||
|
* domain will test the current state of the token. A token test confirm
|
||
|
* will be issued to the requesting user informing it of the outcome.
|
||
|
*
|
||
|
* Formal Parameters:
|
||
|
* originator (i)
|
||
|
* This is the attachment from which the command originated.
|
||
|
* uidInitiator (i)
|
||
|
* This is the ID of the user that is requesting the token test.
|
||
|
* token_id (i)
|
||
|
* This is the ID of the token that the user is testing.
|
||
|
*
|
||
|
* Return Value:
|
||
|
* None.
|
||
|
*
|
||
|
* Side Effects:
|
||
|
* None.
|
||
|
*
|
||
|
* Caveats:
|
||
|
* None.
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
* Void TokenTestConfirm (
|
||
|
* PCommandTarget originator,
|
||
|
* UserID uidInitiator,
|
||
|
* TokenID token_id,
|
||
|
* TokenStatus token_status)
|
||
|
*
|
||
|
* Functional Description:
|
||
|
* This member function represents the reception of a token test confirm.
|
||
|
* This confirm will simply be forwarded in the direction of the
|
||
|
* requesting user.
|
||
|
*
|
||
|
* Formal Parameters:
|
||
|
* originator (i)
|
||
|
* This is the attachment from which the command originated.
|
||
|
* uidInitiator (i)
|
||
|
* This is the ID of the user that is requesting the token test.
|
||
|
* token_id (i)
|
||
|
* This is the ID of the token that the user is testing.
|
||
|
* token_status (i)
|
||
|
* This is the state of the token at the time of the test.
|
||
|
*
|
||
|
* Return Value:
|
||
|
* None.
|
||
|
*
|
||
|
* Side Effects:
|
||
|
* None.
|
||
|
*
|
||
|
* Caveats:
|
||
|
* None.
|
||
|
*/
|
||
|
|
||
|
#endif
|