/* \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
do { \
if (length < 1) \
goto pktend; \
- ND_TCHECK(*sp); \
- c = *sp++; \
+ c = GET_U_1(sp); \
+ sp++; \
length--; \
} while (0)
FETCH(c, sp, length);
if (c == IAC) { /* <IAC><IAC>! */
if (print)
- ND_PRINT((ndo, "IAC IAC"));
+ ND_PRINT("IAC IAC");
goto done;
}
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) {
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
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.
*/
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;
}
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);
}