Add support change gatekeeper mode or ip per ooh323 reload command
authorAlexandr Anikin <may@telecom-service.ru>
Sun, 26 Feb 2012 18:25:23 +0000 (18:25 +0000)
committerAlexandr Anikin <may@telecom-service.ru>
Sun, 26 Feb 2012 18:25:23 +0000 (18:25 +0000)
(issue ASTERISK-19298)
Reported by: Dmitry Melekhov
Patches:
        change_gk_on_reload-1.patch (License #5415)

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@356848 65c4cc65-6c06-0410-ace0-fbb531ad65f3

addons/chan_ooh323.c
addons/ooh323c/src/ooGkClient.c

index ebdbfa1..59fc0bc 100644 (file)
@@ -2571,12 +2571,27 @@ static struct ooh323_peer *build_peer(const char *name, struct ast_variable *v,
 
 static int ooh323_do_reload(void)
 {
+       extern OOH323EndPoint gH323ep;
+
        if (gH323Debug) {
                ast_verb(0, "---   ooh323_do_reload\n");
        }
 
+       /* Gatekeeper */
+       if (gH323ep.gkClient) {
+               ooGkClientDestroy();
+       }
+
        reload_config(1);
 
+       /* Gatekeeper */
+       if (gRasGkMode == RasUseSpecificGatekeeper || 
+               gRasGkMode == RasDiscoverGatekeeper) {
+               ooGkClientInit(gRasGkMode, (gRasGkMode == RasUseSpecificGatekeeper) ? 
+                                                               gGatekeeper : 0, 0);
+               ooGkClientStart(gH323ep.gkClient);
+       }
+
        if (gH323Debug) {
                ast_verb(0, "+++   ooh323_do_reload\n");
        }
index dff3e75..c91b9ed 100644 (file)
@@ -170,23 +170,25 @@ void ooGkClientPrintConfig(ooGkClient *pGkClient)
 
 int ooGkClientDestroy(void)
 {
+   ooGkClient *pGkClient = gH323ep.gkClient;
+
    if(gH323ep.gkClient)
    {
-      if(gH323ep.gkClient->state == GkClientRegistered)
+      ast_mutex_lock(&pGkClient->Lock);
+      gH323ep.gkClient = NULL;
+      if(pGkClient->state == GkClientRegistered)
       {
          OOTRACEINFO1("Unregistering from Gatekeeper\n");
-         if(ooGkClientSendURQ(gH323ep.gkClient, NULL)!=OO_OK)
+         if(ooGkClientSendURQ(pGkClient, NULL)!=OO_OK)
             OOTRACEERR1("Error:Failed to send URQ to gatekeeper\n");
       }
       OOTRACEINFO1("Destroying Gatekeeper Client\n");
-      ooGkClientCloseChannel(gH323ep.gkClient);
-      freeContext(&gH323ep.gkClient->msgCtxt);
-      freeContext(&gH323ep.gkClient->ctxt);
-      ast_mutex_lock(&gH323ep.gkClient->Lock);
-      ast_mutex_unlock(&gH323ep.gkClient->Lock);
-      ast_mutex_destroy(&gH323ep.gkClient->Lock);
-      memFreePtr(&gH323ep.ctxt, gH323ep.gkClient);
-      gH323ep.gkClient = NULL;
+      ooGkClientCloseChannel(pGkClient);
+      freeContext(&pGkClient->msgCtxt);
+      freeContext(&pGkClient->ctxt);
+      ast_mutex_unlock(&pGkClient->Lock);
+      ast_mutex_destroy(&pGkClient->Lock);
+      memFreePtr(&gH323ep.ctxt, pGkClient);
    }
    return OO_OK;
 }