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

Diff for /src/usr.bin/ssh/dispatch.c between version 1.5 and 1.5.2.6

version 1.5, 2000/09/21 11:25:34 version 1.5.2.6, 2002/03/08 17:04:42
Line 23 
Line 23 
  */   */
 #include "includes.h"  #include "includes.h"
 RCSID("$OpenBSD$");  RCSID("$OpenBSD$");
 #include "ssh.h"  
   #include "ssh1.h"
   #include "ssh2.h"
   #include "log.h"
 #include "dispatch.h"  #include "dispatch.h"
 #include "packet.h"  #include "packet.h"
   #include "compat.h"
   
 #define DISPATCH_MIN    0  #define DISPATCH_MIN    0
 #define DISPATCH_MAX    255  #define DISPATCH_MAX    255
Line 33 
Line 37 
 dispatch_fn *dispatch[DISPATCH_MAX];  dispatch_fn *dispatch[DISPATCH_MAX];
   
 void  void
 dispatch_protocol_error(int type, int plen, void *ctxt)  dispatch_protocol_error(int type, u_int32_t seq, void *ctxt)
 {  {
         error("Hm, dispatch protocol error: type %d plen %d", type, plen);          log("dispatch_protocol_error: type %d seq %u", type, seq);
           if (!compat20)
                   fatal("protocol error");
           packet_start(SSH2_MSG_UNIMPLEMENTED);
           packet_put_int(seq);
           packet_send();
           packet_write_wait();
 }  }
 void  void
   dispatch_protocol_ignore(int type, u_int32_t seq, void *ctxt)
   {
           log("dispatch_protocol_ignore: type %d seq %u", type, seq);
   }
   void
 dispatch_init(dispatch_fn *dflt)  dispatch_init(dispatch_fn *dflt)
 {  {
         int i;          u_int i;
         for (i = 0; i < DISPATCH_MAX; i++)          for (i = 0; i < DISPATCH_MAX; i++)
                 dispatch[i] = dflt;                  dispatch[i] = dflt;
 }  }
 void  void
   dispatch_range(u_int from, u_int to, dispatch_fn *fn)
   {
           u_int i;
   
           for (i = from; i <= to; i++) {
                   if (i >= DISPATCH_MAX)
                           break;
                   dispatch[i] = fn;
           }
   }
   void
 dispatch_set(int type, dispatch_fn *fn)  dispatch_set(int type, dispatch_fn *fn)
 {  {
         dispatch[type] = fn;          dispatch[type] = fn;
Line 53 
Line 79 
 dispatch_run(int mode, int *done, void *ctxt)  dispatch_run(int mode, int *done, void *ctxt)
 {  {
         for (;;) {          for (;;) {
                 int plen;  
                 int type;                  int type;
                   u_int32_t seqnr;
   
                 if (mode == DISPATCH_BLOCK) {                  if (mode == DISPATCH_BLOCK) {
                         type = packet_read(&plen);                          type = packet_read_seqnr(&seqnr);
                 } else {                  } else {
                         type = packet_read_poll(&plen);                          type = packet_read_poll_seqnr(&seqnr);
                         if (type == SSH_MSG_NONE)                          if (type == SSH_MSG_NONE)
                                 return;                                  return;
                 }                  }
                 if (type > 0 && type < DISPATCH_MAX && dispatch[type] != NULL)                  if (type > 0 && type < DISPATCH_MAX && dispatch[type] != NULL)
                         (*dispatch[type])(type, plen, ctxt);                          (*dispatch[type])(type, seqnr, ctxt);
                 else                  else
                         packet_disconnect("protocol error: rcvd type %d", type);                          packet_disconnect("protocol error: rcvd type %d", type);
                 if (done != NULL && *done)                  if (done != NULL && *done)
                         return;                          return;
         }          }

Legend:
Removed from v.1.5  
changed lines
  Added in v.1.5.2.6