]> The Tcpdump Group git mirrors - tcpdump/blobdiff - print-sip.c
Lose some more unnecessary #include lines. [skip ci]
[tcpdump] / print-sip.c
index 540cbf424267b0d16ab57aeb6a60706ca165a2c6..bfbfddfd4749237d4156f1e12daa05d10e83e97f 100644 (file)
  * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
  * FOR A PARTICULAR PURPOSE.
  *
- * Original code by Hannes Gredler ([email protected])
+ * Original code by Hannes Gredler ([email protected])
+ * Turned into common "text protocol" code, which this uses, by
+ * Guy Harris.
  */
 
-#define NETDISSECT_REWORKED
+/* \summary: Session Initiation Protocol (SIP) printer */
+
 #ifdef HAVE_CONFIG_H
-#include "config.h"
+#include <config.h>
 #endif
 
-#include <tcpdump-stdinc.h>
-
-#include "interface.h"
-#include "extract.h"
+#include "netdissect-stdinc.h"
+
+#include "netdissect.h"
+
+static const char *sipcmds[] = {
+       "ACK",
+       "BYE",
+       "CANCEL",
+       "DO",
+       "INFO",
+       "INVITE",
+       "MESSAGE",
+       "NOTIFY",
+       "OPTIONS",
+       "PRACK",
+       "QAUTH",
+       "REFER",
+       "REGISTER",
+       "SPRACK",
+       "SUBSCRIBE",
+       "UPDATE",
+       "PUBLISH",
+       NULL
+};
 
 void
-sip_print(netdissect_options *ndo,
-          register const u_char *pptr, register u_int len)
+sip_print(netdissect_options *ndo, const u_char *pptr, u_int len)
 {
-    u_int idx;
-
-    ND_PRINT((ndo, "SIP, length: %u%s", len, ndo->ndo_vflag ? "\n\t" : ""));
-
-    /* in non-verbose mode just lets print the protocol and length */
-    if (ndo->ndo_vflag < 1)
-        return;
-
-    for (idx = 0; idx < len; idx++) {
-        ND_TCHECK2(*(pptr+idx), 2);
-        if (EXTRACT_16BITS(pptr+idx) != 0x0d0a) { /* linefeed ? */
-            safeputchar(ndo, *(pptr + idx));
-        } else {
-            ND_PRINT((ndo, "\n\t"));
-            idx+=1;
-        }
-    }
-
-    /* do we want to see an additionally hexdump ? */
-    if (ndo->ndo_vflag > 1)
-        print_unknown_data(ndo, pptr, "\n\t", len);
-
-    return;
-
-trunc:
-    ND_PRINT((ndo, "[|sip]"));
+       ndo->ndo_protocol = "sip";
+       txtproto_print(ndo, pptr, len, sipcmds, RESP_CODE_SECOND_TOKEN);
 }