diff options
author | Alexandr Anikin <may@telecom-service.ru> | 2011-08-05 08:47:59 +0000 |
---|---|---|
committer | Alexandr Anikin <may@telecom-service.ru> | 2011-08-05 08:47:59 +0000 |
commit | 872e0411bdeb0bb953311266cc538f2a5a6923cc (patch) | |
tree | 4ff1a524ba9a80154c3dcd91ed7a0b122be1e4cd /addons/ooh323c/src | |
parent | 72eba1af2054632b54466a2e3ba91dc29f0813f8 (diff) |
Merged revisions 330899 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/10
................
r330899 | may | 2011-08-05 11:38:28 +0400 (Fri, 05 Aug 2011) | 11 lines
Merged revisions 330827 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.8
........
r330827 | may | 2011-08-04 23:37:16 +0400 (Thu, 04 Aug 2011) | 4 lines
change gk client behaivour on rrq/grq failures to setup timers
and next tries after timeout instead of complete failure in the ooh323
stack
........
................
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@330903 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'addons/ooh323c/src')
-rw-r--r-- | addons/ooh323c/src/ooCmdChannel.c | 2 | ||||
-rw-r--r-- | addons/ooh323c/src/ooGkClient.c | 70 |
2 files changed, 69 insertions, 3 deletions
diff --git a/addons/ooh323c/src/ooCmdChannel.c b/addons/ooh323c/src/ooCmdChannel.c index 31a74169c..8737e6504 100644 --- a/addons/ooh323c/src/ooCmdChannel.c +++ b/addons/ooh323c/src/ooCmdChannel.c @@ -171,7 +171,7 @@ int ooReadAndProcessStackCommand() if(cmd.type == OO_CMD_NOOP) continue; - if(gH323ep.gkClient && gH323ep.gkClient->state != GkClientRegistered) + if(gH323ep.gkClient && gH323ep.gkClient->state != GkClientRegistered && cmd.type != OO_CMD_STOPMONITOR) { OOTRACEINFO1("Ignoring stack command as Gk Client is not registered" " yet\n"); diff --git a/addons/ooh323c/src/ooGkClient.c b/addons/ooh323c/src/ooGkClient.c index 33d7df019..e1c57cb5b 100644 --- a/addons/ooh323c/src/ooGkClient.c +++ b/addons/ooh323c/src/ooGkClient.c @@ -2570,7 +2570,43 @@ int ooGkClientRRQTimerExpired(void*pdata) } memFreePtr(&pGkClient->ctxt, cbData); OOTRACEERR1("Error:Failed to register with gatekeeper\n"); - pGkClient->state = GkClientGkErr; + pGkClient->state = GkClientUnregistered; + + +/* Create timer to re-register after default timeout */ +/* network failure is one of cases here */ + + ast_mutex_lock(&pGkClient->Lock); + + cbData = (ooGkClientTimerCb*) memAlloc + (&pGkClient->ctxt, sizeof(ooGkClientTimerCb)); + if(!cbData) + { + OOTRACEERR1("Error:Failed to allocate memory to RRQ timer callback\n"); + pGkClient->state = GkClientFailed; + ast_mutex_unlock(&pGkClient->Lock); + return OO_FAILED; + } + + + cbData->timerType = OO_RRQ_TIMER; + cbData->pGkClient = pGkClient; + if(!ooTimerCreate(&pGkClient->ctxt, &pGkClient->timerList, + &ooGkClientRRQTimerExpired, pGkClient->regTimeout, + cbData, FALSE)) + { + OOTRACEERR1("Error:Unable to create GRQ timer.\n "); + memFreePtr(&pGkClient->ctxt, cbData); + pGkClient->state = GkClientFailed; + ast_mutex_unlock(&pGkClient->Lock); + return OO_FAILED; + } + +/* clear rrq count for re-register after regTimeout */ + pGkClient->rrqRetries = 0; + + ast_mutex_unlock(&pGkClient->Lock); + return OO_FAILED; } @@ -2598,7 +2634,37 @@ int ooGkClientGRQTimerExpired(void* pdata) } OOTRACEERR1("Error:Gatekeeper could not be found\n"); - pGkClient->state = GkClientGkErr; + pGkClient->state = GkClientUnregistered; +/* setup timer to re-send grq after timeout */ + + ast_mutex_lock(&pGkClient->Lock); + cbData = (ooGkClientTimerCb*) memAlloc + (&pGkClient->ctxt, sizeof(ooGkClientTimerCb)); + if(!cbData) + { + OOTRACEERR1("Error:Failed to allocate memory to GRQ timer callback\n"); + pGkClient->state = GkClientFailed; + ast_mutex_unlock(&pGkClient->Lock); + return OO_FAILED; + } + cbData->timerType = OO_GRQ_TIMER; + cbData->pGkClient = pGkClient; + if(!ooTimerCreate(&pGkClient->ctxt, &pGkClient->timerList, + &ooGkClientGRQTimerExpired, pGkClient->grqTimeout, + cbData, FALSE)) + { + OOTRACEERR1("Error:Unable to create GRQ timer.\n "); + memFreePtr(&pGkClient->ctxt, cbData); + pGkClient->state = GkClientFailed; + ast_mutex_unlock(&pGkClient->Lock); + return OO_FAILED; + } + +/* clear grq counter */ + + pGkClient->grqRetries = 0; + ast_mutex_unlock(&pGkClient->Lock); + return OO_FAILED; } |