summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexandr Anikin <may@telecom-service.ru>2012-02-26 18:25:23 +0000
committerAlexandr Anikin <may@telecom-service.ru>2012-02-26 18:25:23 +0000
commit62994531e28f8a00e559908d70ee2ccbe6442737 (patch)
tree105db973238f40686f6f6ede5068c447400299d6
parent5e40f2cd98143c2e3997375db24beee54e1e70a9 (diff)
Add support change gatekeeper mode or ip per ooh323 reload command
(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
-rw-r--r--addons/chan_ooh323.c15
-rw-r--r--addons/ooh323c/src/ooGkClient.c22
2 files changed, 27 insertions, 10 deletions
diff --git a/addons/chan_ooh323.c b/addons/chan_ooh323.c
index ebdbfa17c..59fc0bcd7 100644
--- a/addons/chan_ooh323.c
+++ b/addons/chan_ooh323.c
@@ -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");
}
diff --git a/addons/ooh323c/src/ooGkClient.c b/addons/ooh323c/src/ooGkClient.c
index dff3e751b..c91b9ed95 100644
--- a/addons/ooh323c/src/ooGkClient.c
+++ b/addons/ooh323c/src/ooGkClient.c
@@ -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;
}