Sane C++ Libraries
C++ Platform Abstraction Libraries
Loading...
Searching...
No Matches
HttpURLParser.h
1// Copyright (c) Stefano Cristiano
2// SPDX-License-Identifier: MIT
3#pragma once
4#include "../Foundation/Result.h"
5#include "../Foundation/StringSpan.h"
6#include "HttpExport.h"
7
8namespace SC
9{
12
14struct SC_HTTP_EXPORT HttpURLQueryItem
15{
16 StringSpan name;
17 StringSpan value;
18 bool hasValue = false;
19};
20
22struct SC_HTTP_EXPORT HttpURLQueryIterator
23{
24 explicit HttpURLQueryIterator(StringSpan search);
25
26 bool next(HttpURLQueryItem& item);
27
28 private:
29 StringSpan search;
30 size_t cursor = 0;
31};
32
34struct SC_HTTP_EXPORT HttpFormUrlEncodedIterator
35{
37
38 bool next(HttpURLQueryItem& item);
39
40 private:
41 StringSpan body;
42 size_t cursor = 0;
43};
44
46SC_HTTP_EXPORT Result HttpPercentDecode(StringSpan input, Span<char> storage, StringSpan& output);
47
49SC_HTTP_EXPORT Result HttpFormUrlDecode(StringSpan input, Span<char> storage, StringSpan& output);
50
65
67struct SC_HTTP_EXPORT HttpURLParser
68{
79
84
86 bool getQueryValue(StringSpan name, StringSpan& value) const;
87
89 static bool getQueryValue(StringSpan search, StringSpan name, StringSpan& value);
90
91 private:
92 StringEncoding encoding;
93
94 Result parsePath();
95 Result parseHost();
96 Result validateProtocol();
97 Result validatePath();
98 Result validateHost();
99 Result parseUserPassword(StringSpan userPassword);
100 struct Internal;
101};
103
104} // namespace SC
unsigned short uint16_t
Platform independent (2) bytes unsigned int.
Definition PrimitiveTypes.h:28
SC_HTTP_EXPORT Result HttpPercentDecode(StringSpan input, Span< char > storage, StringSpan &output)
Percent-decodes a URI component into caller-provided storage.
SC_HTTP_EXPORT Result HttpFormUrlDecode(StringSpan input, Span< char > storage, StringSpan &output)
Decodes an application/x-www-form-urlencoded component into caller-provided storage.
Iterates raw application/x-www-form-urlencoded name/value pairs without decoding.
Definition HttpURLParser.h:35
Zero-copy view over an HTTP origin-form request target.
Definition HttpURLParser.h:53
StringSpan search
Query component including leading ?, if present.
Definition HttpURLParser.h:56
StringSpan path
Path component, excluding query / fragment.
Definition HttpURLParser.h:55
StringSpan raw
Original request target.
Definition HttpURLParser.h:54
StringSpan hash
Fragment component including leading #, if present.
Definition HttpURLParser.h:57
bool getQueryValue(StringSpan name, StringSpan &value) const
Finds first raw query value matching name in this request target.
Result parse(StringSpan requestTarget)
Parse an origin-form request target such as /path?query.
Parse an URL splitting it into its base components.
Definition HttpURLParser.h:68
StringSpan password
Returns pass (from http://user:pass@site.com:80/pa/th?q=val#hash)
Definition HttpURLParser.h:71
StringSpan path
Returns /pa/th?q=val (from http://user:pass@site.com:80/pa/th?q=val#hash)
Definition HttpURLParser.h:76
uint16_t port
Returns 80 (from http://user:pass@site.com:80/pa/th?q=val#hash)
Definition HttpURLParser.h:73
StringSpan pathname
Returns /pa/th (from http://user:pass@site.com:80/pa/th?q=val#hash)
Definition HttpURLParser.h:75
StringSpan host
Returns site.com:80 (from http://user:pass@site.com:80/pa/th?q=val#hash)
Definition HttpURLParser.h:74
StringSpan protocol
Returns http (from http://user:pass@site.com:80/pa/th?q=val#hash)
Definition HttpURLParser.h:69
StringSpan username
Returns user (from http://user:pass@site.com:80/pa/th?q=val#hash)
Definition HttpURLParser.h:70
static bool getQueryValue(StringSpan search, StringSpan name, StringSpan &value)
Finds first raw query value matching name in a search component, with or without leading '?...
StringSpan hash
Returns #hash (from http://user:pass@site.com:80/pa/th?q=val#hash)
Definition HttpURLParser.h:78
Result parse(StringSpan url)
Parse StringSpan representing an URL.
bool getQueryValue(StringSpan name, StringSpan &value) const
Finds first raw query value matching name in this URL search component.
StringSpan hostname
Returns site.com (from http://user:pass@site.com:80/pa/th?q=val#hash)
Definition HttpURLParser.h:72
StringSpan search
Returns ?q=val (from http://user:pass@site.com:80/pa/th?q=val#hash)
Definition HttpURLParser.h:77
One raw query string item parsed from a URL search component.
Definition HttpURLParser.h:15
Iterates raw query string items without allocation or percent-decoding.
Definition HttpURLParser.h:23
An ascii string used as boolean result. SC_TRY macro forwards errors to caller.
Definition Result.h:13
View over a contiguous sequence of items (pointer + size in elements).
Definition Span.h:29
An read-only view over a string (to avoid including Strings library when parsing is not needed).
Definition StringSpan.h:37