I have SER version 0.8.14 running as a proxy, registrar, and location server.  It works great, but I have encountered one problem.  When I call from my PingTel SIP phone to an IP enabled IVR, and the IVR responds with “404 Not found”, SER sends an ACK to the IVR and forwards the 404 to the PingTel phone.  All that is fine, but when the PingTel phone sends back its ACK, SER does not find the transaction to associate it with.  It forwards the ACK to the IVR, then a timer fires and the 404 is resent to the PingTel because SER does not think it has gotten the ACK.  I have determined that the problem is in modules/tm/t_lookup.c, around line 450, where it says “if (! EQ_LEN(from)) continue;” 

The original INVITE contained a From value of

“sip:7216@wic.west.com;tag=1c8140”

While the ACK contains a From value of

“<sip:7216@wic.west.com>;tag=1c8140”

According to RFC3261, Section 20.20, these should be considered identical, but SER does not see it that way because the angle brackets make the length different (the SIP stack on the IVR adds them in its responses).  I have only seen this behavior when a failure response code is returned, if I get a “200 Ok”, everything works fine.

I’ve attached a log of the SIP messages recorded by the PingTel phone, and the log from SER.

Dave Wearne

<<pingtelcall.log.gz>> <<ser.log.gz>>