Mercurial > dropbear
comparison common-channel.c @ 1049:01eea88963f3 fastopen
merge from default
author | Matt Johnston <matt@ucc.asn.au> |
---|---|
date | Sat, 28 Feb 2015 09:06:40 +0800 |
parents | 0da8ba489c23 d0e6dd5af46e |
children | c71df09bc610 |
comparison
equal
deleted
inserted
replaced
1048:9cec9ed503bb | 1049:01eea88963f3 |
---|---|
393 | 393 |
394 | 394 |
395 /* Send the close message and set the channel as closed */ | 395 /* Send the close message and set the channel as closed */ |
396 static void send_msg_channel_close(struct Channel *channel) { | 396 static void send_msg_channel_close(struct Channel *channel) { |
397 | 397 |
398 TRACE(("enter send_msg_channel_close %p", channel)) | 398 TRACE(("enter send_msg_channel_close %p", (void*)channel)) |
399 if (channel->type->closehandler | 399 if (channel->type->closehandler |
400 && !channel->close_handler_done) { | 400 && !channel->close_handler_done) { |
401 channel->type->closehandler(channel); | 401 channel->type->closehandler(channel); |
402 channel->close_handler_done = 1; | 402 channel->close_handler_done = 1; |
403 } | 403 } |
576 | 576 |
577 if (IS_DROPBEAR_SERVER || (channel->writefd != STDOUT_FILENO)) { | 577 if (IS_DROPBEAR_SERVER || (channel->writefd != STDOUT_FILENO)) { |
578 /* close the FDs in case they haven't been done | 578 /* close the FDs in case they haven't been done |
579 * yet (they might have been shutdown etc) */ | 579 * yet (they might have been shutdown etc) */ |
580 TRACE(("CLOSE writefd %d", channel->writefd)) | 580 TRACE(("CLOSE writefd %d", channel->writefd)) |
581 close(channel->writefd); | 581 m_close(channel->writefd); |
582 TRACE(("CLOSE readfd %d", channel->readfd)) | 582 TRACE(("CLOSE readfd %d", channel->readfd)) |
583 close(channel->readfd); | 583 m_close(channel->readfd); |
584 TRACE(("CLOSE errfd %d", channel->errfd)) | 584 TRACE(("CLOSE errfd %d", channel->errfd)) |
585 close(channel->errfd); | 585 m_close(channel->errfd); |
586 } | 586 } |
587 | 587 |
588 if (!channel->close_handler_done | 588 if (!channel->close_handler_done |
589 && channel->type->closehandler) { | 589 && channel->type->closehandler) { |
590 channel->type->closehandler(channel); | 590 channel->type->closehandler(channel); |
610 | 610 |
611 struct Channel *channel; | 611 struct Channel *channel; |
612 | 612 |
613 channel = getchannel(); | 613 channel = getchannel(); |
614 | 614 |
615 TRACE(("enter recv_msg_channel_request %p", channel)) | 615 TRACE(("enter recv_msg_channel_request %p", (void*)channel)) |
616 | 616 |
617 if (channel->sent_close) { | 617 if (channel->sent_close) { |
618 TRACE(("leave recv_msg_channel_request: already closed channel")) | 618 TRACE(("leave recv_msg_channel_request: already closed channel")) |
619 return; | 619 return; |
620 } | 620 } |
995 } else { | 995 } else { |
996 closein = 1; | 996 closein = 1; |
997 } | 997 } |
998 } else { | 998 } else { |
999 TRACE(("CLOSE some fd %d", fd)) | 999 TRACE(("CLOSE some fd %d", fd)) |
1000 close(fd); | 1000 m_close(fd); |
1001 closein = closeout = 1; | 1001 closein = closeout = 1; |
1002 } | 1002 } |
1003 | 1003 |
1004 if (closeout && (fd == channel->readfd)) { | 1004 if (closeout && (fd == channel->readfd)) { |
1005 channel->readfd = FD_CLOSED; | 1005 channel->readfd = FD_CLOSED; |
1018 /* if we called shutdown on it and all references are gone, then we | 1018 /* if we called shutdown on it and all references are gone, then we |
1019 * need to close() it to stop it lingering */ | 1019 * need to close() it to stop it lingering */ |
1020 if (channel->type->sepfds && channel->readfd == FD_CLOSED | 1020 if (channel->type->sepfds && channel->readfd == FD_CLOSED |
1021 && channel->writefd == FD_CLOSED && channel->errfd == FD_CLOSED) { | 1021 && channel->writefd == FD_CLOSED && channel->errfd == FD_CLOSED) { |
1022 TRACE(("CLOSE (finally) of %d", fd)) | 1022 TRACE(("CLOSE (finally) of %d", fd)) |
1023 close(fd); | 1023 m_close(fd); |
1024 } | 1024 } |
1025 } | 1025 } |
1026 | 1026 |
1027 | 1027 |
1028 #if defined(USING_LISTENERS) || defined(DROPBEAR_CLIENT) | 1028 #if defined(USING_LISTENERS) || defined(DROPBEAR_CLIENT) |
1135 buf_putbyte(ses.writepayload, SSH_MSG_REQUEST_FAILURE); | 1135 buf_putbyte(ses.writepayload, SSH_MSG_REQUEST_FAILURE); |
1136 encrypt_packet(); | 1136 encrypt_packet(); |
1137 } | 1137 } |
1138 | 1138 |
1139 struct Channel* get_any_ready_channel() { | 1139 struct Channel* get_any_ready_channel() { |
1140 size_t i; | |
1140 if (ses.chancount == 0) { | 1141 if (ses.chancount == 0) { |
1141 return NULL; | 1142 return NULL; |
1142 } | 1143 } |
1143 size_t i; | |
1144 for (i = 0; i < ses.chansize; i++) { | 1144 for (i = 0; i < ses.chansize; i++) { |
1145 struct Channel *chan = ses.channels[i]; | 1145 struct Channel *chan = ses.channels[i]; |
1146 if (chan | 1146 if (chan |
1147 && !(chan->sent_eof || chan->recv_eof) | 1147 && !(chan->sent_eof || chan->recv_eof) |
1148 && !(chan->await_open)) { | 1148 && !(chan->await_open)) { |