35 lines
1.2 KiB
C++
35 lines
1.2 KiB
C++
//
|
|
// Created by WolverinDEV on 22/05/2020.
|
|
//
|
|
|
|
#include <pipes/misc/http.h>
|
|
#include "HTTPUtils.h"
|
|
|
|
bool http::parse_url_parameters(const std::string_view &query, std::map<std::string, std::string>& result) {
|
|
const auto query_offset = query.find('?');
|
|
if(query_offset == std::string::npos) return false;
|
|
|
|
const auto query_end_offset = query.find('#', query_offset); /* fragment (if there is any) */
|
|
|
|
auto offset = query_offset + 1;
|
|
size_t next_param;
|
|
while(offset > 0) {
|
|
next_param = query.find('&', offset);
|
|
if(next_param >= query_end_offset)
|
|
next_param = query_end_offset;
|
|
|
|
if(offset >= next_param)
|
|
break;
|
|
|
|
/* parameter: [offset;next_param) */
|
|
const auto param_view = query.substr(offset, next_param - offset);
|
|
const auto assignment_index = param_view.find('=');
|
|
if(assignment_index == std::string::npos)
|
|
result[std::string{param_view}] = "";
|
|
else
|
|
result[std::string{param_view.substr(0, assignment_index)}] = http::decode_url(std::string{param_view.substr(assignment_index + 1)});
|
|
|
|
offset = next_param + 1;
|
|
}
|
|
return true;
|
|
} |