]> The Tcpdump Group git mirrors - tcpdump/blobdiff - print-telnet.c
remove redundant ND_TCHECK, let GET_ routines handle checks
[tcpdump] / print-telnet.c
index bbc4f231608fcb57a80b5bc550cea46d6882d02d..817d4226855d4d62f9621cbc063fcbbe433d22c5 100644 (file)
 /* \summary: Telnet option printer */
 
 #ifdef HAVE_CONFIG_H
-#include "config.h"
+#include <config.h>
 #endif
 
-#include <netdissect-stdinc.h>
+#include "netdissect-stdinc.h"
 
 #include <stdio.h>
 
 #include "netdissect.h"
 #include "extract.h"
 
-static const char tstr[] = " [|telnet]";
 
 #define TELCMDS
 #define TELOPTS
@@ -397,8 +396,8 @@ telnet_parse(netdissect_options *ndo, const u_char *sp, u_int length, int print)
        do { \
                if (length < 1) \
                        goto pktend; \
-               ND_TCHECK(*sp); \
-               c = *sp++; \
+               c = GET_U_1(sp); \
+               sp++; \
                length--; \
        } while (0)
 
@@ -410,7 +409,7 @@ telnet_parse(netdissect_options *ndo, const u_char *sp, u_int length, int print)
        FETCH(c, sp, length);
        if (c == IAC) {         /* <IAC><IAC>! */
                if (print)
-                       ND_PRINT((ndo, "IAC IAC"));
+                       ND_PRINT("IAC IAC");
                goto done;
        }
 
@@ -428,23 +427,21 @@ telnet_parse(netdissect_options *ndo, const u_char *sp, u_int length, int print)
                FETCH(x, sp, length);
                if (x >= 0 && x < NTELOPTS) {
                        if (print)
-                               ND_PRINT((ndo, "%s %s", telcmds[i], telopts[x]));
+                               ND_PRINT("%s %s", telcmds[i], telopts[x]);
                } else {
                        if (print)
-                               ND_PRINT((ndo, "%s %#x", telcmds[i], x));
+                               ND_PRINT("%s %#x", telcmds[i], x);
                }
                if (c != SB)
                        break;
                /* IAC SB .... IAC SE */
                p = sp;
                while (length > (u_int)(p + 1 - sp)) {
-                       ND_TCHECK_2(p);
-                       if (EXTRACT_U_1(p) == IAC && EXTRACT_U_1(p + 1) == SE)
+                       if (GET_U_1(p) == IAC && GET_U_1(p + 1) == SE)
                                break;
                        p++;
                }
-               ND_TCHECK_1(p);
-               if (*p != IAC)
+               if (GET_U_1(p) != IAC)
                        goto pktend;
 
                switch (x) {
@@ -453,54 +450,52 @@ telnet_parse(netdissect_options *ndo, const u_char *sp, u_int length, int print)
                                break;
                        FETCH(c, sp, length);
                        if (print)
-                               ND_PRINT((ndo, " %s", STR_OR_ID(c, authcmd)));
+                               ND_PRINT(" %s", STR_OR_ID(c, authcmd));
                        if (p <= sp)
                                break;
                        FETCH(c, sp, length);
                        if (print)
-                               ND_PRINT((ndo, " %s", STR_OR_ID(c, authtype)));
+                               ND_PRINT(" %s", STR_OR_ID(c, authtype));
                        break;
                case TELOPT_ENCRYPT:
                        if (p <= sp)
                                break;
                        FETCH(c, sp, length);
                        if (print)
-                               ND_PRINT((ndo, " %s", STR_OR_ID(c, enccmd)));
+                               ND_PRINT(" %s", STR_OR_ID(c, enccmd));
                        if (p <= sp)
                                break;
                        FETCH(c, sp, length);
                        if (print)
-                               ND_PRINT((ndo, " %s", STR_OR_ID(c, enctype)));
+                               ND_PRINT(" %s", STR_OR_ID(c, enctype));
                        break;
                default:
                        if (p <= sp)
                                break;
                        FETCH(c, sp, length);
                        if (print)
-                               ND_PRINT((ndo, " %s", STR_OR_ID(c, cmds)));
+                               ND_PRINT(" %s", STR_OR_ID(c, cmds));
                        break;
                }
                while (p > sp) {
                        FETCH(x, sp, length);
                        if (print)
-                               ND_PRINT((ndo, " %#x", x));
+                               ND_PRINT(" %#x", x);
                }
                /* terminating IAC SE */
                if (print)
-                       ND_PRINT((ndo, " SE"));
+                       ND_PRINT(" SE");
                sp += 2;
                break;
        default:
                if (print)
-                       ND_PRINT((ndo, "%s", telcmds[i]));
+                       ND_PRINT("%s", telcmds[i]);
                goto done;
        }
 
 done:
-       return sp - osp;
+       return (int)(sp - osp);
 
-trunc:
-       ND_PRINT((ndo, "%s", tstr));
 pktend:
        return -1;
 #undef FETCH
@@ -513,10 +508,10 @@ telnet_print(netdissect_options *ndo, const u_char *sp, u_int length)
        const u_char *osp;
        int l;
 
+       ndo->ndo_protocol = "telnet";
        osp = sp;
 
-       ND_TCHECK_1(sp);
-       while (length > 0 && EXTRACT_U_1(sp) == IAC) {
+       while (length > 0 && GET_U_1(sp) == IAC) {
                /*
                 * Parse the Telnet command without printing it,
                 * to determine its length.
@@ -530,14 +525,14 @@ telnet_print(netdissect_options *ndo, const u_char *sp, u_int length)
                 */
                if (ndo->ndo_Xflag && 2 < ndo->ndo_vflag) {
                        if (first)
-                               ND_PRINT((ndo, "\nTelnet:"));
-                       hex_print_with_offset(ndo, "\n", sp, l, sp - osp);
+                               ND_PRINT("\nTelnet:");
+                       hex_print_with_offset(ndo, "\n", sp, l, (u_int)(sp - osp));
                        if (l > 8)
-                               ND_PRINT((ndo, "\n\t\t\t\t"));
+                               ND_PRINT("\n\t\t\t\t");
                        else
-                               ND_PRINT((ndo, "%*s\t", (8 - l) * 3, ""));
+                               ND_PRINT("%*s\t", (8 - l) * 3, "");
                } else
-                       ND_PRINT((ndo, "%s", (first) ? " [telnet " : ", "));
+                       ND_PRINT("%s", (first) ? " [telnet " : ", ");
 
                (void)telnet_parse(ndo, sp, length, 1);
                first = 0;
@@ -548,11 +543,11 @@ telnet_print(netdissect_options *ndo, const u_char *sp, u_int length)
        }
        if (!first) {
                if (ndo->ndo_Xflag && 2 < ndo->ndo_vflag)
-                       ND_PRINT((ndo, "\n"));
+                       ND_PRINT("\n");
                else
-                       ND_PRINT((ndo, "]"));
+                       ND_PRINT("]");
        }
        return;
 trunc:
-       ND_PRINT((ndo, "%s", tstr));
+       nd_print_trunc(ndo);
 }