summaryrefslogtreecommitdiffstats
path: root/listen
diff options
context:
space:
mode:
authorCraig Small <csmall@enc.com.au>2004-02-04 10:48:25 +0000
committerCraig Small <csmall@enc.com.au>2004-02-04 10:48:25 +0000
commitf7c1d9784bc734ef3592f38979567ec08ee06509 (patch)
tree17c2e106271282384653b6173af9ef4b3a7eec6b /listen
parentea7e4dd48be0fd998e17aeb4849dc3fbe71f80da (diff)
Added opentrac to listen
More autobbreak updating nightmares
Diffstat (limited to 'listen')
-rw-r--r--listen/Makefile.am1
-rw-r--r--listen/Makefile.in462
-rw-r--r--listen/ax25dump.c9
-rw-r--r--listen/listen.12
-rw-r--r--listen/listen.h4
-rw-r--r--listen/opentracdump.c577
-rw-r--r--listen/utils.c1
7 files changed, 836 insertions, 220 deletions
diff --git a/listen/Makefile.am b/listen/Makefile.am
index 8e99155..b47ecde 100644
--- a/listen/Makefile.am
+++ b/listen/Makefile.am
@@ -24,4 +24,5 @@ listen_SOURCES = \
ripdump.c \
rosedump.c \
flexnetdump.c \
+ opentracdump.c \
utils.c
diff --git a/listen/Makefile.in b/listen/Makefile.in
index fc42c2f..3c9af11 100644
--- a/listen/Makefile.in
+++ b/listen/Makefile.in
@@ -1,6 +1,7 @@
-# Makefile.in generated automatically by automake 1.4-p4 from Makefile.am
+# Makefile.in generated automatically by automake 1.5 from Makefile.am.
-# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
+# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
+# Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -10,6 +11,7 @@
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
+@SET_MAKE@
SHELL = @SHELL@
@@ -31,13 +33,9 @@ infodir = @infodir@
mandir = @mandir@
includedir = @includedir@
oldincludedir = /usr/include
-
-DESTDIR =
-
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
-
top_builddir = ..
ACLOCAL = @ACLOCAL@
@@ -46,11 +44,11 @@ AUTOMAKE = @AUTOMAKE@
AUTOHEADER = @AUTOHEADER@
INSTALL = @INSTALL@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_HEADER = $(INSTALL_DATA)
transform = @program_transform_name@
-
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
@@ -59,23 +57,36 @@ PRE_UNINSTALL = :
POST_UNINSTALL = :
host_alias = @host_alias@
host_triplet = @host@
+AMTAR = @AMTAR@
+AR = @AR@
AS = @AS@
AWK = @AWK@
AX25_LIB = @AX25_LIB@
CC = @CC@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
ECHO = @ECHO@
+EGREP = @EGREP@
EXEEXT = @EXEEXT@
+F77 = @F77@
+GCJ = @GCJ@
+GCJFLAGS = @GCJFLAGS@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LIBTOOL = @LIBTOOL@
LN_S = @LN_S@
-MAKEINFO = @MAKEINFO@
NCURSES_LIB = @NCURSES_LIB@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
RANLIB = @RANLIB@
+RC = @RC@
STRIP = @STRIP@
VERSION = @VERSION@
+am__include = @am__include@
+am__quote = @am__quote@
+install_sh = @install_sh@
bin_PROGRAMS = listen
@@ -85,132 +96,171 @@ EXTRA_DIST = $(man_MANS)
LDADD = $(AX25_LIB) $(NCURSES_LIB)
-listen_SOURCES = listen.c listen.h kissdump.c ax25dump.c nrdump.c arpdump.c ipdump.c icmpdump.c udpdump.c tcpdump.c rspfdump.c ripdump.c rosedump.c flexnetdump.c utils.c
+listen_SOURCES = \
+ listen.c \
+ listen.h \
+ kissdump.c \
+ ax25dump.c \
+ nrdump.c \
+ arpdump.c \
+ ipdump.c \
+ icmpdump.c \
+ udpdump.c \
+ tcpdump.c \
+ rspfdump.c \
+ ripdump.c \
+ rosedump.c \
+ flexnetdump.c \
+ opentracdump.c \
+ utils.c
+subdir = listen
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
-CONFIG_HEADER = ../config.h
-CONFIG_CLEAN_FILES =
-bin_PROGRAMS = listen$(EXEEXT)
-PROGRAMS = $(bin_PROGRAMS)
-
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+bin_PROGRAMS = listen$(EXEEXT)
+PROGRAMS = $(bin_PROGRAMS)
+
+am_listen_OBJECTS = listen.$(OBJEXT) kissdump.$(OBJEXT) \
+ ax25dump.$(OBJEXT) nrdump.$(OBJEXT) arpdump.$(OBJEXT) \
+ ipdump.$(OBJEXT) icmpdump.$(OBJEXT) udpdump.$(OBJEXT) \
+ tcpdump.$(OBJEXT) rspfdump.$(OBJEXT) ripdump.$(OBJEXT) \
+ rosedump.$(OBJEXT) flexnetdump.$(OBJEXT) opentracdump.$(OBJEXT) \
+ utils.$(OBJEXT)
+listen_OBJECTS = $(am_listen_OBJECTS)
+listen_LDADD = $(LDADD)
+listen_DEPENDENCIES =
+listen_LDFLAGS =
-DEFS = @DEFS@ -I. -I$(srcdir) -I..
+DEFS = @DEFS@
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
CPPFLAGS = @CPPFLAGS@
LDFLAGS = @LDFLAGS@
LIBS = @LIBS@
-listen_OBJECTS = listen.$(OBJEXT) kissdump.$(OBJEXT) ax25dump.$(OBJEXT) \
-nrdump.$(OBJEXT) arpdump.$(OBJEXT) ipdump.$(OBJEXT) icmpdump.$(OBJEXT) \
-udpdump.$(OBJEXT) tcpdump.$(OBJEXT) rspfdump.$(OBJEXT) \
-ripdump.$(OBJEXT) rosedump.$(OBJEXT) flexnetdump.$(OBJEXT) \
-utils.$(OBJEXT)
-listen_LDADD = $(LDADD)
-listen_DEPENDENCIES =
-listen_LDFLAGS =
-CFLAGS = @CFLAGS@
-COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+@AMDEP_TRUE@DEP_FILES = $(DEPDIR)/arpdump.Po $(DEPDIR)/ax25dump.Po \
+@AMDEP_TRUE@ $(DEPDIR)/flexnetdump.Po $(DEPDIR)/icmpdump.Po \
+@AMDEP_TRUE@ $(DEPDIR)/ipdump.Po $(DEPDIR)/kissdump.Po \
+@AMDEP_TRUE@ $(DEPDIR)/listen.Po $(DEPDIR)/nrdump.Po \
+@AMDEP_TRUE@ $(DEPDIR)/opentracdump.Po $(DEPDIR)/ripdump.Po \
+@AMDEP_TRUE@ $(DEPDIR)/rosedump.Po $(DEPDIR)/rspfdump.Po \
+@AMDEP_TRUE@ $(DEPDIR)/tcpdump.Po $(DEPDIR)/udpdump.Po \
+@AMDEP_TRUE@ $(DEPDIR)/utils.Po
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) \
+ $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
-LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@
-man1dir = $(mandir)/man1
-MANS = $(man_MANS)
+LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+CFLAGS = @CFLAGS@
+DIST_SOURCES = $(listen_SOURCES)
NROFF = nroff
-DIST_COMMON = Makefile.am Makefile.in
-
-
-DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
-
-TAR = tar
-GZIP_ENV = --best
-DEP_FILES = .deps/arpdump.P .deps/ax25dump.P .deps/flexnetdump.P \
-.deps/icmpdump.P .deps/ipdump.P .deps/kissdump.P .deps/listen.P \
-.deps/nrdump.P .deps/ripdump.P .deps/rosedump.P .deps/rspfdump.P \
-.deps/tcpdump.P .deps/udpdump.P .deps/utils.P
+MANS = $(man_MANS)
+DIST_COMMON = Makefile.am Makefile.in
SOURCES = $(listen_SOURCES)
-OBJECTS = $(listen_OBJECTS)
-
-all: all-redirect
-.SUFFIXES:
-.SUFFIXES: .S .c .lo .o .obj .s
-$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
- cd $(top_srcdir) && $(AUTOMAKE) --foreign listen/Makefile
-
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES)
- cd $(top_builddir) \
- && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+all: all-am
-mostlyclean-binPROGRAMS:
-
-clean-binPROGRAMS:
- -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
-distclean-binPROGRAMS:
+mostlyclean-libtool:
+ -rm -f *.lo
-maintainer-clean-binPROGRAMS:
+clean-libtool:
+ -rm -rf .libs _libs
+distclean-libtool:
+ -rm -f libtool
+$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --gnu listen/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ cd $(top_builddir) && \
+ CONFIG_HEADERS= CONFIG_LINKS= \
+ CONFIG_FILES=$(subdir)/$@ $(SHELL) ./config.status
install-binPROGRAMS: $(bin_PROGRAMS)
@$(NORMAL_INSTALL)
$(mkinstalldirs) $(DESTDIR)$(bindir)
@list='$(bin_PROGRAMS)'; for p in $$list; do \
- if test -f $$p; then \
- echo " $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`"; \
- $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \
+ p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+ if test -f $$p \
+ || test -f $$p1 \
+ ; then \
+ f=`echo $$p1|sed '$(transform);s/$$/$(EXEEXT)/'`; \
+ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/$$f"; \
+ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/$$f; \
else :; fi; \
done
uninstall-binPROGRAMS:
@$(NORMAL_UNINSTALL)
- list='$(bin_PROGRAMS)'; for p in $$list; do \
- rm -f $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \
+ @list='$(bin_PROGRAMS)'; for p in $$list; do \
+ f=`echo $$p|sed 's/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
+ echo " rm -f $(DESTDIR)$(bindir)/$$f"; \
+ rm -f $(DESTDIR)$(bindir)/$$f; \
done
-# FIXME: We should only use cygpath when building on Windows,
-# and only if it is available.
-.c.obj:
- $(COMPILE) -c `cygpath -w $<`
-
-.s.o:
- $(COMPILE) -c $<
-
-.S.o:
- $(COMPILE) -c $<
+clean-binPROGRAMS:
+ -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
+listen$(EXEEXT): $(listen_OBJECTS) $(listen_DEPENDENCIES)
+ @rm -f listen$(EXEEXT)
+ $(LINK) $(listen_LDFLAGS) $(listen_OBJECTS) $(listen_LDADD) $(LIBS)
mostlyclean-compile:
- -rm -f *.o core *.core
- -rm -f *.$(OBJEXT)
-
-clean-compile:
+ -rm -f *.$(OBJEXT) core *.core
distclean-compile:
-rm -f *.tab.c
-maintainer-clean-compile:
-
-.s.lo:
- $(LIBTOOL) --mode=compile $(COMPILE) -c $<
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/arpdump.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/ax25dump.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/flexnetdump.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/icmpdump.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/ipdump.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/kissdump.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/listen.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/nrdump.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/opentracdump.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/ripdump.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/rosedump.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/rspfdump.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/tcpdump.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/udpdump.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/utils.Po@am__quote@
-.S.lo:
- $(LIBTOOL) --mode=compile $(COMPILE) -c $<
-
-mostlyclean-libtool:
- -rm -f *.lo
-
-clean-libtool:
- -rm -rf .libs _libs
+distclean-depend:
+ -rm -rf $(DEPDIR)
-distclean-libtool:
+.c.o:
+@AMDEP_TRUE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ $(COMPILE) -c `test -f $< || echo '$(srcdir)/'`$<
-maintainer-clean-libtool:
+.c.obj:
+@AMDEP_TRUE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ $(COMPILE) -c `cygpath -w $<`
-listen$(EXEEXT): $(listen_OBJECTS) $(listen_DEPENDENCIES)
- @rm -f listen$(EXEEXT)
- $(LINK) $(listen_LDFLAGS) $(listen_OBJECTS) $(listen_LDADD) $(LIBS)
+.c.lo:
+@AMDEP_TRUE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@ depfile='$(DEPDIR)/$*.Plo' tmpdepfile='$(DEPDIR)/$*.TPlo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ $(LTCOMPILE) -c -o $@ `test -f $< || echo '$(srcdir)/'`$<
+CCDEPMODE = @CCDEPMODE@
+uninstall-info-am:
-install-man1:
+man1dir = $(mandir)/man1
+install-man1: $(man1_MANS) $(man_MANS)
+ @$(NORMAL_INSTALL)
$(mkinstalldirs) $(DESTDIR)$(man1dir)
- @list='$(man1_MANS)'; \
- l2='$(man_MANS)'; for i in $$l2; do \
+ @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
+ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+ for i in $$l2; do \
case "$$i" in \
*.1*) list="$$list $$i" ;; \
esac; \
@@ -220,14 +270,16 @@ install-man1:
else file=$$i; fi; \
ext=`echo $$i | sed -e 's/^.*\\.//'`; \
inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+ inst=`echo $$inst | sed -e 's/^.*\///'`; \
inst=`echo $$inst | sed '$(transform)'`.$$ext; \
echo " $(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst"; \
$(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst; \
done
-
uninstall-man1:
- @list='$(man1_MANS)'; \
- l2='$(man_MANS)'; for i in $$l2; do \
+ @$(NORMAL_UNINSTALL)
+ @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
+ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+ for i in $$l2; do \
case "$$i" in \
*.1*) list="$$list $$i" ;; \
esac; \
@@ -235,178 +287,150 @@ uninstall-man1:
for i in $$list; do \
ext=`echo $$i | sed -e 's/^.*\\.//'`; \
inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+ inst=`echo $$inst | sed -e 's/^.*\///'`; \
inst=`echo $$inst | sed '$(transform)'`.$$ext; \
echo " rm -f $(DESTDIR)$(man1dir)/$$inst"; \
rm -f $(DESTDIR)$(man1dir)/$$inst; \
done
-install-man: $(MANS)
- @$(NORMAL_INSTALL)
- $(MAKE) $(AM_MAKEFLAGS) install-man1
-uninstall-man:
- @$(NORMAL_UNINSTALL)
- $(MAKE) $(AM_MAKEFLAGS) uninstall-man1
tags: TAGS
-ID: $(HEADERS) $(SOURCES) $(LISP)
- list='$(SOURCES) $(HEADERS)'; \
- unique=`for i in $$list; do echo $$i; done | \
- awk ' { files[$$0] = 1; } \
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
- here=`pwd` && cd $(srcdir) \
- && mkid -f$$here/ID $$unique $(LISP)
+ mkid -fID $$unique $(LISP)
-TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP)
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
- list='$(SOURCES) $(HEADERS)'; \
- unique=`for i in $$list; do echo $$i; done | \
- awk ' { files[$$0] = 1; } \
+ list='$(SOURCES) $(HEADERS) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
- || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS)
-
-mostlyclean-tags:
+ || etags $(ETAGS_ARGS) $$tags $$unique $(LISP)
-clean-tags:
+GTAGS:
+ here=`CDPATH=: && cd $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
distclean-tags:
- -rm -f TAGS ID
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH
-maintainer-clean-tags:
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
-
-subdir = listen
+top_distdir = ..
+distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
distdir: $(DISTFILES)
- here=`cd $(top_builddir) && pwd`; \
- top_distdir=`cd $(top_distdir) && pwd`; \
- distdir=`cd $(distdir) && pwd`; \
- cd $(top_srcdir) \
- && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --foreign listen/Makefile
@for file in $(DISTFILES); do \
- d=$(srcdir); \
+ if test -f $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ $(mkinstalldirs) "$(distdir)/$$dir"; \
+ fi; \
if test -d $$d/$$file; then \
- cp -pr $$d/$$file $(distdir)/$$file; \
+ cp -pR $$d/$$file $(distdir) \
+ || exit 1; \
else \
test -f $(distdir)/$$file \
- || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
- || cp -p $$d/$$file $(distdir)/$$file || :; \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
fi; \
done
-
-DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :)
-
--include $(DEP_FILES)
-
-mostlyclean-depend:
-
-clean-depend:
-
-distclean-depend:
- -rm -rf .deps
-
-maintainer-clean-depend:
-
-%.o: %.c
- @echo '$(COMPILE) -c $<'; \
- $(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $<
- @-cp .deps/$(*F).pp .deps/$(*F).P; \
- tr ' ' '\012' < .deps/$(*F).pp \
- | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \
- >> .deps/$(*F).P; \
- rm .deps/$(*F).pp
-
-%.lo: %.c
- @echo '$(LTCOMPILE) -c $<'; \
- $(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $<
- @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \
- < .deps/$(*F).pp > .deps/$(*F).P; \
- tr ' ' '\012' < .deps/$(*F).pp \
- | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \
- >> .deps/$(*F).P; \
- rm -f .deps/$(*F).pp
-info-am:
-info: info-am
-dvi-am:
-dvi: dvi-am
check-am: all-am
check: check-am
-installcheck-am:
-installcheck: installcheck-am
-install-exec-am: install-binPROGRAMS
-install-exec: install-exec-am
+all-am: Makefile $(PROGRAMS) $(MANS)
-install-data-am: install-man
-install-data: install-data-am
+installdirs:
+ $(mkinstalldirs) $(DESTDIR)$(bindir) $(DESTDIR)$(man1dir)
-install-am: all-am
- @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
install: install-am
-uninstall-am: uninstall-binPROGRAMS uninstall-man
+install-exec: install-exec-am
+install-data: install-data-am
uninstall: uninstall-am
-all-am: Makefile $(PROGRAMS) $(MANS)
-all-redirect: all-am
-install-strip:
- $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
-installdirs:
- $(mkinstalldirs) $(DESTDIR)$(bindir) $(DESTDIR)$(mandir)/man1
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
clean-generic:
distclean-generic:
- -rm -f Makefile $(CONFIG_CLEAN_FILES)
- -rm -f config.cache config.log stamp-h stamp-h[0-9]*
+ -rm -f Makefile $(CONFIG_CLEAN_FILES) stamp-h stamp-h[0-9]*
maintainer-clean-generic:
-mostlyclean-am: mostlyclean-binPROGRAMS mostlyclean-compile \
- mostlyclean-libtool mostlyclean-tags mostlyclean-depend \
- mostlyclean-generic
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
-mostlyclean: mostlyclean-am
+clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am
-clean-am: clean-binPROGRAMS clean-compile clean-libtool clean-tags \
- clean-depend clean-generic mostlyclean-am
+distclean: distclean-am
-clean: clean-am
+distclean-am: clean-am distclean-compile distclean-depend \
+ distclean-generic distclean-libtool distclean-tags
-distclean-am: distclean-binPROGRAMS distclean-compile distclean-libtool \
- distclean-tags distclean-depend distclean-generic \
- clean-am
- -rm -f libtool
+dvi: dvi-am
-distclean: distclean-am
+dvi-am:
-maintainer-clean-am: maintainer-clean-binPROGRAMS \
- maintainer-clean-compile maintainer-clean-libtool \
- maintainer-clean-tags maintainer-clean-depend \
- maintainer-clean-generic distclean-am
- @echo "This command is intended for maintainers to use;"
- @echo "it deletes files that may require special tools to rebuild."
+info: info-am
+
+info-am:
+
+install-data-am: install-man
+
+install-exec-am: install-binPROGRAMS
+
+install-info: install-info-am
+
+install-man: install-man1
+
+installcheck-am:
maintainer-clean: maintainer-clean-am
-.PHONY: mostlyclean-binPROGRAMS distclean-binPROGRAMS clean-binPROGRAMS \
-maintainer-clean-binPROGRAMS uninstall-binPROGRAMS install-binPROGRAMS \
-mostlyclean-compile distclean-compile clean-compile \
-maintainer-clean-compile mostlyclean-libtool distclean-libtool \
-clean-libtool maintainer-clean-libtool install-man1 uninstall-man1 \
-install-man uninstall-man tags mostlyclean-tags distclean-tags \
-clean-tags maintainer-clean-tags distdir mostlyclean-depend \
-distclean-depend clean-depend maintainer-clean-depend info-am info \
-dvi-am dvi check check-am installcheck-am installcheck install-exec-am \
-install-exec install-data-am install-data install-am install \
-uninstall-am uninstall all-redirect all-am all installdirs \
-mostlyclean-generic distclean-generic clean-generic \
-maintainer-clean-generic clean mostlyclean distclean maintainer-clean
+maintainer-clean-am: distclean-am maintainer-clean-generic
+mostlyclean: mostlyclean-am
-installconf:
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+uninstall-am: uninstall-binPROGRAMS uninstall-info-am uninstall-man
+
+uninstall-man: uninstall-man1
+.PHONY: GTAGS all all-am check check-am clean clean-binPROGRAMS \
+ clean-generic clean-libtool distclean distclean-compile \
+ distclean-depend distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am info info-am install \
+ install-am install-binPROGRAMS install-data install-data-am \
+ install-exec install-exec-am install-info install-info-am \
+ install-man install-man1 install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool tags uninstall \
+ uninstall-am uninstall-binPROGRAMS uninstall-info-am \
+ uninstall-man uninstall-man1
+
+
+installconf:
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
diff --git a/listen/ax25dump.c b/listen/ax25dump.c
index 1809315..0ecb409 100644
--- a/listen/ax25dump.c
+++ b/listen/ax25dump.c
@@ -1,4 +1,4 @@
-/* @(#) $Header: /home/ax25-cvs/ax25-apps/listen/ax25dump.c,v 1.3 2001/11/27 04:57:43 csmall Exp $ */
+/* @(#) $Header: /home/ax25-cvs/ax25-apps/listen/ax25dump.c,v 1.4 2004/02/04 10:48:28 csmall Exp $ */
/* AX25 header tracing
* Copyright 1991 Phil Karn, KA9Q
@@ -22,6 +22,7 @@
#define PID_X25 0x01
#define PID_TEXNET 0xC3
#define PID_FLEXNET 0xCE
+#define PID_OPENTRAC 0x77
#define PID_NO_L3 0xF0
#define I 0x00
@@ -217,6 +218,9 @@ void ax25_dump(unsigned char *data, int length, int hexdump)
case PID_FLEXNET:
lprintf(T_AXHDR, "(FLEXNET)");
break;
+ case PID_OPENTRAC:
+ lprintf(T_AXHDR, "(OPENTRAC)");
+ break;
case PID_NO_L3:
lprintf(T_AXHDR, "(Text)");
break;
@@ -262,6 +266,9 @@ void ax25_dump(unsigned char *data, int length, int hexdump)
case PID_FLEXNET:
flexnet_dump(data, length, hexdump);
break;
+ case PID_OPENTRAC:
+ opentrac_dump(data, length, hexdump);
+ break;
case PID_NO_L3:
data_dump(data, length, hexdump);
break;
diff --git a/listen/listen.1 b/listen/listen.1
index 99e1f8b..14da24b 100644
--- a/listen/listen.1
+++ b/listen/listen.1
@@ -86,4 +86,6 @@ Jonathan Naylor G4KLX <g4klx@g4klx.demon.co.uk>
Phil Karn KA9Q <karn@qualcomm.com>
.br
Heikki Hannikainen OH7LZB <hessu@pspt.fi>
+.br
+Scott Miller N1VG <scott@opentrac.org>
.fi
diff --git a/listen/listen.h b/listen/listen.h
index 1633bb1..d484dc8 100644
--- a/listen/listen.h
+++ b/listen/listen.h
@@ -12,6 +12,7 @@
#define T_ROSEHDR 11
#define T_TIMESTAMP 12
#define T_FLEXNET 13
+#define T_OPENTRAC 14
/* In utils.c */
extern int color; /* Colorized mode */
@@ -67,3 +68,6 @@ void rose_dump(unsigned char *, int, int);
/* In flexnetdump.c */
void flexnet_dump(unsigned char *, int, int);
+
+/* In opentracdump.c */
+void opentrac_dump(unsigned char *, int, int);
diff --git a/listen/opentracdump.c b/listen/opentracdump.c
new file mode 100644
index 0000000..953618b
--- /dev/null
+++ b/listen/opentracdump.c
@@ -0,0 +1,577 @@
+/* OpenTRAC packet decoding by Scott Miller, N1VG
+ Copyright (c) 2003 Scott Miller
+ Protocol v1.0 draft, Modified 19 Jun 2003
+*/
+
+#include <stdio.h>
+#include <time.h>
+#include <string.h>
+#include "listen.h"
+
+#define MAX_UNIT_INDEX 28
+
+const char *units[]={"Volts","Amperes","Watts","Kelvins","Meters","Seconds",
+ "Meters/Second","Liters","Kilograms","Bits/Second",
+ "Bytes","Radians","Radians/Second","Square Meters",
+ "Joules","Newtons","Pascals","Hertz","Meters/Sec^2",
+ "Grays","Lumens","Cubic Meters/Second","Pascal Seconds",
+ "Kilograms/Meter^3","Radians/Second^2","Coulombs",
+ "Farads","Siemens","Count"};
+
+// Return values: 0 = OK, -1 = Couldn't Decode, -2 = Invalid Data
+
+int decode_sequence(unsigned char *element, int element_len);
+int decode_origination(unsigned char *element, int element_len);
+int decode_entityid(unsigned char *element, int element_len);
+int decode_position(unsigned char *element, int element_len);
+int decode_timestamp(unsigned char *element, int element_len);
+int decode_comment(unsigned char *element, int element_len);
+int decode_courseandspeed(unsigned char *element, int element_len);
+int decode_ambiguity(unsigned char *element, int element_len);
+int decode_country(unsigned char *element, int element_len);
+int decode_displayname(unsigned char *element, int element_len);
+int decode_waypoint(unsigned char *element, int element_len);
+int decode_symbol(unsigned char *element, int element_len);
+int decode_pathtrace(unsigned char *element, int element_len);
+int decode_heardby(unsigned char *element, int element_len);
+int decode_availablenets(unsigned char *element, int element_len);
+int decode_maidenhead(unsigned char *element, int element_len);
+int decode_gpsquality(unsigned char *element, int element_len);
+int decode_acreg(unsigned char *element, int element_len);
+int decode_rivergauge(unsigned char *element, int element_len);
+int decode_hazmat(unsigned char *element, int element_len);
+int flag_emergency(void);
+int flag_attention(void);
+
+int extract_ssid(unsigned char *call);
+
+int decode_units(unsigned int unitnum, unsigned char *element, int element_len);
+
+unsigned char origin_call[7]; // Who's talking
+unsigned char origin_ssid;
+unsigned char entity_call[7]; // What they're talking about
+unsigned char entity_ssid;
+unsigned int entity_serial;
+unsigned int entity_sequence;
+
+/* Dump an OpenTRAC packet */
+void opentrac_dump(unsigned char *data, int length, int hexdump)
+{
+ int elen;
+ int etype;
+ int decoded = 0;
+
+ lprintf(T_PROTOCOL, "OpenTRAC decode (%d bytes):\r\n", length);
+ strcpy(origin_call, "SENDER"); // Listen doesn't tell us the sender
+ origin_ssid = 0;
+ entity_serial = 0;
+ entity_sequence = 0;
+ while (decoded < length) {
+ elen = (int)*data;
+ decoded += (elen & 0x7f)+1;
+ if (elen & 0x80) { // See if it's got a 16-bit ID
+ elen = (elen & 0x7f) - 2; // Strip the extid flag
+ etype = get16(++data);
+ }
+ else {
+ elen--; // Don't count the type byte
+ etype = (int)*(data+1);
+ }
+ data+=2; // Skip to the body
+ lprintf(T_OPENTRAC, "EID 0x%0x len %d: ", etype, elen);
+ switch (etype) {
+ case (0x00): // Sequence
+ decode_sequence(data, elen);
+ break;
+ case (0x01): // Originating Station
+ decode_origination(data, elen);
+ break;
+ case (0x02): // Entity ID
+ decode_entityid(data, elen);
+ break;
+ case (0x10): // Position report
+ decode_position(data, elen);
+ break;
+ case (0x11): // Timestamp
+ decode_timestamp(data, elen);
+ break;
+ case (0x12): // Comment
+ decode_comment(data, elen);
+ break;
+ case (0x13): // Course and Speed
+ decode_courseandspeed(data, elen);
+ break;
+ case (0x14): // Positional Ambiguity
+ decode_ambiguity(data, elen);
+ break;
+ case (0x15): // Country Code
+ decode_country(data, elen);
+ break;
+ case (0x16): // Display Name
+ decode_displayname(data, elen);
+ break;
+ case (0x17): // Waypoint Name
+ decode_waypoint(data, elen);
+ break;
+ case (0x18): // Map Symbol
+ decode_symbol(data, elen);
+ break;
+ case (0x20): // Path Trace
+ decode_pathtrace(data, elen);
+ break;
+ case (0x21): // Heard-By List
+ decode_heardby(data, elen);
+ break;
+ case (0x22): // Available Networks
+ decode_availablenets(data, elen);
+ break;
+ case (0x32): // Maidenhead Locator
+ decode_maidenhead(data, elen);
+ break;
+ case (0x34): // GPS Data Quality
+ decode_gpsquality(data, elen);
+ break;
+ case (0x35): // Aircraft Registration
+ decode_acreg(data, elen);
+ break;
+ case (0x42): // River Flow Gauge
+ decode_rivergauge(data, elen);
+ break;
+ case (0x100): // Emergency/distress flag
+ flag_emergency();
+ break;
+ case (0x101): // Attention/ident flag
+ flag_attention();
+ break;
+ case (0x300): // Hazmat
+ decode_hazmat(data, elen);
+ break;
+ default: // Everything else
+ if ((etype & 0xff00) == 0x500) {
+ decode_units(etype & 0x00ff, data, elen);
+ }
+ else {
+ lprintf(T_OPENTRAC, "Unknown Element Type\r\n");
+ }
+ }
+ data+=elen;
+ }
+}
+
+int decode_sequence(unsigned char *element, int element_len) {
+ // 0x00 Sequence number - 16 bit integer
+ if (element_len != 2 && element_len != 0) return -1;
+
+ if (!element_len) {
+ entity_sequence++;
+ }
+ else {
+ entity_sequence = get16(element);
+ }
+
+ lprintf(T_OPENTRAC,"Sequence: %d\r\n",entity_sequence);
+
+ return 0;
+}
+
+int decode_origination(unsigned char *element, int element_len) {
+ // 0x01 Originating Station - Callsign, SSID, Sequence, and Network
+ unsigned char network;
+
+ if (element_len < 8) return -1;
+ if (element_len > 9) return -1;
+
+ memcpy(origin_call, element, 6);
+ origin_call[6]=0;
+ origin_ssid = extract_ssid(origin_call);
+ entity_sequence = get16(element+6);
+ strcpy(entity_call, origin_call);
+ entity_ssid = origin_ssid;
+ entity_serial = 0;
+ if (element_len == 9) {
+ network = *(element+9);
+ lprintf(T_OPENTRAC, "Origin: %s-%d seq %d net %d\r\n",origin_call,origin_ssid,entity_sequence,network);
+ }
+ else lprintf(T_OPENTRAC, "Origin: %s-%d seq %d direct\r\n",origin_call,origin_ssid,entity_sequence);
+
+ return 0;
+}
+
+int decode_entityid(unsigned char *element, int element_len) {
+ // 0x02 Entity ID
+
+ if (element_len > 10) return -1;
+
+ if (element_len > 5) {
+ memcpy(entity_call, element, 6);
+ entity_call[6]=0;
+ entity_ssid = extract_ssid(entity_call);
+ }
+ else {
+ strcpy(entity_call, origin_call);
+ }
+
+ switch (element_len) {
+ case 0:
+ entity_serial++;
+ entity_sequence = 0;
+ break;
+ case 2:
+ entity_serial = get16(element);
+ entity_sequence = 0;
+ break;
+ case 4:
+ entity_serial = get16(element);
+ entity_sequence = get16(element+2);
+ break;
+ case 6:
+ entity_serial = 0;
+ break;
+ case 8:
+ entity_serial = get16(element+6);
+ entity_sequence = 0;
+ break;
+ case 10:
+ entity_serial = get16(element+6);
+ entity_sequence = get16(element+8);
+ break;
+ default:
+ return -1;
+ }
+
+ lprintf(T_OPENTRAC, "Entity %s-%d:%04x #%d\r\n", entity_call, entity_ssid, entity_serial, entity_sequence);
+
+ return 0;
+}
+
+int decode_position(unsigned char *element, int element_len) {
+ // 0x10 Position Report - Lat/Lon/<Alt>
+ // Lat/Lon is WGS84, 180/2^31 degrees, Alt is 1/100 meter
+ const double semicircles = 11930464.71111111111;
+ double lat, lon;
+ float alt = 0;
+
+ if (element_len < 8) return -1; // Too short!
+ if (element_len > 11) return -1; // Too long!
+
+ lat = get32(element) / semicircles;
+ lon = get32(element+4) / semicircles;
+ if (element_len == 11) {
+ alt = ((((*(element+8))<<16)+get16(element+9))/100)-10000;
+ }
+ if (lat >= 90 || lat <= -90 || lon >= 180 || lon <= -180) return -2;
+ lprintf(T_OPENTRAC, "Position: Lat %f Lon %f Alt %f\r\n",lat,lon,alt);
+
+ return 0;
+}
+
+int decode_timestamp(unsigned char *element, int element_len) {
+ // 0x11 Timestamp - Unix format time (unsigned)
+ long rawtime = 0;
+
+ if (element_len != 4) return -1;
+
+ rawtime = get32(element);
+ lprintf(T_OPENTRAC, "Time: %s", ctime(&rawtime));
+
+ return 0;
+}
+
+int decode_comment(unsigned char *element, int element_len) {
+ // 0x12 Freeform Comment - ASCII text
+ char comment[127];
+
+ if (element_len > 126) return -1; // shouldn't be possible
+
+ strncpy(comment, element, element_len);
+ comment[element_len] = 0;
+ lprintf(T_OPENTRAC, "Text: %s\r\n", comment);
+
+ return 0;
+}
+
+int decode_courseandspeed(unsigned char *element, int element_len) {
+ // 0x13 Course and Speed - Course in degrees, speed in 1/50 m/s
+ unsigned int course;
+ unsigned int rawspeed;
+ float speed;
+
+ if (element_len != 3) return -1;
+
+ course = (*element<<1) + ((*(element+1)&0x8000) >> 15);
+ rawspeed = (get16(element+1) & 0x7ffff);
+ speed = (float)rawspeed*0.072; // kph
+ if (course >= 360) return -2;
+ lprintf(T_OPENTRAC, "Course: %d Speed: %f kph\r\n", course, speed);
+
+ return 0;
+}
+
+int decode_ambiguity(unsigned char *element, int element_len) {
+ // 0x14 Positional Ambiguity - 16 bits, in meters
+ int ambiguity;
+
+ if (element_len != 2) return -1;
+
+ ambiguity = get16(element);
+ lprintf(T_OPENTRAC, "Position +/- %d meters\r\n", ambiguity);
+ return 0;
+}
+
+int decode_country(unsigned char *element, int element_len) {
+ // 0x15 Country Code - ISO 3166-1 and optionally -2
+ char country[3];
+ char subdivision[4];
+
+ if (element_len < 2) return -1;
+ if (element_len > 5) return -1;
+
+ strncpy(country, element, 2);
+ country[2] = 0;
+ if (element_len > 2) {
+ strncpy(subdivision, element+2, element_len-2);
+ subdivision[element_len-2] = 0;
+ lprintf(T_OPENTRAC, "Country Code %s-%s\r\n", country, subdivision);
+ }
+ else {
+ lprintf(T_OPENTRAC, "Country Code %s\r\n", country);
+ }
+ return 0;
+}
+
+int decode_displayname(unsigned char *element, int element_len) {
+// 0x16 - Display Name (UTF-8 text)
+ char displayname[31];
+
+ if (element_len > 30 || !element_len) return -1;
+
+ strncpy(displayname, element, element_len);
+ displayname[element_len] = 0;
+
+ lprintf(T_OPENTRAC, "Display Name: %s\r\n", displayname);
+ return 0;
+}
+
+int decode_waypoint(unsigned char *element, int element_len) {
+// 0x17 - Waypoint Name (up to 6 chars, uppercase)
+ char waypoint[7];
+
+ if (element_len > 6 || !element_len) return -1;
+
+ strncpy(waypoint, element, element_len);
+ waypoint[element_len] = 0;
+
+ lprintf(T_OPENTRAC, "Waypoint Name: %s\r\n", waypoint);
+ return 0;
+}
+
+int decode_symbol(unsigned char *element, int element_len) {
+ // 0x18 Map Symbol - Packed 4-bit integers
+ int c;
+
+ if (!element_len) return -1;
+
+ lprintf(T_OPENTRAC, "Symbol: ");
+ for (c=0;c<element_len;c++) {
+ if (c>0) lprintf(T_OPENTRAC, ".");
+ lprintf(T_OPENTRAC, "%d", element[c] >> 4);
+ if (element[c] & 0x0f) lprintf(T_OPENTRAC, ".%d", element[c] & 0x0f);
+ }
+ lprintf(T_OPENTRAC, "\r\n");
+
+ return 0;
+}
+
+int decode_pathtrace(unsigned char *element, int element_len) {
+ // 0x20 Path Trace - Call/SSID, Network
+ char callsign[7];
+ int ssid, c, network;
+
+ if (element_len % 7) return -1; // Must be multiple of 7 octets
+ if (!element_len) {
+ lprintf(T_OPENTRAC, "Empty Path\r\n");
+ return 0;
+ }
+
+ lprintf(T_OPENTRAC, "Path: ");
+ for (c=0; c<element_len; c+=7) {
+ memcpy(callsign, element+c, 6);
+ ssid = extract_ssid(callsign);
+ network = (int)*(element+c+6);
+ lprintf(T_OPENTRAC, " %s-%d (%d)", callsign, ssid, network);
+ }
+ lprintf(T_OPENTRAC, "\r\n");
+
+ return 0;
+}
+
+int decode_heardby(unsigned char *element, int element_len) {
+ // 0x21 Heard-By List
+ int c;
+
+ lprintf(T_OPENTRAC, "Heard By:");
+ for (c=0; c<element_len; c++) {
+ lprintf(T_OPENTRAC, " %d", (int)*(element+c));
+ }
+ lprintf(T_OPENTRAC, "\r\n");
+
+ return 0;
+}
+
+int decode_availablenets(unsigned char *element, int element_len) {
+ // 0x22 Available Networks
+ int c;
+
+ lprintf(T_OPENTRAC, "Available Networks:");
+ for (c=0; c<element_len; c++) {
+ lprintf(T_OPENTRAC, " %d", (int)*(element+c));
+ }
+ lprintf(T_OPENTRAC, "\r\n");
+
+ return 0;
+}
+
+int decode_gpsquality(unsigned char *element, int element_len) {
+ // 0x34 GPS Data Quality - Fix, Validity, Sats, PDOP, HDOP, VDOP
+ int fixtype, validity, sats;
+ const char *fixstr[] = {"Unknown Fix", "No Fix", "2D Fix", "3D Fix"};
+ const char *validstr[] = {"Invalid", "Valid SPS", "Valid DGPS",
+ "Valid PPS"};
+
+ if (element_len > 4 || !element_len) return -1;
+
+ fixtype = (element[0] & 0xc0) >> 6;
+ validity = (element[0] & 0x30) >> 4;
+ sats = (element[0] & 0x0f);
+ lprintf(T_OPENTRAC, "GPS: %s %s, %d sats", fixstr[fixtype],
+ validstr[validity], sats);
+ if (element_len > 1)
+ lprintf(T_OPENTRAC, " PDOP=%.1f", (float)element[1]/10);
+ if (element_len > 2)
+ lprintf(T_OPENTRAC, " HDOP=%.1f", (float)element[2]/10);
+ if (element_len > 3)
+ lprintf(T_OPENTRAC, " VDOP=%.1f", (float)element[3]/10);
+ lprintf(T_OPENTRAC, "\r\n");
+
+ return 0;
+}
+
+
+int decode_acreg(unsigned char *element, int element_len) {
+ // 0x35 Aircraft Registration - ASCII text
+ char nnumber[9];
+
+ if (element_len > 8) return -1;
+
+ strncpy(nnumber, element, element_len);
+ nnumber[element_len]=0;
+ lprintf(T_OPENTRAC, "Aircraft ID: %s\r\n", nnumber);
+
+ return 0;
+}
+
+int decode_rivergauge(unsigned char *element, int element_len) {
+ // 0x42 River Flow Gauge - 1/64 m^3/sec, centimeters
+ unsigned int flow;
+ unsigned int height;
+ float flowm;
+ float heightm;
+
+ if (element_len != 4) return -1;
+
+ flow = get16(element);
+ height = get16(element+2);
+ flowm = (float)flow / 64;
+ heightm = (float)height / 100;
+ lprintf(T_OPENTRAC, "River flow rate: %f Cu M/Sec Height: %f M\r\n",
+ flowm, heightm);
+
+ return 0;
+}
+
+
+int decode_units(unsigned int unitnum, unsigned char *element, int element_len) {
+ // 0x0500 to 0x05ff Generic Measurement Elements
+ // Values may be 8-bit int, 16-bit int, single float, or double float
+ union measurement {
+ char c;
+ float f;
+ double d;
+ } *mval;
+ int ival; // too much variation in byte order and size for union
+
+ if (unitnum > MAX_UNIT_INDEX) return -2; // Invalid unit name
+ mval = (void *)element;
+ switch (element_len) {
+ case 1:
+ lprintf(T_OPENTRAC, "%d %s\r\n", mval->c, units[unitnum]);
+ break;
+ case 2:
+ ival = get16(element);
+ lprintf(T_OPENTRAC, "%d %s\r\n", ival, units[unitnum]);
+ break;
+ case 4:
+ lprintf(T_OPENTRAC, "%f %s\r\n", mval->f, units[unitnum]);
+ break;
+ case 8:
+ lprintf(T_OPENTRAC, "%f %s\r\n", mval->d, units[unitnum]);
+ break;
+ default:
+ return -1;
+ }
+
+ return 0;
+}
+
+int flag_emergency(void) {
+ // 0x0100 - Emergency / Distress Call
+ lprintf(T_ERROR, "* * * EMERGENCY * * *\r\n");
+ return 0;
+}
+
+int flag_attention(void) {
+ // 0x0101 - Attention / Ident
+ lprintf(T_PROTOCOL, " - ATTENTION - \r\n");
+ return 0;
+}
+
+int decode_hazmat(unsigned char *element, int element_len) {
+// 0x0300 - HAZMAT (UN ID in lower 14 bits)
+ int un_id;
+
+ if (element_len < 2) {
+ lprintf(T_OPENTRAC, "HAZMAT: Unknown Material\r\n");
+ }
+ else
+ {
+ un_id = get16(element) & 0x3fff;
+ lprintf(T_OPENTRAC, "HAZMAT: UN%04d\r\n", un_id);
+ }
+ return 0;
+}
+
+int decode_maidenhead(unsigned char *element, int element_len) {
+// 0x32 - Maidenhead Locator (4 or 6 chars)
+ char maidenhead[7];
+
+ if (element_len > 6 || !element_len) return -1;
+
+ strncpy(maidenhead, element, element_len);
+ maidenhead[element_len] = 0;
+
+ lprintf(T_OPENTRAC, "Grid ID: %s\r\n", maidenhead);
+ return 0;
+}
+
+int extract_ssid(unsigned char *call) {
+ // Strip the SSID from the callsign and return it
+ int c, ssid;
+
+ for (c=ssid=0;c<6;c++) {
+ ssid |= (call[c] & 0x80) >> (c+2);
+ call[c] &= 0x7f;
+ }
+
+ return ssid;
+}
+
diff --git a/listen/utils.c b/listen/utils.c
index 0d978ee..e31e020 100644
--- a/listen/utils.c
+++ b/listen/utils.c
@@ -104,6 +104,7 @@ int initcolor(void)
init_pair(T_BPQ, COLOR_MAGENTA, COLOR_BLACK);
init_pair(T_TCPHDR, COLOR_BLUE, COLOR_BLACK);
init_pair(T_FLEXNET, COLOR_BLUE, COLOR_BLACK);
+ init_pair(T_OPENTRAC, COLOR_YELLOW, COLOR_BLACK);
return 1;