ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

parse.h
Go to the documentation of this file.
00001 /*
00002    rdesktop: A Remote Desktop Protocol client.
00003    Parsing primitives
00004    Copyright (C) Matthew Chapman 1999-2005
00005 
00006    This program is free software; you can redistribute it and/or modify
00007    it under the terms of the GNU General Public License as published by
00008    the Free Software Foundation; either version 2 of the License, or
00009    (at your option) any later version.
00010 
00011    This program is distributed in the hope that it will be useful,
00012    but WITHOUT ANY WARRANTY; without even the implied warranty of
00013    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00014    GNU General Public License for more details.
00015 
00016    You should have received a copy of the GNU General Public License along
00017    with this program; if not, write to the Free Software Foundation, Inc.,
00018    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
00019 */
00020 
00021 /* Parser state */
00022 typedef struct stream
00023 {
00024     unsigned char *p;
00025     unsigned char *end;
00026     unsigned char *data;
00027     unsigned int size;
00028 
00029     /* Offsets of various headers */
00030     unsigned char *iso_hdr;
00031     unsigned char *mcs_hdr;
00032     unsigned char *sec_hdr;
00033     unsigned char *rdp_hdr;
00034     unsigned char *channel_hdr;
00035 
00036 }
00037  *STREAM;
00038 
00039 #define s_push_layer(s,h,n) { (s)->h = (s)->p; (s)->p += n; }
00040 #define s_pop_layer(s,h)    (s)->p = (s)->h;
00041 #define s_mark_end(s)       (s)->end = (s)->p;
00042 #define s_check(s)      ((s)->p <= (s)->end)
00043 #define s_check_rem(s,n)    ((s)->p + n <= (s)->end)
00044 #define s_check_end(s)      ((s)->p == (s)->end)
00045 
00046 #if defined(L_ENDIAN) && !defined(NEED_ALIGN)
00047 #define in_uint16_le(s,v)   { v = *(uint16 *)((s)->p); (s)->p += 2; }
00048 #define in_uint32_le(s,v)   { v = *(uint32 *)((s)->p); (s)->p += 4; }
00049 #define out_uint16_le(s,v)  { *(uint16 *)((s)->p) = v; (s)->p += 2; }
00050 #define out_uint32_le(s,v)  { *(uint32 *)((s)->p) = v; (s)->p += 4; }
00051 
00052 #else
00053 #define in_uint16_le(s,v)   { v = *((s)->p++); v += *((s)->p++) << 8; }
00054 #define in_uint32_le(s,v)   { in_uint16_le(s,v) \
00055                 v += *((s)->p++) << 16; v += *((s)->p++) << 24; }
00056 #define out_uint16_le(s,v)  { *((s)->p++) = (v) & 0xff; *((s)->p++) = ((v) >> 8) & 0xff; }
00057 #define out_uint32_le(s,v)  { out_uint16_le(s, (v) & 0xffff); out_uint16_le(s, ((v) >> 16) & 0xffff); }
00058 #endif
00059 
00060 #if defined(B_ENDIAN) && !defined(NEED_ALIGN)
00061 #define in_uint16_be(s,v)   { v = *(uint16 *)((s)->p); (s)->p += 2; }
00062 #define in_uint32_be(s,v)   { v = *(uint32 *)((s)->p); (s)->p += 4; }
00063 #define out_uint16_be(s,v)  { *(uint16 *)((s)->p) = v; (s)->p += 2; }
00064 #define out_uint32_be(s,v)  { *(uint32 *)((s)->p) = v; (s)->p += 4; }
00065 
00066 #define B_ENDIAN_PREFERRED
00067 #define in_uint16(s,v)      in_uint16_be(s,v)
00068 #define in_uint32(s,v)      in_uint32_be(s,v)
00069 #define out_uint16(s,v)     out_uint16_be(s,v)
00070 #define out_uint32(s,v)     out_uint32_be(s,v)
00071 
00072 #else
00073 #define in_uint16_be(s,v)   { v = *((s)->p++); next_be(s,v); }
00074 #define in_uint32_be(s,v)   { in_uint16_be(s,v); next_be(s,v); next_be(s,v); }
00075 #define out_uint16_be(s,v)  { *((s)->p++) = ((v) >> 8) & 0xff; *((s)->p++) = (v) & 0xff; }
00076 #define out_uint32_be(s,v)  { out_uint16_be(s, ((v) >> 16) & 0xffff); out_uint16_be(s, (v) & 0xffff); }
00077 #endif
00078 
00079 #ifndef B_ENDIAN_PREFERRED
00080 #define in_uint16(s,v)      in_uint16_le(s,v)
00081 #define in_uint32(s,v)      in_uint32_le(s,v)
00082 #define out_uint16(s,v)     out_uint16_le(s,v)
00083 #define out_uint32(s,v)     out_uint32_le(s,v)
00084 #endif
00085 
00086 #define in_uint8(s,v)       v = *((s)->p++);
00087 #define in_uint8p(s,v,n)    { v = (s)->p; (s)->p += n; }
00088 #define in_uint8a(s,v,n)    { memcpy(v,(s)->p,n); (s)->p += n; }
00089 #define in_uint8s(s,n)      (s)->p += n;
00090 #define out_uint8(s,v)      *((s)->p++) = v;
00091 #define out_uint8p(s,v,n)   { memcpy((s)->p,v,n); (s)->p += n; }
00092 #define out_uint8a(s,v,n)   out_uint8p(s,v,n);
00093 #define out_uint8s(s,n)     { memset((s)->p,0,n); (s)->p += n; }
00094 
00095 #define next_be(s,v)        v = ((v) << 8) + *((s)->p++);

Generated on Sun May 27 2012 04:17:10 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.