You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

55 lines
2.2 KiB

#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 {
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::json_response::set_status(http::status code){
response::set_status(code);
set_body({{"code",status_code.first},{"status",status_code.second}});
}
void http::json_response::set_body(const nlohmann::json &json){ response::set_body(json.dump()); }
http::json_response::json_response(){
add_header({"Content-Type","application/json"});
set_body({{"code",status_code.first},{"status",status_code.second}});
}