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 size_t ContentLength() const { return m_content_length; }
00069 const IFile *Body() const { return m_file; }
00070 int RequestId() const { return m_request_id; }
00071
00072 protected:
00073 HttpdSocket(const HttpdSocket& s) : HTTPSocket(s) {}
00077 void Send64(const std::string& str64, const std::string& type);
00078 std::string datetime2httpdate(const std::string& dt);
00079 std::string GetDate();
00080 void Reset();
00081
00082 std::string m_http_cookie;
00083 std::string m_content_type;
00084 std::string m_content_length_str;
00085 std::string m_if_modified_since;
00086
00087 private:
00088 HttpdSocket& operator=(const HttpdSocket& s) { return *this; }
00089 static int m_request_count;
00090 static std::string m_start;
00091 size_t m_content_length;
00092 IFile *m_file;
00093 size_t m_received;
00094 int m_request_id;
00095 std::string m_http_date;
00096 HttpdCookies *m_cookies;
00097 HttpdForm *m_form;
00098 };
00099
00100
00101 #ifdef SOCKETS_NAMESPACE
00102 }
00103 #endif
00104
00105 #endif // _SOCKETS_HttpdSocket_H
00106