bool Block::fromBuffer(const ConstBufferPtr& wire, size_t offset, Block& block) { Buffer::const_iterator tempBegin = wire->begin() + offset; uint32_t type; bool isOk = Tlv::readType(tempBegin, wire->end(), type); if (!isOk) return false; uint64_t length; isOk = Tlv::readVarNumber(tempBegin, wire->end(), length); if (!isOk) return false; if (length > static_cast<uint64_t>(wire->end() - tempBegin)) { return false; } block = Block(wire, type, wire->begin() + offset, tempBegin + length, tempBegin, tempBegin + length); return true; }
std::tuple<bool, Block> Block::fromBuffer(ConstBufferPtr buffer, size_t offset) { Buffer::const_iterator tempBegin = buffer->begin() + offset; uint32_t type; bool isOk = tlv::readType(tempBegin, buffer->end(), type); if (!isOk) return std::make_tuple(false, Block()); uint64_t length; isOk = tlv::readVarNumber(tempBegin, buffer->end(), length); if (!isOk) return std::make_tuple(false, Block()); if (length > static_cast<uint64_t>(buffer->end() - tempBegin)) return std::make_tuple(false, Block()); return std::make_tuple(true, Block(buffer, type, buffer->begin() + offset, tempBegin + length, tempBegin, tempBegin + length)); }