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

IP电话/视频会议

开发平台:

WINDOWS

  1. /*
  2.  * $Revision: 1.12 $
  3.  * $Date: 1999/03/15 22:49:36 $
  4.  */
  5. ////////////////////////////////////////////////////////////////
  6. //               Copyright (c) 1996-98 Lucent Technologies    //
  7. //                       All Rights Reserved                  //
  8. //                                                            //
  9. //                       THIS IS UNPUBLISHED                  //
  10. //                       PROPRIETARY SOURCE                   //
  11. //                   CODE OF Lucent Technologies              //
  12. // AND elemedia   //
  13. //                                                            //
  14. ////////////////////////////////////////////////////////////////
  15. //
  16. ////////////////////////////////////////////////////////////////
  17. // Example programs are provided soley to demonstrate one     //
  18. // possible use of the stack libraries and are included for   //
  19. // instructional purposes only.  You are free to use, modify  //
  20. // and/or redistribute any portion of code in the example     //
  21. // programs.  However, such examples are not intended to      //
  22. // represent production quality code.                         //
  23. //                                                            //
  24. // THE COPYRIGHT HOLDERS PROVIDE THESE EXAMPLE PROGRAMS       //
  25. // "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED     //
  26. // OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED     //
  27. // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A            //
  28. // PARTICULAR PURPOSE.                                        //
  29. ////////////////////////////////////////////////////////////////
  30. #if !defined(__CALL_H__)
  31. #define __CALL_H__
  32. #include "api/h225types.h"
  33. #include "api/h225csp.h"
  34. #include "api/h245sig.h"
  35. #include "api/h245ind.h"
  36. #include "api/h245cmd.h"
  37. #include "api/h245rr.h"
  38. #include "mq.h"
  39. #include "rtpstuff.h"
  40. #include "h450msgs.h"
  41. class Exchange;
  42. // Define the Identifiers that will be passed down in the constructors
  43. // of the H.225 and the H.245 protocols.
  44. #define ID_H225 2000 // H225 ids will start from 2000
  45. #define ID_H245 4000 // H245 ids will start from 4000
  46. #define G7231_INDEX 1
  47. #define G711_INDEX 2
  48. #define G7231_AUDIO_SAMPLING_RATE 8000
  49. #define G7231_RTP_PAYLOAD_TYPE 96
  50. class H323Call : public H225CSProtocol, public H245Protocol,
  51. public MessageQueue
  52. {
  53. public:
  54. H323Call(Exchange *ex, int h225_id, int h245_id, 
  55. H225CSEndpointType& ep, int terminal_type,char *display, 
  56. int outgoing_call,ProtReturnCode& result);
  57. ~H323Call();
  58. // returns the remote endpoints name.
  59. char* GetRemoteName()
  60. {
  61. return remote_name;
  62. }
  63. // transfer releated
  64. inline void SetInvokeID(int invokeID)
  65. {
  66. transfer_invoke_id = invokeID;
  67. }
  68. inline void SetTransferFlag(int flag)
  69. {
  70. transfer_flag = flag;
  71. }
  72. inline void SetTransferCallID(char *callID)
  73. {
  74. strncpy(transfer_call_id, callID, 5);
  75. }
  76. inline void SetParentIndex(int parent_index)
  77. {
  78. transfer_parent_index = parent_index;
  79. }
  80. // ph is a null terminated string containing the
  81. // phone number.
  82. void SetPhoneNumber(char *ph)
  83. {
  84. strcpy(phone,ph);
  85. }
  86. void SetSrcPhoneNumber(char *ph)
  87. {
  88. strcpy(src_phone,ph);
  89. }
  90. int IsAudioSessionRunning()
  91. {
  92. return audio_session_flag;
  93. }
  94. void SetApplicationPrivate(unsigned long priv)
  95. {
  96. application_private = priv;
  97. }
  98. unsigned long GetApplicationPrivate()
  99. {
  100. return application_private;
  101. }
  102. void TestIndication(int type);
  103. void TestConfRequest(int type);
  104. void TestConfResponse(int type);
  105. int Q931SendAlerting();
  106. int Q931SendProceeding();
  107. int Q931SendConnect();
  108. int Q931SendSetupAck();
  109. int Q931SendInformation(char *);
  110. // Q.931 callback methods implementation.
  111. void NotifyEvent(int, int, Q931Event* , H225CSUUIE* );
  112. // H.245 callback methods implementation.
  113. void NotifyState(int h245_state, ProtReturnCode error);
  114. void NotifyMSDError(int error);
  115. void NotifyMSDConfirm(int decision);
  116. void NotifyRemoteTermCaps(H245SigMuxCap *mux_cap,
  117. H245SigCapTable *cap_table,
  118. H245SigCapDescs *cap_descriptors);
  119. void NotifyTermCapsAck();
  120. void NotifyTermCapsReject(int, boolean ,  int , int);
  121. void NotifyOutLCError(int lc_num, int errorCode);
  122. void NotifyInLCError(int lc_num, int error_code);
  123. void NotifyCommand(H245SigCommand &cmd);
  124. void NotifyIndication(H245SigIndication &ind);
  125. void NotifyOpenLCReq( int lc_num, unsigned short port_number,
  126.  H245SigDataType& dataType, 
  127.  H245SigMuxParams& lc_mux_params);
  128. void NotifyOpenLCReject(int lc_num, int reason);
  129. void NotifyOpenLCAck(int lc_num,
  130. H245SigH225AckParams *h225_lc_ack_params);
  131. void NotifyCloseOutLCReq(int lc_num);
  132. void NotifyCloseOutLCAck(int lc_num);
  133. void NotifyCloseInLC(int lc_num);
  134. void NotifyCloseInLCAck(int lc_num);
  135. void NotifyCloseInLCReject(int lc_num);
  136. void NotifyConfRequest(H245SigConfRequest &);
  137. void NotifyConfResponse(H245SigConfResponse &);
  138. #if defined(ENABLE_BENCHMARKS)
  139. // Instance of time when the call was started.
  140. unsigned int st_sec;
  141. unsigned int st_msec;
  142. unsigned int end_sec;
  143. unsigned int end_msec;
  144. // For tracking the call stack size.
  145. int max_stack_size;
  146. int cur_stack_size;
  147. #endif
  148. private:
  149. Exchange* exchange;
  150. // h245 address local if we are listening, remote if we are connecting.
  151. struct sockaddr_in remote_lc0_addr;
  152. struct sockaddr_in local_lc0_addr;
  153. // IP address in net byte order of local endpoint.
  154. unsigned long  if_ip_addr;
  155. // did both ends do cap exchange, olc exchange, end session, etc...
  156. int cap_done;
  157. int olc_done;
  158. int msd_done;
  159. // The LC numbers..
  160. int in_lc_num;
  161. int out_lc_num;
  162. // The H245 rtp/rtcp Audio Session and the local rtp/rtcp addresses.
  163. H245RTPSession *audio_session;
  164. struct sockaddr_in rtp_addr, rtcp_addr;
  165. void NotifyMessage(USER_MESSAGE&);
  166. void QueueIt(unsigned int wparam, unsigned long lparam);
  167. // Added for version 2.
  168. H225CSCallID callid;
  169. char confid[16];
  170. // Information related to faststart.
  171. #define FAST_START_STATE_DISABLED 0
  172. #define FAST_START_STATE_PENDING 1
  173. #define FAST_START_STATE_ENABLED 2
  174. #define H245_FAST_START_STATE_SWITCH_OUT_BEGIN 3
  175. #define H245_FAST_START_STATE_SWITCHED_OUT 4
  176. int faststart_state;
  177. #define FS_CHANNEL_OUTGOING  0
  178. #define FS_CHANNEL_INCOMING  1
  179. H245SigOpenLogicalChannel fs_channels[2];
  180. int do_faststart;
  181. int do_overlapsend;
  182. int do_tunneling;
  183. int do_alerting;
  184. int do_proceeding;
  185. int is_outgoing_call;
  186. // Internal helpers..
  187. void InitCapTable(H245SigCapTable& cap_table);
  188. void InitCapDescs(H245SigCapDescs& cap_descs);
  189. void InitMuxCap(H245SigMuxCap& mux_cap);
  190. boolean CheckCap(H245SigCapTable& cap_table, H245SigCap& cap);
  191. void PrintCaps(H245SigCapTable &cap_table);
  192. void DropQ931(int);
  193. int StartAudio();
  194. int LocalHangup();
  195. int SendFacility(H450SSseq *ssSeq);
  196. int CreateRtpSession();
  197. int SwitchToRegularH245();
  198. void SendQ932Facility(int, H450SSseq *ssSeq);
  199. // internal helpers for faststart
  200. int InitFastStartProposal(H225CSSetupUUIE *setup_uuie);
  201. int InitFastStartReply(H225CSSetupUUIE *setup_uuie);
  202. int InterpretFastStartReply(UUIEItemFastStartList *fs_list);
  203. char remote_name[256];
  204. char *display_str;
  205. char phone[256];
  206. char src_phone[256];
  207. int endsession_sent;
  208. int audio_session_flag;
  209. int call_dropped;
  210. unsigned long application_private;
  211. // transfer related
  212. int transfer_flag;
  213. int transfer_invoke_id;
  214. char transfer_call_id[5];
  215. int transfer_parent_index; // used in terminal B to associate the two calls
  216. };
  217. #endif // __TERM_H__