diff options
author | Chris Wilson <chris+github@qwirx.com> | 2009-01-03 04:00:17 +0000 |
---|---|---|
committer | Chris Wilson <chris+github@qwirx.com> | 2009-01-03 04:00:17 +0000 |
commit | b7c52100d6ca16f75d5cfbad30f5d19cea380c6d (patch) | |
tree | 9ea2d71c77c18f07146f2138c49d41e1281bd16d /lib/httpserver/HTTPResponse.h | |
parent | 18e050f41b86a25af014661939a495397e53b6a5 (diff) |
Copy HTTP server into Box, for use with S3 testing.
Diffstat (limited to 'lib/httpserver/HTTPResponse.h')
-rw-r--r-- | lib/httpserver/HTTPResponse.h | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/lib/httpserver/HTTPResponse.h b/lib/httpserver/HTTPResponse.h new file mode 100644 index 00000000..c6b57e40 --- /dev/null +++ b/lib/httpserver/HTTPResponse.h @@ -0,0 +1,115 @@ +// -------------------------------------------------------------------------- +// +// File +// Name: HTTPResponse.h +// Purpose: Response object for HTTP connections +// Created: 26/3/04 +// +// -------------------------------------------------------------------------- + +#ifndef HTTPRESPONSE__H +#define HTTPRESPONSE__H + +#include <string> +#include <vector> + +#include "CollectInBufferStream.h" + +// -------------------------------------------------------------------------- +// +// Class +// Name: HTTPResponse +// Purpose: Response object for HTTP connections +// Created: 26/3/04 +// +// -------------------------------------------------------------------------- +class HTTPResponse : public CollectInBufferStream +{ +public: + HTTPResponse(); + ~HTTPResponse(); +private: + // no copying + HTTPResponse(const HTTPResponse &); + HTTPResponse &operator=(const HTTPResponse &); +public: + + void SetResponseCode(int Code); + void SetContentType(const char *ContentType); + + void SetAsRedirect(const char *RedirectTo, bool IsLocalURI = true); + void SetAsNotFound(const char *URI); + + void Send(IOStream &rStream, bool OmitContent = false); + + void AddHeader(const char *EntireHeaderLine); + void AddHeader(const std::string &rEntireHeaderLine); + void AddHeader(const char *Header, const char *Value); + void AddHeader(const char *Header, const std::string &rValue); + void AddHeader(const std::string &rHeader, const std::string &rValue); + + // Set dynamic content flag, default is content is dynamic + void SetResponseIsDynamicContent(bool IsDynamic) {mResponseIsDynamicContent = IsDynamic;} + // Set keep alive control, default is to mark as to be closed + void SetKeepAlive(bool KeepAlive) {mKeepAlive = KeepAlive;} + + void SetCookie(const char *Name, const char *Value, const char *Path = "/", int ExpiresAt = 0); + + enum + { + Code_OK = 200, + Code_NoContent = 204, + Code_MovedPermanently = 301, + Code_Found = 302, // redirection + Code_NotModified = 304, + Code_TemporaryRedirect = 307, + Code_Unauthorized = 401, + Code_Forbidden = 403, + Code_NotFound = 404, + Code_InternalServerError = 500, + Code_NotImplemented = 501 + }; + + static const char *ResponseCodeToString(int ResponseCode); + + void WriteStringDefang(const char *String, unsigned int StringLen); + void WriteStringDefang(const std::string &rString) {WriteStringDefang(rString.c_str(), rString.size());} + + // -------------------------------------------------------------------------- + // + // Function + // Name: HTTPResponse::WriteString(const std::string &) + // Purpose: Write a string to the response (simple sugar function) + // Created: 9/4/04 + // + // -------------------------------------------------------------------------- + void WriteString(const std::string &rString) + { + Write(rString.c_str(), rString.size()); + } + + // -------------------------------------------------------------------------- + // + // Function + // Name: HTTPResponse::SetDefaultURIPrefix(const std::string &) + // Purpose: Set default prefix used to local redirections + // Created: 26/3/04 + // + // -------------------------------------------------------------------------- + static void SetDefaultURIPrefix(const std::string &rPrefix) + { + msDefaultURIPrefix = rPrefix; + } + +private: + int mResponseCode; + bool mResponseIsDynamicContent; + bool mKeepAlive; + std::string mContentType; + std::vector<std::string> mExtraHeaders; + + static std::string msDefaultURIPrefix; +}; + +#endif // HTTPRESPONSE__H + |