198524Sfenner/*
298524Sfenner * Copyright (C) 2000, Richard Sharpe
398524Sfenner *
4127668Sbms * This software may be distributed either under the terms of the
5127668Sbms * BSD-style licence that accompanies tcpdump or under the GNU GPL
698524Sfenner * version 2 or later.
798524Sfenner *
898524Sfenner * print-beep.c
998524Sfenner *
1098524Sfenner */
1198524Sfenner
1298524Sfenner#ifndef lint
13127668Sbmsstatic const char rcsid[] _U_ =
14190207Srpaulo  "@(#) $Header: /tcpdump/master/tcpdump/print-beep.c,v 1.6 2003-11-16 09:36:13 guy Exp $";
1598524Sfenner#endif
1698524Sfenner
1798524Sfenner#ifdef HAVE_CONFIG_H
1898524Sfenner#include "config.h"
1998524Sfenner#endif
2098524Sfenner
21127668Sbms#include <tcpdump-stdinc.h>
2298524Sfenner
2398524Sfenner#ifdef HAVE_MEMORY_H
2498524Sfenner#include <memory.h>
2598524Sfenner#endif
2698524Sfenner#include <stdio.h>
2798524Sfenner#include <stdlib.h>
2898524Sfenner#include <string.h>
2998524Sfenner
3098524Sfenner#include "interface.h"
3198524Sfenner#include "extract.h"
3298524Sfenner
3398524Sfenner/* Check for a string but not go beyond length
3498524Sfenner * Return TRUE on match, FALSE otherwise
35127668Sbms *
3698524Sfenner * Looks at the first few chars up to tl1 ...
3798524Sfenner */
3898524Sfenner
3998524Sfennerstatic int l_strnstart(const char *, u_int, const char *, u_int);
4098524Sfenner
4198524Sfennerstatic int
4298524Sfennerl_strnstart(const char *tstr1, u_int tl1, const char *str2, u_int l2)
4398524Sfenner{
4498524Sfenner
4598524Sfenner	if (tl1 > l2)
4698524Sfenner		return 0;
4798524Sfenner
4898524Sfenner	return (strncmp(tstr1, str2, tl1) == 0 ? 1 : 0);
4998524Sfenner}
5098524Sfenner
5198524Sfennervoid
5298524Sfennerbeep_print(const u_char *bp, u_int length)
5398524Sfenner{
5498524Sfenner
55111726Sfenner	if (l_strnstart("MSG", 4, (const char *)bp, length)) /* A REQuest */
5698524Sfenner		printf(" BEEP MSG");
57111726Sfenner	else if (l_strnstart("RPY ", 4, (const char *)bp, length))
5898524Sfenner		printf(" BEEP RPY");
59111726Sfenner	else if (l_strnstart("ERR ", 4, (const char *)bp, length))
6098524Sfenner		printf(" BEEP ERR");
61111726Sfenner	else if (l_strnstart("ANS ", 4, (const char *)bp, length))
6298524Sfenner		printf(" BEEP ANS");
63111726Sfenner	else if (l_strnstart("NUL ", 4, (const char *)bp, length))
6498524Sfenner		printf(" BEEP NUL");
65111726Sfenner	else if (l_strnstart("SEQ ", 4, (const char *)bp, length))
6698524Sfenner		printf(" BEEP SEQ");
67111726Sfenner	else if (l_strnstart("END", 4, (const char *)bp, length))
6898524Sfenner		printf(" BEEP END");
69127668Sbms	else
7098524Sfenner		printf(" BEEP (payload or undecoded)");
7198524Sfenner}
72