[Serusers] help: fix_nated_contact_f
ahmedkellal at hotmail.com
Tue Aug 23 13:06:04 CEST 2005
I am trying to add a function to SER, in order to only alter the host part
of the Contact URI.
To do that, I'm trying to draw inspiration from the existing
fix_nated_contact_f function written in nathelper.c
Problem is there are various points I just don't seem to understand.
If anyone can help me answer these questions, I would sure appreciate it!!
1- the parameters declared for the fix_nated_contact_f function are (struct
sip_msg* msg, char* str1, char* str2)
But the code itself only exploits the first parameter, if I am not mistaken.
If that is the case, what are the others here for?
2- the lines:
uri.port.s = uri.host.s + uri.host.len;
What I understand from this is the following: If there isn't a port
specified in the original message (the port pointer is not pointing to
anything), set the pointer's value (the pointer in the port part of the URI
structure) to point to the memory location right after where the host part
in the URI ends.
Is that correct? And, if so, is that done in order to prepare for an
eventual insertion of a port when going through the NAT?
3- the line:
offset = c->uri.s - msg->buf;
I won't even venture a guess here. A total mystery to me.
4- the line:
len = c->uri.len + strlen(cp) + 6 /* :port */ - (uri.port.s +
uri.port.len - uri.host.s) + 1;
What I gather here is that we're computing the relative difference in size
(length) between the already existing ip:port field in the message, and the
one we're about to replace it with (source address of the packet), is that
5- the part:
temp = uri.host.s;
temp = c->uri.s[c->uri.len];
Euh!! Is he taking just the first and last characters from the URI host
string, putting them in a "safe place" (to be later restored) and putting
'\0' characters instead to "delimit" something or other? Or am I totally off
6- the line:
len1 = snprintf(buf, len, "%s%s:%d%s", c->uri.s, cp,
msg->rcv.src_port,uri.port.s + uri.port.len);
Here, len1 will hold the size of the memory size (buffer) needed to insert
the new data, right?
7- the condition:
if (len1 < len)
len = len1;
You'll have to enlighten me on that one, cause I don't see it...
I'm sorry to bother you with such a long mail, but I need the help!
And if someone has a better approach to my original problem(cf. first line
of the mail) please do not hesitate :-)
Thank you in advance
Express yourself instantly with MSN Messenger! Download today it's FREE!
More information about the sr-users