diff --git a/src/channels.c b/src/channels.c index ab1a1c7d..cd0b4a06 100644 --- a/src/channels.c +++ b/src/channels.c @@ -1136,52 +1136,54 @@ error: * @see ssh_channel_free() * @see ssh_channel_is_eof() */ -int ssh_channel_close(ssh_channel channel){ - ssh_session session; - int rc = 0; +int ssh_channel_close(ssh_channel channel) +{ + ssh_session session; + int rc = 0; - if(channel == NULL) { - return SSH_ERROR; - } + if(channel == NULL) { + return SSH_ERROR; + } - session = channel->session; + session = channel->session; - if (channel->local_eof == 0) { - rc = ssh_channel_send_eof(channel); - } + if (channel->local_eof == 0) { + rc = ssh_channel_send_eof(channel); + } + + if (rc != SSH_OK) { + return rc; + } + + rc = ssh_buffer_pack(session->out_buffer, + "bd", + SSH2_MSG_CHANNEL_CLOSE, + channel->remote_channel); + if (rc != SSH_OK) { + ssh_set_error_oom(session); + goto error; + } + + rc = ssh_packet_send(session); + SSH_LOG(SSH_LOG_PACKET, + "Sent a close on client channel (%d:%d)", + channel->local_channel, + channel->remote_channel); + + if (rc == SSH_OK) { + channel->state = SSH_CHANNEL_STATE_CLOSED; + } + + rc = ssh_channel_flush(channel); + if(rc == SSH_ERROR) { + goto error; + } - if (rc != SSH_OK) { return rc; - } - - rc = ssh_buffer_pack(session->out_buffer, - "bd", - SSH2_MSG_CHANNEL_CLOSE, - channel->remote_channel); - if (rc != SSH_OK) { - ssh_set_error_oom(session); - goto error; - } - - rc = ssh_packet_send(session); - SSH_LOG(SSH_LOG_PACKET, - "Sent a close on client channel (%d:%d)", - channel->local_channel, - channel->remote_channel); - - if(rc == SSH_OK) { - channel->state=SSH_CHANNEL_STATE_CLOSED; - } - - rc = ssh_channel_flush(channel); - if(rc == SSH_ERROR) - goto error; - - return rc; error: - ssh_buffer_reinit(session->out_buffer); + ssh_buffer_reinit(session->out_buffer); - return rc; + return rc; } /* this termination function waits for a window growing condition */