nanohttp-common.h File Reference

Go to the source code of this file.

Classes

struct  hpair
struct  _content_type
struct  part_t
struct  attachments_t

Defines

#define HEADER_CONTENT_ID   "Content-Id"
#define HEADER_CONTENT_TRANSFER_ENCODING   "Content-Transfer-Encoding"
#define TRANSFER_ENCODING_CHUNKED   "chunked"
#define HEADER_CACHE_CONTROL   "Cache-Control"
#define HEADER_CONNECTION   "Connection"
#define HEADER_DATE   "Date"
#define HEADER_PRAGMA   "Pragma"
#define HEADER_TRAILER   "Trailer"
#define HEADER_TRANSFER_ENCODING   "Transfer-Encoding"
#define HEADER_UPGRADE   "Upgrade"
#define HEADER_VIA   "Via"
#define HEADER_WARNING   "Warning"
#define HEADER_ALLOW   "Allow"
#define HEADER_CONTENT_ENCODING   "Content-Encoding"
#define HEADER_CONTENT_LANGUAGE   "Content-Language"
#define HEADER_CONTENT_LENGTH   "Content-Length"
#define HEADER_CONTENT_LOCATION   "Content-Location"
#define HEADER_CONTENT_MD5   "Content-MD5"
#define HEADER_CONTENT_RANGE   "Content-Range"
#define HEADER_CONTENT_TYPE   "Content-Type"
#define HEADER_EXPIRES   "Expires"
#define HEADER_LAST_MODIFIED   "Last-Modified"
#define NHTTP_ARG_CERT   "-NHTTPcert"
#define NHTTP_ARG_CERTPASS   "-NHTTPcertpass"
#define NHTTP_ARG_CA   "-NHTTPCA"
#define SAVE_STR(str)   ((str==0)?("(null)"):(str))
#define BOUNDARY_LENGTH   18
#define MAX_HEADER_SIZE   4256
#define MAX_FILE_BUFFER_SIZE   4256
#define REQUEST_MAX_PATH_SIZE   1024
#define RESPONSE_MAX_DESC_SIZE   1024
#define HTTP_STATUS_100_REASON_PHRASE   "Continue"
#define HTTP_STATUS_101_REASON_PHRASE   "Switching Protocols"
#define HTTP_STATUS_200_REASON_PHRASE   "OK"
#define HTTP_STATUS_201_REASON_PHRASE   "Created"
#define HTTP_STATUS_202_REASON_PHRASE   "Accepted"
#define HTTP_STATUS_203_REASON_PHRASE   "Non-Authoritative Information"
#define HTTP_STATUS_204_REASON_PHRASE   "No Content"
#define HTTP_STATUS_205_REASON_PHRASE   "Reset Content"
#define HTTP_STATUS_206_REASON_PHRASE   "Partial Content"
#define HTTP_STATUS_300_REASON_PHRASE   "Multiple Choices"
#define HTTP_STATUS_301_REASON_PHRASE   "Moved Permanently"
#define HTTP_STATUS_302_REASON_PHRASE   "Found"
#define HTTP_STATUS_303_REASON_PHRASE   "See Other"
#define HTTP_STATUS_304_REASON_PHRASE   "Not Modified"
#define HTTP_STATUS_305_REASON_PHRASE   "Use Proxy"
#define HTTP_STATUS_307_REASON_PHRASE   "Temporary Redirect"
#define HTTP_STATUS_400_REASON_PHRASE   "Bad Request"
#define HTTP_STATUS_401_REASON_PHRASE   "Unauthorized"
#define HTTP_STATUS_402_REASON_PHRASE   "Payment Required"
#define HTTP_STATUS_403_REASON_PHRASE   "Forbidden"
#define HTTP_STATUS_404_REASON_PHRASE   "Not Found"
#define HTTP_STATUS_405_REASON_PHRASE   "Method Not Allowed"
#define HTTP_STATUS_406_REASON_PHRASE   "Not Acceptable"
#define HTTP_STATUS_407_REASON_PHRASE   "Proxy Authentication Required"
#define HTTP_STATUS_408_REASON_PHRASE   "Request Time-out"
#define HTTP_STATUS_409_REASON_PHRASE   "Conflict"
#define HTTP_STATUS_410_REASON_PHRASE   "Gone"
#define HTTP_STATUS_411_REASON_PHRASE   "Length Required"
#define HTTP_STATUS_412_REASON_PHRASE   "Precondition Failed"
#define HTTP_STATUS_413_REASON_PHRASE   "Request Entity Too Large"
#define HTTP_STATUS_414_REASON_PHRASE   "Request-URI Too Large"
#define HTTP_STATUS_415_REASON_PHRASE   "Unsupported Media Type"
#define HTTP_STATUS_416_REASON_PHRASE   "Requested range not satisfiable"
#define HTTP_STATUS_417_REASON_PHRASE   "Expectation Failed"
#define HTTP_STATUS_500_REASON_PHRASE   "Internal Server Error"
#define HTTP_STATUS_501_REASON_PHRASE   "Not Implemented"
#define HTTP_STATUS_502_REASON_PHRASE   "Bad Gateway"
#define HTTP_STATUS_503_REASON_PHRASE   "Service Unavailable"
#define HTTP_STATUS_504_REASON_PHRASE   "Gateway Time-out"
#define HTTP_STATUS_505_REASON_PHRASE   "HTTP Version not supported"

Typedefs

typedef hpair hpair_t
typedef enum _http_version http_version_t
typedef _content_type content_type_t
typedef enum _hreq_method hreq_method_t

Enumerations

enum  _http_version { HTTP_1_0, HTTP_1_1 }
enum  _hreq_method {
  HTTP_REQUEST_POST, HTTP_REQUEST_GET, HTTP_REQUEST_OPTIONS, HTTP_REQUEST_HEAD,
  HTTP_REQUEST_PUT, HTTP_REQUEST_DELETE, HTTP_REQUEST_TRACE, HTTP_REQUEST_CONNECT,
  HTTP_REQUEST_UNKOWN
}

Functions

hpair_thpairnode_new (const char *key, const char *value, hpair_t *next)
hpair_thpairnode_parse (const char *str, const char *delim, hpair_t *next)
void hpairnode_free (hpair_t *pair)
void hpairnode_free_deep (hpair_t *pair)
char * hpairnode_get (hpair_t *pair, const char *key)
char * hpairnode_get_ignore_case (hpair_t *pair, const char *key)
hpair_thpairnode_copy (const hpair_t *src)
hpair_thpairnode_copy_deep (const hpair_t *src)
void hpairnode_dump_deep (const hpair_t *pairs)
void hpairnode_dump (const hpair_t *pair)
content_type_tcontent_type_new (const char *content_type_str)
void content_type_free (content_type_t *ct)
part_tpart_new (const char *id, const char *filename, const char *content_type, const char *transfer_encoding, struct part_t *next)
void part_free (struct part_t *part)
attachments_tattachments_new (void)
void attachments_free (struct attachments_t *message)
void attachments_add_part (struct attachments_t *attachments, struct part_t *part)


Define Documentation

#define BOUNDARY_LENGTH   18
 

Definition at line 293 of file nanohttp-common.h.

#define HEADER_CONTENT_ID   "Content-Id"
 

Definition at line 27 of file nanohttp-common.h.

Referenced by httpc_mime_next(), httpd_mime_next(), and part_new().

#define HEADER_CONTENT_TRANSFER_ENCODING   "Content-Transfer-Encoding"
 

Definition at line 28 of file nanohttp-common.h.

Referenced by httpc_mime_next(), and httpd_mime_next().

#define MAX_FILE_BUFFER_SIZE   4256
 

Definition at line 296 of file nanohttp-common.h.

Referenced by httpc_mime_send_file(), and httpd_mime_send_file().

#define MAX_HEADER_SIZE   4256
 

Definition at line 295 of file nanohttp-common.h.

Referenced by hrequest_new_from_socket(), and hresponse_new_from_socket().

#define NHTTP_ARG_CA   "-NHTTPCA"
 

Definition at line 287 of file nanohttp-common.h.

#define NHTTP_ARG_CERT   "-NHTTPcert"
 

Common commandline arguments for client and server.

Definition at line 285 of file nanohttp-common.h.

#define NHTTP_ARG_CERTPASS   "-NHTTPcertpass"
 

Definition at line 286 of file nanohttp-common.h.

#define REQUEST_MAX_PATH_SIZE   1024
 

Definition at line 298 of file nanohttp-common.h.

#define RESPONSE_MAX_DESC_SIZE   1024
 

Definition at line 299 of file nanohttp-common.h.

#define SAVE_STR str   )     ((str==0)?("(null)"):(str))
 

Definition at line 290 of file nanohttp-common.h.

Referenced by hpairnode_dump(), hpairnode_new(), and hsocket_accept().

#define TRANSFER_ENCODING_CHUNKED   "chunked"
 

Definition at line 29 of file nanohttp-common.h.


Typedef Documentation

typedef struct _content_type content_type_t
 

Object representation of the content-type field in a HTTP header:

Example:

 Content-Type: text/xml; key="value" key2="value2' ...

See also:
HEADER_CONTENT_TYPE

typedef struct hpair hpair_t
 

hpairnode_t represents a pair (key, value) pair. This is also a linked list.

Definition at line 306 of file nanohttp-common.h.

typedef enum _hreq_method hreq_method_t
 

The set of common methods for HTTP/1.1 is defined below. Although this set can be expanded, additional methods cannot be assumed to share the same semantics for separately extended clients and servers.

The Host request-header field MUST accompany all HTTP/1.1 requests.

See also:
HTTP_HEADER_HOST

typedef enum _http_version http_version_t
 

Indicates the version of the used HTTP protocol.


Enumeration Type Documentation

enum _hreq_method
 

The set of common methods for HTTP/1.1 is defined below. Although this set can be expanded, additional methods cannot be assumed to share the same semantics for separately extended clients and servers.

The Host request-header field MUST accompany all HTTP/1.1 requests.

See also:
HTTP_HEADER_HOST
Enumerator:
HTTP_REQUEST_POST  The POST method is used to request that the origin server accept the entity enclosed in the request as a new subordinate of the resource identified by the Request-URI in the Request-Line. POST is designed to allow a uniform method to cover the following functions:
  • Annotation of existing resources;
  • Posting a message to a bulletin board, newsgroup, mailing list, or similar group of articles;
  • Providing a block of data, such as the result of submitting a form, to a data-handling process;
  • Extending a database through an append operation.
HTTP_REQUEST_GET  The GET method means retrieve whatever information (in the form of an entity) is identified by the Request-URI. If the Request-URI refers to a data-producing process, it is the produced data which shall be returned as the entity in the response and not the source text of the process, unless that text happens to be the output of the process.
HTTP_REQUEST_OPTIONS  The OPTIONS method represents a request for information about the communication options available on the request/response chain identified by the Request-URI. This method allows the client to determine the options and/or requirements associated with a resource, or the capabilities of a server, without implying a resource action or initiating a resource retrieval.
HTTP_REQUEST_HEAD  The HEAD method is identical to GET except that the server MUST NOT return a message-body in the response. The metainformation contained in the HTTP headers in response to a HEAD request SHOULD be identical to the information sent in response to a GET request. This method can be used for obtaining metainformation about the entity implied by the request without transferring the entity-body itself. This method is often used for testing hypertext links for validity, accessibility, and recent modification.
HTTP_REQUEST_PUT  The PUT method requests that the enclosed entity be stored under the supplied Request-URI. If the Request-URI refers to an already existing resource, the enclosed entity SHOULD be considered as a modified version of the one residing on the origin server. If the Request-URI does not point to an existing resource, and that URI is capable of being defined as a new resource by the requesting user agent, the origin server can create the resource with that URI. If a new resource is created, the origin server MUST inform the user agent via the 201 (Created) response. If an existing resource is modified, either the 200 (OK) or 204 (No Content) response codes SHOULD be sent to indicate successful completion of the request. If the resource could not be created or modified with the Request-URI, an appropriate error response SHOULD be given that reflects the nature of the problem. The recipient of the entity MUST NOT ignore any Content-* (e.g. Content-Range) headers that it does not understand or implement and MUST return a 501 (Not Implemented) response in such cases.
HTTP_REQUEST_DELETE  The DELETE method requests that the origin server delete the resource identified by the Request-URI. This method MAY be overridden by human intervention (or other means) on the origin server. The client cannot be guaranteed that the operation has been carried out, even if the status code returned from the origin server indicates that the action has been completed successfully. However, the server SHOULD NOT indicate success unless, at the time the response is given, it intends to delete the resource or move it to an inaccessible location.
HTTP_REQUEST_TRACE  The TRACE method is used to invoke a remote, application-layer loop-back of the request message. The final recipient of the request SHOULD reflect the message received back to the client as the entity-body of a 200 (OK) response. The final recipient is either the origin server or the first proxy or gateway to receive a Max-Forwards value of zero (0) in the request (see section 14.31). A TRACE request MUST NOT include an entity.
HTTP_REQUEST_CONNECT  This specification reserves the method name CONNECT for use with a proxy that can dynamically switch to being a tunnel (e.g. SSL tunneling [44]).
HTTP_REQUEST_UNKOWN 

Definition at line 356 of file nanohttp-common.h.

enum _http_version
 

Indicates the version of the used HTTP protocol.

Enumerator:
HTTP_1_0 
HTTP_1_1 

Definition at line 319 of file nanohttp-common.h.


Function Documentation

void attachments_add_part struct attachments_t attachments,
struct part_t part
 

Definition at line 441 of file nanohttp-common.c.

References attachments_t::last, part_t::next, and attachments_t::parts.

Referenced by soap_ctx_add_file().

void attachments_free struct attachments_t message  ) 
 

Free a attachment. Create attachments with MIME

See also:
mime_get_attachments

Definition at line 460 of file nanohttp-common.c.

References part_t::next, part_free(), attachments_t::parts, and attachments_t::root_part.

Referenced by hrequest_free(), hresponse_free(), mime_get_attachments(), and soap_ctx_free().

struct attachments_t* attachments_new void   ) 
 

Definition at line 423 of file nanohttp-common.c.

References attachments_t::last, log_error2, attachments_t::parts, and attachments_t::root_part.

Referenced by soap_ctx_add_file().

void content_type_free content_type_t ct  ) 
 

Frees the given content_type_t object

Definition at line 354 of file nanohttp-common.c.

References hpairnode_free_deep(), and _content_type::params.

Referenced by hrequest_free(), and hresponse_free().

content_type_t* content_type_new const char *  content_type_str  ) 
 

Parses the given string and creates a new ccontent_type_t object.

Parameters:
content_type_str the string representation of the content-type field in a HTTP header.
Returns:
A newly created content_type_t object. Free this object with content_type_free();
See also:
content_type_free

Definition at line 269 of file nanohttp-common.c.

References hpairnode_new(), hpair::next, _content_type::params, and _content_type::type.

hpair_t* hpairnode_copy const hpair_t src  ) 
 

This function will create a new pair and fills the (key,value) fields of a given pair. Note that the 'next' field will not be copied.

Parameters:
src the source pair object to copy.
Returns:
a newly created pair with the same (key,value) pairs as in 'src'. This fields will be cloned. The'next' field will be set to NULL.
See also:
hpairnode_copy_deep

Definition at line 123 of file nanohttp-common.c.

References hpairnode_new(), hpair::key, and hpair::value.

Referenced by hpairnode_copy_deep().

hpair_t* hpairnode_copy_deep const hpair_t src  ) 
 

Clones the hole linked list.

Parameters:
src the source pair object to copy from
Returns:
the first object in the linked list.
See also:
hpairnode_copy

Definition at line 135 of file nanohttp-common.c.

References hpairnode_copy(), and hpair::next.

void hpairnode_dump const hpair_t pair  ) 
 

Dumps the pair specified.

Definition at line 158 of file nanohttp-common.c.

References hpair::key, log_verbose1, log_verbose5, hpair::next, SAVE_STR, and hpair::value.

Referenced by hpairnode_dump_deep().

void hpairnode_dump_deep const hpair_t pairs  ) 
 

Dumps a set of pairs.

See also:
hpairnode_dump

Definition at line 172 of file nanohttp-common.c.

References hpairnode_dump(), log_verbose1, and hpair::next.

Referenced by http_input_stream_new().

void hpairnode_free hpair_t pair  ) 
 

Frees a given pair.

Parameters:
pair the pair to free

Definition at line 187 of file nanohttp-common.c.

References hpair::key, and hpair::value.

Referenced by hpairnode_free_deep(), and httpc_free().

void hpairnode_free_deep hpair_t pair  ) 
 

Makes a deep free operation. All pairnodes, beginning with the given pari, in the linked list will be destroyed.

Parameters:
pair the pair to start to free the linked list

Definition at line 205 of file nanohttp-common.c.

References hpairnode_free(), and hpair::next.

Referenced by content_type_free(), hrequest_free(), hresponse_free(), httpd_free(), and part_free().

char* hpairnode_get hpair_t pair,
const char *  key
 

Returns the (key,value) pair, which key is the given 'key'.

Parameters:
pair the first pair to start to search from.
key key to find the in the pair.
Returns:
if a value will be found, this function will

the value (do not free this string) or NULL if no pair was found with the key 'key'.

Definition at line 244 of file nanohttp-common.c.

References hpair::key, log_error1, hpair::next, and hpair::value.

Referenced by mime_get_attachments().

char* hpairnode_get_ignore_case hpair_t pair,
const char *  key
 

Returns the (key,value) pair, which key is the given 'key'. The case will be ignored while comparing the key strings.

Parameters:
pair the first pair to start to search from.
key key to find the in the pair.
Returns:
if a value will be found, this function will

the value (do not free this string) or NULL if no pair was found with the key 'key'.

Definition at line 220 of file nanohttp-common.c.

References hpair::key, log_error1, hpair::next, and hpair::value.

Referenced by http_input_stream_new(), http_output_stream_new(), and httpd_get_postdata().

hpair_t* hpairnode_new const char *  key,
const char *  value,
hpair_t next
 

Creates a new pair with the given parameters. Both strings key and value will be cloned while creating the pair.

Parameters:
key the key of the (key,value) pair
value the value of the (key,value) pair
next next pair node in the linked list
Returns:
A newly crated hpair_t object. Use hpair_free() or hpair_free_deep() to free the pair.

Definition at line 61 of file nanohttp-common.c.

References hpair::key, log_error2, log_verbose3, hpair::next, SAVE_STR, and hpair::value.

Referenced by content_type_new(), hpairnode_copy(), httpc_add_header(), httpc_set_header(), httpd_add_header(), httpd_set_header(), and part_new().

hpair_t* hpairnode_parse const char *  str,
const char *  delim,
hpair_t next
 

Creates a new pair from a given string. This function will split 'str' with the found first delimiter 'delim'. The 'value' field of the newly created pair will have the value "", if no delimiter was found/ Whitespaces (' ') will be removed from the beginnig of the parsed value.

Parameters:
str A string to parse
delim a delimiter to use while splitting into key,value
next next pair node in the linked list
Returns:
A newly crated hpair_t object. Use hpair_free() or hpair_free_deep() to free the pair.

Definition at line 96 of file nanohttp-common.c.

References hpair::key, hpair::next, and hpair::value.

void part_free struct part_t part  ) 
 

Definition at line 407 of file nanohttp-common.c.

References part_t::deleteOnExit, part_t::filename, part_t::header, and hpairnode_free_deep().

Referenced by attachments_free().

struct part_t* part_new const char *  id,
const char *  filename,
const char *  content_type,
const char *  transfer_encoding,
struct part_t next
 

Definition at line 366 of file nanohttp-common.c.

References part_t::content_type, part_t::deleteOnExit, part_t::filename, part_t::header, HEADER_CONTENT_ID, HEADER_CONTENT_TYPE, hpairnode_new(), part_t::id, log_error2, part_t::next, and part_t::transfer_encoding.

Referenced by soap_ctx_add_file().


Generated on Thu Jan 25 23:36:03 2007 for csoap by  doxygen 1.4.6