X-Git-Url: https://git.tcpdump.org/tcpdump/blobdiff_plain/ec799d60f6cd3f41041b57efe3963c28dda94d4a..b5cbb4d2bbca5fda7fc3ab5996d416aaf727df30:/print-sip.c diff --git a/print-sip.c b/print-sip.c index c5bc8534..bfbfddfd 100644 --- a/print-sip.c +++ b/print-sip.c @@ -10,55 +10,45 @@ * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * FOR A PARTICULAR PURPOSE. * - * Original code by Hannes Gredler (hannes@juniper.net) + * Original code by Hannes Gredler (hannes@gredler.at) + * 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 #endif -#include - -#include -#include - -#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); }