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

📄 apphttp.cpp

📁 linux 上http email 协议分析程序 主要能够处理大数据量的主干网的应用
💻 CPP
📖 第 1 页 / 共 3 页
字号:
				if(Cval::getNextAtom(pval,aword))		{			if(strcasecmp(aword,"filename"))				return false;			else if(Cval::getNextAtom(pval,aword))			{				Cval::getNextAtom(pval,aword);				if(strlen(aword)>2)				{					strncpy(filename,aword+1,strlen(aword)-2);				}			}			else				return false;		}		else			return false;			return true;}void CAppHttp::profmultiform(){	if(!getBoudary(m_szboudary))	{		return;	}		char *pal=m_theinqStream->gotoMarker(m_szboudary);	while(pal!=NULL)	{		m_theinqStream->gotoNextLine();		if(isavailfilename(m_szfilename))		{			while(m_theinqStream->getLine(m_szline)!=0)			{			}				char *pb=m_theinqStream->getCurPos();			char *pe=m_theinqStream->gotoMarker(m_szboudary);			if(pb!=NULL && pe!=NULL)			{				int len=pe-pb;				char szdir[1024];								strcpy(szdir,m_szinidir);				TU::repchr(m_szfilename,':','-');				TU::repchr(m_szfilename,'\\','_');				char *p=strchr(m_szfilename,':');				if(p)					strcpy(szdir+strlen(szdir),p+1);				else					strcpy(szdir+strlen(szdir),m_szfilename);								registerspPage(szdir,2);				m_theHtmlFile->writeFile(szdir,pb,len);												registerspWatchedObj();							}			if(Cval::isEndBoudary(pe))			{				return;			}		}		else			pal=m_theinqStream->gotoMarker(m_szboudary);	}}bool CAppHttp::getBoudary(char *szbd){        char *pval;        char sz_buf[1024];        //printf("pos ContentType\n");        pval=m_pinqhv->getValue("Content-Type");        if(pval==NULL)                return false;        //printf("content-type=[%s]\n",pval);        while(Cval::getNextAtom(pval,sz_buf))        {                if(strcasecmp(sz_buf,"boundary")==0)                {                        if( Cval::getNextAtom(pval,sz_buf))                        {                                if(*sz_buf=='=')                                {                                        if( Cval::getNextAtom(pval,sz_buf))										{                                                strcpy(szbd,"--");                                                strncpy(szbd+2,sz_buf+1,strlen(sz_buf)-2);                                                szbd[strlen(sz_buf)]=0;                                                return true;                                        }                                        /*strcpy(szbd,"--");                                        strcpy(szbd+2,pval);                                        return true;                                        */                                }                        }                        return false;                }        }        return false;}int CAppHttp::retCode(Cmimestream *ps){	int len;	char szline[1024+1];	while(1)	{		len=ps->getLine(szline);		if(len>10 && memcmp(szline,"HTTP",4)==0)		{			#ifdef DEBUG				printf("retcode line=[%s]\n",szline);			#endif			char *p=strtok(szline," ");			p=strtok(NULL," ");						len=strlen(p);			return atoi(p);			/*for(int i=0;i<len;i++)			{							}*/		}		else if(len<0)		{			return -1;		}	}}bool CAppHttp::profoneRet(){	char *p;	char szbuf[1024];		memset(szbuf,0,sizeof(szbuf));	memcpy(szbuf,m_theretStream->getCurPos(),80);	printf("ret=[%s]\n",szbuf);		int retcode=retCode(m_theretStream);	m_prethv->clear();	m_prethv->setValues(m_theretStream);		//TLog::toErr("ret code=[%d]\n",retcode);	//TLog::toLog	if(retcode==200)	{		#ifdef DEBUG			printf("set ret hv\n");		#endif						//m_theretStream->gotoNextLine();				p=m_prethv->getValue("Content-Length");		if(p!=NULL)		{			m_pszretData=m_theretStream->getCurPos();			m_iretDataLen=atoi(p);			m_theretStream->goaHead(m_iretDataLen);		}		else		{						p=m_prethv->getValue("Transfer-Encoding");			if(p==NULL)			{				m_pszretData=m_theretStream->getCurPos();				m_iretDataLen=m_theretStream->getEndPos()-m_theretStream->getCurPos();			}				else if(strcasecmp(p,"chunked")==0)			{				m_pszretData=m_szbuftmp;				m_iretDataLen=0;				int len=m_theretStream->tmdgetLine(szbuf);				if(len<=0)					return false;				TU::delSpace(szbuf);				len=htoi(szbuf);				printf("hex=[%s],dec=[%d]\n",szbuf,len);				while(len>0)				{					//if(m_iretDataLen+len>=)					memcpy(m_pszretData+m_iretDataLen,m_theretStream->getCurPos(),len);					m_iretDataLen+=len;					m_theretStream->goaHead(len+2);					len=m_theretStream->tmdgetLine(szbuf);					if(len<=0)						return false;					TU::delSpace(szbuf);					len=htoi(szbuf);					printf("hex=[%s],dec=[%d]\n",szbuf,len);					if(len<0)						return false;				}				if(len==0)					len=m_theretStream->tmdgetLine(szbuf);			}			p=m_prethv->getValue("Trailer");			if(p!=NULL)				m_theretStream->gotoNextLine();				}				p=m_prethv->getValue("Content-Encoding");		if(p!=NULL)		{			if(strcasecmp(p,"gzip")==0)			{				int lenhtml=m_pUnzip->unzip(m_pszretData, m_iretDataLen,m_szbuf);				if(lenhtml>0)					m_pszretData=m_szbuf;				else					m_pszretData=NULL;				m_iretDataLen=lenhtml;			}		}		return true;	}	else if(retcode>=100 && retcode<200)	{		m_pszretData=NULL;		m_iretDataLen=0;		return true;	}	else	{		m_pszretData=NULL;		m_iretDataLen=0;		char *p=m_prethv->getValue("Content-Length");		if(p!=NULL)		{			printf("len=[%s]\n",p);			m_pszretData=m_theretStream->getCurPos();			m_iretDataLen=atoi(p);			m_theretStream->goaHead(m_iretDataLen);		}		else if(retcode>=400 && retcode<500)		{			//m_theretStream->gotoMarker(NULL_LINE);			//m_theretStream->goaHead(strlen(NULL_LINE));						//printf("losing len not completed\n");						return false;		}						return true;	}}CAppHttp::CAppHttp(char *filename){	int ishmid,ishmsize;	char buf[128];	char buf1[128];	CConfig cfg;	if(filename==NULL)	{		if (cfg.ReadConfig("../etc/config.ini") != 0)		{			if (cfg.ReadConfig("config.ini") != 0)			{				printf("Read config.ini  Failed!\n");				exit(-1);			//return -1;			}		}	}	else	{		if (cfg.ReadConfig(filename) != 0)		{			printf("Read %s Failed!\n",filename);			exit(-1);		//return -1;		}	}	if(cfg.GetItemValue("DB", "name", buf)!=0)	{		printf("Read DB:id Failed!\n");		exit(-1);	}	if(cfg.GetItemValue("DB", "passwd", buf1)!=0)	{		printf("Read DB:id Failed!\n");		exit(-1);	}	//int isizebuf=10*1024*1024;		COra *db=new COra(buf,buf1);		m_theinqStream=new Cmimestream();	m_theretStream=new Cmimestream();							//base数量 spare数量 	m_theHash=new Chash_v(16*1024,16*1024);	m_pUnzip=new Cunzip();		int isize[]={1024,4*1024,8*1024,16*1024,32*1024,64*1024,128*1024,256*1024,512*1024,1024*1024*4,0};	int icount[]={1024,  512,   256,    128,     64,     64,      64,      64,    64, 6,0}; 	m_theMem=new CMem();	m_theMem->init(icount,isize);	m_theHtmlFile=new CHtmlFile();	m_pEvent=new CTblEvent();	m_pappweb=new CAppWeb();	m_ptblnet=new CTblNet();	m_pseqnet=new CSeqNet();	m_ptblweb=new CTblWeb();	m_pseqweb=new CSeqWeb();		m_psptblweb=new CSpTblWeb();	m_pspseqweb=new CSpSeqWeb();	m_pSeqEvent=new CSeqEvent();	m_ptblssl=new CTblSsl();	m_pseqssl=new CSeqSsl();	m_phpadd=new HttpSpAdd();	m_pSeqSpWarm=new CSeqSpWarm();	m_pTblSpWarm=new CTblSpWarm();			m_szbuf=new char[1024*1024*32];	m_szbuftmp=new char[1024*1024*5];	m_szrcv=new char[1024*1024*5];	m_szsaved=new char[1024*1024*5];	m_pszpostdata=new char[1024*1024*5];	m_punit=new TUnit_v[1024*16];				if(cfg.GetItemValue("COMBINESHM", "key_http", buf)!=0)	{		printf("Read SHM:id Failed!\n");		exit(-1);	}	ishmid=atoi(buf);	if(cfg.GetItemValue("COMBINESHM", "size_http", buf)!=0)	{		printf("Read SHM:size Failed!\n");		exit(-1);	}	ishmsize=atoi(buf)*1024*1024;		m_pshm=new CShmApply();	printf("init shmid \n");	m_pshm->init(ishmid,ishmsize, SHM_APPPERM);	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);	/*if(cfg.GetItemValue("SHM", "rdsid", buf)!=0)	{		printf("Read SHM:rdsid Failed!\n");		exit(-1);	}	ishmid=atoi(buf);	if(cfg.GetItemValue("SHM", "rdssize", buf)!=0)	{		printf("Read SHM:rdssize Failed!\n");		exit(-1);	}	ishmsize=atoi(buf)*1024*1024;	*/	//m_pshmInfo=new CRtRdsIP();	m_pInfo=new CDataInfo();	//m_pshmInfo->init(ishmid,ishmsize);	m_prethv=new Chv();//标头类	m_pinqhv=new Chv();	m_prethv->init("Content-Encoding,Content-Length,Content-Type,Trailer,Transfer-Encoding");		m_pinqhv->init("Host,Connection,Referer,Content-Length,Content-Type,Cookie");			}CAppHttp::~CAppHttp(){		}void CAppHttp::saveNA(int idpt,int idna,char *info){	STRU_TR_T_INETACTION recna;	struct in_addr inaddr;		memset(&recna,0,sizeof(recna));	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(strlen(info)<sizeof(recna.INA_ABOUTACTION))	{		strcpy(recna.INA_ABOUTACTION,info);	}	else	{		memcpy(recna.INA_ABOUTACTION,info,sizeof(recna.INA_ABOUTACTION)-1);		recna.INA_ABOUTACTION[sizeof(recna.INA_ABOUTACTION)-1]=0;	}	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(isspmon(&m_theHead))	{		m_pInfo->getAccount(m_theHead.src_ip, recna.INA_CLNTACCOUNT);		m_pInfo->getLocation(m_theHead.src_ip, recna.INA_CLNTLOCATION);	}		printf("to insert netaction record\n");		m_ptblnet->insRecord(&recna);}bool CAppHttp::availContType(){		if(strcasecmp(m_szmethod,"POST")==0)	{		char *p=m_pinqhv->getValue("Content-Type");		if(p!=NULL)		{			//TLog::toLog("inqContent-Type=[%s]\n",p);		}		m_idataflow=0;		return true;	}	else if(strcasecmp(m_szmethod,"GET")==0)	{		char *p=m_prethv->getValue("Content-Type");		if(p!=NULL)		{			//TLog::toLog("retContent-Type=[%s]\n",p);			m_idataflow=1;			if(strncasecmp(p,"text/html",9)==0)			{				return true;			}		}		return false;	}	return false;}void CAppHttp::reLoad(){	CTblPARA tblpara;	STRU_TR_T_GENERALPARA rec;		if(tblpara.fetchRecord(&rec,"reload_httpinfo")==0)	{		TU::delSpace(rec.GPR_PARAVALUE);		printf("reload value=[%s]\n",rec.GPR_PARAVALUE);		if(*(rec.GPR_PARAVALUE)=='1')		{				printf("reload value=[%s]\n",rec.GPR_PARAVALUE);			delete m_pappweb;			m_pappweb=new CAppWeb();						tblpara.updateValue("0",rec.GPR_ID);		}	}		}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -