WIP event core + GLib

This commit is contained in:
Quentin Dufour 2019-02-11 18:56:52 +01:00
parent 9a6fadd558
commit 30c1c1b9c8
3 changed files with 83 additions and 1 deletions

View file

@ -1,7 +1,6 @@
cmake_minimum_required(VERSION 2.6)
project(donar)
list(APPEND CSOURCES
src/net_tools.h
src/net_tools.c
@ -15,10 +14,18 @@ list(APPEND CSOURCES
src/donar_client.c
src/donar_server.h
src/donar_server.c
src/evt_core.h
src/evt_core.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
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib)

46
src/evt_core.c Normal file
View 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
View 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);