summaryrefslogtreecommitdiff
path: root/channels/chan_iax.c
diff options
context:
space:
mode:
authorMark Spencer <markster@digium.com>2000-12-27 13:38:58 +0000
committerMark Spencer <markster@digium.com>2000-12-27 13:38:58 +0000
commit4e8bcf1af1c9cc9a7c153b12f36eb882f4d71650 (patch)
tree839272f3337c3928c3509acbcd83826a23d59c93 /channels/chan_iax.c
parentce46416cb31f2571fc2de3a1962357718732b655 (diff)
Version 0.1.6 from FTP
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@224 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'channels/chan_iax.c')
-rwxr-xr-xchannels/chan_iax.c32
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++;