Только в addons.orig: addons diff -ur addons.orig/chan_ooh323.c addons/chan_ooh323.c --- addons.orig/chan_ooh323.c 2014-10-15 13:59:09.000000000 +0400 +++ addons/chan_ooh323.c 2015-05-19 14:32:43.000000000 +0400 @@ -307,6 +307,7 @@ static int gFAXdetect = FAXDETECT_CNG; static int gT38Support = T38_FAXGW; static char gGatekeeper[100]; +static char gRASIP[2+8*4+7]; /* Max for IPv6 addr */ static enum RasGatekeeperMode gRasGkMode = RasNoGatekeeper; static int gIsGateway = 0; @@ -2676,7 +2677,7 @@ if (gRasGkMode == RasUseSpecificGatekeeper || gRasGkMode == RasDiscoverGatekeeper) { ooGkClientInit(gRasGkMode, (gRasGkMode == RasUseSpecificGatekeeper) ? - gGatekeeper : 0, 0); + gGatekeeper : 0, gRASIP, 0); ooGkClientStart(gH323ep.gkClient); } @@ -2819,6 +2820,7 @@ gTRCLVL = OOTRCLVLERR; gRasGkMode = RasNoGatekeeper; gGatekeeper[0] = '\0'; + gRASIP[0] = '\0'; gRTPTimeout = 60; gNat = FALSE; gRTDRInterval = 0; @@ -2979,6 +2981,9 @@ gRasGkMode = RasUseSpecificGatekeeper; ast_copy_string(gGatekeeper, v->value, sizeof(gGatekeeper)); } + } else if (!strcasecmp(v->name, "localras")) { + ast_copy_string(gRASIP, v->value, sizeof(gRASIP)); + ast_verb(3, " == Setting RAS IP to %s\n", gRASIP); } else if (!strcasecmp(v->name, "logfile")) { ast_copy_string(gLogFile, v->value, sizeof(gLogFile)); } else if (!strcasecmp(v->name, "context")) { @@ -3874,9 +3879,9 @@ /* Gatekeeper */ if (gRasGkMode == RasUseSpecificGatekeeper) - ooGkClientInit(gRasGkMode, gGatekeeper, 0); + ooGkClientInit(gRasGkMode, gGatekeeper, gRASIP, 0); else if (gRasGkMode == RasDiscoverGatekeeper) - ooGkClientInit(gRasGkMode, 0, 0); + ooGkClientInit(gRasGkMode, 0, gRASIP, 0); /* Register callbacks */ ooH323EpSetH323Callbacks(h323Callbacks); @@ -3963,7 +3968,7 @@ ooGkClientDestroy(); ast_verb(0, "Restart stopped gatekeeper client\n"); ooGkClientInit(gRasGkMode, (gRasGkMode == RasUseSpecificGatekeeper) ? - gGatekeeper : 0, 0); + gGatekeeper : 0, gRASIP, 0); ooGkClientStart(gH323ep.gkClient); } diff -ur addons.orig/ooh323c/src/ooGkClient.c addons/ooh323c/src/ooGkClient.c --- addons.orig/ooh323c/src/ooGkClient.c 2015-05-19 15:16:22.000000000 +0400 +++ addons/ooh323c/src/ooGkClient.c 2015-05-19 14:54:49.000000000 +0400 @@ -49,7 +49,7 @@ }; int ooGkClientInit(enum RasGatekeeperMode eGkMode, - char *szGkAddr, int iGkPort ) + char *szGkAddr, char *szRasAddr, int iGkPort ) { ooGkClient *pGkClient=NULL; OOInterface *cur=NULL; @@ -70,7 +70,10 @@ pGkClient->grqRetries = 0; strcpy(pGkClient->localRASIP, gH323ep.signallingIP); + #ifndef _WIN32 + + if(!strcmp(pGkClient->localRASIP, "0.0.0.0") || !strcmp(pGkClient->localRASIP, "127.0.0.1")) { @@ -82,21 +85,31 @@ return OO_FAILED; } } - for(cur = gH323ep.ifList; cur; cur = cur->next) - { - if(!strcmp(cur->name, "lo") || !strcmp(cur->addr, "127.0.0.1")) - continue; - break; + OOTRACEINFO2("Using LOCALRAS before %s\n", szRasAddr); + if(szRasAddr) { + OOTRACEINFO2("Using LOCALRAS %s\n", szRasAddr); + strcpy(pGkClient->localRASIP, szRasAddr); } - if(cur) + else { - OOTRACEINFO2("Using local RAS Ip address %s\n", cur->addr); - strcpy(pGkClient->localRASIP, cur->addr); - } - else{ - OOTRACEERR1("Error:Failed to assign a local RAS IP address\n"); - return OO_FAILED; - } + for(cur = gH323ep.ifList; cur; cur = cur->next) + { + if(!strcmp(cur->name, "lo") || !strcmp(cur->addr, "127.0.0.1")) + continue; + + break; + } + if(cur) + { + OOTRACEINFO2("Using local RAS Ip address %s\n", cur->addr); + + strcpy(pGkClient->localRASIP, cur->addr); + } + else{ + OOTRACEERR1("Error:Failed to assign a local RAS IP address\n"); + return OO_FAILED; + } + } } #endif if(OO_OK != ooGkClientSetGkMode(pGkClient, eGkMode, szGkAddr, iGkPort)) diff -ur addons.orig/ooh323c/src/ooGkClient.h addons/ooh323c/src/ooGkClient.h --- addons.orig/ooh323c/src/ooGkClient.h 2015-05-19 15:16:22.000000000 +0400 +++ addons/ooh323c/src/ooGkClient.h 2015-05-19 14:31:29.000000000 +0400 @@ -223,7 +223,7 @@ * */ EXTERN int ooGkClientInit - (enum RasGatekeeperMode eGkMode, char *szGkAddr, int iGkPort ); + (enum RasGatekeeperMode eGkMode, char *szGkAddr, char *szRasAddr, int iGkPort ); /** * This function is used to print the gatekeeper client configuration