XRootD
Loading...
Searching...
No Matches
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.
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: