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

IP电话/视频会议

开发平台:

WINDOWS

  1. /*
  2.  * $Revision: 1.7 $
  3.  * $Date: 1998/10/05 21:13:55 $
  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. //                                                            //
  13. //           The copyright notice above does not evidence any //
  14. //          actual or intended publication of such source code//
  15. ////////////////////////////////////////////////////////////////
  16. //
  17. ////////////////////////////////////////////////////////////////
  18. // File : h225ras.h       //
  19. //   //
  20. // This file declares the H225RASProtocol class.   //
  21. //   //
  22. // History:   //
  23. //   //
  24. // Mar_25_1997 Created   //
  25. // Oct_17_1997 Added private member h225_version[]   //
  26. // Nov_04_1997 Changed the NotifyRASMessage prototype to    //
  27. // include the source of the message   //
  28. // Mar_09_1998 Changed the NotifyRASMessage prototype to   //
  29. // include the destination of the message.   //
  30. // Mar_19_1998 Retries/Timers   //
  31. // May_13_1998 Added overloaded GetProtocolID method,   //
  32. // version is now a unsigned long array.   //
  33. //   //
  34. ////////////////////////////////////////////////////////////////
  35. #if (!defined(__H225RAS_H__))
  36. #define __H225RAS_H__
  37. #include "util/platform.h"
  38. #include "api/apierr.h"
  39. #include "api/h225raserr.h"
  40. #include "api/h225rastypes.h"
  41. enum H225RASClientType
  42. {
  43. CLT_GATEKEEPER,
  44. CLT_TERMINAL,
  45. CLT_BOTH
  46. };
  47. // Forward declarations
  48. class Trans;
  49. class RASTransClient;
  50. class Logger;
  51. class SearchableStore;
  52. class MessageTransmitter;
  53. struct DLLEXPORT H225RASTransmitterInfo
  54. {
  55. int nretries; // Number of retries made.
  56. int timeout;  // Time(milliseconds) interval between retries.
  57. int round_trip_time; // Total time elapsed between the first transmit
  58. // and the first response.
  59. int nrips; // Number of RIP messages received.
  60. };
  61. class DLLEXPORT H225RASProtocol
  62. {
  63. public:
  64. // ras_endpoint:
  65. // This takes values from the enum H225RASClientType,
  66. // if ras_endpoint is CT_BOTH or CT_GATEKEEPER then
  67. // this object listens for RAS messages on UDP port
  68. // 1719.
  69. H225RASProtocol(H225CSEndpointType& endpoint_type,
  70. H225CSVendorID& vendor_id, int ras_endpoint,
  71.  ProtReturnCode& result);
  72. H225RASProtocol(H225CSEndpointType& endpoint_type,
  73. H225CSVendorID& vendor_id, int ras_endpoint,
  74. sockaddr* ras_addr, sockaddr* mcast_addr,
  75.  ProtReturnCode& result);
  76. virtual ~H225RASProtocol();
  77. // Method to get protocolid, this basically contains 
  78. // information on the H225 version number etc..
  79. ProtReturnCode GetProtocolID(unsigned char*& buf, int& length);
  80. ProtReturnCode GetProtocolID(int &version);
  81. ProtReturnCode GetEndpointType(H225CSEndpointType&); 
  82. ProtReturnCode GetVendorID(H225CSVendorID&);
  83. // This call enables a terminal to choose the local port
  84. // for receiving RAS messages.
  85. ProtReturnCode SetLocalAddr(sockaddr* ras_addr);
  86. // The call to establish a gatekeeper to work with.
  87. // Note that all further RAS messages, would be sent to 
  88. // the gatekeeper specified in gatekeeper_address.
  89. ProtReturnCode ChooseGK(sockaddr* gk_addr);
  90. // Functions to send out RAS messages.
  91. // For all Send functions the (optional) first parameter,
  92. // specifies the gatekeeper to which the message would be sent.
  93. // Terminals may set this address once by using the ChooseGatekeeper
  94. // function.
  95. ProtReturnCode  SendRASMessage(sockaddr* dst_addr,
  96. H225RASMessage& ras_message); 
  97. // SendRASMessage variant with timeout and retries..
  98. // timeout is in milliseconds and retries is the number of
  99. // retries to perform.
  100. // A value of 0 for timeout or retries will cause the
  101. //stack to use an internal default.
  102. ProtReturnCode  SendRASMessage(sockaddr* dst_addr,
  103. H225RASMessage& ras_message, int timeout, int retries);
  104. // Callback for notification of RAS messages arriving on our
  105. // network interface.
  106. // origin specifies the sender of this ras message, and
  107. // destination specifies the address to which the message
  108. // was sent. This is to be used in scenarios where a GRQ
  109. // is unicast to the RAS channel, or when there are multiple
  110. // interface cards.
  111. virtual void NotifyRASMessage(H225RASMessage& ras_message, 
  112. struct sockaddr *origin, struct sockaddr *destination,
  113. struct H225RASTransmitterInfo& info) = 0;
  114. // 
  115. // This method is invoked when H225RASProtcol times out
  116. // trying to send a XXQ (like GRQ, RRQ) or IRR message out.
  117. // For more information see the section 7.19
  118. // ("RAS Timers and Request in Progress (RIP)") of H225.0 V2
  119. //
  120. //  ntries: no of attempts made.
  121. // timeout: Timeout(ms) value used in each try.
  122. virtual void NotifyRASTimeout(H225RASMessage& ras_message,
  123. struct sockaddr *destination,
  124. H225RASTransmitterInfo& info) = 0;
  125. private:
  126. friend class RASTransClient;
  127. friend class MessageTransmitter;
  128. // Type of the endpoint using this object..
  129. int endpoint_type;
  130. // The gatekeepers transport address, used only by terminals.
  131. // All ras messages from terminals will go to this address.
  132. sockaddr* gk_addr;
  133. // The well known multicast address to send gatekeeper discovery
  134. // messages to.
  135. sockaddr* multicast_addr;
  136. // The local address on which ras messages will be received.
  137. // For Gatekeepers, this will be fixed to UDP port 1719
  138. sockaddr* local_ras_addr;
  139. // address of the endpoint that originated the message that
  140. // is currently being processed. This field is only valid
  141. // during the lifetime of the TransNotifyPacketArrived callback..
  142. sockaddr* originator_address;
  143. // Trans handles... 
  144. int multicast_channel;
  145. int ras_channel;
  146. int multicast_llc;
  147. int ras_llc;
  148. int trans_client_handle;
  149. Trans *trans;
  150. RASTransClient* ras_trans_client;
  151. SearchableStore *retry_list;
  152. H225CSEndpointType endpoint;
  153. H225CSVendorID vendor;
  154. unsigned long h225_version[6];
  155. private:
  156. void Initialize(H225CSEndpointType& endpoint,
  157. H225CSVendorID& vendor_id, int ras_endpoint,
  158. ProtReturnCode& result);
  159. ProtReturnCode CreateMulticastChannel();
  160. ProtReturnCode CreateRASChannel();
  161. void DestroyMulticastChannel();
  162. void DestroyRASChannel();
  163. ProtReturnCode SendMessage(sockaddr* dst, char* msg,
  164. int length);
  165. ProtReturnCode LockedSendMessage(sockaddr* dst, char* msg,
  166. int length);
  167. Logger* _logger;
  168. };
  169. #endif  // __H225RAS_H__