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
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}}); |
|
}
|
|
|