From a2cd04e3f715386af2bf85e6c7269a7390bcd149 Mon Sep 17 00:00:00 2001 From: Corey C Date: Fri, 5 Oct 2012 23:25:18 -0400 Subject: [PATCH] wfreerdp-server: added connect/disconnect event callback support --- server/Windows/wf_info.c | 4 ++++ server/Windows/wf_interface.c | 29 +++++++++++++++++++++++++++++ server/Windows/wf_interface.h | 8 ++++++++ 3 files changed, 41 insertions(+) diff --git a/server/Windows/wf_info.c b/server/Windows/wf_info.c index 3b8deee..f70d24c 100644 --- a/server/Windows/wf_info.c +++ b/server/Windows/wf_info.c @@ -217,6 +217,8 @@ void wf_info_peer_register(wfInfo* wfi, wfPeerContext* context) printf("Registering Peer: %d\n", wfi->peerCount); wf_info_unlock(wfi); + + wfreerdp_server_peer_connect_event(wfi->peerCount); } } @@ -235,6 +237,8 @@ void wf_info_peer_unregister(wfInfo* wfi, wfPeerContext* context) #endif wf_info_unlock(wfi); + + wfreerdp_server_peer_disconnect_event(wfi->peerCount); } } diff --git a/server/Windows/wf_interface.c b/server/Windows/wf_interface.c index 59566d9..0ceb460 100644 --- a/server/Windows/wf_interface.c +++ b/server/Windows/wf_interface.c @@ -42,6 +42,9 @@ struct rdp_listener }; // +cbConEvent cbConnect; +cbConEvent cbDisconnect; + DWORD WINAPI wf_server_main_loop(LPVOID lpParam) { int i, fds; @@ -148,6 +151,9 @@ wfServer* wfreerdp_server_new() server->port = 3389; } + cbConnect = NULL; + cbDisconnect = NULL; + return server; } @@ -286,3 +292,26 @@ FREERDP_API BOOL wfreerdp_server_peer_is_authenticated(int pId) return FALSE; } } + +FREERDP_API void wfreerdp_server_register_connect_event(cbConEvent cb) +{ + cbConnect = cb; +} + +FREERDP_API void wfreerdp_server_register_disconnect_event(cbConEvent cb) +{ + cbDisconnect = cb; +} + + +void wfreerdp_server_peer_connect_event(int pId) +{ + if (cbConnect) + cbConnect(pId); +} +void wfreerdp_server_peer_disconnect_event(int pId) +{ + if (cbDisconnect) + cbDisconnect(pId); +} + diff --git a/server/Windows/wf_interface.h b/server/Windows/wf_interface.h index 538dd21..908b48f 100644 --- a/server/Windows/wf_interface.h +++ b/server/Windows/wf_interface.h @@ -86,6 +86,8 @@ struct wf_server }; typedef struct wf_server wfServer; +typedef void (__stdcall* cbConEvent) (int); + FREERDP_API BOOL wfreerdp_server_start(wfServer* server); FREERDP_API BOOL wfreerdp_server_stop(wfServer* server); @@ -101,4 +103,10 @@ FREERDP_API BOOL wfreerdp_server_peer_is_connected(int pId); FREERDP_API BOOL wfreerdp_server_peer_is_activated(int pId); FREERDP_API BOOL wfreerdp_server_peer_is_authenticated(int pId); +FREERDP_API void wfreerdp_server_register_connect_event(cbConEvent cb); +FREERDP_API void wfreerdp_server_register_disconnect_event(cbConEvent cb); + +void wfreerdp_server_peer_connect_event(int pId); +void wfreerdp_server_peer_disconnect_event(int pId); + #endif /* WF_INTERFACE_H */ -- 2.7.4