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
This commit is contained in:
Alexandr Anikin 2011-08-05 08:47:59 +00:00
parent 72eba1af20
commit 872e0411bd
2 changed files with 69 additions and 3 deletions

View File

@ -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");

View File

@ -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;
}