From f7c1d9784bc734ef3592f38979567ec08ee06509 Mon Sep 17 00:00:00 2001 From: Craig Small Date: Wed, 4 Feb 2004 10:48:25 +0000 Subject: Added opentrac to listen More autobbreak updating nightmares --- listen/Makefile.am | 1 + listen/Makefile.in | 462 +++++++++++++++++++++------------------- listen/ax25dump.c | 9 +- listen/listen.1 | 2 + listen/listen.h | 4 + listen/opentracdump.c | 577 ++++++++++++++++++++++++++++++++++++++++++++++++++ listen/utils.c | 1 + 7 files changed, 836 insertions(+), 220 deletions(-) create mode 100644 listen/opentracdump.c (limited to 'listen') 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 Phil Karn KA9Q .br Heikki Hannikainen OH7LZB +.br +Scott Miller N1VG .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 +#include +#include +#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/ + // 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;c0) 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 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; -- cgit v1.2.3