ReactOS  0.4.14-dev-77-gd9e7c48
rdp5.c File Reference
#include "rdesktop.h"
Include dependency graph for rdp5.c:

Go to the source code of this file.

Functions

BOOL rdp5_process (RDPCLIENT *This, STREAM s)
 

Function Documentation

◆ rdp5_process()

BOOL rdp5_process ( RDPCLIENT This,
STREAM  s 
)

Definition at line 25 of file rdp5.c.

26 {
27  uint16 length, count, x, y;
28  uint8 type, ctype;
29  uint8 *next;
30 
31  uint32 roff, rlen;
32  struct stream *ns = &(This->mppc_dict.ns);
33  struct stream *ts;
34 
35 #if 0
36  printf("RDP5 data:\n");
37  hexdump(s->p, s->end - s->p);
38 #endif
39 
41  while (s->p < s->end)
42  {
43  in_uint8(s, type);
44  if (type & RDP5_COMPRESSED)
45  {
46  in_uint8(s, ctype);
49  }
50  else
51  {
52  ctype = 0;
54  }
55  This->next_packet = next = s->p + length;
56 
58  {
59  void * p;
60 
61  if (mppc_expand(This, s->p, length, ctype, &roff, &rlen) == -1)
62  error("error while decompressing packet\n");
63 
64  /* allocate memory and copy the uncompressed data into the temporary stream */
65  p = realloc(ns->data, rlen);
66 
67  if(p == NULL)
68  {
69  This->disconnect_reason = 262;
70  return False;
71  }
72 
73  ns->data = (uint8 *) p;
74 
75  memcpy((ns->data), (unsigned char *) (This->mppc_dict.hist + roff), rlen);
76 
77  ns->size = rlen;
78  ns->end = (ns->data + ns->size);
79  ns->p = ns->data;
80  ns->rdp_hdr = ns->p;
81 
82  ts = ns;
83  }
84  else
85  ts = s;
86 
87  switch (type)
88  {
89  case 0: /* update orders */
92  break;
93  case 1: /* update bitmap */
94  in_uint8s(ts, 2); /* part length */
96  break;
97  case 2: /* update palette */
98  in_uint8s(ts, 2); /* uint16 = 2 */
100  break;
101  case 3: /* update synchronize */
102  break;
103  case 5: /* null pointer */
105  break;
106  case 6: /* default pointer */
107  break;
108  case 8: /* pointer position */
109  in_uint16_le(ts, x);
110  in_uint16_le(ts, y);
111  if (s_check(ts))
112  ui_move_pointer(This, x, y);
113  break;
114  case 9: /* color pointer */
116  break;
117  case 10: /* cached pointer */
119  break;
120  default:
121  unimpl("RDP5 opcode %d\n", type);
122  }
123 
124  s->p = next;
125  }
127  return True;
128 }
#define realloc
Definition: debug_ros.c:6
void ui_begin_update(void)
Definition: uimain.c:657
#define RDP5_COMPRESSED
Definition: constants.h:360
#define RDP_MPPC_COMPRESSED
Definition: constants.h:355
#define error(str)
Definition: mkdosfs.c:1605
void process_orders(STREAM s, uint16 num_orders)
Definition: orders.c:1311
GLuint GLuint GLsizei count
Definition: gl.h:1545
unsigned int uint32
Definition: types.h:32
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
#define s_check(s)
Definition: parse.h:42
void ui_move_pointer(int x, int y)
Definition: uimain.c:616
void process_bitmap_updates(STREAM s)
Definition: rdp.c:1224
void ui_set_null_cursor(void)
Definition: uimain.c:227
static const char * ts(int t)
smooth NULL
Definition: ftsmooth.c:416
#define in_uint8s(s, n)
Definition: parse.h:91
int mppc_expand(uint8 *data, uint32 clen, uint8 ctype, uint32 *roff, uint32 *rlen)
Definition: mppc.c:58
#define True
Definition: types.h:24
#define False
Definition: types.h:25
Definition: _ctype.h:58
GLenum GLuint GLenum GLsizei length
Definition: glext.h:5579
unsigned char uint8
Definition: types.h:28
void process_palette(STREAM s)
Definition: rdp.c:1295
Definition: mxnamespace.c:44
Definition: parse.h:22
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
void process_colour_pointer_pdu(STREAM s)
Definition: rdp.c:1139
GLdouble s
Definition: gl.h:2039
void ui_end_update(void)
Definition: uimain.c:664
void hexdump(unsigned char *p, unsigned int len)
Definition: shimdbg.c:234
void process_cached_pointer_pdu(STREAM s)
Definition: rdp.c:1156
static unsigned __int64 next
Definition: rand_nt.c:6
unsigned short uint16
Definition: types.h:30
#define in_uint8(s, v)
Definition: parse.h:88
GLint GLint GLint GLint GLint GLint y
Definition: gl.h:1548
void unimpl(char *format,...)
Definition: uimain.c:801
GLfloat GLfloat p
Definition: glext.h:8902
#define in_uint16_le(s, v)
Definition: parse.h:55
#define printf
Definition: config.h:203