[Asterisk-code-review] chan ooh323: introduce localras config parameter (asterisk[master])

Alexander Anikin asteriskteam at digium.com
Wed Apr 18 05:50:07 CDT 2018


Alexander Anikin has uploaded this change for review. ( https://gerrit.asterisk.org/8812


Change subject: chan_ooh323: introduce localras config parameter
......................................................................

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
---
M addons/chan_ooh323.c
M addons/ooh323c/src/ooGkClient.c
M addons/ooh323c/src/ooGkClient.h
3 files changed, 17 insertions(+), 8 deletions(-)



  git pull ssh://gerrit.asterisk.org:29418/asterisk refs/changes/12/8812/1

diff --git a/addons/chan_ooh323.c b/addons/chan_ooh323.c
index ffdbf67..0609650 100644
--- a/addons/chan_ooh323.c
+++ b/addons/chan_ooh323.c
@@ -355,6 +355,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;
@@ -2726,7 +2727,7 @@
 	if (gRasGkMode == RasUseSpecificGatekeeper ||
 		gRasGkMode == RasDiscoverGatekeeper) {
 		ooGkClientInit(gRasGkMode, (gRasGkMode == RasUseSpecificGatekeeper) ?
-								gGatekeeper : 0, 0);
+								gGatekeeper : 0, gRASIP, 0);
 		ooGkClientStart(gH323ep.gkClient);
 	}
 
@@ -2869,6 +2870,7 @@
 	gTRCLVL = OOTRCLVLERR;
 	gRasGkMode = RasNoGatekeeper;
 	gGatekeeper[0] = '\0';
+	gRASIP[0] = '\0';
 	gRTPTimeout = 60;
 	gNat = FALSE;
 	gRTDRInterval = 0;
@@ -3029,6 +3031,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")) {
@@ -3924,9 +3929,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);
@@ -4013,7 +4018,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 --git a/addons/ooh323c/src/ooGkClient.c b/addons/ooh323c/src/ooGkClient.c
index a307f4e..4f78838 100644
--- a/addons/ooh323c/src/ooGkClient.c
+++ b/addons/ooh323c/src/ooGkClient.c
@@ -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;
@@ -69,7 +69,11 @@
    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 @@
       }
       if(cur)
       {
-         OOTRACEINFO2("Using local RAS Ip address %s\n", cur->addr);
          strcpy(pGkClient->localRASIP, cur->addr);
       }
       else{
@@ -98,6 +101,7 @@
          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 017380b..e529b4a 100644
--- a/addons/ooh323c/src/ooGkClient.h
+++ b/addons/ooh323c/src/ooGkClient.h
@@ -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

-- 
To view, visit https://gerrit.asterisk.org/8812
To unsubscribe, visit https://gerrit.asterisk.org/settings

Gerrit-Project: asterisk
Gerrit-Branch: master
Gerrit-MessageType: newchange
Gerrit-Change-Id: I0b604b01793f3e02a776502659e07cd3fc7e3097
Gerrit-Change-Number: 8812
Gerrit-PatchSet: 1
Gerrit-Owner: Alexander Anikin <may213 at yandex.ru>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.digium.com/pipermail/asterisk-code-review/attachments/20180418/a797261d/attachment-0001.html>


More information about the asterisk-code-review mailing list