/[rdesktop]/jpeg/rdesktop/trunk/rdp5.c
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Annotation of /jpeg/rdesktop/trunk/rdp5.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1507 - (hide annotations)
Mon Jul 20 16:45:11 2009 UTC (14 years, 10 months ago) by dpavlin
File MIME type: text/plain
File size: 2912 byte(s)
branch for integration of Daniel Jarboe <daniel.jarboe(at)gmail.com>
patches for jpeg
1 forsberg 343 /* -*- c-basic-offset: 8 -*-
2     rdesktop: A Remote Desktop Protocol client.
3 jdmeijer 895 Protocol services - RDP5 short form PDU processing
4 jsorg71 1475 Copyright (C) Matthew Chapman 1999-2008
5     Copyright (C) Erik Forsberg 2003-2008
6 jsorg71 713
7 forsberg 343 This program is free software; you can redistribute it and/or modify
8     it under the terms of the GNU General Public License as published by
9     the Free Software Foundation; either version 2 of the License, or
10     (at your option) any later version.
11 jsorg71 713
12 forsberg 343 This program is distributed in the hope that it will be useful,
13     but WITHOUT ANY WARRANTY; without even the implied warranty of
14     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15     GNU General Public License for more details.
16 jsorg71 713
17 forsberg 343 You should have received a copy of the GNU General Public License
18     along with this program; if not, write to the Free Software
19     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20     */
21    
22     #include "rdesktop.h"
23    
24 jsorg71 438 extern uint8 *g_next_packet;
25 forsberg 343
26 n-ki 687 extern RDPCOMP g_mppc_dict;
27    
28 forsberg 343 void
29 jsorg71 733 rdp5_process(STREAM s)
30 forsberg 343 {
31 forsberg 428 uint16 length, count, x, y;
32 n-ki 687 uint8 type, ctype;
33 forsberg 343 uint8 *next;
34    
35 n-ki 687 uint32 roff, rlen;
36     struct stream *ns = &(g_mppc_dict.ns);
37     struct stream *ts;
38    
39 forsberg 343 #if 0
40     printf("RDP5 data:\n");
41     hexdump(s->p, s->end - s->p);
42     #endif
43    
44 jsorg71 713 ui_begin_update();
45 forsberg 343 while (s->p < s->end)
46     {
47     in_uint8(s, type);
48 jdmeijer 889 if (type & RDP5_COMPRESSED)
49 n-ki 687 {
50     in_uint8(s, ctype);
51     in_uint16_le(s, length);
52 jdmeijer 889 type ^= RDP5_COMPRESSED;
53 n-ki 687 }
54     else
55     {
56     ctype = 0;
57     in_uint16_le(s, length);
58     }
59 jsorg71 438 g_next_packet = next = s->p + length;
60 forsberg 343
61 n-ki 687 if (ctype & RDP_MPPC_COMPRESSED)
62     {
63     if (mppc_expand(s->p, length, ctype, &roff, &rlen) == -1)
64     error("error while decompressing packet\n");
65    
66     /* allocate memory and copy the uncompressed data into the temporary stream */
67 jsorg71 711 ns->data = (uint8 *) xrealloc(ns->data, rlen);
68 n-ki 687
69     memcpy((ns->data), (unsigned char *) (g_mppc_dict.hist + roff), rlen);
70    
71     ns->size = rlen;
72     ns->end = (ns->data + ns->size);
73     ns->p = ns->data;
74     ns->rdp_hdr = ns->p;
75    
76     ts = ns;
77     }
78     else
79     ts = s;
80    
81 forsberg 343 switch (type)
82     {
83 jdmeijer 895 case 0: /* update orders */
84 n-ki 687 in_uint16_le(ts, count);
85     process_orders(ts, count);
86 forsberg 343 break;
87 jdmeijer 895 case 1: /* update bitmap */
88 n-ki 687 in_uint8s(ts, 2); /* part length */
89     process_bitmap_updates(ts);
90 forsberg 343 break;
91 jdmeijer 895 case 2: /* update palette */
92 n-ki 687 in_uint8s(ts, 2); /* uint16 = 2 */
93     process_palette(ts);
94 forsberg 343 break;
95 jdmeijer 895 case 3: /* update synchronize */
96 forsberg 343 break;
97 jdmeijer 905 case 5: /* null pointer */
98 astrand 508 ui_set_null_cursor();
99 forsberg 343 break;
100 jdmeijer 895 case 6: /* default pointer */
101 stargo 885 break;
102 jdmeijer 905 case 8: /* pointer position */
103 n-ki 687 in_uint16_le(ts, x);
104     in_uint16_le(ts, y);
105     if (s_check(ts))
106 forsberg 428 ui_move_pointer(x, y);
107     break;
108 jdmeijer 905 case 9: /* color pointer */
109 n-ki 687 process_colour_pointer_pdu(ts);
110 forsberg 343 break;
111 jdmeijer 905 case 10: /* cached pointer */
112 n-ki 687 process_cached_pointer_pdu(ts);
113 forsberg 343 break;
114     default:
115     unimpl("RDP5 opcode %d\n", type);
116     }
117    
118     s->p = next;
119     }
120 jsorg71 713 ui_end_update();
121 forsberg 343 }

  ViewVC Help
Powered by ViewVC 1.1.26