Commit Graph

59 Commits

Author SHA1 Message Date
Chilledheart
e30e3cb457
naive: Support http 1.0 proxy request (#418)
Authored-By: hukeyue@hotmail.com
Authored-By: Chilledheart <rwindz0@gmail.com>
2023-01-07 11:49:45 +08:00
klzgrad
52fb5cfb6e Fix crash from invalid proxy url 2022-12-10 09:40:30 +08:00
Elly Fong-Jones
f032d7911c base: include sys/types.h in symbolize.h
It is needed for ssize_t. In glibc specifically, ssize_t happens to get
transitively included by some other header - I'm not sure exactly what -
but POSIX says ssize_t is in sys/types.h and in other libcs the included
is needed for the type.

Bug: 1380656
Change-Id: Ibeef8c80f44595b6056fc1be8a104ab7428aa8bb
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3997878
Reviewed-by: Daniel Cheng <dcheng@chromium.org>
Commit-Queue: Elly Fong-Jones <ellyjones@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1066486}
2022-12-03 16:36:54 +08:00
klzgrad
c1b789a825 sysroot: Fix arm64 build requiring glibc 2.29
https://bugs.chromium.org/p/chromium/issues/detail?id=1309965#c5
2022-12-03 16:36:54 +08:00
klzgrad
b497e0aba7 third_party/protobuf: Reduce the required alignment of ArenaString from 8 to 4
https://github.com/protocolbuffers/protobuf/pull/10298
2022-12-03 16:36:54 +08:00
klzgrad
18a93358d1 third_party/protobuf: Disable musttail on MIPS
clang reports:

fatal error: error in backend: failed to perform tail call elimination on a call site marked musttail
2022-12-03 16:36:54 +08:00
klzgrad
01ed881ac1 net: Remove upstream temporary debug code breaking build 2022-12-03 16:36:54 +08:00
klzgrad
935bf0cccb Add continuous integration and tests 2022-12-03 16:36:54 +08:00
klzgrad
2f7593492b Add build scripts 2022-12-03 16:36:54 +08:00
klzgrad
57453ff6c2 Add example config.json 2022-12-03 16:36:54 +08:00
klzgrad
426bd24df2 Add README 2022-12-03 16:36:54 +08:00
klzgrad
d50caeded7 Add LICENSE 2022-12-03 16:36:54 +08:00
klzgrad
2c467bc3f7 Add source import tool 2022-12-03 16:36:54 +08:00
klzgrad
49036e5b83 Add initial implementation of Naive client 2022-12-03 16:36:54 +08:00
klzgrad
be9d9159ca build: Use thinlto max optimization for everything 2022-12-03 16:36:54 +08:00
klzgrad
8edd1a66b2 base: Fix Android build missing -latomic 2022-12-03 16:36:54 +08:00
klzgrad
ef58cd0a89 base: Fix OpenWrt build with use_allocator_shim=false 2022-12-03 16:36:54 +08:00
klzgrad
fec1834dfc allocator: Ignore madvise ENOSYS error
Support kernels builts without CONFIG_ADVISE_SYSCALLS on small
embedded devices.
2022-12-03 16:36:53 +08:00
klzgrad
928267c103 allocator: Fix __THROW and mallinfo for Musl 2022-12-03 16:36:53 +08:00
klzgrad
335deca205 allocator: Improve MIPS coverage of spinlocks 2022-12-03 16:36:53 +08:00
klzgrad
29f3c35f69 debug: Fix uClibc macro condition 2022-12-03 16:36:53 +08:00
klzgrad
7af171f868 third_party: Fix missing sgidefs.h for Musl 2022-12-03 16:36:53 +08:00
klzgrad
469c90c060 base: Do not forward declare stat64 for Musl 2022-12-03 16:36:53 +08:00
klzgrad
d23d609b0c base: Fix narrowing casting for Musl 2022-12-03 16:36:53 +08:00
klzgrad
2845894eae base: Disable __close overloading for Musl 2022-12-03 16:36:53 +08:00
klzgrad
ae79b28afe process: Remove use of mallinfo for Musl 2022-12-03 16:36:53 +08:00
klzgrad
095bcf3f94 base: Remove use of mallinfo for Musl 2022-12-03 16:36:53 +08:00
klzgrad
fd2b17ff4a dns: Support Musl 2022-12-03 16:36:53 +08:00
klzgrad
a58d4a2239 debug: Fix obsolete max check 2022-12-03 16:22:09 +08:00
klzgrad
6ff76e585a build: Add sysroot creator script 2022-12-03 16:22:08 +08:00
klzgrad
1386d12688 build: Add OpenWrt toolchains 2022-12-03 16:22:08 +08:00
klzgrad
a69c822efc build: Support ARM build without FPU 2022-12-03 16:22:08 +08:00
klzgrad
ca80a0a39a build: Support -mcpu= on ARM and ARM64 2022-12-03 16:22:08 +08:00
klzgrad
701e7da507 quic: Add support for HTTP/3 CONNECT Fast Open
SpdyProxyClientSocket uses read_callback_ for both Connect() and
Read(), and its OnIOComplete() calls read_callback_, thus its fast
connect code checks read_callback_. The code was ported to
QuicProxyClientSocket without much change.

But QuicProxyClientSocket uses a separate connect_callback_ apart from
read_callback_, and its OnIOComplete() calls connect_callback_, thus
when headers are received after Connect() it doesn't need to check
read_callback_ and should always avoid calling connect_callback_.
2022-12-03 16:22:08 +08:00
klzgrad
344d91a510 h2: Pad RST_STREAM frames
Clients sending too many RST_STREAM is an irregular behavior.

Hack in a preceding END_STREAM DATA frame padded towards [48, 72]
before RST_STREAM so that the TLS record looks like a HEADERS frame.

The server often replies to this with a WINDOW_UPDATE because padding
is accounted in flow control. Whether this constitudes a new irregular
behavior is still unclear.
2022-12-03 16:22:08 +08:00
klzgrad
192597d4d2 h2: Add support for HTTP/2 CONNECT Fast Open
SpdyProxyClientSocket waits for 200 OK before returning OK for Connect.

Change that behavior to returning OK immediately after CONNECT header.

This feature is enabled by a "fastopen" header via the proxy delegate.

Design notes:

The current approach is better than the obvious TCP Fast Open style fake
Connect().

Fast Open should not be used for preconnects as preconnects need actual
connections set up. The Naive client does not use preconnects per se
(using "...RawConnect") but the user agent will use preconnects and the
Naive client has to infer that. Hence there is a need to check the
incoming socket for available bytes right before Connect() and configure
whether a socket should be connected with Fast Open. But fake Connect()
make it difficult to check the incoming socket because it immediately
returns and there is not enough time for the first read of the incoming
socket to arrive.

To check for preconnects it is best to push the first read of the
incoming socket to as late as possible. The other (wrong) way of doing
that is to pass in an early read callback and call it immediately after
sending HEADERS and then send the available bytes right there. This way
is wrong because it does not work with late binding, which assumes
Connect() is idempotent and causes sockets opened in this way to be
potentially bound to the wrong socket requests.

The current approach is to return OK in Connect() right after sending
HEADERS before getting the reply, which is to be received later. If the
reply is received during a subsequent Read() and the reply indicates an
error, the error is returned to the callback of the Read(); otherwise
the error is ignored with the connection disconnected and subsequent
Read() and Write() should discover the disconnection.
2022-12-03 16:22:08 +08:00
klzgrad
b96a3c98fc h2: Reduce warnings about RST on invalid streams
Per RFC 7540#6.4:

  However, after sending the RST_STREAM, the sending endpoint MUST be
  prepared to receive and process additional frames sent on the stream
  that might have been sent by the peer prior to the arrival of the
  RST_STREAM.
2022-12-03 16:22:08 +08:00
klzgrad
ca01c27db9 socket: Force tunneling for all sockets
In the socket system, only WebSocket sockets are allowed to tunnel
through HTTP/1 proxies. "Raw" sockets in the normal socket pool don't
have it, and their CONNECT headers are not sent, instead the raw
payload is sent as-is to the HTTP/1 proxy, breaking the proxying.

The socket system works like this:

- HTTP sockets via HTTP/1 proxies: normal pool, no tunneling.
- HTTPS sockets via HTTP/1 proxies: normal pool, no tunneling,
  but does its own proxy encapsulation.
- WS sockets via HTTP/1 proxies: WS pool, tunneling.

In Naive, we need the normal pool because the WS pool has some extra
restrictions but we also need tunneling to produce a client socket
with proxy tunneling built in.

Therefore force tunneling for all sockets and have them always send
CONNECT headers. This will otherwise break regular HTTP client sockets
via HTTP/1 proxies, but as we don't use this combination, it is ok.
2022-12-03 16:22:08 +08:00
klzgrad
eb5e228a43 socket: Allow higher limits for proxies
As an intermediary proxy we should not enforce stricter connection
limits in addition to what the user is already enforcing.
2022-12-03 16:22:08 +08:00
klzgrad
9513f88fdc socket: Add RawConnect method 2022-12-03 16:22:08 +08:00
klzgrad
d34742571b cert: Handle AIA response in PKCS#7 format 2022-12-03 16:22:08 +08:00
klzgrad
7a13164b40 cert: Use builtin verifier on Android and Linux 2022-12-03 16:22:06 +08:00
klzgrad
9258ae9ef9 cert: Add SystemTrustStoreStaticUnix
It reads CA certificates from:

* The file in environment variable SSL_CERT_FILE
* The first available file of

/etc/ssl/certs/ca-certificates.crt (Debian/Ubuntu/Gentoo etc.)
/etc/pki/tls/certs/ca-bundle.crt (Fedora/RHEL 6)
/etc/ssl/ca-bundle.pem (OpenSUSE)
/etc/pki/tls/cacert.pem (OpenELEC)
/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem (CentOS/RHEL 7)
/etc/ssl/cert.pem (Alpine Linux)

* Files in the directory of environment variable SSL_CERT_DIR
* Files in the first available directory of

/etc/ssl/certs (SLES10/SLES11, https://golang.org/issue/12139)
/etc/pki/tls/certs (Fedora/RHEL)
/system/etc/security/cacerts (Android)
2022-12-03 16:13:11 +08:00
klzgrad
6a3d656f3b libc++: Disable exceptions and RTTI
Except on Mac, where exceptions are required.
And except on Android, where rtti is required.
2022-12-03 16:13:11 +08:00
klzgrad
91f84f2b68 url: Remove perfetto tracing 2022-12-03 16:13:11 +08:00
klzgrad
a00628f48d base: Disable trace event
This allows builds with enable_base_tracing=false.
2022-12-03 16:13:11 +08:00
klzgrad
6ad6d8cf9f lss: Avoid naming conflict in fstatat64
Supports OpenWrt builds.
2022-12-03 16:13:11 +08:00
klzgrad
cbf88a90ee base: Fix iwyu in file_path.cc 2022-12-03 16:13:10 +08:00
klzgrad
67b8c97f85 base: Don't fix Y2038 problem with icu 2022-12-03 16:13:10 +08:00
klzgrad
daa4f46178 net, url: Remove icu 2022-12-03 16:13:10 +08:00