mirror of
https://github.com/asterisk/asterisk.git
synced 2025-11-15 06:18:38 +00:00
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/branches/1.8@330827 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -171,7 +171,7 @@ int ooReadAndProcessStackCommand()
|
|||||||
if(cmd.type == OO_CMD_NOOP)
|
if(cmd.type == OO_CMD_NOOP)
|
||||||
continue;
|
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"
|
OOTRACEINFO1("Ignoring stack command as Gk Client is not registered"
|
||||||
" yet\n");
|
" yet\n");
|
||||||
|
|||||||
@@ -2569,7 +2569,43 @@ int ooGkClientRRQTimerExpired(void*pdata)
|
|||||||
}
|
}
|
||||||
memFreePtr(&pGkClient->ctxt, cbData);
|
memFreePtr(&pGkClient->ctxt, cbData);
|
||||||
OOTRACEERR1("Error:Failed to register with gatekeeper\n");
|
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;
|
return OO_FAILED;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2597,7 +2633,37 @@ int ooGkClientGRQTimerExpired(void* pdata)
|
|||||||
}
|
}
|
||||||
|
|
||||||
OOTRACEERR1("Error:Gatekeeper could not be found\n");
|
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;
|
return OO_FAILED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user