aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Bielik <Robert.Bielik@dirac.com>2019-12-28 08:35:17 +0100
committerGarrett D'Amore <garrett@damore.org>2019-12-29 22:39:13 -0800
commit86b4573c22af46582d5018f9b86cb9f96f5f6c44 (patch)
tree8691841228a0a3bb20cdbe9227f1c4023804eb54
parent0cf84675edef0290a74dfd1e289c0b9e1bb3fb5c (diff)
downloadnng-86b4573c22af46582d5018f9b86cb9f96f5f6c44.tar.gz
nng-86b4573c22af46582d5018f9b86cb9f96f5f6c44.tar.bz2
nng-86b4573c22af46582d5018f9b86cb9f96f5f6c44.zip
Add http server method for getting address
-rw-r--r--docs/man/libnng.3.adoc1
-rw-r--r--docs/man/nng_http_server_get_addr.3http.adoc46
-rw-r--r--include/nng/supplemental/http/http.h5
-rw-r--r--src/supplemental/http/http_public.c18
4 files changed, 69 insertions, 1 deletions
diff --git a/docs/man/libnng.3.adoc b/docs/man/libnng.3.adoc
index bf2a602d..35c9b0f4 100644
--- a/docs/man/libnng.3.adoc
+++ b/docs/man/libnng.3.adoc
@@ -410,6 +410,7 @@ These functions are intended for use with HTTP server applications.
|xref:nng_http_hijack.3http.adoc[nng_http_hijack()]|hijack HTTP server connection
|xref:nng_http_server_add_handler.3http.adoc[nng_http_server_add_handler()]|add HTTP server handler
|xref:nng_http_server_del_handler.3http.adoc[nng_http_server_del_handler()]|delete HTTP server handler
+|xref:nng_http_server_get_addr.3http.adoc[nng_http_server_get_addr()]|get HTTP server address
|xref:nng_http_server_get_tls.3http.adoc[nng_http_server_get_tls()]|get HTTP server TLS configuration
|xref:nng_http_server_hold.3http.adoc[nng_http_server_hold()]|get and hold HTTP server instance
|xref:nng_http_server_release.3http.adoc[nng_http_server_release()]|release HTTP server instance
diff --git a/docs/man/nng_http_server_get_addr.3http.adoc b/docs/man/nng_http_server_get_addr.3http.adoc
new file mode 100644
index 00000000..dc699014
--- /dev/null
+++ b/docs/man/nng_http_server_get_addr.3http.adoc
@@ -0,0 +1,46 @@
+= nng_http_server_get_addr(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_server_get_addr - get HTTP server address
+
+== SYNOPSIS
+
+[source, c]
+----
+#include <nng/nng.h>
+#include <nng/supplemental/http/http.h>
+
+int nng_http_server_get_addr(nng_http_server *server, nng_sockaddr *sap);
+----
+
+== DESCRIPTION
+
+`nng_http_server_get_addr()`::
+This function is used to retrieve an xref:nng_sockaddr.5.adoc[`nng_sockaddr`]
+into the value referenced by _sap_ for the server _server_.
+
+== RETURN VALUES
+
+This function returns 0 on success, and non-zero otherwise.
+
+== ERRORS
+
+`NNG_EINVAL`:: Either _server_ or _sap_ parameter is NULL.
+`NNG_ENOTSUP`:: HTTP not supported.
+
+
+== SEE ALSO
+
+[.text-left]
+xref:nng_sockaddr.5.adoc[nng_sockaddr(5)],
+xref:nng.7.adoc[nng(7)]
diff --git a/include/nng/supplemental/http/http.h b/include/nng/supplemental/http/http.h
index d0854981..e0cbd501 100644
--- a/include/nng/supplemental/http/http.h
+++ b/include/nng/supplemental/http/http.h
@@ -437,6 +437,11 @@ NNG_DECL int nng_http_server_set_tls(
NNG_DECL int nng_http_server_get_tls(
nng_http_server *, struct nng_tls_config **);
+// nng_http_server_get_addr obtains the address with which the server was
+// initialized or returns NNG_EINVAL. Useful for instance when the port has
+// been automatically assigned.
+NNG_DECL int nng_http_server_get_addr(nng_http_server *, nng_sockaddr *);
+
// nng_http_server_set_error_page sets a custom error page (HTML) content
// to be sent for the given error code. This is used when the error is
// generated internally by the framework, or when the application returns
diff --git a/src/supplemental/http/http_public.c b/src/supplemental/http/http_public.c
index 3152c41f..d2e876ab 100644
--- a/src/supplemental/http/http_public.c
+++ b/src/supplemental/http/http_public.c
@@ -9,8 +9,8 @@
//
#include "core/nng_impl.h"
-#include "nng/supplemental/http/http.h"
#include "http_api.h"
+#include "nng/supplemental/http/http.h"
#include "nng/supplemental/tls/tls.h"
// Symbols in this file are "public" versions of the HTTP API.
@@ -780,6 +780,22 @@ nng_http_server_get_tls(nng_http_server *srv, struct nng_tls_config **cfgp)
}
int
+nng_http_server_get_addr(nng_http_server *srv, nng_sockaddr *addrp)
+{
+#ifdef NNG_SUPP_HTTP
+ size_t size = sizeof(nng_sockaddr);
+ if (srv == NULL || addrp == NULL)
+ return NNG_EINVAL;
+ return (nni_http_server_getx(
+ srv, NNG_OPT_LOCADDR, addrp, &size, NNI_TYPE_SOCKADDR));
+#else
+ NNI_ARG_UNUSED(srv);
+ NNI_ARG_UNUSED(addrp);
+ return (NNG_ENOTSUP);
+#endif
+}
+
+int
nng_http_server_res_error(nng_http_server *srv, nng_http_res *res)
{
#ifdef NNG_SUPP_HTTP