|
|
|
|
#include <http.hpp>
|
|
|
|
|
|
|
|
|
|
http::code::code(status status):first(status){
|
|
|
|
|
switch(status) {
|
|
|
|
|
case accepted: second="Accepted"; break;
|
|
|
|
|
case bad_gateway: second="Bad Gateway"; break;
|
|
|
|
|
case bad_request: second="Bad Request"; break;
|
|
|
|
|
case created: second="Created"; break;
|
|
|
|
|
case forbidden: second="Forbidden"; break;
|
|
|
|
|
case gateway_timeout: second="Gateway Timeout"; break;
|
|
|
|
|
case http_version_not_supported: second="HTTP Version Not Supported"; break;
|
|
|
|
|
case internal_server_error: second="Internal Server Error"; break;
|
|
|
|
|
case method_not_allowed: second="Method Not Allowed"; break;
|
|
|
|
|
case not_acceptable: second="Not Acceptable"; break;
|
|
|
|
|
case no_content: second="No Content"; break;
|
|
|
|
|
case not_found: second="Not Found"; break;
|
|
|
|
|
case not_implemented: second="Not Implemented"; break;
|
|
|
|
|
case ok: second="OK"; break;
|
|
|
|
|
case payment_required: second="Payment Required"; break;
|
|
|
|
|
case service_unavailable: second="Service Unavailable"; break;
|
|
|
|
|
case unauthorized: second="Unauthorized"; break;
|
|
|
|
|
default: second="UNKNOWN";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
std::ostream &http::response::do_response(std::ostream &os) const {
|
|
|
|
|
os << "HTTP/1.1"
|
|
|
|
|
<< " " << status_code.first << " " << status_code.second << "\r\n";
|
|
|
|
|
for(auto &header : response_headers)
|
|
|
|
|
os << header.first << ": " << header.second << "\r\n";
|
|
|
|
|
if(status_code.first != http::no_content) {
|
|
|
|
|
os << "Content-Length: ";
|
|
|
|
|
if(!body.empty()) {
|
|
|
|
|
return os << body.size() << "\r\n\r\n"
|
|
|
|
|
<< body;
|
|
|
|
|
} else {
|
|
|
|
|
const auto body_replace=std::to_string(status_code.first) + " " + status_code.second;
|
|
|
|
|
return os << body_replace.size() << "\r\n\r\n"
|
|
|
|
|
<< body_replace;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return os << "\r\n";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void http::response::set_body(const nlohmann::json &json){
|
|
|
|
|
add_header({"Content-Type","application/json"});
|
|
|
|
|
response::set_body(json.dump());
|
|
|
|
|
}
|