Пример #1
0
void Payload_Reject::deserialize(uint8_t* dataptr, size_t len)
{
   uint64_t typeLen;
   auto remaining = len;
   auto varintlen = get_varint(typeLen, dataptr, len);
   auto ptr = dataptr + varintlen;
   remaining -= (varintlen + typeLen + 1);

   string msgtype((char*)ptr, typeLen);
   auto typeIter = BitcoinP2P::strToPayload_.find(msgtype);
   if (typeIter == BitcoinP2P::strToPayload_.end())
      throw BitcoinMessageDeserError("unknown reject type");

   rejectType_ = typeIter->second;
   ptr += typeLen;

   code_ = (char)*ptr;
   ptr++;

   uint64_t reasonLen;
   varintlen = get_varint(reasonLen, ptr, len);
   ptr += varintlen;
   remaining -= (reasonLen + varintlen);

   reasonStr_ = move(string((char*)ptr, reasonLen));
   ptr += reasonLen;

   if (remaining == 32)
      extra_.resize(32);

   memcpy(&extra_[0], ptr, 32);
}
Пример #2
0
        bool CSmartFactory<FunctionIdEnum, MessageTypeEnum, StructIdEnum>::attachSchema(NsSmartDeviceLink::NsSmartObjects::SmartObject &object)
        {
            if(false == object.keyExists(strings::S_PARAMS)) return false;
            if(false == object[strings::S_PARAMS].keyExists(strings::S_MESSAGE_TYPE)) return false;
            if(false == object[strings::S_PARAMS].keyExists(strings::S_FUNCTION_ID)) return false;

            MessageTypeEnum msgtype((MessageTypeEnum)(int)object[strings::S_PARAMS][strings::S_MESSAGE_TYPE]);
            FunctionIdEnum fid((FunctionIdEnum)(int)object[strings::S_PARAMS][strings::S_FUNCTION_ID]);

            SmartSchemaKey<FunctionIdEnum, MessageTypeEnum> key(fid, msgtype);

            typename FuncionsSchemesMap::iterator schemaIterator = functions_schemes_.find(key);

            if(schemaIterator == functions_schemes_.end())
            {
                // Schema was not found
                return false;
            }

            object.setSchema(schemaIterator->second);
            schemaIterator->second.applySchema(object);

            return true;
        }