WPILibC++  2018.4.1-20180927001728-1207-gd5d744a
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Modules Pages
UrlParser.h
1 /*----------------------------------------------------------------------------*/
2 /* Copyright (c) 2018 FIRST. All Rights Reserved. */
3 /* Open Source Software - may be modified and shared by FRC teams. The code */
4 /* must be accompanied by the FIRST BSD license file in the root directory of */
5 /* the project. */
6 /*----------------------------------------------------------------------------*/
7 
8 #ifndef WPIUTIL_WPI_URLPARSER_H_
9 #define WPIUTIL_WPI_URLPARSER_H_
10 
11 #include "wpi/StringRef.h"
12 #include "wpi/http_parser.h"
13 
14 namespace wpi {
15 
20 class UrlParser {
21  public:
27  UrlParser(StringRef in, bool isConnect) {
28  m_data = in;
29  http_parser_url_init(&m_url);
30  m_error = http_parser_parse_url(in.data(), in.size(), isConnect, &m_url);
31  }
32 
36  bool IsValid() const { return !m_error; }
37 
38  bool HasSchema() const { return (m_url.field_set & (1 << UF_SCHEMA)) != 0; }
39 
40  bool HasHost() const { return (m_url.field_set & (1 << UF_HOST)) != 0; }
41 
42  bool HasPort() const { return (m_url.field_set & (1 << UF_PORT)) != 0; }
43 
44  bool HasPath() const { return (m_url.field_set & (1 << UF_PATH)) != 0; }
45 
46  bool HasQuery() const { return (m_url.field_set & (1 << UF_QUERY)) != 0; }
47 
48  bool HasFragment() const {
49  return (m_url.field_set & (1 << UF_FRAGMENT)) != 0;
50  }
51 
52  bool HasUserInfo() const {
53  return (m_url.field_set & (1 << UF_USERINFO)) != 0;
54  }
55 
56  StringRef GetSchema() const {
57  return m_data.substr(m_url.field_data[UF_SCHEMA].off,
58  m_url.field_data[UF_SCHEMA].len);
59  }
60 
61  StringRef GetHost() const {
62  return m_data.substr(m_url.field_data[UF_HOST].off,
63  m_url.field_data[UF_HOST].len);
64  }
65 
66  unsigned int GetPort() const { return m_url.port; }
67 
68  StringRef GetPath() const {
69  return m_data.substr(m_url.field_data[UF_PATH].off,
70  m_url.field_data[UF_PATH].len);
71  }
72 
73  StringRef GetQuery() const {
74  return m_data.substr(m_url.field_data[UF_QUERY].off,
75  m_url.field_data[UF_QUERY].len);
76  }
77 
78  StringRef GetFragment() const {
79  return m_data.substr(m_url.field_data[UF_FRAGMENT].off,
80  m_url.field_data[UF_FRAGMENT].len);
81  }
82 
83  StringRef GetUserInfo() const {
84  return m_data.substr(m_url.field_data[UF_USERINFO].off,
85  m_url.field_data[UF_USERINFO].len);
86  }
87 
88  private:
89  bool m_error;
90  StringRef m_data;
91  http_parser_url m_url;
92 };
93 
94 } // namespace wpi
95 
96 #endif // WPIUTIL_WPI_URLPARSER_H_
bool IsValid() const
Determine if the URL is valid (e.g.
Definition: UrlParser.h:36
LLVM_NODISCARD LLVM_ATTRIBUTE_ALWAYS_INLINE StringRef substr(size_t Start, size_t N=npos) const noexcept
Return a reference to the substring from [Start, Start + N).
Definition: StringRef.h:556
LLVM_NODISCARD LLVM_ATTRIBUTE_ALWAYS_INLINE const char * data() const noexcept
data - Get a pointer to the start of the string (which may not be null terminated).
Definition: StringRef.h:128
WPILib C++ utilities (wpiutil) namespace.
Definition: SmallString.h:21
UrlParser(StringRef in, bool isConnect)
Parse a URL.
Definition: UrlParser.h:27
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:49
LLVM_NODISCARD LLVM_ATTRIBUTE_ALWAYS_INLINE size_t size() const noexcept
size - Get the string size.
Definition: StringRef.h:138
Parses a URL into its constiuent components.
Definition: UrlParser.h:20