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;
 | 
						|
} |