From: Michael Jerris Date: Wed, 3 Sep 2008 18:27:56 +0000 (+0000) Subject: Wed Sep 3 13:49:53 EDT 2008 Pekka Pessi X-Git-Tag: v1.0.2~1334 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8e37367fb66e4847e0425ac83c94fd1db87b47e4;p=thirdparty%2Ffreeswitch.git Wed Sep 3 13:49:53 EDT 2008 Pekka Pessi * outbound.c: do not use OPTIONS keepalive by default but on UDP On TCP, use TCP-level keepalives. git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@9418 d0543943-73ff-0310-b7d9-9358b9ac24b2 --- diff --git a/libs/sofia-sip/.update b/libs/sofia-sip/.update index a33e098604..55bf715ebb 100644 --- a/libs/sofia-sip/.update +++ b/libs/sofia-sip/.update @@ -1 +1 @@ -Wed Sep 3 14:27:05 EDT 2008 +Wed Sep 3 14:27:37 EDT 2008 diff --git a/libs/sofia-sip/libsofia-sip-ua/nua/outbound.c b/libs/sofia-sip/libsofia-sip-ua/nua/outbound.c index 8432945510..3f4d8e294b 100644 --- a/libs/sofia-sip/libsofia-sip-ua/nua/outbound.c +++ b/libs/sofia-sip/libsofia-sip-ua/nua/outbound.c @@ -77,7 +77,7 @@ struct outbound { unsigned gruuize:1; /**< Establish a GRUU */ unsigned outbound:1; /**< Try to use outbound */ unsigned natify:1; /**< Try to detect NAT */ - unsigned okeepalive:1; /**< Connection keepalive with OPTIONS */ + signed okeepalive:2; /**< Connection keepalive with OPTIONS */ unsigned validate:1; /**< Validate registration with OPTIONS */ /* How to detect NAT binding or connect to outbound: */ unsigned use_connect:1; /**< Use HTTP connect */ @@ -270,7 +270,7 @@ int outbound_set_options(outbound_t *ob, prefs->gruuize = 1; prefs->outbound = 0; prefs->natify = 1; - prefs->okeepalive = 1; + prefs->okeepalive = -1; prefs->validate = 1; prefs->use_rport = 1; @@ -662,12 +662,18 @@ void outbound_start_keepalive(outbound_t *ob, nta_outgoing_t *register_transaction) { unsigned interval = 0; - int need_to_validate; + int need_to_validate, udp; if (!ob) return; - if (ob->ob_prefs.natify && ob->ob_prefs.okeepalive) + udp = ob->ob_via && ob->ob_via->v_protocol == sip_transport_udp; + + if (ob->ob_prefs.natify && + /* On UDP, use OPTIONS keepalive by default */ + (udp ? ob->ob_prefs.okeepalive != 0 + /* Otherwise, only if requested */ + : ob->ob_prefs.okeepalive > 0)) interval = ob->ob_prefs.interval; need_to_validate = ob->ob_prefs.validate && !ob->ob_validated;