windows-nt/Source/XPSP1/NT/termsrv/remdsk/rds/t120/h/mcsuser.h

2246 lines
60 KiB
C
Raw Normal View History

2020-09-26 03:20:57 -05:00
/*
* mcsuser.h
*
* Copyright (c) 1995 by DataBeam Corporation, Lexington, KY
*
* Abstract:
* An instance of this class represents a Conference object's user
* attachment to MCS. This is a fairly complex class that handles a lot of
* conference establishment details such as creating a User attachment to
* MCS and joining all the appropriate MCS channels. After everything is
* established the User object is responsible for encoding and decoding
* certain PDUs as well as management of a data queue which can hold a
* number of outgoing PDUs. The MCSUser object is designed so that it
* knows very little about any object other than the MCS Interface object
* which it uses to send out PDUs. This class only deals with data PDUs
* (or GCC PDUs) as opposed to connect PDUs. These GCC PDUs are sent and
* received through channels joined by the GCC user attachment.
*
* When an MCSUser object is first instantiated it goes through a number of
* steps to establish its links to MCS. First, an MCSUser object
* immediately creates an MCS user attachment in its constructor. After
* the MCS_ATTACH_USER_CONFIRM is received it begins joining all of the
* appropriate channels. The channels it joins varies depending on the
* node type which is passed in through the MCSUser objects constructor.
* After all channels have been successfully joined, the MCSUser object
* issues an owner callback informing the Conference object that it is
* completely initiated and ready to service requests.
*
* The MCSUser object can handle a number of different requests that can
* result in PDU traffic being generated. Therefore, the user object has
* the ability (within certain requests) to encode outgoing PDUs. Many of
* the more complex PDUs are handled by the class that contains the
* information needed to build the PDU such as the ConferenceRoster and the
* ApplicationRoster. All PDU traffic received by an MCSUser object is
* directly decoded by this class and immediately sent back to the owner
* object (a Conference object) through an owner callback.
*
* An MCSUser object has the ability to Terminate itself when an
* unrecoverable resource error occurs. This is handled through an owner
* callback message informing the Owner Object to do the delete.
*
* Caveats:
* None.
*
* Author:
* blp
*/
#ifndef _GCC_MCS_USER_
#define _GCC_MCS_USER_
/** include files **/
#include "mcsdllif.h"
#include "pktcoder.h"
#include "userdata.h"
#include "password.h"
#include "alarm.h"
#include "regkey.h"
#include "regitem.h"
#include "netaddr.h"
#include "invoklst.h"
#include "clists.h"
// was defined in gcmdtar.h
typedef UINT TagNumber;
/*
* Result types for attach user and channel joins performed by the user object
*/
typedef enum
{
USER_RESULT_SUCCESSFUL,
USER_ATTACH_FAILURE,
USER_CHANNEL_JOIN_FAILURE
}UserResultType;
/*
* This enum defines all the possible types of nodes that can exists
* in a GCC conference. Note that this is an internal definition and
* is not the save the the T.124 node type.
*/
typedef enum
{
TOP_PROVIDER_NODE,
CONVENER_NODE,
TOP_PROVIDER_AND_CONVENER_NODE,
JOINED_NODE,
INVITED_NODE,
JOINED_CONVENER_NODE
} ConferenceNodeType;
/*
** The structures defined below are used to pack the data associated with
** all the above owner callback messages. A pointer to one of these
** structures is passed in the LPVOID parameter of the owner callback.
*/
// USER_CREATE_CONFIRM data structure
typedef struct
{
UserID user_id;
UserResultType create_result;
}
UserCreateConfirmInfo, *PUserCreateConfirmInfo;
// USER_CONFERENCE_JOIN_REQUEST data structure
typedef struct
{
CPassword *convener_password;
CPassword *password_challenge;
LPWSTR pwszCallerID;
CUserDataListContainer *user_data_list;
UserID sender_id;
}
UserJoinRequestInfo, *PUserJoinRequestInfo;
// USER_CONFERENCE_JOIN_RESPONSE data structure
typedef struct
{
CPassword *password_challenge;
CUserDataListContainer *user_data_list;
ConnectionHandle connection_handle;
GCCResult result;
}
UserJoinResponseInfo, *PUserJoinResponseInfo;
// USER_TIME_REMAINING_INDICATION data structure
typedef struct
{
UserID source_node_id;
UserID node_id;
UINT time_remaining;
}
UserTimeRemainingInfo, *PUserTimeRemainingInfo;
// USER_CONFERENCE_EXTEND_INDICATION data structure
typedef struct
{
UINT extension_time;
BOOL time_is_conference_wide;
UserID source_node_id;
}
UserTimeExtendInfo, *PUserTimeExtendInfo;
// USER_TERMINATE_REQUEST data structure
typedef struct
{
UserID requester_id;
GCCReason reason;
}
UserTerminateRequestInfo, *PUserTerminateRequestInfo;
// USER_NODE_EJECTION_REQUEST data structure
typedef struct
{
UserID requester_id;
UserID node_to_eject;
GCCReason reason;
}
UserEjectNodeRequestInfo, *PUserEjectNodeRequestInfo;
// USER_NODE_EJECTION_RESPONSE data structure
typedef struct
{
UserID node_to_eject;
GCCResult result;
}
UserEjectNodeResponseInfo, *PUserEjectNodeResponseInfo;
// USER_REGISTRY_CHANNEL_REQUEST data structure
typedef struct
{
CRegKeyContainer *registry_key;
ChannelID channel_id;
EntityID requester_entity_id;
}
UserRegistryChannelRequestInfo, *PUserRegistryChannelRequestInfo;
// USER_REGISTRY_SET_PARAMETER_REQUEST data structure
typedef struct
{
CRegKeyContainer *registry_key;
LPOSTR parameter_value;
GCCModificationRights modification_rights;
EntityID requester_entity_id;
}
UserRegistrySetParameterRequestInfo, *PUserRegistrySetParameterRequestInfo;
/*
** Data structure associated with the following:
**
** USER_REGISTRY_TOKEN_REQUEST,
** USER_REGISTRY_RETRIEVE_REQUEST,
** USER_REGISTRY_DELETE_REQUEST,
** USER_REGISTRY_MONITOR_REQUEST.
*/
typedef struct
{
CRegKeyContainer *registry_key;
EntityID requester_entity_id;
}
UserRegistryRequestInfo, *PUserRegistryRequestInfo;
// USER_REGISTRY_RESPONSE data structure
typedef struct
{
RegistryResponsePrimitiveType primitive_type;
CRegKeyContainer *registry_key;
CRegItem *registry_item;
GCCModificationRights modification_rights;
EntityID owner_node_id;
EntityID owner_entity_id;
EntityID requester_entity_id;
GCCResult result;
}
UserRegistryResponseInfo, *PUserRegistryResponseInfo;
// USER_REGISTRY_MONITOR_INDICATION data structure
typedef struct
{
CRegKeyContainer *registry_key;
CRegItem *registry_item;
GCCModificationRights modification_rights;
EntityID owner_node_id;
EntityID owner_entity_id;
}
UserRegistryMonitorInfo, *PUserRegistryMonitorInfo;
/*
** Data structure associated with the following:
**
** USER_REGISTRY_ALLOCATE_HANDLE_REQUEST,
** USER_REGISTRY_ALLOCATE_HANDLE_RESPONSE.
*/
typedef struct
{
EntityID requester_entity_id;
USHORT number_of_handles;
UINT first_handle;
GCCResult result;
}
UserRegistryAllocateHandleInfo, *PUserRegistryAllocateHandleInfo;
// USER_CONDUCTOR_PERMIT_GRANT_INDICATION data structure
typedef struct
{
USHORT number_granted;
PUserID granted_node_list;
USHORT number_waiting;
PUserID waiting_node_list;
}
UserPermissionGrantIndicationInfo, *PUserPermissionGrantIndicationInfo;
// USER_USER_ID_INDICATION data structure
typedef struct
{
UserID sender_id;
TagNumber tag;
}
UserIDIndicationInfo, *PUserIDIndicationInfo;
// USER_TIME_INQUIRE_INDICATION data structure
typedef struct
{
UserID sender_id;
BOOL time_is_node_specific;
}
TimeInquireIndicationInfo, *PTimeInquireIndicationInfo;
// USER_CONDUCTOR_ASSIGN_INDICATION data structure
typedef struct
{
UserID sender_id;
UserID conductor_id;
}
ConductorAssignIndicationInfo, *PConductorAssignIndicationInfo;
// USER_CONDUCTOR_PERMIT_ASK_INDICATION data structure
typedef struct
{
UserID sender_id;
BOOL permission_is_granted;
}
PermitAskIndicationInfo, *PPermitAskIndicationInfo;
// USER_DETACH_INDICATION data structure
typedef struct
{
UserID detached_user;
GCCReason reason;
}
DetachIndicationInfo, *PDetachIndicationInfo;
/*
** Data structure associated with the following:
**
** USER_CONFERENCE_TRANSFER_REQUEST,
** USER_CONFERENCE_TRANSFER_INDICATION,
** USER_CONFERENCE_TRANSFER_RESPONSE.
*/
typedef struct
{
GCCConferenceName destination_conference_name;
GCCNumericString destination_conference_modifier;
CNetAddrListContainer *destination_address_list;
USHORT number_of_destination_nodes;
PUserID destination_node_list;
CPassword *password;
UserID requesting_node_id;
GCCResult result;
}
TransferInfo, *PTransferInfo;
// USER_CONFERENCE_ADD_REQUEST data structure
typedef struct
{
CNetAddrListContainer *network_address_list;
CUserDataListContainer *user_data_list;
UserID adding_node;
TagNumber add_request_tag;
UserID requesting_node;
}
AddRequestInfo, *PAddRequestInfo;
// USER_CONFERENCE_ADD_RESPONSE data structure
typedef struct
{
CUserDataListContainer *user_data_list;
TagNumber add_request_tag;
GCCResult result;
}
AddResponseInfo, *PAddResponseInfo;
/******************** End of callback data structures *********************/
/*
* Structure to hold send data information (besides the actual data packet),
* when the send data request is queued to be sent during the heartbeat.
*/
typedef struct
{
ChannelID channel_id;
Priority priority;
BOOL uniform_send;
PPacket packet;
}
SEND_DATA_REQ_INFO;
/*
* This structure holds information as to which channels the user object
* has joined at a particular instance of time. Also it indicates whether
* there has been an error in joining any of these channels or not.
*/
typedef struct
{
BOOL convener_channel_joined;
BOOL user_channel_joined;
BOOL broadcast_channel_joined;
BOOL channel_join_error;
}
ChannelJoinedFlag, *PChannelJoinedFlag;
/*
** Queue of structures (SendDataMessages) to be flushed during a
** heartbeat.
*/
class COutgoingPDUQueue : public CQueue
{
DEFINE_CQUEUE(COutgoingPDUQueue, SEND_DATA_REQ_INFO*);
};
/*
** List to maintain sequence number in the response with sender's userid
** to be able to route the response to the correct gcc provider.
*/
class CConfJoinResponseList2 : public CList2
{
DEFINE_CLIST2_(CConfJoinResponseList2, TagNumber, UserID);
};
/*
** List to hold the user ids of users in this provider's subtree
** This list is used to match outstanding user IDs
*/
class CConnHandleUidList2 : public CList2
{
DEFINE_CLIST2___(CConnHandleUidList2, USHORT)
};
/*
** This list holds alarms used to disconnect any misbehaving nodes. If an
** alarm is placed in this list, the node has a specified amount of time to
** disconnect before this node will disconnect it.
*/
class CAlarmUidList2 : public CList2
{
DEFINE_CLIST2_(CAlarmUidList2, PAlarm, UserID)
};
// The class definition.
class CConf;
class MCSUser : public CRefCount
{
friend class MCSDLLInterface;
public:
MCSUser(CConf *,
GCCNodeID nidTopProvider,
GCCNodeID nidParent,
PGCCError);
~MCSUser(void);
void SendUserIDRequest(TagNumber);
void SetChildUserIDAndConnection(UserID, ConnectionHandle);
/*
* Called by conference of intermediate node to send join request
* over to the top provider.
*/
GCCError ConferenceJoinRequest(
CPassword *convener_password,
CPassword *password_challange,
LPWSTR pwszCallerID,
CUserDataListContainer *user_data_list,
ConnectionHandle connection_handle);
/*
** Called by conference of top provider to send the response
** back to the intermediate node.
*/
void ConferenceJoinResponse(
UserID receiver_id,
BOOL password_is_in_the_clear,
BOOL conference_locked,
BOOL conference_listed,
GCCTerminationMethod termination_method,
CPassword *password_challenge,
CUserDataListContainer *user_data_list,
GCCResult result);
GCCError SendConferenceLockRequest(void);
GCCError SendConferenceLockResponse(UserID uidSource, GCCResult);
GCCError SendConferenceUnlockRequest(void);
GCCError SendConferenceUnlockResponse(UserID uidSource, GCCResult);
GCCError SendConferenceLockIndication(BOOL fUniformSend, UserID uidSource);
GCCError SendConferenceUnlockIndication(BOOL fUniformSend, UserID uidSource);
// Calls related to conference termination
void ConferenceTerminateRequest(GCCReason);
void ConferenceTerminateResponse(UserID uidRequester, GCCResult);
void ConferenceTerminateIndication(GCCReason);
GCCError EjectNodeFromConference(UserID uidEjected, GCCReason);
GCCError SendEjectNodeResponse(UserID uidRequester, UserID uidEject, GCCResult);
// Roster related calls
void RosterUpdateIndication(PGCCPDU, BOOL send_update_upward);
// Registry related calls
void RegistryRegisterChannelRequest(CRegKeyContainer *, ChannelID, EntityID);
void RegistryAssignTokenRequest(CRegKeyContainer *, EntityID);
void RegistrySetParameterRequest(CRegKeyContainer *,
LPOSTR,
GCCModificationRights,
EntityID);
void RegistryRetrieveEntryRequest(CRegKeyContainer *, EntityID);
void RegistryDeleteEntryRequest(CRegKeyContainer *, EntityID);
void RegistryMonitorRequest(CRegKeyContainer *, EntityID);
void RegistryAllocateHandleRequest(UINT, EntityID);
void RegistryAllocateHandleResponse(UINT cHandles, UINT registry_handle,
EntityID eidRequester, UserID uidRequester, GCCResult);
void RegistryResponse(
RegistryResponsePrimitiveType primitive_type,
UserID requester_owner_id,
EntityID requester_entity_id,
CRegKeyContainer *registry_key_data,
CRegItem *registry_item_data,
GCCModificationRights modification_rights,
UserID entry_owner_id,
EntityID entry_entity_id,
GCCResult result);
void RegistryMonitorEntryIndication (
CRegKeyContainer *registry_key_data,
CRegItem *registry_item,
UserID entry_owner_id,
EntityID entry_entity_id,
GCCModificationRights modification_rights);
GCCError AppInvokeIndication(CInvokeSpecifierListContainer *, GCCSimpleNodeList *);
GCCError TextMessageIndication(LPWSTR pwszTextMsg, UserID uidDst);
GCCError ConferenceAssistanceIndication(UINT cElements, PGCCUserData *);
GCCError ConferenceTransferRequest (
PGCCConferenceName destination_conference_name,
GCCNumericString destination_conference_modifier,
CNetAddrListContainer *destination_address_list,
UINT number_of_destination_nodes,
PUserID destination_node_list,
CPassword *password);
GCCError ConferenceTransferIndication (
PGCCConferenceName destination_conference_name,
GCCNumericString destination_conference_modifier,
CNetAddrListContainer *destination_address_list,
UINT number_of_destination_nodes,
PUserID destination_node_list,
CPassword *password);
GCCError ConferenceTransferResponse (
UserID requesting_node_id,
PGCCConferenceName destination_conference_name,
GCCNumericString destination_conference_modifier,
UINT number_of_destination_nodes,
PUserID destination_node_list,
GCCResult result);
GCCError ConferenceAddRequest(
TagNumber conference_add_tag,
UserID requesting_node,
UserID adding_node,
UserID target_node,
CNetAddrListContainer *network_address_container,
CUserDataListContainer *user_data_container);
GCCError ConferenceAddResponse(
TagNumber add_request_tag,
UserID requesting_node,
CUserDataListContainer *user_data_container,
GCCResult result);
// Calls related to conductorship
GCCError ConductorTokenGrab(void);
GCCError ConductorTokenRelease(void);
GCCError ConductorTokenPlease(void);
GCCError ConductorTokenGive(UserID uidRecipient);
GCCError ConductorTokenGiveResponse(Result);
GCCError ConductorTokenTest(void);
GCCError SendConductorAssignIndication(UserID uidConductor);
GCCError SendConductorReleaseIndication(void);
GCCError SendConductorPermitAsk(BOOL fGranted);
GCCError SendConductorPermitGrant(UINT cGranted, PUserID granted_node_list,
UINT cWaiting, PUserID waiting_node_list);
// Miscelaneous calls
GCCError TimeRemainingRequest(UINT time_remaining, UserID);
GCCError TimeInquireRequest(BOOL time_is_conference_wide);
GCCError ConferenceExtendIndication(UINT extension_time, BOOL time_is_conference_wide);
void CheckEjectedNodeAlarms(void);
BOOL FlushOutgoingPDU(void);
GCCNodeID GetMyNodeID(void) { return(m_nidMyself); }
GCCNodeID GetTopNodeID(void) { return(m_nidTopProvider); }
GCCNodeID GetParentNodeID(void) { return(m_nidParent); }
UserID GetUserIDFromConnection(ConnectionHandle);
void UserDisconnectIndication(UserID);
protected:
UINT ProcessAttachUserConfirm(
Result result,
UserID user_id);
UINT ProcessChannelJoinConfirm(
Result result,
ChannelID channel_id);
UINT ProcessDetachUserIndication(
Reason mcs_reason,
UserID detached_user);
UINT ProcessSendDataIndication(
PSendData send_data_info);
UINT ProcessUniformSendDataIndication(
PSendData send_data_info);
void ProcessConferenceJoinRequestPDU(
PConferenceJoinRequest join_request,
PSendData send_data_info);
void ProcessConferenceJoinResponsePDU(
PConferenceJoinResponse join_response);
void ProcessConferenceTerminateRequestPDU(
PConferenceTerminateRequest terminate_request,
PSendData send_data_info);
void ProcessConferenceTerminateResponsePDU(
PConferenceTerminateResponse
terminate_response);
void ProcessConferenceTerminateIndicationPDU (
PConferenceTerminateIndication
terminate_indication,
UserID sender_id);
#ifdef JASPER
void ProcessTimeRemainingIndicationPDU (
PConferenceTimeRemainingIndication
time_remaining_indication,
UserID sender_id);
#endif // JASPER
#ifdef JASPER
void ProcessConferenceAssistanceIndicationPDU(
PConferenceAssistanceIndication
conf_assistance_indication,
UserID sender_id);
#endif // JASPER
#ifdef JASPER
void ProcessConferenceExtendIndicationPDU(
PConferenceTimeExtendIndication
conf_time_extend_indication,
UserID sender_id);
#endif // JASPER
void ProcessConferenceEjectUserRequestPDU(
PConferenceEjectUserRequest
eject_user_request,
PSendData send_data_info);
void ProcessConferenceEjectUserResponsePDU(
PConferenceEjectUserResponse
eject_user_request);
void ProcessConferenceEjectUserIndicationPDU (
PConferenceEjectUserIndication
eject_user_indication,
UserID sender_id);
void ProcessRegistryRequestPDU(
PGCCPDU gcc_pdu,
PSendData send_data_info);
void ProcessRegistryAllocateHandleRequestPDU(
PRegistryAllocateHandleRequest
allocate_handle_request,
PSendData send_data_info);
void ProcessRegistryAllocateHandleResponsePDU(
PRegistryAllocateHandleResponse
allocate_handle_response);
void ProcessRegistryResponsePDU(
PRegistryResponse registry_response);
void ProcessRegistryMonitorIndicationPDU(
PRegistryMonitorEntryIndication
monitor_indication,
UserID sender_id);
void ProcessTransferRequestPDU (
PConferenceTransferRequest
conference_transfer_request,
PSendData send_data_info);
#ifdef JASPER
void ProcessTransferIndicationPDU (
PConferenceTransferIndication
conference_transfer_indication);
#endif // JASPER
#ifdef JASPER
void ProcessTransferResponsePDU (
PConferenceTransferResponse
conference_transfer_response);
#endif // JASPER
void ProcessAddRequestPDU (
PConferenceAddRequest conference_add_request,
PSendData send_data_info);
void ProcessAddResponsePDU (
PConferenceAddResponse
conference_add_response);
void ProcessPermissionGrantIndication(
PConductorPermissionGrantIndication
permission_grant_indication,
UserID sender_id);
void ProcessApplicationInvokeIndication(
PApplicationInvokeIndication
invoke_indication,
UserID sender_id);
#ifdef JASPER
GCCError ProcessTextMessageIndication(
PTextMessageIndication text_message_indication,
UserID sender_id);
#endif // JASPER
void ProcessFunctionNotSupported (
UINT request_choice);
void ProcessTokenGrabConfirm(TokenID, Result);
void ProcessTokenGiveIndication(TokenID, UserID);
void ProcessTokenGiveConfirm(TokenID, Result);
#ifdef JASPER
void ProcessTokenPleaseIndication(TokenID, UserID);
#endif // JASPER
#ifdef JASPER
void ProcessTokenReleaseConfirm(TokenID, Result);
#endif // JASPER
void ProcessTokenTestConfirm(TokenID, TokenStatus);
private:
void AddToMCSMessageQueue(
PPacket packet,
ChannelID channel_id,
Priority priority,
BOOL uniform_send);
GCCError InitiateEjectionFromConference (
GCCReason reason);
MCSError JoinUserAndBroadCastChannels();
MCSError JoinConvenerChannel();
BOOL AreAllChannelsJoined();
void ResourceFailureHandler(void);
private:
CConf *m_pConf;
PIMCSSap m_pMCSSap;
GCCNodeID m_nidMyself;
GCCNodeID m_nidTopProvider;
GCCNodeID m_nidParent;
BOOL m_fEjectionPending;
GCCReason m_eEjectReason;
ChannelJoinedFlag m_ChannelJoinedFlags;
CConnHandleUidList2 m_ChildUidConnHdlList2;
COutgoingPDUQueue m_OutgoingPDUQueue;
CConfJoinResponseList2 m_ConfJoinResponseList2;
CAlarmUidList2 m_EjectedNodeAlarmList2;
CUidList m_EjectedNodeList;
};
typedef MCSUser * PMCSUser;
/*
* MCSUser( UINT owner_message_base,
* GCCConferenceID conference_id,
* ConferenceNodeType conference_node_type,
* UserID top_provider,
* UserID parent_user_id,
* PGCCError return_value)
*
* Public Function Description
* This is the MCSUser object constructor. It is responsible for
* initializing all the instance variables used by this class. The
* constructor is responsible for establishing the user attachment to
* the MCS domain defined by the conference ID. It also kicks off the
* process of joining all the appropriate channels.
*
* Formal Parameters:
* conference_id - (i) Conference ID associated with this user also
* defines the domain to attach to.
* conference_node_type- (i) Internal Node type (see above enumeration).
* top_provider - (i) User ID of top provider node. Zero if this
* is the top provider.
* parent_user_id - (i) User ID of parent node. Zero if this is the
* top provider node.
* return_value - (o) Return value for constructor.
*
* Return Value
* GCC_NO_ERROR - No error occured.
* GCC_FAILURE_ATTACHING_TO_MCS - Failure to attach to MCS.
*
* Side Effects
* The constructor kicks off a sequence of events that culminates in
* a USER_CREATE_CONFIRM message being returned to the owner object.
* This includes attaching to MCS and joining all the appropriate channels.
*
* Caveats
* None.
*/
/*
* ~MCSUser ()
*
* Public Function Description
* This is the MCSUser object destructor. It is responsible for freeing
* up all the internal data allocated by this object. It also performs
* the detach from GCC and leaves all the appropriate channels.
*
* Formal Parameters:
* None.
*
* Return Value
* None.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* void SendUserIDRequest(
* TagNumber tag_number)
*
* Public Function Description
* This routine maps directly to a GCC PDU that delivers the this
* nodes user ID to the appropriate node. The tag number matches the
* tag specified by the other node.
*
* Formal Parameters:
* tag_number - (i) Tag number that matches the request to the
* reponse for the user ID.
*
* Return Value
* GCC_NO_ERROR - No error occured.
* GCC_FAILURE_ATTACHING_TO_MCS - Failure to attach to MCS.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* void SetChildUserIDAndConnection (
* UserID child_user_id,
* ConnectionHandle child_connection_handle)
*
* Public Function Description
* This routine is used to set the child user id associated with a
* particular logical connection. This information is saved by the
* MCSUser object in an internal list. This is typical called after
* receiving a user ID indication back from a child node.
*
* Formal Parameters:
* child_user_id - (i) User ID associated with child connection
* child_connection_handle - (i) Logical connection assoicated with
* specified user id.
*
* Return Value
* None.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* GCCError ConferenceJoinRequest(
* CPassword *convener_password,
* CPassword *password_challange,
* LPWSTR pwszCallerID,
* CUserDataListContainer *user_data_list,
* ConnectionHandle connection_handle);
*
* Public Function Description:
* This function is used to pass a join request on up to the Top Provider.
* It is called by a conference at an intermediate node. This routine is
* not used if the joining node is directly connected to the top
* provider.
*
* Formal Parameters:
* convener_password - (i) Convener password included with the
* original join request.
* password_challenge - (i) Password challenge included with the
* original join request.
* pwszCallerID - (i) Caller ID used in original join request.
* user_data_list - (i) User data included in original join
* request.
* connection_handle - (i) This is the logical connection handle
* on which the original join came in. It is
* used here as a tag to match the request
* with the response.
*
* Return Value
* GCC_NO_ERROR - No error occured.
* GCC_ALLOCATION_FAILURE - A resource error occured.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* void ConferenceJoinResponse(
* UserID receiver_id,
* BOOL password_is_in_the_clear,
* BOOL conference_locked,
* BOOL conference_listed,
* GCCTerminationMethod termination_method,
* CPassword *password_challenge,
* CUserDataListContainer *user_data_list,
* GCCResult result);
*
* Public Function Description:
* This routine is used to send a join response back to a node that is
* joining through an intermediate nodes.
*
* Formal Parameters:
* receiver_id - (i) This is the intermediate node id that made
* the request to the top provider.
* password_is_in_the_clear(i) Flag indicating password in the clear
* status of the conference.
* conference_locked - (i) Lock state of the conference.
* conference_listed - (i) Listed state of the conference.
* termination_method - (i) Termination method of the conference.
* password_challenge - (i) Password challenge to pass back to the
* joining node.
* user_data_list - (i) User data to pass back to the joining node.
* request.
* result - (i) The result of the join request.
*
* Return Value
* None.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* GCCError SendConferenceLockRequest()
*
* Public Function Description:
* This routine is used to issue a conference lock request to the
* top provider.
*
* Formal Parameters:
* None.
*
* Return Value
* GCC_NO_ERROR - No error occured.
* GCC_ALLOCATION_FAILURE - A resource error occured.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* GCCError SendConferenceLockResponse(
* UserID source_node,
* GCCResult result)
*
* Public Function Description:
* This routine is used to issue the conference lock response back to the
* original requester.
*
* Formal Parameters:
* source_node - (i) Node ID of node that made the original request.
* result - (i) Result of the lock request.
*
* Return Value
* GCC_NO_ERROR - No error occured.
* GCC_ALLOCATION_FAILURE - A resource error occured.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* GCCError SendConferenceUnlockRequest()
*
* Public Function Description:
* This routine is used to issue a conference unlock request to the
* top provider.
*
* Formal Parameters:
* None.
*
* Return Value
* GCC_NO_ERROR - No error occured.
* GCC_ALLOCATION_FAILURE - A resource error occured.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* GCCError SendConferenceUnlockResponse(
* UserID source_node,
* GCCResult result)
*
* Public Function Description:
* This routine is used to issue the conference lock response back to the
* original requester.
*
* Formal Parameters:
* source_node - (i) Node ID of node that made the original request.
* result - (i) Result of the lock request.
*
* Return Value
* GCC_NO_ERROR - No error occured.
* GCC_ALLOCATION_FAILURE - A resource error occured.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* GCCError SendConferenceLockIndication(
* BOOL uniform_send,
* UserID source_node)
*
* Public Function Description:
* This routine is used by the Top Provider to issue a conference lock
* indication to either everyone in the conference or to a specific node.
*
* Formal Parameters:
* uniform_send - (i) Flag indicating whether this indication
* should be sent to everyone or to a
* specific node (TRUE for everyone).
* source_node - (i) Specific node to send it to. uniform_send
* must equal FALSE to use this.
*
* Return Value
* GCC_NO_ERROR - No error occured.
* GCC_ALLOCATION_FAILURE - A resource error occured.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* GCCError SendConferenceUnlockIndication(
* BOOL uniform_send,
* UserID source_node)
*
* Public Function Description:
* This routine is used by the Top Provider to issue a conference unlock
* indication to either everyone in the conference or to a specific node.
*
* Formal Parameters:
* uniform_send - (i) Flag indicating whether this indication
* should be sent to everyone or to a
* specific node (TRUE for everyone).
* source_node - (i) Specific node to send it to. uniform_send
* must equal FALSE to use this.
*
* Return Value
* GCC_NO_ERROR - No error occured.
* GCC_ALLOCATION_FAILURE - A resource error occured.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* void ConferenceTerminateRequest(
* GCCReason reason)
*
* Public Function Description:
* This routine is used by a node subordinate to the top provider to
* request that the conference by terminated.
*
* Formal Parameters:
* reason - (i) Reason for the terminate.
*
* Return Value
* None.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* void ConferenceTerminateResponse (
* UserID requester_id,
* GCCResult result)
*
* Public Function Description:
* This routine is used by the top provider to respond to a terminate
* request issued by a subordinate node. The result indicates if the
* requesting node had the correct privileges.
*
* Formal Parameters:
* requester_id - (i) Node ID of node to send the response back to.
* result - (i) Result of terminate request.
*
* Return Value
* None.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* void ConferenceTerminateIndication (
* GCCReason reason)
*
* Public Function Description:
* This routine is used by the top provider to send out a terminate
* indication to every node in the conference.
*
* Formal Parameters:
* reason - (i) Reason for the terminate.
*
* Return Value
* None.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* GCCError EjectNodeFromConference (
* UserID ejected_node_id,
* GCCReason reason)
*
* Public Function Description:
* This routine is used when attempting to eject a node from the
* conference.
*
* Formal Parameters:
* ejected_node_id - (i) Node ID of node to eject.
* reason - (i) Reason for node being ejected.
*
* Return Value
* GCC_NO_ERROR - No error occured.
* GCC_ALLOCATION_FAILURE - A resource error occured.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* GCCError SendEjectNodeResponse (
* UserID requester_id,
* UserID node_to_eject,
* GCCResult result)
*
* Public Function Description:
* This routine is used by the top provider to respond to an eject
* user request.
*
* Formal Parameters:
* requester_id - (i) Node ID of node that requested the eject.
* node_to_eject - (i) Node that was requested to eject.
* result - (i) Result of the eject request.
*
* Return Value
* GCC_NO_ERROR - No error occured.
* GCC_ALLOCATION_FAILURE - A resource error occured.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* void RosterUpdateIndication (
* PGCCPDU gcc_pdu,
* BOOL send_update_upward)
*
* Public Function Description:
* This routine is used to forward a roster update indication either
* upward to the parent node or downward as a full refresh to all nodes
* in the conference.
*
* Formal Parameters:
* gcc_pdu - (i) Pointer to the roster update PDU structure
* to send.
* send_update_upward - (i) Flag indicating if this indication should
* be sent upward to the parent node or
* downward to all nodes (TRUE is upward).
*
* Return Value
* None.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* void RegistryRegisterChannelRequest (
* CRegKeyContainer *registry_key_data,
* ChannelID channel_id,
* EntityID entity_id)
*
* Public Function Description:
* This routine is used when an APE wishes to register a channel in
* the application registry.
*
* Formal Parameters:
* registry_key_data - (i) Registry key associated with the channel
* to register.
* channel_id - (i) Channel ID to add to the registry.
* entity_id - (i) Entity ID associated with the APE that is
* registering the channel.
*
* Return Value
* None.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* void RegistryAssignTokenRequest (
* CRegKeyContainer *registry_key_data,
* EntityID entity_id)
*
* Public Function Description:
* This routine is used when an APE wishes to register a token in
* the application registry. Note that there is no token ID included in
* this request. The token ID is allocated at the top provider.
*
* Formal Parameters:
* registry_key_data - (i) Registry key associated with the token
* to register.
* entity_id - (i) Entity ID associated with the APE that is
* registering the token.
*
* Return Value
* None.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* void RegistrySetParameterRequest (
* CRegKeyContainer *registry_key_data,
* LPOSTR parameter_value,
* GCCModificationRights modification_rights,
* EntityID entity_id);
*
* Public Function Description:
* This routine is used when an APE wishes to register a parameter in
* the application registry. Note that parameter to be registered is
* included in this request.
*
* Formal Parameters:
* registry_key_data - (i) Registry key associated with the parameter
* to register.
* parameter_value - (i) The parameter string to register.
* modification_rights - (i) The modification rights associated with the
* parameter being registered.
* entity_id - (i) Entity ID associated with the APE that is
* registering the parameter.
*
* Return Value
* None.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* void RegistryRetrieveEntryRequest (
* CRegKeyContainer *registry_key_data,
* EntityID entity_id)
*
* Public Function Description:
* This routine is used when an APE wishes to retrieve an registry item
* from the registry.
*
* Formal Parameters:
* registry_key_data - (i) Registry key associated with the registry
* entry to retrieve.
* entity_id - (i) Entity ID associated with the APE that is
* requesting the registry entry.
*
* Return Value
* None.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* void RegistryDeleteEntryRequest (
* CRegKeyContainer *registry_key_data,
* EntityID entity_id)
*
* Public Function Description:
* This routine is used when an APE wishes to delete a registry item
* from the registry.
*
* Formal Parameters:
* registry_key_data - (i) Registry key associated with the registry
* entry to delete.
* entity_id - (i) Entity ID associated with the APE that is
* making the delete request.
*
* Return Value
* None.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* void RegistryMonitorRequest (
* CRegKeyContainer *registry_key_data,
* EntityID entity_id)
*
* Public Function Description:
* This routine is used when an APE wishes to monitor a registry item
* in the registry.
*
* Formal Parameters:
* registry_key_data - (i) Registry key associated with the registry
* entry to monitor.
* entity_id - (i) Entity ID associated with the APE that is
* making the monitor request.
*
* Return Value
* None.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* void RegistryAllocateHandleRequest (
* USHORT number_of_handles,
* EntityID entity_id )
*
* Public Function Description:
* This routine is used when an APE wishes to allocate a number of
* handles from the application registry.
*
* Formal Parameters:
* number_of_handles - (i) Number of handles to allocate.
* entity_id - (i) Entity ID associated with the APE that is
* making the request.
*
* Return Value
* None.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* void RegistryAllocateHandleResponse (
* USHORT number_of_handles,
* UINT registry_handle,
* EntityID requester_entity_id,
* UserID requester_node_id,
* GCCResult result)
*
* Public Function Description:
* This routine is used by the Top Provider to respond to an allocate
* handle request from an APE at a remote node. The allocated handles
* are passed back here.
*
* Formal Parameters:
* number_of_handles - (i) Number of handles allocated.
* registry_handle - (i) The first handle in the list of contiguously
* allocated handles.
* requester_entity_id - (i) Entity ID associated with the APE that made
* the request.
* requester_node_id - (i) Node ID of node that made the request.
* result - (i) Result of the request.
*
* Return Value
* None.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* void RegistryResponse (
* RegistryResponsePrimitiveType primitive_type,
* UserID requester_owner_id,
* EntityID requester_entity_id,
* CRegKeyContainer *registry_key_data,
* CRegItem *registry_item_data,
* GCCModificationRights modification_rights,
* UserID entry_owner_id,
* EntityID entry_entity_id,
* GCCResult result)
*
* Public Function Description:
* This routine is used to respond to all the registry request except
* allocate handle. It formulates the response PDU and queues it for
* delivery.
*
* Formal Parameters:
* primitive_type - (i) This is the type of response being issued.
* (i.e. register channel response, register
* token response, etc.).
* requester_owner_id - (i) Node ID of APE making the original request.
* requester_entity_id - (i) Entity ID of APE making the original
* request.
* registry_key_data - (i) Registry key associated with registry
* entry info being included in the response.
* registry_item_data - (i) Registry item data associated with registry
* entry info being included in the response.
* modification_rights - (i) Modification rights associated with registry
* entry info being included in the response.
* entry_owner_id - (i) Node ID associated with registry entry
* info being included in the response.
* entry_entity_id - (i) APE Entity ID associated with registry entry
* info being included in the response.
* result - (i) Result to be sent back in the response.
*
* Return Value
* None.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* void RegistryMonitorEntryIndication (
* CRegKeyContainer *registry_key_data,
* CRegItem *registry_item,
* UserID entry_owner_id,
* EntityID entry_entity_id,
* GCCModificationRights modification_rights)
*
* Public Function Description:
* This routine is used by the top provider to issue a monitor
* indication anytime a registry entry that is being monitored changes.
*
* Formal Parameters:
* registry_key_data - (i) Registry key associated with registry
* entry being monitored.
* registry_item - (i) Registry item data associated with registry
* entry being monitored.
* entry_owner_id - (i) Node ID associated with registry entry
* info being monitored.
* entry_entity_id - (i) APE Entity ID associated with registry entry
* info being monitored.
* modification_rights - (i) Modification rights associated with registry
* entry info being monitored.
*
* Return Value
* None.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* GCCError AppInvokeIndication(
* CInvokeSpecifierListContainer *invoke_specifier_list,
* USHORT number_of_destination_nodes,
* UserID * list_of_destination_nodes)
*
* Public Function Description:
* This routine is used to send an application invoke indication to
* every node in the conference.
*
* Formal Parameters:
* invoke_specifier_list - (i) List of applications to invoke.
* number_of_destination_nodes - (i) Number of nodes in the destination
* node list.
* list_of_destination_nodes - (i) List of nodes that should process
* invoke indication.
*
* Return Value
* GCC_NO_ERROR - No error occured.
* GCC_ALLOCATION_FAILURE - A resource error occured.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* GCCError TextMessageIndication (
* LPWSTR pwszTextMsg,
* UserID destination_node )
*
* Public Function Description:
* This routine is used to send a text message to either a specific node
* or to every node in the conference.
*
* Formal Parameters:
* pwszTextMsg - (i) Text message string to send.
* destination_node - (i) Node to receive the text message. If zero
* the text message is sent to every node in
* the conference.
*
* Return Value
* GCC_NO_ERROR - No error occured.
* GCC_ALLOCATION_FAILURE - A resource error occured.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* GCCError ConferenceAssistanceIndication (
* USHORT number_of_user_data_members,
* PGCCUserData * user_data_list)
*
* Public Function Description:
* This routine is used to send a conference assistance indication to
* every node in the conference.
*
* Formal Parameters:
* number_of_user_data_members - (i) Number of entries in the user data
* list passed into this routine.
* user_data_list - (i) This list holds pointers to the
* user data to send out in the
* indication.
*
* Return Value
* GCC_NO_ERROR - No error occured.
* GCC_ALLOCATION_FAILURE - A resource error occured.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* GCCError ConferenceTransferRequest (
* PGCCConferenceName destination_conference_name,
* GCCNumericString destination_conference_modifier,
* CNetAddrListContainer *destination_address_list,
* USHORT number_of_destination_nodes,
* PUserID destination_node_list,
* CPassword *password);
*
* Public Function Description:
* This routine is used to send a conference transfer request to the
* top provider in the conference.
*
* Formal Parameters:
* destination_conference_name - (i) The conference name to transfer to.
* destination_conference_modifier (i) The conference modifier to
* transfer to.
* destination_address_list - (i) Network address list used to
* determine address of node to
* transfer to.
* number_of_destination_nodes - (i) Number of nodes in the list
* of nodes that should transfer.
* destination_node_list - (i) List of node IDs that should perform
* the transfer.
* password - (i) Password to use to join the
* new conference.
*
* Return Value
* GCC_NO_ERROR - No error occured.
* GCC_ALLOCATION_FAILURE - A resource error occured.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* GCCError ConferenceTransferIndication (
* PGCCConferenceName destination_conference_name,
* GCCNumericString destination_conference_modifier,
* CNetAddrListContainer *destination_address_list,
* USHORT number_of_destination_nodes,
* PUserID destination_node_list,
* CPassword *password)
*
* Public Function Description:
* This routine is used by the top provider to send out the transfer
* indication to every node in the conference. It is each nodes
* responsiblity to search the destination node list to see if
* it should transfer.
*
* Formal Parameters:
* destination_conference_name - (i) The conference name to transfer to.
* destination_conference_modifier (i) The conference modifier to
* transfer to.
* destination_address_list - (i) Network address list used to
* determine address of node to
* transfer to.
* number_of_destination_nodes - (i) Number of nodes in the list
* of nodes that should transfer.
* destination_node_list - (i) List of node IDs that should perform
* the transfer.
* password - (i) Password to use to join the
* new conference.
*
* Return Value
* GCC_NO_ERROR - No error occured.
* GCC_ALLOCATION_FAILURE - A resource error occured.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* GCCError ConferenceTransferResponse (
* UserID requesting_node_id,
* PGCCConferenceName destination_conference_name,
* GCCNumericString destination_conference_modifier,
* USHORT number_of_destination_nodes,
* PUserID destination_node_list,
* GCCResult result)
*
*
* Public Function Description:
* This routine is used by the top provider to send back a response to
* the node that made a transfer request. The info specified in the
* request is included in the response to match request to response.
*
* Formal Parameters:
* requesting_node_id - (i) The node ID of the node that made
* the original transfer request.
* destination_conference_name - (i) The conference name to transfer to.
* destination_conference_modifier (i) The conference modifier to
* transfer to.
* number_of_destination_nodes - (i) Number of nodes in the list
* of nodes that should transfer.
* destination_node_list - (i) List of node IDs that should perform
* the transfer.
* result - (i) Result of the transfer request.
*
* Return Value
* GCC_NO_ERROR - No error occured.
* GCC_ALLOCATION_FAILURE - A resource error occured.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* GCCError ConferenceAddRequest(
* TagNumber conference_add_tag,
* UserID requesting_node,
* UserID adding_node,
* UserID target_node,
* CNetAddrListContainer *network_address_container,
* CUserDataListContainer *user_data_container)
*
*
* Public Function Description:
* This routine is used to send a conference add request to the appropriate
* node. This call can be made by the requesting node or by the top
* provider to pass the add request on to the adding node.
*
* Formal Parameters:
* conference_add_tag - (i) Tag that is returned in the
* response to match request and
* response.
* requesting_node - (i) Node ID of node that made the
* original request.
* adding_node - (i) Node ID of node that is to do
* the invite request to the new node.
* target_node - (i) Node ID of node that this request
* should be sent to.
* network_address_container - (i) Network address list that can be
* used when inviting the new node.
* user_data_container - (i) User data to pass on to the
* adding node.
*
* Return Value
* GCC_NO_ERROR - No error occured.
* GCC_ALLOCATION_FAILURE - A resource error occured.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* GCCError ConferenceAddResponse(
* TagNumber add_request_tag,
* UserID requesting_node,
* CUserDataListContainer *user_data_container,
* GCCResult result)
*
* Public Function Description:
* This routine is used to send a conference add request to the appropriate
* node. This call can be made by the requesting node or by the top
* provider to pass the add request on to the adding node.
*
* Formal Parameters:
* add_request_tag - (i) Tag number that was specified in the
* original add request.
* requesting_node - (i) Node ID of node that made the original
* request.
* user_data_container - (i) User data to pass back to the requesting
* node.
* result - (i) Final result of the add request.
*
* Return Value
* GCC_NO_ERROR - No error occured.
* GCC_ALLOCATION_FAILURE - A resource error occured.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* GCCError ConductorTokenGrab();
*
* Public Function Description:
* This routine makes the MCS calls to grab the conductor token.
*
* Formal Parameters:
* None.
*
* Return Value
* GCC_NO_ERROR - No error occured.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* GCCError ConductorTokenRelease();
*
* Public Function Description:
* This routine makes the MCS calls to release the conductor token.
*
* Formal Parameters:
* None.
*
* Return Value
* GCC_NO_ERROR - No error occured.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* GCCError ConductorTokenPlease();
*
* Public Function Description:
* This routine makes the MCS calls to request the conductor token from
* the current conductor.
*
* Formal Parameters:
* None.
*
* Return Value
* GCC_NO_ERROR - No error occured.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* GCCError ConductorTokenGive (
* UserID recipient_user_id)
*
* Public Function Description:
* This routine makes the MCS calls to give the conductor token to the
* specified node.
*
* Formal Parameters:
* recipient_user_id - (i) Node ID of node to give the token to.
*
* Return Value
* GCC_NO_ERROR - No error occured.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* GCCError ConductorTokenGiveResponse(
* Result result)
*
* Public Function Description:
* This routine makes the MCS calls to respond to a conductor give
* request.
*
* Formal Parameters:
* result - (i) Did this node accept the token or not?
*
* Return Value
* GCC_NO_ERROR - No error occured.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* GCCError ConductorTokenTest()
*
* Public Function Description:
* This routine is used to test the current state of the conductor token
* (is it grabbed or not).
*
* Formal Parameters:
* None.
*
* Return Value
* GCC_NO_ERROR - No error occured.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* GCCError SendConductorAssignIndication(
* UserID conductor_user_id)
*
* Public Function Description:
* This routine sends a conductor assign indication to all the
* nodes in the conference.
*
* Formal Parameters:
* conductor_user_id - (i) The Node ID of the new Conductor.
*
* Return Value
* GCC_NO_ERROR - No error occured.
* GCC_ALLOCATION_FAILURE - A resource error occured.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* GCCError SendConductorReleaseIndication()
*
* Public Function Description:
* This routine sends a conductor release indication to all the
* nodes in the conference.
*
* Formal Parameters:
* None.
*
* Return Value
* GCC_NO_ERROR - No error occured.
* GCC_ALLOCATION_FAILURE - A resource error occured.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* GCCError SendConductorPermitAsk (
* BOOL grant_permission)
*
* Public Function Description:
* This routine sends a conductor permission ask request directly to the
* conductor node.
*
* Formal Parameters:
* grant_permission - (i) The flag indicates if permission is
* being requested or given up.
*
* Return Value
* GCC_NO_ERROR - No error occured.
* GCC_ALLOCATION_FAILURE - A resource error occured.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* GCCError SendConductorPermitGrant (
* USHORT number_granted,
* PUserID granted_node_list,
* USHORT number_waiting,
* PUserID waiting_node_list)
*
* Public Function Description:
* This routine sends a conductor permission grant indication to every
* node in the conference. Usually issued when permissions change.
*
* Formal Parameters:
* number_granted - (i) Number of nodes in the permission granted
* list.
* granted_node_list - (i) List of nodes that have been granted
* permission.
* number_waiting - (i) Number of nodes in the list of nodes
* waiting to be granted permission.
* waiting_node_list - (i) List of nodes waiting.
*
* Return Value
* GCC_NO_ERROR - No error occured.
* GCC_ALLOCATION_FAILURE - A resource error occured.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* GCCError TimeRemainingRequest (
* UINT time_remaining,
* UserID node_id)
*
* Public Function Description:
* This routine sends out an indication to every node in the
* conference informing how much time is remaining in the conference.
*
* Formal Parameters:
* time_remaining - (i) Time in seconds left in the conference.
* node_id - (i) If a value other than zero, it is which node
* to send the time remaining indication to. If
* zero send it to every node in the conference.
*
* Return Value
* GCC_NO_ERROR - No error occured.
* GCC_ALLOCATION_FAILURE - A resource error occured.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* GCCError TimeInquireRequest (
* BOOL time_is_conference_wide)
*
* Public Function Description:
* This routine sends out a request for a time remaing update.
*
* Formal Parameters:
* time_is_conference_wide - (i) Flag indicating if the request is
* for the time conference wide.
*
* Return Value
* GCC_NO_ERROR - No error occured.
* GCC_ALLOCATION_FAILURE - A resource error occured.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* GCCError ConferenceExtendIndication (
* UINT extension_time,
* BOOL time_is_conference_wide)
*
*
* Public Function Description:
* This routine sends out an indication informing conference participants
* of an extension.
*
* Formal Parameters:
* extension_time - (i) Amount of time that the conference is
* extended.
* time_is_conference_wide - (i) Flag indicating if the extension time
* is conference wide.
*
* Return Value
* GCC_NO_ERROR - No error occured.
* GCC_ALLOCATION_FAILURE - A resource error occured.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* ULONG OwnerCallback ( UINT message,
* PVoid parameter1,
* ULONG parameter2);
*
* Public Function Description
* This function overides the base class function and is used to
* receive all owner callback information from the MCS Interface object.
*
* Formal Parameters:
* message - (i) Message number including base offset.
* parameter1 - (i) void pointer of message data.
* parameter2 - (i) Long holding message data.
*
* Return Value
* GCC_NO_ERROR is always returned from this.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* BOOL FlushOutgoingPDU();
*
* Public Function Description
* This function gives the user object a chance to flush all the PDUs
* queued up for delivery. GCC PDUs are only delivered during this call.
*
* Formal Parameters:
* None.
*
* Return Value
* TRUE, if there remain un-processed msgs in the MCS message queue
* FALSE, if all the msgs in the MCS msg queue were processed.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* GCCNodeID GetMyNodeID()
*
* Public Function Description
* This function returns the Node ID for this node.
*
* Formal Parameters:
* None.
*
* Return Value
* This nodes Node ID.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* GCCNodeID GetTopNodeID ()
*
* Public Function Description
* This function returns the Top Provider's Node ID.
*
* Formal Parameters:
* None.
*
* Return Value
* The Top Providers node ID.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* GCCNodeID GetParentNodeID ()
*
* Public Function Description
* This function returns the Node ID of this nodes Parent Node.
* It returns zero if this is the top provider.
*
* Formal Parameters:
* None.
*
* Return Value
* The Parent Node ID or zero if Top Provider.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* UserID GetUserIDFromConnection(
* ConnectionHandle connection_handle)
*
* Public Function Description
* This function returns the Node ID associated with the specified
* connection handle. It returns zero if the connection handle is
* not a child connection of this node.
*
* Formal Parameters:
* connection_handle - (i) Connection Handle to search on.
*
* Return Value
* The Node ID associated with the passed in connection handle or
* ZERO if connection is not a child connection.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* void UserDisconnectIndication (
* UserID disconnected_user)
*
* Public Function Description
* This function informs the user object when a Node disconnects from
* the conference. This gives the user object a chance to clean up
* its internal information base.
*
* Formal Parameters:
* disconnected_user - (i) User ID of user that disconnected.
*
* Return Value
* None.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
#endif // _MCS_USER_H_