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.

1874 lines
55 KiB

  1. /*
  2. * domain.h
  3. *
  4. * Copyright (c) 1993 - 1995 by DataBeam Corporation, Lexington, KY
  5. *
  6. * Abstract:
  7. * This is the interface file for the domain class. This class contains
  8. * all code necessary to maintain a domain information base within the
  9. * MCS system. When a domain object is first created, it is completely
  10. * empty. That is, it has no user attachments, no MCS connections, and
  11. * therefore no outstanding resources, such as channels and tokens.
  12. *
  13. * A word of caution about terminology. Throughout the MCS documentation
  14. * the word "attachment" is used in conjunction with a USER attachment. The
  15. * word "connection" is used in conjunction with a TRANSPORT connection. In
  16. * this class, the two types of "attachments" are NOT differentiated (most
  17. * of the time). They are both referred to as attachments. When deleting
  18. * an attachment, it is necessary to know the difference, however, and so
  19. * there is an enumerated type (AttachmentType) to distinguish. The type
  20. * of each attachment is stored in a dictionary for easy access (see
  21. * description of AttachmentType below).
  22. *
  23. * This class keeps a list of "attachments" that are hierarchically below
  24. * the local provider within the domain. It also keeps a pointer to the
  25. * one attachment that is hierarchically above the local provider (if any).
  26. *
  27. * Since this class inherits from CommandTarget, it processes MCS commands
  28. * as member function calls (see cmdtar.h for a description of how this
  29. * mechanism works). In essence, domain objects are just big command
  30. * routers who react to incoming commands according to the contents of the
  31. * information base. That information base, in turn, is modified by the
  32. * commands that are handled.
  33. *
  34. * Domain objects keep lists of both channel objects and token objects,
  35. * who maintain information about the current state of various channels
  36. * and tokens. Objects of this class are the heart of MCS.
  37. *
  38. * Caveats:
  39. * None.
  40. *
  41. * Author:
  42. * James P. Galvin, Jr.
  43. */
  44. #ifndef _DOMAIN_
  45. #define _DOMAIN_
  46. /*
  47. * Interface files.
  48. */
  49. #include "userchnl.h"
  50. #include "privchnl.h"
  51. #include "token.h"
  52. #include "randchnl.h"
  53. #include "attmnt.h"
  54. /*
  55. * This enumeration defines the errors that a domain object can return when
  56. * instructed to do something by its creator.
  57. */
  58. typedef enum
  59. {
  60. DOMAIN_NO_ERROR,
  61. DOMAIN_NOT_HIERARCHICAL,
  62. DOMAIN_NO_SUCH_CONNECTION,
  63. DOMAIN_CONNECTION_ALREADY_EXISTS
  64. } DomainError;
  65. typedef DomainError * PDomainError;
  66. /*
  67. * This enumeration defines the different merge states that a domain can be in
  68. * at any given time. They can be described as follows:
  69. *
  70. * MERGE_INACTIVE
  71. * There is no merge operation underway. This is the normal operational
  72. * state.
  73. * MERGE_USER_IDS
  74. * The domain is currently merging user IDs into the upper domain.
  75. * MERGE_STATIC_CHANNELS
  76. * The domain is currently merging static channels into the upper domain.
  77. * MERGE_ASSIGNED_CHANNELS
  78. * The domain is currently merging assigned channels into the upper domain.
  79. * MERGE_PRIVATE_CHANNELS
  80. * The domain is currently merging private channels into the upper domain.
  81. * MERGE_TOKENS
  82. * The domain is currently merging tokens into the upper domain.
  83. * MERGE_COMPLETE
  84. * The merge operation is complete (this is a transitional state).
  85. */
  86. typedef enum
  87. {
  88. MERGE_INACTIVE,
  89. MERGE_USER_IDS,
  90. MERGE_STATIC_CHANNELS,
  91. MERGE_ASSIGNED_CHANNELS,
  92. MERGE_PRIVATE_CHANNELS,
  93. MERGE_TOKENS,
  94. MERGE_COMPLETE
  95. } MergeState;
  96. typedef MergeState * PMergeState;
  97. /*
  98. * This collection type is used to hold the height of the domain across
  99. * various downward attachments. The Domain object needs to know this in order
  100. * to calculate the effect of attachment loss on the height of the domain.
  101. */
  102. class CDomainHeightList2 : public CList2
  103. {
  104. DEFINE_CLIST2(CDomainHeightList2, UINT, PConnection)
  105. };
  106. /*
  107. * This is the class definition for the Domain class.
  108. */
  109. class Domain
  110. {
  111. public:
  112. Domain ();
  113. ~Domain ();
  114. BOOL IsTopProvider(void) { return (NULL == m_pConnToTopProvider); }
  115. Void GetDomainParameters (
  116. PDomainParameters domain_parameters,
  117. PDomainParameters min_domain_parameters,
  118. PDomainParameters max_domain_parameters);
  119. Void BindConnAttmnt (
  120. PConnection originator,
  121. BOOL upward_connection,
  122. PDomainParameters domain_parameters);
  123. Void PlumbDomainIndication (
  124. PConnection originator,
  125. ULong height_limit);
  126. Void ErectDomainRequest (
  127. PConnection originator,
  128. ULong height_in_domain,
  129. ULong throughput_interval);
  130. Void MergeChannelsRequest (
  131. PConnection originator,
  132. CChannelAttributesList *merge_channel_list,
  133. CChannelIDList *purge_channel_list);
  134. Void MergeChannelsConfirm (
  135. PConnection originator,
  136. CChannelAttributesList *merge_channel_list,
  137. CChannelIDList *purge_channel_list);
  138. Void PurgeChannelsIndication (
  139. PConnection originator,
  140. CUidList *purge_user_list,
  141. CChannelIDList *purge_channel_list);
  142. Void MergeTokensRequest (
  143. PConnection originator,
  144. CTokenAttributesList *merge_token_list,
  145. CTokenIDList *purge_token_list);
  146. Void MergeTokensConfirm (
  147. PConnection originator,
  148. CTokenAttributesList *merge_token_list,
  149. CTokenIDList *purge_token_list);
  150. Void PurgeTokensIndication (
  151. PConnection originator,
  152. CTokenIDList *purge_token_list);
  153. Void DisconnectProviderUltimatum (
  154. CAttachment *originator,
  155. Reason reason);
  156. Void RejectUltimatum (
  157. PConnection originator,
  158. Diagnostic diagnostic,
  159. PUChar octet_string_address,
  160. ULong octet_string_length);
  161. Void AttachUserRequest (
  162. CAttachment *originator);
  163. Void AttachUserConfirm (
  164. PConnection originator,
  165. Result result,
  166. UserID uidInitiator);
  167. Void DetachUserRequest (
  168. CAttachment *originator,
  169. Reason reason,
  170. CUidList *user_id_list);
  171. Void DetachUserIndication (
  172. PConnection originator,
  173. Reason reason,
  174. CUidList *user_id_list);
  175. Void ChannelJoinRequest (
  176. CAttachment *originator,
  177. UserID uidInitiator,
  178. ChannelID channel_id);
  179. Void ChannelJoinConfirm (
  180. PConnection originator,
  181. Result result,
  182. UserID uidInitiator,
  183. ChannelID requested_id,
  184. ChannelID channel_id);
  185. Void ChannelLeaveRequest (
  186. CAttachment *originator,
  187. CChannelIDList *channel_id_list);
  188. Void ChannelConveneRequest (
  189. CAttachment *originator,
  190. UserID uidInitiator);
  191. Void ChannelConveneConfirm (
  192. PConnection originator,
  193. Result result,
  194. UserID uidInitiator,
  195. ChannelID channel_id);
  196. Void ChannelDisbandRequest (
  197. CAttachment *originator,
  198. UserID uidInitiator,
  199. ChannelID channel_id);
  200. Void ChannelDisbandIndication (
  201. PConnection originator,
  202. ChannelID channel_id);
  203. Void ChannelAdmitRequest (
  204. CAttachment *originator,
  205. UserID uidInitiator,
  206. ChannelID channel_id,
  207. CUidList *user_id_list);
  208. Void ChannelAdmitIndication (
  209. PConnection originator,
  210. UserID uidInitiator,
  211. ChannelID channel_id,
  212. CUidList *user_id_list);
  213. Void ChannelExpelRequest (
  214. CAttachment *originator,
  215. UserID uidInitiator,
  216. ChannelID channel_id,
  217. CUidList *user_id_list);
  218. Void ChannelExpelIndication (
  219. PConnection originator,
  220. ChannelID channel_id,
  221. CUidList *user_id_list);
  222. Void SendDataRequest (
  223. CAttachment *originator,
  224. UINT type,
  225. PDataPacket data_packet);
  226. Void SendDataIndication (
  227. PConnection originator,
  228. UINT type,
  229. PDataPacket data_packet);
  230. Void TokenGrabRequest (
  231. CAttachment *originator,
  232. UserID uidInitiator,
  233. TokenID token_id);
  234. Void TokenGrabConfirm (
  235. PConnection originator,
  236. Result result,
  237. UserID uidInitiator,
  238. TokenID token_id,
  239. TokenStatus token_status);
  240. Void TokenInhibitRequest (
  241. CAttachment *originator,
  242. UserID uidInitiator,
  243. TokenID token_id);
  244. Void TokenInhibitConfirm (
  245. PConnection originator,
  246. Result result,
  247. UserID uidInitiator,
  248. TokenID token_id,
  249. TokenStatus token_status);
  250. Void TokenGiveRequest (
  251. CAttachment *originator,
  252. PTokenGiveRecord pTokenGiveRec);
  253. Void TokenGiveIndication (
  254. PConnection originator,
  255. PTokenGiveRecord pTokenGiveRec);
  256. Void TokenGiveResponse (
  257. CAttachment *originator,
  258. Result result,
  259. UserID receiver_id,
  260. TokenID token_id);
  261. Void TokenGiveConfirm (
  262. PConnection originator,
  263. Result result,
  264. UserID uidInitiator,
  265. TokenID token_id,
  266. TokenStatus token_status);
  267. Void TokenPleaseRequest (
  268. CAttachment *originator,
  269. UserID uidInitiator,
  270. TokenID token_id);
  271. Void TokenPleaseIndication (
  272. PConnection originator,
  273. UserID uidInitiator,
  274. TokenID token_id);
  275. Void TokenReleaseRequest (
  276. CAttachment *originator,
  277. UserID uidInitiator,
  278. TokenID token_id);
  279. Void TokenReleaseConfirm (
  280. PConnection originator,
  281. Result result,
  282. UserID uidInitiator,
  283. TokenID token_id,
  284. TokenStatus token_status);
  285. Void TokenTestRequest (
  286. CAttachment *originator,
  287. UserID uidInitiator,
  288. TokenID token_id);
  289. Void TokenTestConfirm (
  290. PConnection originator,
  291. UserID uidInitiator,
  292. TokenID token_id,
  293. TokenStatus token_status);
  294. private:
  295. Void LockDomainParameters (
  296. PDomainParameters domain_parameters,
  297. BOOL parameters_locked);
  298. ChannelID AllocateDynamicChannel ();
  299. BOOL ValidateUserID (
  300. UserID user_id,
  301. CAttachment *pOrigAtt);
  302. Void PurgeDomain (
  303. Reason reason);
  304. Void DeleteAttachment (
  305. CAttachment *pAtt,
  306. Reason reason);
  307. Void DeleteUser (
  308. UserID user_id);
  309. Void DeleteChannel (
  310. ChannelID channel_id);
  311. Void DeleteToken (
  312. TokenID token_id);
  313. Void ReclaimResources ();
  314. Void MergeInformationBase ();
  315. Void SetMergeState (
  316. MergeState merge_state);
  317. Void AddChannel (
  318. PConnection pConn,
  319. PChannelAttributes merge_channel,
  320. CChannelAttributesList *merge_channel_list,
  321. CChannelIDList *purge_channel_list);
  322. Void AddToken (
  323. PTokenAttributes merge_token,
  324. CTokenAttributesList *merge_token_list,
  325. CTokenIDList *purge_token_list);
  326. Void CalculateDomainHeight ();
  327. MergeState Merge_State;
  328. UShort Outstanding_Merge_Requests;
  329. UINT Number_Of_Users;
  330. UINT Number_Of_Channels;
  331. UINT Number_Of_Tokens;
  332. DomainParameters Domain_Parameters;
  333. BOOL Domain_Parameters_Locked;
  334. PConnection m_pConnToTopProvider;
  335. CAttachmentList m_AttachmentList;
  336. CAttachmentQueue m_AttachUserQueue;
  337. CConnectionQueue m_MergeQueue;
  338. CChannelList2 m_ChannelList2;
  339. CTokenList2 m_TokenList2;
  340. UINT m_nDomainHeight;
  341. CDomainHeightList2 m_DomainHeightList2;
  342. RandomChannelGenerator
  343. Random_Channel_Generator;
  344. };
  345. /*
  346. * Domain ()
  347. *
  348. * Functional Description:
  349. * This is the constructor for the domain class. It initializes the state
  350. * of the domain, which at creation is empty. It also initializes the
  351. * domain parameters structure that will be used by this domain for all
  352. * future parameters and negotiation.
  353. *
  354. * Formal Parameters:
  355. * None.
  356. *
  357. * Return Value:
  358. * None.
  359. *
  360. * Side Effects:
  361. * None.
  362. *
  363. * Caveats:
  364. * None.
  365. */
  366. /*
  367. * ~Domain ()
  368. *
  369. * Functional Description:
  370. * This is the destructor for the domain class. It purges the entire
  371. * domain by first sending disconnect provider ultimatums to ALL
  372. * attachments (both user attachments and MCS connections). It then frees
  373. * up all resources in use by the domain (which is just objects in its
  374. * various containers).
  375. *
  376. * Note that doing this will result in all user attachments and MCS
  377. * connections being broken. Furthermore, all providers that are
  378. * hierarchically below this one, will respond by purging their domains
  379. * as well.
  380. *
  381. * Formal Parameters:
  382. * None.
  383. *
  384. * Return Value:
  385. * None.
  386. *
  387. * Side Effects:
  388. * The domain from this provider downward is completely eradicated.
  389. *
  390. * Caveats:
  391. * None.
  392. */
  393. /*
  394. * BOOL IsTopProvider ()
  395. *
  396. * Functional Description:
  397. * This function is used to ask the domain if it is the top provider in
  398. * the domain that it represents.
  399. *
  400. * Formal Parameters:
  401. * None.
  402. *
  403. * Return Value:
  404. * TRUE if this is the top provider. FALSE otherwise.
  405. *
  406. * Side Effects:
  407. * None.
  408. *
  409. * Caveats:
  410. * None.
  411. */
  412. /*
  413. * Void GetDomainParameters (
  414. * PDomainParameters domain_parameters,
  415. * PDomainParameters min_domain_parameters,
  416. * PDomainParameters max_domain_parameters)
  417. *
  418. * Functional Description:
  419. * This function is used to ask the domain what the minimum and maximum
  420. * acceptable values for domain parameters are. If the domain has no
  421. * connections (and therefore has not yet locked its domain parameters),
  422. * then it will return min and max values based on what it can handle.
  423. * If it has locked its domain parameters, then both the min and max values
  424. * will be set to the locked set (indicating that it will not accept
  425. * anything else).
  426. *
  427. * Formal Parameters:
  428. * domain_parameters (o)
  429. * Pointer to a structure to be filled with the current domain
  430. * parameters (those that are in use). Setting this to NULL will
  431. * prevent current domain parameters from being returned.
  432. * min_domain_parameters (o)
  433. * Pointer to a structure to be filled with the minimum domain
  434. * parameters. Setting this to NULL will prevent minimum domain
  435. * parameters from being returned.
  436. * max_domain_parameters (o)
  437. * Pointer to a structure to be filled with the maximum domain
  438. * parameters. Setting this to NULL will prevent maximum domain
  439. * parameters from being returned.
  440. *
  441. * Return Value:
  442. * None (except as specified in the parameter list above).
  443. *
  444. * Side Effects:
  445. * None.
  446. *
  447. * Caveats:
  448. * None.
  449. */
  450. /*
  451. * Void BindConnAttmnt (
  452. * PConnection originator,
  453. * BOOL upward_connection,
  454. * PDomainParameters domain_parameters,
  455. * AttachmentType attachment_type)
  456. *
  457. * Functional Description:
  458. * This function is used when an attachment wishes to bind itself to the
  459. * domain. This will occur only after the connection has been been
  460. * completely and successfully negotiated.
  461. *
  462. * Formal Parameters:
  463. * originator (i)
  464. * This is the attachment that wishes to bind.
  465. * upward_connection (i)
  466. * A boolean flag indicating whether or not this is an upward
  467. * connection.
  468. * domain_parameters (i)
  469. * A pointer to a domain parameters structure that holds the parameters
  470. * that were negotiated for the connection. If the domain has not
  471. * already locked its parameters, it will accept and lock these.
  472. * attachment_type (i)
  473. * What type of attachment is this (local or remote).
  474. *
  475. * Return Value:
  476. * None.
  477. *
  478. * Side Effects:
  479. * None.
  480. *
  481. * Caveats:
  482. * None.
  483. */
  484. /*
  485. * Void PlumbDomainIndication (
  486. * PCommandTarget originator,
  487. * ULong height_limit)
  488. *
  489. * Functional Description:
  490. * This member function represents the reception of a plumb domain
  491. * indication from the top provider. If the height limit is zero, then
  492. * the connection to the top provder will be severed. If its not, then
  493. * it will be decremented and broadcast to all downward attachments.
  494. *
  495. * Formal Parameters:
  496. * originator (i)
  497. * This is the attachment from which the command originated.
  498. * height_limit (i)
  499. * This is initially the height limit for the domain. It is
  500. * decremented at each layer in the domain. When it reaches zero,
  501. * the recipient is too far from the top provider, and must
  502. * disconnect.
  503. *
  504. * Return Value:
  505. * None.
  506. *
  507. * Side Effects:
  508. * None.
  509. *
  510. * Caveats:
  511. * None.
  512. */
  513. /*
  514. * Void ErectDomainRequest (
  515. * PCommandTarget originator,
  516. * ULong height_in_domain,
  517. * ULong throughput_interval)
  518. *
  519. * Functional Description:
  520. * This member function represents the reception of an erect domain request
  521. * from one of its downward attachments. This contains information needed
  522. * by higher providers to know what's going on below (such as total
  523. * height of domain).
  524. *
  525. * Formal Parameters:
  526. * originator (i)
  527. * This is the attachment from which the command originated.
  528. * height_in_domain (i)
  529. * This is the height of the domain from the originator down.
  530. * throughput_interval (i)
  531. * This is not currently supported and will always be zero (0).
  532. *
  533. * Return Value:
  534. * None.
  535. *
  536. * Side Effects:
  537. * None.
  538. *
  539. * Caveats:
  540. * None.
  541. */
  542. /*
  543. * Void MergeChannelsRequest (
  544. * PCommandTarget originator,
  545. * CChannelAttributesList *merge_channel_list,
  546. * CChannelIDList *purge_channel_list)
  547. *
  548. * Functional Description:
  549. * This member function represents the reception of a merge channel
  550. * request from one of this domain's attachments. If this is the top
  551. * provider, then the merge request will be processed locally (which
  552. * will result in the transmission of merge channel confirms back to
  553. * the originating attachment). If this is not the top provider, then
  554. * the command will be forwarded toward the top provider, and this
  555. * provider will remember how to route it back.
  556. *
  557. * Formal Parameters:
  558. * originator (i)
  559. * This is the attachment from which the command originated.
  560. * merge_channel_list (i)
  561. * This is a list of strutures that contains the attributes of channels
  562. * that are being merged into the upper domain.
  563. * purge_channel_list (i)
  564. * This is a list of channel IDs for those channels that are determined
  565. * to be invalid even before this request reaches the Top Provider.
  566. *
  567. * Return Value:
  568. * None.
  569. *
  570. * Side Effects:
  571. * None.
  572. *
  573. * Caveats:
  574. * None.
  575. */
  576. /*
  577. * Void MergeChannelsConfirm (
  578. * PCommandTarget originator,
  579. * CChannelAttributesList *merge_channel_list,
  580. * CChannelIDList *purge_channel_list)
  581. *
  582. * Functional Description:
  583. * This member function represents the reception of a merge channel
  584. * confirm from the top provider. If this is the former top provider of
  585. * a lower domain, the confirm will contain information indicating
  586. * acceptance or rejection of the named channel. If a channel is rejected,
  587. * the former top provider will issue a purge channel indication
  588. * downwards. If this is not the former top provider, then it must be
  589. * an intermediate provider. The command will be forwarded downward towards
  590. * the former top provider. The intermediate providers will also add the
  591. * channel to their channel lists if it was accepted into the upper
  592. * domain.
  593. *
  594. * Formal Parameters:
  595. * originator (i)
  596. * This is the attachment from which the command originated.
  597. * merge_channel_list (i)
  598. * This is a list of strutures that contains the attributes of channels
  599. * that are being merged into the upper domain.
  600. * purge_channel_list (i)
  601. * This is a list of channel IDs for those channels that are to be
  602. * purged from the lower domain.
  603. *
  604. * Return Value:
  605. * None.
  606. *
  607. * Side Effects:
  608. * None.
  609. *
  610. * Caveats:
  611. * None.
  612. */
  613. /*
  614. * Void PurgeChannelsIndication (
  615. * PCommandTarget originator,
  616. * CUidList *purge_user_list,
  617. * CChannelIDList *purge_channel_list)
  618. *
  619. * Functional Description:
  620. * This member function represents the reception of a purge channel
  621. * indication from the top provider. This will cause the local
  622. * provider to remove the channel from the local information base (if
  623. * it are there). It will also broadcast the message downward in the
  624. * domain. Note that this will be translated by user objects into either
  625. * a detach user indication or a channel leave indication, depending on
  626. * which type of channel is being left.
  627. *
  628. * Formal Parameters:
  629. * originator (i)
  630. * This is the attachment from which the command originated.
  631. * purge_user_list (i)
  632. * This is a list of users that are being purged from the lower
  633. * domain.
  634. * purge_channel_list (i)
  635. * This is a list of channels that are being purged from the lower
  636. * domain.
  637. *
  638. * Return Value:
  639. * None.
  640. *
  641. * Side Effects:
  642. * None.
  643. *
  644. * Caveats:
  645. * None.
  646. */
  647. /*
  648. * Void MergeTokensRequest (
  649. * PCommandTarget originator,
  650. * CTokenAttributesList *merge_token_list,
  651. * CTokenIDList *purge_token_list)
  652. *
  653. * Functional Description:
  654. * This member function represents the reception of a merge token
  655. * request from one of this domain's attachments. If this is the top
  656. * provider, then the merge request will be processed locally (which
  657. * will result in the transmission of merge token confirms back to
  658. * the originating attachment). If this is not the top provider, then
  659. * the command will be forwarded toward the top provider, and this provider
  660. * will remember how to route it back.
  661. *
  662. * Formal Parameters:
  663. * originator (i)
  664. * This is the attachment from which the command originated.
  665. * merge_token_list (i)
  666. * This is a list of token attributes structures, each of which
  667. * describes one token to be merged.
  668. * purge_token_list (i)
  669. * This is a list of tokens that are to be purged from the lower
  670. * domain.
  671. *
  672. * Return Value:
  673. * None.
  674. *
  675. * Side Effects:
  676. * None.
  677. *
  678. * Caveats:
  679. * None.
  680. */
  681. /*
  682. * Void MergeTokensConfirm (
  683. * PCommandTarget originator,
  684. * CTokenAttributesList *merge_token_list,
  685. * CTokenIDList *purge_token_list)
  686. *
  687. * Functional Description:
  688. * This member function represents the reception of a merge token
  689. * confirm from the top provider. If this is the former top provider of
  690. * a lower domain, the confirm will contain information indicating
  691. * acceptance or rejection of the named token. If a token is rejected,
  692. * the former top provider will issue a purge token indication
  693. * downwards. If this is not the former top provider, then it must be
  694. * an intermediate provider. The command will be forwarded downward towards
  695. * the former top provider. The intermediate providers will also add the
  696. * token to their token lists if it was accepted into the upper
  697. * domain.
  698. *
  699. * Formal Parameters:
  700. * originator (i)
  701. * This is the attachment from which the command originated.
  702. * merge_token_list (i)
  703. * This is a list of token attributes structures, each of which
  704. * describes one token to be merged.
  705. * purge_token_list (i)
  706. * This is a list of tokens that are to be purged from the lower
  707. * domain.
  708. *
  709. * Return Value:
  710. * None.
  711. *
  712. * Side Effects:
  713. * None.
  714. *
  715. * Caveats:
  716. * None.
  717. */
  718. /*
  719. * Void PurgeTokensIndication (
  720. * PCommandTarget originator,
  721. * CTokenIDList *purge_token_list)
  722. *
  723. * Functional Description:
  724. * This member function represents the reception of a purge token
  725. * indication from the top provider. This will cause the local
  726. * provider to remove the token from the local information base (if
  727. * it are there). It will also broadcast the message downward in the
  728. * domain. Note that this will be translated by user objects into a
  729. * token release indication.
  730. *
  731. * Formal Parameters:
  732. * originator (i)
  733. * This is the attachment from which the command originated.
  734. * purge_token_list (i)
  735. * This is a list of tokens that are to be purged from the lower
  736. * domain.
  737. *
  738. * Return Value:
  739. * None.
  740. *
  741. * Side Effects:
  742. * None.
  743. *
  744. * Caveats:
  745. * None.
  746. */
  747. /*
  748. * Void DisconnectProviderUltimatum (
  749. * PCommandTarget originator,
  750. * Reason reason)
  751. *
  752. * Functional Description:
  753. * This member function represents the reception of a disconnect provider
  754. * ultimatum. The attachment from which this command is received is
  755. * automatically terminated. Any resources that are held by users on
  756. * the other side of the attachment are automatically freed by the top
  757. * provider (if it was a downward attachment). If it was an upward
  758. * attachment then the domain is purged completely (which means that it
  759. * is returned to its initialized state).
  760. *
  761. * Formal Parameters:
  762. * originator (i)
  763. * This is the attachment from which the command originated.
  764. * reason (i)
  765. * This is the reason for the disconnect. This will be one of the
  766. * reasons defined in "mcatmcs.h".
  767. *
  768. * Return Value:
  769. * None.
  770. *
  771. * Side Effects:
  772. * An attachment will be severed, and potentially the entire domain can
  773. * be purged.
  774. *
  775. * Caveats:
  776. * None.
  777. */
  778. /*
  779. * Void RejectUltimatum (
  780. * PCommandTarget originator,
  781. * Diagnostic diagnostic,
  782. * PUChar octet_string_address,
  783. * ULong octet_string_length)
  784. *
  785. * Functional Description:
  786. * This command represents the reception of a reject ultimatum. This
  787. * indicates that the remote side was unable to correctly process a PDU
  788. * that was sent to them. At this time we simply sever the connection
  789. * that carried the reject.
  790. *
  791. * Formal Parameters:
  792. * originator (i)
  793. * This is the attachment from which the command originated.
  794. * diagnostic (i)
  795. * This is a diagnostic code describing the nature of the problem.
  796. * octet_string_address (i)
  797. * This is address of an optional octet string that contains the
  798. * bad PDU.
  799. * octet_string_length (i)
  800. * This is the length of the above octet string.
  801. *
  802. * Return Value:
  803. * None.
  804. *
  805. * Side Effects:
  806. * None.
  807. *
  808. * Caveats:
  809. * None.
  810. */
  811. /*
  812. * Void AttachUserRequest (
  813. * PCommandTarget originator)
  814. *
  815. * Functional Description:
  816. * This member function represents the reception of an attach user request.
  817. * If this is the top provider, the domain will attempt to add the
  818. * new user into the channel list (as a user channel). A confirm will
  819. * be issued in the direction of the requesting user, letting it know
  820. * the outcome of the attach operation (as well as the user ID if the
  821. * attach was successful). If his is not the top provider, then the
  822. * request will be forwarded in the direction of the top provider.
  823. *
  824. * Formal Parameters:
  825. * originator (i)
  826. * This is the attachment from which the command originated.
  827. *
  828. * Return Value:
  829. * None.
  830. *
  831. * Side Effects:
  832. * None.
  833. *
  834. * Caveats:
  835. * None.
  836. */
  837. /*
  838. * Void AttachUserConfirm (
  839. * PCommandTarget originator,
  840. * Result result,
  841. * UserID uidInitiator)
  842. *
  843. * Functional Description:
  844. * This member function represents the reception of an attach user confirm.
  845. * If this provider has an outstanding attach user request, then it
  846. * will forward the confirm in the direction of the requester. It will
  847. * also add the new user channel to the local channel list. If there
  848. * are no outstanding requests (as a result of the requester being
  849. * disconnected), then this provider will issue a detach user request
  850. * upward to eliminate the user ID that is no longer needed (it will only
  851. * do this if the result of the attach was successful).
  852. *
  853. * Formal Parameters:
  854. * originator (i)
  855. * This is the attachment from which the command originated.
  856. * result (i)
  857. * This is the result of the attach operation. Anything but
  858. * RESULT_SUCCESSFUL indicates that the attach did not succeed.
  859. * uidInitiator (i)
  860. * If the attach succeeded, then this field will contain the user ID
  861. * of the newly attached user.
  862. *
  863. * Return Value:
  864. * None.
  865. *
  866. * Side Effects:
  867. * None.
  868. *
  869. * Caveats:
  870. * None.
  871. */
  872. /*
  873. * Void DetachUserRequest (
  874. * PCommandTarget originator,
  875. * Reason reason,
  876. * CUidList *user_id_list)
  877. *
  878. * Functional Description:
  879. * This member function represents the reception of a detach user request.
  880. * This causes the user channels associated with all users in the list to
  881. * be deleted from the user information base. If this is not the top
  882. * provider, the request will then be forwarded upward. Additionally,
  883. * all resources owned by the detaching users will be reclaimed by all
  884. * providers along the way.
  885. *
  886. * Formal Parameters:
  887. * originator (i)
  888. * This is the attachment from which the command originated.
  889. * reason (i)
  890. * This is the reason for th detachment.
  891. * user_id_list (i)
  892. * This is a list of the users that are detaching.
  893. *
  894. * Return Value:
  895. * None.
  896. *
  897. * Side Effects:
  898. * None.
  899. *
  900. * Caveats:
  901. * None.
  902. */
  903. /*
  904. * Void DetachUserIndication (
  905. * PCommandTarget originator,
  906. * Reason reason,
  907. * CUidList *user_id_list)
  908. *
  909. * Functional Description:
  910. * This member function represents the reception of a detach user
  911. * indication. This indication will be repeated to all downward
  912. * attachments (both user attachments and MCS connections). Then, if
  913. * the user IDs represent any users in the local sub-tree, those users will
  914. * be removed from the information base.
  915. *
  916. * Formal Parameters:
  917. * originator (i)
  918. * This is the attachment from which the command originated.
  919. * reason (i)
  920. * This is the reason for the detachment.
  921. * user_id_list (i)
  922. * This is a list of the users that are detaching.
  923. *
  924. * Return Value:
  925. * None.
  926. *
  927. * Side Effects:
  928. * None.
  929. *
  930. * Caveats:
  931. * None.
  932. */
  933. /*
  934. * Void ChannelJoinRequest (
  935. * PCommandTarget originator,
  936. * UserID uidInitiator,
  937. * ChannelID channel_id)
  938. *
  939. * Functional Description:
  940. * This member function represents the reception of a channel join request.
  941. * If the channel exists in the local information base, then the
  942. * domain will attempt to join the requesting attachment to the channel.
  943. * A channel join confirm will be sent to the requesting attachment
  944. * informing the requester of the result. If the channel is not already
  945. * in the information base, then one of two things will happen. If this
  946. * is the top provider, then the domain will attempt to add the channel
  947. * (if it is a static channel). If this is not the top provider, then
  948. * the request will be forwarded upward.
  949. *
  950. * Formal Parameters:
  951. * originator (i)
  952. * This is the attachment from which the command originated.
  953. * uidInitiator (i)
  954. * This is the user ID of the user requesting the join.
  955. * channel_id (i)
  956. * This is the ID of the channel to be joined.
  957. *
  958. * Return Value:
  959. * None.
  960. *
  961. * Side Effects:
  962. * None.
  963. *
  964. * Caveats:
  965. * None.
  966. */
  967. /*
  968. * Void ChannelJoinConfirm (
  969. * PCommandTarget originator,
  970. * Result result,
  971. * UserID uidInitiator,
  972. * ChannelID requested_id,
  973. * ChannelID channel_id)
  974. *
  975. * Functional Description:
  976. * This member function represents the reception of a channel join confirm.
  977. * If the channel has not already been added to the channel, it will
  978. * be put there now. The confirm will then be forwarded in the direction
  979. * of the requesting user.
  980. *
  981. * Formal Parameters:
  982. * originator (i)
  983. * This is the attachment from which the command originated.
  984. * result (i)
  985. * This is the result of the join. Anything but RESULT_SUCCESSFUL
  986. * means that the join failed.
  987. * uidInitiator (i)
  988. * This is the user ID of the user that requested the channel join.
  989. * This is used to properly route the confirm.
  990. * requested_id (i)
  991. * This is the ID of the channel the user originally requested, which
  992. * may be 0.
  993. * channel_id (i)
  994. * This is the ID of the channel that has been joined. If the original
  995. * request was for channel 0, then this field will indicate to the
  996. * user which assigned channel was selected by the top provider.
  997. *
  998. * Return Value:
  999. * None.
  1000. *
  1001. * Side Effects:
  1002. * None.
  1003. *
  1004. * Caveats:
  1005. * None.
  1006. */
  1007. /*
  1008. * Void ChannelLeaveRequest (
  1009. * PCommandTarget originator,
  1010. * CChannelIDList *channel_id_list)
  1011. *
  1012. * Functional Description:
  1013. * This member function represents the reception of a channel leave
  1014. * request. The domain removes the requesting attachment from all channels
  1015. * in the channel list. If this results in any empty channels, then the
  1016. * channel leave request will be forwarded to the next higher provider in
  1017. * the domain (unless this is the top provider). Furthermore, if a static
  1018. * or assigned channel is left empty, it is automatically removed from the
  1019. * channel list.
  1020. *
  1021. * Formal Parameters:
  1022. * originator (i)
  1023. * This is the attachment from which the command originated.
  1024. * channel_id_list (i)
  1025. * This is a list of channels to be left.
  1026. *
  1027. * Return Value:
  1028. * None.
  1029. *
  1030. * Side Effects:
  1031. * None.
  1032. *
  1033. * Caveats:
  1034. * None.
  1035. */
  1036. /*
  1037. * Void ChannelConveneRequest (
  1038. * PCommandTarget originator,
  1039. * UserID uidInitiator)
  1040. *
  1041. * Functional Description:
  1042. * This member function represents the reception of a channel convene
  1043. * request. If this is not the Top Provider, the request will be sent
  1044. * upward. If this is the Top Provider, then a new private channel will
  1045. * be created (if domain parameters allow).
  1046. *
  1047. * Formal Parameters:
  1048. * originator (i)
  1049. * This is the attachment from which the command originated.
  1050. * uidInitiator (i)
  1051. * This is the user ID of the user that requested the creation of a
  1052. * new private channel. This is used to properly route the confirm.
  1053. *
  1054. * Return Value:
  1055. * None.
  1056. *
  1057. * Side Effects:
  1058. * None.
  1059. *
  1060. * Caveats:
  1061. * None.
  1062. */
  1063. /*
  1064. * Void ChannelConveneConfirm (
  1065. * PCommandTarget originator,
  1066. * Result result,
  1067. * UserID uidInitiator,
  1068. * ChannelID channel_id)
  1069. *
  1070. * Functional Description:
  1071. * This member function represents the reception of a channel convene
  1072. * confirm. This causes the local provider to add the new private channel
  1073. * to the local information base, and route the confirm on toward the
  1074. * initiator of the request.
  1075. *
  1076. * Formal Parameters:
  1077. * originator (i)
  1078. * This is the attachment from which the command originated.
  1079. * result (i)
  1080. * This is the result of the convene. Anything but RESULT_SUCCESSFUL
  1081. * means that the convene failed.
  1082. * uidInitiator (i)
  1083. * This is the user ID of the user that requested the channel convene.
  1084. * This is used to properly route the confirm.
  1085. * channel_id (i)
  1086. * This is the ID of the new private channel that has been created.
  1087. *
  1088. * Return Value:
  1089. * None.
  1090. *
  1091. * Side Effects:
  1092. * None.
  1093. *
  1094. * Caveats:
  1095. * None.
  1096. */
  1097. /*
  1098. * Void ChannelDisbandRequest (
  1099. * PCommandTarget originator,
  1100. * UserID uidInitiator,
  1101. * ChannelID channel_id)
  1102. *
  1103. * Functional Description:
  1104. * This member function represents the reception of a channel disband
  1105. * request. If this is not the Top Provider, then the request will be
  1106. * forwarded upward. If this is the Top Provider, then the specified
  1107. * private channel will be destroyed (after appropriate identity
  1108. * verification). This will cause channel disband and channel expel
  1109. * indications to be sent downward to all admitted users.
  1110. *
  1111. * Formal Parameters:
  1112. * originator (i)
  1113. * This is the attachment from which the command originated.
  1114. * uidInitiator (i)
  1115. * This is the user ID of the user that requested the channel disband.
  1116. * If this does not correspond to the channel manager, then the request
  1117. * will be ignored.
  1118. * channel_id (i)
  1119. * This is the ID of the channel to be disbanded.
  1120. *
  1121. * Return Value:
  1122. * None.
  1123. *
  1124. * Side Effects:
  1125. * None.
  1126. *
  1127. * Caveats:
  1128. * None.
  1129. */
  1130. /*
  1131. * Void ChannelDisbandIndication (
  1132. * PCommandTarget originator,
  1133. * ChannelID channel_id)
  1134. *
  1135. * Functional Description:
  1136. * This member function represents the reception of a channel disband
  1137. * indication. This causes the specified private channel to be removed
  1138. * from the information base. The indication is then forwarded to all
  1139. * attachments that are either admitted or the channel manager.
  1140. *
  1141. * Formal Parameters:
  1142. * originator (i)
  1143. * This is the attachment from which the command originated.
  1144. * channel_id (i)
  1145. * This is the ID of the channel being disbanded.
  1146. *
  1147. * Return Value:
  1148. * None.
  1149. *
  1150. * Side Effects:
  1151. * None.
  1152. *
  1153. * Caveats:
  1154. * None.
  1155. */
  1156. /*
  1157. * Void ChannelAdmitRequest (
  1158. * PCommandTarget originator,
  1159. * UserID uidInitiator,
  1160. * ChannelID channel_id,
  1161. * CUidList *user_id_list)
  1162. *
  1163. * Functional Description:
  1164. * This member function represents the reception of a channel admit
  1165. * request. If this is not the Top Provider, then the request will be
  1166. * forwarded upward. If this is the Top Provider, then the user IDs
  1167. * will be added to the admitted list, and a channel admit indication will
  1168. * be sent downward toward all attachments that contain an admitted user.
  1169. *
  1170. * Formal Parameters:
  1171. * originator (i)
  1172. * This is the attachment from which the command originated.
  1173. * uidInitiator (i)
  1174. * This is the user ID of the user that requested the channel admit.
  1175. * This must be the channel manager for the admit to succeed.
  1176. * channel_id (i)
  1177. * This is the ID of the private channel whose admitted list is to
  1178. * be expanded.
  1179. * user_id_list (i)
  1180. * This is a container holding the user IDs of those users to be
  1181. * admitted to the private channel.
  1182. *
  1183. * Return Value:
  1184. * None.
  1185. *
  1186. * Side Effects:
  1187. * None.
  1188. *
  1189. * Caveats:
  1190. * None.
  1191. */
  1192. /*
  1193. * Void ChannelAdmitIndication (
  1194. * PCommandTarget originator,
  1195. * UserID uidInitiator,
  1196. * ChannelID channel_id,
  1197. * CUidList *user_id_list)
  1198. *
  1199. * Functional Description:
  1200. * This member function represents the reception of a channel admit
  1201. * indication. If the specified private channel does not yet exist in the
  1202. * information base, it will be created now. The users specified will be
  1203. * added to the admitted list, and this indication will be forwarded to
  1204. * all attachments that contain an admitted user.
  1205. *
  1206. * Formal Parameters:
  1207. * originator (i)
  1208. * This is the attachment from which the command originated.
  1209. * uidInitiator (i)
  1210. * This is the user ID of the manager of this private channel.
  1211. * channel_id (i)
  1212. * This is the ID of the private channel for which this indication
  1213. * is intended.
  1214. * user_id_list (i)
  1215. * This is a container holding the list of user IDs to be added to
  1216. * the admitted list.
  1217. *
  1218. * Return Value:
  1219. * None.
  1220. *
  1221. * Side Effects:
  1222. * None.
  1223. *
  1224. * Caveats:
  1225. * None.
  1226. */
  1227. /*
  1228. * Void ChannelExpelRequest (
  1229. * PCommandTarget originator,
  1230. * UserID uidInitiator,
  1231. * ChannelID channel_id,
  1232. * CUidList *user_id_list)
  1233. *
  1234. * Functional Description:
  1235. * This member function represents the reception of a channel expel
  1236. * request. If this is not the Top Provider, then the request will be
  1237. * forwarded upward. If this is the Top Provider, then the specifed users
  1238. * will be removed from the private channel, and an expel indication will
  1239. * be sent downward to all attachments that contain (or did contain) an
  1240. * admitted user.
  1241. *
  1242. * Formal Parameters:
  1243. * originator (i)
  1244. * This is the attachment from which the command originated.
  1245. * uidInitiator (i)
  1246. * This is the user ID of the user that requested the channel expel.
  1247. * This must be the channel manager for the expel to succeed.
  1248. * channel_id (i)
  1249. * This is the ID of the private channel whose admitted list is to
  1250. * be reduced.
  1251. * user_id_list (i)
  1252. * This is a container holding the user IDs of those users to be
  1253. * expelled from the private channel.
  1254. *
  1255. * Return Value:
  1256. * None.
  1257. *
  1258. * Side Effects:
  1259. * None.
  1260. *
  1261. * Caveats:
  1262. * None.
  1263. */
  1264. /*
  1265. * Void ChannelExpelIndication (
  1266. * PCommandTarget originator,
  1267. * ChannelID channel_id,
  1268. * CUidList *user_id_list)
  1269. *
  1270. * Functional Description:
  1271. * This member function represents the reception of a channel expel
  1272. * indication. The specified users will be removed from the admitted
  1273. * list of the channel. If the channel is empty, and the channel manager
  1274. * is not in the sub-tree of this provider, then the channel will be
  1275. * removed from the local information base. The expel indication will
  1276. * also be forwarded to all attachments that contain (or did contain( an
  1277. * admitted user.
  1278. *
  1279. * Formal Parameters:
  1280. * originator (i)
  1281. * This is the attachment from which the command originated.
  1282. * channel_id (i)
  1283. * This is the ID of the private channel for which this indication
  1284. * is intended.
  1285. * user_id_list (i)
  1286. * This is a container holding the list of user IDs to be removed
  1287. * from the admitted list.
  1288. *
  1289. * Return Value:
  1290. * None.
  1291. *
  1292. * Side Effects:
  1293. * None.
  1294. *
  1295. * Caveats:
  1296. * None.
  1297. */
  1298. /*
  1299. * Void SendDataRequest (
  1300. * PCommandTarget originator,
  1301. * UINT type,
  1302. * PDataPacket data_packet)
  1303. *
  1304. * Functional Description:
  1305. * This member function represents the reception of a send data request.
  1306. * If this is not the top provider, the request will be repeated
  1307. * upward toward the top provider. The data will also be sent downward
  1308. * to all attachments that are joined to the channel (except for the
  1309. * originator) in the form of a send data indication.
  1310. *
  1311. * Formal Parameters:
  1312. * originator (i)
  1313. * This is the attachment from which the command originated.
  1314. * type (i)
  1315. * Normal or uniform send data request.
  1316. * data_packet (i)
  1317. * This is a pointer to a DataPacket object containing the channel
  1318. * ID, the User ID of the data sender, segmentation flags, priority of
  1319. * the data packet and a pointer to the packet to be sent.
  1320. *
  1321. * Return Value:
  1322. * None.
  1323. *
  1324. * Side Effects:
  1325. * None.
  1326. *
  1327. * Caveats:
  1328. * None.
  1329. */
  1330. /*
  1331. * Void SendDataIndication (
  1332. * PCommandTarget originator,
  1333. * UINT type,
  1334. * PDataPacket data_packet)
  1335. *
  1336. * Functional Description:
  1337. * This member function represents the reception of a send data indication.
  1338. * This indication will be repeated downward to all attachments that
  1339. * are joined to the channel.
  1340. *
  1341. * Formal Parameters:
  1342. * originator (i)
  1343. * This is the attachment from which the command originated.
  1344. * type (i)
  1345. * normal or uniform send data indication
  1346. * data_packet (i)
  1347. * This is a pointer to a DataPacket object containing the channel
  1348. * ID, the User ID of the data sender, segmentation flags, priority of
  1349. * the data packet and a pointer to the packet to be sent.
  1350. *
  1351. * Return Value:
  1352. * None.
  1353. *
  1354. * Side Effects:
  1355. * None.
  1356. *
  1357. * Caveats:
  1358. * None.
  1359. */
  1360. /*
  1361. * Void TokenGrabRequest (
  1362. * PCommandTarget originator,
  1363. * UserID uidInitiator,
  1364. * TokenID token_id)
  1365. *
  1366. * Functional Description:
  1367. * This member function represents the reception of a token grab request.
  1368. * If this is not the top provider, the request will be forwarded
  1369. * upward towards the top provider. If this is the top provider, the
  1370. * domain will attempt to grab the token on behalf of the requesting user.
  1371. * A token grab confirm will be issued to the requesting user informing
  1372. * it of the outcome.
  1373. *
  1374. * Formal Parameters:
  1375. * originator (i)
  1376. * This is the attachment from which the command originated.
  1377. * uidInitiator (i)
  1378. * This is the ID of the user that is requesting the token grab.
  1379. * token_id (i)
  1380. * This is the ID of the token that the user is attempting to grab.
  1381. *
  1382. * Return Value:
  1383. * None.
  1384. *
  1385. * Side Effects:
  1386. * None.
  1387. *
  1388. * Caveats:
  1389. * None.
  1390. */
  1391. /*
  1392. * Void TokenGrabConfirm (
  1393. * PCommandTarget originator,
  1394. * Result result,
  1395. * UserID uidInitiator,
  1396. * TokenID token_id,
  1397. * TokenStatus token_status)
  1398. *
  1399. * Functional Description:
  1400. * This member function represents the reception of a token grab confirm.
  1401. * This confirm will simply be forwarded in the direction of the
  1402. * requesting user.
  1403. *
  1404. * Formal Parameters:
  1405. * originator (i)
  1406. * This is the attachment from which the command originated.
  1407. * result (i)
  1408. * This is the result of the grab request. If it is anything but
  1409. * RESULT_SUCCESSFUL, the grab request failed.
  1410. * uidInitiator (i)
  1411. * This is the ID of the user that is requesting the token grab.
  1412. * token_id (i)
  1413. * This is the ID of the token that the user is attempting to grab.
  1414. * token_status (i)
  1415. * This is the state of the token after the grab request was
  1416. * processed at the top provider.
  1417. *
  1418. * Return Value:
  1419. * None.
  1420. *
  1421. * Side Effects:
  1422. * None.
  1423. *
  1424. * Caveats:
  1425. * None.
  1426. */
  1427. /*
  1428. * Void TokenInhibitRequest (
  1429. * PCommandTarget originator,
  1430. * UserID uidInitiator,
  1431. * TokenID token_id)
  1432. *
  1433. * Functional Description:
  1434. * This member function represents the reception of a token inhibit
  1435. * request. If this is not the top provider, the request will be forwarded
  1436. * upward towards the top provider. If this is the top provider, the
  1437. * domain will attempt to inhibit the token on behalf of the requesting
  1438. * user. A token inhibit confirm will be issued to the requesting user
  1439. * informing it of the outcome.
  1440. *
  1441. * Formal Parameters:
  1442. * originator (i)
  1443. * This is the attachment from which the command originated.
  1444. * uidInitiator (i)
  1445. * This is the ID of the user that is requesting the token inhibit.
  1446. * token_id (i)
  1447. * This is the ID of the token that the user is attempting to inhibit.
  1448. *
  1449. * Return Value:
  1450. * None.
  1451. *
  1452. * Side Effects:
  1453. * None.
  1454. *
  1455. * Caveats:
  1456. * None.
  1457. */
  1458. /*
  1459. * Void TokenInhibitConfirm (
  1460. * PCommandTarget originator,
  1461. * Result result,
  1462. * UserID uidInitiator,
  1463. * TokenID token_id,
  1464. * TokenStatus token_status)
  1465. *
  1466. * Functional Description:
  1467. * This member function represents the reception of a token inhibit
  1468. * confirm. This confirm will simply be forwarded in the direction of the
  1469. * requesting user.
  1470. *
  1471. * Formal Parameters:
  1472. * originator (i)
  1473. * This is the attachment from which the command originated.
  1474. * result (i)
  1475. * This is the result of the inhibit request. If it is anything but
  1476. * RESULT_SUCCESSFUL, the inhibit request failed.
  1477. * uidInitiator (i)
  1478. * This is the ID of the user that is requesting the token inhibit.
  1479. * token_id (i)
  1480. * This is the ID of the token that the user is attempting to inhibit.
  1481. * token_status (i)
  1482. * This is the state of the token after the inhibit request was
  1483. * processed at the top provider.
  1484. *
  1485. * Return Value:
  1486. * None.
  1487. *
  1488. * Side Effects:
  1489. * None.
  1490. *
  1491. * Caveats:
  1492. * None.
  1493. */
  1494. /*
  1495. * Void TokenGiveRequest (
  1496. * PCommandTarget originator,
  1497. * PTokenGiveRecord pTokenGiveRec)
  1498. *
  1499. * Functional Description:
  1500. * This member function represents the reception of a token give request.
  1501. * If this is not the top provider, the request will be forwarded upward
  1502. * towards the top provider. If this is the top provider, the domain will
  1503. * issue a token give indication in the direction of the user identified
  1504. * to receive the token.
  1505. *
  1506. * Formal Parameters:
  1507. * originator (i)
  1508. * This is the attachment from which the command originated.
  1509. * pTokenGiveRec (i)
  1510. * This is the address of a structure containing the following information:
  1511. * The ID of the user attempting to give away the token.
  1512. * The ID of the token being given.
  1513. * The ID of the user that the token is being given to.
  1514. *
  1515. * Return Value:
  1516. * None.
  1517. *
  1518. * Side Effects:
  1519. * None.
  1520. *
  1521. * Caveats:
  1522. * None.
  1523. */
  1524. /*
  1525. * Void TokenGiveIndication (
  1526. * PCommandTarget originator,
  1527. * PTokenGiveRecord pTokenGiveRec)
  1528. *
  1529. * Functional Description:
  1530. * This member function represents the reception of a token give
  1531. * indication. This indication will be forwarded toward the user that
  1532. * is to receive the token.
  1533. *
  1534. * Formal Parameters:
  1535. * originator (i)
  1536. * This is the attachment from which the command originated.
  1537. * pTokenGiveRec (i)
  1538. * This is the address of a structure containing the following information:
  1539. * The ID of the user attempting to give away the token.
  1540. * The ID of the token being given.
  1541. * The ID of the user that the token is being given to.
  1542. *
  1543. * Return Value:
  1544. * None.
  1545. *
  1546. * Side Effects:
  1547. * None.
  1548. *
  1549. * Caveats:
  1550. * None.
  1551. */
  1552. /*
  1553. * Void TokenGiveResponse (
  1554. * PCommandTarget originator,
  1555. * Result result,
  1556. * UserID receiver_id,
  1557. * TokenID token_id)
  1558. *
  1559. * Functional Description:
  1560. * This member function represents the reception of a token give response.
  1561. * If this is not the top provider, the response will be forwarded
  1562. * upward towards the top provider. If this is the top provider, the
  1563. * domain will make the appropriate changes to the state of the token in
  1564. * the local information base, and then issue a token give confirm to the
  1565. * user that initiated the give request.
  1566. *
  1567. * Formal Parameters:
  1568. * originator (i)
  1569. * This is the attachment from which the command originated.
  1570. * result (i)
  1571. * This specifies whether or not the token was accepted. Anything but
  1572. * RESULT_SUCCESSFUL indicates that the token was rejected.
  1573. * receiver_id (i)
  1574. * This is the ID of the user that has either accepted or rejected the
  1575. * token.
  1576. * token_id (i)
  1577. * This is the ID of the token that the user has been given.
  1578. *
  1579. * Return Value:
  1580. * None.
  1581. *
  1582. * Side Effects:
  1583. * None.
  1584. *
  1585. * Caveats:
  1586. * None.
  1587. */
  1588. /*
  1589. * Void TokenGiveConfirm (
  1590. * PCommandTarget originator,
  1591. * Result result,
  1592. * UserID uidInitiator,
  1593. * TokenID token_id,
  1594. * TokenStatus token_status)
  1595. *
  1596. * Functional Description:
  1597. * This member function represents the reception of a token give confirm.
  1598. * This is forwarded toward the user that initiated the give request to
  1599. * inform it of the outcome.
  1600. *
  1601. * Formal Parameters:
  1602. * originator (i)
  1603. * This is the attachment from which the command originated.
  1604. * result (i)
  1605. * This parameter specifies whether or not the token was accepted.
  1606. * Anything but RESULT_SUCCESSFUL indicates that the token was not
  1607. * accepted.
  1608. * uidInitiator (i)
  1609. * This is the ID of the user that originally requested the token
  1610. * give request.
  1611. * token_id (i)
  1612. * This is the ID of the token that the user is attempting to give.
  1613. * token_status (i)
  1614. * This specifies the status of the token after the give operation
  1615. * was complete.
  1616. *
  1617. * Return Value:
  1618. * None.
  1619. *
  1620. * Side Effects:
  1621. * None.
  1622. *
  1623. * Caveats:
  1624. * None.
  1625. */
  1626. /*
  1627. * Void TokenPleaseRequest (
  1628. * PCommandTarget originator,
  1629. * UserID uidInitiator,
  1630. * TokenID token_id)
  1631. *
  1632. * Functional Description:
  1633. * This member function represents the reception of a token please
  1634. * request. If this is not the top provider, the request will be forwarded
  1635. * upward towards the top provider. If this is the top provider, the
  1636. * domain will issue a token please indication in the direction of all
  1637. * users that currently own the token.
  1638. *
  1639. * Formal Parameters:
  1640. * originator (i)
  1641. * This is the attachment from which the command originated.
  1642. * uidInitiator (i)
  1643. * This is the ID of the user that is asking for the token.
  1644. * token_id (i)
  1645. * This is the ID of the token that the user is asking for.
  1646. *
  1647. * Return Value:
  1648. * None.
  1649. *
  1650. * Side Effects:
  1651. * None.
  1652. *
  1653. * Caveats:
  1654. * None.
  1655. */
  1656. /*
  1657. * Void TokenPleaseIndication (
  1658. * PCommandTarget originator,
  1659. * UserID uidInitiator,
  1660. * TokenID token_id)
  1661. *
  1662. * Functional Description:
  1663. * This member function represents the reception of a token please
  1664. * indication. This indication is forwarded to all users who currently
  1665. * own the specified token.
  1666. *
  1667. * Formal Parameters:
  1668. * originator (i)
  1669. * This is the attachment from which the command originated.
  1670. * uidInitiator (i)
  1671. * This is the ID of the user that is asking for the token.
  1672. * token_id (i)
  1673. * This is the ID of the token that the user is asking for.
  1674. *
  1675. * Return Value:
  1676. * None.
  1677. *
  1678. * Side Effects:
  1679. * None.
  1680. *
  1681. * Caveats:
  1682. * None.
  1683. */
  1684. /*
  1685. * Void TokenReleaseRequest (
  1686. * PCommandTarget originator,
  1687. * UserID uidInitiator,
  1688. * TokenID token_id)
  1689. *
  1690. * Functional Description:
  1691. * This member function represents the reception of a token release
  1692. * request. If this is not the top provider, the request will be forwarded
  1693. * upward towards the top provider. If this is the top provider, the
  1694. * domain will attempt to release the token on behalf of the requesting
  1695. * user. A token release confirm will be issued to the requesting user
  1696. * informing it of the outcome.
  1697. *
  1698. * Formal Parameters:
  1699. * originator (i)
  1700. * This is the attachment from which the command originated.
  1701. * uidInitiator (i)
  1702. * This is the ID of the user that is requesting the token release.
  1703. * token_id (i)
  1704. * This is the ID of the token that the user is attempting to release.
  1705. *
  1706. * Return Value:
  1707. * None.
  1708. *
  1709. * Side Effects:
  1710. * None.
  1711. *
  1712. * Caveats:
  1713. * None.
  1714. */
  1715. /*
  1716. * Void TokenReleaseConfirm (
  1717. * PCommandTarget originator,
  1718. * Result result,
  1719. * UserID uidInitiator,
  1720. * TokenID token_id,
  1721. * TokenStatus token_status)
  1722. *
  1723. * Functional Description:
  1724. * This member function represents the reception of a token release
  1725. * confirm. This confirm will simply be forwarded in the direction of the
  1726. * requesting user.
  1727. *
  1728. * Formal Parameters:
  1729. * originator (i)
  1730. * This is the attachment from which the command originated.
  1731. * result (i)
  1732. * This is the result of the release request. If it is anything but
  1733. * RESULT_SUCCESSFUL, the release request failed.
  1734. * uidInitiator (i)
  1735. * This is the ID of the user that is requesting the token release.
  1736. * token_id (i)
  1737. * This is the ID of the token that the user is attempting to release.
  1738. * token_status (i)
  1739. * This is the state of the token after the release request was
  1740. * processed at the top provider.
  1741. *
  1742. * Return Value:
  1743. * None.
  1744. *
  1745. * Side Effects:
  1746. * None.
  1747. *
  1748. * Caveats:
  1749. * None.
  1750. */
  1751. /*
  1752. * Void TokenTestRequest (
  1753. * PCommandTarget originator,
  1754. * UserID uidInitiator,
  1755. * TokenID token_id)
  1756. *
  1757. * Functional Description:
  1758. * This member function represents the reception of a token test request.
  1759. * If this is not the top provider, the request will be forwarded
  1760. * upward towards the top provider. If this is the top provider, the
  1761. * domain will test the current state of the token. A token test confirm
  1762. * will be issued to the requesting user informing it of the outcome.
  1763. *
  1764. * Formal Parameters:
  1765. * originator (i)
  1766. * This is the attachment from which the command originated.
  1767. * uidInitiator (i)
  1768. * This is the ID of the user that is requesting the token test.
  1769. * token_id (i)
  1770. * This is the ID of the token that the user is testing.
  1771. *
  1772. * Return Value:
  1773. * None.
  1774. *
  1775. * Side Effects:
  1776. * None.
  1777. *
  1778. * Caveats:
  1779. * None.
  1780. */
  1781. /*
  1782. * Void TokenTestConfirm (
  1783. * PCommandTarget originator,
  1784. * UserID uidInitiator,
  1785. * TokenID token_id,
  1786. * TokenStatus token_status)
  1787. *
  1788. * Functional Description:
  1789. * This member function represents the reception of a token test confirm.
  1790. * This confirm will simply be forwarded in the direction of the
  1791. * requesting user.
  1792. *
  1793. * Formal Parameters:
  1794. * originator (i)
  1795. * This is the attachment from which the command originated.
  1796. * uidInitiator (i)
  1797. * This is the ID of the user that is requesting the token test.
  1798. * token_id (i)
  1799. * This is the ID of the token that the user is testing.
  1800. * token_status (i)
  1801. * This is the state of the token at the time of the test.
  1802. *
  1803. * Return Value:
  1804. * None.
  1805. *
  1806. * Side Effects:
  1807. * None.
  1808. *
  1809. * Caveats:
  1810. * None.
  1811. */
  1812. #endif