Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 #ifndef AbstractHTTPDataH
00033 #define AbstractHTTPDataH
00034
00035 #include <zeusbase/System/Interfaces/IZUnknown.hpp>
00036 #include <zeusbase/Net/Protocols/HTTPDefines.hpp>
00037 #include <zeusbase/System/ZObject.h>
00038 #include <zeusbase/System/String.h>
00039 #include <zeusbase/System/StringList.h>
00040 #include <zeusbase/System/StringMap.hpp>
00041 #include <zeusbase/System/Queue.hpp>
00042
00043
00044 BEGIN_NAMESPACE_Zeus
00045
00046
00047
00050
00051 zeusbase_class TAbstractHTTPData : public TZObject
00052 {
00053 public:
00054
00055
00058
00059 enum EGeneralProperty
00060 {
00061
00062 etDate = 0,
00063 etPargma = 1,
00064
00065
00066 etMIMEVersion = 2
00067 };
00068
00069
00072
00073 enum EEntityProperty
00074 {
00075
00076 etAllow = 0,
00077 etContentEncoding = 1,
00078 etContentLength = 2,
00079 etContentType = 3,
00080 etExpires = 4,
00081 etLastModified = 5,
00082
00083
00084 etContentLanguage = 6,
00085 etLink = 7,
00086 etTitle = 8,
00087 etURI = 9
00088 };
00089
00090 TAbstractHTTPData(THTTProtocol::EHTTPVersion eVersion);
00091
00092
00093 virtual void reset();
00094 virtual Retval setGeneralProperty(EGeneralProperty eType, const IString& rValue);
00095 virtual Retval setEntityProperty(EEntityProperty eType, const IString& rValue);
00096
00097 virtual void clearProperties();
00098 virtual TString getData() const;
00099 virtual TString getProperty(const IString& rName) const;
00100 virtual TString getProtocol() const;
00101 virtual THTTProtocol::EHTTPVersion getVersion() const;
00102 virtual bool hasProperties() const;
00103 virtual void setData(const IString& rData, bool bAddContentProperties = true);
00104 virtual void setDataWithContentType(const IString& rData, const IString& rType);
00105 virtual void setProperty(const IString& rName, const IString& rValue);
00106
00107 protected:
00109 TString m_strProtocol;
00111 THTTProtocol::EHTTPVersion m_eVersion;
00113 TString m_strData;
00115 TStringList m_lstPropertyNames;
00117 TStringMap<TString> m_mapProperties;
00118
00119
00122
00123 struct TypeToken
00124 {
00126 Uint uiType;
00128 TString strData;
00129
00130
00133
00134 TypeToken()
00135 {
00136 uiType = HTTP_TOKEN_DATA;
00137 }
00138
00139
00142
00143 bool operator==(const TypeToken& inpar)
00144 {
00145 return (uiType == inpar.uiType &&
00146 strData == inpar.strData);
00147 }
00148 };
00149
00150 virtual ~TAbstractHTTPData();
00151 void setVersion(THTTProtocol::EHTTPVersion eVersion);
00152
00153 static void parsePropertyData(TAbstractHTTPData& rHTTPData,
00154 Uint& ulParseState,
00155 TypeToken& rToken,
00156 TString& rPropertyName,
00157 TString& rPropertyValue);
00158 static bool scanHTTPData(char* pBuffer, Int iSize, TQueue<TypeToken>& rQueue);
00159 static void printTokens(TQueue<TypeToken> rQueue);
00160
00161 private:
00162 static void addDataToToken(char* pBuffer, Int iFormIndex, Int iToIndex, TQueue<TypeToken>& rQueue);
00163
00164
00165 TAbstractHTTPData(const TAbstractHTTPData& ) {}
00166 TAbstractHTTPData& operator=(const TAbstractHTTPData& ) { return *this; }
00167
00168 };
00169
00170
00171
00174
00175 inline TString TAbstractHTTPData::getData() const
00176 { return m_strData; }
00177
00178
00181
00182 inline TString TAbstractHTTPData::getProtocol() const
00183 {
00184 return m_strProtocol;
00185 }
00186
00187
00190
00191 inline THTTProtocol::EHTTPVersion TAbstractHTTPData::getVersion() const
00192 {
00193 return m_eVersion;
00194 }
00195
00196
00199
00200 inline bool TAbstractHTTPData::hasProperties() const
00201 {
00202 return (m_mapProperties.getCount() > 0);
00203 }
00204
00205
00206 END_NAMESPACE_Zeus
00207
00208 #endif