diff --git a/lib/gtls.c b/lib/gtls.c index 2cb1fae410d4aa02eb42e5c58231efbebc9be495..99be073a06745893bd14953f9ea222da508955a1 100644 --- a/lib/gtls.c +++ b/lib/gtls.c @@ -633,8 +633,8 @@ gtls_connect_step3(struct connectdata *conn, infof(data, "\t MAC: %s\n", ptr); conn->ssl[sockindex].state = ssl_connection_complete; - conn->recv = gtls_recv; - conn->send = gtls_send; + conn->recv[sockindex] = gtls_recv; + conn->send[sockindex] = gtls_send; { /* we always unconditionally get the session id here, as even if we diff --git a/lib/nss.c b/lib/nss.c index 3312e8a4ff835c6c83d1dd2e4bff7c6ad25c35fd..4058d7867def5e4644a4aa4403c64ec530ee9aa6 100644 --- a/lib/nss.c +++ b/lib/nss.c @@ -1339,8 +1339,8 @@ CURLcode Curl_nss_connect(struct connectdata *conn, int sockindex) } connssl->state = ssl_connection_complete; - conn->recv = nss_recv; - conn->send = nss_send; + conn->recv[sockindex] = nss_recv; + conn->send[sockindex] = nss_send; display_conn_info(conn, connssl->handle); diff --git a/lib/polarssl.c b/lib/polarssl.c index 0027e31e0e8382973311000b0bd3e5bb41af80e7..285b3ae04712df434247f22d4d9a8df96002970b 100644 --- a/lib/polarssl.c +++ b/lib/polarssl.c @@ -302,8 +302,8 @@ Curl_polarssl_connect(struct connectdata *conn, } conn->ssl[sockindex].state = ssl_connection_complete; - conn->recv = polarssl_recv; - conn->send = polarssl_send; + conn->recv[sockindex] = polarssl_recv; + conn->send[sockindex] = polarssl_send; /* Save the current session data for possible re-use */ { diff --git a/lib/qssl.c b/lib/qssl.c index 74f9b5766e4cf54bc9ef19a9a92eda632bcfbd6b..dd4f911d1b5606773241b1d4b210fd38e55706da 100644 --- a/lib/qssl.c +++ b/lib/qssl.c @@ -268,8 +268,8 @@ CURLcode Curl_qsossl_connect(struct connectdata * conn, int sockindex) } if (rc == CURLE_OK) { connssl->state = ssl_connection_complete; - conn->recv = qsossl_recv; - conn->send = qsossl_send; + conn->recv[sockindex] = qsossl_recv; + conn->send[sockindex] = qsossl_send; } return rc; diff --git a/lib/security.c b/lib/security.c index 03b1be251027de81f1b13a54d8510fc45a7f9f3b..eceb013b5f9f5967d9e5b22f70340e5d64e651d3 100644 --- a/lib/security.c +++ b/lib/security.c @@ -466,8 +466,10 @@ Curl_sec_login(struct connectdata *conn) conn->mech = *m; conn->sec_complete = 1; if (conn->data_prot != prot_clear) { - conn->recv = sec_read; - conn->send = _sec_send; + conn->recv[FIRSTSOCKET] = sec_read; + conn->send[FIRSTSOCKET] = _sec_send; + conn->recv[SECONDARYSOCKET] = sec_read; + conn->send[SECONDARYSOCKET] = _sec_send; } conn->command_prot = prot_safe; /* Set the requested protection level */ diff --git a/lib/sendf.c b/lib/sendf.c index ffd01c7449c457d4228a6aafc5593e9a5d54c1f6..94bcb9c78ace17b897bf7b2ff9c3c8b0e115c59c 100644 --- a/lib/sendf.c +++ b/lib/sendf.c @@ -251,7 +251,7 @@ CURLcode Curl_write(struct connectdata *conn, CURLcode curlcode = CURLE_OK; int num = (sockfd == conn->sock[SECONDARYSOCKET]); - bytes_written = conn->send(conn, num, mem, len, &curlcode); + bytes_written = conn->send[num](conn, num, mem, len, &curlcode); *written = bytes_written; if(-1 != bytes_written) @@ -576,7 +576,7 @@ CURLcode Curl_read(struct connectdata *conn, /* connection data */ buffertofill = buf; } - nread = conn->recv(conn, num, buffertofill, bytesfromsocket, &curlcode); + nread = conn->recv[num](conn, num, buffertofill, bytesfromsocket, &curlcode); if(nread == -1) return curlcode; diff --git a/lib/ssh.c b/lib/ssh.c index 4a93099982528418e55bd013a823781d0535e8d5..c3a94fe32baefe78ef7488b3443e1295dabf0239 100644 --- a/lib/ssh.c +++ b/lib/ssh.c @@ -2493,11 +2493,11 @@ static CURLcode ssh_connect(struct connectdata *conn, bool *done) return result; if(conn->protocol & PROT_SCP) { - conn->recv = scp_recv; - conn->send = scp_send; + conn->recv[FIRSTSOCKET] = scp_recv; + conn->send[FIRSTSOCKET] = scp_send; } else { - conn->recv = sftp_recv; - conn->send = sftp_send; + conn->recv[FIRSTSOCKET] = sftp_recv; + conn->send[FIRSTSOCKET] = sftp_send; } ssh = &conn->proto.sshc; diff --git a/lib/ssluse.c b/lib/ssluse.c index 0e23c084276481e28814ca22332ef774fa682e65..ce62605e8b616669cf4a9c3ec3477df85609e83e 100644 --- a/lib/ssluse.c +++ b/lib/ssluse.c @@ -2440,8 +2440,8 @@ ossl_connect_common(struct connectdata *conn, if(ssl_connect_done==connssl->connecting_state) { connssl->state = ssl_connection_complete; - conn->recv = ossl_recv; - conn->send = ossl_send; + conn->recv[sockindex] = ossl_recv; + conn->send[sockindex] = ossl_send; *done = TRUE; } else diff --git a/lib/url.c b/lib/url.c index c41db0a7cdb95270fd3d48077eb2210f6cbe5f50..ec7f46a3e636841825ed0dd2a3a6506532508450 100644 --- a/lib/url.c +++ b/lib/url.c @@ -4754,8 +4754,10 @@ static CURLcode create_conn(struct SessionHandle *data, return result; } - conn->recv = Curl_recv_plain; - conn->send = Curl_send_plain; + conn->recv[FIRSTSOCKET] = Curl_recv_plain; + conn->send[FIRSTSOCKET] = Curl_send_plain; + conn->recv[SECONDARYSOCKET] = Curl_recv_plain; + conn->send[SECONDARYSOCKET] = Curl_send_plain; /*********************************************************************** * file: is a special case in that it doesn't need a network connection diff --git a/lib/urldata.h b/lib/urldata.h index efc56d7b05e880ffd56d15ffe6fa6ec982922e5f..30782c2a2b4fda1a07deaa461fecb00b6dae27a8 100644 --- a/lib/urldata.h +++ b/lib/urldata.h @@ -760,8 +760,8 @@ struct connectdata { curl_socket_t sock[2]; /* two sockets, the second is used for the data transfer when doing FTP */ - Curl_recv *recv; - Curl_send *send; + Curl_recv *recv[2]; + Curl_send *send[2]; struct ssl_connect_data ssl[2]; /* this is for ssl-stuff */ struct ssl_config_data ssl_config;