summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--addons/ooh323c/src/ooGkClient.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/addons/ooh323c/src/ooGkClient.c b/addons/ooh323c/src/ooGkClient.c
index c91b9ed95..e149abadc 100644
--- a/addons/ooh323c/src/ooGkClient.c
+++ b/addons/ooh323c/src/ooGkClient.c
@@ -812,6 +812,9 @@ int ooGkClientHandleGatekeeperConfirm
if(pGatekeeperConfirm->m.gatekeeperIdentifierPresent)
{
pGkClient->gkId.nchars = pGatekeeperConfirm->gatekeeperIdentifier.nchars;
+ if (pGkClient->gkId.data) {
+ memFreePtr(&pGkClient->ctxt, pGkClient->gkId.data);
+ }
pGkClient->gkId.data = (ASN116BITCHAR*)memAlloc(&pGkClient->ctxt,
sizeof(ASN116BITCHAR)*pGkClient->gkId.nchars);
if(!pGkClient->gkId.data)
@@ -1371,7 +1374,20 @@ int ooGkClientHandleRegistrationReject
default:
OOTRACEINFO1("RRQ Rejected - Invalid Reason\n");
}
- pGkClient->state = GkClientGkErr;
+
+ /* send again GRQ/RRQ's */
+ ast_mutex_lock(&pGkClient->Lock);
+ pGkClient->state = GkClientUnregistered;
+ pGkClient->rrqRetries = 0;
+ pGkClient->grqRetries = 0;
+ pGkClient->discoveryComplete = FALSE;
+ ast_mutex_unlock(&pGkClient->Lock);
+
+ iRet = ooGkClientSendGRQ(pGkClient);
+ if(iRet != OO_OK){
+ OOTRACEERR1("\nError: Transmission of rediscovery of GK failed\n");
+ return OO_FAILED;
+ }
return OO_OK;
}