X-Git-Url: https://git.sesse.net/?p=cubemap;a=blobdiff_plain;f=parse.cpp;h=c33543f3afc44b12ce1d16fa88a9616dd560b2c2;hp=f77af4a736a6c6d502a01ea09c3f6d8bde1fb8c2;hb=5b6002ffa927ae9987d978126fa7cc30067ac1f2;hpb=488f28bf7070f44469a006ed4a9d4c423788d175 diff --git a/parse.cpp b/parse.cpp index f77af4a..c33543f 100644 --- a/parse.cpp +++ b/parse.cpp @@ -1,9 +1,9 @@ #include -#include #include #include #include +#include "log.h" #include "parse.h" using namespace std; @@ -56,6 +56,32 @@ vector split_lines(const string &str) return ret; } +multimap extract_headers(const vector &lines, const string &log_context) +{ + multimap parameters; + for (size_t i = 1; i < lines.size(); ++i) { + size_t split = lines[i].find(":"); + if (split == string::npos) { + log(WARNING, "[%s] Ignoring malformed HTTP response line '%s'", + log_context.c_str(), lines[i].c_str()); + continue; + } + + string key(lines[i].begin(), lines[i].begin() + split); + + // Skip any spaces after the colon. + do { + ++split; + } while (split < lines[i].size() && lines[i][split] == ' '); + + string value(lines[i].begin() + split, lines[i].end()); + + parameters.insert(make_pair(key, value)); + } + + return parameters; +} + #define MAX_REQUEST_SIZE 16384 /* 16 kB. */ RequestParseStatus wait_for_double_newline(string *existing_data, const char *new_data, size_t new_data_size)