Ejemplo n.º 1
0
        void PropertyMap::fromStream(QDataStream& _is) {
            QString _hash;
            deserialize(_is,_hash);
            uint32_t _size = 0;
            _is >> _size;

            for (size_t i = 0; i < _size; ++i) {
                QString _propertyHash;
                QString _propertyId;
                QByteArray _propertyData;
                deserialize(_is,_propertyHash);
                deserialize(_is,_propertyId);
                deserialize(_is,_propertyData);
                properties_[_propertyId] = _propertyData;

                if (_propertyHash != makeChecksum(_propertyData)) {
                    throw exception::ChecksumError(_propertyHash, makeChecksum(
                                                       properties_), _propertyId);
                }
            }

            if (_hash != makeChecksum(properties_)) {
                throw exception::ChecksumError(_hash, makeChecksum(properties_));
            }
        }
Ejemplo n.º 2
0
 QString PropertyMap::makeChecksum(property_map const& _properties) {
         QString _merged;
         _merged += QString("%1").arg(_properties.size());
         for (auto& _property : _properties) {
             _merged += _property.first;
             _merged += makeChecksum(_property.second);
         }
         return makeChecksum(_merged);
 }
Ejemplo n.º 3
0
Boolean liethWrite(obj xpressnet, byte* outin, Boolean* rspexpected) {
  iOXpressNetData data = Data(xpressnet);

  int len = 0;
  Boolean ok = False;
  unsigned char out[256];

  *rspexpected = False;

  if( !data->enablecom ) {
    return 0;
  }

  if( data->socket == NULL ) {
    return 0;
  }

  ThreadOp.sleep( 50 );

  len = makeChecksum(outin);

  if( len == 0 ) {
    TraceOp.trc( "lieth", TRCLEVEL_WARNING, __LINE__, 9999, "zero bytes to write LI-ETH" );
    return False;
  }

  /* make extra header for LI-USB*/
  MemOp.copy( out+2, outin, len );

  len = len+2;
  out[0] = 0xFF;
  out[1] = 0xFE;

  if( data->dummyio ) {
    TraceOp.dump( NULL, TRCLEVEL_BYTE, (char*)out, len );
    *rspexpected = False;
    return True;
  }

  if( data->socket != NULL && !SocketOp.isBroken(data->socket) ) {
    TraceOp.trc( "lieth", TRCLEVEL_BYTE, __LINE__, 9999, "write to LI-ETH" );
    TraceOp.dump( NULL, TRCLEVEL_BYTE, (char*)out, len );
    ok = SocketOp.write( data->socket, (char*)out, len );
    data->lastcmd = time(NULL);
    if( ok ) {
      *rspexpected = True; /* LIUSB/ETH or CS will confirm every command */
    }
    else {
      TraceOp.trc( "lieth", TRCLEVEL_WARNING, __LINE__, 9999, "could not write to XpressNet" );
    }
  }

  return ok;
}
Ejemplo n.º 4
0
 QString PropertyMap::makeChecksum(QString const& _s) {
     return makeChecksum(_s.toLatin1());
 }