| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- #ifndef SCUFENG_HTTP_H_
- #define SCUFENG_HTTP_H_
- #include <netinet/in.h>
- #include <stdint.h>
- #include "scufcont/DArray.h"
- #include "scufcont/DString.h"
- #include "scufeng/engine.h"
- #define SE_HTTP_METHODS_X(X) \
- X(SE_METHOD_GET) \
- X(SE_METHOD_HEAD) \
- X(SE_METHOD_POST) \
- X(SE_METHOD_PUT) \
- X(SE_METHOD_DELETE) \
- X(SE_METHOD_CONNECT) \
- X(SE_METHOD_OPTIONS) \
- X(SE_METHOD_TRACE) \
- X(SE_METHOD_PATCH) \
- X(SE_METHOD_QUERY)
- #define X(method) method,
- typedef enum : uint8_t {
- SE_HTTP_METHODS_X(X)
- } SEHttpMethod;
- #undef X
- typedef struct {
- char *key;
- char *value;
- } SEHttpHeader;
- SCDARRAY_HEADER(SEHttpHeader, SEHttpHeader)
- typedef struct {
- in_port_t port;
- SEHttpMethod method;
- SCDString uri;
- SCDArray_SEHttpHeader headers;
- uint8_t *body;
- size_t body_len;
- } SEHttpRequest;
- // typedef struct {
- //
- // } SEHttpResponse;
- const char *SEHttpMethod_to_str(const SEHttpMethod method);
- /**
- @return SE_OUT_OF_MEMORY
- @return SE_SUCCESS
- */
- SEResult SEHttpHeader_alloc(
- SEHttpHeader *const header,
- const char *key,
- const size_t key_len,
- const char *value,
- const size_t value_len
- );
- void SEHttpHeader_free(SEHttpHeader *const header);
- void SEHttpHeader_print(const SEHttpHeader *const header, FILE *o);
- size_t SEHttpHeader_data_size(const SEHttpHeader *const header);
- size_t SEHttpHeader_data(const SEHttpHeader *const header, uint8_t *const buf);
- /**
- @return SE_OUT_OF_MEMORY
- @return SE_SUCCESS
- */
- SEResult SEHttpRequest_header_add(SEHttpRequest *const req, const SEHttpHeader *const header);
- /**
- @return SE_OUT_OF_MEMORY
- @return SE_SUCCESS
- */
- SEResult SEHttpRequest_header_add_c_str(
- SEHttpRequest *const req,
- const char *key,
- const size_t key_len,
- const char *value,
- const size_t value_len
- );
- /**
- @return SE_OUT_OF_MEMORY
- @return SE_SUCCESS
- */
- SEResult SEHttpRequest_alloc(
- SEHttpRequest *const req,
- const char *host,
- const size_t host_len,
- const in_port_t port,
- const SEHttpMethod method,
- const char *uri,
- const size_t uri_len,
- const uint8_t *body,
- const size_t body_len
- );
- void SEHttpRequest_free(SEHttpRequest *const req);
- void SEHttpRequest_print(const SEHttpRequest *const req, FILE *o);
- size_t SEHttpRequest_headers_data_size(const SEHttpRequest *const req);
- size_t SEHttpRequest_data_size(const SEHttpRequest *const req);
- size_t SEHttpRequest_data(
- const SEHttpRequest *const req,
- uint8_t *const buf
- );
- /**
- @return SE_SUCCESS
- @return SE_ERRNO
- @return SE_GAI
- @return SE_COULD_NOT_CONNECT_TO_HOST
- @return SE_COULD_NOT_FIND_ADDRESS
- @return SE_OUT_OF_MEMORY
- */
- SEResult SEHttpRequest_send(const SEHttpRequest *const req, int *const gai_err);
- /**
- @return SE_SUCCESS
- @return SE_ERRNO
- @return SE_GAI
- @return SE_COULD_NOT_CONNECT_TO_HOST
- @return SE_COULD_NOT_FIND_ADDRESS
- @return SE_OUT_OF_MEMORY
- */
- SEResult se_http_request_send(
- const char *const host,
- const size_t host_len,
- const in_port_t port,
- const SEHttpMethod method,
- const char *const uri,
- const size_t uri_len,
- const char *const *const headers,
- const size_t headers_len,
- const uint8_t *const body,
- const size_t body_len,
- int *const gai_err
- );
- #endif // SCUFENG_HTTP_H_
|