void WTSVirtualChannelManagerGetFileDescriptor(HANDLE hServer, void** fds, int* fds_count) { void* fd; WTSVirtualChannelManager* vcm = (WTSVirtualChannelManager*) hServer; fd = GetEventWaitObject(MessageQueue_Event(vcm->queue)); if (fd) { fds[*fds_count] = fd; (*fds_count)++; } #if 0 if (vcm->drdynvc_channel) { fd = GetEventWaitObject(vcm->drdynvc_channel->receiveEvent); if (fd) { fds[*fds_count] = fd; (*fds_count)++; } } #endif }
void transport_get_fds(rdpTransport* transport, void** rfds, int* rcount) { DWORD index; DWORD nCount; HANDLE events[64]; nCount = transport_get_event_handles(transport, events, 64); *rcount = nCount + 1; for (index = 0; index < nCount; index++) { rfds[index] = GetEventWaitObject(events[index]); } rfds[nCount] = GetEventWaitObject(transport->rereadEvent); }
void transport_get_fds(rdpTransport* transport, void** rfds, int* rcount) { void* pfd; #ifdef _WIN32 rfds[*rcount] = transport->TcpIn->wsa_event; (*rcount)++; if (transport->SplitInputOutput) { rfds[*rcount] = transport->TcpOut->wsa_event; (*rcount)++; } #else rfds[*rcount] = (void*)(long)(transport->TcpIn->sockfd); (*rcount)++; if (transport->SplitInputOutput) { rfds[*rcount] = (void*)(long)(transport->TcpOut->sockfd); (*rcount)++; } #endif pfd = GetEventWaitObject(transport->ReceiveEvent); if (pfd) { rfds[*rcount] = pfd; (*rcount)++; } }
void WTSVirtualChannelManagerGetFileDescriptor(WTSVirtualChannelManager* vcm, void** fds, int* fds_count) { void* fd; fd = GetEventWaitObject(vcm->send_event); if (fd) { fds[*fds_count] = fd; (*fds_count)++; } if (vcm->drdynvc_channel) { fd = GetEventWaitObject(vcm->drdynvc_channel->receive_event); if (fd) { fds[*fds_count] = fd; (*fds_count)++; } } }
/** * called only from main thread */ BOOL freerdp_channels_get_fds(rdpChannels* channels, freerdp* instance, void** read_fds, int* read_count, void** write_fds, int* write_count) { void* pfd; pfd = GetEventWaitObject(MessageQueue_Event(channels->queue)); if (pfd) { read_fds[*read_count] = pfd; (*read_count)++; } return TRUE; }
BOOL WTSVirtualChannelQuery( /* __in */ void* hChannelHandle, /* __in */ WTS_VIRTUAL_CLASS WtsVirtualClass, /* __out */ void** ppBuffer, /* __out */ UINT32* pBytesReturned) { void* pfd; BOOL bval; void* fds[10]; int fds_count = 0; BOOL result = FALSE; rdpPeerChannel* channel = (rdpPeerChannel*) hChannelHandle; ZeroMemory(fds, sizeof(fds)); switch (WtsVirtualClass) { case WTSVirtualFileHandle: pfd = GetEventWaitObject(channel->receive_event); if (pfd) { fds[fds_count] = pfd; (fds_count)++; } *ppBuffer = malloc(sizeof(void*)); CopyMemory(*ppBuffer, &fds[0], sizeof(void*)); *pBytesReturned = sizeof(void*); result = TRUE; break; case WTSVirtualChannelReady: if (channel->channel_type == RDP_PEER_CHANNEL_TYPE_SVC) { bval = TRUE; result = TRUE; } else { switch (channel->dvc_open_state) { case DVC_OPEN_STATE_NONE: bval = FALSE; result = TRUE; break; case DVC_OPEN_STATE_SUCCEEDED: bval = TRUE; result = TRUE; break; default: bval = FALSE; result = FALSE; break; } } *ppBuffer = malloc(sizeof(BOOL)); CopyMemory(*ppBuffer, &bval, sizeof(BOOL)); *pBytesReturned = sizeof(BOOL); break; default: break; } return result; }
BOOL WINAPI FreeRDP_WTSVirtualChannelQuery(HANDLE hChannelHandle, WTS_VIRTUAL_CLASS WtsVirtualClass, PVOID* ppBuffer, DWORD* pBytesReturned) { void* pfd; BOOL bval; void* fds[10]; HANDLE hEvent; int fds_count = 0; BOOL status = FALSE; rdpPeerChannel* channel = (rdpPeerChannel*) hChannelHandle; ZeroMemory(fds, sizeof(fds)); hEvent = MessageQueue_Event(channel->queue); switch ((UINT32) WtsVirtualClass) { case WTSVirtualFileHandle: pfd = GetEventWaitObject(hEvent); if (pfd) { fds[fds_count] = pfd; (fds_count)++; } *ppBuffer = malloc(sizeof(void*)); CopyMemory(*ppBuffer, &fds[0], sizeof(void*)); *pBytesReturned = sizeof(void*); status = TRUE; break; case WTSVirtualEventHandle: *ppBuffer = malloc(sizeof(HANDLE)); CopyMemory(*ppBuffer, &(hEvent), sizeof(HANDLE)); *pBytesReturned = sizeof(void*); status = TRUE; break; case WTSVirtualChannelReady: if (channel->channelType == RDP_PEER_CHANNEL_TYPE_SVC) { bval = TRUE; status = TRUE; } else { switch (channel->dvc_open_state) { case DVC_OPEN_STATE_NONE: bval = FALSE; status = TRUE; break; case DVC_OPEN_STATE_SUCCEEDED: bval = TRUE; status = TRUE; break; default: bval = FALSE; status = FALSE; break; } } *ppBuffer = malloc(sizeof(BOOL)); CopyMemory(*ppBuffer, &bval, sizeof(BOOL)); *pBytesReturned = sizeof(BOOL); break; default: break; } return status; }