⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 appemail.cpp

📁 linux 上http email 协议分析程序 主要能够处理大数据量的主干网的应用
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	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 + -