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

IP电话/视频会议

开发平台:

WINDOWS

  1. /*
  2.  * $Revision: 1.7 $
  3.  * $Date: 1999/03/17 18:41:06 $
  4.  */
  5. ////////////////////////////////////////////////////////////////
  6. //               Copyright (c) 1996,97 Lucent Technologies    //
  7. //                       All Rights Reserved                  //
  8. //                                                            //
  9. //                       THIS IS UNPUBLISHED                  //
  10. //                       PROPRIETARY SOURCE                   //
  11. //                   CODE OF Lucent Technologies              //
  12. //      AND elemedia    //
  13. //                                                            //
  14. //           The copyright notice above does not evidence any //
  15. //          actual or intended publication of such source code//
  16. ////////////////////////////////////////////////////////////////
  17. //
  18. /////////////////////////////////////////////////////////////////
  19. // File : q931event.h    //
  20. //                                                             //
  21. // This file declares the Q931Event and related classes.    //
  22. //    //
  23. // History:    //
  24. // 18_Dec_1996  Created    //
  25. // 8_Feb_1997  Added Q931Event, Q931Timeout etc...    //
  26. //  28_Feb_1997 Fixed bug in SetCRV/GetCRV    //
  27. // 25_Apr_1997 Code Review. PASS1. Added Dump routine,    //
  28. // Removed ununsed calls, GetUUPD and SetUUPD.    //
  29. // 29_Apr_1997 Code Review. PASS2. ~Q931Message made virtual, //
  30. // added ~Q931Event    //
  31. //  01_Jul_1997 Added CCP_FACILITY_REQUEST    //
  32. //  17_Sep_1997 Added CCP_STATUS_ENQUIRY_REQUEST     //
  33. // and CCP_STATUS_REQUEST        //
  34. // 12_Oct_1998 Support for Progress Message.    //
  35. // 10_Mar_1999 Added CCP_NOTIFY_REQUEST & CCP_INFO_REQEST    //
  36. // Added new message types: NOTIFY,INFORMATION &    //
  37. // SETUP_ACK.          //
  38. // Added new Q.931 state OVERLAP_RECEIVING    //
  39. /////////////////////////////////////////////////////////////////
  40. #if (!defined(__Q931EVENT_H__))
  41. #define __Q931EVENT_H__
  42. #include "util/listifc.h"
  43. #include "util/platform.h"
  44. #include "q931/q931err.h"
  45. class ListManager;
  46. class Logger;
  47. // The various states of the Q.931 FSM
  48. // These values will be returned in the NotifyStateChange methods.
  49. enum  Q931FSMStates
  50. {
  51. STATE_NULL = 0x0,
  52. STATE_CALL_PRESENT = 0x6,
  53. STATE_INCOMING_CALL_PROCEEDING = 0x9,
  54. STATE_OUTGOING_CALL_PROCEEDING = 0x3,
  55. STATE_CALL_RECEIVED = 0x7,
  56. STATE_CALL_INITIATED = 0x1,
  57. STATE_OVERLAP_SENDING = 0x2,
  58. STATE_CALL_DELIVERED = 0x4,
  59. STATE_OVERLAP_RECEIVING = 0x19,
  60. STATE_CALL_ACTIVE = 0xA
  61. };
  62. enum Q931CallDir
  63. {
  64. DIR_OUTGOING,
  65. DIR_INCOMING
  66. };
  67. // The various timeouts supported by the q.931 engine
  68. enum Q931TimerTypes
  69. {
  70. Q931TT_T301,  // alert recd, awaiting connect (180 secs)
  71. Q931TT_T303,  // setup sent, awaiting cp, alerting or connect (4 secs)
  72. Q931TT_T310, // call proc recd, awaiting connect (10 secs)
  73. Q931TT_T304, // Started upon receipt of setup_ack (30 secs)
  74. Q931TT_T302 // Started before entering overlap recv state (15 secs)
  75. };
  76. // The various q931 message types
  77. enum Q931MessageType
  78. {
  79. MESSAGE_INVALID = 0x00,
  80. // Q931 message types.
  81. MESSAGE_ALERTING = 0x01,
  82. MESSAGE_CALL_PROCEEDING = 0x02,
  83. MESSAGE_PROGRESS = 0x3,
  84. MESSAGE_SETUP = 0x05,
  85. MESSAGE_CONNECT = 0x07,
  86. MESSAGE_SETUP_ACK = 0x0D,
  87. MESSAGE_STATUS_ENQUIRY = 0x75,
  88. MESSAGE_RELEASE_COMPLETE = 0x5A,
  89. MESSAGE_STATUS = 0x7D,
  90. MESSAGE_FACILITY = 0x62,
  91. MESSAGE_NOTIFY = 0x6E,
  92. MESSAGE_INFORMATION = 0x7B,
  93. // Q932 message types.
  94. MESSAGE_Q932_FACILITY = 0x62,
  95. MESSAGE_Q932_REGISTER = 0x64,
  96. MESSAGE_Q932_HOLD =   0x24,
  97. MESSAGE_Q932_HOLD_ACK = 0x28,
  98. MESSAGE_Q932_HOLD_REJECT= 0x30
  99. };
  100. // Information elements types.
  101. enum Q931IEType
  102. {
  103. IE_BEARER_CAPABILITY = 0x04,
  104. IE_CHANNEL_ID = 0x18, // For Futher Study as per H225v2
  105. IE_PROGRESS_INDICATOR = 0x1E,
  106. IE_DISPLAY = 0x28,
  107. IE_SIGNAL = 0x34,
  108. IE_HIGHER_LAYER_COMPAT = 0x7D, // For Futher Study as per H225v2
  109. IE_USER_TO_USER = 0x7E,
  110. IE_DATE_TIME = 0x29,
  111. IE_LOWER_LAYER_COMPAT = 0x7C, // For Futher Study as per H225v2
  112. IE_SENDING_COMPLETE = 0xA1,
  113. IE_KEYPAD_FACILITY = 0x2C,
  114. IE_CALLED_PARTY_NUMBER = 0x70,
  115. IE_CALLED_PARTY_SUB_ADDRESS = 0x71,
  116. IE_CAUSE = 0x08,
  117. IE_CALLING_PARTY_NUMBER = 0x6C,
  118. IE_CALLING_PARTY_SUB_ADDRESS = 0x6D,
  119. IE_FACILITY = 0x1C,
  120. IE_EXTENDED_FACILITY = 0x0D,
  121. IE_CALL_STATE = 0x14,
  122. IE_NOTIFICATION_INDICATOR = 0x27
  123. };
  124. // The various types the Q931Event class can be polymorphed into..
  125. enum Q931EventTypes
  126. {
  127. Q931EVENT_INVALID,
  128. Q931EVENT_MESSAGE,
  129. Q931EVENT_CALL_CONTROL_PRIMITIVE,
  130. Q931EVENT_ERROR
  131. };
  132. // 
  133. // various user generated stimuli for the q931 fsm.
  134. //
  135. enum Q931Primitives
  136. {
  137. CCP_SETUP_REQUEST,
  138. CCP_PROCEEDING_REQUEST,
  139. CCP_ALERTING_REQUEST,
  140. CCP_SETUP_RESPONSE,
  141. CCP_REJECT_REQUEST,
  142. CCP_RELEASE_REQUEST,
  143. CCP_FACILITY_REQUEST,
  144. CCP_STATUS_ENQUIRY_REQUEST,
  145. CCP_STATUS_REQUEST,
  146. CCP_PROGRESS_REQUEST,
  147. CCP_INFO_REQUEST,
  148. CCP_MORE_INFO_REQUEST,// Will cause the stack to send a SETUP_ACK
  149. CCP_NOTIFY_REQUEST
  150. };
  151. // 
  152. //  The stimlus object for the Q931FSM,
  153. //  Currently there are 3 different events
  154. //  defined, 1. Q931Message, 2. Q931CallControlPrimitive
  155. //  3. Q931Error
  156. class DLLEXPORT Q931Event
  157. {
  158. public:
  159. // event_type specifies the type of event.
  160. Q931Event(int event_type);
  161. virtual ~Q931Event();
  162. virtual int GetEventType();
  163. Q931Event& operator=(Q931Event& ev);
  164. protected:
  165. int event_type;
  166. };
  167. class DLLEXPORT Q931CallCtrlPrim : public Q931Event
  168. {
  169. public:
  170. Q931CallCtrlPrim(int prim_type);
  171. ProtReturnCode GetType(int& prim);
  172. Q931CallCtrlPrim& operator=(Q931CallCtrlPrim& ccp);
  173. protected:
  174. int prim_type;
  175. };
  176. class DLLEXPORT Q931Error : public Q931Event
  177. {
  178. public:
  179. Q931Error(ProtReturnCode error);
  180. ProtReturnCode GetError();
  181. Q931Error& operator=(Q931Error& err);
  182. protected:
  183. ProtReturnCode error;
  184. };
  185. class Q931IE;
  186. // This class abstracts a Q931 message. 
  187. class DLLEXPORT Q931Message  : public Q931Event
  188. {
  189. public:
  190. Q931Message(int msg_type);
  191. virtual ~Q931Message();
  192. // Get and set the protocol discriminator field.
  193. ProtReturnCode GetPD(unsigned char &pd);
  194. ProtReturnCode SetPD(unsigned char pd);
  195. // Get and set the message type field.
  196. ProtReturnCode  GetType(int& type);
  197. ProtReturnCode SetType(int type);
  198. // Get  the Call Reference Value field.
  199. ProtReturnCode GetCRV(unsigned short& crv);
  200. // Methods to Get/Set/Delete information elements.
  201. ProtReturnCode GetIE(int id, Q931IE* &ie);
  202. ProtReturnCode SetIE(Q931IE& ie);
  203. ProtReturnCode DeleteIE(int id);
  204. Q931Message&  operator=(Q931Message&);
  205. // ie_id is one of enum Q931IEType.
  206. boolean IsIEValid(int ie_id);
  207. // For protocol internal use..
  208. void Dump(Logger *logger);
  209. protected:
  210. int message_type;
  211. unsigned short call_reference_value;
  212. unsigned char protocol_discriminator;
  213. int crv_length;
  214. private:
  215. friend class Q931Engine;
  216. // List of information elements in this message.
  217. ListManager *ie_list;
  218. // The list of allowed information elements for this message in sorted
  219. // order.
  220. int* ie_table;
  221. int ie_table_length;
  222. // Private constructors, used by Q931Engine class.
  223. Q931Message(int msg_type,
  224. unsigned char protocol_disc,
  225. unsigned short crv,
  226. int crv_length = 2);
  227. Q931Message();
  228. // Methods to manipulate the Q931 message as a byte stream.
  229. ProtReturnCode GetMessageData(char *buf, int& length);
  230. ProtReturnCode SetMessageData(char *buf, int length);
  231. ProtReturnCode DeleteMessageData();
  232. ProtReturnCode GetMessageDataLength(int &length);
  233. void SetIETable();
  234. ProtReturnCode GetValidIEList(int *& list, int & length);
  235. boolean IsIEAllowed(int id);
  236. // flag indicates if the CRV is inclusive of the flag or not.
  237. // this is saved in the message. Flag also indicates that
  238. // the CRV value is in network byte order.
  239. ProtReturnCode SetCRV(
  240. unsigned short crv, int flag);
  241. // flag == non-zero then set flag bit
  242. // else unset it.
  243. void SetCRVFlag(int flag);
  244. };
  245. #endif