boolean xf_pre_connect(freerdp* instance) { xfInfo* xfi; rdpSettings* settings; xfi = (xfInfo*) xzalloc(sizeof(xfInfo)); SET_XFI(instance, xfi); xfi->instance = instance; settings = instance->settings; settings->order_support[NEG_DSTBLT_INDEX] = True; settings->order_support[NEG_PATBLT_INDEX] = True; settings->order_support[NEG_SCRBLT_INDEX] = True; settings->order_support[NEG_OPAQUE_RECT_INDEX] = True; settings->order_support[NEG_DRAWNINEGRID_INDEX] = False; settings->order_support[NEG_MULTIDSTBLT_INDEX] = False; settings->order_support[NEG_MULTIPATBLT_INDEX] = False; settings->order_support[NEG_MULTISCRBLT_INDEX] = False; settings->order_support[NEG_MULTIOPAQUERECT_INDEX] = True; settings->order_support[NEG_MULTI_DRAWNINEGRID_INDEX] = False; settings->order_support[NEG_LINETO_INDEX] = True; settings->order_support[NEG_POLYLINE_INDEX] = True; settings->order_support[NEG_MEMBLT_INDEX] = True; settings->order_support[NEG_MEM3BLT_INDEX] = False; settings->order_support[NEG_SAVEBITMAP_INDEX] = True; settings->order_support[NEG_GLYPH_INDEX_INDEX] = True; settings->order_support[NEG_FAST_INDEX_INDEX] = True; settings->order_support[NEG_FAST_GLYPH_INDEX] = True; settings->order_support[NEG_POLYGON_SC_INDEX] = False; settings->order_support[NEG_POLYGON_CB_INDEX] = False; settings->order_support[NEG_ELLIPSE_SC_INDEX] = False; settings->order_support[NEG_ELLIPSE_CB_INDEX] = False; freerdp_chanman_pre_connect(GET_CHANMAN(instance), instance); xfi->display = XOpenDisplay(NULL); if (xfi->display == NULL) { printf("xf_pre_connect: failed to open display: %s\n", XDisplayName(NULL)); return False; } xf_kbd_init(xfi); xfi->xfds = ConnectionNumber(xfi->display); xfi->screen_number = DefaultScreen(xfi->display); xfi->screen = ScreenOfDisplay(xfi->display, xfi->screen_number); xfi->depth = DefaultDepthOfScreen(xfi->screen); xfi->big_endian = (ImageByteOrder(xfi->display) == MSBFirst); xfi->decoration = True; xfi->mouse_motion = True; return True; }
void xf_rail_send_client_system_command(xfInfo* xfi, uint32 windowId, uint16 command) { rdpChanMan* chanman; RAIL_SYSCOMMAND_ORDER syscommand; chanman = GET_CHANMAN(xfi->instance); syscommand.windowId = windowId; syscommand.command = command; xf_send_rail_client_event(chanman, RDP_EVENT_TYPE_RAIL_CLIENT_SYSCOMMAND, &syscommand); }
void xf_rail_send_windowmove(xfInfo* xfi, uint32 windowId, uint32 left, uint32 top, uint32 right, uint32 bottom) { rdpChanMan* chanman; RAIL_WINDOW_MOVE_ORDER window_move; chanman = GET_CHANMAN(xfi->instance); window_move.windowId = windowId; window_move.left = left; window_move.top = top; window_move.right = right; window_move.bottom = bottom; xf_send_rail_client_event(chanman, RDP_EVENT_TYPE_RAIL_CLIENT_WINDOW_MOVE, &window_move); }
void xf_rail_send_activate(xfInfo* xfi, Window xwindow, boolean enabled) { rdpChanMan* chanman; rdpWindow* rail_window; RAIL_ACTIVATE_ORDER activate; chanman = GET_CHANMAN(xfi->instance); rail_window = window_list_get_by_extra_id(xfi->rail->list, (void*)xwindow); if (rail_window == NULL) return; activate.windowId = rail_window->windowId; activate.enabled = enabled; xf_send_rail_client_event(chanman, RDP_EVENT_TYPE_RAIL_CLIENT_ACTIVATE, &activate); }
boolean tf_post_connect(freerdp* instance) { GDI* gdi; tfInfo* tfi; tfi = GET_TFI(instance); SET_TFI(instance->update, tfi); gdi_init(instance, CLRCONV_ALPHA | CLRBUF_16BPP | CLRBUF_32BPP); gdi = GET_GDI(instance->update); instance->update->BeginPaint = tf_begin_paint; instance->update->EndPaint = tf_end_paint; freerdp_chanman_post_connect(GET_CHANMAN(instance), instance); return True; }
boolean tf_pre_connect(freerdp* instance) { tfInfo* tfi; rdpSettings* settings; tfi = (tfInfo*) xzalloc(sizeof(tfInfo)); SET_TFI(instance, tfi); settings = instance->settings; settings->order_support[NEG_DSTBLT_INDEX] = True; settings->order_support[NEG_PATBLT_INDEX] = True; settings->order_support[NEG_SCRBLT_INDEX] = True; settings->order_support[NEG_OPAQUE_RECT_INDEX] = True; settings->order_support[NEG_DRAWNINEGRID_INDEX] = True; settings->order_support[NEG_MULTIDSTBLT_INDEX] = True; settings->order_support[NEG_MULTIPATBLT_INDEX] = True; settings->order_support[NEG_MULTISCRBLT_INDEX] = True; settings->order_support[NEG_MULTIOPAQUERECT_INDEX] = True; settings->order_support[NEG_MULTI_DRAWNINEGRID_INDEX] = True; settings->order_support[NEG_LINETO_INDEX] = True; settings->order_support[NEG_POLYLINE_INDEX] = True; settings->order_support[NEG_MEMBLT_INDEX] = True; settings->order_support[NEG_MEM3BLT_INDEX] = True; settings->order_support[NEG_SAVEBITMAP_INDEX] = True; settings->order_support[NEG_GLYPH_INDEX_INDEX] = True; settings->order_support[NEG_FAST_INDEX_INDEX] = True; settings->order_support[NEG_FAST_GLYPH_INDEX] = True; settings->order_support[NEG_POLYGON_SC_INDEX] = True; settings->order_support[NEG_POLYGON_CB_INDEX] = True; settings->order_support[NEG_ELLIPSE_SC_INDEX] = True; settings->order_support[NEG_ELLIPSE_CB_INDEX] = True; freerdp_chanman_pre_connect(GET_CHANMAN(instance), instance); return True; }
int tfreerdp_run(freerdp* instance) { int i; int fds; int max_fds; int rcount; int wcount; void* rfds[32]; void* wfds[32]; fd_set rfds_set; fd_set wfds_set; rdpChanMan* chanman; memset(rfds, 0, sizeof(rfds)); memset(wfds, 0, sizeof(wfds)); chanman = GET_CHANMAN(instance); instance->Connect(instance); while (1) { rcount = 0; wcount = 0; if (instance->GetFileDescriptor(instance, rfds, &rcount, wfds, &wcount) != True) { printf("Failed to get FreeRDP file descriptor\n"); break; } if (freerdp_chanman_get_fds(chanman, instance, rfds, &rcount, wfds, &wcount) != True) { printf("Failed to get channel manager file descriptor\n"); break; } max_fds = 0; FD_ZERO(&rfds_set); for (i = 0; i < rcount; i++) { fds = (int)(long)(rfds[i]); if (fds > max_fds) max_fds = fds; FD_SET(fds, &rfds_set); } if (max_fds == 0) break; if (select(max_fds + 1, &rfds_set, &wfds_set, NULL, NULL) == -1) { /* these are not really errors */ if (!((errno == EAGAIN) || (errno == EWOULDBLOCK) || (errno == EINPROGRESS) || (errno == EINTR))) /* signal occurred */ { printf("tfreerdp_run: select failed\n"); break; } } if (instance->CheckFileDescriptor(instance) != True) { printf("Failed to check FreeRDP file descriptor\n"); break; } if (freerdp_chanman_check_fds(chanman, instance) != True) { printf("Failed to check channel manager file descriptor\n"); break; } tf_process_channel_event(chanman, instance); } freerdp_chanman_close(chanman, instance); freerdp_chanman_free(chanman); freerdp_free(instance); return 0; }