Hi, for now, the "normal" way to detect if an in-dialog request/response
beyonds to a natted dialog is by adding a uri parameter ("nat=yes") in
the "Contact" header of the first request and response and macthing that
parameter in the RURI of subsequent in-dialog requests.
Typically this is done in this way:
search_append('Contact:.*sip:[^>[:cntrl:]]*', ';nat=yes');
Well, this mechanims (that is part of official OpenSer courses) is very
RCF3261 non compliant:
1) In SIP a header field name is case insensitive but the above function
wouldn't match a "CONTACT" of "contact" header names (even if they
are 100%
valid).
2) "Contact" header can appear abbreviated as "m" (or "M")
but the above
doesn't match it.
3) 1.1.1. Known Limitations
search ignores folded lines. For example, search("(From|f):.*@foo.bar")
doesn't match the following From header field:
From: medabeda
<sip:medameda@foo.bar>;tag=1234
A solution for points 1 and 2 could be using "subst" with insensitive flag
enabled, but it could be very anti-friendly.
So I wonder: wouldn't be useful a good funtion to add/read/remove header and
uri parameters (in any header or uri) being RFC 3261 compliant (this is: case
insensitive and allowing header name abbreviations)?
--
Iñaki Baz Castillo