For each parser (headers, SIP message or URI), you'll always find something close to this minimal subset of methods:
// allocation/release of memory. xxxx_init(osip_xxx_t **el); xxxx_free(osip_xxx_t *el);
xxxx_parse(osip_xxx_t *el, char *source); xxxx_to_str(osip_xxx_t *el, char **dest);
For the URI parser, the API is documented in osip_uri.h
Here is the sequence needed to parse a given buffer containing a sip URI:
osip_uri_t *uri; int i;
i=osip_uri_init(&uri); if (i!=0) { fprintf(stderr, "cannot allocate\n"); return -1; } i=osip_uri_parse(uri, buffer); if (i!=0) { fprintf(stderr, "cannot parse uri\n"); } osip_uri_free(uri);
Here is the sequence needed to convert the URI into a printable string. Note that in this sequence, dest is allocated dynamically and must be released at the end of the call sequence to avoid memory leaks.
char *dest; i = osip_uri_to_str(uri, &dest); if (i!=0) { fprintf(stderr, "cannot get printable URI\n"); return -1; } fprintf(stdout, "URI: %s\n", dest); osip_free(dest);