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

IP电话/视频会议

开发平台:

WINDOWS

  1. /*
  2.  * $Revision: 1.1.1.1 $
  3.  * $Date: 1997/06/27 20:21:10 $
  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. // File : endpoint.h   //
  19. //                                                            //
  20. // This file declares RTPEndpointInfo   //
  21. //   //
  22. //                                                           //
  23. // History:   //
  24. //  20_Jan_1997 Created   //
  25. //   //
  26. ////////////////////////////////////////////////////////////////
  27. #if (!defined(__ENDPOINT_H__))
  28. #define __ENDPOINT_H__
  29. #include "rtp/rtperr.h"
  30. #include "util/listifc.h"
  31. #define RTP_SEQ_MOD (1 << 16)
  32. #define RTP_TS_MOD (0xFFFFFFFF)
  33. struct RTCPReceptionReport;
  34. struct RTCPSenderInfo;
  35. class RTPSession;
  36. class RTCPPacket;
  37. class CBuffer;
  38. class RTPEndpointInfo;
  39. class Logger;
  40. struct EndpointStats;
  41. // The RTP Endpoint  Information class. This class abstracts
  42. // the functions and information maintained by and for an
  43. // RTP endpoint. For the local endpoint all information
  44. // that would be needed to send a sender report is maintained.
  45. // For remote endpoints all information that is required for
  46. // sending reception reports would be maintained.
  47. //
  48. // Can be instantiated only by using the Factory method.
  49. class DLLEXPORT RTPEndpointInfo : public ListElementInterface
  50. {
  51. public: // Friendship associations..
  52. friend class RTPPacket;
  53. friend class RTCPPacket;
  54. friend class RTPSession;
  55. public: // methods.
  56. virtual ~RTPEndpointInfo ();
  57. // Various routines that return the SDES names for this endpoint.
  58. void GetCName(char *&buf, int& length);
  59. void GetRealName(char *&buf, int& length);
  60. void GetEMail(char *&buf, int& length);
  61. void GetPhone(char *&buf, int& length);
  62. void GetLoc(char *&buf, int& length);
  63. void GetTool(char *&buf, int& length);
  64. void GetNote(char *&buf, int& length);
  65. void GetPriv(char *&buf, int& length);
  66. // Return this endpoints ssrc.
  67. unsigned int GetSSRC();
  68. // Retrive some statistics regarding this endpoint.
  69. // Information returned in host byte order.
  70. void GetStatistics(struct RTPEndpointStats &endpoint_stats);
  71. protected: // Types
  72. // Various schemes using which the endpoints list can be looked up
  73. // The endpoints list contains information regarding all remote
  74. // endpoints that participate with this local endpoint for this 
  75. // session. This information consists of statistics needed for sending
  76. // reception reports.
  77. enum LookupSchemes
  78. {
  79. LOOKUP_ON_SSRC
  80. };
  81. protected: // Member functions.
  82. // Constructor. Creates an endpointinfo class for the given ssrc and 
  83. // session.
  84. // The constructor is protected so that this class cannot be instantiated
  85. // directly.
  86. RTPEndpointInfo (unsigned int ssrc, RTPSession *session, 
  87. unsigned short sequence_no = 0);
  88. int Match(void *key, unsigned long key_type);
  89. // the pointer to the current session.
  90. RTPSession *session;
  91. // The ssrc of the endpoint.
  92. unsigned int ssrc;
  93. // for sequence number checks in incoming rtp packets.
  94. // needed to send reception reports too.
  95. int probation; // is the source valid ?
  96. unsigned int cycles; // number of sequence number wraparounds.
  97. unsigned short max_seq; // max sequence number expected.
  98. unsigned short base_seq; // first sequence number recd. 
  99. unsigned int bad_seq; // last bad sequence number received
  100. unsigned int max_misorder; // tolerance on the lower side of max_seq
  101. unsigned int max_dropout; // tolarance on the upper side of max_seq
  102. int min_sequential;  // no of consecutive ordered pkts to 
  103. // go out of probation(1 for no probation)
  104. // NTP time in the last sender report packet that was received.
  105. unsigned int sr_ntp_secs;
  106. unsigned int sr_ntp_fraction;
  107. // NTP time when the last sender report packet arrived.
  108. unsigned int sr_arrival_ntp_secs;
  109. unsigned int sr_arrival_ntp_fraction;
  110. // for loss stats. needed to generate reception reports.
  111. unsigned int expected_prior;// saved expected value during last rr.
  112. unsigned int received_prior;// saved received value during last rr.
  113. // incoming packet statistics .
  114. unsigned int misorder; // no of misordered packets.
  115. unsigned int received; // total number of packets from this source.
  116. unsigned int transit_time; // rel transit time for previous packet
  117. unsigned int delay_variance;// cumulative interarrival jitter.
  118. // outgoing packet statistics. needed for generating sender reports.
  119. unsigned int packets_sent;
  120. unsigned int octets_sent;
  121. // The receiver report for the (remote) endpoint.
  122. RTCPReceptionReport *rr;
  123. // sender(local endpoint) only. The sender report for the (local) endpoint.
  124. RTCPSenderInfo *sr;
  125. // SDES items. 
  126. CBuffer *cname;
  127. CBuffer *real_name;
  128. CBuffer *email;
  129. CBuffer *phone;
  130. CBuffer *note;
  131. CBuffer *tool;
  132. CBuffer *loc;
  133. CBuffer *priv;
  134. // Mutex object for this endpoint.
  135. void* mutex;
  136. // marks if there was any activity in this endpoint since the
  137. // last call to GetSenderInfo or GetReceptionReport.
  138. int activity_flag;
  139. // Set the SSRC for this endpoint.
  140. void SetSSRC(unsigned int ssrc);
  141. // Routines to set the various SDES ids for this endpoint.
  142. void SetCName(char *buf, int length);
  143. void SetRealName(char *buf, int length);
  144. void SetEMail(char *buf, int length);
  145. void SetPhone(char *buf, int length);
  146. void SetLoc(char *buf, int length);
  147. void SetTool(char *buf, int length);
  148. void SetNote(char *buf, int length);
  149. void SetPriv(char *buf, int length);
  150. // indicate that a sender report was got from this endpoint at the
  151. // specified time.
  152. // Used to maintain some stats required for sending reception reports.
  153. void SenderReportArrived(struct RTCPSenderInfo& sr, 
  154. unsigned int now_ntp_secs, unsigned int now_ntp_fraction);
  155. // Routines for getting the sender and receiver reports.
  156. // Calling GetReceptionReport for the local endpoint or 
  157. // GetSenderInfo for a remote endpoint is an error which is
  158. // not notified.
  159. RTCPSenderInfo * GetSenderInfo();
  160. RTCPReceptionReport * GetReceptionReport(unsigned int now_ntp_sec, 
  161. unsigned int now_ntp_frac);
  162. // Was there any activity since the last time 
  163. // (probationary period indicates inactivity).
  164. int CheckActivity();
  165. // Called whenever a packet is received from this endpoint.
  166. // Update statistics for sending reception reports.
  167. ProtReturnCode PacketReceived(RTPPacket &packet, unsigned int rtp_time);
  168. // Called whenever a packet is sent out from this endpoint.
  169. // Update local endpoints statistics.
  170. ProtReturnCode PacketSent(RTPPacket &packet, int payload_length);
  171. // initialize the packet sequence check variables.
  172. void init_seq(unsigned short seq);
  173. private:
  174. Logger *_logger;
  175. };
  176. // The statistics collected for this endpoint.
  177. struct RTPEndpointStats
  178. {
  179. unsigned int es_ssrc;
  180. // incoming packet stats from this endpoint.
  181. // Does not make any sense for the local endpoint.
  182. int es_probation; // is the source valid ?
  183. unsigned int es_misorder; // no of misordered packets.
  184. unsigned int es_received; // total number of packets from this source.
  185. unsigned int es_delay_variance;// cumulative interarrival jitter.
  186. // outgoing packet statistics for this endpoint.
  187. // For local endpoints counted as and when packets are sent,
  188. // and for remote endpoints collected from the most recent SenderReport.
  189. unsigned int es_packets_sent;
  190. unsigned int es_octets_sent;
  191. };
  192. #endif // __ENDPOINT_H__