Bug Summary

File:root/firefox-clang/third_party/sipcc/sipcc_sdp.h
Warning:line 1101, column 16
Excessive padding in 'struct sdp_srtp_crypto_suite_list_' (10 padding bytes, where 2 is optimal). Optimal fields order: crypto_suite_str, crypto_suite_val, key_size_bytes, salt_size_bytes, consider reordering the fields or adding explicit padding members

Annotated Source Code

Press '?' to see keyboard shortcuts

clang -cc1 -cc1 -triple x86_64-pc-linux-gnu -O2 -analyze -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name sdp_main.c -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -analyzer-config-compatibility-mode=true -mrelocation-model pic -pic-level 2 -fhalf-no-semantic-interposition -mframe-pointer=all -relaxed-aliasing -ffp-contract=off -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -fdebug-compilation-dir=/root/firefox-clang/obj-x86_64-pc-linux-gnu/third_party/sipcc -fcoverage-compilation-dir=/root/firefox-clang/obj-x86_64-pc-linux-gnu/third_party/sipcc -resource-dir /usr/lib/llvm-23/lib/clang/23 -include /root/firefox-clang/config/gcc_hidden.h -include /root/firefox-clang/obj-x86_64-pc-linux-gnu/mozilla-config.h -I /root/firefox-clang/obj-x86_64-pc-linux-gnu/dist/system_wrappers -U _FORTIFY_SOURCE -D _FORTIFY_SOURCE=2 -D DEBUG=1 -D SIP_OS_LINUX -D MOZ_HAS_MOZGLUE -D MOZILLA_INTERNAL_API -D IMPL_LIBXUL -D MOZ_SUPPORT_LEAKCHECKING -D STATIC_EXPORTABLE_JS_API -I /root/firefox-clang/third_party/sipcc -I /root/firefox-clang/obj-x86_64-pc-linux-gnu/third_party/sipcc -I /root/firefox-clang/obj-x86_64-pc-linux-gnu/dist/include -I /root/firefox-clang/obj-x86_64-pc-linux-gnu/dist/include/nspr -I /root/firefox-clang/obj-x86_64-pc-linux-gnu/dist/include/nss -D MOZILLA_CLIENT -internal-isystem /usr/lib/llvm-23/lib/clang/23/include -internal-isystem /usr/local/include -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/16/../../../../x86_64-linux-gnu/include -internal-externc-isystem /usr/include/x86_64-linux-gnu -internal-externc-isystem /include -internal-externc-isystem /usr/include -Wno-error=tautological-type-limit-compare -Wno-range-loop-analysis -Wno-error=deprecated-declarations -Wno-error=array-bounds -Wno-error=free-nonheap-object -Wno-error=atomic-alignment -Wno-error=deprecated-builtins -Wno-psabi -Wno-error=builtin-macro-redefined -Wno-unknown-warning-option -Wno-character-conversion -ferror-limit 19 -fstrict-flex-arrays=1 -stack-protector 2 -fstack-clash-protection -ftrivial-auto-var-init=pattern -fgnuc-version=4.2.1 -fskip-odr-check-in-gmf -fdiagnostics-absolute-paths -vectorize-loops -vectorize-slp -analyzer-checker optin.performance.Padding -analyzer-output=html -analyzer-config stable-report-filename=true -mllvm -dwarf-linkage-names=Abstract -faddrsig -fdwarf2-cfi-asm -o /tmp/scan-build-2026-09-01-224014-2642839-1 -x c /root/firefox-clang/third_party/sipcc/sdp_main.c
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/. */
4
5#ifndef SIPCCSDP_H_
6#define SIPCCSDP_H_
7
8#include "sdp_os_defs.h"
9#include "ccsdp.h"
10
11/* SDP Defines */
12
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.
17 */
18#define SDP_CHOOSE_PARAM(-1) (-1)
19#define SDP_SESSION_LEVEL0xFFFF 0xFFFF
20
21#define UNKNOWN_CRYPTO_SUITE"UNKNOWN_CRYPTO_SUITE" "UNKNOWN_CRYPTO_SUITE"
22#define AES_CM_128_HMAC_SHA1_32"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" "AES_CM_128_HMAC_SHA1_80"
24#define F8_128_HMAC_SHA1_80"F8_128_HMAC_SHA1_80" "F8_128_HMAC_SHA1_80"
25
26/* Pulled in from rtp_defs.h. */
27#define GET_DYN_PAYLOAD_TYPE_VALUE(a)((a & 0XFF00) ? ((a & 0XFF00) >> 8) : a) ((a & 0XFF00) ? ((a & 0XFF00) >> 8) : a)
28#define SET_PAYLOAD_TYPE_WITH_DYNAMIC(a,b)((a << 8) | b) ((a << 8) | b)
29
30/*
31 * SDP_SRTP_MAX_KEY_SIZE_BYTES
32 * Maximum size for a SRTP Master Key in bytes.
33 */
34#define SDP_SRTP_MAX_KEY_SIZE_BYTES16 16
35/*
36 * SDP_SRTP_MAX_SALT_SIZE_BYTES
37 * Maximum size for a SRTP Master Salt in bytes.
38 */
39#define SDP_SRTP_MAX_SALT_SIZE_BYTES14 14
40/*
41 * SDP_SRTP_MAX_MKI_SIZE_BYTES
42 * Maximum size for a SRTP Master Key Index in bytes.
43 */
44#define SDP_SRTP_MAX_MKI_SIZE_BYTES4 4
45
46/* Max number of characters for Lifetime */
47#define SDP_SRTP_MAX_LIFETIME_BYTES16 16
48
49#define SDP_SDESCRIPTIONS_KEY_SIZE_UNKNOWN0 0
50#define SDP_SRTP_CRYPTO_SELECTION_FLAGS_UNKNOWN0 0
51
52/* Max number of fmtp redundant encodings */
53#define SDP_FMTP_MAX_REDUNDANT_ENCODINGS128 128
54
55/*
56 * SRTP_CONTEXT_SET_*
57 * Set a SRTP Context field flag
58 */
59#define SDP_SRTP_ENCRYPT_MASK0x00000001 0x00000001
60#define SDP_SRTP_AUTHENTICATE_MASK0x00000002 0x00000002
61#define SDP_SRTCP_ENCRYPT_MASK0x00000004 0x00000004
62#define SDP_SRTCP_SSRC_MASK0x20000000 0x20000000
63#define SDP_SRTCP_ROC_MASK0x10000000 0x10000000
64#define SDP_SRTCP_KDR_MASK0x08000000 0x08000000
65#define SDP_SRTCP_KEY_MASK0x80000000 0x80000000
66#define SDP_SRTCP_SALT_MASK0x40000000 0x40000000
67
68#define SDP_SRTP_CONTEXT_SET_SSRC(cw)((cw) |= 0x20000000) ((cw) |= SDP_SRTCP_SSRC_MASK0x20000000)
69#define SDP_SRTP_CONTEXT_SET_ROC(cw)((cw) |= 0x10000000) ((cw) |= SDP_SRTCP_ROC_MASK0x10000000)
70#define SDP_SRTP_CONTEXT_SET_KDR(cw)((cw) |= 0x08000000) ((cw) |= SDP_SRTCP_KDR_MASK0x08000000)
71#define SDP_SRTP_CONTEXT_SET_MASTER_KEY(cw)((cw) |= 0x80000000) ((cw) |= SDP_SRTCP_KEY_MASK0x80000000)
72#define SDP_SRTP_CONTEXT_SET_MASTER_SALT(cw)((cw) |= 0x40000000) ((cw) |= SDP_SRTCP_SALT_MASK0x40000000)
73#define SDP_SRTP_CONTEXT_SET_ENCRYPT_AUTHENTICATE(cw)((cw) |= (0x00000001 | 0x00000002 | 0x00000004)) \
74 ((cw) |= (SDP_SRTP_ENCRYPT_MASK0x00000001 | SDP_SRTP_AUTHENTICATE_MASK0x00000002 | \
75 SDP_SRTCP_ENCRYPT_MASK0x00000004))
76#define SDP_SRTP_CONTEXT_RESET_SSRC(cw)((cw) &= ~(0x20000000)) ((cw) &= ~(SDP_SRTCP_SSRC_MASK0x20000000))
77#define SDP_SRTP_CONTEXT_RESET_ROC(cw)((cw) &= ~(0x10000000)) ((cw) &= ~(SDP_SRTCP_ROC_MASK0x10000000))
78#define SDP_SRTP_CONTEXT_RESET_KDR(cw)((cw) &= ~(0x08000000)) ((cw) &= ~(SDP_SRTCP_KDR_MASK0x08000000))
79#define SDP_CONTEXT_RESET_MASTER_KEY(cw)((cw) &= ~(0x80000000)) ((cw) &= ~(SDP_SRTCP_KEY_MASK0x80000000))
80#define SDP_CONTEXT_RESET_MASTER_SALT(cw)((cw) &= ~(0x40000000)) ((cw) &= ~(SDP_SRTCP_SALT_MASK0x40000000))
81#define SDP_EXTMAP_AUDIO_LEVEL"urn:ietf:params:rtp-hdrext:ssrc-audio-level" "urn:ietf:params:rtp-hdrext:ssrc-audio-level"
82
83/* SDP Enum Types */
84typedef enum {
85 SDP_DEBUG_TRACE,
86 SDP_DEBUG_WARNINGS,
87 SDP_DEBUG_ERRORS,
88 SDP_MAX_DEBUG_TYPES
89} sdp_debug_e;
90
91typedef enum {
92 SDP_CHOOSE_CONN_ADDR,
93 SDP_CHOOSE_PORTNUM,
94 SDP_MAX_CHOOSE_PARAMS
95} sdp_choose_param_e;
96
97
98/* Token Lines - these must be in the same order they should
99 * appear in an SDP.
100 */
101typedef 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;
119
120/* Media Types */
121typedef 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;
139
140
141/* Connection Network Type */
142typedef 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;
152
153
154/* Address Type */
155typedef 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;
167
168
169/* Transport Types */
170
171#define SDP_MAX_PROFILES3 3
172
173typedef 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;
199
200
201/* Encryption KeyType */
202typedef 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;
211
212
213/* Known string payload types */
214typedef 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;
222
223
224/* Payload type indicator */
225typedef enum {
226 SDP_PAYLOAD_NUMERIC,
227 SDP_PAYLOAD_ENUM
228} sdp_payload_ind_e;
229
230
231/* Image payload types */
232typedef 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;
243
244
245/* Fmtp attribute format Types */
246typedef 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;
254
255
256/* T.38 Rate Mgmt Types */
257typedef 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;
263
264
265/* T.38 udp EC Types */
266typedef 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;
272
273/* Bitmaps for manipulating sdp_direction_e */
274typedef enum {
275 SDP_DIRECTION_FLAG_SEND=0x01,
276 SDP_DIRECTION_FLAG_RECV=0x02
277} sdp_direction_flag_e;
278
279/* Media flow direction */
280typedef 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;
287
288#define SDP_DIRECTION_PRINT(arg)(((sdp_direction_e)(arg)) == SDP_DIRECTION_INACTIVE ? "SDP_DIRECTION_INACTIVE "
: ((sdp_direction_e)(arg)) == SDP_DIRECTION_SENDONLY ? "SDP_DIRECTION_SENDONLY"
: ((sdp_direction_e)(arg)) == SDP_DIRECTION_RECVONLY ? "SDP_DIRECTION_RECVONLY "
: ((sdp_direction_e)(arg)) == SDP_DIRECTION_SENDRECV ? " SDP_DIRECTION_SENDRECV"
: "SDP_MAX_QOS_DIRECTIONS")
\
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")
293
294
295/* QOS Strength tag */
296typedef 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;
305
306
307/* QOS direction */
308typedef 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;
316
317/* QoS Status types */
318typedef 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;
325
326/* QoS Status types */
327typedef enum {
328 SDP_CURR_QOS_TYPE,
329 SDP_CURR_UNKNOWN_TYPE,
330 SDP_MAX_CURR_TYPES
331} sdp_curr_type_e;
332
333/* QoS Status types */
334typedef enum {
335 SDP_DES_QOS_TYPE,
336 SDP_DES_UNKNOWN_TYPE,
337 SDP_MAX_DES_TYPES
338} sdp_des_type_e;
339
340/* QoS Status types */
341typedef enum {
342 SDP_CONF_QOS_TYPE,
343 SDP_CONF_UNKNOWN_TYPE,
344 SDP_MAX_CONF_TYPES
345} sdp_conf_type_e;
346
347
348/* Named event range result values. */
349typedef enum {
350 SDP_NO_MATCH,
351 SDP_PARTIAL_MATCH,
352 SDP_FULL_MATCH
353} sdp_ne_res_e;
354
355/* Fmtp attribute parameters for audio/video codec information */
356typedef enum {
357
358 /* mainly for audio codecs */
359 SDP_ANNEX_A, /* 0 */
360 SDP_ANNEX_B,
361 SDP_BITRATE,
362
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,
378
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,
387
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,
396
397 SDP_PARAMETER_ADD,
398
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,
406
407 /* These annexes have token=token format */
408 SDP_ANNEX_K,
409 SDP_ANNEX_N,
410 SDP_ANNEX_P,
411
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_LEVEL_IDX,
425 SDP_TIER,
426 SDP_OPUS_PTIME,
427 SDP_OPUS_MINPTIME,
428 SDP_OPUS_MAXPTIME,
429 SDP_MAX_FMTP_PARAM,
430 SDP_FMTP_PARAM_UNKNOWN
431} sdp_fmtp_codec_param_e;
432
433/* Fmtp attribute parameters values for
434 fmtp attribute parameters which convey codec
435 information */
436
437typedef enum {
438 SDP_YES,
439 SDP_NO,
440 SDP_MAX_FMTP_PARAM_VAL,
441 SDP_FMTP_PARAM_UNKNOWN_VAL
442} sdp_fmtp_codec_param_val_e;
443
444/* silenceSupp suppPref */
445typedef enum {
446 SDP_SILENCESUPP_PREF_STANDARD,
447 SDP_SILENCESUPP_PREF_CUSTOM,
448 SDP_SILENCESUPP_PREF_NULL, /* "-" */
449 SDP_MAX_SILENCESUPP_PREF,
450 SDP_SILENCESUPP_PREF_UNKNOWN
451} sdp_silencesupp_pref_e;
452
453/* silenceSupp sidUse */
454typedef enum {
455 SDP_SILENCESUPP_SIDUSE_NOSID,
456 SDP_SILENCESUPP_SIDUSE_FIXED,
457 SDP_SILENCESUPP_SIDUSE_SAMPLED,
458 SDP_SILENCESUPP_SIDUSE_NULL, /* "-" */
459 SDP_MAX_SILENCESUPP_SIDUSE,
460 SDP_SILENCESUPP_SIDUSE_UNKNOWN
461} sdp_silencesupp_siduse_e;
462
463typedef enum {
464 SDP_MEDIADIR_ROLE_PASSIVE,
465 SDP_MEDIADIR_ROLE_ACTIVE,
466 SDP_MEDIADIR_ROLE_BOTH,
467 SDP_MEDIADIR_ROLE_REUSE,
468 SDP_MEDIADIR_ROLE_UNKNOWN,
469 SDP_MAX_MEDIADIR_ROLES,
470 SDP_MEDIADIR_ROLE_UNSUPPORTED,
471 SDP_MEDIADIR_ROLE_INVALID
472} sdp_mediadir_role_e;
473
474typedef enum {
475 SDP_GROUP_ATTR_FID,
476 SDP_GROUP_ATTR_LS,
477 SDP_GROUP_ATTR_ANAT,
478 SDP_GROUP_ATTR_BUNDLE,
479 SDP_MAX_GROUP_ATTR_VAL,
480 SDP_GROUP_ATTR_UNSUPPORTED
481} sdp_group_attr_e;
482
483typedef enum {
484 SDP_SSRC_GROUP_ATTR_DUP,
485 SDP_SSRC_GROUP_ATTR_FEC,
486 SDP_SSRC_GROUP_ATTR_FECFR,
487 SDP_SSRC_GROUP_ATTR_FID,
488 SDP_SSRC_GROUP_ATTR_SIM,
489 SDP_MAX_SSRC_GROUP_ATTR_VAL,
490 SDP_SSRC_GROUP_ATTR_UNSUPPORTED
491} sdp_ssrc_group_attr_e;
492
493typedef enum {
494 SDP_SRC_FILTER_INCL,
495 SDP_SRC_FILTER_EXCL,
496 SDP_MAX_FILTER_MODE,
497 SDP_FILTER_MODE_NOT_PRESENT
498} sdp_src_filter_mode_e;
499
500typedef enum {
501 SDP_RTCP_UNICAST_MODE_REFLECTION,
502 SDP_RTCP_UNICAST_MODE_RSI,
503 SDP_RTCP_MAX_UNICAST_MODE,
504 SDP_RTCP_UNICAST_MODE_NOT_PRESENT
505} sdp_rtcp_unicast_mode_e;
506
507typedef enum {
508 SDP_CONNECTION_NOT_FOUND = -1,
509 SDP_CONNECTION_NEW = 0,
510 SDP_CONNECTION_EXISTING,
511 SDP_MAX_CONNECTION,
512 SDP_CONNECTION_UNKNOWN
513} sdp_connection_type_e;
514
515typedef enum {
516 SDP_SCTP_MEDIA_FMT_WEBRTC_DATACHANNEL,
517 SDP_SCTP_MEDIA_FMT_UNKNOWN
518} sdp_sctp_media_fmt_type_e;
519
520/*
521 * sdp_srtp_fec_order_t
522 * This type defines the order in which to perform FEC
523 * (Forward Error Correction) and SRTP Encryption/Authentication.
524 */
525typedef enum sdp_srtp_fec_order_t_ {
526 SDP_SRTP_THEN_FEC, /* upon sending perform SRTP then FEC */
527 SDP_FEC_THEN_SRTP, /* upon sending perform FEC then SRTP */
528 SDP_SRTP_FEC_SPLIT /* upon sending perform SRTP Encryption,
529 * then FEC, the SRTP Authentication */
530} sdp_srtp_fec_order_t;
531
532
533/*
534 * sdp_srtp_crypto_suite_t
535 * Enumeration of the crypto suites supported for MGCP SRTP
536 * package.
537 */
538typedef enum sdp_srtp_crypto_suite_t_ {
539 SDP_SRTP_UNKNOWN_CRYPTO_SUITE = 0,
540 SDP_SRTP_AES_CM_128_HMAC_SHA1_32,
541 SDP_SRTP_AES_CM_128_HMAC_SHA1_80,
542 SDP_SRTP_F8_128_HMAC_SHA1_80,
543 SDP_SRTP_MAX_NUM_CRYPTO_SUITES
544} sdp_srtp_crypto_suite_t;
545
546/*
547 * SDP SRTP crypto suite definition parameters
548 *
549 * SDP_SRTP_<crypto_suite>_KEY_BYTES
550 * The size of a master key for <crypto_suite> in bytes.
551 *
552 * SDP_SRTP_<crypto_suite>_SALT_BYTES
553 * The size of a master salt for <crypto_suite> in bytes.
554 */
555#define SDP_SRTP_AES_CM_128_HMAC_SHA1_32_KEY_BYTES16 16
556#define SDP_SRTP_AES_CM_128_HMAC_SHA1_32_SALT_BYTES14 14
557#define SDP_SRTP_AES_CM_128_HMAC_SHA1_80_KEY_BYTES16 16
558#define SDP_SRTP_AES_CM_128_HMAC_SHA1_80_SALT_BYTES14 14
559#define SDP_SRTP_F8_128_HMAC_SHA1_80_KEY_BYTES16 16
560#define SDP_SRTP_F8_128_HMAC_SHA1_80_SALT_BYTES14 14
561
562/* SDP Defines */
563
564#define SDP_MAX_LONG_STRING_LEN4096 4096 /* Max len for long SDP strings */
565#define SDP_MAX_STRING_LEN256 256 /* Max len for SDP string */
566#define SDP_MAX_SHORT_STRING_LEN12 12 /* Max len for a short SDP string */
567#define SDP_MAX_PAYLOAD_TYPES30 30 /* Max payload types in m= line */
568#define SDP_TOKEN_LEN2 2 /* Len of <token>= */
569#define SDP_CURRENT_VERSION0 0 /* Current default SDP version */
570#define SDP_MAX_PORT_PARAMS4 4 /* Max m= port params - x/x/x/x */
571#define SDP_MIN_DYNAMIC_PAYLOAD96 96 /* Min dynamic payload */
572#define SDP_MAX_DYNAMIC_PAYLOAD127 127 /* Max dynamic payload */
573#define SDP_MIN_CIF_VALUE1 1 /* applies to all QCIF,CIF,CIF4,CIF16,SQCIF */
574#define SDP_MAX_CIF_VALUE32 32 /* applies to all QCIF,CIF,CIF4,CIF16,SQCIF */
575#define SDP_MAX_SRC_ADDR_LIST1 1 /* Max source addrs for which filter applies */
576
577
578#define SDP_DEFAULT_PACKETIZATION_MODE_VALUE0 0 /* max packetization mode for H.264 */
579#define SDP_MAX_PACKETIZATION_MODE_VALUE2 2 /* max packetization mode for H.264 */
580#define SDP_INVALID_PACKETIZATION_MODE_VALUE255 255
581
582#define SDP_MAX_LEVEL_ASYMMETRY_ALLOWED_VALUE1 1 /* max level asymmetry allowed value for H.264 */
583#define SDP_DEFAULT_LEVEL_ASYMMETRY_ALLOWED_VALUE0 0 /* default level asymmetry allowed value for H.264 */
584#define SDP_INVALID_LEVEL_ASYMMETRY_ALLOWED_VALUE2 2 /* invalid value for level-asymmetry-allowed param for H.264 */
585
586
587/* Max number of stream ids that can be grouped together */
588#define SDP_MAX_MEDIA_STREAMS128 128
589
590#define SDP_UNSUPPORTED"Unsupported" "Unsupported"
591
592#define SDP_MAX_PROFILE_VALUE10 10
593#define SDP_MAX_LEVEL_VALUE100 100
594#define SDP_MIN_PROFILE_LEVEL_VALUE0 0
595#define SDP_MAX_TTL_VALUE255 255
596#define SDP_MIN_MCAST_ADDR_HI_BIT_VAL224 224
597#define SDP_MAX_MCAST_ADDR_HI_BIT_VAL239 239
598
599#define SDP_MAX_SSRC_GROUP_SSRCS32 32 /* max number of ssrcs allowed in a ssrc-group */
600
601/* SDP Enum Types */
602
603typedef enum {
604 SDP_ERR_INVALID_CONF_PTR,
605 SDP_ERR_INVALID_SDP_PTR,
606 SDP_ERR_INTERNAL,
607 SDP_MAX_ERR_TYPES
608} sdp_errmsg_e;
609
610/* SDP Structure Definitions */
611
612/* String names of varios tokens */
613typedef struct {
614 char *name;
615 uint8_t strlen;
616} sdp_namearray_t;
617
618/* c= line info */
619typedef struct {
620 sdp_nettype_e nettype;
621 sdp_addrtype_e addrtype;
622 char conn_addr[SDP_MAX_STRING_LEN256+1];
623 tinybool is_multicast;
624 uint16_t ttl;
625 uint16_t num_of_addresses;
626} sdp_conn_t;
627
628/* t= line info */
629typedef struct sdp_timespec {
630 char start_time[SDP_MAX_STRING_LEN256+1];
631 char stop_time[SDP_MAX_STRING_LEN256+1];
632 struct sdp_timespec *next_p;
633} sdp_timespec_t;
634
635
636/* k= line info */
637typedef struct sdp_encryptspec {
638 sdp_encrypt_type_e encrypt_type;
639 char encrypt_key[SDP_MAX_STRING_LEN256+1];
640} sdp_encryptspec_t;
641
642
643/* FMTP attribute deals with named events in the range of 0-255 as
644 * defined in RFC 2833 */
645#define SDP_MIN_NE_VALUE0 0
646#define SDP_MAX_NE_VALUES256 256
647#define SDP_NE_BITS_PER_WORD( sizeof(uint32_t) * 8 ) ( sizeof(uint32_t) * 8 )
648#define SDP_NE_NUM_BMAP_WORDS((256 + ( sizeof(uint32_t) * 8 ) - 1)/( sizeof(uint32_t) * 8 )
)
((SDP_MAX_NE_VALUES256 + SDP_NE_BITS_PER_WORD( sizeof(uint32_t) * 8 ) - 1)/SDP_NE_BITS_PER_WORD( sizeof(uint32_t) * 8 ) )
649#define SDP_NE_BIT_0( 0x00000001 ) ( 0x00000001 )
650#define SDP_NE_ALL_BITS( 0xFFFFFFFF ) ( 0xFFFFFFFF )
651
652#define SDP_DEINT_BUF_REQ_FLAG0x1 0x1
653#define SDP_INIT_BUF_TIME_FLAG0x2 0x2
654#define SDP_MAX_RCMD_NALU_SIZE_FLAG0x4 0x4
655#define SDP_DEINT_BUF_CAP_FLAG0x8 0x8
656
657#define SDP_FMTP_UNUSED0xFFFF 0xFFFF
658
659typedef struct sdp_fmtp {
660 uint16_t payload_num;
661 uint32_t maxval; /* maxval optimizes bmap search */
662 uint32_t bmap[ SDP_NE_NUM_BMAP_WORDS((256 + ( sizeof(uint32_t) * 8 ) - 1)/( sizeof(uint32_t) * 8 )
)
];
663 sdp_fmtp_format_type_e fmtp_format; /* Gives the format type
664 for FMTP attribute*/
665 tinybool annexb_required;
666 tinybool annexa_required;
667
668 tinybool annexa;
669 tinybool annexb;
670 uint32_t bitrate;
671 uint32_t mode;
672
673 /* some OPUS specific fmtp params */
674 uint32_t maxplaybackrate;
675 uint32_t maxaveragebitrate;
676 uint16_t usedtx;
677 uint16_t stereo;
678 uint16_t useinbandfec;
679 char maxcodedaudiobandwidth[SDP_MAX_STRING_LEN256+1];
680 uint16_t cbr;
681 uint32_t opus_ptime;
682 uint32_t opus_minptime;
683 uint32_t opus_maxptime;
684
685 /* BEGIN - All Video related FMTP parameters */
686 uint16_t qcif;
687 uint16_t cif;
688 uint16_t maxbr;
689 uint16_t sqcif;
690 uint16_t cif4;
691 uint16_t cif16;
692
693 uint16_t custom_x;
694 uint16_t custom_y;
695 uint16_t custom_mpi;
696 /* CUSTOM=360,240,4 implies X-AXIS=360, Y-AXIS=240; MPI=4 */
697 uint16_t par_width;
698 uint16_t par_height;
699 /* PAR=12:11 implies par_width=12, par_height=11 */
700
701 /* CPCF should be a float. IOS does not support float and so it is uint16_t */
702 /* For portable stack, CPCF should be defined as float and the parsing should
703 * be modified accordingly */
704 uint16_t cpcf;
705 uint16_t bpp;
706 uint16_t hrd;
707
708 int16_t profile;
709 int16_t level;
710 tinybool is_interlace;
711
712 /* some more H.264 specific fmtp params */
713 char profile_level_id[SDP_MAX_STRING_LEN256+1];
714 char parameter_sets[SDP_MAX_STRING_LEN256+1];
715 uint16_t packetization_mode;
716 uint16_t level_asymmetry_allowed;
717 uint16_t interleaving_depth;
718 uint32_t deint_buf_req;
719 uint32_t max_don_diff;
720 uint32_t init_buf_time;
721
722 uint32_t max_mbps;
723 uint32_t max_fs;
724 uint32_t max_fr;
725 uint32_t max_cpb;
726 uint32_t max_dpb;
727 uint32_t max_br;
728 tinybool redundant_pic_cap;
729 uint32_t deint_buf_cap;
730 uint32_t max_rcmd_nalu_size;
731 uint16_t parameter_add;
732
733 tinybool annex_d;
734
735 tinybool annex_f;
736 tinybool annex_i;
737 tinybool annex_j;
738 tinybool annex_t;
739
740 /* H.263 codec requires annex K,N and P to have values */
741 uint16_t annex_k_val;
742 uint16_t annex_n_val;
743
744 /* RFC 5109 Section 4.2 for specifying redundant encodings */
745 uint8_t redundant_encodings[SDP_FMTP_MAX_REDUNDANT_ENCODINGS128];
746
747 /* av1 */
748 uint8_t av1_profile;
749 tinybool av1_has_profile;
750 uint8_t av1_level_idx;
751 tinybool av1_has_level_idx;
752 uint8_t av1_tier;
753 tinybool av1_has_tier;
754
755 /* RFC 2833 Section 3.9 (4733) for specifying support DTMF tones:
756 The list of values consists of comma-separated elements, which
757 can be either a single decimal number or two decimal numbers
758 separated by a hyphen (dash), where the second number is larger
759 than the first. No whitespace is allowed between numbers or
760 hyphens. The list does not have to be sorted.
761 */
762 char dtmf_tones[SDP_MAX_STRING_LEN256+1];
763
764 /* Annex P can take one or more values in the range 1-4 . e.g P=1,3 */
765 uint16_t annex_p_val_picture_resize; /* 1 = four; 2 = sixteenth */
766 uint16_t annex_p_val_warp; /* 3 = half; 4=sixteenth */
767
768 uint8_t flag;
769
770 /* RTX parameters */
771 uint8_t apt;
772 tinybool has_rtx_time;
773 uint32_t rtx_time;
774
775 /* END - All Video related FMTP parameters */
776
777} sdp_fmtp_t;
778
779/* a=sctpmap line used for Datachannels */
780typedef struct sdp_sctpmap {
781 uint16_t port;
782 uint32_t streams; /* Num streams per Datachannel */
783 char protocol[SDP_MAX_STRING_LEN256+1];
784} sdp_sctpmap_t;
785
786#define SDP_MAX_MSID_LEN64 64
787
788typedef struct sdp_msid {
789 char identifier[SDP_MAX_MSID_LEN64+1];
790 char appdata[SDP_MAX_MSID_LEN64+1];
791} sdp_msid_t;
792
793/* a=qos|secure|X-pc-qos|X-qos info */
794typedef struct sdp_qos {
795 sdp_qos_strength_e strength;
796 sdp_qos_dir_e direction;
797 tinybool confirm;
798 sdp_qos_status_types_e status_type;
799} sdp_qos_t;
800
801/* a=curr:qos status_type direction */
802typedef struct sdp_curr {
803 sdp_curr_type_e type;
804 sdp_qos_status_types_e status_type;
805 sdp_qos_dir_e direction;
806} sdp_curr_t;
807
808/* a=des:qos strength status_type direction */
809typedef struct sdp_des {
810 sdp_des_type_e type;
811 sdp_qos_strength_e strength;
812 sdp_qos_status_types_e status_type;
813 sdp_qos_dir_e direction;
814} sdp_des_t;
815
816/* a=conf:qos status_type direction */
817typedef struct sdp_conf {
818 sdp_conf_type_e type;
819 sdp_qos_status_types_e status_type;
820 sdp_qos_dir_e direction;
821} sdp_conf_t;
822
823
824/* a=rtpmap or a=sprtmap info */
825typedef struct sdp_transport_map {
826 uint16_t payload_num;
827 char encname[SDP_MAX_STRING_LEN256+1];
828 uint32_t clockrate;
829 uint16_t num_chan;
830} sdp_transport_map_t;
831
832
833/* a=rtr info */
834typedef struct sdp_rtr {
835 tinybool confirm;
836} sdp_rtr_t;
837
838/* a=subnet info */
839typedef struct sdp_subnet {
840 sdp_nettype_e nettype;
841 sdp_addrtype_e addrtype;
842 char addr[SDP_MAX_STRING_LEN256+1];
843 int32_t prefix;
844} sdp_subnet_t;
845
846
847/* a=X-pc-codec info */
848typedef struct sdp_pccodec {
849 uint16_t num_payloads;
850 ushort payload_type[SDP_MAX_PAYLOAD_TYPES30];
851} sdp_pccodec_t;
852
853/* a=direction info */
854typedef struct sdp_comediadir {
855 sdp_mediadir_role_e role;
856 tinybool conn_info_present;
857 sdp_conn_t conn_info;
858 uint32_t src_port;
859} sdp_comediadir_t;
860
861
862
863/* a=silenceSupp info */
864typedef struct sdp_silencesupp {
865 tinybool enabled;
866 tinybool timer_null;
867 uint16_t timer;
868 sdp_silencesupp_pref_e pref;
869 sdp_silencesupp_siduse_e siduse;
870 tinybool fxnslevel_null;
871 uint8_t fxnslevel;
872} sdp_silencesupp_t;
873
874
875/*
876 * a=mptime info */
877/* Note that an interval value of zero corresponds to
878 * the "-" syntax on the a= line.
879 */
880typedef struct sdp_mptime {
881 uint16_t num_intervals;
882 ushort intervals[SDP_MAX_PAYLOAD_TYPES30];
883} sdp_mptime_t;
884
885/*
886 * a=X-sidin:<val>, a=X-sidout:< val> and a=X-confid: <val>
887 * Stream Id,ConfID related attributes to be used for audio/video conferencing
888 *
889*/
890
891typedef struct sdp_stream_data {
892 char x_sidin[SDP_MAX_STRING_LEN256+1];
893 char x_sidout[SDP_MAX_STRING_LEN256+1];
894 char x_confid[SDP_MAX_STRING_LEN256+1];
895 sdp_group_attr_e group_attr; /* FID or LS */
896 uint16_t num_group_id;
897 char * group_ids[SDP_MAX_MEDIA_STREAMS128];
898} sdp_stream_data_t;
899
900typedef struct sdp_msid_semantic {
901 char semantic[SDP_MAX_STRING_LEN256+1];
902 char * msids[SDP_MAX_MEDIA_STREAMS128];
903} sdp_msid_semantic_t;
904
905/*
906 * a=source-filter:<filter-mode> <filter-spec>
907 * <filter-spec> = <nettype> <addrtype> <dest-addr> <src_addr><src_addr>...
908 * One or more source addresses to apply filter, for one or more connection
909 * address in unicast/multicast environments
910 */
911typedef struct sdp_source_filter {
912 sdp_src_filter_mode_e mode;
913 sdp_nettype_e nettype;
914 sdp_addrtype_e addrtype;
915 char dest_addr[SDP_MAX_STRING_LEN256+1];
916 uint16_t num_src_addr;
917 char src_list[SDP_MAX_SRC_ADDR_LIST1+1][SDP_MAX_STRING_LEN256+1];
918} sdp_source_filter_t;
919
920/*
921 * a=rtcp-fb:<payload-type> <feedback-type> [<feedback-parameters>]
922 * Defines RTCP feedback parameters
923 */
924#define SDP_ALL_PAYLOADS0xFFFF 0xFFFF
925typedef struct sdp_fmtp_fb {
926 uint16_t payload_num; /* can be SDP_ALL_PAYLOADS */
927 sdp_rtcp_fb_type_e feedback_type;
928 union {
929 sdp_rtcp_fb_ack_type_e ack;
930 sdp_rtcp_fb_ccm_type_e ccm;
931 sdp_rtcp_fb_nack_type_e nack;
932 uint32_t trr_int;
933 } param;
934 char extra[SDP_MAX_STRING_LEN256 + 1]; /* Holds any trailing information that
935 cannot be represented by preceding
936 fields. */
937} sdp_fmtp_fb_t;
938
939typedef struct sdp_rtcp {
940 sdp_nettype_e nettype;
941 sdp_addrtype_e addrtype;
942 char addr[SDP_MAX_STRING_LEN256+1];
943 uint16_t port;
944} sdp_rtcp_t;
945
946/*
947 * b=<bw-modifier>:<val>
948 *
949*/
950typedef struct sdp_bw_data {
951 struct sdp_bw_data *next_p;
952 sdp_bw_modifier_e bw_modifier;
953 int bw_val;
954} sdp_bw_data_t;
955
956/*
957 * This structure houses a linked list of sdp_bw_data_t instances. Each
958 * sdp_bw_data_t instance represents one b= line.
959 */
960typedef struct sdp_bw {
961 uint16_t bw_data_count;
962 sdp_bw_data_t *bw_data_list;
963} sdp_bw_t;
964
965/* Media lines for AAL2 may have more than one transport type defined
966 * each with its own payload type list. These are referred to as
967 * profile types instead of transport types. This structure is used
968 * to handle these multiple profile types. Note: One additional profile
969 * field is needed because of the way parsing is done. This is not an
970 * error. */
971typedef struct sdp_media_profiles {
972 uint16_t num_profiles;
973 sdp_transport_e profile[SDP_MAX_PROFILES3+1];
974 uint16_t num_payloads[SDP_MAX_PROFILES3];
975 sdp_payload_ind_e payload_indicator[SDP_MAX_PROFILES3][SDP_MAX_PAYLOAD_TYPES30];
976 uint16_t payload_type[SDP_MAX_PROFILES3][SDP_MAX_PAYLOAD_TYPES30];
977} sdp_media_profiles_t;
978/*
979 * a=extmap:<value>["/"<direction>] <URI> <extensionattributes>
980 *
981 */
982typedef struct sdp_extmap {
983 uint16_t id;
984 sdp_direction_e media_direction;
985 tinybool media_direction_specified;
986 char uri[SDP_MAX_STRING_LEN256+1];
987 char extension_attributes[SDP_MAX_STRING_LEN256+1];
988} sdp_extmap_t;
989
990typedef struct sdp_ssrc {
991 uint32_t ssrc;
992 char attribute[SDP_MAX_STRING_LEN256 + 1];
993} sdp_ssrc_t;
994
995typedef struct sdp_ssrc_group {
996 sdp_ssrc_group_attr_e semantic;
997 uint16_t num_ssrcs;
998 uint32_t ssrcs[SDP_MAX_SSRC_GROUP_SSRCS32];
999} sdp_ssrc_group_t;
1000
1001/*
1002 * sdp_srtp_crypto_context_t
1003 * This type is used to hold cryptographic context information.
1004 *
1005 */
1006typedef struct sdp_srtp_crypto_context_t_ {
1007 int32_t tag;
1008 unsigned long selection_flags;
1009 sdp_srtp_crypto_suite_t suite;
1010 unsigned char master_key[SDP_SRTP_MAX_KEY_SIZE_BYTES16];
1011 unsigned char master_salt[SDP_SRTP_MAX_SALT_SIZE_BYTES14];
1012 unsigned char master_key_size_bytes;
1013 unsigned char master_salt_size_bytes;
1014 unsigned long ssrc; /* not used */
1015 unsigned long roc; /* not used */
1016 unsigned long kdr; /* not used */
1017 unsigned short seq; /* not used */
1018 sdp_srtp_fec_order_t fec_order; /* not used */
1019 unsigned char master_key_lifetime[SDP_SRTP_MAX_LIFETIME_BYTES16];
1020 unsigned char mki[SDP_SRTP_MAX_MKI_SIZE_BYTES4];
1021 uint16_t mki_size_bytes;
1022 char* session_parameters;
1023} sdp_srtp_crypto_context_t;
1024
1025
1026/* m= line info and associated attribute list */
1027/* Note: Most of the port parameter values are 16-bit values. We set
1028 * the type to int32_t so we can return either a 16-bit value or the
1029 * choose value. */
1030typedef struct sdp_mca {
1031 sdp_media_e media;
1032 sdp_conn_t conn;
1033 sdp_transport_e transport;
1034 sdp_port_format_e port_format;
1035 int32_t port;
1036 int32_t sctpport;
1037 sdp_sctp_media_fmt_type_e sctp_fmt;
1038 int32_t num_ports;
1039 int32_t vpi;
1040 uint32_t vci; /* VCI needs to be 32-bit */
1041 int32_t vcci;
1042 int32_t cid;
1043 uint16_t num_payloads;
1044 sdp_payload_ind_e payload_indicator[SDP_MAX_PAYLOAD_TYPES30];
1045 uint16_t payload_type[SDP_MAX_PAYLOAD_TYPES30];
1046 sdp_media_profiles_t *media_profiles_p;
1047 tinybool sessinfo_found;
1048 sdp_encryptspec_t encrypt;
1049 sdp_bw_t bw;
1050 sdp_attr_e media_direction; /* Either INACTIVE, SENDONLY,
1051 RECVONLY, or SENDRECV */
1052 uint32_t mid;
1053 uint32_t line_number;
1054 struct sdp_attr *media_attrs_p;
1055 struct sdp_mca *next_p;
1056} sdp_mca_t;
1057
1058
1059/* generic a= line info */
1060typedef struct sdp_attr {
1061 sdp_attr_e type;
1062 uint32_t line_number;
1063 union {
1064 tinybool boolean_val;
1065 uint32_t u32_val;
1066 char string_val[SDP_MAX_STRING_LEN256+1];
1067 char *stringp;
1068 char ice_attr[SDP_MAX_STRING_LEN256+1];
1069 sdp_fmtp_t fmtp;
1070 sdp_sctpmap_t sctpmap;
1071 sdp_msid_t msid;
1072 sdp_qos_t qos;
1073 sdp_curr_t curr;
1074 sdp_des_t des;
1075 sdp_conf_t conf;
1076 sdp_transport_map_t transport_map; /* A rtpmap or sprtmap */
1077 sdp_subnet_t subnet;
1078 sdp_t38_ratemgmt_e t38ratemgmt;
1079 sdp_t38_udpec_e t38udpec;
1080 sdp_pccodec_t pccodec;
1081 sdp_silencesupp_t silencesupp;
1082 sdp_mca_t *cap_p; /* A X-CAP or CDSC attribute */
1083 sdp_rtr_t rtr;
1084 sdp_comediadir_t comediadir;
1085 sdp_srtp_crypto_context_t srtp_context;
1086 sdp_mptime_t mptime;
1087 sdp_stream_data_t stream_data;
1088 sdp_msid_semantic_t msid_semantic;
1089 char unknown[SDP_MAX_STRING_LEN256+1];
1090 sdp_source_filter_t source_filter;
1091 sdp_fmtp_fb_t rtcp_fb;
1092 sdp_rtcp_t rtcp;
1093 sdp_setup_type_e setup;
1094 sdp_connection_type_e connection;
1095 sdp_extmap_t extmap;
1096 sdp_ssrc_t ssrc;
1097 sdp_ssrc_group_t ssrc_group;
1098 } attr;
1099 struct sdp_attr *next_p;
1100} sdp_attr_t;
1101typedef struct sdp_srtp_crypto_suite_list_ {
Excessive padding in 'struct sdp_srtp_crypto_suite_list_' (10 padding bytes, where 2 is optimal). Optimal fields order: crypto_suite_str, crypto_suite_val, key_size_bytes, salt_size_bytes, consider reordering the fields or adding explicit padding members
1102 sdp_srtp_crypto_suite_t crypto_suite_val;
1103 char * crypto_suite_str;
1104 unsigned char key_size_bytes;
1105 unsigned char salt_size_bytes;
1106} sdp_srtp_crypto_suite_list;
1107
1108typedef void (*sdp_parse_error_handler)(void *context,
1109 uint32_t line,
1110 const char *message);
1111
1112/* Application configuration options */
1113typedef struct sdp_conf_options {
1114 tinybool debug_flag[SDP_MAX_DEBUG_TYPES];
1115 tinybool version_reqd;
1116 tinybool owner_reqd;
1117 tinybool session_name_reqd;
1118 tinybool timespec_reqd;
1119 tinybool media_supported[SDP_MAX_MEDIA_TYPES];
1120 tinybool nettype_supported[SDP_MAX_NETWORK_TYPES];
1121 tinybool addrtype_supported[SDP_MAX_ADDR_TYPES];
1122 tinybool transport_supported[SDP_MAX_TRANSPORT_TYPES];
1123 tinybool allow_choose[SDP_MAX_CHOOSE_PARAMS];
1124 /* Statistics counts */
1125 uint32_t num_builds;
1126 uint32_t num_parses;
1127 uint32_t num_not_sdp_desc;
1128 uint32_t num_invalid_token_order;
1129 uint32_t num_invalid_param;
1130 uint32_t num_no_resource;
1131 struct sdp_conf_options *next_p;
1132 sdp_parse_error_handler error_handler;
1133 void *error_handler_context;
1134} sdp_conf_options_t;
1135
1136
1137/* Session level SDP info with pointers to media line info. */
1138/* Elements here that can only be one of are included directly. Elements */
1139/* that can be more than one are pointers. */
1140typedef struct {
1141 sdp_conf_options_t *conf_p;
1142 tinybool debug_flag[SDP_MAX_DEBUG_TYPES];
1143 char debug_str[SDP_MAX_STRING_LEN256+1];
1144 uint32_t debug_id;
1145 int32_t version; /* version is really a uint16_t */
1146 char owner_name[SDP_MAX_STRING_LEN256+1];
1147 char owner_sessid[SDP_MAX_STRING_LEN256+1];
1148 char owner_version[SDP_MAX_STRING_LEN256+1];
1149 sdp_nettype_e owner_network_type;
1150 sdp_addrtype_e owner_addr_type;
1151 char owner_addr[SDP_MAX_STRING_LEN256+1];
1152 char sessname[SDP_MAX_STRING_LEN256+1];
1153 tinybool sessinfo_found;
1154 tinybool uri_found;
1155 sdp_conn_t default_conn;
1156 sdp_timespec_t *timespec_p;
1157 sdp_encryptspec_t encrypt;
1158 sdp_bw_t bw;
1159 sdp_attr_t *sess_attrs_p;
1160
1161 /* Info to help with building capability attributes. */
1162 uint16_t cur_cap_num;
1163 sdp_mca_t *cur_cap_p;
1164 /* Info to help parsing X-cpar attrs. */
1165 uint16_t cap_valid;
1166 uint16_t last_cap_inst;
1167 /* Info to help building X-cpar/cpar attrs. */
1168 sdp_attr_e last_cap_type;
1169
1170 /* Facilitates reporting line number for SDP errors */
1171 uint32_t parse_line;
1172
1173 /* MCA - Media, connection, and attributes */
1174 sdp_mca_t *mca_p;
1175 ushort mca_count;
1176} sdp_t;
1177
1178
1179/* Token processing table. */
1180typedef struct {
1181 char *name;
1182 sdp_result_e (*parse_func)(sdp_t *sdp_p, uint16_t level, const char *ptr);
1183 sdp_result_e (*build_func)(sdp_t *sdp_p, uint16_t level, flex_string *fs);
1184} sdp_tokenarray_t;
1185
1186/* Attribute processing table. */
1187typedef struct {
1188 char *name;
1189 uint16_t strlen;
1190 sdp_result_e (*parse_func)(sdp_t *sdp_p, sdp_attr_t *attr_p,
1191 const char *ptr);
1192 sdp_result_e (*build_func)(sdp_t *sdp_p, sdp_attr_t *attr_p,
1193 flex_string *fs);
1194} sdp_attrarray_t;
1195
1196
1197/* Prototypes */
1198
1199/* sdp_config.c */
1200extern sdp_conf_options_t *sdp_init_config(void);
1201extern void sdp_free_config(sdp_conf_options_t *config_p);
1202extern void sdp_appl_debug(sdp_conf_options_t *config_p, sdp_debug_e debug_type,
1203 tinybool debug_flag);
1204extern void sdp_require_version(sdp_conf_options_t *config_p, tinybool version_required);
1205extern void sdp_require_owner(sdp_conf_options_t *config_p, tinybool owner_required);
1206extern void sdp_require_session_name(sdp_conf_options_t *config_p,
1207 tinybool sess_name_required);
1208extern void sdp_require_timespec(sdp_conf_options_t *config_p, tinybool timespec_required);
1209extern void sdp_media_supported(sdp_conf_options_t *config_p, sdp_media_e media_type,
1210 tinybool media_supported);
1211extern void sdp_nettype_supported(sdp_conf_options_t *config_p, sdp_nettype_e nettype,
1212 tinybool nettype_supported);
1213extern void sdp_addrtype_supported(sdp_conf_options_t *config_p, sdp_addrtype_e addrtype,
1214 tinybool addrtype_supported);
1215extern void sdp_transport_supported(sdp_conf_options_t *config_p, sdp_transport_e transport,
1216 tinybool transport_supported);
1217extern void sdp_allow_choose(sdp_conf_options_t *config_p, sdp_choose_param_e param,
1218 tinybool choose_allowed);
1219extern void sdp_config_set_error_handler(sdp_conf_options_t *config_p,
1220 sdp_parse_error_handler handler,
1221 void *context);
1222
1223/* sdp_main.c */
1224extern sdp_t *sdp_init_description(sdp_conf_options_t *config_p);
1225extern void sdp_debug(sdp_t *sdp_ptr, sdp_debug_e debug_type, tinybool debug_flag);
1226extern void sdp_set_string_debug(sdp_t *sdp_ptr, const char *debug_str);
1227extern sdp_result_e sdp_parse(sdp_t *sdp_ptr, const char *buf, size_t len);
1228extern sdp_result_e sdp_build(sdp_t *sdp_ptr, flex_string *fs);
1229extern sdp_result_e sdp_free_description(sdp_t *sdp_ptr);
1230extern void sdp_parse_error(sdp_t *sdp, const char *format, ...);
1231
1232extern const char *sdp_get_result_name(sdp_result_e rc);
1233
1234
1235/* sdp_access.c */
1236extern tinybool sdp_version_valid(sdp_t *sdp_p);
1237extern int32_t sdp_get_version(sdp_t *sdp_p);
1238extern sdp_result_e sdp_set_version(sdp_t *sdp_p, int32_t version);
1239
1240extern tinybool sdp_owner_valid(sdp_t *sdp_p);
1241extern const char *sdp_get_owner_username(sdp_t *sdp_p);
1242extern const char *sdp_get_owner_sessionid(sdp_t *sdp_p);
1243extern const char *sdp_get_owner_version(sdp_t *sdp_p);
1244extern sdp_nettype_e sdp_get_owner_network_type(sdp_t *sdp_p);
1245extern sdp_addrtype_e sdp_get_owner_address_type(sdp_t *sdp_p);
1246extern const char *sdp_get_owner_address(sdp_t *sdp_p);
1247extern sdp_result_e sdp_set_owner_username(sdp_t *sdp_p, const char *username);
1248extern sdp_result_e sdp_set_owner_sessionid(sdp_t *sdp_p, const char *sessid);
1249extern sdp_result_e sdp_set_owner_version(sdp_t *sdp_p, const char *version);
1250extern sdp_result_e sdp_set_owner_network_type(sdp_t *sdp_p,
1251 sdp_nettype_e network_type);
1252extern sdp_result_e sdp_set_owner_address_type(sdp_t *sdp_p,
1253 sdp_addrtype_e address_type);
1254extern sdp_result_e sdp_set_owner_address(sdp_t *sdp_p, const char *address);
1255
1256extern tinybool sdp_session_name_valid(sdp_t *sdp_p);
1257extern const char *sdp_get_session_name(sdp_t *sdp_p);
1258extern sdp_result_e sdp_set_session_name(sdp_t *sdp_p, const char *sessname);
1259
1260extern tinybool sdp_timespec_valid(sdp_t *sdp_ptr);
1261extern const char *sdp_get_time_start(sdp_t *sdp_ptr);
1262extern const char *sdp_get_time_stop(sdp_t *sdp_ptr);
1263sdp_result_e sdp_set_time_start(sdp_t *sdp_p, const char *start_time);
1264sdp_result_e sdp_set_time_stop(sdp_t *sdp_p, const char *stop_time);
1265
1266extern tinybool sdp_encryption_valid(sdp_t *sdp_p, uint16_t level);
1267extern sdp_encrypt_type_e sdp_get_encryption_method(sdp_t *sdp_p, uint16_t level);
1268extern const char *sdp_get_encryption_key(sdp_t *sdp_p, uint16_t level);
1269
1270extern tinybool sdp_connection_valid(sdp_t *sdp_p, uint16_t level);
1271extern tinybool sdp_bw_line_exists(sdp_t *sdp_p, uint16_t level, uint16_t inst_num);
1272extern tinybool sdp_bandwidth_valid(sdp_t *sdp_p, uint16_t level, uint16_t inst_num);
1273extern sdp_nettype_e sdp_get_conn_nettype(sdp_t *sdp_p, uint16_t level);
1274extern sdp_addrtype_e sdp_get_conn_addrtype(sdp_t *sdp_p, uint16_t level);
1275extern const char *sdp_get_conn_address(sdp_t *sdp_p, uint16_t level);
1276
1277extern tinybool sdp_is_mcast_addr (sdp_t *sdp_p, uint16_t level);
1278extern int32_t sdp_get_mcast_ttl(sdp_t *sdp_p, uint16_t level);
1279extern int32_t sdp_get_mcast_num_of_addresses(sdp_t *sdp_p, uint16_t level);
1280
1281extern sdp_result_e sdp_set_conn_nettype(sdp_t *sdp_p, uint16_t level,
1282 sdp_nettype_e nettype);
1283extern sdp_result_e sdp_set_conn_addrtype(sdp_t *sdp_p, uint16_t level,
1284 sdp_addrtype_e addrtype);
1285extern sdp_result_e sdp_set_conn_address(sdp_t *sdp_p, uint16_t level,
1286 const char *address);
1287
1288extern tinybool sdp_media_line_valid(sdp_t *sdp_p, uint16_t level);
1289extern uint16_t sdp_get_num_media_lines(sdp_t *sdp_ptr);
1290extern sdp_media_e sdp_get_media_type(sdp_t *sdp_p, uint16_t level);
1291extern uint32_t sdp_get_media_line_number(sdp_t *sdp_p, uint16_t level);
1292extern sdp_port_format_e sdp_get_media_port_format(sdp_t *sdp_p, uint16_t level);
1293extern int32_t sdp_get_media_portnum(sdp_t *sdp_p, uint16_t level);
1294extern int32_t sdp_get_media_portcount(sdp_t *sdp_p, uint16_t level);
1295extern int32_t sdp_get_media_vpi(sdp_t *sdp_p, uint16_t level);
1296extern uint32_t sdp_get_media_vci(sdp_t *sdp_p, uint16_t level);
1297extern int32_t sdp_get_media_vcci(sdp_t *sdp_p, uint16_t level);
1298extern int32_t sdp_get_media_cid(sdp_t *sdp_p, uint16_t level);
1299extern sdp_transport_e sdp_get_media_transport(sdp_t *sdp_p, uint16_t level);
1300extern uint16_t sdp_get_media_num_profiles(sdp_t *sdp_p, uint16_t level);
1301extern sdp_transport_e sdp_get_media_profile(sdp_t *sdp_p, uint16_t level,
1302 uint16_t profile_num);
1303extern uint16_t sdp_get_media_num_payload_types(sdp_t *sdp_p, uint16_t level);
1304extern uint16_t sdp_get_media_profile_num_payload_types(sdp_t *sdp_p, uint16_t level,
1305 uint16_t profile_num);
1306extern rtp_ptype sdp_get_known_payload_type(sdp_t *sdp_p,
1307 uint16_t level,
1308 uint16_t payload_type_raw);
1309extern uint32_t sdp_get_media_payload_type(sdp_t *sdp_p, uint16_t level,
1310 uint16_t payload_num, sdp_payload_ind_e *indicator);
1311extern uint32_t sdp_get_media_profile_payload_type(sdp_t *sdp_p, uint16_t level,
1312 uint16_t prof_num, uint16_t payload_num, sdp_payload_ind_e *indicator);
1313extern sdp_result_e sdp_insert_media_line(sdp_t *sdp_p, uint16_t level);
1314extern sdp_result_e sdp_set_media_type(sdp_t *sdp_p, uint16_t level,
1315 sdp_media_e media);
1316extern sdp_result_e sdp_set_media_portnum(sdp_t *sdp_p, uint16_t level,
1317 int32_t portnum, int32_t sctpport);
1318extern int32_t sdp_get_media_sctp_port(sdp_t *sdp_p, uint16_t level);
1319extern sdp_sctp_media_fmt_type_e sdp_get_media_sctp_fmt(sdp_t *sdp_p, uint16_t level);
1320extern sdp_result_e sdp_set_media_transport(sdp_t *sdp_p, uint16_t level,
1321 sdp_transport_e transport);
1322extern sdp_result_e sdp_add_media_profile(sdp_t *sdp_p, uint16_t level,
1323 sdp_transport_e profile);
1324extern sdp_result_e sdp_add_media_payload_type(sdp_t *sdp_p, uint16_t level,
1325 uint16_t payload_type, sdp_payload_ind_e indicator);
1326extern sdp_result_e sdp_add_media_profile_payload_type(sdp_t *sdp_p,
1327 uint16_t level, uint16_t prof_num, uint16_t payload_type,
1328 sdp_payload_ind_e indicator);
1329
1330/* sdp_attr_access.c */
1331extern sdp_attr_t *sdp_find_attr (sdp_t *sdp_p, uint16_t level, uint8_t cap_num,
1332 sdp_attr_e attr_type, uint16_t inst_num);
1333
1334extern int sdp_find_fmtp_inst(sdp_t *sdp_ptr, uint16_t level, uint16_t payload_num);
1335extern sdp_result_e sdp_add_new_attr(sdp_t *sdp_p, uint16_t level, uint8_t cap_num,
1336 sdp_attr_e attr_type, uint16_t *inst_num);
1337extern sdp_result_e sdp_attr_num_instances(sdp_t *sdp_p, uint16_t level,
1338 uint8_t cap_num, sdp_attr_e attr_type, uint16_t *num_attr_inst);
1339extern tinybool sdp_attr_valid(sdp_t *sdp_p, sdp_attr_e attr_type,
1340 uint16_t level, uint8_t cap_num, uint16_t inst_num);
1341extern uint32_t sdp_attr_line_number(sdp_t *sdp_p, sdp_attr_e attr_type,
1342 uint16_t level, uint8_t cap_num, uint16_t inst_num);
1343extern const char *sdp_attr_get_simple_string(sdp_t *sdp_p,
1344 sdp_attr_e attr_type, uint16_t level, uint8_t cap_num, uint16_t inst_num);
1345extern const char *sdp_attr_get_long_string(sdp_t *sdp_p,
1346 sdp_attr_e attr_type, uint16_t level, uint8_t cap_num, uint16_t inst_num);
1347extern uint32_t sdp_attr_get_simple_u32(sdp_t *sdp_p, sdp_attr_e attr_type,
1348 uint16_t level, uint8_t cap_num, uint16_t inst_num);
1349extern tinybool sdp_attr_get_simple_boolean(sdp_t *sdp_p,
1350 sdp_attr_e attr_type, uint16_t level, uint8_t cap_num, uint16_t inst_num);
1351extern tinybool sdp_attr_is_present (sdp_t *sdp_p, sdp_attr_e attr_type,
1352 uint16_t level, uint8_t cap_num);
1353extern const char* sdp_attr_get_maxprate(sdp_t *sdp_p, uint16_t level,
1354 uint16_t inst_num);
1355extern sdp_t38_ratemgmt_e sdp_attr_get_t38ratemgmt(sdp_t *sdp_p, uint16_t level,
1356 uint8_t cap_num, uint16_t inst_num);
1357extern sdp_t38_udpec_e sdp_attr_get_t38udpec(sdp_t *sdp_p, uint16_t level,
1358 uint8_t cap_num, uint16_t inst_num);
1359extern sdp_direction_e sdp_get_media_direction(sdp_t *sdp_p, uint16_t level,
1360 uint8_t cap_num);
1361extern sdp_qos_strength_e sdp_attr_get_qos_strength(sdp_t *sdp_p, uint16_t level,
1362 uint8_t cap_num, sdp_attr_e qos_attr, uint16_t inst_num);
1363extern sdp_qos_status_types_e sdp_attr_get_qos_status_type (sdp_t *sdp_p, uint16_t level,
1364 uint8_t cap_num, sdp_attr_e qos_attr, uint16_t inst_num);
1365extern sdp_qos_dir_e sdp_attr_get_qos_direction(sdp_t *sdp_p, uint16_t level,
1366 uint8_t cap_num, sdp_attr_e qos_attr, uint16_t inst_num);
1367extern tinybool sdp_attr_get_qos_confirm(sdp_t *sdp_p, uint16_t level,
1368 uint8_t cap_num, sdp_attr_e qos_attr, uint16_t inst_num);
1369extern sdp_curr_type_e sdp_attr_get_curr_type (sdp_t *sdp_p, uint16_t level,
1370 uint8_t cap_num, sdp_attr_e qos_attr, uint16_t inst_num);
1371extern sdp_des_type_e sdp_attr_get_des_type (sdp_t *sdp_p, uint16_t level,
1372 uint8_t cap_num, sdp_attr_e qos_attr, uint16_t inst_num);
1373extern sdp_conf_type_e sdp_attr_get_conf_type (sdp_t *sdp_p, uint16_t level,
1374 uint8_t cap_num, sdp_attr_e qos_attr, uint16_t inst_num);
1375extern sdp_nettype_e sdp_attr_get_subnet_nettype(sdp_t *sdp_p, uint16_t level,
1376 uint8_t cap_num, uint16_t inst_num);
1377extern sdp_addrtype_e sdp_attr_get_subnet_addrtype(sdp_t *sdp_p, uint16_t level,
1378 uint8_t cap_num, uint16_t inst_num);
1379extern const char *sdp_attr_get_subnet_addr(sdp_t *sdp_p, uint16_t level,
1380 uint8_t cap_num, uint16_t inst_num);
1381extern int32_t sdp_attr_get_subnet_prefix(sdp_t *sdp_p, uint16_t level,
1382 uint8_t cap_num, uint16_t inst_num);
1383extern rtp_ptype sdp_attr_get_rtpmap_known_codec(sdp_t *sdp_p, uint16_t level,
1384 uint8_t cap_num, uint16_t inst_num);
1385extern tinybool sdp_attr_rtpmap_payload_valid(sdp_t *sdp_p, uint16_t level,
1386 uint8_t cap_num, uint16_t *inst_num, uint16_t payload_type);
1387extern uint16_t sdp_attr_get_rtpmap_payload_type(sdp_t *sdp_p, uint16_t level,
1388 uint8_t cap_num, uint16_t inst_num);
1389extern const char *sdp_attr_get_rtpmap_encname(sdp_t *sdp_p, uint16_t level,
1390 uint8_t cap_num, uint16_t inst_num);
1391extern uint32_t sdp_attr_get_rtpmap_clockrate(sdp_t *sdp_p, uint16_t level,
1392 uint8_t cap_num, uint16_t inst_num);
1393extern uint16_t sdp_attr_get_rtpmap_num_chan(sdp_t *sdp_p, uint16_t level,
1394 uint8_t cap_num, uint16_t inst_num);
1395extern tinybool sdp_attr_sprtmap_payload_valid(sdp_t *sdp_p, uint16_t level,
1396 uint8_t cap_num, uint16_t *inst_num, uint16_t payload_type);
1397extern uint16_t sdp_attr_get_sprtmap_payload_type(sdp_t *sdp_p, uint16_t level,
1398 uint8_t cap_num, uint16_t inst_num);
1399extern const char *sdp_attr_get_sprtmap_encname(sdp_t *sdp_p, uint16_t level,
1400 uint8_t cap_num, uint16_t inst_num);
1401extern uint32_t sdp_attr_get_sprtmap_clockrate(sdp_t *sdp_p, uint16_t level,
1402 uint8_t cap_num, uint16_t inst_num);
1403extern uint16_t sdp_attr_get_sprtmap_num_chan(sdp_t *sdp_p, uint16_t level,
1404 uint8_t cap_num, uint16_t inst_num);
1405extern tinybool sdp_attr_fmtp_payload_valid(sdp_t *sdp_p, uint16_t level,
1406 uint8_t cap_num, uint16_t *inst_num, uint16_t payload_type);
1407extern uint16_t sdp_attr_get_fmtp_payload_type(sdp_t *sdp_p, uint16_t level,
1408 uint8_t cap_num, uint16_t inst_num);
1409extern sdp_ne_res_e sdp_attr_fmtp_is_range_set(sdp_t *sdp_p, uint16_t level,
1410 uint8_t cap_num, uint16_t inst_num, uint8_t low_val, uint8_t high_val);
1411extern tinybool sdp_attr_fmtp_valid(sdp_t *sdp_p, uint16_t level, uint8_t cap_num,
1412 uint16_t inst_num, uint16_t appl_maxval, uint32_t* evt_array);
1413extern sdp_result_e sdp_attr_set_fmtp_payload_type(sdp_t *sdp_p, uint16_t level,
1414 uint8_t cap_num, uint16_t inst_num,
1415 uint16_t payload_num);
1416extern sdp_result_e sdp_attr_get_fmtp_range(sdp_t *sdp_p, uint16_t level,
1417 uint8_t cap_num, uint16_t inst_num, uint32_t *bmap);
1418extern sdp_result_e sdp_attr_clear_fmtp_range(sdp_t *sdp_p, uint16_t level,
1419 uint8_t cap_num, uint16_t inst_num, uint8_t low_val, uint8_t high_val);
1420extern sdp_ne_res_e sdp_attr_compare_fmtp_ranges(sdp_t *src_sdp_ptr,
1421 sdp_t *dst_sdp_ptr, uint16_t src_level, uint16_t dst_level,
1422 uint8_t src_cap_num, uint8_t dst_cap_num, uint16_t src_inst_num,
1423 uint16_t dst_inst_num);
1424extern sdp_result_e sdp_attr_copy_fmtp_ranges(sdp_t *src_sdp_ptr,
1425 sdp_t *dst_sdp_ptr, uint16_t src_level, uint16_t dst_level,
1426 uint8_t src_cap_num, uint8_t dst_cap_num, uint16_t src_inst_num,
1427 uint16_t dst_inst_num);
1428extern uint32_t sdp_attr_get_fmtp_mode_for_payload_type (sdp_t *sdp_p, uint16_t level,
1429 uint8_t cap_num, uint32_t payload_type);
1430
1431extern sdp_result_e sdp_attr_set_fmtp_max_fs (sdp_t *sdp_p,
1432 uint16_t level,
1433 uint8_t cap_num,
1434 uint16_t inst_num,
1435 uint32_t max_fs);
1436
1437extern sdp_result_e sdp_attr_set_fmtp_max_fr (sdp_t *sdp_p,
1438 uint16_t level,
1439 uint8_t cap_num,
1440 uint16_t inst_num,
1441 uint32_t max_fr);
1442
1443/* get routines */
1444extern int32_t sdp_attr_get_fmtp_bitrate_type (sdp_t *sdp_p, uint16_t level,
1445 uint8_t cap_num, uint16_t inst_num);
1446
1447extern int32_t sdp_attr_get_fmtp_cif (sdp_t *sdp_p, uint16_t level,
1448 uint8_t cap_num, uint16_t inst_num);
1449extern int32_t sdp_attr_get_fmtp_qcif (sdp_t *sdp_p, uint16_t level,
1450 uint8_t cap_num, uint16_t inst_num);
1451extern int32_t sdp_attr_get_fmtp_sqcif (sdp_t *sdp_p, uint16_t level,
1452 uint8_t cap_num, uint16_t inst_num);
1453extern int32_t sdp_attr_get_fmtp_cif4 (sdp_t *sdp_p, uint16_t level,
1454 uint8_t cap_num, uint16_t inst_num);
1455extern int32_t sdp_attr_get_fmtp_cif16 (sdp_t *sdp_p, uint16_t level,
1456 uint8_t cap_num, uint16_t inst_num);
1457extern int32_t sdp_attr_get_fmtp_maxbr (sdp_t *sdp_p, uint16_t level,
1458 uint8_t cap_num, uint16_t inst_num);
1459extern sdp_result_e sdp_attr_get_fmtp_max_average_bitrate (sdp_t *sdp_p, uint16_t level,
1460 uint8_t cap_num, uint16_t inst_num, uint32_t* val);
1461extern sdp_result_e sdp_attr_get_fmtp_usedtx (sdp_t *sdp_p, uint16_t level,
1462 uint8_t cap_num, uint16_t inst_num, tinybool* val);
1463extern sdp_result_e sdp_attr_get_fmtp_stereo (sdp_t *sdp_p, uint16_t level,
1464 uint8_t cap_num, uint16_t inst_num, tinybool* val);
1465extern sdp_result_e sdp_attr_get_fmtp_useinbandfec (sdp_t *sdp_p, uint16_t level,
1466 uint8_t cap_num, uint16_t inst_num, tinybool* val);
1467extern char* sdp_attr_get_fmtp_maxcodedaudiobandwidth (sdp_t *sdp_p, uint16_t level,
1468 uint8_t cap_num, uint16_t inst_num);
1469extern sdp_result_e sdp_attr_get_fmtp_cbr (sdp_t *sdp_p, uint16_t level,
1470 uint8_t cap_num, uint16_t inst_num, tinybool* val);
1471extern int32_t sdp_attr_get_fmtp_custom_x (sdp_t *sdp_p, uint16_t level,
1472 uint8_t cap_num, uint16_t inst_num);
1473extern int32_t sdp_attr_get_fmtp_custom_y (sdp_t *sdp_p, uint16_t level,
1474 uint8_t cap_num, uint16_t inst_num);
1475extern int32_t sdp_attr_get_fmtp_custom_mpi (sdp_t *sdp_p, uint16_t level,
1476 uint8_t cap_num, uint16_t inst_num);
1477extern int32_t sdp_attr_get_fmtp_par_width (sdp_t *sdp_p, uint16_t level,
1478 uint8_t cap_num, uint16_t inst_num);
1479extern int32_t sdp_attr_get_fmtp_par_height (sdp_t *sdp_p, uint16_t level,
1480 uint8_t cap_num, uint16_t inst_num);
1481extern int32_t sdp_attr_get_fmtp_bpp (sdp_t *sdp_p, uint16_t level,
1482 uint8_t cap_num, uint16_t inst_num);
1483extern int32_t sdp_attr_get_fmtp_hrd (sdp_t *sdp_p, uint16_t level,
1484 uint8_t cap_num, uint16_t inst_num);
1485extern int32_t sdp_attr_get_fmtp_profile (sdp_t *sdp_p, uint16_t level,
1486 uint8_t cap_num, uint16_t inst_num);
1487extern int32_t sdp_attr_get_fmtp_level (sdp_t *sdp_p, uint16_t level,
1488 uint8_t cap_num, uint16_t inst_num);
1489extern tinybool sdp_attr_get_fmtp_interlace (sdp_t *sdp_p, uint16_t level,
1490 uint8_t cap_num, uint16_t inst_num);
1491extern tinybool sdp_attr_get_fmtp_annex_d (sdp_t *sdp_p, uint16_t level,
1492 uint8_t cap_num, uint16_t inst_num);
1493extern tinybool sdp_attr_get_fmtp_annex_f (sdp_t *sdp_p, uint16_t level,
1494 uint8_t cap_num, uint16_t inst_num);
1495extern tinybool sdp_attr_get_fmtp_annex_i (sdp_t *sdp_p, uint16_t level,
1496 uint8_t cap_num, uint16_t inst_num);
1497extern tinybool sdp_attr_get_fmtp_annex_j (sdp_t *sdp_p, uint16_t level,
1498 uint8_t cap_num, uint16_t inst_num);
1499extern tinybool sdp_attr_get_fmtp_annex_t (sdp_t *sdp_p, uint16_t level,
1500 uint8_t cap_num, uint16_t inst_num);
1501extern int32_t sdp_attr_get_fmtp_annex_k_val (sdp_t *sdp_p, uint16_t level,
1502 uint8_t cap_num, uint16_t inst_num);
1503extern int32_t sdp_attr_get_fmtp_annex_n_val (sdp_t *sdp_p, uint16_t level,
1504 uint8_t cap_num, uint16_t inst_num);
1505
1506extern int32_t sdp_attr_get_fmtp_annex_p_picture_resize (sdp_t *sdp_p, uint16_t level,
1507 uint8_t cap_num, uint16_t inst_num);
1508extern int32_t sdp_attr_get_fmtp_annex_p_warp (sdp_t *sdp_p, uint16_t level,
1509 uint8_t cap_num, uint16_t inst_num);
1510
1511/* sctpmap params */
1512extern uint16_t sdp_attr_get_sctpmap_port(sdp_t *sdp_p, uint16_t level,
1513 uint8_t cap_num, uint16_t inst_num);
1514extern sdp_result_e sdp_attr_get_sctpmap_protocol (sdp_t *sdp_p, uint16_t level,
1515 uint8_t cap_num, uint16_t inst_num, char* protocol);
1516extern sdp_result_e sdp_attr_get_sctpmap_streams (sdp_t *sdp_p, uint16_t level,
1517 uint8_t cap_num, uint16_t inst_num, uint32_t* val);
1518
1519extern const char *sdp_attr_get_msid_identifier(sdp_t *sdp_p, uint16_t level,
1520 uint8_t cap_num, uint16_t inst_num);
1521extern const char *sdp_attr_get_msid_appdata(sdp_t *sdp_p, uint16_t level,
1522 uint8_t cap_num, uint16_t inst_num);
1523
1524/* H.264 codec specific params */
1525
1526extern const char *sdp_attr_get_fmtp_profile_id(sdp_t *sdp_p, uint16_t level,
1527 uint8_t cap_num, uint16_t inst_num);
1528extern const char *sdp_attr_get_fmtp_param_sets(sdp_t *sdp_p, uint16_t level,
1529 uint8_t cap_num, uint16_t inst_num);
1530extern sdp_result_e sdp_attr_get_fmtp_pack_mode (sdp_t *sdp_p, uint16_t level,
1531 uint8_t cap_num, uint16_t inst_num, uint16_t *val);
1532
1533extern sdp_result_e sdp_attr_get_fmtp_level_asymmetry_allowed (sdp_t *sdp_p, uint16_t level,
1534 uint8_t cap_num, uint16_t inst_num, uint16_t *val);
1535
1536extern sdp_result_e sdp_attr_get_fmtp_interleaving_depth (sdp_t *sdp_p, uint16_t level,
1537 uint8_t cap_num, uint16_t inst_num,
1538 uint16_t *val);
1539extern sdp_result_e sdp_attr_get_fmtp_max_don_diff (sdp_t *sdp_p, uint16_t level,
1540 uint8_t cap_num, uint16_t inst_num,
1541 uint32_t *val);
1542
1543/* The following four H.264 parameters that require special handling as
1544 * the values range from 0 - 4294967295
1545 */
1546extern sdp_result_e sdp_attr_get_fmtp_deint_buf_req (sdp_t *sdp_p, uint16_t level,
1547 uint8_t cap_num, uint16_t inst_num,
1548 uint32_t *val);
1549extern sdp_result_e sdp_attr_get_fmtp_deint_buf_cap (sdp_t *sdp_p, uint16_t level,
1550 uint8_t cap_num, uint16_t inst_num,
1551 uint32_t *val);
1552extern sdp_result_e sdp_attr_get_fmtp_init_buf_time (sdp_t *sdp_p, uint16_t level,
1553 uint8_t cap_num, uint16_t inst_num,
1554 uint32_t *val);
1555extern sdp_result_e sdp_attr_get_fmtp_max_rcmd_nalu_size (sdp_t *sdp_p,
1556 uint16_t level, uint8_t cap_num,
1557 uint16_t inst_num, uint32_t *val);
1558
1559
1560extern sdp_result_e sdp_attr_get_fmtp_max_mbps (sdp_t *sdp_p, uint16_t level,
1561 uint8_t cap_num, uint16_t inst_num, uint32_t *val);
1562extern sdp_result_e sdp_attr_get_fmtp_max_fs (sdp_t *sdp_p, uint16_t level,
1563 uint8_t cap_num, uint16_t inst_num, uint32_t *val);
1564extern sdp_result_e sdp_attr_get_fmtp_max_fr (sdp_t *sdp_p, uint16_t level,
1565 uint8_t cap_num, uint16_t inst_num, uint32_t *val);
1566extern sdp_result_e sdp_attr_get_fmtp_max_cpb (sdp_t *sdp_p, uint16_t level,
1567 uint8_t cap_num, uint16_t inst_num, uint32_t *val);
1568extern sdp_result_e sdp_attr_get_fmtp_max_dpb (sdp_t *sdp_p, uint16_t level,
1569 uint8_t cap_num, uint16_t inst_num, uint32_t *val);
1570extern sdp_result_e sdp_attr_get_fmtp_max_br (sdp_t *sdp_p, uint16_t level,
1571 uint8_t cap_num, uint16_t inst_num, uint32_t *val);
1572extern tinybool sdp_attr_fmtp_is_redundant_pic_cap (sdp_t *sdp_p, uint16_t level,
1573 uint8_t cap_num,
1574 uint16_t inst_num);
1575extern tinybool sdp_attr_fmtp_is_parameter_add (sdp_t *sdp_p, uint16_t level,
1576 uint8_t cap_num,
1577 uint16_t inst_num);
1578extern tinybool sdp_attr_fmtp_is_annexa_set (sdp_t *sdp_p, uint16_t level,
1579 uint8_t cap_num,
1580 uint16_t inst_num);
1581
1582extern tinybool sdp_attr_fmtp_is_annexb_set (sdp_t *sdp_p, uint16_t level,
1583 uint8_t cap_num,
1584 uint16_t inst_num);
1585
1586extern sdp_fmtp_format_type_e sdp_attr_fmtp_get_fmtp_format (sdp_t *sdp_p, uint16_t level, uint8_t cap_num,
1587 uint16_t inst_num);
1588
1589extern uint16_t sdp_attr_get_pccodec_num_payload_types(sdp_t *sdp_p, uint16_t level,
1590 uint8_t cap_num, uint16_t inst_num);
1591extern uint16_t sdp_attr_get_pccodec_payload_type(sdp_t *sdp_p, uint16_t level,
1592 uint8_t cap_num, uint16_t inst_num, uint16_t payload_num);
1593extern sdp_result_e sdp_attr_add_pccodec_payload_type(sdp_t *sdp_p,
1594 uint16_t level, uint8_t cap_num,
1595 uint16_t inst_num, uint16_t payload_type);
1596extern uint16_t sdp_attr_get_xcap_first_cap_num(sdp_t *sdp_p, uint16_t level,
1597 uint16_t inst_num);
1598extern sdp_media_e sdp_attr_get_xcap_media_type(sdp_t *sdp_p, uint16_t level,
1599 uint16_t inst_num);
1600extern sdp_transport_e sdp_attr_get_xcap_transport_type(sdp_t *sdp_p,
1601 uint16_t level, uint16_t inst_num);
1602extern uint16_t sdp_attr_get_xcap_num_payload_types(sdp_t *sdp_p, uint16_t level,
1603 uint16_t inst_num);
1604extern uint16_t sdp_attr_get_xcap_payload_type(sdp_t *sdp_p, uint16_t level,
1605 uint16_t inst_num, uint16_t payload_num,
1606 sdp_payload_ind_e *indicator);
1607extern sdp_result_e sdp_attr_add_xcap_payload_type(sdp_t *sdp_p, uint16_t level,
1608 uint16_t inst_num, uint16_t payload_type,
1609 sdp_payload_ind_e indicator);
1610extern uint16_t sdp_attr_get_cdsc_first_cap_num(sdp_t *sdp_p, uint16_t level,
1611 uint16_t inst_num);
1612extern sdp_media_e sdp_attr_get_cdsc_media_type(sdp_t *sdp_p, uint16_t level,
1613 uint16_t inst_num);
1614extern sdp_transport_e sdp_attr_get_cdsc_transport_type(sdp_t *sdp_p,
1615 uint16_t level, uint16_t inst_num);
1616extern uint16_t sdp_attr_get_cdsc_num_payload_types(sdp_t *sdp_p, uint16_t level,
1617 uint16_t inst_num);
1618extern uint16_t sdp_attr_get_cdsc_payload_type(sdp_t *sdp_p, uint16_t level,
1619 uint16_t inst_num, uint16_t payload_num,
1620 sdp_payload_ind_e *indicator);
1621extern sdp_result_e sdp_attr_add_cdsc_payload_type(sdp_t *sdp_p, uint16_t level,
1622 uint16_t inst_num, uint16_t payload_type,
1623 sdp_payload_ind_e indicator);
1624extern tinybool sdp_media_dynamic_payload_valid (sdp_t *sdp_p, uint16_t payload_type,
1625 uint16_t m_line);
1626
1627extern tinybool sdp_attr_get_rtr_confirm (sdp_t *, uint16_t, uint8_t, uint16_t);
1628
1629extern tinybool sdp_attr_get_silencesupp_enabled(sdp_t *sdp_p, uint16_t level,
1630 uint8_t cap_num, uint16_t inst_num);
1631extern uint16_t sdp_attr_get_silencesupp_timer(sdp_t *sdp_p, uint16_t level,
1632 uint8_t cap_num, uint16_t inst_num,
1633 tinybool *null_ind);
1634extern sdp_silencesupp_pref_e sdp_attr_get_silencesupp_pref(sdp_t *sdp_p,
1635 uint16_t level,
1636 uint8_t cap_num,
1637 uint16_t inst_num);
1638extern sdp_silencesupp_siduse_e sdp_attr_get_silencesupp_siduse(sdp_t *sdp_p,
1639 uint16_t level,
1640 uint8_t cap_num,
1641 uint16_t inst_num);
1642extern uint8_t sdp_attr_get_silencesupp_fxnslevel(sdp_t *sdp_p, uint16_t level,
1643 uint8_t cap_num, uint16_t inst_num,
1644 tinybool *null_ind);
1645extern sdp_mediadir_role_e sdp_attr_get_comediadir_role(sdp_t *sdp_p,
1646 uint16_t level, uint8_t cap_num,
1647 uint16_t inst_num);
1648
1649extern uint16_t sdp_attr_get_mptime_num_intervals(
1650 sdp_t *sdp_p, uint16_t level, uint8_t cap_num, uint16_t inst_num);
1651extern uint16_t sdp_attr_get_mptime_interval(
1652 sdp_t *sdp_p, uint16_t level, uint8_t cap_num, uint16_t inst_num, uint16_t interval_num);
1653extern sdp_result_e sdp_attr_add_mptime_interval(
1654 sdp_t *sdp_p, uint16_t level, uint8_t cap_num, uint16_t inst_num, uint16_t interval);
1655
1656
1657extern sdp_result_e sdp_copy_all_bw_lines(sdp_t *src_sdp_ptr, sdp_t *dst_sdp_ptr,
1658 uint16_t src_level, uint16_t dst_level);
1659extern sdp_bw_modifier_e sdp_get_bw_modifier(sdp_t *sdp_p, uint16_t level,
1660 uint16_t inst_num);
1661extern const char *sdp_get_bw_modifier_name(sdp_bw_modifier_e bw_modifier);
1662extern int32_t sdp_get_bw_value(sdp_t *sdp_p, uint16_t level, uint16_t inst_num);
1663extern int32_t sdp_get_num_bw_lines (sdp_t *sdp_p, uint16_t level);
1664
1665extern sdp_result_e sdp_add_new_bw_line(sdp_t *sdp_p, uint16_t level,
1666 sdp_bw_modifier_e bw_modifier, uint16_t *inst_num);
1667
1668extern sdp_group_attr_e sdp_get_group_attr(sdp_t *sdp_p, uint16_t level,
1669 uint8_t cap_num, uint16_t inst_num);
1670
1671extern const char* sdp_attr_get_x_sidout (sdp_t *sdp_p, uint16_t level,
1672 uint8_t cap_num, uint16_t inst_num);
1673
1674
1675extern const char* sdp_attr_get_x_sidin (sdp_t *sdp_p, uint16_t level,
1676 uint8_t cap_num, uint16_t inst_num);
1677
1678extern const char* sdp_attr_get_x_confid (sdp_t *sdp_p, uint16_t level,
1679 uint8_t cap_num, uint16_t inst_num);
1680
1681extern uint16_t sdp_get_group_num_id(sdp_t *sdp_p, uint16_t level,
1682 uint8_t cap_num, uint16_t inst_num);
1683
1684extern const char* sdp_get_group_id(sdp_t *sdp_p, uint16_t level,
1685 uint8_t cap_num, uint16_t inst_num, uint16_t id_num);
1686
1687extern int32_t sdp_get_mid_value(sdp_t *sdp_p, uint16_t level);
1688extern sdp_result_e sdp_include_new_filter_src_addr(sdp_t *sdp_p, uint16_t level,
1689 uint8_t cap_num, uint16_t inst_num,
1690 const char *src_addr);
1691extern sdp_src_filter_mode_e sdp_get_source_filter_mode(sdp_t *sdp_p,
1692 uint16_t level, uint8_t cap_num,
1693 uint16_t inst_num);
1694extern sdp_result_e sdp_get_filter_destination_attributes(sdp_t *sdp_p,
1695 uint16_t level, uint8_t cap_num,
1696 uint16_t inst_num,
1697 sdp_nettype_e *nettype,
1698 sdp_addrtype_e *addrtype,
1699 char *dest_addr);
1700extern int32_t sdp_get_filter_source_address_count(sdp_t *sdp_p, uint16_t level,
1701 uint8_t cap_num, uint16_t inst_num);
1702extern sdp_result_e sdp_get_filter_source_address (sdp_t *sdp_p, uint16_t level,
1703 uint8_t cap_num, uint16_t inst_num,
1704 uint16_t src_addr_id,
1705 char *src_addr);
1706
1707extern sdp_rtcp_unicast_mode_e sdp_get_rtcp_unicast_mode(sdp_t *sdp_p,
1708 uint16_t level, uint8_t cap_num,
1709 uint16_t inst_num);
1710
1711void sdp_crypto_debug(char *buffer, ulong length_bytes);
1712char * sdp_debug_msg_filter(char *buffer, ulong length_bytes);
1713
1714extern int32_t
1715sdp_attr_get_sdescriptions_tag(sdp_t *sdp_p,
1716 uint16_t level,
1717 uint8_t cap_num,
1718 uint16_t inst_num);
1719
1720extern sdp_srtp_crypto_suite_t
1721sdp_attr_get_sdescriptions_crypto_suite(sdp_t *sdp_p,
1722 uint16_t level,
1723 uint8_t cap_num,
1724 uint16_t inst_num);
1725
1726extern const char*
1727sdp_attr_get_sdescriptions_key(sdp_t *sdp_p,
1728 uint16_t level,
1729 uint8_t cap_num,
1730 uint16_t inst_num);
1731
1732extern const char*
1733sdp_attr_get_sdescriptions_salt(sdp_t *sdp_p,
1734 uint16_t level,
1735 uint8_t cap_num,
1736 uint16_t inst_num);
1737
1738extern const char*
1739sdp_attr_get_sdescriptions_lifetime(sdp_t *sdp_p,
1740 uint16_t level,
1741 uint8_t cap_num,
1742 uint16_t inst_num);
1743
1744extern sdp_result_e
1745sdp_attr_get_sdescriptions_mki(sdp_t *sdp_p,
1746 uint16_t level,
1747 uint8_t cap_num,
1748 uint16_t inst_num,
1749 const char **mki_value,
1750 uint16_t *mki_length);
1751
1752extern const char*
1753sdp_attr_get_sdescriptions_session_params(sdp_t *sdp_p,
1754 uint16_t level,
1755 uint8_t cap_num,
1756 uint16_t inst_num);
1757
1758extern unsigned char
1759sdp_attr_get_sdescriptions_key_size(sdp_t *sdp_p,
1760 uint16_t level,
1761 uint8_t cap_num,
1762 uint16_t inst_num);
1763
1764extern unsigned char
1765sdp_attr_get_sdescriptions_salt_size(sdp_t *sdp_p,
1766 uint16_t level,
1767 uint8_t cap_num,
1768 uint16_t inst_num);
1769
1770extern unsigned long
1771sdp_attr_get_srtp_crypto_selection_flags(sdp_t *sdp_p,
1772 uint16_t level,
1773 uint8_t cap_num,
1774 uint16_t inst_num);
1775
1776sdp_result_e
1777sdp_attr_get_ice_attribute (sdp_t *sdp_p, uint16_t level,
1778 uint8_t cap_num, sdp_attr_e sdp_attr, uint16_t inst_num,
1779 char **out);
1780
1781sdp_result_e
1782sdp_attr_get_rtcp_mux_attribute (sdp_t *sdp_p, uint16_t level,
1783 uint8_t cap_num, sdp_attr_e sdp_attr, uint16_t inst_num,
1784 tinybool *rtcp_mux);
1785
1786sdp_result_e
1787sdp_attr_get_setup_attribute (sdp_t *sdp_p, uint16_t level,
1788 uint8_t cap_num, uint16_t inst_num, sdp_setup_type_e *setup_type);
1789
1790sdp_result_e
1791sdp_attr_get_connection_attribute (sdp_t *sdp_p, uint16_t level,
1792 uint8_t cap_num, uint16_t inst_num, sdp_connection_type_e *connection_type);
1793
1794sdp_result_e
1795sdp_attr_get_dtls_fingerprint_attribute (sdp_t *sdp_p, uint16_t level,
1796 uint8_t cap_num, sdp_attr_e sdp_attr, uint16_t inst_num,
1797 char **out);
1798
1799sdp_rtcp_fb_ack_type_e
1800sdp_attr_get_rtcp_fb_ack(sdp_t *sdp_p, uint16_t level, uint16_t payload_type, uint16_t inst);
1801
1802sdp_rtcp_fb_nack_type_e
1803sdp_attr_get_rtcp_fb_nack(sdp_t *sdp_p, uint16_t level, uint16_t payload_type, uint16_t inst);
1804
1805uint32_t
1806sdp_attr_get_rtcp_fb_trr_int(sdp_t *sdp_p, uint16_t level, uint16_t payload_type,
1807 uint16_t inst);
1808
1809tinybool
1810sdp_attr_get_rtcp_fb_remb_enabled(sdp_t *sdp_p, uint16_t level,
1811 uint16_t payload_type);
1812
1813tinybool
1814sdp_attr_get_rtcp_fb_transport_cc_enabled(sdp_t *sdp_p, uint16_t level,
1815 uint16_t payload_type);
1816
1817sdp_rtcp_fb_ccm_type_e
1818sdp_attr_get_rtcp_fb_ccm(sdp_t *sdp_p, uint16_t level, uint16_t payload_type, uint16_t inst);
1819
1820sdp_result_e
1821sdp_attr_set_rtcp_fb_ack(sdp_t *sdp_p, uint16_t level, uint16_t payload_type, uint16_t inst,
1822 sdp_rtcp_fb_ack_type_e type);
1823
1824sdp_result_e
1825sdp_attr_set_rtcp_fb_nack(sdp_t *sdp_p, uint16_t level, uint16_t payload_type, uint16_t inst,
1826 sdp_rtcp_fb_nack_type_e);
1827
1828sdp_result_e
1829sdp_attr_set_rtcp_fb_trr_int(sdp_t *sdp_p, uint16_t level, uint16_t payload_type,
1830 uint16_t inst, uint32_t interval);
1831
1832sdp_result_e
1833sdp_attr_set_rtcp_fb_remb(sdp_t *sdp_p, uint16_t level, uint16_t payload_type,
1834 uint16_t inst);
1835sdp_result_e
1836sdp_attr_set_rtcp_fb_transport_cc(sdp_t *sdp_p, uint16_t level, uint16_t payload_type,
1837 uint16_t inst);
1838
1839sdp_result_e
1840sdp_attr_set_rtcp_fb_ccm(sdp_t *sdp_p, uint16_t level, uint16_t payload_type, uint16_t inst,
1841 sdp_rtcp_fb_ccm_type_e);
1842const char *
1843sdp_attr_get_extmap_uri(sdp_t *sdp_p, uint16_t level, uint16_t inst);
1844
1845uint16_t
1846sdp_attr_get_extmap_id(sdp_t *sdp_p, uint16_t level, uint16_t inst);
1847
1848sdp_result_e
1849sdp_attr_set_extmap(sdp_t *sdp_p, uint16_t level, uint16_t id, const char* uri, uint16_t inst);
1850
1851#endif /* SDP_H_ */