From 95e8450194a4c6a1272ed738fedaabb7baa438f8 Mon Sep 17 00:00:00 2001 From: Alexander Anikin Date: Tue, 17 Apr 2018 13:33:36 +0300 Subject: chan_ooh323: introduce localras config parameter Introduce localras parameter that specify source IP for connecting to Gatekeeper. Useful for multihome configurations. ASTERISK-25129 #close Reported by: Dmitry Melekhov Tested by: Dmitry Melekhov Change-Id: I0b604b01793f3e02a776502659e07cd3fc7e3097 --- addons/chan_ooh323.c | 13 +++++++++---- addons/ooh323c/src/ooGkClient.c | 10 +++++++--- addons/ooh323c/src/ooGkClient.h | 2 +- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/addons/chan_ooh323.c b/addons/chan_ooh323.c index ffdbf6721..06096507f 100644 --- a/addons/chan_ooh323.c +++ b/addons/chan_ooh323.c @@ -355,6 +355,7 @@ static int gDTMFCodec = 101; 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; @@ -2726,7 +2727,7 @@ static int ooh323_do_reload(void) if (gRasGkMode == RasUseSpecificGatekeeper || gRasGkMode == RasDiscoverGatekeeper) { ooGkClientInit(gRasGkMode, (gRasGkMode == RasUseSpecificGatekeeper) ? - gGatekeeper : 0, 0); + gGatekeeper : 0, gRASIP, 0); ooGkClientStart(gH323ep.gkClient); } @@ -2869,6 +2870,7 @@ int reload_config(int reload) gTRCLVL = OOTRCLVLERR; gRasGkMode = RasNoGatekeeper; gGatekeeper[0] = '\0'; + gRASIP[0] = '\0'; gRTPTimeout = 60; gNat = FALSE; gRTDRInterval = 0; @@ -3029,6 +3031,9 @@ int reload_config(int reload) 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")) { @@ -3924,9 +3929,9 @@ static int load_module(void) /* 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); @@ -4013,7 +4018,7 @@ static void *do_monitor(void *data) ooGkClientDestroy(); ast_verb(0, "Restart stopped gatekeeper client\n"); ooGkClientInit(gRasGkMode, (gRasGkMode == RasUseSpecificGatekeeper) ? - gGatekeeper : 0, 0); + gGatekeeper : 0, gRASIP, 0); ooGkClientStart(gH323ep.gkClient); } diff --git a/addons/ooh323c/src/ooGkClient.c b/addons/ooh323c/src/ooGkClient.c index a307f4eef..4f7883833 100644 --- a/addons/ooh323c/src/ooGkClient.c +++ b/addons/ooh323c/src/ooGkClient.c @@ -49,7 +49,7 @@ static ASN1OBJID gProtocolID = { }; int ooGkClientInit(enum RasGatekeeperMode eGkMode, - char *szGkAddr, int iGkPort ) + char *szGkAddr, char *szRasAddr, int iGkPort ) { ooGkClient *pGkClient=NULL; OOInterface *cur=NULL; @@ -69,7 +69,11 @@ int ooGkClientInit(enum RasGatekeeperMode eGkMode, pGkClient->rrqRetries = 0; pGkClient->grqRetries = 0; - strcpy(pGkClient->localRASIP, gH323ep.signallingIP); + if (szRasAddr && *szRasAddr) { + strcpy(pGkClient->localRASIP, szRasAddr); + } else { + strcpy(pGkClient->localRASIP, gH323ep.signallingIP); + } #ifndef _WIN32 if(!strcmp(pGkClient->localRASIP, "0.0.0.0") || !strcmp(pGkClient->localRASIP, "127.0.0.1")) @@ -90,7 +94,6 @@ int ooGkClientInit(enum RasGatekeeperMode eGkMode, } if(cur) { - OOTRACEINFO2("Using local RAS Ip address %s\n", cur->addr); strcpy(pGkClient->localRASIP, cur->addr); } else{ @@ -98,6 +101,7 @@ int ooGkClientInit(enum RasGatekeeperMode eGkMode, return OO_FAILED; } } + OOTRACEINFO2("Using local RAS Ip address %s\n", pGkClient->localRASIP); #endif if(OO_OK != ooGkClientSetGkMode(pGkClient, eGkMode, szGkAddr, iGkPort)) { diff --git a/addons/ooh323c/src/ooGkClient.h b/addons/ooh323c/src/ooGkClient.h index 017380b5f..e529b4a98 100644 --- a/addons/ooh323c/src/ooGkClient.h +++ b/addons/ooh323c/src/ooGkClient.h @@ -223,7 +223,7 @@ struct OOH323CallData; * */ 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 -- cgit v1.2.3