////////////////////////////////////////////////////////////////////// Dump a header on stderr, useful together with Dbg().
| 119 | /////////////////////////////////////////////////////////////////////////// |
| 120 | // Dump a header on stderr, useful together with Dbg(). |
| 121 | void |
| 122 | print_headers(TSMBuffer bufp, TSMLoc hdr_loc, std::stringstream &ss) |
| 123 | { |
| 124 | TSIOBuffer output_buffer; |
| 125 | TSIOBufferReader reader; |
| 126 | TSIOBufferBlock block; |
| 127 | const char *block_start; |
| 128 | int64_t block_avail; |
| 129 | EscapeCharForJson escape_char_for_json; |
| 130 | output_buffer = TSIOBufferCreate(); |
| 131 | reader = TSIOBufferReaderAlloc(output_buffer); |
| 132 | |
| 133 | ss << "\t'Start-Line' : '"; |
| 134 | |
| 135 | // Print all message header lines. |
| 136 | TSHttpHdrPrint(bufp, hdr_loc, output_buffer); |
| 137 | |
| 138 | /* We need to loop over all the buffer blocks, there can be more than 1 */ |
| 139 | block = TSIOBufferReaderStart(reader); |
| 140 | do { |
| 141 | block_start = TSIOBufferBlockReadStart(block, reader, &block_avail); |
| 142 | for (const char *c = block_start; c < block_start + block_avail; ++c) { |
| 143 | ss << escape_char_for_json(*c); |
| 144 | } |
| 145 | TSIOBufferReaderConsume(reader, block_avail); |
| 146 | block = TSIOBufferReaderStart(reader); |
| 147 | } while (block && block_avail != 0); |
| 148 | |
| 149 | ss.seekp(-escape_char_for_json.backup(), std::ios_base::end); |
| 150 | |
| 151 | /* Free up the TSIOBuffer that we used to print out the header */ |
| 152 | TSIOBufferReaderFree(reader); |
| 153 | TSIOBufferDestroy(output_buffer); |
| 154 | |
| 155 | Dbg(dbg_ctl_hdrs, "%.*s", static_cast<int>(ss.tellp()), ss.str().data()); |
| 156 | } |
| 157 | |
| 158 | void |
| 159 | log_headers(TSHttpTxn /* txn ATS_UNUSED */, TSMBuffer bufp, TSMLoc hdr_loc, char const *type_msg) |
no test coverage detected