aboutsummaryrefslogtreecommitdiffstats
path: root/channels
diff options
context:
space:
mode:
Diffstat (limited to 'channels')
-rwxr-xr-xchannels/chan_mgcp.c7
-rwxr-xr-xchannels/chan_sip.c2
-rwxr-xr-xchannels/chan_zap.c1
3 files changed, 10 insertions, 0 deletions
diff --git a/channels/chan_mgcp.c b/channels/chan_mgcp.c
index 08ef81499..83df5d6b7 100755
--- a/channels/chan_mgcp.c
+++ b/channels/chan_mgcp.c
@@ -124,6 +124,7 @@ struct mgcp_endpoint {
int type;
int group;
int iseq;
+ int nat;
int lastout;
int alreadygone;
int needdestroy;
@@ -1129,6 +1130,8 @@ static void start_rtp(struct mgcp_endpoint *p)
p->rtp = ast_rtp_new(NULL, NULL);
if (p->rtp && p->owner)
p->owner->fds[0] = ast_rtp_fd(p->rtp);
+ if (p->rtp)
+ ast_rtp_setnat(p->rtp, p->nat);
#if 0
ast_rtp_set_callback(p->rtp, rtpready);
ast_rtp_set_data(p->rtp, p);
@@ -1445,6 +1448,7 @@ struct mgcp_gateway *build_gateway(char *cat, struct ast_variable *v)
char context[AST_MAX_EXTENSION] = "default";
char language[80] = "";
char callerid[AST_MAX_EXTENSION] = "";
+ int nat = 0;
gw = malloc(sizeof(struct mgcp_gateway));
if (gw) {
@@ -1463,6 +1467,8 @@ struct mgcp_gateway *build_gateway(char *cat, struct ast_variable *v)
gw->addr.sin_port = htons(atoi(v->value));
} else if (!strcasecmp(v->name, "context")) {
strncpy(context, v->value, sizeof(context) - 1);
+ } else if (!strcasecmp(v->name, "nat")) {
+ nat = ast_true(v->value);
} else if (!strcasecmp(v->name, "callerid")) {
if (!strcasecmp(v->value, "asreceived"))
strcpy(callerid, "");
@@ -1482,6 +1488,7 @@ struct mgcp_gateway *build_gateway(char *cat, struct ast_variable *v)
strncpy(e->language, language, sizeof(e->language) - 1);
e->capability = capability;
e->parent = gw;
+ e->nat = nat;
strncpy(e->name, v->value, sizeof(e->name) - 1);
if (!strcasecmp(v->name, "trunk"))
e->type = TYPE_TRUNK;
diff --git a/channels/chan_sip.c b/channels/chan_sip.c
index 726218f0a..059709e5d 100755
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -2516,6 +2516,8 @@ static int check_user(struct sip_pvt *p, struct sip_request *req, char *cmd, cha
while(user) {
if (!strcasecmp(user->name, of)) {
p->nat = user->nat;
+ if (p->rtp)
+ ast_rtp_setnat(p->rtp, p->nat);
if (!(res = check_auth(p, req, p->randdata, sizeof(p->randdata), user->name, user->secret, cmd, uri))) {
strncpy(p->context, user->context, sizeof(p->context) - 1);
if (strlen(user->callerid) && strlen(p->callerid))
diff --git a/channels/chan_zap.c b/channels/chan_zap.c
index 86548238a..4d308c3c4 100755
--- a/channels/chan_zap.c
+++ b/channels/chan_zap.c
@@ -34,6 +34,7 @@
#include <asterisk/tdd.h>
#include <asterisk/app.h>
#include <asterisk/dsp.h>
+#include <asterisk/astdb.h>
#include <sys/signal.h>
#include <sys/select.h>
#include <errno.h>