00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef __PLUGINS_WEBVIEW_REPLY_H_
00024 #define __PLUGINS_WEBVIEW_REPLY_H_
00025
00026 #include <map>
00027 #include <string>
00028
00029 class WebReply
00030 {
00031 public:
00032
00033 typedef enum {
00034 HTTP_CONTINUE = 100,
00035 HTTP_SWITCHING_PROTOCOLS = 101,
00036 HTTP_PROCESSING = 102,
00037
00038 HTTP_OK = 200,
00039 HTTP_CREATED = 201,
00040 HTTP_ACCEPTED = 202,
00041 HTTP_NON_AUTHORITATIVE_INFORMATION = 203,
00042 HTTP_NO_CONTENT = 204,
00043 HTTP_RESET_CONTENT = 205,
00044 HTTP_PARTIAL_CONTENT = 206,
00045 HTTP_MULTI_STATUS = 207,
00046
00047 HTTP_MULTIPLE_CHOICES = 300,
00048 HTTP_MOVED_PERMANENTLY = 301,
00049 HTTP_FOUND = 302,
00050 HTTP_SEE_OTHER = 303,
00051 HTTP_NOT_MODIFIED = 304,
00052 HTTP_USE_PROXY = 305,
00053 HTTP_SWITCH_PROXY = 306,
00054 HTTP_TEMPORARY_REDIRECT = 307,
00055
00056 HTTP_BAD_REQUEST = 400,
00057 HTTP_UNAUTHORIZED = 401,
00058 HTTP_PAYMENT_REQUIRED = 402,
00059 HTTP_FORBIDDEN = 403,
00060 HTTP_NOT_FOUND = 404,
00061 HTTP_METHOD_NOT_ALLOWED = 405,
00062 HTTP_METHOD_NOT_ACCEPTABLE = 406,
00063 HTTP_PROXY_AUTHENTICATION_REQUIRED = 407,
00064 HTTP_REQUEST_TIMEOUT = 408,
00065 HTTP_CONFLICT = 409,
00066 HTTP_GONE = 410,
00067 HTTP_LENGTH_REQUIRED = 411,
00068 HTTP_PRECONDITION_FAILED = 412,
00069 HTTP_REQUEST_ENTITY_TOO_LARGE = 413,
00070 HTTP_REQUEST_URI_TOO_LONG = 414,
00071 HTTP_UNSUPPORTED_MEDIA_TYPE = 415,
00072 HTTP_REQUESTED_RANGE_NOT_SATISFIABLE = 416,
00073 HTTP_EXPECTATION_FAILED = 417,
00074 HTTP_UNPROCESSABLE_ENTITY = 422,
00075 HTTP_LOCKED = 423,
00076 HTTP_FAILED_DEPENDENCY = 424,
00077 HTTP_UNORDERED_COLLECTION = 425,
00078 HTTP_UPGRADE_REQUIRED = 426,
00079 HTTP_RETRY_WITH = 449,
00080
00081 HTTP_INTERNAL_SERVER_ERROR = 500,
00082 HTTP_NOT_IMPLEMENTED = 501,
00083 HTTP_BAD_GATEWAY = 502,
00084 HTTP_SERVICE_UNAVAILABLE = 503,
00085 HTTP_GATEWAY_TIMEOUT = 504,
00086 HTTP_HTTP_VERSION_NOT_SUPPORTED = 505,
00087 HTTP_VARIANT_ALSO_NEGOTIATES = 506,
00088 HTTP_INSUFFICIENT_STORAGE = 507,
00089 HTTP_BANDWIDTH_LIMIT_EXCEEDED = 509,
00090 HTTP_NOT_EXTENDED = 510
00091 } response_code_t;
00092
00093
00094 typedef std::map<std::string, std::string> HeaderMap;
00095
00096 WebReply(response_code_t code);
00097 virtual ~WebReply();
00098
00099 response_code_t code() const;
00100 void add_header(std::string header, std::string content);
00101 const HeaderMap & headers() const;
00102
00103
00104 private:
00105 response_code_t __code;
00106 HeaderMap __headers;
00107 };
00108
00109 class DynamicWebReply : public WebReply
00110 {
00111 public:
00112 DynamicWebReply(response_code_t code);
00113
00114 virtual size_t chunk_size();
00115 virtual size_t size() = 0;
00116 virtual size_t next_chunk(size_t pos, char *buffer, size_t buf_max_size) = 0;
00117 };
00118
00119 class StaticWebReply : public WebReply
00120 {
00121 public:
00122 StaticWebReply(response_code_t code, std::string body = "");
00123
00124 void append_body(const char *format, ...);
00125 StaticWebReply & operator+=(std::string text);
00126
00127 virtual const std::string & body();
00128 virtual std::string::size_type body_length();
00129
00130 virtual void pack();
00131 protected:
00132
00133 std::string _body;
00134 };
00135
00136 #endif