X-Git-Url: http://andersk.mit.edu/gitweb/gssapi-openssh.git/blobdiff_plain/9108f8d92b8e2b4b5fe61eb8e419bf94ba216d44..HEAD:/openssh/dispatch.c diff --git a/openssh/dispatch.c b/openssh/dispatch.c index d6b63be..64873d5 100644 --- a/openssh/dispatch.c +++ b/openssh/dispatch.c @@ -1,4 +1,3 @@ -/* $OpenBSD: dispatch.c,v 1.21 2006/08/03 03:34:42 deraadt Exp $ */ /* * Copyright (c) 2000 Markus Friedl. All rights reserved. * @@ -22,13 +21,8 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ - #include "includes.h" - -#include - -#include -#include +RCSID("$OpenBSD: dispatch.c,v 1.11 2001/06/10 11:29:20 markus Exp $"); #include "ssh1.h" #include "ssh2.h" @@ -43,60 +37,38 @@ dispatch_fn *dispatch[DISPATCH_MAX]; void -dispatch_protocol_error(int type, u_int32_t seq, void *ctxt) -{ - logit("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 -dispatch_protocol_ignore(int type, u_int32_t seq, void *ctxt) +dispatch_protocol_error(int type, int plen, void *ctxt) { - logit("dispatch_protocol_ignore: type %d seq %u", type, seq); + fatal("dispatch_protocol_error: type %d plen %d", type, plen); } void dispatch_init(dispatch_fn *dflt) { - u_int i; + int i; for (i = 0; i < DISPATCH_MAX; i++) dispatch[i] = dflt; } 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[type] = fn; } void -dispatch_run(int mode, volatile sig_atomic_t *done, void *ctxt) +dispatch_run(int mode, int *done, void *ctxt) { for (;;) { + int plen; int type; - u_int32_t seqnr; if (mode == DISPATCH_BLOCK) { - type = packet_read_seqnr(&seqnr); + type = packet_read(&plen); } else { - type = packet_read_poll_seqnr(&seqnr); + type = packet_read_poll(&plen); if (type == SSH_MSG_NONE) return; } if (type > 0 && type < DISPATCH_MAX && dispatch[type] != NULL) - (*dispatch[type])(type, seqnr, ctxt); + (*dispatch[type])(type, plen, ctxt); else packet_disconnect("protocol error: rcvd type %d", type); if (done != NULL && *done)