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); }
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; }