aboutsummaryrefslogtreecommitdiff
path: root/nxcomp/DecodeBuffer.h
diff options
context:
space:
mode:
authorReinhard Tartler <siretart@tauware.de>2011-11-13 09:27:51 +0100
committerReinhard Tartler <siretart@tauware.de>2011-11-13 09:27:51 +0100
commit3e924126b56c4d421e8263d25f6b14aa4ceed047 (patch)
tree921403de7b834fb1ac89f97d84ce105e0b487051 /nxcomp/DecodeBuffer.h
parenta840692edc9c6d19cd7c057f68e39c7d95eb767d (diff)
downloadnx-libs-3e924126b56c4d421e8263d25f6b14aa4ceed047.tar.gz
nx-libs-3e924126b56c4d421e8263d25f6b14aa4ceed047.tar.bz2
nx-libs-3e924126b56c4d421e8263d25f6b14aa4ceed047.zip
Imported nxcomp-3.1.0-4.tar.gznxcomp/3.1.0-4
Summary: Imported nxcomp-3.1.0-4.tar.gz Keywords: Imported nxcomp-3.1.0-4.tar.gz into Git repository
Diffstat (limited to 'nxcomp/DecodeBuffer.h')
-rwxr-xr-xnxcomp/DecodeBuffer.h142
1 files changed, 142 insertions, 0 deletions
diff --git a/nxcomp/DecodeBuffer.h b/nxcomp/DecodeBuffer.h
new file mode 100755
index 000000000..131a4e6fa
--- /dev/null
+++ b/nxcomp/DecodeBuffer.h
@@ -0,0 +1,142 @@
+/**************************************************************************/
+/* */
+/* Copyright (c) 2001, 2007 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 NoMachine S.r.l. */
+/* */
+/* All rights reserved. */
+/* */
+/**************************************************************************/
+
+#ifndef DecodeBuffer_H
+#define DecodeBuffer_H
+
+#include <string.h>
+
+#include "IntCache.h"
+#include "CharCache.h"
+#include "XidCache.h"
+#include "FreeCache.h"
+#include "OpcodeCache.h"
+#include "ActionCache.h"
+
+#include "ActionCacheCompat.h"
+#include "PositionCacheCompat.h"
+
+#define DECODE_BUFFER_OVERFLOW_SIZE 4194304
+
+#define DECODE_BUFFER_POSTFIX_SIZE 1
+
+class DecodeBuffer
+{
+ public:
+
+ DecodeBuffer(const unsigned char *data, unsigned int length);
+
+ ~DecodeBuffer()
+ {
+ }
+
+ int decodeValue(unsigned int &value, unsigned int numBits,
+ unsigned int blockSize = 0, int endOkay = 0);
+
+ int decodeCachedValue(unsigned int &value, unsigned int numBits,
+ IntCache &cache, unsigned int blockSize = 0,
+ int endOkay = 0);
+
+ int decodeCachedValue(unsigned char &value, unsigned int numBits,
+ CharCache &cache, unsigned int blockSize = 0,
+ int endOkay = 0);
+
+ void decodeDiffCachedValue(unsigned int &value, unsigned int &previous,
+ unsigned int numBits, IntCache &cache,
+ unsigned int blockSize = 0)
+ {
+ decodeCachedValue(value, numBits, cache, blockSize);
+
+ previous += (value + 1);
+ previous &= (0xffffffff >> (32 - numBits));
+
+ value = previous;
+ }
+
+ void decodeBoolValue(unsigned int &value)
+ {
+ decodeValue(value, 1);
+ }
+
+ int decodeOpcodeValue(unsigned char &value, OpcodeCache &cache, int endOkay = 0)
+ {
+ int result = decodeCachedValue(value, 8, cache.base_[cache.slot_], 8, endOkay);
+
+ if (result == 1)
+ {
+ cache.slot_ = value;
+ }
+
+ return result;
+ }
+
+ void decodeActionValue(unsigned char &value, unsigned short &position,
+ ActionCache &cache);
+
+ void decodeNewXidValue(unsigned int &value, unsigned int &lastId,
+ IntCache &lastIdCache, IntCache &cache,
+ FreeCache &freeCache);
+
+ void decodeNewXidValue(unsigned int &value, unsigned int &lastId,
+ IntCache &lastIdCache, XidCache &cache,
+ FreeCache &freeCache);
+
+ void decodeXidValue(unsigned int &value, XidCache &cache);
+
+ void decodeFreeXidValue(unsigned int &value, FreeCache &cache);
+
+ void decodeActionValueCompat(unsigned char &value, ActionCacheCompat &cache)
+ {
+ decodeCachedValue(value, 2, cache.base_[cache.slot_]);
+
+ cache.slot_ = value;
+ }
+
+ void decodePositionValueCompat(short int &value, PositionCacheCompat &cache);
+
+ void decodeTextData(unsigned char *buffer, unsigned int numBytes)
+ {
+ decodeMemory(buffer, numBytes);
+ }
+
+ void decodeIntData(unsigned char *buffer, unsigned int numBytes)
+ {
+ decodeMemory(buffer, numBytes);
+ }
+
+ void decodeLongData(unsigned char *buffer, unsigned int numBytes)
+ {
+ decodeMemory(buffer, numBytes);
+ }
+
+ const unsigned char *decodeMemory(unsigned int numBytes);
+
+ void decodeMemory(unsigned char *buffer, unsigned int numBytes)
+ {
+ memcpy(buffer, decodeMemory(numBytes), numBytes);
+ }
+
+ private:
+
+ const unsigned char *buffer_;
+ const unsigned char *end_;
+ const unsigned char *nextSrc_;
+
+ unsigned char srcMask_;
+};
+
+#endif /* DecodeBuffer_H */