int SetUnpackColormapCompatStore::decodeIdentity(DecodeBuffer &decodeBuffer, unsigned char *&buffer,
                                                     unsigned int &size, int bigEndian, WriteBuffer *writeBuffer,
                                                         ChannelCache *channelCache) const
{
  ClientCache *clientCache = (ClientCache *) channelCache;

  #ifdef DEBUG
  *logofs << name() << ": Decoding full message identity.\n" << logofs_flush;
  #endif

  unsigned int  value;
  unsigned char cValue;

  // Client.
  decodeBuffer.decodeCachedValue(cValue, 8,
                     clientCache -> resourceCache);
  // Entries.
  decodeBuffer.decodeValue(value, 32, 9);

  size = (value << 2) + 8;

  buffer = writeBuffer -> addMessage(size);

  *(buffer + 1) = cValue;

  PutULONG(value, buffer + 4, bigEndian);

  #ifdef DEBUG
  *logofs << name() << ": Decoded full message identity.\n" << logofs_flush;
  #endif

  return 1;
}
void SetUnpackColormapCompatStore::updateIdentity(DecodeBuffer &decodeBuffer, const Message *message,
                                                      ChannelCache *channelCache) const
{
  SetUnpackColormapCompatMessage *setUnpackColormap = (SetUnpackColormapCompatMessage *) message;

  ClientCache *clientCache = (ClientCache *) channelCache;

  unsigned int value;

  decodeBuffer.decodeCachedValue(setUnpackColormap -> client, 8,
                     clientCache -> resourceCache);

  #ifdef DEBUG
  *logofs << name() << ": Decoded value "
          << (unsigned int) setUnpackColormap -> client
          << " as client field.\n" << logofs_flush;
  #endif

  decodeBuffer.decodeBoolValue(value);

  if (value)
  {
    decodeBuffer.decodeValue(value, 32, 9);

    setUnpackColormap -> entries = value;

    #ifdef DEBUG
    *logofs << name() << ": Decoded value " << setUnpackColormap -> entries
            << " as entries field.\n" << logofs_flush;
    #endif
  }
}
Esempio n. 3
0
int GetPropertyReplyStore::decodeIdentity(DecodeBuffer &decodeBuffer, unsigned char *&buffer,
                                              unsigned int &size, int bigEndian, WriteBuffer *writeBuffer,
                                                  ChannelCache *channelCache) const
{
  ServerCache *serverCache = (ServerCache *) channelCache;

  #ifdef DEBUG
  *logofs << name() << ": Decoding full message identity.\n"
          << logofs_flush;
  #endif

  unsigned char format;

  decodeBuffer.decodeCachedValue(format, 8,
                     serverCache -> getPropertyFormatCache);

  unsigned int length;

  decodeBuffer.decodeValue(length, 32, 9);

  unsigned int numBytes = length;

  if (format == 16)
  {
    numBytes <<= 1;
  }
  else if (format == 32)
  {
    numBytes <<= 2;
  }

  size = 32 + RoundUp4(numBytes);

  buffer = writeBuffer -> addMessage(size);

  *(buffer + 1) = format;

  PutULONG(length, buffer + 16, bigEndian);

  unsigned int value;

  decodeBuffer.decodeCachedValue(value, 29,
                     serverCache -> getPropertyTypeCache, 9);

  PutULONG(value, buffer + 8, bigEndian);

  decodeBuffer.decodeValue(value, 32, 9);

  PutULONG(value, buffer + 12, bigEndian);

  #ifdef DEBUG
  *logofs << name() << ": Decoded full message identity.\n"
          << logofs_flush;
  #endif

  return 1;
}
Esempio n. 4
0
void ImageText16Store::updateIdentity(DecodeBuffer &decodeBuffer, const Message *message,
                                           ChannelCache *channelCache) const
{
  ImageText16Message *imageText16 = (ImageText16Message *) message;

  ClientCache *clientCache = (ClientCache *) channelCache;

  unsigned int value;

  decodeBuffer.decodeXidValue(value, clientCache -> drawableCache);

  imageText16 -> drawable = value;

  #ifdef DEBUG
  *logofs << name() << ": Decoded value " << imageText16 -> drawable
          << " as " << "drawable" << " field.\n" << logofs_flush;
  #endif

  decodeBuffer.decodeXidValue(value, clientCache -> gcCache);

  imageText16 -> gcontext = value;

  #ifdef DEBUG
  *logofs << name() << ": Decoded value " << imageText16 -> gcontext
          << " as gcontext field.\n" << logofs_flush;
  #endif

  decodeBuffer.decodeCachedValue(value, 16,
               clientCache -> imageTextCacheX);

  imageText16 -> x += value;
  imageText16 -> x &= 0xffff;

  #ifdef DEBUG
  *logofs << name() << ": Decoded value " << imageText16 -> x
          << " as x field.\n" << logofs_flush;
  #endif

  decodeBuffer.decodeCachedValue(value, 16,
               clientCache -> imageTextCacheY);

  imageText16 -> y += value;
  imageText16 -> y &= 0xffff;

  #ifdef DEBUG
  *logofs << name() << ": Decoded value " << imageText16 -> y
          << " as y field.\n" << logofs_flush;
  #endif
}
Esempio n. 5
0
int CreatePixmapStore::decodeIdentity(DecodeBuffer &decodeBuffer, unsigned char *&buffer,
                                          unsigned int &size, int bigEndian, WriteBuffer *writeBuffer,
                                              ChannelCache *channelCache) const
{
  ClientCache *clientCache = (ClientCache *) channelCache;

  unsigned char cValue;
  unsigned int  value;

  size = 16;

  buffer = writeBuffer -> addMessage(size);

  decodeBuffer.decodeCachedValue(cValue, 8,
                     clientCache -> depthCache);

  *(buffer + 1) = cValue;

  decodeBuffer.decodeNewXidValue(value,
                     clientCache -> lastId, clientCache -> lastIdCache,
                         clientCache -> drawableCache,
                             clientCache -> freeDrawableCache);

  PutULONG(value, buffer + 4, bigEndian);

  decodeBuffer.decodeXidValue(value,
                     clientCache -> windowCache);

  PutULONG(value, buffer + 8, bigEndian);

  decodeBuffer.decodeCachedValue(value, 16,
                     clientCache -> createPixmapXCache, 8);

  PutUINT(value, buffer + 12, bigEndian);

  decodeBuffer.decodeCachedValue(value, 16,
                     clientCache -> createPixmapYCache, 8);

  PutUINT(value, buffer + 14, bigEndian);

  #ifdef TEST
  *logofs << name() << ": Decoded message. Size is "
          << size << ".\n" << logofs_flush;
  #endif

  return 1;
}
Esempio n. 6
0
void FillPolyStore::updateIdentity(DecodeBuffer &decodeBuffer, const Message *message,
                                       ChannelCache *channelCache) const
{
  FillPolyMessage *fillPoly = (FillPolyMessage *) message;

  ClientCache *clientCache = (ClientCache *) channelCache;

  decodeBuffer.decodeXidValue(fillPoly -> drawable, clientCache -> drawableCache);

  #ifdef TEST
  *logofs << name() << ": Decoded value " << fillPoly -> drawable
          << " as drawable field.\n" << logofs_flush;
  #endif

  decodeBuffer.decodeXidValue(fillPoly -> gcontext, clientCache -> gcCache);

  #ifdef TEST
  *logofs << name() << ": Decoded value " << fillPoly -> gcontext
          << " as gcontext field.\n" << logofs_flush;
  #endif

  if (control -> isProtoStep8() == 1 &&
          fillPoly -> size_ >= dataOffset)
  {
    unsigned int value;

    decodeBuffer.decodeCachedValue(value, 16,
                 *clientCache -> fillPolyXAbsCache[0], 8);

    fillPoly -> x_origin = value;

    #ifdef TEST
    *logofs << name() << ": Decoded value " << fillPoly -> x_origin
            << " as x_origin field.\n" << logofs_flush;
    #endif

    decodeBuffer.decodeCachedValue(value, 16,
                 *clientCache -> fillPolyYAbsCache[0], 8);

    fillPoly -> y_origin = value;

    #ifdef TEST
    *logofs << name() << ": Decoded value " << fillPoly -> y_origin
            << " as y_origin field.\n" << logofs_flush;
    #endif
  }
}
Esempio n. 7
0
int SetUnpackColormapStore::decodeIdentity(DecodeBuffer &decodeBuffer, unsigned char *&buffer,
                                               unsigned int &size, int bigEndian, WriteBuffer *writeBuffer,
                                                   ChannelCache *channelCache) const
{
  ClientCache *clientCache = (ClientCache *) channelCache;

  #ifdef DEBUG
  *logofs << name() << ": Decoding full message identity.\n" << logofs_flush;
  #endif

  unsigned int  value;
  unsigned char cValue;

  // SrcLength.
  decodeBuffer.decodeValue(value, 32, 9);

  size = RoundUp4(value) + 16;

  buffer = writeBuffer -> addMessage(size);

  PutULONG(value, buffer + 8, bigEndian);

  // Client.
  decodeBuffer.decodeCachedValue(cValue, 8,
                     clientCache -> resourceCache);

  *(buffer + 1) = cValue;

  // Method.
  decodeBuffer.decodeCachedValue(cValue, 8,
                     clientCache -> methodCache);

  *(buffer + 4) = cValue;

  // DstLength.
  decodeBuffer.decodeValue(value, 32, 9);

  PutULONG(value, buffer + 12, bigEndian);

  #ifdef DEBUG
  *logofs << name() << ": Decoded full message identity.\n" << logofs_flush;
  #endif

  return 1;
}
Esempio n. 8
0
void SetUnpackColormapStore::updateIdentity(DecodeBuffer &decodeBuffer, const Message *message,
                                                ChannelCache *channelCache) const
{
  SetUnpackColormapMessage *setUnpackColormap = (SetUnpackColormapMessage *) message;

  ClientCache *clientCache = (ClientCache *) channelCache;

  decodeBuffer.decodeCachedValue(setUnpackColormap -> client, 8,
                     clientCache -> resourceCache);
}
Esempio n. 9
0
void CopyAreaStore::updateIdentity(DecodeBuffer &decodeBuffer, const Message *message,
                                       ChannelCache *channelCache) const
{
  CopyAreaMessage *copyArea = (CopyAreaMessage *) message;

  ClientCache *clientCache = (ClientCache *) channelCache;

  unsigned int value;

  decodeBuffer.decodeXidValue(value, clientCache -> drawableCache);

  copyArea -> src_drawable = value;

  #ifdef DEBUG
  *logofs << name() << ": Decoded value " << copyArea -> src_drawable
          << " as " << "src_drawable" << " field.\n" << logofs_flush;
  #endif

  decodeBuffer.decodeXidValue(value, clientCache -> drawableCache);

  copyArea -> dst_drawable = value;

  #ifdef DEBUG
  *logofs << name() << ": Decoded value " << copyArea -> dst_drawable
          << " as " << "dst_drawable" << " field.\n" << logofs_flush;
  #endif

  decodeBuffer.decodeXidValue(value, clientCache -> gcCache);

  copyArea -> gcontext = value;

  #ifdef DEBUG
  *logofs << name() << ": Decoded value " << copyArea -> gcontext
          << " as gcontext field.\n" << logofs_flush;
  #endif
}
Esempio n. 10
0
void SetClipRectanglesStore::updateIdentity(DecodeBuffer &decodeBuffer, const Message *message,
        ChannelCache *channelCache) const
{
    SetClipRectanglesMessage *setClipRectangles = (SetClipRectanglesMessage *) message;

    ClientCache *clientCache = (ClientCache *) channelCache;

    unsigned int value;

    decodeBuffer.decodeXidValue(value, clientCache -> gcCache);

    setClipRectangles -> gcontext = value;

#ifdef DEBUG
    *logofs << name() << ": Decoded value " << setClipRectangles -> gcontext
            << " as gcontext field.\n" << logofs_flush;
#endif
}
Esempio n. 11
0
void ChangePropertyStore::updateIdentity(DecodeBuffer &decodeBuffer, const Message *message,
                                             ChannelCache *channelCache) const
{
  ChangePropertyMessage *changeProperty = (ChangePropertyMessage *) message;

  ClientCache *clientCache = (ClientCache *) channelCache;

  unsigned int value;

  decodeBuffer.decodeXidValue(value, clientCache -> windowCache);

  changeProperty -> window = value;

  #ifdef DEBUG
  *logofs << name() << ": Decoded value " << changeProperty -> window
          << " as window field.\n" << logofs_flush;
  #endif
}
Esempio n. 12
0
void GetImageStore::updateIdentity(DecodeBuffer &decodeBuffer, const Message *message,
                                       ChannelCache *channelCache) const
{
  GetImageMessage *getImage = (GetImageMessage *) message;

  ClientCache *clientCache = (ClientCache *) channelCache;

  unsigned int value;

  decodeBuffer.decodeXidValue(value, clientCache -> drawableCache);

  getImage -> drawable = value;

  #ifdef DEBUG
  *logofs << name() << ": Decoded value " << getImage -> drawable
          << " as drawable field.\n" << logofs_flush;
  #endif
}
Esempio n. 13
0
void CreatePixmapStore::updateIdentity(DecodeBuffer &decodeBuffer, const Message *message,
                                           ChannelCache *channelCache) const
{
  CreatePixmapMessage *createPixmap = (CreatePixmapMessage *) message;

  ClientCache *clientCache = (ClientCache *) channelCache;

  decodeBuffer.decodeNewXidValue(createPixmap -> id,
                     clientCache -> lastId, clientCache -> lastIdCache,
                         clientCache -> drawableCache,
                             clientCache -> freeDrawableCache);

  #ifdef TEST
  *logofs << name() << ": Decoded update. Size is "
          << createPixmap -> size_ << " identity is "
          << createPixmap -> i_size_ << ".\n"
          << logofs_flush;
  #endif
}
Esempio n. 14
0
int StaticCompressor::decompressBuffer(unsigned char *plainBuffer,
                                           unsigned int plainSize,
                                               const unsigned char *&compressedBuffer,
                                                   unsigned int &compressedSize,
                                                       DecodeBuffer &decodeBuffer)
{
  #ifdef DEBUG
  *logofs << "StaticCompressor: Called for buffer at "
          << (void *) plainBuffer << ".\n"
          << logofs_flush;
  #endif

  unsigned int value;

  decodeBuffer.decodeBoolValue(value);

  if (value == 0)
  {
    memcpy(plainBuffer,
               decodeBuffer.decodeMemory(plainSize),
                   plainSize);

    return 0;
  }

  unsigned int checkSize = plainSize;

  decodeBuffer.decodeValue(value, 32, 14);
  compressedSize = value;

  decodeBuffer.decodeValue(value, 32, 14);
  checkSize = value;

  //
  // If caller needs the original compressed
  // data it must copy this to its own buffer
  // before using any further decode function.
  //

  compressedBuffer = decodeBuffer.decodeMemory(compressedSize);

  int result = ZDecompress(&decompressionStream_, plainBuffer, &checkSize,
                               compressedBuffer, compressedSize);

  if (result != Z_OK)
  {
    #ifdef PANIC
    *logofs << "StaticCompressor: PANIC! Failure decompressing buffer. "
            << "Error is '" << zError(result) << "'.\n"
            << logofs_flush;
    #endif

    cerr << "Error" << ": Failure decompressing buffer. "
         << "Error is '" << zError(result) << "'.\n";

    return -1;
  }
  else if (plainSize != checkSize)
  {
    #ifdef PANIC
    *logofs << "StaticCompressor: PANIC! Expected decompressed size was "
            << plainSize << " while it is " << checkSize 
            << ".\n" << logofs_flush;
    #endif

    cerr << "Error" << ": Expected decompressed size was "
         << plainSize << " while it is " << checkSize
         << ".\n";

    return -1;
  }

  return 1;
}
Esempio n. 15
0
void SendEventStore::updateIdentity(DecodeBuffer &decodeBuffer, const Message *message,
                                        ChannelCache *channelCache) const
{
  SendEventMessage *sendEvent = (SendEventMessage *) message;

  ClientCache *clientCache = (ClientCache *) channelCache;

  unsigned int  value;

  decodeBuffer.decodeBoolValue(value);

  sendEvent -> propagate = value;

  #ifdef DEBUG
  *logofs << name() << ": Decoded value " << (unsigned int) sendEvent -> propagate
          << " as propagate field.\n" << logofs_flush;
  #endif

  decodeBuffer.decodeBoolValue(value);

  if (value)
  {
    decodeBuffer.decodeBoolValue(value);
  }
  else
  {
    decodeBuffer.decodeXidValue(value, clientCache -> windowCache);
  }

  sendEvent -> window = value;

  #ifdef DEBUG
  *logofs << name() << ": Decoded value " << sendEvent -> window
          << " as window field.\n" << logofs_flush;
  #endif

  decodeBuffer.decodeCachedValue(sendEvent -> mask, 32,
                     clientCache -> sendEventMaskCache);

  #ifdef DEBUG
  *logofs << name() << ": Decoded value " << sendEvent -> mask
          << " as mask field.\n" << logofs_flush;
  #endif

  decodeBuffer.decodeCachedValue(sendEvent -> code, 8,
                     clientCache -> sendEventCodeCache);

  #ifdef DEBUG
  *logofs << name() << ": Decoded value " << sendEvent -> code
          << " as code field.\n" << logofs_flush;
  #endif

  decodeBuffer.decodeCachedValue(sendEvent -> byte_data, 8,
                     clientCache -> sendEventByteDataCache);

  #ifdef DEBUG
  *logofs << name() << ": Decoded value " << sendEvent -> byte_data
          << " as byte_data field.\n" << logofs_flush;
  #endif

  decodeBuffer.decodeValue(value, 16, 4);

  clientCache -> sendEventLastSequence += value;
  clientCache -> sendEventLastSequence &= 0xffff;

  sendEvent -> sequence = clientCache -> sendEventLastSequence;

  #ifdef DEBUG
  *logofs << name() << ": Decoded value " << sendEvent -> sequence
          << " as sequence field.\n" << logofs_flush;
  #endif

  decodeBuffer.decodeCachedValue(sendEvent -> int_data, 32,
                     clientCache -> sendEventIntDataCache);

  #ifdef DEBUG
  *logofs << name() << ": Decoded value " << sendEvent -> int_data
          << " as int_data field.\n" << logofs_flush;
  #endif
}