Ticket #781: http-head.patch
| File http-head.patch, 2.8 kB (added by matthijs, 2 years ago) |
|---|
-
src/pulsecore/protocol-http.c
old new 80 80 STATE_DATA 81 81 }; 82 82 83 enum method { 84 METHOD_GET, 85 METHOD_HEAD 86 }; 87 83 88 struct connection { 84 89 pa_http_protocol *protocol; 85 90 pa_iochannel *io; … … 89 94 pa_client *client; 90 95 enum state state; 91 96 char *url; 97 enum method method; 92 98 pa_module *module; 93 99 }; 94 100 … … 327 333 328 334 http_response(c, code, msg, MIME_HTML); 329 335 336 if (c->method == METHOD_HEAD) { 337 pa_ioline_defer_close(c->line); 338 return; 339 } 340 330 341 if (!text) 331 342 text = msg; 332 343 … … 363 374 364 375 http_response(c, 200, "OK", MIME_HTML); 365 376 377 if (c->method == METHOD_HEAD) { 378 pa_ioline_defer_close(c->line); 379 return; 380 } 381 366 382 pa_ioline_puts(c->line, 367 383 HTML_HEADER(PACKAGE_NAME" "PACKAGE_VERSION) 368 384 "<h1>"PACKAGE_NAME" "PACKAGE_VERSION"</h1>\n" … … 402 418 403 419 http_response(c, 200, "OK", MIME_CSS); 404 420 421 if (c->method == METHOD_HEAD) { 422 pa_ioline_defer_close(c->line); 423 return; 424 } 425 405 426 pa_ioline_puts(c->line, 406 427 "body { color: black; background-color: white; }\n" 407 428 "a:link, a:visited { color: #900000; }\n" … … 420 441 pa_assert(c); 421 442 422 443 http_response(c, 200, "OK", MIME_TEXT); 444 445 if (c->method == METHOD_HEAD) { 446 pa_ioline_defer_close(c->line); 447 return; 448 } 449 423 450 r = pa_full_status_string(c->protocol->core); 424 451 pa_ioline_puts(c->line, r); 425 452 pa_xfree(r); … … 439 466 "<h2>Sinks</h2>\n" 440 467 "<p>\n"); 441 468 469 if (c->method == METHOD_HEAD) { 470 pa_ioline_defer_close(c->line); 471 return; 472 } 473 442 474 PA_IDXSET_FOREACH(sink, c->protocol->core->sinks, idx) { 443 475 char *t, *m; 444 476 … … 566 598 http_response(c, 200, "OK", t); 567 599 pa_xfree(t); 568 600 601 if(c->method == METHOD_HEAD) { 602 connection_unlink(c); 603 return; 604 } 569 605 pa_ioline_set_callback(c->line, NULL, NULL); 570 606 571 607 if (pa_ioline_is_drained(c->line)) … … 606 642 607 643 switch (c->state) { 608 644 case STATE_REQUEST_LINE: { 609 if (!pa_startswith(s, "GET ")) 645 if (pa_startswith(s, "GET ")) { 646 c->method = METHOD_GET; 647 s +=4; 648 } else if (pa_startswith(s, "HEAD ")) { 649 c->method = METHOD_HEAD; 650 s +=5; 651 } else { 610 652 goto fail; 611 612 s +=4; 653 } 613 654 614 655 c->url = pa_xstrndup(s, strcspn(s, " \r\n\t?")); 615 656 c->state = STATE_MIME_HEADER;
