WPILibC++  2018.4.1-20180730003225-1150-g0a0d924
 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 & UF_SCHEMA) != 0; }
39 
40  bool HasHost() const { return (m_url.field_set & UF_HOST) != 0; }
41 
42  bool HasPort() const { return (m_url.field_set & UF_PORT) != 0; }
43 
44  bool HasPath() const { return (m_url.field_set & UF_PATH) != 0; }
45 
46  bool HasQuery() const { return (m_url.field_set & UF_QUERY) != 0; }
47 
48  bool HasFragment() const { return (m_url.field_set & UF_FRAGMENT) != 0; }
49 
50  bool HasUserInfo() const { return (m_url.field_set & UF_USERINFO) != 0; }
51 
52  StringRef GetSchema() const {
53  return m_data.substr(m_url.field_data[UF_SCHEMA].off,
54  m_url.field_data[UF_SCHEMA].len);
55  }
56 
57  StringRef GetHost() const {
58  return m_data.substr(m_url.field_data[UF_HOST].off,
59  m_url.field_data[UF_HOST].len);
60  }
61 
62  unsigned int GetPort() const { return m_url.port; }
63 
64  StringRef GetPath() const {
65  return m_data.substr(m_url.field_data[UF_PATH].off,
66  m_url.field_data[UF_PATH].len);
67  }
68 
69  StringRef GetQuery() const {
70  return m_data.substr(m_url.field_data[UF_QUERY].off,
71  m_url.field_data[UF_QUERY].len);
72  }
73 
74  StringRef GetFragment() const {
75  return m_data.substr(m_url.field_data[UF_FRAGMENT].off,
76  m_url.field_data[UF_FRAGMENT].len);
77  }
78 
79  StringRef GetUserInfo() const {
80  return m_data.substr(m_url.field_data[UF_USERINFO].off,
81  m_url.field_data[UF_USERINFO].len);
82  }
83 
84  private:
85  bool m_error;
86  StringRef m_data;
87  http_parser_url m_url;
88 };
89 
90 } // namespace wpi
91 
92 #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