📄 cdrcombination.cpp
字号:
memcpy(pGCdrCg[i].CauseForRecClosing, pGCdr[i].CauseForRecClosing, strlen(pGCdr[i].CauseForRecClosing)); memcpy(pGCdrCg[i].RecordSequenceNumber, pGCdr[i].RecordSequenceNumber, strlen(pGCdr[i].RecordSequenceNumber)); // memcpy(pGCdrCg[i].RecordExtensions,// pGCdr[i].RecordExtensions,// strlen(pGCdr[i].RecordExtensions)); memcpy(pGCdrCg[i].LocalRecordSequeceNumnber, pGCdr[i].LocalRecordSequeceNumnber, strlen(pGCdr[i].LocalRecordSequeceNumnber)); } for(int i = 0; i < numOfCdrRead; i++) { cout<<"pGCdrCg:"<<endl; cout<<"ggsnaddr:"<<pGCdrCg[i].GGSNAddress<<endl; cout<<"SGSNIPAddress:"<<pGCdrCg[i].SGSNIPAddress<<endl; cout<<"CallDuration:"<<pGCdrCg[i].CallDuration<<endl; cout<<endl; } return true;}static S_CGCDR * CreateCdr(int * numOfCdrRead){ /* 五张原始GCDR话单的内存分配和清空操作 */ char sConfigFileName[LEN_OF_FILE_NAME]; S_OGCDR2 *pGCdr = new S_OGCDR2[NUM_OF_CDR_READ]; S_CGCDR *pGCdrCg = new S_CGCDR[NUM_OF_CDR_READ]; int numOfCdrReadTmp = 0; // 五张GCDR话单的内存分配和清空操作 for (int i = 0; i < NUM_OF_CDR_READ; i++) { memset((void *)&pGCdr[i], 0x00, SIZE_S_OGCDR2); } memset(sConfigFileName,0,LEN_OF_FILE_NAME); /* 五张合并后GCDR话单的内存分配和清空操作 */ // 五张合并后GCDR话单的内存分配和清空操作 for (int i =0; i < NUM_OF_CDR_READ; i++) { memset((void *)&pGCdrCg[i], 0x00, SIZE_S_CGCDR); } strcpy(sConfigFileName, FILE_NAME_OF_CONFIG); C_ShareMemory ShareMemory_CDR(sConfigFileName,PROGRAM_GCDR,AREA_GCDR); for(int i = 0; i < NUM_OF_CDR_READ; i++) { if (ShareMemory_CDR.ReadData((void *)(&pGCdr[i]), sizeof(S_OGCDR2), 0) == 0) { //return NULL; break; } numOfCdrReadTmp++; cout<<"pGCdr:"<<endl; cout<<"ggsnaddr:"<<pGCdr[i].GGSNAddress<<endl; cout<<"DataVolumeGPRSUp:"<<pGCdr[i].ListOfTrafficVolumn[2].DataVolumeGPRSUp<<endl; cout<<"DataVolumeGPRSDown:"<<pGCdr[i].ListOfTrafficVolumn[3].DataVolumeGPRSDown<<endl; cout<<"SGSNIPAddress:"<<pGCdr[i].SGSNIPAddress<<endl; cout<<"CallDuration:"<<pGCdr[i].CallDuration<<endl; cout<<endl; } if (0 == numOfCdrReadTmp) { delete []pGCdr; delete []pGCdrCg; return NULL; } //将原始话单转换为合并后的话单 ConvertOGcdrToCdrCg(pGCdr, pGCdrCg, numOfCdrReadTmp); *numOfCdrRead = numOfCdrReadTmp; //内存清空 delete []pGCdr; return pGCdrCg;}S_LLOTV * CreateLotv(){ S_LLOTV * pLotv; pLotv = new S_LLOTV[NUM_OF_CDR_DATA_VOL_READ]; for(int i = 0; i < NUM_OF_CDR_DATA_VOL_READ; i++) { memset((void *)&pLotv[i], 0x00, sizeof(S_LLOTV)); } //设置第一个四维DataVolume的节点数值 memcpy(pLotv[0].DataVolumeGPRSUp, "1", strlen("1")); memcpy(pLotv[0].DataVolumeGPRSDown, "1", strlen("1")); memcpy(pLotv[1].DataVolumeGPRSUp, "11", strlen("11")); memcpy(pLotv[1].DataVolumeGPRSDown, "11", strlen("11")); memcpy(pLotv[2].DataVolumeGPRSUp, "111", strlen("111")); memcpy(pLotv[2].DataVolumeGPRSDown, "111", strlen("111")); memcpy(pLotv[3].DataVolumeGPRSUp, "1111", strlen("1111")); memcpy(pLotv[3].DataVolumeGPRSDown, "1111", strlen("1111")); //设置第二个四维DataVolume的节点数值 memcpy(pLotv[4].DataVolumeGPRSUp, "2", strlen("2")); memcpy(pLotv[4].DataVolumeGPRSDown, "2", strlen("2")); memcpy(pLotv[5].DataVolumeGPRSUp, "22", strlen("22")); memcpy(pLotv[5].DataVolumeGPRSDown, "22", strlen("22")); memcpy(pLotv[6].DataVolumeGPRSUp, "222", strlen("222")); memcpy(pLotv[6].DataVolumeGPRSDown, "222", strlen("222")); memcpy(pLotv[7].DataVolumeGPRSUp, "2222", strlen("2222")); memcpy(pLotv[7].DataVolumeGPRSDown, "2222", strlen("2222")); //设置第三个四维DataVolume的节点数值 memcpy(pLotv[8].DataVolumeGPRSUp, "3", strlen("3")); memcpy(pLotv[8].DataVolumeGPRSDown, "3", strlen("3")); memcpy(pLotv[9].DataVolumeGPRSUp, "33", strlen("33")); memcpy(pLotv[9].DataVolumeGPRSDown, "33", strlen("33")); memcpy(pLotv[10].DataVolumeGPRSUp, "333", strlen("333")); memcpy(pLotv[10].DataVolumeGPRSDown, "333", strlen("333")); memcpy(pLotv[11].DataVolumeGPRSUp, "3333", strlen("3333")); memcpy(pLotv[11].DataVolumeGPRSDown, "3333", strlen("3333")); //设置第四个四维DataVolume的节点数值 memcpy(pLotv[12].DataVolumeGPRSUp, "4", strlen("4")); memcpy(pLotv[12].DataVolumeGPRSDown, "4", strlen("4")); memcpy(pLotv[13].DataVolumeGPRSUp, "44", strlen("44")); memcpy(pLotv[13].DataVolumeGPRSDown, "44", strlen("44")); memcpy(pLotv[14].DataVolumeGPRSUp, "444", strlen("444")); memcpy(pLotv[14].DataVolumeGPRSDown, "444", strlen("444")); memcpy(pLotv[15].DataVolumeGPRSUp, "4444", strlen("4444")); memcpy(pLotv[15].DataVolumeGPRSDown, "4444", strlen("4444")); //设置第五个四维DataVolume的节点数值 memcpy(pLotv[16].DataVolumeGPRSUp, "5", strlen("5")); memcpy(pLotv[16].DataVolumeGPRSDown, "5", strlen("5")); memcpy(pLotv[17].DataVolumeGPRSUp, "55", strlen("55")); memcpy(pLotv[17].DataVolumeGPRSDown, "55", strlen("55")); memcpy(pLotv[18].DataVolumeGPRSUp, "555", strlen("555")); memcpy(pLotv[18].DataVolumeGPRSDown, "555", strlen("555")); memcpy(pLotv[19].DataVolumeGPRSUp, "5555", strlen("5555")); memcpy(pLotv[19].DataVolumeGPRSDown, "5555", strlen("5555")); return pLotv;}S_LCOMM *CreateComm(){ S_LCOMM * pComm; pComm = new S_LCOMM[2]; memset((void *)&pComm[0], 0x00, sizeof(S_LCOMM)); memset((void *)&pComm[1], 0x00, sizeof(S_LCOMM)); memcpy(pComm[0].RecordExtensions, "001RecordExtensions", strlen("001RecordExtensions")); memcpy(pComm[1].RecordExtensions, "002RecordExtensions", strlen("002RecordExtensions")); return pComm;}static void ComputerTotalDurationForSortedRecSeqNum(S_CGCDR_C * pCg){ if (NULL == pCg) return ; printf("%s\n", pCg->RecordOpenTime); printf("%s\n", pCg->RecordOpenTimeLast); printf("%s\n", pCg->CallDurationLast); long recOpenTimeFirst = atol(pCg->RecordOpenTime); long recOpenTimeLast = atol(pCg->RecordOpenTimeLast); long CallDurationLast = atol(pCg->CallDurationLast); printf("%d\n", recOpenTimeFirst); printf("%d\n", recOpenTimeLast); printf("%d\n", CallDurationLast); CallDurationLast = CallDurationLast + recOpenTimeLast - recOpenTimeFirst; sprintf(pCg->CallDuration, "%d", CallDurationLast); return ;}static bool IsSortedRecSeqNumContinuous(SortedRecSeqNumList * SortedRecSeqNum){ if (NULL == SortedRecSeqNum) return false; SortedRecSeqNumList * SortedRecSeqNumTemp = SortedRecSeqNum; SortedRecSeqNumList * pSortedRecSeqNumTemp = SortedRecSeqNum; long RecSeqNum = 0; long RecSeqNumPrev = 0; long delay = 0; /* 如果只有一个节点,则无需重新计算DURATION */ if ( NULL == SortedRecSeqNumTemp->next ) { printf("%d\n", __LINE__); return false; } //while(NULL != SortedRecSeqNumTemp) while(NULL != SortedRecSeqNumTemp->next) { SortedRecSeqNumTemp = SortedRecSeqNumTemp->next; RecSeqNum = atol(SortedRecSeqNumTemp->RecordSequenceNumber); RecSeqNumPrev = atol(pSortedRecSeqNumTemp->RecordSequenceNumber); delay = RecSeqNum - RecSeqNumPrev; /* 严格意义上,这里还需要增加判断:即RECORD OPEN TIME和CLOSE TIME的判断 */ if ((RecSeqNum > RecSeqNumPrev)&& (1 == delay)) { printf("%d\n", __LINE__); pSortedRecSeqNumTemp = SortedRecSeqNumTemp; continue ; } else { printf("%d\n", __LINE__); return false; } } printf("%d\n", __LINE__); return true;}static void DeleteSortedRecSeqNum(SortedRecSeqNumList * SortedRecSeqNum){ if (NULL == SortedRecSeqNum) return ; SortedRecSeqNumList * SortedRecSeqNumDelete = SortedRecSeqNum->next; SortedRecSeqNumList * pSortedRecSeqNumDelete = SortedRecSeqNumDelete; while(NULL != SortedRecSeqNumDelete) { SortedRecSeqNumDelete = SortedRecSeqNumDelete->next; if (NULL != pSortedRecSeqNumDelete) { free(pSortedRecSeqNumDelete); pSortedRecSeqNumDelete = NULL; } pSortedRecSeqNumDelete = SortedRecSeqNumDelete; }}/* R99GCDR话单合并功能函数 *///static bool CombinationForR99Gcdr(S_R99CGCDR_C *pR99GCdr)C_GCdrCombination::C_GCdrCombination(): ShareMemory_GCDR(FILE_NAME_OF_CONFIG, PROGRAM_GCDR,AREA_GCDR),m_isCombination(false) { } static void ClearGCdrMap(){ for(map<CidAndGgsnAddrStruct, S_CGCDR_C*>::iterator map_it = map_GCdrCg.begin(); map_it!=map_GCdrCg.end();map_it++) { delete map_it->second; } map_GCdrCg.clear();}void C_GCdrCombination::AddSortedRecSeqNum(S_CGCDR_C *pGCdrCg, char * RecordSequenceNumber, char * RecordOpenTime, char * CallDuration){printf("%d\n", __LINE__); /* 1.对输入参数的有效性的判断 */ if ((NULL == pGCdrCg)|| (NULL == RecordSequenceNumber)|| (NULL == RecordOpenTime)|| (NULL == RecordOpenTime)) { return ; }printf("%d\n", __LINE__); /* 2.如果链表为空,则插入到链表头 */ if(NULL == pGCdrCg->SortedRecSeqNum) { pGCdrCg->SortedRecSeqNum = (SortedRecSeqNumList * )malloc(sizeof(SortedRecSeqNumList)); memset(pGCdrCg->SortedRecSeqNum, 0x00, sizeof(SortedRecSeqNumList)); pGCdrCg->SortedRecSeqNum->next = NULL;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -