📄 apphttp.cpp
字号:
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 + -