Leaked source code of windows server 2003
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.

803 lines
26 KiB

  1. /*
  2. * arost.h
  3. *
  4. * Copyright (c) 1995 by DataBeam Corporation, Lexington, KY
  5. *
  6. * Abstract:
  7. * Instances of this class represent a single Application Roster's
  8. * information base. This includes both application record information and
  9. * capabilities information. This is one of the most complex classes in
  10. * all of GCC. It has a number of responsibilities and must maintain the
  11. * information in a very structured way to preserve the connection
  12. * hierarchy of the records. This is necessary so that collapsed
  13. * capabilities lists can be calculated as changes to the roster are
  14. * propagated up to the Top Provider.
  15. *
  16. * Similar to the CConfRoster class, the CAppRoster class
  17. * encapsulates all the functionality required to maintain the roster
  18. * information base which includes the ability to add new records, delete
  19. * records and update records. It has the ability to convert its internal
  20. * information base into a list of application records that can be used in
  21. * a GCC_APP_ROSTER_UPDATE_INDICATION callback. It is also responsible for
  22. * converting its internal information base into Roster Update PDUs.
  23. * Basically, this class is responsible for all operations that require
  24. * direct access to the records contained in an Application Roster.
  25. *
  26. * The CAppRoster class is also responsible for maintaining the
  27. * capabilities list. This includes storage as well as calculation of the
  28. * collapsed capabilities list. This class is also responsible for
  29. * converting the internal capabilities list information base into a list
  30. * that can be used in a GCC_APP_ROSTER_UPDATE_INDICATION callback. It is
  31. * also responsible for converting its internal capabilities list
  32. * information base into the capabilities list portion of a Roster Update
  33. * PDU. Basically, this class is responsible for all operations that
  34. * require direct access to the capabilities list.
  35. *
  36. * An Application Roster object has the ability to serialize its roster
  37. * data into a single contiguous memory block when it is required to send a
  38. * message to the application interface. This serialization process is
  39. * managed externally by the CAppRosterMsg class through calls
  40. * to LockApplicationRoster(), UnLockApplicationRoster() and
  41. * GetAppRoster(). When an Application Roster is to be serialized,
  42. * a call is made to LockApplicationRoster() which causes the
  43. * CAppRoster object to increment an internal lock count and returns
  44. * the number of bytes required to hold the complete roster update. The
  45. * Application Roster is then serialized into memory through a call to
  46. * GetAppRoster(). The CAppRoster is then unlocked to allow
  47. * it to be deleted when the free flag gets set through the
  48. * FreeApplicationRoster() function. In the current implementation of GCC,
  49. * FreeApplicationRoster() is not used since the CAppRosterMsg
  50. * maintains the data used to deliver the message (see a more detailed
  51. * description of the lock, free and unlock mechanism in the section
  52. * describing the data containers).
  53. *
  54. * The Application Roster class incorporates a number of Rogue Wave list to
  55. * both hold the roster record information and to maintain the connection
  56. * hierarchy. In many cases there are lists which contain lists. The
  57. * details of this get extremely complicated. The Application Roster
  58. * object also is responsible for maintaining internal PDU data which is
  59. * updated whenever a change occurs to its internal information base. This
  60. * PDU can be affected by both local request or by processing incoming
  61. * PDUs. Higher level objects access this PDU data by calling the
  62. * Application Roster's flush routine which in turn causes the PDU to be
  63. * freed on any subsequent request that affects the rosters internal
  64. * information base.
  65. *
  66. * Caveats:
  67. * None.
  68. *
  69. * Author:
  70. * blp/jbo
  71. */
  72. #ifndef _APPLICATION_ROSTER_
  73. #define _APPLICATION_ROSTER_
  74. #include "gccpdu.h"
  75. #include "capid.h"
  76. #include "sesskey.h"
  77. #include "appcap.h"
  78. #include "igccapp.h"
  79. typedef enum
  80. {
  81. APP_ADD_RECORD,
  82. APP_DELETE_RECORD,
  83. APP_REPLACE_RECORD,
  84. APP_FULL_REFRESH,
  85. APP_NO_CHANGE
  86. }
  87. APP_ROSTER_UPDATE_TYPE;
  88. /*
  89. ** Holds list of capabilities "list" for each protocol entity at a single node.
  90. ** Remember that there can be multiple protocol entities with identical session
  91. ** keys at a single node. Also remember that each of these protocol entities
  92. ** can have multiple capabilities.
  93. */
  94. class CListOfAppCapItemList2 : public CList2
  95. {
  96. DEFINE_CLIST2_(CListOfAppCapItemList2, CAppCapItemList*, EntityID)
  97. void DeleteList(void);
  98. };
  99. /*
  100. ** This is the definition for a single application record. All the application
  101. ** information (except collapsed capability info) is contained as part of this
  102. ** record.
  103. */
  104. typedef struct APP_RECORD
  105. {
  106. BOOL is_enrolled_actively;
  107. BOOL is_conducting_capable;
  108. BOOL was_conducting_capable;
  109. MCSChannelType startup_channel_type;
  110. UserID application_user_id;
  111. CAppCapItemList non_collapsed_caps_list;
  112. }
  113. APP_RECORD;
  114. /*
  115. ** This list is used to keep track of the application records at a single node.
  116. ** Since you can have multiple "Protocol Entities" at a single node we use
  117. ** the entity id (which is unique at a node) to index into this list.
  118. */
  119. class CAppRecordList2 : public CList2
  120. {
  121. DEFINE_CLIST2_(CAppRecordList2, APP_RECORD*, EntityID)
  122. };
  123. /*
  124. ** This list is used to hold the application record lists for each sub-node
  125. ** of a particular node.
  126. */
  127. class CSubNodeListOfRecordList2 : public CList2
  128. {
  129. DEFINE_CLIST2_(CSubNodeListOfRecordList2, CAppRecordList2*, UserID)
  130. };
  131. /*
  132. ** APP_NODE_RECORD
  133. **
  134. ** Below are all the definitions for the application node record. An
  135. ** application node record holds all the application information for either the
  136. ** local node or a directly connected node. Note that if the node is the Top
  137. ** Provider the AppRosterRecordList list will contain information about every
  138. ** "matching" application protocol entity in the entire system. Matching here
  139. ** means APE's that have the same session key.
  140. **
  141. ** An application "roster" record contains all of the following:
  142. **
  143. ** AppRecordList - The list of app records for the protocol
  144. ** entities at this node.
  145. **
  146. ** ListOfAppCapItemList2 - This list holds the list of capabilities for
  147. ** each protocol entity at this node.
  148. **
  149. ** SubNodeList2 - This list holds the app_record_list for all the
  150. ** nodes below this node in the connection
  151. ** hierarchy.
  152. **
  153. ** CollapsedCapList - This holds the collapsed capabilities for
  154. ** all the nodes below this one in the connection
  155. ** hierarchy. Note that the
  156. ** list_of_capabilities_list is not included in
  157. ** this collapsed list.
  158. **
  159. ** Notice that there is a constructor within this structure. This is
  160. ** needed for the two hash list dictionaries that get instantiated when
  161. ** an AppRosterRecord structure gets instantiated.
  162. */
  163. typedef struct APP_NODE_RECORD
  164. {
  165. APP_NODE_RECORD(void);
  166. CAppRecordList2 AppRecordList;
  167. CListOfAppCapItemList2 ListOfAppCapItemList2;
  168. CSubNodeListOfRecordList2 SubNodeList2;
  169. CAppCapItemList CollapsedCapList;
  170. }
  171. APP_NODE_RECORD;
  172. /*
  173. ** This list holds all roster records of nodes that are directly connected to
  174. ** this node. This list also includes the application records for the local
  175. ** Application Protocol entities. Note that all nodes below this node that
  176. ** are not directly connected to this node are contained in the sub-node list
  177. ** of the various APP_NODE_RECORD(s) that are contained in this list.
  178. */
  179. //
  180. // LONCHANC: Can CAppNodeRecordList2 be part of CAppRoster?
  181. // why it is separated from CAppRoster???
  182. //
  183. class CAppNodeRecordList2 : public CList2
  184. {
  185. DEFINE_CLIST2_(CAppNodeRecordList2, APP_NODE_RECORD*, UserID)
  186. };
  187. class CAppRosterMgr;
  188. class CAppRoster : public CRefCount
  189. {
  190. public:
  191. CAppRoster(
  192. PGCCSessionKey,
  193. PSessionKey,
  194. CAppRosterMgr *,
  195. BOOL fTopProvider,
  196. BOOL fLocalRoster,
  197. BOOL fMaintainPduBuffer,
  198. PGCCError);
  199. ~CAppRoster(void);
  200. /*
  201. * Utilities that operate on roster update PDU strucutures.
  202. */
  203. void FlushRosterUpdateIndicationPDU(PSetOfApplicationInformation *);
  204. GCCError BuildFullRefreshPDU(void);
  205. GCCError ProcessRosterUpdateIndicationPDU(PSetOfApplicationInformation, UserID);
  206. /*
  207. * Utilities that operate on application records.
  208. */
  209. UINT LockApplicationRoster(void);
  210. void UnLockApplicationRoster(void);
  211. UINT GetAppRoster(PGCCApplicationRoster, LPBYTE pData);
  212. GCCError AddRecord(GCCEnrollRequest *, GCCNodeID, GCCEntityID);
  213. GCCError RemoveRecord(GCCNodeID, GCCEntityID);
  214. GCCError ReplaceRecord(GCCEnrollRequest *, GCCNodeID, GCCEntityID);
  215. GCCError RemoveUserReference(UserID);
  216. UINT GetNumberOfApplicationRecords(void);
  217. CSessKeyContainer *GetSessionKey(void) { return m_pSessionKey; }
  218. void ResetApplicationRoster(void);
  219. BOOL DoesRecordExist(UserID, EntityID);
  220. BOOL HasRosterChanged(void) { return m_fRosterHasChanged; }
  221. private:
  222. /*
  223. * Utilities used to create a roster update indication PDU.
  224. */
  225. GCCError BuildApplicationRecordListPDU(APP_ROSTER_UPDATE_TYPE, UserID, EntityID);
  226. GCCError BuildSetOfRefreshesPDU(void);
  227. GCCError BuildSetOfUpdatesPDU(APP_ROSTER_UPDATE_TYPE, UserID, EntityID);
  228. GCCError BuildApplicationRecordPDU(APP_RECORD *, PApplicationRecord);
  229. GCCError BuildSetOfCapabilityRefreshesPDU(void);
  230. GCCError BuildSetOfNonCollapsingCapabilitiesPDU(PSetOfNonCollapsingCapabilities *, CAppCapItemList *);
  231. /*
  232. * Utilities used to Free a roster update indication PDU.
  233. */
  234. void FreeRosterUpdateIndicationPDU(void);
  235. void FreeSetOfRefreshesPDU(void);
  236. void FreeSetOfUpdatesPDU(void);
  237. void FreeSetOfCapabilityRefreshesPDU(void);
  238. void FreeSetOfNonCollapsingCapabilitiesPDU(PSetOfNonCollapsingCapabilities);
  239. /*
  240. * Utilities used to Process roster update indications.
  241. */
  242. GCCError ProcessSetOfRefreshesPDU(PSetOfApplicationRecordRefreshes, UserID uidSender);
  243. GCCError ProcessSetOfUpdatesPDU(PSetOfApplicationRecordUpdates, UserID uidSender);
  244. GCCError ProcessApplicationRecordPDU(APP_RECORD *, PApplicationRecord);
  245. GCCError ProcessSetOfCapabilityRefreshesPDU(PSetOfApplicationCapabilityRefreshes, UserID uidSender);
  246. GCCError ProcessNonCollapsingCapabilitiesPDU(CAppCapItemList *non_collapsed_caps_list,
  247. PSetOfNonCollapsingCapabilities set_of_capabilities);
  248. /*
  249. * Utilities used to operate on conference roster reports.
  250. */
  251. UINT GetApplicationRecords(PGCCApplicationRoster, LPBYTE memory);
  252. UINT GetCapabilitiesList(PGCCApplicationRoster, LPBYTE memory);
  253. UINT GetNonCollapsedCapabilitiesList(PGCCApplicationRecord, CAppCapItemList *, LPBYTE memory);
  254. void FreeApplicationRosterData(void);
  255. GCCError AddCollapsableCapabilities(CAppCapItemList *, UINT cCaps, PGCCApplicationCapability *);
  256. GCCError AddNonCollapsedCapabilities(CAppCapItemList *, UINT cCaps, PGCCNonCollapsingCapability *);
  257. GCCError ClearNodeRecordFromList(UserID);
  258. void ClearNodeRecordList(void);
  259. GCCError DeleteRecord(UserID, EntityID, BOOL clear_empty_records);
  260. void DeleteApplicationRecordData(APP_RECORD *);
  261. GCCError MakeCollapsedCapabilitiesList(void);
  262. GCCError AddCapabilityToCollapsedList(APP_CAP_ITEM *);
  263. BOOL DoCapabilitiesListMatch(UserID, EntityID, UINT cCapas, PGCCApplicationCapability *);
  264. private:
  265. UINT m_nInstance;
  266. CAppRosterMgr *m_pAppRosterMgr;
  267. UINT m_cbDataMemory;
  268. BOOL m_fTopProvider;
  269. BOOL m_fLocalRoster;
  270. CSessKeyContainer *m_pSessionKey;
  271. BOOL m_fRosterHasChanged;
  272. BOOL m_fPeerEntitiesAdded;
  273. BOOL m_fPeerEntitiesRemoved;
  274. BOOL m_fCapabilitiesHaveChanged;
  275. CAppNodeRecordList2 m_NodeRecordList2;
  276. //
  277. // LONCHANC: What is the difference between m_NodeRecordList2.CollapsedCapList and
  278. // the following m_CollapsedCapListForAllNodes?
  279. //
  280. // LONCHANC: m_CollapsedCapListForAllNodes is a complete list of collapsed capability list across
  281. // the entire node record list.
  282. //
  283. CAppCapItemList m_CollapsedCapListForAllNodes;
  284. BOOL m_fMaintainPduBuffer;
  285. BOOL m_fPduIsFlushed;
  286. SetOfApplicationInformation m_SetOfAppInfo;
  287. PSetOfApplicationRecordUpdates m_pSetOfAppRecordUpdates;
  288. };
  289. #endif // _APPLICATION_ROSTER_
  290. /*
  291. * CAppRoster( PGCCSessionKey session_key,
  292. * UINT owner_message_base,
  293. * BOOL is_top_provider,
  294. * BOOL is_local_roster,
  295. * BOOL maintain_pdu_buffer,
  296. * PGCCError return_value)
  297. *
  298. * Public Function Description
  299. * This is the application roster constructor used when the session key is
  300. * made available through local means (not PDU data). It is responsible for
  301. * initializing all the instance variables used by this class.
  302. *
  303. * Formal Parameters:
  304. * session_key - (i) The session key associated with this roster.
  305. * owner_object - (i) Pointer to the object that owns this object.
  306. * owner_message_base - (i) Message base to add to all owner callbacks.
  307. * is_top_provider - (i) Flag indicating if this is a top provider.
  308. * is_local_roster - (i) Flag indicating if this is a local roster.
  309. * maintain_pdu_buffer - (i) Flag indicating if PDU should be maintained.
  310. * return_value - (o) Return value for constructor.
  311. *
  312. * Return Value
  313. * None.
  314. *
  315. * Side Effects
  316. * None.
  317. *
  318. * Caveats
  319. * None.
  320. */
  321. /*
  322. * CAppRoster( PSessionKey session_key,
  323. * UINT owner_message_base,
  324. * BOOL is_top_provider,
  325. * BOOL is_local_roster,
  326. * BOOL maintain_pdu_buffer,
  327. * PGCCError return_value)
  328. *
  329. * Public Function Description
  330. * This is the application roster constructor used when the session key is
  331. * made available through a PDU. It is responsible for initializing all the
  332. * instance variables used by this class.
  333. *
  334. * Formal Parameters:
  335. * session_key - (i) The session key associated with this roster.
  336. * owner_object - (i) Pointer to the object that owns this object.
  337. * owner_message_base - (i) Message base to add to all owner callbacks.
  338. * is_top_provider - (i) Flag indicating if this is a top provider.
  339. * is_local_roster - (i) Flag indicating if this is a local roster.
  340. * maintain_pdu_buffer - (i) Flag indicating if PDU should be maintained.
  341. * return_value - (o) Return value for constructor.
  342. *
  343. * Return Value
  344. * None.
  345. *
  346. * Side Effects
  347. * None.
  348. *
  349. * Caveats
  350. * None.
  351. */
  352. /*
  353. * ~ApplicationRoster()
  354. *
  355. * Public Function Description
  356. * This is the application roster destructor. It is responsible for
  357. * freeing up all the internal memory used by this class.
  358. *
  359. * Formal Parameters:
  360. * None.
  361. *
  362. * Return Value
  363. * None.
  364. *
  365. * Side Effects
  366. * None.
  367. *
  368. * Caveats
  369. * None.
  370. */
  371. /*
  372. * void FlushRosterUpdateIndicationPDU (
  373. * PSetOfApplicationInformation * indication_pdu)
  374. *
  375. * Public Function Description
  376. * This routine is used to access any PDU data that might currently be
  377. * queued inside the application roster. PDU data is queued whenever
  378. * a request is made to the application roster that affects its
  379. * internal information base.
  380. *
  381. * Formal Parameters:
  382. * indication_pdu - (o) Pointer to the PDU buffer to fill in.
  383. *
  384. * Return Value
  385. * None.
  386. *
  387. * Side Effects
  388. * None.
  389. *
  390. * Caveats
  391. * The PDU data returned by this routine is automatically freed the next
  392. * time a request is made to this roster object that affects its internal
  393. * databease.
  394. */
  395. /*
  396. * GCCError BuildFullRefreshPDU (void)
  397. *
  398. * Public Function Description
  399. * This routine is responsible for generating a full application roster
  400. * refresh PDU.
  401. *
  402. * Formal Parameters:
  403. * None.
  404. *
  405. * Return Value
  406. * GCC_NO_ERROR - No error occured.
  407. * GCC_ALLOCATION_FAILURE - A resource error occured.
  408. *
  409. * Side Effects
  410. * None.
  411. *
  412. * Caveats
  413. * None.
  414. */
  415. /*
  416. * GCCError ProcessRosterUpdateIndicationPDU (
  417. * PSetOfApplicationInformation indication_pdu,
  418. * UserID sender_id);
  419. *
  420. * Public Function Description
  421. * This routine is responsible for processing the decoded PDU data.
  422. * It essentially changes the application roster object's internal database
  423. * based on the information in the structure.
  424. *
  425. * Formal Parameters:
  426. * indication_pdu - (i) This is a pointer to a structure that
  427. * holds the decoded PDU data.
  428. * sender_id - (i) The user ID of the node that sent the PDU.
  429. *
  430. * Return Value
  431. * GCC_NO_ERROR - No error occured.
  432. * GCC_ALLOCATION_FAILURE - A resource error occured.
  433. *
  434. * Side Effects
  435. * None.
  436. *
  437. * Caveats
  438. * None.
  439. */
  440. /*
  441. * UINT LockApplicationRoster()
  442. *
  443. * Public Function Description:
  444. * This routine is used to "lock" the "API" data for this object. This
  445. * results in the lock count for this object being incremented. When the
  446. * lock count transitions from 0 to 1, a calculation is made to determine
  447. * how much memory will be needed to hold any "API" data which will
  448. * be referenced by, but not held in, the GCCApplicationRoster structure
  449. * which is filled in on a call to GetAppRoster. This is the
  450. * value returned by this routine in order to allow the calling object to
  451. * allocate that amount of memory in preparation for the call to
  452. * GetAppRoster.
  453. *
  454. * Formal Parameters:
  455. * None.
  456. *
  457. * Return Value:
  458. * The amount of memory, if any, which will be needed to hold "API" data
  459. * which is referenced by, but not held in, the GetAppRoster
  460. * structure provided as an output parameter to the GetAppRoster
  461. * call.
  462. *
  463. * Side Effects:
  464. * The internal lock count is incremented.
  465. *
  466. * Caveats:
  467. * The internal lock count is used in conjuction with an internal "free"
  468. * flag as a mechanism for ensuring that this object remains in existance
  469. * until all interested parties are through with it. The object remains
  470. * valid (unless explicity deleted) until the lock count is zero and the
  471. * "free" flag is set through a call to FreeApplicationRoster. This allows
  472. * other objects to lock this object and be sure that it remains valid
  473. * until they call UnLock which will decrement the internal lock count. A
  474. * typical usage scenerio for this object would be: An ApplicatonRoster
  475. * object is constructed and then passed off to any interested parties
  476. * through a function call. On return from the function call, the
  477. * FreeApplicationRoster call is made which will set the internal "free"
  478. * flag. If no other parties have locked the object with a Lock call,
  479. * then the CAppRoster object will automatically delete itself when
  480. * the FreeApplicationRoster call is made. If, however, any number of
  481. * other parties has locked the object, it will remain in existence until
  482. * each of them has unlocked the object through a call to UnLock.
  483. */
  484. /*
  485. * void UnLockApplicationRoster ();
  486. *
  487. * Public Function Description:
  488. * This routine is used to "unlock" the "API" data for this object. This
  489. * results in the lock count for this object being decremented. When the
  490. * lock count transitions from 1 to 0, a check is made to determine
  491. * whether the object has been freed through a call to
  492. * FreeApplicationRoster. If so, the object will automatically delete
  493. * itself.
  494. *
  495. * Formal Parameters:
  496. * None.
  497. *
  498. * Return Value:
  499. * None.
  500. *
  501. * Side Effects:
  502. * The internal lock count is decremented.
  503. *
  504. * Caveats:
  505. * It is the responsibility of any party which locks an CAppRoster
  506. * object by calling Lock to also unlock the object with a call to UnLock.
  507. * If the party calling UnLock did not construct the CAppRoster
  508. * object, it should assume the object to be invalid thereafter.
  509. */
  510. /*
  511. * UINT GetAppRoster(
  512. * PGCCApplicationRoster pGccAppRoster,
  513. * LPSTR pData)
  514. *
  515. * Public Function Description:
  516. * This routine is used to retrieve the conference roster data from
  517. * the CAppRoster object in the "API" form of a
  518. * GCCApplicationRoster.
  519. *
  520. * Formal Parameters:
  521. * application_roster (o) The GCCApplicationRoster structure to fill in.
  522. * memory (o) The memory used to hold any data referenced by,
  523. * but not held in, the output structure.
  524. *
  525. * Return Value:
  526. * The amount of data, if any, written into the bulk memory block provided.
  527. *
  528. * Side Effects:
  529. * None.
  530. *
  531. * Caveats:
  532. * None.
  533. */
  534. /*
  535. * GCCError AddRecord(
  536. * PGCCApplicationRecord application_record,
  537. * USHORT number_of_capabilities,
  538. * PGCCApplicationCapability * capabilities_list,
  539. * UserID user_id,
  540. * EntityID entity_id)
  541. *
  542. * Public Function Description:
  543. * This routine is used to add a single nodes conference record to the
  544. * conference roster object's internal list of records.
  545. *
  546. * Formal Parameters:
  547. * application_record (i) Pointer to the "API" record structure to
  548. * add.
  549. * number_of_capabilities (i) Number of capabilities contained in the
  550. * passed in list.
  551. * capabilities_list (i) List of collapsed capabilities.
  552. * user_id (i) Node ID associated with record being added.
  553. * entity_id (i) Entity ID associated with record being
  554. * added.
  555. *
  556. * Return Value:
  557. * GCC_NO_ERROR - No error occured.
  558. * GCC_ALLOCATION_FAILURE - A resource error occured.
  559. * GCC_INVALID_NON_COLLAPSED_CAP - Bad non-collapsed capabilities.
  560. * GCC_INVALID_PARAMETER - Invalid parameter passed in.
  561. * an invalid object key.
  562. *
  563. * Side Effects:
  564. * None.
  565. *
  566. * Caveats:
  567. * None.
  568. */
  569. /*
  570. * GCCError RemoveRecord( UserID node_id)
  571. * EntityID entity_id)
  572. *
  573. * Public Function Description:
  574. * This routine is used to remove a single APEs application record from the
  575. * application roster object's internal list of records.
  576. *
  577. * Formal Parameters:
  578. * node_id (i) Node ID of record to be removed.
  579. * entity_id (i) Entity ID of record to be removed.
  580. *
  581. * Return Value:
  582. * GCC_NO_ERROR - No error occured.
  583. * GCC_INVALID_PARAMETER - Invalid parameter passed in.
  584. *
  585. * Side Effects:
  586. * None.
  587. *
  588. * Caveats:
  589. * None.
  590. */
  591. /*
  592. * GCCError ReplaceRecord(
  593. * PGCCApplicationRecord application_record,
  594. * USHORT number_of_capabilities,
  595. * PGCCApplicationCapability * capabilities_list,
  596. * UserID user_id,
  597. * EntityID entity_id)
  598. *
  599. * Public Function Description:
  600. * This routine is used to replace a single APEs application record in the
  601. * application roster object's internal list of records.
  602. *
  603. * Formal Parameters:
  604. * application_record (i) Conference record to use as the replacement.
  605. * number_of_capabilities (i) Number of capabilities contained in the
  606. * passed in list.
  607. * capabilities_list (i) List of collapsed capabilities.
  608. * user_id (i) Node ID of record to be replaced.
  609. * entity_id (i) Entity ID of record to be replaced.
  610. *
  611. * Return Value:
  612. * GCC_NO_ERROR - No error occured.
  613. * GCC_ALLOCATION_FAILURE - A resource error occured.
  614. * GCC_INVALID_PARAMETER - Invalid parameter passed in.
  615. * GCC_INVALID_NON_COLLAPSED_CAP - Bad non-collapsed capabilities.
  616. *
  617. * Side Effects:
  618. * None.
  619. *
  620. * Caveats:
  621. * None.
  622. */
  623. /*
  624. * GCCError RemoveUserReference (
  625. * UserID detached_node)
  626. *
  627. * Public Function Description:
  628. * This routine removes all records associated with the specified node
  629. * id.
  630. *
  631. * Formal Parameters:
  632. * detached_node (i) Node reference to remove.
  633. *
  634. * Return Value:
  635. * GCC_NO_ERROR - No error occured.
  636. * GCC_INVALID_PARAMETER - No records associated with this node
  637. *
  638. * Side Effects:
  639. * None.
  640. *
  641. * Caveats:
  642. * None.
  643. */
  644. /*
  645. * USHORT GetNumberOfApplicationRecords ();
  646. *
  647. * Public Function Description:
  648. * This routine returns the total number of application roster records
  649. * contained in the objects conference roster record list.
  650. *
  651. * Formal Parameters:
  652. * None.
  653. *
  654. * Return Value:
  655. * The number of records in the application roster list.
  656. *
  657. * Side Effects:
  658. * None.
  659. *
  660. * Caveats:
  661. * None.
  662. */
  663. /*
  664. * CSessKeyContainer *GetSessionKey ()
  665. *
  666. * Public Function Description:
  667. * This routine returns a pointer to the session key associated with this
  668. * application roster.
  669. *
  670. * Formal Parameters:
  671. * None.
  672. *
  673. * Return Value:
  674. * The session key associated with this roster.
  675. *
  676. * Side Effects:
  677. * None.
  678. *
  679. * Caveats:
  680. * None.
  681. */
  682. /*
  683. * void ResetApplicationRoster ()
  684. *
  685. * Public Function Description:
  686. * This routine takes care of resetting all the internal flags that are
  687. * used to convey the current state of the application roster. Should be
  688. * called after the roster is flushed and any roster update messages have
  689. * been delivered (after a change to the roster occurs).
  690. *
  691. * Formal Parameters:
  692. * None.
  693. *
  694. * Return Value:
  695. * None.
  696. *
  697. * Side Effects:
  698. * None.
  699. *
  700. * Caveats:
  701. * None.
  702. */
  703. /*
  704. * DBBoolean DoesRecordExist (
  705. * UserID node_id,
  706. * EntityID entity_id)
  707. *
  708. * Public Function Description:
  709. * This routine informs the caller if the specified application record
  710. * exists or not.
  711. *
  712. * Formal Parameters:
  713. * node_id - (i) Node ID of APE record to check.
  714. * entity_id - (i) Entity ID of APE record to check.
  715. *
  716. * Return Value:
  717. * TRUE - record exist.
  718. * FALSE - record does not exist.
  719. *
  720. * Side Effects:
  721. * None.
  722. *
  723. * Caveats:
  724. * None.
  725. */
  726. /*
  727. * DBBoolean HasRosterChanged ();
  728. *
  729. * Public Function Description:
  730. * This routine informs the caller if the roster has changed since the
  731. * last time it was reset.
  732. *
  733. * Formal Parameters:
  734. * None.
  735. *
  736. * Return Value:
  737. * TRUE - If roster has changed
  738. * FALSE - If roster has not changed
  739. *
  740. * Side Effects:
  741. * None.
  742. *
  743. * Caveats:
  744. * None.
  745. */