/[rdesktop]/sourceforge.net/trunk/rdesktop/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 /sourceforge.net/trunk/rdesktop/rdp5.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 733 - (hide annotations)
Mon Jul 5 19:09:07 2004 UTC (19 years, 11 months ago) by jsorg71
File MIME type: text/plain
File size: 2962 byte(s)
bring the rdp5 packets through the various layers

1 forsberg 343 /* -*- c-basic-offset: 8 -*-
2     rdesktop: A Remote Desktop Protocol client.
3     Protocol services - Multipoint Communications Service
4     Copyright (C) Matthew Chapman 1999-2002
5     Copyright (C) Erik Forsberg 2003
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 n-ki 687 if (type & RDP_COMPRESSION)
49     {
50     in_uint8(s, ctype);
51     in_uint16_le(s, length);
52     type ^= RDP_COMPRESSION;
53     }
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    
64     if (mppc_expand(s->p, length, ctype, &roff, &rlen) == -1)
65     error("error while decompressing packet\n");
66    
67     /* allocate memory and copy the uncompressed data into the temporary stream */
68 jsorg71 711 ns->data = (uint8 *) xrealloc(ns->data, rlen);
69 n-ki 687
70     memcpy((ns->data), (unsigned char *) (g_mppc_dict.hist + roff), rlen);
71    
72     ns->size = rlen;
73     ns->end = (ns->data + ns->size);
74     ns->p = ns->data;
75     ns->rdp_hdr = ns->p;
76    
77     ts = ns;
78     }
79     else
80     ts = s;
81    
82 forsberg 343 switch (type)
83     {
84 astrand 435 /* Thanks to Jeroen Meijer <jdmeijer at yahoo
85     dot com> for finding out the meaning of
86     most of the opcodes here. Especially opcode
87     8! :) */
88 forsberg 343 case 0: /* orders */
89 n-ki 687 in_uint16_le(ts, count);
90     process_orders(ts, count);
91 forsberg 343 break;
92     case 1: /* bitmap update (???) */
93 n-ki 687 in_uint8s(ts, 2); /* part length */
94     process_bitmap_updates(ts);
95 forsberg 343 break;
96     case 2: /* palette */
97 n-ki 687 in_uint8s(ts, 2); /* uint16 = 2 */
98     process_palette(ts);
99 forsberg 343 break;
100 forsberg 411 case 3: /* probably an palette with offset 3. Weird */
101 forsberg 343 break;
102     case 5:
103 astrand 508 ui_set_null_cursor();
104 forsberg 343 break;
105 astrand 435 case 8:
106 n-ki 687 in_uint16_le(ts, x);
107     in_uint16_le(ts, y);
108     if (s_check(ts))
109 forsberg 428 ui_move_pointer(x, y);
110     break;
111 forsberg 343 case 9:
112 n-ki 687 process_colour_pointer_pdu(ts);
113 forsberg 343 break;
114     case 10:
115 n-ki 687 process_cached_pointer_pdu(ts);
116 forsberg 343 break;
117     default:
118     unimpl("RDP5 opcode %d\n", type);
119     }
120    
121     s->p = next;
122     }
123 jsorg71 713 ui_end_update();
124 forsberg 343 }

  ViewVC Help
Powered by ViewVC 1.1.26