Fix to resend GRQ/RRQ if RRJ (registration reject) is received
authorAlexandr Anikin <may@telecom-service.ru>
Thu, 9 Aug 2012 19:33:41 +0000 (19:33 +0000)
committerAlexandr Anikin <may@telecom-service.ru>
Thu, 9 Aug 2012 19:33:41 +0000 (19:33 +0000)
(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

addons/ooh323c/src/ooGkClient.c

index c91b9ed..e149aba 100644 (file)
@@ -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;
 }