00001
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 #ifndef _SOCKETS_HttpdSocket_H
00031 #define _SOCKETS_HttpdSocket_H
00032
00033 #include "sockets-config.h"
00034 #include "HTTPSocket.h"
00035 #include "ISocketHandler.h"
00036
00037 #ifdef SOCKETS_NAMESPACE
00038 namespace SOCKETS_NAMESPACE {
00039 #endif
00040
00041
00042 class HttpdCookies;
00043 class HttpdForm;
00044 class IFile;
00045
00049 class HttpdSocket : public HTTPSocket
00050 {
00051 public:
00052 HttpdSocket(ISocketHandler& );
00053 ~HttpdSocket();
00054
00055 void OnFirst();
00056 void OnHeader(const std::string& key,const std::string& value);
00057 void OnHeaderComplete();
00058 void OnData(const char *,size_t);
00059
00062 virtual void Exec() = 0;
00064 const std::string& GetHttpDate() const;
00066 HttpdCookies *GetCookies();
00068 const HttpdForm *GetForm() const;
00069
00070 size_t ContentLength() const { return m_content_length; }
00071 const IFile *Body() const { return m_file; }
00072 int RequestId() const { return m_request_id; }
00073
00074 protected:
00075 HttpdSocket(const HttpdSocket& s) : HTTPSocket(s) {}
00079 void Send64(const std::string& str64, const std::string& type);
00080 std::string datetime2httpdate(const std::string& dt);
00081 std::string GetDate();
00082 void Reset();
00083
00084 std::string m_http_cookie;
00085 std::string m_content_type;
00086 std::string m_content_length_str;
00087 std::string m_if_modified_since;
00088
00089 private:
00090 HttpdSocket& operator=(const HttpdSocket& s) { return *this; }
00091 static int m_request_count;
00092 static std::string m_start;
00093 size_t m_content_length;
00094 IFile *m_file;
00095 size_t m_received;
00096 int m_request_id;
00097 std::string m_http_date;
00098 HttpdCookies *m_cookies;
00099 HttpdForm *m_form;
00100 };
00101
00102
00103 #ifdef SOCKETS_NAMESPACE
00104 }
00105 #endif
00106
00107 #endif // _SOCKETS_HttpdSocket_H
00108