* LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE.
*
+ * Turned into common "text protocol" code, which this uses, by
+ * Guy Harris.
*/
-#ifndef lint
-static const char rcsid[] _U_ =
- "@(#) $Header: /tcpdump/master/tcpdump/print-sip.c,v 1.1 2004-07-27 17:04:20 hannes Exp $";
-#endif
+/* \summary: Session Initiation Protocol (SIP) printer */
#ifdef HAVE_CONFIG_H
-#include "config.h"
+#include <config.h>
#endif
-#include <tcpdump-stdinc.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "interface.h"
-#include "extract.h"
-
-#include "udp.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(register const u_char *pptr, register u_int len)
+sip_print(netdissect_options *ndo, const u_char *pptr, u_int len)
{
- u_int idx;
-
- printf("SIP, length: %u%s", len, vflag ? "\n\t" : "");
-
- /* in non-verbose mode just lets print the protocol and length */
- if (vflag < 1)
- return;
-
- for (idx = 0; idx < len; idx++) {
- TCHECK2(*(pptr+idx), 2);
- if (EXTRACT_16BITS(pptr+idx) != 0x0d0a) { /* linefeed ? */
- safeputchar(*(pptr+idx));
- } else {
- printf("\n\t");
- idx+=1;
- }
- }
-
- /* do we want to see an additionally hexdump ? */
- if (vflag> 1)
- print_unknown_data(pptr,"\n\t",len);
-
- return;
-
-trunc:
- printf("[|sip]");
+ ndo->ndo_protocol = "sip";
+ txtproto_print(ndo, pptr, len, sipcmds, RESP_CODE_SECOND_TOKEN);
}