--- chan_sip.c 2010-04-12 03:16:16.000000000 +0200 +++ chan_sip.c.orig 2010-04-12 03:16:11.000000000 +0200 @@ -4743,13 +4743,26 @@ struct ast_variable *tmp; struct ast_config *peerlist = NULL; char ipaddr[INET_ADDRSTRLEN]; - char portstring[6]; /*up to 5 digits plus null terminator*/ + char portstring[6]; char *cat = NULL; unsigned short portnum; int realtimeregs = ast_check_realtime("sipregs"); - /* First check on peer name */ - if (newpeername) { + if (sin) { /*tecnoxarxa patch. Search first ip and port*/ + ast_copy_string(ipaddr, ast_inet_ntoa(sin->sin_addr), sizeof(ipaddr)); + portnum = ntohs(sin->sin_port); + sprintf(portstring, "%u", portnum); + var = ast_load_realtime("sippeers", "host", ipaddr, "port", portstring, SENTINEL); /* First check for fixed IP hosts */ + if (var) { + if (realtimeregs) { + newpeername = get_name_from_variable(var, newpeername); + varregs = ast_load_realtime("sipregs", "name", newpeername, SENTINEL); + ast_log(LOG_NOTICE, "Peer %s:%s\n", ipaddr, portstring); + } + } + } + + if (!var && newpeername) { if (realtimeregs) varregs = ast_load_realtime("sipregs", "name", newpeername, SENTINEL); @@ -4781,25 +4794,14 @@ } } - if (!var && sin) { /* Then check on IP address for dynamic peers */ - ast_copy_string(ipaddr, ast_inet_ntoa(sin->sin_addr), sizeof(ipaddr)); - portnum = ntohs(sin->sin_port); - sprintf(portstring, "%u", portnum); - var = ast_load_realtime("sippeers", "host", ipaddr, "port", portstring, SENTINEL); /* First check for fixed IP hosts */ - if (var) { - if (realtimeregs) { - newpeername = get_name_from_variable(var, newpeername); - varregs = ast_load_realtime("sipregs", "name", newpeername, SENTINEL); - } - } else { - if (realtimeregs) - varregs = ast_load_realtime("sipregs", "ipaddr", ipaddr, "port", portstring, SENTINEL); /* Then check for registered hosts */ - else - var = ast_load_realtime("sippeers", "ipaddr", ipaddr, "port", portstring, SENTINEL); /* Then check for registered hosts */ - if (varregs) { - newpeername = get_name_from_variable(varregs, newpeername); - var = ast_load_realtime("sippeers", "name", newpeername, SENTINEL); - } + if (!var && sin) { /* Then check on IP address for static peers */ + if (realtimeregs) + varregs = ast_load_realtime("sipregs", "ipaddr", ipaddr, "port", portstring, SENTINEL); /* Then check for registered hosts */ + else + var = ast_load_realtime("sippeers", "ipaddr", ipaddr, "port", portstring, SENTINEL); /* Then check for registered hosts */ + if (varregs) { + newpeername = get_name_from_variable(varregs, newpeername); + var = ast_load_realtime("sippeers", "name", newpeername, SENTINEL); } if (!var) { /*We couldn't match on ipaddress and port, so we need to check if port is insecure*/ peerlist = ast_load_realtime_multientry("sippeers", "host", ipaddr, SENTINEL);