home *** CD-ROM | disk | FTP | other *** search
/ Magazyn Internet 2000 May / MICD_2000_05.iso / CBuilder5 / INSTALL / DATA1.CAB / Program_Built_Files / Include / rtp.h < prev    next >
C/C++ Source or Header  |  2000-02-01  |  7KB  |  228 lines

  1. /*++
  2.  
  3. Copyright (c) 1996 Microsoft Corporation
  4.  
  5. Module Name:
  6.  
  7.     rtp.h
  8.  
  9. Abstract:
  10.  
  11.     Header for RTP/RTCP Protocol.
  12.  
  13. --*/
  14.  
  15. #if !defined(_INC_RTP_H_)
  16. #pragma option push -b -a8 -pc -A- /*P_O_Push*/
  17. #define      _INC_RTP_H_
  18.  
  19. #define RTP_TYPE     2
  20. #define RTP_VERSION  RTP_TYPE
  21. #define RTP_MAX_SDES 256
  22. #define RTP_MAX_EKEY 32
  23.  
  24. #define    NUM_COLLISION_ENTRIES    10
  25. #define    MAX_ADDR_LEN            80
  26.  
  27. typedef struct _RTP_SDES_ITEM {
  28.     BYTE Type;
  29.     BYTE TextLength;
  30.     BYTE Text[RTP_MAX_SDES];
  31. } RTCP_SDES_ITEM, *PRTCP_SDES_ITEM;
  32.  
  33. // RTCP SDES (Source DEScription) types, as described in RFC1889
  34. typedef enum
  35. {
  36.     RTCP_SDES_END,   // END:   SDES Items terminator
  37.     RTCP_SDES_CNAME, // CNAME: Canonical end-point identifier SDES item
  38.     RTCP_SDES_NAME,  // NAME:  User name SDES item
  39.     RTCP_SDES_EMAIL, // EMAIL: Electronic mail address SDES item
  40.     RTCP_SDES_PHONE, // PHONE: Phone number SDES item
  41.     RTCP_SDES_LOC,   // LOC:   Geographic user location SDES item
  42.     RTCP_SDES_TOOL,  // TOOL:  Application or tool name SDES item
  43.     RTCP_SDES_NOTE,  // NOTE:  Notice/status SDES item
  44.     RTCP_SDES_PRIV,  // PRIV:  Private extensions SDES
  45.     RTCP_SDES_LAST   // just a count of the number of items
  46. } RTCP_SDES_TYPE_T;
  47.  
  48. typedef struct _RTCP_SENDER_REPORT {
  49.     DWORD NtpTimestampSec;
  50.     DWORD NtpTimestampFrac;
  51.     DWORD RtpTimestamp;
  52.     DWORD TotalPackets;
  53.     DWORD TotalOctets;
  54. } RTCP_SENDER_REPORT, *PRTCP_SENDER_REPORT;
  55.     
  56. typedef struct _RTCP_RECEIVER_REPORT {
  57.     DWORD FractionLost:8;
  58.     DWORD TotalLostPackets:24;
  59.     DWORD HighestSequenceNum;
  60.     DWORD InterarrivalJitter;
  61.     DWORD LastSRTimestamp;
  62.     DWORD DelaySinceLastSR;
  63. } RTCP_RECEIVER_REPORT, *PRTCP_RECEIVER_REPORT;
  64.  
  65. typedef struct _RTCP_PARTICIPANT_REPORT {
  66.     DWORD                SSRC;
  67.     RTCP_SENDER_REPORT   LastSR;
  68.     RTCP_RECEIVER_REPORT LastIncomingRR;
  69.     RTCP_RECEIVER_REPORT LastOutgoingRR;
  70. } RTCP_PARTICIPANT_REPORT, *PRTCP_PARTICIPANT_REPORT;
  71.     
  72. typedef struct _RTP_HEADER {
  73. //--- NETWORK BYTE ORDER BEGIN ---//
  74.     WORD  NumCSRC:4;                                      
  75.     WORD  fExtHeader:1;                                   
  76.     WORD  fPadding:1;                                     
  77.     WORD  Version:2;                                      
  78.     WORD  PayloadType:7;
  79.     WORD  fMarker:1;
  80. //---- NETWORK BYTE ORDER END ----//
  81.     WORD  SequenceNum;
  82.     DWORD Timestamp;
  83.     DWORD SSRC;
  84. } RTP_HEADER, *PRTP_HEADER;
  85.  
  86. typedef struct _RTP_HEADER_X {
  87.     WORD  Identifier;
  88.     WORD  DataLength;
  89.     DWORD Data[1];
  90. } RTP_HEADER_X, *PRTP_HEADER_X;
  91.  
  92. typedef struct _RTP_ENCRYPTION_INFO {
  93.     DWORD Scheme;
  94.     DWORD Key[RTP_MAX_EKEY];
  95. } RTP_ENCRYPTION_INFO, *PRTP_ENCRYPTION_INFO;
  96.  
  97.  
  98. /////////////////////////////////////////////////
  99. // DXMRTP RTP/RTCP events
  100. /////////////////////////////////////////////////
  101. // The real event received is e.g. for "new source",
  102. // DXMRTP_EVENTBASE + DXMRTP_NEW_SOURCE_EVENT
  103. /////////////////////////////////////////////////
  104.  
  105. #define B2M(b) (1 << (b))
  106.  
  107. #define DXMRTP_EVENTBASE (EC_USER+0)
  108.  
  109. typedef enum 
  110. {
  111.     DXMRTP_NO_EVENT,
  112.     DXMRTP_NEW_SOURCE_EVENT,            // New SSRC detected
  113.     DXMRTP_RECV_RTCP_RECV_REPORT_EVENT,    // RTCP RR received
  114.     DXMRTP_RECV_RTCP_SNDR_REPORT_EVENT,    // RTCP SR received
  115.     DXMRTP_LOCAL_COLLISION_EVENT,        // Collision detected
  116.     DXMRTP_REMOTE_COLLISION_EVENT,        // Remote collision detected
  117.     DXMRTP_TIMEOUT_EVENT,                // SSRC timed-out
  118.     DXMRTP_BYE_EVENT,                    // RTCP Bye received
  119.     DXMRTP_RTCP_WS_RCV_ERROR,            // Winsock error on RTCP rcv
  120.     DXMRTP_RTCP_WS_XMT_ERROR,             // Winsock error on RTCP xmt
  121.     DXMRTP_INACTIVE_EVENT,                // SSRC has been silent
  122.     DXMRTP_ACTIVE_AGAIN_EVENT,            // SSRC has been heard again
  123.     DXMRTP_LOSS_RATE_RR_EVENT,          // Loss rate as reported in an RR
  124.     DXMRTP_LOSS_RATE_LOCAL_EVENT,       // Loss rate locally detected
  125.     DXMRTP_LAST_EVENT
  126. } DXMRTP_EVENT_T;
  127.  
  128. typedef struct _SDES_DATA
  129. {
  130.     DWORD                dwSdesType;            // SDES type: CNAME/NAME/...
  131.     char                sdesBfr[RTP_MAX_SDES];
  132.     DWORD                dwSdesLength;        // SDES length
  133.     DWORD                dwSdesFrequency;    // SDES frequency
  134.     DWORD                dwSdesEncrypted;    // SDES encrypted Y/N ?
  135. } SDES_DATA, *PSDES_DATA;
  136.  
  137. /////////////////////////////////////////////////
  138. // DXMRTP QOS events
  139. /////////////////////////////////////////////////
  140. // The real event received is e.g. for "receivers",
  141. // DXMRTP_QOSEVENTBASE + DXMRTP_QOSEVENT_RECEIVERS
  142. /////////////////////////////////////////////////
  143.  
  144. #define DXMRTP_QOSEVENTBASE (DXMRTP_EVENTBASE + 32)
  145.  
  146. //
  147. // NOTE!:
  148. // Other events may be added related to trying to set up QoS
  149. // (before any QoS event could be fired)
  150. //
  151. typedef enum
  152. {
  153.     DXMRTP_QOSEVENT_NOQOS,
  154.     /* no QoS support is available */
  155.     DXMRTP_QOSEVENT_RECEIVERS,
  156.     /* at least one Reserve has arrived */
  157.     DXMRTP_QOSEVENT_SENDERS,
  158.     /* at least one Path has arrived */
  159.     DXMRTP_QOSEVENT_NO_SENDERS,
  160.     /* there are no senders */
  161.     DXMRTP_QOSEVENT_NO_RECEIVERS,
  162.     /* there are no receivers */
  163.     DXMRTP_QOSEVENT_REQUEST_CONFIRMED,
  164.     /* Reserve has been confirmed */
  165.     DXMRTP_QOSEVENT_ADMISSION_FAILURE,
  166.     /* error due to lack of resources */
  167.     DXMRTP_QOSEVENT_POLICY_FAILURE,
  168.     /* rejected for administrative reasons - bad credentials */
  169.     DXMRTP_QOSEVENT_BAD_STYLE,
  170.     /* unknown or conflicting style */
  171.     DXMRTP_QOSEVENT_BAD_OBJECT,
  172.     /* problem with some part of the filterspec or providerspecific
  173.      * buffer in general */
  174.     DXMRTP_QOSEVENT_TRAFFIC_CTRL_ERROR,
  175.     /* problem with some part of the flowspec */
  176.     DXMRTP_QOSEVENT_GENERIC_ERROR,
  177.     /* general error */
  178.     DXMRTP_QOSEVENT_NOT_ALLOWEDTOSEND,
  179.     /* sender is not allowed to send */
  180.     DXMRTP_QOSEVENT_ALLOWEDTOSEND,
  181.     /* sender is not allowed to send */
  182.     DXMRTP_QOSEVENT_LAST
  183. } DXMRTP_QOSEVENT_T;
  184.  
  185. /////////////////////////////////////////////////
  186. // DXMRTP DEMUX events
  187. /////////////////////////////////////////////////
  188. // The real event received is e.g. for "ssrc mapped",
  189. // RTPDMX_EVENTBASE + RTPDEMUX_SSRC_MAPPED
  190. /////////////////////////////////////////////////
  191. #if !defined(RTPDMX_EVENTBASE)
  192. #define RTPDMX_EVENTBASE (EC_USER+100)
  193.  
  194. typedef enum {
  195.     RTPDEMUX_SSRC_MAPPED,       // The specific SSRC has been mapped
  196.     RTPDEMUX_SSRC_UNMAPPED,     // The specific SSRC has been unmapped
  197.     RTPDEMUX_PIN_MAPPED,        // The specific Pin has been mapped
  198.     RTPDEMUX_PIN_UNMAPPED,      // The specific Pin has been unmapped
  199.     RTPDEMUX_NO_PINS_AVAILABLE, // PT was found, but pin was already mapped
  200.     RTPDEMUX_NO_PAYLOAD_TYPE    // PT was not found
  201. } RTPDEMUX_EVENT_t;
  202. // The Pin passed as a parameter along with PIN_MAPPED and PIN_UNMAPPED
  203. // is a pointer to the connected pin
  204.  
  205. #endif
  206.  
  207. // Maximum number of classes per CPU in
  208. // in the RTP Source Shared Thread scheme
  209. #define RTP_MAX_CLASSES 4
  210.  
  211. // Actually two classes are defined
  212. enum {
  213.     RTP_CLASS_AUDIO,
  214.     RTP_CLASS_VIDEO
  215. };
  216.  
  217. // Reservation styles
  218. enum {
  219.     DXMRTP_RESERVE_WILCARD,  // Usually for N times the AUDIO flow spec
  220.     DXMRTP_RESERVE_EXPLICIT  // Usually for designated VIDEO streams
  221. };
  222.  
  223. #pragma option pop /*P_O_Pop*/
  224. #endif // _INC_RTP
  225.  
  226.  
  227.  
  228.