ssh: improve the logic for detecting blocking direction

This fixes a regression introduced by commit 0feeab78 limiting the speed
of SCP upload to 16384 B/s on a fast connection (such as localhost).
This commit is contained in:
Kamil Dudka 2013-10-07 16:07:50 +02:00 committed by Daniel Stenberg
parent 143d7c13d8
commit d015f4ccac
2 changed files with 6 additions and 3 deletions

View File

@ -59,6 +59,7 @@ This release includes the following bugfixes:
o win32: fix Visual Studio 2010 build with WINVER >= 0x600 [22] o win32: fix Visual Studio 2010 build with WINVER >= 0x600 [22]
o configure: use icc options without space [21] o configure: use icc options without space [21]
o test1112: Increase the timeout from 7s to 16s [20] o test1112: Increase the timeout from 7s to 16s [20]
o SCP: upload speed on a fast connection limited to 16384 B/s
This release includes the following known bugs: This release includes the following known bugs:

View File

@ -2288,6 +2288,10 @@ static CURLcode ssh_statemach_act(struct connectdata *conn, bool *block)
sshc->actualcode = result; sshc->actualcode = result;
} }
else { else {
/* store this original bitmask setup to use later on if we can't
figure out a "real" bitmask */
sshc->orig_waitfor = data->req.keepon;
/* we want to use the _sending_ function even when the socket turns /* we want to use the _sending_ function even when the socket turns
out readable as the underlying libssh2 scp send function will deal out readable as the underlying libssh2 scp send function will deal
with both accordingly */ with both accordingly */
@ -2604,9 +2608,7 @@ static void ssh_block2waitfor(struct connectdata *conn, bool block)
{ {
struct ssh_conn *sshc = &conn->proto.sshc; struct ssh_conn *sshc = &conn->proto.sshc;
int dir; int dir;
if(!block) if(block && (dir = libssh2_session_block_directions(sshc->ssh_session))) {
conn->waitfor = 0;
else if((dir = libssh2_session_block_directions(sshc->ssh_session))) {
/* translate the libssh2 define bits into our own bit defines */ /* translate the libssh2 define bits into our own bit defines */
conn->waitfor = ((dir&LIBSSH2_SESSION_BLOCK_INBOUND)?KEEP_RECV:0) | conn->waitfor = ((dir&LIBSSH2_SESSION_BLOCK_INBOUND)?KEEP_RECV:0) |
((dir&LIBSSH2_SESSION_BLOCK_OUTBOUND)?KEEP_SEND:0); ((dir&LIBSSH2_SESSION_BLOCK_OUTBOUND)?KEEP_SEND:0);