PPPoE::vendor_spec_type PPPoE::vendor_spec_type::from_option(const tag& opt) { if (opt.data_size() < sizeof(uint32_t)) { throw malformed_option(); } vendor_spec_type output; InputMemoryStream stream(opt.data_ptr(), opt.data_size()); output.vendor_id = stream.read_be<uint32_t>(); stream.read(output.data, stream.size()); return output; }
PPPoE::vendor_spec_type PPPoE::vendor_spec_type::from_option(const tag &opt) { if(opt.data_size() < sizeof(uint32_t)) throw malformed_option(); vendor_spec_type output; std::memcpy(&output.vendor_id, opt.data_ptr(), sizeof(uint32_t)); output.vendor_id = Endian::be_to_host(output.vendor_id); output.data.assign( opt.data_ptr() + sizeof(uint32_t), opt.data_ptr() + opt.data_size() ); return output; }
void PPPoE::add_tag(const tag &option) { _tags_size += option.data_size() + sizeof(uint16_t) * 2; _tags.push_back(option); }
void PPPoE::add_tag(const tag& option) { tags_size_ += static_cast<uint16_t>(option.data_size() + sizeof(uint16_t) * 2); tags_.push_back(option); }