#include 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()); }