| 824 | } |
| 825 | |
| 826 | std::deque<http::Request*> decode(const char* data, size_t length) |
| 827 | { |
| 828 | size_t parsed = http_parser_execute(&parser, &settings, data, length); |
| 829 | if (parsed != length) { |
| 830 | // TODO(bmahler): joyent/http-parser exposes error reasons. |
| 831 | failure = true; |
| 832 | |
| 833 | // If we're still writing the body, fail the writer! |
| 834 | if (writer.isSome()) { |
| 835 | http::Pipe::Writer writer_ = writer.get(); // Remove const. |
| 836 | writer_.fail("failed to decode body"); |
| 837 | writer = None(); |
| 838 | } |
| 839 | } |
| 840 | |
| 841 | if (!requests.empty()) { |
| 842 | std::deque<http::Request*> result = requests; |
| 843 | requests.clear(); |
| 844 | return result; |
| 845 | } |
| 846 | |
| 847 | return std::deque<http::Request*>(); |
| 848 | } |
| 849 | |
| 850 | bool failed() const |
| 851 | { |