]> The Tcpdump Group git mirrors - tcpdump/blobdiff - print-sip.c
Add CAP_FCNTL and use cap_fcntls_limit().
[tcpdump] / print-sip.c
index 540cbf424267b0d16ab57aeb6a60706ca165a2c6..d0fd349f25e7e0acffcbe310cd55d9bf69d5b8c6 100644 (file)
@@ -11,6 +11,8 @@
  * FOR A PARTICULAR PURPOSE.
  *
  * Original code by Hannes Gredler ([email protected])
+ * Turned into common "text protocol" code, which this uses, by
+ * Guy Harris.
  */
 
 #define NETDISSECT_REWORKED
 #include "interface.h"
 #include "extract.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]"));
+       txtproto_print(ndo, pptr, len, "sip", sipcmds, RESP_CODE_SECOND_TOKEN);
 }