diff options
author | Alexandr Anikin <may@telecom-service.ru> | 2012-08-09 19:33:41 +0000 |
---|---|---|
committer | Alexandr Anikin <may@telecom-service.ru> | 2012-08-09 19:33:41 +0000 |
commit | 6153acebe80333e2de051b7cdb5a061cf86f5a06 (patch) | |
tree | 55bc66b8e638c69d2af263c257ee52a484022f10 /addons/ooh323c | |
parent | 18d504198139bac964bb24604ff0ef58bba5c722 (diff) |
Fix to resend GRQ/RRQ if RRJ (registration reject) is received
(close issue ASTERISK-20094)
Patches:
ASTERISK-20094.patch
........
Merged revisions 371011 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........
Merged revisions 371022 from http://svn.asterisk.org/svn/asterisk/branches/10
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@371036 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'addons/ooh323c')
-rw-r--r-- | addons/ooh323c/src/ooGkClient.c | 18 |
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; } |