channel: return code and _libssh2_error cleanup

Made sure that all transport_write() call failures get _libssh2_error
called.
This commit is contained in:
Daniel Stenberg 2010-10-07 11:16:49 +02:00
parent b3d6c6567d
commit 665d9ee885

View File

@ -213,11 +213,12 @@ _libssh2_channel_open(LIBSSH2_SESSION * session, const char *channel_type,
rc = _libssh2_transport_write(session, session->open_packet,
session->open_packet_len);
if (rc == LIBSSH2_ERROR_EAGAIN) {
_libssh2_error(session, LIBSSH2_ERROR_EAGAIN,
_libssh2_error(session, rc,
"Would block sending channel-open request");
return NULL;
} else if (rc) {
_libssh2_error(session, LIBSSH2_ERROR_SOCKET_SEND,
}
else if (rc) {
_libssh2_error(session, rc,
"Unable to send channel-open request");
goto channel_error;
}
@ -476,7 +477,8 @@ channel_forward_listen(LIBSSH2_SESSION * session, const char *host,
"Would block sending global-request packet for "
"forward listen request");
return NULL;
} else if (rc) {
}
else if (rc) {
_libssh2_error(session, LIBSSH2_ERROR_SOCKET_SEND,
"Unable to send global-request packet for forward "
"listen request");
@ -635,6 +637,8 @@ int _libssh2_channel_forward_cancel(LIBSSH2_LISTENER *listener)
if (listener->chanFwdCncl_state == libssh2_NB_state_created) {
rc = _libssh2_transport_write(session, packet, packet_len);
if (rc == LIBSSH2_ERROR_EAGAIN) {
_libssh2_error(session, rc,
"Would block sending forward request");
listener->chanFwdCncl_data = packet;
return rc;
}
@ -803,6 +807,8 @@ static int channel_setenv(LIBSSH2_CHANNEL *channel,
rc = _libssh2_transport_write(session, channel->setenv_packet,
channel->setenv_packet_len);
if (rc == LIBSSH2_ERROR_EAGAIN) {
_libssh2_error(session, rc,
"Would block sending setenv request");
return rc;
} else if (rc) {
LIBSSH2_FREE(session, channel->setenv_packet);
@ -925,6 +931,8 @@ static int channel_request_pty(LIBSSH2_CHANNEL *channel,
rc = _libssh2_transport_write(session, channel->reqPTY_packet,
channel->reqPTY_packet_len);
if (rc == LIBSSH2_ERROR_EAGAIN) {
_libssh2_error(session, rc,
"Would block sending pty request");
return rc;
} else if (rc) {
LIBSSH2_FREE(session, channel->reqPTY_packet);
@ -952,7 +960,8 @@ static int channel_request_pty(LIBSSH2_CHANNEL *channel,
return rc;
} else if (rc) {
channel->reqPTY_state = libssh2_NB_state_idle;
return -1;
return _libssh2_error(session, LIBSSH2_ERROR_PROTO,
"Failed to require the PTY package");
}
code = data[0];
@ -1034,6 +1043,8 @@ channel_request_pty_size(LIBSSH2_CHANNEL * channel, int width,
rc = _libssh2_transport_write(session, channel->reqPTY_packet,
channel->reqPTY_packet_len);
if (rc == LIBSSH2_ERROR_EAGAIN) {
_libssh2_error(session, rc,
"Would block sending window-change request");
return rc;
} else if (rc) {
LIBSSH2_FREE(session, channel->reqPTY_packet);
@ -1047,11 +1058,13 @@ channel_request_pty_size(LIBSSH2_CHANNEL * channel, int width,
_libssh2_htonu32(channel->reqPTY_local_channel, channel->local.id);
channel->reqPTY_state = libssh2_NB_state_sent;
return 0;
return LIBSSH2_ERROR_NONE;
}
channel->reqPTY_state = libssh2_NB_state_idle;
return -1;
/* reaching this point is a protocol error of some sorts */
return LIBSSH2_ERROR_PROTO;
}
LIBSSH2_API int
@ -1152,6 +1165,8 @@ channel_x11_req(LIBSSH2_CHANNEL *channel, int single_connection,
rc = _libssh2_transport_write(session, channel->reqX11_packet,
channel->reqX11_packet_len);
if (rc == LIBSSH2_ERROR_EAGAIN) {
_libssh2_error(session, rc,
"Would block sending X11-req packet");
return rc;
}
if (rc) {
@ -1271,6 +1286,8 @@ _libssh2_channel_process_startup(LIBSSH2_CHANNEL *channel,
rc = _libssh2_transport_write(session, channel->process_packet,
channel->process_packet_len);
if (rc == LIBSSH2_ERROR_EAGAIN) {
_libssh2_error(session, rc,
"Would block sending channel request");
return rc;
}
else if (rc) {
@ -1512,6 +1529,8 @@ _libssh2_channel_receive_window_adjust(LIBSSH2_CHANNEL * channel,
rc = _libssh2_transport_write(channel->session, channel->adjust_adjust, 9);
if (rc == LIBSSH2_ERROR_EAGAIN) {
_libssh2_error(channel->session, rc,
"Would block sending window adjust");
return rc;
}
else if (rc) {
@ -2091,6 +2110,8 @@ static int channel_send_eof(LIBSSH2_CHANNEL *channel)
_libssh2_htonu32(packet + 1, channel->remote.id);
rc = _libssh2_transport_write(session, packet, 5);
if (rc == LIBSSH2_ERROR_EAGAIN) {
_libssh2_error(session, rc,
"Would block sending EOF");
return rc;
}
else if (rc) {
@ -2181,7 +2202,8 @@ static int channel_wait_eof(LIBSSH2_CHANNEL *channel)
}
else if (rc < 0) {
channel->wait_eof_state = libssh2_NB_state_idle;
return -1;
return _libssh2_error(session, rc,
"_libssh2_transport_read() bailed out!");
}
} while (1);
@ -2240,6 +2262,8 @@ int _libssh2_channel_close(LIBSSH2_CHANNEL * channel)
if (channel->close_state == libssh2_NB_state_created) {
retcode = _libssh2_transport_write(session, channel->close_packet, 5);
if (retcode == LIBSSH2_ERROR_EAGAIN) {
_libssh2_error(session, rc,
"Would block sending close-channel");
return retcode;
} else if (retcode) {
channel->close_state = libssh2_NB_state_idle;