mirror of
https://github.com/sigmasternchen/Serwer
synced 2025-03-15 15:18:55 +00:00
119 lines
2.1 KiB
C
119 lines
2.1 KiB
C
#ifndef WEBSERVER_H
|
|
#define WEBSERVER_H
|
|
|
|
#include <stdio.h>
|
|
#include <stdbool.h>
|
|
|
|
#define BUFFER_SIZE 1024
|
|
#define WS_HTTP_VERSION "HTTP/1.1"
|
|
#define WS_VERSION "0.1"
|
|
#define WS_NAME "SERWER"
|
|
|
|
|
|
|
|
typedef struct header {
|
|
const char* key;
|
|
const char* value;
|
|
} header_t;
|
|
|
|
typedef struct headers {
|
|
header_t* fields;
|
|
int nrfields;
|
|
} headers_t;
|
|
|
|
typedef FILE* stream_t;
|
|
|
|
typedef int loglevel_t;
|
|
|
|
#define LOG_TESTING 11
|
|
#define LOG_DEBUG 10
|
|
#define LOG_VERBOSE 5
|
|
#define LOG_WARN 2
|
|
#define LOG_ERROR 0
|
|
|
|
#define ANY NULL
|
|
|
|
typedef enum method {
|
|
OPTIONS,
|
|
GET,
|
|
HEAD,
|
|
POST,
|
|
PUT,
|
|
DELETE,
|
|
TRACE,
|
|
CONNECT
|
|
} method_t;
|
|
|
|
typedef int(*handler_t)(method_t method, const char* host, const char* path, headers_t requestHeaders,
|
|
headers_t* responseHeaders, stream_t request, stream_t response);
|
|
|
|
typedef struct handle {
|
|
const char* path;
|
|
const char* host;
|
|
handler_t handler;
|
|
} handle_t;
|
|
|
|
typedef enum mode {
|
|
//PRE_FORKED,
|
|
//POST_FORKED,
|
|
//STATEFULL,
|
|
//THREADED,
|
|
LINEAR
|
|
} srvmode_t;
|
|
|
|
typedef struct srvoptions {
|
|
srvmode_t mode;
|
|
int timeout;
|
|
int maxconnections;
|
|
loglevel_t loglevel;
|
|
} srvoptions_t;
|
|
|
|
typedef struct webserver {
|
|
const char* name;
|
|
int sfd;
|
|
const char* host;
|
|
const char* port;
|
|
handle_t* handles;
|
|
int nrhandles;
|
|
FILE* logfile;
|
|
srvoptions_t options;
|
|
} webserver_t;
|
|
|
|
bool ws_host_match(const char*, const char*);
|
|
bool ws_path_match(const char*, const char*);
|
|
|
|
handler_t ws_handler_find(webserver_t*, const char*, const char*);
|
|
|
|
char* ws_host_find(const char**, headers_t);
|
|
|
|
const char* ws_strm(method_t);
|
|
|
|
int ws_request_parse(char*, const char**, method_t*);
|
|
|
|
headers_t ws_headers_create(void);
|
|
|
|
void ws_headers_add(headers_t*, const char*, const char*);
|
|
|
|
void ws_headers_convert(headers_t*, char*);
|
|
|
|
void ws_headers_free(headers_t*);
|
|
|
|
int ws_listen(webserver_t*);
|
|
|
|
void ws_handle_add(webserver_t*, handle_t);
|
|
|
|
webserver_t ws_create(const char*, const char*, const char*, FILE*, srvoptions_t);
|
|
|
|
void ws_log(webserver_t*, loglevel_t, const char*, ...);
|
|
|
|
const char* ws_code_reason(int);
|
|
|
|
void ws_send(int, int, headers_t, int);
|
|
|
|
void ws_simple_status(int, int);
|
|
|
|
int ws_run_linear(webserver_t*);
|
|
|
|
int ws_run(webserver_t*);
|
|
|
|
#endif
|