diff options
Diffstat (limited to 'channels')
-rwxr-xr-x | channels/chan_mgcp.c | 7 | ||||
-rwxr-xr-x | channels/chan_sip.c | 2 | ||||
-rwxr-xr-x | channels/chan_zap.c | 1 |
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> |