[reSIProcate] SipStack not sending the message to correct address
Janari Põld
janari.pold at proekspert.ee
Mon Mar 5 08:38:08 CST 2007
Thanks, this seems to be working :)
The first test was successful.
Best Regards,
Janari Põld
Byron Campen wrote:
> You would need to reset the BranchParameter topmost Via of the
> request.
> (msg.header(h_Vias).front().param(p_branch).reset(), see
> BranchParameter.hxx line 39)
>
> Best regards,
> Byron Campen
>
>> Thanks for the quick reply.
>>
>> What is the correct solution?
>> Should I change the transaction ID every time
>> I resend the invite to another Server?
>> Is there any good solution to generate new
>> transaction ID?
>>
>>
>> Best Regards,
>> Janari Põld
>>
>> Byron Campen wrote:
>>> Simply changing the Request-Uri on the original request and
>>> resending is invalid. This is because both requests will have the
>>> same transaction id. It appears that there is a bug in
>>> TransactionState::processClientInvite() that will allow
>>> mMsgToRetransmit to be overridden by any request from the TU,
>>> regardless of what state the transaction is in (ie, sending a new
>>> INVITE with the same transaction-id is causing state-corruption in
>>> the stack). This is what is causing the assert, and this probably
>>> should be fixed to disallow override of mMsgToRetransmit.
>>>
>>> Best regards,
>>> Byron Campen
>>>
>>>> Hey,
>>>>
>>>> I am writing a SIP proxy using resiprocate library.
>>>> The proxy is running on 192.168.200.1 and
>>>> two SIP servers on 192.168.200.2 and 192.168.200.3.
>>>>
>>>> Following is the scenario that I want.
>>>>
>>>> Client Proxy Server1 Server2
>>>> | INVITE | | |
>>>> 1. | ----------> | INVITE | |
>>>> 2. | | -------> | |
>>>> | | 500 | |
>>>> 3. | | <------- | |
>>>> | | ACK | |
>>>> 4. | | -------> | |
>>>> | | | INVITE |
>>>> 5. | | --------------------> |
>>>> | .......... |
>>>>
>>>> Step 1
>>>> Proxy receives invite from client, adds via and record-route
>>>> header and changes the request-uri (sets the Server1 ip address
>>>> in request-uri)
>>>>
>>>> Step 2
>>>> Proxy sends the invite to Server 1, using method
>>>> sendTo(SipMessage, Uri, TransactionUser) in SipStack.
>>>>
>>>> Step 3
>>>> Server1 responds with 500
>>>>
>>>> Step 4
>>>> Proxy (SipStack) sends automatically ACK to Server1.
>>>>
>>>> Step 5
>>>> During step 1 Proxy saved the received invite into memory and
>>>> now Proxy changes the request-uri (sets the Server2 ip address
>>>> in request-uri). Now if the Proxy tries to send the message to Server2
>>>> using sentTo(SipMessage, Uri, TransactionUser) method, the SIP message
>>>> is actually sent to Server1.
>>>>
>>>> Why is the stack sending the message to server1??
>>>>
>>>>
>>>> The Server1 responds again with 500 and after that the stack gets
>>>> Assertion Failure and the ABORT signal is sent to the proxy
>>>> application
>>>> and the app shuts down.
>>>>
>>>> I added code to TransactionState.cxx method
>>>> processClientInvite(resip::TransactionMessage*) to print out
>>>> the msg and mMsgToRetransmit messages. Here is a snippet from the log.
>>>>
>>>> INFO | 20070302-175232.043 | | | RESIP:TRANSACTION | 0 |
>>>> 3057712048 |
>>>> TransactionState.cxx:797 |
>>>> --------------------------- msg BEG ---------------------------------
>>>> SipResp: 500 tid=4b941154408e538aae1822d1ee5fa4ed cseq=INVITE
>>>> contact=192.168.200.2:5060 / 1 from(wire)
>>>> --------------------------- msg END ---------------------------------
>>>> INFO | 20070302-175232.043 | | | RESIP:TRANSACTION | 0 |
>>>> 3057712048 |
>>>> TransactionState.cxx:798 |
>>>> --------------------------- mMsgToRetransmit BEG
>>>> ---------------------------------
>>>> SipReq: INVITE service at 192.168.200.3:5060
>>>> tid=4b941154408e538aae1822d1ee5fa4ed cseq=INVITE
>>>> contact=sipp at 217.159.142.96:5061 / 1 from(tu)
>>>> --------------------------- mMsgToRetransmit END
>>>> ---------------------------------
>>>> sbcd: TransactionState.cxx:799: void
>>>> resip::TransactionState::processClientInvite(resip::TransactionMessage*):
>>>>
>>>> Assertion `mMsgToRetransmit->method() == ACK' failed.
>>>>
>>>>
>>>>
>>>> To conclusion I have a list of servers (Server1 ... ServerN) and
>>>> the proxy
>>>> should send the received invite to Server1 if the server returns
>>>> 500 the the
>>>> proxy should send the same INVITE to Server2 and so on, until the
>>>> proxy gets
>>>> a 200 from ServerX.
>>>>
>>>>
>>>> Am I doing something wrong? Or how can I send the same message to
>>>> another
>>>> ServerX if the Server1 responded with 500.
>>>>
>>>>
>>>> Janari Põld
>>>>
>>>> _______________________________________________
>>>> resiprocate-devel mailing list
>>>> resiprocate-devel at list.resiprocate.org
>>>> https://list.resiprocate.org/mailman/listinfo/resiprocate-devel
>>>
>
More information about the resiprocate-devel
mailing list