barrier/http/XHTTP.cpp

132 lines
2.2 KiB
C++

#include "XHTTP.h"
#include "CHTTPProtocol.h"
#include "stdsstream.h"
//
// XHTTP
//
XHTTP::XHTTP(
SInt32 statusCode) :
XBase(),
m_status(statusCode),
m_reason(getReason(statusCode))
{
// do nothing
}
XHTTP::XHTTP(
SInt32 statusCode,
const CString& reasonPhrase) :
XBase(),
m_status(statusCode),
m_reason(reasonPhrase)
{
// do nothing
}
XHTTP::~XHTTP()
{
// do nothing
}
SInt32
XHTTP::getStatus() const
{
return m_status;
}
CString
XHTTP::getReason() const
{
return m_reason;
}
void
XHTTP::addHeaders(
CHTTPReply&) const
{
// do nothing
}
CString
XHTTP::getWhat() const throw()
{
try {
std::ostringstream s;
s << m_status << " ";
if (!m_reason.empty()) {
s << m_reason.c_str();
}
else {
s << getReason(m_status);
}
return s.str();
}
catch (...) {
return CString();
}
}
const char*
XHTTP::getReason(
SInt32 status)
{
switch (status) {
case 300: return "Multiple Choices";
case 301: return "Moved Permanently";
case 302: return "Moved Temporarily";
case 303: return "See Other";
case 304: return "Not Modified";
case 305: return "Use Proxy";
case 400: return "Bad Request";
case 401: return "Unauthorized";
case 402: return "Payment Required";
case 403: return "Forbidden";
case 404: return "Not Found";
case 405: return "Method Not Allowed";
case 406: return "Not Acceptable";
case 407: return "Proxy Authentication Required";
case 408: return "Request Time-out";
case 409: return "Conflict";
case 410: return "Gone";
case 411: return "Length Required";
case 412: return "Precondition Failed";
case 413: return "Request Entity Too Large";
case 414: return "Request-URI Too Large";
case 415: return "Unsupported Media Type";
case 500: return "Internal Server Error";
case 501: return "Not Implemented";
case 502: return "Bad Gateway";
case 503: return "Service Unavailable";
case 504: return "Gateway Time-out";
case 505: return "HTTP Version not supported";
default: return "";
}
}
//
// XHTTPAllow
//
XHTTPAllow::XHTTPAllow(
const CString& allowed) :
XHTTP(405),
m_allowed(allowed)
{
// do nothing
}
XHTTPAllow::~XHTTPAllow()
{
// do nothing
}
void
XHTTPAllow::addHeaders(
CHTTPReply& reply) const
{
reply.m_headers.push_back(std::make_pair(CString("Allow"), m_allowed));
}