mirror of
https://git.libssh.org/projects/libssh.git
synced 2026-02-09 18:04:25 +09:00
Reformat ssh_connector_fd_out_cb
Signed-off-by: Jakub Jelen <jjelen@redhat.com> Reviewed-by: Andreas Schneider <asn@cryptomilk.org>
This commit is contained in:
committed by
Andreas Schneider
parent
5506aadf05
commit
832b94a660
@@ -326,35 +326,40 @@ static void ssh_connector_fd_in_cb(ssh_connector connector)
|
|||||||
/** @internal
|
/** @internal
|
||||||
* @brief Callback called when a poll event is received on an output fd
|
* @brief Callback called when a poll event is received on an output fd
|
||||||
*/
|
*/
|
||||||
static void ssh_connector_fd_out_cb(ssh_connector connector){
|
static void
|
||||||
|
ssh_connector_fd_out_cb(ssh_connector connector)
|
||||||
|
{
|
||||||
unsigned char buffer[CHUNKSIZE];
|
unsigned char buffer[CHUNKSIZE];
|
||||||
ssize_t r;
|
ssize_t r;
|
||||||
ssize_t w;
|
ssize_t w;
|
||||||
ssize_t total = 0;
|
ssize_t total = 0;
|
||||||
SSH_LOG(SSH_LOG_TRACE, "connector POLLOUT event for fd %d", connector->out_fd);
|
SSH_LOG(SSH_LOG_TRACE, "connector POLLOUT event for fd %d",
|
||||||
|
connector->out_fd);
|
||||||
|
|
||||||
if(connector->in_available){
|
if (connector->in_available) {
|
||||||
if (connector->in_channel != NULL){
|
if (connector->in_channel != NULL) {
|
||||||
r = ssh_channel_read_nonblocking(connector->in_channel, buffer, CHUNKSIZE, 0);
|
r = ssh_channel_read_nonblocking(connector->in_channel, buffer,
|
||||||
if(r == SSH_ERROR){
|
CHUNKSIZE, 0);
|
||||||
|
if (r == SSH_ERROR) {
|
||||||
ssh_connector_except_channel(connector, connector->in_channel);
|
ssh_connector_except_channel(connector, connector->in_channel);
|
||||||
return;
|
return;
|
||||||
} else if(r == 0 && ssh_channel_is_eof(connector->in_channel)){
|
} else if (r == 0 && ssh_channel_is_eof(connector->in_channel)) {
|
||||||
close(connector->out_fd);
|
close(connector->out_fd);
|
||||||
connector->out_fd = SSH_INVALID_SOCKET;
|
connector->out_fd = SSH_INVALID_SOCKET;
|
||||||
return;
|
return;
|
||||||
} else if(r>0) {
|
} else if (r > 0) {
|
||||||
/* loop around write in case the write blocks even for CHUNKSIZE bytes */
|
/* loop around write in case the write blocks even for CHUNKSIZE bytes */
|
||||||
while (total != r){
|
while (total != r) {
|
||||||
w = ssh_connector_fd_write(connector, buffer + total, r - total);
|
w = ssh_connector_fd_write(connector, buffer + total,
|
||||||
if (w < 0){
|
r - total);
|
||||||
|
if (w < 0) {
|
||||||
ssh_connector_except(connector, connector->out_fd);
|
ssh_connector_except(connector, connector->out_fd);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
total += w;
|
total += w;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (connector->in_fd != SSH_INVALID_SOCKET){
|
} else if (connector->in_fd != SSH_INVALID_SOCKET) {
|
||||||
/* fallback on the socket input callback */
|
/* fallback on the socket input callback */
|
||||||
connector->out_wontblock = 1;
|
connector->out_wontblock = 1;
|
||||||
ssh_connector_fd_in_cb(connector);
|
ssh_connector_fd_in_cb(connector);
|
||||||
|
|||||||
Reference in New Issue
Block a user