SNAP Library 2.1, Developer Reference
2013-09-25 10:47:25
SNAP, a general purpose, high performance system for analysis and manipulation of large networks
|
00001 #include "bd.h" 00002 00004 // Http-General 00005 class THttp{ 00006 public: 00007 // general strings 00008 static const TStr HttpStr; 00009 static const TStr SlashStr; 00010 static const TStr ColonStr; 00011 // field names 00012 static const TStr ContTypeFldNm; 00013 static const TStr ContLenFldNm; 00014 static const TStr HostFldNm; 00015 static const TStr AcceptRangesFldNm; 00016 static const TStr CacheCtrlFldNm; 00017 static const TStr AcceptFldNm; 00018 static const TStr SrvFldNm; 00019 static const TStr ConnFldNm; 00020 static const TStr FetchIdFldNm; 00021 static const TStr LocFldNm; 00022 static const TStr SetCookieFldNm; 00023 static const TStr CookieFldNm; 00024 // content-type field-values 00025 static const TStr TextFldVal; 00026 static const TStr TextPlainFldVal; 00027 static const TStr TextHtmlFldVal; 00028 static const TStr TextXmlFldVal; 00029 static const TStr TextWmlFldVal; 00030 static const TStr TextJavaScriptFldVal; 00031 static const TStr TextCssFldVal; 00032 static const TStr ImageIcoFldVal; 00033 static const TStr ImagePngFldVal; 00034 static const TStr ImageGifFldVal; 00035 static const TStr ImageJpgFldVal; 00036 static const TStr AppOctetFldVal; 00037 static const TStr AppSoapXmlFldVal; 00038 static const TStr AppW3FormFldVal; 00039 static const TStr AppJSonFldVal; 00040 static const TStr ConnKeepAliveFldVal; 00041 // file extensions 00042 static bool IsHtmlFExt(const TStr& FExt); 00043 static bool IsGifFExt(const TStr& FExt); 00044 00045 // port number 00046 static const int DfPortN; 00047 // status codes 00048 static const int OkStatusCd; 00049 static const int RedirStatusCd; 00050 static const int BadRqStatusCd; 00051 static const int ErrStatusCd; 00052 static const int ErrNotFoundStatusCd; 00053 static const int InternalErrStatusCd; 00054 static TStr GetReasonPhrase(const int& StatusCd); 00055 // method names 00056 static const TStr GetMethodNm; 00057 static const TStr HeadMethodNm; 00058 static const TStr PostMethodNm; 00059 static const TStr UndefMethodNm; 00060 }; 00061 00063 // Http-Request 00064 typedef enum { 00065 hrmUndef, hrmGet, hrmHead, hrmPost} THttpRqMethod; 00066 00067 ClassTP(THttpRq, PHttpRq)//{ 00068 private: 00069 bool Ok; 00070 bool CompleteP; 00071 int MajorVerN, MinorVerN; 00072 THttpRqMethod Method; 00073 PUrl Url; 00074 TStrStrH FldNmToValH; 00075 PUrlEnv UrlEnv; 00076 TStr HdStr; 00077 TMem BodyMem; 00078 void ParseSearch(const TStr& SearchStr); 00079 void ParseHttpRq(const PSIn& SIn); 00080 public: 00081 THttpRq(const PSIn& SIn); 00082 static PHttpRq New(const PSIn& SIn){ 00083 return PHttpRq(new THttpRq(SIn));} 00084 THttpRq( 00085 const THttpRqMethod& _Method, const PUrl& _Url, 00086 const TStr& ContTypeFldVal, const TMem& _BodyMem, const int& FetchId=-1); 00087 static PHttpRq New( 00088 const THttpRqMethod& Method, const PUrl& Url, 00089 const TStr& ContTypeFldVal, const TMem& BodyMem){ 00090 return PHttpRq(new THttpRq(Method, Url, ContTypeFldVal, BodyMem));} 00091 static PHttpRq New(const PUrl& Url, const int& FetchId=-1){ 00092 return PHttpRq(new THttpRq(hrmGet, Url, "", TMem(), FetchId));} 00093 ~THttpRq(){} 00094 THttpRq(TSIn&){Fail;} 00095 static PHttpRq Load(TSIn&){Fail; return NULL;} 00096 void Save(TSOut&){Fail;} 00097 00098 THttpRq& operator=(const THttpRq&){Fail; return *this;} 00099 00100 // component-retrieval 00101 bool IsOk() const {return Ok;} 00102 bool IsComplete() const {return CompleteP;} 00103 THttpRqMethod GetMethod() const {return Method;} 00104 const TStr& GetMethodNm() const; 00105 PUrl GetUrl() const {return Url;} 00106 PUrlEnv GetUrlEnv() const {return UrlEnv;} 00107 bool IsFldNm(const TStr& FldNm) const; 00108 TStr GetFldVal(const TStr& FldNm) const; 00109 bool IsFldVal(const TStr& FldNm, const TStr& FldVal) const; 00110 void AddFldVal(const TStr& FldNm, const TStr& FldVal); 00111 const TStrStrH& GetFldValH() const; 00112 00113 // header & body 00114 TStr GetHdStr() const {return HdStr;} 00115 bool IsBody() const { return !BodyMem.Empty(); } 00116 int GetBodyLen() const { return BodyMem.Len(); } 00117 TStr GetBodyAsStr() const { return BodyMem.GetAsStr(' ');} 00118 PSIn GetBodyAsSIn() const { return TMemIn::New(BodyMem); } 00119 void GetBodyAsMem(TMem& Mem) const {Mem.Clr(); Mem += BodyMem;} 00120 void GetAsMem(TMem& Mem) const {Mem.Clr(); Mem+=HdStr; Mem+=BodyMem;} 00121 00122 // content-type 00123 bool IsContType(const TStr& ContTypeStr) const { 00124 return GetFldVal(THttp::ContTypeFldNm).IsStrIn(ContTypeStr);} 00125 bool IsContLen(int& ContLen) const { 00126 return GetFldVal(THttp::ContLenFldNm).IsInt(ContLen);} 00127 00128 // string representation 00129 TStr GetStr() const; 00130 }; 00131 00133 // Http-Response 00134 ClassTP(THttpResp, PHttpResp)//{ 00135 private: 00136 bool Ok; 00137 int MajorVerN, MinorVerN; 00138 int StatusCd; 00139 TStr ReasonPhrase; 00140 TStrStrVH FldNmToValVH; 00141 TStr HdStr; 00142 TMem BodyMem; 00143 void AddHdFld(const TStr& FldNm, const TStr& FldVal, TChA& HdChA); 00144 void ParseHttpResp(const PSIn& SIn); 00145 public: 00146 THttpResp(const int& _StatusCd, const TStr& ContTypeVal, 00147 const bool& CacheCtrlP, const PSIn& BodySIn, const TStr LocStr); 00148 static PHttpResp New(const int& StatusCd, const TStr& ContTypeVal, 00149 const bool& CacheCtrlP, const PSIn& BodySIn, const TStr LocStr=TStr()){ 00150 return PHttpResp(new 00151 THttpResp(StatusCd, ContTypeVal, CacheCtrlP, BodySIn, LocStr));} 00152 THttpResp(const PSIn& SIn); 00153 static PHttpResp New(const PSIn& SIn){ 00154 return PHttpResp(new THttpResp(SIn));} 00155 ~THttpResp(){} 00156 THttpResp(TSIn&){Fail;} 00157 static PHttpResp Load(TSIn&){Fail; return NULL;} 00158 void Save(TSOut&){Fail;} 00159 00160 THttpResp& operator=(const THttpResp&){Fail; return *this;} 00161 00162 bool IsOk() const {return Ok;} 00163 int Len() const {return HdStr.Len()+BodyMem.Len();} 00164 bool IsContLenOk() const {int ContLen; 00165 return IsOk()&&IsContLen(ContLen)&&(ContLen==BodyMem.Len());} 00166 void GetAsMem(TMem& Mem) const { 00167 Mem.Clr(); Mem+=HdStr; Mem+=BodyMem;} 00168 TStr GetHdStr() const {return HdStr;} 00169 const TMem& GetBodyAsMem() const {return BodyMem;} 00170 TStr GetBodyAsStr() const {return BodyMem.GetAsStr(' ');} 00171 PSIn GetBodyAsSIn() const {return BodyMem.GetSIn(); } 00172 int GetStatusCd() const {return StatusCd;} 00173 TStr GetReasonPhrase() const {return THttp::GetReasonPhrase(StatusCd);} 00174 int GetFlds() const {return FldNmToValVH.Len();} 00175 int GetFldVals(const int& FldN) const { 00176 return FldNmToValVH[FldN].Len();} 00177 void GetFldNmVal(const int& FldN, TStr& FldNm, TStr& FldVal){ 00178 FldNm=FldNmToValVH.GetKey(FldN); FldVal=FldNmToValVH[FldN][0];} 00179 void GetFldNmVal(const int& FldN, const int& ValN, TStr& FldNm, TStr& FldVal){ 00180 FldNm=FldNmToValVH.GetKey(FldN); FldVal=FldNmToValVH[FldN][ValN];} 00181 bool IsFldNm(const TStr& FldNm) const; 00182 TStr GetFldVal(const TStr& FldNm, const int& ValN=0) const; 00183 void GetFldValV(const TStr& FldNm, TStrV& FldValV) const; 00184 bool IsFldVal(const TStr& FldNm, const TStr& FldVal) const; 00185 void AddFldVal(const TStr& FldNm, const TStr& FldVal); 00186 00187 bool IsStatusCd_Ok() const { 00188 return IsOk() && (GetStatusCd()/100==THttp::OkStatusCd/100);} 00189 bool IsStatusCd_Redir() const { 00190 return IsOk() && (GetStatusCd()/100==THttp::RedirStatusCd/100);} 00191 00192 bool IsContType() const { 00193 return IsFldNm(THttp::ContTypeFldNm);} 00194 bool IsContType(const TStr& ContTypeStr) const { 00195 return GetFldVal(THttp::ContTypeFldNm).IsStrIn(ContTypeStr);} 00196 bool IsContLen(int& ContLen) const { 00197 return GetFldVal(THttp::ContLenFldNm).IsInt(ContLen);} 00198 TStr GetSrvNm() const { 00199 return GetFldVal(THttp::SrvFldNm);} 00200 void GetCookieKeyValDmPathQuV(TStrQuV& CookieKeyValDmPathQuV); 00201 00202 int GetTxtLen() const {return HdStr.Len()+BodyMem.Len();} 00203 static PHttpResp LoadTxt(PSIn& SIn){ 00204 return new THttpResp(SIn);} 00205 void SaveTxt(const PSOut& SOut) const { 00206 HdStr.SaveTxt(SOut); BodyMem.SaveMem(SOut);} 00207 void SaveBody(const PSOut& SOut) const { 00208 BodyMem.SaveMem(SOut);} 00209 00210 PSIn GetSIn() const; 00211 }; 00212