nanomsg next generation NNG  
Home GitHub Documentation

This documentation is for version 0.5.0 of nng, but the latest released version is v1.8.0. see the documentation for v1.8.0 for the most up-to-date information.
nng_http_handler_alloc(3)

SYNOPSIS

#include <nng/nng.h>
#include <nng/supplemental/http/http.h>

typedef struct nng_http_handler nng_http_handler;

int nng_http_handler_alloc(nng_http_handler **hp, const char *path,
    void (*func)(nng_aio *);
int nng_http_handler_alloc_directory(nng_http_handler **hp, const char *path,
    const char *dirname);
int nng_http_handler_alloc_file(nng_http_handler **hp, const char *path,
    const char *filename);
int nng_http_handler_alloc_static(nng_http_handler **hp, const char *path,
    const void *data, size_t size, const char *content_type);

DESCRIPTION

The nng_http_handler_alloc() family of functions allocate a handler which will be used to process requests coming into an HTTP server. On success, a pointer to the handler is stored at the located pointed to by hp.

Every handler has a Request-URI to which it refers, which is determined by the path argument. Only the path component of the Request URI is considered when determining whether the handler should be called.

Additionally each handler has a method it is registered to handle (the default is "GET", see nng_http_handler_set_method(3)), and optionally a 'Host' header it can be matched against (see <<nng_http_handler_set_host#,nng_http_handler_set_host(3)).

In some cases, a handler may reference a logical tree rather (directory) rather than just a single element. (See nng_http_handler_set_tree(3)).

Custom Handler

The generic (first) form of this creates a handler that uses a user-supplied function to process HTTP requests. This function uses the asynchronous I/O framework. The function takes a pointer to an nng_aio structure. That structure will be passed with the following input values (retrieved with nng_aio_get_input(3)):

0: nng_http_req * request

The client’s HTTP request.

1: nng_http_handler *handler

Pointer to the handler object.

2: nng_http_conn *conn

The underlying HTTP connection.

The handler should create an nng_http_res * response (such as via nng_http_res_alloc(3) or nng_http_res_alloc_error(3)) and store that in as the first output (index 0) with nng_aio_set_output(3).

Alternatively, the handler may send the HTTP response (and any associated body data) itself using the connection. In that case the output at index 0 of the aio should be NULL.

Finally, using the nng_aio_finish(3) function, the aio should be completed successfully. If any non-zero status is returned back to the caller instead, then a generic 500 response will be created and sent, if possible, and the connection will be closed.

Directory Handler

The second member of this family, nng_http_handler_alloc_directory(), creates a handler configured to serve a directory tree. The uri is taken as the root, and files are served from the directory tree rooted at path.

When the client Request-URI resolves to a directory in the filesystem, the handler looks first for a file named index.html or index.htm. If one is found, then that file is returned back to the client. If no such index file exists, then an NNG_HTTP_STATUS_NOT_FOUND (404) error is sent back to the client.

The Content-Type will be set automatically based upon the extension of the requsted file name. If a content type cannot be determined from the extension, then application/octet-stream is used.

File Handler

The third member of this family, nng_http_handler_alloc_file(), creates a handler to serve up a single file; it does not traverse directories or search for index.html or index.htm files.

The Content-Type will be set automatically based upon the extension of the requsted file name. If a content type cannot be determined from the extension, then application/octet-stream is used.

Static Handler

The fourth member of this family, nng_http_handler_alloc_static(), creates a handler to serve up fixed content located in program data. The client is sent the data, with Content-Length of size bytes, and Content-Type of content_type.

RETURN VALUES

This function returns 0 on success, and non-zero otherwise.

ERRORS

NNG_EINVAL

An invalid path was specified.

NNG_ENOMEM

Insufficient free memory exists to allocate a message.

NNG_ENOTSUP

No support for HTTP in the library.

NNG Reference Manual v0.5.0 © 2019 Staysail Systems, Inc, © 2018 Capitar IT Group BV
This document is supplied under the MIT License.
nanomsg™ and nng™ are trademarks of Garrett D'Amore.