Nut/OS  4.10.3
API Reference
HTTP

Hypertext transfer protocol. More...

Collaboration diagram for HTTP:

Data Structures

struct  _REQUEST
 HTTP request information structure. More...
struct  _MIMETYPES
struct  _AUTHINFO
 HTTP authorization information structure. More...
struct  _CGIFUNCTION
 Registered CGI function. More...
struct  _REQUEST_LOOKUP
 Structure for table of interpreted header names. More...

Defines

#define METHOD_GET   1
#define METHOD_POST   2
#define METHOD_HEAD   3
#define HTTP_CONN_CLOSE   1
#define HTTP_CONN_KEEP_ALIVE   2
#define HTTP_OF_USE_HOST_TIME   0x00000001UL
#define HTTP_OF_USE_FILE_TIME   0x00000002UL
#define MAX_BUFFER_SIZE   256
#define MAX_ASP_FUNC_SIZE   64
#define NUM_REQUEST_LOOKUP   sizeof(req_lookup) / sizeof(REQUEST_LOOKUP)
 Number of entries in the header name table.
#define MAX_REQUEST_NAME_SIZE   17
 Size of the largest entry in the header name table.
#define BUFSIZE   512
#define MIN(a, b)   (a<b?a:b)
#define SSI_TYPE_FILE   0x01
#define SSI_TYPE_VIRTUAL   0x02
#define SSI_TYPE_EXEC   0x03
#define SSI_TYPE_ECHO   0x04

Typedefs

typedef struct _REQUEST REQUEST
typedef struct _MIMETYPES MIMETYPES
typedef typedef__END_DECLS
struct _AUTHINFO 
AUTHINFO
typedef typedef__END_DECLS
struct _CGIFUNCTION 
CGIFUNCTION
typedef struct _REQUEST_LOOKUP REQUEST_LOOKUP
 Structure for table of interpreted header names.

Enumerations

enum  { ASP_STATE_IDLE = 0, ASP_STATE_START, ASP_STATE_COPY_FUNC }

Functions

void NutHttpProcessRequest (FILE *stream)
 Process the next HTTP request.
void NutHttpProcessQueryString (REQUEST *req)
 Parses the QueryString.
void NutHttpSendHeaderTop (FILE *stream, REQUEST *req, int status, char *title)
 Send top lines of a standard HTML header.
void NutHttpSendHeaderBottom (FILE *stream, REQUEST *req, char *mime_type, long bytes)
 Send bottom lines of a standard HTML header.
void NutHttpSendHeaderBot (FILE *stream, char *mime_type, long bytes)
 Send bottom lines of a standard HTML header.
void NutHttpSendError (FILE *stream, REQUEST *req, int status)
 Send a HTTP error response.
char * NutGetMimeType (char *name)
 Return the mime type description of a specified file name.
void * NutGetMimeHandler (char *name)
 Return the mime type handler of a specified file name.
uint8_t NutSetMimeHandler (char *extension, void(*handler)(FILE *stream, int fd, int file_len, char *http_root, REQUEST *req))
 Set the mime type handler for a specified file extension.
int NutHttpAuthValidate (REQUEST *req)
 Validate an authorization request.
int NutRegisterAuth (CONST char *dirname, CONST char *login)
 Register an authorization entry.
void NutClearAuth (void)
 Clear all authorization entries.
void NutRegisterSsi (void)
 Register SSI handler for shtml files.
void NutHttpProcessAsp (FILE *stream, int fd, int file_len, char *http_root, REQUEST *req)
int NutRegisterAspCallback (int(*func)(char *, FILE *))
void NutRegisterAsp (void)
 Register ASP handler for asp files.
void NutRegisterCgiBinPath (char *path)
 Register a new cgi-bin path.
int NutCgiCheckRequest (FILE *stream, REQUEST *req)
 Check if request is a cgi call.
int NutRegisterCgi (char *name, int(*func)(FILE *, REQUEST *))
 Register a CGI function.
void NutCgiProcessRequest (FILE *stream, REQUEST *req, int name_pos)
 Process an incoming CGI request.
void NutHttpURLDecode (char *str)
 URLDecodes a string.
int NutRegisterHttpRoot (char *path)
 Register the HTTP server's root directory.
void NutHttpSetOptionFlags (uint32_t flags)
 Set HTTP option flags.
uint32_t NutHttpGetOptionFlags (void)
 Retrieve HTTP option flags.
char * NutHttpURLEncode (char *str)
 URLEncodes a string.
void NutHttpProcessPostQuery (FILE *stream, REQUEST *req)
 Parses the QueryString.
char * NutHttpGetParameter (REQUEST *req, char *name)
 Gets a request parameter value by name.
int NutHttpGetParameterCount (REQUEST *req)
 Gets the number of request parameters.
char * NutHttpGetParameterName (REQUEST *req, int index)
 Gets the name of a request parameter.
char * NutHttpGetParameterValue (REQUEST *req, int index)
 Get the value of a request parameter.
int NutRegisterSsiVarHandler (char *(*handler)(char *name, REQUEST *req))
 Register SSI handler for variables.

Variables

CONFNET confnet
 Global network configuration structure.
AUTHINFOauthList = 0
CGIFUNCTION *volatile cgiFunctionList = 0
char * cgiBinPath = NULL
MIMETYPES mimeTypes []
 Known mime types.
MIMETYPES mimeTypes []
 Known mime types.
char * http_root
char * cgiBinPath

Detailed Description

Hypertext transfer protocol.

A read-only file system is sufficient to run an HTTP server.


Define Documentation

#define METHOD_GET   1
Examples:
httpd/httpserv.c.

Definition at line 92 of file httpd.h.

Referenced by NutCgiProcessRequest(), and NutHttpProcessRequest().

#define METHOD_POST   2
Examples:
httpd/httpserv.c.

Definition at line 93 of file httpd.h.

Referenced by NutCgiProcessRequest(), NutHttpProcessPostQuery(), and NutHttpProcessRequest().

#define METHOD_HEAD   3
Examples:
httpd/httpserv.c.

Definition at line 94 of file httpd.h.

Referenced by NutHttpProcessRequest().

#define HTTP_CONN_CLOSE   1

Definition at line 96 of file httpd.h.

Referenced by NutHttpProcessRequest(), and NutHttpSendError().

#define HTTP_CONN_KEEP_ALIVE   2

Definition at line 97 of file httpd.h.

Referenced by NutHttpProcessRequest().

#define HTTP_OF_USE_HOST_TIME   0x00000001UL

Definition at line 99 of file httpd.h.

Referenced by NutHttpSendHeaderTop().

#define HTTP_OF_USE_FILE_TIME   0x00000002UL

Definition at line 100 of file httpd.h.

#define MAX_BUFFER_SIZE   256

Definition at line 92 of file asp.c.

Referenced by NutHttpProcessAsp().

#define MAX_ASP_FUNC_SIZE   64

Definition at line 98 of file asp.c.

Referenced by NutHttpProcessAsp().

#define NUM_REQUEST_LOOKUP   sizeof(req_lookup) / sizeof(REQUEST_LOOKUP)

Number of entries in the header name table.

Definition at line 247 of file httpd.c.

#define MAX_REQUEST_NAME_SIZE   17

Size of the largest entry in the header name table.

Definition at line 255 of file httpd.c.

#define BUFSIZE   512

Definition at line 116 of file ssi.c.

#define MIN (   a,
 
)    (a<b?a:b)

Definition at line 118 of file ssi.c.

#define SSI_TYPE_FILE   0x01

Definition at line 120 of file ssi.c.

#define SSI_TYPE_VIRTUAL   0x02

Definition at line 121 of file ssi.c.

#define SSI_TYPE_EXEC   0x03

Definition at line 122 of file ssi.c.

#define SSI_TYPE_ECHO   0x04

Definition at line 123 of file ssi.c.


Typedef Documentation

typedef struct _REQUEST REQUEST

Definition at line 102 of file httpd.h.

typedef struct _MIMETYPES MIMETYPES

Definition at line 126 of file httpd.h.

typedef typedef__END_DECLS struct _AUTHINFO AUTHINFO

Definition at line 151 of file httpd.h.

typedef typedef__END_DECLS struct _CGIFUNCTION CGIFUNCTION

Definition at line 174 of file httpd.h.

Structure for table of interpreted header names.


Enumeration Type Documentation

anonymous enum
Enumerator:
ASP_STATE_IDLE 
ASP_STATE_START 
ASP_STATE_COPY_FUNC 

Definition at line 100 of file asp.c.


Function Documentation

void NutHttpProcessRequest ( FILE stream)

Process the next HTTP request.

Waits for the next HTTP request on an established connection and processes it.

Parameters:
streamStream of the socket connection, previously opened for binary read and write.
Examples:
httpd/httpserv.c, httpd_simple/httpd_simple.c, and httpd_upnp/httpserv.c.

Definition at line 1054 of file httpd.c.

References DestroyRequestInfo(), fflush(), fgets(), free(), HTTP_CONN_CLOSE, HTTP_CONN_KEEP_ALIVE, HTTP_KEEP_ALIVE_REQ, HTTP_MAX_REQUEST_SIZE, malloc(), METHOD_GET, METHOD_HEAD, METHOD_POST, NutDecodePath(), NutHttpProcessQueryString(), NutHttpSendError(), _REQUEST::req_connection, _REQUEST::req_method, _REQUEST::req_query, _REQUEST::req_url, _REQUEST::req_version, strcasecmp, strchr(), and strdup().

Referenced by main(), and Service().

Here is the call graph for this function:

void NutHttpProcessQueryString ( REQUEST req)

Parses the QueryString.

Reads the QueryString from a request, and parses it into name/value table. To save RAM, this method overwrites the contents of req_query, and creates a table of pointers into the req_query buffer.

Parameters:
reqRequest object to parse

Definition at line 548 of file httpd.c.

References malloc(), NutHttpURLDecode(), _REQUEST::req_numqptrs, _REQUEST::req_qptrs, and _REQUEST::req_query.

Referenced by NutHttpProcessRequest().

Here is the call graph for this function:

void NutHttpSendHeaderTop ( FILE stream,
REQUEST req,
int  status,
char *  title 
)

Send top lines of a standard HTML header.

Sends HTTP and Server version lines.

Parameters:
streamStream of the socket connection, previously opened for binary read and write.
reqThe associated client request.
statusResponse status, error code or 200, if no error occurred.
titleError text, or OK, if no error occurred.
Examples:
httpd/httpserv.c.

Definition at line 294 of file httpd.c.

References fprintf(), fprintf_P, gmtime(), HTTP_MAJOR_VERSION, HTTP_MINOR_VERSION, HTTP_OF_USE_HOST_TIME, NutVersionString(), prog_char, Rfc1123TimeString(), and time().

Referenced by NutHttpSendError(), and ShowForm().

Here is the call graph for this function:

void NutHttpSendHeaderBottom ( FILE stream,
REQUEST req,
char *  mime_type,
long  bytes 
)

Send bottom lines of a standard HTML header.

Sends Content-Type, Content-Lenght and Connection lines.

Parameters:
streamStream of the socket connection, previously opened for binary read and write.
mime_typePoints to a string that specifies the content type. Examples are "text/html", "image/png", "image/gif", "video/mpeg" or "text/css". A null pointer is ignored.
bytesContent length of the data following this header. Ignored, if negative.
Examples:
httpd/httpserv.c.

Definition at line 388 of file httpd.c.

Referenced by NutHttpSendError(), NutHttpSendHeaderBot(), and ShowForm().

void NutHttpSendHeaderBot ( FILE stream,
char *  mime_type,
long  bytes 
)

Send bottom lines of a standard HTML header.

Sends Content-Type and Content-Length.

Deprecated:
Use NutHttpSendHeaderBottom().
Parameters:
streamStream of the socket connection, previously opened for binary read and write.
mime_typePoints to a string that specifies the content type. Examples are "text/html", "image/png", "image/gif", "video/mpeg" or "text/css". A null pointer is ignored.
bytesContent length of the data following this header. Ignored, if negative.

Definition at line 323 of file httpd.c.

References NutHttpSendHeaderBottom().

Here is the call graph for this function:

void NutHttpSendError ( FILE stream,
REQUEST req,
int  status 
)

Send a HTTP error response.

A canned error file is used.

Parameters:
streamStream of the socket connection, previously opened for binary read and write.
reqContains the HTTP request.
statusError code to be returned.

Definition at line 403 of file httpd.c.

References fprintf_P, HTTP_CONN_CLOSE, NutHttpSendHeaderBottom(), NutHttpSendHeaderTop(), prog_char, _REQUEST::req_connection, _REQUEST::req_url, and strrchr().

Referenced by NutCgiProcessRequest(), and NutHttpProcessRequest().

Here is the call graph for this function:

char * NutGetMimeType ( char *  name)

Return the mime type description of a specified file name.

The mime type returned is based on the file extension.

Parameters:
nameName of the file.
Returns:
A pointer to a static string, containing the associated mime type description. If the extension is not registered, "text/plain; charset=iso-8859-1" is returned. If the filename is empty, then "text/html; charset=iso-8859-1" is returned.

Definition at line 483 of file httpd.c.

References _MIMETYPES::mtyp_type.

void * NutGetMimeHandler ( char *  name)

Return the mime type handler of a specified file name.

This is the function that handles / sends a specific file type to the client. Specially used for server side includes (shtml files)

Parameters:
nameName of the file.
Returns:
A pointer to a function of the type void (u_char * filename) If the extension is not registered, the handler for "text/plain; charset=iso-8859-1" is returned. If the filename is empty, then the handler for "text/html; charset=iso-8859-1" is returned.

Definition at line 503 of file httpd.c.

References _MIMETYPES::mtyp_handler.

uint8_t NutSetMimeHandler ( char *  extension,
void(*)(FILE *stream, int fd, int file_len, char *http_root, REQUEST *req)  handler 
)

Set the mime type handler for a specified file extension.

This is the function that handles / sends a specific file type to the client. Specially used for server side includes (shtml files)

Parameters:
extensionFilename extension the handler should be registered for
handlerpointer to a function of the type void (u_char filename)
Returns:
1 on error or 0 on success

Definition at line 93 of file httpopt.c.

References _MIMETYPES::mtyp_ext, _MIMETYPES::mtyp_handler, and strcasecmp.

Referenced by NutRegisterAsp(), and NutRegisterSsi().

int NutHttpAuthValidate ( REQUEST req)

Validate an authorization request.

Note:
This function is automatically called by the HTTP library on incoming requests. Applications do not need to call this function.
Parameters:
reqRequest to be checked.
Returns:
0, if access granted, -1 otherwise.

Definition at line 170 of file auth.c.

References NutDecodeBase64(), _REQUEST::req_auth, _REQUEST::req_url, strncmp(), and strrchr().

Here is the call graph for this function:

int NutRegisterAuth ( CONST char *  dirname,
CONST char *  login 
)

Register an authorization entry.

Protect a specified directory from unauthorized access.

Warning:
Directories not registered by this function are accessible by anyone.
Parameters:
dirnameName of the directory to protect.
loginRequired login to access this directory. This string must contain a user name, followed by a colon followed by an uncrypted password.
Returns:
0 on success, -1 otherwise.
Examples:
httpd/httpserv.c.

Definition at line 116 of file auth.c.

References authList, free(), malloc(), and strdup().

Referenced by main().

Here is the call graph for this function:

void NutClearAuth ( void  )

Clear all authorization entries.

Clears all authorization entries and frees the used ressouces.

Definition at line 146 of file auth.c.

References authList, and free().

Here is the call graph for this function:

void NutRegisterSsi ( void  )

Register SSI handler for shtml files.

shtml files may use the following ssi commands:

Examples:
httpd/httpserv.c.

Definition at line 575 of file ssi.c.

References NutSetMimeHandler().

Referenced by main().

Here is the call graph for this function:

void NutHttpProcessAsp ( FILE stream,
int  fd,
int  file_len,
char *  http_root,
REQUEST req 
)

Definition at line 160 of file asp.c.

References _filelength(), _read(), ASP_STATE_COPY_FUNC, ASP_STATE_IDLE, ASP_STATE_START, free(), fwrite(), malloc(), MAX_ASP_FUNC_SIZE, and MAX_BUFFER_SIZE.

Referenced by NutRegisterAsp().

Here is the call graph for this function:

int NutRegisterAspCallback ( int(*)(char *, FILE *)  func)

Definition at line 311 of file asp.c.

Referenced by main().

void NutRegisterAsp ( void  )

Register ASP handler for asp files.

asp files may use the following syntax:

<my_function%>

Definition at line 332 of file asp.c.

References NutHttpProcessAsp(), and NutSetMimeHandler().

Referenced by main().

Here is the call graph for this function:

void NutRegisterCgiBinPath ( char *  path)

Register a new cgi-bin path.

This function allows to redfine the cgi-bin path. Default is "cgi-bin/"

Parameters:
pathNew path.

Definition at line 98 of file cgi.c.

References cgiBinPath, free(), and strdup().

Referenced by main().

Here is the call graph for this function:

int NutCgiCheckRequest ( FILE stream,
REQUEST req 
)

Check if request is a cgi call.

This functions checks the request if it's a cgi all and in case calls the cgi

Parameters:
streamStream of the socket connection, previously opened for binary read and write.
reqContains the HTTP request.

Definition at line 116 of file cgi.c.

References cgiBinPath, CONST, NutCgiProcessRequest(), _REQUEST::req_url, and strncasecmp.

Here is the call graph for this function:

int NutRegisterCgi ( char *  name,
int(*)(FILE *, REQUEST *)  func 
)

Register a CGI function.

Parameters:
nameName of this CGI function. No dublicates allowed
funcThe function to be called, if the client requests the specified name.
Returns:
0 on success, -1 otherwise.

Definition at line 155 of file cgi.c.

References cgiFunctionList, malloc(), strcmp(), and strdup().

Referenced by main(), and upnp_Init().

Here is the call graph for this function:

void NutCgiProcessRequest ( FILE stream,
REQUEST req,
int  name_pos 
)

Process an incoming CGI request.

Applications do not need to call this function. It is automatically called by NutHttpProcessRequest().

Parameters:
streamStream of the socket connection, previously opened for binary read and write.
reqContains the HTTP request.

Definition at line 190 of file cgi.c.

References cgiFunctionList, METHOD_GET, METHOD_POST, NutHttpSendError(), _REQUEST::req_method, _REQUEST::req_url, and strcasecmp.

Referenced by NutCgiCheckRequest().

Here is the call graph for this function:

void NutHttpURLDecode ( char *  str)

URLDecodes a string.

Takes a url-encoded string and decodes it.

Parameters:
strString to decode. This is overwritten with the decoded string
Warning:
To save RAM, the str parameter will be overwritten with the encoded string.

Definition at line 519 of file httpd.c.

References strtol().

Referenced by NutHttpProcessPostQuery(), and NutHttpProcessQueryString().

Here is the call graph for this function:

int NutRegisterHttpRoot ( char *  path)

Register the HTTP server's root directory.

Only one root directory is supported. Subsequent calls will override previous settings.

Parameters:
pathPathname of the root directory. Must include the device name followed by a colon followed by a directory path followed by a trailing slash.
Returns:
0 on success, -1 otherwise.

Definition at line 775 of file httpd.c.

References free(), malloc(), strcpy(), and strlen().

Referenced by main().

Here is the call graph for this function:

void NutHttpSetOptionFlags ( uint32_t  flags)

Set HTTP option flags.

Parameters:
flagsOption flags to set. Any of the following may be or'ed:
  • HTTP_OF_USE_HOST_TIME Date header will be included in response.
  • HTTP_OF_USE_FILE_TIME Handle file modification time.

Definition at line 800 of file httpd.c.

uint32_t NutHttpGetOptionFlags ( void  )

Retrieve HTTP option flags.

Returns:
Option flags.

Definition at line 810 of file httpd.c.

char* NutHttpURLEncode ( char *  str)

URLEncodes a string.

Parameters:
strString to encode
Returns:
A new allocated encoded string, or NULL if str is null, or if there's not enough memory for the new string.
Note:
Remember to free() to the returned string.

Definition at line 117 of file httpopt.c.

References malloc(), and strlen().

Here is the call graph for this function:

void NutHttpProcessPostQuery ( FILE stream,
REQUEST req 
)

Parses the QueryString.

Reads the query from input stream and parses it into name/value table. To save RAM, this method allocated ram and uses req_query to store the input data. Then it creates a table of pointers into the req_query buffer.

Parameters:
streamInput stream
reqRequest object to parse

Definition at line 166 of file httpopt.c.

References fread(), free(), malloc(), memset(), METHOD_POST, NutHttpURLDecode(), _REQUEST::req_length, _REQUEST::req_method, _REQUEST::req_numqptrs, _REQUEST::req_qptrs, and _REQUEST::req_query.

Here is the call graph for this function:

char* NutHttpGetParameter ( REQUEST req,
char *  name 
)

Gets a request parameter value by name.

Parameters:
reqRequest object
nameName of parameter
Returns:
Pointer to the parameter value.

Definition at line 244 of file httpopt.c.

References _REQUEST::req_numqptrs, _REQUEST::req_qptrs, and strcmp().

Here is the call graph for this function:

int NutHttpGetParameterCount ( REQUEST req)

Gets the number of request parameters.

The following code fragment retrieves all name/value pairs of the request.

 #include &lt;pro/httpd.h&gt;

 char *name;
 char *value;
 int i;
 int n = NutHttpGetParameterCount(req);

 for (i = 0; i &lt; n; i++) {
     name = NutHttpGetParameterName(req, i);
     value = NutHttpGetParameterValue(req, i);
 }
Parameters:
reqRequest object
Returns:
The number of request parameters

Definition at line 277 of file httpopt.c.

References _REQUEST::req_numqptrs.

Referenced by NutHttpGetParameterName(), NutHttpGetParameterValue(), and ShowForm().

char* NutHttpGetParameterName ( REQUEST req,
int  index 
)

Gets the name of a request parameter.

Parameters:
reqRequest object
indexIndex of the requested parameter.
Returns:
Pointer to the parameter name at the given index, or NULL if index is out of range.

Definition at line 291 of file httpopt.c.

References NutHttpGetParameterCount(), and _REQUEST::req_qptrs.

Referenced by ShowForm().

Here is the call graph for this function:

char* NutHttpGetParameterValue ( REQUEST req,
int  index 
)

Get the value of a request parameter.

Parameters:
reqRequest object
indexIndex to the requested parameter.
Returns:
Pointer to the parameter value at the given index, or NULL if index is out of range.

Definition at line 307 of file httpopt.c.

References NutHttpGetParameterCount(), and _REQUEST::req_qptrs.

Referenced by ShowForm().

Here is the call graph for this function:

int NutRegisterSsiVarHandler ( char *(*)(char *name, REQUEST *req)  handler)

Register SSI handler for variables.

Definition at line 583 of file ssi.c.


Variable Documentation

Global network configuration structure.

Contains the current network configuration. Nut/Net will load this structure from non-volatile memory during initialization.

Definition at line 89 of file confnet.c.

Definition at line 82 of file auth.c.

Referenced by NutClearAuth(), and NutRegisterAuth().

Definition at line 88 of file cgi.c.

Referenced by NutCgiProcessRequest(), and NutRegisterCgi().

char* cgiBinPath = NULL

Definition at line 89 of file cgi.c.

Referenced by NutCgiCheckRequest(), and NutRegisterCgiBinPath().

Initial value:
 {
    {
    ".txt", "text/plain", NULL}, {
    ".html", "text/html", NULL}, {
    ".shtml", "text/html", NULL}, {
    ".asp", "text/html", NULL}, {
    ".htm", "text/html", NULL}, {
    ".gif", "image/gif", NULL}, {
    ".jpg", "image/jpeg", NULL}, {
    ".png", "image/png", NULL}, {
    ".bmp", "image/bmp", NULL}, {
    ".pdf", "application/pdf", NULL}, {
    ".js",  "application/x-javascript", NULL}, {
    ".jar", "application/x-java-archive", NULL}, {
    ".css", "text/css", NULL}, {
    ".xml", "text/xml", NULL}, {
    ".svg", "image/svg+xml", NULL}, {
    NULL, NULL, NULL}
}

Known mime types.

Definition at line 261 of file httpd.c.

Known mime types.

Definition at line 261 of file httpd.c.

char* http_root

Definition at line 33 of file httpd_p.c.

Referenced by CreateFilePath().

char* cgiBinPath

Definition at line 89 of file cgi.c.

Referenced by NutCgiCheckRequest(), and NutRegisterCgiBinPath().