appweb.cpp
来自「linux 上http email 协议分析程序 主要能够处理大数据量的主干网」· C++ 代码 · 共 294 行
CPP
294 行
#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <time.h>#include <string.h>#include <assert.h>#include <string.h>#include <netinet/in.h>#include <arpa/inet.h>#include <BaseConst.h>#include <UTF8Util.h>#include <Utility.h>#include "AppWeb.h"#include "Db.h"#include "Consts.h"CAppWeb::~CAppWeb(){ if(m_pstAppWeb!=NULL) { for(int i=0;i<m_itotmonrule;i++) { delete (m_pstAppWeb+i)->pfield; } delete m_pstAppWeb; }}CAppWeb::CAppWeb(){ int iii; CTblWebApp tblweb; m_itotmonrule=tblweb.totCount_TR_T_WEBMONRULE(); if( m_itotmonrule<=0) return; m_pstAppWeb=new STRU_APPWEB[m_itotmonrule]; assert(m_pstAppWeb!=NULL); iii=0; for(iii=0;iii<m_itotmonrule;iii++) { tblweb.fetchRecord(&((m_pstAppWeb+iii)->rule)); TU::delSpace((m_pstAppWeb+iii)->rule.WMR_URLFEATURE); printf("[%d][%d,%d][%s]\n",iii,(m_pstAppWeb+iii)->rule.WMR_CAPCALL,(m_pstAppWeb+iii)->rule.WMR_CAPCOOKIE,(m_pstAppWeb+iii)->rule.WMR_URLFEATURE); TLog::toErr("[%d][%d,%d] [%s]\n",iii,(m_pstAppWeb+iii)->rule.WMR_CAPCALL,(m_pstAppWeb+iii)->rule.WMR_CAPCOOKIE,(m_pstAppWeb+iii)->rule.WMR_URLFEATURE); } tblweb.closeCur(); for( iii=0;iii<m_itotmonrule;iii++) { (m_pstAppWeb+iii)->totfield=tblweb.totCount_TR_T_SUBMITRULE((m_pstAppWeb+iii)->rule.WMR_ID); (m_pstAppWeb+iii)->pfield=new STRU_TR_T_SUBMITRULE[(m_pstAppWeb+iii)->totfield]; assert((m_pstAppWeb+iii)->pfield!=NULL); printf("[%d][%d][%s]\n",iii,(m_pstAppWeb+iii)->totfield,(m_pstAppWeb+iii)->rule.WMR_URLFEATURE); TLog::toErr("[%d][%d][%s]\n",iii,(m_pstAppWeb+iii)->totfield,(m_pstAppWeb+iii)->rule.WMR_URLFEATURE); } for( iii=0;iii<m_itotmonrule;iii++) { STRU_TR_T_SUBMITRULE *pfield=(m_pstAppWeb+iii)->pfield; int id=(m_pstAppWeb+iii)->rule.WMR_ID; for(int j=0;j<(m_pstAppWeb+iii)->totfield;j++) { tblweb.fetchRecord((pfield+j),id); TU::delSpace((pfield+j)->SBR_SUBMITFIELD); TU::delSpace((pfield+j)->SBR_APPFIELD); printf("[%d][%d][%d][%d][%s]",iii,(m_pstAppWeb+iii)->totfield,j,id,(m_pstAppWeb+iii)->rule.WMR_URLFEATURE); TLog::toErr("[%d][%d][%d][%d][%s]",iii,(m_pstAppWeb+iii)->totfield,j,id,(m_pstAppWeb+iii)->rule.WMR_URLFEATURE); printf("[%s][%s][%d]\n",(pfield+j)->SBR_SUBMITFIELD,(pfield+j)->SBR_APPFIELD,(pfield+j)->SBR_SUBMITWAY); TLog::toErr("[%s][%s][%d]\n",(pfield+j)->SBR_SUBMITFIELD,(pfield+j)->SBR_APPFIELD,(pfield+j)->SBR_SUBMITWAY); } tblweb.closeCur(); }}bool CAppWeb::setcurUrlID(char *szurl){ int i; TLog::toLog("to search url[%s]\n",szurl); m_wpid=-1; for(i=0;i<m_itotmonrule;i++) { //printf("check url[%s]-[%s]\n",url,(m_pstAppWeb+i)->rule.WMR_URLFEATURE); if(strstr(szurl,(m_pstAppWeb+i)->rule.WMR_URLFEATURE)!=NULL) { //recna.ACT_ID=(m_pstAppWeb+i)->rule.ACT_ID; TLog::toLog("identical[%d][%s][%s]\n",i,szurl,(m_pstAppWeb+i)->rule.WMR_URLFEATURE); printf("----------------check url is identical--------------"); printf("[%s][%s]\n",szurl,(m_pstAppWeb+i)->rule.WMR_URLFEATURE); m_wpid=i; return true; } } return false; }bool CAppWeb::matchedUrl(){ if(m_wpid<0) return false; return true;}/*bool CAppWeb::ismatchUrl(char *url,int *pactid,int *pwapid){ int i; //TLog::toLog("identical[%d][%s][%s]\n",i,url,(m_pstAppWeb+i)->rule.WMR_URLFEATURE); m_wpid=-1; for(i=0;i<m_itotmonrule;i++) { //printf("check url[%s]-[%s]\n",url,(m_pstAppWeb+i)->rule.WMR_URLFEATURE); if(strstr(url,(m_pstAppWeb+i)->rule.WMR_URLFEATURE)!=NULL) { //recna.ACT_ID=(m_pstAppWeb+i)->rule.ACT_ID; //TLog::toLog("identical[%d][%s][%s]\n",i,url,(m_pstAppWeb+i)->rule.WMR_URLFEATURE); printf("----------------check url is identical--------------"); printf("[%s][%s]\n",url,(m_pstAppWeb+i)->rule.WMR_URLFEATURE); *pactid=(m_pstAppWeb+i)->rule.ACT_ID; *pwapid=(m_pstAppWeb+i)->rule.WAP_ID; m_wpid=i; return true; } } return false; }*/int CAppWeb::getACT_ID(){ assert(m_wpid>=0); return (m_pstAppWeb+m_wpid)->rule.ACT_ID;}int CAppWeb::getWAP_ID(){ assert(m_wpid>=0); return (m_pstAppWeb+m_wpid)->rule.WAP_ID;} bool CAppWeb::initSubmitContent(char *pcontent, char* separators,int way){ if(m_wpid>=m_itotmonrule || m_wpid<0) return false; #ifdef DEBUG TLog::toLog("bef=[%s]",pcontent); #endif hex2ascii(pcontent,strlen(pcontent),m_szcontent,sizeof(m_szcontent)-1); #ifdef DEBUG TLog::toLog("aft=[%s]",m_szcontent); #endif //strcpy(m_szcontent,pcontent); //m_wpid=id; m_bfirst=true; m_SBR_SUBMITWAY=way; strncpy(m_szseparators,separators,sizeof(m_szseparators)-1); return true; }bool CAppWeb::setVal(){ int len; char *pv=strchr(m_pszone,'='); if(pv==NULL) return false; len=pv-m_pszone; #ifdef DEBUG printf("hd len=[%d]\n",len); #endif if(len>sizeof(m_szname)-1) return false; memcpy(m_szname,m_pszone,len); m_szname[len]=0; TU::delSpace(m_szname); *m_szvalue=0; int vlen=strlen(pv)-1; /*#ifdef DEBUG printf("v len=[%d]\n",vlen); #endif*/ if(vlen>=0 && vlen<=sizeof(m_szvalue)-1 ) { strcpy(m_szvalue,pv+1); } else { memcpy(m_szvalue,pv+1,sizeof(m_szvalue)-1); m_szvalue[sizeof(m_szvalue)-1]=0; } printf("[%s]=[%s]\n",m_szname,m_szvalue); return true;}bool CAppWeb::getNextContent(){ while(1) { if(m_bfirst) { m_pszone=strtok(m_szcontent,m_szseparators); m_bfirst=false; } else m_pszone=strtok(NULL,m_szseparators); if(m_pszone==NULL) return false; if(setVal()) return true; } }bool CAppWeb::matchWP(char *name,int lenname,char *val ,int lenval){ STRU_TR_T_SUBMITRULE *pfield=m_pstAppWeb[m_wpid].pfield; if(m_wpid<0) return false; for(int i=0;i<m_pstAppWeb[m_wpid].totfield;i++) { #ifdef DEBUG //printf("[%d] [%s]\n",(pfield+i)->SBR_SUBMITWAY,(pfield+i)->SBR_SUBMITFIELD); #endif if((pfield+i)->SBR_SUBMITWAY==m_SBR_SUBMITWAY) { if(strcmp((pfield+i)->SBR_SUBMITFIELD,m_szname)==0) { strcpy(name ,(pfield+i)->SBR_APPFIELD); strncpy(val,m_szvalue,lenval); //hex2ascii(m_szvalue,strlen(m_szvalue),val,lenval); #ifdef DEBUG printf("matched web value szname=[%s] savalue=[%s]\n",name,val); #endif return true; } } } return false; }//short WMR_CAPCALL;//0 表示只捕捉设定的字段 1 表示捕捉全部字段//short WMR_CAPCOOKIE;//0 表示不捕捉cookie 1 表示捉cookiebool CAppWeb::isCAPALL(){ if(m_wpid<0) return false; if(m_pstAppWeb[m_wpid].rule.WMR_CAPCALL==0) return false; else return true;}bool CAppWeb::isCAPCOOKIE(){ if(m_wpid<0) return false; if(m_pstAppWeb[m_wpid].rule.WMR_CAPCOOKIE==0) return false; else return true;}void CAppWeb::setWP(char *name,int lenname,char *val ,int lenval){ //hex2ascii(m_szname,strlen(m_szname),name,lenname); //hex2ascii(m_szval,strlen(m_szval),val,lenval); strncpy(name,m_szname,lenname); strncpy(val,m_szvalue,lenval);}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?