summaryrefslogtreecommitdiff
path: root/addons
diff options
context:
space:
mode:
authorAlexandr Anikin <may@telecom-service.ru>2014-03-28 18:00:18 +0000
committerAlexandr Anikin <may@telecom-service.ru>2014-03-28 18:00:18 +0000
commita35ce3924b2d0eea8aba2b9f9b1c3195f8ff604b (patch)
tree518ed153320f94d7072864361b203867d6d2c2cb /addons
parent597f25db69c71d342e8661983df47e457625b5e2 (diff)
process stack command even if gatekeeper client isn't register
don't destroy gatekeeper client if it is not started don't destroy gatekeeper client in some sort of gatekeeper errors signal rtp create condition when call cleared before rtp structure created (closes issue ASTERISK-23460) Reported by: Dmitry Melekhov Patches: ASTERISK-23460-2.patch Tested by: Dmitry Melekhov ........ Merged revisions 411531 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 411532 from http://svn.asterisk.org/svn/asterisk/branches/12 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@411533 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'addons')
-rw-r--r--addons/chan_ooh323.c4
-rw-r--r--addons/ooh323c/src/ooCmdChannel.c10
-rw-r--r--addons/ooh323c/src/ooGkClient.c16
-rw-r--r--addons/ooh323c/src/oochannels.c3
-rw-r--r--addons/ooh323c/src/ooh323.c2
-rw-r--r--addons/ooh323c/src/ooq931.c2
6 files changed, 16 insertions, 21 deletions
diff --git a/addons/chan_ooh323.c b/addons/chan_ooh323.c
index bf465e20e..fd22cd497 100644
--- a/addons/chan_ooh323.c
+++ b/addons/chan_ooh323.c
@@ -2204,6 +2204,10 @@ int onCallCleared(ooCallData *call)
ast_module_unref(myself);
}
+ if (!p->rtp) {
+ ast_cond_signal(&p->rtpcond);
+ }
+
ast_set_flag(p, H323_NEEDDESTROY);
ooh323c_stop_call_thread(call);
diff --git a/addons/ooh323c/src/ooCmdChannel.c b/addons/ooh323c/src/ooCmdChannel.c
index 245fba5b9..50a75c2cf 100644
--- a/addons/ooh323c/src/ooCmdChannel.c
+++ b/addons/ooh323c/src/ooCmdChannel.c
@@ -172,11 +172,6 @@ int ooReadAndProcessStackCommand()
if(cmd.type == OO_CMD_NOOP)
continue;
- if(gH323ep.gkClient && gH323ep.gkClient->state != GkClientRegistered && cmd.type != OO_CMD_STOPMONITOR)
- {
- OOTRACEINFO1("Ignoring stack command as Gk Client is not registered"
- " yet\n");
- }
else {
switch(cmd.type) {
case OO_CMD_MAKECALL:
@@ -336,11 +331,6 @@ int ooReadAndProcessCallStackCommand(OOH323CallData* call)
if(cmd.type == OO_CMD_NOOP)
continue;
- if(gH323ep.gkClient && gH323ep.gkClient->state != GkClientRegistered)
- {
- OOTRACEINFO1("Ignoring stack command as Gk Client is not registered"
- " yet\n");
- }
else {
switch(cmd.type) {
case OO_CMD_MAKECALL:
diff --git a/addons/ooh323c/src/ooGkClient.c b/addons/ooh323c/src/ooGkClient.c
index af6a10bbd..c090796b6 100644
--- a/addons/ooh323c/src/ooGkClient.c
+++ b/addons/ooh323c/src/ooGkClient.c
@@ -210,7 +210,7 @@ int ooGkClientStart(ooGkClient *pGkClient)
if(iRet != OO_OK)
{
OOTRACEERR1("Error:Failed to send GRQ message\n");
- pGkClient->state = GkClientFailed;
+ pGkClient->state = GkClientGkErr;
ast_mutex_unlock(&pGkClient->Lock);
return OO_FAILED;
}
@@ -433,7 +433,7 @@ int ooGkClientReceive(ooGkClient *pGkClient)
if(iRet != OO_OK)
{
OOTRACEERR1("Error: Failed to handle received RAS message\n");
- pGkClient->state = GkClientFailed;
+ pGkClient->state = GkClientGkErr;
}
memReset(pctxt);
}
@@ -702,7 +702,7 @@ int ooGkClientSendGRQ(ooGkClient *pGkClient)
{
OOTRACEERR1("Error: Failed to send GRQ message\n");
memReset(&pGkClient->msgCtxt);
- pGkClient->state = GkClientFailed;
+ pGkClient->state = GkClientGkErr;
ast_mutex_unlock(&pGkClient->Lock);
return OO_FAILED;
}
@@ -1530,7 +1530,7 @@ int ooGkClientSendURQ(ooGkClient *pGkClient, ooAliases *aliases)
{
OOTRACEERR1("Error:Failed to send UnregistrationRequest message\n");
memReset(pctxt);
- pGkClient->state = GkClientFailed;
+ pGkClient->state = GkClientGkErr;
ast_mutex_unlock(&pGkClient->Lock);
return OO_FAILED;
}
@@ -1909,7 +1909,7 @@ int ooGkClientSendAdmissionRequest
{
OOTRACEERR1("Error:Failed to send AdmissionRequest message\n");
memReset(pctxt);
- pGkClient->state = GkClientFailed;
+ pGkClient->state = GkClientGkErr;
ast_mutex_unlock(&pGkClient->Lock);
return OO_FAILED;
}
@@ -2423,7 +2423,7 @@ int ooGkClientSendIRR
{
OOTRACEERR1("Error:Failed to send IRR message\n");
memReset(pctxt);
- pGkClient->state = GkClientFailed;
+ pGkClient->state = GkClientGkErr;
ast_mutex_unlock(&pGkClient->Lock);
return OO_FAILED;
}
@@ -2576,7 +2576,7 @@ int ooGkClientSendDisengageRequest(ooGkClient *pGkClient, OOH323CallData *call)
if(iRet != OO_OK)
{
OOTRACEERR1("Error: Failed to send DRQ message\n");
- pGkClient->state = GkClientFailed;
+ pGkClient->state = GkClientGkErr;
}
@@ -2736,7 +2736,7 @@ int ooGkClientREGTimerExpired(void *pdata)
if(ret != OO_OK)
{
OOTRACEERR1("Error:Failed to send Additive RRQ message\n");
- pGkClient->state = GkClientFailed;
+ pGkClient->state = GkClientGkErr;
return OO_FAILED;
}
return OO_OK;
diff --git a/addons/ooh323c/src/oochannels.c b/addons/ooh323c/src/oochannels.c
index de8538910..ddc6bf622 100644
--- a/addons/ooh323c/src/oochannels.c
+++ b/addons/ooh323c/src/oochannels.c
@@ -822,7 +822,8 @@ int ooMonitorChannels()
if(OO_OK != ooGkClientStart(gH323ep.gkClient))
{
OOTRACEERR1("Error:Failed to start Gatekeeper client\n");
- ooGkClientDestroy();
+ // not need more, now it can be restarted correctly
+ // ooGkClientDestroy();
}
}
diff --git a/addons/ooh323c/src/ooh323.c b/addons/ooh323c/src/ooh323.c
index d91c64942..b04a954ed 100644
--- a/addons/ooh323c/src/ooh323.c
+++ b/addons/ooh323c/src/ooh323.c
@@ -1719,12 +1719,12 @@ int ooHandleH2250Message(OOH323CallData *call, Q931Message *q931Msg)
if(gH323ep.gkClient->state == GkClientRegistered)
{
call->callState = OO_CALL_WAITING_ADMISSION;
+ ast_mutex_lock(&call->GkLock);
ret = ooGkClientSendAdmissionRequest(gH323ep.gkClient, call,
FALSE);
tv = ast_tvnow();
ts.tv_sec = tv.tv_sec + 24;
ts.tv_nsec = tv.tv_usec * 1000;
- ast_mutex_lock(&call->GkLock);
if (call->callState == OO_CALL_WAITING_ADMISSION)
ast_cond_timedwait(&call->gkWait, &call->GkLock, &ts);
if (call->callState == OO_CALL_WAITING_ADMISSION)
diff --git a/addons/ooh323c/src/ooq931.c b/addons/ooh323c/src/ooq931.c
index 69d1414a0..a6bdea431 100644
--- a/addons/ooh323c/src/ooq931.c
+++ b/addons/ooh323c/src/ooq931.c
@@ -2604,11 +2604,11 @@ int ooH323MakeCall(char *dest, char *callToken, ooCallOptions *opts)
{
if(gH323ep.gkClient->state == GkClientRegistered) {
call->callState = OO_CALL_WAITING_ADMISSION;
+ ast_mutex_lock(&call->GkLock);
ret = ooGkClientSendAdmissionRequest(gH323ep.gkClient, call, FALSE);
tv = ast_tvnow();
ts.tv_sec = tv.tv_sec + 24;
ts.tv_nsec = tv.tv_usec * 1000;
- ast_mutex_lock(&call->GkLock);
if (call->callState == OO_CALL_WAITING_ADMISSION)
ast_cond_timedwait(&call->gkWait, &call->GkLock, &ts);
if (call->callState == OO_CALL_WAITING_ADMISSION)