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) {