Skip to main content

This struct is defined as follows:

typedef struct _http_request {
 /* request line: Method SP Request-URI SP HTTP-Version CRLF */
 string *method;
 string *version;
 string *uri;
 ec_hash_table headers;
 string* body;
 string* data;   /* string representation of entire HTTP request line + headers + payload */
 int to_send_offset;  /* offset of the data already sent in "data". internal use only */
 void *userdata; /* protocol specific data. Shall be released in reset_request func */
} http_request;

typedef struct http_response {
 int read_done;   /* whether received complete payload */
 int header_done; /* whether received complete header */
 int64_t content_length;  /* -1: chunked data */
 /* structural data after parsing */
 /* status line: HTTP-Version SP Status-Code SP Reason-Phrase CRLF */
 string *version;          
 string *status_code;       
 string *status_reason;  
 ec_hash_table headers;
 char *body;             /* pos in data.buffer */
 string* data;   /* HTTP status line + header lines + body if exist  */
 int payload_offset;  /* pointer to the start of the payload in data */
                      /* TODO: may merge with *body + read_done ?    */
 /* the following place holder are only for internal use */
 /* used to keep the raw data from socket.               */
 /* for non-chunked response, they are same as data & payload_offset */
 string* raw_data;  
 int raw_offset; /* pointer to the start of the current chunk in raw_data */
 void *userdata; /* protocol specific data. Shall be released in reset_response func */
} http_response;

typedef struct http_session {
 connection_handle *connh;
 string *ipaddr; /* remote ip address, for logging purpose */
 http_request *request;
 http_response *response;
 void *userdata; /* protocol specific data */
 Event *response_timer; /* timeout event for waiting for response */
} http_session;

To use this struct, include the file modules/delivery/http/httpclnt.h.

See Also

Was this page helpful?