aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xchannels/Makefile3
-rwxr-xr-xchannels/chan_iax.c32
-rwxr-xr-xchannels/iax.h4
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