[sr-dev] faster sdp_content() test

Daniel-Constantin Mierla miconda at gmail.com
Thu Nov 12 14:36:02 CET 2015


Maybe the parsing or not of sdp can be done based on a parameter:

sdp_content(mode)

If missing or mode==0, then do one way and when is 1 do the other way.

I think still having the ability to parse is good, because it makes sure
that the sdp is valid and it is quite common that later it will be
parsed anyhow (e.g., for rtp proxying).

I would like to ask to change the comment for the strnistr() -- 'stolen
from FreeBSD' sounds a bit rough, to reflect the origin of the
code/idea, it would be better something like: code (or idea) taken (or
borrowed) from FreeBSD.

Cheers,
Daniel

On 12/11/15 14:21, Juha Heinanen wrote:
> i wrote new version of sdp_content() test that does not parse the whole
> sdp like the current one does.  instead it checks if request has a body
> and content type is either missing or it is application/sdp or content
> type is multipart/mixed and boxy has string application/sdp.
>
> could this one replace the current one or do i need to invent a new name
> for it?
>
> the implementation also includes new general purpose function strnistr,
> equivalent of which i did not find in kamailio source.
>
> -- juha
>
> ------------------------------------------------------------------
>
> /*
>  * Find the first case insensitive occurrence of find in s, where the
>  * search is limited to the first slen characters of s. Idea stolen from
>  * FreeBSD. 
>  */
> char* strnistr(const char *s, const char *find, size_t slen)
> {
>     char c, sc;
>     size_t len;
>
>     if ((c = *find++) != '\0') {
>         len = strlen(find);
>         do {
>             do {
>                 if ((sc = *s++) == '\0' || slen-- < 1)
>                     return (NULL);
>             } while (sc != c);
>             if (len > slen)
>                 return (NULL);
>         } while (strncasecmp(s, find, len) != 0);
>         s--;
>     }
>     return ((char *)s);
> }
>
> /**
>  *
>  */
> static int w_sdp_content(sip_msg_t* msg, char* foo, char *bar)
> {
>     str body;
>     int mime;
>
>     body.s = get_body(msg);
>     if (body.s == NULL) return -1;
>     body.len = msg->len - (int)(body.s - msg->buf);
>     if (body.len == 0) return -1;
>
>     mime = parse_content_type_hdr(msg);
>     if (mime < 0) return -1;  /* error */
>     if (mime == 0) return 1;  /* default is application/sdp */
>
>     switch (((unsigned int)mime) >> 16) {
>     case TYPE_APPLICATION:
>         if ((mime & 0x00ff) == SUBTYPE_SDP) return 1; else return -1;
>     case TYPE_MULTIPART:
>         if ((mime & 0x00ff) == SUBTYPE_MIXED) {
>             if (strnistr(body.s, "application/sdp", body.len) == NULL) {
>                 return -1;
>             } else {
>                 return 1;
>             }
>         } else {
>             return -1;
>         }
>     default:
>         return -1;
>     }
> }
>
> _______________________________________________
> sr-dev mailing list
> sr-dev at lists.sip-router.org
> http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev

-- 
Daniel-Constantin Mierla
http://twitter.com/#!/miconda - http://www.linkedin.com/in/miconda
Book: SIP Routing With Kamailio - http://www.asipto.com
Kamailio Advanced Training, Nov 30-Dec 2, Berlin - http://asipto.com/kat




More information about the sr-dev mailing list