Skip to content
Snippets Groups Projects
Commit a1a58248 authored by Luigi Rizzo's avatar Luigi Rizzo
Browse files

put repeated code to set nat mode in a function.


git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@44674 65c4cc65-6c06-0410-ace0-fbb531ad65f3
parent bc1e5f77
Branches
Tags
No related merge requests found
...@@ -2501,13 +2501,33 @@ static struct sip_user *find_user(const char *name, int realtime) ...@@ -2501,13 +2501,33 @@ static struct sip_user *find_user(const char *name, int realtime)
return u; return u;
} }
   
/*! \brief Set nat mode on the various data sockets */
static void do_setnat(struct sip_pvt *p, int natflags)
{
const char *mode = natflags ? "On" : "Off";
if (p->rtp) {
if (option_debug)
ast_log(LOG_DEBUG, "Setting NAT on RTP to %s\n", mode);
ast_rtp_setnat(p->rtp, natflags);
}
if (p->vrtp) {
if (option_debug)
ast_log(LOG_DEBUG, "Setting NAT on VRTP to %s\n", mode);
ast_rtp_setnat(p->vrtp, natflags);
}
if (p->udptl) {
if (option_debug)
ast_log(LOG_DEBUG, "Setting NAT on UDPTL to %s\n", mode);
ast_udptl_setnat(p->udptl, natflags);
}
}
/*! \brief Create address structure from peer reference. /*! \brief Create address structure from peer reference.
* return -1 on error, 0 on success. * return -1 on error, 0 on success.
*/ */
static int create_addr_from_peer(struct sip_pvt *dialog, struct sip_peer *peer) static int create_addr_from_peer(struct sip_pvt *dialog, struct sip_peer *peer)
{ {
int natflags;
if ((peer->addr.sin_addr.s_addr || peer->defaddr.sin_addr.s_addr) && if ((peer->addr.sin_addr.s_addr || peer->defaddr.sin_addr.s_addr) &&
(!peer->maxms || ((peer->lastms >= 0) && (peer->lastms <= peer->maxms)))) { (!peer->maxms || ((peer->lastms >= 0) && (peer->lastms <= peer->maxms)))) {
dialog->sa = (peer->addr.sin_addr.s_addr) ? peer->addr : peer->defaddr; dialog->sa = (peer->addr.sin_addr.s_addr) ? peer->addr : peer->defaddr;
...@@ -2541,26 +2561,17 @@ static int create_addr_from_peer(struct sip_pvt *dialog, struct sip_peer *peer) ...@@ -2541,26 +2561,17 @@ static int create_addr_from_peer(struct sip_pvt *dialog, struct sip_peer *peer)
ast_udptl_destroy(dialog->udptl); ast_udptl_destroy(dialog->udptl);
dialog->udptl = NULL; dialog->udptl = NULL;
} }
natflags = ast_test_flag(&dialog->flags[0], SIP_NAT) & SIP_NAT_ROUTE; do_setnat(dialog, ast_test_flag(&dialog->flags[0], SIP_NAT) & SIP_NAT_ROUTE );
if (dialog->rtp) { if (dialog->rtp) {
if (option_debug)
ast_log(LOG_DEBUG, "Setting NAT on RTP to %s\n", natflags ? "On" : "Off");
ast_rtp_setnat(dialog->rtp, natflags);
ast_rtp_setdtmf(dialog->rtp, ast_test_flag(&dialog->flags[0], SIP_DTMF) != SIP_DTMF_INFO); ast_rtp_setdtmf(dialog->rtp, ast_test_flag(&dialog->flags[0], SIP_DTMF) != SIP_DTMF_INFO);
ast_rtp_setdtmfcompensate(dialog->rtp, ast_test_flag(&dialog->flags[1], SIP_PAGE2_RFC2833_COMPENSATE)); ast_rtp_setdtmfcompensate(dialog->rtp, ast_test_flag(&dialog->flags[1], SIP_PAGE2_RFC2833_COMPENSATE));
} }
if (dialog->vrtp) { if (dialog->vrtp) {
if (option_debug)
ast_log(LOG_DEBUG, "Setting NAT on VRTP to %s\n", natflags ? "On" : "Off");
ast_rtp_setnat(dialog->vrtp, natflags);
ast_rtp_setdtmf(dialog->vrtp, 0); ast_rtp_setdtmf(dialog->vrtp, 0);
ast_rtp_setdtmfcompensate(dialog->vrtp, 0); ast_rtp_setdtmfcompensate(dialog->vrtp, 0);
} }
if (dialog->udptl) {
if (option_debug)
ast_log(LOG_DEBUG, "Setting NAT on UDPTL to %s\n", natflags ? "On" : "Off");
ast_udptl_setnat(dialog->udptl, natflags);
}
/* Set Frame packetization */ /* Set Frame packetization */
if (dialog->rtp) { if (dialog->rtp) {
ast_rtp_codec_setpref(dialog->rtp, &dialog->prefs); ast_rtp_codec_setpref(dialog->rtp, &dialog->prefs);
...@@ -4131,17 +4142,10 @@ static struct sip_pvt *sip_alloc(ast_string_field callid, struct sockaddr_in *si ...@@ -4131,17 +4142,10 @@ static struct sip_pvt *sip_alloc(ast_string_field callid, struct sockaddr_in *si
} }
   
if (useglobal_nat && sin) { if (useglobal_nat && sin) {
int natflags;
/* Setup NAT structure according to global settings if we have an address */ /* Setup NAT structure according to global settings if we have an address */
ast_copy_flags(&p->flags[0], &global_flags[0], SIP_NAT); ast_copy_flags(&p->flags[0], &global_flags[0], SIP_NAT);
p->recv = *sin; p->recv = *sin;
natflags = ast_test_flag(&p->flags[0], SIP_NAT) & SIP_NAT_ROUTE; do_setnat(p, ast_test_flag(&p->flags[0], SIP_NAT) & SIP_NAT_ROUTE);
if (p->rtp)
ast_rtp_setnat(p->rtp, natflags);
if (p->vrtp)
ast_rtp_setnat(p->vrtp, natflags);
if (p->udptl)
ast_udptl_setnat(p->udptl, natflags);
} }
   
if (p->method != SIP_REGISTER) if (p->method != SIP_REGISTER)
...@@ -8687,7 +8691,6 @@ static enum check_auth_result check_user_full(struct sip_pvt *p, struct sip_requ ...@@ -8687,7 +8691,6 @@ static enum check_auth_result check_user_full(struct sip_pvt *p, struct sip_requ
char calleridname[50]; char calleridname[50];
int debug=sip_debug_test_addr(sin); int debug=sip_debug_test_addr(sin);
struct ast_variable *tmpvar = NULL, *v = NULL; struct ast_variable *tmpvar = NULL, *v = NULL;
int usenatroute;
char *uri2 = ast_strdupa(uri); char *uri2 = ast_strdupa(uri);
   
/* Terminate URI */ /* Terminate URI */
...@@ -8772,23 +8775,8 @@ static enum check_auth_result check_user_full(struct sip_pvt *p, struct sip_requ ...@@ -8772,23 +8775,8 @@ static enum check_auth_result check_user_full(struct sip_pvt *p, struct sip_requ
ast_string_field_set(p, cid_num, tmp); ast_string_field_set(p, cid_num, tmp);
} }
usenatroute = ast_test_flag(&p->flags[0], SIP_NAT_ROUTE); do_setnat(p, ast_test_flag(&p->flags[0], SIP_NAT_ROUTE) );
   
if (p->rtp) {
if (option_debug)
ast_log(LOG_DEBUG, "Setting NAT on RTP to %s\n", usenatroute ? "On" : "Off");
ast_rtp_setnat(p->rtp, usenatroute);
}
if (p->vrtp) {
if (option_debug)
ast_log(LOG_DEBUG, "Setting NAT on VRTP to %s\n", usenatroute ? "On" : "Off");
ast_rtp_setnat(p->vrtp, usenatroute);
}
if (p->udptl) {
if (option_debug)
ast_log(LOG_DEBUG, "Setting NAT on UDPTL to %s\n", usenatroute ? "On" : "Off");
ast_udptl_setnat(p->udptl, usenatroute);
}
if (!(res = check_auth(p, req, user->name, user->secret, user->md5secret, sipmethod, uri2, reliable, ast_test_flag(req, SIP_PKT_IGNORE)))) { if (!(res = check_auth(p, req, user->name, user->secret, user->md5secret, sipmethod, uri2, reliable, ast_test_flag(req, SIP_PKT_IGNORE)))) {
sip_cancel_destroy(p); sip_cancel_destroy(p);
ast_copy_flags(&p->flags[0], &user->flags[0], SIP_FLAGS_TO_COPY); ast_copy_flags(&p->flags[0], &user->flags[0], SIP_FLAGS_TO_COPY);
...@@ -8894,22 +8882,8 @@ static enum check_auth_result check_user_full(struct sip_pvt *p, struct sip_requ ...@@ -8894,22 +8882,8 @@ static enum check_auth_result check_user_full(struct sip_pvt *p, struct sip_requ
ast_shrink_phone_number(tmp); ast_shrink_phone_number(tmp);
ast_string_field_set(p, cid_num, tmp); ast_string_field_set(p, cid_num, tmp);
} }
usenatroute = ast_test_flag(&p->flags[0], SIP_NAT_ROUTE); do_setnat(p, ast_test_flag(&p->flags[0], SIP_NAT_ROUTE));
if (p->rtp) {
if (option_debug)
ast_log(LOG_DEBUG, "Setting NAT on RTP to %s\n", usenatroute ? "On" : "Off");
ast_rtp_setnat(p->rtp, usenatroute);
}
if (p->vrtp) {
if (option_debug)
ast_log(LOG_DEBUG, "Setting NAT on VRTP to %s\n", usenatroute ? "On" : "Off");
ast_rtp_setnat(p->vrtp, usenatroute);
}
if (p->udptl) {
if (option_debug)
ast_log(LOG_DEBUG, "Setting NAT on UDPTL to %s\n", usenatroute ? "On" : "Off");
ast_udptl_setnat(p->udptl, usenatroute);
}
ast_string_field_set(p, peersecret, peer->secret); ast_string_field_set(p, peersecret, peer->secret);
ast_string_field_set(p, peermd5secret, peer->md5secret); ast_string_field_set(p, peermd5secret, peer->md5secret);
ast_string_field_set(p, subscribecontext, peer->subscribecontext); ast_string_field_set(p, subscribecontext, peer->subscribecontext);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment