Index: addons/ooh323c/src/ooGkClient.c =================================================================== --- addons/ooh323c/src/ooGkClient.c (revision 297153) +++ addons/ooh323c/src/ooGkClient.c (working copy) @@ -823,10 +823,9 @@ sizeof(ASN116BITCHAR)* pGkClient->gkId.nchars); } else{ - OOTRACEERR1("ERROR:No Gatekeeper ID present in received GKConfirmed " + OOTRACEINFO1("ERROR:No Gatekeeper ID present in received GKConfirmed " "message\n"); - OOTRACEINFO1("Ignoring message and will retransmit GRQ after timeout\n"); - return OO_FAILED; + pGkClient->gkId.nchars = 0; } /* Extract Gatekeeper's RAS address */ @@ -1018,21 +1017,23 @@ return OO_FAILED; } - pRegReq->m.gatekeeperIdentifierPresent=TRUE; - pRegReq->gatekeeperIdentifier.nchars = pGkClient->gkId.nchars; - pRegReq->gatekeeperIdentifier.data = (ASN116BITCHAR*)memAlloc + if (pGkClient->gkId.nchars) { + pRegReq->m.gatekeeperIdentifierPresent=TRUE; + pRegReq->gatekeeperIdentifier.nchars = pGkClient->gkId.nchars; + pRegReq->gatekeeperIdentifier.data = (ASN116BITCHAR*)memAlloc (pctxt, pGkClient->gkId.nchars*sizeof(ASN116BITCHAR)); - if(!pRegReq->gatekeeperIdentifier.data) - { + if(!pRegReq->gatekeeperIdentifier.data) + { OOTRACEERR1("Error: Failed to allocate memory for GKIdentifier in RRQ " "message.\n"); memReset(pctxt); pGkClient->state = GkClientFailed; ast_mutex_unlock(&pGkClient->Lock); return OO_FAILED; + } + memcpy(pRegReq->gatekeeperIdentifier.data, pGkClient->gkId.data, + pGkClient->gkId.nchars*sizeof(ASN116BITCHAR)); } - memcpy(pRegReq->gatekeeperIdentifier.data, pGkClient->gkId.data, - pGkClient->gkId.nchars*sizeof(ASN116BITCHAR)); ooGkClientFillVendor(pGkClient, &pRegReq->endpointVendor); @@ -1149,7 +1150,26 @@ memcpy(pGkClient->endpointId.data, pRegistrationConfirm->endpointIdentifier.data, sizeof(ASN116BITCHAR)*pGkClient->endpointId.nchars); + + /* Extract GK Identifier */ + if(pRegistrationConfirm->m.gatekeeperIdentifierPresent && pGkClient->gkId.nchars == 0) + { + pGkClient->gkId.nchars = pRegistrationConfirm->gatekeeperIdentifier.nchars; + pGkClient->gkId.data = (ASN116BITCHAR*)memAlloc(&pGkClient->ctxt, + sizeof(ASN116BITCHAR)*pGkClient->gkId.nchars); + if(!pGkClient->gkId.data) + { + OOTRACEERR1("Error:Failed to allocate memory for GK ID data\n"); + pGkClient->state = GkClientFailed; + return OO_FAILED; + } + + memcpy(pGkClient->gkId.data, + pRegistrationConfirm->gatekeeperIdentifier.data, + sizeof(ASN116BITCHAR)* pGkClient->gkId.nchars); + } + /* Extract CallSignalling Address */ for(i=0; i<(int)pRegistrationConfirm->callSignalAddress.count; i++) { @@ -1437,21 +1457,23 @@ sizeof(ASN116BITCHAR)*pGkClient->endpointId.nchars); /* Populate gatekeeper identifier */ - pUnregReq->m.gatekeeperIdentifierPresent = TRUE; - pUnregReq->gatekeeperIdentifier.nchars = pGkClient->gkId.nchars; - pUnregReq->gatekeeperIdentifier.data = (ASN116BITCHAR*)memAlloc(pctxt, + if (pGkClient->gkId.nchars) { + pUnregReq->m.gatekeeperIdentifierPresent = TRUE; + pUnregReq->gatekeeperIdentifier.nchars = pGkClient->gkId.nchars; + pUnregReq->gatekeeperIdentifier.data = (ASN116BITCHAR*)memAlloc(pctxt, sizeof(ASN116BITCHAR)*pGkClient->gkId.nchars); - if(!pUnregReq->gatekeeperIdentifier.data) - { + if(!pUnregReq->gatekeeperIdentifier.data) + { OOTRACEERR1("Error:Failed to allocate memory for GKID of URQ message\n"); memReset(pctxt); pGkClient->state = GkClientFailed; ast_mutex_unlock(&pGkClient->Lock); return OO_FAILED; - } - memcpy((void*)pUnregReq->gatekeeperIdentifier.data, + } + memcpy((void*)pUnregReq->gatekeeperIdentifier.data, (void*)pGkClient->gkId.data, sizeof(ASN116BITCHAR)*pGkClient->gkId.nchars); + } /* Check whether specific aliases are to be unregistered*/ if(aliases) @@ -1766,21 +1788,23 @@ sizeof(H225CallIdentifier)); /* Populate Gatekeeper Id */ - pAdmReq->m.gatekeeperIdentifierPresent = TRUE; - pAdmReq->gatekeeperIdentifier.nchars = pGkClient->gkId.nchars; - pAdmReq->gatekeeperIdentifier.data = (ASN116BITCHAR*)memAlloc(pctxt, + if (pGkClient->gkId.nchars) { + pAdmReq->m.gatekeeperIdentifierPresent = TRUE; + pAdmReq->gatekeeperIdentifier.nchars = pGkClient->gkId.nchars; + pAdmReq->gatekeeperIdentifier.data = (ASN116BITCHAR*)memAlloc(pctxt, sizeof(ASN116BITCHAR)*pGkClient->gkId.nchars); - if(!pAdmReq->gatekeeperIdentifier.data) - { + if(!pAdmReq->gatekeeperIdentifier.data) + { OOTRACEERR1("Error:Failed to allocate memory for GKID of ARQ message\n"); memReset(pctxt); pGkClient->state = GkClientFailed; ast_mutex_unlock(&pGkClient->Lock); return OO_FAILED; - } - memcpy((void*)pAdmReq->gatekeeperIdentifier.data, + } + memcpy((void*)pAdmReq->gatekeeperIdentifier.data, (void*)pGkClient->gkId.data, sizeof(ASN116BITCHAR)*pGkClient->gkId.nchars); + } pAdmReq->m.willSupplyUUIEsPresent = 1; pAdmReq->willSupplyUUIEs = FALSE; @@ -2416,20 +2440,22 @@ pDRQ->m.callIdentifierPresent = 1; memcpy((void*)&pDRQ->callIdentifier, (void*)&call->callIdentifier, sizeof(H225CallIdentifier)); - pDRQ->m.gatekeeperIdentifierPresent = 1; - pDRQ->gatekeeperIdentifier.nchars = pGkClient->gkId.nchars; - pDRQ->gatekeeperIdentifier.data = (ASN116BITCHAR*)memAlloc + if (pGkClient->gkId.nchars) { + pDRQ->m.gatekeeperIdentifierPresent = 1; + pDRQ->gatekeeperIdentifier.nchars = pGkClient->gkId.nchars; + pDRQ->gatekeeperIdentifier.data = (ASN116BITCHAR*)memAlloc (pctxt, pGkClient->gkId.nchars*sizeof(ASN116BITCHAR)); - if(!pDRQ->gatekeeperIdentifier.data) - { + if(!pDRQ->gatekeeperIdentifier.data) + { OOTRACEERR1("Error:Failed to allocate memory for GKId in DRQ.\n"); memReset(pctxt); pGkClient->state = GkClientFailed; ast_mutex_unlock(&pGkClient->Lock); return OO_FAILED; + } + memcpy(pDRQ->gatekeeperIdentifier.data, pGkClient->gkId.data, + pGkClient->gkId.nchars*sizeof(ASN116BITCHAR)); } - memcpy(pDRQ->gatekeeperIdentifier.data, pGkClient->gkId.data, - pGkClient->gkId.nchars*sizeof(ASN116BITCHAR)); pDRQ->m.terminationCausePresent = 1; pDRQ->terminationCause.t = T_H225CallTerminationCause_releaseCompleteCauseIE;