h4501suppserv.h
上传用户:hnnddl
上传日期:2007-01-06
资源大小:3580k
文件大小:15k
源码类别:

IP电话/视频会议

开发平台:

WINDOWS

  1. //@DELB
  2. /*
  3.  * $Revision: 1.7 $
  4.  * $Date: 1998/12/21 16:51:46 $
  5.  */
  6. ////////////////////////////////////////////////////////////////
  7. //           Copyright (c) 1996 Lucent Technologies           //
  8. //                   All Rights Reserved                      //
  9. //                                                            //
  10. //                   THIS IS UNPUBLISHED                      //
  11. //                   PROPRIETARY SOURCE                       //
  12. //               CODE OF Lucent Technologies                  //
  13. //                       AND elemedia                         //
  14. //                                                            //
  15. //      The copyright notice above does not evidence any      //
  16. //     actual or intended publication of such source code     //
  17. ////////////////////////////////////////////////////////////////
  18. ////////////////////////////////////////////////////////////////
  19. // File : h4501suppserv.h                                     //
  20. //                                                            //
  21. //                                                            //
  22. // History:                                                   //
  23. //  28 July 1998 Created                                      //
  24. //                                                            //
  25. //                                                            //
  26. //////////////////////////////////////////////////////////////// 
  27. #if (!defined(__H4501SUPPSERV_H__))
  28. #define __H4501SUPPSERV_H__
  29. #include "api/h225types.h"
  30. #include "api/h450err.h"
  31. #include "api/h450types.h"
  32. #include "api/h4502resarg.h"
  33. #include "api/h4503types.h"
  34. #include "api/h4503resarg.h"
  35. // Forward declarations
  36. class H4501FacilityExt;
  37. class H4501ROS;
  38. class H4501Invoke;
  39. class H4501ReturnResult;
  40. class H4501ReturnError;
  41. class H4501Reject;
  42. class H4501SuppService;
  43. class ASN1Codec;
  44. struct EmNetworkFacilityExtension;
  45. struct EmROS;
  46. struct EmH4501SupplementaryService;
  47. #define PDUTYPE_INVALID -1
  48. //@DELE
  49. // -  enum Call Transfer Operation type.
  50. // @See:
  51. // - H4501Invoke H4501ReturnResult H4501Code
  52. enum H4502CTOperationType
  53. {
  54. CTOT_INVALID = 0, // invalid selection
  55. CTOT_IDENTIFY = 7, // callTransferIdentify OPERATION
  56. CTOT_ABANDON = 8, // callTransferAbondon OPERATION
  57. CTOT_INITIATE = 9, // callTransferInitiate OPERATION
  58. CTOT_SETUP = 10, // callTransferSetup OPERATION
  59. CTOT_ACTIVE = 11, // callTransferActive OPERATION
  60. CTOT_COMPLETE = 12, // callTransferComplete OPERATION
  61. CTOT_UPDATE = 13, // callTransferUpdate OPERATION
  62. CTOT_TRANSFER = 14 // subaddressTransfer OPERATION
  63. };
  64. // -  enum Call Diversion Operation type.
  65. // @See:
  66. //      - H4501Invoke H4501ReturnResult H4501Code
  67. enum H4503CDOperationType
  68. {
  69. CDOT_INVALID = 0,                   // invalid selection
  70. CDOT_ACTIVATEDIVERSIONQ = 15,       // activateDiversionQ
  71. CDOT_DEACTIVATEDIVERSIONQ = 16,     // deactivateDiversionQ
  72. CDOT_INTERROGATEDIVERSIONQ = 17,    // interrogateDiversionQ
  73. CDOT_CHECKRESTRICTION = 18,         // checkRestriction
  74. CDOT_CALLREROUTING = 19,            // callRerouting
  75. CDOT_DIVERTINGLEGINFO1 = 20,        // divertingLegInformation1
  76. CDOT_DIVERTINGLEGINFO2 = 21,        // divertingLegInformation2
  77. CDOT_DIVERTINGLEGINFO3 = 22,        // divertingLegInformation3
  78. CDOT_DIVERTINGLEGINFO4 = 100,       // divertingLegInformation4
  79. CDOT_CFNRDIVLEGFAIL = 23            // cfnrDivertedLegFailed
  80. };
  81. /*
  82.  *  This defines the networkFacilityExtension field.
  83.  *  This is used in the H4501SupplementaryService ASN.1 sequence as
  84.  *  specified in H.450.1. This field is optional but when included, the
  85.  *  mandatory Set methods of this class must be used to properly create
  86.  *  this object.
  87.  *
  88.  * @See:
  89.  * - Used in H4501SuppService
  90.  */
  91. class DLLEXPORT H4501FacilityExt
  92. {
  93.     public:
  94. // Constructor
  95. H4501FacilityExt();
  96. H4501FacilityExt(H4501FacilityExt &);
  97. // Destructor
  98. ~H4501FacilityExt();
  99. // Mandatory - this sets the sourceEntity field.
  100. // @See:
  101. // - enum H4501EntityType
  102. ProtReturnCode SetSrcEntity(int);
  103. // Mandatory - this gets the sourceEntity field.
  104. // @See:
  105. // - enum H4501EntityType
  106. ProtReturnCode GetSrcEntity(int &);
  107. // Optional - this sets the sourceEntityAddress field.
  108. ProtReturnCode SetSrcEntityAddr(H450AliasAddress &);
  109. // Optional - this gets the sourceEntityAddress field.
  110. ProtReturnCode GetSrcEntityAddr(H450AliasAddress &);
  111. // Mandatory - this sets the destinationEntity field.
  112. // @See:
  113. // - enum H4501EntityType
  114. ProtReturnCode SetDstEntity(int);
  115. // Mandatory - this gets the destinationEntity field.
  116. // @See:
  117. // - enum H4501EntityType
  118. ProtReturnCode GetDstEntity(int &);
  119. // Optional - this sets the destinationEntityAddress field.
  120. ProtReturnCode SetDstEntityAddr(H450AliasAddress &);
  121. // Optional - this gets the destinationEntityAddress field.
  122. ProtReturnCode GetDstEntityAddr(H450AliasAddress &);
  123.         H4501FacilityExt & operator=(H4501FacilityExt &);
  124. // Determines if the class has been sufficiently created
  125.         boolean Valid();
  126. //@DELB
  127.         // For protocol internal use.
  128.         EmNetworkFacilityExtension *GetPriv();
  129.         ProtReturnCode SetPriv(EmNetworkFacilityExtension *);
  130. void SetValid();
  131. private:
  132. void Init();
  133. EmNetworkFacilityExtension *mExtPtr;
  134. int mIsValid;
  135. int mSrcFlag;
  136. int mDstFlag;
  137. //@DELE
  138. };
  139. /*
  140.  *  This is a virtual base class for the four types of ROS Operations.
  141.  *  Thse oprerations are Invoke, ReturnResult, ReturnError,
  142.  *  and Reject.
  143.  *  A ROS defines a single ServiceApdus field used in the
  144.  *  H4501SupplemtaryService ASN.1 sequence. The H4501SuppService class
  145.  *  manages a sequence of these objects.
  146.  *  @See:
  147.  * - H4501Invoke H4501ReturnResult H4501ReturnError H4501Reject
  148.  */
  149. class DLLEXPORT H4501ROS 
  150. {
  151.     public:
  152. // Constructor
  153. // @See:
  154. // - enum H4501ROSType
  155. H4501ROS(int);
  156. // Destructor
  157. virtual ~H4501ROS();
  158. // get type of ROS
  159. // @See:
  160. // - enum H4501ROSType
  161. int GetType();
  162. // Mandatory - this sets the invokeId field
  163. virtual ProtReturnCode SetInvokeId(int) = 0;
  164. // Mandatory - this gets the invokeId field
  165. virtual ProtReturnCode GetInvokeId(int &) = 0;
  166.         H4501ROS & operator=(H4501ROS &);
  167. // Determines if the class has been sufficiently created
  168.         virtual boolean Valid() = 0;
  169. //@DELB
  170. public:
  171.         // For protocol internal use.
  172.         virtual void *GetPriv() = 0;
  173.         virtual ProtReturnCode SetPriv(void *) = 0;
  174. struct CodeToNum
  175. {
  176. int Code;
  177. int ArgPDUNum;
  178. int ResPDUNum;
  179. int ArgType;
  180. int ResType;
  181. };
  182. protected:
  183. int GetArgPDUNum(int Code);
  184. int GetResPDUNum(int Code);
  185. int GetArgType(int Code);
  186. int GetResType(int Code);
  187. static CodeToNum MapTable[];
  188. private:
  189. int mType;
  190. //@DELE
  191. };
  192. /*
  193.  *  This defines the ROS Invoke APDU.
  194.  *
  195.  * @See:
  196.  * - Used in H4501SuppService
  197.  */
  198. class DLLEXPORT H4501Invoke : public H4501ROS
  199. {
  200.     public:
  201. // Constructor
  202. H4501Invoke();
  203. H4501Invoke(H4501Invoke &);
  204. // Destructor
  205. ~H4501Invoke();
  206. // Mandatory - this sets the invokeId field which is
  207. // a user supplied id that must be unambiguous.
  208. ProtReturnCode SetInvokeId(int);
  209. // Mandatory - this gets the invokeId field which is
  210. ProtReturnCode GetInvokeId(int &);
  211. // Mandatory - this sets the code field.
  212. // @Caveats:
  213. // <B>This field must be set before SetArgument is used.</B>
  214. ProtReturnCode SetCode(H4501Code &);
  215. // Mandatory - this gets the code field.
  216. ProtReturnCode GetCode(H4501Code &);
  217. // Optional - this sets the argument field.
  218. // @Caveats:
  219. // <B>The Code field must be set before the argument is set.</B>
  220. ProtReturnCode SetArgument(H450Arg &);
  221. // Optional - this gets the argument type.
  222. // @See:
  223. // - enum H450ArgumentType
  224. ProtReturnCode GetArgumentType(int &);
  225. // Optional - this gets the argument field.
  226. // @Caveats:
  227. // GetArgumentType should be called before GetArgument
  228. // in order to determine the argument received
  229. ProtReturnCode GetArgument(H450Arg &);
  230. // Optional - this sets the LinkedId field.
  231. ProtReturnCode SetLinkedId(int);
  232. // Optional - this gets the LinkedId field.
  233. ProtReturnCode GetLinkedId(int &);
  234. // Determines if the class has been sufficiently created
  235.         boolean Valid();
  236. //@DELB
  237.         // For protocol internal use.
  238.         void *GetPriv();
  239.         ProtReturnCode SetPriv(void *);
  240. void SetValid();
  241. private:
  242. void Init();
  243. boolean AllocArg(int Type, void **ppDst);
  244. boolean FreeArg(int Type, void *pDst);
  245. boolean InitArg(int Type, void *pDst);
  246. boolean CopyArg(int Type, void *pSrc, void *pDst);
  247. EmROS *mRosPtr;
  248. int mIsValid;
  249. int mCodeSet;
  250. int mIdSet;
  251. ASN1Codec *mCodecObjPtr;
  252. void *mArgStructPtr;
  253. int mArgType; 
  254. void *mEncodedArgPtr;
  255. //@DELE
  256. };
  257. /*
  258.  *  This defines the ROS ReturnResult APDU.
  259.  *
  260.  * @See:
  261.  * - Used in H4501SuppService
  262.  */
  263. class DLLEXPORT H4501ReturnResult : public H4501ROS
  264. {
  265.     public:
  266. // Constructor
  267. H4501ReturnResult();
  268. H4501ReturnResult(H4501ReturnResult &);
  269. // Destructor
  270. ~H4501ReturnResult();
  271. // Mandatory - this sets the invokeId field. 
  272. ProtReturnCode SetInvokeId(int);
  273. // Mandatory - this gets the invokeId field. 
  274. ProtReturnCode GetInvokeId(int &);
  275. // Optional - this sets the result field.
  276. ProtReturnCode SetResult(H4501Code &, H450Res &);
  277. // Optional - this gets the result type.
  278. // @See:
  279. // - enum H450ResultType
  280. ProtReturnCode GetResultType(int &);
  281. // Optional - this gets the result field.
  282. // @Caveats:
  283. // GetResultType should be called before GetResult
  284. // in order to determine the result received
  285. ProtReturnCode GetResult(H4501Code &, H450Res &);
  286. // Determines if the class has been sufficiently created
  287.         boolean Valid();
  288. //@DELB
  289.         // For protocol internal use.
  290.         void *GetPriv();
  291.         ProtReturnCode SetPriv(void *);
  292. void SetValid();
  293. private:
  294. void Init();
  295. boolean AllocRes(int Type, void **ppDst);
  296. boolean FreeRes(int Type, void *pDst);
  297. boolean InitRes(int Type, void *pDst);
  298. boolean CopyRes(int Type, void *pSrc, void *pDst);
  299. EmROS *mRosPtr;
  300. int mIsValid;
  301. ASN1Codec *mCodecObjPtr;
  302. void *mResStructPtr;
  303. int mResType; 
  304. void *mEncodedResPtr;
  305. //@DELE
  306. };
  307. /*
  308.  *  This defines the ROS ReturnError APDU.
  309.  *
  310.  * @See:
  311.  * - Used in H4501SuppService
  312.  */
  313. class DLLEXPORT H4501ReturnError : public H4501ROS
  314. {
  315.     public:
  316. // Constructor
  317. H4501ReturnError();
  318. H4501ReturnError(H4501ReturnError &);
  319. // Destructor
  320. ~H4501ReturnError();
  321. // Mandatory - this sets the invokeId field.
  322. ProtReturnCode SetInvokeId(int);
  323. // Mandatory - this gets the invokeId field.
  324. ProtReturnCode GetInvokeId(int &);
  325. // Mandatory - this sets the errcode field.
  326. ProtReturnCode SetCode(H4501Code &);
  327. // Mandatory - this gets the errcode field.
  328. ProtReturnCode GetCode(H4501Code &);
  329. // Optional - this sets the parameter field.
  330. ProtReturnCode SetError(H450Error &);
  331. // Optional - this gets the parameter field.
  332. ProtReturnCode GetError(H450Error &);
  333. // Determines if the class has been sufficiently created
  334.         boolean Valid();
  335. //@DELB
  336.         // For protocol internal use.
  337.         void *GetPriv();
  338.         ProtReturnCode SetPriv(void *);
  339. void SetValid();
  340. private:
  341. void Init();
  342. EmROS *mRosPtr;
  343. int mIsValid;
  344. int mCodeSet;
  345. int mIdSet;
  346. ASN1Codec *mCodecObjPtr;
  347. void *mErrStructPtr;
  348. int mParamType;
  349. void *mEncodedErrPtr;
  350. //@DELE
  351. };
  352. /*
  353.  *  This defines the ROS Reject APDU.
  354.  *
  355.  * @See:
  356.  * - Used in H4501SuppService
  357.  */
  358. class DLLEXPORT H4501Reject : public H4501ROS
  359. {
  360.     public:
  361. // Constructor
  362. H4501Reject();
  363. H4501Reject(H4501Reject &);
  364. // Destructor
  365. ~H4501Reject();
  366. // Mandatory - this sets the invokeId field. 
  367. ProtReturnCode SetInvokeId(int);
  368. // Mandatory - this gets the invokeId field. 
  369. ProtReturnCode GetInvokeId(int &);
  370. // Mandatory - this sets the problem field
  371. ProtReturnCode SetProblem(H4501Problem &);
  372. // Mandatory - this gets the problem field
  373. ProtReturnCode GetProblem(H4501Problem &);
  374. // Determines if the class has been sufficiently created
  375.         boolean Valid();
  376. //@DELB
  377.         // For protocol internal use.
  378.         void *GetPriv();
  379.         ProtReturnCode SetPriv(void *);
  380. void SetValid();
  381. private:
  382. void Init();
  383. EmROS *mRosPtr;
  384. int mIsValid;
  385. int mProbSet;
  386. int mIdSet;
  387. //@DELE
  388. };
  389. /*
  390.  *  This is for the H4501SupplementaryService ASN.1 sequence.
  391.  *  It is the top level class used to implement supplemnetary services.
  392.  */
  393. class DLLEXPORT H4501SuppService
  394. {
  395.     public:
  396. // Constructor
  397. H4501SuppService();
  398. H4501SuppService(H4501SuppService &);
  399. // Destructor
  400. ~H4501SuppService();
  401. // Optional - this sets the networkFacilityExtension field.
  402. ProtReturnCode SetNetFacExt(H4501FacilityExt &);
  403. // Optional - this gets the networkFacilityExtension field.
  404. ProtReturnCode GetNetFacExt(H4501FacilityExt &);
  405. // Optional - this sets the interpretationApdu ASN.1 CHOICE
  406. // @See:
  407. // - enum H4501InterpretationAPDU
  408. ProtReturnCode SetInterpAPDU(int);
  409. // Optional - this gets the interpretationApdu ASN.1 CHOICE
  410. // @See:
  411. // - enum H4501InterpretationAPDU
  412. ProtReturnCode GetInterpAPDU(int &);
  413. // Mandatory - this adds a ROS the serviceApdu field. 
  414. ProtReturnCode AddROS(H4501ROS &);
  415. // Mandatory - this gets a ROS from the serviceApdu field. 
  416. // The index and ros type should match the index and
  417. // ROS type received in the list from GetROSTypes()
  418. //
  419. // @Caveats:
  420. // To get the ROS[s] from this class the following sequence
  421. // should be followed:
  422. // <OL>
  423. // <LI>  Use GetNumROSs() so that an int array of sufficient
  424. //       length can be allocated for the ROS types list.
  425. // <LI>  Use GetROSTypes() to get the ROS types list.
  426. // <LI>  Call GetROS() for each entry in the ROS types list
  427. //       with the appropriate instance of ROS
  428. // </OL>
  429. ProtReturnCode GetROS(int index, H4501ROS &ros);
  430. // Mandatory - this gets the number of ROSs in serviceApdu field. 
  431. // See GetROS for sequence of calls to get ROSs
  432. ProtReturnCode GetNumROSs(int &count);
  433. // Mandatory - this gets the types of ROSs in serviceApdu field. 
  434. // See GetROS for sequence of calls to get ROSs
  435. ProtReturnCode GetROSTypes(int types[], int &count);
  436. // Determines if the class has been sufficiently created
  437.         boolean Valid();
  438.         H4501SuppService & operator=(H4501SuppService &);
  439. //@DELB
  440.         // For protocol internal use.
  441.         EmH4501SupplementaryService *GetPriv();
  442.         ProtReturnCode SetPriv(EmH4501SupplementaryService *);
  443.         ProtReturnCode GetASN1Msg(unsigned int *length, unsigned char **);
  444.         ProtReturnCode SetASN1Msg(unsigned int length, unsigned char *);
  445. private:
  446. void Init();
  447. ASN1Codec *mCodecObjPtr;
  448. void *mEncodedMsgPtr;
  449. EmH4501SupplementaryService *mSupServPtr;
  450. int mIsValid;
  451. //@DELE
  452. };
  453. //@DELB
  454. #endif  // __H4501SUPPSERV_H__
  455. //@DELE