static Http::HeaderValueCollection CanonicalizeHeaders(Http::HeaderValueCollection&& headers) { Http::HeaderValueCollection canonicalHeaders; for (const auto& header : headers) { auto trimmedHeaderName = StringUtils::Trim(header.first.c_str()); auto trimmedHeaderValue = StringUtils::Trim(header.second.c_str()); //multiline gets converted to line1,line2,etc... auto headerMultiLine = StringUtils::SplitOnLine(trimmedHeaderValue); Aws::String headerValue = headerMultiLine[0]; if (headerMultiLine.size() > 1) { for(size_t i = 1; i < headerMultiLine.size(); ++i) { headerValue += ","; headerValue += StringUtils::Trim(headerMultiLine[i].c_str()); } } //duplicate spaces need to be converted to one. Aws::String::iterator new_end = std::unique(headerValue.begin(), headerValue.end(), [=](char lhs, char rhs) { return (lhs == rhs) && (lhs == ' '); } ); headerValue.erase(new_end, headerValue.end()); canonicalHeaders[trimmedHeaderName] = headerValue; } return canonicalHeaders; }
Aws::String StringUtils::ToUpper(const char* source) { Aws::String copy; size_t sourceLength = strlen(source); copy.resize(sourceLength); std::transform(source, source + sourceLength, copy.begin(), ::toupper); return std::move(copy); }