HTTP
[User Protocols]

Collaboration diagram for HTTP:
Hypertext transfer protocol. More...

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
 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 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 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 struct _REQUEST REQUEST
typedef struct _MIMETYPES MIMETYPES
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 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.

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 90 of file httpd.h.

Referenced by NutCgiProcessRequest(), and NutHttpProcessRequest().

#define METHOD_POST   2

Examples:
httpd/httpserv.c.

Definition at line 91 of file httpd.h.

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

#define METHOD_HEAD   3

Examples:
httpd/httpserv.c.

Definition at line 92 of file httpd.h.

Referenced by NutHttpProcessRequest().

#define HTTP_CONN_CLOSE   1

Definition at line 94 of file httpd.h.

Referenced by NutHttpProcessRequest(), and NutHttpSendError().

#define HTTP_CONN_KEEP_ALIVE   2

Definition at line 95 of file httpd.h.

Referenced by NutHttpProcessRequest(), and NutHttpSendHeaderBottom().

#define HTTP_OF_USE_HOST_TIME   0x00000001UL

Definition at line 97 of file httpd.h.

Referenced by NutHttpSendHeaderTop().

#define HTTP_OF_USE_FILE_TIME   0x00000002UL

Definition at line 98 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 BUFSIZE   512

Definition at line 115 of file ssi.c.

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

Definition at line 117 of file ssi.c.

#define SSI_TYPE_FILE   0x01

Definition at line 119 of file ssi.c.

#define SSI_TYPE_VIRTUAL   0x02

Definition at line 120 of file ssi.c.

#define SSI_TYPE_EXEC   0x03

Definition at line 121 of file ssi.c.


Typedef Documentation

typedef struct _REQUEST REQUEST

Definition at line 100 of file httpd.h.

typedef struct _MIMETYPES MIMETYPES

Definition at line 123 of file httpd.h.

typedef typedef__END_DECLS struct _AUTHINFO AUTHINFO

Definition at line 148 of file httpd.h.

typedef typedef__END_DECLS struct _CGIFUNCTION CGIFUNCTION

Definition at line 171 of file httpd.h.


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:
stream Stream of the socket connection, previously opened for binary read and write.
Examples:
httpd/httpserv.c.

Definition at line 753 of file httpd.c.

References atol(), 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_agent, _REQUEST::req_auth, _REQUEST::req_connection, _REQUEST::req_cookie, _REQUEST::req_host, _REQUEST::req_ims, _REQUEST::req_length, _REQUEST::req_method, _REQUEST::req_query, _REQUEST::req_referer, _REQUEST::req_type, _REQUEST::req_url, _REQUEST::req_version, RfcTimeParse(), strcasecmp, strchr(), strdup(), 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.

Parameters:
req Request object to parse

Definition at line 462 of file httpd.c.

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

Referenced by NutHttpProcessRequest().

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:
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 occurred.
title Error text, or OK, if no error occurred.
Examples:
httpd/httpserv.c.

Definition at line 234 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().

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:
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.
Examples:
httpd/httpserv.c.

Definition at line 282 of file httpd.c.

References fprintf_P, fputs_P, HTTP_CONN_KEEP_ALIVE, prog_char, and _REQUEST::req_connection.

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:
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 263 of file httpd.c.

References NutHttpSendHeaderBottom().

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

Send a HTTP error response.

A canned error file is used.

Parameters:
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 317 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().

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:
name Name 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 397 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:
name Name 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 417 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:
extension Filename extension the handler should be registered for
handler pointer 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:
req Request to be checked.
Returns:
0, if access granted, -1 otherwise.

Definition at line 167 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.

Warning:
Directories not registered by this function are accessible by anyone.
Parameters:
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.
Returns:
0 on success, -1 otherwise.
Examples:
httpd/httpserv.c.

Definition at line 113 of file auth.c.

References _AUTHINFO::auth_next, authList, free, malloc, and strdup().

Referenced by main().

void NutClearAuth ( void   ) 

Clear all authorization entries.

Clears all authorization entries and frees the used ressouces.

Definition at line 143 of file auth.c.

References authList, and free.

void NutRegisterSsi ( void   ) 

Register SSI handler for shtml files.

shtml files may use the following ssi commands:

Examples:
httpd/httpserv.c.

Definition at line 541 of file ssi.c.

References NutSetMimeHandler().

Referenced by main().

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().

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

Definition at line 311 of file asp.c.

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().

void NutRegisterCgiBinPath ( char *  path  ) 

Register a new cgi-bin path.

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

Parameters:
path New path.

Definition at line 98 of file cgi.c.

References cgiBinPath, free, and strdup().

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:
stream Stream of the socket connection, previously opened for binary read and write.
req Contains the HTTP request.

Definition at line 116 of file cgi.c.

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

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

Register a CGI function.

Parameters:
name Name of this CGI function. No dublicates allowed
func The 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().

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:
stream Stream of the socket connection, previously opened for binary read and write.
req Contains 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.

void NutHttpURLDecode ( char *  str  ) 

URLDecodes a string.

Takes a url-encoded string and decodes it.

Parameters:
str String 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 433 of file httpd.c.

References strtol().

int NutRegisterHttpRoot ( char *  path  ) 

Register the HTTP server's root directory.

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

Parameters:
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.
Returns:
0 on success, -1 otherwise.

Definition at line 675 of file httpd.c.

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

void NutHttpSetOptionFlags ( uint32_t  flags  ) 

Set HTTP option flags.

Parameters:
flags Option 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 700 of file httpd.c.

uint32_t NutHttpGetOptionFlags ( void   ) 

Retrieve HTTP option flags.

Returns:
Option flags.

Definition at line 710 of file httpd.c.

char* NutHttpURLEncode ( char *  str  ) 

URLEncodes a string.

Parameters:
str String 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().

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:
stream Input stream
req Request 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.

char* NutHttpGetParameter ( REQUEST req,
char *  name 
)

Gets a request parameter value by name.

Parameters:
req Request object
name Name 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().

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:
req Request object
Returns:
The number of request parameters

Definition at line 277 of file httpopt.c.

References _REQUEST::req_numqptrs.

char* NutHttpGetParameterName ( REQUEST req,
int  index 
)

Gets the name of a request parameter.

Parameters:
req Request object
index Index 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.

char* NutHttpGetParameterValue ( REQUEST req,
int  index 
)

Get the value of a request parameter.

Parameters:
req Request object
index Index 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.


Variable Documentation

CONFNET confnet

Global network configuration structure.

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

Definition at line 85 of file confnet.c.

AUTHINFO* authList = 0

Definition at line 79 of file auth.c.

Referenced by NutClearAuth(), and NutRegisterAuth().

CGIFUNCTION* volatile cgiFunctionList = 0

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().

MIMETYPES mimeTypes[]

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}, {    
    ".pdf", "application/pdf", NULL}, {
    ".js",  "application/x-javascript", NULL}, {
    ".jar", "application/x-java-archive", NULL}, {
    ".css", "text/css", NULL}, {
    ".xml", "text/xml", NULL}, {
    NULL, NULL, NULL}
}
Known mime types.

Definition at line 203 of file httpd.c.

MIMETYPES mimeTypes[]

Known mime types.

Definition at line 203 of file httpd.c.

char* http_root

Definition at line 33 of file httpd_p.c.

char* cgiBinPath

Definition at line 89 of file cgi.c.


© 2000-2007 by egnite Software GmbH - visit http://www.ethernut.de/