wfreerdp-server: control interface

This commit is contained in:
Corey C 2012-10-04 16:51:23 -04:00
parent 4d4d19c796
commit 818942e628
2 changed files with 39 additions and 2 deletions

View File

@ -21,6 +21,7 @@
#include "config.h"
#endif
#include <winpr/tchar.h>
#include <winpr/windows.h>
#include <freerdp/utils/tcp.h>
@ -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;
}

View File

@ -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 */