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

IP电话/视频会议

开发平台:

WINDOWS

  1. /*
  2.  * $Revision: 1.17 $
  3.  * $Date: 1999/03/15 22:49:36 $
  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. ////////////////////////////////////////////////////////////////
  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(__EXCHANGE_H__))
  31. #define __EXCHANGE_H__
  32. #include <stdio.h>
  33. #include <ctype.h>
  34. #if (defined(WIN32))
  35. #include <windows.h>
  36. #include <process.h>
  37. extern char *optarg;
  38. extern int getopt (int argc, char ** argv, const char * optstring);
  39. #elif defined(VXWORKS)
  40. #include "vxWorks.h"
  41. #include "taskLib.h"
  42. #include "semLib.h"
  43. #include "selectLib.h"
  44. #include "fcntl.h"
  45. #include "sockLib.h"
  46. #include "inetLib.h"
  47. #include "hostLib.h"
  48. #include "sysLib.h"
  49. #else
  50. #include <sys/types.h>
  51. #include <sys/socket.h>
  52. #include <netdb.h>
  53. #include <netinet/in.h>
  54. #include <arpa/inet.h>
  55. #if defined(__hpux)
  56. #include <pthread.h>
  57. #else
  58. #include <thread.h>
  59. #endif
  60. #endif
  61. #include "api/connmgrerr.h"
  62. #include "api/connmgr.h"
  63. #include "api/h225types.h"
  64. #if defined(USE_RAS)
  65. #include "api/h225ras.h"
  66. #endif
  67. #include "mq.h"
  68. #include "h450msgs.h"
  69. // Because of the dummy scheme of E.164 alias registration
  70. // in this sample we use only 200 lines. 
  71. #if defined(USE_RAS)
  72. #define NUM_LINES  200
  73. #else
  74. #define NUM_LINES 1024
  75. #endif
  76. #define H323_ID_ALIAS "elemedia"
  77. #define E164_ALIAS "555"
  78. #define Q931PORT 1720
  79. #if defined(USE_RAS)
  80. #define LOCAL_RAS_PORT 1719
  81. #define GK_ADDR_STR "135.17.7.8"
  82. class RASSession
  83. {
  84. public:
  85. int last_seqno;
  86. int ARQsent;
  87. int ACFrecd;
  88. boolean direction;
  89. };
  90. #endif
  91. class config_data
  92. {
  93. public:
  94. char e164src[32];
  95. char h323IDsrc[32];
  96. char endpointType[32];
  97. unsigned int q931port;
  98. #if defined(USE_RAS)
  99. char gkaddrstr[20];
  100. unsigned int localrasport;
  101. int discoverGK;
  102. #endif
  103. int verbose;
  104. config_data()
  105. {
  106. strcpy(e164src, E164_ALIAS);
  107. strcpy(h323IDsrc, H323_ID_ALIAS);
  108. strcpy(endpointType, "A");
  109. verbose = FALSE;
  110. q931port = Q931PORT;
  111. #if defined(USE_RAS)
  112. discoverGK = FALSE;
  113. strcpy(gkaddrstr, GK_ADDR_STR);
  114. localrasport = LOCAL_RAS_PORT;   
  115. #endif
  116. }
  117. };
  118. extern config_data *config;
  119. #if 0
  120. #if (defined(_DEBUG))
  121. #define LOG printf
  122. #define LOG_ERROR printf
  123. #else
  124. #define LOG 
  125. #define LOG_ERROR
  126. #endif
  127. #else
  128. #define LOG if (config->verbose) printf
  129. #define LOG_ERROR if (config->verbose) printf
  130. #endif
  131. class H323Call;
  132. // A H.323 Phone that with NUM_LINES simultaneous lines.
  133. #if defined(USE_RAS)
  134. class Exchange : public ConnectionManager, public H225RASProtocol,
  135. public MessageQueue
  136.  
  137. {
  138. public:
  139. Exchange(H225CSEndpointType& endpoint_type,
  140.                         H225CSVendorID& vendor_id, int ras_endpoint,
  141. ProtReturnCode &result);
  142. RASSession ras_sess[NUM_LINES]; 
  143. #else
  144. class Exchange : public ConnectionManager, public MessageQueue
  145. {
  146. public:
  147. Exchange(ProtReturnCode &result);
  148. #endif
  149. ~Exchange();
  150. void UserInterface();
  151. void ShutDown();
  152. void PlaceTransferedToCall(int parent_index, unsigned int ip,
  153. char *phone, int invokeID, char *callID);
  154. void PlaceCall(unsigned int ip_address,char *phone=NULL,
  155. int faststart = 0);
  156. void DropTranferringCall(int line_no);
  157. void DropCall(int line_no);
  158. void SendFacility(int line_no, H450SSseq *ssSeq);
  159. void SendToExchange(int message, unsigned int wparam,
  160. unsigned int lparam);
  161. // Connection Manager Callbacks.
  162. void NotifyNewConnection(int identifier, 
  163. int conn_ref, sockaddr *new_addr);
  164. void NotifyConnectionStatus(ConnectionEntity *conn, 
  165. ProtReturnCode connection_status);
  166. void NotifyConnectionClosed(ConnectionEntity *conn,
  167. ProtReturnCode reason);
  168. // Error occured while trying to accept an incoming
  169. // connection (as a result of a earlier Listen call.)
  170. void NotifyListenError(int identifier,
  171. ProtReturnCode status);
  172. #if defined(USE_RAS)
  173. void NotifyRASMessage(H225RASMessage& ras_message, 
  174. struct sockaddr *origin, struct sockaddr *destination,
  175. struct H225RASTransmitterInfo& info);
  176. // RAS message request timed-out without reply back.
  177. void NotifyRASTimeout(H225RASMessage& ras_message,
  178. struct sockaddr *destination,
  179. H225RASTransmitterInfo& info);
  180. struct sockaddr *GetLocalRASAddr();
  181. struct sockaddr *GetLocalSigAddr();
  182. void SetLastSeqno(unsigned int);
  183. void DiscoverGK();
  184.         void RegisterWithGK();
  185. void UnRegisterWithGK();
  186. int GetLastSeqno();
  187.         // Are we registered with a gatekeeper
  188. void SetIsGKRegistered(boolean flag);
  189. boolean IsGKRegistered();
  190.         ProtReturnCode SendGRQ(int seq, struct sockaddr *);
  191.         ProtReturnCode SendGCF(int seq, struct sockaddr *);
  192.         ProtReturnCode SendGRJ(int seq, struct sockaddr *);
  193.         ProtReturnCode SendRRQ(int seq, struct sockaddr *);
  194.         ProtReturnCode SendRCF(int seq, struct sockaddr *);
  195.         ProtReturnCode SendRRJ(int seq, struct sockaddr *);
  196.         ProtReturnCode SendURQ(int seq, struct sockaddr *);
  197.         ProtReturnCode SendUCF(int seq, struct sockaddr *);
  198.         ProtReturnCode SendURJ(int seq, struct sockaddr *);
  199.         ProtReturnCode SendARQ(int seq, struct sockaddr *, class SendARQdata *);
  200.         ProtReturnCode SendACF(int seq, struct sockaddr *);
  201.         ProtReturnCode SendARJ(int seq, struct sockaddr *);
  202.         ProtReturnCode SendBRQ(int seq, struct sockaddr *);
  203.         ProtReturnCode SendBCF(int seq, struct sockaddr *);
  204.         ProtReturnCode SendBRJ(int seq, struct sockaddr *);
  205.         ProtReturnCode SendDRQ(int seq, struct sockaddr *, int);
  206.         ProtReturnCode SendDCF(int seq, struct sockaddr *);
  207.         ProtReturnCode SendDRJ(int seq, struct sockaddr *);
  208.         ProtReturnCode SendLRQ(int seq, struct sockaddr *);
  209.         ProtReturnCode SendLCF(int seq, struct sockaddr *);
  210.         ProtReturnCode SendLRJ(int seq, struct sockaddr *);
  211.         ProtReturnCode SendIRQ(int seq, struct sockaddr *);
  212.         ProtReturnCode SendIRR(int seq, struct sockaddr *);
  213. #endif
  214. unsigned int get_local_ip();
  215. // the following is used for generating conf_ids based on ip and index
  216. unsigned int confid_prefix;
  217. // flags that determine the current options that are to be
  218. // used by the call procedures.
  219. int use_faststart;
  220. int use_overlapsend;
  221. int use_tunneling;
  222. int use_alerting;
  223. int use_callproc;
  224. private:
  225. H323Call *calls[NUM_LINES];
  226. int num_active_calls;
  227. H225CSEndpointType  endpoint_type;
  228. int terminal_type;
  229. void NotifyMessage(USER_MESSAGE&);
  230. int  create_call(int direction);
  231. void destroy_call(int index);
  232. #if defined(USE_RAS)
  233. boolean isGKRegistered;
  234. boolean gkdiscovered;
  235. unsigned int local_ip;
  236.         sockaddr local_ras;
  237. sockaddr local_sig;
  238. unsigned short ep_id[128];
  239. int ep_id_len;
  240.         int seqno;
  241. #endif
  242. };
  243. unsigned int HostNameToIP(char *hostname);
  244. #endif