diff --git a/CMakeLists.txt b/CMakeLists.txt index 4bfb735c55202023e8e0d78d7b1f36ab224c770a..be5ac24b64520fcd0f10c0694af6ea1f26ba22e4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -23,3 +23,6 @@ add_library(${PROJECT_NAME} STATIC ${CORE_SERVER_SOURCES} ${CORE_SERVER_HEADERS} target_link_libraries(${PROJECT_NAME} pthread ev memcached dap_crypto) target_include_directories(${PROJECT_NAME} INTERFACE .) +set(${PROJECT_NAME}_DEFINITIONS CACHE INTERNAL "${PROJECT_NAME}: Definitions" FORCE) + +set(${PROJECT_NAME}_INCLUDE_DIRS ${PROJECT_SOURCE_DIR} CACHE INTERNAL "${PROJECT_NAME}: Include Directories" FORCE) diff --git a/dap_server_client.c b/dap_client_remote.c similarity index 65% rename from dap_server_client.c rename to dap_client_remote.c index 6454dd2ae946e01d826e37054b2dce4c961f3fd5..fb79875d5ef55d73ef63b5d3f1d85733d38f72e1 100644 --- a/dap_server_client.c +++ b/dap_client_remote.c @@ -1,23 +1,26 @@ /* - Copyright (c) 2017-2018 (c) Project "DeM Labs Inc" https://github.com/demlabsinc - All rights reserved. + * Authors: + * Dmitriy A. Gearasimov <gerasimov.dmitriy@demlabs.net> + * DeM Labs Inc. https://demlabs.net + * Kelvin Project https://github.com/kelvinblockchain + * Copyright (c) 2017-2018 + * All rights reserved. This file is part of DAP (Deus Applications Prototypes) the open source project DAP (Deus Applicaions Prototypes) is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by + it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. DAP is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. + GNU General Public License for more details. - You should have received a copy of the GNU Lesser General Public License + You should have received a copy of the GNU General Public License along with any DAP based project. If not, see <http://www.gnu.org/licenses/>. */ - #include <stdlib.h> #include <stdio.h> #include <unistd.h> @@ -26,7 +29,7 @@ #include <arpa/inet.h> #include "dap_common.h" -#include "dap_server_client.h" +#include "dap_client_remote.h" #include "dap_server.h" @@ -36,7 +39,7 @@ * @brief dap_client_init Init clients module * @return Zero if ok others if no */ -int dap_server_client_init() +int dap_client_remote_init() { log_it(L_NOTICE,"Initialized socket client module"); return 0; @@ -45,7 +48,7 @@ int dap_server_client_init() /** * @brief dap_client_deinit Deinit clients module */ -void dap_server_client_deinit() +void dap_client_remote_deinit() { } @@ -54,7 +57,7 @@ void dap_server_client_deinit() * @brief _save_ip_and_port * @param cl */ -void _save_ip_and_port(dap_server_client_t * cl) +void _save_ip_and_port(dap_client_remote_t * cl) { struct sockaddr_in ip_adr_get; socklen_t ip_adr_len; @@ -71,11 +74,11 @@ void _save_ip_and_port(dap_server_client_t * cl) * @param s Client's socket * @return Pointer to the new list's node */ -dap_server_client_t * dap_client_create(dap_server_t * sh, int s, ev_io* w_client) +dap_client_remote_t * dap_client_remote_create(dap_server_t * sh, int s, ev_io* w_client) { pthread_mutex_lock(&sh->mutex_on_hash); - dap_server_client_t * dsc = DAP_NEW_Z(dap_server_client_t); + dap_client_remote_t * dsc = DAP_NEW_Z(dap_client_remote_t); dap_random_string_fill(dsc->id, CLIENT_ID_SIZE); dsc->socket = s; dsc->server = sh; @@ -97,7 +100,7 @@ dap_server_client_t * dap_client_create(dap_server_t * sh, int s, ev_io* w_clien * @brief safe_client_remove Removes the client from the list * @param sc Client instance */ -void dap_client_remove(dap_server_client_t *sc, struct dap_server * sh) +void dap_client_remote_remove(dap_client_remote_t *sc, struct dap_server * sh) { pthread_mutex_lock(&sh->mutex_on_hash); @@ -116,14 +119,14 @@ void dap_client_remove(dap_server_client_t *sc, struct dap_server * sh) } /** - * @brief dap_client_find + * @brief dap_server_client_find * @param sock * @param sh * @return */ -dap_server_client_t * dap_client_find(int sock, struct dap_server * sh) +dap_client_remote_t * dap_client_remote_find(int sock, struct dap_server * sh) { - dap_server_client_t * ret = NULL; + dap_client_remote_t * ret = NULL; pthread_mutex_lock(&sh->mutex_on_hash); HASH_FIND_INT(sh->clients, &sock, ret); pthread_mutex_unlock(&sh->mutex_on_hash); @@ -135,7 +138,7 @@ dap_server_client_t * dap_client_find(int sock, struct dap_server * sh) * @param sc * @param isReady */ -void dap_client_ready_to_read(dap_server_client_t * sc,bool is_ready) +void dap_client_remote_ready_to_read(dap_client_remote_t * sc,bool is_ready) { if(is_ready != sc->_ready_to_read) { int events = 0; @@ -156,7 +159,7 @@ void dap_client_ready_to_read(dap_server_client_t * sc,bool is_ready) * @param sc * @param isReady */ -void dap_client_ready_to_write(dap_server_client_t * sc,bool is_ready) +void dap_client_remote_ready_to_write(dap_client_remote_t * sc,bool is_ready) { if(is_ready != sc->_ready_to_write) { int events = 0; @@ -179,7 +182,7 @@ void dap_client_ready_to_write(dap_server_client_t * sc,bool is_ready) * @param data_size Size of data to write * @return Number of bytes that were placed into the buffer */ -size_t dap_client_write(dap_server_client_t *sc, const void * data, size_t data_size) +size_t dap_client_remote_write(dap_client_remote_t *sc, const void * data, size_t data_size) { data_size = ((sc->buf_out_size+data_size)<(sizeof(sc->buf_out)))?data_size:(sizeof(sc->buf_out)-sc->buf_out_size ); memcpy(sc->buf_out+sc->buf_out_size,data,data_size); @@ -193,7 +196,7 @@ size_t dap_client_write(dap_server_client_t *sc, const void * data, size_t data_ * @param a_format Format * @return Number of bytes that were placed into the buffer */ -size_t dap_client_write_f(dap_server_client_t *a_client, const char * a_format,...) +size_t dap_client_remote_write_f(dap_client_remote_t *a_client, const char * a_format,...) { size_t max_data_size = sizeof(a_client->buf_out)-a_client->buf_out_size; va_list ap; @@ -211,45 +214,45 @@ size_t dap_client_write_f(dap_server_client_t *a_client, const char * a_format,. /** * @brief dap_client_read Read data from input buffer - * @param sc Client instasnce - * @param data Pointer to memory where to store the data - * @param data_size Size of data to read + * @param a_client Client instasnce + * @param a_data Pointer to memory where to store the data + * @param a_data_size Size of data to read * @return Actual bytes number that were read */ -size_t dap_client_read(dap_server_client_t *sc, void * data, size_t data_size) +size_t dap_client_remote_read(dap_client_remote_t *a_client, void * a_data, size_t a_data_size) { - if (data_size < sc->buf_in_size) { - memcpy(data, sc->buf_in, data_size); - memmove(data, sc->buf_in + data_size, sc->buf_in_size - data_size); + if (a_data_size < a_client->buf_in_size) { + memcpy(a_data, a_client->buf_in, a_data_size); + memmove(a_data, a_client->buf_in + a_data_size, a_client->buf_in_size - a_data_size); } else { - if (data_size > sc->buf_in_size) { - data_size = sc->buf_in_size; + if (a_data_size > a_client->buf_in_size) { + a_data_size = a_client->buf_in_size; } - memcpy(data, sc->buf_in, data_size); + memcpy(a_data, a_client->buf_in, a_data_size); } - sc->buf_in_size -= data_size; - return data_size; + a_client->buf_in_size -= a_data_size; + return a_data_size; } /** - * @brief shrink_client_buf_in Shrink input buffer (shift it left) - * @param cl Client instance - * @param shrink_size Size on wich we shrink the buffer with shifting it left + * @brief dap_client_remote_shrink_client_buf_in Shrink input buffer (shift it left) + * @param a_client Client instance + * @param a_shrink_size Size on wich we shrink the buffer with shifting it left */ -void dap_client_shrink_buf_in(dap_server_client_t * cl, size_t shrink_size) +void dap_client_remote_shrink_buf_in(dap_client_remote_t * a_client, size_t a_shrink_size) { - if((shrink_size==0)||(cl->buf_in_size==0) ){ + if((a_shrink_size==0)||(a_client->buf_in_size==0) ){ return; - }else if(cl->buf_in_size>shrink_size){ - size_t buf_size=cl->buf_in_size-shrink_size; + }else if(a_client->buf_in_size>a_shrink_size){ + size_t buf_size=a_client->buf_in_size-a_shrink_size; void * buf = malloc(buf_size); - memcpy(buf,cl->buf_in+ shrink_size,buf_size ); - memcpy(cl->buf_in,buf,buf_size); - cl->buf_in_size=buf_size; + memcpy(buf,a_client->buf_in+ a_shrink_size,buf_size ); + memcpy(a_client->buf_in,buf,buf_size); + a_client->buf_in_size=buf_size; free(buf); }else { - cl->buf_in_size=0; + a_client->buf_in_size=0; } } diff --git a/dap_server_client.h b/dap_client_remote.h similarity index 51% rename from dap_server_client.h rename to dap_client_remote.h index eef117d84b56d9a871f4b104f4e1621034e13b48..84c69e74198f24b1f2b787892b5164f39a6288b6 100644 --- a/dap_server_client.h +++ b/dap_client_remote.h @@ -1,25 +1,27 @@ /* - Copyright (c) 2017-2018 (c) Project "DeM Labs Inc" https://github.com/demlabsinc - All rights reserved. + * Authors: + * Dmitriy A. Gearasimov <gerasimov.dmitriy@demlabs.net> + * DeM Labs Inc. https://demlabs.net + * Kelvin Project https://github.com/kelvinblockchain + * Copyright (c) 2017-2018 + * All rights reserved. This file is part of DAP (Deus Applications Prototypes) the open source project DAP (Deus Applicaions Prototypes) is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by + it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. DAP is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. + GNU General Public License for more details. - You should have received a copy of the GNU Lesser General Public License + You should have received a copy of the GNU General Public License along with any DAP based project. If not, see <http://www.gnu.org/licenses/>. */ #pragma once -#ifndef _DAP_SERVER_CLIENT_H -#define _DAP_SERVER_CLIENT_H #include <stdint.h> #include <stddef.h> @@ -30,9 +32,9 @@ typedef char str_ip[16]; typedef struct dap_server dap_server_t; -struct dap_server_client; +struct dap_client_remote; -typedef void (*dap_client_remote_callback_t) (struct dap_server_client *,void * arg); // Callback for specific client operations +typedef void (*dap_server_client_callback_t) (struct dap_client_remote *,void * arg); // Callback for specific client operations #define DAP_CLIENT_REMOTE_BUF 10000 #define CLIENT_ID_SIZE 12 @@ -45,7 +47,7 @@ typedef struct traffic_stats { } traffic_stats_t; -typedef struct dap_server_client{ +typedef struct dap_client_remote{ int socket; dap_server_client_id id; @@ -78,27 +80,26 @@ typedef struct dap_server_client{ void * _internal; void * _inheritor; // Internal data to specific client type, usualy states for state machine -} dap_server_client_t; // Node of bidirectional list of clients +} dap_client_remote_t; // Node of bidirectional list of clients -int dap_server_client_init(void); // Init clients module -void dap_server_client_deinit(void); // Deinit clients module +int dap_client_remote_init(void); // Init clients module +void dap_client_remote_deinit(void); // Deinit clients module -dap_server_client_t * dap_client_create(struct dap_server * sh, int s, ev_io* w_client); // Create new client and add it to the list -dap_server_client_t * dap_client_find(int sock, struct dap_server * sh); // Find client by socket +dap_client_remote_t * dap_client_remote_create(struct dap_server * sh, int s, ev_io* w_client); // Create new client and add it to the list +dap_client_remote_t * dap_client_remote_find(int sock, struct dap_server * sh); // Find client by socket -bool dap_client_is_ready_to_read(dap_server_client_t * sc); -bool dap_client_is_ready_to_write(dap_server_client_t * sc); -void dap_client_ready_to_read(dap_server_client_t * sc,bool is_ready); -void dap_client_ready_to_write(dap_server_client_t * sc,bool is_ready); +bool dap_client_remote_is_ready_to_read(dap_client_remote_t * sc); +bool dap_client_remote_is_ready_to_write(dap_client_remote_t * sc); +void dap_client_remote_ready_to_read(dap_client_remote_t * sc,bool is_ready); +void dap_client_remote_ready_to_write(dap_client_remote_t * sc,bool is_ready); -size_t dap_client_write(dap_server_client_t *sc, const void * data, size_t data_size); -size_t dap_client_write_f(dap_server_client_t *a_client, const char * a_format,...); -size_t dap_client_read(dap_server_client_t *sc, void * data, size_t data_size); +size_t dap_client_remote_write(dap_client_remote_t *sc, const void * data, size_t data_size); +size_t dap_client_remote_write_f(dap_client_remote_t *a_client, const char * a_format,...); +size_t dap_client_remote_read(dap_client_remote_t *sc, void * data, size_t data_size); -void dap_client_remove(dap_server_client_t *sc, struct dap_server * sh); // Removes the client from the list +void dap_client_remote_remove(dap_client_remote_t *sc, struct dap_server * sh); // Removes the client from the list -void dap_client_shrink_buf_in(dap_server_client_t * cl, size_t shrink_size); +void dap_client_remote_shrink_buf_in(dap_client_remote_t * cl, size_t shrink_size); -#endif diff --git a/dap_server.c b/dap_server.c index 90a4bf969b634ea0676948bbd26044b2a95c15ef..5e1ee5d9f9e2f7b2a001a3a37e17347fc8410a3f 100644 --- a/dap_server.c +++ b/dap_server.c @@ -98,7 +98,7 @@ int dap_server_init(size_t count_threads) pthread_mutex_init(&mutex_on_cnt_connections, NULL); log_it(L_NOTICE,"Initialized socket server module"); - dap_server_client_init(); + dap_client_remote_init(); return 0; } @@ -107,7 +107,7 @@ int dap_server_init(size_t count_threads) */ void dap_server_deinit() { - dap_server_client_deinit(); + dap_client_remote_deinit(); for(size_t i = 0; i < _count_threads; i++) free (async_watchers[i].data); @@ -132,12 +132,12 @@ dap_server_t * dap_server_new() */ void dap_server_delete(dap_server_t * sh) { - dap_server_client_t * dap_cur, * tmp; + dap_client_remote_t * dap_cur, * tmp; if(sh->address) free(sh->address); HASH_ITER(hh,sh->clients,dap_cur,tmp) - dap_client_remove(dap_cur, sh); + dap_client_remote_remove(dap_cur, sh); if(sh->server_delete_callback) sh->server_delete_callback(sh,NULL); @@ -167,7 +167,7 @@ static void set_client_thread_cb (EV_P_ ev_async *w, int revents) memcpy(w_client->data, w->data, sizeof(ev_async_data_t)); - dap_client_create(_current_run_server, fd, w_client); + dap_client_remote_create(_current_run_server, fd, w_client); ev_io_start(listener_clients_loops[DAP_EV_DATA(w)->thread_number], w_client); @@ -176,7 +176,7 @@ static void set_client_thread_cb (EV_P_ ev_async *w, int revents) static void read_write_cb (struct ev_loop* loop, struct ev_io* watcher, int revents) { - dap_server_client_t* dap_cur = dap_client_find(watcher->fd, _current_run_server); + dap_client_remote_t* dap_cur = dap_client_remote_find(watcher->fd, _current_run_server); if ( revents & EV_READ ) { @@ -240,7 +240,7 @@ static void read_write_cb (struct ev_loop* loop, struct ev_io* watcher, int reve atomic_fetch_sub(&thread_inform[DAP_EV_DATA(watcher)->thread_number].count_open_connections, 1); ev_io_stop(listener_clients_loops[DAP_EV_DATA(watcher)->thread_number], watcher); - dap_client_remove(dap_cur, _current_run_server); + dap_client_remote_remove(dap_cur, _current_run_server); free(watcher->data); free(watcher); return; } diff --git a/dap_server.h b/dap_server.h index 84f0c4beea0791b73c153d7421bc056a7e933ea2..859272e2bdd9172666ee2974f94032339d65d145 100644 --- a/dap_server.h +++ b/dap_server.h @@ -28,7 +28,7 @@ #include "uthash.h" #include "dap_cpu_monitor.h" -#include "dap_server_client.h" +#include "dap_client_remote.h" typedef enum dap_server_type {DAP_SERVER_TCP} dap_server_type_t; @@ -46,7 +46,7 @@ typedef struct dap_server{ uint16_t port; // Listen port char * address; // Listen address - dap_server_client_t * clients; // Hashmap of clients + dap_client_remote_t * clients; // Hashmap of clients int socket_listener; // Socket for listener int epoll_fd; // Epoll fd @@ -62,19 +62,19 @@ typedef struct dap_server{ dap_server_callback_t server_delete_callback; - dap_client_remote_callback_t client_new_callback; // Create new client callback - dap_client_remote_callback_t client_delete_callback; // Delete client callback - dap_client_remote_callback_t client_read_callback; // Read function - dap_client_remote_callback_t client_write_callback; // Write function - dap_client_remote_callback_t client_error_callback; // Error processing function + dap_server_client_callback_t client_new_callback; // Create new client callback + dap_server_client_callback_t client_delete_callback; // Delete client callback + dap_server_client_callback_t client_read_callback; // Read function + dap_server_client_callback_t client_write_callback; // Write function + dap_server_client_callback_t client_error_callback; // Error processing function } dap_server_t; -extern int dap_server_init(size_t count_threads); // Init server module -extern void dap_server_deinit(void); // Deinit server module +int dap_server_init(size_t count_threads); // Init server module +void dap_server_deinit(void); // Deinit server module -extern dap_server_t* dap_server_listen(const char * addr, uint16_t port, dap_server_type_t type); +dap_server_t* dap_server_listen(const char * addr, uint16_t port, dap_server_type_t type); -extern int dap_server_loop(dap_server_t * sh); +int dap_server_loop(dap_server_t * sh); #endif diff --git a/dap_traffic_track.c b/dap_traffic_track.c index 220460b931065d38f241abfa4524cad5041446f6..db3b04b359b769a02718e0b6fbb89bb1568e999c 100644 --- a/dap_traffic_track.c +++ b/dap_traffic_track.c @@ -1,3 +1,27 @@ +/* + * Authors: + * Anatoliy Kurotich <anatoliy.kurotich@demlabs.net> + * DeM Labs Inc. https://demlabs.net + * Kelvin Project https://github.com/kelvinblockchain + * Copyright (c) 2017-2018 + * All rights reserved. + + This file is part of DAP (Deus Applications Prototypes) the open source project + + DAP (Deus Applicaions Prototypes) is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + DAP is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with any DAP based project. If not, see <http://www.gnu.org/licenses/>. +*/ + #include "dap_traffic_track.h" #include "dap_common.h" #include "dap_cpu_monitor.h" @@ -78,7 +102,7 @@ static void _timeout_cb() if(count_users) { size_t idx = 0; - dap_server_client_t *dap_cur, *tmp; + dap_client_remote_t *dap_cur, *tmp; HASH_ITER(hh, _dap_server->clients, dap_cur,tmp) { dap_cur->upload_stat.speed_mbs = diff --git a/dap_traffic_track.h b/dap_traffic_track.h index 10516ba7731d7dfde60b8b4da36295dd370cd10a..f2dd83caad14deb0bee21e33b5b38b099f16f9d6 100644 --- a/dap_traffic_track.h +++ b/dap_traffic_track.h @@ -1,6 +1,29 @@ -#ifndef _TRAFFIC_TRACK_H_ -#define _TRAFFIC_TRACK_H_ -#include "dap_server_client.h" +/* + * Authors: + * Anatoliy Jurotich <anatoliy.kurotich@demlabs.net> + * DeM Labs Inc. https://demlabs.net + * Kelvin Project https://github.com/kelvinblockchain + * Copyright (c) 2017-2018 + * All rights reserved. + + This file is part of DAP (Deus Applications Prototypes) the open source project + + DAP (Deus Applicaions Prototypes) is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + DAP is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with any DAP based project. If not, see <http://www.gnu.org/licenses/>. +*/ + +#pragma once +#include "dap_client_remote.h" #include "dap_server.h" typedef void (*dap_traffic_callback_t) (dap_server_t*); @@ -24,4 +47,4 @@ void dap_traffic_track_deinit(void); void dap_traffic_callback_set(dap_traffic_callback_t); void dap_traffic_callback_stop(void); -#endif + diff --git a/libdap b/libdap index 0255887bbca085979fcd26e70a8b5131a428c36d..248494b4cc63817f2e12e10b41e6aaf003f970b6 160000 --- a/libdap +++ b/libdap @@ -1 +1 @@ -Subproject commit 0255887bbca085979fcd26e70a8b5131a428c36d +Subproject commit 248494b4cc63817f2e12e10b41e6aaf003f970b6 diff --git a/test/libdap-test b/test/libdap-test index e542fdbcbced6ce9b1c4cae4a92fa8580403941e..3f1e90885504423980b089051c57a36bbab6d093 160000 --- a/test/libdap-test +++ b/test/libdap-test @@ -1 +1 @@ -Subproject commit e542fdbcbced6ce9b1c4cae4a92fa8580403941e +Subproject commit 3f1e90885504423980b089051c57a36bbab6d093