to refresh this old discussion, are you sure that the requirement that the Content-Length header needs to be at the end of the SIP message is enforced or even defined? If you use old Kamailio standard modules like "path" it places its header directly at the end of the message, after the Content-Length.
I also failed to find a MUST in the section 7.5 of the RFC and also in 20.14. about the header position.
--
Henning Westerholt –
https://skalatan.de/blog/
Kamailio services –
https://gilawa.com
-----Original Message-----
From: sr-users
sr-users-bounces@lists.kamailio.org On Behalf Of Alex Balashov
Sent: Thursday, March 19, 2020 2:49 AM
To: Kamailio (SER) - Users Mailing List
sr-users@lists.kamailio.org
Subject: Re: [SR-Users] Manipulating contacts header results in a malformed SIP packet
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.ins...
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@kamailio.test.uconnected.com.au
mailto:61400123123@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=AAAAAAAAAAAAAAAAAAAAAAoUXVFHDQ
AAs83AEGwAAFgwCQA8QY3RlZC5jb20uYXU-;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@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=AAAAAAAAAAAAAAAAAAAAAAoUXVND38
dTgwEGEAEGwAAFgwCQA8Fdn83lZC5jb20uYXU-;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@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/
_______________________________________________
Kamailio (SER) - Users Mailing List
sr-users@lists.kamailio.org
https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users