?? cdrwritegtp.cpp
字號:
/*********************************************************************** * Module: CExceptionADO.h * Author: asus * Modified: 2006年4月27日 10:35:46 * Purpose: Declaration of the class CExceptionADO * Comment: 原始GTP'包的接口類 ***********************************************************************/#include "CDRWriteGTP.h"#include<stdio.h>#include <string.h>#include "Base64.h"#include "Date1.h"C_CDRWriteGTP::C_CDRWriteGTP(){}C_CDRWriteGTP::~C_CDRWriteGTP(){}bool C_CDRWriteGTP::Insert( const char* inSzContent, long inILength, const char* inSzGsnId, long inBflagCancel, long inIPeerIp, long inIPeerSeqId, char outSzTableName[31], char outSzSeqId[21]){ //1.記錄類型 m_In.RecordType=0; //2.內容編碼 memset(m_szDest, 0, 4000); int iBase64Len = base64_encode(m_szDest, inSzContent, inILength); memcpy(&m_In.Content, m_szDest, iBase64Len); m_In.ContentLength = iBase64Len; //3.被操作的表名字 snprintf(m_In.TableName, LEN_TABLENAME+1, "OGTPL%s", GetSysdate()); //4.是否取消 m_In.FlagCancel=inBflagCancel; //5.網關編號 memcpy(m_In.GsnId, inSzGsnId, strlen(inSzGsnId)); //6.peerip m_In.PeerIp = inIPeerIp; //7.peerseq m_In.PeerSeqId = inIPeerSeqId; m_In.CgType = 0; memset(&m_Out, 0, sizeof(m_Out)); int res = DbGTPInsert(&m_In, &m_Out); if(res == 0 && outSzSeqId != NULL && outSzTableName != NULL) { snprintf(outSzSeqId, LEN_SEQ+1, "%s", m_Out.SeqId); snprintf(outSzTableName, LEN_TABLENAME+1, "%s", m_Out.TableName); } if(res != 0) return false; return Commit();}bool C_CDRWriteGTP::Insert2(const char* inSzContent, long inILength, long inINumberOfCdrs, long inBflagCancel, long inIPeerIp, long inIPeerSeqId, short inICgType, short inIRecordType, char outSzTableName[31], char outSzSeqId[21]){ //1.記錄類型 m_In.RecordType=inIRecordType; //2.內容編碼 if(inIRecordType == 0) { memset(m_szDest, 0, 4000); int iBase64Len = base64_encode(m_szDest, inSzContent, inILength); memcpy(&m_In.Content, m_szDest, iBase64Len); m_In.ContentLength = iBase64Len; } else { snprintf(m_In.Content, LEN_CONTENT, "%s", inSzContent); m_In.ContentLength = strlen(inSzContent); } //3.被操作的表名字 snprintf(m_In.TableName, LEN_TABLENAME+1, "OGTPL%s", GetSysdate()); //4.是否取消 m_In.FlagCancel=inBflagCancel; //5.網關編號 snprintf(m_In.GsnId, 11, "%u", inINumberOfCdrs); //6.peerip m_In.PeerIp = inIPeerIp; //7.peerseq m_In.PeerSeqId = inIPeerSeqId; m_In.CgType = inICgType; memset(&m_Out, 0, sizeof(m_Out)); int res = DbGTPInsert(&m_In, &m_Out); if(res == 0 && outSzSeqId != NULL && outSzTableName != NULL) { snprintf(outSzSeqId, LEN_SEQ+1, "%s", m_Out.SeqId); snprintf(outSzTableName, LEN_TABLENAME+1, "%s", m_Out.TableName); } if(res != 0) return false; return Commit();}bool C_CDRWriteGTP::Update(long inIPeerIp, long inIPeerSeqId, long inBflagCancel, int &RecordType, char outFileName[4000], int &outLength, char outSzTableName[31], char outSzSeqId[21]){ char szTableName[LEN_TABLENAME]; // printf("C_CDRWriteGTP::Update\n"); char szTableDate[20];// char szTableDate2[20]; char cur[20]; snprintf(cur,20, "%s", GetSysdate());// printf("cur=%s\n", cur); snprintf(szTableDate, 20, "%s", m_nClock.Get(cur, strlen(cur),false, 4, 0)); CDate1 date(szTableDate, cur);//szTableDate2); date.Calculate(); int all = date.GetCount(); int i; int res2;// printf("szTableDate=%d\n", all); for(i=all-1;i>=0;i--) { snprintf(outSzTableName, LEN_TABLENAME, "OGTPL%s", date.GetAt(i).c_str()); // snprintf(outSzTableName, LEN_TABLENAME, "OGTPL%s", cur);//date.GetAt(i).c_str()); printf("%s\n", outSzTableName); printf("%u\n", inIPeerIp); printf("%u\n", inIPeerSeqId); if((res2 = DbGTPSelect2(inIPeerIp, inIPeerSeqId, outSzTableName, &RecordType, m_szDest2, outSzSeqId)) == 3)//error { return false; } if(res2 == 2)//no data // return false; continue; if(strlen(outSzSeqId) <= 0 || strlen(outSzTableName) <= 0) return false; char szSQL[1024]; snprintf(szSQL, 1024, "UPDATE %s SET FLAGCANCEL=%d " "WHERE SEQID='%s'", outSzTableName, inBflagCancel, outSzSeqId); int res = DbUpdateTable(szSQL, &m_Out); if(res != 0) return false; if(RecordType == 0) { int nLengthDb = strlen(m_szDest2); outLength = base64_decode(outFileName, m_szDest2, nLengthDb); return true; } else { outLength = strlen(m_szDest2); memcpy(outFileName, m_szDest2, outLength); outFileName[outLength] = 0; return true; } } return Commit();} void C_CDRWriteGTP::Test(){ S_GTPL pIn; S_RESULT pOut; memset(&pIn,0,sizeof(pIn)); pIn.CgType=10; memcpy(pIn.Content,"11111111111111111111111111111111111111", 12); snprintf(pIn.TableName, LEN_TABLENAME+1, "OGTPL"); pIn.RecordType=100; pIn.ContentLength=20; pIn.FlagCancel=1; pIn.PeerIp=0xffffffff; pIn.PeerSeqId=88333333; memcpy(pIn.GsnId,"11111111111111111111111111111111111111", 12); memcpy(pIn.GsnId,"3333333", 12); char outSzTableName[31]; char outSzSeqId[21]; Insert2("1231242342314213",//const char* inSzContent, 12,//long inILength, 1,//long inINumberOfCdrs, 1,//long inBflagCancel, 0xff00ff00,//long inIPeerIp, 0xffff,//long inIPeerSeqId, 1,//short inICgType, 2,//short inIRecordType, outSzTableName, outSzSeqId); /* long inIPeerIp(3232235533); long inIPeerSeqId(1); long inBflagCancel(2); int RecordType; char outFileName[4000]; int outLength; char outSzTableName[31]; char outSzSeqId[21]; if(Update(inIPeerIp, inIPeerSeqId, inBflagCancel, RecordType, outFileName, outLength, outSzTableName, outSzSeqId)) { FILE* fp = fopen("ogtpl.bin", "wb"); fwrite(outFileName, 1, outLength, fp); fclose(fp); printf("RecordType=%d\n", RecordType); printf("outSzTableName=%s\n", outSzTableName); printf("outSzSeqId=%s\n", outSzSeqId); } else { printf("error"); }/* char Table[31]; char SeqId[21]; for(int i=0;i<1;i++)//0000;i++) {// Insert("12345678901234567890123456789012345678901234567890", 50, "1", 0, 0xFFFFFFFF, 0xFFFFFFFF, Table, SeqId); Insert2( "12345678901234567890123456789012345678901234567890", 50, 100,//cdrs 0, 0xFFFFFFFF, 0xFFFFFFFF, 3, 1, Table, SeqId);// printf("GTP Table Name=%s SeqId=%s\n",Table ,SeqId); }// exit(0);*/}bool C_CDRWriteGTP::Update(const char* pInSzSQL){ return DbUpdateTable((char*)pInSzSQL, &m_Out) == 0;}bool C_CDRWriteGTP::ReadRecord(char* pInSzTableName, char* pInSeqId, char szOutContent[4000], int &nLength, int &RecordType, char szOutSeqId[21], char szOutIpAdd[16], int &nFalgCancel){ char szOutFromDb[4000]; int nLengthDb; memset(szOutFromDb,0,4000); memset(szOutIpAdd, 0, 16); int nPeerIp; int res = DbGTPSelect(pInSzTableName, pInSeqId, &RecordType, szOutFromDb, szOutSeqId, &nPeerIp, &nFalgCancel); if(res == 0) { nLengthDb = strlen(szOutFromDb); nLength = base64_decode(szOutContent, szOutFromDb, nLengthDb); //對方的IP地址 printf("u=%u u2=%u d=%d cancel=%d\n", (unsigned int)nPeerIp, nPeerIp, nPeerIp, nFalgCancel); memcpy(&szOutIpAdd[12], (unsigned int*)&nPeerIp, 4); return true; } return false;}bool C_CDRWriteGTP::GetCount(long inIPeerIp, long inIPeerSeqId, long& outICount){ outICount = 0; char szTableName[LEN_TABLENAME]; char szTableDate[20]; char szTableDate2[20]; char cur[20]; snprintf(cur,20, "%s", GetSysdate()); snprintf(szTableDate, 20, "%s", m_nClock.Get(cur, strlen(cur),false, 2, 0)); snprintf(szTableDate2, 20, "%s", m_nClock.Get(cur, strlen(cur),true, 2, 0)); CDate1 date(szTableDate, szTableDate2); date.Calculate(); int all = date.GetCount(); int i; for(i=0;i<all;i++) { snprintf(szTableName, LEN_TABLENAME, "OGTPL%s", date.GetAt(i).c_str()); long nOutCount = 0; if(DbGTPCount(szTableName, inIPeerIp, inIPeerSeqId, &nOutCount) == 0) { outICount += nOutCount; } else { return false; } } return true;} bool C_CDRWriteGTP::TimeLimit( //in const char *p_timeStart, int p_timeAcceptedFree, //out int &p_bIsFree, char p_timeErrorStart[15], char p_timeErrorEnd[15], int &p_nResult){ return DbReadOgtplTableCount( (char*)p_timeStart, p_timeAcceptedFree, &p_bIsFree, p_timeErrorStart, p_timeErrorEnd, &p_nResult) == 0;}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -