summaryrefslogtreecommitdiff
path: root/addons/chan_ooh323.c
diff options
context:
space:
mode:
Diffstat (limited to 'addons/chan_ooh323.c')
-rw-r--r--addons/chan_ooh323.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/addons/chan_ooh323.c b/addons/chan_ooh323.c
index 8111b712e..52c0404a5 100644
--- a/addons/chan_ooh323.c
+++ b/addons/chan_ooh323.c
@@ -295,8 +295,6 @@ AST_MUTEX_DEFINE_STATIC(h323_reload_lock);
static int usecnt = 0;
AST_MUTEX_DEFINE_STATIC(usecnt_lock);
-AST_MUTEX_DEFINE_STATIC(ooh323c_cmd_lock);
-
static long callnumber = 0;
AST_MUTEX_DEFINE_STATIC(ooh323c_cn_lock);
@@ -696,7 +694,7 @@ static struct ast_channel *ooh323_request(const char *type, struct ast_format_ca
ooh323_destroy(p);
ast_mutex_unlock(&iflock);
return NULL;
- } else if (gH323ep.gkClient && gH323ep.gkClient->state != GkClientRegistered) {
+ } else if (!gH323ep.gkClient || (gH323ep.gkClient && gH323ep.gkClient->state != GkClientRegistered)) {
ast_log(LOG_ERROR, "Gatekeeper client is configured but not registered\n");
*cause = AST_CAUSE_NORMAL_TEMPORARY_FAILURE;
return NULL;
@@ -751,7 +749,6 @@ static struct ast_channel *ooh323_request(const char *type, struct ast_format_ca
}
ast_mutex_unlock(&p->lock);
- ast_mutex_lock(&ooh323c_cmd_lock);
ast_cond_init(&p->rtpcond, NULL);
ooMakeCall(data, p->callToken, AST_MAX_EXTENSION, NULL);
ast_mutex_lock(&p->lock);
@@ -760,7 +757,6 @@ static struct ast_channel *ooh323_request(const char *type, struct ast_format_ca
}
ast_mutex_unlock(&p->lock);
ast_cond_destroy(&p->rtpcond);
- ast_mutex_unlock(&ooh323c_cmd_lock);
}
restart_monitor();
@@ -3505,6 +3501,9 @@ static char *handle_cli_ooh323_show_gk(struct ast_cli_entry *e, int cmd, struct
case GkClientFailed:
ast_cli(a->fd, "%-20s%s\n", "GK state:", "Failed");
break;
+ case GkClientStopped:
+ ast_cli(a->fd, "%-20s%s\n", "GK state:", "Shutdown");
+ break;
default:
break;
}
@@ -3946,6 +3945,13 @@ static void *do_monitor(void *data)
ast_verb(1, "Reloading H.323\n");
ooh323_do_reload();
}
+ if (gH323ep.gkClient && gH323ep.gkClient->state == GkClientStopped) {
+ ooGkClientDestroy();
+ ast_verb(0, "Restart stopped gatekeeper client\n");
+ ooGkClientInit(gRasGkMode, (gRasGkMode == RasUseSpecificGatekeeper) ?
+ gGatekeeper : 0, 0);
+ ooGkClientStart(gH323ep.gkClient);
+ }
/* Check for interfaces needing to be killed */
ast_mutex_lock(&iflock);