/* return error */ static int APP_CC process_server_add_char_alpha(struct mod *mod, struct stream *s) { int rv; int font; int charactor; int x; int y; int cx; int cy; int len_bmpdata; char *bmpdata; in_uint16_le(s, font); in_uint16_le(s, charactor); in_sint16_le(s, x); in_sint16_le(s, y); in_uint16_le(s, cx); in_uint16_le(s, cy); in_uint16_le(s, len_bmpdata); in_uint8p(s, bmpdata, len_bmpdata); rv = mod->server_add_char_alpha(mod, font, charactor, x, y, cx, cy, bmpdata); return rv; }
/* return error */ static int APP_CC process_server_paint_rect(struct mod *mod, struct stream *s) { int rv; int x; int y; int cx; int cy; int len_bmpdata; char *bmpdata; int width; int height; int srcx; int srcy; in_sint16_le(s, x); in_sint16_le(s, y); in_uint16_le(s, cx); in_uint16_le(s, cy); in_uint32_le(s, len_bmpdata); in_uint8p(s, bmpdata, len_bmpdata); in_uint16_le(s, width); in_uint16_le(s, height); in_sint16_le(s, srcx); in_sint16_le(s, srcy); rv = mod->server_paint_rect(mod, x, y, cx, cy, bmpdata, width, height, srcx, srcy); return rv; }
/* return error */ static int APP_CC process_server_paint_rect_shmem(struct mod *mod, struct stream *s) { int rv; int x; int y; int cx; int cy; int flags; int frame_id; int shmem_id; int shmem_offset; int width; int height; int srcx; int srcy; char *bmpdata; in_sint16_le(s, x); in_sint16_le(s, y); in_uint16_le(s, cx); in_uint16_le(s, cy); in_uint32_le(s, flags); in_uint32_le(s, frame_id); in_uint32_le(s, shmem_id); in_uint32_le(s, shmem_offset); in_uint16_le(s, width); in_uint16_le(s, height); in_sint16_le(s, srcx); in_sint16_le(s, srcy); bmpdata = 0; if (flags == 0) /* screen */ { if (mod->screen_shmem_id == 0) { mod->screen_shmem_id = shmem_id; mod->screen_shmem_pixels = g_shmat(mod->screen_shmem_id); } if (mod->screen_shmem_pixels != 0) { bmpdata = mod->screen_shmem_pixels + shmem_offset; } } if (bmpdata != 0) { rv = mod->server_paint_rect(mod, x, y, cx, cy, bmpdata, width, height, srcx, srcy); } else { rv = 1; } send_paint_rect_ack(mod, flags, x, y, cx, cy, frame_id); return rv; }
/* return error */ static int APP_CC process_server_set_cursor(struct mod *mod, struct stream *s) { int rv; int x; int y; char cur_data[32 * (32 * 3)]; char cur_mask[32 * (32 / 8)]; in_sint16_le(s, x); in_sint16_le(s, y); in_uint8a(s, cur_data, 32 * (32 * 3)); in_uint8a(s, cur_mask, 32 * (32 / 8)); rv = mod->server_set_cursor(mod, x, y, cur_data, cur_mask); return rv; }
/* return error */ static int APP_CC process_server_draw_line(struct mod *mod, struct stream *s) { int rv; int x1; int y1; int x2; int y2; in_sint16_le(s, x1); in_sint16_le(s, y1); in_sint16_le(s, x2); in_sint16_le(s, y2); rv = mod->server_draw_line(mod, x1, y1, x2, y2); return rv; }
/* return error */ static int APP_CC process_server_set_clip(struct mod *mod, struct stream *s) { int rv; int x; int y; int cx; int cy; in_sint16_le(s, x); in_sint16_le(s, y); in_uint16_le(s, cx); in_uint16_le(s, cy); rv = mod->server_set_clip(mod, x, y, cx, cy); return rv; }
/* return error */ static int APP_CC process_server_screen_blt(struct mod *mod, struct stream *s) { int rv; int x; int y; int cx; int cy; int srcx; int srcy; in_sint16_le(s, x); in_sint16_le(s, y); in_uint16_le(s, cx); in_uint16_le(s, cy); in_sint16_le(s, srcx); in_sint16_le(s, srcy); rv = mod->server_screen_blt(mod, x, y, cx, cy, srcx, srcy); return rv; }
/* return error */ static int APP_CC process_server_set_pointer_ex(struct mod *mod, struct stream *s) { int rv; int x; int y; int bpp; int Bpp; char cur_data[32 * (32 * 4)]; char cur_mask[32 * (32 / 8)]; in_sint16_le(s, x); in_sint16_le(s, y); in_uint16_le(s, bpp); Bpp = (bpp == 0) ? 3 : (bpp + 7) / 8; in_uint8a(s, cur_data, 32 * (32 * Bpp)); in_uint8a(s, cur_mask, 32 * (32 / 8)); rv = mod->server_set_cursor_ex(mod, x, y, cur_data, cur_mask, bpp); return rv; }
/* return error */ static int APP_CC process_server_draw_text(struct mod *mod, struct stream *s) { int rv; int font; int flags; int mixmode; int clip_left; int clip_top; int clip_right; int clip_bottom; int box_left; int box_top; int box_right; int box_bottom; int x; int y; int len_bmpdata; char *bmpdata; in_uint16_le(s, font); in_uint16_le(s, flags); in_uint16_le(s, mixmode); in_sint16_le(s, clip_left); in_sint16_le(s, clip_top); in_sint16_le(s, clip_right); in_sint16_le(s, clip_bottom); in_sint16_le(s, box_left); in_sint16_le(s, box_top); in_sint16_le(s, box_right); in_sint16_le(s, box_bottom); in_sint16_le(s, x); in_sint16_le(s, y); in_uint16_le(s, len_bmpdata); in_uint8p(s, bmpdata, len_bmpdata); rv = mod->server_draw_text(mod, font, flags, mixmode, clip_left, clip_top, clip_right, clip_bottom, box_left, box_top, box_right, box_bottom, x, y, bmpdata, len_bmpdata); return rv; }
/* return error */ static int APP_CC process_server_paint_rect_os(struct mod *mod, struct stream *s) { int rv; int x; int y; int cx; int cy; int rdpid; int srcx; int srcy; in_sint16_le(s, x); in_sint16_le(s, y); in_uint16_le(s, cx); in_uint16_le(s, cy); in_uint32_le(s, rdpid); in_sint16_le(s, srcx); in_sint16_le(s, srcy); rv = mod->server_paint_rect_os(mod, x, y, cx, cy, rdpid, srcx, srcy); return rv; }
/* return error */ static int APP_CC process_server_composite(struct mod *mod, struct stream *s) { int rv; int srcidx; int srcformat; int srcwidth; int srcrepeat; int transform[10]; int mskflags; int mskidx; int mskformat; int mskwidth; int mskrepeat; int op; int srcx; int srcy; int mskx; int msky; int dstx; int dsty; int width; int height; int dstformat; in_uint16_le(s, srcidx); in_uint32_le(s, srcformat); in_uint16_le(s, srcwidth); in_uint8(s, srcrepeat); g_memcpy(transform, s->p, 40); in_uint8s(s, 40); in_uint8(s, mskflags); in_uint16_le(s, mskidx); in_uint32_le(s, mskformat); in_uint16_le(s, mskwidth); in_uint8(s, mskrepeat); in_uint8(s, op); in_sint16_le(s, srcx); in_sint16_le(s, srcy); in_sint16_le(s, mskx); in_sint16_le(s, msky); in_sint16_le(s, dstx); in_sint16_le(s, dsty); in_uint16_le(s, width); in_uint16_le(s, height); in_uint32_le(s, dstformat); rv = mod->server_composite(mod, srcidx, srcformat, srcwidth, srcrepeat, transform, mskflags, mskidx, mskformat, mskwidth, mskrepeat, op, srcx, srcy, mskx, msky, dstx, dsty, width, height, dstformat); return rv; }
/* return error */ static int APP_CC process_server_paint_rect_shmem_ex(struct mod *amod, struct stream *s) { int num_drects; int num_crects; int flags; int frame_id; int shmem_id; int shmem_offset; int width; int height; int x; int y; int cx; int cy; int index; int rv; tsi16 *ldrects; tsi16 *ldrects1; tsi16 *lcrects; tsi16 *lcrects1; char *bmpdata; /* dirty pixels */ in_uint16_le(s, num_drects); ldrects = (tsi16 *) g_malloc(2 * 4 * num_drects, 0); ldrects1 = ldrects; for (index = 0; index < num_drects; index++) { in_sint16_le(s, ldrects1[0]); in_sint16_le(s, ldrects1[1]); in_sint16_le(s, ldrects1[2]); in_sint16_le(s, ldrects1[3]); ldrects1 += 4; } /* copied pixels */ in_uint16_le(s, num_crects); lcrects = (tsi16 *) g_malloc(2 * 4 * num_crects, 0); lcrects1 = lcrects; for (index = 0; index < num_crects; index++) { in_sint16_le(s, lcrects1[0]); in_sint16_le(s, lcrects1[1]); in_sint16_le(s, lcrects1[2]); in_sint16_le(s, lcrects1[3]); lcrects1 += 4; } in_uint32_le(s, flags); in_uint32_le(s, frame_id); in_uint32_le(s, shmem_id); in_uint32_le(s, shmem_offset); in_uint16_le(s, width); in_uint16_le(s, height); bmpdata = 0; if (flags == 0) /* screen */ { if (amod->screen_shmem_id == 0) { amod->screen_shmem_id = shmem_id; amod->screen_shmem_pixels = g_shmat(amod->screen_shmem_id); } if (amod->screen_shmem_pixels != 0) { bmpdata = amod->screen_shmem_pixels + shmem_offset; } } if (bmpdata != 0) { rv = amod->server_paint_rects(amod, num_drects, ldrects, num_crects, lcrects, bmpdata, width, height, 0); } else { rv = 1; } send_paint_rect_ex_ack(amod, flags, frame_id); g_free(lcrects); g_free(ldrects); return 0; }
/* return error */ int DEFAULT_CC lib_mod_signal(struct mod* mod) { struct stream* s; int num_orders; int index; int rv; int len; int type; int x; int y; int cx; int cy; int fgcolor; int opcode; int width; int height; int srcx; int srcy; int len_bmpdata; int style; int x1; int y1; int x2; int y2; char* bmpdata; char cur_data[32 * (32 * 3)]; char cur_mask[32 * (32 / 8)]; LIB_DEBUG(mod, "in lib_mod_signal"); make_stream(s); init_stream(s, 8192); rv = lib_recv(mod, s->data, 8); if (rv == 0) { in_uint16_le(s, type); in_uint16_le(s, num_orders); in_uint32_le(s, len); if (type == 1) { init_stream(s, len); rv = lib_recv(mod, s->data, len); if (rv == 0) { for (index = 0; index < num_orders; index++) { in_uint16_le(s, type); //g_writeln("-------------lib_mod_signal: type=%d",type); switch (type) { case 1: /* server_begin_update */ rv = mod->server_begin_update(mod); break; case 2: /* server_end_update */ rv = mod->server_end_update(mod); break; case 3: /* server_fill_rect */ in_sint16_le(s, x); in_sint16_le(s, y); in_uint16_le(s, cx); in_uint16_le(s, cy); rv = mod->server_fill_rect(mod, x, y, cx, cy); break; case 4: /* server_screen_blt */ in_sint16_le(s, x); in_sint16_le(s, y); in_uint16_le(s, cx); in_uint16_le(s, cy); in_sint16_le(s, srcx); in_sint16_le(s, srcy); rv = mod->server_screen_blt(mod, x, y, cx, cy, srcx, srcy); break; case 5: /* server_paint_rect */ in_sint16_le(s, x); in_sint16_le(s, y); in_uint16_le(s, cx); in_uint16_le(s, cy); in_uint32_le(s, len_bmpdata); in_uint8p(s, bmpdata, len_bmpdata); in_uint16_le(s, width); in_uint16_le(s, height); in_sint16_le(s, srcx); in_sint16_le(s, srcy); rv = mod->server_paint_rect(mod, x, y, cx, cy, bmpdata, width, height, srcx, srcy); break; case 10: /* server_set_clip */ in_sint16_le(s, x); in_sint16_le(s, y); in_uint16_le(s, cx); in_uint16_le(s, cy); rv = mod->server_set_clip(mod, x, y, cx, cy); break; case 11: /* server_reset_clip */ rv = mod->server_reset_clip(mod); break; case 12: /* server_set_fgcolor */ in_uint32_le(s, fgcolor); rv = mod->server_set_fgcolor(mod, fgcolor); break; case 14: in_uint16_le(s, opcode); rv = mod->server_set_opcode(mod, opcode); break; case 17: in_uint16_le(s, style); in_uint16_le(s, width); rv = mod->server_set_pen(mod, style, width); break; case 18: in_sint16_le(s, x1); in_sint16_le(s, y1); in_sint16_le(s, x2); in_sint16_le(s, y2); rv = mod->server_draw_line(mod, x1, y1, x2, y2); break; case 19: in_sint16_le(s, x); in_sint16_le(s, y); in_uint8a(s, cur_data, 32 * (32 * 3)); in_uint8a(s, cur_mask, 32 * (32 / 8)); rv = mod->server_set_cursor(mod, x, y, cur_data, cur_mask); break; default: rv = 1; break; } if (rv != 0) { break; } } } } } free_stream(s); LIB_DEBUG(mod, "out lib_mod_signal"); return rv; }