2017-07-21 03:40:43 +00:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#ifdef __x86_64__
|
|
|
|
#define INT_TYPE uint64_t
|
|
|
|
#else
|
|
|
|
#define INT_TYPE uint32_t
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#define MAX_READ (32*1024) // 32k
|
|
|
|
|
|
|
|
struct s_list {
|
|
|
|
int socket;
|
|
|
|
uint32_t ipv4;
|
|
|
|
uint16_t port;
|
|
|
|
int max_conns;
|
|
|
|
int timeout;
|
|
|
|
struct s_conns {
|
|
|
|
int socket;
|
|
|
|
uint32_t ipv4;
|
|
|
|
uint16_t port;
|
|
|
|
pthread_t pthread;
|
|
|
|
} **conns;
|
|
|
|
};
|
|
|
|
|
2017-07-24 01:24:14 +00:00
|
|
|
struct s_request {
|
|
|
|
char *buf;
|
|
|
|
size_t size;
|
|
|
|
|
|
|
|
char *method;
|
|
|
|
char *path;
|
|
|
|
char *http_ver;
|
|
|
|
char *header;
|
|
|
|
char *body;
|
|
|
|
size_t body_size;
|
|
|
|
};
|
|
|
|
|
|
|
|
#define HTTP_400 "HTTP/1.1 400 Bad Request\r\n" \
|
|
|
|
"Content-Type: text/plain\r\n" \
|
|
|
|
"Connection: close\r\n\r\n" \
|
|
|
|
"400 Bad Request"
|
|
|
|
|
|
|
|
|
|
|
|
#define HTTP_404 "HTTP/1.1 404 Not Found\r\n" \
|
|
|
|
"Content-Type: text/plain; charset=utf-8\r\n" \
|
|
|
|
"X-Content-Type-Options: nosniff\r\n" \
|
|
|
|
"Content-Length: 19\r\n\r\n" \
|
|
|
|
"404 page not found\n"
|
|
|
|
|
|
|
|
#define HTTP_500 "HTTP/1.1 500 Internal server error\r\n" \
|
|
|
|
"Content-Type: text/plain\r\n" \
|
|
|
|
"Connection: close\r\n\r\n" \
|
|
|
|
"500 Internal server error"
|
|
|
|
|
2017-07-21 03:40:43 +00:00
|
|
|
#define write_cstr(f,s) write(f,s,sizeof(s)-1)
|
|
|
|
#define write_str(f,s) write(f,s,strlen(s))
|
|
|
|
|
|
|
|
#define cstrstart(a,b) (memcmp(a,b,sizeof(b)-1)==0)
|
|
|
|
#define strstart(a,b) (memcmp(a,b,strlen(b))==0)
|
|
|
|
|
|
|
|
void *api_connection_thread (void *ptr);
|
|
|
|
void api_connections_cleanup (void);
|
|
|
|
void *api_listen_thread (void *ptr);
|
|
|
|
int api_start (uint16_t port, int max_conns, int timeout);
|
|
|
|
int api_stop (void);
|