32 if (match_header ==
"*")
38 std::regex etag_rx(
"\\\"([0-9a-f]+)\\\",?\\s*");
39 auto etags_begin = std::sregex_iterator(
40 match_header.begin(), match_header.end(), etag_rx);
41 auto etags_end = std::sregex_iterator();
42 ssize_t last_matched = 0;
44 for (std::sregex_iterator i = etags_begin; i != etags_end; ++i)
46 if (i->position() != last_matched)
48 throw std::runtime_error(
"Invalid If-Match header");
50 std::smatch match = *i;
51 if_etags.insert(match[1].str());
52 last_matched = match.position() + match.length();
55 ssize_t last_index_in_header = match_header.size();
57 if (last_matched != last_index_in_header || if_etags.empty())
59 throw std::runtime_error(
"Invalid If-Match header");