diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/ssh.c | 17 | 
1 files changed, 16 insertions, 1 deletions
| @@ -1663,7 +1663,7 @@ static CURLcode ssh_statemach_act(struct connectdata *conn)    }    else {      result = Curl_setup_transfer(conn, FIRSTSOCKET, data->req.size, -                               FALSE, NULL, -1, NULL); +                                 FALSE, NULL, -1, NULL);    }    if(result) {      state(conn, SSH_SFTP_CLOSE); @@ -1966,6 +1966,9 @@ static CURLcode ssh_init(struct connectdata *conn)  {    struct SessionHandle *data = conn->data;    struct SSHPROTO *ssh; + +  conn->proto.sshc.actualcode = CURLE_OK; /* reset error code */ +    if(data->state.proto.ssh)      return CURLE_OK; @@ -2109,6 +2112,18 @@ static CURLcode ssh_do(struct connectdata *conn, bool *done)    *done = FALSE; /* default to false */ +  /* +    Since connections can be re-used between SessionHandles, this might be a +    connection already existing but on a fresh SessionHandle struct so we must +    make sure we have a good 'struct SSHPROTO' to play with. For new +    connections, the struct SSHPROTO is allocated and setup in the +    ssh_connect() function. +  */ +  Curl_reset_reqproto(conn); +  res = ssh_init(conn); +  if(res) +    return res; +    data->req.size = -1; /* make sure this is unknown at this point */    Curl_pgrsSetUploadCounter(data, 0); | 
