diff options
| author | Garrett D'Amore <garrett@damore.org> | 2018-08-30 14:23:39 -0700 |
|---|---|---|
| committer | Garrett D'Amore <garrett@damore.org> | 2018-08-30 15:28:43 -0700 |
| commit | 0cc96c69b3fce09a9c4a8d467d17cfbda76bc02f (patch) | |
| tree | 855f6995749e56f4a9e69ce7d19437b780d63ba2 /docs | |
| parent | c96b7665469679563ee642a42d175aa24a957f26 (diff) | |
| download | nng-0cc96c69b3fce09a9c4a8d467d17cfbda76bc02f.tar.gz nng-0cc96c69b3fce09a9c4a8d467d17cfbda76bc02f.tar.bz2 nng-0cc96c69b3fce09a9c4a8d467d17cfbda76bc02f.zip | |
fixes #681 HTTP convenience GET method desired...
This adds a couple of new methods, and related documentation
and test cases.
Diffstat (limited to 'docs')
| -rw-r--r-- | docs/man/CMakeLists.txt | 4 | ||||
| -rw-r--r-- | docs/man/libnng.3.adoc | 16 | ||||
| -rw-r--r-- | docs/man/nng_http_client_transact.3http.adoc | 89 | ||||
| -rw-r--r-- | docs/man/nng_http_conn_read_res.3http.adoc | 8 | ||||
| -rw-r--r-- | docs/man/nng_http_conn_transact.3http.adoc | 98 | ||||
| -rw-r--r-- | docs/man/nng_http_conn_write_req.3http.adoc | 8 | ||||
| -rw-r--r-- | docs/man/nng_http_conn_write_res.3http.adoc | 8 | ||||
| -rw-r--r-- | docs/man/nng_http_req_get_data.3http.adoc | 50 | ||||
| -rw-r--r-- | docs/man/nng_http_res_get_data.3http.adoc | 50 |
9 files changed, 325 insertions, 6 deletions
diff --git a/docs/man/CMakeLists.txt b/docs/man/CMakeLists.txt index af644a62..21651ba5 100644 --- a/docs/man/CMakeLists.txt +++ b/docs/man/CMakeLists.txt @@ -198,11 +198,13 @@ if (NNG_ENABLE_DOC) nng_http_client_free nng_http_client_get_tls nng_http_client_set_tls + nng_http_client_transact nng_http_conn_close nng_http_conn_read nng_http_conn_read_all nng_http_conn_read_req nng_http_conn_read_res + nng_http_conn_transact nng_http_conn_write nng_http_conn_write_all nng_http_conn_write_req @@ -220,6 +222,7 @@ if (NNG_ENABLE_DOC) nng_http_req_copy_data nng_http_req_del_header nng_http_req_free + nng_http_req_get_data nng_http_req_get_header nng_http_req_get_method nng_http_req_get_uri @@ -235,6 +238,7 @@ if (NNG_ENABLE_DOC) nng_http_res_copy_data nng_http_res_del_header nng_http_res_free + nng_http_res_get_data nng_http_res_get_header nng_http_res_get_reason nng_http_res_get_status diff --git a/docs/man/libnng.3.adoc b/docs/man/libnng.3.adoc index 23306997..3e3037f9 100644 --- a/docs/man/libnng.3.adoc +++ b/docs/man/libnng.3.adoc @@ -287,6 +287,7 @@ and connections. |<<nng_http_req_copy_data.3http#,nng_http_req_copy_data()>>|copy HTTP request body |<<nng_http_req_del_header.3http#,nng_http_req_del_header()>>|delete HTTP request header |<<nng_http_req_free.3http#,nng_http_req_free()>>|free HTTP request structure +|<<nng_http_req_get_data.3http#,nng_http_req_get_data()>>|get HTTP request body |<<nng_http_req_get_header.3http#,nng_http_req_get_header()>>|return HTTP request header |<<nng_http_req_get_method.3http#,nng_http_req_get_method()>>|return HTTP request method |<<nng_http_req_get_uri.3http#,nng_http_req_get_uri()>>|return HTTP request URI @@ -302,11 +303,12 @@ and connections. |<<nng_http_res_copy_data.3http#,nng_http_res_copy_data()>>|copy HTTP response body |<<nng_http_res_del_header.3http#,nng_http_res_del_header()>>|delete HTTP response header |<<nng_http_res_free.3http#,nng_http_res_free()>>|free HTTP response structure -|<<nng_http_res_set_data.3http#,nng_http_res_set_data()>>|set HTTP response body +|<<nng_http_res_get_data.3http#,nng_http_res_get_data()>>|get HTTP response body |<<nng_http_res_get_header.3http#,nng_http_res_get_header()>>|return HTTP response header |<<nng_http_res_get_reason.3http#,nng_http_res_get_reason()>>|return HTTP response reason |<<nng_http_res_get_status.3http#,nng_http_res_get_status()>>|return HTTP response status |<<nng_http_res_get_version.3http#,nng_http_res_get_version()>>|return HTTP response protocol version +|<<nng_http_res_set_data.3http#,nng_http_res_set_data()>>|set HTTP response body |<<nng_http_res_set_header.3http#,nng_http_res_set_header()>>|set HTTP response header |<<nng_http_res_set_reason.3http#,nng_http_res_set_reason()>>|set HTTP response reason |<<nng_http_res_set_status.3http#,nng_http_res_set_status()>>|set HTTP response status @@ -318,11 +320,13 @@ and connections. These functions are intended for use with HTTP client applications. |=== -| <<nng_http_client_alloc.3http#,nng_http_client_alloc()>>|allocate HTTP client -| <<nng_http_client_connect.3http#,nng_http_client_connect()>>|establish HTTP client connection -| <<nng_http_client_free.3http#,nng_http_client_free()>>|free HTTP client -| <<nng_http_client_get_tls.3http#,nng_http_client_get_tls()>>|get HTTP client TLS configuration -| <<nng_http_client_set_tls.3http#,nng_http_client_set_tls()>>|set HTTP client TLS configuration +|<<nng_http_client_alloc.3http#,nng_http_client_alloc()>>|allocate HTTP client +|<<nng_http_client_connect.3http#,nng_http_client_connect()>>|establish HTTP client connection +|<<nng_http_client_free.3http#,nng_http_client_free()>>|free HTTP client +|<<nng_http_client_get_tls.3http#,nng_http_client_get_tls()>>|get HTTP client TLS configuration +|<<nng_http_client_set_tls.3http#,nng_http_client_set_tls()>>|set HTTP client TLS configuration +|<<nng_http_client_transact.3http#,nng_http_client_transact()>>|perform one HTTP transaction +|<<nng_http_conn_transact.3http#,nng_http_conn_transact()>>|perform one HTTP transaction on connection |=== ==== HTTP Server Functions diff --git a/docs/man/nng_http_client_transact.3http.adoc b/docs/man/nng_http_client_transact.3http.adoc new file mode 100644 index 00000000..a469dc50 --- /dev/null +++ b/docs/man/nng_http_client_transact.3http.adoc @@ -0,0 +1,89 @@ += nng_http_client_transact(3http) +// +// Copyright 2018 Staysail Systems, Inc. <info@staysail.tech> +// Copyright 2018 Capitar IT Group BV <info@capitar.com> +// +// This document is supplied under the terms of the MIT License, a +// copy of which should be located in the distribution where this +// file was obtained (LICENSE.txt). A copy of the license may also be +// found online at https://opensource.org/licenses/MIT. +// + +== NAME + +nng_http_client_transact - perform one HTTP transaction + +== SYNOPSIS + +[source, c] +---- +#include <nng/nng.h> +#include <nng/supplemental/http/http.h> + +void nng_http_client_transact(nng_http_client *client, nng_http_req *req, + nng_http_res *res, nng_aio *aio); +---- + +== DESCRIPTION + +The `nng_http_client_transact()` function is used to perform a complete +HTTP exchange. +It creates a new connection using _client_, performs the transaction by +sending the request _req_ +(and attached body data) to the remote server, then reading the response +_res_, and finally closes the connection that it created. +The entire response is read, including any associated body, which can +subsequently be obtained using +`<<nng_http_res_get_data.3http#,nng_http_res_get_data()>>`. + +This function is intended to make creation of client applications easier, +by performing multiple asynchronous operations required to complete an +entire HTTP transaction. + +A similar function, +`<<nng_http_conn_transact.3http#,nng_http_conn_transact()>>`, +exists. +That function behaves similarily, but uses an existing connection, which +can be reused. + +NOTE: This function does not support reading data sent using chunked +transfer encoding, and if the server attempts to do so, the underlying +connection will be closed and an `NNG_ENOTSUP` error will be returned. +This limitation is considered a bug, and a fix is planned for the future. + +WARNING: If the remote server tries to send an extremely large buffer, +then a corresponding allocation will be made, which can lead to denial +of service attacks. +Client applications should take care to use this only with reasonably +trust-worthy servers. + +This function returns immediately, with no return value. +Completion of the operation is signaled via the _aio_, and the final result +may be obtained via `<<nng_aio_result.3#,nng_aio_result()>>`. +That result will either be zero or an error code. + +== RETURN VALUES + +None. + +== ERRORS + +[horizontal] +`NNG_ECANCELED`:: The operation was canceled. +`NNG_ECLOSED`:: The connection was closed. +`NNG_ECONNRESET`:: The peer closed the connection. +`NNG_ENOMEM`:: Insufficient free memory to perform the operation. +`NNG_ENOTSUP`:: HTTP operations are not supported, or peer sent chunked encoding. +`NNG_EPROTO`:: An HTTP protocol error occurred. +`NNG_ETIMEDOUT`:: Timeout waiting for data from the connection. + +== SEE ALSO + +[.text-left] +<<nng_aio_alloc.3#,nng_aio_alloc(3)>>, +<<nng_aio_result.3#,nng_aio_result(3)>>, +<<nng_strerror.3#,nng_strerror(3)>>, +<<nng_http_client_connect.3http#,nng_http_client_connect(3http)>>, +<<nng_http_conn_transact.3http#,nng_http_conn_transact(3http)>>, +<<nng_http_res_get_data.3http#,nng_http_res_get_data(3http)>>, +<<nng.7#,nng(7)>> diff --git a/docs/man/nng_http_conn_read_res.3http.adoc b/docs/man/nng_http_conn_read_res.3http.adoc index 4e2f2713..96e64ed6 100644 --- a/docs/man/nng_http_conn_read_res.3http.adoc +++ b/docs/man/nng_http_conn_read_res.3http.adoc @@ -42,6 +42,12 @@ the operation is signaled via the _aio_, and the final result may be obtained via `<<nng_aio_result.3#,nng_aio_result()>>`. That result will either be zero or an error code. +NOTE: Consider using the +`<<nng_http_client_transact.3http#,nng_http_client_transact()>>` or +`<<nng_http_conn_transact.3http#,nng_http_conn_transact()>>` functions, +which provide a simpler interface for performing a complete HTTP client +transaction. + == RETURN VALUES None. @@ -63,5 +69,7 @@ None. <<nng_aio_result.3#,nng_aio_result(3)>>, <<nng_strerror.3#,nng_strerror(3)>>, <<nng_http_client_connect.3http#,nng_http_client_connect(3http)>>, +<<nng_http_client_transact.3http#,nng_http_client_transact(3http)>>, +<<nng_http_conn_transact.3http#,nng_http_conn_transact(3http)>>, <<nng_http_conn_read_all.3http#,nng_http_conn_read_all(3http)>>, <<nng.7#,nng(7)>> diff --git a/docs/man/nng_http_conn_transact.3http.adoc b/docs/man/nng_http_conn_transact.3http.adoc new file mode 100644 index 00000000..bd41f659 --- /dev/null +++ b/docs/man/nng_http_conn_transact.3http.adoc @@ -0,0 +1,98 @@ += nng_http_conn_transact(3http) +// +// Copyright 2018 Staysail Systems, Inc. <info@staysail.tech> +// Copyright 2018 Capitar IT Group BV <info@capitar.com> +// +// This document is supplied under the terms of the MIT License, a +// copy of which should be located in the distribution where this +// file was obtained (LICENSE.txt). A copy of the license may also be +// found online at https://opensource.org/licenses/MIT. +// + +== NAME + +nng_http_conn_transact - perform one HTTP transaction on connection + +== SYNOPSIS + +[source, c] +---- +#include <nng/nng.h> +#include <nng/supplemental/http/http.h> + +void nng_http_conn_transact(nng_http_conn *conn, nng_http_req *req, + nng_http_res *res, nng_aio *aio); +---- + +== DESCRIPTION + +The `nng_http_conn_transact()` function is used to perform a complete +HTTP exchange over the connection _conn_, sending the request _req_ +(and attached body data) to the remote server, and reading the response +_res_. +The entire response is read, including any associated body, which can +subsequently be obtained using +`<<nng_http_res_get_data.3http#,nng_http_res_get_data()>>`. + +This function is intended to make creation of client applications easier, +by performing multiple asynchronous operations required to complete an +entire HTTP transaction. + +If an error occurs, the caller should close _conn_ with +`<<nng_http_conn_close.3http#,nng_http_conn_close()>>`, as it may not +necessarily be usable with other transactions. + +A similar function, +`<<nng_http_client_transact.3http#,nng_http_client_transact()>>`, +exists. +That function behaves similarily, but creates a connection on demand +for the transaction, and disposes of it when finished. + +NOTE: This function does not support reading data sent using chunked +transfer encoding, and if the server attempts to do so, the underlying +connection will be closed and an `NNG_ENOTSUP` error will be returned. +This limitation is considered a bug, and a fix is planned for the future. + +WARNING: If the remote server tries to send an extremely large buffer, +then a corresponding allocation will be made, which can lead to denial +of service attacks. +Client applications should take care to use this only with reasonably +trust-worthy servers. + +WARNING: A given connection _conn_ should be used with only one +operation or transaction at a time as HTTP/1.1 has no support for +request interleaving. + +This function returns immediately, with no return value. +Completion of the operation is signaled via the _aio_, and the final result +may be obtained via `<<nng_aio_result.3#,nng_aio_result()>>`. +That result will either be zero or an error code. + +== RETURN VALUES + +None. + +== ERRORS + +[horizontal] +`NNG_ECANCELED`:: The operation was canceled. +`NNG_ECLOSED`:: The connection was closed. +`NNG_ECONNRESET`:: The peer closed the connection. +`NNG_ENOMEM`:: Insufficient free memory to perform the operation. +`NNG_ENOTSUP`:: HTTP operations are not supported, or peer sent chunked encoding. +`NNG_EPROTO`:: An HTTP protocol error occurred. +`NNG_ETIMEDOUT`:: Timeout waiting for data from the connection. + +== SEE ALSO + +[.text-left] +<<nng_aio_alloc.3#,nng_aio_alloc(3)>>, +<<nng_aio_result.3#,nng_aio_result(3)>>, +<<nng_strerror.3#,nng_strerror(3)>>, +<<nng_http_client_connect.3http#,nng_http_client_connect(3http)>>, +<<nng_http_client_transact.3http#,nng_http_client_transact(3http)>>, +<<nng_http_conn_read_res.3http#,nng_http_conn_read_res(3http)>>, +<<nng_http_conn_read_all.3http#,nng_http_conn_read_all(3http)>>, +<<nng_http_conn_write_req.3http#,nng_http_conn_write_req(3http)>>, +<<nng_http_res_get_data.3http#,nng_http_res_get_data(3http)>>, +<<nng.7#,nng(7)>> diff --git a/docs/man/nng_http_conn_write_req.3http.adoc b/docs/man/nng_http_conn_write_req.3http.adoc index 0384e7b1..338ab26d 100644 --- a/docs/man/nng_http_conn_write_req.3http.adoc +++ b/docs/man/nng_http_conn_write_req.3http.adoc @@ -39,6 +39,12 @@ Completion of the operation is signaled via the _aio_, and the final result may be obtained via `<<nng_aio_result.3#,nng_aio_result()>>`. That result will either be zero or an error code. +NOTE: Consider using the +`<<nng_http_client_transact.3http#,nng_http_client_transact()>>` or +`<<nng_http_conn_transact.3http#,nng_http_conn_transact()>>` functions, +which provide a simpler interface for performing a complete HTTP client +transaction. + == RETURN VALUES None. @@ -59,6 +65,8 @@ None. <<nng_aio_alloc.3#,nng_aio_alloc(3)>>, <<nng_aio_result.3#,nng_aio_result(3)>>, <<nng_http_client_connect.3http#,nng_http_client_connect(3http)>>, +<<nng_http_client_transact.3http#,nng_http_client_transact(3http)>>, <<nng_http_conn_read_all.3http#,nng_http_conn_read_all(3http)>>, +<<nng_http_conn_transact.3http#,nng_http_conn_transact(3http)>>, <<nng_strerror.3#,nng_strerror(3)>>, <<nng.7#,nng(7)>> diff --git a/docs/man/nng_http_conn_write_res.3http.adoc b/docs/man/nng_http_conn_write_res.3http.adoc index 2bab9a31..62d7a3d1 100644 --- a/docs/man/nng_http_conn_write_res.3http.adoc +++ b/docs/man/nng_http_conn_write_res.3http.adoc @@ -48,6 +48,12 @@ If however the _res_ contains a header of `Connection:` with a value of `Close` (case-insensitive) or the response corresponds to `HTTP/1.0`, then the connection is immediately after sending the response. +NOTE: Consider using the +`<<nng_http_client_transact.3http#,nng_http_client_transact()>>` or +`<<nng_http_conn_transact.3http#,nng_http_conn_transact()>>` functions, +which provide a simpler interface for performing a complete HTTP client +transaction. + == RETURN VALUES None. @@ -68,6 +74,8 @@ None. <<nng_aio_alloc.3#,nng_aio_alloc(3)>>, <<nng_aio_result.3#,nng_aio_result(3)>>, <<nng_http_client_connect.3http#,nng_http_client_connect(3http)>>, +<<nng_http_client_transact.3http#,nng_http_client_transact(3http)>>, <<nng_http_conn_read_all.3http#,nng_http_conn_read_all(3http)>>, +<<nng_http_conn_transact.3http#,nng_http_conn_transact(3http)>>, <<nng_strerror.3#,nng_strerror(3)>>, <<nng.7#,nng(7)>> diff --git a/docs/man/nng_http_req_get_data.3http.adoc b/docs/man/nng_http_req_get_data.3http.adoc new file mode 100644 index 00000000..cd5c076e --- /dev/null +++ b/docs/man/nng_http_req_get_data.3http.adoc @@ -0,0 +1,50 @@ += nng_http_req_get_data(3http) +// +// Copyright 2018 Staysail Systems, Inc. <info@staysail.tech> +// Copyright 2018 Capitar IT Group BV <info@capitar.com> +// +// This document is supplied under the terms of the MIT License, a +// copy of which should be located in the distribution where this +// file was obtained (LICENSE.txt). A copy of the license may also be +// found online at https://opensource.org/licenses/MIT. +// + +== NAME + +nng_http_req_get_data - get HTTP request body + +== SYNOPSIS + +[source, c] +---- +#include <nng/nng.h> +#include <nng/supplemental/http/http.h> + +void nng_http_req_get_data(nng_http_req *req, void **bodyp, size_t *sizep); +---- + +== DESCRIPTION + +The `nng_http_req_get_data()` gets the HTTP body associated with +the request _req_, storing a pointer to the buffer at the location referenced +by _bodyp_, and the length of the associated buffer at the location referenced +by _sizep_. + +NOTE: The buffer returned is owned by _req_, and will automatically freed +when the request is freed. + +== RETURN VALUES + +None. + +== ERRORS + +None. + +== SEE ALSO + +[.text-left] +<<nng_http_req_alloc.3http#,nng_http_req_alloc(3http)>>, +<<nng_http_req_set_data.3http#,nng_http_req_copy_data(3http)>>, +<<nng_http_req_copy_data.3http#,nng_http_req_copy_data(3http)>>, +<<nng.7#,nng(7)>> diff --git a/docs/man/nng_http_res_get_data.3http.adoc b/docs/man/nng_http_res_get_data.3http.adoc new file mode 100644 index 00000000..44f98c1f --- /dev/null +++ b/docs/man/nng_http_res_get_data.3http.adoc @@ -0,0 +1,50 @@ += nng_http_res_get_data(3http) +// +// Copyright 2018 Staysail Systems, Inc. <info@staysail.tech> +// Copyright 2018 Capitar IT Group BV <info@capitar.com> +// +// This document is supplied under the terms of the MIT License, a +// copy of which should be located in the distribution where this +// file was obtained (LICENSE.txt). A copy of the license may also be +// found online at https://opensource.org/licenses/MIT. +// + +== NAME + +nng_http_res_get_data - get HTTP response body + +== SYNOPSIS + +[source, c] +---- +#include <nng/nng.h> +#include <nng/supplemental/http/http.h> + +void nng_http_res_get_data(nng_http_res *res, void **bodyp, size_t *sizep); +---- + +== DESCRIPTION + +The `nng_http_res_get_data()` gets the HTTP body associated with +the request _res_, storing a pointer to the buffer at the location referenced +by _bodyp_, and the length of the associated buffer at the location referenced +by _sizep_. + +NOTE: The buffer returned is owned by _res_, and will automatically freed +when the request is freed. + +== RETURN VALUES + +None. + +== ERRORS + +None. + +== SEE ALSO + +[.text-left] +<<nng_http_res_alloc.3http#,nng_http_req_alloc(3http)>>, +<<nng_http_res_set_data.3http#,nng_http_req_copy_data(3http)>>, +<<nng_http_res_copy_data.3http#,nng_http_req_copy_data(3http)>>, +<<nng.7#,nng(7)>> |
