diff --git a/lib/gtls.c b/lib/gtls.c index 2cb1fae..99be073 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 3312e8a..4058d78 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 0027e31..285b3ae 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 74f9b57..dd4f911 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 03b1be2..eceb013 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 ffd01c7..94bcb9c 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 4a93099..c3a94fe 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 0e23c08..ce62605 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 c41db0a..ec7f46a 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 efc56d7..30782c2 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;