X-Git-Url: https://git.tcpdump.org/tcpdump/blobdiff_plain/b9ac23ce92ca22483d56ee3192c54aa8f782f9ac..refs/heads/tcpdump-3.8:/print-tftp.c diff --git a/print-tftp.c b/print-tftp.c index 17b34b57..e9ab4a7c 100644 --- a/print-tftp.c +++ b/print-tftp.c @@ -22,30 +22,27 @@ */ #ifndef lint -static const char rcsid[] = - "@(#) $Header: /tcpdump/master/tcpdump/print-tftp.c,v 1.31 1999-11-21 09:37:03 fenner Exp $ (LBL)"; +static const char rcsid[] _U_ = + "@(#) $Header: /tcpdump/master/tcpdump/print-tftp.c,v 1.35.2.2 2003-11-16 08:51:50 guy Exp $ (LBL)"; #endif #ifdef HAVE_CONFIG_H #include "config.h" #endif -#include -#include - -#include +#include #ifdef SEGSIZE #undef SEGSIZE /* SINIX sucks */ #endif #include -#include #include #include #include "interface.h" #include "addrtoname.h" +#include "extract.h" /* op code to string mapping */ static struct tok op2str[] = { @@ -89,7 +86,7 @@ tftp_print(register const u_char *bp, u_int length) /* Print tftp request type */ TCHECK(tp->th_opcode); - opcode = ntohs(tp->th_opcode); + opcode = EXTRACT_16BITS(&tp->th_opcode); cp = tok2str(op2str, "tftp-#%d", opcode); printf(" %s", cp); /* Bail if bogus opcode */ @@ -112,6 +109,18 @@ tftp_print(register const u_char *bp, u_int length) fputs(" \"", stdout); i = fn_print(p, snapend); putchar('"'); + + /* Print the mode and any options */ + while ((p = (const u_char *)strchr((const char *)p, '\0')) != NULL) { + if (length <= (u_int)(p - (const u_char *)&tp->th_block)) + break; + p++; + if (*p != '\0') { + putchar(' '); + fn_print(p, snapend); + } + } + if (i) goto trunc; break; @@ -119,14 +128,14 @@ tftp_print(register const u_char *bp, u_int length) case ACK: case DATA: TCHECK(tp->th_block); - printf(" block %d", ntohs(tp->th_block)); + printf(" block %d", EXTRACT_16BITS(&tp->th_block)); break; case ERROR: /* Print error code string */ TCHECK(tp->th_code); printf(" %s ", tok2str(err2str, "tftp-err-#%d \"", - ntohs(tp->th_code))); + EXTRACT_16BITS(&tp->th_code))); /* Print error message string */ i = fn_print((const u_char *)tp->th_data, snapend); putchar('"');