/*----------------------------------------------------------------------------*/ /* Copyright (c) FIRST 2015. All Rights Reserved. */ /* Open Source Software - may be modified and shared by FRC teams. The code */ /* must be accompanied by the FIRST BSD license file in the root directory of */ /* the project. */ /*----------------------------------------------------------------------------*/ #ifndef HTTPUTIL_INL_ #define HTTPUTIL_INL_ namespace cs { template HttpRequest::HttpRequest(const HttpLocation& loc, const T& extraParams) : host{loc.host}, port{loc.port} { llvm::StringMap params; for (const auto& p : loc.params) params.insert(std::make_pair(GetFirst(p), GetSecond(p))); for (const auto& p : extraParams) params.insert(std::make_pair(GetFirst(p), GetSecond(p))); SetPath(loc.path, params); SetAuth(loc); } template void HttpRequest::SetPath(llvm::StringRef path_, const T& params) { // Build location including query string llvm::raw_svector_ostream pathOs{path}; pathOs << path_; bool first = true; for (const auto& param : params) { if (first) { pathOs << '?'; first = false; } else { pathOs << '&'; } llvm::SmallString<64> escapeBuf; pathOs << EscapeURI(GetFirst(param), escapeBuf); if (!GetSecond(param).empty()) { pathOs << '=' << EscapeURI(GetSecond(param), escapeBuf); } } } } // namespace cs #endif // HTTPUTIL_INL_