773 lines
23 KiB
C
773 lines
23 KiB
C
|
/*
|
||
|
* gcc.h
|
||
|
*
|
||
|
* Copyright (c) 1994, 1995 by DataBeam Corporation, Lexington, KY
|
||
|
*
|
||
|
* Abstract:
|
||
|
* This is the interface file for the GCC DLL. This file defines all
|
||
|
* macros, types, and functions needed to use the GCC DLL, allowing GCC
|
||
|
* services to be accessed from user applications.
|
||
|
*
|
||
|
* An application requests services from GCC by making direct
|
||
|
* calls into the DLL (this includes T.124 requests and responses). GCC
|
||
|
* sends information back to the application through a callback (this
|
||
|
* includes T.124 indications and confirms). The callback for the node
|
||
|
* controller is specified in the call GCCInitialize, and the callback
|
||
|
* for a particular application service access point is specified in the
|
||
|
* call GCCRegisterSAP.
|
||
|
*
|
||
|
* During initialization, GCC allocates a timer in order to give itself
|
||
|
* a heartbeat. If zero is passed in here the owner application (the node
|
||
|
* controller) must take the responsibility to call GCCHeartbeat. Almost
|
||
|
* all work is done by GCC during these clocks ticks. It is during these
|
||
|
* clock ticks that GCC checks with MCS to see if there is any work to be
|
||
|
* done. It is also during these clock ticks that callbacks are made to
|
||
|
* the user applications. GCC will NEVER invoke a user callback during a
|
||
|
* user request (allowing the user applications to not worry about
|
||
|
* re-entrancy). Since timer events are processed during the message
|
||
|
* loop, the developer should be aware that long periods of time away
|
||
|
* from the message loop will result in GCC "freezing" up.
|
||
|
*
|
||
|
* Note that this is a "C" language interface in order to prevent any "C++"
|
||
|
* naming conflicts between different compiler manufacturers. Therefore,
|
||
|
* if this file is included in a module that is being compiled with a "C++"
|
||
|
* compiler, it is necessary to use the following syntax:
|
||
|
*
|
||
|
* extern "C"
|
||
|
* {
|
||
|
* #include "gcc.h"
|
||
|
* }
|
||
|
*
|
||
|
* This disables C++ name mangling on the API entry points defined within
|
||
|
* this file.
|
||
|
*
|
||
|
* Author:
|
||
|
* blp
|
||
|
*
|
||
|
* Caveats:
|
||
|
* none
|
||
|
*/
|
||
|
#ifndef __GCC_H__
|
||
|
#define __GCC_H__
|
||
|
|
||
|
#include "t120type.h"
|
||
|
|
||
|
/************************************************************************
|
||
|
* *
|
||
|
* Generally Used Typedefs *
|
||
|
* *
|
||
|
*************************************************************************/
|
||
|
|
||
|
#define NM_T120_VERSION_3 (MAKELONG(0, 3)) // NM 3.0
|
||
|
|
||
|
typedef struct tagOSTR
|
||
|
{
|
||
|
ULONG length;
|
||
|
LPBYTE value;
|
||
|
}
|
||
|
OSTR, *LPOSTR;
|
||
|
|
||
|
/*
|
||
|
** Typedef for a GCC hex string. This typedef is used throughout GCC for
|
||
|
** storing variable length wide character strings with embedded NULLs.
|
||
|
*/
|
||
|
typedef struct
|
||
|
{
|
||
|
UINT hex_string_length;
|
||
|
USHORT * hex_string;
|
||
|
}
|
||
|
T120HexString, GCCHexString, *PGCCHexString;
|
||
|
|
||
|
/*
|
||
|
** Typedef for a GCC long string. This typedef is used in GCC for
|
||
|
** storing variable length strings of longs with embedded NULLs.
|
||
|
*/
|
||
|
typedef struct tagT120LongString
|
||
|
{
|
||
|
ULONG long_string_length;
|
||
|
ULONG * long_string;
|
||
|
}
|
||
|
T120LongString, GCCLongString, *PGCCLongString;
|
||
|
|
||
|
|
||
|
/*
|
||
|
* TransportAddress is passed in with the ConnectRequest() call.
|
||
|
* This address is always a pointer to an ascii string.
|
||
|
* The TransportAddress represents a remote location. It is the TCP
|
||
|
* address of the remote machine.
|
||
|
*
|
||
|
*/
|
||
|
typedef LPSTR TransportAddress, *PTransportAddress;
|
||
|
|
||
|
|
||
|
/*
|
||
|
** Typedef for a GCC Character string. This typedef is used throughout GCC for
|
||
|
** storing variable length, NULL terminated, single byte character strings.
|
||
|
*/
|
||
|
// lonchanc: we should simply use char.
|
||
|
typedef BYTE GCCCharacter, *GCCCharacterString, **PGCCCharacterString;
|
||
|
|
||
|
/*
|
||
|
** Typedef for a GCC Numeric string. This typedef is used throughout GCC for
|
||
|
** storing variable length, NULL terminated, single byte character strings.
|
||
|
** A single character in this string is constrained to numeric values
|
||
|
** ranging from "0" to "9".
|
||
|
*/
|
||
|
typedef LPSTR GCCNumericString, *PGCCNumericString;
|
||
|
|
||
|
/*
|
||
|
** Typdef for GCC version which is used when registering the node controller
|
||
|
** or an application.
|
||
|
*/
|
||
|
typedef struct
|
||
|
{
|
||
|
USHORT major_version;
|
||
|
USHORT minor_version;
|
||
|
}
|
||
|
GCCVersion, *PGCCVersion;
|
||
|
|
||
|
|
||
|
|
||
|
/*
|
||
|
** Macros for values of Booleans passed through the GCC API.
|
||
|
*/
|
||
|
#define CONFERENCE_IS_LOCKED TRUE
|
||
|
#define CONFERENCE_IS_NOT_LOCKED FALSE
|
||
|
#define CONFERENCE_IS_LISTED TRUE
|
||
|
#define CONFERENCE_IS_NOT_LISTED FALSE
|
||
|
#define CONFERENCE_IS_CONDUCTIBLE TRUE
|
||
|
#define CONFERENCE_IS_NOT_CONDUCTIBLE FALSE
|
||
|
#define PERMISSION_IS_GRANTED TRUE
|
||
|
#define PERMISSION_IS_NOT_GRANTED FALSE
|
||
|
#define TIME_IS_CONFERENCE_WIDE TRUE
|
||
|
#define TIME_IS_NOT_CONFERENCE_WIDE FALSE
|
||
|
#define APPLICATION_IS_ENROLLED_ACTIVELY TRUE
|
||
|
#define APPLICATION_IS_NOT_ENROLLED_ACTIVELY FALSE
|
||
|
#define APPLICATION_IS_CONDUCTING TRUE
|
||
|
#define APPLICATION_IS_NOT_CONDUCTING_CAPABLE FALSE
|
||
|
#define APPLICATION_IS_ENROLLED TRUE
|
||
|
#define APPLICATION_IS_NOT_ENROLLED FALSE
|
||
|
#define DELIVERY_IS_ENABLED TRUE
|
||
|
#define DELIVERY_IS_NOT_ENABLED FALSE
|
||
|
|
||
|
/*
|
||
|
** The following enum structure typedefs are used to define the GCC Object Key.
|
||
|
** The GCC Object Key is used throughout GCC for things like the Application
|
||
|
** keys and Capability IDs.
|
||
|
*/
|
||
|
|
||
|
typedef AppletKeyType GCCObjectKeyType, *PGCCObjectKeyType;;
|
||
|
#define GCC_OBJECT_KEY APPLET_OBJECT_KEY
|
||
|
#define GCC_H221_NONSTANDARD_KEY APPLET_H221_NONSTD_KEY
|
||
|
|
||
|
|
||
|
typedef struct tagT120ObjectKey
|
||
|
{
|
||
|
GCCObjectKeyType key_type;
|
||
|
GCCLongString object_id;
|
||
|
OSTR h221_non_standard_id;
|
||
|
}
|
||
|
T120ObjectKey, GCCObjectKey, *PGCCObjectKey;
|
||
|
|
||
|
/*
|
||
|
** GCCNonStandardParameter
|
||
|
** This structure is used within the NetworkAddress typedef and
|
||
|
** the NetworkService typedef defined below.
|
||
|
*/
|
||
|
typedef struct
|
||
|
{
|
||
|
GCCObjectKey object_key;
|
||
|
OSTR parameter_data;
|
||
|
}
|
||
|
GCCNonStandardParameter, *PGCCNonStandardParameter;
|
||
|
|
||
|
|
||
|
/*
|
||
|
** GCCConferenceName
|
||
|
** This structure defines the conference name. In a create request, the
|
||
|
** conference name can include an optional unicode string but it must
|
||
|
** always include the simple numeric string. In a join request, either
|
||
|
** one can be specified.
|
||
|
*/
|
||
|
typedef struct
|
||
|
{
|
||
|
GCCNumericString numeric_string;
|
||
|
LPWSTR text_string; /* optional */
|
||
|
}
|
||
|
GCCConferenceName, GCCConfName, *PGCCConferenceName, *PGCCConfName;
|
||
|
|
||
|
/*
|
||
|
** MCSChannelType
|
||
|
** Should this be defined in MCATMCS? It is used in a couple of places
|
||
|
** below and is explicitly defined in the T.124 specification.
|
||
|
*/
|
||
|
typedef AppletChannelType MCSChannelType, *PMCSChannelType;
|
||
|
#define MCS_STATIC_CHANNEL APPLET_STATIC_CHANNEL
|
||
|
#define MCS_DYNAMIC_MULTICAST_CHANNEL APPLET_DYNAMIC_MULTICAST_CHANNEL
|
||
|
#define MCS_DYNAMIC_PRIVATE_CHANNEL APPLET_DYNAMIC_PRIVATE_CHANNEL
|
||
|
#define MCS_DYNAMIC_USER_ID_CHANNEL APPLET_DYNAMIC_USER_ID_CHANNEL
|
||
|
#define MCS_NO_CHANNEL_TYPE_SPECIFIED APPLET_NO_CHANNEL_TYPE_SPECIFIED
|
||
|
|
||
|
/*
|
||
|
** GCCUserData
|
||
|
** This structure defines a user data element which is used throughout GCC.
|
||
|
*/
|
||
|
typedef struct
|
||
|
{
|
||
|
GCCObjectKey key;
|
||
|
LPOSTR octet_string; /* optional */
|
||
|
}
|
||
|
GCCUserData, *PGCCUserData;
|
||
|
|
||
|
|
||
|
/************************************************************************
|
||
|
* *
|
||
|
* Node Controller Related Typedefs *
|
||
|
* *
|
||
|
*************************************************************************/
|
||
|
|
||
|
/*
|
||
|
** GCCTerminationMethod
|
||
|
** The termination method is used by GCC to determine
|
||
|
** what action to take when all participants of a conference have
|
||
|
** disconnected. The conference can either be manually terminated
|
||
|
** by the node controller or it can terminate itself automatically when
|
||
|
** all the participants have left the conference.
|
||
|
*/
|
||
|
typedef enum
|
||
|
{
|
||
|
GCC_AUTOMATIC_TERMINATION_METHOD = 0,
|
||
|
GCC_MANUAL_TERMINATION_METHOD = 1
|
||
|
}
|
||
|
GCCTerminationMethod, *PGCCTerminationMethod;
|
||
|
|
||
|
/*
|
||
|
** GCCNodeType
|
||
|
** GCC specified node types. These node types dictate node controller
|
||
|
** behavior under certain conditions. See T.124 specification for
|
||
|
** proper assignment based on the needs of the Node Controller.
|
||
|
*/
|
||
|
typedef enum
|
||
|
{
|
||
|
GCC_TERMINAL = 0,
|
||
|
GCC_MULTIPORT_TERMINAL = 1,
|
||
|
GCC_MCU = 2
|
||
|
}
|
||
|
GCCNodeType, *PGCCNodeType;
|
||
|
|
||
|
/*
|
||
|
** GCCNodeProperties
|
||
|
** GCC specified node properties. See T.124 specification for proper
|
||
|
** assignment by the Node Controller.
|
||
|
*/
|
||
|
typedef enum
|
||
|
{
|
||
|
GCC_PERIPHERAL_DEVICE = 0,
|
||
|
GCC_MANAGEMENT_DEVICE = 1,
|
||
|
GCC_PERIPHERAL_AND_MANAGEMENT_DEVICE = 2,
|
||
|
GCC_NEITHER_PERIPHERAL_NOR_MANAGEMENT = 3
|
||
|
}
|
||
|
GCCNodeProperties, *PGCCNodeProperties;
|
||
|
|
||
|
/*
|
||
|
** GCCPassword
|
||
|
** This is the unique password specified by the convenor of the
|
||
|
** conference that is used by the node controller to insure conference
|
||
|
** security. This is also a unicode string.
|
||
|
*/
|
||
|
typedef struct
|
||
|
{
|
||
|
GCCNumericString numeric_string;
|
||
|
LPWSTR text_string; /* optional */
|
||
|
}
|
||
|
GCCPassword, *PGCCPassword;
|
||
|
|
||
|
/*
|
||
|
** GCCChallengeResponseItem
|
||
|
** This structure defines what a challenge response should look like.
|
||
|
** Note that either a password string or response data should be passed
|
||
|
** but not both.
|
||
|
*/
|
||
|
typedef struct
|
||
|
{
|
||
|
GCCPassword * password_string;
|
||
|
USHORT number_of_response_data_members;
|
||
|
GCCUserData ** response_data_list;
|
||
|
}
|
||
|
GCCChallengeResponseItem, *PGCCChallengeResponseItem;
|
||
|
|
||
|
typedef enum
|
||
|
{
|
||
|
GCC_IN_THE_CLEAR_ALGORITHM = 0,
|
||
|
GCC_NON_STANDARD_ALGORITHM = 1
|
||
|
}
|
||
|
GCCPasswordAlgorithmType, *PGCCPasswordAlgorithmType;
|
||
|
|
||
|
typedef struct
|
||
|
{
|
||
|
GCCPasswordAlgorithmType password_algorithm_type;
|
||
|
GCCNonStandardParameter * non_standard_algorithm; /* optional */
|
||
|
}
|
||
|
GCCChallengeResponseAlgorithm, *PGCCChallengeResponseAlgorithm;
|
||
|
|
||
|
typedef struct
|
||
|
{
|
||
|
GCCChallengeResponseAlgorithm response_algorithm;
|
||
|
USHORT number_of_challenge_data_members;
|
||
|
GCCUserData ** challenge_data_list;
|
||
|
}
|
||
|
GCCChallengeItem, *PGCCChallengeItem;
|
||
|
|
||
|
typedef struct
|
||
|
{
|
||
|
GCCResponseTag challenge_tag;
|
||
|
USHORT number_of_challenge_items;
|
||
|
GCCChallengeItem ** challenge_item_list;
|
||
|
}
|
||
|
GCCChallengeRequest, *PGCCChallengeRequest;
|
||
|
|
||
|
typedef struct
|
||
|
{
|
||
|
GCCResponseTag challenge_tag;
|
||
|
GCCChallengeResponseAlgorithm response_algorithm;
|
||
|
GCCChallengeResponseItem response_item;
|
||
|
}
|
||
|
GCCChallengeResponse, *PGCCChallengeResponse;
|
||
|
|
||
|
|
||
|
typedef enum
|
||
|
{
|
||
|
GCC_PASSWORD_IN_THE_CLEAR = 0,
|
||
|
GCC_PASSWORD_CHALLENGE = 1
|
||
|
}
|
||
|
GCCPasswordChallengeType, *PGCCPasswordChallengeType;
|
||
|
|
||
|
typedef struct
|
||
|
{
|
||
|
GCCPasswordChallengeType password_challenge_type;
|
||
|
|
||
|
union
|
||
|
{
|
||
|
GCCPassword password_in_the_clear;
|
||
|
|
||
|
struct
|
||
|
{
|
||
|
GCCChallengeRequest * challenge_request; /* optional */
|
||
|
GCCChallengeResponse * challenge_response; /* optional */
|
||
|
} challenge_request_response;
|
||
|
} u;
|
||
|
}
|
||
|
GCCChallengeRequestResponse, *PGCCChallengeRequestResponse;
|
||
|
|
||
|
/*
|
||
|
** GCCAsymmetryType
|
||
|
** Used in queries to determine if the calling and called node are known
|
||
|
** by both Node Controllers involved with the connection.
|
||
|
*/
|
||
|
typedef enum
|
||
|
{
|
||
|
GCC_ASYMMETRY_CALLER = 1,
|
||
|
GCC_ASYMMETRY_CALLED = 2,
|
||
|
GCC_ASYMMETRY_UNKNOWN = 3
|
||
|
}
|
||
|
GCCAsymmetryType, *PGCCAsymmetryType;
|
||
|
|
||
|
/*
|
||
|
** GCCAsymmetryIndicator
|
||
|
** Defines how the Node Controller sees itself when making a Query
|
||
|
** request or response. The random number portion of this structure is
|
||
|
** only used if the asymmetry_type is specified to be
|
||
|
** GCC_ASYMMETRY_UNKNOWN.
|
||
|
*/
|
||
|
typedef struct
|
||
|
{
|
||
|
GCCAsymmetryType asymmetry_type;
|
||
|
unsigned long random_number; /* optional */
|
||
|
}
|
||
|
GCCAsymmetryIndicator, *PGCCAsymmetryIndicator;
|
||
|
|
||
|
/*
|
||
|
** GCCNetworkAddress
|
||
|
** The following block of structures defines the Network Address as defined
|
||
|
** by T.124. Most of these structures were taken almost verbatim from the
|
||
|
** ASN.1 interface file. Since I'm not really sure what most of this stuff
|
||
|
** is for I really didn't know how to simplify it.
|
||
|
*/
|
||
|
typedef struct
|
||
|
{
|
||
|
BOOL speech;
|
||
|
BOOL voice_band;
|
||
|
BOOL digital_56k;
|
||
|
BOOL digital_64k;
|
||
|
BOOL digital_128k;
|
||
|
BOOL digital_192k;
|
||
|
BOOL digital_256k;
|
||
|
BOOL digital_320k;
|
||
|
BOOL digital_384k;
|
||
|
BOOL digital_512k;
|
||
|
BOOL digital_768k;
|
||
|
BOOL digital_1152k;
|
||
|
BOOL digital_1472k;
|
||
|
BOOL digital_1536k;
|
||
|
BOOL digital_1920k;
|
||
|
BOOL packet_mode;
|
||
|
BOOL frame_mode;
|
||
|
BOOL atm;
|
||
|
}
|
||
|
GCCTransferModes, *PGCCTransferModes;
|
||
|
|
||
|
#define MAXIMUM_DIAL_STRING_LENGTH 17
|
||
|
typedef char GCCDialingString[MAXIMUM_DIAL_STRING_LENGTH];
|
||
|
|
||
|
typedef struct
|
||
|
{
|
||
|
USHORT length;
|
||
|
USHORT * value;
|
||
|
}
|
||
|
GCCExtraDialingString, *PGCCExtraDialingString;
|
||
|
|
||
|
typedef struct
|
||
|
{
|
||
|
BOOL telephony3kHz;
|
||
|
BOOL telephony7kHz;
|
||
|
BOOL videotelephony;
|
||
|
BOOL videoconference;
|
||
|
BOOL audiographic;
|
||
|
BOOL audiovisual;
|
||
|
BOOL multimedia;
|
||
|
}
|
||
|
GCCHighLayerCompatibility, *PGCCHighLayerCompatibility;
|
||
|
|
||
|
typedef struct
|
||
|
{
|
||
|
GCCTransferModes transfer_modes;
|
||
|
GCCDialingString international_number;
|
||
|
GCCCharacterString sub_address_string; /* optional */
|
||
|
GCCExtraDialingString * extra_dialing_string; /* optional */
|
||
|
GCCHighLayerCompatibility * high_layer_compatibility; /* optional */
|
||
|
}
|
||
|
GCCAggregatedChannelAddress, *PGCCAggregatedChannelAddress;
|
||
|
|
||
|
#define MAXIMUM_NSAP_ADDRESS_SIZE 20
|
||
|
typedef struct
|
||
|
{
|
||
|
struct
|
||
|
{
|
||
|
UINT length;
|
||
|
BYTE value[MAXIMUM_NSAP_ADDRESS_SIZE];
|
||
|
} nsap_address;
|
||
|
|
||
|
LPOSTR transport_selector; /* optional */
|
||
|
}
|
||
|
GCCTransportConnectionAddress, *PGCCTransportConnectionAddress;
|
||
|
|
||
|
typedef enum
|
||
|
{
|
||
|
GCC_AGGREGATED_CHANNEL_ADDRESS = 1,
|
||
|
GCC_TRANSPORT_CONNECTION_ADDRESS = 2,
|
||
|
GCC_NONSTANDARD_NETWORK_ADDRESS = 3
|
||
|
}
|
||
|
GCCNetworkAddressType, *PGCCNetworkAddressType;
|
||
|
|
||
|
typedef struct
|
||
|
{
|
||
|
GCCNetworkAddressType network_address_type;
|
||
|
|
||
|
union
|
||
|
{
|
||
|
GCCAggregatedChannelAddress aggregated_channel_address;
|
||
|
GCCTransportConnectionAddress transport_connection_address;
|
||
|
GCCNonStandardParameter non_standard_network_address;
|
||
|
} u;
|
||
|
}
|
||
|
GCCNetworkAddress, *PGCCNetworkAddress;
|
||
|
|
||
|
/*
|
||
|
** GCCNodeRecord
|
||
|
** This structure defines a single conference roster record. See the
|
||
|
** T.124 specification for parameter definitions.
|
||
|
*/
|
||
|
typedef struct
|
||
|
{
|
||
|
UserID node_id;
|
||
|
UserID superior_node_id;
|
||
|
GCCNodeType node_type;
|
||
|
GCCNodeProperties node_properties;
|
||
|
LPWSTR node_name; /* optional */
|
||
|
USHORT number_of_participants;
|
||
|
LPWSTR * participant_name_list; /* optional */
|
||
|
LPWSTR site_information; /* optional */
|
||
|
UINT number_of_network_addresses;
|
||
|
GCCNetworkAddress ** network_address_list; /* optional */
|
||
|
LPOSTR alternative_node_id; /* optional */
|
||
|
USHORT number_of_user_data_members;
|
||
|
GCCUserData ** user_data_list; /* optional */
|
||
|
}
|
||
|
GCCNodeRecord, *PGCCNodeRecord;
|
||
|
|
||
|
/*
|
||
|
** GCCConferenceRoster
|
||
|
** This structure hold a complete conference roster. See the
|
||
|
** T.124 specification for parameter definitions.
|
||
|
*/
|
||
|
|
||
|
typedef struct
|
||
|
{
|
||
|
USHORT instance_number;
|
||
|
BOOL nodes_were_added;
|
||
|
BOOL nodes_were_removed;
|
||
|
USHORT number_of_records;
|
||
|
GCCNodeRecord ** node_record_list;
|
||
|
}
|
||
|
GCCConferenceRoster, *PGCCConferenceRoster, GCCConfRoster, *PGCCConfRoster;
|
||
|
|
||
|
/*
|
||
|
** GCCConferenceDescriptor
|
||
|
** Definition for the conference descriptor returned in a
|
||
|
** conference query confirm. This holds information about the
|
||
|
** conferences that exists at the queried node.
|
||
|
*/
|
||
|
typedef struct
|
||
|
{
|
||
|
GCCConferenceName conference_name;
|
||
|
GCCNumericString conference_name_modifier; /* optional */
|
||
|
LPWSTR conference_descriptor; /* optional */
|
||
|
BOOL conference_is_locked;
|
||
|
BOOL password_in_the_clear_required;
|
||
|
UINT number_of_network_addresses;
|
||
|
GCCNetworkAddress ** network_address_list; /* optional */
|
||
|
}
|
||
|
GCCConferenceDescriptor, *PGCCConferenceDescriptor, GCCConfDescriptor, *PGCCConfDescriptor;
|
||
|
|
||
|
/*
|
||
|
** ConferencePrivileges
|
||
|
** This structure defines the list of privileges that can be assigned to
|
||
|
** a particular conference.
|
||
|
*/
|
||
|
typedef struct
|
||
|
{
|
||
|
BOOL terminate_is_allowed;
|
||
|
BOOL eject_user_is_allowed;
|
||
|
BOOL add_is_allowed;
|
||
|
BOOL lock_unlock_is_allowed;
|
||
|
BOOL transfer_is_allowed;
|
||
|
}
|
||
|
GCCConferencePrivileges, *PGCCConferencePrivileges, GCCConfPrivileges, *PGCCConfPrivileges;
|
||
|
|
||
|
/************************************************************************
|
||
|
* *
|
||
|
* User Application Related Typedefs *
|
||
|
* *
|
||
|
*************************************************************************/
|
||
|
|
||
|
/*
|
||
|
** GCCSessionKey
|
||
|
** This is a unique identifier for an application that is
|
||
|
** using GCC. See the T.124 for the specifics on what an application
|
||
|
** key should look like. A session id of zero indicates that it is
|
||
|
** not being used.
|
||
|
*/
|
||
|
typedef struct tagT120SessionKey
|
||
|
{
|
||
|
GCCObjectKey application_protocol_key;
|
||
|
GCCSessionID session_id;
|
||
|
}
|
||
|
T120SessionKey, GCCSessionKey, *PGCCSessionKey;
|
||
|
|
||
|
|
||
|
/*
|
||
|
** CapabilityType
|
||
|
** T.124 supports three different rules when collapsing the capabilities
|
||
|
** list. "Logical" keeps a count of the Application Protocol Entities
|
||
|
** (APEs) that have that capability, "Unsigned Minimum" collapses to the
|
||
|
** minimum value and "Unsigned Maximum" collapses to the maximum value.
|
||
|
*/
|
||
|
typedef AppletCapabilityType GCCCapabilityType, GCCCapType, *PGCCCapabilityType, *PGCCCapType;
|
||
|
#define GCC_UNKNOWN_CAP_TYPE APPLET_UNKNOWN_CAP_TYPE
|
||
|
#define GCC_LOGICAL_CAPABILITY APPLET_LOGICAL_CAPABILITY
|
||
|
#define GCC_UNSIGNED_MINIMUM_CAPABILITY APPLET_UNSIGNED_MINIMUM_CAPABILITY
|
||
|
#define GCC_UNSIGNED_MAXIMUM_CAPABILITY APPLET_UNSIGNED_MAXIMUM_CAPABILITY
|
||
|
|
||
|
typedef AppletCapIDType T120CapabilityIDType, T120CapIDType, GCCCapabilityIDType, GCCCapIDType, *PGCCCapabilityIDType, *PGCCCapIDType;
|
||
|
#define GCC_STANDARD_CAPABILITY APPLET_STANDARD_CAPABILITY
|
||
|
#define GCC_NON_STANDARD_CAPABILITY APPLET_NONSTD_CAPABILITY
|
||
|
|
||
|
|
||
|
/*
|
||
|
** CapabilityID
|
||
|
** T.124 supports both standard and non-standard capabilities. This
|
||
|
** structure is used to differentiate between the two.
|
||
|
*/
|
||
|
typedef struct tagT120CapID
|
||
|
{
|
||
|
GCCCapabilityIDType capability_id_type;
|
||
|
GCCObjectKey non_standard_capability;
|
||
|
ULONG standard_capability;
|
||
|
}
|
||
|
T120CapID, GCCCapabilityID, GCCCapID, *PGCCCapabilityID, *PGCCCapID;
|
||
|
|
||
|
/*
|
||
|
** CapabilityClass
|
||
|
** This structure defines the class of capability and holds the associated
|
||
|
** value. Note that Logical is not necessary. Information associated with
|
||
|
** logical is stored in number_of_entities in the GCCApplicationCapability
|
||
|
** structure.
|
||
|
*/
|
||
|
|
||
|
typedef AppletCapabilityClass T120CapClass, GCCCapabilityClass, GCCCapClass, *PGCCCapabilityClass, *PGCCCapClass;
|
||
|
|
||
|
|
||
|
/*
|
||
|
** GCCApplicationCapability
|
||
|
** This structure holds all the data associated with a single T.124
|
||
|
** defined application capability.
|
||
|
*/
|
||
|
typedef struct tagT120AppCap
|
||
|
{
|
||
|
GCCCapabilityID capability_id;
|
||
|
GCCCapabilityClass capability_class;
|
||
|
ULONG number_of_entities;
|
||
|
}
|
||
|
T120AppCap, GCCApplicationCapability, GCCAppCap, *PGCCApplicationCapability, *PGCCAppCap;
|
||
|
|
||
|
/*
|
||
|
** GCCNonCollapsingCapability
|
||
|
*/
|
||
|
typedef struct tagT120NonCollCap
|
||
|
{
|
||
|
GCCCapabilityID capability_id;
|
||
|
LPOSTR application_data; /* optional */
|
||
|
}
|
||
|
T120NonCollCap, GCCNonCollapsingCapability, GCCNonCollCap, *PGCCNonCollapsingCapability, *PGCCNonCollCap;
|
||
|
|
||
|
/*
|
||
|
** GCCApplicationRecord
|
||
|
** This structure holds all the data associated with a single T.124
|
||
|
** application record. See the T.124 specification for what parameters
|
||
|
** are optional.
|
||
|
*/
|
||
|
typedef struct tagT120AppRecord
|
||
|
{
|
||
|
GCCNodeID node_id;
|
||
|
GCCEntityID entity_id;
|
||
|
BOOL is_enrolled_actively;
|
||
|
BOOL is_conducting_capable;
|
||
|
MCSChannelType startup_channel_type;
|
||
|
UserID application_user_id; /* optional */
|
||
|
ULONG number_of_non_collapsed_caps;
|
||
|
GCCNonCollapsingCapability
|
||
|
** non_collapsed_caps_list; /* optional */
|
||
|
}
|
||
|
T120AppRecord, GCCApplicationRecord, GCCAppRecord, *PGCCApplicationRecord, *PGCCAppRecord;
|
||
|
|
||
|
/*
|
||
|
** GCCApplicationRoster
|
||
|
** This structure holds all the data associated with a single T.124
|
||
|
** application roster. This includes the collapsed capabilites and
|
||
|
** the complete list of application records associated with an Application
|
||
|
** Protocol Entity (APE).
|
||
|
*/
|
||
|
typedef struct tagT120AppRoster
|
||
|
{
|
||
|
GCCSessionKey session_key;
|
||
|
BOOL application_roster_was_changed;
|
||
|
ULONG instance_number;
|
||
|
BOOL nodes_were_added;
|
||
|
BOOL nodes_were_removed;
|
||
|
BOOL capabilities_were_changed;
|
||
|
ULONG number_of_records;
|
||
|
GCCApplicationRecord ** application_record_list;
|
||
|
ULONG number_of_capabilities;
|
||
|
GCCApplicationCapability ** capabilities_list; /* optional */
|
||
|
}
|
||
|
T120AppRoster, GCCApplicationRoster, GCCAppRoster, *PGCCApplicationRoster, *PGCCAppRoster;
|
||
|
|
||
|
/*
|
||
|
** GCCRegistryKey
|
||
|
** This key is used to identify a specific resource used
|
||
|
** by an application. This may be a particular channel or token needed
|
||
|
** for control purposes.
|
||
|
*/
|
||
|
typedef struct tagT120RegistryKey
|
||
|
{
|
||
|
GCCSessionKey session_key;
|
||
|
OSTR resource_id; /* Max length is 64 */
|
||
|
}
|
||
|
T120RegistryKey, GCCRegistryKey, *PGCCRegistryKey;
|
||
|
|
||
|
/*
|
||
|
** RegistryItemType
|
||
|
** This enum is used to specify what type of registry item is contained
|
||
|
** at the specified slot in the registry.
|
||
|
*/
|
||
|
typedef AppletRegistryItemType GCCRegistryItemType, *PGCCRegistryItemType;
|
||
|
#define GCC_REGISTRY_CHANNEL_ID APPLET_REGISTRY_CHANNEL_ID
|
||
|
#define GCC_REGISTRY_TOKEN_ID APPLET_REGISTRY_TOKEN_ID
|
||
|
#define GCC_REGISTRY_PARAMETER APPLET_REGISTRY_PARAMETER
|
||
|
#define GCC_REGISTRY_NONE APPLET_REGISTRY_NONE
|
||
|
|
||
|
/*
|
||
|
** GCCRegistryItem
|
||
|
** This structure is used to hold a single registry item. Note that the
|
||
|
** union supports all three registry types supported by GCC.
|
||
|
*/
|
||
|
typedef struct
|
||
|
{
|
||
|
GCCRegistryItemType item_type;
|
||
|
// the following three fields were in a union
|
||
|
ChannelID channel_id;
|
||
|
TokenID token_id;
|
||
|
OSTR parameter; /* Max length is 64 */
|
||
|
}
|
||
|
T120RegistryItem, GCCRegistryItem, *PGCCRegistryItem;
|
||
|
|
||
|
/*
|
||
|
** GCCRegistryEntryOwner
|
||
|
**
|
||
|
*/
|
||
|
typedef struct
|
||
|
{
|
||
|
BOOL entry_is_owned;
|
||
|
GCCNodeID owner_node_id;
|
||
|
GCCEntityID owner_entity_id;
|
||
|
}
|
||
|
T120RegistryEntryOwner, GCCRegistryEntryOwner, *PGCCRegistryEntryOwner;
|
||
|
|
||
|
/*
|
||
|
** GCCModificationRights
|
||
|
** This enum is used when specifing what kind of rights a node has to
|
||
|
** alter the contents of a registry "parameter".
|
||
|
*/
|
||
|
typedef AppletModificationRights GCCModificationRights, *PGCCModificationRights;
|
||
|
#define GCC_OWNER_RIGHTS APPLET_OWNER_RIGHTS
|
||
|
#define GCC_SESSION_RIGHTS APPLET_SESSION_RIGHTS
|
||
|
#define GCC_PUBLIC_RIGHTS APPLET_PUBLIC_RIGHTS
|
||
|
#define GCC_NO_MODIFICATION_RIGHTS_SPECIFIED APPLET_NO_MODIFICATION_RIGHTS_SPECIFIED
|
||
|
|
||
|
/*
|
||
|
** GCCAppProtocolEntity
|
||
|
** This structure is used to identify a protocol entity at a remote node
|
||
|
** when invoke is used.
|
||
|
*/
|
||
|
typedef struct tagT120APE
|
||
|
{
|
||
|
GCCSessionKey session_key;
|
||
|
MCSChannelType startup_channel_type;
|
||
|
BOOL must_be_invoked;
|
||
|
ULONG number_of_expected_capabilities;
|
||
|
GCCApplicationCapability ** expected_capabilities_list;
|
||
|
}
|
||
|
T120APE, GCCAppProtocolEntity, GCCApe, *PGCCAppProtocolEntity, *PGCCApe;
|
||
|
|
||
|
|
||
|
/*
|
||
|
** GCCMessageType
|
||
|
** This section defines the messages that can be sent to the application
|
||
|
** through the callback facility. These messages correspond to the
|
||
|
** indications and confirms that are defined within T.124.
|
||
|
*/
|
||
|
typedef T120MessageType GCCMessageType, *PGCCMessageType;
|
||
|
|
||
|
#endif // __GCC_H__
|
||
|
|