Bug 1888590 - Mark some subtests on trusted-types-event-handlers.html as failing...
[gecko.git] / third_party / sipcc / sipcc_sdp.h
blob1b7470ad657c1463c8e52659b5a07e5ece220784
1 /* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5 #ifndef _SIPCC_SDP_H_
6 #define _SIPCC_SDP_H_
8 #include "sdp_os_defs.h"
9 #include "ccsdp.h"
11 /* SDP Defines */
13 /* The following defines are used to indicate params that are specified
14 * as the choose parameter or parameters that are invalid. These can
15 * be used where the value required is really a uint16_t, but is represented
16 * by an int32_t.
18 #define SDP_CHOOSE_PARAM (-1)
19 #define SDP_SESSION_LEVEL 0xFFFF
21 #define UNKNOWN_CRYPTO_SUITE "UNKNOWN_CRYPTO_SUITE"
22 #define AES_CM_128_HMAC_SHA1_32 "AES_CM_128_HMAC_SHA1_32"
23 #define AES_CM_128_HMAC_SHA1_80 "AES_CM_128_HMAC_SHA1_80"
24 #define F8_128_HMAC_SHA1_80 "F8_128_HMAC_SHA1_80"
26 /* Pulled in from rtp_defs.h. */
27 #define GET_DYN_PAYLOAD_TYPE_VALUE(a) ((a & 0XFF00) ? ((a & 0XFF00) >> 8) : a)
28 #define SET_PAYLOAD_TYPE_WITH_DYNAMIC(a,b) ((a << 8) | b)
31 * SDP_SRTP_MAX_KEY_SIZE_BYTES
32 * Maximum size for a SRTP Master Key in bytes.
34 #define SDP_SRTP_MAX_KEY_SIZE_BYTES 16
36 * SDP_SRTP_MAX_SALT_SIZE_BYTES
37 * Maximum size for a SRTP Master Salt in bytes.
39 #define SDP_SRTP_MAX_SALT_SIZE_BYTES 14
41 * SDP_SRTP_MAX_MKI_SIZE_BYTES
42 * Maximum size for a SRTP Master Key Index in bytes.
44 #define SDP_SRTP_MAX_MKI_SIZE_BYTES 4
46 /* Max number of characters for Lifetime */
47 #define SDP_SRTP_MAX_LIFETIME_BYTES 16
49 #define SDP_SDESCRIPTIONS_KEY_SIZE_UNKNOWN 0
50 #define SDP_SRTP_CRYPTO_SELECTION_FLAGS_UNKNOWN 0
52 /* Max number of fmtp redundant encodings */
53 #define SDP_FMTP_MAX_REDUNDANT_ENCODINGS 128
56 * SRTP_CONTEXT_SET_*
57 * Set a SRTP Context field flag
59 #define SDP_SRTP_ENCRYPT_MASK 0x00000001
60 #define SDP_SRTP_AUTHENTICATE_MASK 0x00000002
61 #define SDP_SRTCP_ENCRYPT_MASK 0x00000004
62 #define SDP_SRTCP_SSRC_MASK 0x20000000
63 #define SDP_SRTCP_ROC_MASK 0x10000000
64 #define SDP_SRTCP_KDR_MASK 0x08000000
65 #define SDP_SRTCP_KEY_MASK 0x80000000
66 #define SDP_SRTCP_SALT_MASK 0x40000000
68 #define SDP_SRTP_CONTEXT_SET_SSRC(cw) ((cw) |= SDP_SRTCP_SSRC_MASK)
69 #define SDP_SRTP_CONTEXT_SET_ROC(cw) ((cw) |= SDP_SRTCP_ROC_MASK)
70 #define SDP_SRTP_CONTEXT_SET_KDR(cw) ((cw) |= SDP_SRTCP_KDR_MASK)
71 #define SDP_SRTP_CONTEXT_SET_MASTER_KEY(cw) ((cw) |= SDP_SRTCP_KEY_MASK)
72 #define SDP_SRTP_CONTEXT_SET_MASTER_SALT(cw) ((cw) |= SDP_SRTCP_SALT_MASK)
73 #define SDP_SRTP_CONTEXT_SET_ENCRYPT_AUTHENTICATE(cw) \
74 ((cw) |= (SDP_SRTP_ENCRYPT_MASK | SDP_SRTP_AUTHENTICATE_MASK | \
75 SDP_SRTCP_ENCRYPT_MASK))
76 #define SDP_SRTP_CONTEXT_RESET_SSRC(cw) ((cw) &= ~(SDP_SRTCP_SSRC_MASK))
77 #define SDP_SRTP_CONTEXT_RESET_ROC(cw) ((cw) &= ~(SDP_SRTCP_ROC_MASK))
78 #define SDP_SRTP_CONTEXT_RESET_KDR(cw) ((cw) &= ~(SDP_SRTCP_KDR_MASK))
79 #define SDP_CONTEXT_RESET_MASTER_KEY(cw) ((cw) &= ~(SDP_SRTCP_KEY_MASK))
80 #define SDP_CONTEXT_RESET_MASTER_SALT(cw) ((cw) &= ~(SDP_SRTCP_SALT_MASK))
81 #define SDP_EXTMAP_AUDIO_LEVEL "urn:ietf:params:rtp-hdrext:ssrc-audio-level"
83 /* SDP Enum Types */
84 typedef enum {
85 SDP_DEBUG_TRACE,
86 SDP_DEBUG_WARNINGS,
87 SDP_DEBUG_ERRORS,
88 SDP_MAX_DEBUG_TYPES
89 } sdp_debug_e;
91 typedef enum {
92 SDP_CHOOSE_CONN_ADDR,
93 SDP_CHOOSE_PORTNUM,
94 SDP_MAX_CHOOSE_PARAMS
95 } sdp_choose_param_e;
98 /* Token Lines - these must be in the same order they should
99 * appear in an SDP.
101 typedef enum {
102 SDP_TOKEN_V = 0,
103 SDP_TOKEN_O,
104 SDP_TOKEN_S,
105 SDP_TOKEN_I,
106 SDP_TOKEN_U,
107 SDP_TOKEN_E,
108 SDP_TOKEN_P,
109 SDP_TOKEN_C,
110 SDP_TOKEN_B,
111 SDP_TOKEN_T,
112 SDP_TOKEN_R,
113 SDP_TOKEN_Z,
114 SDP_TOKEN_K,
115 SDP_TOKEN_A,
116 SDP_TOKEN_M,
117 SDP_MAX_TOKENS
118 } sdp_token_e;
120 /* Media Types */
121 typedef enum {
122 SDP_MEDIA_AUDIO = 0,
123 SDP_MEDIA_VIDEO,
124 SDP_MEDIA_APPLICATION,
125 SDP_MEDIA_DATA,
126 SDP_MEDIA_CONTROL,
127 SDP_MEDIA_NAS_RADIUS,
128 SDP_MEDIA_NAS_TACACS,
129 SDP_MEDIA_NAS_DIAMETER,
130 SDP_MEDIA_NAS_L2TP,
131 SDP_MEDIA_NAS_LOGIN,
132 SDP_MEDIA_NAS_NONE,
133 SDP_MEDIA_TEXT,
134 SDP_MEDIA_IMAGE,
135 SDP_MAX_MEDIA_TYPES,
136 SDP_MEDIA_UNSUPPORTED,
137 SDP_MEDIA_INVALID
138 } sdp_media_e;
141 /* Connection Network Type */
142 typedef enum {
143 SDP_NT_INTERNET = 0, /* 0 -> IP - In SDP "IN" is defined */
144 /* to mean "Internet" */
145 SDP_NT_ATM, /* 1 -> ATM */
146 SDP_NT_FR, /* 2 -> FRAME RELAY */
147 SDP_NT_LOCAL, /* 3 -> local */
148 SDP_MAX_NETWORK_TYPES,
149 SDP_NT_UNSUPPORTED,
150 SDP_NT_INVALID
151 } sdp_nettype_e;
154 /* Address Type */
155 typedef enum {
156 SDP_AT_IP4 = 0, /* 0 -> IP Version 4 (IP4) */
157 SDP_AT_IP6, /* 1 -> IP Version 6 (IP6) */
158 SDP_AT_NSAP, /* 2 -> 20 byte NSAP address */
159 SDP_AT_EPN, /* 3 -> 32 bytes of endpoint name */
160 SDP_AT_E164, /* 4 -> 15 digit decimal number addr */
161 SDP_AT_GWID, /* 5 -> Private gw id. ASCII string */
162 SDP_MAX_ADDR_TYPES,
163 SDP_AT_UNSUPPORTED,
164 SDP_AT_FQDN,
165 SDP_AT_INVALID
166 } sdp_addrtype_e;
169 /* Transport Types */
171 #define SDP_MAX_PROFILES 3
173 typedef enum {
174 SDP_TRANSPORT_RTPAVP = 0,
175 SDP_TRANSPORT_UDP,
176 SDP_TRANSPORT_UDPTL,
177 SDP_TRANSPORT_CES10,
178 SDP_TRANSPORT_LOCAL,
179 SDP_TRANSPORT_AAL2_ITU,
180 SDP_TRANSPORT_AAL2_ATMF,
181 SDP_TRANSPORT_AAL2_CUSTOM,
182 SDP_TRANSPORT_AAL1AVP,
183 SDP_TRANSPORT_UDPSPRT,
184 SDP_TRANSPORT_RTPSAVP,
185 SDP_TRANSPORT_TCP,
186 SDP_TRANSPORT_RTPSAVPF,
187 SDP_TRANSPORT_DTLSSCTP,
188 SDP_TRANSPORT_RTPAVPF,
189 SDP_TRANSPORT_UDPTLSRTPSAVP,
190 SDP_TRANSPORT_UDPTLSRTPSAVPF,
191 SDP_TRANSPORT_TCPDTLSRTPSAVP,
192 SDP_TRANSPORT_TCPDTLSRTPSAVPF,
193 SDP_TRANSPORT_UDPDTLSSCTP,
194 SDP_TRANSPORT_TCPDTLSSCTP,
195 SDP_MAX_TRANSPORT_TYPES,
196 SDP_TRANSPORT_UNSUPPORTED,
197 SDP_TRANSPORT_INVALID
198 } sdp_transport_e;
201 /* Encryption KeyType */
202 typedef enum {
203 SDP_ENCRYPT_CLEAR, /* 0 -> Key given in the clear */
204 SDP_ENCRYPT_BASE64, /* 1 -> Base64 encoded key */
205 SDP_ENCRYPT_URI, /* 2 -> Ptr to URI */
206 SDP_ENCRYPT_PROMPT, /* 3 -> No key included, prompt user */
207 SDP_MAX_ENCRYPT_TYPES,
208 SDP_ENCRYPT_UNSUPPORTED,
209 SDP_ENCRYPT_INVALID
210 } sdp_encrypt_type_e;
213 /* Known string payload types */
214 typedef enum {
215 SDP_PAYLOAD_T38,
216 SDP_PAYLOAD_XTMR,
217 SDP_PAYLOAD_T120,
218 SDP_MAX_STRING_PAYLOAD_TYPES,
219 SDP_PAYLOAD_UNSUPPORTED,
220 SDP_PAYLOAD_INVALID
221 } sdp_payload_e;
224 /* Payload type indicator */
225 typedef enum {
226 SDP_PAYLOAD_NUMERIC,
227 SDP_PAYLOAD_ENUM
228 } sdp_payload_ind_e;
231 /* Image payload types */
232 typedef enum {
233 SDP_PORT_NUM_ONLY, /* <port> or '$' */
234 SDP_PORT_NUM_COUNT, /* <port>/<number of ports> */
235 SDP_PORT_VPI_VCI, /* <vpi>/<vci> */
236 SDP_PORT_VCCI, /* <vcci> */
237 SDP_PORT_NUM_VPI_VCI, /* <port>/<vpi>/<vci> */
238 SDP_PORT_VCCI_CID, /* <vcci>/<cid> or '$'/'$' */
239 SDP_PORT_NUM_VPI_VCI_CID, /* <port>/<vpi>/<vci>/<cid> */
240 SDP_MAX_PORT_FORMAT_TYPES,
241 SDP_PORT_FORMAT_INVALID
242 } sdp_port_format_e;
245 /* Fmtp attribute format Types */
246 typedef enum {
247 SDP_FMTP_NTE,
248 SDP_FMTP_CODEC_INFO,
249 SDP_FMTP_MODE,
250 SDP_FMTP_DATACHANNEL,
251 SDP_FMTP_UNKNOWN_TYPE,
252 SDP_FMTP_MAX_TYPE
253 } sdp_fmtp_format_type_e;
256 /* T.38 Rate Mgmt Types */
257 typedef enum {
258 SDP_T38_LOCAL_TCF,
259 SDP_T38_TRANSFERRED_TCF,
260 SDP_T38_UNKNOWN_RATE,
261 SDP_T38_MAX_RATES
262 } sdp_t38_ratemgmt_e;
265 /* T.38 udp EC Types */
266 typedef enum {
267 SDP_T38_UDP_REDUNDANCY,
268 SDP_T38_UDP_FEC,
269 SDP_T38_UDPEC_UNKNOWN,
270 SDP_T38_MAX_UDPEC
271 } sdp_t38_udpec_e;
273 /* Bitmaps for manipulating sdp_direction_e */
274 typedef enum {
275 SDP_DIRECTION_FLAG_SEND=0x01,
276 SDP_DIRECTION_FLAG_RECV=0x02
277 } sdp_direction_flag_e;
279 /* Media flow direction */
280 typedef enum {
281 SDP_DIRECTION_INACTIVE = 0,
282 SDP_DIRECTION_SENDONLY = SDP_DIRECTION_FLAG_SEND,
283 SDP_DIRECTION_RECVONLY = SDP_DIRECTION_FLAG_RECV,
284 SDP_DIRECTION_SENDRECV = SDP_DIRECTION_FLAG_SEND | SDP_DIRECTION_FLAG_RECV,
285 SDP_MAX_QOS_DIRECTIONS
286 } sdp_direction_e;
288 #define SDP_DIRECTION_PRINT(arg) \
289 (((sdp_direction_e)(arg)) == SDP_DIRECTION_INACTIVE ? "SDP_DIRECTION_INACTIVE " : \
290 ((sdp_direction_e)(arg)) == SDP_DIRECTION_SENDONLY ? "SDP_DIRECTION_SENDONLY": \
291 ((sdp_direction_e)(arg)) == SDP_DIRECTION_RECVONLY ? "SDP_DIRECTION_RECVONLY ": \
292 ((sdp_direction_e)(arg)) == SDP_DIRECTION_SENDRECV ? " SDP_DIRECTION_SENDRECV": "SDP_MAX_QOS_DIRECTIONS")
295 /* QOS Strength tag */
296 typedef enum {
297 SDP_QOS_STRENGTH_OPT,
298 SDP_QOS_STRENGTH_MAND,
299 SDP_QOS_STRENGTH_SUCC,
300 SDP_QOS_STRENGTH_FAIL,
301 SDP_QOS_STRENGTH_NONE,
302 SDP_MAX_QOS_STRENGTH,
303 SDP_QOS_STRENGTH_UNKNOWN
304 } sdp_qos_strength_e;
307 /* QOS direction */
308 typedef enum {
309 SDP_QOS_DIR_SEND,
310 SDP_QOS_DIR_RECV,
311 SDP_QOS_DIR_SENDRECV,
312 SDP_QOS_DIR_NONE,
313 SDP_MAX_QOS_DIR,
314 SDP_QOS_DIR_UNKNOWN
315 } sdp_qos_dir_e;
317 /* QoS Status types */
318 typedef enum {
319 SDP_QOS_LOCAL,
320 SDP_QOS_REMOTE,
321 SDP_QOS_E2E,
322 SDP_MAX_QOS_STATUS_TYPES,
323 SDP_QOS_STATUS_TYPE_UNKNOWN
324 } sdp_qos_status_types_e;
326 /* QoS Status types */
327 typedef enum {
328 SDP_CURR_QOS_TYPE,
329 SDP_CURR_UNKNOWN_TYPE,
330 SDP_MAX_CURR_TYPES
331 } sdp_curr_type_e;
333 /* QoS Status types */
334 typedef enum {
335 SDP_DES_QOS_TYPE,
336 SDP_DES_UNKNOWN_TYPE,
337 SDP_MAX_DES_TYPES
338 } sdp_des_type_e;
340 /* QoS Status types */
341 typedef enum {
342 SDP_CONF_QOS_TYPE,
343 SDP_CONF_UNKNOWN_TYPE,
344 SDP_MAX_CONF_TYPES
345 } sdp_conf_type_e;
348 /* Named event range result values. */
349 typedef enum {
350 SDP_NO_MATCH,
351 SDP_PARTIAL_MATCH,
352 SDP_FULL_MATCH
353 } sdp_ne_res_e;
355 /* Fmtp attribute parameters for audio/video codec information */
356 typedef enum {
358 /* mainly for audio codecs */
359 SDP_ANNEX_A, /* 0 */
360 SDP_ANNEX_B,
361 SDP_BITRATE,
363 /* for video codecs */
364 SDP_QCIF,
365 SDP_CIF,
366 SDP_MAXBR,
367 SDP_SQCIF,
368 SDP_CIF4,
369 SDP_CIF16,
370 SDP_CUSTOM,
371 SDP_PAR,
372 SDP_CPCF,
373 SDP_BPP,
374 SDP_HRD,
375 SDP_PROFILE,
376 SDP_LEVEL,
377 SDP_INTERLACE,
379 /* H.264 related */
380 SDP_PROFILE_LEVEL_ID, /* 17 */
381 SDP_PARAMETER_SETS,
382 SDP_PACKETIZATION_MODE,
383 SDP_INTERLEAVING_DEPTH,
384 SDP_DEINT_BUF_REQ,
385 SDP_MAX_DON_DIFF,
386 SDP_INIT_BUF_TIME,
388 SDP_MAX_MBPS,
389 SDP_MAX_FS,
390 SDP_MAX_CPB,
391 SDP_MAX_DPB,
392 SDP_MAX_BR,
393 SDP_REDUNDANT_PIC_CAP,
394 SDP_DEINT_BUF_CAP,
395 SDP_MAX_RCMD_NALU_SIZE,
397 SDP_PARAMETER_ADD,
399 /* Annexes - begin */
400 /* Some require special handling as they don't have token=token format*/
401 SDP_ANNEX_D,
402 SDP_ANNEX_F,
403 SDP_ANNEX_I,
404 SDP_ANNEX_J,
405 SDP_ANNEX_T,
407 /* These annexes have token=token format */
408 SDP_ANNEX_K,
409 SDP_ANNEX_N,
410 SDP_ANNEX_P,
412 SDP_MODE,
413 SDP_LEVEL_ASYMMETRY_ALLOWED,
414 SDP_MAX_AVERAGE_BIT_RATE,
415 SDP_USED_TX,
416 SDP_STEREO,
417 SDP_USE_IN_BAND_FEC,
418 SDP_MAX_CODED_AUDIO_BW,
419 SDP_CBR,
420 SDP_MAX_FR,
421 SDP_MAX_PLAYBACK_RATE,
422 SDP_APT,
423 SDP_RTX_TIME,
424 SDP_MAX_FMTP_PARAM,
425 SDP_FMTP_PARAM_UNKNOWN
426 } sdp_fmtp_codec_param_e;
428 /* Fmtp attribute parameters values for
429 fmtp attribute parameters which convey codec
430 information */
432 typedef enum {
433 SDP_YES,
434 SDP_NO,
435 SDP_MAX_FMTP_PARAM_VAL,
436 SDP_FMTP_PARAM_UNKNOWN_VAL
437 } sdp_fmtp_codec_param_val_e;
439 /* silenceSupp suppPref */
440 typedef enum {
441 SDP_SILENCESUPP_PREF_STANDARD,
442 SDP_SILENCESUPP_PREF_CUSTOM,
443 SDP_SILENCESUPP_PREF_NULL, /* "-" */
444 SDP_MAX_SILENCESUPP_PREF,
445 SDP_SILENCESUPP_PREF_UNKNOWN
446 } sdp_silencesupp_pref_e;
448 /* silenceSupp sidUse */
449 typedef enum {
450 SDP_SILENCESUPP_SIDUSE_NOSID,
451 SDP_SILENCESUPP_SIDUSE_FIXED,
452 SDP_SILENCESUPP_SIDUSE_SAMPLED,
453 SDP_SILENCESUPP_SIDUSE_NULL, /* "-" */
454 SDP_MAX_SILENCESUPP_SIDUSE,
455 SDP_SILENCESUPP_SIDUSE_UNKNOWN
456 } sdp_silencesupp_siduse_e;
458 typedef enum {
459 SDP_MEDIADIR_ROLE_PASSIVE,
460 SDP_MEDIADIR_ROLE_ACTIVE,
461 SDP_MEDIADIR_ROLE_BOTH,
462 SDP_MEDIADIR_ROLE_REUSE,
463 SDP_MEDIADIR_ROLE_UNKNOWN,
464 SDP_MAX_MEDIADIR_ROLES,
465 SDP_MEDIADIR_ROLE_UNSUPPORTED,
466 SDP_MEDIADIR_ROLE_INVALID
467 } sdp_mediadir_role_e;
469 typedef enum {
470 SDP_GROUP_ATTR_FID,
471 SDP_GROUP_ATTR_LS,
472 SDP_GROUP_ATTR_ANAT,
473 SDP_GROUP_ATTR_BUNDLE,
474 SDP_MAX_GROUP_ATTR_VAL,
475 SDP_GROUP_ATTR_UNSUPPORTED
476 } sdp_group_attr_e;
478 typedef enum {
479 SDP_SSRC_GROUP_ATTR_DUP,
480 SDP_SSRC_GROUP_ATTR_FEC,
481 SDP_SSRC_GROUP_ATTR_FECFR,
482 SDP_SSRC_GROUP_ATTR_FID,
483 SDP_SSRC_GROUP_ATTR_SIM,
484 SDP_MAX_SSRC_GROUP_ATTR_VAL,
485 SDP_SSRC_GROUP_ATTR_UNSUPPORTED
486 } sdp_ssrc_group_attr_e;
488 typedef enum {
489 SDP_SRC_FILTER_INCL,
490 SDP_SRC_FILTER_EXCL,
491 SDP_MAX_FILTER_MODE,
492 SDP_FILTER_MODE_NOT_PRESENT
493 } sdp_src_filter_mode_e;
495 typedef enum {
496 SDP_RTCP_UNICAST_MODE_REFLECTION,
497 SDP_RTCP_UNICAST_MODE_RSI,
498 SDP_RTCP_MAX_UNICAST_MODE,
499 SDP_RTCP_UNICAST_MODE_NOT_PRESENT
500 } sdp_rtcp_unicast_mode_e;
502 typedef enum {
503 SDP_CONNECTION_NOT_FOUND = -1,
504 SDP_CONNECTION_NEW = 0,
505 SDP_CONNECTION_EXISTING,
506 SDP_MAX_CONNECTION,
507 SDP_CONNECTION_UNKNOWN
508 } sdp_connection_type_e;
510 typedef enum {
511 SDP_SCTP_MEDIA_FMT_WEBRTC_DATACHANNEL,
512 SDP_SCTP_MEDIA_FMT_UNKNOWN
513 } sdp_sctp_media_fmt_type_e;
516 * sdp_srtp_fec_order_t
517 * This type defines the order in which to perform FEC
518 * (Forward Error Correction) and SRTP Encryption/Authentication.
520 typedef enum sdp_srtp_fec_order_t_ {
521 SDP_SRTP_THEN_FEC, /* upon sending perform SRTP then FEC */
522 SDP_FEC_THEN_SRTP, /* upon sending perform FEC then SRTP */
523 SDP_SRTP_FEC_SPLIT /* upon sending perform SRTP Encryption,
524 * then FEC, the SRTP Authentication */
525 } sdp_srtp_fec_order_t;
529 * sdp_srtp_crypto_suite_t
530 * Enumeration of the crypto suites supported for MGCP SRTP
531 * package.
533 typedef enum sdp_srtp_crypto_suite_t_ {
534 SDP_SRTP_UNKNOWN_CRYPTO_SUITE = 0,
535 SDP_SRTP_AES_CM_128_HMAC_SHA1_32,
536 SDP_SRTP_AES_CM_128_HMAC_SHA1_80,
537 SDP_SRTP_F8_128_HMAC_SHA1_80,
538 SDP_SRTP_MAX_NUM_CRYPTO_SUITES
539 } sdp_srtp_crypto_suite_t;
542 * SDP SRTP crypto suite definition parameters
544 * SDP_SRTP_<crypto_suite>_KEY_BYTES
545 * The size of a master key for <crypto_suite> in bytes.
547 * SDP_SRTP_<crypto_suite>_SALT_BYTES
548 * The size of a master salt for <crypto_suite> in bytes.
550 #define SDP_SRTP_AES_CM_128_HMAC_SHA1_32_KEY_BYTES 16
551 #define SDP_SRTP_AES_CM_128_HMAC_SHA1_32_SALT_BYTES 14
552 #define SDP_SRTP_AES_CM_128_HMAC_SHA1_80_KEY_BYTES 16
553 #define SDP_SRTP_AES_CM_128_HMAC_SHA1_80_SALT_BYTES 14
554 #define SDP_SRTP_F8_128_HMAC_SHA1_80_KEY_BYTES 16
555 #define SDP_SRTP_F8_128_HMAC_SHA1_80_SALT_BYTES 14
557 /* SDP Defines */
559 #define SDP_MAX_LONG_STRING_LEN 4096 /* Max len for long SDP strings */
560 #define SDP_MAX_STRING_LEN 256 /* Max len for SDP string */
561 #define SDP_MAX_SHORT_STRING_LEN 12 /* Max len for a short SDP string */
562 #define SDP_MAX_PAYLOAD_TYPES 30 /* Max payload types in m= line */
563 #define SDP_TOKEN_LEN 2 /* Len of <token>= */
564 #define SDP_CURRENT_VERSION 0 /* Current default SDP version */
565 #define SDP_MAX_PORT_PARAMS 4 /* Max m= port params - x/x/x/x */
566 #define SDP_MIN_DYNAMIC_PAYLOAD 96 /* Min dynamic payload */
567 #define SDP_MAX_DYNAMIC_PAYLOAD 127 /* Max dynamic payload */
568 #define SDP_MIN_CIF_VALUE 1 /* applies to all QCIF,CIF,CIF4,CIF16,SQCIF */
569 #define SDP_MAX_CIF_VALUE 32 /* applies to all QCIF,CIF,CIF4,CIF16,SQCIF */
570 #define SDP_MAX_SRC_ADDR_LIST 1 /* Max source addrs for which filter applies */
573 #define SDP_DEFAULT_PACKETIZATION_MODE_VALUE 0 /* max packetization mode for H.264 */
574 #define SDP_MAX_PACKETIZATION_MODE_VALUE 2 /* max packetization mode for H.264 */
575 #define SDP_INVALID_PACKETIZATION_MODE_VALUE 255
577 #define SDP_MAX_LEVEL_ASYMMETRY_ALLOWED_VALUE 1 /* max level asymmetry allowed value for H.264 */
578 #define SDP_DEFAULT_LEVEL_ASYMMETRY_ALLOWED_VALUE 0 /* default level asymmetry allowed value for H.264 */
579 #define SDP_INVALID_LEVEL_ASYMMETRY_ALLOWED_VALUE 2 /* invalid value for level-asymmetry-allowed param for H.264 */
582 /* Max number of stream ids that can be grouped together */
583 #define SDP_MAX_MEDIA_STREAMS 128
585 #define SDP_UNSUPPORTED "Unsupported"
587 #define SDP_MAX_PROFILE_VALUE 10
588 #define SDP_MAX_LEVEL_VALUE 100
589 #define SDP_MIN_PROFILE_LEVEL_VALUE 0
590 #define SDP_MAX_TTL_VALUE 255
591 #define SDP_MIN_MCAST_ADDR_HI_BIT_VAL 224
592 #define SDP_MAX_MCAST_ADDR_HI_BIT_VAL 239
594 #define SDP_MAX_SSRC_GROUP_SSRCS 32 /* max number of ssrcs allowed in a ssrc-group */
596 /* SDP Enum Types */
598 typedef enum {
599 SDP_ERR_INVALID_CONF_PTR,
600 SDP_ERR_INVALID_SDP_PTR,
601 SDP_ERR_INTERNAL,
602 SDP_MAX_ERR_TYPES
603 } sdp_errmsg_e;
605 /* SDP Structure Definitions */
607 /* String names of varios tokens */
608 typedef struct {
609 char *name;
610 uint8_t strlen;
611 } sdp_namearray_t;
613 /* c= line info */
614 typedef struct {
615 sdp_nettype_e nettype;
616 sdp_addrtype_e addrtype;
617 char conn_addr[SDP_MAX_STRING_LEN+1];
618 tinybool is_multicast;
619 uint16_t ttl;
620 uint16_t num_of_addresses;
621 } sdp_conn_t;
623 /* t= line info */
624 typedef struct sdp_timespec {
625 char start_time[SDP_MAX_STRING_LEN+1];
626 char stop_time[SDP_MAX_STRING_LEN+1];
627 struct sdp_timespec *next_p;
628 } sdp_timespec_t;
631 /* k= line info */
632 typedef struct sdp_encryptspec {
633 sdp_encrypt_type_e encrypt_type;
634 char encrypt_key[SDP_MAX_STRING_LEN+1];
635 } sdp_encryptspec_t;
638 /* FMTP attribute deals with named events in the range of 0-255 as
639 * defined in RFC 2833 */
640 #define SDP_MIN_NE_VALUE 0
641 #define SDP_MAX_NE_VALUES 256
642 #define SDP_NE_BITS_PER_WORD ( sizeof(uint32_t) * 8 )
643 #define SDP_NE_NUM_BMAP_WORDS ((SDP_MAX_NE_VALUES + SDP_NE_BITS_PER_WORD - 1)/SDP_NE_BITS_PER_WORD )
644 #define SDP_NE_BIT_0 ( 0x00000001 )
645 #define SDP_NE_ALL_BITS ( 0xFFFFFFFF )
647 #define SDP_DEINT_BUF_REQ_FLAG 0x1
648 #define SDP_INIT_BUF_TIME_FLAG 0x2
649 #define SDP_MAX_RCMD_NALU_SIZE_FLAG 0x4
650 #define SDP_DEINT_BUF_CAP_FLAG 0x8
652 #define SDP_FMTP_UNUSED 0xFFFF
654 typedef struct sdp_fmtp {
655 uint16_t payload_num;
656 uint32_t maxval; /* maxval optimizes bmap search */
657 uint32_t bmap[ SDP_NE_NUM_BMAP_WORDS ];
658 sdp_fmtp_format_type_e fmtp_format; /* Gives the format type
659 for FMTP attribute*/
660 tinybool annexb_required;
661 tinybool annexa_required;
663 tinybool annexa;
664 tinybool annexb;
665 uint32_t bitrate;
666 uint32_t mode;
668 /* some OPUS specific fmtp params */
669 uint32_t maxplaybackrate;
670 uint32_t maxaveragebitrate;
671 uint16_t usedtx;
672 uint16_t stereo;
673 uint16_t useinbandfec;
674 char maxcodedaudiobandwidth[SDP_MAX_STRING_LEN+1];
675 uint16_t cbr;
677 /* BEGIN - All Video related FMTP parameters */
678 uint16_t qcif;
679 uint16_t cif;
680 uint16_t maxbr;
681 uint16_t sqcif;
682 uint16_t cif4;
683 uint16_t cif16;
685 uint16_t custom_x;
686 uint16_t custom_y;
687 uint16_t custom_mpi;
688 /* CUSTOM=360,240,4 implies X-AXIS=360, Y-AXIS=240; MPI=4 */
689 uint16_t par_width;
690 uint16_t par_height;
691 /* PAR=12:11 implies par_width=12, par_height=11 */
693 /* CPCF should be a float. IOS does not support float and so it is uint16_t */
694 /* For portable stack, CPCF should be defined as float and the parsing should
695 * be modified accordingly */
696 uint16_t cpcf;
697 uint16_t bpp;
698 uint16_t hrd;
700 int16_t profile;
701 int16_t level;
702 tinybool is_interlace;
704 /* some more H.264 specific fmtp params */
705 char profile_level_id[SDP_MAX_STRING_LEN+1];
706 char parameter_sets[SDP_MAX_STRING_LEN+1];
707 uint16_t packetization_mode;
708 uint16_t level_asymmetry_allowed;
709 uint16_t interleaving_depth;
710 uint32_t deint_buf_req;
711 uint32_t max_don_diff;
712 uint32_t init_buf_time;
714 uint32_t max_mbps;
715 uint32_t max_fs;
716 uint32_t max_fr;
717 uint32_t max_cpb;
718 uint32_t max_dpb;
719 uint32_t max_br;
720 tinybool redundant_pic_cap;
721 uint32_t deint_buf_cap;
722 uint32_t max_rcmd_nalu_size;
723 uint16_t parameter_add;
725 tinybool annex_d;
727 tinybool annex_f;
728 tinybool annex_i;
729 tinybool annex_j;
730 tinybool annex_t;
732 /* H.263 codec requires annex K,N and P to have values */
733 uint16_t annex_k_val;
734 uint16_t annex_n_val;
736 /* RFC 5109 Section 4.2 for specifying redundant encodings */
737 uint8_t redundant_encodings[SDP_FMTP_MAX_REDUNDANT_ENCODINGS];
739 /* RFC 2833 Section 3.9 (4733) for specifying support DTMF tones:
740 The list of values consists of comma-separated elements, which
741 can be either a single decimal number or two decimal numbers
742 separated by a hyphen (dash), where the second number is larger
743 than the first. No whitespace is allowed between numbers or
744 hyphens. The list does not have to be sorted.
746 char dtmf_tones[SDP_MAX_STRING_LEN+1];
748 /* Annex P can take one or more values in the range 1-4 . e.g P=1,3 */
749 uint16_t annex_p_val_picture_resize; /* 1 = four; 2 = sixteenth */
750 uint16_t annex_p_val_warp; /* 3 = half; 4=sixteenth */
752 uint8_t flag;
754 /* RTX parameters */
755 uint8_t apt;
756 tinybool has_rtx_time;
757 uint32_t rtx_time;
759 /* END - All Video related FMTP parameters */
761 } sdp_fmtp_t;
763 /* a=sctpmap line used for Datachannels */
764 typedef struct sdp_sctpmap {
765 uint16_t port;
766 uint32_t streams; /* Num streams per Datachannel */
767 char protocol[SDP_MAX_STRING_LEN+1];
768 } sdp_sctpmap_t;
770 #define SDP_MAX_MSID_LEN 64
772 typedef struct sdp_msid {
773 char identifier[SDP_MAX_MSID_LEN+1];
774 char appdata[SDP_MAX_MSID_LEN+1];
775 } sdp_msid_t;
777 /* a=qos|secure|X-pc-qos|X-qos info */
778 typedef struct sdp_qos {
779 sdp_qos_strength_e strength;
780 sdp_qos_dir_e direction;
781 tinybool confirm;
782 sdp_qos_status_types_e status_type;
783 } sdp_qos_t;
785 /* a=curr:qos status_type direction */
786 typedef struct sdp_curr {
787 sdp_curr_type_e type;
788 sdp_qos_status_types_e status_type;
789 sdp_qos_dir_e direction;
790 } sdp_curr_t;
792 /* a=des:qos strength status_type direction */
793 typedef struct sdp_des {
794 sdp_des_type_e type;
795 sdp_qos_strength_e strength;
796 sdp_qos_status_types_e status_type;
797 sdp_qos_dir_e direction;
798 } sdp_des_t;
800 /* a=conf:qos status_type direction */
801 typedef struct sdp_conf {
802 sdp_conf_type_e type;
803 sdp_qos_status_types_e status_type;
804 sdp_qos_dir_e direction;
805 } sdp_conf_t;
808 /* a=rtpmap or a=sprtmap info */
809 typedef struct sdp_transport_map {
810 uint16_t payload_num;
811 char encname[SDP_MAX_STRING_LEN+1];
812 uint32_t clockrate;
813 uint16_t num_chan;
814 } sdp_transport_map_t;
817 /* a=rtr info */
818 typedef struct sdp_rtr {
819 tinybool confirm;
820 } sdp_rtr_t;
822 /* a=subnet info */
823 typedef struct sdp_subnet {
824 sdp_nettype_e nettype;
825 sdp_addrtype_e addrtype;
826 char addr[SDP_MAX_STRING_LEN+1];
827 int32_t prefix;
828 } sdp_subnet_t;
831 /* a=X-pc-codec info */
832 typedef struct sdp_pccodec {
833 uint16_t num_payloads;
834 ushort payload_type[SDP_MAX_PAYLOAD_TYPES];
835 } sdp_pccodec_t;
837 /* a=direction info */
838 typedef struct sdp_comediadir {
839 sdp_mediadir_role_e role;
840 tinybool conn_info_present;
841 sdp_conn_t conn_info;
842 uint32_t src_port;
843 } sdp_comediadir_t;
847 /* a=silenceSupp info */
848 typedef struct sdp_silencesupp {
849 tinybool enabled;
850 tinybool timer_null;
851 uint16_t timer;
852 sdp_silencesupp_pref_e pref;
853 sdp_silencesupp_siduse_e siduse;
854 tinybool fxnslevel_null;
855 uint8_t fxnslevel;
856 } sdp_silencesupp_t;
860 * a=mptime info */
861 /* Note that an interval value of zero corresponds to
862 * the "-" syntax on the a= line.
864 typedef struct sdp_mptime {
865 uint16_t num_intervals;
866 ushort intervals[SDP_MAX_PAYLOAD_TYPES];
867 } sdp_mptime_t;
870 * a=X-sidin:<val>, a=X-sidout:< val> and a=X-confid: <val>
871 * Stream Id,ConfID related attributes to be used for audio/video conferencing
875 typedef struct sdp_stream_data {
876 char x_sidin[SDP_MAX_STRING_LEN+1];
877 char x_sidout[SDP_MAX_STRING_LEN+1];
878 char x_confid[SDP_MAX_STRING_LEN+1];
879 sdp_group_attr_e group_attr; /* FID or LS */
880 uint16_t num_group_id;
881 char * group_ids[SDP_MAX_MEDIA_STREAMS];
882 } sdp_stream_data_t;
884 typedef struct sdp_msid_semantic {
885 char semantic[SDP_MAX_STRING_LEN+1];
886 char * msids[SDP_MAX_MEDIA_STREAMS];
887 } sdp_msid_semantic_t;
890 * a=source-filter:<filter-mode> <filter-spec>
891 * <filter-spec> = <nettype> <addrtype> <dest-addr> <src_addr><src_addr>...
892 * One or more source addresses to apply filter, for one or more connection
893 * address in unicast/multicast environments
895 typedef struct sdp_source_filter {
896 sdp_src_filter_mode_e mode;
897 sdp_nettype_e nettype;
898 sdp_addrtype_e addrtype;
899 char dest_addr[SDP_MAX_STRING_LEN+1];
900 uint16_t num_src_addr;
901 char src_list[SDP_MAX_SRC_ADDR_LIST+1][SDP_MAX_STRING_LEN+1];
902 } sdp_source_filter_t;
905 * a=rtcp-fb:<payload-type> <feedback-type> [<feedback-parameters>]
906 * Defines RTCP feedback parameters
908 #define SDP_ALL_PAYLOADS 0xFFFF
909 typedef struct sdp_fmtp_fb {
910 uint16_t payload_num; /* can be SDP_ALL_PAYLOADS */
911 sdp_rtcp_fb_type_e feedback_type;
912 union {
913 sdp_rtcp_fb_ack_type_e ack;
914 sdp_rtcp_fb_ccm_type_e ccm;
915 sdp_rtcp_fb_nack_type_e nack;
916 uint32_t trr_int;
917 } param;
918 char extra[SDP_MAX_STRING_LEN + 1]; /* Holds any trailing information that
919 cannot be represented by preceding
920 fields. */
921 } sdp_fmtp_fb_t;
923 typedef struct sdp_rtcp {
924 sdp_nettype_e nettype;
925 sdp_addrtype_e addrtype;
926 char addr[SDP_MAX_STRING_LEN+1];
927 uint16_t port;
928 } sdp_rtcp_t;
931 * b=<bw-modifier>:<val>
934 typedef struct sdp_bw_data {
935 struct sdp_bw_data *next_p;
936 sdp_bw_modifier_e bw_modifier;
937 int bw_val;
938 } sdp_bw_data_t;
941 * This structure houses a linked list of sdp_bw_data_t instances. Each
942 * sdp_bw_data_t instance represents one b= line.
944 typedef struct sdp_bw {
945 uint16_t bw_data_count;
946 sdp_bw_data_t *bw_data_list;
947 } sdp_bw_t;
949 /* Media lines for AAL2 may have more than one transport type defined
950 * each with its own payload type list. These are referred to as
951 * profile types instead of transport types. This structure is used
952 * to handle these multiple profile types. Note: One additional profile
953 * field is needed because of the way parsing is done. This is not an
954 * error. */
955 typedef struct sdp_media_profiles {
956 uint16_t num_profiles;
957 sdp_transport_e profile[SDP_MAX_PROFILES+1];
958 uint16_t num_payloads[SDP_MAX_PROFILES];
959 sdp_payload_ind_e payload_indicator[SDP_MAX_PROFILES][SDP_MAX_PAYLOAD_TYPES];
960 uint16_t payload_type[SDP_MAX_PROFILES][SDP_MAX_PAYLOAD_TYPES];
961 } sdp_media_profiles_t;
963 * a=extmap:<value>["/"<direction>] <URI> <extensionattributes>
966 typedef struct sdp_extmap {
967 uint16_t id;
968 sdp_direction_e media_direction;
969 tinybool media_direction_specified;
970 char uri[SDP_MAX_STRING_LEN+1];
971 char extension_attributes[SDP_MAX_STRING_LEN+1];
972 } sdp_extmap_t;
974 typedef struct sdp_ssrc {
975 uint32_t ssrc;
976 char attribute[SDP_MAX_STRING_LEN + 1];
977 } sdp_ssrc_t;
979 typedef struct sdp_ssrc_group {
980 sdp_ssrc_group_attr_e semantic;
981 uint16_t num_ssrcs;
982 uint32_t ssrcs[SDP_MAX_SSRC_GROUP_SSRCS];
983 } sdp_ssrc_group_t;
986 * sdp_srtp_crypto_context_t
987 * This type is used to hold cryptographic context information.
990 typedef struct sdp_srtp_crypto_context_t_ {
991 int32_t tag;
992 unsigned long selection_flags;
993 sdp_srtp_crypto_suite_t suite;
994 unsigned char master_key[SDP_SRTP_MAX_KEY_SIZE_BYTES];
995 unsigned char master_salt[SDP_SRTP_MAX_SALT_SIZE_BYTES];
996 unsigned char master_key_size_bytes;
997 unsigned char master_salt_size_bytes;
998 unsigned long ssrc; /* not used */
999 unsigned long roc; /* not used */
1000 unsigned long kdr; /* not used */
1001 unsigned short seq; /* not used */
1002 sdp_srtp_fec_order_t fec_order; /* not used */
1003 unsigned char master_key_lifetime[SDP_SRTP_MAX_LIFETIME_BYTES];
1004 unsigned char mki[SDP_SRTP_MAX_MKI_SIZE_BYTES];
1005 uint16_t mki_size_bytes;
1006 char* session_parameters;
1007 } sdp_srtp_crypto_context_t;
1010 /* m= line info and associated attribute list */
1011 /* Note: Most of the port parameter values are 16-bit values. We set
1012 * the type to int32_t so we can return either a 16-bit value or the
1013 * choose value. */
1014 typedef struct sdp_mca {
1015 sdp_media_e media;
1016 sdp_conn_t conn;
1017 sdp_transport_e transport;
1018 sdp_port_format_e port_format;
1019 int32_t port;
1020 int32_t sctpport;
1021 sdp_sctp_media_fmt_type_e sctp_fmt;
1022 int32_t num_ports;
1023 int32_t vpi;
1024 uint32_t vci; /* VCI needs to be 32-bit */
1025 int32_t vcci;
1026 int32_t cid;
1027 uint16_t num_payloads;
1028 sdp_payload_ind_e payload_indicator[SDP_MAX_PAYLOAD_TYPES];
1029 uint16_t payload_type[SDP_MAX_PAYLOAD_TYPES];
1030 sdp_media_profiles_t *media_profiles_p;
1031 tinybool sessinfo_found;
1032 sdp_encryptspec_t encrypt;
1033 sdp_bw_t bw;
1034 sdp_attr_e media_direction; /* Either INACTIVE, SENDONLY,
1035 RECVONLY, or SENDRECV */
1036 uint32_t mid;
1037 uint32_t line_number;
1038 struct sdp_attr *media_attrs_p;
1039 struct sdp_mca *next_p;
1040 } sdp_mca_t;
1043 /* generic a= line info */
1044 typedef struct sdp_attr {
1045 sdp_attr_e type;
1046 uint32_t line_number;
1047 union {
1048 tinybool boolean_val;
1049 uint32_t u32_val;
1050 char string_val[SDP_MAX_STRING_LEN+1];
1051 char *stringp;
1052 char ice_attr[SDP_MAX_STRING_LEN+1];
1053 sdp_fmtp_t fmtp;
1054 sdp_sctpmap_t sctpmap;
1055 sdp_msid_t msid;
1056 sdp_qos_t qos;
1057 sdp_curr_t curr;
1058 sdp_des_t des;
1059 sdp_conf_t conf;
1060 sdp_transport_map_t transport_map; /* A rtpmap or sprtmap */
1061 sdp_subnet_t subnet;
1062 sdp_t38_ratemgmt_e t38ratemgmt;
1063 sdp_t38_udpec_e t38udpec;
1064 sdp_pccodec_t pccodec;
1065 sdp_silencesupp_t silencesupp;
1066 sdp_mca_t *cap_p; /* A X-CAP or CDSC attribute */
1067 sdp_rtr_t rtr;
1068 sdp_comediadir_t comediadir;
1069 sdp_srtp_crypto_context_t srtp_context;
1070 sdp_mptime_t mptime;
1071 sdp_stream_data_t stream_data;
1072 sdp_msid_semantic_t msid_semantic;
1073 char unknown[SDP_MAX_STRING_LEN+1];
1074 sdp_source_filter_t source_filter;
1075 sdp_fmtp_fb_t rtcp_fb;
1076 sdp_rtcp_t rtcp;
1077 sdp_setup_type_e setup;
1078 sdp_connection_type_e connection;
1079 sdp_extmap_t extmap;
1080 sdp_ssrc_t ssrc;
1081 sdp_ssrc_group_t ssrc_group;
1082 } attr;
1083 struct sdp_attr *next_p;
1084 } sdp_attr_t;
1085 typedef struct sdp_srtp_crypto_suite_list_ {
1086 sdp_srtp_crypto_suite_t crypto_suite_val;
1087 char * crypto_suite_str;
1088 unsigned char key_size_bytes;
1089 unsigned char salt_size_bytes;
1090 } sdp_srtp_crypto_suite_list;
1092 typedef void (*sdp_parse_error_handler)(void *context,
1093 uint32_t line,
1094 const char *message);
1096 /* Application configuration options */
1097 typedef struct sdp_conf_options {
1098 tinybool debug_flag[SDP_MAX_DEBUG_TYPES];
1099 tinybool version_reqd;
1100 tinybool owner_reqd;
1101 tinybool session_name_reqd;
1102 tinybool timespec_reqd;
1103 tinybool media_supported[SDP_MAX_MEDIA_TYPES];
1104 tinybool nettype_supported[SDP_MAX_NETWORK_TYPES];
1105 tinybool addrtype_supported[SDP_MAX_ADDR_TYPES];
1106 tinybool transport_supported[SDP_MAX_TRANSPORT_TYPES];
1107 tinybool allow_choose[SDP_MAX_CHOOSE_PARAMS];
1108 /* Statistics counts */
1109 uint32_t num_builds;
1110 uint32_t num_parses;
1111 uint32_t num_not_sdp_desc;
1112 uint32_t num_invalid_token_order;
1113 uint32_t num_invalid_param;
1114 uint32_t num_no_resource;
1115 struct sdp_conf_options *next_p;
1116 sdp_parse_error_handler error_handler;
1117 void *error_handler_context;
1118 } sdp_conf_options_t;
1121 /* Session level SDP info with pointers to media line info. */
1122 /* Elements here that can only be one of are included directly. Elements */
1123 /* that can be more than one are pointers. */
1124 typedef struct {
1125 sdp_conf_options_t *conf_p;
1126 tinybool debug_flag[SDP_MAX_DEBUG_TYPES];
1127 char debug_str[SDP_MAX_STRING_LEN+1];
1128 uint32_t debug_id;
1129 int32_t version; /* version is really a uint16_t */
1130 char owner_name[SDP_MAX_STRING_LEN+1];
1131 char owner_sessid[SDP_MAX_STRING_LEN+1];
1132 char owner_version[SDP_MAX_STRING_LEN+1];
1133 sdp_nettype_e owner_network_type;
1134 sdp_addrtype_e owner_addr_type;
1135 char owner_addr[SDP_MAX_STRING_LEN+1];
1136 char sessname[SDP_MAX_STRING_LEN+1];
1137 tinybool sessinfo_found;
1138 tinybool uri_found;
1139 sdp_conn_t default_conn;
1140 sdp_timespec_t *timespec_p;
1141 sdp_encryptspec_t encrypt;
1142 sdp_bw_t bw;
1143 sdp_attr_t *sess_attrs_p;
1145 /* Info to help with building capability attributes. */
1146 uint16_t cur_cap_num;
1147 sdp_mca_t *cur_cap_p;
1148 /* Info to help parsing X-cpar attrs. */
1149 uint16_t cap_valid;
1150 uint16_t last_cap_inst;
1151 /* Info to help building X-cpar/cpar attrs. */
1152 sdp_attr_e last_cap_type;
1154 /* Facilitates reporting line number for SDP errors */
1155 uint32_t parse_line;
1157 /* MCA - Media, connection, and attributes */
1158 sdp_mca_t *mca_p;
1159 ushort mca_count;
1160 } sdp_t;
1163 /* Token processing table. */
1164 typedef struct {
1165 char *name;
1166 sdp_result_e (*parse_func)(sdp_t *sdp_p, uint16_t level, const char *ptr);
1167 sdp_result_e (*build_func)(sdp_t *sdp_p, uint16_t level, flex_string *fs);
1168 } sdp_tokenarray_t;
1170 /* Attribute processing table. */
1171 typedef struct {
1172 char *name;
1173 uint16_t strlen;
1174 sdp_result_e (*parse_func)(sdp_t *sdp_p, sdp_attr_t *attr_p,
1175 const char *ptr);
1176 sdp_result_e (*build_func)(sdp_t *sdp_p, sdp_attr_t *attr_p,
1177 flex_string *fs);
1178 } sdp_attrarray_t;
1181 /* Prototypes */
1183 /* sdp_config.c */
1184 extern sdp_conf_options_t *sdp_init_config(void);
1185 extern void sdp_free_config(sdp_conf_options_t *config_p);
1186 extern void sdp_appl_debug(sdp_conf_options_t *config_p, sdp_debug_e debug_type,
1187 tinybool debug_flag);
1188 extern void sdp_require_version(sdp_conf_options_t *config_p, tinybool version_required);
1189 extern void sdp_require_owner(sdp_conf_options_t *config_p, tinybool owner_required);
1190 extern void sdp_require_session_name(sdp_conf_options_t *config_p,
1191 tinybool sess_name_required);
1192 extern void sdp_require_timespec(sdp_conf_options_t *config_p, tinybool timespec_required);
1193 extern void sdp_media_supported(sdp_conf_options_t *config_p, sdp_media_e media_type,
1194 tinybool media_supported);
1195 extern void sdp_nettype_supported(sdp_conf_options_t *config_p, sdp_nettype_e nettype,
1196 tinybool nettype_supported);
1197 extern void sdp_addrtype_supported(sdp_conf_options_t *config_p, sdp_addrtype_e addrtype,
1198 tinybool addrtype_supported);
1199 extern void sdp_transport_supported(sdp_conf_options_t *config_p, sdp_transport_e transport,
1200 tinybool transport_supported);
1201 extern void sdp_allow_choose(sdp_conf_options_t *config_p, sdp_choose_param_e param,
1202 tinybool choose_allowed);
1203 extern void sdp_config_set_error_handler(sdp_conf_options_t *config_p,
1204 sdp_parse_error_handler handler,
1205 void *context);
1207 /* sdp_main.c */
1208 extern sdp_t *sdp_init_description(sdp_conf_options_t *config_p);
1209 extern void sdp_debug(sdp_t *sdp_ptr, sdp_debug_e debug_type, tinybool debug_flag);
1210 extern void sdp_set_string_debug(sdp_t *sdp_ptr, const char *debug_str);
1211 extern sdp_result_e sdp_parse(sdp_t *sdp_ptr, const char *buf, size_t len);
1212 extern sdp_result_e sdp_build(sdp_t *sdp_ptr, flex_string *fs);
1213 extern sdp_result_e sdp_free_description(sdp_t *sdp_ptr);
1214 extern void sdp_parse_error(sdp_t *sdp, const char *format, ...);
1216 extern const char *sdp_get_result_name(sdp_result_e rc);
1219 /* sdp_access.c */
1220 extern tinybool sdp_version_valid(sdp_t *sdp_p);
1221 extern int32_t sdp_get_version(sdp_t *sdp_p);
1222 extern sdp_result_e sdp_set_version(sdp_t *sdp_p, int32_t version);
1224 extern tinybool sdp_owner_valid(sdp_t *sdp_p);
1225 extern const char *sdp_get_owner_username(sdp_t *sdp_p);
1226 extern const char *sdp_get_owner_sessionid(sdp_t *sdp_p);
1227 extern const char *sdp_get_owner_version(sdp_t *sdp_p);
1228 extern sdp_nettype_e sdp_get_owner_network_type(sdp_t *sdp_p);
1229 extern sdp_addrtype_e sdp_get_owner_address_type(sdp_t *sdp_p);
1230 extern const char *sdp_get_owner_address(sdp_t *sdp_p);
1231 extern sdp_result_e sdp_set_owner_username(sdp_t *sdp_p, const char *username);
1232 extern sdp_result_e sdp_set_owner_sessionid(sdp_t *sdp_p, const char *sessid);
1233 extern sdp_result_e sdp_set_owner_version(sdp_t *sdp_p, const char *version);
1234 extern sdp_result_e sdp_set_owner_network_type(sdp_t *sdp_p,
1235 sdp_nettype_e network_type);
1236 extern sdp_result_e sdp_set_owner_address_type(sdp_t *sdp_p,
1237 sdp_addrtype_e address_type);
1238 extern sdp_result_e sdp_set_owner_address(sdp_t *sdp_p, const char *address);
1240 extern tinybool sdp_session_name_valid(sdp_t *sdp_p);
1241 extern const char *sdp_get_session_name(sdp_t *sdp_p);
1242 extern sdp_result_e sdp_set_session_name(sdp_t *sdp_p, const char *sessname);
1244 extern tinybool sdp_timespec_valid(sdp_t *sdp_ptr);
1245 extern const char *sdp_get_time_start(sdp_t *sdp_ptr);
1246 extern const char *sdp_get_time_stop(sdp_t *sdp_ptr);
1247 sdp_result_e sdp_set_time_start(sdp_t *sdp_p, const char *start_time);
1248 sdp_result_e sdp_set_time_stop(sdp_t *sdp_p, const char *stop_time);
1250 extern tinybool sdp_encryption_valid(sdp_t *sdp_p, uint16_t level);
1251 extern sdp_encrypt_type_e sdp_get_encryption_method(sdp_t *sdp_p, uint16_t level);
1252 extern const char *sdp_get_encryption_key(sdp_t *sdp_p, uint16_t level);
1254 extern tinybool sdp_connection_valid(sdp_t *sdp_p, uint16_t level);
1255 extern tinybool sdp_bw_line_exists(sdp_t *sdp_p, uint16_t level, uint16_t inst_num);
1256 extern tinybool sdp_bandwidth_valid(sdp_t *sdp_p, uint16_t level, uint16_t inst_num);
1257 extern sdp_nettype_e sdp_get_conn_nettype(sdp_t *sdp_p, uint16_t level);
1258 extern sdp_addrtype_e sdp_get_conn_addrtype(sdp_t *sdp_p, uint16_t level);
1259 extern const char *sdp_get_conn_address(sdp_t *sdp_p, uint16_t level);
1261 extern tinybool sdp_is_mcast_addr (sdp_t *sdp_p, uint16_t level);
1262 extern int32_t sdp_get_mcast_ttl(sdp_t *sdp_p, uint16_t level);
1263 extern int32_t sdp_get_mcast_num_of_addresses(sdp_t *sdp_p, uint16_t level);
1265 extern sdp_result_e sdp_set_conn_nettype(sdp_t *sdp_p, uint16_t level,
1266 sdp_nettype_e nettype);
1267 extern sdp_result_e sdp_set_conn_addrtype(sdp_t *sdp_p, uint16_t level,
1268 sdp_addrtype_e addrtype);
1269 extern sdp_result_e sdp_set_conn_address(sdp_t *sdp_p, uint16_t level,
1270 const char *address);
1272 extern tinybool sdp_media_line_valid(sdp_t *sdp_p, uint16_t level);
1273 extern uint16_t sdp_get_num_media_lines(sdp_t *sdp_ptr);
1274 extern sdp_media_e sdp_get_media_type(sdp_t *sdp_p, uint16_t level);
1275 extern uint32_t sdp_get_media_line_number(sdp_t *sdp_p, uint16_t level);
1276 extern sdp_port_format_e sdp_get_media_port_format(sdp_t *sdp_p, uint16_t level);
1277 extern int32_t sdp_get_media_portnum(sdp_t *sdp_p, uint16_t level);
1278 extern int32_t sdp_get_media_portcount(sdp_t *sdp_p, uint16_t level);
1279 extern int32_t sdp_get_media_vpi(sdp_t *sdp_p, uint16_t level);
1280 extern uint32_t sdp_get_media_vci(sdp_t *sdp_p, uint16_t level);
1281 extern int32_t sdp_get_media_vcci(sdp_t *sdp_p, uint16_t level);
1282 extern int32_t sdp_get_media_cid(sdp_t *sdp_p, uint16_t level);
1283 extern sdp_transport_e sdp_get_media_transport(sdp_t *sdp_p, uint16_t level);
1284 extern uint16_t sdp_get_media_num_profiles(sdp_t *sdp_p, uint16_t level);
1285 extern sdp_transport_e sdp_get_media_profile(sdp_t *sdp_p, uint16_t level,
1286 uint16_t profile_num);
1287 extern uint16_t sdp_get_media_num_payload_types(sdp_t *sdp_p, uint16_t level);
1288 extern uint16_t sdp_get_media_profile_num_payload_types(sdp_t *sdp_p, uint16_t level,
1289 uint16_t profile_num);
1290 extern rtp_ptype sdp_get_known_payload_type(sdp_t *sdp_p,
1291 uint16_t level,
1292 uint16_t payload_type_raw);
1293 extern uint32_t sdp_get_media_payload_type(sdp_t *sdp_p, uint16_t level,
1294 uint16_t payload_num, sdp_payload_ind_e *indicator);
1295 extern uint32_t sdp_get_media_profile_payload_type(sdp_t *sdp_p, uint16_t level,
1296 uint16_t prof_num, uint16_t payload_num, sdp_payload_ind_e *indicator);
1297 extern sdp_result_e sdp_insert_media_line(sdp_t *sdp_p, uint16_t level);
1298 extern sdp_result_e sdp_set_media_type(sdp_t *sdp_p, uint16_t level,
1299 sdp_media_e media);
1300 extern sdp_result_e sdp_set_media_portnum(sdp_t *sdp_p, uint16_t level,
1301 int32_t portnum, int32_t sctpport);
1302 extern int32_t sdp_get_media_sctp_port(sdp_t *sdp_p, uint16_t level);
1303 extern sdp_sctp_media_fmt_type_e sdp_get_media_sctp_fmt(sdp_t *sdp_p, uint16_t level);
1304 extern sdp_result_e sdp_set_media_transport(sdp_t *sdp_p, uint16_t level,
1305 sdp_transport_e transport);
1306 extern sdp_result_e sdp_add_media_profile(sdp_t *sdp_p, uint16_t level,
1307 sdp_transport_e profile);
1308 extern sdp_result_e sdp_add_media_payload_type(sdp_t *sdp_p, uint16_t level,
1309 uint16_t payload_type, sdp_payload_ind_e indicator);
1310 extern sdp_result_e sdp_add_media_profile_payload_type(sdp_t *sdp_p,
1311 uint16_t level, uint16_t prof_num, uint16_t payload_type,
1312 sdp_payload_ind_e indicator);
1314 /* sdp_attr_access.c */
1315 extern sdp_attr_t *sdp_find_attr (sdp_t *sdp_p, uint16_t level, uint8_t cap_num,
1316 sdp_attr_e attr_type, uint16_t inst_num);
1318 extern int sdp_find_fmtp_inst(sdp_t *sdp_ptr, uint16_t level, uint16_t payload_num);
1319 extern sdp_result_e sdp_add_new_attr(sdp_t *sdp_p, uint16_t level, uint8_t cap_num,
1320 sdp_attr_e attr_type, uint16_t *inst_num);
1321 extern sdp_result_e sdp_attr_num_instances(sdp_t *sdp_p, uint16_t level,
1322 uint8_t cap_num, sdp_attr_e attr_type, uint16_t *num_attr_inst);
1323 extern tinybool sdp_attr_valid(sdp_t *sdp_p, sdp_attr_e attr_type,
1324 uint16_t level, uint8_t cap_num, uint16_t inst_num);
1325 extern uint32_t sdp_attr_line_number(sdp_t *sdp_p, sdp_attr_e attr_type,
1326 uint16_t level, uint8_t cap_num, uint16_t inst_num);
1327 extern const char *sdp_attr_get_simple_string(sdp_t *sdp_p,
1328 sdp_attr_e attr_type, uint16_t level, uint8_t cap_num, uint16_t inst_num);
1329 extern const char *sdp_attr_get_long_string(sdp_t *sdp_p,
1330 sdp_attr_e attr_type, uint16_t level, uint8_t cap_num, uint16_t inst_num);
1331 extern uint32_t sdp_attr_get_simple_u32(sdp_t *sdp_p, sdp_attr_e attr_type,
1332 uint16_t level, uint8_t cap_num, uint16_t inst_num);
1333 extern tinybool sdp_attr_get_simple_boolean(sdp_t *sdp_p,
1334 sdp_attr_e attr_type, uint16_t level, uint8_t cap_num, uint16_t inst_num);
1335 extern tinybool sdp_attr_is_present (sdp_t *sdp_p, sdp_attr_e attr_type,
1336 uint16_t level, uint8_t cap_num);
1337 extern const char* sdp_attr_get_maxprate(sdp_t *sdp_p, uint16_t level,
1338 uint16_t inst_num);
1339 extern sdp_t38_ratemgmt_e sdp_attr_get_t38ratemgmt(sdp_t *sdp_p, uint16_t level,
1340 uint8_t cap_num, uint16_t inst_num);
1341 extern sdp_t38_udpec_e sdp_attr_get_t38udpec(sdp_t *sdp_p, uint16_t level,
1342 uint8_t cap_num, uint16_t inst_num);
1343 extern sdp_direction_e sdp_get_media_direction(sdp_t *sdp_p, uint16_t level,
1344 uint8_t cap_num);
1345 extern sdp_qos_strength_e sdp_attr_get_qos_strength(sdp_t *sdp_p, uint16_t level,
1346 uint8_t cap_num, sdp_attr_e qos_attr, uint16_t inst_num);
1347 extern sdp_qos_status_types_e sdp_attr_get_qos_status_type (sdp_t *sdp_p, uint16_t level,
1348 uint8_t cap_num, sdp_attr_e qos_attr, uint16_t inst_num);
1349 extern sdp_qos_dir_e sdp_attr_get_qos_direction(sdp_t *sdp_p, uint16_t level,
1350 uint8_t cap_num, sdp_attr_e qos_attr, uint16_t inst_num);
1351 extern tinybool sdp_attr_get_qos_confirm(sdp_t *sdp_p, uint16_t level,
1352 uint8_t cap_num, sdp_attr_e qos_attr, uint16_t inst_num);
1353 extern sdp_curr_type_e sdp_attr_get_curr_type (sdp_t *sdp_p, uint16_t level,
1354 uint8_t cap_num, sdp_attr_e qos_attr, uint16_t inst_num);
1355 extern sdp_des_type_e sdp_attr_get_des_type (sdp_t *sdp_p, uint16_t level,
1356 uint8_t cap_num, sdp_attr_e qos_attr, uint16_t inst_num);
1357 extern sdp_conf_type_e sdp_attr_get_conf_type (sdp_t *sdp_p, uint16_t level,
1358 uint8_t cap_num, sdp_attr_e qos_attr, uint16_t inst_num);
1359 extern sdp_nettype_e sdp_attr_get_subnet_nettype(sdp_t *sdp_p, uint16_t level,
1360 uint8_t cap_num, uint16_t inst_num);
1361 extern sdp_addrtype_e sdp_attr_get_subnet_addrtype(sdp_t *sdp_p, uint16_t level,
1362 uint8_t cap_num, uint16_t inst_num);
1363 extern const char *sdp_attr_get_subnet_addr(sdp_t *sdp_p, uint16_t level,
1364 uint8_t cap_num, uint16_t inst_num);
1365 extern int32_t sdp_attr_get_subnet_prefix(sdp_t *sdp_p, uint16_t level,
1366 uint8_t cap_num, uint16_t inst_num);
1367 extern rtp_ptype sdp_attr_get_rtpmap_known_codec(sdp_t *sdp_p, uint16_t level,
1368 uint8_t cap_num, uint16_t inst_num);
1369 extern tinybool sdp_attr_rtpmap_payload_valid(sdp_t *sdp_p, uint16_t level,
1370 uint8_t cap_num, uint16_t *inst_num, uint16_t payload_type);
1371 extern uint16_t sdp_attr_get_rtpmap_payload_type(sdp_t *sdp_p, uint16_t level,
1372 uint8_t cap_num, uint16_t inst_num);
1373 extern const char *sdp_attr_get_rtpmap_encname(sdp_t *sdp_p, uint16_t level,
1374 uint8_t cap_num, uint16_t inst_num);
1375 extern uint32_t sdp_attr_get_rtpmap_clockrate(sdp_t *sdp_p, uint16_t level,
1376 uint8_t cap_num, uint16_t inst_num);
1377 extern uint16_t sdp_attr_get_rtpmap_num_chan(sdp_t *sdp_p, uint16_t level,
1378 uint8_t cap_num, uint16_t inst_num);
1379 extern tinybool sdp_attr_sprtmap_payload_valid(sdp_t *sdp_p, uint16_t level,
1380 uint8_t cap_num, uint16_t *inst_num, uint16_t payload_type);
1381 extern uint16_t sdp_attr_get_sprtmap_payload_type(sdp_t *sdp_p, uint16_t level,
1382 uint8_t cap_num, uint16_t inst_num);
1383 extern const char *sdp_attr_get_sprtmap_encname(sdp_t *sdp_p, uint16_t level,
1384 uint8_t cap_num, uint16_t inst_num);
1385 extern uint32_t sdp_attr_get_sprtmap_clockrate(sdp_t *sdp_p, uint16_t level,
1386 uint8_t cap_num, uint16_t inst_num);
1387 extern uint16_t sdp_attr_get_sprtmap_num_chan(sdp_t *sdp_p, uint16_t level,
1388 uint8_t cap_num, uint16_t inst_num);
1389 extern tinybool sdp_attr_fmtp_payload_valid(sdp_t *sdp_p, uint16_t level,
1390 uint8_t cap_num, uint16_t *inst_num, uint16_t payload_type);
1391 extern uint16_t sdp_attr_get_fmtp_payload_type(sdp_t *sdp_p, uint16_t level,
1392 uint8_t cap_num, uint16_t inst_num);
1393 extern sdp_ne_res_e sdp_attr_fmtp_is_range_set(sdp_t *sdp_p, uint16_t level,
1394 uint8_t cap_num, uint16_t inst_num, uint8_t low_val, uint8_t high_val);
1395 extern tinybool sdp_attr_fmtp_valid(sdp_t *sdp_p, uint16_t level, uint8_t cap_num,
1396 uint16_t inst_num, uint16_t appl_maxval, uint32_t* evt_array);
1397 extern sdp_result_e sdp_attr_set_fmtp_payload_type(sdp_t *sdp_p, uint16_t level,
1398 uint8_t cap_num, uint16_t inst_num,
1399 uint16_t payload_num);
1400 extern sdp_result_e sdp_attr_get_fmtp_range(sdp_t *sdp_p, uint16_t level,
1401 uint8_t cap_num, uint16_t inst_num, uint32_t *bmap);
1402 extern sdp_result_e sdp_attr_clear_fmtp_range(sdp_t *sdp_p, uint16_t level,
1403 uint8_t cap_num, uint16_t inst_num, uint8_t low_val, uint8_t high_val);
1404 extern sdp_ne_res_e sdp_attr_compare_fmtp_ranges(sdp_t *src_sdp_ptr,
1405 sdp_t *dst_sdp_ptr, uint16_t src_level, uint16_t dst_level,
1406 uint8_t src_cap_num, uint8_t dst_cap_num, uint16_t src_inst_num,
1407 uint16_t dst_inst_num);
1408 extern sdp_result_e sdp_attr_copy_fmtp_ranges(sdp_t *src_sdp_ptr,
1409 sdp_t *dst_sdp_ptr, uint16_t src_level, uint16_t dst_level,
1410 uint8_t src_cap_num, uint8_t dst_cap_num, uint16_t src_inst_num,
1411 uint16_t dst_inst_num);
1412 extern uint32_t sdp_attr_get_fmtp_mode_for_payload_type (sdp_t *sdp_p, uint16_t level,
1413 uint8_t cap_num, uint32_t payload_type);
1415 extern sdp_result_e sdp_attr_set_fmtp_max_fs (sdp_t *sdp_p,
1416 uint16_t level,
1417 uint8_t cap_num,
1418 uint16_t inst_num,
1419 uint32_t max_fs);
1421 extern sdp_result_e sdp_attr_set_fmtp_max_fr (sdp_t *sdp_p,
1422 uint16_t level,
1423 uint8_t cap_num,
1424 uint16_t inst_num,
1425 uint32_t max_fr);
1427 /* get routines */
1428 extern int32_t sdp_attr_get_fmtp_bitrate_type (sdp_t *sdp_p, uint16_t level,
1429 uint8_t cap_num, uint16_t inst_num);
1431 extern int32_t sdp_attr_get_fmtp_cif (sdp_t *sdp_p, uint16_t level,
1432 uint8_t cap_num, uint16_t inst_num);
1433 extern int32_t sdp_attr_get_fmtp_qcif (sdp_t *sdp_p, uint16_t level,
1434 uint8_t cap_num, uint16_t inst_num);
1435 extern int32_t sdp_attr_get_fmtp_sqcif (sdp_t *sdp_p, uint16_t level,
1436 uint8_t cap_num, uint16_t inst_num);
1437 extern int32_t sdp_attr_get_fmtp_cif4 (sdp_t *sdp_p, uint16_t level,
1438 uint8_t cap_num, uint16_t inst_num);
1439 extern int32_t sdp_attr_get_fmtp_cif16 (sdp_t *sdp_p, uint16_t level,
1440 uint8_t cap_num, uint16_t inst_num);
1441 extern int32_t sdp_attr_get_fmtp_maxbr (sdp_t *sdp_p, uint16_t level,
1442 uint8_t cap_num, uint16_t inst_num);
1443 extern sdp_result_e sdp_attr_get_fmtp_max_average_bitrate (sdp_t *sdp_p, uint16_t level,
1444 uint8_t cap_num, uint16_t inst_num, uint32_t* val);
1445 extern sdp_result_e sdp_attr_get_fmtp_usedtx (sdp_t *sdp_p, uint16_t level,
1446 uint8_t cap_num, uint16_t inst_num, tinybool* val);
1447 extern sdp_result_e sdp_attr_get_fmtp_stereo (sdp_t *sdp_p, uint16_t level,
1448 uint8_t cap_num, uint16_t inst_num, tinybool* val);
1449 extern sdp_result_e sdp_attr_get_fmtp_useinbandfec (sdp_t *sdp_p, uint16_t level,
1450 uint8_t cap_num, uint16_t inst_num, tinybool* val);
1451 extern char* sdp_attr_get_fmtp_maxcodedaudiobandwidth (sdp_t *sdp_p, uint16_t level,
1452 uint8_t cap_num, uint16_t inst_num);
1453 extern sdp_result_e sdp_attr_get_fmtp_cbr (sdp_t *sdp_p, uint16_t level,
1454 uint8_t cap_num, uint16_t inst_num, tinybool* val);
1455 extern int32_t sdp_attr_get_fmtp_custom_x (sdp_t *sdp_p, uint16_t level,
1456 uint8_t cap_num, uint16_t inst_num);
1457 extern int32_t sdp_attr_get_fmtp_custom_y (sdp_t *sdp_p, uint16_t level,
1458 uint8_t cap_num, uint16_t inst_num);
1459 extern int32_t sdp_attr_get_fmtp_custom_mpi (sdp_t *sdp_p, uint16_t level,
1460 uint8_t cap_num, uint16_t inst_num);
1461 extern int32_t sdp_attr_get_fmtp_par_width (sdp_t *sdp_p, uint16_t level,
1462 uint8_t cap_num, uint16_t inst_num);
1463 extern int32_t sdp_attr_get_fmtp_par_height (sdp_t *sdp_p, uint16_t level,
1464 uint8_t cap_num, uint16_t inst_num);
1465 extern int32_t sdp_attr_get_fmtp_bpp (sdp_t *sdp_p, uint16_t level,
1466 uint8_t cap_num, uint16_t inst_num);
1467 extern int32_t sdp_attr_get_fmtp_hrd (sdp_t *sdp_p, uint16_t level,
1468 uint8_t cap_num, uint16_t inst_num);
1469 extern int32_t sdp_attr_get_fmtp_profile (sdp_t *sdp_p, uint16_t level,
1470 uint8_t cap_num, uint16_t inst_num);
1471 extern int32_t sdp_attr_get_fmtp_level (sdp_t *sdp_p, uint16_t level,
1472 uint8_t cap_num, uint16_t inst_num);
1473 extern tinybool sdp_attr_get_fmtp_interlace (sdp_t *sdp_p, uint16_t level,
1474 uint8_t cap_num, uint16_t inst_num);
1475 extern tinybool sdp_attr_get_fmtp_annex_d (sdp_t *sdp_p, uint16_t level,
1476 uint8_t cap_num, uint16_t inst_num);
1477 extern tinybool sdp_attr_get_fmtp_annex_f (sdp_t *sdp_p, uint16_t level,
1478 uint8_t cap_num, uint16_t inst_num);
1479 extern tinybool sdp_attr_get_fmtp_annex_i (sdp_t *sdp_p, uint16_t level,
1480 uint8_t cap_num, uint16_t inst_num);
1481 extern tinybool sdp_attr_get_fmtp_annex_j (sdp_t *sdp_p, uint16_t level,
1482 uint8_t cap_num, uint16_t inst_num);
1483 extern tinybool sdp_attr_get_fmtp_annex_t (sdp_t *sdp_p, uint16_t level,
1484 uint8_t cap_num, uint16_t inst_num);
1485 extern int32_t sdp_attr_get_fmtp_annex_k_val (sdp_t *sdp_p, uint16_t level,
1486 uint8_t cap_num, uint16_t inst_num);
1487 extern int32_t sdp_attr_get_fmtp_annex_n_val (sdp_t *sdp_p, uint16_t level,
1488 uint8_t cap_num, uint16_t inst_num);
1490 extern int32_t sdp_attr_get_fmtp_annex_p_picture_resize (sdp_t *sdp_p, uint16_t level,
1491 uint8_t cap_num, uint16_t inst_num);
1492 extern int32_t sdp_attr_get_fmtp_annex_p_warp (sdp_t *sdp_p, uint16_t level,
1493 uint8_t cap_num, uint16_t inst_num);
1495 /* sctpmap params */
1496 extern uint16_t sdp_attr_get_sctpmap_port(sdp_t *sdp_p, uint16_t level,
1497 uint8_t cap_num, uint16_t inst_num);
1498 extern sdp_result_e sdp_attr_get_sctpmap_protocol (sdp_t *sdp_p, uint16_t level,
1499 uint8_t cap_num, uint16_t inst_num, char* protocol);
1500 extern sdp_result_e sdp_attr_get_sctpmap_streams (sdp_t *sdp_p, uint16_t level,
1501 uint8_t cap_num, uint16_t inst_num, uint32_t* val);
1503 extern const char *sdp_attr_get_msid_identifier(sdp_t *sdp_p, uint16_t level,
1504 uint8_t cap_num, uint16_t inst_num);
1505 extern const char *sdp_attr_get_msid_appdata(sdp_t *sdp_p, uint16_t level,
1506 uint8_t cap_num, uint16_t inst_num);
1508 /* H.264 codec specific params */
1510 extern const char *sdp_attr_get_fmtp_profile_id(sdp_t *sdp_p, uint16_t level,
1511 uint8_t cap_num, uint16_t inst_num);
1512 extern const char *sdp_attr_get_fmtp_param_sets(sdp_t *sdp_p, uint16_t level,
1513 uint8_t cap_num, uint16_t inst_num);
1514 extern sdp_result_e sdp_attr_get_fmtp_pack_mode (sdp_t *sdp_p, uint16_t level,
1515 uint8_t cap_num, uint16_t inst_num, uint16_t *val);
1517 extern sdp_result_e sdp_attr_get_fmtp_level_asymmetry_allowed (sdp_t *sdp_p, uint16_t level,
1518 uint8_t cap_num, uint16_t inst_num, uint16_t *val);
1520 extern sdp_result_e sdp_attr_get_fmtp_interleaving_depth (sdp_t *sdp_p, uint16_t level,
1521 uint8_t cap_num, uint16_t inst_num,
1522 uint16_t *val);
1523 extern sdp_result_e sdp_attr_get_fmtp_max_don_diff (sdp_t *sdp_p, uint16_t level,
1524 uint8_t cap_num, uint16_t inst_num,
1525 uint32_t *val);
1527 /* The following four H.264 parameters that require special handling as
1528 * the values range from 0 - 4294967295
1530 extern sdp_result_e sdp_attr_get_fmtp_deint_buf_req (sdp_t *sdp_p, uint16_t level,
1531 uint8_t cap_num, uint16_t inst_num,
1532 uint32_t *val);
1533 extern sdp_result_e sdp_attr_get_fmtp_deint_buf_cap (sdp_t *sdp_p, uint16_t level,
1534 uint8_t cap_num, uint16_t inst_num,
1535 uint32_t *val);
1536 extern sdp_result_e sdp_attr_get_fmtp_init_buf_time (sdp_t *sdp_p, uint16_t level,
1537 uint8_t cap_num, uint16_t inst_num,
1538 uint32_t *val);
1539 extern sdp_result_e sdp_attr_get_fmtp_max_rcmd_nalu_size (sdp_t *sdp_p,
1540 uint16_t level, uint8_t cap_num,
1541 uint16_t inst_num, uint32_t *val);
1544 extern sdp_result_e sdp_attr_get_fmtp_max_mbps (sdp_t *sdp_p, uint16_t level,
1545 uint8_t cap_num, uint16_t inst_num, uint32_t *val);
1546 extern sdp_result_e sdp_attr_get_fmtp_max_fs (sdp_t *sdp_p, uint16_t level,
1547 uint8_t cap_num, uint16_t inst_num, uint32_t *val);
1548 extern sdp_result_e sdp_attr_get_fmtp_max_fr (sdp_t *sdp_p, uint16_t level,
1549 uint8_t cap_num, uint16_t inst_num, uint32_t *val);
1550 extern sdp_result_e sdp_attr_get_fmtp_max_cpb (sdp_t *sdp_p, uint16_t level,
1551 uint8_t cap_num, uint16_t inst_num, uint32_t *val);
1552 extern sdp_result_e sdp_attr_get_fmtp_max_dpb (sdp_t *sdp_p, uint16_t level,
1553 uint8_t cap_num, uint16_t inst_num, uint32_t *val);
1554 extern sdp_result_e sdp_attr_get_fmtp_max_br (sdp_t *sdp_p, uint16_t level,
1555 uint8_t cap_num, uint16_t inst_num, uint32_t *val);
1556 extern tinybool sdp_attr_fmtp_is_redundant_pic_cap (sdp_t *sdp_p, uint16_t level,
1557 uint8_t cap_num,
1558 uint16_t inst_num);
1559 extern tinybool sdp_attr_fmtp_is_parameter_add (sdp_t *sdp_p, uint16_t level,
1560 uint8_t cap_num,
1561 uint16_t inst_num);
1562 extern tinybool sdp_attr_fmtp_is_annexa_set (sdp_t *sdp_p, uint16_t level,
1563 uint8_t cap_num,
1564 uint16_t inst_num);
1566 extern tinybool sdp_attr_fmtp_is_annexb_set (sdp_t *sdp_p, uint16_t level,
1567 uint8_t cap_num,
1568 uint16_t inst_num);
1570 extern sdp_fmtp_format_type_e sdp_attr_fmtp_get_fmtp_format (sdp_t *sdp_p, uint16_t level, uint8_t cap_num,
1571 uint16_t inst_num);
1573 extern uint16_t sdp_attr_get_pccodec_num_payload_types(sdp_t *sdp_p, uint16_t level,
1574 uint8_t cap_num, uint16_t inst_num);
1575 extern uint16_t sdp_attr_get_pccodec_payload_type(sdp_t *sdp_p, uint16_t level,
1576 uint8_t cap_num, uint16_t inst_num, uint16_t payload_num);
1577 extern sdp_result_e sdp_attr_add_pccodec_payload_type(sdp_t *sdp_p,
1578 uint16_t level, uint8_t cap_num,
1579 uint16_t inst_num, uint16_t payload_type);
1580 extern uint16_t sdp_attr_get_xcap_first_cap_num(sdp_t *sdp_p, uint16_t level,
1581 uint16_t inst_num);
1582 extern sdp_media_e sdp_attr_get_xcap_media_type(sdp_t *sdp_p, uint16_t level,
1583 uint16_t inst_num);
1584 extern sdp_transport_e sdp_attr_get_xcap_transport_type(sdp_t *sdp_p,
1585 uint16_t level, uint16_t inst_num);
1586 extern uint16_t sdp_attr_get_xcap_num_payload_types(sdp_t *sdp_p, uint16_t level,
1587 uint16_t inst_num);
1588 extern uint16_t sdp_attr_get_xcap_payload_type(sdp_t *sdp_p, uint16_t level,
1589 uint16_t inst_num, uint16_t payload_num,
1590 sdp_payload_ind_e *indicator);
1591 extern sdp_result_e sdp_attr_add_xcap_payload_type(sdp_t *sdp_p, uint16_t level,
1592 uint16_t inst_num, uint16_t payload_type,
1593 sdp_payload_ind_e indicator);
1594 extern uint16_t sdp_attr_get_cdsc_first_cap_num(sdp_t *sdp_p, uint16_t level,
1595 uint16_t inst_num);
1596 extern sdp_media_e sdp_attr_get_cdsc_media_type(sdp_t *sdp_p, uint16_t level,
1597 uint16_t inst_num);
1598 extern sdp_transport_e sdp_attr_get_cdsc_transport_type(sdp_t *sdp_p,
1599 uint16_t level, uint16_t inst_num);
1600 extern uint16_t sdp_attr_get_cdsc_num_payload_types(sdp_t *sdp_p, uint16_t level,
1601 uint16_t inst_num);
1602 extern uint16_t sdp_attr_get_cdsc_payload_type(sdp_t *sdp_p, uint16_t level,
1603 uint16_t inst_num, uint16_t payload_num,
1604 sdp_payload_ind_e *indicator);
1605 extern sdp_result_e sdp_attr_add_cdsc_payload_type(sdp_t *sdp_p, uint16_t level,
1606 uint16_t inst_num, uint16_t payload_type,
1607 sdp_payload_ind_e indicator);
1608 extern tinybool sdp_media_dynamic_payload_valid (sdp_t *sdp_p, uint16_t payload_type,
1609 uint16_t m_line);
1611 extern tinybool sdp_attr_get_rtr_confirm (sdp_t *, uint16_t, uint8_t, uint16_t);
1613 extern tinybool sdp_attr_get_silencesupp_enabled(sdp_t *sdp_p, uint16_t level,
1614 uint8_t cap_num, uint16_t inst_num);
1615 extern uint16_t sdp_attr_get_silencesupp_timer(sdp_t *sdp_p, uint16_t level,
1616 uint8_t cap_num, uint16_t inst_num,
1617 tinybool *null_ind);
1618 extern sdp_silencesupp_pref_e sdp_attr_get_silencesupp_pref(sdp_t *sdp_p,
1619 uint16_t level,
1620 uint8_t cap_num,
1621 uint16_t inst_num);
1622 extern sdp_silencesupp_siduse_e sdp_attr_get_silencesupp_siduse(sdp_t *sdp_p,
1623 uint16_t level,
1624 uint8_t cap_num,
1625 uint16_t inst_num);
1626 extern uint8_t sdp_attr_get_silencesupp_fxnslevel(sdp_t *sdp_p, uint16_t level,
1627 uint8_t cap_num, uint16_t inst_num,
1628 tinybool *null_ind);
1629 extern sdp_mediadir_role_e sdp_attr_get_comediadir_role(sdp_t *sdp_p,
1630 uint16_t level, uint8_t cap_num,
1631 uint16_t inst_num);
1633 extern uint16_t sdp_attr_get_mptime_num_intervals(
1634 sdp_t *sdp_p, uint16_t level, uint8_t cap_num, uint16_t inst_num);
1635 extern uint16_t sdp_attr_get_mptime_interval(
1636 sdp_t *sdp_p, uint16_t level, uint8_t cap_num, uint16_t inst_num, uint16_t interval_num);
1637 extern sdp_result_e sdp_attr_add_mptime_interval(
1638 sdp_t *sdp_p, uint16_t level, uint8_t cap_num, uint16_t inst_num, uint16_t interval);
1641 extern sdp_result_e sdp_copy_all_bw_lines(sdp_t *src_sdp_ptr, sdp_t *dst_sdp_ptr,
1642 uint16_t src_level, uint16_t dst_level);
1643 extern sdp_bw_modifier_e sdp_get_bw_modifier(sdp_t *sdp_p, uint16_t level,
1644 uint16_t inst_num);
1645 extern const char *sdp_get_bw_modifier_name(sdp_bw_modifier_e bw_modifier);
1646 extern int32_t sdp_get_bw_value(sdp_t *sdp_p, uint16_t level, uint16_t inst_num);
1647 extern int32_t sdp_get_num_bw_lines (sdp_t *sdp_p, uint16_t level);
1649 extern sdp_result_e sdp_add_new_bw_line(sdp_t *sdp_p, uint16_t level,
1650 sdp_bw_modifier_e bw_modifier, uint16_t *inst_num);
1652 extern sdp_group_attr_e sdp_get_group_attr(sdp_t *sdp_p, uint16_t level,
1653 uint8_t cap_num, uint16_t inst_num);
1655 extern const char* sdp_attr_get_x_sidout (sdp_t *sdp_p, uint16_t level,
1656 uint8_t cap_num, uint16_t inst_num);
1659 extern const char* sdp_attr_get_x_sidin (sdp_t *sdp_p, uint16_t level,
1660 uint8_t cap_num, uint16_t inst_num);
1662 extern const char* sdp_attr_get_x_confid (sdp_t *sdp_p, uint16_t level,
1663 uint8_t cap_num, uint16_t inst_num);
1665 extern uint16_t sdp_get_group_num_id(sdp_t *sdp_p, uint16_t level,
1666 uint8_t cap_num, uint16_t inst_num);
1668 extern const char* sdp_get_group_id(sdp_t *sdp_p, uint16_t level,
1669 uint8_t cap_num, uint16_t inst_num, uint16_t id_num);
1671 extern int32_t sdp_get_mid_value(sdp_t *sdp_p, uint16_t level);
1672 extern sdp_result_e sdp_include_new_filter_src_addr(sdp_t *sdp_p, uint16_t level,
1673 uint8_t cap_num, uint16_t inst_num,
1674 const char *src_addr);
1675 extern sdp_src_filter_mode_e sdp_get_source_filter_mode(sdp_t *sdp_p,
1676 uint16_t level, uint8_t cap_num,
1677 uint16_t inst_num);
1678 extern sdp_result_e sdp_get_filter_destination_attributes(sdp_t *sdp_p,
1679 uint16_t level, uint8_t cap_num,
1680 uint16_t inst_num,
1681 sdp_nettype_e *nettype,
1682 sdp_addrtype_e *addrtype,
1683 char *dest_addr);
1684 extern int32_t sdp_get_filter_source_address_count(sdp_t *sdp_p, uint16_t level,
1685 uint8_t cap_num, uint16_t inst_num);
1686 extern sdp_result_e sdp_get_filter_source_address (sdp_t *sdp_p, uint16_t level,
1687 uint8_t cap_num, uint16_t inst_num,
1688 uint16_t src_addr_id,
1689 char *src_addr);
1691 extern sdp_rtcp_unicast_mode_e sdp_get_rtcp_unicast_mode(sdp_t *sdp_p,
1692 uint16_t level, uint8_t cap_num,
1693 uint16_t inst_num);
1695 void sdp_crypto_debug(char *buffer, ulong length_bytes);
1696 char * sdp_debug_msg_filter(char *buffer, ulong length_bytes);
1698 extern int32_t
1699 sdp_attr_get_sdescriptions_tag(sdp_t *sdp_p,
1700 uint16_t level,
1701 uint8_t cap_num,
1702 uint16_t inst_num);
1704 extern sdp_srtp_crypto_suite_t
1705 sdp_attr_get_sdescriptions_crypto_suite(sdp_t *sdp_p,
1706 uint16_t level,
1707 uint8_t cap_num,
1708 uint16_t inst_num);
1710 extern const char*
1711 sdp_attr_get_sdescriptions_key(sdp_t *sdp_p,
1712 uint16_t level,
1713 uint8_t cap_num,
1714 uint16_t inst_num);
1716 extern const char*
1717 sdp_attr_get_sdescriptions_salt(sdp_t *sdp_p,
1718 uint16_t level,
1719 uint8_t cap_num,
1720 uint16_t inst_num);
1722 extern const char*
1723 sdp_attr_get_sdescriptions_lifetime(sdp_t *sdp_p,
1724 uint16_t level,
1725 uint8_t cap_num,
1726 uint16_t inst_num);
1728 extern sdp_result_e
1729 sdp_attr_get_sdescriptions_mki(sdp_t *sdp_p,
1730 uint16_t level,
1731 uint8_t cap_num,
1732 uint16_t inst_num,
1733 const char **mki_value,
1734 uint16_t *mki_length);
1736 extern const char*
1737 sdp_attr_get_sdescriptions_session_params(sdp_t *sdp_p,
1738 uint16_t level,
1739 uint8_t cap_num,
1740 uint16_t inst_num);
1742 extern unsigned char
1743 sdp_attr_get_sdescriptions_key_size(sdp_t *sdp_p,
1744 uint16_t level,
1745 uint8_t cap_num,
1746 uint16_t inst_num);
1748 extern unsigned char
1749 sdp_attr_get_sdescriptions_salt_size(sdp_t *sdp_p,
1750 uint16_t level,
1751 uint8_t cap_num,
1752 uint16_t inst_num);
1754 extern unsigned long
1755 sdp_attr_get_srtp_crypto_selection_flags(sdp_t *sdp_p,
1756 uint16_t level,
1757 uint8_t cap_num,
1758 uint16_t inst_num);
1760 sdp_result_e
1761 sdp_attr_get_ice_attribute (sdp_t *sdp_p, uint16_t level,
1762 uint8_t cap_num, sdp_attr_e sdp_attr, uint16_t inst_num,
1763 char **out);
1765 sdp_result_e
1766 sdp_attr_get_rtcp_mux_attribute (sdp_t *sdp_p, uint16_t level,
1767 uint8_t cap_num, sdp_attr_e sdp_attr, uint16_t inst_num,
1768 tinybool *rtcp_mux);
1770 sdp_result_e
1771 sdp_attr_get_setup_attribute (sdp_t *sdp_p, uint16_t level,
1772 uint8_t cap_num, uint16_t inst_num, sdp_setup_type_e *setup_type);
1774 sdp_result_e
1775 sdp_attr_get_connection_attribute (sdp_t *sdp_p, uint16_t level,
1776 uint8_t cap_num, uint16_t inst_num, sdp_connection_type_e *connection_type);
1778 sdp_result_e
1779 sdp_attr_get_dtls_fingerprint_attribute (sdp_t *sdp_p, uint16_t level,
1780 uint8_t cap_num, sdp_attr_e sdp_attr, uint16_t inst_num,
1781 char **out);
1783 sdp_rtcp_fb_ack_type_e
1784 sdp_attr_get_rtcp_fb_ack(sdp_t *sdp_p, uint16_t level, uint16_t payload_type, uint16_t inst);
1786 sdp_rtcp_fb_nack_type_e
1787 sdp_attr_get_rtcp_fb_nack(sdp_t *sdp_p, uint16_t level, uint16_t payload_type, uint16_t inst);
1789 uint32_t
1790 sdp_attr_get_rtcp_fb_trr_int(sdp_t *sdp_p, uint16_t level, uint16_t payload_type,
1791 uint16_t inst);
1793 tinybool
1794 sdp_attr_get_rtcp_fb_remb_enabled(sdp_t *sdp_p, uint16_t level,
1795 uint16_t payload_type);
1797 tinybool
1798 sdp_attr_get_rtcp_fb_transport_cc_enabled(sdp_t *sdp_p, uint16_t level,
1799 uint16_t payload_type);
1801 sdp_rtcp_fb_ccm_type_e
1802 sdp_attr_get_rtcp_fb_ccm(sdp_t *sdp_p, uint16_t level, uint16_t payload_type, uint16_t inst);
1804 sdp_result_e
1805 sdp_attr_set_rtcp_fb_ack(sdp_t *sdp_p, uint16_t level, uint16_t payload_type, uint16_t inst,
1806 sdp_rtcp_fb_ack_type_e type);
1808 sdp_result_e
1809 sdp_attr_set_rtcp_fb_nack(sdp_t *sdp_p, uint16_t level, uint16_t payload_type, uint16_t inst,
1810 sdp_rtcp_fb_nack_type_e);
1812 sdp_result_e
1813 sdp_attr_set_rtcp_fb_trr_int(sdp_t *sdp_p, uint16_t level, uint16_t payload_type,
1814 uint16_t inst, uint32_t interval);
1816 sdp_result_e
1817 sdp_attr_set_rtcp_fb_remb(sdp_t *sdp_p, uint16_t level, uint16_t payload_type,
1818 uint16_t inst);
1819 sdp_result_e
1820 sdp_attr_set_rtcp_fb_transport_cc(sdp_t *sdp_p, uint16_t level, uint16_t payload_type,
1821 uint16_t inst);
1823 sdp_result_e
1824 sdp_attr_set_rtcp_fb_ccm(sdp_t *sdp_p, uint16_t level, uint16_t payload_type, uint16_t inst,
1825 sdp_rtcp_fb_ccm_type_e);
1826 const char *
1827 sdp_attr_get_extmap_uri(sdp_t *sdp_p, uint16_t level, uint16_t inst);
1829 uint16_t
1830 sdp_attr_get_extmap_id(sdp_t *sdp_p, uint16_t level, uint16_t inst);
1832 sdp_result_e
1833 sdp_attr_set_extmap(sdp_t *sdp_p, uint16_t level, uint16_t id, const char* uri, uint16_t inst);
1835 #endif /* _SDP_H_ */