X-Git-Url: https://git.tcpdump.org/tcpdump/blobdiff_plain/51670d19496d42a99ced7358dab6fbdce94b7708..refs/pull/433/head:/print-sip.c diff --git a/print-sip.c b/print-sip.c index 71d1bc34..d0fd349f 100644 --- a/print-sip.c +++ b/print-sip.c @@ -11,47 +11,43 @@ * FOR A PARTICULAR PURPOSE. * * Original code by Hannes Gredler (hannes@juniper.net) + * Turned into common "text protocol" code, which this uses, by + * Guy Harris. */ +#define NETDISSECT_REWORKED #ifdef HAVE_CONFIG_H #include "config.h" #endif #include -#include -#include - #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(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(gndo, *(pptr + idx)); - } else { - printf("\n\t"); - idx+=1; - } - } - - /* do we want to see an additionally hexdump ? */ - if (vflag> 1) - print_unknown_data(gndo,pptr,"\n\t",len); - - return; - -trunc: - printf("[|sip]"); + txtproto_print(ndo, pptr, len, "sip", sipcmds, RESP_CODE_SECOND_TOKEN); }