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

IP电话/视频会议

开发平台:

WINDOWS

  1. /*
  2.  * $Revision: 1.6 $
  3.  * $Date: 1998/10/14 22:49:54 $
  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 : h245sig.h    //
  20. //                                                             //
  21. // Description: The H245 control signalling protocol.    //
  22. //    //
  23. //    //
  24. // 10_Mar_1997 Created    //
  25. // 03_Apr_1997 Connection Manager changes..    //
  26. // 08_May_1997 Profile 1B changes    //
  27. // 20_May_1997 added conference request and response functions //
  28. // 10_Dec_1997 Destructor made virtual    //
  29. // 01_Oct_1997 Support for fallback procedures from faststart  //
  30. //    InheritLC        //
  31. //    GetOutLCDataType,GetInLCDataType(overloaded)    //
  32. //    GetInLCParams,GetOutLCParams(overloaded)    //
  33. //    GetRemoteMuxCap,GetMuxCap(overloaded)    //
  34. //    //
  35. /////////////////////////////////////////////////////////////////
  36. #if !defined(__H245SIG_H__)
  37. #define __H245SIG_H__
  38. #include "util/platform.h"
  39. #include "api/h245sigerr.h"
  40. #include "api/h245types.h"
  41. #include "api/h245caps.h"
  42. #include "api/h245ind.h"
  43. #include "api/h245cmd.h"
  44. #include "api/h245rr.h"
  45. #include "api/connmgr.h"
  46. class H245Client;
  47. class H245Engine;
  48. class Logger;
  49. class DLLEXPORT H245Protocol : public ConnectionEntity
  50. {
  51. public:
  52. // terminal_type is from the set H245SigTerminalType
  53. H245Protocol(int identifier, int terminal_type, 
  54. ProtReturnCode& returnCode);
  55. virtual ~H245Protocol();
  56. /////////////////////////////////////////////////////////////////////////
  57. /// H245 Commands and Indications
  58. /////////////////////////////////////////////////////////////////////////
  59. // Used to send a command to the remote end.
  60. // Note: If an EndSession command is specified, then all open 
  61. //  logical channels will be closed. No further API calls
  62. //  can be made following a call to send an EndSession command.
  63. ProtReturnCode SendCommand(H245SigCommand &command);
  64. // Used to send an indication to the remote end.
  65. ProtReturnCode SendIndication(H245SigIndication &indication);
  66. /////////////////////////////////////////////////////////////////////////
  67. /// H245 Master slave determination functions.
  68. /////////////////////////////////////////////////////////////////////////
  69. // Invoked to initiate outgoing master-slave determination procedure.
  70. ProtReturnCode DetermineMS();
  71. /////////////////////////////////////////////////////////////////////////
  72. /// H245 Terminal capabilities functions.
  73. /////////////////////////////////////////////////////////////////////////
  74. // Method to send the terminal capability set. Called at the end
  75. // of master slave determination (success) notification.
  76. ProtReturnCode SendTermCaps(H245SigMuxCap* mux_cap,
  77. H245SigCapTable* cap_table,
  78. H245SigCapDescs* cap_descriptors);
  79. // Called by the user to ack the remote ends terminal capabilitity set.
  80. ProtReturnCode AckTermCaps(void);
  81. // Called by the user to reject the remote ends terminal capability set.
  82. // cause indicates the reason for rejecting the remote termcap set and 
  83. // it is one from the set H245SigCapRejectReason.
  84. // exceeded_type specified if the terminal capability set was processed or 
  85. // not before rejecting it.  Valid only if cause is set to 
  86. // CRR_TABLE_ENTRY_CAPACITY_EXCEEDED
  87. // max_entry indicates the sequence number of the capability table entry 
  88. // number for which this negative acknowledgement was generated. Valid
  89. // only if exceeded_type is TRUE
  90. ProtReturnCode RejectTermCaps(
  91. int cause,
  92. boolean exceeded_type,
  93.      int max_entry);
  94. /////////////////////////////////////////////////////////////////////////
  95. /// H245 Open Logical Channel Functions.
  96. /////////////////////////////////////////////////////////////////////////
  97. // Open a Logical Channel for the specified data type.
  98. // forward_lc_num indicates the number to be associated with the LC
  99. // port_number is an user to user parameter.
  100. // data_type describes the type of media to be transferred on the LC.
  101. // lc_mux_params describes the transport related parameters for the LC.
  102. ProtReturnCode OpenLC(int forward_lc_num,
  103. unsigned short port_number,
  104. H245SigDataType& data_type,
  105. H245SigMuxParams& lc_mux_params);
  106. // Reject a open channel request made by the remote end
  107. // lc_num indicates the (remote end's) logical channel number which is 
  108. // being rejected.
  109. // reason indicates the reason for rejection and it is one from the set
  110. // H245SigOLCRejectReason
  111. ProtReturnCode RejectOpenLCReq(int lc_num, int reason);
  112. // Ack a open channel request made by the peer
  113. // lc_num indicates the (remote end's) logical channel number which is 
  114. // being acknowledged.
  115. // lc_ack_params specifies the transport parameters for the acknowledged LC.
  116. // lc_ack_params need to be set only for H.225 (H.222, H.223 and V.76 don't
  117. // need it)
  118. ProtReturnCode AckOpenLCReq(int lc_num,
  119. H245SigH225AckParams *h225_lc_ack_params = NULL);
  120. // Inherit a logical channel created using the fast start mechanism
  121. // defined in H.323. Note that InheritLC will return a failure if 
  122. // the procedure is attempted before the masterslave determination
  123. // completes. direction specifies the Q.931 call direction.
  124. // Values of Q931CallDir are defined in q931_event.h
  125. // DIR_OUTGOING = 0, DIR_INCOMING = 1
  126. ProtReturnCode InheritLC(H245SigOpenLogicalChannel &olcInfo, int direction);
  127. /////////////////////////////////////////////////////////////////////////
  128. /// H245 Close Logical Channel Functions.
  129. /////////////////////////////////////////////////////////////////////////
  130. // Close a logical channel opened by this end.
  131. // lc_num indicates the forward logical number that is being closed.
  132. ProtReturnCode CloseOutLC(int lc_num);
  133. // Request to close a logical channel created by the other end..
  134. // lc_num indicates the logical number whose closure is being requested.
  135. ProtReturnCode CloseInLC(int lc_num);
  136. // Ack a close channel request made by the remote end for closing a 
  137. // channel opened by this end.
  138. // lc_num indicates the logical number whose closure was requested.
  139. ProtReturnCode AckCloseOutLCReq(int lc_num);
  140. // Reject a close channel request, for a logical channel opened by this end.
  141. ProtReturnCode RejectCloseOutLCReq(int lc_num);
  142. /////////////////////////////////////////////////////////////////////////
  143. /// Other requests and response messages
  144. /////////////////////////////////////////////////////////////////////////
  145. // Use the following to send conference request and conference response
  146. // messages.
  147. ProtReturnCode SendConfRequest(H245SigConfRequest &conference_req);
  148. ProtReturnCode SendConfResponse(H245SigConfResponse &conference_resp);
  149. /////////////////////////////////////////////////////////////////////////
  150. /// Query functions.
  151. /////////////////////////////////////////////////////////////////////////
  152. // Returns the remote capabilities
  153. ProtReturnCode GetRemoteMuxCapType(int& type);
  154. ProtReturnCode GetRemoteMuxCap(H245SigMuxCap& mux_cap);
  155. ProtReturnCode GetRemoteCapTable(H245SigCapTable& cap_table);
  156. ProtReturnCode GetRemoteCapDescs(H245SigCapDescs& cap_descriptors);
  157. // Return local capabilities.
  158. ProtReturnCode GetMuxCapType(int& type);
  159. ProtReturnCode GetMuxCap(H245SigMuxCap& mux_cap);
  160. ProtReturnCode GetCapTable(H245SigCapTable& cap_table);
  161. ProtReturnCode GetCapDescs(H245SigCapDescs& cap_descriptors);
  162. // Query the data type for a logical channel
  163. ProtReturnCode GetTypeOfInLCDataType(int lc_num, int &type);
  164. ProtReturnCode GetInLCDataType(int lc_num, H245SigDataType& data_type);
  165. ProtReturnCode GetTypeOfOutLCDataType(int lc_num, int &type);
  166. ProtReturnCode GetOutLCDataType(int lc_num, H245SigDataType& dataType);
  167. // Query the logical channel parameters for the logical channel.
  168. ProtReturnCode GetTypeOfInLCParams(int lc_num, int& type);
  169. ProtReturnCode GetInLCParams(int lc_num, H245SigMuxParams& lc_params);
  170. ProtReturnCode GetTypeOfOutLCParams(int lc_num, int& type);
  171. ProtReturnCode GetOutLCParams(int lc_num, H245SigMuxParams& lc_params);
  172. /////////////////////////////////////////////////////////////////////////
  173. // Command and Indication message notifications.
  174. /////////////////////////////////////////////////////////////////////////
  175. // An indication has arrived from the remote endpoint or the MC.
  176. virtual void NotifyIndication(H245SigIndication &indication) = 0;
  177. // A command has been sent by the remote endpoint or the MC.
  178. virtual void NotifyCommand(H245SigCommand &command) = 0;
  179. /////////////////////////////////////////////////////////////////////////
  180. // Master Slave Determination notifications.
  181. /////////////////////////////////////////////////////////////////////////
  182. // Notify user of an error in the master-slave determination procedure. 
  183. // error specifies the reason for the error and is one from the set
  184. // H245SigMSDError
  185. virtual void NotifyMSDError(int error) = 0;
  186. // Notifies the user that master-slave determination completed
  187. // successfully. The decision value indicates master or slave and
  188. // is one from the set H245SigMSDResult.
  189. virtual void NotifyMSDConfirm(int decision) = 0;
  190. /////////////////////////////////////////////////////////////////////////
  191. // Terminal capabilities exchange notifications.
  192. /////////////////////////////////////////////////////////////////////////
  193. // Remote end has sent its capabilities.
  194. virtual void NotifyRemoteTermCaps(
  195. H245SigMuxCap  *mux_cap,
  196. H245SigCapTable *cap_table,
  197. H245SigCapDescs *cap_descriptors) = 0;
  198. // Remote end has ack'ed SendTermCaps call.
  199. virtual void NotifyTermCapsAck() = 0;
  200. // Remote end has rejected SendTermCaps call.
  201. // cause specifies the reason for rejection and is one from the set
  202. // H245SigCapRejectReason . If cause is set to 
  203. // CRR_TABLE_ENTRY_CAPACITY_EXCEEDED then exceed_type indicates whether
  204. // the cap table was processed or not before rejecting. If exceed_type
  205. // is set to TRUE, then max_entry denotes the last entry in cap table
  206. // that was processed before the remote end rejected the capabilities.
  207. // direction specifies the signalling entity that notifies the 
  208. // rejection. If direction is CESE_OUTGOING it indicates the remote
  209. // end rejected the capability set sent earlier. If direction is
  210. // CESE_INCOMING it indicates that the remote end reset its capabilites
  211. // sent earlier because it did not recieve an ack from us on time.
  212. virtual void NotifyTermCapsReject(int cause, boolean exceed_type, 
  213. int max_entry, int direction) = 0;
  214. /////////////////////////////////////////////////////////////////////////
  215. // Logical Channel signalling notifications.
  216. /////////////////////////////////////////////////////////////////////////
  217. // Notifies of an Error during logical channel signalling.
  218. // error_code is one from the set  of H245SigLCSError
  219. virtual void NotifyOutLCError(int lc_num, int errorCode) = 0;
  220. virtual void NotifyInLCError(int lc_num, int error_code) = 0;
  221. /////////////////////////////////////////////////////////////////////////
  222. /// H245 Open Logical Channel Notifications.
  223. /////////////////////////////////////////////////////////////////////////
  224. // Called upon receipt of OpenLogicalChannel Request from the remote end.
  225. virtual void NotifyOpenLCReq(
  226. int lc_num,
  227. unsigned short port_number,
  228. H245SigDataType& data_type,
  229. H245SigMuxParams& lc_mux_params) = 0;
  230. // Callback to notify that the remote end has rejected the OpenLC call.
  231. // reason indicates cause for rejection and is one from the set
  232. // H245SigOpenLCRejectType
  233. virtual void NotifyOpenLCReject(int lc_num, int reason) = 0;
  234. // Callback for notifying that the remote end has ack'ed the OpenLC call.
  235. // Note that h225_lc_ack_params will be NULL for the non H.225 cases.
  236. virtual void NotifyOpenLCAck(int lc_num,
  237. H245SigH225AckParams *h225_lc_ack_params) = 0;
  238. /////////////////////////////////////////////////////////////////////////
  239. /// H245 Close Logical Channel Notifications.
  240. /////////////////////////////////////////////////////////////////////////
  241. // Remote endpoint has made a request to close a logical channel
  242. // opened by this end.
  243. virtual void NotifyCloseOutLCReq(int lc_num) = 0;
  244. // Remote end has ack'ed a CloseOutLC call.
  245. virtual void NotifyCloseOutLCAck(int lc_num) = 0;
  246. // Remote end has indicated a closure of  a logical channel which it 
  247. // opened earlier.
  248. // The user does not have to ACK or NAK.
  249. virtual void NotifyCloseInLC(int lc_num) = 0;
  250. // Remote end has ack'ed an earlier CloseInLC call.
  251. virtual void NotifyCloseInLCAck(int lc_num) = 0;
  252. // Remote end has rejected an earlier CloseInLC call.
  253. virtual void NotifyCloseInLCReject(int lc_num) = 0;
  254. /////////////////////////////////////////////////////////////////////////
  255. /// Other requests and response message notifications
  256. /////////////////////////////////////////////////////////////////////////
  257. // Notification of a conference request from the remote end
  258. // or a response to a request sent out previously.
  259. virtual void NotifyConfRequest(H245SigConfRequest &conference_req) = 0;
  260. virtual void NotifyConfResponse(H245SigConfResponse &conference_resp) = 0;
  261. /////////////////////////////////////////////////////////////////////////
  262. /// Begin private section, End of API specification
  263. /////////////////////////////////////////////////////////////////////////
  264. private:
  265. friend class H245Client;
  266. H245Client *client;
  267. H245Engine *eng;
  268. Logger *_logger;
  269. };
  270. extern DLLEXPORT const char * H245SigGetVersionString();
  271. extern DLLEXPORT unsigned long H245SigGetVersionNumber();
  272. #endif // __H245SIG_H__