[SR-Users] Manipulating contacts header results in a malformed SIP packet

Alex Balashov abalashov at evaristesys.com
Thu Mar 19 02:49:23 CET 2020


Hi Andrew, 

The Content-Length header, if present, is the header that must appear
last in a SIP message, per RFC 3261 § 7.5 

So, any method of manipulation of the Contact must manipulate it in
place. A common favourite - if you absolutely must manipulate the
Contact - is to substitute it. You can also insert the header at an
arbitrary position:

https://kamailio.org/docs/modules/5.3.x/modules/textopsx.html#textopsx.f.insert_hf_value

But a better question might perhaps be: why do you want to manipulate
the Contact header? 

While it may perhaps be legitimately necessary occasionally, my finding
has been that in 99% of cases, it's the wrong way to solve a problem.

-- Alex

On Thu, Mar 19, 2020 at 12:42:51PM +1100, Andrew White wrote:

> Hi all,
> 
> Hope everyone is well, and looking forward to seeing you all whenever Kamailio World ends up being!
> 
> I’m currently dealing with an issue which I’m unsure if it’s due to my own implementation, or a bug.
> 
> When attempting to manipulate the Contact header via app_ruby, the SIP message I send ends up being malformed. Here’s the code I’m using:
> 
> def replace_contact_header(uri)
>   #KSR::HDR.remove("Contact") if KSR::HDR.is_present('Contact') > 0
>   #KSR::HDR.append("Contact: #{uri}\r\n")  
>   KSR::HDR.rmappend("Contact", "Contact: #{uri}\r\n")
> end
> 
> Note that I have tried both rmappend and the commented out functions too. I call this with a custom built URI, such as <61400123123 at kamailio.test.uconnected.com.au <mailto:61400123123 at kamailio.test.uconnected.com.au>>. This function is called just before a KSR::TM.t_relay(). Here’s the result I get watching from tshark (some info scrubbed for privacy):
> 
> Record-Route: <sip:1.2.3.4;lr;ftag=e3p42efd3635HH;vst=AAAAAAAAAAAAAAAAAAAAAAoUXVFHDQAAs83AEGwAAFgwCQA8QY3RlZC5jb20uYXU-;did=927.f0f2>
>> Call-ID: 3de29646-e423-1238-e712-023563fb337c
> CSeq: 17736747 INVITE
> sip:4.5.6.7:5060;alias=10.100.1.1~5060~1Content-Type: application/sdp
> Content-Length: 483
> Contact: <sip:61400123123 at kamailio.test.uconnected.com.au>
> 
> In this case, 4.5.6.7 is the PBX I made the call from (and the value of the original Contact header), and 1.2.3.4 is what kamailio.test.uconnected.com.au <http://kamailio.test.uconnected.com.au/> resolves to, and is this Kamailio instance.
> 
> Here’s a copy of the same thing when I don’t call my replace_contact_header function and t_relay:
> 
> Record-Route: <sip:1.2.3.4;lr;ftag=j6jebCSa5Qap6c;vst=AAAAAAAAAAAAAAAAAAAAAAoUXVND38dTgwEGEAEGwAAFgwCQA8Fdn83lZC5jb20uYXU-;did=827.40b>
> ...
> Call-ID: 249571c5-e91a-ae91-6d8e-023563fb337c
> CSeq: 17735867 INVITE
> Contact: <sip:4.5.6.7:5060;alias=10.100.1.1~5060~1>
> Content-Type: application/sdp
> Content-Length: 483
> 
> Given the relative simplicity of the function, I have to assume this is an error with how the function is manipulating the existing Contact header? It seems that the “Contact: <“ part of the header is being removed as well as the “>\r\n", but the rest being left.
> 
> I’m currently using commit 283e468401d809ca9b71368c32badf3a70d48b8b <https://github.com/kamailio/kamailio/commit/283e46> on Amazon Linux 2, which is CentOS/RHEL based.
> 
> Thanks!
> 
> Andrew

> _______________________________________________
> Kamailio (SER) - Users Mailing List
> sr-users at lists.kamailio.org
> https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users


-- 
Alex Balashov | Principal | Evariste Systems LLC

Tel: +1-706-510-6800 / +1-800-250-5920 (toll-free)
Web: http://www.evaristesys.com/, http://www.csrpswitch.com/



More information about the sr-users mailing list