static isc_nm_http_endpoints_t *endpoints = NULL;
static atomic_bool use_PROXY = false;
+static atomic_bool use_PROXY_over_TLS = false;
static isc_nm_t **nm = NULL;
#define X(v)
#endif
+static isc_nm_proxy_type_t
+get_proxy_type(void) {
+ if (!atomic_load(&use_PROXY)) {
+ return (ISC_NM_PROXY_NONE);
+ } else if (atomic_load(&use_TLS) && atomic_load(&use_PROXY_over_TLS)) {
+ return (ISC_NM_PROXY_ENCRYPTED);
+ }
+
+ return (ISC_NM_PROXY_PLAIN);
+}
+
static void
proxy_verify_unspec_endpoint(isc_nmhandle_t *handle) {
isc_sockaddr_t real_local, real_peer, local, peer;
isc_nm_httpconnect(mgr, NULL, &tcp_listen_addr, uri, post,
connect_send_cb, data, ctx, client_sess_cache,
- timeout, atomic_load(&use_PROXY), NULL);
+ timeout, get_proxy_type(), NULL);
}
static int
atomic_store(&POST, false);
atomic_store(&use_TLS, false);
atomic_store(&use_PROXY, false);
+ atomic_store(&use_PROXY_over_TLS, false);
noanswer = false;
result = isc_nm_listenhttp(listen_nm, ISC_NM_LISTEN_ALL,
&tcp_listen_addr, 0, NULL, NULL, endpoints,
- 0, atomic_load(&use_PROXY), &listen_sock);
+ 0, get_proxy_type(), &listen_sock);
assert_int_equal(result, ISC_R_SUCCESS);
isc_loop_teardown(mainloop, listen_sock_close, listen_sock);
result = isc_nm_listenhttp(listen_nm, ISC_NM_LISTEN_ALL,
&tcp_listen_addr, 0, NULL, NULL, endpoints,
- 0, atomic_load(&use_PROXY), &listen_sock);
+ 0, get_proxy_type(), &listen_sock);
assert_int_equal(result, ISC_R_SUCCESS);
isc_loop_teardown(mainloop, listen_sock_close, listen_sock);
result = isc_nm_listenhttp(listen_nm, ISC_NM_LISTEN_ALL,
&tcp_listen_addr, 0, NULL, NULL, endpoints,
- 0, atomic_load(&use_PROXY), &listen_sock);
+ 0, get_proxy_type(), &listen_sock);
assert_int_equal(result, ISC_R_SUCCESS);
isc_loop_teardown(mainloop, listen_sock_close, listen_sock);
ISC_NM_HTTP_DEFAULT_PATH);
isc_nm_httpconnect(connect_nm, NULL, &tcp_listen_addr, req_url,
atomic_load(&POST), timeout_request_cb, NULL, ctx,
- client_sess_cache, T_SOFT, atomic_load(&use_PROXY),
- NULL);
+ client_sess_cache, T_SOFT, get_proxy_type(), NULL);
}
static int
result = isc_nm_listenhttp(
listen_nm, ISC_NM_LISTEN_ALL, &tcp_listen_addr, 0, quotap,
atomic_load(&use_TLS) ? server_tlsctx : NULL, endpoints, 0,
- atomic_load(&use_PROXY), &listen_sock);
+ get_proxy_type(), &listen_sock);
assert_int_equal(result, ISC_R_SUCCESS);
sockaddr_to_url(&tcp_listen_addr, atomic_load(&use_TLS), req_url,
result = isc_nm_listenhttp(
listen_nm, ISC_NM_LISTEN_ALL, &tcp_listen_addr, 0, quotap,
atomic_load(&use_TLS) ? server_tlsctx : NULL, endpoints, 0,
- atomic_load(&use_PROXY), &listen_sock);
+ get_proxy_type(), &listen_sock);
assert_int_equal(result, ISC_R_SUCCESS);
sockaddr_to_url(&tcp_listen_addr, atomic_load(&use_TLS), req_url,
isc_nm_httpconnect(connect_nm, NULL, &tcp_listen_addr, req_url,
atomic_load(&POST), doh_connect_send_two_requests_cb,
- NULL, ctx, client_sess_cache, 5000,
- atomic_load(&use_PROXY), NULL);
+ NULL, ctx, client_sess_cache, 5000, get_proxy_type(),
+ NULL);
isc_loop_teardown(mainloop, listen_sock_close, listen_sock);
}
result = isc_nm_listenhttp(
listen_nm, ISC_NM_LISTEN_ALL, &tcp_listen_addr, 0, quotap,
atomic_load(&use_TLS) ? server_tlsctx : NULL, endpoints, 0,
- atomic_load(&use_PROXY), &listen_sock);
+ get_proxy_type(), &listen_sock);
assert_int_equal(result, ISC_R_SUCCESS);
for (size_t i = 0; i < nthreads; i++) {
doh_receive_request_cb, NULL);
assert_int_equal(result, ISC_R_SUCCESS);
- result = isc_nm_listenhttp(listen_nm, ISC_NM_LISTEN_ALL,
- &tcp_listen_addr, 0, quotap, server_tlsctx,
- endpoints, 0, atomic_load(&use_PROXY),
- &listen_sock);
+ result = isc_nm_listenhttp(
+ listen_nm, ISC_NM_LISTEN_ALL, &tcp_listen_addr, 0, quotap,
+ server_tlsctx, endpoints, 0, get_proxy_type(), &listen_sock);
assert_int_equal(result, ISC_R_SUCCESS);
/*