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