From 7f5a82e677ddd9c75d49dfb62add997316e57ba3 Mon Sep 17 00:00:00 2001 From: may Date: Fri, 15 Jul 2011 21:41:46 +0000 Subject: Merged revisions 328428-328429 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.10 ................ r328428 | may | 2011-07-15 23:31:09 +0400 (Fri, 15 Jul 2011) | 13 lines Merged revisions 328427 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.8 ........ r328427 | may | 2011-07-15 23:22:24 +0400 (Fri, 15 Jul 2011) | 7 lines small gk processing fixes: - decrease for 1 second registration ttl for very low expirations (some providers expire few earlier than TTL) - delete rrq and registration expire timers on URQ received as we make new registration. ........ ................ r328429 | may | 2011-07-15 23:35:50 +0400 (Fri, 15 Jul 2011) | 2 lines delete unproperly changed svn props ................ git-svn-id: http://svn.digium.com/svn/asterisk/trunk@328502 f38db490-d61c-443f-a65b-d21fe96a405b --- addons/ooh323c/src/ooGkClient.c | 32 +++++++++++++++++++++++++++----- 1 file changed, 27 insertions(+), 5 deletions(-) (limited to 'addons/ooh323c/src') diff --git a/addons/ooh323c/src/ooGkClient.c b/addons/ooh323c/src/ooGkClient.c index 04359998a..33d7df019 100644 --- a/addons/ooh323c/src/ooGkClient.c +++ b/addons/ooh323c/src/ooGkClient.c @@ -1211,8 +1211,11 @@ int ooGkClientHandleRegistrationConfirm if(pGkClient->regTimeout > DEFAULT_TTL_OFFSET) regTTL = pGkClient->regTimeout - DEFAULT_TTL_OFFSET; - else - regTTL = pGkClient->regTimeout; + else { + regTTL = pGkClient->regTimeout - 1; /* -1 due to some ops expire us few earlier */ + if (regTTL <= 0) + regTTL = 1; + } cbData = (ooGkClientTimerCb*) memAlloc (&pGkClient->ctxt, sizeof(ooGkClientTimerCb)); @@ -1260,7 +1263,6 @@ int ooGkClientHandleRegistrationConfirm memFreePtr(&pGkClient->ctxt, pTimer->cbData); ooTimerDelete(&pGkClient->ctxt, &pGkClient->timerList, pTimer); OOTRACEDBGA1("Deleted RRQ Timer.\n"); - break; } } pGkClient->state = GkClientRegistered; @@ -1505,8 +1507,10 @@ int ooGkClientSendURQ(ooGkClient *pGkClient, ooAliases *aliases) int ooGkClientHandleUnregistrationRequest (ooGkClient *pGkClient, H225UnregistrationRequest * punregistrationRequest) { - int iRet=0; - + int iRet=0, x; + OOTimer *pTimer = NULL; + DListNode *pNode = NULL; + /* Lets first send unregistration confirm message back to gatekeeper*/ ooGkClientSendUnregistrationConfirm(pGkClient, punregistrationRequest->requestSeqNum); @@ -1528,6 +1532,24 @@ int ooGkClientHandleUnregistrationRequest pGkClient->rrqRetries = 0; pGkClient->state = GkClientDiscovered; + + /* delete the corresponding RRQ & REG timers */ + pNode = NULL; + for(x=0; xtimerList.count; x++) { + pNode = dListFindByIndex(&pGkClient->timerList, x); + pTimer = (OOTimer*)pNode->data; + if(((ooGkClientTimerCb*)pTimer->cbData)->timerType & OO_RRQ_TIMER) { + memFreePtr(&pGkClient->ctxt, pTimer->cbData); + ooTimerDelete(&pGkClient->ctxt, &pGkClient->timerList, pTimer); + OOTRACEDBGA1("Deleted RRQ Timer.\n"); + } + if(((ooGkClientTimerCb*)pTimer->cbData)->timerType & OO_REG_TIMER) { + memFreePtr(&pGkClient->ctxt, pTimer->cbData); + ooTimerDelete(&pGkClient->ctxt, &pGkClient->timerList, pTimer); + OOTRACEDBGA1("Deleted REG Timer.\n"); + } + } + iRet = ooGkClientSendRRQ(pGkClient, 0); if(iRet != OO_OK) { -- cgit v1.2.3