summaryrefslogtreecommitdiffstats
path: root/man3/nxt_unit_response_buf_alloc.3
diff options
context:
space:
mode:
Diffstat (limited to 'man3/nxt_unit_response_buf_alloc.3')
-rw-r--r--man3/nxt_unit_response_buf_alloc.3194
1 files changed, 194 insertions, 0 deletions
diff --git a/man3/nxt_unit_response_buf_alloc.3 b/man3/nxt_unit_response_buf_alloc.3
new file mode 100644
index 000000000..2a429b270
--- /dev/null
+++ b/man3/nxt_unit_response_buf_alloc.3
@@ -0,0 +1,194 @@
+.\" (C) 2023, NGINX, Inc.
+.\"
+.TH nxt_unit_response_buf_alloc 3 (date) "NGINX Unit (unreleased)"
+.SH Name
+nxt_unit_response_buf_alloc,
+nxt_unit_buf_send
+\-
+allocate buffer for response in Unit app
+.SH Library
+NGINX Unit library
+.RI ( libunit ", " -lunit )
+.SH Synopsis
+.nf
+.B #include <nxt_unit.h>
+.PP
+.B [[gnu::malloc(nxt_unit_buf_send)]]
+.B nxt_unit_buf_t *_Nullable
+.BI "nxt_unit_response_buf_alloc(nxt_unit_request_info_t *" req ", uint32_t " size );
+.PP
+.BI "int nxt_unit_buf_send(nxt_unit_buf_t *" buf );
+.fi
+.SH Arguments
+.TP
+.I req
+Request object.
+.TP
+.I size
+Size of the buffer.
+.TP
+.I buf
+Buffer.
+.SH Description
+.MR nxt_unit_response_buf_alloc 3
+allocates a buffer for a response to a request,
+or for a chunk of it.
+.PP
+.MR nxt_unit_buf_send 3
+sends and deallocates the buffer previously allocated with
+.MR nxt_unit_response_buf_alloc 3 .
+.SH Return value
+.TP
+.MR nxt_unit_response_buf_alloc 3
+A pointer to the allocated buffer on success,
+or NULL on error.
+.TP
+.MR nxt_unit_buf_send 3
+0 on success,
+or a non-zero error code on error.
+.SH Errors
+Errors will be reported in the Unit debug log.
+.TP
+.B NXT_UNIT_ERROR
+.RS
+.PD 0
+.IP \[bu] 3
+.I size
+was too big.
+.IP \[bu]
+Allocation failed.
+.IP \[bu]
+Failed to share the buffer with
+.MR unitd 8 .
+.PD
+.RE
+.SH Examples
+Below is a request and response pair,
+and the source code to produce it.
+.PP
+See
+.MR nxt_unit_init 3
+for an example where the
+.IR request_handler ()
+function defined below is used.
+.SS Request
+.EX
+.RB $ " echo \-e \[aq]GET / HTTP/1.1\er\enHost: _\en\[aq] | ncat localhost 80;"
+HTTP/1.1 200 OK
+Content\-Type: text/plain
+Server: Unit/1.30.0
+Date: Sat, 20 May 2023 19:08:22 GMT
+Transfer\-Encoding: chunked
+\&
+22
+Hello world!
+But send this first.
+\&
+15
+Some extra contents.
+\&
+e
+And some more
+\&
+0
+\&
+.EE
+.SS C code
+.EX
+#define _GNU_SOURCE
+#include <string.h>
+\&
+#include <nxt_unit.h>
+\&
+void
+request_handler(nxt_unit_request_info_t *req)
+{
+ int rc;
+ nxt_unit_buf_t *buf, *buf2;
+\&
+ rc = nxt_unit_response_init(req, 200, 1, strlen("Content\-Type")
+ + strlen("text/plain")
+ + strlen("Hello world!\en"));
+ if (rc != 0) {
+ goto fail;
+ }
+\&
+ rc = nxt_unit_response_add_field(req, "Content\-Type",
+ strlen("Content\-Type"),
+ "text/plain",
+ strlen("text/plain"));
+ if (rc != 0) {
+ goto fail;
+ }
+\&
+ rc = nxt_unit_response_add_content(req, "Hello world!\en",
+ strlen("Hello world!\en"));
+ if (rc != 0) {
+ goto fail;
+ }
+\&
+ rc = nxt_unit_response_send(req);
+ if (rc != 0) {
+ goto fail;
+ }
+\&
+ buf = nxt_unit_response_buf_alloc(req,
+ strlen("Some extra contents.\en"));
+ if (buf == NULL) {
+ rc = NXT_UNIT_ERROR;
+ goto fail;
+ }
+\&
+ buf2 = nxt_unit_response_buf_alloc(req,
+ strlen("But send this first.\en"));
+ if (buf2 == NULL) {
+ rc = NXT_UNIT_ERROR;
+ goto fail;
+ }
+\&
+ buf2\->free = mempcpy(buf2\->free, "But send this first.\en",
+ strlen("But send this first.\en"));
+ buf\->free = mempcpy(buf\->free, "Some extra contents.\en",
+ strlen("Some extra contents.\en"));
+\&
+ rc = nxt_unit_buf_send(buf2);
+ if (rc != 0) {
+ goto fail;
+ }
+\&
+ rc = nxt_unit_buf_send(buf);
+ if (rc != 0) {
+ goto fail;
+ }
+\&
+ rc = nxt_unit_response_write(req, "And some more\en",
+ strlen("And some more\en"));
+ if (rc != 0) {
+ goto fail;
+ }
+\&
+fail:
+ nxt_unit_request_done(req, rc);
+}
+.EE
+.SH Copyright
+(C) 2017-2023, NGINX, Inc.
+.PP
+SPDX-License-Identifier: Apache-2.0
+.SH See also
+.MR nxt_unit_init 3 ,
+.MR nxt_unit_response_init 3 ,
+.MR nxt_unit_response_write 3 ,
+.MR unitd 8
+.PP
+.UR https://unit.nginx.org
+Website
+.UE
+.PP
+.UR https://mailman.nginx.org/mailman/listinfo/unit
+Mailing list
+.UE
+.PP
+.UR https://github.com/nginx/unit
+GitHub
+.UE