summaryrefslogtreecommitdiff
path: root/docs/ref/msg
diff options
context:
space:
mode:
authorGarrett D'Amore <garrett@damore.org>2024-04-05 19:46:02 -0700
committerGarrett D'Amore <garrett@damore.org>2024-04-05 19:46:02 -0700
commit1a9bc072f8afa875c3add9d613d80efe884728dc (patch)
tree2a80d4e65d9b96da2af051bf71a86f8a4893157a /docs/ref/msg
parent1b825b063da65fe3d88c1ca97afded0d6f6ccc14 (diff)
downloadnng-1a9bc072f8afa875c3add9d613d80efe884728dc.tar.gz
nng-1a9bc072f8afa875c3add9d613d80efe884728dc.tar.bz2
nng-1a9bc072f8afa875c3add9d613d80efe884728dc.zip
Reorg nng_msg_* pages.
Diffstat (limited to 'docs/ref/msg')
-rw-r--r--docs/ref/msg/nng_msg_alloc.adoc38
-rw-r--r--docs/ref/msg/nng_msg_append.adoc41
-rw-r--r--docs/ref/msg/nng_msg_body.adoc34
-rw-r--r--docs/ref/msg/nng_msg_capacity.adoc27
-rw-r--r--docs/ref/msg/nng_msg_chop.adoc37
-rw-r--r--docs/ref/msg/nng_msg_clear.adoc15
-rw-r--r--docs/ref/msg/nng_msg_dup.adoc30
-rw-r--r--docs/ref/msg/nng_msg_free.adoc20
-rw-r--r--docs/ref/msg/nng_msg_get_pipe.adoc33
-rw-r--r--docs/ref/msg/nng_msg_header.adoc35
-rw-r--r--docs/ref/msg/nng_msg_header_append.adoc37
-rw-r--r--docs/ref/msg/nng_msg_header_chop.adoc39
-rw-r--r--docs/ref/msg/nng_msg_header_clear.adoc19
-rw-r--r--docs/ref/msg/nng_msg_header_insert.adoc37
-rw-r--r--docs/ref/msg/nng_msg_header_len.adoc23
-rw-r--r--docs/ref/msg/nng_msg_header_trim.adoc39
-rw-r--r--docs/ref/msg/nng_msg_insert.adoc39
-rw-r--r--docs/ref/msg/nng_msg_len.adoc25
-rw-r--r--docs/ref/msg/nng_msg_realloc.adoc41
-rw-r--r--docs/ref/msg/nng_msg_reserve.adoc38
-rw-r--r--docs/ref/msg/nng_msg_set_pipe.adoc23
-rw-r--r--docs/ref/msg/nng_msg_trim.adoc37
22 files changed, 707 insertions, 0 deletions
diff --git a/docs/ref/msg/nng_msg_alloc.adoc b/docs/ref/msg/nng_msg_alloc.adoc
new file mode 100644
index 00000000..ae0e9184
--- /dev/null
+++ b/docs/ref/msg/nng_msg_alloc.adoc
@@ -0,0 +1,38 @@
+## nng_msg_alloc
+
+Allocate a message.
+
+### Synopsis
+
+```c
+#include <nng/nng.h>
+
+int nng_msg_alloc(nng_msg **msgp, size_t size);
+```
+
+### Description
+
+The `nng_msg_alloc` function allocates a new message with body length _size_ and stores the result in __msgp__.
+Messages allocated with this function contain a body and optionally a header.
+They are used with receive and transmit functions.
+
+### Return Values
+
+This function returns 0 on success, and non-zero otherwise.
+
+### Errors
+
+[horizontal]
+`NNG_ENOMEM`:: Insufficient free memory exists to allocate a message.
+
+### See Also
+
+xref:nng_msg_free.adoc[nng_msg_free],
+xref:nng_msg_body.adoc[nng_msg_body],
+xref:nng_msg_dup.adoc[nng_msg_dup],
+xref:nng_msg_header.adoc[nng_msg_header],
+xref:nng_msg_header_len.adoc[nng_msg_header_len],
+xref:nng_msg_len.adoc[nng_msg_len],
+xref:nng_msg_capacity.adoc[nng_msg_capacity],
+xref:nng_msg_reserve.adoc[nng_msg_reserve],
+xref:nng_msg_realloc.adoc[nng_msg_realloc],
diff --git a/docs/ref/msg/nng_msg_append.adoc b/docs/ref/msg/nng_msg_append.adoc
new file mode 100644
index 00000000..2c425267
--- /dev/null
+++ b/docs/ref/msg/nng_msg_append.adoc
@@ -0,0 +1,41 @@
+## nng_msg_append
+
+Append to message body.
+
+### Synopsis
+
+```c
+#include <nng/nng.h>
+
+int nng_msg_append(nng_msg *msg, const void *val, size_t size);
+int nng_msg_append_u16(nng_msg *msg, uint16_t val16);
+int nng_msg_append_u32(nng_msg *msg, uint32_t val32);
+int nng_msg_append_u64(nng_msg *msg, uint64_t val64);
+```
+
+### Description
+
+These functions append data to the end of the body of message _msg_, reallocating it if necessary.
+
+The `nng_msg_append` function appends _size_ bytes, copying them from _val_.
+The remaining functions append the value specified (such as _val32_) in network-byte order (big-endian).
+
+### Return Values
+
+These functions return 0 on success, and non-zero otherwise.
+
+### Errors
+
+[horizontal]
+`NNG_ENOMEM`:: Insufficient free memory exists.
+
+### See Also
+
+xref:nng_msg_alloc.adoc[nng_msg_alloc],
+xref:nng_msg_body.adoc[nng_msg_body],
+xref:nng_msg_chop.adoc[nng_msg_chop],
+xref:nng_msg_free.adoc[nng_msg_free],
+xref:nng_msg_insert.adoc[nng_msg_insert],
+xref:nng_msg_len.adoc[nng_msg_len],
+xref:nng_msg_realloc.adoc[nng_msg_realloc],
+xref:nng_msg_trim.adoc[nng_msg_trim],
diff --git a/docs/ref/msg/nng_msg_body.adoc b/docs/ref/msg/nng_msg_body.adoc
new file mode 100644
index 00000000..77c850c8
--- /dev/null
+++ b/docs/ref/msg/nng_msg_body.adoc
@@ -0,0 +1,34 @@
+## nng_msg_body
+
+Return message body.
+
+### Synopsis
+
+```c
+#include <nng/nng.h>
+
+void *nng_msg_body(nng_msg *msg);
+```
+
+### Description
+
+The `nng_msg_body` function returns a pointer to the start of the body
+content of the message _msg_.
+
+The returned message body is invalidated by a call to any of the functions that modify the message itself.
+Such functions are xref:nng_msg_free.adoc[`nng_msg_free`], xref:nng_msg_realloc.adoc[`nng_msg_realloc`], any of the xref:nng_msg_trim.adoc[`nng_msg_trim`], xref:nng_msg_append.adoc[`nng_msg_append`], or xref:nng_msg_insert.adoc[`nng_msg_insert`] variants.
+
+### Return Values
+
+Pointer to start of message body.
+
+### See Also
+
+xref:nng_msg_append.adoc[nng_msg_append],
+xref:nng_msg_free.adoc[nng_msg_free],
+xref:nng_msg_insert.adoc[nng_msg_insert],
+xref:nng_msg_len.adoc[nng_msg_len],
+xref:nng_msg_capacity.adoc[nng_msg_capacity],
+xref:nng_msg_reserve.adoc[nng_msg_reserve],
+xref:nng_msg_realloc.adoc[nng_msg_realloc],
+xref:nng_msg_trim.adoc[nng_msg_trim]
diff --git a/docs/ref/msg/nng_msg_capacity.adoc b/docs/ref/msg/nng_msg_capacity.adoc
new file mode 100644
index 00000000..3ee76e2c
--- /dev/null
+++ b/docs/ref/msg/nng_msg_capacity.adoc
@@ -0,0 +1,27 @@
+## nng_msg_capacity
+
+Return message body length.
+
+### Synopsis
+
+```c
+#include <nng/nng.h>
+
+size_t nng_msg_capacity(nng_msg *msg);
+```
+
+### Description
+
+The `nng_msg_capacity` returns the storage allocated for the body of message _msg_.
+The capacity includes the current contents of the message and free space after it.
+The message body may grow to capacity without performing any further allocations.
+
+### Return Values
+
+Allocated capacity for message body.
+
+### See Also
+
+xref:nng_msg_reserve.adoc[nng_msg_reserve],
+xref:nng_msg_alloc.adoc[nng_msg_alloc],
+xref:nng_msg_body.adoc[nng_msg_body]
diff --git a/docs/ref/msg/nng_msg_chop.adoc b/docs/ref/msg/nng_msg_chop.adoc
new file mode 100644
index 00000000..6a67fb0e
--- /dev/null
+++ b/docs/ref/msg/nng_msg_chop.adoc
@@ -0,0 +1,37 @@
+## nng_msg_chop
+
+Remove data from end of message body.
+
+### Synopsis
+
+```c
+#include <nng/nng.h>
+
+int nng_msg_chop(nng_msg *msg, size_t size);
+int nng_msg_chop_u16(nng_msg *msg, uint16_t *val16);
+int nng_msg_chop_u32(nng_msg *msg, uint32_t *val32);
+int nng_msg_chop_u64(nng_msg *msg, uint64_t *val64);
+```
+
+### Description
+
+These functions remove data from the end of the body of message _msg_.
+
+The `nng_msg_chop` function removes _size_ bytes.
+The remaining functions remove 2, 4, or 8 bytes, and stores them in the value (such as _val32_), after converting them from network-byte order (big-endian) to native byte order.
+
+### Return Values
+
+These functions return 0 on success, and non-zero otherwise.
+
+### Errors
+
+[horizontal]
+`NNG_EINVAL`:: The message body is too short to remove the requested data.
+
+### See Also
+
+xref:nng_msg_append.adoc[nng_msg_append],
+xref:nng_msg_body.adoc[nng_msg_body],
+xref:nng_msg_len.adoc[nng_msg_len],
+xref:nng_msg_trim.adoc[nng_msg_trim]
diff --git a/docs/ref/msg/nng_msg_clear.adoc b/docs/ref/msg/nng_msg_clear.adoc
new file mode 100644
index 00000000..3800e69e
--- /dev/null
+++ b/docs/ref/msg/nng_msg_clear.adoc
@@ -0,0 +1,15 @@
+## nng_msg_clear
+
+Clear message body content.
+
+### Synopsis
+
+```c
+#include <nng/nng.h>
+
+void nng_msg_clear(nng_msg *msg);
+```
+
+### Description
+
+The `nng_msg_clear` function resets the body length of _msg_ to zero.
diff --git a/docs/ref/msg/nng_msg_dup.adoc b/docs/ref/msg/nng_msg_dup.adoc
new file mode 100644
index 00000000..4ad83181
--- /dev/null
+++ b/docs/ref/msg/nng_msg_dup.adoc
@@ -0,0 +1,30 @@
+## nng_msg_dup
+
+Duplicate a message.
+
+### Synopsis
+
+```c
+#include <nng/nng.h>
+
+int nng_msg_dup(nng_msg **dup, nng_msg_t *orig);
+```
+
+### Description
+
+The `nng_msg_dup` makes a duplicate of the original message _orig_, and saves the result in the location pointed by _dup_.
+The actual message body and header content is copied, but the duplicate may contain a different amount of unused space than the original message.
+
+### Return Values
+
+This function returns 0 on success, and non-zero otherwise.
+
+### Errors
+
+[horizontal]
+`NNG_ENOMEM`:: Insufficient free memory exists to duplicate a message.
+
+### See Also
+
+xref:nng_msg_alloc.adoc[nng_msg_alloc],
+xref:nng_msg_free.adoc[nng_msg_free]
diff --git a/docs/ref/msg/nng_msg_free.adoc b/docs/ref/msg/nng_msg_free.adoc
new file mode 100644
index 00000000..84b18db8
--- /dev/null
+++ b/docs/ref/msg/nng_msg_free.adoc
@@ -0,0 +1,20 @@
+## nng_msg_free
+
+Free a message.
+
+### Synopsis
+
+```c
+#include <nng/nng.h>
+
+void nng_msg_free(nng_msg *msg);
+```
+
+### Description
+
+The `nng_msg_free` function deallocates the message _msg_ entirely.
+
+### See Also
+
+xref:nng_msg_alloc.adoc[nng_msg_alloc],
+xref:nng_msg_realloc.adoc[nng_msg_realloc]
diff --git a/docs/ref/msg/nng_msg_get_pipe.adoc b/docs/ref/msg/nng_msg_get_pipe.adoc
new file mode 100644
index 00000000..fa816d2b
--- /dev/null
+++ b/docs/ref/msg/nng_msg_get_pipe.adoc
@@ -0,0 +1,33 @@
+## nng_msg_get_pipe
+
+Get pipe for message.
+
+### Synopsis
+
+```c
+#include <nng/nng.h>
+
+nng_pipe nng_msg_get_pipe(nng_msg *msg);
+```
+
+### Description
+
+The `nng_msg_get_pipe` function returns the xref:../pipe/index.adoc[pipe] object associated with message _msg_.
+On receive, this is the pipe from which a message was received.
+On transmit, this would be the pipe that the message should be delivered to, if a specific peer is required.
+
+Not all protocols support overriding the destination pipe.
+
+The most usual use case for this is to obtain information about the peer from which the message was received.
+This can be used to provide different behaviors for different peers such as a higher level of authentication for peers located on an untrusted network.
+The xref:../pipe/nng_pipe_get.adoc[`nng_pipe_get`] function is useful in this situation.
+
+### Return Values
+
+This function returns the pipe associated with this message.
+If the message is not associated with a pipe, then xref:nng_pipe_id.adoc[`nng_pipe_id`] on the return value will return a negative number.
+
+### See Also
+
+xref:nng_msg_set_pipe.adoc[nng_msg_set_pipe],
+xref:../pipe/nng_pipe_get.adoc[nng_pipe_get]
diff --git a/docs/ref/msg/nng_msg_header.adoc b/docs/ref/msg/nng_msg_header.adoc
new file mode 100644
index 00000000..cfb3d4d8
--- /dev/null
+++ b/docs/ref/msg/nng_msg_header.adoc
@@ -0,0 +1,35 @@
+## nng_msg_header
+
+Return message header.
+
+### Synopsis
+
+```c
+#include <nng/nng.h>
+
+void *nng_msg_header(nng_msg *msg);
+```
+
+### Description
+
+The `nng_msg_header` function returns a pointer to the start of the header
+content of the message _msg_.
+
+NOTE: The message header contains protocol-specific header content.
+Most applications should not access this content, but it is available for xref:../socket/raw.adoc[raw mode] sockets.
+Specifcially applications should not attempt to store their own private data in the message header.
+
+NOTE: The value returned by this is invalidated by a call to any of the functions that modify the message or the header content.
+
+### Return Values
+
+Pointer to start of message header.
+
+### See Also
+
+xref:nng_msg_body.adoc[nng_msg_body],
+xref:nng_msg_header_append.adoc[nng_msg_header_append],
+xref:nng_msg_header_chop.adoc[nng_msg_header_chop],
+xref:nng_msg_header_insert.adoc[nng_msg_header_insert]
+xref:nng_msg_header_len.adoc[nng_msg_header_len],
+xref:nng_msg_header_trim.adoc[nng_msg_header_trim]
diff --git a/docs/ref/msg/nng_msg_header_append.adoc b/docs/ref/msg/nng_msg_header_append.adoc
new file mode 100644
index 00000000..4e7feef4
--- /dev/null
+++ b/docs/ref/msg/nng_msg_header_append.adoc
@@ -0,0 +1,37 @@
+## nng_msg_header_append
+
+Append to message header.
+
+### Synopsis
+
+```c
+#include <nng/nng.h>
+
+int nng_msg_header_append(nng_msg *msg, const void *val, size_t size);
+int nng_msg_header_append_u16(nng_msg *msg, uint16_t val16);
+int nng_msg_header_append_u32(nng_msg *msg, uint32_t val32);
+int nng_msg_header_append_u64(nng_msg *msg, uint64_t val64);
+```
+
+### Description
+
+These functions append data to the end of the headers of message _msg_, reallocating it if necessary.
+
+The `nng_msg_header_append` function appends _size_ bytes, copying them from _val_.
+The remaining functions append the value (such as _val32_) in network-byte order (big-endian).
+
+### Return Values
+
+These functions return 0 on success, and non-zero otherwise.
+
+### Errors
+
+[horizontal]
+`NNG_ENOMEM`:: Insufficient free memory exists.
+
+### See Also
+
+xref:nng_msg_header.adoc[nng_msg_header],
+xref:nng_msg_header_chop.adoc[nng_msg_header_chop],
+xref:nng_msg_header_insert.adoc[nng_msg_header_insert],
+xref:nng_msg_header_trim.adoc[nng_msg_header_trim] \ No newline at end of file
diff --git a/docs/ref/msg/nng_msg_header_chop.adoc b/docs/ref/msg/nng_msg_header_chop.adoc
new file mode 100644
index 00000000..d252ae13
--- /dev/null
+++ b/docs/ref/msg/nng_msg_header_chop.adoc
@@ -0,0 +1,39 @@
+## nng_msg_header_chop
+
+Remove data from end of message header.
+
+### Synopsis
+
+```c
+#include <nng/nng.h>
+
+int nng_msg_header_chop(nng_msg *msg, size_t size);
+int nng_msg_header_chop_u16(nng_msg *msg, uint16_t *val16);
+int nng_msg_header_chop_u32(nng_msg *msg, uint32_t *val32);
+int nng_msg_header_chop_u64(nng_msg *msg, uint64_t *val64);
+```
+
+### Description
+
+Theses functions remove data from the end of the header of message _msg_.
+
+The `nng_msg_header_chop` function removes _size_ bytes.
+The remaining functions remove 2, 4, or 8 bytes, and stores them in the value (such as _val32_),
+after converting them from network-byte order (big-endian) to native byte order.
+
+### Return Values
+
+These function return 0 on success, and non-zero otherwise.
+
+### Errors
+
+[horizontal]
+`NNG_EINVAL`:: The message header is too short to remove the requested data.
+
+### See Also
+
+xref:nng_msg_header.adoc[nng_msg_header],
+xref:nng_msg_header_append.adoc[nng_msg_header_append],
+xref:nng_msg_header_insert.adoc[nng_msg_header_insert],
+xref:nng_msg_header_len.adoc[nng_msg_header_len],
+xref:nng_msg_header_trim.adoc[nng_msg_header_trim]
diff --git a/docs/ref/msg/nng_msg_header_clear.adoc b/docs/ref/msg/nng_msg_header_clear.adoc
new file mode 100644
index 00000000..c8eff60b
--- /dev/null
+++ b/docs/ref/msg/nng_msg_header_clear.adoc
@@ -0,0 +1,19 @@
+## nng_msg_header_clear
+
+Clear message header.
+
+### Synopsis
+
+```c
+#include <nng/nng.h>
+
+void nng_msg_header_clear(nng_msg *msg);
+```
+
+### Description
+
+The `nng_msg_clear` function resets the header length of _msg_ to zero.
+
+### See Also
+
+xref:nng_msg_header.adoc[nng_msg_header]
diff --git a/docs/ref/msg/nng_msg_header_insert.adoc b/docs/ref/msg/nng_msg_header_insert.adoc
new file mode 100644
index 00000000..0ef19acd
--- /dev/null
+++ b/docs/ref/msg/nng_msg_header_insert.adoc
@@ -0,0 +1,37 @@
+## nng_msg_header_insert
+
+Prepend to message header.
+
+### Synopsis
+
+```c
+#include <nng/nng.h>
+
+int nng_msg_header_insert(nng_msg *msg, const void *val, size_t size);
+int nng_msg_header_insert_u16(nng_msg *msg, uint16_t val16);
+int nng_msg_header_insert_u32(nng_msg *msg, uint32_t val32);
+int nng_msg_header_insert_u64(nng_msg *msg, uint64_t val64);
+```
+
+### Description
+
+These function prependsdata to the front of the headers of message _msg_, reallocating if necessary.
+
+The `nng_msg_header_insert` function prepends _size_ bytes, copying them from _val_.
+The remaining functions prepend the specified value (such as _val32_) in network-byte order (big-endian).
+
+### Return Values
+
+These functions return 0 on success, and non-zero otherwise.
+
+### Errors
+
+[horizontal]
+`NNG_ENOMEM`:: Insufficient free memory exists.
+
+### See Also
+
+xref:nng_msg_header.adoc[nng_msg_header],
+xref:nng_msg_header_append.adoc[nng_msg_header_append],
+xref:nng_msg_header_trim.adoc[nng_msg_header_trim],
+xref:nng_msg_realloc.adoc[nng_msg_realloc],
diff --git a/docs/ref/msg/nng_msg_header_len.adoc b/docs/ref/msg/nng_msg_header_len.adoc
new file mode 100644
index 00000000..75b46cd7
--- /dev/null
+++ b/docs/ref/msg/nng_msg_header_len.adoc
@@ -0,0 +1,23 @@
+## nng_msg_header_len
+
+Return message header length.
+
+### Synopsis
+
+```c
+#include <nng/nng.h>
+
+size_t nng_msg_header_len(nng_msg *msg);
+```
+
+### Description
+
+The `nng_msg_header_len` returns the length of message header of _msg_.
+
+### Return Values
+
+Length of message header.
+
+### See Also
+
+xref:nng_msg_header.adoc[nng_msg_header]
diff --git a/docs/ref/msg/nng_msg_header_trim.adoc b/docs/ref/msg/nng_msg_header_trim.adoc
new file mode 100644
index 00000000..bad67793
--- /dev/null
+++ b/docs/ref/msg/nng_msg_header_trim.adoc
@@ -0,0 +1,39 @@
+## nng_msg_header_trim
+
+Remove data from start of message header.
+
+### Synopsis
+
+```c
+#include <nng/nng.h>
+
+int nng_msg_header_trim(nng_msg *msg, size_t size);
+int nng_msg_header_trim_u16(nng_msg *msg, uint16_t *val16);
+int nng_msg_header_trim_u32(nng_msg *msg, uint32_t *val32);
+int nng_msg_header_trim_u64(nng_msg *msg, uint64_t *val64);
+```
+
+### Description
+
+These functions remove data from the start of the header of message _msg_.
+
+The `nng_msg_header_trim` function removes _size_ bytes.
+The remaining functions removes 2, 4, or 8 bytes, and stores them in the value (such as _val32_),
+after converting them from network-byte order (big-endian) to native byte order.
+
+### Return Values
+
+This function returns 0 on success, and non-zero otherwise.
+
+### Errors
+
+[horizontal]
+`NNG_EINVAL`:: The message header is too short to remove the requested data.
+
+### See Also
+
+xref:nng_msg_header.adoc[nng_msg_header],
+xref:nng_msg_header_append.adoc[nng_msg_header_append],
+xref:nng_msg_header_chop.adoc[nng_msg_header_chop],
+xref:nng_msg_header_insert.adoc[nng_msg_header_insert],
+xref:nng_msg_header_len.adoc[nng_msg_header_len],
diff --git a/docs/ref/msg/nng_msg_insert.adoc b/docs/ref/msg/nng_msg_insert.adoc
new file mode 100644
index 00000000..7787a0a4
--- /dev/null
+++ b/docs/ref/msg/nng_msg_insert.adoc
@@ -0,0 +1,39 @@
+## nng_msg_insert
+
+Prepend to message body.
+
+### Synopsis
+
+```c
+#include <nng/nng.h>
+
+int nng_msg_insert(nng_msg *msg, const void *val, size_t size);
+int nng_msg_insert_u16(nng_msg *msg, uint16_t val16);
+int nng_msg_insert_u32(nng_msg *msg, uint32_t val32);
+int nng_msg_insert_u64(nng_msg *msg, uint64_t val64);
+```
+
+### Description
+
+These functions prepend data to the front of the body of message _msg_, reallocating it if necessary.footnote:[These functions make use of space pre-allocated in front of the message body if available.
+Thus, they can often avoid performing any reallocation.]
+
+The `nng_msg_insert` function prepends _size_ bytes, copying them from _val_.
+The remaining functions prepend the specified value (such as _val32_) in network-byte order (big-endian).
+
+
+### Return Values
+
+These functions return 0 on success, and non-zero otherwise.
+
+### Errors
+
+[horizontal]
+`NNG_ENOMEM`:: Insufficient free memory exists.
+
+### See Also
+
+xref:nng_msg_append.adoc[nng_msg_append],
+xref:nng_msg_body.adoc[nng_msg_body],
+xref:nng_msg_trim.adoc[nng_msg_trim],
+xref:nng_msg_realloc.adoc[nng_msg_realloc]
diff --git a/docs/ref/msg/nng_msg_len.adoc b/docs/ref/msg/nng_msg_len.adoc
new file mode 100644
index 00000000..0f2d1ed0
--- /dev/null
+++ b/docs/ref/msg/nng_msg_len.adoc
@@ -0,0 +1,25 @@
+## nng_msg_len
+
+Return message body length.
+
+### Synopsis
+
+```c
+#include <nng/nng.h>
+
+size_t nng_msg_len(nng_msg *msg);
+```
+
+### Description
+
+The `nng_msg_len` returns the length of the body of message _msg_.
+
+### Return Values
+
+Length of message body.
+
+### See Also
+
+xref:nng_msg_alloc.adoc[nng_msg_alloc],
+xref:nng_msg_body.adoc[nng_msg_body],
+xref:nng_msg_capacity.adoc[nng_msg_capacity]
diff --git a/docs/ref/msg/nng_msg_realloc.adoc b/docs/ref/msg/nng_msg_realloc.adoc
new file mode 100644
index 00000000..bf6e4831
--- /dev/null
+++ b/docs/ref/msg/nng_msg_realloc.adoc
@@ -0,0 +1,41 @@
+## nng_msg_realloc
+
+Reallocate a message.
+
+### Synopsis
+
+```c
+#include <nng/nng.h>
+
+int nng_msg_realloc(nng_msg *msg, size_t size);
+```
+
+### Description
+
+The `nng_msg_realloc` function re-allocates a message so that it has a body of length _size_.
+This message attempts to avoid extra allocations, and will reuse the existing memory when possible.
+
+Reallocation is guaranteed to succeeed new length is less than xref:nng_msg_capacity.adoc[`nng_msg_capacity`].
+
+TIP: `nng_msg_realloc` is suitable for creating space for direct writing of data.
+When appending many small pieces of data to a message using xref:nng_msg_append.adoc[`nng_msg_append`], allocations may be reduced by first using xref:nng_msg_reserve.adoc[`nng_msg_reserve`] to create sufficient space.
+
+NOTE: Reallocation invalidates any previously obtained pointers to the message body or header.
+
+### Return Values
+
+This function returns 0 on success, and non-zero otherwise.
+
+### Errors
+
+[horizontal]
+`NNG_ENOMEM`:: Insufficient free memory exists to reallocate a message.
+
+### See Also
+
+xref:nng_msg_append.adoc[nng_msg_append],
+xref:nng_msg_body.adoc[nng_msg_body],
+xref:nng_msg_insert.adoc[nng_msg_insert],
+xref:nng_msg_len.adoc[nng_msg_len],
+xref:nng_msg_reserve.adoc[nng_msg_reserve],
+xref:nng_msg_trim.adoc[nng_msg_trim]
diff --git a/docs/ref/msg/nng_msg_reserve.adoc b/docs/ref/msg/nng_msg_reserve.adoc
new file mode 100644
index 00000000..6f9eff50
--- /dev/null
+++ b/docs/ref/msg/nng_msg_reserve.adoc
@@ -0,0 +1,38 @@
+## nng_msg_reserve
+
+Reserve storage for a message.
+
+### Synopsis
+
+```c
+#include <nng/nng.h>
+
+int nng_msg_reserve(nng_msg *msg, size_t capacity);
+```
+
+### Description
+
+The `nng_msg_reserve` function ensures a message has allocated enough storage to accommodate a body of the given length.
+This message attempts to avoid extra allocations, and will reuse the existing memory when possible.
+
+TIP: Using this message before xref:nng_msg_append.adoc[`nng_msg_append`] will prevent additional memory allocations until the message's length exceeds the alotted capacity.
+
+NOTE: Reallocation invalidates any previously obtained pointers to the message body or header.
+
+### Return Values
+
+This function returns 0 on success, and non-zero otherwise.
+
+### Errors
+
+[horizontal]
+`NNG_ENOMEM`:: Insufficient free memory exists to reallocate a message.
+
+### See Also
+
+xref:nng_msg_alloc.adoc[nng_msg_alloc],
+xref:nng_msg_append.adoc[nng_msg_append],
+xref:nng_msg_body.adoc[nng_msg_body],
+xref:nng_msg_capacity.adoc[nng_msg_capacity],
+xref:nng_msg_insert.adoc[nng_msg_insert],
+xref:nng_msg_len.adoc[nng_msg_len]
diff --git a/docs/ref/msg/nng_msg_set_pipe.adoc b/docs/ref/msg/nng_msg_set_pipe.adoc
new file mode 100644
index 00000000..693cb584
--- /dev/null
+++ b/docs/ref/msg/nng_msg_set_pipe.adoc
@@ -0,0 +1,23 @@
+## nng_msg_set_pipe
+
+Set pipe for message.
+
+### Synopsis
+
+```c
+#include <nng/nng.h>
+
+void nng_msg_set_pipe(nng_msg *msg, nng_pipe p);
+```
+
+### Description
+
+The `nng_msg_set_pipe` function sets the xref:../pipe/index.adoc[pipe] associated with message _m_ to _p_.
+This is most often useful when used with protocols that support directing a message to a specific peer.
+
+Not all protocols support overriding the destination pipe.
+
+### See Also
+
+xref:nng_msg_get_pipe.adoc[nng_msg_get_pipe],
+xref:../pipe/nng_pipe_get.adoc[nng_pipe_getopt]
diff --git a/docs/ref/msg/nng_msg_trim.adoc b/docs/ref/msg/nng_msg_trim.adoc
new file mode 100644
index 00000000..58efff62
--- /dev/null
+++ b/docs/ref/msg/nng_msg_trim.adoc
@@ -0,0 +1,37 @@
+## nng_msg_trim
+
+Remove data from start of message body.
+
+### Synopsis
+
+```c
+#include <nng/nng.h>
+
+int nng_msg_trim(nng_msg *msg, size_t size);
+int nng_msg_trim_u16(nng_msg *msg, uint16_t *val16);
+int nng_msg_trim_u32(nng_msg *msg, uint32_t *val32);
+int nng_msg_trim_u64(nng_msg *msg, uint64_t *val64);
+```
+
+### Description
+
+These functions remove data from the start of the body of message _msg_.
+
+The `nng_msg_trim` function removes _size_ bytes.
+The remaining functions remove 2, 4, or 8 bytes, and stores them in the value (such as _val32_), after converting them from network-byte order (big-endian) to native byte order.
+
+### Return Values
+
+These functions return 0 on success, and non-zero otherwise.
+
+### Errors
+
+[horizontal]
+`NNG_EINVAL`:: The message body is too short to remove the requested data.
+
+### See Also
+
+xref:nng_msg_body.adoc[nng_msg_body],
+xref:nng_msg_chop.adoc[nng_msg_chop],
+xref:nng_msg_free.adoc[nng_msg_free],
+xref:nng_msg_insert.adoc[nng_msg_insert]