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

Diff of /sourceforge.net/trunk/rdesktop/parse.h

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 9 by matty, Tue Jul 25 12:34:29 2000 UTC revision 10 by matty, Tue Aug 15 10:23:24 2000 UTC
# Line 1  Line 1 
1  /*  /*
2     rdesktop: A Remote Desktop Protocol client.     rdesktop: A Remote Desktop Protocol client.
3     Protocol services - parsing layer     Parsing primitives
4     Copyright (C) Matthew Chapman 1999-2000     Copyright (C) Matthew Chapman 1999-2000
5        
6     This program is free software; you can redistribute it and/or modify     This program is free software; you can redistribute it and/or modify
# Line 21  Line 21 
21  /* Parser state */  /* Parser state */
22  typedef struct stream  typedef struct stream
23  {  {
24          /* Parsing layer */          unsigned char *p;
25            unsigned char *end;
26          unsigned char *data;          unsigned char *data;
27          unsigned int size;          unsigned int size;
28          unsigned int offset;  
29          unsigned int end;          /* Offsets of various headers */
30          BOOL marshall;          unsigned char *iso_hdr;
31          BOOL error;          unsigned char *mcs_hdr;
32            unsigned char *sec_hdr;
33          /* Other layers */          unsigned char *rdp_hdr;
         int iso_offset;  
         int mcs_offset;  
         int rdp_offset;  
34    
35  } *STREAM;  } *STREAM;
36    
37  /* Connection state */  #define s_push_layer(s,h,n)     { (s)->h = (s)->p; (s)->p += n; }
38  typedef struct connection  #define s_pop_layer(s,h)        (s)->p = (s)->h;
39  {  #define s_mark_end(s)           (s)->end = (s)->p;
40          /* User interface */  #define s_check(s)              ((s)->p <= (s)->end)
41          HWINDOW wnd;  #define s_check_rem(s,n)        ((s)->p + n <= (s)->end)
42          HBITMAP bmpcache[3][600];  #define s_check_end(s)          ((s)->p == (s)->end)
43          FONT_GLYPH fontcache[12][256];  
44          BLOB textcache[256];  #if defined(L_ENDIAN) && !defined(NEED_ALIGN)
45          uint8 deskcache[0x38400];  #define in_uint16_le(s,v)       { v = *(uint16 *)((s)->p); (s)->p += 2; }
46    #define in_uint32_le(s,v)       { v = *(uint32 *)((s)->p); (s)->p += 4; }
47          /* Parsing layer */  #define out_uint16_le(s,v)      { *(uint16 *)((s)->p) = v; (s)->p += 2; }
48          struct stream in;  #define out_uint32_le(s,v)      { *(uint32 *)((s)->p) = v; (s)->p += 4; }
49          struct stream out;  
50    #else
51          /* TCP layer */  #define in_uint16_le(s,v)       { v = *((s)->p++); v += *((s)->p++) << 8; }
52          int tcp_socket;  #define in_uint32_le(s,v)       { in_uint16_le(s,v) \
53                                    v += *((s)->p++) << 16; v += *((s)->p++) << 24; }
54          /* MCS layer */  #define out_uint16_le(s,v)      { *((s)->p++) = (v) & 0xff; *((s)->p++) = ((v) >> 8) & 0xff; }
55          uint16 mcs_userid;  #define out_uint32_le(s,v)      { out_uint16_le(s, (v) & 0xffff); out_uint16_le(s, ((v) >> 16) & 0xffff); }
56    #endif
57  } *HCONN;  
58    #if defined(B_ENDIAN) && !defined(NEED_ALIGN)
59  #define STREAM_INIT(s,m)   { s.data = xmalloc(2048); s.end = s.size = 2048; s.offset = 0; s.marshall = m; s.error = False; }  #define in_uint16_be(s,v)       { v = *(uint16 *)((s)->p); (s)->p += 2; }
60  #define STREAM_SIZE(s,l)   { if (l > s.size) { s.data = xrealloc(s.data,l); s.end = s.size = l; } }  #define in_uint32_be(s,v)       { v = *(uint32 *)((s)->p); (s)->p += 4; }
61  #define REMAINING(s)       ( s->end - s->offset )  #define out_uint16_be(s,v)      { *(uint16 *)((s)->p) = v; (s)->p += 2; }
62  #define PUSH_LAYER(s,v,l)  { s.v = s.offset; s.offset += l; }  #define out_uint32_be(s,v)      { *(uint32 *)((s)->p) = v; (s)->p += 4; }
63  #define POP_LAYER(s,v)     { s.offset = s.v; }  
64  #define MARK_END(s)        { s.end = s.offset; }  #define B_ENDIAN_PREFERRED
65  #define PRS_ERROR(s)       (!(s)->error)  #define in_uint16(s,v)          in_uint16_be(s,v)
66    #define in_uint32(s,v)          in_uint32_be(s,v)
67    #define out_uint16(s,v)         out_uint16_be(s,v)
68    #define out_uint32(s,v)         out_uint32_be(s,b)
69    
70    #else
71    #define next_be(s,v)            v = ((v) << 8) + *((s)->p++);
72    #define in_uint16_be(s,v)       { v = *((s)->p++); next_be(s,v); }
73    #define in_uint32_be(s,v)       { in_uint16_be(s,v); next_be(s,v); next_be(s,v); }
74    #define out_uint16_be(s,v)      { *((s)->p++) = ((v) >> 8) & 0xff; *((s)->p++) = (v) & 0xff; }
75    #define out_uint32_be(s,v)      { out_uint16_be(s, ((v) >> 16) & 0xffff); out_uint16_be(s, (v) & 0xffff); }
76    #endif
77    
78    #ifndef B_ENDIAN_PREFERRED
79    #define in_uint16(s,v)          in_uint16_le(s,v)
80    #define in_uint32(s,v)          in_uint32_le(s,v)
81    #define out_uint16(s,v)         out_uint16_le(s,v)
82    #define out_uint32(s,v)         out_uint32_le(s,v)
83    #endif
84    
85    #define in_uint8(s,v)           v = *((s)->p++);
86    #define in_uint8p(s,v,n)        { v = (s)->p; (s)->p += n; }
87    #define in_uint8a(s,v,n)        { memcpy(v,(s)->p,n); (s)->p += n; }
88    #define in_uint8s(s,n)          (s)->p += n;
89    #define out_uint8(s,v)          *((s)->p++) = v;
90    #define out_uint8p(s,v,n)       { memcpy((s)->p,v,n); (s)->p += n; }
91    #define out_uint8a(s,v,n)       out_uint8p(s,v,n);
92    #define out_uint8s(s,n)         { memset((s)->p,0,n); (s)->p += n; }

Legend:
Removed from v.9  
changed lines
  Added in v.10

  ViewVC Help
Powered by ViewVC 1.1.26