[Serusers] SER, ATA-186 & Cisco AS5300

Andrei Pelinescu-Onciul pelinescu-onciul at fokus.fraunhofer.de
Tue Jun 22 12:49:44 CEST 2004


On Jun 21, 2004 at 14:00, Linus Surguy <linus at magrathea-telecom.co.uk> wrote:
> > > Thanks all (especially Alex), I know now why, and it does seem that the
> > > 'NAT' device - in this case a Draytek Vigor ADSL router is rewriteing
> the
> > > SIP packet incorrectly. However, if I wanted to be tolerant of this, is
> > > there a way to instruct SER to re-evaluate the 'content-length' and
> > > rewrite it correctly?
> >
> > You might be better fixing the Draytech - who knows what information the
> > NAT box is losing. The problem you have here is it's done 3 rewrites (Via,
> > Call-ID, & RTP o=) each adding five characters but only added 10 to
> > Content-Length; I expect you can imagine the piece of C doing this and
> that
> 
> If it were just for personal use that would be fine, but we have to support
> a wide range of clients where we don't have control over their hardware. I
> think we're going to have to 'correct' the Content-Length field - is there
> any way we can add additional data to the body and force SER to recalculate
> it that way?

If you really want to try to fix this from ser there is a way. In fact
there are 2 ways, one involves editing the sources and the other a
config hack.


1. editing the sources (ser 0.8.12 from cvs or ser unstable)
- edit msg_translator.c. In the adjust_clent function you should
 find the following line:
    if ((anchor==0) && body_delta){
 (line 1231 in ser 0.8.12-tcp_nonb & 1235 in ser unstable).
 Change it into:
  if (anchor==0){
 (just remove the body_delta test).

Now ser will recompute the content length for all the packets. This will
 also add a small performance hit (because now ser will have to parse
 more headers: it will have to find and parse at least content-length).
 
2. config hack: ser will automatically recompute content-length if the
body of the message changed (ser added or removed something from it).
Try the following:
  is_present_hf("foobar"); /* it doesn't matter what, this just has the
                        side-effect of forcing ser to parse all the headers */
  subst('/^(s=.*)$/\1\r\ni=Ser-fixed session/'); /* adds something to
                        the sdp to force ser to recompute clen*/
You will need to load the textops module for is_present_hf & subst.


Andrei




More information about the sr-users mailing list