Lines Matching refs:ctx
800 static void cf_socket_ctx_init(struct cf_socket_ctx *ctx,
804 memset(ctx, 0, sizeof(*ctx));
805 ctx->sock = CURL_SOCKET_BAD;
806 ctx->transport = transport;
807 Curl_sock_assign_addr(&ctx->addr, ai, transport);
808 Curl_bufq_init(&ctx->recvbuf, NW_RECV_CHUNK_SIZE, NW_RECV_CHUNKS);
815 ctx->wblock_percent = (int)l;
821 ctx->wpartial_percent = (int)l;
827 ctx->rblock_percent = (int)l;
833 ctx->recv_max = (size_t)l;
849 struct cf_socket_ctx *ctx = rctx->cf->ctx;
853 nread = sread(ctx->sock, buf, len);
890 struct cf_socket_ctx *ctx = cf->ctx;
892 if(ctx && CURL_SOCKET_BAD != ctx->sock) {
894 ")", ctx->sock);
895 if(ctx->sock == cf->conn->sock[cf->sockindex])
897 socket_close(data, cf->conn, !ctx->accepted, ctx->sock);
898 ctx->sock = CURL_SOCKET_BAD;
899 if(ctx->active && cf->sockindex == FIRSTSOCKET)
901 Curl_bufq_reset(&ctx->recvbuf);
902 ctx->active = FALSE;
903 ctx->buffer_recv = FALSE;
904 memset(&ctx->started_at, 0, sizeof(ctx->started_at));
905 memset(&ctx->connected_at, 0, sizeof(ctx->connected_at));
913 struct cf_socket_ctx *ctx = cf->ctx;
917 Curl_bufq_free(&ctx->recvbuf);
918 free(ctx);
919 cf->ctx = NULL;
925 struct cf_socket_ctx *ctx = cf->ctx;
936 if(getsockname(ctx->sock, (struct sockaddr*) &ssloc, &slen)) {
943 ctx->l_ip, &ctx->l_port)) {
951 ctx->l_ip[0] = 0;
952 ctx->l_port = -1;
960 struct cf_socket_ctx *ctx = cf->ctx;
963 if(!Curl_addr2string(&ctx->addr.sa_addr, ctx->addr.addrlen,
964 ctx->r_ip, &ctx->r_port)) {
967 ctx->error = errno;
979 struct cf_socket_ctx *ctx = cf->ctx;
986 DEBUGASSERT(ctx->sock == CURL_SOCKET_BAD);
987 ctx->started_at = Curl_now();
988 result = socket_open(data, &ctx->addr, &ctx->sock);
997 if(ctx->addr.family == AF_INET6) {
998 set_ipv6_v6only(ctx->sock, 0);
999 infof(data, " Trying [%s]:%d...", ctx->r_ip, ctx->r_port);
1003 infof(data, " Trying %s:%d...", ctx->r_ip, ctx->r_port);
1006 is_tcp = (ctx->addr.family == AF_INET
1007 || ctx->addr.family == AF_INET6) &&
1008 ctx->addr.socktype == SOCK_STREAM;
1010 is_tcp = (ctx->addr.family == AF_INET) &&
1011 ctx->addr.socktype == SOCK_STREAM;
1014 tcpnodelay(data, ctx->sock);
1016 nosigpipe(data, ctx->sock);
1018 Curl_sndbufset(ctx->sock);
1021 tcpkeepalive(data, ctx->sock);
1027 ctx->sock,
1041 if(ctx->addr.family == AF_INET
1043 || ctx->addr.family == AF_INET6
1046 result = bindlocal(data, cf->conn, ctx->sock, ctx->addr.family,
1047 Curl_ipv6_scope(&ctx->addr.sa_addr));
1060 (void)curlx_nonblock(ctx->sock, TRUE);
1061 ctx->sock_connected = (ctx->addr.socktype != SOCK_DGRAM);
1064 if(ctx->sock != CURL_SOCKET_BAD) {
1065 socket_close(data, cf->conn, TRUE, ctx->sock);
1066 ctx->sock = CURL_SOCKET_BAD;
1071 ctx->connected_at = Curl_now();
1075 result, ctx->sock);
1082 struct cf_socket_ctx *ctx = cf->ctx;
1100 endpoints.sae_dstaddr = &ctx->addr.sa_addr;
1101 endpoints.sae_dstaddrlen = ctx->addr.addrlen;
1103 rc = connectx(ctx->sock, &endpoints, SAE_ASSOCID_ANY,
1108 rc = connect(ctx->sock, &ctx->addr.sa_addr, ctx->addr.addrlen);
1111 rc = connect(ctx->sock, &ctx->addr.sa_addr, ctx->addr.addrlen);
1114 if(setsockopt(ctx->sock, IPPROTO_TCP, TCP_FASTOPEN_CONNECT,
1117 CURL_FORMAT_SOCKET_T, ctx->sock);
1119 rc = connect(ctx->sock, &ctx->addr.sa_addr, ctx->addr.addrlen);
1122 rc = connect(ctx->sock, &ctx->addr.sa_addr, ctx->addr.addrlen);
1128 rc = connect(ctx->sock, &ctx->addr.sa_addr, ctx->addr.addrlen);
1137 struct cf_socket_ctx *ctx = cf->ctx;
1152 if(ctx->sock == CURL_SOCKET_BAD) {
1169 ctx->l_ip, ctx->l_port);
1171 result = socket_connect_result(data, ctx->r_ip, error);
1181 (void)verifyconnect(ctx->sock, NULL);
1184 rc = SOCKET_WRITABLE(ctx->sock, 0);
1191 if(verifyconnect(ctx->sock, &ctx->error)) {
1193 ctx->connected_at = Curl_now();
1202 (void)verifyconnect(ctx->sock, &ctx->error);
1208 if(ctx->error) {
1210 data->state.os_errno = ctx->error;
1211 SET_SOCKERRNO(ctx->error);
1216 ctx->r_ip, ctx->r_port, ctx->l_ip, ctx->l_port,
1217 Curl_strerror(ctx->error, buffer, sizeof(buffer)));
1221 if(ctx->sock != CURL_SOCKET_BAD) {
1222 socket_close(data, cf->conn, TRUE, ctx->sock);
1223 ctx->sock = CURL_SOCKET_BAD;
1246 struct cf_socket_ctx *ctx = cf->ctx;
1248 if(ctx->sock != CURL_SOCKET_BAD) {
1250 Curl_pollset_set_out_only(data, ps, ctx->sock);
1253 else if(!ctx->active) {
1254 Curl_pollset_add_in(data, ps, ctx->sock);
1263 struct cf_socket_ctx *ctx = cf->ctx;
1267 if(!Curl_bufq_is_empty(&ctx->recvbuf))
1270 readable = SOCKET_READABLE(ctx->sock, 0);
1277 struct cf_socket_ctx *ctx = cf->ctx;
1284 cf->conn->sock[cf->sockindex] = ctx->sock;
1288 if(ctx->wblock_percent > 0) {
1291 if(c >= ((100-ctx->wblock_percent)*256/100)) {
1299 if(cf->cft != &Curl_cft_udp && ctx->wpartial_percent > 0 && len > 8) {
1300 len = len * ctx->wpartial_percent / 100;
1310 nwritten = sendto(ctx->sock, buf, len, MSG_FASTOPEN,
1317 nwritten = swrite(ctx->sock, buf, len);
1355 struct cf_socket_ctx *ctx = cf->ctx;
1362 cf->conn->sock[cf->sockindex] = ctx->sock;
1366 if(cf->cft != &Curl_cft_udp && ctx->rblock_percent > 0) {
1369 if(c >= ((100-ctx->rblock_percent)*256/100)) {
1377 if(cf->cft != &Curl_cft_udp && ctx->recv_max && ctx->recv_max < len) {
1379 len = ctx->recv_max;
1385 if(ctx->buffer_recv && !Curl_bufq_is_empty(&ctx->recvbuf)) {
1387 nread = Curl_bufq_read(&ctx->recvbuf, (unsigned char *)buf, len, err);
1397 if(ctx->buffer_recv && len < NW_SMALL_READS) {
1399 nwritten = Curl_bufq_slurp(&ctx->recvbuf, nw_in_read, &rctx, err);
1400 if(nwritten < 0 && !Curl_bufq_is_empty(&ctx->recvbuf)) {
1404 nread = Curl_bufq_read(&ctx->recvbuf, (unsigned char *)buf, len, err);
1417 nread = Curl_bufq_read(&ctx->recvbuf, (unsigned char *)buf, len, err);
1428 if(nread > 0 && !ctx->got_first_byte) {
1429 ctx->first_byte_at = Curl_now();
1430 ctx->got_first_byte = TRUE;
1439 struct cf_socket_ctx *ctx = cf->ctx;
1442 DEBUGASSERT(sizeof(ctx->r_ip) == sizeof(cf->conn->primary_ip));
1443 memcpy(cf->conn->primary_ip, ctx->r_ip, sizeof(cf->conn->primary_ip));
1448 struct cf_socket_ctx *ctx = cf->ctx;
1451 cf->conn->sock[cf->sockindex] = ctx->sock;
1454 cf->conn->remote_addr = &ctx->addr;
1456 cf->conn->bits.ipv6 = (ctx->addr.family == AF_INET6)? TRUE : FALSE;
1460 Curl_persistconninfo(data, cf->conn, ctx->l_ip, ctx->l_port);
1465 ctx->buffer_recv = FALSE;
1467 ctx->active = TRUE;
1474 struct cf_socket_ctx *ctx = cf->ctx;
1483 Curl_persistconninfo(data, cf->conn, ctx->l_ip, ctx->l_port);
1486 ctx->sock = CURL_SOCKET_BAD;
1496 struct cf_socket_ctx *ctx = cf->ctx;
1502 if(!ctx || ctx->sock == CURL_SOCKET_BAD)
1506 pfd[0].fd = ctx->sock;
1533 struct cf_socket_ctx *ctx = cf->ctx;
1538 *((curl_socket_t *)pres2) = ctx->sock;
1541 if(ctx->got_first_byte) {
1542 timediff_t ms = Curl_timediff(ctx->first_byte_at, ctx->started_at);
1550 switch(ctx->transport) {
1555 if(ctx->got_first_byte) {
1556 *when = ctx->first_byte_at;
1561 *when = ctx->connected_at;
1598 struct cf_socket_ctx *ctx = NULL;
1605 ctx = calloc(1, sizeof(*ctx));
1606 if(!ctx) {
1610 cf_socket_ctx_init(ctx, ai, transport);
1612 result = Curl_cf_create(&cf, &Curl_cft_tcp, ctx);
1618 Curl_safefree(ctx);
1627 struct cf_socket_ctx *ctx = cf->ctx;
1631 DEBUGASSERT(ctx->sock != CURL_SOCKET_BAD);
1638 rc = connect(ctx->sock, &ctx->addr.sa_addr, ctx->addr.addrlen);
1640 return socket_connect_result(data, ctx->r_ip, SOCKERRNO);
1642 ctx->sock_connected = TRUE;
1647 (ctx->transport == TRNSPRT_QUIC)? "QUIC" : "UDP",
1648 ctx->sock, ctx->l_ip, ctx->l_port, ctx->r_ip, ctx->r_port);
1650 (void)curlx_nonblock(ctx->sock, TRUE);
1651 switch(ctx->addr.family) {
1655 (void)setsockopt(ctx->sock, IPPROTO_IP, IP_MTU_DISCOVER, &val,
1663 (void)setsockopt(ctx->sock, IPPROTO_IPV6, IPV6_MTU_DISCOVER, &val,
1676 struct cf_socket_ctx *ctx = cf->ctx;
1685 if(ctx->sock == CURL_SOCKET_BAD) {
1692 if(ctx->transport == TRNSPRT_QUIC) {
1698 ctx->sock, ctx->l_ip, ctx->l_port);
1702 CURL_FORMAT_SOCKET_T " (unconnected)", ctx->sock);
1735 struct cf_socket_ctx *ctx = NULL;
1742 ctx = calloc(1, sizeof(*ctx));
1743 if(!ctx) {
1747 cf_socket_ctx_init(ctx, ai, transport);
1749 result = Curl_cf_create(&cf, &Curl_cft_udp, ctx);
1755 Curl_safefree(ctx);
1786 struct cf_socket_ctx *ctx = NULL;
1793 ctx = calloc(1, sizeof(*ctx));
1794 if(!ctx) {
1798 cf_socket_ctx_init(ctx, ai, transport);
1800 result = Curl_cf_create(&cf, &Curl_cft_unix, ctx);
1806 Curl_safefree(ctx);
1850 struct cf_socket_ctx *ctx = NULL;
1856 ctx = calloc(1, sizeof(*ctx));
1857 if(!ctx) {
1861 ctx->transport = conn->transport;
1862 ctx->sock = *s;
1863 ctx->accepted = FALSE;
1864 result = Curl_cf_create(&cf, &Curl_cft_tcp_accept, ctx);
1869 conn->sock[sockindex] = ctx->sock;
1871 ctx->active = TRUE;
1872 ctx->connected_at = Curl_now();
1875 CURL_FORMAT_SOCKET_T ")", ctx->sock);
1880 Curl_safefree(ctx);
1888 struct cf_socket_ctx *ctx = cf->ctx;
1894 ctx->r_ip[0] = 0;
1895 ctx->r_port = 0;
1898 if(getpeername(ctx->sock, (struct sockaddr*) &ssrem, &plen)) {
1905 ctx->r_ip, &ctx->r_port)) {
1911 ctx->r_ip[0] = 0;
1912 ctx->r_port = 0;
1922 struct cf_socket_ctx *ctx = NULL;
1928 ctx = cf->ctx;
1930 socket_close(data, conn, TRUE, ctx->sock);
1931 ctx->sock = *s;
1932 conn->sock[sockindex] = ctx->sock;
1935 ctx->active = TRUE;
1936 ctx->accepted = TRUE;
1937 ctx->connected_at = Curl_now();
1941 ctx->sock, ctx->r_ip, ctx->r_port);
1964 if(cf_is_socket(cf) && cf->ctx) {
1965 struct cf_socket_ctx *ctx = cf->ctx;
1968 *psock = ctx->sock;
1970 *paddr = &ctx->addr;
1972 *pr_ip_str = ctx->r_ip;
1974 *pr_port = ctx->r_port;
1978 *pl_ip_str = ctx->l_ip;
1980 *pl_port = ctx->l_port;