blob: 4673cecee9ede894ff944e7ea013350d85524724 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
/**************************************************************************/
/* */
/* Copyright (c) 2001, 2010 NoMachine, http://www.nomachine.com/. */
/* */
/* NXCOMP, NX protocol compression and NX extensions to this software */
/* are copyright of NoMachine. Redistribution and use of the present */
/* software is allowed according to terms specified in the file LICENSE */
/* which comes in the source distribution. */
/* */
/* Check http://www.nomachine.com/licensing.html for applicability. */
/* */
/* NX and NoMachine are trademarks of Medialogic S.p.A. */
/* */
/* All rights reserved. */
/* */
/**************************************************************************/
#ifndef WriteBuffer_H
#define WriteBuffer_H
#include "Misc.h"
#define PANIC
#define WARNING
#undef TEST
#undef DEBUG
#define WRITE_BUFFER_DEFAULT_SIZE 16384
//
// Adjust for the biggest reply that we could receive.
// This is likely to be a reply to a X_ListFonts where
// user has a large amount of installed fonts.
//
#define WRITE_BUFFER_OVERFLOW_SIZE 4194304
class WriteBuffer
{
public:
WriteBuffer();
~WriteBuffer();
void setSize(unsigned int initialSize, unsigned int thresholdSize,
unsigned int maximumSize);
unsigned char *addMessage(unsigned int numBytes);
unsigned char *removeMessage(unsigned int numBytes);
unsigned char *addScratchMessage(unsigned int numBytes);
//
// This form allows user to provide its own
// buffer as write buffer's scratch area.
//
unsigned char *addScratchMessage(unsigned char *newBuffer, unsigned int numBytes);
void removeScratchMessage();
void partialReset();
void fullReset();
unsigned char *getData() const
{
return buffer_;
}
unsigned int getLength() const
{
return length_;
}
unsigned int getAvailable() const
{
return (size_ - length_);
}
unsigned char *getScratchData() const
{
return scratchBuffer_;
}
unsigned int getScratchLength() const
{
return scratchLength_;
}
unsigned int getTotalLength() const
{
return (length_ + scratchLength_);
}
void registerPointer(unsigned char **pointer)
{
index_ = pointer;
}
void unregisterPointer()
{
index_ = 0;
}
private:
unsigned int size_;
unsigned int length_;
unsigned char *buffer_;
unsigned char **index_;
unsigned int scratchLength_;
unsigned char *scratchBuffer_;
int scratchOwner_;
unsigned int initialSize_;
unsigned int thresholdSize_;
unsigned int maximumSize_;
};
#endif /* WriteBuffer_H */
|