Collaboration diagram for HTTP:
![]() |
A read-only file system is sufficient to run an HTTP server.
Data Structures | |
struct | _REQUEST |
HTTP request information structure. More... | |
struct | _AUTHINFO |
HTTP authorization information structure. More... | |
struct | _CGIFUNCTION |
Registered CGI function. More... | |
struct | _REQUEST |
HTTP request information structure. More... | |
struct | _AUTHINFO |
HTTP authorization information structure. More... | |
struct | _CGIFUNCTION |
Registered CGI function. More... | |
Defines | |
#define | METHOD_GET 1 |
#define | METHOD_POST 2 |
#define | METHOD_HEAD 3 |
#define | MAX_BUFFER_SIZE 256 |
#define | MAX_ASP_FUNC_SIZE 64 |
#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 |
Typedefs | |
typedef _REQUEST | REQUEST |
typedef typedef__END_DECLS struct _AUTHINFO | AUTHINFO |
typedef typedef__END_DECLS struct _CGIFUNCTION | CGIFUNCTION |
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 | 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. | |
u_char | 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. | |
int | NutRegisterCgi (char *name, int(*func)(FILE *, REQUEST *)) |
Register a CGI function. | |
void | NutCgiProcessRequest (FILE *stream, REQUEST *req) |
Process an incoming CGI request. | |
char * | NutHttpURLEncode (char *str) |
void | NutHttpURLDecode (char *str) |
URLDecodes 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 paramter. | |
int | NutRegisterHttpRoot (char *path) |
Register the HTTP server's root directory. | |
Variables | |
CONFNET | confnet |
Global network configuration structure. | |
AUTHINFO * | authList = 0 |
CGIFUNCTION *volatile | cgiFunctionList = 0 |
#define METHOD_GET 1 |
Definition at line 77 of file httpd.h.
Referenced by NutCgiProcessRequest().
#define METHOD_POST 2 |
Definition at line 78 of file httpd.h.
Referenced by NutCgiProcessRequest(), and NutHttpProcessPostQuery().
#define METHOD_HEAD 3 |
#define MAX_BUFFER_SIZE 256 |
#define MAX_ASP_FUNC_SIZE 64 |
typedef typedef__END_DECLS struct _CGIFUNCTION CGIFUNCTION |
anonymous enum |
void NutHttpProcessRequest | ( | FILE * | stream | ) |
Process the next HTTP request.
Waits for the next HTTP request on an established connection and processes it.
stream | Stream of the socket connection, previously opened for binary read and write. |
Definition at line 801 of file httpd.c.
References atoi(), fgets(), NutHeapAlloc(), NutHeapFree(), _REQUEST::req_agent, _REQUEST::req_auth, _REQUEST::req_cookie, _REQUEST::req_length, _REQUEST::req_type, strchr(), strcpy(), strlen(), and strncasecmp.
Referenced by Service().
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.
req | Request object to parse |
Definition at line 409 of file httpd.c.
References NutHeapAlloc(), NutHttpURLDecode(), _REQUEST::req_numqptrs, _REQUEST::req_qptrs, and _REQUEST::req_query.
Send top lines of a standard HTML header.
Sends HTTP and Server version lines.
stream | Stream of the socket connection, previously opened for binary read and write. | |
req | The associated client request. | |
status | Response status, error code or 200, if no error occured. | |
title | Error text, or OK, if no error occured. |
Definition at line 154 of file httpd.c.
References fprintf_P, NutVersionString(), prog_char, and _REQUEST::req_version.
Referenced by NutHttpSendError(), and ShowForm().
void NutHttpSendHeaderBot | ( | FILE * | stream, | |
char * | mime_type, | |||
long | bytes | |||
) |
Send bottom lines of a standard HTML header.
Sends Content-Type, Content-Lenght and Connection lines.
stream | Stream of the socket connection, previously opened for binary read and write. | |
mime_type | Points 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. | |
bytes | Content length of the data following this header. Ignored, if negative. |
Definition at line 175 of file httpd.c.
References fprintf_P, fputs_P, and prog_char.
Referenced by NutHttpSendError(), and ShowForm().
Send a HTTP error response.
A canned error file is used.
stream | Stream of the socket connection, previously opened for binary read and write. | |
req | Contains the HTTP request. | |
status | Error code to be returned. |
Definition at line 198 of file httpd.c.
References fprintf_P, NutHttpSendHeaderBot(), NutHttpSendHeaderTop(), prog_char, _REQUEST::req_url, and strrchr().
Referenced by NutCgiProcessRequest().
char * NutGetMimeType | ( | char * | name | ) |
Return the mime type description of a specified file name.
The mime type returned is based on the file extension.
name | Name of the file. |
Definition at line 256 of file httpd.c.
References ext, strcasecmp, strlen(), and 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. Escpecialy used for server side includes (shtml files)
name | Name of the file. |
Definition at line 284 of file httpd.c.
References ext, handler, strcasecmp, and strlen().
u_char 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. Escpecialy used for server side includes (shtml files)
extension | Filename extension the handler should be registered for | |
handler | pointer to a function of the type void (u_char filename) |
Definition at line 308 of file httpd.c.
References ext, and strcasecmp.
Referenced by NutRegisterAsp(), and NutRegisterSsi().
int NutHttpAuthValidate | ( | REQUEST * | req | ) |
Validate an authorization request.
req | Request to be checked. |
Definition at line 155 of file auth.c.
References NutDecodeBase64(), _REQUEST::req_auth, _REQUEST::req_url, strncmp(), and strrchr().
int NutRegisterAuth | ( | CONST char * | dirname, | |
CONST char * | login | |||
) |
Register an authorization entry.
Protect a specified directory from unauthorized access.
dirname | Name of the directory to protect. | |
login | Required login to access this directory. This string must contain a user name, followed by a colon followed by an uncrypted password. |
Definition at line 99 of file auth.c.
References _AUTHINFO::auth_next, authList, NutHeapAlloc(), NutHeapFree(), strcpy(), and strlen().
Referenced by main().
void NutClearAuth | ( | void | ) |
Clear all authorization entries.
Clears all authorization entries and frees the used ressouces.
Definition at line 131 of file auth.c.
References authList, and NutHeapFree().
void NutRegisterSsi | ( | void | ) |
Register SSI handler for shtml files.
shtml files may use the following ssi commands:
Definition at line 522 of file ssi.c.
References NutSetMimeHandler().
Referenced by main().
Definition at line 147 of file asp.c.
References _filelength(), _read(), ASP_STATE_COPY_FUNC, ASP_STATE_IDLE, ASP_STATE_START, fwrite(), MAX_ASP_FUNC_SIZE, MAX_BUFFER_SIZE, NutHeapAlloc(), and NutHeapFree().
Referenced by NutRegisterAsp().
int NutRegisterAspCallback | ( | int(*)(char *, FILE *) | func | ) |
void NutRegisterAsp | ( | void | ) |
Register ASP handler for asp files.
asp files may use the following syntax:
<my_function%>
Definition at line 319 of file asp.c.
References NutHttpProcessAsp(), and NutSetMimeHandler().
Referenced by main().
Register a CGI function.
name | Name of this CGI function. | |
func | The function to be called, if the client requests the specified name. |
Definition at line 72 of file cgi.c.
References _CGIFUNCTION::cgi_next, cgiFunctionList, and NutHeapAlloc().
Referenced by main().
Process an incoming CGI request.
Applications do not need to call this function. It is automatically called by NutHttpProcessRequest().
stream | Stream of the socket connection, previously opened for binary read and write. | |
req | Contains the HTTP request. |
Definition at line 96 of file cgi.c.
References cgiFunctionList, METHOD_GET, METHOD_POST, NutHttpSendError(), _REQUEST::req_method, _REQUEST::req_url, and strcasecmp.
char* NutHttpURLEncode | ( | char * | str | ) |
void NutHttpURLDecode | ( | char * | str | ) |
URLDecodes a string.
Takes a url-encoded string and decodes it.
str | String to decode. This is overwritten with the decoded string |
Definition at line 380 of file httpd.c.
References strtol().
Referenced by NutHttpProcessPostQuery(), and NutHttpProcessQueryString().
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.
stream | Input stream | |
req | Request object to parse |
Definition at line 464 of file httpd.c.
References fread(), METHOD_POST, NutHeapAlloc(), NutHeapAllocClear(), NutHeapFree(), NutHttpURLDecode(), _REQUEST::req_length, _REQUEST::req_method, _REQUEST::req_numqptrs, _REQUEST::req_qptrs, and _REQUEST::req_query.
char* NutHttpGetParameter | ( | REQUEST * | req, | |
char * | name | |||
) |
Gets a request parameter value by name.
req | Request object | |
name | Name of parameter |
Definition at line 533 of file httpd.c.
References _REQUEST::req_numqptrs, _REQUEST::req_qptrs, and strcmp().
int NutHttpGetParameterCount | ( | REQUEST * | req | ) |
Gets the number of request parameters.
req | Request object |
Definition at line 549 of file httpd.c.
References _REQUEST::req_numqptrs.
Referenced by NutHttpGetParameterName(), NutHttpGetParameterValue(), and ShowForm().
char* NutHttpGetParameterName | ( | REQUEST * | req, | |
int | index | |||
) |
Gets the name of a request parameter.
req | Request object | |
index | Index of the requested parameter. |
Definition at line 563 of file httpd.c.
References NutHttpGetParameterCount(), and _REQUEST::req_qptrs.
Referenced by ShowForm().
char* NutHttpGetParameterValue | ( | REQUEST * | req, | |
int | index | |||
) |
Get the value of a request paramter.
req | Request object | |
index | Index to the requested parameter. |
Definition at line 579 of file httpd.c.
References NutHttpGetParameterCount(), and _REQUEST::req_qptrs.
Referenced by ShowForm().
int NutRegisterHttpRoot | ( | char * | path | ) |
Register the HTTP server's root directory.
Only one root directory is supported. Subsequent calls will override previous settings.
path | Pathname of the root directory. Must include the device name followed by a colon followed by a directory path followed by a trailing slash. |
Definition at line 777 of file httpd.c.
References NutHeapAlloc(), NutHeapFree(), strcpy(), and strlen().
Referenced by main().
CGIFUNCTION* volatile cgiFunctionList = 0 |
void(* { ... } handler)(FILE *stream, int fd, int file_len, char *http_root, REQUEST *req) [inherited] |