XRootD
XrdHttpHeaderUtils Class Reference

#include <XrdHttpHeaderUtils.hh>

+ Collaboration diagram for XrdHttpHeaderUtils:

Static Public Member Functions

static void parseReprDigest (const std::string &header, std::map< std::string, std::string > &output)
 

Detailed Description

Definition at line 29 of file XrdHttpHeaderUtils.hh.

Member Function Documentation

◆ parseReprDigest()

void XrdHttpHeaderUtils::parseReprDigest ( const std::string &  header,
std::map< std::string, std::string > &  output 
)
static

Definition at line 30 of file XrdHttpHeaderUtils.cc.

30  {
31  // Expected format per entry: <cksumType>=:<digestValue>:
32  std::vector<std::string> digestNameValuePairs;
33  XrdOucTUtils::splitString(digestNameValuePairs, header, ",");
34 
35  for (const auto &digestNameValue : digestNameValuePairs) {
36  std::string_view digestNameValueSV {digestNameValue};
37  auto equalPos = digestNameValueSV.find('=');
38  if (equalPos == std::string::npos || equalPos >= digestNameValueSV.size() - 1)
39  continue;
40 
41  std::string_view cksumTypeSV = digestNameValueSV.substr(0, equalPos);
42  XrdOucUtils::trim(cksumTypeSV);
43  if (cksumTypeSV.empty())
44  continue;
45 
46  std::string_view cksumValueInSV = digestNameValueSV.substr(equalPos + 1);
47  size_t beginCksumPos = cksumValueInSV.find(':');
48  size_t endCksumPos = cksumValueInSV.rfind(':');
49 
50  // Check that the string starts with ':' and contains two distinct colons
51  if (beginCksumPos == 0 && endCksumPos > beginCksumPos + 1 && endCksumPos < cksumValueInSV.size()) {
52  std::string_view cksumValue = cksumValueInSV.substr(beginCksumPos + 1, endCksumPos - beginCksumPos - 1);
53  XrdOucUtils::trim(cksumValue);
54  if (!cksumValue.empty())
55  output[std::string(cksumTypeSV)] = cksumValue;
56  }
57  // Malformed entries are silently ignored
58  }
59 }
static void splitString(Container &result, const std::string &input, const std::string &delimiter)
Split a string.
Definition: XrdOucTUtils.hh:51
static void trim(std::string &str)

References XrdOucTUtils::splitString(), and XrdOucUtils::trim().

+ Here is the call graph for this function:

The documentation for this class was generated from the following files: