MCPcopy Create free account
hub / github.com/Codesire-Deng/co_context / prep_headers

Function prep_headers

test/httpd_MT.cpp:124–161  ·  view source on GitHub ↗

* Sends the HTTP 200 OK header, the server string, for a few types of files, it * can also send the content type based on the file extension. It also sends the * content length header. Finally it send a '\r\n' in a line by itself * signalling the end of headers and the beginning of any content. * */

Source from the content-addressed store, hash-verified

122 * signalling the end of headers and the beginning of any content.
123 * */
124size_t
125prep_headers(std::string_view path, off_t len, std::span<char> send_buffer) {
126 char format_buffer[64];
127 const auto start = send_buffer.begin();
128
129 memwrite(send_buffer, "HTTP/1.0 200 OK\r\n");
130 memwrite(send_buffer, SERVER_STRING);
131
132 /*
133 * Check the file extension for certain common types of files
134 * on web pages and send the appropriate content-type header.
135 * Since extensions can be mixed case like JPG, jpg or Jpg,
136 * we turn the extension into lower case before checking.
137 * */
138 std::string_view file_ext = get_filename_ext(path);
139 if ("htm"sv == file_ext || "html"sv == file_ext) {
140 memwrite(send_buffer, "Content-Type: text/html\r\n");
141 } else if ("png"sv == file_ext) {
142 memwrite(send_buffer, "Content-Type: image/png\r\n");
143 } else if ("gif"sv == file_ext) {
144 memwrite(send_buffer, "Content-Type: image/gif\r\n");
145 } else if ("jpg"sv == file_ext || "jpeg"sv == file_ext) {
146 memwrite(send_buffer, "Content-Type: image/jpeg\r\n");
147 } else if ("js"sv == file_ext) {
148 memwrite(send_buffer, "Content-Type: application/javascript\r\n");
149 } else if ("css"sv == file_ext) {
150 memwrite(send_buffer, "Content-Type: text/css\r\n");
151 } else if ("txt"sv == file_ext) {
152 memwrite(send_buffer, "Content-Type: text/plain\r\n");
153 }
154
155 (void)sprintf(format_buffer, "content-length: %ld\r\n", len);
156 // BUG check
157 memwrite(send_buffer, format_buffer);
158 memwrite(send_buffer, "\r\n");
159
160 return send_buffer.begin() - start;
161}
162
163std::span<char> get_line(std::span<char> src) {
164 auto pos = std::string_view{src.begin(), src.end()}.find("\r\n");

Callers 1

sessionFunction · 0.70

Calls 3

beginMethod · 0.80
memwriteFunction · 0.70
get_filename_extFunction · 0.70

Tested by

no test coverage detected