WIP event core + GLib
This commit is contained in:
parent
9a6fadd558
commit
30c1c1b9c8
3 changed files with 83 additions and 1 deletions
|
@ -1,7 +1,6 @@
|
||||||
cmake_minimum_required(VERSION 2.6)
|
cmake_minimum_required(VERSION 2.6)
|
||||||
project(donar)
|
project(donar)
|
||||||
|
|
||||||
|
|
||||||
list(APPEND CSOURCES
|
list(APPEND CSOURCES
|
||||||
src/net_tools.h
|
src/net_tools.h
|
||||||
src/net_tools.c
|
src/net_tools.c
|
||||||
|
@ -15,10 +14,18 @@ list(APPEND CSOURCES
|
||||||
src/donar_client.c
|
src/donar_client.c
|
||||||
src/donar_server.h
|
src/donar_server.h
|
||||||
src/donar_server.c
|
src/donar_server.c
|
||||||
|
src/evt_core.h
|
||||||
|
src/evt_core.c
|
||||||
)
|
)
|
||||||
|
|
||||||
add_executable(donar-proxy ${CSOURCES} src/donar_proxy.c)
|
add_executable(donar-proxy ${CSOURCES} src/donar_proxy.c)
|
||||||
|
|
||||||
|
find_package(PkgConfig REQUIRED)
|
||||||
|
pkg_search_module(GLIB REQUIRED glib-2.0)
|
||||||
|
target_include_directories(donar-proxy PRIVATE ${GLIB_INCLUDE_DIRS})
|
||||||
|
target_link_libraries(donar-proxy ${GLIB_LDFLAGS})
|
||||||
|
|
||||||
|
|
||||||
install(TARGETS donar-proxy
|
install(TARGETS donar-proxy
|
||||||
RUNTIME DESTINATION bin
|
RUNTIME DESTINATION bin
|
||||||
LIBRARY DESTINATION lib)
|
LIBRARY DESTINATION lib)
|
46
src/evt_core.c
Normal file
46
src/evt_core.c
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
#include "evt_core.h"
|
||||||
|
|
||||||
|
void free_int(void* v) {
|
||||||
|
free(v);
|
||||||
|
}
|
||||||
|
|
||||||
|
void free_char(void* c) {
|
||||||
|
free(c);
|
||||||
|
}
|
||||||
|
|
||||||
|
void free_cat(void* vcat) {
|
||||||
|
struct evt_core_cat* cat = (struct evt_core_cat*) vcat;
|
||||||
|
cat->free_app_ctx(cat->app_ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
void evt_core_init(struct evt_core_ctx* ctx) {
|
||||||
|
ctx->epollfd = epoll_create1(0);
|
||||||
|
if (ctx->epollfd == -1) {
|
||||||
|
perror("Failed to create epoll file descriptor epoll_create1");
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx->catlist = g_hash_table_new_full(g_str_hash, g_str_equal,free_char,free_cat);
|
||||||
|
ctx->socklist = g_hash_table_new_full(g_int_hash, g_int_equal,free_int, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
void evt_core_add_cat(struct evt_core_cat* cat) {
|
||||||
|
struct evt_core_cat* dyn = NULL;
|
||||||
|
dyn = malloc(sizeof(struct evt_core_cat));
|
||||||
|
if (dyn == NULL) {
|
||||||
|
fprintf(stderr, "Failed to alloc memory");
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
dyn->app_ctx = cat->app_ctx;
|
||||||
|
dyn->free_app_ctx = cat->free_app_ctx;
|
||||||
|
dyn->cb = cat->cb;
|
||||||
|
dyn->name = strdup(cat->name);
|
||||||
|
dyn->flags = cat->flags;
|
||||||
|
|
||||||
|
if (dyn->name == NULL) {
|
||||||
|
perror("Unable to allocate memory for category name via strdup");
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
29
src/evt_core.h
Normal file
29
src/evt_core.h
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
#pragma once
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <sys/epoll.h>
|
||||||
|
#include <glib-2.0/glib.h>
|
||||||
|
#include <glib-2.0/gmodule.h>
|
||||||
|
#include <glib-2.0/glib-object.h>
|
||||||
|
|
||||||
|
struct evt_core_ctx;
|
||||||
|
struct evt_core_cat;
|
||||||
|
|
||||||
|
typedef void (*evt_core_free_app_ctx)(void*);
|
||||||
|
typedef void (*evt_core_cb)(struct evt_core_ctx*, struct evt_core_cat*);
|
||||||
|
|
||||||
|
struct evt_core_cat {
|
||||||
|
void* app_ctx;
|
||||||
|
evt_core_free_app_ctx free_app_ctx;
|
||||||
|
evt_core_cb cb;
|
||||||
|
char* name;
|
||||||
|
int flags;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct evt_core_ctx {
|
||||||
|
int epollfd;
|
||||||
|
GHashTable* catlist;
|
||||||
|
GHashTable* socklist;
|
||||||
|
};
|
||||||
|
|
||||||
|
void evt_core_init(struct evt_core_ctx* ctx);
|
Loading…
Reference in a new issue