File: proxy_string_util.h

package info (click to toggle)
chromium 139.0.7258.127-1
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 6,122,068 kB
  • sloc: cpp: 35,100,771; ansic: 7,163,530; javascript: 4,103,002; python: 1,436,920; asm: 946,517; xml: 746,709; pascal: 187,653; perl: 88,691; sh: 88,436; objc: 79,953; sql: 51,488; cs: 44,583; fortran: 24,137; makefile: 22,147; tcl: 15,277; php: 13,980; yacc: 8,984; ruby: 7,485; awk: 3,720; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; sed: 36
file content (132 lines) | stat: -rw-r--r-- 5,043 bytes parent folder | download | duplicates (6)
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef NET_BASE_PROXY_STRING_UTIL_H_
#define NET_BASE_PROXY_STRING_UTIL_H_

#include <string>
#include <string_view>

#include "net/base/net_export.h"
#include "net/base/proxy_chain.h"
#include "net/base/proxy_server.h"

namespace net {

// Converts a PAC result element (commonly called a PAC string) to/from a
// ProxyServer / ProxyChain. Note that this only deals with a single proxy
// element separated out from the complete semicolon-delimited PAC result
// string.
//
// Note that PAC strings cannot currently specify multi-proxy chains.
//
// PAC result elements have the format:
// <scheme>" "<host>[":"<port>]
//
// Where <scheme> may be one of (case-insensitive):
// "DIRECT"
// "PROXY"
// "HTTPS"
// "SOCKS4"
// "SOCKS5"
// "SOCKS" (canonicalizes to "SOCKS4")
// "QUIC"
//
// If <port> is omitted, it will be assumed as the default port for the
// chosen scheme (via ProxyServer::GetDefaultPortForScheme()).
//
// Returns an invalid ProxyServer / ProxyChain if parsing fails.
//
// Examples:
//   "PROXY foopy:19"   {scheme=HTTP, host="foopy", port=19}
//   "DIRECT"           {scheme=DIRECT}
//   "SOCKS5 foopy"     {scheme=SOCKS5, host="foopy", port=1080}
//   "HTTPS foopy:123"  {scheme=HTTPS, host="foopy", port=123}
//   "QUIC foopy:123"   {scheme=QUIC, host="foopy", port=123}
//   "BLAH xxx:xx"      INVALID
NET_EXPORT ProxyChain
PacResultElementToProxyChain(std::string_view pac_result_element);
// TODO(crbug.com/40284947): Remove method once all calls are updated to use
// PacResultElementToProxyChain.
NET_EXPORT ProxyServer
PacResultElementToProxyServer(std::string_view pac_result_element);
NET_EXPORT std::string ProxyServerToPacResultElement(
    const ProxyServer& proxy_server);

// Converts a non-standard URI string to/from a ProxyChain.
//
// The non-standard URI strings have the format:
//   [<scheme>"://"]<server>[":"<port>]
//
// Where <scheme> may be one of:
// "http"
// "socks4"
// "socks5
// "socks" (equivalent to "socks5")
// "direct"
// "https"
// "quic"
//
// Both <scheme> and <port> are optional. If <scheme> is omitted, it will be
// assumed as |default_scheme|. If <port> is omitted, it will be assumed as
// the default port for the chosen scheme (via
// ProxyServer::GetDefaultPortForScheme()).
//
// If parsing fails the returned proxy will have scheme
// `ProxyServer::SCHEME_INVALID`.
//
// Examples (for `default_pac_scheme` = `kHttp` ):
//   "foopy"            {scheme=HTTP, host="foopy", port=80}
//   "socks://foopy"    {scheme=SOCKS5, host="foopy", port=1080}
//   "socks4://foopy"   {scheme=SOCKS4, host="foopy", port=1080}
//   "socks5://foopy"   {scheme=SOCKS5, host="foopy", port=1080}
//   "http://foopy:17"  {scheme=HTTP, host="foopy", port=17}
//   "https://foopy:17" {scheme=HTTPS, host="foopy", port=17}
//   "quic://foopy:17"  {scheme=QUIC, host="foopy", port=17}
//   "direct://"        {scheme=DIRECT}
//   "foopy:X"          INVALID -- bad port.
NET_EXPORT ProxyChain ProxyUriToProxyChain(std::string_view uri,
                                           ProxyServer::Scheme default_scheme,
                                           bool is_quic_allowed = false);

// Converts a bracketed string of non-standard uris to a multi-proxy
// `net::ProxyChain`.
//
// The `uris` parameter may contain 1 or more non-standard URIs but not 0 which
// would result in an invalid `ProxyChain()`.
//
// If brackets are omitted from the `uris` string, it MUST be a single
// non-standard URI. Otherwise, an invalid `ProxyChain()` will be returned.
//
//
// The bracketed non-standard URIs strings have the format:
//   [x y z] where individual non-standard uris are space delimited and
//   encompassed within brackets.
//   ex. [https://foopy:17 https://hoopy:17]
//
// Each non-standard URI string follows the format described in the
// documentation for the `ProxyUriToProxyChain` function.
NET_EXPORT ProxyChain
MultiProxyUrisToProxyChain(std::string_view uris,
                           ProxyServer::Scheme default_scheme,
                           bool is_quic_allowed = false);
NET_EXPORT ProxyServer ProxyUriToProxyServer(std::string_view uri,
                                             ProxyServer::Scheme default_scheme,
                                             bool is_quic_allowed = false);
NET_EXPORT std::string ProxyServerToProxyUri(const ProxyServer& proxy_server);
NET_EXPORT ProxyServer
ProxySchemeHostAndPortToProxyServer(ProxyServer::Scheme scheme,
                                    std::string_view host_and_port);

// Parses the proxy scheme from the non-standard URI scheme string
// representation used in `ProxyUriToProxyServer()` and
// `ProxyServerToProxyUri()`. If no type could be matched, returns
// SCHEME_INVALID.
NET_EXPORT ProxyServer::Scheme GetSchemeFromUriScheme(
    std::string_view scheme,
    bool is_quic_allowed = false);

}  // namespace net

#endif  // NET_BASE_PROXY_STRING_UTIL_H_