diff --git a/channels/audin/server/audin.c b/channels/audin/server/audin.c index 4bae57834..02c36ffa9 100644 --- a/channels/audin/server/audin.c +++ b/channels/audin/server/audin.c @@ -453,12 +453,11 @@ static BOOL audin_server_close(audin_server_context* context) return TRUE; } -audin_server_context* audin_server_context_new(WTSVirtualChannelManager* vcm) +audin_server_context* audin_server_context_new(HANDLE vcm) { audin_server* audin; - audin = (audin_server*) malloc(sizeof(audin_server)); - ZeroMemory(audin, sizeof(audin_server)); + audin = (audin_server*) calloc(1, sizeof(audin_server)); audin->context.vcm = vcm; audin->context.selected_client_format = -1; diff --git a/channels/cliprdr/server/cliprdr_main.c b/channels/cliprdr/server/cliprdr_main.c index 3858784bd..5375237d8 100644 --- a/channels/cliprdr/server/cliprdr_main.c +++ b/channels/cliprdr/server/cliprdr_main.c @@ -468,7 +468,7 @@ static void* cliprdr_server_thread(void* arg) static int cliprdr_server_start(CliprdrServerContext* context) { - context->priv->ChannelHandle = WTSVirtualChannelOpen((HANDLE) context->vcm, WTS_CURRENT_SESSION, "cliprdr"); + context->priv->ChannelHandle = WTSVirtualChannelOpen(context->vcm, WTS_CURRENT_SESSION, "cliprdr"); if (!context->priv->ChannelHandle) return -1; @@ -491,7 +491,7 @@ static int cliprdr_server_stop(CliprdrServerContext* context) return 0; } -CliprdrServerContext* cliprdr_server_context_new(WTSVirtualChannelManager* vcm) +CliprdrServerContext* cliprdr_server_context_new(HANDLE vcm) { CliprdrServerContext* context; diff --git a/channels/drdynvc/server/drdynvc_main.c b/channels/drdynvc/server/drdynvc_main.c index 869ff5b8f..b6436c6a5 100644 --- a/channels/drdynvc/server/drdynvc_main.c +++ b/channels/drdynvc/server/drdynvc_main.c @@ -86,7 +86,7 @@ static void* drdynvc_server_thread(void* arg) static int drdynvc_server_start(DrdynvcServerContext* context) { - context->priv->ChannelHandle = WTSVirtualChannelOpen((HANDLE) context->vcm, WTS_CURRENT_SESSION, "drdynvc"); + context->priv->ChannelHandle = WTSVirtualChannelOpen(context->vcm, WTS_CURRENT_SESSION, "drdynvc"); if (!context->priv->ChannelHandle) return -1; @@ -109,27 +109,20 @@ static int drdynvc_server_stop(DrdynvcServerContext* context) return 0; } -DrdynvcServerContext* drdynvc_server_context_new(WTSVirtualChannelManager* vcm) +DrdynvcServerContext* drdynvc_server_context_new(HANDLE vcm) { DrdynvcServerContext* context; - context = (DrdynvcServerContext*) malloc(sizeof(DrdynvcServerContext)); + context = (DrdynvcServerContext*) calloc(1, sizeof(DrdynvcServerContext)); if (context) { - ZeroMemory(context, sizeof(DrdynvcServerContext)); - context->vcm = vcm; context->Start = drdynvc_server_start; context->Stop = drdynvc_server_stop; - context->priv = (DrdynvcServerPrivate*) malloc(sizeof(DrdynvcServerPrivate)); - - if (context->priv) - { - ZeroMemory(context->priv, sizeof(DrdynvcServerPrivate)); - } + context->priv = (DrdynvcServerPrivate*) calloc(1, sizeof(DrdynvcServerPrivate)); } return context; diff --git a/channels/rdpdr/server/rdpdr_main.c b/channels/rdpdr/server/rdpdr_main.c index cc2c79b0e..f7bee4aea 100644 --- a/channels/rdpdr/server/rdpdr_main.c +++ b/channels/rdpdr/server/rdpdr_main.c @@ -630,7 +630,7 @@ static void* rdpdr_server_thread(void* arg) static int rdpdr_server_start(RdpdrServerContext* context) { - context->priv->ChannelHandle = WTSVirtualChannelOpen((HANDLE) context->vcm, WTS_CURRENT_SESSION, "rdpdr"); + context->priv->ChannelHandle = WTSVirtualChannelOpen(context->vcm, WTS_CURRENT_SESSION, "rdpdr"); if (!context->priv->ChannelHandle) return -1; @@ -653,7 +653,7 @@ static int rdpdr_server_stop(RdpdrServerContext* context) return 0; } -RdpdrServerContext* rdpdr_server_context_new(WTSVirtualChannelManager* vcm) +RdpdrServerContext* rdpdr_server_context_new(HANDLE vcm) { RdpdrServerContext* context; diff --git a/channels/rdpsnd/server/rdpsnd_main.c b/channels/rdpsnd/server/rdpsnd_main.c index cd65a2e5b..3a14b5d98 100644 --- a/channels/rdpsnd/server/rdpsnd_main.c +++ b/channels/rdpsnd/server/rdpsnd_main.c @@ -488,7 +488,7 @@ static BOOL rdpsnd_server_close(RdpsndServerContext* context) static int rdpsnd_server_start(RdpsndServerContext* context) { - context->priv->ChannelHandle = WTSVirtualChannelOpen((HANDLE) context->vcm, WTS_CURRENT_SESSION, "rdpsnd"); + context->priv->ChannelHandle = WTSVirtualChannelOpen(context->vcm, WTS_CURRENT_SESSION, "rdpsnd"); if (!context->priv->ChannelHandle) return -1; @@ -513,7 +513,7 @@ static int rdpsnd_server_stop(RdpsndServerContext* context) return 0; } -RdpsndServerContext* rdpsnd_server_context_new(WTSVirtualChannelManager* vcm) +RdpsndServerContext* rdpsnd_server_context_new(HANDLE vcm) { RdpsndServerContext* context; diff --git a/include/freerdp/channels/wtsvc.h b/include/freerdp/channels/wtsvc.h index ff0466ff5..5f7865473 100644 --- a/include/freerdp/channels/wtsvc.h +++ b/include/freerdp/channels/wtsvc.h @@ -43,8 +43,6 @@ #define WTSVirtualEventHandle 3 /* Extended */ #define WTSVirtualChannelReady 4 /* Extended */ -typedef struct WTSVirtualChannelManager WTSVirtualChannelManager; - #ifdef __cplusplus extern "C" { #endif @@ -53,11 +51,11 @@ extern "C" { * WTSVirtualChannelManager functions are FreeRDP extensions to the API. */ -FREERDP_API void WTSVirtualChannelManagerGetFileDescriptor(WTSVirtualChannelManager* vcm, void** fds, int* fds_count); -FREERDP_API BOOL WTSVirtualChannelManagerCheckFileDescriptor(WTSVirtualChannelManager* vcm); -FREERDP_API HANDLE WTSVirtualChannelManagerGetEventHandle(WTSVirtualChannelManager* vcm); +FREERDP_API void WTSVirtualChannelManagerGetFileDescriptor(HANDLE hServer, void** fds, int* fds_count); +FREERDP_API BOOL WTSVirtualChannelManagerCheckFileDescriptor(HANDLE hServer); +FREERDP_API HANDLE WTSVirtualChannelManagerGetEventHandle(HANDLE hServer); -FREERDP_API BOOL WTSVirtualChannelManagerIsChannelJoined(WTSVirtualChannelManager* vcm, const char* name); +FREERDP_API BOOL WTSVirtualChannelManagerIsChannelJoined(HANDLE hServer, const char* name); #ifdef __cplusplus } diff --git a/include/freerdp/server/audin.h b/include/freerdp/server/audin.h index 8f932b91b..d8ddafa43 100644 --- a/include/freerdp/server/audin.h +++ b/include/freerdp/server/audin.h @@ -94,7 +94,7 @@ struct _audin_server_context extern "C" { #endif -FREERDP_API audin_server_context* audin_server_context_new(WTSVirtualChannelManager* vcm); +FREERDP_API audin_server_context* audin_server_context_new(HANDLE vcm); FREERDP_API void audin_server_context_free(audin_server_context* context); #ifdef __cplusplus diff --git a/include/freerdp/server/cliprdr.h b/include/freerdp/server/cliprdr.h index 256e736ae..c7d881c6b 100644 --- a/include/freerdp/server/cliprdr.h +++ b/include/freerdp/server/cliprdr.h @@ -39,7 +39,7 @@ typedef int (*psCliprdrStop)(CliprdrServerContext* context); struct _cliprdr_server_context { - WTSVirtualChannelManager* vcm; + HANDLE vcm; psCliprdrStart Start; psCliprdrStop Stop; @@ -47,7 +47,7 @@ struct _cliprdr_server_context CliprdrServerPrivate* priv; }; -FREERDP_API CliprdrServerContext* cliprdr_server_context_new(WTSVirtualChannelManager* vcm); +FREERDP_API CliprdrServerContext* cliprdr_server_context_new(HANDLE vcm); FREERDP_API void cliprdr_server_context_free(CliprdrServerContext* context); #endif /* FREERDP_CHANNEL_SERVER_CLIPRDR_H */ diff --git a/include/freerdp/server/drdynvc.h b/include/freerdp/server/drdynvc.h index 31eb4ece6..9b41126de 100644 --- a/include/freerdp/server/drdynvc.h +++ b/include/freerdp/server/drdynvc.h @@ -36,7 +36,7 @@ typedef int (*psDrdynvcStop)(DrdynvcServerContext* context); struct _drdynvc_client_context { - WTSVirtualChannelManager* vcm; + HANDLE vcm; psDrdynvcStart Start; psDrdynvcStop Stop; @@ -44,7 +44,7 @@ struct _drdynvc_client_context DrdynvcServerPrivate* priv; }; -FREERDP_API DrdynvcServerContext* drdynvc_server_context_new(WTSVirtualChannelManager* vcm); +FREERDP_API DrdynvcServerContext* drdynvc_server_context_new(HANDLE vcm); FREERDP_API void drdynvc_server_context_free(DrdynvcServerContext* context); #endif /* FREERDP_CHANNEL_SERVER_DRDYNVC_H */ diff --git a/include/freerdp/server/rdpdr.h b/include/freerdp/server/rdpdr.h index d24be3fcd..3fe23e869 100644 --- a/include/freerdp/server/rdpdr.h +++ b/include/freerdp/server/rdpdr.h @@ -37,7 +37,7 @@ typedef int (*psRdpdrStop)(RdpdrServerContext* context); struct _rdpdr_server_context { - WTSVirtualChannelManager* vcm; + HANDLE vcm; psRdpdrStart Start; psRdpdrStop Stop; @@ -45,7 +45,7 @@ struct _rdpdr_server_context RdpdrServerPrivate* priv; }; -FREERDP_API RdpdrServerContext* rdpdr_server_context_new(WTSVirtualChannelManager* vcm); +FREERDP_API RdpdrServerContext* rdpdr_server_context_new(HANDLE vcm); FREERDP_API void rdpdr_server_context_free(RdpdrServerContext* context); #endif /* FREERDP_CHANNEL_SERVER_RDPDR_H */ diff --git a/include/freerdp/server/rdpsnd.h b/include/freerdp/server/rdpsnd.h index 5b65cd8ff..1585389d5 100644 --- a/include/freerdp/server/rdpsnd.h +++ b/include/freerdp/server/rdpsnd.h @@ -40,7 +40,7 @@ typedef void (*psRdpsndServerActivated)(RdpsndServerContext* context); struct _rdpsnd_server_context { - WTSVirtualChannelManager* vcm; + HANDLE vcm; psRdpsndStart Start; psRdpsndStop Stop; @@ -105,7 +105,7 @@ struct _rdpsnd_server_context extern "C" { #endif -FREERDP_API RdpsndServerContext* rdpsnd_server_context_new(WTSVirtualChannelManager* vcm); +FREERDP_API RdpsndServerContext* rdpsnd_server_context_new(HANDLE vcm); FREERDP_API void rdpsnd_server_context_free(RdpsndServerContext* context); #ifdef __cplusplus diff --git a/libfreerdp/core/server.c b/libfreerdp/core/server.c index 06e35e735..97a11cf92 100644 --- a/libfreerdp/core/server.c +++ b/libfreerdp/core/server.c @@ -383,9 +383,10 @@ static int WTSReceiveChannelData(freerdp_peer* client, UINT16 channelId, BYTE* d return status; } -void WTSVirtualChannelManagerGetFileDescriptor(WTSVirtualChannelManager* vcm, void** fds, int* fds_count) +void WTSVirtualChannelManagerGetFileDescriptor(HANDLE hServer, void** fds, int* fds_count) { void* fd; + WTSVirtualChannelManager* vcm = (WTSVirtualChannelManager*) hServer; fd = GetEventWaitObject(MessageQueue_Event(vcm->queue)); @@ -409,12 +410,13 @@ void WTSVirtualChannelManagerGetFileDescriptor(WTSVirtualChannelManager* vcm, vo #endif } -BOOL WTSVirtualChannelManagerCheckFileDescriptor(WTSVirtualChannelManager* vcm) +BOOL WTSVirtualChannelManagerCheckFileDescriptor(HANDLE hServer) { wMessage message; BOOL status = TRUE; rdpPeerChannel* channel; UINT32 dynvc_caps; + WTSVirtualChannelManager* vcm = (WTSVirtualChannelManager*) hServer; if ((vcm->drdynvc_state == DRDYNVC_STATE_NONE) && vcm->client->activated) { @@ -455,16 +457,20 @@ BOOL WTSVirtualChannelManagerCheckFileDescriptor(WTSVirtualChannelManager* vcm) return status; } -HANDLE WTSVirtualChannelManagerGetEventHandle(WTSVirtualChannelManager* vcm) +HANDLE WTSVirtualChannelManagerGetEventHandle(HANDLE hServer) { + WTSVirtualChannelManager* vcm = (WTSVirtualChannelManager*) hServer; return MessageQueue_Event(vcm->queue); } -BOOL WTSVirtualChannelManagerIsChannelJoined(WTSVirtualChannelManager* vcm, const char* name) +BOOL WTSVirtualChannelManagerIsChannelJoined(HANDLE hServer, const char* name) { + rdpMcs* mcs; UINT32 index; BOOL joined = FALSE; - rdpMcs* mcs = vcm->rdp->mcs; + WTSVirtualChannelManager* vcm = (WTSVirtualChannelManager*) hServer; + + mcs = vcm->rdp->mcs; for (index = 0; index < mcs->channelCount; index++) { diff --git a/libfreerdp/core/server.h b/libfreerdp/core/server.h index 1841001da..39e94b01e 100644 --- a/libfreerdp/core/server.h +++ b/libfreerdp/core/server.h @@ -29,6 +29,8 @@ #include #include +typedef struct WTSVirtualChannelManager WTSVirtualChannelManager; + #include "rdp.h" #define CREATE_REQUEST_PDU 0x01 diff --git a/server/Mac/mf_interface.h b/server/Mac/mf_interface.h index a59951f4f..80c10172f 100644 --- a/server/Mac/mf_interface.h +++ b/server/Mac/mf_interface.h @@ -59,7 +59,7 @@ struct mf_peer_context NSC_CONTEXT* nsc_context; //#ifdef WITH_SERVER_CHANNELS - WTSVirtualChannelManager* vcm; + HANDLE vcm; //#endif //#ifdef CHANNEL_AUDIN_SERVER audin_server_context* audin; diff --git a/server/Mac/mf_peer.c b/server/Mac/mf_peer.c index 222953105..ca8f2e259 100644 --- a/server/Mac/mf_peer.c +++ b/server/Mac/mf_peer.c @@ -187,7 +187,7 @@ int mf_peer_context_new(freerdp_peer* client, mfPeerContext* context) context->s = Stream_New(NULL, 0xFFFF); //#ifdef WITH_SERVER_CHANNELS - context->vcm = (WTSVirtualChannelManager*) WTSOpenServerA((LPSTR) client->context); + context->vcm = WTSOpenServerA((LPSTR) client->context); //#endif mf_info_peer_register(context->info, context); @@ -222,7 +222,7 @@ void mf_peer_context_free(freerdp_peer* client, mfPeerContext* context) //#endif //#ifdef WITH_SERVER_CHANNELS - WTSCloseServer((HANDLE) context->vcm); + WTSCloseServer(context->vcm); //#endif } } diff --git a/server/Sample/sfreerdp.c b/server/Sample/sfreerdp.c index 6e77bbee2..920d2d6fb 100644 --- a/server/Sample/sfreerdp.c +++ b/server/Sample/sfreerdp.c @@ -63,7 +63,7 @@ void test_peer_context_new(freerdp_peer* client, testPeerContext* context) context->icon_x = -1; context->icon_y = -1; - context->vcm = (WTSVirtualChannelManager*) WTSOpenServerA((LPSTR) client->context); + context->vcm = WTSOpenServerA((LPSTR) client->context); } void test_peer_context_free(freerdp_peer* client, testPeerContext* context) diff --git a/server/Windows/wf_interface.h b/server/Windows/wf_interface.h index 4108448b9..dc3af1c7f 100644 --- a/server/Windows/wf_interface.h +++ b/server/Windows/wf_interface.h @@ -99,7 +99,7 @@ struct wf_peer_context HANDLE socketThread; HANDLE socketSemaphore; - WTSVirtualChannelManager* vcm; + HANDLE vcm; RdpsndServerContext* rdpsnd; }; diff --git a/server/Windows/wf_peer.c b/server/Windows/wf_peer.c index 895564af0..482bd6389 100644 --- a/server/Windows/wf_peer.c +++ b/server/Windows/wf_peer.c @@ -41,7 +41,7 @@ void wf_peer_context_new(freerdp_peer* client, wfPeerContext* context) { context->info = wf_info_get_instance(); - context->vcm = (WTSVirtualChannelManager*) WTSOpenServerA((LPSTR) client->context); + context->vcm = WTSOpenServerA((LPSTR) client->context); wf_info_peer_register(context->info, context); }