~freenx-team/nx-x11/nxcomp-upstream

« back to all changes in this revision

Viewing changes to CreateGC.h

  • Committer: Marcelo Boveto Shima
  • Date: 2009-03-28 22:24:56 UTC
  • Revision ID: mshima@ufserv-20090328222456-rdtaq3oedfyq890c
Import nxcomp 3.3.0-3

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/**************************************************************************/
 
2
/*                                                                        */
 
3
/* Copyright (c) 2001, 2007 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 NoMachine S.r.l.                    */
 
13
/*                                                                        */
 
14
/* All rights reserved.                                                   */
 
15
/*                                                                        */
 
16
/**************************************************************************/
 
17
 
 
18
#ifndef CreateGC_H
 
19
#define CreateGC_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 CREATEGC_ENABLE_CACHE               1
 
38
#define CREATEGC_ENABLE_DATA                0
 
39
#define CREATEGC_ENABLE_SPLIT               0
 
40
#define CREATEGC_ENABLE_COMPRESS            0
 
41
 
 
42
#define CREATEGC_DATA_LIMIT                 144
 
43
#define CREATEGC_DATA_OFFSET                16
 
44
 
 
45
#define CREATEGC_CACHE_SLOTS                2000
 
46
#define CREATEGC_CACHE_THRESHOLD            2
 
47
#define CREATEGC_CACHE_LOWER_THRESHOLD      1
 
48
 
 
49
//
 
50
// The message class.
 
51
//
 
52
 
 
53
class CreateGCMessage : public Message
 
54
{
 
55
  friend class CreateGCStore;
 
56
 
 
57
  public:
 
58
 
 
59
  CreateGCMessage()
 
60
  {
 
61
  }
 
62
 
 
63
  ~CreateGCMessage()
 
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 int gcontext;
 
75
  unsigned int drawable;
 
76
  unsigned int value_mask;
 
77
};
 
78
 
 
79
class CreateGCStore : public MessageStore
 
80
{
 
81
  //
 
82
  // Constructors and destructors.
 
83
  //
 
84
 
 
85
  public:
 
86
 
 
87
  CreateGCStore() : MessageStore()
 
88
  {
 
89
    enableCache    = CREATEGC_ENABLE_CACHE;
 
90
    enableData     = CREATEGC_ENABLE_DATA;
 
91
    enableSplit    = CREATEGC_ENABLE_SPLIT;
 
92
    enableCompress = CREATEGC_ENABLE_COMPRESS;
 
93
 
 
94
    dataLimit  = CREATEGC_DATA_LIMIT;
 
95
    dataOffset = CREATEGC_DATA_OFFSET;
 
96
 
 
97
    cacheSlots          = CREATEGC_CACHE_SLOTS;
 
98
    cacheThreshold      = CREATEGC_CACHE_THRESHOLD;
 
99
    cacheLowerThreshold = CREATEGC_CACHE_LOWER_THRESHOLD;
 
100
 
 
101
    messages_ -> resize(cacheSlots);
 
102
 
 
103
    for (T_messages::iterator i = messages_ -> begin();
 
104
             i < messages_ -> end(); i++)
 
105
    {
 
106
      *i = NULL;
 
107
    }
 
108
 
 
109
    temporary_ = NULL;
 
110
  }
 
111
 
 
112
  virtual ~CreateGCStore()
 
113
  {
 
114
    for (T_messages::iterator i = messages_ -> begin();
 
115
             i < messages_ -> end(); i++)
 
116
    {
 
117
      destroy(*i);
 
118
    }
 
119
 
 
120
    destroy(temporary_);
 
121
  }
 
122
 
 
123
  virtual const char *name() const
 
124
  {
 
125
    return "CreateGC";
 
126
  }
 
127
 
 
128
  virtual unsigned char opcode() const
 
129
  {
 
130
    return X_CreateGC;
 
131
  }
 
132
 
 
133
  virtual unsigned int storage() const
 
134
  {
 
135
    return sizeof(CreateGCMessage);
 
136
  }
 
137
 
 
138
  //
 
139
  // Message handling methods.
 
140
  //
 
141
 
 
142
  public:
 
143
 
 
144
  virtual Message *create() const
 
145
  {
 
146
    return new CreateGCMessage();
 
147
  }
 
148
 
 
149
  virtual Message *create(const Message &message) const
 
150
  {
 
151
    return new CreateGCMessage((const CreateGCMessage &) message);
 
152
  }
 
153
 
 
154
  virtual void destroy(Message *message) const
 
155
  {
 
156
    delete (CreateGCMessage *) message;
 
157
  }
 
158
 
 
159
  virtual int parseIdentity(Message *message, const unsigned char *buffer,
 
160
                                unsigned int size, int bigEndian) const;
 
161
 
 
162
  virtual int unparseIdentity(const Message *message, unsigned char *buffer,
 
163
                                  unsigned int size, int bigEndian) const;
 
164
 
 
165
  virtual void updateIdentity(EncodeBuffer &encodeBuffer, const Message *message,
 
166
                                  const Message *cachedMessage,
 
167
                                      ChannelCache *channelCache) const;
 
168
 
 
169
  virtual void updateIdentity(DecodeBuffer &decodeBuffer, const Message *message,
 
170
                                  ChannelCache *channelCache) const;
 
171
 
 
172
  virtual void identityChecksum(const Message *message, const unsigned char *buffer,
 
173
                                    unsigned int size, int bigEndian) const;
 
174
 
 
175
  virtual void dumpIdentity(const Message *message) const;
 
176
};
 
177
 
 
178
#endif /* CreateGC_H */