Skip to content

Commit

Permalink
server/lib: get rid of mk_config global context
Browse files Browse the repository at this point in the history
Signed-off-by: Eduardo Silva <eduardo@monkey.io>
  • Loading branch information
edsiper committed Aug 15, 2016
1 parent 59c85c8 commit c1c0445
Show file tree
Hide file tree
Showing 41 changed files with 789 additions and 671 deletions.
1 change: 1 addition & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -308,6 +308,7 @@ add_subdirectory(man)
add_subdirectory(mk_core)
add_subdirectory(plugins)
add_subdirectory(mk_server)

if(NOT MK_WITHOUT_BIN)
add_subdirectory(mk_bin)
endif()
Expand Down
2 changes: 1 addition & 1 deletion include/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
if(NOT BUILD_LOCAL)
if(NOT MK_LOCAL)
install(DIRECTORY
${CMAKE_CURRENT_SOURCE_DIR}/monkey/
DESTINATION
Expand Down
25 changes: 10 additions & 15 deletions include/monkey/mk_config.h
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ struct mk_config_listener
};

/* Base struct of server */
struct mk_server_config
struct mk_server
{
int server_fd; /* server socket file descriptor */
int kernel_version; /* Running Linux Kernel version */
Expand Down Expand Up @@ -155,30 +155,25 @@ struct mk_server_config
struct mk_list stage50_handler;
};

/* Global context of the server */
struct mk_server_config *mk_config;


/* Functions */
struct mk_server_config *mk_config_init();
void mk_config_start_configure(void);
void mk_config_signature(struct mk_server_config *config);
void mk_config_start_configure(struct mk_server *server);
void mk_config_signature(struct mk_server *server);
void mk_config_add_index(char *indexname);
void mk_config_set_init_values(struct mk_server_config *config);
int mk_config_listen_parse(char *value);
void mk_config_set_init_values(struct mk_server *config);
int mk_config_listen_parse(char *value, struct mk_server *server);

/* config helpers */
void mk_config_error(const char *path, int line, const char *msg);

struct mk_config_listener *mk_config_listener_add(char *address, char *port,
int flags);

struct mk_config_listener *mk_config_listener_add(char *address,
char *port, int flags,
struct mk_server *server);
int mk_config_listen_check_busy();
void mk_config_listeners_free();

int mk_config_get_bool(char *value);
void mk_config_read_hosts(char *path);
void mk_config_sanity_check(void);
void mk_config_free_all();
void mk_config_sanity_check(struct mk_server *server);
void mk_config_free_all(struct mk_server *server);

#endif
5 changes: 5 additions & 0 deletions include/monkey/mk_core/mk_utils.h
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,11 @@ pthread_mutex_t mutex_trace;
__FUNCTION__, __FILENAME__, __LINE__, __VA_ARGS__)

#else

#ifdef MK_TRACE
#undef MK_TRACE
#endif

#define MK_TRACE(...) do {} while (0)
#endif

Expand Down
4 changes: 3 additions & 1 deletion include/monkey/mk_header.h
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,9 @@ extern const mk_ptr_t mk_header_accept_ranges;
extern const mk_ptr_t mk_header_te_chunked;
extern const mk_ptr_t mk_header_last_modified;

int mk_header_prepare(struct mk_http_session *cs, struct mk_http_request *sr);
int mk_header_prepare(struct mk_http_session *cs, struct mk_http_request *sr,
struct mk_server *server);

void mk_header_response_reset(struct response_headers *header);
void mk_header_set_http_status(struct mk_http_request *sr, int status);
void mk_header_set_content_length(struct mk_http_request *sr, long len);
Expand Down
28 changes: 19 additions & 9 deletions include/monkey/mk_http.h
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,8 @@ static inline int mk_http_status_completed(struct mk_http_session *cs,
}

int mk_http_error(int http_status, struct mk_http_session *cs,
struct mk_http_request *sr);
struct mk_http_request *sr,
struct mk_server *server);

int mk_http_method_check(mk_ptr_t method);
mk_ptr_t mk_http_method_check_str(int method);
Expand All @@ -182,30 +183,39 @@ int mk_http_method_get(char *body);
int mk_http_protocol_check(char *protocol, int len);
mk_ptr_t mk_http_protocol_check_str(int protocol);

int mk_http_init(struct mk_http_session *cs, struct mk_http_request *sr);
int mk_http_init(struct mk_http_session *cs, struct mk_http_request *sr,
struct mk_server *server);

int mk_http_keepalive_check(struct mk_http_session *cs,
struct mk_http_request *sr);
struct mk_http_request *sr,
struct mk_server *server);

int mk_http_pending_request(struct mk_http_session *cs);
int mk_http_send_file(struct mk_http_session *cs, struct mk_http_request *sr);

/* http session */
int mk_http_session_init(struct mk_http_session *cs,
struct mk_sched_conn *conn);
void mk_http_session_remove(struct mk_http_session *cs);
void mk_http_session_remove(struct mk_http_session *cs,
struct mk_server *server);

/* event handlers */
int mk_http_handler_read(struct mk_sched_conn *conn, struct mk_http_session *cs);
int mk_http_handler_read(struct mk_sched_conn *conn, struct mk_http_session *cs,
struct mk_server *server);

int mk_http_handler_write(int socket, struct mk_http_session *cs);

void mk_http_request_free(struct mk_http_request *sr);
void mk_http_request_free_list(struct mk_http_session *cs);
void mk_http_request_free(struct mk_http_request *sr, struct mk_server *server);
void mk_http_request_free_list(struct mk_http_session *cs,
struct mk_server *server);

void mk_http_request_init(struct mk_http_session *session,
struct mk_http_request *request);
struct mk_http_request *request,
struct mk_server *server);
struct mk_http_header *mk_http_header_get(int name, struct mk_http_request *req,
const char *key, unsigned int len);
int mk_http_request_end(struct mk_http_session *cs);

int mk_http_request_end(struct mk_http_session *cs, struct mk_server *server);

#define mk_http_session_get(conn) \
(struct mk_http_session *) \
Expand Down
3 changes: 1 addition & 2 deletions include/monkey/mk_http_parser.h
Original file line number Diff line number Diff line change
Expand Up @@ -342,8 +342,7 @@ static inline int mk_http_parser_more(struct mk_http_parser *p, int len)
return MK_FALSE;
}


int mk_http_parser(struct mk_http_request *req, struct mk_http_parser *p,
char *buffer, int len);
char *buffer, int buf_len, struct mk_server *server);

#endif /* MK_HTTP_H */
3 changes: 2 additions & 1 deletion include/monkey/mk_kernel.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@

int mk_kernel_version();
int mk_kernel_features(int version);
int mk_kernel_features_print(char *buffer, size_t size);
int mk_kernel_features_print(char *buffer, size_t size,
struct mk_server *server);

#endif
4 changes: 3 additions & 1 deletion include/monkey/mk_lib.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
#include <monkey/mk_http_internal.h>

struct mk_lib_ctx {
struct mk_server_config *config;
struct mk_server *server;
};

typedef struct mk_lib_ctx mk_ctx_t;
Expand All @@ -40,6 +40,8 @@ typedef struct mk_http_session mk_session_t;
MK_EXPORT int mk_start(mk_ctx_t *ctx);

MK_EXPORT mk_ctx_t *mk_create();
MK_EXPORT int mk_destroy(mk_ctx_t *ctx);

MK_EXPORT int mk_config_set(mk_ctx_t *ctx, ...);

MK_EXPORT mk_vhost_t *mk_vhost_create(mk_ctx_t *ctx, char *name);
Expand Down
38 changes: 22 additions & 16 deletions include/monkey/mk_plugin.h
Original file line number Diff line number Diff line change
Expand Up @@ -98,16 +98,18 @@ struct plugin_api
int (*socket_send_file) (int, int, off_t *, size_t);
int (*socket_ip_str) (int, char **, int, unsigned long *);

struct mk_server_config *config;
struct mk_server *config;
struct mk_list *plugins;
struct mk_sched_worker *sched_list;

/* Error helper */
void (*_error) (int, const char *, ...) PRINTF_WARNINGS(2,3);

/* HTTP request function */
int (*http_request_end) (struct mk_http_session *cs, int close);
int (*http_request_error) (int, struct mk_http_session *, struct mk_http_request *);
int (*http_request_end) (struct mk_http_session *cs, int close,
struct mk_server *);
int (*http_request_error) (int, struct mk_http_session *,
struct mk_http_request *, struct mk_server *);

/* memory functions */
void *(*mem_alloc) (const size_t size);
Expand Down Expand Up @@ -136,7 +138,8 @@ struct plugin_api

/* header */
int (*header_prepare) (struct mk_http_session *,
struct mk_http_request *);
struct mk_http_request *,
struct mk_server *);
struct mk_http_header *(*header_get) (int, struct mk_http_request *,
const char *, unsigned int);
int (*header_add) (struct mk_http_request *, char *row, int len);
Expand Down Expand Up @@ -199,7 +202,7 @@ struct plugin_api

/* Scheduler */
struct mk_event_loop *(*sched_loop)();
int (*sched_remove_client) (int);
int (*sched_remove_client) (int, struct mk_server *);
struct mk_sched_conn *(*sched_get_connection)(struct mk_sched_worker *,
int);
void (*sched_event_free) (struct mk_event *);
Expand Down Expand Up @@ -229,7 +232,7 @@ struct plugin_api

/* kernel interfaces */
int (*kernel_version) ();
int (*kernel_features_print) (char *, size_t);
int (*kernel_features_print) (char *, size_t, struct mk_server *);

/* Handler */
struct mk_handler_param *(*handler_param_get)(int, struct mk_list *);
Expand Down Expand Up @@ -265,7 +268,7 @@ struct mk_plugin {
int (*exit_plugin) ();

/* Init Levels */
int (*master_init) (struct mk_server_config *);
int (*master_init) (struct mk_server *);
void (*worker_init) ();

/* Callback references for plugin type */
Expand Down Expand Up @@ -305,7 +308,7 @@ struct mk_plugin_stage {

void mk_plugin_api_init();
void mk_plugin_load_all();
void mk_plugin_exit_all();
void mk_plugin_exit_all(struct mk_server *server);
void mk_plugin_exit_worker();

void mk_plugin_event_init_list();
Expand All @@ -315,10 +318,10 @@ int mk_plugin_stage_run(unsigned int stage,
struct mk_sched_conn *conx,
struct mk_http_session *cs, struct mk_http_request *sr);

void mk_plugin_core_process();
void mk_plugin_core_process(struct mk_server *server);
void mk_plugin_core_thread();

void mk_plugin_preworker_calls();
void mk_plugin_preworker_calls(struct mk_server *server);

/* Plugins events interface */
int mk_plugin_event_add(int socket, int mode,
Expand All @@ -330,9 +333,11 @@ struct plugin_event *mk_plugin_event_get(int socket);
int mk_plugin_event_socket_change_mode(int socket, int mode, unsigned int behavior);

struct mk_plugin *mk_plugin_load(int type, const char *shortname,
void *data);
void *data, struct mk_server *server);

void *mk_plugin_load_symbol(void *handler, const char *symbol);
int mk_plugin_http_request_end(struct mk_http_session *cs, int close);
int mk_plugin_http_request_end(struct mk_http_session *cs, int close,
struct mk_server *server);

/* Register functions */
struct plugin *mk_plugin_register(struct plugin *p);
Expand All @@ -344,18 +349,19 @@ void mk_plugin_free(struct mk_plugin *p);
int mk_plugin_time_now_unix();
mk_ptr_t *mk_plugin_time_now_human();

int mk_plugin_sched_remove_client(int socket);
int mk_plugin_sched_remove_client(int socket, struct mk_server *server);


int mk_plugin_header_add(struct mk_http_request *sr, char *row, int len);
int mk_plugin_header_get(struct mk_http_request *sr,
mk_ptr_t query,
mk_ptr_t *result);

struct mk_sched_worker *mk_plugin_sched_get_thread_conf();
struct mk_plugin *mk_plugin_cap(char cap, struct mk_server_config *config);
struct mk_plugin *mk_plugin_lookup(char *shortname);
struct mk_plugin *mk_plugin_cap(char cap, struct mk_server *server);
struct mk_plugin *mk_plugin_lookup(char *shortname, struct mk_server *server);

void mk_plugin_load_static();
void mk_plugin_load_static(struct mk_server *server);
struct mk_handler_param *mk_handler_param_get(int id, struct mk_list *params);

#endif
18 changes: 10 additions & 8 deletions include/monkey/mk_plugin_stage.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,13 @@
#ifndef MK_PLUGIN_STAGE_H
#define MK_PLUGIN_STAGE_H

static inline int mk_plugin_stage_run_10(int socket)
static inline int mk_plugin_stage_run_10(int socket, struct mk_server *server)
{
int ret;
struct mk_list *head;
struct mk_plugin_stage *stage;

mk_list_foreach(head, &mk_config->stage10_handler) {
mk_list_foreach(head, &server->stage10_handler) {
stage = mk_list_entry(head, struct mk_plugin_stage, _head);
ret = stage->stage10(socket);
switch (ret) {
Expand All @@ -40,13 +40,14 @@ static inline int mk_plugin_stage_run_10(int socket)
}

static inline int mk_plugin_stage_run_20(struct mk_http_session *cs,
struct mk_http_request *sr)
struct mk_http_request *sr,
struct mk_server *server)
{
int ret;
struct mk_list *head;
struct mk_plugin_stage *stage;

mk_list_foreach(head, &mk_config->stage20_handler) {
mk_list_foreach(head, &server->stage20_handler) {
stage = mk_list_entry(head, struct mk_plugin_stage, _head);
ret = stage->stage20(cs, sr);
switch (ret) {
Expand All @@ -60,27 +61,28 @@ static inline int mk_plugin_stage_run_20(struct mk_http_session *cs,
}

static inline int mk_plugin_stage_run_40(struct mk_http_session *cs,
struct mk_http_request *sr)
struct mk_http_request *sr,
struct mk_server *server)
{
struct mk_list *head;
struct mk_plugin_stage *stage;

mk_list_foreach(head, &mk_config->stage40_handler) {
mk_list_foreach(head, &server->stage40_handler) {
stage = mk_list_entry(head, struct mk_plugin_stage, _head);
stage->stage40(cs, sr);
}

return -1;
}

static inline int mk_plugin_stage_run_50(int socket)
static inline int mk_plugin_stage_run_50(int socket, struct mk_server *server)
{
int ret;

struct mk_list *head;
struct mk_plugin_stage *stage;

mk_list_foreach(head, &mk_config->stage50_handler) {
mk_list_foreach(head, &server->stage50_handler) {
stage = mk_list_entry(head, struct mk_plugin_stage, _head);
ret = stage->stage50(socket);
switch (ret) {
Expand Down
Loading

0 comments on commit c1c0445

Please sign in to comment.