Changeset 152 for uKadecot/trunk/uip/apps/webserver/httpd.c
- Timestamp:
- Jan 14, 2016, 1:17:21 PM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uKadecot/trunk/uip/apps/webserver/httpd.c
r108 r152 89 89 #endif 90 90 91 #define MAX(a, b) ((a > b) ? a : b) 92 93 union temp_type_t { 94 char binary[sizeof(http_content_type_binary)]; 95 char html[sizeof(http_content_type_html)]; 96 char css[sizeof(http_content_type_css)]; 97 char js[sizeof(http_content_type_js)]; 98 char json[sizeof(http_content_type_json)]; 99 char png[sizeof(http_content_type_png)]; 100 char gif[sizeof(http_content_type_gif)]; 101 char jpg[sizeof(http_content_type_jpg)]; 102 char svg[sizeof(http_content_type_svg)]; 103 char plain[sizeof(http_content_type_plain)]; 104 }; 105 106 struct temp_buf_t{ 107 char headers[MAX(sizeof(http_header_404), sizeof(http_header_200)) 108 + sizeof(http_content_encoding_gzip) 109 + sizeof(union temp_type_t) 110 ]; 111 char ws_headers[sizeof(http_header_101) 112 + sizeof(http_upgrade) + sizeof(((struct httpd_state *)0)->message.upgrade) + sizeof(http_crnl) 113 + sizeof(http_connection) + sizeof(((struct httpd_state *)0)->message.connection) + sizeof(http_crnl) 114 + sizeof(http_sec_websocket_accept) + sizeof(((struct httpd_state *)0)->message.response_key) + sizeof(http_crnl) 115 + sizeof(http_sec_websocket_protocol) + sizeof(((struct httpd_state *)0)->message.sec_websocket_protocol) + sizeof(http_crnl) 116 + sizeof(http_crnl) 117 ]; 118 }; 119 static char temp_buf[sizeof(struct temp_buf_t)]; 120 91 121 int httpd_strnicmp(const char *s1, const char *s2, size_t n) 92 122 { … … 159 189 PT_THREAD(send_headers(struct httpd_state *s, const char *statushdr)) 160 190 { 191 char *pos = temp_buf; 192 int len; 161 193 char *ptr; 162 194 163 195 PSOCK_BEGIN(&s->sout); 164 196 165 PSOCK_SEND_STR(&s->sout, statushdr); 166 167 PSOCK_SEND_STR(&s->sout, http_content_encoding_gzip); 197 len = strlen(statushdr); 198 memcpy(pos, statushdr, len); pos += len; 199 200 len = strlen(http_content_encoding_gzip); 201 memcpy(pos, http_content_encoding_gzip, len); pos += len; 168 202 169 203 ptr = strrchr(s->message.request_url, ISO_period); 170 204 if (ptr == NULL) { 171 PSOCK_SEND_STR(&s->sout, http_content_type_binary); 205 len = strlen(http_content_type_binary); 206 memcpy(pos, http_content_type_binary, len); pos += len; 172 207 } else if (strncmp(http_html, ptr, 5) == 0 || 173 208 strncmp(http_shtml, ptr, 6) == 0) { 174 PSOCK_SEND_STR(&s->sout, http_content_type_html); 209 len = strlen(http_content_type_html); 210 memcpy(pos, http_content_type_html, len); pos += len; 175 211 } else if (strncmp(http_css, ptr, 4) == 0) { 176 PSOCK_SEND_STR(&s->sout, http_content_type_css); 212 len = strlen(http_content_type_css); 213 memcpy(pos, http_content_type_css, len); pos += len; 177 214 } else if (strncmp(http_js, ptr, 3) == 0) { 178 PSOCK_SEND_STR(&s->sout, http_content_type_js); 215 len = strlen(http_content_type_js); 216 memcpy(pos, http_content_type_js, len); pos += len; 179 217 } else if (strncmp(http_json, ptr, 5) == 0) { 180 PSOCK_SEND_STR(&s->sout, http_content_type_json); 218 len = strlen(http_content_type_json); 219 memcpy(pos, http_content_type_json, len); pos += len; 181 220 } else if (strncmp(http_png, ptr, 4) == 0) { 182 PSOCK_SEND_STR(&s->sout, http_content_type_png); 221 len = strlen(http_content_type_png); 222 memcpy(pos, http_content_type_png, len); pos += len; 183 223 } else if (strncmp(http_gif, ptr, 4) == 0) { 184 PSOCK_SEND_STR(&s->sout, http_content_type_gif); 224 len = strlen(http_content_type_gif); 225 memcpy(pos, http_content_type_gif, len); pos += len; 185 226 } else if (strncmp(http_jpg, ptr, 4) == 0) { 186 PSOCK_SEND_STR(&s->sout, http_content_type_jpg); 227 len = strlen(http_content_type_jpg); 228 memcpy(pos, http_content_type_jpg, len); pos += len; 187 229 } else if (strncmp(http_svg, ptr, 4) == 0) { 188 PSOCK_SEND_STR(&s->sout, http_content_type_svg); 230 len = strlen(http_content_type_svg); 231 memcpy(pos, http_content_type_svg, len); pos += len; 189 232 } else { 190 PSOCK_SEND_STR(&s->sout, http_content_type_plain); 191 } 233 len = strlen(http_content_type_plain); 234 memcpy(pos, http_content_type_plain, len); pos += len; 235 } 236 *pos = '\0'; 237 238 PSOCK_SEND(&s->sout, temp_buf, pos - temp_buf); 239 192 240 PSOCK_END(&s->sout); 193 241 } … … 222 270 PT_THREAD(send_ws_headers(struct httpd_state *s, const char *statushdr)) 223 271 { 272 char *pos = temp_buf; 273 int len; 274 224 275 PSOCK_BEGIN(&s->sout); 225 276 226 PSOCK_SEND_STR(&s->sout, statushdr); 227 228 PSOCK_SEND_STR(&s->sout, http_upgrade); 229 PSOCK_SEND_STR(&s->sout, s->message.upgrade); 230 PSOCK_SEND_STR(&s->sout, http_crnl); 231 232 PSOCK_SEND_STR(&s->sout, http_connection); 233 PSOCK_SEND_STR(&s->sout, s->message.connection); 234 PSOCK_SEND_STR(&s->sout, http_crnl); 235 236 PSOCK_SEND_STR(&s->sout, http_sec_websocket_accept); 237 PSOCK_SEND_STR(&s->sout, s->message.response_key); 238 PSOCK_SEND_STR(&s->sout, http_crnl); 239 240 PSOCK_SEND_STR(&s->sout, http_sec_websocket_protocol); 241 PSOCK_SEND_STR(&s->sout, s->message.sec_websocket_protocol); 242 PSOCK_SEND_STR(&s->sout, http_crnl); 243 244 PSOCK_SEND_STR(&s->sout, http_crnl); 277 len = strlen(statushdr); 278 memcpy(pos, statushdr, len); pos += len; 279 280 len = strlen(http_upgrade); 281 memcpy(pos, http_upgrade, len); pos += len; 282 len = strlen(s->message.upgrade); 283 memcpy(pos, s->message.upgrade, len); pos += len; 284 len = strlen(http_crnl); 285 memcpy(pos, http_crnl, len); pos += len; 286 287 len = strlen(http_connection); 288 memcpy(pos, http_connection, len); pos += len; 289 len = strlen(s->message.connection); 290 memcpy(pos, s->message.connection, len); pos += len; 291 len = strlen(http_crnl); 292 memcpy(pos, http_crnl, len); pos += len; 293 294 len = strlen(http_sec_websocket_accept); 295 memcpy(pos, http_sec_websocket_accept, len); pos += len; 296 len = strlen(s->message.response_key); 297 memcpy(pos, s->message.response_key, len); pos += len; 298 len = strlen(http_crnl); 299 memcpy(pos, http_crnl, len); pos += len; 300 301 len = strlen(http_sec_websocket_protocol); 302 memcpy(pos, http_sec_websocket_protocol, len); pos += len; 303 len = strlen(s->message.sec_websocket_protocol); 304 memcpy(pos, s->message.sec_websocket_protocol, len); pos += len; 305 len = strlen(http_crnl); 306 memcpy(pos, http_crnl, len); pos += len; 307 308 len = strlen(http_crnl); 309 memcpy(pos, http_crnl, len); pos += len; 310 *pos = '\0'; 311 312 PSOCK_SEND(&s->sout, temp_buf, pos - temp_buf); 245 313 246 314 PSOCK_END(&s->sout);
Note:
See TracChangeset
for help on using the changeset viewer.