/* -*- c -*- */ /**@MODULEPAGE "sdp" - SDP Module @section sdp_meta Module Meta Information The @b sdp module provides a simple "C" parser interface for SDP [@RFC2327], Session Description Protocol. 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 @STATUS @SofiaSIP Core library @LICENSE LGPL Contributor(s): - Pekka Pessi - Jari Selin @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 */