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 /channels/chan_iax.c | |
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
Diffstat (limited to 'channels/chan_iax.c')
-rwxr-xr-x | channels/chan_iax.c | 32 |
1 files changed, 24 insertions, 8 deletions
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++; |