Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

772 lines
23 KiB

  1. /*
  2. * gcc.h
  3. *
  4. * Copyright (c) 1994, 1995 by DataBeam Corporation, Lexington, KY
  5. *
  6. * Abstract:
  7. * This is the interface file for the GCC DLL. This file defines all
  8. * macros, types, and functions needed to use the GCC DLL, allowing GCC
  9. * services to be accessed from user applications.
  10. *
  11. * An application requests services from GCC by making direct
  12. * calls into the DLL (this includes T.124 requests and responses). GCC
  13. * sends information back to the application through a callback (this
  14. * includes T.124 indications and confirms). The callback for the node
  15. * controller is specified in the call GCCInitialize, and the callback
  16. * for a particular application service access point is specified in the
  17. * call GCCRegisterSAP.
  18. *
  19. * During initialization, GCC allocates a timer in order to give itself
  20. * a heartbeat. If zero is passed in here the owner application (the node
  21. * controller) must take the responsibility to call GCCHeartbeat. Almost
  22. * all work is done by GCC during these clocks ticks. It is during these
  23. * clock ticks that GCC checks with MCS to see if there is any work to be
  24. * done. It is also during these clock ticks that callbacks are made to
  25. * the user applications. GCC will NEVER invoke a user callback during a
  26. * user request (allowing the user applications to not worry about
  27. * re-entrancy). Since timer events are processed during the message
  28. * loop, the developer should be aware that long periods of time away
  29. * from the message loop will result in GCC "freezing" up.
  30. *
  31. * Note that this is a "C" language interface in order to prevent any "C++"
  32. * naming conflicts between different compiler manufacturers. Therefore,
  33. * if this file is included in a module that is being compiled with a "C++"
  34. * compiler, it is necessary to use the following syntax:
  35. *
  36. * extern "C"
  37. * {
  38. * #include "gcc.h"
  39. * }
  40. *
  41. * This disables C++ name mangling on the API entry points defined within
  42. * this file.
  43. *
  44. * Author:
  45. * blp
  46. *
  47. * Caveats:
  48. * none
  49. */
  50. #ifndef __GCC_H__
  51. #define __GCC_H__
  52. #include "t120type.h"
  53. /************************************************************************
  54. * *
  55. * Generally Used Typedefs *
  56. * *
  57. *************************************************************************/
  58. #define NM_T120_VERSION_3 (MAKELONG(0, 3)) // NM 3.0
  59. typedef struct tagOSTR
  60. {
  61. ULONG length;
  62. LPBYTE value;
  63. }
  64. OSTR, *LPOSTR;
  65. /*
  66. ** Typedef for a GCC hex string. This typedef is used throughout GCC for
  67. ** storing variable length wide character strings with embedded NULLs.
  68. */
  69. typedef struct
  70. {
  71. UINT hex_string_length;
  72. USHORT * hex_string;
  73. }
  74. T120HexString, GCCHexString, *PGCCHexString;
  75. /*
  76. ** Typedef for a GCC long string. This typedef is used in GCC for
  77. ** storing variable length strings of longs with embedded NULLs.
  78. */
  79. typedef struct tagT120LongString
  80. {
  81. ULONG long_string_length;
  82. ULONG * long_string;
  83. }
  84. T120LongString, GCCLongString, *PGCCLongString;
  85. /*
  86. * TransportAddress is passed in with the ConnectRequest() call.
  87. * This address is always a pointer to an ascii string.
  88. * The TransportAddress represents a remote location. It is the TCP
  89. * address of the remote machine.
  90. *
  91. */
  92. typedef LPSTR TransportAddress, *PTransportAddress;
  93. /*
  94. ** Typedef for a GCC Character string. This typedef is used throughout GCC for
  95. ** storing variable length, NULL terminated, single byte character strings.
  96. */
  97. // lonchanc: we should simply use char.
  98. typedef BYTE GCCCharacter, *GCCCharacterString, **PGCCCharacterString;
  99. /*
  100. ** Typedef for a GCC Numeric string. This typedef is used throughout GCC for
  101. ** storing variable length, NULL terminated, single byte character strings.
  102. ** A single character in this string is constrained to numeric values
  103. ** ranging from "0" to "9".
  104. */
  105. typedef LPSTR GCCNumericString, *PGCCNumericString;
  106. /*
  107. ** Typdef for GCC version which is used when registering the node controller
  108. ** or an application.
  109. */
  110. typedef struct
  111. {
  112. USHORT major_version;
  113. USHORT minor_version;
  114. }
  115. GCCVersion, *PGCCVersion;
  116. /*
  117. ** Macros for values of Booleans passed through the GCC API.
  118. */
  119. #define CONFERENCE_IS_LOCKED TRUE
  120. #define CONFERENCE_IS_NOT_LOCKED FALSE
  121. #define CONFERENCE_IS_LISTED TRUE
  122. #define CONFERENCE_IS_NOT_LISTED FALSE
  123. #define CONFERENCE_IS_CONDUCTIBLE TRUE
  124. #define CONFERENCE_IS_NOT_CONDUCTIBLE FALSE
  125. #define PERMISSION_IS_GRANTED TRUE
  126. #define PERMISSION_IS_NOT_GRANTED FALSE
  127. #define TIME_IS_CONFERENCE_WIDE TRUE
  128. #define TIME_IS_NOT_CONFERENCE_WIDE FALSE
  129. #define APPLICATION_IS_ENROLLED_ACTIVELY TRUE
  130. #define APPLICATION_IS_NOT_ENROLLED_ACTIVELY FALSE
  131. #define APPLICATION_IS_CONDUCTING TRUE
  132. #define APPLICATION_IS_NOT_CONDUCTING_CAPABLE FALSE
  133. #define APPLICATION_IS_ENROLLED TRUE
  134. #define APPLICATION_IS_NOT_ENROLLED FALSE
  135. #define DELIVERY_IS_ENABLED TRUE
  136. #define DELIVERY_IS_NOT_ENABLED FALSE
  137. /*
  138. ** The following enum structure typedefs are used to define the GCC Object Key.
  139. ** The GCC Object Key is used throughout GCC for things like the Application
  140. ** keys and Capability IDs.
  141. */
  142. typedef AppletKeyType GCCObjectKeyType, *PGCCObjectKeyType;;
  143. #define GCC_OBJECT_KEY APPLET_OBJECT_KEY
  144. #define GCC_H221_NONSTANDARD_KEY APPLET_H221_NONSTD_KEY
  145. typedef struct tagT120ObjectKey
  146. {
  147. GCCObjectKeyType key_type;
  148. GCCLongString object_id;
  149. OSTR h221_non_standard_id;
  150. }
  151. T120ObjectKey, GCCObjectKey, *PGCCObjectKey;
  152. /*
  153. ** GCCNonStandardParameter
  154. ** This structure is used within the NetworkAddress typedef and
  155. ** the NetworkService typedef defined below.
  156. */
  157. typedef struct
  158. {
  159. GCCObjectKey object_key;
  160. OSTR parameter_data;
  161. }
  162. GCCNonStandardParameter, *PGCCNonStandardParameter;
  163. /*
  164. ** GCCConferenceName
  165. ** This structure defines the conference name. In a create request, the
  166. ** conference name can include an optional unicode string but it must
  167. ** always include the simple numeric string. In a join request, either
  168. ** one can be specified.
  169. */
  170. typedef struct
  171. {
  172. GCCNumericString numeric_string;
  173. LPWSTR text_string; /* optional */
  174. }
  175. GCCConferenceName, GCCConfName, *PGCCConferenceName, *PGCCConfName;
  176. /*
  177. ** MCSChannelType
  178. ** Should this be defined in MCATMCS? It is used in a couple of places
  179. ** below and is explicitly defined in the T.124 specification.
  180. */
  181. typedef AppletChannelType MCSChannelType, *PMCSChannelType;
  182. #define MCS_STATIC_CHANNEL APPLET_STATIC_CHANNEL
  183. #define MCS_DYNAMIC_MULTICAST_CHANNEL APPLET_DYNAMIC_MULTICAST_CHANNEL
  184. #define MCS_DYNAMIC_PRIVATE_CHANNEL APPLET_DYNAMIC_PRIVATE_CHANNEL
  185. #define MCS_DYNAMIC_USER_ID_CHANNEL APPLET_DYNAMIC_USER_ID_CHANNEL
  186. #define MCS_NO_CHANNEL_TYPE_SPECIFIED APPLET_NO_CHANNEL_TYPE_SPECIFIED
  187. /*
  188. ** GCCUserData
  189. ** This structure defines a user data element which is used throughout GCC.
  190. */
  191. typedef struct
  192. {
  193. GCCObjectKey key;
  194. LPOSTR octet_string; /* optional */
  195. }
  196. GCCUserData, *PGCCUserData;
  197. /************************************************************************
  198. * *
  199. * Node Controller Related Typedefs *
  200. * *
  201. *************************************************************************/
  202. /*
  203. ** GCCTerminationMethod
  204. ** The termination method is used by GCC to determine
  205. ** what action to take when all participants of a conference have
  206. ** disconnected. The conference can either be manually terminated
  207. ** by the node controller or it can terminate itself automatically when
  208. ** all the participants have left the conference.
  209. */
  210. typedef enum
  211. {
  212. GCC_AUTOMATIC_TERMINATION_METHOD = 0,
  213. GCC_MANUAL_TERMINATION_METHOD = 1
  214. }
  215. GCCTerminationMethod, *PGCCTerminationMethod;
  216. /*
  217. ** GCCNodeType
  218. ** GCC specified node types. These node types dictate node controller
  219. ** behavior under certain conditions. See T.124 specification for
  220. ** proper assignment based on the needs of the Node Controller.
  221. */
  222. typedef enum
  223. {
  224. GCC_TERMINAL = 0,
  225. GCC_MULTIPORT_TERMINAL = 1,
  226. GCC_MCU = 2
  227. }
  228. GCCNodeType, *PGCCNodeType;
  229. /*
  230. ** GCCNodeProperties
  231. ** GCC specified node properties. See T.124 specification for proper
  232. ** assignment by the Node Controller.
  233. */
  234. typedef enum
  235. {
  236. GCC_PERIPHERAL_DEVICE = 0,
  237. GCC_MANAGEMENT_DEVICE = 1,
  238. GCC_PERIPHERAL_AND_MANAGEMENT_DEVICE = 2,
  239. GCC_NEITHER_PERIPHERAL_NOR_MANAGEMENT = 3
  240. }
  241. GCCNodeProperties, *PGCCNodeProperties;
  242. /*
  243. ** GCCPassword
  244. ** This is the unique password specified by the convenor of the
  245. ** conference that is used by the node controller to insure conference
  246. ** security. This is also a unicode string.
  247. */
  248. typedef struct
  249. {
  250. GCCNumericString numeric_string;
  251. LPWSTR text_string; /* optional */
  252. }
  253. GCCPassword, *PGCCPassword;
  254. /*
  255. ** GCCChallengeResponseItem
  256. ** This structure defines what a challenge response should look like.
  257. ** Note that either a password string or response data should be passed
  258. ** but not both.
  259. */
  260. typedef struct
  261. {
  262. GCCPassword * password_string;
  263. USHORT number_of_response_data_members;
  264. GCCUserData ** response_data_list;
  265. }
  266. GCCChallengeResponseItem, *PGCCChallengeResponseItem;
  267. typedef enum
  268. {
  269. GCC_IN_THE_CLEAR_ALGORITHM = 0,
  270. GCC_NON_STANDARD_ALGORITHM = 1
  271. }
  272. GCCPasswordAlgorithmType, *PGCCPasswordAlgorithmType;
  273. typedef struct
  274. {
  275. GCCPasswordAlgorithmType password_algorithm_type;
  276. GCCNonStandardParameter * non_standard_algorithm; /* optional */
  277. }
  278. GCCChallengeResponseAlgorithm, *PGCCChallengeResponseAlgorithm;
  279. typedef struct
  280. {
  281. GCCChallengeResponseAlgorithm response_algorithm;
  282. USHORT number_of_challenge_data_members;
  283. GCCUserData ** challenge_data_list;
  284. }
  285. GCCChallengeItem, *PGCCChallengeItem;
  286. typedef struct
  287. {
  288. GCCResponseTag challenge_tag;
  289. USHORT number_of_challenge_items;
  290. GCCChallengeItem ** challenge_item_list;
  291. }
  292. GCCChallengeRequest, *PGCCChallengeRequest;
  293. typedef struct
  294. {
  295. GCCResponseTag challenge_tag;
  296. GCCChallengeResponseAlgorithm response_algorithm;
  297. GCCChallengeResponseItem response_item;
  298. }
  299. GCCChallengeResponse, *PGCCChallengeResponse;
  300. typedef enum
  301. {
  302. GCC_PASSWORD_IN_THE_CLEAR = 0,
  303. GCC_PASSWORD_CHALLENGE = 1
  304. }
  305. GCCPasswordChallengeType, *PGCCPasswordChallengeType;
  306. typedef struct
  307. {
  308. GCCPasswordChallengeType password_challenge_type;
  309. union
  310. {
  311. GCCPassword password_in_the_clear;
  312. struct
  313. {
  314. GCCChallengeRequest * challenge_request; /* optional */
  315. GCCChallengeResponse * challenge_response; /* optional */
  316. } challenge_request_response;
  317. } u;
  318. }
  319. GCCChallengeRequestResponse, *PGCCChallengeRequestResponse;
  320. /*
  321. ** GCCAsymmetryType
  322. ** Used in queries to determine if the calling and called node are known
  323. ** by both Node Controllers involved with the connection.
  324. */
  325. typedef enum
  326. {
  327. GCC_ASYMMETRY_CALLER = 1,
  328. GCC_ASYMMETRY_CALLED = 2,
  329. GCC_ASYMMETRY_UNKNOWN = 3
  330. }
  331. GCCAsymmetryType, *PGCCAsymmetryType;
  332. /*
  333. ** GCCAsymmetryIndicator
  334. ** Defines how the Node Controller sees itself when making a Query
  335. ** request or response. The random number portion of this structure is
  336. ** only used if the asymmetry_type is specified to be
  337. ** GCC_ASYMMETRY_UNKNOWN.
  338. */
  339. typedef struct
  340. {
  341. GCCAsymmetryType asymmetry_type;
  342. unsigned long random_number; /* optional */
  343. }
  344. GCCAsymmetryIndicator, *PGCCAsymmetryIndicator;
  345. /*
  346. ** GCCNetworkAddress
  347. ** The following block of structures defines the Network Address as defined
  348. ** by T.124. Most of these structures were taken almost verbatim from the
  349. ** ASN.1 interface file. Since I'm not really sure what most of this stuff
  350. ** is for I really didn't know how to simplify it.
  351. */
  352. typedef struct
  353. {
  354. BOOL speech;
  355. BOOL voice_band;
  356. BOOL digital_56k;
  357. BOOL digital_64k;
  358. BOOL digital_128k;
  359. BOOL digital_192k;
  360. BOOL digital_256k;
  361. BOOL digital_320k;
  362. BOOL digital_384k;
  363. BOOL digital_512k;
  364. BOOL digital_768k;
  365. BOOL digital_1152k;
  366. BOOL digital_1472k;
  367. BOOL digital_1536k;
  368. BOOL digital_1920k;
  369. BOOL packet_mode;
  370. BOOL frame_mode;
  371. BOOL atm;
  372. }
  373. GCCTransferModes, *PGCCTransferModes;
  374. #define MAXIMUM_DIAL_STRING_LENGTH 17
  375. typedef char GCCDialingString[MAXIMUM_DIAL_STRING_LENGTH];
  376. typedef struct
  377. {
  378. USHORT length;
  379. USHORT * value;
  380. }
  381. GCCExtraDialingString, *PGCCExtraDialingString;
  382. typedef struct
  383. {
  384. BOOL telephony3kHz;
  385. BOOL telephony7kHz;
  386. BOOL videotelephony;
  387. BOOL videoconference;
  388. BOOL audiographic;
  389. BOOL audiovisual;
  390. BOOL multimedia;
  391. }
  392. GCCHighLayerCompatibility, *PGCCHighLayerCompatibility;
  393. typedef struct
  394. {
  395. GCCTransferModes transfer_modes;
  396. GCCDialingString international_number;
  397. GCCCharacterString sub_address_string; /* optional */
  398. GCCExtraDialingString * extra_dialing_string; /* optional */
  399. GCCHighLayerCompatibility * high_layer_compatibility; /* optional */
  400. }
  401. GCCAggregatedChannelAddress, *PGCCAggregatedChannelAddress;
  402. #define MAXIMUM_NSAP_ADDRESS_SIZE 20
  403. typedef struct
  404. {
  405. struct
  406. {
  407. UINT length;
  408. BYTE value[MAXIMUM_NSAP_ADDRESS_SIZE];
  409. } nsap_address;
  410. LPOSTR transport_selector; /* optional */
  411. }
  412. GCCTransportConnectionAddress, *PGCCTransportConnectionAddress;
  413. typedef enum
  414. {
  415. GCC_AGGREGATED_CHANNEL_ADDRESS = 1,
  416. GCC_TRANSPORT_CONNECTION_ADDRESS = 2,
  417. GCC_NONSTANDARD_NETWORK_ADDRESS = 3
  418. }
  419. GCCNetworkAddressType, *PGCCNetworkAddressType;
  420. typedef struct
  421. {
  422. GCCNetworkAddressType network_address_type;
  423. union
  424. {
  425. GCCAggregatedChannelAddress aggregated_channel_address;
  426. GCCTransportConnectionAddress transport_connection_address;
  427. GCCNonStandardParameter non_standard_network_address;
  428. } u;
  429. }
  430. GCCNetworkAddress, *PGCCNetworkAddress;
  431. /*
  432. ** GCCNodeRecord
  433. ** This structure defines a single conference roster record. See the
  434. ** T.124 specification for parameter definitions.
  435. */
  436. typedef struct
  437. {
  438. UserID node_id;
  439. UserID superior_node_id;
  440. GCCNodeType node_type;
  441. GCCNodeProperties node_properties;
  442. LPWSTR node_name; /* optional */
  443. USHORT number_of_participants;
  444. LPWSTR * participant_name_list; /* optional */
  445. LPWSTR site_information; /* optional */
  446. UINT number_of_network_addresses;
  447. GCCNetworkAddress ** network_address_list; /* optional */
  448. LPOSTR alternative_node_id; /* optional */
  449. USHORT number_of_user_data_members;
  450. GCCUserData ** user_data_list; /* optional */
  451. }
  452. GCCNodeRecord, *PGCCNodeRecord;
  453. /*
  454. ** GCCConferenceRoster
  455. ** This structure hold a complete conference roster. See the
  456. ** T.124 specification for parameter definitions.
  457. */
  458. typedef struct
  459. {
  460. USHORT instance_number;
  461. BOOL nodes_were_added;
  462. BOOL nodes_were_removed;
  463. USHORT number_of_records;
  464. GCCNodeRecord ** node_record_list;
  465. }
  466. GCCConferenceRoster, *PGCCConferenceRoster, GCCConfRoster, *PGCCConfRoster;
  467. /*
  468. ** GCCConferenceDescriptor
  469. ** Definition for the conference descriptor returned in a
  470. ** conference query confirm. This holds information about the
  471. ** conferences that exists at the queried node.
  472. */
  473. typedef struct
  474. {
  475. GCCConferenceName conference_name;
  476. GCCNumericString conference_name_modifier; /* optional */
  477. LPWSTR conference_descriptor; /* optional */
  478. BOOL conference_is_locked;
  479. BOOL password_in_the_clear_required;
  480. UINT number_of_network_addresses;
  481. GCCNetworkAddress ** network_address_list; /* optional */
  482. }
  483. GCCConferenceDescriptor, *PGCCConferenceDescriptor, GCCConfDescriptor, *PGCCConfDescriptor;
  484. /*
  485. ** ConferencePrivileges
  486. ** This structure defines the list of privileges that can be assigned to
  487. ** a particular conference.
  488. */
  489. typedef struct
  490. {
  491. BOOL terminate_is_allowed;
  492. BOOL eject_user_is_allowed;
  493. BOOL add_is_allowed;
  494. BOOL lock_unlock_is_allowed;
  495. BOOL transfer_is_allowed;
  496. }
  497. GCCConferencePrivileges, *PGCCConferencePrivileges, GCCConfPrivileges, *PGCCConfPrivileges;
  498. /************************************************************************
  499. * *
  500. * User Application Related Typedefs *
  501. * *
  502. *************************************************************************/
  503. /*
  504. ** GCCSessionKey
  505. ** This is a unique identifier for an application that is
  506. ** using GCC. See the T.124 for the specifics on what an application
  507. ** key should look like. A session id of zero indicates that it is
  508. ** not being used.
  509. */
  510. typedef struct tagT120SessionKey
  511. {
  512. GCCObjectKey application_protocol_key;
  513. GCCSessionID session_id;
  514. }
  515. T120SessionKey, GCCSessionKey, *PGCCSessionKey;
  516. /*
  517. ** CapabilityType
  518. ** T.124 supports three different rules when collapsing the capabilities
  519. ** list. "Logical" keeps a count of the Application Protocol Entities
  520. ** (APEs) that have that capability, "Unsigned Minimum" collapses to the
  521. ** minimum value and "Unsigned Maximum" collapses to the maximum value.
  522. */
  523. typedef AppletCapabilityType GCCCapabilityType, GCCCapType, *PGCCCapabilityType, *PGCCCapType;
  524. #define GCC_UNKNOWN_CAP_TYPE APPLET_UNKNOWN_CAP_TYPE
  525. #define GCC_LOGICAL_CAPABILITY APPLET_LOGICAL_CAPABILITY
  526. #define GCC_UNSIGNED_MINIMUM_CAPABILITY APPLET_UNSIGNED_MINIMUM_CAPABILITY
  527. #define GCC_UNSIGNED_MAXIMUM_CAPABILITY APPLET_UNSIGNED_MAXIMUM_CAPABILITY
  528. typedef AppletCapIDType T120CapabilityIDType, T120CapIDType, GCCCapabilityIDType, GCCCapIDType, *PGCCCapabilityIDType, *PGCCCapIDType;
  529. #define GCC_STANDARD_CAPABILITY APPLET_STANDARD_CAPABILITY
  530. #define GCC_NON_STANDARD_CAPABILITY APPLET_NONSTD_CAPABILITY
  531. /*
  532. ** CapabilityID
  533. ** T.124 supports both standard and non-standard capabilities. This
  534. ** structure is used to differentiate between the two.
  535. */
  536. typedef struct tagT120CapID
  537. {
  538. GCCCapabilityIDType capability_id_type;
  539. GCCObjectKey non_standard_capability;
  540. ULONG standard_capability;
  541. }
  542. T120CapID, GCCCapabilityID, GCCCapID, *PGCCCapabilityID, *PGCCCapID;
  543. /*
  544. ** CapabilityClass
  545. ** This structure defines the class of capability and holds the associated
  546. ** value. Note that Logical is not necessary. Information associated with
  547. ** logical is stored in number_of_entities in the GCCApplicationCapability
  548. ** structure.
  549. */
  550. typedef AppletCapabilityClass T120CapClass, GCCCapabilityClass, GCCCapClass, *PGCCCapabilityClass, *PGCCCapClass;
  551. /*
  552. ** GCCApplicationCapability
  553. ** This structure holds all the data associated with a single T.124
  554. ** defined application capability.
  555. */
  556. typedef struct tagT120AppCap
  557. {
  558. GCCCapabilityID capability_id;
  559. GCCCapabilityClass capability_class;
  560. ULONG number_of_entities;
  561. }
  562. T120AppCap, GCCApplicationCapability, GCCAppCap, *PGCCApplicationCapability, *PGCCAppCap;
  563. /*
  564. ** GCCNonCollapsingCapability
  565. */
  566. typedef struct tagT120NonCollCap
  567. {
  568. GCCCapabilityID capability_id;
  569. LPOSTR application_data; /* optional */
  570. }
  571. T120NonCollCap, GCCNonCollapsingCapability, GCCNonCollCap, *PGCCNonCollapsingCapability, *PGCCNonCollCap;
  572. /*
  573. ** GCCApplicationRecord
  574. ** This structure holds all the data associated with a single T.124
  575. ** application record. See the T.124 specification for what parameters
  576. ** are optional.
  577. */
  578. typedef struct tagT120AppRecord
  579. {
  580. GCCNodeID node_id;
  581. GCCEntityID entity_id;
  582. BOOL is_enrolled_actively;
  583. BOOL is_conducting_capable;
  584. MCSChannelType startup_channel_type;
  585. UserID application_user_id; /* optional */
  586. ULONG number_of_non_collapsed_caps;
  587. GCCNonCollapsingCapability
  588. ** non_collapsed_caps_list; /* optional */
  589. }
  590. T120AppRecord, GCCApplicationRecord, GCCAppRecord, *PGCCApplicationRecord, *PGCCAppRecord;
  591. /*
  592. ** GCCApplicationRoster
  593. ** This structure holds all the data associated with a single T.124
  594. ** application roster. This includes the collapsed capabilites and
  595. ** the complete list of application records associated with an Application
  596. ** Protocol Entity (APE).
  597. */
  598. typedef struct tagT120AppRoster
  599. {
  600. GCCSessionKey session_key;
  601. BOOL application_roster_was_changed;
  602. ULONG instance_number;
  603. BOOL nodes_were_added;
  604. BOOL nodes_were_removed;
  605. BOOL capabilities_were_changed;
  606. ULONG number_of_records;
  607. GCCApplicationRecord ** application_record_list;
  608. ULONG number_of_capabilities;
  609. GCCApplicationCapability ** capabilities_list; /* optional */
  610. }
  611. T120AppRoster, GCCApplicationRoster, GCCAppRoster, *PGCCApplicationRoster, *PGCCAppRoster;
  612. /*
  613. ** GCCRegistryKey
  614. ** This key is used to identify a specific resource used
  615. ** by an application. This may be a particular channel or token needed
  616. ** for control purposes.
  617. */
  618. typedef struct tagT120RegistryKey
  619. {
  620. GCCSessionKey session_key;
  621. OSTR resource_id; /* Max length is 64 */
  622. }
  623. T120RegistryKey, GCCRegistryKey, *PGCCRegistryKey;
  624. /*
  625. ** RegistryItemType
  626. ** This enum is used to specify what type of registry item is contained
  627. ** at the specified slot in the registry.
  628. */
  629. typedef AppletRegistryItemType GCCRegistryItemType, *PGCCRegistryItemType;
  630. #define GCC_REGISTRY_CHANNEL_ID APPLET_REGISTRY_CHANNEL_ID
  631. #define GCC_REGISTRY_TOKEN_ID APPLET_REGISTRY_TOKEN_ID
  632. #define GCC_REGISTRY_PARAMETER APPLET_REGISTRY_PARAMETER
  633. #define GCC_REGISTRY_NONE APPLET_REGISTRY_NONE
  634. /*
  635. ** GCCRegistryItem
  636. ** This structure is used to hold a single registry item. Note that the
  637. ** union supports all three registry types supported by GCC.
  638. */
  639. typedef struct
  640. {
  641. GCCRegistryItemType item_type;
  642. // the following three fields were in a union
  643. ChannelID channel_id;
  644. TokenID token_id;
  645. OSTR parameter; /* Max length is 64 */
  646. }
  647. T120RegistryItem, GCCRegistryItem, *PGCCRegistryItem;
  648. /*
  649. ** GCCRegistryEntryOwner
  650. **
  651. */
  652. typedef struct
  653. {
  654. BOOL entry_is_owned;
  655. GCCNodeID owner_node_id;
  656. GCCEntityID owner_entity_id;
  657. }
  658. T120RegistryEntryOwner, GCCRegistryEntryOwner, *PGCCRegistryEntryOwner;
  659. /*
  660. ** GCCModificationRights
  661. ** This enum is used when specifing what kind of rights a node has to
  662. ** alter the contents of a registry "parameter".
  663. */
  664. typedef AppletModificationRights GCCModificationRights, *PGCCModificationRights;
  665. #define GCC_OWNER_RIGHTS APPLET_OWNER_RIGHTS
  666. #define GCC_SESSION_RIGHTS APPLET_SESSION_RIGHTS
  667. #define GCC_PUBLIC_RIGHTS APPLET_PUBLIC_RIGHTS
  668. #define GCC_NO_MODIFICATION_RIGHTS_SPECIFIED APPLET_NO_MODIFICATION_RIGHTS_SPECIFIED
  669. /*
  670. ** GCCAppProtocolEntity
  671. ** This structure is used to identify a protocol entity at a remote node
  672. ** when invoke is used.
  673. */
  674. typedef struct tagT120APE
  675. {
  676. GCCSessionKey session_key;
  677. MCSChannelType startup_channel_type;
  678. BOOL must_be_invoked;
  679. ULONG number_of_expected_capabilities;
  680. GCCApplicationCapability ** expected_capabilities_list;
  681. }
  682. T120APE, GCCAppProtocolEntity, GCCApe, *PGCCAppProtocolEntity, *PGCCApe;
  683. /*
  684. ** GCCMessageType
  685. ** This section defines the messages that can be sent to the application
  686. ** through the callback facility. These messages correspond to the
  687. ** indications and confirms that are defined within T.124.
  688. */
  689. typedef T120MessageType GCCMessageType, *PGCCMessageType;
  690. #endif // __GCC_H__