1 /**************************************************************************/
2 /*                                                                        */
3 /* Copyright (c) 2001, 2010 NoMachine, http://www.nomachine.com/.         */
4 /*                                                                        */
5 /* NXCOMP, NX protocol compression and NX extensions to this software     */
6 /* are copyright of NoMachine. Redistribution and use of the present      */
7 /* software is allowed according to terms specified in the file LICENSE   */
8 /* which comes in the source distribution.                                */
9 /*                                                                        */
10 /* Check http://www.nomachine.com/licensing.html for applicability.       */
11 /*                                                                        */
12 /* NX and NoMachine are trademarks of Medialogic S.p.A.                   */
13 /*                                                                        */
14 /* All rights reserved.                                                   */
15 /*                                                                        */
16 /**************************************************************************/
17 
18 #ifndef CreatePixmapCompat_H
19 #define CreatePixmapCompat_H
20 
21 #include "Message.h"
22 
23 //
24 // Set the verbosity level.
25 //
26 
27 #define PANIC
28 #define WARNING
29 #undef  TEST
30 #undef  DEBUG
31 #undef  DUMP
32 
33 //
34 // Set default values.
35 //
36 
37 #define CREATEPIXMAP_ENABLE_CACHE               1
38 #define CREATEPIXMAP_ENABLE_DATA                0
39 #define CREATEPIXMAP_ENABLE_SPLIT               0
40 #define CREATEPIXMAP_ENABLE_COMPRESS            0
41 
42 #define CREATEPIXMAP_DATA_LIMIT                 16
43 #define CREATEPIXMAP_DATA_OFFSET                16
44 
45 #define CREATEPIXMAP_CACHE_SLOTS                1000
46 #define CREATEPIXMAP_CACHE_THRESHOLD            2
47 #define CREATEPIXMAP_CACHE_LOWER_THRESHOLD      1
48 
49 //
50 // The message class.
51 //
52 
53 class CreatePixmapCompatMessage : public Message
54 {
55   friend class CreatePixmapCompatStore;
56 
57   public:
58 
CreatePixmapCompatMessage()59   CreatePixmapCompatMessage()
60   {
61   }
62 
~CreatePixmapCompatMessage()63   ~CreatePixmapCompatMessage()
64   {
65   }
66 
67   //
68   // Put here the fields which constitute
69   // the 'identity' part of the message.
70   //
71 
72   private:
73 
74   unsigned char depth;
75 
76   unsigned int id;
77   unsigned int drawable;
78 
79   unsigned short width;
80   unsigned short height;
81 };
82 
83 class CreatePixmapCompatStore : public MessageStore
84 {
85   public:
86 
87   CreatePixmapCompatStore();
88 
89   virtual ~CreatePixmapCompatStore();
90 
name()91   virtual const char *name() const
92   {
93     return "CreatePixmapCompat";
94   }
95 
opcode()96   virtual unsigned char opcode() const
97   {
98     return X_CreatePixmap;
99   }
100 
storage()101   virtual unsigned int storage() const
102   {
103     return sizeof(CreatePixmapCompatMessage);
104   }
105 
106   //
107   // Message handling methods.
108   //
109 
110   protected:
111 
create()112   virtual Message *create() const
113   {
114     return new CreatePixmapCompatMessage();
115   }
116 
create(const Message & message)117   virtual Message *create(const Message &message) const
118   {
119     return new CreatePixmapCompatMessage((const CreatePixmapCompatMessage &) message);
120   }
121 
destroy(Message * message)122   virtual void destroy(Message *message) const
123   {
124     delete (CreatePixmapCompatMessage *) message;
125   }
126 
127   virtual int encodeIdentity(EncodeBuffer &encodeBuffer, const unsigned char *buffer,
128                                  const unsigned int size, int bigEndian,
129                                      ChannelCache *channelCache) const;
130 
131   virtual int decodeIdentity(DecodeBuffer &decodeBuffer, unsigned char *&buffer,
132                                  unsigned int &size, int bigEndian, WriteBuffer *writeBuffer,
133                                      ChannelCache *channelCache) const;
134 
135   virtual int parseIdentity(Message *message, const unsigned char *buffer,
136                                 unsigned int size, int bigEndian) const;
137 
138   virtual int unparseIdentity(const Message *message, unsigned char *buffer,
139                                   unsigned int size, int bigEndian) const;
140 
141   virtual void updateIdentity(EncodeBuffer &encodeBuffer, const Message *message,
142                                   const Message *cachedMessage,
143                                       ChannelCache *channelCache) const;
144 
145   virtual void updateIdentity(DecodeBuffer &decodeBuffer, const Message *message,
146                                   ChannelCache *channelCache) const;
147 
148   virtual void identityChecksum(const Message *message, const unsigned char *buffer,
149                                     unsigned int size, int bigEndian) const;
150 
151   virtual void dumpIdentity(const Message *message) const;
152 };
153 
154 #endif /* CreatePixmapCompat_H */
155