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