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 "../Common/Result.h"
5#include "../Common/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{
36 explicit HttpFormUrlEncodedIterator(StringSpan body);
37
38 bool next(HttpURLQueryItem& item);
39
41 static bool getValue(StringSpan body, StringSpan name, StringSpan& value);
42
43 private:
44 StringSpan body;
45 size_t cursor = 0;
46};
47
49SC_HTTP_EXPORT Result HttpPercentDecode(StringSpan input, Span<char> storage, StringSpan& output);
50
52SC_HTTP_EXPORT Result HttpFormUrlDecode(StringSpan input, Span<char> storage, StringSpan& output);
53
55struct SC_HTTP_EXPORT HttpRequestTargetView
56{
57 StringSpan raw;
58 StringSpan path;
59 StringSpan search;
60 StringSpan hash;
61
63 Result parse(StringSpan requestTarget);
64
66 bool getQueryValue(StringSpan name, StringSpan& value) const;
67};
68
70struct SC_HTTP_EXPORT HttpURLParser
71{
72 StringSpan protocol;
73 StringSpan username;
74 StringSpan password;
75 StringSpan hostname;
76 uint16_t port;
77 StringSpan host;
78 StringSpan pathname;
79 StringSpan path;
80 StringSpan search;
81 StringSpan hash;
82
86 Result parse(StringSpan url);
87
89 bool getQueryValue(StringSpan name, StringSpan& value) const;
90
92 static bool getQueryValue(StringSpan search, StringSpan name, StringSpan& value);
93
94 private:
95 StringEncoding encoding;
96
97 Result parsePath();
98 Result parseHost();
99 Result validateProtocol();
100 Result validatePath();
101 Result validateHost();
102 Result parseUserPassword(StringSpan userPassword);
103 struct Internal;
104};
106
107} // namespace SC
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
static bool getValue(StringSpan body, StringSpan name, StringSpan &value)
Finds first raw form value matching name in an application/x-www-form-urlencoded body.
Zero-copy view over an HTTP origin-form request target.
Definition HttpURLParser.h:56
StringSpan search
Query component including leading ?, if present.
Definition HttpURLParser.h:59
StringSpan path
Path component, excluding query / fragment.
Definition HttpURLParser.h:58
StringSpan raw
Original request target.
Definition HttpURLParser.h:57
StringSpan hash
Fragment component including leading #, if present.
Definition HttpURLParser.h:60
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:71
StringSpan password
Returns pass (from http://user:pass@site.com:80/pa/th?q=val#hash)
Definition HttpURLParser.h:74
StringSpan path
Returns /pa/th?q=val (from http://user:pass@site.com:80/pa/th?q=val#hash)
Definition HttpURLParser.h:79
uint16_t port
Returns 80 (from http://user:pass@site.com:80/pa/th?q=val#hash)
Definition HttpURLParser.h:76
StringSpan pathname
Returns /pa/th (from http://user:pass@site.com:80/pa/th?q=val#hash)
Definition HttpURLParser.h:78
StringSpan host
Returns site.com:80 (from http://user:pass@site.com:80/pa/th?q=val#hash)
Definition HttpURLParser.h:77
StringSpan protocol
Returns http (from http://user:pass@site.com:80/pa/th?q=val#hash)
Definition HttpURLParser.h:72
StringSpan username
Returns user (from http://user:pass@site.com:80/pa/th?q=val#hash)
Definition HttpURLParser.h:73
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:81
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:75
StringSpan search
Returns ?q=val (from http://user:pass@site.com:80/pa/th?q=val#hash)
Definition HttpURLParser.h:80
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