/[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 713 - (hide annotations)
Wed Jun 16 03:08:55 2004 UTC (19 years, 11 months ago) by jsorg71
Original Path: sourceforge.net/trunk/rdesktop/rdp5.c
File MIME type: text/plain
File size: 3074 byte(s)
added ui_begin/end_update and rdp_loop for ports

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 matthewc 423 rdp5_process(STREAM s, BOOL encryption)
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 (encryption)
40     {
41 matthewc 423 in_uint8s(s, 8); /* signature */
42 forsberg 343 sec_decrypt(s->p, s->end - s->p);
43     }
44    
45     #if 0
46     printf("RDP5 data:\n");
47     hexdump(s->p, s->end - s->p);
48     #endif
49    
50 jsorg71 713 ui_begin_update();
51 forsberg 343 while (s->p < s->end)
52     {
53     in_uint8(s, type);
54 n-ki 687 if (type & RDP_COMPRESSION)
55     {
56     in_uint8(s, ctype);
57     in_uint16_le(s, length);
58     type ^= RDP_COMPRESSION;
59     }
60     else
61     {
62     ctype = 0;
63     in_uint16_le(s, length);
64     }
65 jsorg71 438 g_next_packet = next = s->p + length;
66 forsberg 343
67 n-ki 687 if (ctype & RDP_MPPC_COMPRESSED)
68     {
69    
70     if (mppc_expand(s->p, length, ctype, &roff, &rlen) == -1)
71     error("error while decompressing packet\n");
72    
73     /* allocate memory and copy the uncompressed data into the temporary stream */
74 jsorg71 711 ns->data = (uint8 *) xrealloc(ns->data, rlen);
75 n-ki 687
76     memcpy((ns->data), (unsigned char *) (g_mppc_dict.hist + roff), rlen);
77    
78     ns->size = rlen;
79     ns->end = (ns->data + ns->size);
80     ns->p = ns->data;
81     ns->rdp_hdr = ns->p;
82    
83     ts = ns;
84     }
85     else
86     ts = s;
87    
88 forsberg 343 switch (type)
89     {
90 astrand 435 /* Thanks to Jeroen Meijer <jdmeijer at yahoo
91     dot com> for finding out the meaning of
92     most of the opcodes here. Especially opcode
93     8! :) */
94 forsberg 343 case 0: /* orders */
95 n-ki 687 in_uint16_le(ts, count);
96     process_orders(ts, count);
97 forsberg 343 break;
98     case 1: /* bitmap update (???) */
99 n-ki 687 in_uint8s(ts, 2); /* part length */
100     process_bitmap_updates(ts);
101 forsberg 343 break;
102     case 2: /* palette */
103 n-ki 687 in_uint8s(ts, 2); /* uint16 = 2 */
104     process_palette(ts);
105 forsberg 343 break;
106 forsberg 411 case 3: /* probably an palette with offset 3. Weird */
107 forsberg 343 break;
108     case 5:
109 astrand 508 ui_set_null_cursor();
110 forsberg 343 break;
111 astrand 435 case 8:
112 n-ki 687 in_uint16_le(ts, x);
113     in_uint16_le(ts, y);
114     if (s_check(ts))
115 forsberg 428 ui_move_pointer(x, y);
116     break;
117 forsberg 343 case 9:
118 n-ki 687 process_colour_pointer_pdu(ts);
119 forsberg 343 break;
120     case 10:
121 n-ki 687 process_cached_pointer_pdu(ts);
122 forsberg 343 break;
123     default:
124     unimpl("RDP5 opcode %d\n", type);
125     }
126    
127     s->p = next;
128     }
129 jsorg71 713 ui_end_update();
130 forsberg 343 }

  ViewVC Help
Powered by ViewVC 1.1.26