diff --git a/server/Windows/wf_interface.c b/server/Windows/wf_interface.c index b144a5655..46de467d2 100644 --- a/server/Windows/wf_interface.c +++ b/server/Windows/wf_interface.c @@ -21,6 +21,7 @@ #include "config.h" #endif + #include #include #include @@ -30,6 +31,16 @@ #include "wf_interface.h" +// +struct rdp_listener +{ + freerdp_listener* instance; + + int sockfds[5]; + int num_sockfds; +}; +// + DWORD WINAPI wf_server_main_loop(LPVOID lpParam) { int i, fds; @@ -38,11 +49,13 @@ DWORD WINAPI wf_server_main_loop(LPVOID lpParam) void* rfds[32]; fd_set rfds_set; freerdp_listener* instance; + struct rdp_listener* listener; ZeroMemory(rfds, sizeof(rfds)); instance = (freerdp_listener*) lpParam; + listener = (struct rdp_listener*) instance->listener; - while (1) + while (listener->num_sockfds > 0) { rcount = 0; @@ -68,8 +81,9 @@ DWORD WINAPI wf_server_main_loop(LPVOID lpParam) if (max_fds == 0) break; + select(max_fds + 1, &rfds_set, NULL, NULL, NULL); - + if (instance->CheckFileDescriptor(instance) != true) { printf("Failed to check FreeRDP file descriptor\n"); @@ -77,6 +91,8 @@ DWORD WINAPI wf_server_main_loop(LPVOID lpParam) } } + printf("wf_server_main_loop terminating\n"); + instance->Close(instance); return 0; @@ -103,6 +119,7 @@ BOOL wfreerdp_server_start(wfServer* server) BOOL wfreerdp_server_stop(wfServer* server) { + server->instance->Close(server->instance); return TRUE; } @@ -132,3 +149,21 @@ void wfreerdp_server_free(wfServer* server) freerdp_wsa_cleanup(); } + + +FREERDP_API BOOL wfreerdp_server_is_running(wfServer* server) +{ + DWORD tStatus; + BOOL bRet; + + bRet = GetExitCodeThread(server->thread, &tStatus); + if (bRet == 0) + { + printf("Error in call to GetExitCodeThread\n"); + return FALSE; + } + + if (tStatus == STILL_ACTIVE) + return TRUE; + return FALSE; +} diff --git a/server/Windows/wf_interface.h b/server/Windows/wf_interface.h index 587d8305c..092d58b90 100644 --- a/server/Windows/wf_interface.h +++ b/server/Windows/wf_interface.h @@ -89,4 +89,6 @@ FREERDP_API BOOL wfreerdp_server_stop(wfServer* server); FREERDP_API wfServer* wfreerdp_server_new(); FREERDP_API void wfreerdp_server_free(wfServer* server); +FREERDP_API BOOL wfreerdp_server_is_running(wfServer* server); + #endif /* WF_INTERFACE_H */