Hi,
Currently I am trying to change the above pseudocode (legacy), based on flag, i either fill the sSig Or a new struct.Code:typedef struct structAuthDelivery { u32 nSig; // For message integrity purposes. AuthSetRes eRes; char pzIMSI[20]; u32 nMMHandle; u32 nNumVectors; } AuthDelivery; function() { CSignal sSig; AuthDelivery * pAuth = (AuthDelivery*)(sSig.Alloc(0)); if (pAuthInfo) { list<CDiaAVP *> lGroup; if (m_eRATType == RANTypeEUTRAN || m_eRATType == RANTypeIMS) { pAuthInfo->FindAllSameAVPs(DiameterVendorId3GPP, AVP3GPP_EUTRANVector, lGroup); } else { pAuthInfo->FindAllSameAVPs(DiameterVendorId3GPP, AVP3GPP_UTRANVector, lGroup); } LogTrace(<< "Auth info contained num of vectors: " << lGroup.size()) list<CDiaAVP*>::iterator iIter = lGroup.begin(); while (nNumVectors < 5 && iIter != lGroup.end()) { CDiaAVP * pAuthvector = *iIter; CDiaAVP * pField = pAuthvector->FindAVP(DiameterVendorId3GPP, AVP3GPP_RAND); if (pField) { if (pField->GetOctetStringLen() >= 16) { AuthVector pVector = (AuthVector*)(((u8*)pAuth) + sizeof(AuthDelivery)); memcpy((void *)&(pVector->aRAND[0]), pField->GetOctetStringPtr(), 16); } } : nNumVectors++; iIter++; } pAuth->nNumVectors = nNumVectors; } sSig.Post(SigMsgAuthDelivery, m_sDeliveryAddr, SigAddr(SigModDiaConn, 0)); }
Code:function() { CSignal sSig; // new flag m_bFromAdmin if(m_bFromAdmin) { AuthDelivery sAuthDel; AuthDelivery * pAuth = &sAuthDel; } else { AuthDelivery * pAuth = (AuthDelivery*)(sSig.Alloc(0)); pAuth->nSig = AuthDeliverySig; pAuth->eRes = m_bDoingResync?AuthSetResResyncOk:AuthSetResOk; pAuth->nMMHandle = m_sDeliveryAddr.second; strcpy(pAuth->pzIMSI, m_sIMSI.c_str()); } if (pAuthInfo) { list<CDiaAVP *> lGroup; if (m_eRATType == RANTypeEUTRAN || m_eRATType == RANTypeIMS) { pAuthInfo->FindAllSameAVPs(DiameterVendorId3GPP, AVP3GPP_EUTRANVector, lGroup); } else { pAuthInfo->FindAllSameAVPs(DiameterVendorId3GPP, AVP3GPP_UTRANVector, lGroup); } LogTrace(<< "Auth info contained num of vectors: " << lGroup.size()) list<CDiaAVP*>::iterator iIter = lGroup.begin(); while (nNumVectors < 5 && iIter != lGroup.end()) { CDiaAVP * pAuthvector = *iIter; CDiaAVP * pField = pAuthvector->FindAVP(DiameterVendorId3GPP, AVP3GPP_RAND); if (pField) { if (pField->GetOctetStringLen() >= 16) { AuthVector * pVector; if(m_bFromAdmin) { // Best way to allocate this memory, so pVector now holds the first vector pVector = ; } else { pVector = (AuthVector*)(((u8*)pAuth) + sizeof(AuthDelivery)); } memcpy((void *)&(pVector->aRAND[0]), pField->GetOctetStringPtr(), 16); } } : nNumVectors++; iIter++; } pAuth->nNumVectors = nNumVectors; } if(m_bFromAdmin) { CGetSubsInfoVLR::HandleAuthVectorResponse(m_req, m_sIMSI, m_sUniqueId, pAuth, VLRQueryRespSuccess, DataType4G); } else { sSig.Post(SigMsgAuthDelivery, m_sDeliveryAddr, SigAddr(SigModDiaConn, 0)); } }




Reply With Quote
