#ifndef _sdp_options_h_ #define _sdp_options_h_ #include #ifdef __cplusplus extern "C" { #endif struct sdp_options_t { int bundle; int rtcp_mux; // rtp/rtcp port muxer struct { int media; // SDP_M_MEDIA_AUDIO int setup; // SDP_A_SETUP_ACTPASS int proto; // SDP_M_PROTO_RTP_AVP int port[2]; uint8_t payloads[16]; // payload list } m[8]; int count; // media count }; enum { SDP_A_SETUP_NONE, SDP_A_SETUP_ACTPASS, // client/server SDP_A_SETUP_PASSIVE, // server SDP_A_SETUP_ACTIVE, // client SDP_A_SETUP_HOLDCONN, // holdconn }; /// @return SDP_A_SETUP_NONE/SDP_A_SETUP_PASSIVE/SDP_A_SETUP_ACTIVE/SDP_A_SETUP_xxx int sdp_option_setup_from(const char* setup); const char* sdp_option_setup_to(int setup); // RTP = xxxxxxx1 xxxxxxxx // UDP = xxxxxxxx xxxxx000 // TCP = xxxxxxxx xxxxx001 // DCCP = xxxxxxxx xxxxx010 // SCTP = xxxxxxxx xxxxx011 // Feedback = xxxxxxxx xxx1xxxx // SRTP = xxxxxxxx xx1xxxxx // TLS = xxxxxxxx x1xxxxxx // DTLS = xxxxxxxx 1xxxxxxx #define SDP_M_PROTO_TEST_RTP(proto) ( (proto) & 0x0100 ) #define SDP_M_PROTO_TEST_UDP(proto) ( 0x000 == ((proto) & 0x07) ? 1 : 0 ) #define SDP_M_PROTO_TEST_TCP(proto) ( 0x001 == ((proto) & 0x07) ? 1 : 0 ) #define SDP_M_PROTO_TEST_FEEDBACK(proto)( (proto) & 0x10 ) #define SDP_M_PROTO_TEST_SRTP(proto) ( (proto) & 0x20 ) #define SDP_M_PROTO_TEST_TLS(proto) ( (proto) & 0x40 ) #define SDP_M_PROTO_TEST_DTLS(proto) ( (proto) & 0x80 ) enum { SDP_M_PROTO_UKNOWN = 0, SDP_M_PROTO_RTP_AVP = 0x0100, // rfc4566: RTP/AVP or RTP/AVP/UDP SDP_M_PROTO_RTP_AVPF = 0x0110, // rfc4585: RTP/AVPF SDP_M_PROTO_RTP_SAVP = 0x0120, // rfc3711: RTP/SAVP SDP_M_PROTO_RTP_SAVPF = 0x0130, // rfc5124: RTP/SAVPF SDP_M_PROTO_RTP_AVP_TCP = 0x0101, // rfc4571: TCP/RTP/AVP or RTP/AVP/TCP or RTP/TCP/AVP SDP_M_PROTO_RTP_AVPF_TCP = 0x0111, // rfc7850: TCP/RTP/AVPF SDP_M_PROTO_RTP_SAVP_TCP = 0x0121, // rfc7850: TCP/RTP/SAVP SDP_M_PROTO_RTP_SAVPF_TCP = 0x0131, // rfc7850: TCP/RTP/SAVPF SDP_M_PROTO_RTP_SAVP_DTLS_TCP = 0x01A1, // rfc7850: TCP/DTLS/RTP/SAVP SDP_M_PROTO_RTP_SAVPF_DTLS_TCP = 0x01B1, // rfc7850: TCP/DTLS/RTP/SAVPF SDP_M_PROTO_RTP_AVP_TCP_TLS = 0x0141, // rfc7850: TCP/TLS/RTP/AVP SDP_M_PROTO_RTP_AVPF_TCP_TLS = 0x0151, // rfc7850: TCP/TLS/RTP/AVPF SDP_M_PROTO_RTP_SAVP_TLS = 0x0160, // rfc5764: UDP/TLS/RTP/SAVP SDP_M_PROTO_RTP_SAVPF_TLS = 0x0170, // rfc5764: UDP/TLS/RTP/SAVPF SDP_M_PROTO_RTP_SAVP_TLS_DCCP = 0x0162, // rfc5764: DCCP/TLS/RTP/SAVP SDP_M_PROTO_RTP_SAVPF_TLS_DCCP = 0x0172, // rfc5764: DCCP/TLS/RTP/SAVPF SDP_M_PROTO_RAW = 0x0200, // raw SDP_M_PROTO_UDP = 0x0300, // rfc4566/rfc8866: udp SDP_M_PROTO_SCTP_DTLS = 0x0480, // rfc8841: UDP/DTLS/SCTP SDP_M_PROTO_SCTP_DTLS_TCP = 0x0481, // rfc8841: TCP/DTLS/SCTP SDP_M_PROTO_TCP = 0x0001, // rfc4145: TCP SDP_M_PROTO_TLS_TCP = 0x0041, // rfc8122: TCP/TLS }; /// @return SDP_M_PROTO_RAW/SDP_M_PROTO_UDP/SDP_M_PROTO_RTP_AVP/SDP_M_PROTO_XXX int sdp_option_proto_from(const char* proto); const char* sdp_option_proto_to(int proto); int sdp_option_mode_from(const char* mode); const char* sdp_option_mode_to(int mode); int sdp_option_media_from(const char* media); const char* sdp_option_media_to(int media); #ifdef __cplusplus } #endif #endif /* !_sdp_options_h_ */