Develop and Download Open Source Software

Browse Subversion Repository

Diff of /trunk/ttssh2/ttxssh/pkt.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 2995 by maya, Wed Aug 15 04:03:26 2007 UTC revision 3134 by doda, Fri Jun 20 11:58:47 2008 UTC
# Line 37  See LICENSE.TXT for the license. Line 37  See LICENSE.TXT for the license.
37  //#define READAMOUNT 60000  //#define READAMOUNT 60000
38  // 60000 -> 65536 へ拡張。SSH2ではwindow制御を行うため、SSH2のwindow sizeと  // 60000 -> 65536 へ拡張。SSH2ではwindow制御を行うため、SSH2のwindow sizeと
39  // 合わせておく必要がある。(2004.10.17 yutaka)  // 合わせておく必要がある。(2004.10.17 yutaka)
40  #define READAMOUNT 65536  //#define READAMOUNT 65536
41    // 65536 -> 131072 へ拡張。(2007.10.29 maya)
42    #define READAMOUNT CHAN_SES_WINDOW_DEFAULT
43    
44  void PKT_init(PTInstVar pvar)  void PKT_init(PTInstVar pvar)
45  {  {
# Line 58  static int recv_data(PTInstVar pvar, uns Line 60  static int recv_data(PTInstVar pvar, uns
60          /* Shuffle data to the start of the buffer */          /* Shuffle data to the start of the buffer */
61          if (pvar->pkt_state.datastart != 0) {          if (pvar->pkt_state.datastart != 0) {
62                  memmove(pvar->pkt_state.buf,                  memmove(pvar->pkt_state.buf,
63                                  pvar->pkt_state.buf + pvar->pkt_state.datastart,                          pvar->pkt_state.buf + pvar->pkt_state.datastart,
64                                  pvar->pkt_state.datalen);                          pvar->pkt_state.datalen);
65                  pvar->pkt_state.datastart = 0;                  pvar->pkt_state.datastart = 0;
66          }          }
67    
68          buf_ensure_size(&pvar->pkt_state.buf, &pvar->pkt_state.buflen,          buf_ensure_size(&pvar->pkt_state.buf, &pvar->pkt_state.buflen,
69                                          up_to_amount);                          up_to_amount);
70    
71          _ASSERT(pvar->pkt_state.buf != NULL);          _ASSERT(pvar->pkt_state.buf != NULL);
72    
73          amount_read = (pvar->Precv) (pvar->socket,          amount_read = (pvar->Precv) (pvar->socket,
74                                                                   pvar->pkt_state.buf +                                       pvar->pkt_state.buf +
75                                                                   pvar->pkt_state.datalen,                                       pvar->pkt_state.datalen,
76                                                                   up_to_amount - pvar->pkt_state.datalen,                                       up_to_amount - pvar->pkt_state.datalen,
77                                                                   0);                                       0);
78    
79          if (amount_read > 0) {          if (amount_read > 0) {
80                  /* Update seen_newline if necessary */                  /* Update seen_newline if necessary */
81                  if (!pvar->pkt_state.seen_server_ID                  if (!pvar->pkt_state.seen_server_ID
82                          && !pvar->pkt_state.seen_newline) {                   && !pvar->pkt_state.seen_newline) {
83                          int i;                          int i;
84    
85                          for (i = 0; i < amount_read; i++) {                          for (i = 0; i < amount_read; i++) {
86                                  if (pvar->pkt_state.buf[pvar->pkt_state.datalen + i] ==                                  if (pvar->pkt_state.buf[pvar->pkt_state.datalen + i] ==
87                                          '\n') {                                      '\n') {
88                                          pvar->pkt_state.seen_newline = 1;                                          pvar->pkt_state.seen_newline = 1;
89                                  }                                  }
90                          }                          }
# Line 106  static int recv_line_data(PTInstVar pvar Line 108  static int recv_line_data(PTInstVar pvar
108          /* Shuffle data to the start of the buffer */          /* Shuffle data to the start of the buffer */
109          if (pvar->pkt_state.datastart != 0) {          if (pvar->pkt_state.datastart != 0) {
110                  memmove(pvar->pkt_state.buf,                  memmove(pvar->pkt_state.buf,
111                                  pvar->pkt_state.buf + pvar->pkt_state.datastart,                          pvar->pkt_state.buf + pvar->pkt_state.datastart,
112                                  pvar->pkt_state.datalen);                          pvar->pkt_state.datalen);
113                  pvar->pkt_state.datastart = 0;                  pvar->pkt_state.datastart = 0;
114          }          }
115    
116          buf_ensure_size(&pvar->pkt_state.buf, &pvar->pkt_state.buflen,          buf_ensure_size(&pvar->pkt_state.buf, &pvar->pkt_state.buflen,
117                                          up_to_amount);                          up_to_amount);
118    
119          for (i = 0 ; i < (int)up_to_amount ; i++) {          for (i = 0 ; i < (int)up_to_amount ; i++) {
120                  amount_read = (pvar->Precv) (pvar->socket,                  amount_read = (pvar->Precv) (pvar->socket,
121                                                                          &buf[i],                                               &buf[i], 1, 0);
                                                                         1,  
                                                                         0);  
122                  if (amount_read != 1) {                  if (amount_read != 1) {
123                          return 0; // error                          return 0; // error
124                  }                  }
# Line 150  int PKT_recv(PTInstVar pvar, char FAR * Line 150  int PKT_recv(PTInstVar pvar, char FAR *
150    
151          while (SSH_is_any_payload(pvar) ? buflen > 0 : !connection_closed) {          while (SSH_is_any_payload(pvar) ? buflen > 0 : !connection_closed) {
152                  if (SSH_is_any_payload(pvar)) {                  if (SSH_is_any_payload(pvar)) {
153                          /* ssh.c has some session data for us to give to Teraterm. */                          /* ssh.c has some session data for us to give to Tera Term. */
154                          int grabbed = SSH_extract_payload(pvar, buf, buflen);                          int grabbed = SSH_extract_payload(pvar, buf, buflen);
155    
156                          amount_in_buf += grabbed;                          amount_in_buf += grabbed;
# Line 158  int PKT_recv(PTInstVar pvar, char FAR * Line 158  int PKT_recv(PTInstVar pvar, char FAR *
158                          buflen -= grabbed;                          buflen -= grabbed;
159    
160                  } else if (!pvar->pkt_state.seen_server_ID &&                  } else if (!pvar->pkt_state.seen_server_ID &&
161                                     (pvar->pkt_state.seen_newline                             (pvar->pkt_state.seen_newline
162                                          || pvar->pkt_state.datalen >= 255)) {                              || pvar->pkt_state.datalen >= 255)) {
163                          /* We're looking for the initial ID string and either we've seen the                          /* We're looking for the initial ID string and either we've seen the
164                             terminating newline, or we've exceeded the limit at which we should see                             terminating newline, or we've exceeded the limit at which we should see
165                             a newline. */                             a newline. */
166                          unsigned int i;                          unsigned int i;
167    
168                          for (i = 0;                          for (i = 0;
169                                   pvar->pkt_state.buf[i] != '\n'                               pvar->pkt_state.buf[i] != '\n'
170                                   && i < pvar->pkt_state.datalen; i++) {                               && i < pvar->pkt_state.datalen; i++) {
171                          }                          }
172                          if (pvar->pkt_state.buf[i] == '\n') {                          if (pvar->pkt_state.buf[i] == '\n') {
173                                  i++;                                  i++;
# Line 184  int PKT_recv(PTInstVar pvar, char FAR * Line 184  int PKT_recv(PTInstVar pvar, char FAR *
184                                          SSH2_send_kexinit(pvar);                                          SSH2_send_kexinit(pvar);
185                                  }                                  }
186    
187                            } else {
188                                    // reset flag to re-read server ID (2008.1.24 yutaka)
189                                    pvar->pkt_state.seen_newline = 0;
190    
191                          }                          }
192    
193                          pvar->pkt_state.datastart += i;                          pvar->pkt_state.datastart += i;
194                          pvar->pkt_state.datalen -= i;                          pvar->pkt_state.datalen -= i;
195    
196                  } else if (pvar->pkt_state.seen_server_ID                  } else if (pvar->pkt_state.seen_server_ID
197                                     && pvar->pkt_state.datalen >=                             && pvar->pkt_state.datalen >=
198                                     (unsigned int) SSH_get_min_packet_size(pvar)) {                             (unsigned int) SSH_get_min_packet_size(pvar)) {
199                          char FAR *data =                          char FAR *data =
200                                  pvar->pkt_state.buf + pvar->pkt_state.datastart;                                  pvar->pkt_state.buf + pvar->pkt_state.datastart;
201                          uint32 padding;                          uint32 padding;
# Line 291  int PKT_recv(PTInstVar pvar, char FAR * Line 295  int PKT_recv(PTInstVar pvar, char FAR *
295    
296          if (SSH_is_any_payload(pvar)) {          if (SSH_is_any_payload(pvar)) {
297                  PostMessage(pvar->NotificationWindow, WM_USER_COMMNOTIFY,                  PostMessage(pvar->NotificationWindow, WM_USER_COMMNOTIFY,
298                                          pvar->socket, MAKELPARAM(FD_READ, 0));                              pvar->socket, MAKELPARAM(FD_READ, 0));
299          }          }
300    
301          return amount_in_buf;          return amount_in_buf;

Legend:
Removed from v.2995  
changed lines
  Added in v.3134

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26