[Kamailio-Devel] parse_via()

Francisco Seratti fseratti at gmail.com
Tue Sep 16 17:42:12 CEST 2008


All my work is done in a module, and im parsing the Via header into (struct
via_body *)via2 of the struct sip_msg of the reply message. That struct is
used when forward_reply() is called:

forward.c:568
    /* we have to forward the reply stateless, so we need second via
-bogdan*/
    if (parse_headers( msg, HDR_VIA2_F, 0 )==-1
        || (msg->via2==0) || (msg->via2->error!=PARSE_OK))
    {
        /* no second via => error */
        LM_ERR("no 2nd via found in reply\n");
        goto error;
    }


On Tue, Sep 16, 2008 at 12:28 PM, Daniel-Constantin Mierla <
miconda at gmail.com> wrote:

> Hello,
>
>
> On 09/16/08 18:05, Francisco Seratti wrote:
>
>> Hello,
>>  Im trying to hide my network topology by adding/removing Via headers. I
>> can remove the correct header, but when adding it, in replies, im having
>> trouble with the parse_via() function and i cant figure out where's the
>> problem.
>> To the moment, request are coming out from the proxy with only one Via
>> (the proxy addr), but when replies come in, they are discarded because no
>> 2nd via is found. So, im "saving" the removed Via from the request, to be
>> inserted later in the response (using parse_via() into  struct via_body
>> *via2 of the sip_msg).
>> The point is parse_via() waits 3 args: start of the header, some "end"
>> pointer, and the via_body struct for saving parsed data. I think my problem
>> is in that end pointer, as i could see in msg_parse.c:116 it is the end of
>> the entire msg, but not sure.
>> Ive tried many, many ways but i cant finally get via parsing OK. Im
>> getting "ERROR:core:parse_via:  invalid via - end of header in state 14" or
>> different states (16). (i guarantee via header is well formed).
>>
>> Could someone orientate me, to know where im failiing??
>> Askme for any extra data if you need, thanks a lot!
>>
> the problem is that changes done to sip messages are not effective in the
> script. Even if you add a via in the reply message, the script interpreter
> works only on the sip message received, which has only one via, therefore,
> openser does not have an address where to forward the reply and discards it.
>
> I assume you develop some module to hide the topology and have the
> add/remove via logic there. You can try to register a pre-script callback
> and add at least one via there. This callback is executed before running the
> config script. There you can modify the original sip message and re-initiate
> the entire sip message parsing.
>
> Cheers,
> Daniel
>
> --
> Daniel-Constantin Mierla
> http://www.asipto.com
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.kamailio.org/pipermail/devel/attachments/20080916/a1b91967/attachment-0001.htm 


More information about the Devel mailing list