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);
1.5.4