rsstats 0.0.1
Redis Enterprise Statistic collector
libhttp.h File Reference

HTTP parsing and building library. More...

This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Typedefs

typedef enum HTTPVersion_e HTTPVersion_t
 
typedef enum HTTPMethod_e HTTPMethod_t
 
typedef enum HTTPStatus_e HTTPStatus_t
 
typedef struct HTTPHeader_s HTTPHeader_t
 
typedef struct HTTP_s HTTP_t
 

Enumerations

enum  HTTPVersion_e {
  HTTPVERSION_HTTP09 , HTTPVERSION_HTTP10 , HTTPVERSION_HTTP11 , HTTPVERSION_HTTP11b ,
  HTTPVERSION_HTTP2 , HTTPVERSION_HTTP3 , HTTPVERSION_INVALID
}
 
enum  HTTPMethod_e {
  HTTPMETHOD_GET , HTTPMETHOD_HEAD , HTTPMETHOD_POST , HTTPMETHOD_PUT ,
  HTTPMETHOD_DELETE , HTTPMETHOD_CONNECT , HTTPMETHOD_OPTIONS , HTTPMETHOD_TRACE ,
  HTTPMETHOD_PATCH , HTTPMETHOD_INVALID
}
 
enum  HTTPStatus_e {
  INFO_CONTINUE = 100 , INFO_SWITCHINGPROTOCOLS = 101 , INFO_PROCESSING = 102 , INFO_EARLYHINTS = 103 ,
  SUCCESS_OK = 200 , SUCCESS_CREATED = 201 , SUCCESS_ACCEPTED = 202 , SUCCESS_NONAUTHORITATIVEINFORMATION = 203 ,
  SUCCESS_NOCONTENT = 204 , SUCCESS_RESETCONTENT = 205 , SUCCESS_PARTIALCONTENT = 206 , SUCCESS_MULTISTATUS = 207 ,
  SUCCESS_ALREADYREPORTED = 208 , SUCCESS_IMUSED = 226 , REDIRECTION_MULTIPLECHOICES = 300 , REDIRECTION_MOVEDPERMANENTLY = 301 ,
  REDIRECTION_FOUND = 302 , REDIRECTION_SEEOTHER = 303 , REDIRECTION_NOTMODIFIED = 304 , REDIRECTION_USEPROXY = 305 ,
  REDIRECTION_SWITCHPROXY = 306 , REDIRECTION_TEMPORARYREDIRECT = 307 , REDIRECTION_PERMANENTREDIRECT = 308 , CLIENTERROR_BADREQUEST = 400 ,
  CLIENTERROR_UNAUTHORIZED = 401 , CLIENTERROR_PAYMENTREQUIRED = 402 , CLIENTERROR_FORBIDDEN = 403 , CLIENTERROR_NOTFOUND = 404 ,
  CLIENTERROR_METHODNOTALLOWED = 405 , CLIENTERROR_NOTACCEPTABLE = 406 , CLIENTERROR_PROXYAUTHENTICATIONREQUIRED = 407 , CLIENTERROR_REQUESTTIMEOUT = 408 ,
  CLIENTERROR_CONFLICT = 409 , CLIENTERROR_GONE = 410 , CLIENTERROR_LENGTHREQUIRED = 411 , CLIENTERRORPRECONDITIONFAILED = 412 ,
  CLIENTERROR_PAYLOADTOOLARGE = 413 , CLIENTERROR_URITOOLONG = 414 , CLIENTERROR_UNSUPPORTEDMEDIATYPE = 415 , CLIENTERROR_RANGENOTSATISFIABLE = 416 ,
  CLIENTERROR_EXPECTATIONFAILED = 417 , CLIENTERROR_IMATEAPOT = 418 , CLIENTERROR_MISDIRECTEDREQUEST = 421 , CLIENTERROR_UNPROCESSABLECONTENT = 422 ,
  CLIENTERROR_LOCKED = 423 , CLIENTERROR_FAILEDDEPENDENCY = 424 , CLIENTERROR_TOOEARLY = 425 , CLIENTERROR_UPGRADEREQUIRED = 426 ,
  CLIENTERROR_PRECONDITIONREQUIRED = 428 , CLIENTERROR_TOOMANYREQUESTS = 429 , CLIENTERROR_REQUESTHEADERFIELDSTOOLARGE = 431 , CLIENTERROR_UNAVAILABLEFORLEGALREASONS = 451 ,
  SERVERERROR_INTERNALSERVERERROR = 500 , SERVERERROR_NOTIMPLEMENTED = 501 , SERVERERROR_BADGATEWAY = 502 , SERVERERROR_SERVICEUNAVAILABLE = 503 ,
  SERVERERROR_GATEWAYTIMEOUT = 504 , SERVERERROR_HTTPVERSIONNOTSUPPORTED = 505 , SERVERERROR_VARIANTALSONEGOTIATES = 506 , SERVERERROR_INSUFFICIENTSTORAGE = 507 ,
  SERVERERROR_LOOPDETECTED = 508 , SERVERERROR_NOTEXTENDED = 510 , SERVERERROR_NETWORKAUTHENTICATIONREQUIRED = 511
}
 

Functions

HTTP_tHTTP_new ()
 
void HTTP_del (HTTP_t *http)
 
HTTP_tHTTP_setbody (HTTP_t *http, const char *body)
 
char * HTTP_getbody (HTTP_t *http)
 
HTTPHeader_tHTTP_addheader (HTTP_t *http, const char *name, const char *value)
 
HTTPHeader_tHTTP_addbasicauth (HTTP_t *http, const char *login, const char *pass)
 
HTTPHeader_tHTTPHeader_setname (HTTPHeader_t *header, const char *name)
 
char * HTTPHeader_getname (HTTPHeader_t *header)
 
HTTPHeader_tHTTPHeader_setvalue (HTTPHeader_t *header, const char *value)
 
char * HTTPHeader_getvalue (HTTPHeader_t *header)
 
HTTPHeader_tHTTP_firstheader (const HTTP_t *http)
 
HTTPHeader_tHTTP_nextheader (const HTTPHeader_t *header)
 
HTTPHeader_tHTTP_findheader (const HTTPHeader_t *start, const char *name)
 
HTTP_tHTTP_remheader (HTTP_t *http, HTTPHeader_t *header)
 
char * HTTP_buildheaders (const HTTP_t *http)
 
char * HTTP_buildrequest (const HTTPMethod_t method, const char *uri, const HTTPVersion_t version)
 
void HTTP_parserequest (const char *request, HTTP_t **http, HTTPMethod_t method, char *uri, HTTPVersion_t version)
 
char * HTTP_buildreply (const HTTP_t *http, const HTTPVersion_t, const HTTPStatus_t)
 
void HTTP_parsereply (const char *reply, HTTP_t **http, HTTPVersion_t *, HTTPStatus_t *)
 

Detailed Description

HTTP parsing and building library.

HTTP Status code reference : https://en.wikipedia.org/wiki/List_of_HTTP_status_codes HTTP Header fields reference : https://en.wikipedia.org/wiki/List_of_HTTP_header_fields

Author
François Cerbelle (Fanfan), franc.nosp@m.ois@.nosp@m.cerbe.nosp@m.lle..nosp@m.net

Definition in file libhttp.h.

Typedef Documentation

◆ HTTP_t

typedef struct HTTP_s HTTP_t

Definition at line 117 of file libhttp.h.

◆ HTTPHeader_t

typedef struct HTTPHeader_s HTTPHeader_t

Definition at line 115 of file libhttp.h.

◆ HTTPMethod_t

typedef enum HTTPMethod_e HTTPMethod_t

◆ HTTPStatus_t

typedef enum HTTPStatus_e HTTPStatus_t

◆ HTTPVersion_t

Enumeration Type Documentation

◆ HTTPMethod_e

Enumerator
HTTPMETHOD_GET 
HTTPMETHOD_HEAD 
HTTPMETHOD_POST 
HTTPMETHOD_PUT 
HTTPMETHOD_DELETE 
HTTPMETHOD_CONNECT 
HTTPMETHOD_OPTIONS 
HTTPMETHOD_TRACE 
HTTPMETHOD_PATCH 
HTTPMETHOD_INVALID 

Definition at line 35 of file libhttp.h.

◆ HTTPStatus_e

Enumerator
INFO_CONTINUE 
INFO_SWITCHINGPROTOCOLS 
INFO_PROCESSING 
INFO_EARLYHINTS 
SUCCESS_OK 
SUCCESS_CREATED 
SUCCESS_ACCEPTED 
SUCCESS_NONAUTHORITATIVEINFORMATION 
SUCCESS_NOCONTENT 
SUCCESS_RESETCONTENT 
SUCCESS_PARTIALCONTENT 
SUCCESS_MULTISTATUS 
SUCCESS_ALREADYREPORTED 
SUCCESS_IMUSED 
REDIRECTION_MULTIPLECHOICES 
REDIRECTION_MOVEDPERMANENTLY 
REDIRECTION_FOUND 
REDIRECTION_SEEOTHER 
REDIRECTION_NOTMODIFIED 
REDIRECTION_USEPROXY 
REDIRECTION_SWITCHPROXY 
REDIRECTION_TEMPORARYREDIRECT 
REDIRECTION_PERMANENTREDIRECT 
CLIENTERROR_BADREQUEST 
CLIENTERROR_UNAUTHORIZED 
CLIENTERROR_PAYMENTREQUIRED 
CLIENTERROR_FORBIDDEN 
CLIENTERROR_NOTFOUND 
CLIENTERROR_METHODNOTALLOWED 
CLIENTERROR_NOTACCEPTABLE 
CLIENTERROR_PROXYAUTHENTICATIONREQUIRED 
CLIENTERROR_REQUESTTIMEOUT 
CLIENTERROR_CONFLICT 
CLIENTERROR_GONE 
CLIENTERROR_LENGTHREQUIRED 
CLIENTERRORPRECONDITIONFAILED 
CLIENTERROR_PAYLOADTOOLARGE 
CLIENTERROR_URITOOLONG 
CLIENTERROR_UNSUPPORTEDMEDIATYPE 
CLIENTERROR_RANGENOTSATISFIABLE 
CLIENTERROR_EXPECTATIONFAILED 
CLIENTERROR_IMATEAPOT 
CLIENTERROR_MISDIRECTEDREQUEST 
CLIENTERROR_UNPROCESSABLECONTENT 
CLIENTERROR_LOCKED 
CLIENTERROR_FAILEDDEPENDENCY 
CLIENTERROR_TOOEARLY 
CLIENTERROR_UPGRADEREQUIRED 
CLIENTERROR_PRECONDITIONREQUIRED 
CLIENTERROR_TOOMANYREQUESTS 
CLIENTERROR_REQUESTHEADERFIELDSTOOLARGE 
CLIENTERROR_UNAVAILABLEFORLEGALREASONS 
SERVERERROR_INTERNALSERVERERROR 
SERVERERROR_NOTIMPLEMENTED 
SERVERERROR_BADGATEWAY 
SERVERERROR_SERVICEUNAVAILABLE 
SERVERERROR_GATEWAYTIMEOUT 
SERVERERROR_HTTPVERSIONNOTSUPPORTED 
SERVERERROR_VARIANTALSONEGOTIATES 
SERVERERROR_INSUFFICIENTSTORAGE 
SERVERERROR_LOOPDETECTED 
SERVERERROR_NOTEXTENDED 
SERVERERROR_NETWORKAUTHENTICATIONREQUIRED 

Definition at line 49 of file libhttp.h.

◆ HTTPVersion_e

Enumerator
HTTPVERSION_HTTP09 
HTTPVERSION_HTTP10 
HTTPVERSION_HTTP11 
HTTPVERSION_HTTP11b 
HTTPVERSION_HTTP2 
HTTPVERSION_HTTP3 
HTTPVERSION_INVALID 

Definition at line 25 of file libhttp.h.

Function Documentation

◆ HTTP_addbasicauth()

HTTPHeader_t * HTTP_addbasicauth ( HTTP_t http,
const char *  login,
const char *  pass 
)

Definition at line 235 of file libhttp.c.

Here is the call graph for this function:

◆ HTTP_addheader()

HTTPHeader_t * HTTP_addheader ( HTTP_t http,
const char *  name,
const char *  value 
)

Definition at line 208 of file libhttp.c.

Here is the caller graph for this function:

◆ HTTP_buildheaders()

char * HTTP_buildheaders ( const HTTP_t http)
Todo:
: OOM tests

Definition at line 377 of file libhttp.c.

Here is the call graph for this function:

◆ HTTP_buildreply()

char * HTTP_buildreply ( const HTTP_t http,
const  HTTPVersion_t,
const  HTTPStatus_t 
)

◆ HTTP_buildrequest()

char * HTTP_buildrequest ( const HTTPMethod_t  method,
const char *  uri,
const HTTPVersion_t  version 
)

Definition at line 416 of file libhttp.c.

◆ HTTP_del()

void HTTP_del ( HTTP_t http)

Definition at line 157 of file libhttp.c.

Here is the call graph for this function:

◆ HTTP_findheader()

HTTPHeader_t * HTTP_findheader ( const HTTPHeader_t start,
const char *  name 
)

Definition at line 304 of file libhttp.c.

Here is the call graph for this function:

◆ HTTP_firstheader()

HTTPHeader_t * HTTP_firstheader ( const HTTP_t http)

Definition at line 275 of file libhttp.c.

Here is the call graph for this function:

◆ HTTP_getbody()

char * HTTP_getbody ( HTTP_t http)

Definition at line 200 of file libhttp.c.

◆ HTTP_new()

HTTP_t * HTTP_new ( )

Definition at line 133 of file libhttp.c.

Here is the call graph for this function:

◆ HTTP_nextheader()

HTTPHeader_t * HTTP_nextheader ( const HTTPHeader_t header)

Definition at line 287 of file libhttp.c.

Here is the call graph for this function:

◆ HTTP_parsereply()

void HTTP_parsereply ( const char *  reply,
HTTP_t **  http,
HTTPVersion_t ,
HTTPStatus_t  
)

◆ HTTP_parserequest()

void HTTP_parserequest ( const char *  request,
HTTP_t **  http,
HTTPMethod_t  method,
char *  uri,
HTTPVersion_t  version 
)

◆ HTTP_remheader()

HTTP_t * HTTP_remheader ( HTTP_t http,
HTTPHeader_t header 
)
Todo:
: make sclist_remrecord return a status (found/notfound) and use it
Bug:
Header deleted if not found in this HTTP, but it obviously belongs to another HTTP, will be freed, but not removed from his header list SIGSEGV11 to expect at some point

Definition at line 335 of file libhttp.c.

Here is the call graph for this function:

◆ HTTP_setbody()

HTTP_t * HTTP_setbody ( HTTP_t http,
const char *  body 
)

Definition at line 182 of file libhttp.c.

◆ HTTPHeader_getname()

char * HTTPHeader_getname ( HTTPHeader_t header)

Definition at line 65 of file libhttp.c.

Here is the caller graph for this function:

◆ HTTPHeader_getvalue()

char * HTTPHeader_getvalue ( HTTPHeader_t header)

Definition at line 90 of file libhttp.c.

◆ HTTPHeader_setname()

HTTPHeader_t * HTTPHeader_setname ( HTTPHeader_t header,
const char *  name 
)

Definition at line 43 of file libhttp.c.

◆ HTTPHeader_setvalue()

HTTPHeader_t * HTTPHeader_setvalue ( HTTPHeader_t header,
const char *  value 
)

Definition at line 73 of file libhttp.c.