aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authortilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b>2009-09-10 23:18:45 +0000
committertilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b>2009-09-10 23:18:45 +0000
commit56cd6867f1a272ea980b7c673cbe6cbee7f8f8c5 (patch)
treed2de9878db0d047e5a92e78a2292c16abf4d569a
parent8fc286506933e25ddf3e15fea462039d97e437d3 (diff)
Merged revisions 217916 via svnmerge from
https://origsvn.digium.com/svn/asterisk/trunk ........ r217916 | tilghman | 2009-09-10 18:12:16 -0500 (Thu, 10 Sep 2009) | 2 lines Make calltoken support work with realtime users and peers. ........ git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.6.1@217924 f38db490-d61c-443f-a65b-d21fe96a405b
-rw-r--r--channels/chan_iax2.c11
-rw-r--r--channels/chan_sip.c2
-rw-r--r--contrib/scripts/iax-friends.sql89
3 files changed, 55 insertions, 47 deletions
diff --git a/channels/chan_iax2.c b/channels/chan_iax2.c
index 09a01ac37..35665e27b 100644
--- a/channels/chan_iax2.c
+++ b/channels/chan_iax2.c
@@ -824,6 +824,7 @@ static AST_LIST_HEAD_STATIC(dpcache, iax2_dpcache);
static void reg_source_db(struct iax2_peer *p);
static struct iax2_peer *realtime_peer(const char *peername, struct sockaddr_in *sin);
+static struct iax2_user *realtime_user(const char *username, struct sockaddr_in *sin);
static int ast_cli_netstats(struct mansession *s, int fd, int limit_fmt);
static char *complete_iax2_peers(const char *line, const char *word, int pos, int state);
@@ -1894,7 +1895,11 @@ static int calltoken_required(struct sockaddr_in *sin, const char *name, int sub
/* ----- Case 2 ----- */
if ((subclass == IAX_COMMAND_NEW) && (user = find_user(find))) {
calltoken_required = user->calltoken_required;
- } else if ((subclass != IAX_COMMAND_NEW) && (peer = find_peer(find, 1))) {
+ } else if ((subclass == IAX_COMMAND_NEW) && (user = realtime_user(find, sin))) {
+ calltoken_required = user->calltoken_required;
+ } else if ((subclass != IAX_COMMAND_NEW) && (peer = find_peer(find, 0))) {
+ calltoken_required = peer->calltoken_required;
+ } else if ((subclass != IAX_COMMAND_NEW) && (peer = realtime_peer(find, sin))) {
calltoken_required = peer->calltoken_required;
}
@@ -3976,7 +3981,7 @@ static struct iax2_peer *realtime_peer(const char *peername, struct sockaddr_in
if (!strcasecmp(tmp->name, "host")) {
struct ast_hostent ahp;
struct hostent *hp;
- if (!(hp = ast_gethostbyname(tmp->value, &ahp)) || (memcmp(&hp->h_addr, &sin->sin_addr, sizeof(hp->h_addr)))) {
+ if (!(hp = ast_gethostbyname(tmp->value, &ahp)) || (memcmp(hp->h_addr, &sin->sin_addr, sizeof(hp->h_addr)))) {
/* No match */
ast_variables_destroy(var);
var = NULL;
@@ -4088,7 +4093,7 @@ static struct iax2_user *realtime_user(const char *username, struct sockaddr_in
if (!strcasecmp(tmp->name, "host")) {
struct ast_hostent ahp;
struct hostent *hp;
- if (!(hp = ast_gethostbyname(tmp->value, &ahp)) || (memcmp(&hp->h_addr, &sin->sin_addr, sizeof(hp->h_addr)))) {
+ if (!(hp = ast_gethostbyname(tmp->value, &ahp)) || (memcmp(hp->h_addr, &sin->sin_addr, sizeof(hp->h_addr)))) {
/* No match */
ast_variables_destroy(var);
var = NULL;
diff --git a/channels/chan_sip.c b/channels/chan_sip.c
index 5fda830ce..d967bde59 100644
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -4145,7 +4145,7 @@ static struct sip_peer *realtime_peer(const char *newpeername, struct sockaddr_i
if (!strcasecmp(tmp->name, "host")) {
struct hostent *hp;
struct ast_hostent ahp;
- if (!(hp = ast_gethostbyname(tmp->value, &ahp)) || (memcmp(&hp->h_addr, &sin->sin_addr, sizeof(hp->h_addr)))) {
+ if (!(hp = ast_gethostbyname(tmp->value, &ahp)) || (memcmp(hp->h_addr, &sin->sin_addr, sizeof(hp->h_addr)))) {
/* No match */
ast_variables_destroy(var);
var = NULL;
diff --git a/contrib/scripts/iax-friends.sql b/contrib/scripts/iax-friends.sql
index 9f8cd5ccd..a83d8ce46 100644
--- a/contrib/scripts/iax-friends.sql
+++ b/contrib/scripts/iax-friends.sql
@@ -4,51 +4,54 @@
CREATE TABLE `iaxfriends` (
`name` varchar(40) NOT NULL default '',
- `username` varchar(40) NOT NULL default '',
- `secret` varchar(40) NOT NULL default '',
- `dbsecret` varchar(40) NOT NULL default '',
- `context` varchar(40) NOT NULL default '',
- `regcontext` varchar(40) NOT NULL default '',
- `host` varchar(40) NOT NULL default 'dynamic',
- `ipaddr` varchar(20) NOT NULL default '',
- `port` int(6) NOT NULL default '0',
- `defaultip` varchar(20) NOT NULL default '',
- `sourceaddress` varchar(20) NOT NULL default '',
- `mask` varchar(20) NOT NULL default '',
- `regexten` varchar(40) NOT NULL default '',
- `regseconds` int(11) NOT NULL default '0',
- `accountcode` varchar(20) NOT NULL default '',
- `mohinterpret` varchar(20) NOT NULL default '',
- `mohsuggest` varchar(20) NOT NULL default '',
- `inkeys` varchar(40) NOT NULL default '',
- `outkey` varchar(40) NOT NULL default '',
- `language` varchar(10) NOT NULL default '',
- `callerid` varchar(40) NOT NULL default '',
- `cid_number` varchar(40) NOT NULL default '',
- `sendani` varchar(10) NOT NULL default '',
- `fullname` varchar(40) NOT NULL default '',
- `trunk` varchar(10) NOT NULL default '',
- `auth` varchar(20) NOT NULL default '',
- `maxauthreq` varchar(15) NOT NULL default '',
- `encryption` varchar(20) NOT NULL default '',
- `transfer` varchar(10) NOT NULL default '',
- `jitterbuffer` varchar(10) NOT NULL default '',
- `forcejitterbuffer` varchar(10) NOT NULL default '',
- `disallow` varchar(40) NOT NULL default 'all',
- `allow` varchar(40) NOT NULL default '',
- `codecpriority` varchar(40) NOT NULL default '',
- `qualify` varchar(10) NOT NULL default '',
- `qualifysmoothing` varchar(10) NOT NULL default '',
- `qualifyfreqok` varchar(10) NOT NULL default '',
- `qualifyfreqnotok` varchar(10) NOT NULL default '',
- `timezone` varchar(20) NOT NULL default '',
- `adsi` varchar(10) NOT NULL default '',
- `amaflags` varchar(20) NOT NULL default '',
- `setvar` varchar(200) NOT NULL default '',
+ `type` varchar(10) NOT NULL default 'friend', -- friend/user/peer
+ `username` varchar(40) NULL, -- username to send as peer
+ `mailbox` varchar(40) NULL, -- mailbox@context
+ `secret` varchar(40) NULL,
+ `dbsecret` varchar(40) NULL, -- In AstDB, location to store/retrieve secret
+ `context` varchar(40) NULL,
+ `regcontext` varchar(40) NULL,
+ `host` varchar(40) NULL default 'dynamic',
+ `ipaddr` varchar(20) NULL, -- Must be updateable by Asterisk user
+ `port` int(5) NULL, -- Must be updateable by Asterisk user
+ `defaultip` varchar(20) NULL,
+ `sourceaddress` varchar(20) NULL,
+ `mask` varchar(20) NULL,
+ `regexten` varchar(40) NULL,
+ `regseconds` int(11) NULL, -- Must be updateable by Asterisk user
+ `accountcode` varchar(20) NULL,
+ `mohinterpret` varchar(20) NULL,
+ `mohsuggest` varchar(20) NULL,
+ `inkeys` varchar(40) NULL,
+ `outkey` varchar(40) NULL,
+ `language` varchar(10) NULL,
+ `callerid` varchar(100) NULL, -- The whole callerid string, or broken down in the next 3 fields
+ `cid_number` varchar(40) NULL, -- The number portion of the callerid
+ `sendani` varchar(10) NULL, -- yes/no
+ `fullname` varchar(40) NULL, -- The name portion of the callerid
+ `trunk` varchar(3) NULL, -- Yes/no
+ `auth` varchar(20) NULL, -- RSA/md5/plaintext
+ `maxauthreq` varchar(5) NULL, -- Maximum outstanding AUTHREQ calls {1-32767}
+ `requirecalltoken` varchar(4) NULL, -- yes/no/auto
+ `encryption` varchar(20) NULL, -- aes128/yes/no
+ `transfer` varchar(10) NULL, -- mediaonly/yes/no
+ `jitterbuffer` varchar(3) NULL, -- yes/no
+ `forcejitterbuffer` varchar(3) NULL, -- yes/no
+ `disallow` varchar(40) NULL, -- all/{list-of-codecs}
+ `allow` varchar(40) NULL, -- all/{list-of-codecs}
+ `codecpriority` varchar(40) NULL,
+ `qualify` varchar(10) NULL, -- yes/no/{number of milliseconds}
+ `qualifysmoothing` varchar(10) NULL, -- yes/no
+ `qualifyfreqok` varchar(10) NULL, -- {number of milliseconds}|60000
+ `qualifyfreqnotok` varchar(10) NULL, -- {number of milliseconds}|10000
+ `timezone` varchar(20) NULL,
+ `adsi` varchar(10) NULL, -- yes/no
+ `amaflags` varchar(20) NULL,
+ `setvar` varchar(200) NULL,
PRIMARY KEY (`name`),
INDEX name (name, host),
INDEX name2 (name, ipaddr, port),
INDEX ipaddr (ipaddr, port),
- INDEX host (host, port),
-) TYPE=MyISAM;
+ INDEX host (host, port)
+);