aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormarkster <markster@f38db490-d61c-443f-a65b-d21fe96a405b>2003-06-12 12:48:57 +0000
committermarkster <markster@f38db490-d61c-443f-a65b-d21fe96a405b>2003-06-12 12:48:57 +0000
commitd73374e107de6c78db4b2b9bdbbad3ed6d2fd484 (patch)
treeb2d3cbff08fc053f4f73000207fc5d5b92b60219
parent31f5de597872b0e19afd9d0adb2e0ae3e758befd (diff)
Add SRV code to SIP, cleanup ENUM and make IAX2 do the right thing on dials
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@1085 f38db490-d61c-443f-a65b-d21fe96a405b
-rwxr-xr-xMakefile2
-rwxr-xr-xchannels/chan_iax2.c2
-rwxr-xr-xchannels/chan_sip.c31
-rwxr-xr-xconfigs/sip.conf.sample1
-rwxr-xr-xenum.c5
5 files changed, 29 insertions, 12 deletions
diff --git a/Makefile b/Makefile
index 84603fdaa..fa86849b2 100755
--- a/Makefile
+++ b/Makefile
@@ -112,7 +112,7 @@ OBJS=io.o sched.o logger.o frame.o loader.o config.o channel.o \
ulaw.o alaw.o callerid.o fskmodem.o image.o app.o \
cdr.o tdd.o acl.o rtp.o manager.o asterisk.o ast_expr.o \
dsp.o chanvars.o indications.o autoservice.o db.o privacy.o \
- astmm.o enum.o
+ astmm.o enum.o srv.o
CC=gcc
INSTALL=install
diff --git a/channels/chan_iax2.c b/channels/chan_iax2.c
index f7faa0ab2..661ed9767 100755
--- a/channels/chan_iax2.c
+++ b/channels/chan_iax2.c
@@ -3019,7 +3019,7 @@ static int complete_dpreply(struct chan_iax2_pvt *pvt, struct iax_ies *ies)
if (dp->flags & CACHE_FLAG_PENDING) {
dp->flags &= ~CACHE_FLAG_PENDING;
dp->flags |= status;
- dp->flags |= CACHE_FLAG_MATCHMORE;
+ dp->flags |= matchmore;
}
/* Wake up waiters */
for (x=0;x<sizeof(dp->waiters) / sizeof(dp->waiters[0]); x++)
diff --git a/channels/chan_sip.c b/channels/chan_sip.c
index 58ef4530d..2abbe4491 100755
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -36,6 +36,7 @@
#include <asterisk/dsp.h>
#include <asterisk/parking.h>
#include <asterisk/acl.h>
+#include <asterisk/srv.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <net/if.h>
@@ -94,6 +95,8 @@ static char fromdomain[AST_MAX_EXTENSION] = "";
static char notifymime[AST_MAX_EXTENSION] = "application/simple-message-summary";
+static int srvlookup = 0;
+
static int usecnt =0;
static pthread_mutex_t usecnt_lock = AST_MUTEX_INITIALIZER;
@@ -595,6 +598,8 @@ static int create_addr(struct sip_pvt *r, char *peer)
struct sip_peer *p;
int found=0;
char *port;
+ int portno;
+ char host[256], *hostn;
r->sa.sin_family = AF_INET;
ast_pthread_mutex_lock(&peerl.lock);
@@ -656,15 +661,27 @@ static int create_addr(struct sip_pvt *r, char *peer)
*port='\0';
port++;
}
- hp = gethostbyname(peer);
+ hostn = peer;
+ if (port)
+ portno = atoi(port);
+ else
+ portno = DEFAULT_SIP_PORT;
+ if (srvlookup) {
+ char service[256];
+ int tportno;
+ int ret;
+ snprintf(service, sizeof(service), "_sip._udp.%s", peer);
+ ret = ast_get_srv(NULL, host, sizeof(host), &tportno, service);
+ if (ret > 0) {
+ hostn = host;
+ portno = tportno;
+ }
+ }
+ hp = gethostbyname(hostn);
if (hp) {
strncpy(r->tohost, peer, sizeof(r->tohost) - 1);
memcpy(&r->sa.sin_addr, hp->h_addr, sizeof(r->sa.sin_addr));
- if (port) {
- r->sa.sin_port = htons(atoi(port));
- } else {
- r->sa.sin_port = htons(DEFAULT_SIP_PORT);
- }
+ r->sa.sin_port = htons(portno);
memcpy(&r->recv, &r->sa, sizeof(r->recv));
return 0;
} else {
@@ -5216,6 +5233,8 @@ static int reload_config(void)
strncpy(fromdomain, v->value, sizeof(fromdomain)-1);
} else if (!strcasecmp(v->name, "nat")) {
globalnat = ast_true(v->value);
+ } else if (!strcasecmp(v->name, "srvlookup")) {
+ srvlookup = ast_true(v->value);
} else if (!strcasecmp(v->name, "canreinvite")) {
if (!strcasecmp(v->value, "update"))
globalcanreinvite = REINVITE_UPDATE;
diff --git a/configs/sip.conf.sample b/configs/sip.conf.sample
index 0010d4779..a26996939 100755
--- a/configs/sip.conf.sample
+++ b/configs/sip.conf.sample
@@ -5,6 +5,7 @@
port = 5060 ; Port to bind to
bindaddr = 0.0.0.0 ; Address to bind to
context = default ; Default for incoming calls
+;srvlookup = yes ; Enable SRV lookups on outbound calls
;tos=lowdelay
;tos=184
;maxexpirey=3600 ; Max length of incoming registration we allow
diff --git a/enum.c b/enum.c
index b42278239..73141f0a8 100755
--- a/enum.c
+++ b/enum.c
@@ -234,15 +234,12 @@ static int parse_answer(unsigned char *dst, int dstlen, unsigned char *tech, int
printf("Looking for %d/%d\n", C_IN, T_NAPTR);
#endif
for (x=0;x<ntohs(h->ancount);x++) {
- if ((res = skip_name(answer, len) < 0)) {
+ if ((res = skip_name(answer, len)) < 0) {
ast_log(LOG_WARNING, "Failed to skip name :(\n");
return -1;
}
answer += res;
len -= res;
- /* XXX Why am I adding 2 here? XXX */
- answer += 2;
- len -= 2;
ans = (struct dn_answer *)answer;
answer += sizeof(struct dn_answer);
len -= sizeof(struct dn_answer);