00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef __GZ_PROTOCOL_H__
00023 #define __GZ_PROTOCOL_H__
00024
00030 #include "gzSerialize.h"
00031 #include "gzNotify.h"
00032 #include "gzLex.h"
00033 #include "gzNetwork.h"
00034
00035 enum gzParseHttpState
00036 {
00037 GZ_HTTP_PARSE_STATE_RESET,
00038 GZ_HTTP_PARSE_STATE_PUBLIC,
00039 GZ_HTTP_PARSE_STATE_LAST
00040 };
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056 class gzSerializeAdapterHttp : public gzSerializeAdapter ,
00057 public gzNotifyInterface ,
00058 public gzParserFunction<gzSerializeAdapterHttp,gzBasicParser>
00059 {
00060 public:
00061 GZ_DECLARE_TYPE_INTERFACE_EXPORT(GZ_BASE_EXPORT);
00062
00063 GZ_BASE_EXPORT gzSerializeAdapterHttp(const gzString &url,gzSerializeAction action,gzSerializeAdapterFlags flags, const gzString &password);
00064
00065 GZ_BASE_EXPORT virtual ~gzSerializeAdapterHttp();
00066
00067 GZ_BASE_EXPORT virtual gzVoid flush();
00068
00069 GZ_BASE_EXPORT gzBool openURL(const gzString &url);
00070
00071 GZ_PROPERTY_GET_EXPORT( gzString, User ,GZ_BASE_EXPORT);
00072 GZ_PROPERTY_GET_EXPORT( gzString, Password ,GZ_BASE_EXPORT);
00073 GZ_PROPERTY_GET_EXPORT( gzUShort, HostPort ,GZ_BASE_EXPORT);
00074 GZ_PROPERTY_GET_EXPORT( gzString, Host ,GZ_BASE_EXPORT);
00075 GZ_PROPERTY_GET_EXPORT( gzString, Path ,GZ_BASE_EXPORT);
00076
00077 GZ_PROPERTY_EXPORT( gzString, AttributeString ,GZ_BASE_EXPORT);
00078 GZ_PROPERTY_EXPORT( gzULong, MajorVersion ,GZ_BASE_EXPORT);
00079 GZ_PROPERTY_EXPORT( gzULong, MinorVersion ,GZ_BASE_EXPORT);
00080
00081 GZ_PROPERTY_EXPORT( gzString, DefaultUser ,GZ_BASE_EXPORT);
00082 GZ_PROPERTY_EXPORT( gzUShort, DefaultHostPort ,GZ_BASE_EXPORT);
00083
00084
00085 GZ_PROPERTY_GET_EXPORT( gzULong, LastContentLength ,GZ_BASE_EXPORT);
00086 GZ_PROPERTY_GET_EXPORT( gzString, LastContentType ,GZ_BASE_EXPORT);
00087 GZ_PROPERTY_GET_EXPORT( gzString, LastContentBase ,GZ_BASE_EXPORT);
00088 GZ_PROPERTY_GET_EXPORT( gzULong, LastErrorCode ,GZ_BASE_EXPORT);
00089
00090 GZ_BASE_EXPORT gzBool hasPublicMethod(const gzString &methodName);
00091
00092 GZ_BASE_EXPORT gzVoid resetLastError();
00093
00094 protected:
00095
00096
00097 GZ_BASE_EXPORT gzBool waitForAnswer( gzULong timeOut=GZ_SLEEP_INFINITE);
00098
00099 GZ_BASE_EXPORT virtual gzVoid initConnection();
00100 GZ_BASE_EXPORT virtual gzVoid sendOptionRequest();
00101
00102
00103 GZ_BASE_EXPORT virtual gzVoid write_imp(gzUByte data);
00104 GZ_BASE_EXPORT virtual gzUByte read_imp();
00105
00106 GZ_BASE_EXPORT virtual gzVoid write_imp(gzUByte *data,gzULong count);
00107 GZ_BASE_EXPORT virtual gzULong read_imp(gzUByte *data,gzULong maxcount);
00108 GZ_BASE_EXPORT virtual gzULong length_imp();
00109 GZ_BASE_EXPORT virtual gzBool hasData_imp();
00110
00111
00112
00113 GZ_BASE_EXPORT virtual gzParseResult parseMessage();
00114 GZ_BASE_EXPORT virtual gzParseResult parseRequest();
00115 GZ_BASE_EXPORT virtual gzParseResult parseRequestLine();
00116 GZ_BASE_EXPORT virtual gzParseResult parseRequestHeader();
00117 GZ_BASE_EXPORT virtual gzParseResult parseRequestURI();
00118 GZ_BASE_EXPORT virtual gzParseResult parseResponse();
00119 GZ_BASE_EXPORT virtual gzParseResult parseResponseHeader();
00120 GZ_BASE_EXPORT virtual gzParseResult parseGeneralHeader();
00121 GZ_BASE_EXPORT virtual gzParseResult parseEntityHeader();
00122 GZ_BASE_EXPORT virtual gzParseResult parseStatusLine();
00123 GZ_BASE_EXPORT virtual gzParseResult parseMessageBody();
00124 GZ_BASE_EXPORT virtual gzParseResult parseVersion();
00125 GZ_BASE_EXPORT virtual gzParseResult parseStatusCode();
00126 GZ_BASE_EXPORT virtual gzParseResult parseReasonPhrase();
00127 GZ_BASE_EXPORT virtual gzParseResult parseWWWAuthenticate();
00128 GZ_BASE_EXPORT virtual gzParseResult parseAllow();
00129 GZ_BASE_EXPORT virtual gzParseResult parseContentBase();
00130 GZ_BASE_EXPORT virtual gzParseResult parseContentEncoding();
00131 GZ_BASE_EXPORT virtual gzParseResult parseContentLanguage();
00132 GZ_BASE_EXPORT virtual gzParseResult parseContentLength();
00133 GZ_BASE_EXPORT virtual gzParseResult parseContentLocation();
00134 GZ_BASE_EXPORT virtual gzParseResult parseContentType();
00135 GZ_BASE_EXPORT virtual gzParseResult parseExpires();
00136 GZ_BASE_EXPORT virtual gzParseResult parseLastModified();
00137 GZ_BASE_EXPORT virtual gzParseResult parseExtensionHeader();
00138 GZ_BASE_EXPORT virtual gzParseResult parseCacheControl();
00139 GZ_BASE_EXPORT virtual gzParseResult parseConnection();
00140 GZ_BASE_EXPORT virtual gzParseResult parseDate();
00141 GZ_BASE_EXPORT virtual gzParseResult parseVia();
00142 GZ_BASE_EXPORT virtual gzParseResult parseServer();
00143 GZ_BASE_EXPORT virtual gzParseResult parseVary();
00144 GZ_BASE_EXPORT virtual gzParseResult parseRetryAfter();
00145 GZ_BASE_EXPORT virtual gzParseResult parsePublic();
00146 GZ_BASE_EXPORT virtual gzParseResult parseProxyAuthenticate();
00147 GZ_BASE_EXPORT virtual gzParseResult parseLocation();
00148 GZ_BASE_EXPORT virtual gzParseResult parseMethod();
00149 GZ_BASE_EXPORT virtual gzParseResult parseExtensionMethod();
00150 GZ_BASE_EXPORT virtual gzParseResult parseMethodList();
00151 GZ_BASE_EXPORT virtual gzParseResult parseCacheDirectiveList();
00152 GZ_BASE_EXPORT virtual gzParseResult parseCacheDirective();
00153 GZ_BASE_EXPORT virtual gzParseResult parseCacheResponce();
00154 GZ_BASE_EXPORT virtual gzParseResult parseCacheRequest();
00155 GZ_BASE_EXPORT virtual gzParseResult parseFieldNameList();
00156
00157
00158
00159 GZ_BASE_EXPORT gzParseResult parseToken();
00160
00161
00162
00163 GZ_BASE_EXPORT gzParseResult parseDigit_();
00164 GZ_BASE_EXPORT gzParseResult parseHEX_();
00165 GZ_BASE_EXPORT gzParseResult parseToken_();
00166 GZ_BASE_EXPORT gzParseResult parseTokenOrSP_();
00167 GZ_BASE_EXPORT gzParseResult parseLWS();
00168 GZ_BASE_EXPORT gzParseResult parseLWS_();
00169 GZ_BASE_EXPORT gzParseResult parseText();
00170 GZ_BASE_EXPORT gzParseResult parseText_();
00171 GZ_BASE_EXPORT gzParseResult parseTSpecials();
00172 GZ_BASE_EXPORT gzParseResult parseCText();
00173 GZ_BASE_EXPORT gzParseResult parseComment();
00174 GZ_BASE_EXPORT gzParseResult parseDQText();
00175 GZ_BASE_EXPORT gzParseResult parseDQString();
00176 GZ_BASE_EXPORT gzParseResult parseAbsoluteURI();
00177 GZ_BASE_EXPORT gzParseResult parseReserved();
00178 GZ_BASE_EXPORT gzParseResult parseScheme();
00179 GZ_BASE_EXPORT gzParseResult parseScheme_();
00180 GZ_BASE_EXPORT gzParseResult parseUChar();
00181 GZ_BASE_EXPORT gzParseResult parseEscape();
00182 GZ_BASE_EXPORT gzParseResult parseUnreserved();
00183 GZ_BASE_EXPORT gzParseResult parseSafe();
00184 GZ_BASE_EXPORT gzParseResult parseUnsafe();
00185 GZ_BASE_EXPORT gzParseResult parseExtra();
00186 GZ_BASE_EXPORT gzParseResult parseNational();
00187 GZ_BASE_EXPORT gzParseResult parseMediaType();
00188 GZ_BASE_EXPORT gzParseResult parseParameter();
00189 GZ_BASE_EXPORT gzParseResult parseHost();
00190 GZ_BASE_EXPORT gzParseResult parseHostName();
00191 GZ_BASE_EXPORT gzParseResult parseDomainLabel();
00192 GZ_BASE_EXPORT gzParseResult parseTopLabel();
00193 GZ_BASE_EXPORT gzParseResult parseProduct();
00194
00195
00196 GZ_BASE_EXPORT gzBool checkMethod(const gzString &methodName);
00197
00198
00199
00200 GZ_BASE_EXPORT virtual gzVoid onNotify(gzNotifyManager *master,gzRefPointer<gzNotifyMessage> &data,gzULong senderClass);
00201
00202
00203 GZ_BASE_EXPORT virtual gzVoid parseInput(gzUByte *buffer,gzULong len);
00204 GZ_BASE_EXPORT virtual gzVoid onMessageBody(gzUByte *buffer,gzULong len);
00205
00206
00207 gzSocket m_socket;
00208
00209 gzDict<gzString,gzVoid> m_publicMethods;
00210
00211 gzQueue<gzParseHttpState> m_currentState;
00212
00213 gzEvent m_event;
00214
00215 gzULong m_pendingBodyData;
00216
00217 gzMutex m_dataLocker;
00218 };
00219
00220 #endif // __GZ_PROTOCOL_H__