📄 appemail.cpp
字号:
if(cfg.GetItemValue("IPWATCH", "key", buf)!=0) { printf("Read SHM:id Failed!\n"); exit(-1); } ishmid=atoi(buf); if(cfg.GetItemValue("IPWATCH", "size", buf)!=0) { printf("Read SHM:size Failed!\n"); exit(-1); } ishmsize=atoi(buf)*1024*1024; //m_prdsip=new CRtRdsIP(); m_prdsip.init(ishmid,ishmsize); m_pTblEmail=new CTblEmail(); m_pSeqEmail=new CSeqEmail(); m_pSeqSpWarm=new CSeqSpWarm(); m_pTblSpWarm=new CTblSpWarm(); m_ptblnet=new CTblNet(); m_pseqnet=new CSeqNet(); m_theStream=new Cmimestream(); m_theEmail=new Cemail(); m_pBase64=new CBase64(); m_pQprint=new CQprint(); m_ptheFile=new CemailFile(); m_ptheFile->initFile(); m_pInfo=new CDataInfo(); m_pSpAdd=new EmailSpAdd(); m_pEvent=new CTblEvent(); m_pSeqEvent=new CSeqEvent(); //m_pKey=new CAppKey(); //setEmailKey(); }CAppEmail::~CAppEmail(){ }//Tue, 9 Mar 2004 16:26:52 +0800 void CAppEmail::getDate(char *time){ char buf[1024]; //char buff[1024]; char *p; if( m_theEmail->m_phv->getValue("Date",buf)) { //TLog::toLog("buf=[%s]",buf); if((p=strtok(buf,": "))==NULL) { *time=0; return; } if((p=strtok(NULL,": "))==NULL) { *time=0; return; } int date=atoi(p); if((p=strtok(NULL,": "))==NULL) { *time=0; return; } int month=tfrMonth(p); if((p=strtok(NULL,": "))==NULL) { *time=0; return; } int year=atoi(p); if((p=strtok(NULL,": "))==NULL) { *time=0; return; } int hh=atoi(p); if((p=strtok(NULL,": "))==NULL) { *time=0; return; } int mm=atoi(p); if((p=strtok(NULL,": "))==NULL) { *time=0; return; } int ss=atoi(p); sprintf(time,"%04d%02d%02d%02d%02d%02d",year,month,date,hh,mm,ss); p=strtok(NULL,": "); if(p!=NULL) { if(strlen(p)<=5) { strcat(time,p); } } //TLog::toLog("time=[%s]",time); time[19]=0; }}bool CAppEmail::getSubject(char *subject,int lensubject){ //char *pval; char buf[1024]; char buff[1024]; if(m_theEmail->m_phv->getValue("Subject",buf)) { printf("subject value=[%s]\n",buf); //TLog::toLog("[%s]\n",buf); if(!strncasecmp(TITLE_CODEB,buf,strlen(TITLE_CODEB))) { //int len=strlen(TITLE_CODEB); //printf("this is base64 code\n"); int len=strlen(buf)-strlen(TITLE_CODEB)-2; //buf+=strlen(TITLE_CODEB); len=m_pBase64->Decode(&buf[strlen(TITLE_CODEB)],len,buff,1024); printf("GBB64 out buf=[%s] out len=[%d]\n",buff,len); if(strlen(buff)>=lensubject) { memcpy(subject,buff,lensubject-1); subject[lensubject-1]=0; } else strcpy(subject,buff); //TLog::toLog("gdb[%s]\n",subject); return true; } if(!strncasecmp(TITLE_CODEQ,buf,strlen(TITLE_CODEQ))) { //printf("this is base64 code\n"); int len=strlen(buf)-strlen(TITLE_CODEQ)-2; //buf+=strlen(TITLE_CODEQ); m_pQprint->Decode(&buf[strlen(TITLE_CODEQ)],len,buff,1024); printf("GBQB out buf=[%s] out len=[%d]\n",buff,len); if(strlen(buff)>=lensubject) { memcpy(subject,buff,lensubject-1); subject[lensubject-1]=0; } else strcpy(subject,buff); //TLog::toLog("gdq[%s]\n",subject); return true; } if(!strncasecmp(TITLE_CODEB_B5,buf,strlen(TITLE_CODEB_B5))) { //int len=strlen(TITLE_CODEB); printf("this is B5B64 code\n"); int len=strlen(buf)-strlen(TITLE_CODEB_B5)-2; //buf+=strlen(TITLE_CODEB); len=m_pBase64->Decode(&buf[strlen(TITLE_CODEB_B5)],len,buff,1024); memset(buf,0,sizeof(buf)); big5togb(buff,strlen(buff),buf,sizeof(buf)); if(strlen(buf)>=lensubject) { memcpy(subject,buf,lensubject-1); subject[lensubject-1]=0; } else strcpy(subject,buf); //TLog::toLog("b5b[%s]\n",subject); printf("B5B64 out buf=[%s] out len=[%d]\n",subject,lensubject); return true; } if(!strncasecmp(TITLE_CODEQ_B5,buf,strlen(TITLE_CODEQ_B5))) { printf("this is B5QB code\n"); int len=strlen(buf)-strlen(TITLE_CODEQ_B5)-2; //buf+=strlen(TITLE_CODEQ); m_pQprint->Decode(&buf[strlen(TITLE_CODEQ_B5)],len,buff,1024); memset(buf,0,sizeof(buf)); big5togb(buff,strlen(buff),buf,sizeof(buf)); if(strlen(buf)>=lensubject) { memcpy(subject,buf,lensubject-1); subject[lensubject-1]=0; } else strcpy(subject,buf); printf("QBB64 out buf=[%s] out len=[%d]\n",subject,lensubject); //TLog::toLog("b5q[%s]\n",subject); return true; } if(strlen(buf)>=lensubject) { memcpy(subject,buf,lensubject-1); subject[lensubject-1]=0; } else strcpy(subject,buf); //TLog::toLog("ori[%s]\n",subject); return true; } return false;}int CAppEmail::getAddInfo(){ #define LEN_NAME sizeof(m_memadds[0].ADM_SHOWNAME) #define LEN_ADD sizeof(m_memadds[0].ADM_ADDRESS) m_itotadds=0; if(m_theEmail->initAdd("From")) { m_memadds[m_itotadds].ADM_MAILROLE=ROLE_FROM; while( m_theEmail->getNextAdd(m_memadds[m_itotadds].ADM_SHOWNAME,LEN_NAME,m_memadds[m_itotadds].ADM_ADDRESS,LEN_ADD)) { m_itotadds++; } } if(m_theEmail->initAdd("To")) { m_memadds[m_itotadds].ADM_MAILROLE=ROLE_TO; while( m_theEmail->getNextAdd(m_memadds[m_itotadds].ADM_SHOWNAME,LEN_NAME,m_memadds[m_itotadds].ADM_ADDRESS,LEN_ADD)) { m_itotadds++; if(m_itotadds>=512) return m_itotadds; } } if(m_theEmail->initAdd("Cc")) { m_memadds[m_itotadds].ADM_MAILROLE=ROLE_CC; while( m_theEmail->getNextAdd(m_memadds[m_itotadds].ADM_SHOWNAME,LEN_NAME,m_memadds[m_itotadds].ADM_ADDRESS,LEN_ADD)) { m_itotadds++; if(m_itotadds>=512) return m_itotadds; } } if(m_theEmail->initAdd("BCc")) { m_memadds[m_itotadds].ADM_MAILROLE=ROLE_BCC; while( m_theEmail->getNextAdd(m_memadds[m_itotadds].ADM_SHOWNAME,LEN_NAME,m_memadds[m_itotadds].ADM_ADDRESS,LEN_ADD)) { m_itotadds++; if(m_itotadds>=512) return m_itotadds; } } return m_itotadds; } bool CAppEmail::isSpAdd(){ ST_AIMOBJ stObj[32]; for(int i=0;i<m_itotadds;i++) { //inaddr.s_addr = m_theHead.src_ip; //sprintf(mailInfo.SMI_CLIENTIP,"%s",inet_ntoa(inaddr)); TLog::toLog("check%s-%d",m_memadds[i].ADM_ADDRESS,m_clientip); m_stFt[i].type=IP_TYPE_EMAILADDR ; strcpy(m_stFt[i].value,m_memadds[i].ADM_ADDRESS); } int iobjs=m_prdsip.isInWatched(m_stFt,m_itotadds,m_clientip,stObj,m_icleartime); TLog::toLog("iobjs=%d",iobjs); if(iobjs>0) return true; return false;}void CAppEmail::saveObject2Info(){ //ST_AIMOBJ stObj[32]; //ST_AIMFEATURE stFt[128]; ST_ALMFORWORDOBJ stForwardObj[32]; for(int i=0;i<m_itotadds;i++) { //inaddr.s_addr = m_theHead.src_ip; //sprintf(mailInfo.SMI_CLIENTIP,"%s",inet_ntoa(inaddr)) TLog::toLog("%s-%d",m_memadds[i].ADM_ADDRESS,m_clientip); //m_stFt[i].type=IP_TYPE_EMAILADDR ; //strcpy(m_stFt[i].value,m_memadds[i].ADM_ADDRESS); int iobjs=m_prdsip.getAlmForward(IP_TYPE_EMAILADDR,m_memadds[i].ADM_ADDRESS,stForwardObj); //int iobjs=m_prdsip.isInWatched(m_stFt,m_itotadds,m_clientip,stObj,m_icleartime); TLog::toLog("iobjs=%d",iobjs); for(int j=0;j<iobjs;j++) { TLog::toLog("id=%d",stForwardObj[j].amgid ); STRU_TR_T_OBJECT2INFO rec; rec.OTI_ID=m_pSeqSpWarm->getS_TR_T_OBJECT2INFO(); rec.AMG_ID=stForwardObj[j].amgid; rec.OTI_INFOID=m_pSeqEmail->getfkS_TR_T_SPEMAILINFO(); rec.OTI_INFOTYPE=3; rec.OTI_RPRECISION=0; rec.OTI_READSTATUS=1; m_pTblSpWarm->insRecord(&rec); STRU_TR_T_ALARMEVENT arec; arec.ALE_ID=m_pSeqEvent->getS_TR_T_ALARMEVENT(); arec.AMG_ID=stForwardObj[j].amgid; arec.ALE_ALARMTYPE =1; arec.ALE_ALARMSTATUS =1 ; arec.ALE_INFOTYPE=1; arec.ALE_INFOID=m_pSeqEmail->getfkS_TR_T_SPEMAILINFO(); strcpy(arec.ALE_ALARMCONTENT,m_memadds[j].ADM_ADDRESS); strcpy(arec.ALE_ALARMTIME,TUTime::YYYYMMDDHHMMSS()); switch( m_memadds[i].ADM_MAILROLE) { case ROLE_FROM: strcpy(arec.ALE_ALARMTITLE ,"SEND MAIL"); break; case ROLE_TO: strcpy(arec.ALE_ALARMTITLE ,"RECV MAIL"); break; case ROLE_CC: strcpy(arec.ALE_ALARMTITLE ,"RECV MAIL"); break; case ROLE_BCC: default: strcpy(arec.ALE_ALARMTITLE ,"RECV MAIL"); break; } arec.ALE_FORWARDSTATUS=stForwardObj[j].forward; m_pEvent->insRecord(&arec); } }}void CAppEmail::saveAddInfo(){ //setAddInfo STRU_TR_T_MAILADDRESS mailAddress; mailAddress.MIF_ID=m_pSeqEmail->getfkS_TR_T_MAILINFO(); mailAddress.ADM_ISCLIENT=0; #ifdef DEBUG printf("add mif_id=[%d]\n",mailAddress.MIF_ID); #endif for(int i=0;i<m_itotadds;i++) { mailAddress.ADM_MAILROLE=m_memadds[i].ADM_MAILROLE; strcpy(mailAddress.ADM_SHOWNAME,m_memadds[i].ADM_SHOWNAME); if(strlen(mailAddress.ADM_SHOWNAME)==0) strcpy(mailAddress.ADM_SHOWNAME,"-"); strcpy(mailAddress.ADM_ADDRESS,m_memadds[i].ADM_ADDRESS); mailAddress.ADM_ID=m_pSeqEmail->getS_TR_T_MAILADDRESS(); m_pTblEmail->insRecord(&mailAddress); } }void CAppEmail::savespAddInfo(){ //setAddInfo STRU_TR_T_SPEMAILADDRESS mailAddress; mailAddress.SMI_ID=m_pSeqEmail->getfkS_TR_T_SPEMAILINFO(); #ifdef DEBUG printf("add mif_id=[%d]\n",mailAddress.SMI_ID); #endif for(int i=0;i<m_itotadds;i++) { mailAddress.SMA_MAILROLE=m_memadds[i].ADM_MAILROLE; strcpy(mailAddress.SMA_SHOWNAME,m_memadds[i].ADM_SHOWNAME); if(strlen(mailAddress.SMA_SHOWNAME)==0 ) strcpy(mailAddress.SMA_SHOWNAME,"-"); strcpy(mailAddress.SMA_ADDRESS,m_memadds[i].ADM_ADDRESS); mailAddress.SMA_ID=m_pSeqEmail->getS_TR_T_SPEMAILADDRESS(); mailAddress.SMA_ISCLIENT=0; m_pTblEmail->insRecord(&mailAddress); }} void CAppEmail::savespEmailInfo(int protocol){ struct in_addr inaddr; STRU_TR_T_SPEMAILINFO mailInfo; mailInfo.SMI_ID=m_pSeqEmail->getfkS_TR_T_SPEMAILINFO(); #ifdef DEBUG printf("inf mif_id=[%d]\n",mailInfo.SMI_ID); #endif mailInfo.SMF_ID=m_pSeqEmail->getfkS_TR_T_MAILFILE(); memset(mailInfo.SMI_DATE,0,sizeof(mailInfo.SMI_DATE)); strcpy(mailInfo.SMI_DATE,"-"); getDate(mailInfo.SMI_DATE); memset(mailInfo.SMI_SUBJECT,0,sizeof(mailInfo.SMI_SUBJECT)); strcpy(mailInfo.SMI_SUBJECT,"-"); getSubject(mailInfo.SMI_SUBJECT,sizeof(mailInfo.SMI_SUBJECT)); mailInfo.SMI_PROTOCOL=protocol; inaddr.s_addr = m_theHead.src_ip; sprintf(mailInfo.SMI_CLIENTIP,"%s",inet_ntoa(inaddr)); inaddr.s_addr = m_theHead.dst_ip; sprintf(mailInfo.SMI_SERVERIP,"%s",inet_ntoa(inaddr)); strcpy(mailInfo.SMI_CAPTIME,TUTime::YYYYMMDDHHMMSS()); strcpy(mailInfo.SMI_CLNTLOCATION,"-"); strcpy(mailInfo.SMI_CLNTACCOUNT,"-"); strcpy(mailInfo.SMI_CLNTCALLID,"-"); mailInfo.SMI_SPEINFOSTATUS=1; strcpy(mailInfo.SMI_CLNTCALLID,"-"); //m_pInfo->getAccount(m_theHead.src_ip,mailInfo.MIF_CLNTACCOUNT,mailInfo.MIF_CLNTCALLID); //m_pInfo->getLocation(m_theHead.src_ip, mailInfo.MIF_CLNTLOCATION); m_pInfo->getAccount(m_theHead.src_ip,mailInfo.SMI_CLNTACCOUNT,mailInfo.SMI_CLNTCALLID); m_pInfo->getLocation(m_theHead.src_ip, mailInfo.SMI_CLNTLOCATION); m_pTblEmail->insRecord(&mailInfo);}void CAppEmail::saveEmailInfo(int protocol){ struct in_addr inaddr; STRU_TR_T_MAILINFO mailInfo; mailInfo.MIF_ID=m_pSeqEmail->getfkS_TR_T_MAILINFO(); #ifdef DEBUG printf("inf mif_id=[%d]\n",mailInfo.MIF_ID); #endif mailInfo.MLF_ID=m_pSeqEmail->getfkS_TR_T_MAILFILE(); memset(mailInfo.MIF_DATE,0,sizeof(mailInfo.MIF_DATE)); strcpy(mailInfo.MIF_DATE,"-"); getDate(mailInfo.MIF_DATE); memset(mailInfo.MIF_SUBJECT,0,sizeof(mailInfo.MIF_SUBJECT)); strcpy(mailInfo.MIF_SUBJECT,"-"); getSubject(mailInfo.MIF_SUBJECT,sizeof(mailInfo.MIF_SUBJECT)); mailInfo.MIF_PROTOCOL=protocol; inaddr.s_addr = m_theHead.src_ip; sprintf(mailInfo.MIF_CLIENTIP,"%s",inet_ntoa(inaddr)); inaddr.s_addr = m_theHead.dst_ip; sprintf(mailInfo.MIF_SERVERIP,"%s",inet_ntoa(inaddr)); strcpy(mailInfo.MIF_CAPTIME,TUTime::YYYYMMDDHHMMSS()); strcpy(mailInfo.MIF_CLNTLOCATION,"-"); strcpy(mailInfo.MIF_CLNTACCOUNT,"-"); strcpy(mailInfo.MIF_CLNTCALLID,"-"); strcpy(mailInfo.MIF_CLNTCALLID,"-"); m_pInfo->getAccount(m_theHead.src_ip,mailInfo.MIF_CLNTACCOUNT,mailInfo.MIF_CLNTCALLID); m_pInfo->getLocation(m_theHead.src_ip, mailInfo.MIF_CLNTLOCATION); m_pTblEmail->insRecord(&mailInfo);}void CAppEmail::checkKey(){ char *ptr; char szbuf[128]; printf("checkKey...........\n"); ptr=m_prdsip.searchKeyword(1, m_szbuf,m_lendata,szbuf); if(ptr!=NULL) { STRU_TR_T_ALARMEVENT arec; TLog::toLog("(searchedkey ok[%s])\n",szbuf ); arec.ALE_ID=m_pSeqEvent->getS_TR_T_ALARMEVENT(); arec.AMG_ID=EMAIL_SPOBJECT_ID; arec.ALE_ALARMTYPE =1; //arec.ALE_ALARMTYPE =ALARM_KEY_EMAIL; arec.ALE_ALARMSTATUS =1 ; arec.ALE_INFOTYPE=1; arec.ALE_INFOID= m_pSeqEmail->getfkS_TR_T_MAILINFO(); memset(arec.ALE_ALARMCONTENT,0,sizeof(arec.ALE_ALARMCONTENT)); //strncpy(arec.ALE_ALARMCONTENT,ptr,sizeof(arec.ALE_ALARMCONTENT)-1); strcpy(arec.ALE_ALARMCONTENT,szbuf ); strcpy(arec.ALE_ALARMTIME,TUTime::YYYYMMDDHHMMSS()); strcpy(arec.ALE_ALARMTITLE ,"EMAIL KEY"); arec.ALE_FORWARDSTATUS=-1; m_pEvent->insRecord(&arec); } }void CAppEmail::saveEmailText(){//set emailtext STRU_TR_T_MAILTEXT mailText; memset((char *)&mailText,0,sizeof(mailText)); mailText.MTX_ID=m_pSeqEmail->getS_TR_T_MAILTEXT(); mailText.MIF_ID=m_pSeqEmail->getfkS_TR_T_MAILINFO(); m_theEmail->getContentType(mailText.MTX_CONTENTTYPE); m_theEmail->getCharset(mailText.MTX_CHARSET); if(m_lendata<sizeof(mailText.MTX_TEXTBODY)) { memcpy(mailText.MTX_TEXTBODY,m_szbuf,m_lendata); mailText.MTX_TEXTBODY[m_lendata]=0; } else { memcpy(mailText.MTX_TEXTBODY,m_szbuf,sizeof(mailText.MTX_TEXTBODY)-1); mailText.MTX_TEXTBODY[sizeof(mailText.MTX_TEXTBODY)-1]=0; } // TLog::toLog("MTX_ID=[%d]\n",mailText.MTX_ID); // TLog::toLog("mailtext=[%d][%s]\n",m_lendata,mailText.MTX_TEXTBODY); m_pTblEmail->insRecord(&mailText);}void CAppEmail::savespEmailText(){//set emailtext STRU_TR_T_SPEMAILTEXT mailText; memset((char *)&mailText,0,sizeof(mailText)); mailText.SMT_ID=m_pSeqEmail->getS_TR_T_SPEMAILTEXT(); mailText.SMI_ID=m_pSeqEmail->getfkS_TR_T_SPEMAILINFO(); m_theEmail->getContentType(mailText.SMT_CONTENTTYPE); m_theEmail->getCharset(mailText.SMT_CHARSET); if(m_lenbuf<sizeof(mailText.SMT_TEXTBODY)) { memcpy(mailText.SMT_TEXTBODY,m_szbuf,m_lenbuf); mailText.SMT_TEXTBODY[m_lenbuf]=0; } else { memcpy(mailText.SMT_TEXTBODY,m_szbuf,sizeof(mailText.SMT_TEXTBODY)-1); mailText.SMT_TEXTBODY[sizeof(mailText.SMT_TEXTBODY)-1]=0; } m_pTblEmail->insRecord(&mailText);}void CAppEmail::saveNA(int idpt,int idna,char *info,bool bsp){ STRU_TR_T_INETACTION recna; struct in_addr inaddr; recna.INA_ID=m_pseqnet->getS_TR_T_INETACTION(); recna.ACT_ID=idna; recna.CPR_ID=idpt; inaddr.s_addr = m_theHead.src_ip; sprintf(recna.INA_CLIENTIP,"%s",inet_ntoa(inaddr)); inaddr.s_addr = m_theHead.dst_ip; sprintf(recna.INA_SERVERIP,"%s",inet_ntoa(inaddr)); strcpy(recna.INA_CAPTIME,TUTime::YYYYMMDDHHMMSS()); if(info!=NULL) strcpy(recna.INA_ABOUTACTION,info); else strcpy(recna.INA_ABOUTACTION,"-"); strcpy(recna.INA_CLNTLOCATION,"-"); strcpy(recna.INA_CLNTACCOUNT,"-"); strcpy(recna.INA_CLNTCALLID,"-"); strcpy(recna.INA_SRVRLOCATION,"-"); strcpy(recna.INA_SRVRACCOUNT,"-"); strcpy(recna.INA_SRVRCALLID,"-"); //if(bsp) printf("to get acc\n"); { strcpy(recna.INA_SRVRCALLID,"-"); m_pInfo->getAccount(m_theHead.src_ip,recna.INA_CLNTACCOUNT,recna.INA_SRVRCALLID); m_pInfo->getLocation(m_theHead.src_ip, recna.INA_CLNTLOCATION); } printf("to insert netaction record\n"); m_ptblnet->insRecord(&recna);}void CAppEmail::saveFileInfo(){ STRU_TR_T_MAILFILE mailFile; m_pSeqEmail->getS_TR_T_MAILFILE(); mailFile.MLF_ID=m_pSeqEmail->getfkS_TR_T_MAILFILE(); strcpy(mailFile.MIF_ORIGINALFILE,m_ptheFile->getFileName()); mailFile.MIF_FILESIZE=0; mailFile.MIF_FILEBEGIN=m_ptheFile->getFileSize(); if(mailFile.MIF_FILEBEGIN>EMAILFILE_MAX_SIZE) { m_ptheFile->initFile(); mailFile.MIF_FILEBEGIN=0; } m_pTblEmail->insRecord(&mailFile); m_ipk_mailfiles++;}void CAppEmail::savespFileInfo(){ STRU_TR_T_SPEMAILFILE mailFile; //m_pSeqEmail->getS_TR_T_SPEMAILFILE(); mailFile.SMF_ID=m_pSeqEmail->getfkS_TR_T_MAILFILE(); strcpy(mailFile.SMF_ORIGINALFILE,m_ptheFile->getFileName()); mailFile.SMF_FILEBEGIN=m_ptheFile->getFileSize(); mailFile.SMF_FILESIZE=0; m_pTblEmail->insRecord(&mailFile); m_ipk_spmailfiles++;} void CAppEmail::commitFile(){ int id_pk=m_pSeqEmail->getfkS_TR_T_MAILFILE(); int ipartlen=m_ptheFile->saveFile(); for(int i=0;i<m_ipk_mailfiles;i++) m_pTblEmail->updateFileLen(id_pk--,ipartlen); m_ipk_mailfiles=0; if(m_ipk_spmailfiles!=0) m_pTblEmail->updatespFileLen(ipartlen); m_ipk_spmailfiles=0; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -