H (9) H
This commit is contained in:
parent
ed72a09f08
commit
b627b59b03
7 changed files with 94 additions and 3 deletions
|
@ -11,7 +11,8 @@ find_package(OpenSSL)
|
||||||
|
|
||||||
add_executable(server ${server_src})
|
add_executable(server ${server_src})
|
||||||
target_include_directories(server
|
target_include_directories(server
|
||||||
PRIVATE ${OPENSSL_INCLUDE_DIR})
|
PRIVATE ${OPENSSL_INCLUDE_DIR}
|
||||||
|
PRIVATE ${PROJECT_SOURCE_DIR}/src/server)
|
||||||
target_link_libraries(server ${OPENSSL_LIBRARIES})
|
target_link_libraries(server ${OPENSSL_LIBRARIES})
|
||||||
install(TARGETS server RUNTIME DESTINATION bin/server)
|
install(TARGETS server RUNTIME DESTINATION bin/server)
|
||||||
|
|
||||||
|
|
|
@ -27,10 +27,14 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
#include "util/ipaddr.h"
|
||||||
|
|
||||||
#define GLV_TCP_FLAG_TYPE 1
|
#define GLV_TCP_FLAG_TYPE 1
|
||||||
#define GLV_TCP_FLAG_NBIO 2
|
#define GLV_TCP_FLAG_NBIO 2
|
||||||
|
|
||||||
|
#define GLV_TCP_RECV_APPEND 1
|
||||||
|
#define GLV_TCP_RECV_BLOCK 2
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
glv_sock_t socket;
|
glv_sock_t socket;
|
||||||
glv_addr_t addr;
|
glv_addr_t addr;
|
||||||
|
@ -40,8 +44,15 @@ typedef struct {
|
||||||
glv_tcp_t* glv_tcp_create_server();
|
glv_tcp_t* glv_tcp_create_server();
|
||||||
glv_tcp_t* glv_tcp_create_client();
|
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
|
#endif
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
#ifndef _WIN32
|
#ifndef _WIN32
|
||||||
#include "tcp.h"
|
#include "tcp.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
2
src/server/util/ipaddr.c
Normal file
2
src/server/util/ipaddr.c
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
#include "ipaddr.h"
|
||||||
|
|
20
src/server/util/ipaddr.h
Normal file
20
src/server/util/ipaddr.h
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
#ifndef GLV_UTIL_IPADDR_H
|
||||||
|
#define GLV_UTIL_IPADDR_H
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
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
|
|
@ -18,7 +18,7 @@ glv_thread_t* glv_thread_create(glv_func_t func, void* args) {
|
||||||
proxy->func = func;
|
proxy->func = func;
|
||||||
proxy->args = args;
|
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)
|
if(pthread_create(thread, NULL, _wrapper_func, proxy) == 0)
|
||||||
return thread;
|
return thread;
|
||||||
else
|
else
|
||||||
|
@ -38,7 +38,24 @@ void glv_thread_destroy(glv_thread_t* thread) {
|
||||||
/** BEGIN MUTX IMPL **/
|
/** BEGIN MUTX IMPL **/
|
||||||
|
|
||||||
glv_mutex_t* glv_mutex_create() {
|
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
|
#endif
|
||||||
|
|
|
@ -1,6 +1,44 @@
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
#include "thread.h"
|
#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
|
#endif
|
Reference in a new issue