bool cookie::parse_attr(std::string& name, std::string& value) { const std::size_t name_hash = hash_(name); if (name_hash == domain_hash) { domain_.resize(name.size()); // lambda is required to build under gcc std::transform(name.cbegin(), name.cend(), domain_.begin(), [](int c){ return std::tolower(c); }); } else if (name_hash == path_hash) { path_.swap(value); } else if (name_hash == expires_hash) { if (expires_ == time_point::max()) { auto utime = time_from_string(value, "%a, %d-%b-%Y %T %Z"); if (utime == -1) return false; expires_ = time_point::clock::from_time_t(utime); } } else if (name_hash == max_age_hash) { expires_ = time_point::clock::now() + std::chrono::seconds(from_dec_string(value)); } else if (name_hash == secure_hash) { secure_ = true; } else if (name_hash == http_only_hash) { http_only_ = true; } return true; }
std::ptrdiff_t message_headers::content_length() const noexcept { // Find whether there is a content length field. auto content_length(find(header_field::id::CONTENT_LENGTH)); return (content_length.empty()) ? 0 : from_dec_string(content_length); }