X-Git-Url: https://git.tcpdump.org/tcpdump/blobdiff_plain/0aef9cda5781e238251b7b252efe11e163250e48..refs/pull/1034/head:/print-sip.c diff --git a/print-sip.c b/print-sip.c index 540cbf42..bfbfddfd 100644 --- a/print-sip.c +++ b/print-sip.c @@ -10,47 +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. */ -#define NETDISSECT_REWORKED +/* \summary: Session Initiation Protocol (SIP) printer */ + #ifdef HAVE_CONFIG_H -#include "config.h" +#include #endif -#include - -#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); }