sdp
1.12.11devel
Main Page
Related Pages
Data Structures
Files
File List
Globals
All
Data Structures
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
libsofia-sip-ua
sdp
sofia-sip
sdp.h
Go to the documentation of this file.
1
/*
2
* This file is part of the Sofia-SIP package
3
*
4
* Copyright (C) 2005 Nokia Corporation.
5
*
6
* Contact: Pekka Pessi <pekka.pessi@nokia-email.address.hidden>
7
*
8
* This library is free software; you can redistribute it and/or
9
* modify it under the terms of the GNU Lesser General Public License
10
* as published by the Free Software Foundation; either version 2.1 of
11
* the License, or (at your option) any later version.
12
*
13
* This library is distributed in the hope that it will be useful, but
14
* WITHOUT ANY WARRANTY; without even the implied warranty of
15
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16
* Lesser General Public License for more details.
17
*
18
* You should have received a copy of the GNU Lesser General Public
19
* License along with this library; if not, write to the Free Software
20
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
21
* 02110-1301 USA
22
*
23
*/
24
25
#ifndef SDP_H
26
#define SDP_H
27
35
#ifndef SU_ALLOC_H
36
#include <
sofia-sip/su_alloc.h
>
37
#endif
38
#ifndef SU_TYPES_H
39
#include <
sofia-sip/su_types.h
>
40
#endif
41
42
SOFIA_BEGIN_DECLS
43
45
typedef
struct
sdp_session_s
sdp_session_t
;
47
typedef
unsigned
long
sdp_version_t
;
49
typedef
struct
sdp_origin_s
sdp_origin_t
;
51
typedef
struct
sdp_connection_s
sdp_connection_t
;
53
typedef
struct
sdp_bandwidth_s
sdp_bandwidth_t
;
55
typedef
struct
sdp_time_s
sdp_time_t
;
57
typedef
struct
sdp_repeat_s
sdp_repeat_t
;
59
typedef
struct
sdp_zone_s
sdp_zone_t
;
61
typedef
struct
sdp_key_s
sdp_key_t
;
63
typedef
struct
sdp_attribute_s
sdp_attribute_t
;
65
typedef
struct
sdp_media_s
sdp_media_t
;
67
typedef
struct
sdp_list_s
sdp_list_t
;
69
typedef
struct
sdp_rtpmap_s
sdp_rtpmap_t
;
70
72
typedef
char
const
sdp_text_t
;
73
74
#define SDP_MIME_TYPE "application/sdp"
75
76
enum
{
77
SDP_CURRENT_VERSION = 0
78
};
79
81
struct
sdp_session_s
82
{
83
int
sdp_size
;
84
sdp_session_t
*
sdp_next
;
85
sdp_version_t
sdp_version
[1];
86
sdp_origin_t
*
sdp_origin
;
87
sdp_text_t
*
sdp_subject
;
88
sdp_text_t
*
sdp_information
;
89
sdp_text_t
*
sdp_uri
;
90
sdp_list_t
*
sdp_emails
;
91
sdp_list_t
*
sdp_phones
;
92
sdp_connection_t
*
sdp_connection
;
93
sdp_bandwidth_t
*
sdp_bandwidths
;
94
sdp_time_t
*
sdp_time
;
95
sdp_key_t
*
sdp_key
;
96
sdp_attribute_t
*
sdp_attributes
;
97
sdp_text_t
*
sdp_charset
;
98
sdp_media_t
*
sdp_media
;
99
};
100
102
struct
sdp_origin_s
103
{
104
int
o_size
;
105
sdp_text_t
*
o_username
;
106
uint64_t
o_id
;
107
uint64_t
o_version
;
108
sdp_connection_t
*
o_address
;
109
};
110
112
typedef
enum
113
{
114
sdp_net_x
= 0,
115
sdp_net_in
= 1
116
}
sdp_nettype_e
;
117
119
typedef
enum
120
{
121
sdp_addr_x
= 0,
122
sdp_addr_ip4
= 1,
123
sdp_addr_ip6
= 2,
124
}
sdp_addrtype_e
;
125
127
struct
sdp_connection_s
128
{
129
int
c_size
;
130
sdp_connection_t
*
c_next
;
131
sdp_nettype_e
c_nettype
;
132
sdp_addrtype_e
c_addrtype
;
133
sdp_text_t
*
c_address
;
134
unsigned
c_ttl
: 8;
135
unsigned
c_mcast
: 1;
136
unsigned
: 0;
137
unsigned
c_groups
;
138
};
139
141
typedef
enum
142
{
143
sdp_bw_x
,
144
sdp_bw_ct
,
145
sdp_bw_as
,
146
}
sdp_bandwidth_e
;
147
149
struct
sdp_bandwidth_s
150
{
151
int
b_size
;
152
sdp_bandwidth_t
*
b_next
;
153
sdp_bandwidth_e
b_modifier
;
155
sdp_text_t
*
b_modifier_name
;
156
unsigned
long
b_value
;
157
};
158
160
struct
sdp_time_s
161
{
162
int
t_size
;
163
sdp_time_t
*
t_next
;
164
unsigned
long
t_start
;
165
unsigned
long
t_stop
;
166
sdp_repeat_t
*
t_repeat
;
167
sdp_zone_t
*
t_zone
;
168
};
169
171
struct
sdp_repeat_s
172
{
173
int
r_size
;
176
int
r_number_of_offsets
;
177
unsigned
long
r_interval
;
178
unsigned
long
r_duration
;
179
unsigned
long
r_offsets
[1];
180
};
181
183
struct
sdp_zone_s
184
{
186
int
z_size
;
187
int
z_number_of_adjustments
;
188
struct
{
189
unsigned
long
z_at
;
190
long
z_offset
;
191
}
z_adjustments
[1];
192
};
193
195
typedef
enum
{
196
sdp_key_x
,
197
sdp_key_clear
,
198
sdp_key_base64
,
199
sdp_key_uri
,
200
sdp_key_prompt
202
}
sdp_key_method_e
;
203
205
struct
sdp_key_s
206
{
207
int
k_size
;
208
sdp_key_method_e
k_method
;
209
sdp_text_t
*
k_method_name
;
210
sdp_text_t
*
k_material
;
211
};
212
214
struct
sdp_attribute_s
{
215
int
a_size
;
216
sdp_attribute_t
*
a_next
;
217
sdp_text_t
*
a_name
;
218
sdp_text_t
*
a_value
;
219
};
220
222
typedef
enum
223
{
224
sdp_media_x
= 0,
225
sdp_media_any
,
226
sdp_media_audio
,
227
sdp_media_video
,
228
sdp_media_application
,
229
sdp_media_data
,
230
sdp_media_control
,
231
sdp_media_message
,
232
sdp_media_image
,
234
sdp_media_red
235
}
sdp_media_e
;
236
238
typedef
enum
239
{
240
sdp_proto_x
= 0,
241
sdp_proto_tcp
= 6,
242
sdp_proto_udp
= 17,
243
sdp_proto_rtp
= 256,
244
sdp_proto_srtp
= 257,
245
sdp_proto_udptl
= 258,
246
sdp_proto_tls
= 511,
247
sdp_proto_any
= 512
248
}
sdp_proto_e
;
249
251
typedef
enum
{
252
sdp_inactive = 0,
253
sdp_sendonly = 1,
254
sdp_recvonly = 2,
255
sdp_sendrecv = sdp_sendonly | sdp_recvonly
256
}
sdp_mode_t
;
257
268
struct
sdp_media_s
269
{
270
int
m_size
;
271
sdp_media_t
*
m_next
;
272
sdp_session_t
*
m_session
;
274
sdp_media_e
m_type
;
275
sdp_text_t
*
m_type_name
;
276
unsigned
long
m_port
;
277
unsigned
long
m_number_of_ports
;
278
sdp_proto_e
m_proto
;
279
sdp_text_t
*
m_proto_name
;
280
sdp_list_t
*
m_format
;
281
sdp_rtpmap_t
*
m_rtpmaps
;
282
sdp_text_t
*
m_information
;
283
sdp_connection_t
*
m_connections
;
284
sdp_bandwidth_t
*
m_bandwidths
;
285
sdp_key_t
*
m_key
;
286
sdp_attribute_t
*
m_attributes
;
288
void
*
m_user
;
291
unsigned
m_rejected
: 1;
293
/* sdp_mode_t */
unsigned
m_mode
: 2;
294
unsigned
: 0;
295
};
296
298
struct
sdp_list_s
299
{
300
int
l_size
;
301
sdp_list_t
*
l_next
;
302
sdp_text_t
*
l_text
;
303
};
304
314
struct
sdp_rtpmap_s
{
315
int
rm_size
;
316
sdp_rtpmap_t
*
rm_next
;
317
sdp_text_t
*
rm_encoding
;
318
unsigned
long
rm_rate
;
319
sdp_text_t
*
rm_params
;
320
sdp_text_t
*
rm_fmtp
;
321
unsigned
rm_predef
: 1;
322
unsigned
rm_pt
: 7;
323
unsigned
rm_any
: 1;
324
unsigned
:0;
325
};
326
327
SOFIAPUBVAR
sdp_rtpmap_t
const
*
const
sdp_rtpmap_well_known
[128];
328
330
SOFIAPUBFUN
sdp_session_t
*
sdp_session_dup
(
su_home_t
*,
sdp_session_t
const
*);
331
333
SOFIAPUBFUN
334
sdp_origin_t
*
sdp_origin_dup
(
su_home_t
*,
sdp_origin_t
const
*);
335
337
SOFIAPUBFUN
338
sdp_connection_t
*
sdp_connection_dup
(
su_home_t
*,
sdp_connection_t
const
*);
339
341
SOFIAPUBFUN
342
sdp_bandwidth_t
*
sdp_bandwidth_dup
(
su_home_t
*,
sdp_bandwidth_t
const
*);
343
345
SOFIAPUBFUN
346
sdp_time_t
*
sdp_time_dup
(
su_home_t
*,
sdp_time_t
const
*);
347
349
SOFIAPUBFUN
350
sdp_repeat_t
*
sdp_repeat_dup
(
su_home_t
*,
sdp_repeat_t
const
*);
351
353
SOFIAPUBFUN
354
sdp_zone_t
*
sdp_zone_dup
(
su_home_t
*,
sdp_zone_t
const
*);
355
357
SOFIAPUBFUN
358
sdp_key_t
*
sdp_key_dup
(
su_home_t
*,
sdp_key_t
const
*);
359
361
SOFIAPUBFUN
362
sdp_attribute_t
*
sdp_attribute_dup
(
su_home_t
*,
sdp_attribute_t
const
*);
363
365
SOFIAPUBFUN
366
sdp_media_t
*
sdp_media_dup
(
su_home_t
*,
sdp_media_t
const
*,
367
sdp_session_t
*);
368
370
SOFIAPUBFUN
371
sdp_media_t
*
sdp_media_dup_all
(
su_home_t
*,
sdp_media_t
const
*,
372
sdp_session_t
*);
373
375
SOFIAPUBFUN
376
sdp_list_t
*
sdp_list_dup
(
su_home_t
*,
sdp_list_t
const
*);
377
379
SOFIAPUBFUN
380
sdp_rtpmap_t
*
sdp_rtpmap_dup
(
su_home_t
*,
sdp_rtpmap_t
const
*);
381
383
SOFIAPUBFUN
int
sdp_session_cmp
(
sdp_session_t
const
*a,
384
sdp_session_t
const
*b);
385
387
SOFIAPUBFUN
int
sdp_origin_cmp
(
sdp_origin_t
const
*a,
388
sdp_origin_t
const
*b);
389
391
SOFIAPUBFUN
int
sdp_connection_cmp
(
sdp_connection_t
const
*,
392
sdp_connection_t
const
*b);
393
395
SOFIAPUBFUN
int
sdp_bandwidth_cmp
(
sdp_bandwidth_t
const
*a,
396
sdp_bandwidth_t
const
*b);
397
399
SOFIAPUBFUN
int
sdp_time_cmp
(
sdp_time_t
const
*a,
sdp_time_t
const
*b);
400
401
/* Compare two repeat (r=) fields */
402
SOFIAPUBFUN
int
sdp_repeat_cmp
(
sdp_repeat_t
const
*a,
sdp_repeat_t
const
*b);
403
404
/* Compare two zone (z=) fields */
405
SOFIAPUBFUN
int
sdp_zone_cmp
(
sdp_zone_t
const
*a,
sdp_zone_t
const
*b);
406
408
SOFIAPUBFUN
int
sdp_key_cmp
(
sdp_key_t
const
*a,
sdp_key_t
const
*b);
409
411
SOFIAPUBFUN
int
sdp_attribute_cmp
(
sdp_attribute_t
const
*,
412
sdp_attribute_t
const
*);
413
415
SOFIAPUBFUN
int
sdp_media_cmp
(
sdp_media_t
const
*,
sdp_media_t
const
*);
416
418
SOFIAPUBFUN
int
sdp_rtpmap_cmp
(
sdp_rtpmap_t
const
*a,
sdp_rtpmap_t
const
*b);
419
421
SOFIAPUBFUN
int
sdp_list_cmp
(
sdp_list_t
const
*a,
sdp_list_t
const
*b);
422
424
SOFIAPUBFUN
sdp_connection_t
*
sdp_media_connections
(
sdp_media_t
const
*m);
425
427
SOFIAPUBFUN
int
sdp_media_has_rtp
(
sdp_media_t
const
*m);
428
430
SOFIAPUBFUN
void
sdp_media_type
(
sdp_media_t
*m,
char
const
*s);
431
433
SOFIAPUBFUN
void
sdp_media_transport
(
sdp_media_t
*m,
char
const
*s);
434
436
SOFIAPUBFUN
sdp_attribute_t
*
sdp_attribute_find
(
sdp_attribute_t
const
*a,
437
char
const
*name);
438
440
SOFIAPUBFUN
sdp_attribute_t
*
sdp_attribute_find2
(
sdp_attribute_t
const
*a,
441
sdp_attribute_t
const
*a2,
442
char
const
*name);
443
445
SOFIAPUBFUN
sdp_mode_t
sdp_attribute_mode
(
sdp_attribute_t
const
*a,
446
sdp_mode_t
defmode);
447
449
SOFIAPUBFUN
sdp_attribute_t
*
sdp_attribute_by_mode
(
su_home_t
*,
450
sdp_mode_t
mode);
451
453
SOFIAPUBFUN
454
sdp_attribute_t
*
sdp_attribute_mapped_find
(
sdp_attribute_t
const
*a,
455
char
const
*name,
456
int
pt,
char
**return_result);
457
459
SOFIAPUBFUN
void
sdp_attribute_append
(
sdp_attribute_t
**list,
460
sdp_attribute_t
const
*a);
461
463
SOFIAPUBFUN
int
sdp_attribute_replace
(
sdp_attribute_t
**list,
464
sdp_attribute_t
*a,
465
sdp_attribute_t
**return_replaced);
466
468
SOFIAPUBFUN
sdp_attribute_t
*
sdp_attribute_remove
(
sdp_attribute_t
**list,
469
char
const
*name);
470
471
/* Return 1 if m= line struct matches with given type and name */
472
SOFIAPUBFUN
unsigned
sdp_media_match(
sdp_media_t
const
*m,
473
sdp_media_e
type,
474
sdp_text_t
*type_name,
475
sdp_proto_e
proto,
476
sdp_text_t
*proto_name);
477
478
SOFIAPUBFUN
unsigned
sdp_media_match_with(
sdp_media_t
const
*a,
479
sdp_media_t
const
*b);
480
482
SOFIAPUBFUN
unsigned
sdp_media_count
(
sdp_session_t
const
*sdp,
483
sdp_media_e
type,
484
sdp_text_t
*type_name,
485
sdp_proto_e
proto,
486
sdp_text_t
*proto_name);
487
488
SOFIAPUBFUN
unsigned
sdp_media_count_with
(
sdp_session_t
const
*sdp,
489
sdp_media_t
const
*m0);
490
492
SOFIAPUBFUN
int
sdp_media_uses_rtp
(
sdp_media_t
const
*m);
493
495
SOFIAPUBFUN
int
sdp_rtpmap_match
(
sdp_rtpmap_t
const
*,
sdp_rtpmap_t
const
*);
496
498
SOFIAPUBFUN
sdp_rtpmap_t
*
sdp_rtpmap_find_matching
(
sdp_rtpmap_t
const
*list,
499
sdp_rtpmap_t
const
*rm);
500
501
/* ======================================================================== */
502
504
enum
sdp_parse_flags_e
{
506
sdp_f_strict
= 1,
508
sdp_f_anynet
= 2,
510
sdp_f_realloc
= 4,
512
sdp_f_all_rtpmaps
= 8,
514
sdp_f_print_prefix
= 16,
516
sdp_f_mode_0000
= 32,
518
sdp_f_insane
= 64,
520
sdp_f_c_missing
= 128,
522
sdp_f_config
= 256,
524
sdp_f_mode_manual
= 512,
526
sdp_f_mode_always
= 1024
527
};
528
530
typedef
struct
sdp_parser_s
sdp_parser_t
;
531
typedef
sdp_parser_t
*sdp_parser;
532
533
SOFIAPUBFUN
sdp_parser_t
*
sdp_parse
(
su_home_t
*,
534
char
const
msg[], issize_t msgsize,
535
int
flags);
536
SOFIAPUBFUN
char
const
*
sdp_parsing_error
(
sdp_parser_t
*p);
537
SOFIAPUBFUN
sdp_session_t
*
sdp_session
(
sdp_parser_t
*p);
538
SOFIAPUBFUN
void
sdp_parser_free
(
sdp_parser_t
*p);
539
540
SOFIAPUBFUN
int
sdp_sanity_check
(
sdp_parser_t
*);
541
542
SOFIAPUBFUN
su_home_t
*
sdp_parser_home
(
sdp_parser_t
*);
543
544
/* ======================================================================== */
545
547
typedef
struct
sdp_printer_s
sdp_printer_t
;
548
typedef
sdp_printer_t
*sdp_printer;
549
550
SOFIAPUBFUN
sdp_printer_t
*
sdp_print
(
su_home_t
*,
sdp_session_t
const
*,
551
char
msgbuf[], isize_t maxmsgsize,
552
int
flags);
553
SOFIAPUBFUN
char
const
*
sdp_printing_error
(
sdp_printer_t
*p);
554
SOFIAPUBFUN
char
const
*
sdp_message
(
sdp_printer_t
*p);
555
SOFIAPUBFUN
isize_t
sdp_message_size
(
sdp_printer_t
*p);
556
SOFIAPUBFUN
void
sdp_printer_free
(
sdp_printer_t
*p);
557
558
#define sdp_mapped_attribute_find sdp_attribute_mapped_find
559
#define sdp_free_parser sdp_parser_free
560
#define sdp_free_printer sdp_printer_free
561
562
SOFIA_END_DECLS
563
564
#endif
/* SDP_H */
Sofia-SIP 1.12.11devel - Copyright (C) 2006 Nokia Corporation. All rights reserved. Licensed under the terms of the GNU Lesser General Public License.