-
Notifications
You must be signed in to change notification settings - Fork 90
Expand file tree
/
Copy pathuri_impl.h
More file actions
52 lines (41 loc) · 1.82 KB
/
uri_impl.h
File metadata and controls
52 lines (41 loc) · 1.82 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#pragma once
#include <string>
#include "envoy/stats/store.h"
#include "nighthawk/common/exception.h"
#include "nighthawk/common/uri.h"
#include "external/envoy/envoy/network/dns.h"
#include "external/envoy/source/common/common/logger.h"
#include "external/envoy/source/common/network/utility.h"
#include "absl/strings/string_view.h"
namespace Nighthawk {
class UriImpl : public Uri, public Envoy::Logger::Loggable<Envoy::Logger::Id::main> {
public:
UriImpl(absl::string_view uri, absl::string_view default_scheme = "http");
absl::string_view hostAndPort() const override { return host_and_port_; }
absl::string_view hostWithoutPort() const override { return host_without_port_; }
absl::string_view path() const override { return path_; }
uint64_t port() const override { return port_; }
absl::string_view scheme() const override { return scheme_; }
Envoy::Network::Address::InstanceConstSharedPtr
resolve(Envoy::Event::Dispatcher& dispatcher, Envoy::Network::DnsResolver& dns_resolver,
const Envoy::Network::DnsLookupFamily dns_lookup_family) override;
Envoy::Network::Address::InstanceConstSharedPtr address() const override {
ASSERT(resolve_attempted_, "resolve() must be called first.");
return address_;
}
private:
bool isValid() const;
bool performDnsLookup(Envoy::Event::Dispatcher& dispatcher,
Envoy::Network::DnsResolver& dns_resolver,
const Envoy::Network::DnsLookupFamily dns_lookup_family);
// TODO(oschaaf): username, password, query etc. But we may want to look at
// pulling in a mature uri parser.
std::string host_and_port_;
std::string host_without_port_;
std::string path_;
uint64_t port_{};
std::string scheme_;
Envoy::Network::Address::InstanceConstSharedPtr address_;
bool resolve_attempted_{};
};
} // namespace Nighthawk