envoyproxy / envoyproxy/envoy-mobile

Cronvoy: map Envoy Mobile internal errors to Cronet internal errors

Open
#1,550 7 comments 0 reactions 2 assignees Assigned to @goaway View on GitHub
cronet cronvoy-beta enhancement no stalebot
Dominant language
Java
Stars
566
Forks
85
PR merge metrics
No merged PRs in 30d

Description

Cronet exposes 235 [internal errors](https://source.chromium.org/chromium/chromium/src/+/main:net/base/net_error_list.h) split in 9 categories. Cronet internal error codes are not guaranteed to be stable. However, some of those internal error codes are mapped to the public error code scheme, others are driving some business logic, and couples are used for tests only - having these properly mapped with Envoy Mobile internal error codes will likely avoid regressions. Following error codes should be considered:
- [```NAME_NOT_RESOLVED```](https://source.chromium.org/chromium/chromium/src/+/main:net/base/net_error_list.h;l=146-147) - mapped to public error code
- [```INTERNET_DISCONNECTED```]() - mapped to public error code
- [```NETWORK_CHANGED```](https://source.chromium.org/chromium/chromium/src/+/main:net/base/net_error_list.h;l=149-150) - mapped to public error code
- [```TIMED_OUT```](https://source.chromium.org/chromium/chromium/src/+/main:net/base/net_error_list.h;l=90-91) - mapped to public error code
- [```CONNECTION_CLOSED```](https://source.chromium.org/chromium/chromium/src/+/main:net/base/net_error_list.h;l=130-131) - mapped to public error code
- [```CONNECTION_TIMED_OUT```](https://source.chromium.org/chromium/chromium/src/+/main:net/base/net_error_list.h;l=193-194) - mapped to public error code
- [```CONNECTION_REFUSED```](https://source.chromium.org/chromium/chromium/src/+/main:net/base/net_error_list.h;l=136-137) - mapped to public error code
- [```CONNECTION_RESET```](https://source.chromium.org/chromium/chromium/src/+/main:net/base/net_error_list.h;l=133-134) - mapped to public error code
- [```ADDRESS_UNREACHABLE```](https://source.chromium.org/chromium/chromium/src/+/main:net/base/net_error_list.h;l=159-161) - mapped to public error code
- [```QUIC_PROTOCOL_ERROR```](https://source.chromium.org/chromium/chromium/src/+/main:net/base/net_error_list.h;l=709-710) - mapped to public error code
- [```CONTENT_LENGTH_MISMATCH```](https://source.chromium.org/chromium/chromium/src/+/main:net/base/net_error_list.h;l=701-703) - [testing](https://source.chromium.org/chromium/chromium/src/+/main:components/cronet/android/test/javatests/src/org/chromium/net/CronetUrlRequestTest.java;l=418?q=ERR_CONTENT_LENGTH_MISMATCH)
- [```HTTP2_PING_FAILED```](https://source.chromium.org/chromium/chromium/src/+/main:net/base/net_error_list.h;l=694-695) - [business logic](https://source.chromium.org/chromium/chromium/src/+/main:components/cronet/android/java/src/org/chromium/net/impl/BidirectionalStreamNetworkException.java)
- [```QUIC_HANDSHAKE_FAILED```](https://source.chromium.org/chromium/chromium/src/+/main:net/base/net_error_list.h;l=715-717) - [business logic](https://source.chromium.org/chromium/chromium/src/+/main:components/cronet/android/java/src/org/chromium/net/impl/BidirectionalStreamNetworkException.java)
- [```SSL_PINNED_KEY_NOT_IN_CERT_CHAIN```](https://source.chromium.org/chromium/chromium/src/+/main:net/base/net_error_list.h;l=307-301) - [testing](https://source.chromium.org/chromium/chromium/src/+/main:components/cronet/android/test/javatests/src/org/chromium/net/PkpTest.java;l=395?q=ERR_SSL_PINNED_KEY_NOT_IN_CERT_CHAIN)
- [```DISALLOWED_URL_SCHEME```](https://source.chromium.org/chromium/chromium/src/+/main:net/base/net_error_list.h;l=565-566) - [testing](https://source.chromium.org/chromium/chromium/src/+/main:components/cronet/android/test/javatests/src/org/chromium/net/BidirectionalStreamTest.java;l=215?q=ERR_DISALLOWED_URL_SCHEME)

Envoy Mobile does expose an internal error code, but will likely require more work:
- It not always populated, for example, when Envoy Mobile attempts to connect to this URL, "http://127.0.0.1:319", the request does end up as an error, as expected (that socket is purposely invalid). But the error does not provide much details. The internal error code is 0: ```'x-internal-error-code', '0'```, and the error message is an empty String.
- It does not provide the same error granularity.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.