.\" Man page generated from reStructuredText. . . .nr rst2man-indent-level 0 . .de1 rstReportMargin \\$1 \\n[an-margin] level \\n[rst2man-indent-level] level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] - \\n[rst2man-indent0] \\n[rst2man-indent1] \\n[rst2man-indent2] .. .de1 INDENT .\" .rstReportMargin pre: . RS \\$1 . nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin] . nr rst2man-indent-level +1 .\" .rstReportMargin post: .. .de UNINDENT . RE .\" indent \\n[an-margin] .\" old: \\n[rst2man-indent\\n[rst2man-indent-level]] .nr rst2man-indent-level -1 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. .TH "TSHTTPTXNPOSTBUFFERREADERGET" "3ts" "Jan 06, 2024" "9.2" "Apache Traffic Server" .SH NAME TSHttpTxnPostBufferReaderGet \- TSHttpTxnPostBufferReaderGet API function .SH SYNOPSIS .INDENT 0.0 .INDENT 3.5 .sp .EX #include .EE .UNINDENT .UNINDENT .INDENT 0.0 .TP .B \fI\%TSIOBufferReader\fP TSHttpTxnPostBufferReaderGet(\fI\%TSHttpTxn\fP txnp) .UNINDENT .SH DESCRIPTION .sp Retrieve the client request body for the transaction referenced by \fItxnp\fP\&. The body is read from via the returned \fI\%TSIOBufferReader\fP\&. The returned \fI\%TSIOBufferReader\fP is owned by the caller and the caller must free it via \fI\%TSIOBufferReaderFree()\fP\&. This function should be used in the handler for \fI\%TS_HTTP_REQUEST_BUFFER_READ_COMPLETE_HOOK\fP\&. The following example handler makes use of \fI\%TSHttpTxnPostBufferReaderGet()\fP\&. .INDENT 0.0 .INDENT 3.5 .sp .EX int CB_Read_Request_Body_Hook(TSCont contp, TSEvent event, void* data) { ink_assert(event == TS_EVENT_HTTP_REQUEST_BUFFER_COMPLETE); auto txnp = reinterpret_cast(data); TSIOBufferReader post_buffer_reader = TSHttpTxnPostBufferReaderGet(txnp); int64_t read_avail = TSIOBufferReaderAvail(post_buffer_reader); if (read_avail > 0) { char *body_bytes = reinterpret_cast(TSmalloc(sizeof(char) * read_avail)); int64_t consumed = 0; TSIOBufferBlock block = TSIOBufferReaderStart(post_buffer_reader); while (block != NULL) { int64_t data_len = 0; const char *block_bytes = TSIOBufferBlockReadStart(block, post_buffer_reader, &data_len); memcpy(body_bytes + consumed, block_bytes, data_len); consumed += data_len; block = TSIOBufferBlockNext(block); } // Now do something with body_bytes which contains the contents of the // request\(aqs body. } // Remember to free the TSIOBufferReader. TSIOBufferReaderFree(post_buffer_reader); TSHttpTxnReenable(txnp); return 0; } .EE .UNINDENT .UNINDENT .sp \fI\%example/plugins/c\-api/request_buffer/request_buffer.c\fP is a simple yet complete plugin that accesses HTTP request bodies. .SH COPYRIGHT 2024, dev@trafficserver.apache.org .\" Generated by docutils manpage writer. .