From: Olle Johansson Date: Fri, 2 Feb 2007 00:24:03 +0000 (+0000) Subject: Disable the direct p2p RTP call setup in SIP. You can enable it in sip.conf, but... X-Git-Tag: 1.4.1~148 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=90a4b844a97ca87576a37942d5f8f17b72e45822;p=thirdparty%2Fasterisk.git Disable the direct p2p RTP call setup in SIP. You can enable it in sip.conf, but it is now considered experimental until we solve the AST_CONTROL_ANSWER with payload and videocaps stuff. git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@53109 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 22953bbcf0..2f2d8ba4ff 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -523,6 +523,7 @@ static int default_maxcallbitrate; /*!< Maximum bitrate for call */ static struct ast_codec_pref default_prefs; /*!< Default codec prefs */ /* Global settings only apply to the channel */ +static int global_directrtpsetup; /*!< Enable support for Direct RTP setup (no re-invites) */ static int global_limitonpeers; /*!< Match call limit on peers only */ static int global_rtautoclear; static int global_notifyringing; /*!< Send notifications on ringing */ @@ -10241,6 +10242,7 @@ static int sip_show_settings(int fd, int argc, char *argv[]) ast_cli(fd, " Realm. auth: %s\n", authl ? "Yes": "No"); ast_cli(fd, " Always auth rejects: %s\n", global_alwaysauthreject ? "Yes" : "No"); ast_cli(fd, " Call limit peers only: %s\n", global_limitonpeers ? "Yes" : "No"); + ast_cli(fd, " Direct RTP setup: %s\n", global_directrtpsetup ? "Yes" : "No"); ast_cli(fd, " User Agent: %s\n", global_useragent); ast_cli(fd, " MWI checking interval: %d secs\n", global_mwitime); ast_cli(fd, " Reg. context: %s\n", S_OR(global_regcontext, "(not set)")); @@ -16080,6 +16082,7 @@ static int reload_config(enum channelreloadreason reason) expiry = DEFAULT_EXPIRY; global_notifyringing = DEFAULT_NOTIFYRINGING; global_limitonpeers = FALSE; + global_directrtpsetup = FALSE; /* Experimental feature, disabled by default */ global_notifyhold = FALSE; global_alwaysauthreject = 0; global_allowsubscribe = FALSE; @@ -16206,6 +16209,8 @@ static int reload_config(enum channelreloadreason reason) ast_copy_string(default_notifymime, v->value, sizeof(default_notifymime)); } else if (!strcasecmp(v->name, "limitonpeers")) { global_limitonpeers = ast_true(v->value); + } else if (!strcasecmp(v->name, "directrtpsetup")) { + global_directrtpsetup = ast_true(v->value); } else if (!strcasecmp(v->name, "notifyringing")) { global_notifyringing = ast_true(v->value); } else if (!strcasecmp(v->name, "notifyhold")) { @@ -16757,6 +16762,11 @@ static int sip_set_rtp_peer(struct ast_channel *chan, struct ast_rtp *rtp, struc p = chan->tech_pvt; if (!p) return -1; + + /* Disable early RTP bridge */ + if (chan->_state != AST_STATE_UP && !global_directrtpsetup) /* We are in early state */ + return 0; + ast_mutex_lock(&p->lock); if (ast_test_flag(&p->flags[0], SIP_ALREADYGONE)) { /* If we're destroyed, don't bother */ diff --git a/configs/sip.conf.sample b/configs/sip.conf.sample index 2948eebabd..293eafa636 100644 --- a/configs/sip.conf.sample +++ b/configs/sip.conf.sample @@ -307,6 +307,12 @@ srvlookup=yes ; Enable DNS SRV lookups on outbound calls ; call directly between the endpoints instead of sending ; a re-INVITE). +;directrtpsetup=yes ; Enable the new experimental direct RTP setup. This sets up + ; the call directly with media peer-2-peer without re-invites. + ; Will not work for video and cases where the callee sends + ; RTP payloads and fmtp headers in the 200 OK that does not match the + ; callers INVITE. + ;canreinvite=nonat ; An additional option is to allow media path redirection ; (reinvite) but only when the peer where the media is being ; sent is known to not be behind a NAT (as the RTP core can