Open-Source-Software-Entwicklung und Downloads

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 3003 by maya, Mon Aug 20 14:21:57 2007 UTC
# Line 58  static int recv_data(PTInstVar pvar, uns Line 58  static int recv_data(PTInstVar pvar, uns
58          /* Shuffle data to the start of the buffer */          /* Shuffle data to the start of the buffer */
59          if (pvar->pkt_state.datastart != 0) {          if (pvar->pkt_state.datastart != 0) {
60                  memmove(pvar->pkt_state.buf,                  memmove(pvar->pkt_state.buf,
61                                  pvar->pkt_state.buf + pvar->pkt_state.datastart,                          pvar->pkt_state.buf + pvar->pkt_state.datastart,
62                                  pvar->pkt_state.datalen);                          pvar->pkt_state.datalen);
63                  pvar->pkt_state.datastart = 0;                  pvar->pkt_state.datastart = 0;
64          }          }
65    
66          buf_ensure_size(&pvar->pkt_state.buf, &pvar->pkt_state.buflen,          buf_ensure_size(&pvar->pkt_state.buf, &pvar->pkt_state.buflen,
67                                          up_to_amount);                          up_to_amount);
68    
69          _ASSERT(pvar->pkt_state.buf != NULL);          _ASSERT(pvar->pkt_state.buf != NULL);
70    
71          amount_read = (pvar->Precv) (pvar->socket,          amount_read = (pvar->Precv) (pvar->socket,
72                                                                   pvar->pkt_state.buf +                                       pvar->pkt_state.buf +
73                                                                   pvar->pkt_state.datalen,                                       pvar->pkt_state.datalen,
74                                                                   up_to_amount - pvar->pkt_state.datalen,                                       up_to_amount - pvar->pkt_state.datalen,
75                                                                   0);                                       0);
76    
77          if (amount_read > 0) {          if (amount_read > 0) {
78                  /* Update seen_newline if necessary */                  /* Update seen_newline if necessary */
79                  if (!pvar->pkt_state.seen_server_ID                  if (!pvar->pkt_state.seen_server_ID
80                          && !pvar->pkt_state.seen_newline) {                   && !pvar->pkt_state.seen_newline) {
81                          int i;                          int i;
82    
83                          for (i = 0; i < amount_read; i++) {                          for (i = 0; i < amount_read; i++) {
84                                  if (pvar->pkt_state.buf[pvar->pkt_state.datalen + i] ==                                  if (pvar->pkt_state.buf[pvar->pkt_state.datalen + i] ==
85                                          '\n') {                                      '\n') {
86                                          pvar->pkt_state.seen_newline = 1;                                          pvar->pkt_state.seen_newline = 1;
87                                  }                                  }
88                          }                          }
# Line 106  static int recv_line_data(PTInstVar pvar Line 106  static int recv_line_data(PTInstVar pvar
106          /* Shuffle data to the start of the buffer */          /* Shuffle data to the start of the buffer */
107          if (pvar->pkt_state.datastart != 0) {          if (pvar->pkt_state.datastart != 0) {
108                  memmove(pvar->pkt_state.buf,                  memmove(pvar->pkt_state.buf,
109                                  pvar->pkt_state.buf + pvar->pkt_state.datastart,                          pvar->pkt_state.buf + pvar->pkt_state.datastart,
110                                  pvar->pkt_state.datalen);                          pvar->pkt_state.datalen);
111                  pvar->pkt_state.datastart = 0;                  pvar->pkt_state.datastart = 0;
112          }          }
113    
114          buf_ensure_size(&pvar->pkt_state.buf, &pvar->pkt_state.buflen,          buf_ensure_size(&pvar->pkt_state.buf, &pvar->pkt_state.buflen,
115                                          up_to_amount);                          up_to_amount);
116    
117          for (i = 0 ; i < (int)up_to_amount ; i++) {          for (i = 0 ; i < (int)up_to_amount ; i++) {
118                  amount_read = (pvar->Precv) (pvar->socket,                  amount_read = (pvar->Precv) (pvar->socket,
119                                                                          &buf[i],                                               &buf[i], 1, 0);
                                                                         1,  
                                                                         0);  
120                  if (amount_read != 1) {                  if (amount_read != 1) {
121                          return 0; // error                          return 0; // error
122                  }                  }
# Line 158  int PKT_recv(PTInstVar pvar, char FAR * Line 156  int PKT_recv(PTInstVar pvar, char FAR *
156                          buflen -= grabbed;                          buflen -= grabbed;
157    
158                  } else if (!pvar->pkt_state.seen_server_ID &&                  } else if (!pvar->pkt_state.seen_server_ID &&
159                                     (pvar->pkt_state.seen_newline                             (pvar->pkt_state.seen_newline
160                                          || pvar->pkt_state.datalen >= 255)) {                              || pvar->pkt_state.datalen >= 255)) {
161                          /* 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
162                             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
163                             a newline. */                             a newline. */
164                          unsigned int i;                          unsigned int i;
165    
166                          for (i = 0;                          for (i = 0;
167                                   pvar->pkt_state.buf[i] != '\n'                               pvar->pkt_state.buf[i] != '\n'
168                                   && i < pvar->pkt_state.datalen; i++) {                               && i < pvar->pkt_state.datalen; i++) {
169                          }                          }
170                          if (pvar->pkt_state.buf[i] == '\n') {                          if (pvar->pkt_state.buf[i] == '\n') {
171                                  i++;                                  i++;
# Line 190  int PKT_recv(PTInstVar pvar, char FAR * Line 188  int PKT_recv(PTInstVar pvar, char FAR *
188                          pvar->pkt_state.datalen -= i;                          pvar->pkt_state.datalen -= i;
189    
190                  } else if (pvar->pkt_state.seen_server_ID                  } else if (pvar->pkt_state.seen_server_ID
191                                     && pvar->pkt_state.datalen >=                             && pvar->pkt_state.datalen >=
192                                     (unsigned int) SSH_get_min_packet_size(pvar)) {                             (unsigned int) SSH_get_min_packet_size(pvar)) {
193                          char FAR *data =                          char FAR *data =
194                                  pvar->pkt_state.buf + pvar->pkt_state.datastart;                                  pvar->pkt_state.buf + pvar->pkt_state.datastart;
195                          uint32 padding;                          uint32 padding;
# Line 291  int PKT_recv(PTInstVar pvar, char FAR * Line 289  int PKT_recv(PTInstVar pvar, char FAR *
289    
290          if (SSH_is_any_payload(pvar)) {          if (SSH_is_any_payload(pvar)) {
291                  PostMessage(pvar->NotificationWindow, WM_USER_COMMNOTIFY,                  PostMessage(pvar->NotificationWindow, WM_USER_COMMNOTIFY,
292                                          pvar->socket, MAKELPARAM(FD_READ, 0));                              pvar->socket, MAKELPARAM(FD_READ, 0));
293          }          }
294    
295          return amount_in_buf;          return amount_in_buf;

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

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