[BACK]Return to channels.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / ssh

Diff for /src/usr.bin/ssh/channels.c between version 1.92 and 1.93

version 1.92, 2001/02/16 13:38:18 version 1.93, 2001/02/28 08:54:55
Line 824 
Line 824 
                             buffer_len(&c->extended));                              buffer_len(&c->extended));
                         debug2("channel %d: written %d to efd %d",                          debug2("channel %d: written %d to efd %d",
                             c->self, len, c->efd);                              c->self, len, c->efd);
                         if (len > 0) {                          if (len < 0 && (errno == EINTR || errno == EAGAIN))
                                   return 1;
                           if (len <= 0) {
                                   debug2("channel %d: closing write-efd %d",
                                       c->self, c->efd);
                                   close(c->efd);
                                   c->efd = -1;
                           } else {
                                 buffer_consume(&c->extended, len);                                  buffer_consume(&c->extended, len);
                                 c->local_consumed += len;                                  c->local_consumed += len;
                         }                          }
Line 833 
Line 840 
                         len = read(c->efd, buf, sizeof(buf));                          len = read(c->efd, buf, sizeof(buf));
                         debug2("channel %d: read %d from efd %d",                          debug2("channel %d: read %d from efd %d",
                              c->self, len, c->efd);                               c->self, len, c->efd);
                         if (len == 0) {                          if (len < 0 && (errno == EINTR || errno == EAGAIN))
                                 debug("channel %d: closing efd %d",                                  return 1;
                           if (len <= 0) {
                                   debug2("channel %d: closing read-efd %d",
                                     c->self, c->efd);                                      c->self, c->efd);
                                 close(c->efd);                                  close(c->efd);
                                 c->efd = -1;                                  c->efd = -1;
                         } else if (len > 0)                          } else {
                                 buffer_append(&c->extended, buf, len);                                  buffer_append(&c->extended, buf, len);
                           }
                 }                  }
         }          }
         return 1;          return 1;
 }  }
 int  int
 channel_check_window(Channel *c, fd_set * readset, fd_set * writeset)  channel_check_window(Channel *c)
 {  {
         if (!(c->flags & (CHAN_CLOSE_SENT|CHAN_CLOSE_RCVD)) &&          if (!(c->flags & (CHAN_CLOSE_SENT|CHAN_CLOSE_RCVD)) &&
             c->local_window < c->local_window_max/2 &&              c->local_window < c->local_window_max/2 &&
Line 876 
Line 886 
         channel_handle_rfd(c, readset, writeset);          channel_handle_rfd(c, readset, writeset);
         channel_handle_wfd(c, readset, writeset);          channel_handle_wfd(c, readset, writeset);
         channel_handle_efd(c, readset, writeset);          channel_handle_efd(c, readset, writeset);
         channel_check_window(c, readset, writeset);  
           channel_check_window(c);
 }  }
   
 void  void
Line 984 
Line 995 
                 if (ftab[c->type] == NULL)                  if (ftab[c->type] == NULL)
                         continue;                          continue;
                 (*ftab[c->type])(c, readset, writeset);                  (*ftab[c->type])(c, readset, writeset);
                 chan_delete_if_full_closed(c);                  if (chan_is_dead(c)) {
                           /*
                            * we have to remove the fd's from the select mask
                            * before the channels are free'd and the fd's are
                            * closed
                            */
                           if (c->wfd != -1)
                                   FD_CLR(c->wfd, writeset);
                           if (c->rfd != -1)
                                   FD_CLR(c->rfd, readset);
                           if (c->efd != -1) {
                                   if (c->extended_usage == CHAN_EXTENDED_READ)
                                           FD_CLR(c->efd, readset);
                                   if (c->extended_usage == CHAN_EXTENDED_WRITE)
                                           FD_CLR(c->efd, writeset);
                           }
                           channel_free(c->self);
                   }
         }          }
 }  }
   
Line 1037 
Line 1065 
                 } else {                  } else {
                         if (c->type != SSH_CHANNEL_OPEN)                          if (c->type != SSH_CHANNEL_OPEN)
                                 continue;                                  continue;
                         if (c->istate != CHAN_INPUT_OPEN &&  
                             c->istate != CHAN_INPUT_WAIT_DRAIN)  
                                 continue;  
                 }                  }
                 if (compat20 &&                  if (compat20 &&
                     (c->flags & (CHAN_CLOSE_SENT|CHAN_CLOSE_RCVD))) {                      (c->flags & (CHAN_CLOSE_SENT|CHAN_CLOSE_RCVD))) {
                           /* XXX is this true? */
                         debug("channel: %d: no data after CLOSE", c->self);                          debug("channel: %d: no data after CLOSE", c->self);
                         continue;                          continue;
                 }                  }
   
                 /* Get the amount of buffered data for this channel. */                  /* Get the amount of buffered data for this channel. */
                 len = buffer_len(&c->input);                  if ((c->istate == CHAN_INPUT_OPEN ||
                 if (len > 0) {                      c->istate == CHAN_INPUT_WAIT_DRAIN) &&
                       (len = buffer_len(&c->input)) > 0) {
                         /* Send some data for the other side over the secure connection. */                          /* Send some data for the other side over the secure connection. */
                         if (compat20) {                          if (compat20) {
                                 if (len > c->remote_window)                                  if (len > c->remote_window)
Line 1089 
Line 1116 
                     c->remote_window > 0 &&                      c->remote_window > 0 &&
                     (len = buffer_len(&c->extended)) > 0 &&                      (len = buffer_len(&c->extended)) > 0 &&
                     c->extended_usage == CHAN_EXTENDED_READ) {                      c->extended_usage == CHAN_EXTENDED_READ) {
                           debug2("channel %d: rwin %d elen %d euse %d",
                               c->self, c->remote_window, buffer_len(&c->extended),
                               c->extended_usage);
                         if (len > c->remote_window)                          if (len > c->remote_window)
                                 len = c->remote_window;                                  len = c->remote_window;
                         if (len > c->remote_maxpacket)                          if (len > c->remote_maxpacket)
Line 1100 
Line 1130 
                         packet_send();                          packet_send();
                         buffer_consume(&c->extended, len);                          buffer_consume(&c->extended, len);
                         c->remote_window -= len;                          c->remote_window -= len;
                           debug2("channel %d: sent ext data %d", c->self, len);
                 }                  }
         }          }
 }  }

Legend:
Removed from v.1.92  
changed lines
  Added in v.1.93