forked from Mirrors/freeswitch
d8c4d22d40
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@10802 d0543943-73ff-0310-b7d9-9358b9ac24b2
121 lines
3.1 KiB
C
121 lines
3.1 KiB
C
/* -*- c -*- */
|
|
|
|
/**@MODULEPAGE "sdp" - SDP Module
|
|
|
|
@section sdp_meta Module Meta Information
|
|
|
|
The @b sdp module provides a simple "C" parser interface for SDP [@RFC2327],
|
|
<em>Session Description Protocol</em>. The parser also implements support
|
|
for IPv6 addresses as per @RFC3266. The @RFC4566 should be supported, but we
|
|
have not checked since draft-eitf-mmusic-sdp-new-17 or so.
|
|
|
|
@CONTACT Pekka Pessi <Pekka.Pessi@nokia.com>
|
|
|
|
@STATUS @SofiaSIP Core library
|
|
|
|
@LICENSE LGPL
|
|
|
|
Contributor(s):
|
|
- Pekka Pessi <Pekka.Pessi@nokia.com>
|
|
- Jari Selin <Jari.Selin@nokia.com>
|
|
|
|
@section sdp_parser SDP Parser
|
|
|
|
SDP parser parses an SDP message and converts it to internally used SDP
|
|
structure #sdp_session_t.
|
|
|
|
Typically, the SDP parser is used as follows:
|
|
|
|
@code
|
|
sdp_parser_t *parser = sdp_parse(home, message, len, 0);
|
|
|
|
if (!sdp_session(parser)) {
|
|
show(sdp_parsing_error(parser));
|
|
} else {
|
|
sdp_session_t *sdp = sdp_session(parser);
|
|
@endcode
|
|
Act upon session description, then free the parser:
|
|
@code
|
|
}
|
|
sdp_parser_free(parser);
|
|
@endcode
|
|
|
|
There are various flags indicating what kind of SDP variants the sdp_parse()
|
|
accepts. The sanity check run after parsing can be disabled by including
|
|
flag #sdp_f_insane. The parser can be used to parse syntactically vague
|
|
configuration files when using flag #sdp_f_config. The parser will then
|
|
accept * for media, protocol and port, for instance.
|
|
|
|
@section sdp_printer SDP Printer
|
|
|
|
SDP printer converts internally used SDP structure #sdp_session_t to the
|
|
standard SDP format.
|
|
|
|
Typically, the SDP printer is used as follows:
|
|
@code
|
|
char buffer[512];
|
|
sdp_printer_t *printer = sdp_print(home, session, buffer, sizeof(buffer), 0);
|
|
|
|
if (sdp_message(printer)) {
|
|
char const *msg = sdp_message(printer);
|
|
size_t msgsize = sdp_message_size(printer);
|
|
@endcode
|
|
|
|
At this point, application can use the SDP message contents, e.g., it can
|
|
send them to network, and then free the message:
|
|
@code
|
|
}
|
|
else {
|
|
show_critical_error(sdp_printing_error(printer));
|
|
}
|
|
sdp_printer_free(printer);
|
|
@endcode
|
|
|
|
@section sdp_example Example
|
|
|
|
Examples on using SDP parser can be found from test_sdp.c and soa.c. Here is
|
|
an simple example, which decodes an SDP text in @a original, increments the
|
|
version number in the origin line, and encodes the SDP description again to
|
|
@a buf.
|
|
|
|
@code
|
|
size_t increment_sdp_version(char buf[], size_t bsize,
|
|
char const *original, size_t osize)
|
|
{
|
|
su_home_t home[1] = { SU_HOME_INIT(home) };
|
|
sdp_parser_t *parser = sdp_parse(home, original, osize, 0);
|
|
sdp_printer_t *printer;
|
|
size_t retval = 0;
|
|
|
|
if (sdp_session(parser)) {
|
|
sdp_session_t *sdp = sdp_session(parser);
|
|
|
|
sdp->sdp_origin->o_version++;
|
|
|
|
printer = sdp_print(home, sdp, buf, bsize, 0);
|
|
|
|
if (sdp_message(printer)) {
|
|
retval = sdp_message_size(printer);
|
|
}
|
|
else {
|
|
fprintf(stderr, "increment_sdp_version: %s\n",
|
|
sdp_printing_error(printer));
|
|
}
|
|
|
|
sdp_printer_free(printer);
|
|
}
|
|
else {
|
|
fprintf(stderr, "increment_sdp_version: %s\n",
|
|
sdp_parsing_error(parser));
|
|
}
|
|
|
|
sdp_parser_free(parser);
|
|
|
|
su_home_deinit(home);
|
|
|
|
return retval;
|
|
}
|
|
@endcode
|
|
|
|
*/
|