]> The Tcpdump Group git mirrors - tcpdump/blobdiff - print-tftp.c
CI: Add warning exemptions for Sun C (suncc-5.14) on Solaris 10
[tcpdump] / print-tftp.c
index e0bedc3918b7202b0b07e0a54a37d8b4b5d98078..ec64a5c9dfa97b7c99ede676beafe926cb0c44aa 100644 (file)
 
 /* \summary: Trivial File Transfer Protocol (TFTP) printer */
 
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
+#include <config.h>
 
-#include <netdissect-stdinc.h>
-
-#include <string.h>
+#include "netdissect-stdinc.h"
 
 #include "netdissect.h"
 #include "extract.h"
@@ -58,7 +54,6 @@
 #define        EEXISTS         6               /* file already exists */
 #define        ENOUSER         7               /* no such user */
 
-static const char tstr[] = " [|tftp]";
 
 /* op code to string mapping */
 static const struct tok op2str[] = {
@@ -92,19 +87,22 @@ tftp_print(netdissect_options *ndo,
            const u_char *bp, u_int length)
 {
        const char *cp;
-       int opcode;
+       u_int opcode;
        u_int ui;
 
+       ndo->ndo_protocol = "tftp";
+
+       /* Print protocol */
+       nd_print_protocol_caps(ndo);
        /* Print length */
-       ND_PRINT((ndo, " %d", length));
+       ND_PRINT(", length %u", length);
 
        /* Print tftp request type */
        if (length < 2)
                goto trunc;
-       ND_TCHECK_2(bp);
-       opcode = EXTRACT_BE_U_2(bp);
-       cp = tok2str(op2str, "tftp-#%d", opcode);
-       ND_PRINT((ndo, " %s", cp));
+       opcode = GET_BE_U_2(bp);
+       cp = tok2str(op2str, "tftp-#%u", opcode);
+       ND_PRINT(", %s", cp);
        /* Bail if bogus opcode */
        if (*cp == 't')
                return;
@@ -117,11 +115,11 @@ tftp_print(netdissect_options *ndo,
        case WRQ:
                if (length == 0)
                        goto trunc;
-               ND_PRINT((ndo, " "));
+               ND_PRINT(" ");
                /* Print filename */
-               ND_PRINT((ndo, "\""));
-               ui = fn_printztn(ndo, bp, length, ndo->ndo_snapend);
-               ND_PRINT((ndo, "\""));
+               ND_PRINT("\"");
+               ui = nd_printztn(ndo, bp, length, ndo->ndo_snapend);
+               ND_PRINT("\"");
                if (ui == 0)
                        goto trunc;
                bp += ui;
@@ -130,8 +128,8 @@ tftp_print(netdissect_options *ndo,
                /* Print the mode - RRQ and WRQ only */
                if (length == 0)
                        goto trunc;     /* no mode */
-               ND_PRINT((ndo, " "));
-               ui = fn_printztn(ndo, bp, length, ndo->ndo_snapend);
+               ND_PRINT(" ");
+               ui = nd_printztn(ndo, bp, length, ndo->ndo_snapend);
                if (ui == 0)
                        goto trunc;
                bp += ui;
@@ -139,10 +137,9 @@ tftp_print(netdissect_options *ndo,
 
                /* Print options, if any */
                while (length != 0) {
-                       ND_TCHECK_1(bp);
-                       if (EXTRACT_U_1(bp) != '\0')
-                               ND_PRINT((ndo, " "));
-                       ui = fn_printztn(ndo, bp, length, ndo->ndo_snapend);
+                       if (GET_U_1(bp) != '\0')
+                               ND_PRINT(" ");
+                       ui = nd_printztn(ndo, bp, length, ndo->ndo_snapend);
                        if (ui == 0)
                                goto trunc;
                        bp += ui;
@@ -153,10 +150,9 @@ tftp_print(netdissect_options *ndo,
        case OACK:
                /* Print options */
                while (length != 0) {
-                       ND_TCHECK_1(bp);
-                       if (EXTRACT_U_1(bp) != '\0')
-                               ND_PRINT((ndo, " "));
-                       ui = fn_printztn(ndo, bp, length, ndo->ndo_snapend);
+                       if (GET_U_1(bp) != '\0')
+                               ND_PRINT(" ");
+                       ui = nd_printztn(ndo, bp, length, ndo->ndo_snapend);
                        if (ui == 0)
                                goto trunc;
                        bp += ui;
@@ -168,36 +164,33 @@ tftp_print(netdissect_options *ndo,
        case DATA:
                if (length < 2)
                        goto trunc;     /* no block number */
-               ND_TCHECK_2(bp);
-               ND_PRINT((ndo, " block %d", EXTRACT_BE_U_2(bp)));
+               ND_PRINT(" block %u", GET_BE_U_2(bp));
                break;
 
        case TFTP_ERROR:
                /* Print error code string */
                if (length < 2)
                        goto trunc;     /* no error code */
-               ND_TCHECK_2(bp);
-               ND_PRINT((ndo, " %s", tok2str(err2str, "tftp-err-#%d \"",
-                                      EXTRACT_BE_U_2(bp))));
+               ND_PRINT(" %s", tok2str(err2str, "tftp-err-#%u \"",
+                                      GET_BE_U_2(bp)));
                bp += 2;
                length -= 2;
                /* Print error message string */
                if (length == 0)
                        goto trunc;     /* no error message */
-               ND_PRINT((ndo, " \""));
-               ui = fn_printztn(ndo, bp, length, ndo->ndo_snapend);
-               ND_PRINT((ndo, "\""));
+               ND_PRINT(" \"");
+               ui = nd_printztn(ndo, bp, length, ndo->ndo_snapend);
+               ND_PRINT("\"");
                if (ui == 0)
                        goto trunc;
                break;
 
        default:
                /* We shouldn't get here */
-               ND_PRINT((ndo, "(unknown #%d)", opcode));
+               ND_PRINT("(unknown #%u)", opcode);
                break;
        }
        return;
 trunc:
-       ND_PRINT((ndo, "%s", tstr));
-       return;
+       nd_print_trunc(ndo);
 }