ip_quadruple/proxy: make port uint16_t
No binary (build failed)
—
(log yok)
| @@ -35,6 +35,9 @@ connection done with this **curl** handle. | |
| If the connection was done using QUIC, the port number is a UDP port number, | |
| otherwise it is a TCP port number. | |
| + | If no connection was established or if the protocol does not use ports, -1 |
| + | is returned. |
| + | |
| # %PROTOCOLS% | |
| # EXAMPLE | |
| @@ -36,6 +36,11 @@ If a proxy was used for the most recent transfer, this is the port number of | |
| the proxy, if no proxy was used it is the port number of the most recently | |
| accessed URL. | |
| + | If the connection was done using QUIC, the port number is a UDP port number. |
| + | |
| + | If no connection was established or if the protocol does not use ports, -1 |
| + | is returned. |
| + | |
| # %PROTOCOLS% | |
| # EXAMPLE | |
| @@ -55,7 +55,7 @@ struct cf_hc_baller { | |
| CURLcode result; | |
| struct curltime started; | |
| int reply_ms; | |
| - | unsigned char transport; |
| + | uint8_t transport; |
| enum alpnid alpn_id; | |
| BIT(shutdown); | |
| }; | |
| @@ -124,7 +124,7 @@ struct cf_hc_ctx { | |
| static void cf_hc_baller_assign(struct cf_hc_baller *b, | |
| enum alpnid alpn_id, | |
| - | unsigned char def_transport) |
| + | uint8_t def_transport) |
| { | |
| b->alpn_id = alpn_id; | |
| b->transport = def_transport; | |
| @@ -148,7 +148,7 @@ static void cf_hc_baller_assign(struct cf_hc_baller *b, | |
| static void cf_hc_baller_init(struct cf_hc_baller *b, | |
| struct Curl_cfilter *cf, | |
| struct Curl_easy *data, | |
| - | int transport) |
| + | uint8_t transport) |
| { | |
| struct Curl_cfilter *save = cf->next; | |
| @@ -581,7 +581,7 @@ struct Curl_cftype Curl_cft_http_connect = { | |
| static CURLcode cf_hc_create(struct Curl_cfilter **pcf, | |
| struct Curl_easy *data, | |
| enum alpnid *alpnids, size_t alpn_count, | |
| - | unsigned char def_transport) |
| + | uint8_t def_transport) |
| { | |
| struct Curl_cfilter *cf = NULL; | |
| struct cf_hc_ctx *ctx; | |
| @@ -626,7 +626,7 @@ static CURLcode cf_http_connect_add(struct Curl_easy *data, | |
| struct connectdata *conn, | |
| int sockindex, | |
| enum alpnid *alpn_ids, size_t alpn_count, | |
| - | unsigned char def_transport) |
| + | uint8_t def_transport) |
| { | |
| struct Curl_cfilter *cf; | |
| CURLcode result = CURLE_OK; | |
| @@ -66,7 +66,7 @@ | |
| struct transport_provider { | |
| - | int transport; |
| + | uint8_t transport; |
| cf_ip_connect_create *cf_create; | |
| }; | |
| @@ -87,7 +87,7 @@ struct transport_provider transport_providers[] = { | |
| #endif | |
| }; | |
| - | static cf_ip_connect_create *get_cf_create(int transport) |
| + | static cf_ip_connect_create *get_cf_create(uint8_t transport) |
| { | |
| size_t i; | |
| for(i = 0; i < CURL_ARRAYSIZE(transport_providers); ++i) { | |
| @@ -99,7 +99,7 @@ static cf_ip_connect_create *get_cf_create(int transport) | |
| #ifdef UNITTESTS | |
| /* used by unit2600.c */ | |
| - | void Curl_debug_set_transport_provider(int transport, |
| + | void Curl_debug_set_transport_provider(uint8_t transport, |
| cf_ip_connect_create *cf_create) | |
| { | |
| size_t i; | |
| @@ -172,7 +172,7 @@ struct cf_ip_attempt { | |
| struct curltime started; /* start of current attempt */ | |
| CURLcode result; | |
| int ai_family; | |
| - | int transport; |
| + | uint8_t transport; |
| int error; | |
| BIT(connected); /* cf has connected */ | |
| BIT(shutdown); /* cf has shutdown */ | |
| @@ -195,7 +195,7 @@ static CURLcode cf_ip_attempt_new(struct cf_ip_attempt **pa, | |
| struct Curl_easy *data, | |
| const struct Curl_addrinfo *addr, | |
| int ai_family, | |
| - | int transport, |
| + | uint8_t transport, |
| cf_ip_connect_create *cf_create) | |
| { | |
| struct Curl_cfilter *wcf; | |
| @@ -264,7 +264,7 @@ struct cf_ip_ballers { | |
| struct curltime last_attempt_started; | |
| timediff_t attempt_delay_ms; | |
| int last_attempt_ai_family; | |
| - | int transport; |
| + | uint8_t transport; |
| }; | |
| static CURLcode cf_ip_attempt_restart(struct cf_ip_attempt *a, | |
| @@ -315,7 +315,7 @@ static void cf_ip_ballers_clear(struct Curl_cfilter *cf, | |
| static CURLcode cf_ip_ballers_init(struct cf_ip_ballers *bs, int ip_version, | |
| const struct Curl_addrinfo *addr_list, | |
| cf_ip_connect_create *cf_create, | |
| - | int transport, |
| + | uint8_t transport, |
| timediff_t attempt_delay_ms) | |
| { | |
| memset(bs, 0, sizeof(*bs)); | |
| @@ -626,7 +626,7 @@ typedef enum { | |
| } cf_connect_state; | |
| struct cf_ip_happy_ctx { | |
| - | int transport; |
| + | uint8_t transport; |
| cf_ip_connect_create *cf_create; | |
| cf_connect_state state; | |
| struct cf_ip_ballers ballers; | |
| @@ -713,7 +713,7 @@ static CURLcode start_connect(struct Curl_cfilter *cf, | |
| return CURLE_OPERATION_TIMEDOUT; | |
| } | |
| - | CURL_TRC_CF(data, cf, "init ip ballers for transport %d", ctx->transport); |
| + | CURL_TRC_CF(data, cf, "init ip ballers for transport %u", ctx->transport); |
| ctx->started = curlx_now(); | |
| return cf_ip_ballers_init(&ctx->ballers, cf->conn->ip_version, | |
| dns->addr, ctx->cf_create, ctx->transport, | |
| @@ -933,7 +933,7 @@ static CURLcode cf_ip_happy_create(struct Curl_cfilter **pcf, | |
| struct Curl_easy *data, | |
| struct connectdata *conn, | |
| cf_ip_connect_create *cf_create, | |
| - | int transport) |
| + | uint8_t transport) |
| { | |
| struct cf_ip_happy_ctx *ctx = NULL; | |
| CURLcode result; | |
| @@ -961,7 +961,7 @@ out: | |
| CURLcode cf_ip_happy_insert_after(struct Curl_cfilter *cf_at, | |
| struct Curl_easy *data, | |
| - | int transport) |
| + | uint8_t transport) |
| { | |
| cf_ip_connect_create *cf_create; | |
| struct Curl_cfilter *cf; | |
| @@ -971,7 +971,7 @@ CURLcode cf_ip_happy_insert_after(struct Curl_cfilter *cf_at, | |
| DEBUGASSERT(cf_at); | |
| cf_create = get_cf_create(transport); | |
| if(!cf_create) { | |
| - | CURL_TRC_CF(data, cf_at, "unsupported transport type %d", transport); |
| + | CURL_TRC_CF(data, cf_at, "unsupported transport type %u", transport); |
| return CURLE_UNSUPPORTED_PROTOCOL; | |
| } | |
| result = cf_ip_happy_create(&cf, data, cf_at->conn, cf_create, transport); | |
| @@ -43,16 +43,16 @@ typedef CURLcode cf_ip_connect_create(struct Curl_cfilter **pcf, | |
| struct Curl_easy *data, | |
| struct connectdata *conn, | |
| const struct Curl_addrinfo *ai, | |
| - | int transport); |
| + | uint8_t transport); |
| CURLcode cf_ip_happy_insert_after(struct Curl_cfilter *cf_at, | |
| struct Curl_easy *data, | |
| - | int transport); |
| + | uint8_t transport); |
| extern struct Curl_cftype Curl_cft_ip_happy; | |
| #ifdef UNITTESTS | |
| - | void Curl_debug_set_transport_provider(int transport, |
| + | void Curl_debug_set_transport_provider(uint8_t transport, |
| cf_ip_connect_create *cf_create); | |
| #endif | |
| @@ -303,7 +303,7 @@ tcpkeepalive(struct Curl_cfilter *cf, | |
| */ | |
| static CURLcode sock_assign_addr(struct Curl_sockaddr_ex *dest, | |
| const struct Curl_addrinfo *ai, | |
| - | int transport) |
| + | uint8_t transport) |
| { | |
| /* | |
| * The Curl_sockaddr_ex structure is basically libcurl's external API | |
| @@ -404,7 +404,7 @@ static CURLcode socket_open(struct Curl_easy *data, | |
| CURLcode Curl_socket_open(struct Curl_easy *data, | |
| const struct Curl_addrinfo *ai, | |
| struct Curl_sockaddr_ex *addr, | |
| - | int transport, |
| + | uint8_t transport, |
| curl_socket_t *sockfd) | |
| { | |
| struct Curl_sockaddr_ex dummy; | |
| @@ -909,7 +909,7 @@ static CURLcode socket_connect_result(struct Curl_easy *data, | |
| } | |
| struct cf_socket_ctx { | |
| - | int transport; |
| + | uint8_t transport; |
| struct Curl_sockaddr_ex addr; /* address to connect to */ | |
| curl_socket_t sock; /* current attempt socket */ | |
| struct ip_quadruple ip; /* The IP quadruple 2x(addr+port) */ | |
| @@ -936,7 +936,7 @@ struct cf_socket_ctx { | |
| static CURLcode cf_socket_ctx_init(struct cf_socket_ctx *ctx, | |
| const struct Curl_addrinfo *ai, | |
| - | int transport) |
| + | uint8_t transport) |
| { | |
| CURLcode result; | |
| @@ -1035,7 +1035,7 @@ static void set_local_ip(struct Curl_cfilter *cf, | |
| { | |
| struct cf_socket_ctx *ctx = cf->ctx; | |
| ctx->ip.local_ip[0] = 0; | |
| - | ctx->ip.local_port = -1; |
| + | ctx->ip.local_port = 0; |
| #ifdef HAVE_GETSOCKNAME | |
| if((ctx->sock != CURL_SOCKET_BAD) && | |
| @@ -1069,6 +1069,7 @@ static CURLcode set_remote_ip(struct Curl_cfilter *cf, | |
| struct cf_socket_ctx *ctx = cf->ctx; | |
| /* store remote address and port used in this connection attempt */ | |
| + | ctx->ip.transport = ctx->transport; |
| if(!Curl_addr2string(&ctx->addr.curl_sa_addr, | |
| (curl_socklen_t)ctx->addr.addrlen, | |
| ctx->ip.remote_ip, &ctx->ip.remote_port)) { | |
| @@ -1743,7 +1744,7 @@ CURLcode Curl_cf_tcp_create(struct Curl_cfilter **pcf, | |
| struct Curl_easy *data, | |
| struct connectdata *conn, | |
| const struct Curl_addrinfo *ai, | |
| - | int transport) |
| + | uint8_t transport) |
| { | |
| struct cf_socket_ctx *ctx = NULL; | |
| struct Curl_cfilter *cf = NULL; | |
| @@ -1910,7 +1911,7 @@ CURLcode Curl_cf_udp_create(struct Curl_cfilter **pcf, | |
| struct Curl_easy *data, | |
| struct connectdata *conn, | |
| const struct Curl_addrinfo *ai, | |
| - | int transport) |
| + | uint8_t transport) |
| { | |
| struct cf_socket_ctx *ctx = NULL; | |
| struct Curl_cfilter *cf = NULL; | |
| @@ -1964,7 +1965,7 @@ CURLcode Curl_cf_unix_create(struct Curl_cfilter **pcf, | |
| struct Curl_easy *data, | |
| struct connectdata *conn, | |
| const struct Curl_addrinfo *ai, | |
| - | int transport) |
| + | uint8_t transport) |
| { | |
| struct cf_socket_ctx *ctx = NULL; | |
| struct Curl_cfilter *cf = NULL; | |
| @@ -71,7 +71,7 @@ CURLcode Curl_parse_interface(const char *input, | |
| CURLcode Curl_socket_open(struct Curl_easy *data, | |
| const struct Curl_addrinfo *ai, | |
| struct Curl_sockaddr_ex *addr, | |
| - | int transport, |
| + | uint8_t transport, |
| curl_socket_t *sockfd); | |
| int Curl_socket_close(struct Curl_easy *data, struct connectdata *conn, | |
| @@ -103,7 +103,7 @@ CURLcode Curl_cf_tcp_create(struct Curl_cfilter **pcf, | |
| struct Curl_easy *data, | |
| struct connectdata *conn, | |
| const struct Curl_addrinfo *ai, | |
| - | int transport); |
| + | uint8_t transport); |
| /** | |
| * Creates a cfilter that opens a UDP socket to the given address | |
| @@ -116,7 +116,7 @@ CURLcode Curl_cf_udp_create(struct Curl_cfilter **pcf, | |
| struct Curl_easy *data, | |
| struct connectdata *conn, | |
| const struct Curl_addrinfo *ai, | |
| - | int transport); |
| + | uint8_t transport); |
| /** | |
| * Creates a cfilter that opens a UNIX socket to the given address | |
| @@ -129,7 +129,7 @@ CURLcode Curl_cf_unix_create(struct Curl_cfilter **pcf, | |
| struct Curl_easy *data, | |
| struct connectdata *conn, | |
| const struct Curl_addrinfo *ai, | |
| - | int transport); |
| + | uint8_t transport); |
| /** | |
| * Creates a cfilter that keeps a listening socket. | |
| @@ -238,7 +238,7 @@ bool Curl_shutdown_started(struct Curl_easy *data, int sockindex) | |
| /* retrieves ip address and port from a sockaddr structure. note it calls | |
| curlx_inet_ntop which sets errno on fail, not SOCKERRNO. */ | |
| bool Curl_addr2string(struct sockaddr *sa, curl_socklen_t salen, | |
| - | char *addr, int *port) |
| + | char *addr, uint16_t *port) |
| { | |
| struct sockaddr_in *si = NULL; | |
| #ifdef USE_IPV6 | |
| @@ -254,8 +254,7 @@ bool Curl_addr2string(struct sockaddr *sa, curl_socklen_t salen, | |
| case AF_INET: | |
| si = (struct sockaddr_in *)(void *) sa; | |
| if(curlx_inet_ntop(sa->sa_family, &si->sin_addr, addr, MAX_IPADR_LEN)) { | |
| - | unsigned short us_port = ntohs(si->sin_port); |
| - | *port = us_port; |
| + | *port = ntohs(si->sin_port); |
| return TRUE; | |
| } | |
| break; | |
| @@ -264,8 +263,7 @@ bool Curl_addr2string(struct sockaddr *sa, curl_socklen_t salen, | |
| si6 = (struct sockaddr_in6 *)(void *) sa; | |
| if(curlx_inet_ntop(sa->sa_family, &si6->sin6_addr, addr, | |
| MAX_IPADR_LEN)) { | |
| - | unsigned short us_port = ntohs(si6->sin6_port); |
| - | *port = us_port; |
| + | *port = ntohs(si6->sin6_port); |
| return TRUE; | |
| } | |
| break; | |
| @@ -366,7 +364,7 @@ typedef enum { | |
| struct cf_setup_ctx { | |
| cf_setup_state state; | |
| int ssl_mode; | |
| - | int transport; |
| + | uint8_t transport; |
| }; | |
| static CURLcode cf_setup_connect(struct Curl_cfilter *cf, | |
| @@ -521,7 +519,7 @@ struct Curl_cftype Curl_cft_setup = { | |
| static CURLcode cf_setup_create(struct Curl_cfilter **pcf, | |
| struct Curl_easy *data, | |
| - | int transport, |
| + | uint8_t transport, |
| int ssl_mode) | |
| { | |
| struct Curl_cfilter *cf = NULL; | |
| @@ -554,7 +552,7 @@ out: | |
| static CURLcode cf_setup_add(struct Curl_easy *data, | |
| struct connectdata *conn, | |
| int sockindex, | |
| - | int transport, |
| + | uint8_t transport, |
| int ssl_mode) | |
| { | |
| struct Curl_cfilter *cf; | |
| @@ -571,7 +569,7 @@ out: | |
| CURLcode Curl_cf_setup_insert_after(struct Curl_cfilter *cf_at, | |
| struct Curl_easy *data, | |
| - | int transport, |
| + | uint8_t transport, |
| int ssl_mode) | |
| { | |
| struct Curl_cfilter *cf; | |
| @@ -74,7 +74,7 @@ curl_socket_t Curl_getconnectinfo(struct Curl_easy *data, | |
| struct connectdata **connp); | |
| bool Curl_addr2string(struct sockaddr *sa, curl_socklen_t salen, | |
| - | char *addr, int *port); |
| + | char *addr, uint16_t *port); |
| /* | |
| * Curl_conncontrol() marks the end of a connection/stream. The 'closeit' | |
| @@ -111,7 +111,7 @@ void Curl_conncontrol(struct connectdata *conn, | |
| CURLcode Curl_cf_setup_insert_after(struct Curl_cfilter *cf_at, | |
| struct Curl_easy *data, | |
| - | int transport, |
| + | uint8_t transport, |
| int ssl_mode); | |
| /** | |
| @@ -81,8 +81,6 @@ void Curl_initinfo(struct Curl_easy *data) | |
| info->wouldredirect = NULL; | |
| memset(&info->primary, 0, sizeof(info->primary)); | |
| - | info->primary.remote_port = -1; |
| - | info->primary.local_port = -1; |
| info->retry_after = 0; | |
| info->conn_scheme = 0; | |
| @@ -304,11 +302,17 @@ static CURLcode getinfo_long(struct Curl_easy *data, CURLINFO info, | |
| break; | |
| case CURLINFO_PRIMARY_PORT: | |
| /* Return the (remote) port of the most recent (primary) connection */ | |
| - | *param_longp = data->info.primary.remote_port; |
| + | if(CUR_IP_QUAD_HAS_PORTS(&data->info.primary)) |
| + | *param_longp = data->info.primary.remote_port; |
| + | else |
| + | *param_longp = -1; |
| break; | |
| case CURLINFO_LOCAL_PORT: | |
| /* Return the local port of the most recent (primary) connection */ | |
| - | *param_longp = data->info.primary.local_port; |
| + | if(CUR_IP_QUAD_HAS_PORTS(&data->info.primary)) |
| + | *param_longp = data->info.primary.local_port; |
| + | else |
| + | *param_longp = -1; |
| break; | |
| case CURLINFO_PROXY_ERROR: | |
| *param_longp = (long)data->info.pxcode; | |
| @@ -1001,9 +1001,9 @@ static CURLcode setopt_long(struct Curl_easy *data, CURLoption option, | |
| #endif | |
| #ifndef CURL_DISABLE_PROXY | |
| case CURLOPT_PROXYPORT: | |
| - | if((arg < 0) || (arg > 65535)) |
| + | if((arg < 0) || (arg > UINT16_MAX)) |
| return CURLE_BAD_FUNCTION_ARGUMENT; | |
| - | s->proxyport = (unsigned short)arg; |
| + | s->proxyport = (uint16_t)arg; |
| break; | |
| case CURLOPT_PROXYAUTH: | |
| @@ -2171,7 +2171,6 @@ static CURLcode parse_proxy(struct Curl_easy *data, | |
| long proxytype) | |
| { | |
| char *portptr = NULL; | |
| - | int port = -1; |
| char *proxyuser = NULL; | |
| char *proxypasswd = NULL; | |
| char *host = NULL; | |
| @@ -2293,24 +2292,23 @@ static CURLcode parse_proxy(struct Curl_easy *data, | |
| if(portptr) { | |
| curl_off_t num; | |
| const char *p = portptr; | |
| - | if(!curlx_str_number(&p, &num, 0xffff)) |
| - | port = (int)num; |
| + | if(!curlx_str_number(&p, &num, UINT16_MAX)) |
| + | proxyinfo->port = (uint16_t)num; |
| + | /* Should we not error out when the port number is invalid? */ |
| free(portptr); | |
| } | |
| else { | |
| if(data->set.proxyport) | |
| /* None given in the proxy string, then get the default one if it is | |
| given */ | |
| - | port = (int)data->set.proxyport; |
| + | proxyinfo->port = data->set.proxyport; |
| else { | |
| if(IS_HTTPS_PROXY(proxytype)) | |
| - | port = CURL_DEFAULT_HTTPS_PROXY_PORT; |
| + | proxyinfo->port = CURL_DEFAULT_HTTPS_PROXY_PORT; |
| else | |
| - | port = CURL_DEFAULT_PROXY_PORT; |
| + | proxyinfo->port = CURL_DEFAULT_PROXY_PORT; |
| } | |
| } | |
| - | if(port >= 0) |
| - | proxyinfo->port = port; |
| /* now, clone the proxy hostname */ | |
| uc = curl_url_get(uhp, CURLUPART_HOST, &host, CURLU_URLDECODE); | |
| @@ -528,7 +528,7 @@ struct Curl_handler { | |
| CURLcode (*follow)(struct Curl_easy *data, const char *newurl, | |
| followtype type); | |
| - | int defport; /* Default port. */ |
| + | uint16_t defport; /* Default port. */ |
| curl_prot_t protocol; /* See CURLPROTO_* - this needs to be the single | |
| specific protocol bit */ | |
| curl_prot_t family; /* single bit for protocol family; basically the | |
| @@ -576,26 +576,32 @@ struct Curl_handler { | |
| #define CONNRESULT_NONE 0 /* No extra information. */ | |
| #define CONNRESULT_DEAD (1<<0) /* The connection is dead. */ | |
| + | #define TRNSPRT_NONE 0 |
| + | #define TRNSPRT_TCP 3 |
| + | #define TRNSPRT_UDP 4 |
| + | #define TRNSPRT_QUIC 5 |
| + | #define TRNSPRT_UNIX 6 |
| + | |
| struct ip_quadruple { | |
| char remote_ip[MAX_IPADR_LEN]; | |
| char local_ip[MAX_IPADR_LEN]; | |
| - | int remote_port; |
| - | int local_port; |
| + | uint16_t remote_port; |
| + | uint16_t local_port; |
| + | uint8_t transport; |
| }; | |
| + | #define CUR_IP_QUAD_HAS_PORTS(x) (((x)->transport == TRNSPRT_TCP) || \ |
| + | ((x)->transport == TRNSPRT_UDP) || \ |
| + | ((x)->transport == TRNSPRT_QUIC)) |
| + | |
| struct proxy_info { | |
| struct hostname host; | |
| - | int port; |
| + | uint16_t port; |
| unsigned char proxytype; /* what kind of proxy that is in use */ | |
| char *user; /* proxy username string, allocated */ | |
| char *passwd; /* proxy password string, allocated */ | |
| }; | |
| - | #define TRNSPRT_TCP 3 |
| - | #define TRNSPRT_UDP 4 |
| - | #define TRNSPRT_QUIC 5 |
| - | #define TRNSPRT_UNIX 6 |
| - | |
| /* | |
| * The connectdata struct contains all fields and variables that should be | |
| * unique for an entire connection. | |
| @@ -1364,7 +1370,7 @@ struct UserDefined { | |
| #ifndef CURL_DISABLE_PROXY | |
| struct ssl_config_data proxy_ssl; /* user defined SSL stuff for proxy */ | |
| struct curl_slist *proxyheaders; /* linked list of extra CONNECT headers */ | |
| - | unsigned short proxyport; /* If non-zero, use this port number by |
| + | uint16_t proxyport; /* If non-zero, use this port number by |
| default. If the proxy string features a | |
| ":[port]" that one will override this. */ | |
| unsigned char proxytype; /* what kind of proxy */ | |
| @@ -687,7 +687,7 @@ CURLcode Curl_cf_quic_create(struct Curl_cfilter **pcf, | |
| struct Curl_easy *data, | |
| struct connectdata *conn, | |
| const struct Curl_addrinfo *ai, | |
| - | int transport) |
| + | uint8_t transport) |
| { | |
| (void)transport; | |
| DEBUGASSERT(transport == TRNSPRT_QUIC); | |
| @@ -45,7 +45,7 @@ CURLcode Curl_cf_quic_create(struct Curl_cfilter **pcf, | |
| struct Curl_easy *data, | |
| struct connectdata *conn, | |
| const struct Curl_addrinfo *ai, | |
| - | int transport); |
| + | uint8_t transport); |
| extern struct Curl_cftype Curl_cft_http3; | |
| @@ -96,6 +96,9 @@ class TestBasic: | |
| # there are cases where time_connect is reported as 0 | |
| assert r.stats[0]['time_connect'] >= 0, f'{r.stats[0]}' | |
| assert r.stats[0]['time_appconnect'] > 0, f'{r.stats[0]}' | |
| + | # ports are reported correctly |
| + | assert r.stats[0]['remote_port'] == env.port_for(proto), f'{r.dump_logs()}' |
| + | assert r.stats[0]['local_port'] > 0, f'{r.dump_logs()}' |
| # simple https: HEAD | |
| @pytest.mark.parametrize("proto", Env.http_protos()) | |
| @@ -109,6 +109,8 @@ class TestUnix: | |
| '--unix-socket', uds_faker.path, | |
| ]) | |
| r.check_response(count=1, http_status=200) | |
| + | assert r.stats[0]['remote_port'] == -1, f'{r.dump_logs()}' |
| + | assert r.stats[0]['local_port'] == -1, f'{r.dump_logs()}' |
| # download https: via Unix socket | |
| @pytest.mark.skipif(condition=not Env.have_ssl_curl(), reason="curl without SSL") | |
| @@ -120,6 +122,8 @@ class TestUnix: | |
| '--unix-socket', uds_faker.path, | |
| ]) | |
| r.check_response(exitcode=35, http_status=None) | |
| + | assert r.stats[0]['remote_port'] == -1, f'{r.dump_logs()}' |
| + | assert r.stats[0]['local_port'] == -1, f'{r.dump_logs()}' |
| # download HTTP/3 via Unix socket | |
| @pytest.mark.skipif(condition=not Env.have_h3(), reason='h3 not supported') | |
| @@ -132,3 +136,5 @@ class TestUnix: | |
| '--unix-socket', uds_faker.path, | |
| ]) | |
| r.check_response(exitcode=96, http_status=None) | |
| + | assert r.stats[0]['remote_port'] == -1, f'{r.dump_logs()}' |
| + | assert r.stats[0]['local_port'] == -1, f'{r.dump_logs()}' |
| @@ -141,7 +141,7 @@ static CURLcode test_unit1607(const char *arg) | |
| addr = dns ? dns->addr : NULL; | |
| for(j = 0; j < addressnum; ++j) { | |
| - | int port = 0; |
| + | uint16_t port = 0; |
| char ipaddress[MAX_IPADR_LEN] = {0}; | |
| if(!addr && !tests[i].address[j]) | |
| @@ -143,7 +143,7 @@ static CURLcode test_unit1609(const char *arg) | |
| addr = dns ? dns->addr : NULL; | |
| for(j = 0; j < addressnum; ++j) { | |
| - | int port = 0; |
| + | uint16_t port = 0; |
| char ipaddress[MAX_IPADR_LEN] = {0}; | |
| if(!addr && !tests[i].address[j]) | |
| @@ -110,7 +110,7 @@ static int test_idx; | |
| struct cf_test_ctx { | |
| int idx; | |
| int ai_family; | |
| - | int transport; |
| + | uint8_t transport; |
| char id[16]; | |
| struct curltime started; | |
| timediff_t fail_delay_ms; | |
| @@ -166,7 +166,7 @@ static CURLcode cf_test_create(struct Curl_cfilter **pcf, | |
| struct Curl_easy *data, | |
| struct connectdata *conn, | |
| const struct Curl_addrinfo *ai, | |
| - | int transport) |
| + | uint8_t transport) |
| { | |
| static const struct Curl_cftype cft_test = { | |
| "TEST", | |