windows-nt/Source/XPSP1/NT/enduser/netmeeting/t120/h/conf.h

2632 lines
77 KiB
C
Raw Normal View History

2020-09-26 03:20:57 -05:00
/*
* conf.h
*
* Copyright (c) 1995 by DataBeam Corporation, Lexington, KY
*
* Abstract:
* This is the interface file for the CConf class. This class
* is where most of the inteligence within GCC lies. The class
* manages the GCC databases and routes the messages and PDUs.
*
* CConf objects represent the true heart of GCC. Each CConf
* object represents one logical conference within a GCC provider. This
* class encapsulates the conference information base which is the focal
* point for all GCC traffic. This information base consists of several
* Rogue Wave containers, including:
* - a dictionary of enrolled applications (indexed by application SAP
* handles).
* - a list of application roster managers.
* - a list of downward MCS connections.
* - a list of outstanding sequence numbers (used during conference
* establishment).
* - a list of outstanding join requests.
*
* In order to simplify the CConf class as much as possible, there are
* some things that CConf objects do not worry about. First and
* foremost is Conference and Application Roster management. This is
* handled by two separate classes. Next is the Application Registry.
* CConf objects don't maintain the Application Registry information
* base. CConf objects also do not worry about memory management.
* They merely pass Packet objects around, which contain the user data
* being handled. A CConf object has absolutely no responsibility
* for protocol data associated with an enrolled application. Below is
* more detail about what a conference is responsible for.
*
* When a CConf object is first created, its information base is
* empty. It has no enrolled applications, it has not established any MCS
* connections and it has no user attachment to MCS. There is a period of
* time that will be referred to as the Conference Establishment Process
* where the CConf object is progressing through the steps defined by
* the T.124 specification to join or create a conference. This process
* varies depending on the request that initiated the creation of the
* conference. A CConf Object must know if it is a Top Provider.
* Many of the establishment procedures and normal operating procedures
* vary depending on this. A CConf object learns of its type through
* the initial requests that are made to it. For example, if a
* CConf receives a ConferenceCreateRequest where the conference is
* to be created locally it knows it is the Top Provider.
*
* The establishment process involves three main steps that all nodes go
* through when creating a new conference. The first is establishing the
* MCS connection either through a ConnectProviderRequest or a
* ConnectProviderResponse call (note that this step is skipped when
* creating a local conference). If this step is successful, the
* CConf object will create an MCSUser object which progresses through
* a number of its own internal steps which include creating an MCS User
* Attachment and joining the appropriate channels (which are handled by
* the MCSUser object). Finally, when the above two steps have successfully
* completed, the conference creates an Application Registry and the
* CConfRosterMgr objects and informs the Controller that the
* conference is established. A conference cannot respond to any request
* during this establishment process. For instance, a conference will not
* show up in a Conference Query descriptor list during the establishment
* phase.
*
* A note about the creation of the CConfRosterMgr objects.
* A CConf object that is not the Top Provider will instantiate both
* a Local and a Global CConfRosterMgr while the Top Provider
* only maintains a Global Conference Roster Manager. A Local manager
* maintains a Conference Roster which holds the local nodes conference
* record and the conference records for all nodes below it in the
* connection hierarchy. A Global manager maintains a Conference Roster
* which includes the conference records for every node that has announced
* its presence with the conference.
*
* After the above establishment process is complete the Owner Object is
* notified through an owner callback that the conference is ready for
* action. When the node controller receives a
* GCC_PERMIT_TO_ANNOUNCE_PRESENCE indication it must respond with a call
* to GCCAnnouncePresenceRequest(). This is when the node controller
* passes its conference record (which contains all the pertinent
* information about the node) to the newly created conference. This
* request travels through the CControlSAP directly to the conference
* through a GCCCommandTarget call. Remember that the CConf class
* inherits from the GCCCommandTarget class. Whenever a call is made
* directly to a CConf object from either a CControlSAP or an CAppSap
* object, it is made through a command target call.
*
* When an application receives a GCC_PERMIT_TO_ENROLL_INDICATION it must
* respond by calling AppEnrollRequest() to inform the
* CConf object whether or not it wants to enroll with the conference.
* When an application enroll request is received by a CConf
* object a number of things happen, some of which depend on whether the
* CConf object is a Top Provider or a subordinate node. First the
* CConf determines if the application is enrolling. If it isn't, a
* GCC_APPLICATION_ENROLL_CONFIRM is sent to the application that made the
* request and no further action is taken. If the application is
* enrolling, the CConf object first registers itself with the CAppSap
* making the request. This allows future application requests to travel
* directly to the CConf object through command target calls. The
* CConf then establishes the Application Roster Manager
* (if necessary) for this particular application.
*
* After the above establishment and enrollment process is completed a
* CConf object sits idle waiting to service requests or process
* incoming PDUs. These include RosterUpdateIndications as well as
* CRegistry requests.
*
* A CConf object can be deleted in a number of different ways. If a
* resource error occurs, a conference can Terminate itself by sending an
* error TERMINATE indication to its owner through an owner callback.
* The node controller can terminate a conference object by calling
* GCCConferenceDisconnectRequest() or GCCConferenceTerminateRequest(). A
* CConf object can also be terminated if it loses its parent
* connection or if it is set up to automatically terminate after all its
* subordinate nodes disconnect. These types of Terminates are initiated
* through owner callbacks to the Owner Object.
*
* Portable:
* Yes
*
* Caveats:
* None.
*
* Author:
* blp
*/
#ifndef _CONFERENCE_
#define _CONFERENCE_
#include "arostmgr.h"
#include "sap.h"
#include "pktcoder.h"
#include "mcsdllif.h"
#include "password.h"
#include "netaddr.h"
#include "privlist.h"
#include "crostmgr.h"
#include "registry.h"
#include "appsap.h"
#include "csap.h"
// Message bases
#define USER_ATTACHMENT_MESSAGE_BASE 100
#define APP_ROSTER_MGR_MESSAGE_BASE 200
#define CONF_ROSTER_MGR_MESSAGE_BASE 300
enum
{
CONF_FLUSH_ROSTER_DATA = CONFMSG_BASE + 1,
};
typedef struct
{
GCCConfID conference_id;
GCCReason reason;
}
CONF_TERMINATE_INFO;
typedef struct
{
ConnectionHandle connection_handle;
TagNumber invite_tag;
CUserDataListContainer *user_data_list;
}
INVITE_REQ_INFO;
/* This structure is used to hold all of an APEs enrollment information.
** Every APE enrolled with a conference will have a single one of these
** info structures defined for it.
*/
//
// LONCHANC: We should merge the following to another structure or class
// because it has 2 dwords and we need to allocate memory for it.
//
typedef struct
{
CAppSap *pAppSap;
CSessKeyContainer *session_key;
}
ENROLLED_APE_INFO;
/*
** Lists/Dictionaries used by the CConf Object
*/
// This list is used to keep track of the outstanding join responses
class CJoinRespNamePresentConnHdlList2 : public CList2
{
// use TRUE_PTR and FALSE_PTR
DEFINE_CLIST2_(CJoinRespNamePresentConnHdlList2, BOOL_PTR, ConnectionHandle)
};
// This list is used to keep track of the enrolled APEs
class CEnrolledApeEidList2 : public CList2
{
DEFINE_CLIST2_(CEnrolledApeEidList2, ENROLLED_APE_INFO*, GCCEntityID)
};
// This list is keeps up with the child node connection handles
class CConnHandleList : public CList
{
DEFINE_CLIST_(CConnHandleList, ConnectionHandle)
};
// This list is used to match outstanding user IDs
typedef TagNumber UserIDTagNumber; // unsigned long
class CConnHdlTagNumberList2 : public CList2
{
DEFINE_CLIST2(CConnHdlTagNumberList2, ConnectionHandle, UserIDTagNumber)
};
// This list is used to hold all the outstanding invite request
class CInviteRequestList : public CList
{
DEFINE_CLIST(CInviteRequestList, INVITE_REQ_INFO*)
};
// This list is used to hold all the outstanding ejects
class CEjectedNodeConfirmList : public CList
{
DEFINE_CLIST_(CEjectedNodeConfirmList, GCCNodeID)
};
// This list is a queue of outstanding conductor token test
class CConductorTestList : public CList
{
DEFINE_CLIST(CConductorTestList, CBaseSap*)
};
// this list is a queue of outstanding "add" request
class CNetAddrTagNumberList2 : public CList2
{
DEFINE_CLIST2(CNetAddrTagNumberList2, CNetAddrListContainer*, TagNumber)
};
class CTagNumberTagNumberList2 : public CList2
{
DEFINE_CLIST2__(CTagNumberTagNumberList2, TagNumber)
};
// this list holds the NetMeeting version numbers of all nodes in the conference
class CNodeVersionList2 : public CList2
{
DEFINE_CLIST2_(CNodeVersionList2, DWORD_PTR, GCCNodeID)
};
// Conference specification parameters
typedef struct
{
BOOL fClearPassword;
BOOL fConfLocked;
BOOL fConfListed;
BOOL fConfConductable;
GCCTerminationMethod eTerminationMethod;
PGCCConferencePrivileges pConductPrivilege;
PGCCConferencePrivileges pConductModePrivilege;
PGCCConferencePrivileges pNonConductPrivilege;
LPWSTR pwszConfDescriptor;
}
CONF_SPEC_PARAMS;
// The class definition
class CConf : public CRefCount
{
friend class MCSUser;
public:
CConf
(
PGCCConferenceName conference_name,
GCCNumericString conference_modifier,
GCCConfID conference_id,
CONF_SPEC_PARAMS *pConfSpecParams,
UINT cNetworkAddresses,
PGCCNetworkAddress *pLocalNetworkAddress,
PGCCError return_value
);
~CConf(void);
/*
** Public Member Functions : should only be called
** by the owner object
*/
GCCError ConfCreateRequest(
TransportAddress calling_address,
TransportAddress called_address,
BOOL fSecure,
CPassword *convener_password,
CPassword *password,
LPWSTR pwszCallerID,
PDomainParameters domain_parameters,
CUserDataListContainer *user_data_list,
PConnectionHandle connection_handle);
GCCError ConfCreateResponse(
ConnectionHandle connection_handle,
PDomainParameters domain_parameters,
CUserDataListContainer *user_data_list);
GCCError ConfJoinRequest
(
GCCNumericString called_node_modifier,
CPassword *convener_password,
CPassword *password_challenge,
LPWSTR pwszCallerID,
TransportAddress calling_address,
TransportAddress called_address,
BOOL fSecure,
PDomainParameters domain_parameters,
CUserDataListContainer *user_data_list,
PConnectionHandle connection_handle
);
GCCError ForwardConfJoinRequest
(
CPassword *convener_password,
CPassword *password_challange,
LPWSTR pwszCallerID,
CUserDataListContainer *user_data_list,
BOOL numeric_name_present,
ConnectionHandle connection_handle
);
GCCError ConfJoinIndResponse
(
ConnectionHandle connection_handle,
CPassword *password_challenge,
CUserDataListContainer *user_data_list,
BOOL numeric_name_present,
BOOL convener_is_joining,
GCCResult result
);
GCCError ConfInviteResponse(
UserID parent_user_id,
UserID top_user_id,
TagNumber tag_number,
ConnectionHandle connection_handle,
BOOL fSecure,
PDomainParameters domain_parameters,
CUserDataListContainer *user_data_list);
GCCError RegisterAppSap(CAppSap *);
GCCError UnRegisterAppSap(CAppSap *);
GCCError DisconnectProviderIndication(ConnectionHandle);
GCCError ConfRosterInquireRequest(CBaseSap *, GCCAppSapMsgEx **);
GCCError AppRosterInquireRequest(GCCSessionKey *, CAppRosterMsg **);
BOOL FlushOutgoingPDU(void);
GCCConfID GetConfID ( void ) { return m_nConfID; }
ConferenceNodeType GetConfNodeType ( void ) { return m_eNodeType; }
GCCNodeID GetParentNodeID(void) { return (m_pMcsUserObject ? m_pMcsUserObject->GetParentNodeID() : 0); }
BOOL IsConfTopProvider ( void )
{
return ((m_eNodeType == TOP_PROVIDER_AND_CONVENER_NODE) ||
(m_eNodeType == TOP_PROVIDER_NODE));
}
GCCNodeID GetTopProvider(void) { return (m_pMcsUserObject ? m_pMcsUserObject->GetTopNodeID() : 0); }
BOOL DoesConvenerExists ( void ) { return (m_nConvenerNodeID != 0); }
BOOL IsConfListed ( void ) { return m_fConfListed; }
BOOL IsConfPasswordInTheClear ( void ) { return m_fClearPassword; }
BOOL IsConfLocked ( void ) { return m_fConfLocked; }
BOOL IsConfEstablished ( void ) { return m_fConfIsEstablished; }
BOOL IsConfConductible ( void ) { return m_fConfConductible; }
BOOL IsConfSecure ( void ) { return m_fSecure; }
LPSTR GetNumericConfName ( void ) { return m_pszConfNumericName; }
LPWSTR GetTextConfName ( void ) { return m_pwszConfTextName; }
LPSTR GetConfModifier ( void ) { return m_pszConfModifier; }
LPWSTR GetConfDescription ( void ) { return m_pwszConfDescription; }
CNetAddrListContainer *GetNetworkAddressList ( void ) { return m_pNetworkAddressList; }
void ConfIsOver ( void ) { m_fConfIsEstablished = FALSE; }
CRegistry *GetRegistry ( void ) { return m_pAppRegistry; }
/*
** These are Command Targets
*/
GCCError ConfJoinReqResponse(
UserID receiver_id,
CPassword *password_challenge,
CUserDataListContainer *user_data_list,
GCCResult result);
GCCError ConfInviteRequest(
LPWSTR pwszCallerID,
TransportAddress calling_address,
TransportAddress called_address,
BOOL fSecure,
CUserDataListContainer *user_data_list,
PConnectionHandle connection_handle);
GCCError ConfLockResponse(UserID uidRequester, GCCResult);
GCCError ConfEjectUserRequest(UserID uidEjected, GCCReason reason);
GCCError ConfAnnouncePresenceRequest(PGCCNodeRecord node_record);
GCCError ConfDisconnectRequest(void);
GCCError AppEnrollRequest(CAppSap *, GCCEnrollRequest *, GCCRequestTag);
#ifdef JASPER
GCCError ConfLockRequest(void);
GCCError ConfUnlockRequest(void);
GCCError ConfUnlockResponse(UserID uidRequester, GCCResult result);
GCCError ConfTerminateRequest(GCCReason reason);
#endif // JASPER
/******************** Registry calls **************************/
GCCError RegistryRegisterChannelRequest(
PGCCRegistryKey registry_key,
ChannelID channel_id,
CAppSap *);
GCCError RegistryAssignTokenRequest(
PGCCRegistryKey registry_key,
CAppSap *);
GCCError RegistrySetParameterRequest (
PGCCRegistryKey registry_key,
LPOSTR parameter_value,
GCCModificationRights modification_rights,
CAppSap *);
GCCError RegistryRetrieveEntryRequest(
PGCCRegistryKey registry_key,
CAppSap *);
GCCError RegistryDeleteEntryRequest(
PGCCRegistryKey registry_key,
CAppSap *);
GCCError RegistryMonitorRequest(
BOOL enable_delivery,
PGCCRegistryKey registry_key,
CAppSap *);
GCCError RegistryAllocateHandleRequest(
UINT number_of_handles,
CAppSap *);
/******************** Conductorship calls **************************/
GCCError ConductorGiveResponse(GCCResult result);
#ifdef JASPER
GCCError ConductorAssignRequest(void);
GCCError ConductorReleaseRequest(void);
GCCError ConductorPleaseRequest(void);
GCCError ConductorGiveRequest(UserID recipient_node_id);
GCCError ConductorPermitAskRequest(BOOL grant_permission);
GCCError ConductorPermitGrantRequest(
UINT number_granted,
PUserID granted_node_list,
UINT number_waiting,
PUserID waiting_node_list);
#endif // JASPER
GCCError ConductorInquireRequest(CBaseSap *);
/********************************************************************/
// Miscelaneous calls
GCCError ConferenceTimeRemainingRequest (
UINT time_remaining,
UserID node_id);
GCCError AppInvokeRequest(
CInvokeSpecifierListContainer*,
GCCSimpleNodeList *,
CBaseSap *,
GCCRequestTag);
GCCError UpdateNodeVersionList(PGCCPDU roster_update,
UserID sender_id);
DWORD_PTR GetNodeVersion(UserID nodeId) { return m_NodeVersionList2.Find(nodeId); }
BOOL HasNM2xNode(void);
#ifdef JASPER
GCCError ConfTimeInquireRequest(BOOL time_is_conference_wide);
GCCError ConfExtendRequest (
UINT extension_time,
BOOL time_is_conference_wide);
GCCError ConfAssistanceRequest(
UINT number_of_user_data_members,
PGCCUserData * user_data_list);
GCCError TextMessageRequest (
LPWSTR pwszTextMsg,
UserID destination_node );
GCCError ConfTransferRequest (
PGCCConferenceName destination_conference_name,
GCCNumericString destination_conference_modifier,
CNetAddrListContainer *network_address_list,
UINT number_of_destination_nodes,
PUserID destination_node_list,
CPassword *password);
GCCError ConfAddRequest (
CNetAddrListContainer *network_address_container,
UserID adding_node,
CUserDataListContainer *user_data_container);
#endif // JASPER
GCCError ConfAddResponse (
GCCResponseTag add_response_tag,
UserID requesting_node,
CUserDataListContainer *user_data_container,
GCCResult result);
void WndMsgHandler(UINT);
// Routines called from the mcs interface
void ProcessConnectProviderConfirm(PConnectProviderConfirm connect_provider_confirm);
// Callback from conf roster manager
void ConfRosterReportIndication ( CConfRosterMsg * );
void CancelInviteRequest(ConnectionHandle);
protected:
//
// Routines called from the user object via owner callbacks
//
void ProcessConferenceCreateResponsePDU(
PConferenceCreateResponse create_response,
PConnectProviderConfirm connect_provider_confirm);
void ProcessConferenceJoinResponsePDU(
PConferenceJoinResponse join_response,
PConnectProviderConfirm connect_provider_confirm);
void ProcessConferenceInviteResponsePDU(
PConferenceInviteResponse invite_response,
PConnectProviderConfirm connect_provider_confirm);
void ProcessUserIDIndication(
TagNumber tag_number,
UserID user_id);
void ProcessUserCreateConfirm(
UserResultType result,
UserID user_id);
void ProcessRosterUpdatePDU(
PGCCPDU roster_update,
UserID sender_id);
void ProcessRosterRefreshPDU(
PGCCPDU roster_update,
UserID sender_id);
GCCError ProcessAppRosterIndicationPDU(
PGCCPDU roster_update,
UserID sender_id);
void ProcessDetachUserIndication(
UserID detached_user,
GCCReason reason);
void ProcessTerminateRequest(
UserID requester_id,
GCCReason reason);
void ProcessTerminateIndication(GCCReason reason);
void ProcessEjectUserRequest(PUserEjectNodeRequestInfo eject_node_request);
void ProcessEjectUserIndication(GCCReason reason);
void ProcessEjectUserResponse(PUserEjectNodeResponseInfo eject_node_response);
void ProcessConferenceLockRequest(UserID requester_id);
void ProcessConferenceUnlockRequest(UserID requester_id);
void ProcessConferenceLockIndication(UserID source_id);
void ProcessConferenceUnlockIndication(UserID source_id);
void ProcessConfJoinResponse(PUserJoinResponseInfo);
void ProcessAppInvokeIndication(CInvokeSpecifierListContainer *, UserID);
#ifdef JASPER
void ProcessConductorPermitAskIndication(PPermitAskIndicationInfo);
#endif // JASPER
void ProcessConfAddResponse(PAddResponseInfo);
/***************** Conductorship calls ***********************/
void ProcessConductorGrabConfirm(GCCResult result);
void ProcessConductorAssignIndication(UserID uidNewConductor, UserID uidSender);
void ProcessConductorReleaseIndication(UserID uidSender);
void ProcessConductorGiveIndication(UserID uidGiver);
void ProcessConductorGiveConfirm(GCCResult);
void ProcessConductorPermitGrantInd(PUserPermissionGrantIndicationInfo, UserID uidSender);
void ProcessConductorTestConfirm(GCCResult);
void ProcessConferenceTransferRequest(
UserID requesting_node_id,
PGCCConferenceName destination_conference_name,
GCCNumericString destination_conference_modifier,
CNetAddrListContainer *destination_address_list,
UINT number_of_destination_nodes,
PUserID destination_node_list,
CPassword *password);
void ProcessConferenceTransferIndication(
PGCCConferenceName destination_conference_name,
GCCNumericString destination_conference_modifier,
CNetAddrListContainer *destination_address_list,
CPassword *password);
void ProcessConferenceAddRequest(
CNetAddrListContainer *network_address_list,
CUserDataListContainer *user_data_list,
UserID adding_node,
TagNumber add_request_tag,
UserID requesting_node);
void InitiateTermination(GCCReason, UserID uidRequester);
// look for this node ID in the roster's record set.
BOOL IsThisNodeParticipant(GCCNodeID);
private:
/*************************************************************/
CAppRosterMgr *GetAppRosterManager(PGCCSessionKey session_key);
TagNumber GetNewUserIDTag(void);
void GetConferenceNameAndModifier(PGCCConferenceName, PGCCNumericString pszConfModifier);
BOOL DoesRequesterHavePrivilege(UserID uidRequester, ConferencePrivilegeType);
GCCError SendFullRosterRefresh(void);
GCCError UpdateNewConferenceNode(void);
/*
** This group of routines operates on the enrolled APE list.
*/
GCCError GetEntityIDFromAPEList(CAppSap *, PGCCSessionKey, GCCEntityID *);
GCCError GenerateEntityIDForAPEList(CAppSap *, PGCCSessionKey, GCCEntityID *);
void RemoveSAPFromAPEList(CAppSap *);
ENROLLED_APE_INFO *GetEnrolledAPEbySap(CAppSap *, GCCEntityID *);
GCCError FlushRosterData(void);
GCCError AsynchFlushRosterData(void);
void DeleteEnrolledAPE(GCCEntityID);
BOOL IsReadyToSendAppRosterUpdate(void);
void DeleteOutstandingInviteRequests(void);
void DeleteInviteRequest(INVITE_REQ_INFO *);
BOOL DoesSAPHaveEnrolledAPE(CAppSap *pAppSap)
{
return (BOOL) (UINT_PTR) GetEnrolledAPEbySap(pAppSap, NULL);
}
// Yikang: This method checks whether the roster update PDU
// contains the applet. The refreshonly argument indicates
// whether or not to check the record updates.
BOOL DoesRosterPDUContainApplet(PGCCPDU roster_update,
const struct Key *obj_key, BOOL refreshonly = TRUE);
void AddNodeVersion(UserID, NodeRecord*);
private:
CAppRosterMgrList m_AppRosterMgrList;
CAppSapList m_RegisteredAppSapList;
CEnrolledApeEidList2 m_EnrolledApeEidList2;
CNetAddrListContainer *m_pNetworkAddressList;
CUserDataListContainer *m_pUserDataList;
CConnHandleList m_ConnHandleList;
CConnHdlTagNumberList2 m_ConnHdlTagNumberList2;
CJoinRespNamePresentConnHdlList2 m_JoinRespNamePresentConnHdlList2;
CInviteRequestList m_InviteRequestList;
CEjectedNodeConfirmList m_EjectedNodeConfirmList;
CConductorTestList m_ConductorTestList;
CNetAddrTagNumberList2 m_AddRequestList;
CTagNumberTagNumberList2 m_AddResponseList;
CNodeVersionList2 m_NodeVersionList2;
PMCSUser m_pMcsUserObject;
LPSTR m_pszConfNumericName;
LPWSTR m_pwszConfTextName;
LPWSTR m_pwszConfDescription;
LPSTR m_pszConfModifier;
LPSTR m_pszRemoteModifier;
GCCConfID m_nConfID;
UserID m_nConvenerNodeID;
BOOL m_fConfLocked;
BOOL m_fConfListed;
BOOL m_fConfConductible;
BOOL m_fClearPassword;
BOOL m_fConfIsEstablished;
BOOL m_fConfDisconnectPending;
BOOL m_fConfTerminatePending;
BOOL m_fTerminationInitiated;
BOOL m_fSecure;
BOOL m_fWBEnrolled;
BOOL m_fFTEnrolled;
BOOL m_fChatEnrolled;
GCCTerminationMethod m_eTerminationMethod;
GCCReason m_eConfTerminateReason;
PDomainParameters m_pDomainParameters;
ConferenceNodeType m_eNodeType;
UserIDTagNumber m_nUserIDTagNumber;
UserIDTagNumber m_nConvenerUserIDTagNumber;
TagNumber m_nParentIDTagNumber;
TagNumber m_nConfAddRequestTagNumber;
ConnectionHandle m_hParentConnection;
ConnectionHandle m_hConvenerConnection;
PAlarm m_pConfTerminateAlarm;
PAlarm m_pConfStartupAlarm;
PPrivilegeListData m_pConductorPrivilegeList;
PPrivilegeListData m_pConductModePrivilegeList;
PPrivilegeListData m_pNonConductModePrivilegeList;
GCCResponseTag m_nConfAddResponseTag;
CConfRosterMgr *m_pConfRosterMgr;
CRegistry *m_pAppRegistry;
UserID m_nConductorNodeID;
UserID m_nPendingConductorNodeID;
BOOL m_fConductorGrantedPermission;
BOOL m_fConductorGiveResponsePending;
BOOL m_fConductorAssignRequestPending;
EntityID m_nAPEEntityID;
//
// LONCHANC; m_cPermittedEnrollment is the number of
// GCC-Application-Permit-to-Enroll. we need to wait for all
// the corresponding GCC-Application-Enroll-Request come in.
// then, we will send out a single
// GCC-Application-Roster-Update-Indication to the wire.
//
int m_cEnrollRequests; // LONCHANC: must be signed
BOOL m_fFirstAppRosterSent;
};
typedef CConf * PConference;
#endif
/*
* CConf( PGCCConferenceName conference_name,
* GCCNumericString conference_modifier,
* GCCConfID conference_id,
* BOOL use_password_in_the_clear,
* BOOL conference_locked,
* BOOL conference_listed,
* BOOL conference_conductable,
* GCCTerminationMethod termination_method,
* PGCCConferencePrivileges conduct_privilege_list,
* PGCCConferencePrivileges conduct_mode_privilege_list,
* PGCCConferencePrivileges non_conduct_privilege_list,
* LPWSTR pwszConfDescriptor,
* UINT number_of_network_addresses,
* PGCCNetworkAddress * local_network_address_list,
* CControlSAP *control_sap,
* UINT owner_message_base,
* PGCCError return_value);
*
* Public member function of CConf
*
* Function Description
* This is the conference constructor. It is responsible for
* initializing all the instance variables used by this class.
* It also creates the MCS domain based on the conference id.
* Fatal errors are returned from this constructor in the
* return value. Note that this constructor is used when the
* CConf specification parameters such as termination
* method or known in advance of conference creation. This is
* the case for a convenor node and a top provider. It is not
* used for joining nodes.
*
* Formal Parameters:
* conference_name (i) Structure pointer that holds the confernce name.
* conference_modifier (i) Pointer to the conference modifier.
* conference_id (i) The assigned conference ID.
* use_password_in_the_clear
* (i) Flag specifying if the password is in the clear.
* conference_locked (i) Flag specifying if the conference is locked.
* conference_listed (i) Flag specifying if the conference is listed.
* conference_conductable
* (i) Flag specifying if conference is conductable.
* termination_method (i) Flag specifying the termination method.
* conduct_privilege_list
* (i) Privilege list used by the conductor.
* conduct_mode_privilege_list
* (i) Privilege list used in conducted mode.
* non_conduct_privilege_list
* (i) Privilege list used when not in conducted mode.
* conference_descriptor
* (i) Pointer to the conference descriptor.
* number_of_network_addresses
* (i) Number of network addresses in list.
* local_network_address_list
* (i) List of local network addresses.
* mcs_interface (i) Pointer to the MCS interface object.
* control_sap (i) Pointer to the Node Controller SAP.
* owner_object (i) Pointer to the object that created this object.
* owner_message_base (i) The number added to all owner callback messages.
* packet_coder (i) Pointer to the Packet Coder object used for PDUs
* return_value (o) Errors that occur are returned here.
*
*
* Return Value
* GCC_NO_ERROR - No error occured.
* GCC_ALLOCATION_FAILURE - Resource error occured.
* GCC_INVALID_CONFERENCE_NAME - Invalid conference name passed in.
* GCC_FAILURE_CREATING_DOMAIN - Failure creating domain.
* GCC_BAD_NETWORK_ADDRESS - Bad network address passed in.
* GCC_BAD_NETWORK_ADDRESS_TYPE - Bad network address type passed in.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* CConf( PGCCConferenceName conference_name,
* GCCNumericString conference_modifier,
* GCCConfID conference_id,
* UINT number_of_network_addresses,
* PGCCNetworkAddress * local_network_address_list,
* CControlSAP *control_sap,
* UINT owner_message_base,
* PGCCError return_value);
*
* Public member function of CConf
*
* Function Description
* This is the conference constructor. It is responsible for
* initializing all the instance variables used by this class.
* It also creates the MCS domain based on the conference id.
* Fatal errors are returned from this constructor in the
* return value. Note that this constructor is used by nodes that
* do not know the CConf specification parameters such as
* termination method in advance of conference creation. This is
* the case for joining nodes.
*
* Formal Parameters:
* conference_name (i) Structure pointer that holds the confernce name.
* conference_modifier (i) Pointer to the conference modifier.
* conference_id (i) The assigned conference ID.
* number_of_network_addresses
* (i) Number of local network addresses in list.
* local_network_address_list
* (i) List of local network addresses.
* control_sap (i) Pointer to the Node Controller SAP.
* packet_coder (i) Pointer to the Packet Coder object used for PDUs
* return_value (o) Errors that occur are returned here.
*
*
* Return Value
* GCC_NO_ERROR - No error occured.
* GCC_ALLOCATION_FAILURE - Resource error occured.
* GCC_FAILURE_CREATING_DOMAIN - Failure creating domain.
* GCC_BAD_NETWORK_ADDRESS - Bad network address passed in.
* GCC_BAD_NETWORK_ADDRESS_TYPE - Bad network address type passed in.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* GCCError ConfCreateRequest(
* TransportAddress calling_address,
* TransportAddress called_addrescs,
* CPassword *convener_password,
* CPassword *password,
* LPWSTR pwszCallerID,
* PDomainParameters domain_parameters,
* CUserDataListContainer *user_data_list,
* PConnectionHandle connection_handle)
*
* Public member function of CConf
*
* Function Description
* This function is called when a Conference Create Request PDU is to be
* issued. Note that a local conference can be created by setting the
* called address to NULL.
*
* Formal Parameters:
* calling_address (i) Address of the calling node.
* called_address (i) Address of the called node. Null for local conf.
* convener_password (i) Password used by convener to get back priviliges
* password (i) Password needed to join the conference.
* caller_identifier (i) Unicode string specifying the caller ID.
* domain_parameters (i) The MCS domain parameters.
* user_data_list (i) Pointer to a User data list object.
* connection_handle (o) The logical connection handle is returned here.
*
* Return Value
* GCC_NO_ERROR: - No error
* GCC_ALLOCATION_FAILURE - Resource error occured
* GCC_INVALID_TRANSPORT_ADDRESS - Something wrong with transport address
* GCC_FAILURE_ATTACHING_TO_MCS - Failure creating MCS user attachment
* GCC_INVALID_ADDRESS_PREFIX - Invalid transport address prefix
*
* Side Effects
* None.
*
* Caveats
* Passing in NULL for the called address will create a local conference.
*/
/*
* GCCError ConfCreateResponse(
* ConnectionHandle connection_handle,
* PDomainParameters domain_parameters,
* CUserDataListContainer *user_data_list)
*
* Public member function of CConf
*
* Function Description
* This function is called when a Conference Create Response PDU is to be
* issued. It should only be issued in response to a
* ConferenceCreateRequest. The connection handle is used to match the
* request with the response.
*
* Formal Parameters:
* connection_handle (i) Connection handled specified in the request.
* domain_parameters (i) The MCS domain parameters.
* user_data_list (i) Pointer to a User data list object.
*
* Return Value
* GCC_NO_ERROR: - No error
* GCC_ALLOCATION_FAILURE - Resource error occured
* GCC_FAILURE_ATTACHING_TO_MCS - Failure creating MCS user attachment
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* GCCError ConfJoinRequest(
* GCCNumericString called_node_modifier,
* CPassword *convener_password,
* CPassword *password_challenge,
* LPWSTR pwszCallerID,
* TransportAddress calling_address,
* TransportAddress called_address,
* PDomainParameters domain_parameters,
* CUserDataListContainer *user_data_list,
* PConnectionHandle connection_handle)
*
* Public member function of CConf
*
* Function Description
* This function is called when a Conference Join Request PDU is to be
* issued. The second constructor defined above should have been
* used to create the conference object before the routine is called.
*
* Formal Parameters:
* called_node_modifier(i) The conference modifier at the node being joined
* convener_password (i) Password used by convener to get back priviliges
* password_challenge (i) Password used to join a conference.
* caller_identifier (i) Unicode string specifying the caller ID.
* calling_address (i) Address of the calling node.
* called_address (i) Address of the called node.
* domain_parameters (i) The MCS domain parameters.
* user_data_list (i) Pointer to a User data list object.
* connection_handle (o) The logical connection handle is returned here.
*
* Return Value
* GCC_NO_ERROR: - No error
* GCC_ALLOCATION_FAILURE - Resource error occured
* GCC_INVALID_TRANSPORT_ADDRESS - Something wrong with transport address
* GCC_FAILURE_ATTACHING_TO_MCS - Failure creating MCS user attachment
* GCC_INVALID_ADDRESS_PREFIX - Invalid transport address prefix
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* GCCError ForwardConfJoinRequest (
* CPassword *convener_password,
* CPassword *password_challange,
* LPWSTR pwszCallerID,
* CUserDataListContainer *user_data_list,
* BOOL numeric_name_present,
* ConnectionHandle connection_handle)
*
* Public member function of CConf
*
* Function Description
* This function is called when a Conference Join Request is to be
* forwarded to the Top Provider. This call will be made after an
* intermediate node calls Join Response with a successful result
* value.
*
* Formal Parameters:
* convener_password (i) Password used by convener to get back priviliges
* password_challenge (i) Password used to join a conference.
* caller_identifier (i) Unicode string specifying the caller ID.
* user_data_list (i) Pointer to a User data list object.
* numeric_name_present(i) This flag states that the numeric portion of
* the conference name was specified in the
* request. Therefore, the text name is returned
* in the response.
* connection_handle (i) The logical connection handle defined by the
* request.
*
* Return Value
* GCC_NO_ERROR: - No error
* GCC_ALLOCATION_FAILURE - Resource error occured
* GCC_INVALID_CONFERENCE - Returned if this node is the Top
* Provider
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* GCCError ConfJoinIndResponse(
* ConnectionHandle connection_handle,
* CPassword *password_challenge,
* CUserDataListContainer *user_data_list,
* BOOL numeric_name_present,
* BOOL convener_is_joining,
* GCCResult result)
*
* Public member function of CConf
*
* Function Description
* This function is called when a Conference Join Response PDU is to be
* issued. It is called in response to a ConferenceJoinRequest being
* received.
*
* Formal Parameters:
* connection_handle (i) Connection handled specified in the request.
* password_challenge (i) Password used when joining a conference.
* user_data_list (i) Pointer to a User data list object.
* numeric_name_present(i) This flag states that the numeric portion of
* the conference name was specified in the
* request. Therefore, the text name is returned
* in the response.
* convener_is_joining (i) Flag stating that the convener is rejoining
* the conference.
* result (i) Result code to be returned in the response.
*
* Return Value
* GCC_NO_ERROR: - No error
* GCC_ALLOCATION_FAILURE - Resource error occured
* GCC_DOMAIN_PARAMETERS_UNACCEPTABLE - Domain parameters were
* unacceptable for this connection.
*
* Side Effects
* None.
*
* Caveats
* If the GCC_DOMAIN_PARAMETERS_UNACCEPTABLE error is returned from this
* routine, MCS will automatically reject the connection sending a
* result to the other side stating the the Domain Parameters were
* unacceptable.
*/
/*
* GCCError ConfInviteResponse(
* UserID parent_user_id,
* UserID top_user_id,
* TagNumber tag_number,
* ConnectionHandle connection_handle,
* PDomainParameters domain_parameters,
* CUserDataListContainer *user_data_list)
*
* Public member function of CConf
*
* Function Description
* This function is called when a Conference Invite Response PDU is to be
* issued. It is called in response to an Invite request.
*
* Formal Parameters:
* parent_user_id (i) The MCS user ID of the parent node.
* top_user_id (i) The MCS user ID of the Top Provider.
* tag_number (i) Tag the matches the request with the response.
* connection_handle (i) Connection handled specified in the request.
* domain_parameters (i) The MCS domain parameters.
* user_data_list (i) Pointer to a User data list object.
*
* Return Value
* GCC_NO_ERROR: - No error
* GCC_ALLOCATION_FAILURE - Resource error occured
* GCC_FAILURE_ATTACHING_TO_MCS - Failure creating MCS user
* attachment
* GCC_DOMAIN_PARAMETERS_UNACCEPTABLE - Domain parameters were
* unacceptable for this connection.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* CConf::RegisterAppSap(CAppSap *pAppSap)
*
* Public Function Description
* This routine is called from the owner object whenever an application
* SAP becomes a candidate for Enrollment. This will happen whenever
* Applications SAPs exists at the same time a conference becomes
* established. It will also be called whenever a conference exists
* and a new application SAP is created.
*
* Formal Parameters:
* pAppSap (i) Pointer to the application SAP object associated
* with the registering Application.
* hSap
* (i) SAP handle of the registering Application.
*
* Return Value
* GCC_NO_ERROR: - No error
* GCC_ALLOCATION_FAILURE - Resource error occured
* GCC_CONFERENCE_NOT_ESTABLISHED - CConf object has not completed
* its establishment process.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* CConf::UnRegisterAppSap(CAppSap *pAppSap)
*
* Public Function Description
* This routine is called from the owner object whenever an application
* SAP becomes unavailable due to whatever reason. This routine is
* responsible for unenrolling any APEs from any rosters that it might have
* used this SAP to enroll with.
*
* Formal Parameters:
* application_sap_handle
* (i) SAP handle of the unregistering Application.
*
* Return Value
* GCC_NO_ERROR: - No error
* GCC_APPLICATION_NOT_REGISTERED - The application was not registered.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* GCCError DisconnectProviderIndication(
* ConnectionHandle connection_handle)
*
* Public member function of CConf
*
* Function Description
* This function is called whenever a disconnect indication is received
* by GCC. It is used to inform the conference of any logical connections
* it that might have gone down.
*
* Formal Parameters:
* connection_handle (i) Logical connection handle that was disconnected
*
* Return Value
* GCC_NO_ERROR: - No error
* GCC_ALLOCATION_FAILURE - Resource error occured
* GCC_INVALID_PARAMETER - This connection handle is not used
* by this conference.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* GCCError DisconnectProviderIndication(
* ConnectionHandle connection_handle)
*
* Public member function of CConf
*
* Function Description
* This function is called whenever a disconnect indication is received
* by GCC. It is used to inform the conference of any logical connections
* it that might have gone down.
*
* Formal Parameters:
* connection_handle (i) Logical connection handle that was disconnected
*
* Return Value
* GCC_NO_ERROR: - No error
* GCC_ALLOCATION_FAILURE - Resource error occured
* GCC_INVALID_PARAMETER - This connection handle is not used
* by this conference.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* GCCError ConfRosterInquireRequest(CBaseSap *)
*
* Public member function of CConf
*
* Function Description
* This function is used to obtain a conference roster. The conference
* roster is delivered to the requesting command target in a Conference
* Roster inquire confirm.
*
* Formal Parameters:
* command_target (i) Pointer to object that made the request.
*
* Return Value
* GCC_NO_ERROR: - No error
* GCC_ALLOCATION_FAILURE - Resource error occured
* GCC_CONFERENCE_NOT_ESTABLISHED - CConf object has not completed
* its establishment process.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* GCCError AppRosterInquireRequest(GCCSessionKey *, CAppRosterMsg **)
*
* Public member function of CConf
*
* Function Description
* This function is used to obtain a list of application rosters. This
* list is delivered to the requesting SAP through an Application Roster
* inquire confirm message.
*
* Formal Parameters:
* session_key (i) Session Key of desired roster. If NULL is
* specified then all the available application rosters
* are delivered in the confirm.
* command_target (i) Pointer to object that made the request.
*
* Return Value
* GCC_NO_ERROR: - No error
* GCC_ALLOCATION_FAILURE - Resource error occured
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* BOOL FlushOutgoingPDU ();
*
* Public member function of CConf
*
* Function Description
* This function is used by the owner object to flush any PDUs queued
* by the conference object. This routine will all flush PDUs queued
* by the User Attachment object.
*
* Formal Parameters:
* None.
*
* Return value:
* TRUE, if there remain un-processed msgs in the conference message queue
* FALSE, if all the msgs in the conference msg queue were processed.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* BOOL IsConfEstablished();
*
* Public member function of CConf
*
* Function Description
* Function informs whether the conference has completed its
* establishment process.
*
* Formal Parameters:
* None.
*
* Return Value
* TRUE - Establishment is complete.
* FALSE - Establishment is still in process.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* BOOL IsConfTopProvider();
*
* Public member function of CConf
*
* Function Description
* Function informs whether this node is the Top Provider of the
* conference.
*
* Formal Parameters:
* None.
*
* Return Value
* TRUE - This node is the Top Provider.
* FALSE - This node is NOT the Top Provider.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* BOOL DoesConvenerExists();
*
* Public member function of CConf
*
* Function Description
* This function informs whether or not the convener is still joined to
* this conference.
*
* Formal Parameters:
* None.
*
* Return Value
* TRUE - There is a convener node joined to the conference.
* FALSE - There is NOT a convener node joined to the conference.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* LPSTR GetNumericConfName();
*
* Public member function of CConf
*
* Function Description
* This function returns an internal pointer to a LPSTR string
* that holds the numeric conference name. This string should not be
* altered by the requesting module. It should also not be used after
* the conference is deleted.
*
* Formal Parameters:
* None.
*
* Return Value
* Pointer to the numeric string portion of the Conference Name.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* LPWSTR GetTextConfName();
*
* Public member function of CConf
*
* Function Description
* This function returns an internal pointer to the unicode string
* that holds the text portion of the conference name. This string should
* not be altered by the requesting module. It should also not be used
* after the conference is deleted.
*
* Formal Parameters:
* None.
*
* Return Value
* Pointer to the text string portion of the Conference Name.
* NULL if no text conference name exists.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* LPSTR GetConfModifier();
*
* Public member function of CConf
*
* Function Description
* This function returns an internal pointer to the LPSTR string
* that holds the conference name modifier. This string should
* not be altered by the requesting module. It should also not be used
* after the conference is deleted.
*
* Formal Parameters:
* None.
*
* Return Value
* Pointer to the Conference Name modifier.
* NULL if no modifier exists.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* LPWSTR GetConfDescription()
*
* Public member function of CConf
*
* Function Description
* This function returns an internal pointer to the unicode string
* that holds the conference descriptor. This string should
* not be altered by the requesting module. It should also not be used
* after the conference is deleted.
*
* Formal Parameters:
* None.
*
* Return Value
* Pointer to the Conference Descriptor.
* NULL if no descriptor exists.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* CNetAddrListContainer *GetNetworkAddressList()
*
* Public member function of CConf
*
* Function Description
* This function returns an internal pointer to the object that holds the
* list of local network addresses. This object should
* not be altered by the requesting module. It should also not be used
* after the conference is deleted.
*
* Formal Parameters:
* None.
*
* Return Value
* Pointer to the Local network address list.
* NULL if no descriptor exists.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* GCCConfID GetConfID()
*
* Public member function of CConf
*
* Function Description
* This function returns the conference ID for this conference object.
*
* Formal Parameters:
* None.
*
* Return Value
* The conference ID
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* BOOL IsConfListed();
*
* Public member function of CConf
*
* Function Description
* This function informs whether or NOT the conference is listed.
*
* Formal Parameters:
* None.
*
* Return Value
* TRUE - The conference is listed
* FALSE - This conference is NOT listed
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* BOOL IsConfPasswordInTheClear();
*
* Public member function of CConf
*
* Function Description
* This function informs whether or NOT the conference is using an
* in the clear password.
*
* Formal Parameters:
* None.
*
* Return Value
* TRUE - The conference is using a Password in the clear
* FALSE - The conference is NOT using a Password in the clear
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* BOOL IsConfLocked();
*
* Public member function of CConf
*
* Function Description
* This function informs whether or NOT the conference is locked.
*
* Formal Parameters:
* None.
*
* Return Value
* TRUE - The conference is locked.
* FALSE - The conference is NOT locked.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* These routines live in conf2.cpp
*/
/*
* GCCError ConfJoinReqResponse(
* UserID receiver_id,
* CPassword *password_challenge,
* CUserDataListContainer *user_data_list,
* GCCResult result)
*
* Public member function of CConf
*
* Function Description
* This Command Target function is used when the join request was delivered
* through an intermediate node. In this case, the join response is sent
* back through the intermediate node.
*
* Formal Parameters:
* receiver_id - (i) The user ID of the intermediate node that
* forwarded the join request. This user ID is
* used to match the join request with the join
* response.
* password_challenge
* - (i) The password challenge to be delivered to the
* joining node. NULL if none should be delivered.
* user_data_list - (i) Pointer to a user data object to be delivered
* to joiner. NULL if none should be delivered.
* result - (i) Result of the join request.
*
* Return Value
* GCC_NO_ERROR - No error.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* GCCError ConfInviteRequest(
* LPWSTR pwszCallerID,
* TransportAddress calling_address,
* TransportAddress called_address,
* CUserDataListContainer *user_data_list,
* PConnectionHandle connection_handle)
*
* Public member function of CConf
*
* Function Description
* This Command Target function is used to issue an invite request. This
* can be a command target because the conference at the requesting node
* should already be established before the request comes in.
*
* Formal Parameters:
* caller_identifier (i) Unicode string specifying the caller ID.
* calling_address (i) Address of the calling node.
* called_address (i) Address of the called node.
* user_data_list (i) Pointer to a User data list object.
* connection_handle (o) The logical connection handle is returned here.
*
* Return Value
* GCC_NO_ERROR - No error.
* GCC_ALLOCATION_FAILURE - A resource error occured.
* GCC_INVALID_TRANSPORT_ADDRESS - Something wrong with transport address
* GCC_INVALID_ADDRESS_PREFIX - Invalid transport address prefix
* GCC_CONFERENCE_NOT_ESTABLISHED - CConf object has not completed
* its establishment process.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* GCCError ConfLockRequest ()
*
* Public member function of CConf
*
* Function Description
* This Command Target function is used to issue a lock request to
* the conference.
*
* Formal Parameters:
* None.
*
* Return Value
* GCC_NO_ERROR - No error.
* GCC_ALLOCATION_FAILURE - A resource error occured.
* GCC_CONFERENCE_NOT_ESTABLISHED - CConf object has not completed
* its establishment process.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* GCCError ConfLockResponse (
* UserID requesting_node,
* GCCResult result)
*
* Public member function of CConf
*
* Function Description
* This Command Target function is used to issue a lock response. It
* is called in response to a lock request.
*
* Formal Parameters:
* requesting_node - (i) Node ID of node the issued the lock request.
* result - (i) Result of lock request.
*
* Return Value
* GCC_NO_ERROR - No error.
* GCC_ALLOCATION_FAILURE - A resource error occured.
* GCC_CONFERENCE_NOT_ESTABLISHED - CConf object has not completed
* its establishment process.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* GCCError ConfUnlockRequest ()
*
* Public member function of CConf
*
* Function Description
* This Command Target function is used to issue an unlock request to
* the conference.
*
* Formal Parameters:
* None.
*
* Return Value
* GCC_NO_ERROR - No error.
* GCC_ALLOCATION_FAILURE - A resource error occured.
* GCC_CONFERENCE_NOT_ESTABLISHED - CConf object has not completed
* its establishment process.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* GCCError ConfUnlockResponse (
* UserID requesting_node,
* GCCResult result)
*
* Public member function of CConf
*
* Function Description
* This Command Target function is used to issue an unlock response. It
* is called in response to an unlock request.
*
* Formal Parameters:
* requesting_node - (i) ID of node the issued the unlock request.
* result - (i) Result of unlock request.
*
* Return Value
* GCC_NO_ERROR - No error.
* GCC_ALLOCATION_FAILURE - A resource error occured.
* GCC_CONFERENCE_NOT_ESTABLISHED - CConf object has not completed
* its establishment process.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* GCCError ConfEjectUserRequest (
* UserID ejected_node_id,
* GCCReason reason)
*
* Public member function of CConf
*
* Function Description
* This Command Target function is used to eject a user from the
* conference. Note that the user must have the appropriate priviliges
* to perform the eject.
*
* Formal Parameters:
* ejected_node_id - (i) ID of node to be ejected.
* reason - (i) Reason for ejection
*
* Return Value
* GCC_NO_ERROR - No error.
* GCC_ALLOCATION_FAILURE - A resource error occured.
* GCC_CONFERENCE_NOT_ESTABLISHED - CConf object has not completed
* its establishment process.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* GCCError ConfAnnouncePresenceRequest(
* PGCCNodeRecord node_record)
*
* Public member function of CConf
*
* Function Description
* This Command Target function is called when the Node Controller
* announces its presence with the conference. This request will
* generate a roster report PDU and indication.
*
* Formal Parameters:
* node_record - (i) Structure containing the complete node
* record for the requesting node controller.
*
* Return Value
* GCC_NO_ERROR - No error.
* GCC_ALLOCATION_FAILURE - A resource error occured.
* GCC_BAD_NETWORK_ADDRESS - If an invalid network address is
* passed in as part of the record.
* GCC_BAD_USER_DATA - If an invalid user data list is
* passed in as part of the record.
* GCC_CONFERENCE_NOT_ESTABLISHED - CConf object has not completed
* its establishment process.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* GCCError ConfDisconnectRequest(void)
*
* Public member function of CConf
*
* Function Description
* This Command Target function is called when the Node Controller
* wishes to disconnect the node from the conference.
*
* Formal Parameters:
* None.
*
* Return Value
* GCC_NO_ERROR - No error.
* GCC_ALLOCATION_FAILURE - A resource error occured.
*
* Side Effects
* None.
*
* Caveats
* If this node is the Top Provider the conference will be terminated
* on all nodes.
*/
/*
* GCCError ConfTerminateRequest(
* GCCReason reason)
*
* Public member function of CConf
*
* Function Description
* This Command Target function is called when the Node Controller
* wishes to terminate the conference. This will eventually cause
* the object to be deleted if successful.
*
* Formal Parameters:
* None.
*
* Return Value
* GCC_NO_ERROR - No error.
* GCC_ALLOCATION_FAILURE - A resource error occured.
* GCC_CONFERENCE_NOT_ESTABLISHED - CConf object has not completed
* its establishment process.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* GCCError AppEnrollRequest(
* CAppSap * pAppSap,
* PGCCSessionKey session_key,
* PGCCApplicationRecord application_record,
* BOOL application_enrolled,
* UINT number_of_capabilities,
* PGCCApplicationCapability FAR *
* capabilities_list)
*
* Public Function Description
* This function is called when a User Application wishes to enroll with
* the conference (or wishes to UnEnroll with it). This call will
* initiate a roster update if the conference is established.
*
* Formal Parameters:
* application_sap_handle
* (i) SAP handle of the enrolling Application. Used
* for the entity ID.
* session_key (i) Session key of the enrolling application
* application_record (i) Structure that defines the Application
* attributes.
* application_enrolled
* (i) Is the application enrolling or unenrolling?
* number_of_capabilities
* (i) Number of Application capabilities in list.
* capabilities_list (i) Actual list of capabilities.
*
* Return Value
* GCC_NO_ERROR: - No error
* GCC_ALLOCATION_FAILURE - Resource error occured
* GCC_CONFERENCE_NOT_ESTABLISHED - CConf object has not completed
* its establishment process.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* GCCError RegistryRegisterChannelRequest(
* PGCCRegistryKey registry_key,
* ChannelID channel_id,
* CAppSap *app_sap)
*
* Public member function of CConf
*
* Function Description
* This Command Target function is called by an application wishing to
* register a channel with the conference. Here the application must
* supply the channel.
*
* Formal Parameters:
* registry_key - (i) Pointer to structure that holds registry key.
* channel_id - (i) Channel ID to be registered.
* app_sap - (i) The Command Target that is making the request.
*
* Return Value
* GCC_NO_ERROR - No error.
* GCC_ALLOCATION_FAILURE - A resource error occured.
* GCC_BAD_REGISTRY_KEY - The registry key is invalid.
* GCC_APP_NOT_ENROLLED - Requesting application is not
* enrolled with the conference.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* GCCError RegistryAssignTokenRequest(
* PGCCRegistryKey registry_key,
* CAppSap *app_sap);
*
* Public member function of CConf
*
* Function Description
* This Command Target function is called by an application wishing to
* register a token with the conference. Here the token is supplied by
* the conference.
*
* Formal Parameters:
* registry_key - (i) Pointer to structure that holds registry key.
* app_sap - (i) The Command Target that is making the request.
*
* Return Value
* GCC_NO_ERROR - No error.
* GCC_ALLOCATION_FAILURE - A resource error occured.
* GCC_BAD_REGISTRY_KEY - The registry key is invalid.
* GCC_APP_NOT_ENROLLED - Requesting application is not
* enrolled with the conference.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* GCCError RegistrySetParameterRequest (
* PGCCRegistryKey registry_key,
* LPOSTR parameter_value,
* GCCModificationRights modification_rights,
* CAppSap *app_sap);
*
* Public member function of CConf
*
* Function Description
* This Command Target function is called by an application wishing to
* register a parameter with the conference. Here the token is supplied by
* the conference.
*
* Formal Parameters:
* registry_key - (i) Pointer to structure that holds registry key.
* parameter_value - (i) Parameter to be registered
* modification_rights-(i) Modification rights on the parameter.
* app_sap - (i) The Command Target that is making the request.
*
* Return Value
* GCC_NO_ERROR - No error.
* GCC_ALLOCATION_FAILURE - A resource error occured.
* GCC_BAD_REGISTRY_KEY - The registry key is invalid.
* GCC_APP_NOT_ENROLLED - Requesting application is not
* enrolled with the conference.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* GCCError RegistryRetrieveEntryRequest(
* PGCCRegistryKey registry_key,
* CAppSap *app_sap)
*
* Public member function of CConf
*
* Function Description
* This Command Target function is called by an application wishing to
* retrieve a registry entry.
*
* Formal Parameters:
* registry_key - (i) Pointer to structure that holds registry key.
* app_sap - (i) The Command Target that is making the request.
*
* Return Value
* GCC_NO_ERROR - No error.
* GCC_ALLOCATION_FAILURE - A resource error occured.
* GCC_BAD_REGISTRY_KEY - The registry key is invalid.
* GCC_APP_NOT_ENROLLED - Requesting application is not
* enrolled with the conference.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* GCCError RegistryDeleteEntryRequest(
* PGCCRegistryKey registry_key,
* CAppSap *app_sap);
*
* Public member function of CConf
*
* Function Description
* This Command Target function is called by an application wishing to
* delete a registry entry.
*
* Formal Parameters:
* registry_key - (i) Pointer to structure that holds registry key.
* app_sap - (i) The Command Target that is making the request.
*
* Return Value
* GCC_NO_ERROR - No error.
* GCC_ALLOCATION_FAILURE - A resource error occured.
* GCC_BAD_REGISTRY_KEY - The registry key is invalid.
* GCC_APP_NOT_ENROLLED - Requesting application is not
* enrolled with the conference.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* GCCError RegistryMonitorRequest(
* BOOL enable_delivery,
* PGCCRegistryKey registry_key,
* CAppSap *app_sap)
*
* Public member function of CConf
*
* Function Description
* This Command Target function is called by an application wishing to
* delete a registry entry.
*
* Formal Parameters:
* enable_delivery - (i) Toggle used to turn on and off monitoring of
* an entry.
* registry_key - (i) Pointer to structure that holds registry key.
* app_sap - (i) The Command Target that is making the request.
*
* Return Value
* GCC_NO_ERROR - No error.
* GCC_ALLOCATION_FAILURE - A resource error occured.
* GCC_BAD_REGISTRY_KEY - The registry key is invalid.
* GCC_APP_NOT_ENROLLED - Requesting application is not
* enrolled with the conference.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* GCCError RegistryAllocateHandleRequest(
* UINT number_of_handles,
* CAppSap *app_sap)
*
* Public member function of CConf
*
* Function Description
* This Command Target function is called by an application that needs
* to allocate a certain number of parameters.
*
* Formal Parameters:
* number_of_handles - (i) Number of handles to allocate.
* app_sap - (i) The Command Target that is making the request.
*
* Return Value
* GCC_NO_ERROR - No error.
* GCC_ALLOCATION_FAILURE - A resource error occured.
* GCC_BAD_REGISTRY_KEY - The registry key is invalid.
* GCC_APP_NOT_ENROLLED - Requesting application is not
* enrolled with the conference.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* GCCError ConductorAssignRequest();
*
* Public member function of CConf
*
* Function Description
* This Command Target function is called when a node wants to become
* the conductor.
*
* Formal Parameters:
* None.
*
* Return Value
* GCC_NO_ERROR - No error.
* GCC_ALLOCATION_FAILURE - A resource error occured.
* GCC_CONFERENCE_NOT_ESTABLISHED - CConf object has not completed
* its establishment process.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* GCCError ConductorReleaseRequest()
*
* Public member function of CConf
*
* Function Description
* This Command Target function is called when a node wants to give up
* conductorship.
*
* Formal Parameters:
* None.
*
* Return Value
* GCC_NO_ERROR - No error.
* GCC_ALLOCATION_FAILURE - A resource error occured.
* GCC_CONFERENCE_NOT_ESTABLISHED - CConf object has not completed
* its establishment process.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* GCCError ConductorPleaseRequest()
*
* Public member function of CConf
*
* Function Description
* This Command Target function is called when a node wants to request
* the conductorship token from another node.
*
* Formal Parameters:
* None.
*
* Return Value
* GCC_NO_ERROR - No error.
* GCC_ALLOCATION_FAILURE - A resource error occured.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* GCCError ConductorGiveRequest(
* UserID recipient_node_id)
*
* Public member function of CConf
*
* Function Description
* This Command Target function is called when a node wants to give
* the conductorship token to another node. Usually called in response
* to a please request.
*
* Formal Parameters:
* recipient_node_id - (i) User ID of node to give conductorship to.
*
* Return Value
* GCC_NO_ERROR - No error.
* GCC_ALLOCATION_FAILURE - A resource error occured.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* GCCError ConductorGiveResponse(
* GCCResult result)
*
* Public member function of CConf
*
* Function Description
* This Command Target function is called after a node has received a
* give indication. This response informs the conference of whether or
* not this node is accepting the conductorship token.
*
* Formal Parameters:
* result - (i) If the node is accepting conductorship the result
* will be set to GCC_RESULT_SUCCESSFUL.
*
* Return Value
* GCC_NO_ERROR - No error.
* GCC_ALLOCATION_FAILURE - A resource error occured.
* GCC_NO_GIVE_RESPONSE_PENDING - A give indication was never issued.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* GCCError ConductorPermitAskRequest(
* BOOL grant_permission)
*
* Public member function of CConf
*
* Function Description
* This Command Target function is called when a node wants permission
* from the conductor. The definition of permission may vary from
* application to application.
*
* Formal Parameters:
* grant_permission - (i) Flag stating whether permission is being
* requested or given up.
*
* Return Value
* GCC_NO_ERROR - No error.
* GCC_ALLOCATION_FAILURE - A resource error occured.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* GCCError ConductorPermitGrantRequest(
* UINT number_granted,
* PUserID granted_node_list,
* UINT number_waiting,
* PUserID waiting_node_list);
*
* Public member function of CConf
*
* Function Description
* This Command Target function is called by the conductor when
* permission is being granted to a node or list of nodes.
*
* Formal Parameters:
* number_granted - (i) The number of nodes granted permission.
* granted_node_list - (i) List of nodes granted permission.
* number_waiting - (i) The number of nodes waiting for permission.
* waiting_node_list - (i) List of nodes waiting for permission.
*
* Return Value
* GCC_NO_ERROR - No error.
* GCC_ALLOCATION_FAILURE - A resource error occured.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* GCCError ConductorInquireRequest(CBaseSap *pSap);
*
* Public member function of CConf
*
* Function Description
* This Command Target function is called when conductorship information
* is required by a SAP.
*
* Formal Parameters:
* pSap - (i) SAP making the request.
*
* Return Value
* GCC_NO_ERROR - No error.
* GCC_ALLOCATION_FAILURE - A resource error occured.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* GCCError ConferenceTimeRemainingRequest (
* UINT time_remaining,
* UserID node_id)
*
* Public member function of CConf
*
* Function Description
* This Command Target function is called to inform all the nodes in
* the conference how much time is left in the conference.
*
* Formal Parameters:
* time_remaining - (i) Time in miliseconds left in the conference.
* node_id - (i) node_id of node to deliver time remaining
* indication. NULL if it should go to all nodes.
*
* Return Value
* GCC_NO_ERROR - No error.
* GCC_ALLOCATION_FAILURE - A resource error occured.
* GCC_CONFERENCE_NOT_ESTABLISHED - CConf object has not completed
* its establishment process.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* GCCError ConfTimeInquireRequest (
* BOOL time_is_conference_wide)
*
* Public member function of CConf
*
* Function Description
* This Command Target function is called by a node that wants to
* know how much time is remaining in a timed conference.
*
* Formal Parameters:
* time_is_conference_wide - (i) TRUE if time is for entire conference.
*
* Return Value
* GCC_NO_ERROR - No error.
* GCC_ALLOCATION_FAILURE - A resource error occured.
* GCC_CONFERENCE_NOT_ESTABLISHED - CConf object has not completed
* its establishment process.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* GCCError ConfExtendRequest (
* UINT extension_time,
* BOOL time_is_conference_wide)
*
* Public member function of CConf
*
* Function Description
* This Command Target function is called when the time left in the
* conference is to be extended.
*
* Formal Parameters:
* extension_time - (i) Extension time.
* time_is_conference_wide - (i) TRUE if time is for entire conference.
*
* Return Value
* GCC_NO_ERROR - No error.
* GCC_ALLOCATION_FAILURE - A resource error occured.
* GCC_CONFERENCE_NOT_ESTABLISHED - CConf object has not completed
* its establishment process.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* GCCError ConfAssistanceRequest(
* UINT number_of_user_data_members,
* PGCCUserData * user_data_list)
*
* Public member function of CConf
*
* Function Description
* This Command Target function is called when a node wishes to request
* assistance.
*
* Formal Parameters:
* number_of_user_data_members - (i) number of user data members in list.
* user_data_list - (i) list of user data members.
*
* Return Value
* GCC_NO_ERROR - No error.
* GCC_ALLOCATION_FAILURE - A resource error occured.
* GCC_CONFERENCE_NOT_ESTABLISHED - CConf object has not completed
* its establishment process.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* GCCError AppInvokeRequest(
* CInvokeSpecifierListContainer *invoke_list,
* UINT number_of_destination_nodes,
* UserID *list_of_destination_nodes,
* CBaseSap *pSap)
*
* Public member function of CConf
*
* Function Description
* This Command Target function is called when a node wishes to invoke
* a list of applications on remote node or nodes.
*
* Formal Parameters:
* invoke_list - (i) list of applications to invoke.
* number_of_destination_nodes - (i) number of nodes in destination list
* list_of_destination_nodes - (i) list of destination user IDs
* command_target - (i) Command Target that made the request
*
* Return Value
* GCC_NO_ERROR - No error.
* GCC_ALLOCATION_FAILURE - A resource error occured.
* GCC_CONFERENCE_NOT_ESTABLISHED - CConf object has not completed
* its establishment process.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* GCCError TextMessageRequest (
* LPWSTR pwszTextMsg,
* UserID destination_node )
*
* Public member function of CConf
*
* Function Description
* This Command Target function is called when a node wishes to deliver
* a text message to a remote node.
*
* Formal Parameters:
* pwszTextMsg - (i) the actual text message in unicode.
* destination_node - (i) Node ID of node receiving message
*
* Return Value
* GCC_NO_ERROR - No error.
* GCC_ALLOCATION_FAILURE - A resource error occured.
* GCC_CONFERENCE_NOT_ESTABLISHED - CConf object has not completed
* its establishment process.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* GCCError ConfTransferRequest (
* PGCCConferenceName destination_conference_name,
* GCCNumericString destination_conference_modifier,
* CNetAddrListContainer *network_address_list,
* UINT number_of_destination_nodes,
* PUserID destination_node_list,
* CPassword *password)
*
* Public member function of CConf
*
* Function Description
* This Command Target function is called when a node wishes transfer a
* list of nodes to another conference.
*
* Formal Parameters:
* destination_conference_name - (i) Name of conference to transfer to.
* destination_conference_modifier-(i) Name of modifier to transfer to.
* network_address_list - (i) Address list of new conference.
* number_of_destination_nodes - (i) Number of nodes to transfer
* destination_node_list - (i) List of nodes to transfer.
* password - (i) Password needed to join new conf.
*
* Return Value
* GCC_NO_ERROR - No error.
* GCC_ALLOCATION_FAILURE - A resource error occured.
* GCC_CONFERENCE_NOT_ESTABLISHED - CConf object has not completed
* its establishment process.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* GCCError ConfAddRequest (
* CNetAddrListContainer *network_address_container,
* UserID adding_node,
* CUserDataListContainer *user_data_container)
*
* Public member function of CConf
*
* Function Description
* This Command Target function is called when a node wishes add a new
* node to the conference.
*
* Formal Parameters:
* network_address_container - (i) Address of node to add.
* adding_node - (i) Node to perform the invite. If
* zero then Top Provider does the
* invite.
* user_data_container - (i) Container holding user data to be
* passed in the add request.
*
* Return Value
* GCC_NO_ERROR - No error.
* GCC_ALLOCATION_FAILURE - A resource error occured.
* GCC_CONFERENCE_NOT_ESTABLISHED - CConf object has not completed
* its establishment process.
*
* Side Effects
* None.
*
* Caveats
* None.
*/
/*
* GCCError ConfAddResponse (
* GCCResponseTag add_response_tag,
* UserID requesting_node,
* CUserDataListContainer *user_data_container,
* GCCResult result)
*
* Public member function of CConf
*
* Function Description
* This Command Target function is called when a node wishes to respond
* to an add request. This response should be done after the invite
* sequence is complete (unless result is not successful).
*
* Formal Parameters:
* add_response_tag - (i) Tag used to match request with response.
* requesting_node - (i) Node that made the original add request.
* user_data_container - (i) Container holding user data to be
* passed in the add response.
* result - (i) The result of the Add request.
*
* Return Value
* GCC_NO_ERROR - No error.
* GCC_ALLOCATION_FAILURE - A resource error occured.
* GCC_CONFERENCE_NOT_ESTABLISHED - CConf object has not completed
* its establishment process.
* GCC_INVALID_ADD_RESPONSE_TAG - There was no match of the response tag
*
* Side Effects
* None.
*
* Caveats
* None.
*/