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
 

#define HEADER_CONTENT_ID   "Content-Id"
 

#define HEADER_CONTENT_TRANSFER_ENCODING   "Content-Transfer-Encoding"
 

#define MAX_FILE_BUFFER_SIZE   4256
 

#define MAX_HEADER_SIZE   4256
 

#define NHTTP_ARG_CA   "-NHTTPCA"
 

#define NHTTP_ARG_CERT   "-NHTTPcert"
 

Common commandline arguments for client and server.

#define NHTTP_ARG_CERTPASS   "-NHTTPcertpass"
 

#define REQUEST_MAX_PATH_SIZE   1024
 

#define RESPONSE_MAX_DESC_SIZE   1024
 

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

#define TRANSFER_ENCODING_CHUNKED   "chunked"
 


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.

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 

enum _http_version
 

Indicates the version of the used HTTP protocol.

Enumerator:
HTTP_1_0 
HTTP_1_1 


Function Documentation

void attachments_add_part struct attachments_t attachments,
struct part_t part
 

void attachments_free struct attachments_t message  ) 
 

Free a attachment. Create attachments with MIME

See also:
mime_get_attachments

struct attachments_t* attachments_new void   ) 
 

void content_type_free content_type_t ct  ) 
 

Frees the given content_type_t object

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

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

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

void hpairnode_dump const hpair_t pair  ) 
 

Dumps the pair specified.

void hpairnode_dump_deep const hpair_t pairs  ) 
 

Dumps a set of pairs.

See also:
hpairnode_dump

void hpairnode_free hpair_t pair  ) 
 

Frees a given pair.

Parameters:
pair the pair to 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

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'.

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'.

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.

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.

void part_free struct part_t part  ) 
 

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


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