From 0540a5930f545c5f51a7183fb956bc9f18af7c62 Mon Sep 17 00:00:00 2001
From: ANTA <arcticshine999@gmail.com>
Date: Wed, 17 Jul 2019 03:40:04 +0400
Subject: [PATCH] 1.1-11-Win

---
 CMakeLists.txt        | 20 ++++++++++++++++++-
 src/dap_client.c      | 21 ++++++++++++++++++--
 src/dap_client_pool.c | 23 ++++++++++++++++++++--
 src/dap_client_pvt.c  | 45 ++++++++++++++++++++++++++++++++++++-------
 4 files changed, 97 insertions(+), 12 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index c843654..8ef859b 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 08051ac..f9414d0 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 e386c42..10c27b1 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 6529320..1899ba3 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,
-- 
GitLab