diff options
author | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2000-12-27 13:38:58 +0000 |
---|---|---|
committer | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2000-12-27 13:38:58 +0000 |
commit | 7fff2d57294128d195b9823d1eab1f0f9701923d (patch) | |
tree | 839272f3337c3928c3509acbcd83826a23d59c93 | |
parent | 271b603b56490f6e55ccc3487578cc09b5e51f28 (diff) |
Version 0.1.6 from FTP
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@224 f38db490-d61c-443f-a65b-d21fe96a405b
-rwxr-xr-x | channels/Makefile | 3 | ||||
-rwxr-xr-x | channels/chan_iax.c | 32 | ||||
-rwxr-xr-x | channels/iax.h | 4 |
3 files changed, 30 insertions, 9 deletions
diff --git a/channels/Makefile b/channels/Makefile index c7d29c66c..a9d78aaf4 100755 --- a/channels/Makefile +++ b/channels/Makefile @@ -12,7 +12,8 @@ # CHANNEL_LIBS=chan_vofr.so chan_modem.so \ - chan_modem_aopen.so chan_iax.so chan_oss.so + chan_modem_aopen.so chan_iax.so chan_oss.so \ + chan_modem_i4l.so CHANNEL_LIBS+=$(shell [ -f /usr/include/linux/ixjuser.h ] && echo chan_phone.so) diff --git a/channels/chan_iax.c b/channels/chan_iax.c index 010dbffa0..77f855729 100755 --- a/channels/chan_iax.c +++ b/channels/chan_iax.c @@ -127,6 +127,15 @@ struct iax_peer { struct sockaddr_in addr; int formats; struct in_addr mask; + + /* Dynamic Registration fields */ + int dynamic; + struct sockaddr_in defaddr; + char regsecret[80]; + char methods[80]; + struct timeval nexpire; + int expire; + struct iax_ha *ha; struct iax_peer *next; }; @@ -2038,16 +2047,23 @@ static struct iax_peer *build_peer(char *name, struct ast_variable *v) if (!strcasecmp(v->name, "secret")) strncpy(peer->secret, v->value, sizeof(peer->secret)); else if (!strcasecmp(v->name, "host")) { - hp = gethostbyname(v->value); - if (hp) { - memcpy(&peer->addr.sin_addr, hp->h_addr, sizeof(peer->addr.sin_addr)); + if (!strcasecmp(v->value, "dynamic")) { + /* They'll register with us */ + peer->dynamic = 1; + memset(&peer->addr.sin_addr, 0, 4); } else { - ast_log(LOG_WARNING, "Unable to lookup '%s'\n", v->value); - free(peer); - return NULL; + peer->dynamic = 0; + hp = gethostbyname(v->value); + if (hp) { + memcpy(&peer->addr.sin_addr, hp->h_addr, sizeof(peer->addr.sin_addr)); + } else { + ast_log(LOG_WARNING, "Unable to lookup '%s'\n", v->value); + free(peer); + return NULL; + } + if (!maskfound) + inet_aton("255.255.255.255", &peer->mask); } - if (!maskfound) - inet_aton("255.255.255.255", &peer->mask); } else if (!strcasecmp(v->name, "mask")) { maskfound++; diff --git a/channels/iax.h b/channels/iax.h index 295b545c1..5f8f9c2c3 100755 --- a/channels/iax.h +++ b/channels/iax.h @@ -38,6 +38,10 @@ #define AST_IAX_COMMAND_INVAL 10 #define AST_IAX_COMMAND_LAGRQ 11 #define AST_IAX_COMMAND_LAGRP 12 +#define AST_IAX_COMMAND_REGRQ 13 +#define AST_IAX_COMMAND_REGRP 14 + +#define AST_DEFAULT_REG_EXPIRE 60 /* By default require re-registration once per minute */ #define AST_DEFAULT_IAX_PORTNO 5036 |