diff options
author | bbryant <bbryant@f38db490-d61c-443f-a65b-d21fe96a405b> | 2008-07-08 14:43:30 +0000 |
---|---|---|
committer | bbryant <bbryant@f38db490-d61c-443f-a65b-d21fe96a405b> | 2008-07-08 14:43:30 +0000 |
commit | b2d0a411d289307a4a22e2647d0ad5540542de01 (patch) | |
tree | 07ca170c7209704ac031ade7e274fe4a442eeeae /channels/chan_sip.c | |
parent | 8439dda007a8115021eb7ed92554e71cc7202226 (diff) |
Merged revisions 127621 via svnmerge from
https://origsvn.digium.com/svn/asterisk/trunk
........
r127621 | bbryant | 2008-07-02 17:16:29 -0500 (Wed, 02 Jul 2008) | 1 line
Update transport= in sip so that the option is not broken from a recent commit.
........
git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.6.0@129042 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'channels/chan_sip.c')
-rw-r--r-- | channels/chan_sip.c | 28 |
1 files changed, 19 insertions, 9 deletions
diff --git a/channels/chan_sip.c b/channels/chan_sip.c index c0d8ffe49..3833476bf 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -19941,15 +19941,25 @@ static struct sip_peer *build_peer(const char *name, struct ast_variable *v, str for (; v || ((v = alt) && !(alt=NULL)); v = v->next) { if (handle_common_options(&peerflags[0], &mask[0], v)) continue; - if (!strcasecmp(v->name, "transport")) { - if (!strcasecmp(v->value, "udp")) - peer->transports &= SIP_TRANSPORT_UDP; - else if (!strcasecmp(v->value, "tcp")) - peer->transports &= SIP_TRANSPORT_TCP; - else if (!strcasecmp(v->value, "tls")) - peer->transports &= SIP_TRANSPORT_TLS; - if (!peer->socket.type) /*!< The first transport listed should be used for outgoing */ - peer->socket.type = peer->transports; + if (!strcasecmp(v->name, "transport") && !ast_strlen_zero(v->value)) { + char *val = ast_strdupa(v->value); + char *trans; + + while ((trans = strsep(&val, ","))) { + trans = ast_skip_blanks(trans); + + if (!strncasecmp(trans, "udp", 3)) + peer->transports |= SIP_TRANSPORT_UDP; + else if (!strncasecmp(trans, "tcp", 3)) + peer->transports |= SIP_TRANSPORT_TCP; + else if (!strncasecmp(trans, "tls", 3)) + peer->transports |= SIP_TRANSPORT_TLS; + else + ast_log(LOG_NOTICE, "'%s' is not a valid transport type. if no other is specified, udp will be used.\n", trans); + + if (!peer->socket.type) /*!< The first transport listed should be used for outgoing */ + peer->socket.type = peer->transports; + } } else if (realtime && !strcasecmp(v->name, "regseconds")) { ast_get_time_t(v->value, ®seconds, 0, NULL); } else if (realtime && !strcasecmp(v->name, "ipaddr") && !ast_strlen_zero(v->value) ) { |