Hi Tom,

o Tom van der Geer [09/16/09 13:00]:
Hi,

Browsing through the logs of my C2D application (AmB2BSession) I've found a situation where of the upstream proxies sent and INFO message after a certain period to check if the session was still alive. In this
its most probably not the proxy, but the endpoint that sent the INFO. proxies may not originate requests if i am not mistaken...

case it was received in the C2DCalleeSession. My application responded by forwarding the INFO message to the proxy connected in the CallerSession (relayEvent). This particular proxy did not respond to the INFO message, so this led to a disconnect, because after 32 seconds the
again, its not the proxies' duty to respond, but the endpoint.

C2D app decided that it timed out and sent a "408 Timeout" to the proxy connected on the CallerSession.

Is this the proper behavior? Should the INFO message be relayed?
in my opinion, if a B2BUA is in the dialog it should relay all messages after the dialogs are created; it should do something different only if the session is stopped (BYE and CANCEL).

The situation you describe looks to me like an endpoint problem - the endpoint should definitely reply something to the INFO.

Nevertheless, one reason (the only?) for having a B2BUA in the middle is to fix broken endpoint behaviour which you don't have influence over otherwise. This road may be dangerous though: You should for example be aware that DTMF may also be transmitted in SIP INFO (de-facto standard even if there is RFC). If you catch the INFO in the middle, DTMF may stop working. You may also have a look at the content-type (application/dtmf or application/dtmf-relay), but in principle all middle box actions may sooner or later break some new features of the end points (see broken SIP ALG topic).

[...]

In this particular case it was probably better if the C2D application responded with a 200 OK in stead of relaying the message. How can this be achieved?
implement your own onSipRequest method where you catch INFO like this:
void MyCalleeSession::onSipRequest(const AmSipRequest& req)
{
 if ((req.method=="INFO") &&
   (req.content_type == "whatever") &&
 // maybe some more checks here
    ) {
        dlg.reply(req, 200, "OK" ["application/mycontent", "body..."]);
    }
} else {
 AmB2BCalleeSession::onSipRequest();
}
}

Stefan


Thanks in advance for your responses!
Best regards,

Tom
_______________________________________________
Sems mailing list
[email protected]
http://lists.iptel.org/mailman/listinfo/sems

--
Stefan Sayer
VoIP Services

[email protected]
www.iptego.com

IPTEGO GmbH
Wittenbergplatz 1
10789 Berlin
Germany

Amtsgericht Charlottenburg, HRB 101010
Geschaeftsfuehrer: Alexander Hoffmann
_______________________________________________
Sems mailing list
[email protected]
http://lists.iptel.org/mailman/listinfo/sems

Reply via email to