diff --git a/CMakeLists.txt b/CMakeLists.txt index c8436546b150b9cafa715e87229e96e403de6bcf..8ef859b449b02e8e5d6da7a7a6bd59fd575df0ca 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -38,9 +38,27 @@ endif() file(GLOB DAP_CLIENT_SOURCES src/*.c) file(GLOB DAP_CLIENT_HEADERS include/*.h) +if(WIN32) + include_directories(../libdap/src/win32/) + include_directories(../3rdparty/libmemcached/) + include_directories(../3rdparty/libmemcached/win32/) + include_directories(../3rdparty/wepoll/include/) + include_directories(../3rdparty/uthash/src/) + include_directories(../3rdparty/libjson-c/) + include_directories(../3rdparty/libmagic/src/) + include_directories(../3rdparty/curl/include/) +endif() + add_library(${PROJECT_NAME} STATIC ${DAP_CLIENT_HEADERS} ${DAP_CLIENT_SOURCES}) -target_link_libraries(${PROJECT_NAME} dap_core dap_crypto dap_server_core dap_udp_server dap_http_server dap_enc_server dap_stream dap_session dap_stream_ch pthread memcached ev) +if(WIN32) + target_link_libraries(${PROJECT_NAME} dap_core dap_crypto dap_server_core dap_udp_server dap_http_server dap_enc_server dap_stream dap_session dap_stream_ch) +endif() + +if(UNIX) + target_link_libraries(${PROJECT_NAME} dap_core dap_crypto dap_server_core dap_udp_server dap_http_server dap_enc_server dap_stream dap_session dap_stream_ch pthread memcached ev) +endif() + target_include_directories(${PROJECT_NAME} PUBLIC include) target_include_directories(${PROJECT_NAME} PRIVATE src) diff --git a/src/dap_client.c b/src/dap_client.c index 08051acdbae23c279b44c2bf671f46164b39c09e..f9414d08725c2860e75fa12438e1a3d8eb63ca93 100644 --- a/src/dap_client.c +++ b/src/dap_client.c @@ -1,7 +1,26 @@ +#include <stdlib.h> +#include <stdio.h> +#include <time.h> +#include <stdlib.h> +#include <stddef.h> +#include <stdint.h> #include <string.h> #include <stdbool.h> #include <unistd.h> +#ifdef WIN32 +#undef _WIN32_WINNT +#define _WIN32_WINNT 0x0600 +#include <winsock2.h> +#include <windows.h> +#include <mswsock.h> +#include <ws2tcpip.h> +#include <io.h> +#include <wepoll.h> +#endif + +#include <pthread.h> + #include "dap_common.h" #include "dap_strfuncs.h" #include "dap_http_client.h" @@ -9,8 +28,6 @@ #include "dap_client_pvt.h" #include "dap_stream_ch_proc.h" - - #define LOG_TAG "dap_client" // FSM realization: thats callback executes after the every stage is done diff --git a/src/dap_client_pool.c b/src/dap_client_pool.c index e386c4206532118eecfcb486a11e50b193ae8534..10c27b117582394ed747e13a111939db84429b91 100644 --- a/src/dap_client_pool.c +++ b/src/dap_client_pool.c @@ -1,8 +1,28 @@ -#include <dirent.h> +#include <stdlib.h> #include <stdio.h> +#include <time.h> +#include <stdlib.h> +#include <stddef.h> +#include <stdint.h> #include <string.h> +#include <stdbool.h> +#include <unistd.h> +#include <dirent.h> #include <errno.h> +#ifdef WIN32 +#undef _WIN32_WINNT +#define _WIN32_WINNT 0x0600 +#include <winsock2.h> +#include <windows.h> +#include <mswsock.h> +#include <ws2tcpip.h> +#include <io.h> +#include <wepoll.h> +#endif + +#include <pthread.h> + #include "dap_common.h" #include "dap_config.h" #include "dap_events.h" @@ -12,7 +32,6 @@ #define LOG_TAG "dap_client_pool" - // Single-linked peers list struct dap_client_list{ dap_client_t * item; diff --git a/src/dap_client_pvt.c b/src/dap_client_pvt.c index 6529320b7139a1b4e7cc153b1ab6085af9a2e3ca..1899ba31c0efc924215117cd5759e4f443190ba4 100644 --- a/src/dap_client_pvt.c +++ b/src/dap_client_pvt.c @@ -21,17 +21,39 @@ 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 <sys/types.h> /* See NOTES */ -#include <sys/socket.h> +#include <stdlib.h> #include <stdio.h> +#include <time.h> +#include <stdlib.h> +#include <stddef.h> +#include <stdint.h> #include <string.h> #include <stdbool.h> +#include <unistd.h> +#include <dirent.h> +#include <errno.h> #include <assert.h> -#include <json-c/json.h> -#include <unistd.h> // for close #include <fcntl.h> +#ifdef WIN32 +#undef _WIN32_WINNT +#define _WIN32_WINNT 0x0600 +#include <winsock2.h> +#include <windows.h> +#include <mswsock.h> +#include <ws2tcpip.h> +#include <io.h> +#include <wepoll.h> +#else +#include <sys/types.h> /* See NOTES */ +#include <sys/socket.h> +#endif + +#include <pthread.h> + +#include <json-c/json.h> + #include "dap_enc_key.h" #include "dap_enc_base64.h" #include "dap_enc.h" @@ -55,7 +77,6 @@ static void s_stage_status_after(dap_client_pvt_t * a_client_internal); - // ENC stage callbacks void m_enc_init_response(dap_client_t *, void *, size_t); void m_enc_init_error(dap_client_t *, int); @@ -203,9 +224,19 @@ static void s_stage_status_after(dap_client_pvt_t * a_client_pvt) case STAGE_STREAM_SESSION: { log_it(L_INFO, "Go to stage STREAM_SESSION: process the state ops"); - a_client_pvt->stream_socket = socket(PF_INET, SOCK_STREAM, 0); - setsockopt(a_client_pvt->stream_socket, SOL_SOCKET, SO_SNDBUF, (const void*) 50000, sizeof(int)); + a_client_pvt->stream_socket = socket( PF_INET, SOCK_STREAM, 0 ); +#ifdef _WIN32 + { + int buffsize = 65536; + int optsize = sizeof( int ); + setsockopt(a_client_pvt->stream_socket, SOL_SOCKET, SO_SNDBUF, (char *)&buffsize, &optsize ); + setsockopt(a_client_pvt->stream_socket, SOL_SOCKET, SO_RCVBUF, (char *)&buffsize, &optsize ); + } +#else + setsockopt(a_client_pvt->stream_socket, SOL_SOCKET, SO_SNDBUF, (const void *) 50000, sizeof(int)); setsockopt(a_client_pvt->stream_socket, SOL_SOCKET, SO_RCVBUF, (const void *) 50000, sizeof(int)); +#endif + // Wrap socket and setup callbacks static dap_events_socket_callbacks_t l_s_callbacks = { .read_callback = m_es_stream_read,