示例#1
0
    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;
    }
示例#2
0
 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);
 }