From b627b59b032c045ca30fcccdfd129fafa37f7dd8 Mon Sep 17 00:00:00 2001 From: malloc Date: Tue, 15 Jan 2019 16:24:52 -0600 Subject: [PATCH] H (9) H --- CMakeLists.txt | 3 ++- src/server/sock/tcp.h | 13 +++++++++++- src/server/sock/tcp_bsd.c | 2 ++ src/server/util/ipaddr.c | 2 ++ src/server/util/ipaddr.h | 20 ++++++++++++++++++ src/server/util/thread_posix.c | 19 ++++++++++++++++- src/server/util/thread_win.c | 38 ++++++++++++++++++++++++++++++++++ 7 files changed, 94 insertions(+), 3 deletions(-) create mode 100644 src/server/util/ipaddr.c create mode 100644 src/server/util/ipaddr.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 77316e0..339fe9f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,7 +11,8 @@ find_package(OpenSSL) add_executable(server ${server_src}) target_include_directories(server - PRIVATE ${OPENSSL_INCLUDE_DIR}) + PRIVATE ${OPENSSL_INCLUDE_DIR} + PRIVATE ${PROJECT_SOURCE_DIR}/src/server) target_link_libraries(server ${OPENSSL_LIBRARIES}) install(TARGETS server RUNTIME DESTINATION bin/server) diff --git a/src/server/sock/tcp.h b/src/server/sock/tcp.h index b584627..268da0f 100644 --- a/src/server/sock/tcp.h +++ b/src/server/sock/tcp.h @@ -27,10 +27,14 @@ #endif #include +#include "util/ipaddr.h" #define GLV_TCP_FLAG_TYPE 1 #define GLV_TCP_FLAG_NBIO 2 +#define GLV_TCP_RECV_APPEND 1 +#define GLV_TCP_RECV_BLOCK 2 + typedef struct { glv_sock_t socket; glv_addr_t addr; @@ -40,8 +44,15 @@ typedef struct { glv_tcp_t* glv_tcp_create_server(); glv_tcp_t* glv_tcp_create_client(); +int glv_tcp_send(glv_tcp_t* sock, char* data, unsigned int length); +int glv_tcp_recv(glv_tcp_t* sock, char* data, unsigned int length, int flags); +int glv_tcp_data_ready(glv_tcp_t* sock); +int glv_tcp_is_open(glv_tcp_t* sock); +int glv_tcp_is_secure(glv_tcp_t* sock); -void glv_tcp_destroy(glv_tcp_t* socket); +ipaddr_t glv_tcp_get_ip(glv_tcp_t* sock); + +void glv_tcp_destroy(glv_tcp_t* sock); #endif diff --git a/src/server/sock/tcp_bsd.c b/src/server/sock/tcp_bsd.c index 1d75fcd..5dff4ab 100644 --- a/src/server/sock/tcp_bsd.c +++ b/src/server/sock/tcp_bsd.c @@ -1,4 +1,6 @@ #ifndef _WIN32 #include "tcp.h" + + #endif \ No newline at end of file diff --git a/src/server/util/ipaddr.c b/src/server/util/ipaddr.c new file mode 100644 index 0000000..bedff16 --- /dev/null +++ b/src/server/util/ipaddr.c @@ -0,0 +1,2 @@ +#include "ipaddr.h" + diff --git a/src/server/util/ipaddr.h b/src/server/util/ipaddr.h new file mode 100644 index 0000000..2967d56 --- /dev/null +++ b/src/server/util/ipaddr.h @@ -0,0 +1,20 @@ +#ifndef GLV_UTIL_IPADDR_H +#define GLV_UTIL_IPADDR_H + +#include + +typedef struct { + uint8_t addr[16]; + uint8_t cidr; +} ipaddr_t; + +ipaddr_t glv_ip_aton(char* addr, int length); +ipaddr_t glv_ip_raw(uint8_t* addr, uint8_t cidr); + +int glv_ip_compare(ipaddr_t* lhs, ipaddr_t* rhs); +int glv_ip_identical(ipaddr_t* lhs, ipaddr_t* rhs); +int glv_ip_isv4(ipaddr_t* addr); + +int glv_ip_ntoa(ipaddr_t* addr, char* out); + +#endif \ No newline at end of file diff --git a/src/server/util/thread_posix.c b/src/server/util/thread_posix.c index d8cdbd0..4afe156 100644 --- a/src/server/util/thread_posix.c +++ b/src/server/util/thread_posix.c @@ -18,7 +18,7 @@ glv_thread_t* glv_thread_create(glv_func_t func, void* args) { proxy->func = func; proxy->args = args; - glv_thread_t* thread = malloc(sizeof(thread)); + glv_thread_t* thread = malloc(sizeof(glv_thread_t)); if(pthread_create(thread, NULL, _wrapper_func, proxy) == 0) return thread; else @@ -38,7 +38,24 @@ void glv_thread_destroy(glv_thread_t* thread) { /** BEGIN MUTX IMPL **/ glv_mutex_t* glv_mutex_create() { + glv_mutex_t* mtx = malloc(sizeof(glv_mutex_t)); + if(pthread_mutex_init(mtx, NULL) == 0) + return mtx; + else + return NULL; +} +void glv_mutex_lock(glv_mutex_t* mutex) { + pthread_mutex_lock(mutex); +} + +void glv_mutex_unlock(glv_mutex_t* mutex) { + pthread_mutex_unlock(mutex); +} + +void glv_mutex_destroy(glv_mutex_t* mutex) { + pthread_mutex_destroy(mutex); + free(mutex); } #endif diff --git a/src/server/util/thread_win.c b/src/server/util/thread_win.c index 5e3029a..69619ff 100644 --- a/src/server/util/thread_win.c +++ b/src/server/util/thread_win.c @@ -1,6 +1,44 @@ #ifdef _WIN32 #include "thread.h" +glv_thread_t* glv_thread_create(glv_func_t func, void* args) { + glv_thread_t* thread = malloc(sizeof(glv_thread_t)); + *thread = (glv_thread_t)_beginthread(func, 0, args); + return thread; +} + +void glv_thread_join(glv_thread_t* thread) { + WaitForSingleObject(*thread, INFINITE); +} + +void glv_thread_destroy(glv_thread_t* thread) { + CloseHandle(*thread); + free(thread); +} + +/** END THREAD IMPL **/ +/*********************/ +/** BEGIN MUTX IMPL **/ + +glv_mutex_t* glv_mutex_create() { + glv_mutex_t* mutex = malloc(sizeof(glv_mutex_t)); + *mutex = CreateMutexA(NULL, NULL, NULL); + + return mutex; +} + +void glv_mutex_lock(glv_mutex_t* mutex) { + WaitForSingleObject(*mutex, INFINITE); +} + +void glv_mutex_unlock(glv_mutex_t* mutex) { + ReleaseMutex(*mutex); +} + +void glv_mutex_destroy(glv_mutex_t* mutex) { + CloseHandle(*mutex); + free(mutex); +} #endif \ No newline at end of file