00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef zz_http_request_h
00010 #define zz_http_request_h
00011
00012 #include <zz_socket.h>
00013 #include <zz_buffer.h>
00014 #include <zz_string.h>
00015 #include <zz_mime_body.h>
00016 #include <map>
00017 #include <zz_export.h>
00018
00019
00020 typedef enum
00021 {
00022 ZZ_HTTP_ENCODE_TYPE_URLENCODED,
00023 ZZ_HTTP_ENCODE_TYPE_MULTIPART,
00024 ZZ_HTTP_ENCODE_TYPE_INVALID
00025
00026 } ZZ_HTTP_ENCODE_TYPE;
00027
00028 static char* zz_http_encode_type[] =
00029 {
00030 "application/x-www-form-urlencoded",
00031 "multipart/form-data",
00032 "<not supported>"
00033 };
00034
00035
00036 typedef enum
00037 {
00038 ZZ_HTTP_CMD_GET,
00039 ZZ_HTTP_CMD_POST,
00040 ZZ_HTTP_CMD_HEAD,
00041 ZZ_HTTP_CMD_INVALID
00042
00043 } ZZ_HTTP_CMD;
00044
00045 static char* zz_http_command[] =
00046 {
00047 "GET",
00048 "POST",
00049 "HEAD",
00050 "<not supported>"
00051 };
00052
00053 typedef map<CzzString, CzzString > CzzHTTPHeaders;
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068 class ZZ_API CzzHTTPRequest
00069 {
00070 public:
00071
00072
00073
00074
00075 CzzHTTPRequest( CzzBuffer* buffer, CzzSocket* reqsock );
00076
00077
00078 virtual ~CzzHTTPRequest();
00079
00080
00081 ZZ_HTTP_CMD getCommand( void );
00082
00083
00084 CzzString& getUri( void );
00085
00086
00087 CzzString getCGIParameter( const CzzString& name
00088 );
00089
00090
00091 CzzString& getHostName( void );
00092
00093
00094 CzzHTTPHeaders& getHeaders( void );
00095
00096
00097 void writeToFile( const CzzString& cgi_name,
00098 const CzzString& local_path
00099 );
00100
00101 ZZ_HTTP_ENCODE_TYPE getType( void );
00102 CzzString& getStringBuffer( void );
00103 CzzBuffer* getBuffer( void );
00104 CzzString getProtocol( void );
00105 CzzString getUserAgent( void );
00106 CzzString getReferer( void );
00107 CzzString getUser( void );
00108 unsigned __int64 getConnectionTime( void );
00109 CzzSocket* getSocket( void );
00110
00111 private:
00112
00113 void parseBuffer( void );
00114 CzzString copyReadFromStart( char* raw, long from, long to );
00115 void checkCommand( CzzString& line );
00116 int findAndParseHeaders( CzzString& type );
00117 unsigned __int64 getTime( void );
00118
00119 CzzBuffer* m_Buffer;
00120 CzzString m_StringBuffer;
00121 CzzString m_HostName;
00122 ZZ_HTTP_CMD m_Command;
00123 ZZ_HTTP_ENCODE_TYPE m_Type;
00124 CzzMIMEBody* m_MIME;
00125 CzzString m_Uri;
00126 CzzString m_Proto;
00127 CzzHTTPHeaders m_Headers;
00128 time_t m_ConnectionTime;
00129 CzzSocket* m_RequestSocket;
00130 };
00131
00132 #endif // zz_http_request_h
00133
00134
00135