summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEvan Huus <eapache@gmail.com>2014-08-04 07:22:59 -0400
committerEvan Huus <eapache@gmail.com>2014-08-04 14:31:37 +0000
commit37b5b095b90ea714478049408084f39707882a06 (patch)
tree626067a89976a18ce078c093a3609aa1de25e173
parent76e4698b6d5bf1c8a2aac419093d5cd52508a003 (diff)
downloadwireshark-37b5b095b90ea714478049408084f39707882a06.tar.gz
Rip out the filetap code
We decided at sharkfest that this wasn't the right design for file dissection; we have more-or-less settled on way forward, but nobody's shown interest in implementing it. Whether or not that ever happens, this code is effectively dead and should be removed. Change-Id: I14d6086df3204fffb6485228db39d9f407661417 Reviewed-on: https://code.wireshark.org/review/3400 Petri-Dish: Evan Huus <eapache@gmail.com> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Evan Huus <eapache@gmail.com>
-rw-r--r--CMakeLists.txt7
-rw-r--r--Makefile.am8
-rw-r--r--Makefile.nmake29
-rw-r--r--config.nmake5
-rw-r--r--configure.ac1
-rw-r--r--filetap/CMakeLists.txt88
-rw-r--r--filetap/Makefile.am78
-rw-r--r--filetap/Makefile.common38
-rw-r--r--filetap/Makefile.nmake57
-rw-r--r--filetap/file_access.c1001
-rw-r--r--filetap/ft_file_wrappers.c1647
-rw-r--r--filetap/ft_file_wrappers.h59
-rw-r--r--filetap/ftap-int.h250
-rw-r--r--filetap/ftap.c478
-rw-r--r--filetap/ftap.h388
-rw-r--r--image/Makefile.nmake7
-rw-r--r--image/filetap.rc.in34
-rwxr-xr-xmake-version.pl6
-rw-r--r--tfshark.c56
19 files changed, 28 insertions, 4209 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 2163db3692..813f2ee4b3 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -121,7 +121,6 @@ include_directories(
${CMAKE_BINARY_DIR}
${CMAKE_SOURCE_DIR}
${CMAKE_SOURCE_DIR}/epan
- ${CMAKE_SOURCE_DIR}/filetap
${CMAKE_SOURCE_DIR}/tools/lemon
${CMAKE_SOURCE_DIR}/wiretap
)
@@ -794,14 +793,13 @@ add_subdirectory( capchild )
add_subdirectory( caputils )
add_subdirectory( codecs )
add_subdirectory( epan )
-add_subdirectory( filetap )
add_subdirectory( tools/lemon )
add_subdirectory( ui )
add_subdirectory( wiretap )
add_subdirectory( wsutil )
if(NOT WIN32)
- add_custom_target(dumpabi DEPENDS dumpabi-libwireshark dumpabi-libfiletap dumpabi-libwiretap dumpabi-libwsutil color.h)
+ add_custom_target(dumpabi DEPENDS dumpabi-libwireshark dumpabi-libwiretap dumpabi-libwsutil color.h)
endif()
if(ENABLE_ECHLD)
@@ -881,7 +879,6 @@ set( IN_FILES
image/editcap.rc.in
image/captype.rc.in
image/libwsutil.rc.in
- image/filetap.rc.in
image/wiretap.rc.in
packaging/macosx/Info.plist.in
plugins/ethercat/plugin.rc.in
@@ -923,7 +920,6 @@ link_directories(
${CMAKE_BINARY_DIR}/caputils
${CMAKE_BINARY_DIR}/codecs
${CMAKE_BINARY_DIR}/epan
- ${CMAKE_BINARY_DIR}/filetap
${CMAKE_BINARY_DIR}/wiretap
${CMAKE_BINARY_DIR}/wsutil
)
@@ -1147,7 +1143,6 @@ endif()
if(BUILD_tfshark)
set(tfshark_LIBS
- filetap
ui
${LIBEPAN_LIBS}
${APPLE_CORE_FOUNDATION_LIBRARY}
diff --git a/Makefile.am b/Makefile.am
index d33248f358..455b7c8e1b 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -354,7 +354,6 @@ wireshark_ldadd = \
ui/libui.a \
ui/libui_dirty.a \
codecs/libcodec.a \
- filetap/libfiletap.la \
wiretap/libwiretap.la \
epan/libwireshark.la \
wsutil/libwsutil.la \
@@ -452,7 +451,6 @@ endif
tfshark_LDADD = \
ui/cli/libcliui.a \
ui/libui.a \
- filetap/libfiletap.la \
wiretap/libwiretap.la \
epan/libwireshark.la \
wsutil/libwsutil.la \
@@ -793,7 +791,6 @@ EXTRA_DIST = \
dumpcap.c \
editcap.c \
epan/print.ps \
- filetap/CMakeLists.txt \
fix/FIX.xml \
fix/FIX40.xml \
fix/FIX41.xml \
@@ -878,7 +875,6 @@ EXTRA_DIST = \
image/expert_ok.png \
image/expert_warn.png \
image/file_dlg_win32.rc \
- image/filetap.rc.in \
image/hi16-app-wireshark.png \
image/hi32-app-wireshark.png \
image/hi48-app-wireshark.png \
@@ -1137,7 +1133,6 @@ DIST_SUBDIRS = \
doc \
epan \
echld \
- filetap \
ui \
ui/cli \
ui/gtk \
@@ -1154,7 +1149,6 @@ SUBDIRS = \
tools \
wsutil \
wiretap \
- filetap \
epan \
capchild \
caputils \
@@ -1299,7 +1293,6 @@ clean-local:
rm -rf $(top_stagedir)
dumpabi:
- $(MAKE) -C filetap dumpabi-libfiletap
$(MAKE) -C wiretap dumpabi-libwiretap
$(MAKE) -C epan dumpabi-libwireshark
$(MAKE) -C wsutil dumpabi-libwsutil
@@ -1313,7 +1306,6 @@ checkapi_local:
checkapi: checkapi_local
cd wiretap && $(MAKE) checkapi
- cd filetap && $(MAKE) checkapi
cd codecs && $(MAKE) checkapi
cd capchild && $(MAKE) checkapi
cd caputils && $(MAKE) checkapi
diff --git a/Makefile.nmake b/Makefile.nmake
index 4adbcb2527..afd1891bbc 100644
--- a/Makefile.nmake
+++ b/Makefile.nmake
@@ -112,8 +112,7 @@ tshark_LIBS= wiretap\wiretap-$(WTAP_VERSION).lib \
$(ZLIB_LIBS)
!ENDIF
-tfshark_LIBS= filetap\filetap-$(FTAP_VERSION).lib \
- wiretap\wiretap-$(WTAP_VERSION).lib \
+tfshark_LIBS= wiretap\wiretap-$(WTAP_VERSION).lib \
wsock32.lib user32.lib psapi.lib \
$(GLIB_LIBS) \
$(GTHREAD_LIBS) \
@@ -218,11 +217,11 @@ EXECUTABLES=$(EXECUTABLES) qtshark.exe
RESOURCES=image\wireshark.res image\file_dlg_win32.res \
image\libwireshark.res image\tshark.res image\tfshark.res image\capinfos.res \
image\captype.res image\editcap.res image\mergecap.res \
- image\text2pcap.res image\wiretap.res image\filetap.res image\dumpcap.res \
+ image\text2pcap.res image\wiretap.res image\dumpcap.res \
image\rawshark.res image\reordercap.res image\libwsutil.res
-all: $(LIBS_CHECK) config.h ui\qt\config.pri tools image codecs $(C_ARES_DLL) $(ADNS_DLL) $(ZLIB_DLL) wsutil wiretap filetap epan $(EXECUTABLES) wireshark.bsc $(RESOURCES) help install-all
+all: $(LIBS_CHECK) config.h ui\qt\config.pri tools image codecs $(C_ARES_DLL) $(ADNS_DLL) $(ZLIB_DLL) wsutil wiretap epan $(EXECUTABLES) wireshark.bsc $(RESOURCES) help install-all
!IFDEF MAKENSIS
packaging: all
@@ -275,7 +274,6 @@ wireshark.bsc: \
epan\dissectors\*.sbr \
epan\ftypes\*.sbr \
epan\wslua\*.sbr \
- filetap\*.sbr \
plugins\asn1\*.sbr \
plugins\docsis\*.sbr \
plugins\ethercat\*.sbr \
@@ -314,7 +312,6 @@ $(RESOURCES): image
## Note: The proper "SUBSYSTEM" link option to be used for linking each of the Wireshark executables
## is specified in '$(guiflags)' or '$(conflags)' as used as part of the link options.
## (These variables (as well as '$(guilibsdll)' and '$(conlibsdll)') are defined in win32.mak).
-filetap\filetap-$(FTAP_VERSION).lib: image $(ZLIB_DLL) filetap
wiretap\wiretap-$(WTAP_VERSION).lib: image $(ZLIB_DLL) wiretap
wireshark.exe : $(LIBS_CHECK) config.h $(wireshark_OBJECTS) capchild caputils codecs epan ui gtk win32 image\wireshark.res image\file_dlg_win32.res wsutil\libwsutil.lib wiretap\wiretap-$(WTAP_VERSION).lib codecs\codecs.lib ui\libui.lib ui\gtk\libgtkui.lib ui\win32\libgtkui_win32.lib plugins
@@ -337,7 +334,7 @@ tshark.exe : $(LIBS_CHECK) config.h $(tshark_OBJECTS) capchild caputils epan ui
mt.exe -nologo -manifest "tshark.exe.manifest" -outputresource:tshark.exe;1
!ENDIF
-tfshark.exe : $(LIBS_CHECK) config.h $(tfshark_OBJECTS) epan ui cli image\tfshark.res wsutil\libwsutil.lib filetap\filetap-$(FTAP_VERSION).lib plugins
+tfshark.exe : $(LIBS_CHECK) config.h $(tfshark_OBJECTS) epan ui cli image\tfshark.res wsutil\libwsutil.lib plugins
@echo Linking $@
$(LINK) @<<
/OUT:tfshark.exe $(conflags) $(conlibsdll) $(LDFLAGS) /LARGEADDRESSAWARE $(tfshark_LIBS) $(tfshark_OBJECTS) ui\cli\libcliui.lib ui\libui.lib image\tfshark.res
@@ -579,8 +576,6 @@ clean: clean-local
$(MAKE) /$(MAKEFLAGS) -f Makefile.nmake clean
cd ../wsutil
$(MAKE) /$(MAKEFLAGS) -f Makefile.nmake clean
- cd ../filetap
- $(MAKE) /$(MAKEFLAGS) -f Makefile.nmake clean
cd ../capchild
$(MAKE) /$(MAKEFLAGS) -f Makefile.nmake clean
cd ../caputils
@@ -635,8 +630,6 @@ distclean-local: clean-local
distclean: distclean-local
cd wiretap
$(MAKE) /$(MAKEFLAGS) -f Makefile.nmake distclean
- cd ../filetap
- $(MAKE) /$(MAKEFLAGS) -f Makefile.nmake distclean
cd ../wsutil
$(MAKE) /$(MAKEFLAGS) -f Makefile.nmake distclean
cd ../capchild
@@ -686,8 +679,6 @@ maintainer-clean-local: distclean-local
maintainer-clean: maintainer-clean-local
cd wiretap
$(MAKE) /$(MAKEFLAGS) -f Makefile.nmake maintainer-clean
- cd ../filetap
- $(MAKE) /$(MAKEFLAGS) -f Makefile.nmake maintainer-clean
cd ../wsutil
$(MAKE) /$(MAKEFLAGS) -f Makefile.nmake maintainer-clean
cd ../capchild
@@ -802,11 +793,6 @@ wiretap::
$(MAKE) /$(MAKEFLAGS) -f Makefile.nmake
cd ..
-filetap::
- cd filetap
- $(MAKE) /$(MAKEFLAGS) -f Makefile.nmake
- cd ..
-
capchild:: help config.h version.h doxygen
cd capchild
$(MAKE) /$(MAKEFLAGS) /f Makefile.nmake libcapchild.lib
@@ -857,7 +843,7 @@ cli:: help config.h version.h doxygen
$(MAKE) /$(MAKEFLAGS) /f Makefile.nmake libcliui.lib
cd ../..
-epan:: $(RESOURCES) $(ZLIB_DLL) wiretap\wiretap-$(WTAP_VERSION).lib filetap\filetap-$(FTAP_VERSION).lib $(BUILT_SOURCES) doxygen
+epan:: $(RESOURCES) $(ZLIB_DLL) wiretap\wiretap-$(WTAP_VERSION).lib $(BUILT_SOURCES) doxygen
cd epan
$(MAKE) /$(MAKEFLAGS) -f Makefile.nmake
cd ..
@@ -1204,9 +1190,6 @@ install-generated-files: doc
xcopy ".\wiretap\wiretap-$(WTAP_VERSION).dll" $(INSTALL_DIR) /d
if exist ".\wiretap\wiretap-$(WTAP_VERSION).lib" xcopy ".\wiretap\wiretap-$(WTAP_VERSION).lib" $(INSTALL_DIR) /d
if exist ".\wiretap\wiretap-$(WTAP_VERSION).pdb" xcopy ".\wiretap\wiretap-$(WTAP_VERSION).pdb" $(INSTALL_DIR) /d
- xcopy ".\filetap\filetap-$(FTAP_VERSION).dll" $(INSTALL_DIR) /d
- if exist ".\filetap\filetap-$(FTAP_VERSION).lib" xcopy ".\filetap\filetap-$(FTAP_VERSION).lib" $(INSTALL_DIR) /d
- if exist ".\filetap\filetap-$(FTAP_VERSION).pdb" xcopy ".\filetap\filetap-$(FTAP_VERSION).pdb" $(INSTALL_DIR) /d
xcopy ".\wsutil\libwsutil.dll" $(INSTALL_DIR) /d
if exist ".\wsutil\libwsutil.lib" xcopy ".\wsutil\libwsutil.lib" $(INSTALL_DIR) /d
if exist ".\wsutil\libwsutil.pdb" xcopy ".\wsutil\libwsutil.pdb" $(INSTALL_DIR) /d
@@ -1458,8 +1441,6 @@ checkapi_local:
checkapi: checkapi_local
cd wiretap
$(MAKE) /$(MAKEFLAGS) -f Makefile.nmake checkapi
- cd ../filetap
- $(MAKE) /$(MAKEFLAGS) -f Makefile.nmake checkapi
cd ../capchild
$(MAKE) /$(MAKEFLAGS) -f Makefile.nmake checkapi
cd ../caputils
diff --git a/config.nmake b/config.nmake
index b59a92e40e..6752310604 100644
--- a/config.nmake
+++ b/config.nmake
@@ -49,11 +49,6 @@ WTAP_VERSION_MAJOR=$(VERSION_MAJOR)
WTAP_VERSION_MINOR=$(VERSION_MINOR)
WTAP_VERSION_MICRO=0
-# The version of the filetap library. Recommended: Leave unchanged.
-FTAP_VERSION_MAJOR=$(VERSION_MAJOR)
-FTAP_VERSION_MINOR=$(VERSION_MINOR)
-FTAP_VERSION_MICRO=0
-
##### Directories #####
#
diff --git a/configure.ac b/configure.ac
index d226cbc97d..0ac89fc338 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2895,7 +2895,6 @@ AC_OUTPUT(
epan/nghttp2/Makefile
epan/wmem/Makefile
epan/wslua/Makefile
- filetap/Makefile
codecs/Makefile
ui/Makefile
ui/doxygen.cfg
diff --git a/filetap/CMakeLists.txt b/filetap/CMakeLists.txt
deleted file mode 100644
index 98ffcad866..0000000000
--- a/filetap/CMakeLists.txt
+++ /dev/null
@@ -1,88 +0,0 @@
-# CMakeLists.txt
-#
-# Wireshark - Network traffic analyzer
-# By Gerald Combs <gerald@wireshark.org>
-# Copyright 1998 Gerald Combs
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-
-include(UseABICheck)
-
-set(CLEAN_FILES
- file_access.c
- ft_file_wrappers.c
- ftap.c
-)
-
-set(DIRTY_FILES
-)
-
-set(FILETAP_FILES
- ${CLEAN_FILES}
- ${DIRTY_FILES}
-)
-
-if (WERROR)
- set_source_files_properties(
- ${CLEAN_FILES}
- PROPERTIES
- COMPILE_FLAGS -Werror
- )
-endif()
-
-set(filetap_LIBS
- ${GLIB2_LIBRARIES}
- ${GMODULE2_LIBRARIES}
- ${ZLIB_LIBRARIES}
- wsutil
-)
-
-add_library(filetap ${LINK_MODE_LIB}
- ${FILETAP_FILES}
- ../image/filetap.rc
-)
-
-set(FULL_SO_VERSION "0.0.0")
-
-set_target_properties(filetap PROPERTIES
- COMPILE_DEFINITIONS "WS_BUILD_DLL"
- LINK_FLAGS "${WS_LINK_FLAGS}"
- VERSION ${FULL_SO_VERSION} SOVERSION 0
- FOLDER "DLLs"
-)
-IF(MSVC)
- set_target_properties(filetap PROPERTIES OUTPUT_NAME "filetap-${PROJECT_VERSION}")
-ENDIF()
-
-ABICHECK(libfiletap)
-
-add_custom_command(OUTPUT libfiletap.abi.tar.gz
- COMMAND cp ../config.h ${ABICHECK_TMPDIR}/
- COMMAND ${ABICHECK_COMMAND}
- COMMAND cp ${CMAKE_CURRENT_BINARY_DIR}/abi_dumps/libfiletap/libfiletap_* ${CMAKE_CURRENT_BINARY_DIR}/libfiletap.abi.tar.gz
- COMMAND rm -rf ${ABICHECK_TMPDIR}/* ${CMAKE_CURRENT_BINARY_DIR}/abi_dumps
- DEPENDS ${HEADERS} filetap)
-
-target_link_libraries(filetap ${filetap_LIBS})
-
-if(NOT ${ENABLE_STATIC})
- install(TARGETS filetap
- LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
- RUNTIME DESTINATION ${CMAKE_INSTALL_LIBDIR}
- ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
- )
-endif()
-
diff --git a/filetap/Makefile.am b/filetap/Makefile.am
deleted file mode 100644
index 6cc57d3564..0000000000
--- a/filetap/Makefile.am
+++ /dev/null
@@ -1,78 +0,0 @@
-# Makefile.am
-# Automake file for Filetap
-#
-# Wireshark - Network traffic analyzer
-# By Gerald Combs <gerald@wireshark.org>
-# Copyright 1998 Gerald Combs
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-include ../Makefile.am.inc
-
-ACLOCAL_AMFLAGS = `../aclocal-flags`
-
-include Makefile.common
-
-lib_LTLIBRARIES = libfiletap.la
-# http://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html
-libfiletap_la_LDFLAGS = -version-info 0:0:0 @LDFLAGS_SHAREDLIB@
-
-AM_NON_GENERATED_CFLAGS =-DWS_BUILD_DLL
-
-if HAVE_WARNINGS_AS_ERRORS
-AM_NON_GENERATED_CFLAGS += -Werror
-endif
-
-AM_CPPFLAGS = -I$(srcdir)/..
-
-CLEANFILES = \
- libfiletap.a \
- libfiletap.la \
- *~
-
-MAINTAINERCLEANFILES = \
- Makefile.in
-
-libfiletap_la_SOURCES = \
- $(NONGENERATED_C_FILES) \
- $(NONGENERATED_HEADER_FILES)
-libfiletap_la_CFLAGS = $(AM_NON_GENERATED_CFLAGS)
-
-EXTRA_DIST = \
- Makefile.common \
- Makefile.nmake
-
-libfiletap_la_LIBADD = ${top_builddir}/wsutil/libwsutil.la $(GLIB_LIBS)
-libfiletap_la_DEPENDENCIES = ${top_builddir}/wsutil/libwsutil.la
-
-# ABI compliance checker can be obtained from
-# http://ispras.linux-foundation.org/index.php/ABI_compliance_checker
-# Checked using version 1.21.12
-dumpabi-libfiletap: all abi-descriptor.xml
- rm -rf abi-check-headers abi_dumps .libs/*.abi.tar.gz
- mkdir abi-check-headers
- cp *.h ../ws_symbol_export.h abi-check-headers/
- abi-compliance-checker -l libfiletap -v1 `readlink .libs/libfiletap.so | sed 's/.*\.so\.//'` \
- -relpath $(abs_srcdir) -dump-abi abi-descriptor.xml || \
- cat logs/libfiletap/[0-9]*/log.txt
- cp -f abi_dumps/libfiletap/libfiletap_* .libs/
- cd .libs && ln -sf libfiletap_*.abi.tar.gz libfiletap.abi.tar.gz
-
-checkapi:
-## 'abort' checking disabled for now pending resolution of existing use of g_assert & g_error
-## $(PERL) $(top_srcdir)/tools/checkAPIs.pl -g abort -g termoutput \
- $(PERL) $(top_srcdir)/tools/checkAPIs.pl -g termoutput -build \
- -sourcedir=$(srcdir) \
- $(NONGENERATED_C_FILES)
diff --git a/filetap/Makefile.common b/filetap/Makefile.common
deleted file mode 100644
index 30e684a4cc..0000000000
--- a/filetap/Makefile.common
+++ /dev/null
@@ -1,38 +0,0 @@
-# Makefile.common
-# Contains the stuff from Makefile.am and Makefile.nmake that is
-# a) common to both files and
-# b) portable between both files
-#
-# Wireshark - Network traffic analyzer
-# By Gerald Combs <gerald@wireshark.org>
-# Copyright 1998 Gerald Combs
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-# C source files that are part of the Filetap source; this includes only
-# .c files, not YACC or Lex or... files (as Makefile.nmake maps this list
-# into a list of object files by replacing ".c" with ".obj") or files
-# generated from YACC or Lex files (as Automake doesn't want them in
-# _SOURCES variables).
-NONGENERATED_C_FILES = \
- file_access.c \
- ft_file_wrappers.c \
- ftap.c
-
-# Header files that are not generated from other files
-NONGENERATED_HEADER_FILES = \
- ft_file_wrappers.h \
- ftap.h \
- ftap-int.h
diff --git a/filetap/Makefile.nmake b/filetap/Makefile.nmake
deleted file mode 100644
index 825db5d26a..0000000000
--- a/filetap/Makefile.nmake
+++ /dev/null
@@ -1,57 +0,0 @@
-#
-
-include ..\config.nmake
-include <win32.mak>
-include ..\Makefile.nmake.inc
-
-include Makefile.common
-
-# We use GENERATED_CFLAGS to get around flex's non-LLP64-compliant output
-GENERATED_CFLAGS=\
- $(STANDARD_CFLAGS) \
- -DYYMALLOC=malloc -DYYFREE=free \
- /I. /I.. $(GLIB_CFLAGS) \
- $(ZLIB_CFLAGS) /I$(PCAP_DIR)/include \
- -DWS_BUILD_DLL
-
-CFLAGS=$(WARNINGS_ARE_ERRORS) $(GENERATED_CFLAGS)
-
-.c.obj::
- $(CC) $(CFLAGS) -Fd.\ -c $<
-
-OBJECTS=$(NONGENERATED_C_FILES:.c=.obj)
-
-filetap_LIBS = \
- $(GLIB_LIBS) \
- ..\wsutil\libwsutil.lib \
- $(ZLIB_LIBS)
-
-all: filetap-$(FTAP_VERSION).dll
-
-filetap-$(FTAP_VERSION).lib: filetap-$(FTAP_VERSION).dll
-filetap-$(FTAP_VERSION).exp: filetap-$(FTAP_VERSION).dll
-
-filetap-$(FTAP_VERSION).dll : $(OBJECTS) ..\image\filetap.res
- $(link) $(dlllflags) $(conlibsdll) \
- $(LOCAL_LDFLAGS) $(DLL_LDFLAGS) \
- /OUT:filetap-$(FTAP_VERSION).dll \
- /IMPLIB:filetap-$(FTAP_VERSION).lib \
- ..\image\filetap.res \
- $(OBJECTS) $(filetap_LIBS)
-
-clean :
- rm -f $(OBJECTS) \
- filetap-*.lib \
- filetap-*.exp \
- filetap-*.dll \
- filetap-*.dll.manifest \
- *.pdb *.sbr
-
-distclean: clean
-
-maintainer-clean: distclean
-
-checkapi:
-## 'abort' checking disabled for now pending resolution of existing use of g_assert & g_error
-## $(PERL) ../tools/checkAPIs.pl -g abort -g termoutput $(NONGENERATED_C_FILES)
- $(PERL) ../tools/checkAPIs.pl -g termoutput -build $(NONGENERATED_C_FILES)
diff --git a/filetap/file_access.c b/filetap/file_access.c
deleted file mode 100644
index 01de115943..0000000000
--- a/filetap/file_access.c
+++ /dev/null
@@ -1,1001 +0,0 @@
-/* file_access.c
- *
- * Wiretap Library
- * Copyright (c) 1998 by Gilbert Ramirez <gram@alumni.rice.edu>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-#include "config.h"
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-
-#ifdef HAVE_FCNTL_H
-#include <fcntl.h>
-#endif
-
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <errno.h>
-
-#include <wsutil/file_util.h>
-
-#include "ftap-int.h"
-#include "ft_file_wrappers.h"
-#include <wsutil/buffer.h>
-
-/*
- * Add an extension, and all compressed versions thereof, to a GSList
- * of extensions.
- */
-static GSList *add_extensions(GSList *extensions, const gchar *extension,
- GSList *compressed_file_extensions)
-{
- GSList *compressed_file_extension;
-
- /*
- * Add the specified extension.
- */
- extensions = g_slist_append(extensions, g_strdup(extension));
-
- /*
- * Now add the extensions for compressed-file versions of
- * that extension.
- */
- for (compressed_file_extension = compressed_file_extensions;
- compressed_file_extension != NULL;
- compressed_file_extension = g_slist_next(compressed_file_extension)) {
- extensions = g_slist_append(extensions,
- g_strdup_printf("%s.%s", extension,
- (gchar *)compressed_file_extension->data));
- }
-
- return extensions;
-}
-
-/*
- * File types that can be identified by file extensions.
- */
-static const struct filetap_extension_info file_type_extensions_base[] = {
- { "Wireshark/tcpdump/... - pcap", "pcap;cap;dmp" },
-};
-
-#define N_FILE_TYPE_EXTENSIONS (sizeof file_type_extensions_base / sizeof file_type_extensions_base[0])
-
-static const struct filetap_extension_info* file_type_extensions = NULL;
-
-static GArray* file_type_extensions_arr = NULL;
-
-/* initialize the extensions array if it has not been initialized yet */
-static void init_file_type_extensions(void) {
-
- if (file_type_extensions_arr) return;
-
- file_type_extensions_arr = g_array_new(FALSE,TRUE,sizeof(struct filetap_extension_info));
-
- g_array_append_vals(file_type_extensions_arr,file_type_extensions_base,N_FILE_TYPE_EXTENSIONS);
-
- file_type_extensions = (struct filetap_extension_info*)(void *)file_type_extensions_arr->data;
-}
-
-void ftap_register_file_type_extension(const struct filetap_extension_info *ei) {
- init_file_type_extensions();
-
- g_array_append_val(file_type_extensions_arr,*ei);
-
- file_type_extensions = (const struct filetap_extension_info*)(void *)file_type_extensions_arr->data;
-}
-
-int ftap_get_num_file_type_extensions(void)
-{
- return file_type_extensions_arr->len;
-}
-
-const char *ftap_get_file_extension_type_name(int extension_type)
-{
- return file_type_extensions[extension_type].name;
-}
-
-static GSList *add_extensions_for_file_extensions_type(int extension_type,
- GSList *extensions, GSList *compressed_file_extensions)
-{
- gchar **extensions_set, **extensionp, *extension;
-
- /*
- * Split the extension-list string into a set of extensions.
- */
- extensions_set = g_strsplit(file_type_extensions[extension_type].extensions,
- ";", 0);
-
- /*
- * Add each of those extensions to the list.
- */
- for (extensionp = extensions_set; *extensionp != NULL; extensionp++) {
- extension = *extensionp;
-
- /*
- * Add the extension, and all compressed variants
- * of it.
- */
- extensions = add_extensions(extensions, extension,
- compressed_file_extensions);
- }
-
- g_strfreev(extensions_set);
- return extensions;
-}
-
-/* Return a list of file extensions that are used by the specified file
- extension type.
-
- All strings in the list are allocated with g_malloc() and must be freed
- with g_free(). */
-GSList *ftap_get_file_extension_type_extensions(guint extension_type)
-{
- GSList *compressed_file_extensions;
- GSList *extensions;
-
- if (extension_type >= file_type_extensions_arr->len)
- return NULL; /* not a valid extension type */
-
- extensions = NULL; /* empty list, to start with */
-
- /*
- * Get the list of compressed-file extensions.
- */
- compressed_file_extensions = ftap_get_compressed_file_extensions();
-
- /*
- * Add all this file extension type's extensions, with compressed
- * variants.
- */
- extensions = add_extensions_for_file_extensions_type(extension_type,
- extensions, compressed_file_extensions);
-
- g_slist_free(compressed_file_extensions);
- return extensions;
-}
-
-/* Return a list of all extensions that are used by all file types,
- including compressed extensions, e.g. not just "pcap" but also
- "pcap.gz" if we can read gzipped files.
-
- All strings in the list are allocated with g_malloc() and must be freed
- with g_free(). */
-GSList *ftap_get_all_file_extensions_list(void)
-{
- GSList *compressed_file_extensions;
- GSList *extensions;
- unsigned int i;
-
- init_file_type_extensions();
-
- extensions = NULL; /* empty list, to start with */
-
- /*
- * Get the list of compressed-file extensions.
- */
- compressed_file_extensions = ftap_get_compressed_file_extensions();
-
- for (i = 0; i < file_type_extensions_arr->len; i++) {
- /*
- * Add all this file extension type's extensions, with
- * compressed variants.
- */
- extensions = add_extensions_for_file_extensions_type(i,
- extensions, compressed_file_extensions);
- }
-
- g_slist_free(compressed_file_extensions);
- return extensions;
-}
-
-static int empty_open(ftap *wth _U_, int *err _U_, gchar **err_info _U_)
-{
- return 0;
-}
-
-/* The open_file_* routines should return:
- *
- * -1 on an I/O error;
- *
- * 1 if the file they're reading is one of the types it handles;
- *
- * 0 if the file they're reading isn't the type they're checking for.
- *
- * If the routine handles this type of file, it should set the "file_type"
- * field in the "struct ftap" to the type of the file.
- *
- * Note that the routine does not have to free the private data pointer on
- * error. The caller takes care of that by calling ftap_close on error.
- * (See https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=8518)
- *
- * However, the caller does have to free the private data pointer when
- * returning 0, since the next file type will be called and will likely
- * just overwrite the pointer.
- */
-
-/* Files that have magic bytes in fixed locations. These
- * are easy to identify. Only an open routine is needed.
- */
-static const ftap_open_routine_t magic_number_open_routines_base[] = {
- empty_open/* libpcap_open, */
-};
-#define N_MAGIC_FILE_TYPES (sizeof magic_number_open_routines_base / sizeof magic_number_open_routines_base[0])
-
-static ftap_open_routine_t* magic_number_open_routines = NULL;
-
-static GArray* magic_number_open_routines_arr = NULL;
-
-/*
- * Initialize the magic-number open routines array if it has not been
- * initialized yet.
- */
-static void init_magic_number_open_routines(void) {
-
- if (magic_number_open_routines_arr) return;
-
- magic_number_open_routines_arr = g_array_new(FALSE,TRUE,sizeof(ftap_open_routine_t));
-
- g_array_append_vals(magic_number_open_routines_arr,magic_number_open_routines_base,N_MAGIC_FILE_TYPES);
-
- magic_number_open_routines = (ftap_open_routine_t*)(void *)magic_number_open_routines_arr->data;
-}
-
-void ftap_register_magic_number_open_routine(ftap_open_routine_t open_routine) {
- init_magic_number_open_routines();
-
- g_array_append_val(magic_number_open_routines_arr,open_routine);
-
- magic_number_open_routines = (ftap_open_routine_t*)(void *)magic_number_open_routines_arr->data;
-}
-
-/* Files that don't have magic bytes at a fixed location,
- * but that instead require a heuristic of some sort to
- * identify them. This includes ASCII trace files.
- *
- * Entries for the ASCII trace files that would be, for example,
- * saved copies of a Telnet session to some box are put after
- * most of the other entries, as we don't want to treat a capture
- * of such a session as a trace file from such a session
- * merely because it has the right text in it. They still
- * appear before the *really* weak entries, such as the VWR entry.
- */
-static const struct ftap_heuristic_open_info heuristic_open_info_base[] = {
- { NULL, "(empty)", NULL},
-};
-#define N_HEURISTIC_FILE_TYPES (sizeof heuristic_open_info_base / sizeof heuristic_open_info_base[0])
-
-static struct ftap_heuristic_open_info* heuristic_open_info = NULL;
-
-static GArray* heuristic_open_info_arr = NULL;
-
-/*
- * Initialize the heuristics array if it has not been initialized yet.
- */
-static void init_heuristic_open_info(void) {
- unsigned int i;
- struct ftap_heuristic_open_info *i_open;
-
- if (heuristic_open_info_arr)
- return;
-
- heuristic_open_info_arr = g_array_new(FALSE,TRUE,sizeof(struct ftap_heuristic_open_info));
-
- g_array_append_vals(heuristic_open_info_arr,heuristic_open_info_base,N_HEURISTIC_FILE_TYPES);
-
- heuristic_open_info = (struct ftap_heuristic_open_info*)(void *)heuristic_open_info_arr->data;
-
- /* Populate the extensions_set list now */
- for (i = 0, i_open = heuristic_open_info; i < heuristic_open_info_arr->len; i++, i_open++) {
- if (i_open->extensions != NULL)
- i_open->extensions_set = g_strsplit(i_open->extensions, ";", 0);
- }
-}
-
-void ftap_register_heuristic_open_info(struct ftap_heuristic_open_info *hi) {
- init_heuristic_open_info();
-
- g_array_append_val(heuristic_open_info_arr,*hi);
-
- if (hi->extensions != NULL)
- hi->extensions_set = g_strsplit(hi->extensions, ";", 0);
-
- heuristic_open_info = (struct ftap_heuristic_open_info*)(void *)heuristic_open_info_arr->data;
-}
-
-/*
- * Visual C++ on Win32 systems doesn't define these. (Old UNIX systems don't
- * define them either.)
- *
- * Visual C++ on Win32 systems doesn't define S_IFIFO, it defines _S_IFIFO.
- */
-#ifndef S_ISREG
-#define S_ISREG(mode) (((mode) & S_IFMT) == S_IFREG)
-#endif
-#ifndef S_IFIFO
-#define S_IFIFO _S_IFIFO
-#endif
-#ifndef S_ISFIFO
-#define S_ISFIFO(mode) (((mode) & S_IFMT) == S_IFIFO)
-#endif
-#ifndef S_ISDIR
-#define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR)
-#endif
-
-static char *get_file_extension(const char *pathname)
-{
- gchar *filename;
- gchar **components;
- size_t ncomponents;
- GSList *compressed_file_extensions, *compressed_file_extension;
- gchar *extensionp;
-
- /*
- * Is the pathname empty?
- */
- if (strcmp(pathname, "") == 0)
- return NULL; /* no extension */
-
- /*
- * Find the last component of the pathname.
- */
- filename = g_path_get_basename(pathname);
-
- /*
- * Does it have an extension?
- */
- if (strchr(filename, '.') == NULL) {
- g_free(filename);
- return NULL; /* no extension whatsoever */
- }
-
- /*
- * Yes. Split it into components separated by ".".
- */
- components = g_strsplit(filename, ".", 0);
- g_free(filename);
-
- /*
- * Count the components.
- */
- for (ncomponents = 0; components[ncomponents] != NULL; ncomponents++)
- ;
-
- if (ncomponents == 0) {
- g_strfreev(components);
- return NULL; /* no components */
- }
- if (ncomponents == 1) {
- g_strfreev(components);
- return NULL; /* only one component, with no "." */
- }
-
- /*
- * Is the last component one of the extensions used for compressed
- * files?
- */
- compressed_file_extensions = ftap_get_compressed_file_extensions();
- if (compressed_file_extensions == NULL) {
- /*
- * We don't support reading compressed files, so just
- * return a copy of whatever extension we did find.
- */
- extensionp = g_strdup(components[ncomponents - 1]);
- g_strfreev(components);
- return extensionp;
- }
- extensionp = components[ncomponents - 1];
- for (compressed_file_extension = compressed_file_extensions;
- compressed_file_extension != NULL;
- compressed_file_extension = g_slist_next(compressed_file_extension)) {
- if (strcmp(extensionp, (char *)compressed_file_extension->data) == 0) {
- /*
- * Yes, it's one of the compressed-file extensions.
- * Is there an extension before that?
- */
- if (ncomponents == 2) {
- g_strfreev(components);
- return NULL; /* no, only two components */
- }
-
- /*
- * Yes, return that extension.
- */
- extensionp = g_strdup(components[ncomponents - 2]);
- g_strfreev(components);
- return extensionp;
- }
- }
-
- /*
- * The extension isn't one of the compressed-file extensions;
- * return it.
- */
- extensionp = g_strdup(extensionp);
- g_strfreev(components);
- return extensionp;
-}
-
-static gboolean heuristic_uses_extension(unsigned int i, const char *extension)
-{
- gchar **extensionp;
-
- /*
- * Does this file type *have* any extensions?
- */
- if (heuristic_open_info[i].extensions == NULL)
- return FALSE; /* no */
-
- /*
- * Check each of them against the specified extension.
- */
- for (extensionp = heuristic_open_info[i].extensions_set; *extensionp != NULL;
- extensionp++) {
- if (strcmp(extension, *extensionp) == 0) {
- return TRUE; /* it's one of them */
- }
- }
- return FALSE; /* it's not one of them */
-}
-
-/* Opens a file and prepares a ftap struct.
- If "do_random" is TRUE, it opens the file twice; the second open
- allows the application to do random-access I/O without moving
- the seek offset for sequential I/O, which is used by Wireshark
- so that it can do sequential I/O to a capture file that's being
- written to as new packets arrive independently of random I/O done
- to display protocol trees for packets when they're selected. */
-ftap* ftap_open_offline(const char *filename, int *err, char **err_info,
- gboolean do_random)
-{
- int fd;
- ws_statb64 statb;
- ftap *fth;
- unsigned int i;
- gboolean use_stdin = FALSE;
- gchar *extension;
-
- /* open standard input if filename is '-' */
- if (strcmp(filename, "-") == 0)
- use_stdin = TRUE;
-
- /* First, make sure the file is valid */
- if (use_stdin) {
- if (ws_fstat64(0, &statb) < 0) {
- *err = errno;
- return NULL;
- }
- } else {
- if (ws_stat64(filename, &statb) < 0) {
- *err = errno;
- return NULL;
- }
- }
- if (S_ISFIFO(statb.st_mode)) {
- /*
- * Opens of FIFOs are allowed only when not opening
- * for random access.
- *
- * XXX - currently, we do seeking when trying to find
- * out the file type, so we don't actually support
- * opening FIFOs. However, we may eventually
- * do buffering that allows us to do at least some
- * file type determination even on pipes, so we
- * allow FIFO opens and let things fail later when
- * we try to seek.
- */
- if (do_random) {
- *err = FTAP_ERR_RANDOM_OPEN_PIPE;
- return NULL;
- }
- } else if (S_ISDIR(statb.st_mode)) {
- /*
- * Return different errors for "this is a directory"
- * and "this is some random special file type", so
- * the user can get a potentially more helpful error.
- */
- *err = EISDIR;
- return NULL;
- } else if (! S_ISREG(statb.st_mode)) {
- *err = FTAP_ERR_NOT_REGULAR_FILE;
- return NULL;
- }
-
- /*
- * We need two independent descriptors for random access, so
- * they have different file positions. If we're opening the
- * standard input, we can only dup it to get additional
- * descriptors, so we can't have two independent descriptors,
- * and thus can't do random access.
- */
- if (use_stdin && do_random) {
- *err = FTAP_ERR_RANDOM_OPEN_STDIN;
- return NULL;
- }
-
- errno = ENOMEM;
- fth = (ftap *)g_malloc0(sizeof(ftap));
-
- /* Open the file */
- errno = FTAP_ERR_CANT_OPEN;
- if (use_stdin) {
- /*
- * We dup FD 0, so that we don't have to worry about
- * a file_close of wth->fh closing the standard
- * input of the process.
- */
- fd = ws_dup(0);
- if (fd < 0) {
- *err = errno;
- g_free(fth);
- return NULL;
- }
-#ifdef _WIN32
- if (_setmode(fd, O_BINARY) == -1) {
- /* "Shouldn't happen" */
- *err = errno;
- g_free(fth);
- return NULL;
- }
-#endif
- if (!(fth->fh = file_fdopen(fd))) {
- *err = errno;
- ws_close(fd);
- g_free(fth);
- return NULL;
- }
- } else {
- if (!(fth->fh = file_open(filename))) {
- *err = errno;
- g_free(fth);
- return NULL;
- }
- }
-
- if (do_random) {
- if (!(fth->random_fh = file_open(filename))) {
- *err = errno;
- file_close(fth->fh);
- g_free(fth);
- return NULL;
- }
- } else
- fth->random_fh = NULL;
-
- /* initialization */
- fth->file_encap = FTAP_ENCAP_UNKNOWN;
- fth->subtype_sequential_close = NULL;
- fth->subtype_close = NULL;
- fth->priv = NULL;
-
- init_magic_number_open_routines();
- init_heuristic_open_info();
- if (fth->random_fh) {
- fth->fast_seek = g_ptr_array_new();
-
- file_set_random_access(fth->fh, FALSE, fth->fast_seek);
- file_set_random_access(fth->random_fh, TRUE, fth->fast_seek);
- }
-
- /* Try all file types that support magic numbers */
- for (i = 0; i < magic_number_open_routines_arr->len; i++) {
- /* Seek back to the beginning of the file; the open routine
- for the previous file type may have left the file
- position somewhere other than the beginning, and the
- open routine for this file type will probably want
- to start reading at the beginning.
-
- Initialize the data offset while we're at it. */
- if (file_seek(fth->fh, 0, SEEK_SET, err) == -1) {
- /* I/O error - give up */
- ftap_close(fth);
- return NULL;
- }
-
- switch ((*magic_number_open_routines[i])(fth, err, err_info)) {
-
- case -1:
- /* I/O error - give up */
- ftap_close(fth);
- return NULL;
-
- case 0:
- /* No I/O error, but not that type of file */
- break;
-
- case 1:
- /* We found the file type */
- goto success;
- }
- }
-
- /* Does this file's name have an extension? */
- extension = get_file_extension(filename);
- if (extension != NULL) {
- /* Yes - try the heuristic types that use that extension first. */
- for (i = 0; i < heuristic_open_info_arr->len; i++) {
- /* Does this type use that extension? */
- if (heuristic_uses_extension(i, extension)) {
- /* Yes. */
- if (file_seek(fth->fh, 0, SEEK_SET, err) == -1) {
- /* I/O error - give up */
- g_free(extension);
- ftap_close(fth);
- return NULL;
- }
-
- switch ((*heuristic_open_info[i].open_routine)(fth,
- err, err_info)) {
-
- case -1:
- /* I/O error - give up */
- g_free(extension);
- ftap_close(fth);
- return NULL;
-
- case 0:
- /* No I/O error, but not that type of file */
- break;
-
- case 1:
- /* We found the file type */
- g_free(extension);
- goto success;
- }
- }
- }
-
- /* Now try the ones that don't use it. */
- for (i = 0; i < heuristic_open_info_arr->len; i++) {
- /* Does this type use that extension? */
- if (!heuristic_uses_extension(i, extension)) {
- /* No. */
- if (file_seek(fth->fh, 0, SEEK_SET, err) == -1) {
- /* I/O error - give up */
- g_free(extension);
- ftap_close(fth);
- return NULL;
- }
-
- switch ((*heuristic_open_info[i].open_routine)(fth,
- err, err_info)) {
-
- case -1:
- /* I/O error - give up */
- g_free(extension);
- ftap_close(fth);
- return NULL;
-
- case 0:
- /* No I/O error, but not that type of file */
- break;
-
- case 1:
- /* We found the file type */
- g_free(extension);
- goto success;
- }
- }
- }
- g_free(extension);
- } else {
- /* No - try all the heuristics types in order. */
- for (i = 0; i < heuristic_open_info_arr->len; i++) {
- if (file_seek(fth->fh, 0, SEEK_SET, err) == -1) {
- /* I/O error - give up */
- ftap_close(fth);
- return NULL;
- }
-
- switch ((*heuristic_open_info[i].open_routine)(fth,
- err, err_info)) {
-
- case -1:
- /* I/O error - give up */
- ftap_close(fth);
- return NULL;
-
- case 0:
- /* No I/O error, but not that type of file */
- break;
-
- case 1:
- /* We found the file type */
- goto success;
- }
- }
- }
-
- /* Well, it's not one of the types of file we know about. */
- ftap_close(fth);
- *err = FTAP_ERR_FILE_UNKNOWN_FORMAT;
- return NULL;
-
-success:
- fth->frame_buffer = (struct Buffer *)g_malloc(sizeof(struct Buffer));
- ws_buffer_init(fth->frame_buffer, 1500);
-
- return fth;
-}
-
-/*
- * Given the pathname of the file we just closed with ftap_fdclose(), attempt
- * to reopen that file and assign the new file descriptor(s) to the sequential
- * stream and, if do_random is TRUE, to the random stream. Used on Windows
- * after the rename of a file we had open was done or if the rename of a
- * file on top of a file we had open failed.
- *
- * This is only required by Wireshark, not TShark, and, at the point that
- * Wireshark is doing this, the sequential stream is closed, and the
- * random stream is open, so this refuses to open pipes, and only
- * reopens the random stream.
- */
-gboolean
-ftap_fdreopen(ftap *fth, const char *filename, int *err)
-{
- ws_statb64 statb;
-
- /*
- * We need two independent descriptors for random access, so
- * they have different file positions. If we're opening the
- * standard input, we can only dup it to get additional
- * descriptors, so we can't have two independent descriptors,
- * and thus can't do random access.
- */
- if (strcmp(filename, "-") == 0) {
- *err = FTAP_ERR_RANDOM_OPEN_STDIN;
- return FALSE;
- }
-
- /* First, make sure the file is valid */
- if (ws_stat64(filename, &statb) < 0) {
- *err = errno;
- return FALSE;
- }
- if (S_ISFIFO(statb.st_mode)) {
- /*
- * Opens of FIFOs are not allowed; see above.
- */
- *err = FTAP_ERR_RANDOM_OPEN_PIPE;
- return FALSE;
- } else if (S_ISDIR(statb.st_mode)) {
- /*
- * Return different errors for "this is a directory"
- * and "this is some random special file type", so
- * the user can get a potentially more helpful error.
- */
- *err = EISDIR;
- return FALSE;
- } else if (! S_ISREG(statb.st_mode)) {
- *err = FTAP_ERR_NOT_REGULAR_FILE;
- return FALSE;
- }
-
- /* Open the file */
- errno = FTAP_ERR_CANT_OPEN;
- if (!file_fdreopen(fth->random_fh, filename)) {
- *err = errno;
- return FALSE;
- }
- return TRUE;
-}
-
-/* Table of the file types we know about.
- Entries must be sorted by FTAP_FILE_TYPE_SUBTYPE_xxx values in ascending order */
-static const struct ftap_file_type_subtype_info dump_open_table_base[] = {
- /* FTAP_FILE_TYPE_SUBTYPE_UNKNOWN (only used internally for initialization) */
- { NULL, NULL, NULL, NULL },
-};
-
-gint ftap_num_file_types_subtypes = sizeof(dump_open_table_base) / sizeof(struct ftap_file_type_subtype_info);
-
-static GArray* dump_open_table_arr = NULL;
-static const struct ftap_file_type_subtype_info* dump_open_table = dump_open_table_base;
-
-/* initialize the file types array if it has not being initialized yet */
-static void init_file_types_subtypes(void) {
-
- if (dump_open_table_arr) return;
-
- dump_open_table_arr = g_array_new(FALSE,TRUE,sizeof(struct ftap_file_type_subtype_info));
-
- g_array_append_vals(dump_open_table_arr,dump_open_table_base,ftap_num_file_types_subtypes);
-
- dump_open_table = (const struct ftap_file_type_subtype_info*)(void *)dump_open_table_arr->data;
-}
-
-int ftap_register_file_type_subtypes(const struct ftap_file_type_subtype_info* fi) {
- init_file_types_subtypes();
-
- g_array_append_val(dump_open_table_arr,*fi);
-
- dump_open_table = (const struct ftap_file_type_subtype_info*)(void *)dump_open_table_arr->data;
-
- return ftap_num_file_types_subtypes++;
-}
-
-int ftap_get_num_file_types_subtypes(void)
-{
- return ftap_num_file_types_subtypes;
-}
-
-/*
- * Given a GArray of FTAP_ENCAP_ types, return the per-file encapsulation
- * type that would be needed to write out a file with those types. If
- * there's only one type, it's that type, otherwise it's
- * FTAP_ENCAP_PER_RECORD.
- */
-int
-ftap_dump_file_encap_type(const GArray *file_encaps)
-{
- int encap;
-
- encap = FTAP_ENCAP_PER_RECORD;
- if (file_encaps->len == 1) {
- /* OK, use the one-and-only encapsulation type. */
- encap = g_array_index(file_encaps, gint, 0);
- }
- return encap;
-}
-
-/* Name that should be somewhat descriptive. */
-const char *ftap_file_type_subtype_string(int file_type_subtype)
-{
- if (file_type_subtype < 0 || file_type_subtype >= ftap_num_file_types_subtypes) {
- g_error("Unknown capture file type %d", file_type_subtype);
- /** g_error() does an abort() and thus never returns **/
- return "";
- } else
- return dump_open_table[file_type_subtype].name;
-}
-
-/* Name to use in, say, a command-line flag specifying the type/subtype. */
-const char *ftap_file_type_subtype_short_string(int file_type_subtype)
-{
- if (file_type_subtype < 0 || file_type_subtype >= ftap_num_file_types_subtypes)
- return NULL;
- else
- return dump_open_table[file_type_subtype].short_name;
-}
-
-/* Translate a short name to a capture file type/subtype. */
-int ftap_short_string_to_file_type_subtype(const char *short_name)
-{
- int file_type_subtype;
-
- for (file_type_subtype = 0; file_type_subtype < ftap_num_file_types_subtypes; file_type_subtype++) {
- if (dump_open_table[file_type_subtype].short_name != NULL &&
- strcmp(short_name, dump_open_table[file_type_subtype].short_name) == 0)
- return file_type_subtype;
- }
-
- return -1; /* no such file type, or we can't write it */
-}
-
-static GSList *
-add_extensions_for_file_type_subtype(int file_type_subtype, GSList *extensions,
- GSList *compressed_file_extensions)
-{
- gchar **extensions_set, **extensionp;
- gchar *extension;
-
- /*
- * Add the default extension, and all compressed variants of
- * it.
- */
- extensions = add_extensions(extensions,
- dump_open_table[file_type_subtype].default_file_extension,
- compressed_file_extensions);
-
- if (dump_open_table[file_type_subtype].additional_file_extensions != NULL) {
- /*
- * We have additional extensions; add them.
- *
- * First, split the extension-list string into a set of
- * extensions.
- */
- extensions_set = g_strsplit(dump_open_table[file_type_subtype].additional_file_extensions,
- ";", 0);
-
- /*
- * Add each of those extensions to the list.
- */
- for (extensionp = extensions_set; *extensionp != NULL;
- extensionp++) {
- extension = *extensionp;
-
- /*
- * Add the extension, and all compressed variants
- * of it.
- */
- extensions = add_extensions(extensions, extension,
- compressed_file_extensions);
- }
-
- g_strfreev(extensions_set);
- }
- return extensions;
-}
-
-/* Return a list of file extensions that are used by the specified file type.
-
- If include_compressed is TRUE, the list will include compressed
- extensions, e.g. not just "pcap" but also "pcap.gz" if we can read
- gzipped files.
-
- All strings in the list are allocated with g_malloc() and must be freed
- with g_free(). */
-GSList *ftap_get_file_extensions_list(int file_type_subtype, gboolean include_compressed)
-{
- GSList *compressed_file_extensions;
- GSList *extensions;
-
- if (file_type_subtype < 0 || file_type_subtype >= ftap_num_file_types_subtypes)
- return NULL; /* not a valid file type */
-
- if (dump_open_table[file_type_subtype].default_file_extension == NULL)
- return NULL; /* valid, but no extensions known */
-
- extensions = NULL; /* empty list, to start with */
-
- /*
- * If include_compressions is true, get the list of compressed-file
- * extensions.
- */
- if (include_compressed)
- compressed_file_extensions = ftap_get_compressed_file_extensions();
- else
- compressed_file_extensions = NULL;
-
- /*
- * Add all this file type's extensions, with compressed
- * variants.
- */
- extensions = add_extensions_for_file_type_subtype(file_type_subtype, extensions,
- compressed_file_extensions);
-
- g_slist_free(compressed_file_extensions);
- return extensions;
-}
-
-/*
- * Free a list returned by ftap_get_file_extension_type_extensions(),
- * ftap_get_all_file_extensions_list, or ftap_get_file_extensions_list().
- */
-void ftap_free_extensions_list(GSList *extensions)
-{
- GSList *extension;
-
- for (extension = extensions; extension != NULL;
- extension = g_slist_next(extension)) {
- g_free(extension->data);
- }
- g_slist_free(extensions);
-}
-
-/* Return the default file extension to use with the specified file type;
- that's just the extension, without any ".". */
-const char *ftap_default_file_extension(int file_type_subtype)
-{
- if (file_type_subtype < 0 || file_type_subtype >= ftap_num_file_types_subtypes)
- return NULL;
- else
- return dump_open_table[file_type_subtype].default_file_extension;
-}
diff --git a/filetap/ft_file_wrappers.c b/filetap/ft_file_wrappers.c
deleted file mode 100644
index 1b9c62f545..0000000000
--- a/filetap/ft_file_wrappers.c
+++ /dev/null
@@ -1,1647 +0,0 @@
-/* ft_file_wrappers.c
- *
- * Wiretap Library
- * Copyright (c) 1998 by Gilbert Ramirez <gram@alumni.rice.edu>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-/* file_access interface based heavily on zlib gzread.c and gzlib.c from zlib
- * Copyright (C) 1995-2010 Jean-loup Gailly and Mark Adler
- * under licence:
- *
- * This software is provided 'as-is', without any express or implied
- * warranty. In no event will the authors be held liable for any damages
- * arising from the use of this software.
- *
- * Permission is granted to anyone to use this software for any purpose,
- * including commercial applications, and to alter it and redistribute it
- * freely, subject to the following restrictions:
- *
- * 1. The origin of this software must not be misrepresented; you must not
- * claim that you wrote the original software. If you use this software
- * in a product, an acknowledgment in the product documentation would be
- * appreciated but is not required.
- * 2. Altered source versions must be plainly marked as such, and must not be
- * misrepresented as being the original software.
- * 3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "config.h"
-
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif /* HAVE_UNISTD_H */
-
-#include <errno.h>
-#include <stdio.h>
-#ifdef HAVE_FCNTL_H
-#include <fcntl.h>
-#endif /* HAVE_FCNTL_H */
-#include <string.h>
-#include "ftap-int.h"
-#include "ft_file_wrappers.h"
-#include <wsutil/file_util.h>
-
-#ifdef HAVE_LIBZ
-#include <zlib.h>
-#endif /* HAVE_LIBZ */
-
-/*
- * See RFC 1952 for a description of the gzip file format.
- *
- * Some other compressed file formats we might want to support:
- *
- * XZ format: http://tukaani.org/xz/
- *
- * Bzip2 format: http://bzip.org/
- */
-
-/*
- * List of extensions for compressed files.
- * If we add support for more compressed file types, this table
- * might be expanded to include routines to handle the various
- * compression types.
- */
-static const char *compressed_file_extensions[] = {
-#ifdef HAVE_LIBZ
- "gz",
-#endif
- NULL
-};
-
-/*
- * Return a GSList of all the compressed file extensions.
- * The data pointers all point to items in compressed_file_extensions[],
- * so the GSList can just be freed with g_slist_free().
- */
-GSList *
-ftap_get_compressed_file_extensions(void)
-{
- const char **extension;
- GSList *extensions;
-
- extensions = NULL;
- for (extension = &compressed_file_extensions[0]; *extension != NULL;
- extension++)
- extensions = g_slist_append(extensions, (gpointer)(*extension));
- return extensions;
-}
-
-/* #define GZBUFSIZE 8192 */
-#define GZBUFSIZE 4096
-
-/* values for ftap_reader compression */
-typedef enum {
- UNKNOWN, /* unknown - look for a gzip header */
- UNCOMPRESSED, /* uncompressed - copy input directly */
-#ifdef HAVE_LIBZ
- ZLIB, /* decompress a zlib stream */
- GZIP_AFTER_HEADER
-#endif
-} compression_t;
-
-struct ftap_reader {
- int fd; /* file descriptor */
- gint64 raw_pos; /* current position in file (just to not call lseek()) */
- gint64 pos; /* current position in uncompressed data */
- guint size; /* buffer size */
- unsigned char *in; /* input buffer */
- unsigned char *out; /* output buffer (double-sized when reading) */
- unsigned char *next; /* next output data to deliver or write */
-
- guint have; /* amount of output data unused at next */
- gboolean eof; /* TRUE if end of input file reached */
- gint64 start; /* where the gzip data started, for rewinding */
- gint64 raw; /* where the raw data started, for seeking */
- compression_t compression; /* type of compression, if any */
- gboolean is_compressed; /* FALSE if completely uncompressed, TRUE otherwise */
- /* seek request */
- gint64 skip; /* amount to skip (already rewound if backwards) */
- gboolean seek_pending; /* TRUE if seek request pending */
- /* error information */
- int err; /* error code */
- const char *err_info; /* additional error information string for some errors */
-
- guint avail_in; /* number of bytes available at next_in */
- unsigned char *next_in; /* next input byte */
-#ifdef HAVE_LIBZ
- /* zlib inflate stream */
- z_stream strm; /* stream structure in-place (not a pointer) */
- gboolean dont_check_crc; /* TRUE if we aren't supposed to check the CRC */
-#endif
- /* fast seeking */
- GPtrArray *fast_seek;
- void *fast_seek_cur;
-};
-
-static int /* gz_load */
-raw_read(FILE_F state, unsigned char *buf, unsigned int count, guint *have)
-{
- ssize_t ret;
-
- *have = 0;
- do {
- ret = read(state->fd, buf + *have, count - *have);
- if (ret <= 0)
- break;
- *have += (unsigned)ret;
- state->raw_pos += ret;
- } while (*have < count);
- if (ret < 0) {
- state->err = errno;
- state->err_info = NULL;
- return -1;
- }
- if (ret == 0)
- state->eof = TRUE;
- return 0;
-}
-
-static int /* gz_avail */
-fill_in_buffer(FILE_F state)
-{
- if (state->err)
- return -1;
- if (state->eof == 0) {
- if (raw_read(state, state->in, state->size, &(state->avail_in)) == -1)
- return -1;
- state->next_in = state->in;
- }
- return 0;
-}
-
-#define ZLIB_WINSIZE 32768
-
-struct fast_seek_point {
- gint64 out; /* corresponding offset in uncompressed data */
- gint64 in; /* offset in input file of first full byte */
-
- compression_t compression;
- union {
- struct {
-#ifdef HAVE_INFLATEPRIME
- int bits; /* number of bits (1-7) from byte at in - 1, or 0 */
-#endif
- unsigned char window[ZLIB_WINSIZE]; /* preceding 32K of uncompressed data */
-
- /* be gentle with Z_STREAM_END, 8 bytes more... Another solution would be to comment checks out */
- guint32 adler;
- guint32 total_out;
- } zlib;
- } data;
-};
-
-struct zlib_cur_seek_point {
- unsigned char window[ZLIB_WINSIZE]; /* preceding 32K of uncompressed data */
- unsigned int pos;
- unsigned int have;
-};
-
-#define SPAN G_GINT64_CONSTANT(1048576)
-static struct fast_seek_point *
-fast_seek_find(FILE_F file, gint64 pos)
-{
- struct fast_seek_point *smallest = NULL;
- struct fast_seek_point *item;
- guint low, i, max;
-
- if (!file->fast_seek)
- return NULL;
-
- for (low = 0, max = file->fast_seek->len; low < max; ) {
- i = (low + max) / 2;
- item = (struct fast_seek_point *)file->fast_seek->pdata[i];
-
- if (pos < item->out)
- max = i;
- else if (pos > item->out) {
- smallest = item;
- low = i + 1;
- } else {
- return item;
- }
- }
- return smallest;
-}
-
-static void
-fast_seek_header(FILE_F file, gint64 in_pos, gint64 out_pos,
- compression_t compression)
-{
- struct fast_seek_point *item = NULL;
-
- if (file->fast_seek->len != 0)
- item = (struct fast_seek_point *)file->fast_seek->pdata[file->fast_seek->len - 1];
-
- if (!item || item->out < out_pos) {
- struct fast_seek_point *val = g_new(struct fast_seek_point,1);
- val->in = in_pos;
- val->out = out_pos;
- val->compression = compression;
-
- g_ptr_array_add(file->fast_seek, val);
- }
-}
-
-static void
-fast_seek_reset(FILE_F state _U_)
-{
-#ifdef HAVE_LIBZ
- if (state->compression == ZLIB && state->fast_seek_cur) {
- struct zlib_cur_seek_point *cur = (struct zlib_cur_seek_point *) state->fast_seek_cur;
-
- cur->have = 0;
- }
-#endif
-}
-
-#ifdef HAVE_LIBZ
-
-/* Get next byte from input, or -1 if end or error.
- *
- * Note:
- *
- * 1) errors from raw_read(), and thus from fill_in_buffer(), are
- * "sticky", and fill_in_buffer() won't do any reading if there's
- * an error;
- *
- * 2) GZ_GETC() returns -1 on an EOF;
- *
- * so it's safe to make multiple GZ_GETC() calls and only check the
- * last one for an error. */
-#define GZ_GETC() ((state->avail_in == 0 && fill_in_buffer(state) == -1) ? -1 : \
- (state->avail_in == 0 ? -1 : \
- (state->avail_in--, *(state->next_in)++)))
-
-/* Get a one-byte integer and return 0 on success and the value in *ret.
- Otherwise -1 is returned, state->err is set, and *ret is not modified. */
-static int
-gz_next1(FILE_F state, guint8 *ret)
-{
- int ch;
-
- ch = GZ_GETC();
- if (ch == -1) {
- if (state->err == 0) {
- /* EOF */
- state->err = FTAP_ERR_SHORT_READ;
- state->err_info = NULL;
- }
- return -1;
- }
- *ret = ch;
- return 0;
-}
-
-/* Get a two-byte little-endian integer and return 0 on success and the value
- in *ret. Otherwise -1 is returned, state->err is set, and *ret is not
- modified. */
-static int
-gz_next2(FILE_F state, guint16 *ret)
-{
- guint16 val;
- int ch;
-
- val = GZ_GETC();
- ch = GZ_GETC();
- if (ch == -1) {
- if (state->err == 0) {
- /* EOF */
- state->err = FTAP_ERR_SHORT_READ;
- state->err_info = NULL;
- }
- return -1;
- }
- val += (guint16)ch << 8;
- *ret = val;
- return 0;
-}
-
-/* Get a four-byte little-endian integer and return 0 on success and the value
- in *ret. Otherwise -1 is returned, state->err is set, and *ret is not
- modified. */
-static int
-gz_next4(FILE_F state, guint32 *ret)
-{
- guint32 val;
- int ch;
-
- val = GZ_GETC();
- val += (unsigned)GZ_GETC() << 8;
- val += (guint32)GZ_GETC() << 16;
- ch = GZ_GETC();
- if (ch == -1) {
- if (state->err == 0) {
- /* EOF */
- state->err = FTAP_ERR_SHORT_READ;
- state->err_info = NULL;
- }
- return -1;
- }
- val += (guint32)ch << 24;
- *ret = val;
- return 0;
-}
-
-/* Skip the specified number of bytes and return 0 on success. Otherwise -1
- is returned. */
-static int
-gz_skipn(FILE_F state, size_t n)
-{
- while (n != 0) {
- if (GZ_GETC() == -1) {
- if (state->err == 0) {
- /* EOF */
- state->err = FTAP_ERR_SHORT_READ;
- state->err_info = NULL;
- }
- return -1;
- }
- n--;
- }
- return 0;
-}
-
-/* Skip a null-terminated string and return 0 on success. Otherwise -1
- is returned. */
-static int
-gz_skipzstr(FILE_F state)
-{
- int ch;
-
- /* It's null-terminated, so scan until we read a byte with
- the value 0 or get an error. */
- while ((ch = GZ_GETC()) > 0)
- ;
- if (ch == -1) {
- if (state->err == 0) {
- /* EOF */
- state->err = FTAP_ERR_SHORT_READ;
- state->err_info = NULL;
- }
- return -1;
- }
- return 0;
-}
-
-static void
-zlib_fast_seek_add(FILE_F file, struct zlib_cur_seek_point *point, int bits, gint64 in_pos, gint64 out_pos)
-{
- /* it's for sure after gzip header, so file->fast_seek->len != 0 */
- struct fast_seek_point *item = (struct fast_seek_point *)file->fast_seek->pdata[file->fast_seek->len - 1];
-
-#ifndef HAVE_INFLATEPRIME
- if (bits)
- return;
-#endif
-
- /* Glib has got Balanced Binary Trees (GTree) but I couldn't find a way to do quick search for nearest (and smaller) value to seek (It's what fast_seek_find() do)
- * Inserting value in middle of sorted array is expensive, so we want to add only in the end.
- * It's not big deal, cause first-read don't usually invoke seeking
- */
- if (item->out + SPAN < out_pos) {
- struct fast_seek_point *val = g_new(struct fast_seek_point,1);
- val->in = in_pos;
- val->out = out_pos;
- val->compression = ZLIB;
-#ifdef HAVE_INFLATEPRIME
- val->data.zlib.bits = bits;
-#endif
- if (point->pos != 0) {
- unsigned int left = ZLIB_WINSIZE - point->pos;
-
- memcpy(val->data.zlib.window, point->window + point->pos, left);
- memcpy(val->data.zlib.window + left, point->window, point->pos);
- } else
- memcpy(val->data.zlib.window, point->window, ZLIB_WINSIZE);
-
- /*
- * XXX - strm.adler is a uLong in at least some versions
- * of zlib, and uLong is an unsigned long in at least
- * some of those versions, which means it's 64-bit
- * on LP64 platforms, even though the checksum is
- * 32-bit. We assume the actual Adler checksum
- * is in the lower 32 bits of strm.adler; as the
- * checksum in the file is only 32 bits, we save only
- * those lower 32 bits, and cast away any additional
- * bits to squelch warnings.
- *
- * The same applies to strm.total_out.
- */
- val->data.zlib.adler = (guint32) file->strm.adler;
- val->data.zlib.total_out = (guint32) file->strm.total_out;
- g_ptr_array_add(file->fast_seek, val);
- }
-}
-
-static void /* gz_decomp */
-zlib_read(FILE_F state, unsigned char *buf, unsigned int count)
-{
- int ret = 0; /* XXX */
- guint32 crc, len;
- z_streamp strm = &(state->strm);
-
- unsigned char *buf2 = buf;
- unsigned int count2 = count;
-
- strm->avail_out = count;
- strm->next_out = buf;
-
- /* fill output buffer up to end of deflate stream or error */
- do {
- /* get more input for inflate() */
- if (state->avail_in == 0 && fill_in_buffer(state) == -1)
- break;
- if (state->avail_in == 0) {
- /* EOF */
- state->err = FTAP_ERR_SHORT_READ;
- state->err_info = NULL;
- break;
- }
-
- strm->avail_in = state->avail_in;
- strm->next_in = state->next_in;
- /* decompress and handle errors */
-#ifdef Z_BLOCK
- ret = inflate(strm, Z_BLOCK);
-#else
- ret = inflate(strm, Z_NO_FLUSH);
-#endif
- state->avail_in = strm->avail_in;
- state->next_in = strm->next_in;
- if (ret == Z_STREAM_ERROR) {
- state->err = FTAP_ERR_DECOMPRESS;
- state->err_info = strm->msg;
- break;
- }
- if (ret == Z_NEED_DICT) {
- state->err = FTAP_ERR_DECOMPRESS;
- state->err_info = "preset dictionary needed";
- break;
- }
- if (ret == Z_MEM_ERROR) {
- /* This means "not enough memory". */
- state->err = ENOMEM;
- state->err_info = NULL;
- break;
- }
- if (ret == Z_DATA_ERROR) { /* deflate stream invalid */
- state->err = FTAP_ERR_DECOMPRESS;
- state->err_info = strm->msg;
- break;
- }
- /*
- * XXX - Z_BUF_ERROR?
- */
-
- strm->adler = crc32(strm->adler, buf2, count2 - strm->avail_out);
-#ifdef Z_BLOCK
- if (state->fast_seek_cur) {
- struct zlib_cur_seek_point *cur = (struct zlib_cur_seek_point *) state->fast_seek_cur;
- unsigned int ready = count2 - strm->avail_out;
-
- if (ready < ZLIB_WINSIZE) {
- guint left = ZLIB_WINSIZE - cur->pos;
-
- if (ready >= left) {
- memcpy(cur->window + cur->pos, buf2, left);
- if (ready != left)
- memcpy(cur->window, buf2 + left, ready - left);
-
- cur->pos = ready - left;
- cur->have += ready;
- } else {
- memcpy(cur->window + cur->pos, buf2, ready);
- cur->pos += ready;
- cur->have += ready;
- }
-
- if (cur->have >= ZLIB_WINSIZE)
- cur->have = ZLIB_WINSIZE;
-
- } else {
- memcpy(cur->window, buf2 + (ready - ZLIB_WINSIZE), ZLIB_WINSIZE);
- cur->pos = 0;
- cur->have = ZLIB_WINSIZE;
- }
-
- if (cur->have >= ZLIB_WINSIZE && ret != Z_STREAM_END && (strm->data_type & 128) && !(strm->data_type & 64))
- zlib_fast_seek_add(state, cur, (strm->data_type & 7), state->raw_pos - strm->avail_in, state->pos + (count - strm->avail_out));
- }
-#endif
- buf2 = (buf2 + count2 - strm->avail_out);
- count2 = strm->avail_out;
-
- } while (strm->avail_out && ret != Z_STREAM_END);
-
- /* update available output and crc check value */
- state->next = buf;
- state->have = count - strm->avail_out;
-
- /* Check gzip trailer if at end of deflate stream.
- We don't fail immediately here, we just set an error
- indication, so that we try to process what data we
- got before the error. The next attempt to read
- something past that data will get the error. */
- if (ret == Z_STREAM_END) {
- if (gz_next4(state, &crc) != -1 &&
- gz_next4(state, &len) != -1) {
- if (crc != strm->adler && !state->dont_check_crc) {
- state->err = FTAP_ERR_DECOMPRESS;
- state->err_info = "bad CRC";
- } else if (len != (strm->total_out & 0xffffffffL)) {
- state->err = FTAP_ERR_DECOMPRESS;
- state->err_info = "length field wrong";
- }
- }
- state->compression = UNKNOWN; /* ready for next stream, once have is 0 */
- g_free(state->fast_seek_cur);
- state->fast_seek_cur = NULL;
- }
-}
-#endif
-
-static int
-gz_head(FILE_F state)
-{
- /* get some data in the input buffer */
- if (state->avail_in == 0) {
- if (fill_in_buffer(state) == -1)
- return -1;
- if (state->avail_in == 0)
- return 0;
- }
-
- /* look for the gzip magic header bytes 31 and 139 */
-#ifdef HAVE_LIBZ
- if (state->next_in[0] == 31) {
- state->avail_in--;
- state->next_in++;
- if (state->avail_in == 0 && fill_in_buffer(state) == -1)
- return -1;
- if (state->avail_in && state->next_in[0] == 139) {
- guint8 cm;
- guint8 flags;
- guint16 len;
- guint16 hcrc;
-
- /* we have a gzip header, woo hoo! */
- state->avail_in--;
- state->next_in++;
-
- /* read rest of header */
-
- /* compression method (CM) */
- if (gz_next1(state, &cm) == -1)
- return -1;
- if (cm != 8) {
- state->err = FTAP_ERR_DECOMPRESS;
- state->err_info = "unknown compression method";
- return -1;
- }
-
- /* flags (FLG) */
- if (gz_next1(state, &flags) == -1)
- return -1;
- if (flags & 0xe0) { /* reserved flag bits */
- state->err = FTAP_ERR_DECOMPRESS;
- state->err_info = "reserved flag bits set";
- return -1;
- }
-
- /* modification time (MTIME) */
- if (gz_skipn(state, 4) == -1)
- return -1;
-
- /* extra flags (XFL) */
- if (gz_skipn(state, 1) == -1)
- return -1;
-
- /* operating system (OS) */
- if (gz_skipn(state, 1) == -1)
- return -1;
-
- if (flags & 4) {
- /* extra field - get XLEN */
- if (gz_next2(state, &len) == -1)
- return -1;
-
- /* skip the extra field */
- if (gz_skipn(state, len) == -1)
- return -1;
- }
- if (flags & 8) {
- /* file name */
- if (gz_skipzstr(state) == -1)
- return -1;
- }
- if (flags & 16) {
- /* comment */
- if (gz_skipzstr(state) == -1)
- return -1;
- }
- if (flags & 2) {
- /* header crc */
- if (gz_next2(state, &hcrc) == -1)
- return -1;
- /* XXX - check the CRC? */
- }
-
- /* set up for decompression */
- inflateReset(&(state->strm));
- state->strm.adler = crc32(0L, Z_NULL, 0);
- state->compression = ZLIB;
- state->is_compressed = TRUE;
-#ifdef Z_BLOCK
- if (state->fast_seek) {
- struct zlib_cur_seek_point *cur = g_new(struct zlib_cur_seek_point,1);
-
- cur->pos = cur->have = 0;
- g_free(state->fast_seek_cur);
- state->fast_seek_cur = cur;
- fast_seek_header(state, state->raw_pos - state->avail_in, state->pos, GZIP_AFTER_HEADER);
- }
-#endif
- return 0;
- }
- else {
- /* not a gzip file -- save first byte (31) and fall to raw i/o */
- state->out[0] = 31;
- state->have = 1;
- }
- }
-#endif
-#ifdef HAVE_LIBXZ
- /* { 0xFD, '7', 'z', 'X', 'Z', 0x00 } */
- /* FD 37 7A 58 5A 00 */
-#endif
- if (state->fast_seek)
- fast_seek_header(state, state->raw_pos - state->avail_in - state->have, state->pos, UNCOMPRESSED);
-
- /* doing raw i/o, save start of raw data for seeking, copy any leftover
- input to output -- this assumes that the output buffer is larger than
- the input buffer, which also assures space for gzungetc() */
- state->raw = state->pos;
- state->next = state->out;
- if (state->avail_in) {
- memcpy(state->next + state->have, state->next_in, state->avail_in);
- state->have += state->avail_in;
- state->avail_in = 0;
- }
- state->compression = UNCOMPRESSED;
- return 0;
-}
-
-static int /* gz_make */
-fill_out_buffer(FILE_F state)
-{
- if (state->compression == UNKNOWN) { /* look for gzip header */
- if (gz_head(state) == -1)
- return -1;
- if (state->have) /* got some data from gz_head() */
- return 0;
- }
- if (state->compression == UNCOMPRESSED) { /* straight copy */
- if (raw_read(state, state->out, state->size /* << 1 */, &(state->have)) == -1)
- return -1;
- state->next = state->out;
- }
-#ifdef HAVE_LIBZ
- else if (state->compression == ZLIB) { /* decompress */
- zlib_read(state, state->out, state->size << 1);
- }
-#endif
- return 0;
-}
-
-static int
-gz_skip(FILE_F state, gint64 len)
-{
- guint n;
-
- /* skip over len bytes or reach end-of-file, whichever comes first */
- while (len)
- if (state->have) {
- /* We have stuff in the output buffer; skip over
- it. */
- n = (gint64)state->have > len ? (unsigned)len : state->have;
- state->have -= n;
- state->next += n;
- state->pos += n;
- len -= n;
- } else if (state->err) {
- /* We have nothing in the output buffer, and
- we have an error that may not have been
- reported yet; that means we can't generate
- any more data into the output buffer, so
- return an error indication. */
- return -1;
- } else if (state->eof && state->avail_in == 0) {
- /* We have nothing in the output buffer, and
- we're at the end of the input; just return. */
- break;
- } else {
- /* We have nothing in the output buffer, and
- we can generate more data; get more output,
- looking for header if required. */
- if (fill_out_buffer(state) == -1)
- return -1;
- }
- return 0;
-}
-
-static void
-gz_reset(FILE_F state)
-{
- state->have = 0; /* no output data available */
- state->eof = FALSE; /* not at end of file */
- state->compression = UNKNOWN; /* look for gzip header */
-
- state->seek_pending = FALSE; /* no seek request pending */
- state->err = 0; /* clear error */
- state->err_info = NULL;
- state->pos = 0; /* no uncompressed data yet */
- state->avail_in = 0; /* no input data yet */
-}
-
-FILE_F
-file_fdopen(int fd)
-{
-#ifdef _STATBUF_ST_BLKSIZE /* XXX, _STATBUF_ST_BLKSIZE portable? */
- ws_statb64 st;
-#endif
- int want = GZBUFSIZE;
- FILE_F state;
-
- if (fd == -1)
- return NULL;
-
- /* allocate FILE_F structure to return */
- state = (FILE_F)g_try_malloc(sizeof *state);
- if (state == NULL)
- return NULL;
-
- state->fast_seek_cur = NULL;
- state->fast_seek = NULL;
-
- /* open the file with the appropriate mode (or just use fd) */
- state->fd = fd;
-
- /* we don't yet know whether it's compressed */
- state->is_compressed = FALSE;
-
- /* save the current position for rewinding (only if reading) */
- state->start = ws_lseek64(state->fd, 0, SEEK_CUR);
- if (state->start == -1) state->start = 0;
- state->raw_pos = state->start;
-
- /* initialize stream */
- gz_reset(state);
-
-#ifdef _STATBUF_ST_BLKSIZE
- if (ws_fstat64(fd, &st) >= 0) {
- /*
- * Yes, st_blksize can be bigger than an int; apparently,
- * it's a long on LP64 Linux, for example.
- *
- * If the value is too big to fit into an int, just
- * use the default.
- */
- if (st.st_blksize <= G_MAXINT)
- want = (int)st.st_blksize;
- /* XXX, verify result? */
- }
-#endif
-
- /* allocate buffers */
- state->in = (unsigned char *)g_try_malloc(want);
- state->out = (unsigned char *)g_try_malloc(want << 1);
- state->size = want;
- if (state->in == NULL || state->out == NULL) {
- g_free(state->out);
- g_free(state->in);
- g_free(state);
- errno = ENOMEM;
- return NULL;
- }
-
-#ifdef HAVE_LIBZ
- /* allocate inflate memory */
- state->strm.zalloc = Z_NULL;
- state->strm.zfree = Z_NULL;
- state->strm.opaque = Z_NULL;
- state->strm.avail_in = 0;
- state->strm.next_in = Z_NULL;
- if (inflateInit2(&(state->strm), -15) != Z_OK) { /* raw inflate */
- g_free(state->out);
- g_free(state->in);
- g_free(state);
- errno = ENOMEM;
- return NULL;
- }
-
- /* for now, assume we should check the crc */
- state->dont_check_crc = FALSE;
-#endif
- /* return stream */
- return state;
-}
-
-FILE_F
-file_open(const char *path)
-{
- int fd;
- FILE_F ft;
-#ifdef HAVE_LIBZ
- const char *suffixp;
-#endif
-
- /* open file and do correct filename conversions.
-
- XXX - do we need O_LARGEFILE? On UN*X, if we need to do
- something special to get large file support, the configure
- script should have set us up with the appropriate #defines,
- so we should be getting a large-file-enabled file descriptor
- here. Pre-Large File Summit UN*Xes, and possibly even some
- post-LFS UN*Xes, might require O_LARGEFILE here, though.
- If so, we should probably handle that in ws_open(). */
- if ((fd = ws_open(path, O_RDONLY|O_BINARY, 0000)) == -1)
- return NULL;
-
- /* open file handle */
- ft = file_fdopen(fd);
- if (ft == NULL) {
- ws_close(fd);
- return NULL;
- }
-
-#ifdef HAVE_LIBZ
- /*
- * If this file's name ends in ".caz", it's probably a compressed
- * Windows Sniffer file. The compression is gzip, but if we
- * process the CRC as specified by RFC 1952, the computed CRC
- * doesn't match the stored CRC.
- *
- * Compressed Windows Sniffer files don't all have the same CRC
- * value; is it just random crap, or are they running the CRC on
- * a different set of data than you're supposed to (e.g., not
- * CRCing some of the data), or something such as that?
- *
- * For now, we just set a flag to ignore CRC errors.
- */
- suffixp = strrchr(path, '.');
- if (suffixp != NULL) {
- if (g_ascii_strcasecmp(suffixp, ".caz") == 0)
- ft->dont_check_crc = TRUE;
- }
-#endif
-
- return ft;
-}
-
-void
-file_set_random_access(FILE_F stream, gboolean random_flag _U_, GPtrArray *seek)
-{
- stream->fast_seek = seek;
-}
-
-gint64
-file_seek(FILE_F file, gint64 offset, int whence, int *err)
-{
- struct fast_seek_point *here;
- guint n;
-
- /* can only seek from start or relative to current position */
- if (whence != SEEK_SET && whence != SEEK_CUR) {
- g_assert_not_reached();
-/*
- *err = EINVAL;
- return -1;
- */
- }
-
- /* normalize offset to a SEEK_CUR specification */
- if (whence == SEEK_SET)
- offset -= file->pos;
- else if (file->seek_pending)
- offset += file->skip;
- file->seek_pending = FALSE;
-
- if (offset < 0 && file->next) {
- /*
- * This is guaranteed to fit in an unsigned int.
- * To squelch compiler warnings, we cast the
- * result.
- */
- guint had = (unsigned)(file->next - file->out);
- if (-offset <= had) {
- /*
- * Offset is negative, so -offset is
- * non-negative, and -offset is
- * <= an unsigned and thus fits in an
- * unsigned. Get that value and
- * adjust appropriately.
- *
- * (Casting offset to unsigned makes
- * it positive, which is not what we
- * would want, so we cast -offset
- * instead.)
- */
- guint adjustment = (unsigned)(-offset);
- file->have += adjustment;
- file->next -= adjustment;
- file->pos -= adjustment;
- return file->pos;
- }
- }
-
- /* XXX, profile */
- if ((here = fast_seek_find(file, file->pos + offset)) && (offset < 0 || offset > SPAN || here->compression == UNCOMPRESSED)) {
- gint64 off, off2;
-
-#ifdef HAVE_LIBZ
- if (here->compression == ZLIB) {
-#ifdef HAVE_INFLATEPRIME
- off = here->in - (here->data.zlib.bits ? 1 : 0);
-#else
- off = here->in;
-#endif
- off2 = here->out;
- } else if (here->compression == GZIP_AFTER_HEADER) {
- off = here->in;
- off2 = here->out;
- } else
-#endif
- {
- off2 = (file->pos + offset);
- off = here->in + (off2 - here->out);
- }
-
- if (ws_lseek64(file->fd, off, SEEK_SET) == -1) {
- *err = errno;
- return -1;
- }
- fast_seek_reset(file);
-
- file->raw_pos = off;
- file->have = 0;
- file->eof = FALSE;
- file->seek_pending = FALSE;
- file->err = 0;
- file->err_info = NULL;
- file->avail_in = 0;
-
-#ifdef HAVE_LIBZ
- if (here->compression == ZLIB) {
- z_stream *strm = &file->strm;
-
- inflateReset(strm);
- strm->adler = here->data.zlib.adler;
- strm->total_out = here->data.zlib.total_out;
-#ifdef HAVE_INFLATEPRIME
- if (here->data.zlib.bits) {
- FILE_F state = file;
- int ret = GZ_GETC();
-
- if (ret == -1) {
- if (state->err == 0) {
- /* EOF */
- *err = FTAP_ERR_SHORT_READ;
- } else
- *err = state->err;
- return -1;
- }
- (void)inflatePrime(strm, here->data.zlib.bits, ret >> (8 - here->data.zlib.bits));
- }
-#endif
- (void)inflateSetDictionary(strm, here->data.zlib.window, ZLIB_WINSIZE);
- file->compression = ZLIB;
- } else if (here->compression == GZIP_AFTER_HEADER) {
- z_stream *strm = &file->strm;
-
- inflateReset(strm);
- strm->adler = crc32(0L, Z_NULL, 0);
- file->compression = ZLIB;
- } else
-#endif
- file->compression = here->compression;
-
- offset = (file->pos + offset) - off2;
- file->pos = off2;
- /* g_print("OK! %ld\n", offset); */
-
- if (offset) {
- file->seek_pending = TRUE;
- file->skip = offset;
- }
- return file->pos + offset;
- }
-
- /* if within raw area while reading, just go there */
- if (file->compression == UNCOMPRESSED && file->pos + offset >= file->raw
- && (offset < 0 || offset >= file->have) /* seek only when we don't have that offset in buffer */)
- {
- if (ws_lseek64(file->fd, offset - file->have, SEEK_CUR) == -1) {
- *err = errno;
- return -1;
- }
- file->raw_pos += (offset - file->have);
- file->have = 0;
- file->eof = FALSE;
- file->seek_pending = FALSE;
- file->err = 0;
- file->err_info = NULL;
- file->avail_in = 0;
- file->pos += offset;
- return file->pos;
- }
-
- /* calculate skip amount, rewinding if needed for back seek when reading */
- if (offset < 0) {
- offset += file->pos;
- if (offset < 0) { /* before start of file! */
- *err = EINVAL;
- return -1;
- }
- /* rewind, then skip to offset */
-
- /* back up and start over */
- if (ws_lseek64(file->fd, file->start, SEEK_SET) == -1) {
- *err = errno;
- return -1;
- }
- fast_seek_reset(file);
- file->raw_pos = file->start;
- gz_reset(file);
- }
-
- /* skip what's in output buffer (one less gzgetc() check) */
- n = (gint64)file->have > offset ? (unsigned)offset : file->have;
- file->have -= n;
- file->next += n;
- file->pos += n;
- offset -= n;
-
- /* request skip (if not zero) */
- if (offset) {
- file->seek_pending = TRUE;
- file->skip = offset;
- }
- return file->pos + offset;
-}
-
-/*
- * Skip forward the specified number of bytes in the file.
- * Currently implemented as a wrapper around file_seek(),
- * but if, for example, we ever add support for reading
- * sequentially from a pipe, this could instead just skip
- * forward by reading the bytes in question.
- */
-gboolean
-file_skip(FILE_F file, gint64 delta, int *err)
-{
- if (file_seek(file, delta, SEEK_CUR, err) == -1)
- return FALSE;
- return TRUE;
-}
-
-gint64
-file_tell(FILE_F stream)
-{
- /* return position */
- return stream->pos + (stream->seek_pending ? stream->skip : 0);
-}
-
-gint64
-file_tell_raw(FILE_F stream)
-{
- return stream->raw_pos;
-}
-
-int
-file_fstat(FILE_F stream, ws_statb64 *statb, int *err)
-{
- if (ws_fstat64(stream->fd, statb) == -1) {
- if (err != NULL)
- *err = errno;
- return -1;
- }
- return 0;
-}
-
-gboolean
-file_iscompressed(FILE_F stream)
-{
- return stream->is_compressed;
-}
-
-int
-file_read(void *buf, unsigned int len, FILE_F file)
-{
- guint got, n;
-
- /* if len is zero, avoid unnecessary operations */
- if (len == 0)
- return 0;
-
- /* process a skip request */
- if (file->seek_pending) {
- file->seek_pending = FALSE;
- if (gz_skip(file, file->skip) == -1)
- return -1;
- }
-
- /* get len bytes to buf, or less than len if at the end */
- got = 0;
- do {
- if (file->have) {
- /* We have stuff in the output buffer; copy
- what we have. */
- n = file->have > len ? len : file->have;
- memcpy(buf, file->next, n);
- file->next += n;
- file->have -= n;
- } else if (file->err) {
- /* We have nothing in the output buffer, and
- we have an error that may not have been
- reported yet; that means we can't generate
- any more data into the output buffer, so
- return an error indication. */
- return -1;
- } else if (file->eof && file->avail_in == 0) {
- /* We have nothing in the output buffer, and
- we're at the end of the input; just return
- with what we've gotten so far. */
- break;
- } else {
- /* We have nothing in the output buffer, and
- we can generate more data; get more output,
- looking for header if required, and
- keep looping to process the new stuff
- in the output buffer. */
- if (fill_out_buffer(file) == -1)
- return -1;
- continue; /* no progress yet -- go back to memcpy() above */
- }
- /* update progress */
- len -= n;
- buf = (char *)buf + n;
- got += n;
- file->pos += n;
- } while (len);
-
- return (int)got;
-}
-
-/*
- * XXX - this gets a byte, not a character.
- */
-int
-file_getc(FILE_F file)
-{
- unsigned char buf[1];
- int ret;
-
- /* check that we're reading and that there's no error */
- if (file->err)
- return -1;
-
- /* try output buffer (no need to check for skip request) */
- if (file->have) {
- file->have--;
- file->pos++;
- return *(file->next)++;
- }
-
- ret = file_read(buf, 1, file);
- return ret < 1 ? -1 : buf[0];
-}
-
-char *
-file_gets(char *buf, int len, FILE_F file)
-{
- guint left, n;
- char *str;
- unsigned char *eol;
-
- /* check parameters */
- if (buf == NULL || len < 1)
- return NULL;
-
- /* check that there's no error */
- if (file->err)
- return NULL;
-
- /* process a skip request */
- if (file->seek_pending) {
- file->seek_pending = FALSE;
- if (gz_skip(file, file->skip) == -1)
- return NULL;
- }
-
- /* copy output bytes up to new line or len - 1, whichever comes first --
- append a terminating zero to the string (we don't check for a zero in
- the contents, let the user worry about that) */
- str = buf;
- left = (unsigned)len - 1;
- if (left) do {
- /* assure that something is in the output buffer */
- if (file->have == 0) {
- /* We have nothing in the output buffer. */
- if (file->err) {
- /* We have an error that may not have
- been reported yet; that means we
- can't generate any more data into
- the output buffer, so return an
- error indication. */
- return NULL;
- }
- if (fill_out_buffer(file) == -1)
- return NULL; /* error */
- if (file->have == 0) { /* end of file */
- if (buf == str) /* got bupkus */
- return NULL;
- break; /* got something -- return it */
- }
- }
-
- /* look for end-of-line in current output buffer */
- n = file->have > left ? left : file->have;
- eol = (unsigned char *)memchr(file->next, '\n', n);
- if (eol != NULL)
- n = (unsigned)(eol - file->next) + 1;
-
- /* copy through end-of-line, or remainder if not found */
- memcpy(buf, file->next, n);
- file->have -= n;
- file->next += n;
- file->pos += n;
- left -= n;
- buf += n;
- } while (left && eol == NULL);
-
- /* found end-of-line or out of space -- terminate string and return it */
- buf[0] = 0;
- return str;
-}
-
-int
-file_eof(FILE_F file)
-{
- /* return end-of-file state */
- return (file->eof && file->avail_in == 0 && file->have == 0);
-}
-
-/*
- * Routine to return a Wiretap error code (0 for no error, an errno
- * for a file error, or a FTAP_ERR_ code for other errors) for an
- * I/O stream. Also returns an error string for some errors.
- */
-int
-file_error(FILE_F fh, gchar **err_info)
-{
- if (fh->err!=0 && err_info) {
- /* g_strdup() returns NULL for NULL argument */
- *err_info = g_strdup(fh->err_info);
- }
- return fh->err;
-}
-
-void
-file_clearerr(FILE_F stream)
-{
- /* clear error and end-of-file */
- stream->err = 0;
- stream->err_info = NULL;
- stream->eof = FALSE;
-}
-
-void
-file_fdclose(FILE_F file)
-{
- ws_close(file->fd);
- file->fd = -1;
-}
-
-gboolean
-file_fdreopen(FILE_F file, const char *path)
-{
- int fd;
-
- if ((fd = ws_open(path, O_RDONLY|O_BINARY, 0000)) == -1)
- return FALSE;
- file->fd = fd;
- return TRUE;
-}
-
-void
-file_close(FILE_F file)
-{
- int fd = file->fd;
-
- /* free memory and close file */
- if (file->size) {
-#ifdef HAVE_LIBZ
- inflateEnd(&(file->strm));
-#endif
- g_free(file->out);
- g_free(file->in);
- }
- g_free(file->fast_seek_cur);
- file->err = 0;
- file->err_info = NULL;
- g_free(file);
- /*
- * If fd is -1, somebody's done a file_closefd() on us, so
- * we don't need to close the FD itself, and shouldn't do
- * so.
- */
- if (fd != -1)
- ws_close(fd);
-}
-
-#ifdef HAVE_LIBZ
-/* internal gzip file state data structure for writing */
-struct wtap_writer {
- int fd; /* file descriptor */
- gint64 pos; /* current position in uncompressed data */
- guint size; /* buffer size, zero if not allocated yet */
- guint want; /* requested buffer size, default is GZBUFSIZE */
- unsigned char *in; /* input buffer */
- unsigned char *out; /* output buffer (double-sized when reading) */
- unsigned char *next; /* next output data to deliver or write */
- int level; /* compression level */
- int strategy; /* compression strategy */
- int err; /* error code */
- /* zlib deflate stream */
- z_stream strm; /* stream structure in-place (not a pointer) */
-};
-
-GZWFILE_T
-gzwfile_open(const char *path)
-{
- int fd;
- GZWFILE_T state;
- int save_errno;
-
- fd = ws_open(path, O_BINARY|O_WRONLY|O_CREAT|O_TRUNC, 0666);
- if (fd == -1)
- return NULL;
- state = gzwfile_fdopen(fd);
- if (state == NULL) {
- save_errno = errno;
- close(fd);
- errno = save_errno;
- }
- return state;
-}
-
-GZWFILE_T
-gzwfile_fdopen(int fd)
-{
- GZWFILE_T state;
-
- /* allocate wtap_writer structure to return */
- state = (GZWFILE_T)g_try_malloc(sizeof *state);
- if (state == NULL)
- return NULL;
- state->fd = fd;
- state->size = 0; /* no buffers allocated yet */
- state->want = GZBUFSIZE; /* requested buffer size */
-
- state->level = Z_DEFAULT_COMPRESSION;
- state->strategy = Z_DEFAULT_STRATEGY;
-
- /* initialize stream */
- state->err = Z_OK; /* clear error */
- state->pos = 0; /* no uncompressed data yet */
- state->strm.avail_in = 0; /* no input data yet */
-
- /* return stream */
- return state;
-}
-
-/* Initialize state for writing a gzip file. Mark initialization by setting
- state->size to non-zero. Return -1, and set state->err, on failure;
- return 0 on success. */
-static int
-gz_init(GZWFILE_T state)
-{
- int ret;
- z_streamp strm = &(state->strm);
-
- /* allocate input and output buffers */
- state->in = (unsigned char *)g_try_malloc(state->want);
- state->out = (unsigned char *)g_try_malloc(state->want);
- if (state->in == NULL || state->out == NULL) {
- g_free(state->out);
- g_free(state->in);
- state->err = ENOMEM;
- return -1;
- }
-
- /* allocate deflate memory, set up for gzip compression */
- strm->zalloc = Z_NULL;
- strm->zfree = Z_NULL;
- strm->opaque = Z_NULL;
- ret = deflateInit2(strm, state->level, Z_DEFLATED,
- 15 + 16, 8, state->strategy);
- if (ret != Z_OK) {
- g_free(state->out);
- g_free(state->in);
- if (ret == Z_MEM_ERROR) {
- /* This means "not enough memory". */
- state->err = ENOMEM;
- } else {
- /* This "shouldn't happen". */
- state->err = FTAP_ERR_INTERNAL;
- }
- return -1;
- }
-
- /* mark state as initialized */
- state->size = state->want;
-
- /* initialize write buffer */
- strm->avail_out = state->size;
- strm->next_out = state->out;
- state->next = strm->next_out;
- return 0;
-}
-
-/* Compress whatever is at avail_in and next_in and write to the output file.
- Return -1, and set state->err, if there is an error writing to the output
- file; return 0 on success.
- flush is assumed to be a valid deflate() flush value. If flush is Z_FINISH,
- then the deflate() state is reset to start a new gzip stream. */
-static int
-gz_comp(GZWFILE_T state, int flush)
-{
- int ret;
- ssize_t got;
- ptrdiff_t have;
- z_streamp strm = &(state->strm);
-
- /* allocate memory if this is the first time through */
- if (state->size == 0 && gz_init(state) == -1)
- return -1;
-
- /* run deflate() on provided input until it produces no more output */
- ret = Z_OK;
- do {
- /* write out current buffer contents if full, or if flushing, but if
- doing Z_FINISH then don't write until we get to Z_STREAM_END */
- if (strm->avail_out == 0 || (flush != Z_NO_FLUSH &&
- (flush != Z_FINISH || ret == Z_STREAM_END))) {
- have = strm->next_out - state->next;
- if (have) {
- got = write(state->fd, state->next, (unsigned int)have);
- if (got < 0) {
- state->err = errno;
- return -1;
- }
- if ((ptrdiff_t)got != have) {
- state->err = FTAP_ERR_SHORT_WRITE;
- return -1;
- }
- }
- if (strm->avail_out == 0) {
- strm->avail_out = state->size;
- strm->next_out = state->out;
- }
- state->next = strm->next_out;
- }
-
- /* compress */
- have = strm->avail_out;
- ret = deflate(strm, flush);
- if (ret == Z_STREAM_ERROR) {
- /* This "shouldn't happen". */
- state->err = FTAP_ERR_INTERNAL;
- return -1;
- }
- have -= strm->avail_out;
- } while (have);
-
- /* if that completed a deflate stream, allow another to start */
- if (flush == Z_FINISH)
- deflateReset(strm);
-
- /* all done, no errors */
- return 0;
-}
-
-/* Write out len bytes from buf. Return 0, and set state->err, on
- failure or on an attempt to write 0 bytes (in which case state->err
- is Z_OK); return the number of bytes written on success. */
-unsigned
-gzwfile_write(GZWFILE_T state, const void *buf, guint len)
-{
- guint put = len;
- guint n;
- z_streamp strm;
-
- strm = &(state->strm);
-
- /* check that there's no error */
- if (state->err != Z_OK)
- return 0;
-
- /* if len is zero, avoid unnecessary operations */
- if (len == 0)
- return 0;
-
- /* allocate memory if this is the first time through */
- if (state->size == 0 && gz_init(state) == -1)
- return 0;
-
- /* for small len, copy to input buffer, otherwise compress directly */
- if (len < state->size) {
- /* copy to input buffer, compress when full */
- do {
- if (strm->avail_in == 0)
- strm->next_in = state->in;
- n = state->size - strm->avail_in;
- if (n > len)
- n = len;
- memcpy(strm->next_in + strm->avail_in, buf, n);
- strm->avail_in += n;
- state->pos += n;
- buf = (const char *)buf + n;
- len -= n;
- if (len && gz_comp(state, Z_NO_FLUSH) == -1)
- return 0;
- } while (len);
- }
- else {
- /* consume whatever's left in the input buffer */
- if (strm->avail_in && gz_comp(state, Z_NO_FLUSH) == -1)
- return 0;
-
- /* directly compress user buffer to file */
- strm->avail_in = len;
- strm->next_in = (Bytef *)buf;
- state->pos += len;
- if (gz_comp(state, Z_NO_FLUSH) == -1)
- return 0;
- }
-
- /* input was all buffered or compressed (put will fit in int) */
- return (int)put;
-}
-
-/* Flush out what we've written so far. Returns -1, and sets state->err,
- on failure; returns 0 on success. */
-int
-gzwfile_flush(GZWFILE_T state)
-{
- /* check that there's no error */
- if (state->err != Z_OK)
- return -1;
-
- /* compress remaining data with Z_SYNC_FLUSH */
- gz_comp(state, Z_SYNC_FLUSH);
- if (state->err != Z_OK)
- return -1;
- return 0;
-}
-
-/* Flush out all data written, and close the file. Returns a Wiretap
- error on failure; returns 0 on success. */
-int
-gzwfile_close(GZWFILE_T state)
-{
- int ret = 0;
-
- /* flush, free memory, and close file */
- if (gz_comp(state, Z_FINISH) == -1 && ret == 0)
- ret = state->err;
- (void)deflateEnd(&(state->strm));
- g_free(state->out);
- g_free(state->in);
- state->err = Z_OK;
- if (close(state->fd) == -1 && ret == 0)
- ret = errno;
- g_free(state);
- return ret;
-}
-
-int
-gzwfile_geterr(GZWFILE_T state)
-{
- return state->err;
-}
-#endif
diff --git a/filetap/ft_file_wrappers.h b/filetap/ft_file_wrappers.h
deleted file mode 100644
index e1b7036560..0000000000
--- a/filetap/ft_file_wrappers.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/* ft_file_wrappers.h
- *
- * Wiretap Library
- * Copyright (c) 1998 by Gilbert Ramirez <gram@alumni.rice.edu>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-#ifndef __FILE_H__
-#define __FILE_H__
-
-#include <glib.h>
-#include <ftap.h>
-#include <wsutil/file_util.h>
-#include "ws_symbol_export.h"
-
-extern FILE_F file_open(const char *path);
-extern FILE_F file_fdopen(int fildes);
-extern void file_set_random_access(FILE_F stream, gboolean random_flag, GPtrArray *seek);
-WS_DLL_PUBLIC gint64 file_seek(FILE_F stream, gint64 offset, int whence, int *err);
-extern gboolean file_skip(FILE_F file, gint64 delta, int *err);
-WS_DLL_PUBLIC gint64 file_tell(FILE_F stream);
-extern gint64 file_tell_raw(FILE_F stream);
-extern int file_fstat(FILE_F stream, ws_statb64 *statb, int *err);
-extern gboolean file_iscompressed(FILE_F stream);
-WS_DLL_PUBLIC int file_read(void *buf, unsigned int count, FILE_F file);
-WS_DLL_PUBLIC int file_getc(FILE_F stream);
-WS_DLL_PUBLIC char *file_gets(char *buf, int len, FILE_F stream);
-WS_DLL_PUBLIC int file_eof(FILE_F stream);
-WS_DLL_PUBLIC int file_error(FILE_F fh, gchar **err_info);
-extern void file_clearerr(FILE_F stream);
-extern void file_fdclose(FILE_F file);
-extern int file_fdreopen(FILE_F file, const char *path);
-extern void file_close(FILE_F file);
-
-#ifdef HAVE_LIBZ
-typedef struct wtap_writer *GZWFILE_T;
-
-extern GZWFILE_T gzwfile_open(const char *path);
-extern GZWFILE_T gzwfile_fdopen(int fd);
-extern guint gzwfile_write(GZWFILE_T state, const void *buf, guint len);
-extern int gzwfile_flush(GZWFILE_T state);
-extern int gzwfile_close(GZWFILE_T state);
-extern int gzwfile_geterr(GZWFILE_T state);
-#endif /* HAVE_LIBZ */
-
-#endif /* __FILE_H__ */
diff --git a/filetap/ftap-int.h b/filetap/ftap-int.h
deleted file mode 100644
index 819c0ef860..0000000000
--- a/filetap/ftap-int.h
+++ /dev/null
@@ -1,250 +0,0 @@
-/* ftap-int.h
- *
- * Filetap Library
- * Copyright (c) 1998 by Gilbert Ramirez <gram@alumni.rice.edu>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-#ifndef __FTAP_INT_H__
-#define __FTAP_INT_H__
-
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-
-#include <glib.h>
-#include <stdio.h>
-#include <time.h>
-
-#ifdef HAVE_WINSOCK2_H
-#include <winsock2.h>
-#endif
-
-#include <wsutil/file_util.h>
-
-#include "ftap.h"
-
-WS_DLL_PUBLIC
-int ftap_fstat(ftap *fth, ws_statb64 *statb, int *err);
-
-typedef gboolean (*subtype_read_func)(struct ftap*, int*, char**, gint64*);
-typedef gboolean (*subtype_seek_read_func)(struct ftap*, gint64,
- Buffer *buf,
- int, int *, char **);
-/**
- * Struct holding data of the currently read file.
- */
-struct ftap {
- FILE_F fh;
- FILE_F random_fh; /**< Secondary FILE_T for random access */
- int file_type_subtype;
- guint snapshot_length;
- struct Buffer *frame_buffer;
- void *priv;
-
- subtype_read_func subtype_read;
- subtype_seek_read_func subtype_seek_read;
- void (*subtype_sequential_close)(struct ftap*);
- void (*subtype_close)(struct ftap*);
- int file_encap; /* per-file, for those
- * file formats that have
- * per-file encapsulation
- * types
- */
- GPtrArray *fast_seek;
-};
-
-extern gint ftap_num_file_types;
-
-#include <wsutil/pint.h>
-
-/* Macros to byte-swap possibly-unaligned 64-bit, 32-bit and 16-bit quantities;
- * they take a pointer to the quantity, and byte-swap it in place.
- */
-#define PBSWAP64(p) \
- { \
- guint8 tmp; \
- tmp = (p)[7]; \
- (p)[7] = (p)[0]; \
- (p)[0] = tmp; \
- tmp = (p)[6]; \
- (p)[6] = (p)[1]; \
- (p)[1] = tmp; \
- tmp = (p)[5]; \
- (p)[5] = (p)[2]; \
- (p)[2] = tmp; \
- tmp = (p)[4]; \
- (p)[4] = (p)[3]; \
- (p)[3] = tmp; \
- }
-#define PBSWAP32(p) \
- { \
- guint8 tmp; \
- tmp = (p)[3]; \
- (p)[3] = (p)[0]; \
- (p)[0] = tmp; \
- tmp = (p)[2]; \
- (p)[2] = (p)[1]; \
- (p)[1] = tmp; \
- }
-#define PBSWAP16(p) \
- { \
- guint8 tmp; \
- tmp = (p)[1]; \
- (p)[1] = (p)[0]; \
- (p)[0] = tmp; \
- }
-
-
-/* Pointer routines to put items out in a particular byte order.
- * These will work regardless of the byte alignment of the pointer.
- */
-
-#ifndef phtons
-#define phtons(p, v) \
- { \
- (p)[0] = (guint8)((v) >> 8); \
- (p)[1] = (guint8)((v) >> 0); \
- }
-#endif
-
-#ifndef phton24
-#define phton24(p, v) \
- { \
- (p)[0] = (guint8)((v) >> 16); \
- (p)[1] = (guint8)((v) >> 8); \
- (p)[2] = (guint8)((v) >> 0); \
- }
-#endif
-
-#ifndef phtonl
-#define phtonl(p, v) \
- { \
- (p)[0] = (guint8)((v) >> 24); \
- (p)[1] = (guint8)((v) >> 16); \
- (p)[2] = (guint8)((v) >> 8); \
- (p)[3] = (guint8)((v) >> 0); \
- }
-#endif
-
-#ifndef phtonll
-#define phtonll(p, v) \
- { \
- (p)[0] = (guint8)((v) >> 56); \
- (p)[1] = (guint8)((v) >> 48); \
- (p)[2] = (guint8)((v) >> 40); \
- (p)[3] = (guint8)((v) >> 32); \
- (p)[4] = (guint8)((v) >> 24); \
- (p)[5] = (guint8)((v) >> 16); \
- (p)[6] = (guint8)((v) >> 8); \
- (p)[7] = (guint8)((v) >> 0); \
- }
-#endif
-
-#ifndef phtoles
-#define phtoles(p, v) \
- { \
- (p)[0] = (guint8)((v) >> 0); \
- (p)[1] = (guint8)((v) >> 8); \
- }
-#endif
-
-#ifndef phtolel
-#define phtolel(p, v) \
- { \
- (p)[0] = (guint8)((v) >> 0); \
- (p)[1] = (guint8)((v) >> 8); \
- (p)[2] = (guint8)((v) >> 16); \
- (p)[3] = (guint8)((v) >> 24); \
- }
-#endif
-
-#ifndef phtolell
-#define phtolell(p, v) \
- { \
- (p)[0] = (guint8)((v) >> 0); \
- (p)[1] = (guint8)((v) >> 8); \
- (p)[2] = (guint8)((v) >> 16); \
- (p)[3] = (guint8)((v) >> 24); \
- (p)[4] = (guint8)((v) >> 32); \
- (p)[5] = (guint8)((v) >> 40); \
- (p)[6] = (guint8)((v) >> 48); \
- (p)[7] = (guint8)((v) >> 56); \
- }
-#endif
-
-#define ftap_file_read_unknown_bytes(target, num_bytes, fh, err, err_info) \
- G_STMT_START \
- { \
- int _bytes_read; \
- _bytes_read = file_read((target), (num_bytes), (fh)); \
- if (_bytes_read != (int) (num_bytes)) { \
- *(err) = file_error((fh), (err_info)); \
- return FALSE; \
- } \
- } \
- G_STMT_END
-
-#define ftap_file_read_expected_bytes(target, num_bytes, fh, err, err_info) \
- G_STMT_START \
- { \
- int _bytes_read; \
- _bytes_read = file_read((target), (num_bytes), (fh)); \
- if (_bytes_read != (int) (num_bytes)) { \
- *(err) = file_error((fh), (err_info)); \
- if (*(err) == 0 && _bytes_read > 0) { \
- *(err) = FTAP_ERR_SHORT_READ; \
- } \
- return FALSE; \
- } \
- } \
- G_STMT_END
-
-/* glib doesn't have g_ptr_array_len of all things!*/
-#ifndef g_ptr_array_len
-#define g_ptr_array_len(a) ((a)->len)
-#endif
-
-/*** get GSList of all compressed file extensions ***/
-GSList *ftap_get_compressed_file_extensions(void);
-
-/*
- * Read packet data into a Buffer, growing the buffer as necessary.
- *
- * This returns an error on a short read, even if the short read hit
- * the EOF immediately. (The assumption is that each packet has a
- * header followed by raw packet data, and that we've already read the
- * header, so if we get an EOF trying to read the packet data, the file
- * has been cut short, even if the read didn't read any data at all.)
- */
-gboolean
-ftap_read_packet_bytes(FILE_F fh, Buffer *buf, guint length, int *err,
- gchar **err_info);
-
-#endif /* __FTAP_INT_H__ */
-
-/*
- * Editor modelines
- *
- * Local Variables:
- * c-basic-offset: 8
- * tab-width: 8
- * indent-tabs-mode: t
- * End:
- *
- * ex: set shiftwidth=8 tabstop=8 noexpandtab:
- * :indentSize=8:tabSize=8:noTabs=false:
- */
diff --git a/filetap/ftap.c b/filetap/ftap.c
deleted file mode 100644
index 4f57082635..0000000000
--- a/filetap/ftap.c
+++ /dev/null
@@ -1,478 +0,0 @@
-/* ftap.c
- *
- * Filetap Library
- * Copyright (c) 1998 by Gilbert Ramirez <gram@alumni.rice.edu>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#include "config.h"
-
-#include <string.h>
-#include <errno.h>
-
-#ifdef HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#ifdef HAVE_LIBZ
-#include <zlib.h>
-#endif
-
-#include "ftap-int.h"
-
-#include "ft_file_wrappers.h"
-#include <wsutil/file_util.h>
-#include <wsutil/buffer.h>
-
-#ifdef HAVE_PLUGINS
-
-#include <wsutil/plugins.h>
-
-/*
- * List of wiretap plugins.
- */
-typedef struct {
- void (*register_ftap_module)(void); /* routine to call to register a wiretap module */
-} ftap_plugin;
-
-static GSList *ftap_plugins = NULL;
-
-/*
- * Callback for each plugin found.
- */
-static gboolean
-check_for_ftap_plugin(GModule *handle)
-{
- gpointer gp;
- void (*register_ftap_module)(void);
- ftap_plugin *plugin;
-
- /*
- * Do we have a register_ftap_module routine?
- */
- if (!g_module_symbol(handle, "register_ftap_module", &gp)) {
- /* No, so this isn't a filetap module plugin. */
- return FALSE;
- }
-
- /*
- * Yes - this plugin includes one or more filetap modules.
- */
- register_ftap_module = (void (*)(void))gp;
-
- /*
- * Add this one to the list of wiretap module plugins.
- */
- plugin = (ftap_plugin *)g_malloc(sizeof (ftap_plugin));
- plugin->register_ftap_module = register_ftap_module;
- ftap_plugins = g_slist_append(ftap_plugins, plugin);
- return TRUE;
-}
-
-void
-ftap_register_plugin_types(void)
-{
- add_plugin_type("file format", check_for_ftap_plugin);
-}
-
-static void
-register_ftap_module_plugin(gpointer data, gpointer user_data _U_)
-{
- ftap_plugin *plugin = (ftap_plugin *)data;
-
- (plugin->register_ftap_module)();
-}
-
-/*
- * For all wiretap module plugins, call their register routines.
- */
-void
-register_all_filetap_modules(void)
-{
- g_slist_foreach(ftap_plugins, register_ftap_module_plugin, NULL);
-}
-#endif /* HAVE_PLUGINS */
-
-/*
- * Return the size of the file, as reported by the OS.
- * (gint64, in case that's 64 bits.)
- */
-gint64
-ftap_file_size(ftap *fth, int *err)
-{
- ws_statb64 statb;
-
- if (file_fstat((fth->fh == NULL) ? fth->random_fh : fth->fh,
- &statb, err) == -1)
- return -1;
- return statb.st_size;
-}
-
-/*
- * Do an fstat on the file.
- */
-int
-ftap_fstat(ftap *fth, ws_statb64 *statb, int *err)
-{
- if (file_fstat((fth->fh == NULL) ? fth->random_fh : fth->fh,
- statb, err) == -1)
- return -1;
- return 0;
-}
-
-int
-ftap_file_type_subtype(ftap *fth)
-{
- return fth->file_type_subtype;
-}
-
-gboolean
-ftap_iscompressed(ftap *fth)
-{
- return file_iscompressed((fth->fh == NULL) ? fth->random_fh : fth->fh);
-}
-
-guint
-ftap_snapshot_length(ftap *fth)
-{
- return fth->snapshot_length;
-}
-
-int
-ftap_file_encap(ftap *fth)
-{
- return fth->file_encap;
-}
-
-/* Table of the encapsulation types we know about. */
-struct encap_type_info {
- const char *name;
- const char *short_name;
-};
-
-static struct encap_type_info encap_table_base[] = {
- /* FTAP_ENCAP_UNKNOWN */
- { "Unknown", "unknown" },
-};
-
-WS_DLL_LOCAL
-gint ftap_num_encap_types = sizeof(encap_table_base) / sizeof(struct encap_type_info);
-static GArray* encap_table_arr = NULL;
-
-#define encap_table_entry(encap) \
- g_array_index(encap_table_arr, struct encap_type_info, encap)
-
-static void ftap_init_encap_types(void) {
-
- if (encap_table_arr) return;
-
- encap_table_arr = g_array_new(FALSE,TRUE,sizeof(struct encap_type_info));
-
- g_array_append_vals(encap_table_arr,encap_table_base,ftap_num_encap_types);
-}
-
-int ftap_get_num_encap_types(void) {
- ftap_init_encap_types();
- return ftap_num_encap_types;
-}
-
-
-int ftap_register_encap_type(const char* name, const char* short_name) {
- struct encap_type_info e;
- ftap_init_encap_types();
-
- e.name = g_strdup(name);
- e.short_name = g_strdup(short_name);
-
- g_array_append_val(encap_table_arr,e);
-
- return ftap_num_encap_types++;
-}
-
-
-/* Name that should be somewhat descriptive. */
-const char *
-ftap_encap_string(int encap)
-{
- if (encap < FTAP_ENCAP_PER_RECORD || encap >= FTAP_NUM_ENCAP_TYPES)
- return "Illegal";
- else if (encap == FTAP_ENCAP_PER_RECORD)
- return "Per record";
- else
- return encap_table_entry(encap).name;
-}
-
-/* Name to use in, say, a command-line flag specifying the type. */
-const char *
-ftap_encap_short_string(int encap)
-{
- if (encap < FTAP_ENCAP_PER_RECORD || encap >= FTAP_NUM_ENCAP_TYPES)
- return "illegal";
- else if (encap == FTAP_ENCAP_PER_RECORD)
- return "per-record";
- else
- return encap_table_entry(encap).short_name;
-}
-
-/* Translate a short name to a capture file type. */
-int
-ftap_short_string_to_encap(const char *short_name)
-{
- int encap;
-
- for (encap = 0; encap < FTAP_NUM_ENCAP_TYPES; encap++) {
- if (encap_table_entry(encap).short_name != NULL &&
- strcmp(short_name, encap_table_entry(encap).short_name) == 0)
- return encap;
- }
- return -1; /* no such encapsulation type */
-}
-
-static const char *ftap_errlist[] = {
- "The file isn't a plain file or pipe",
- "The file is being opened for random access but is a pipe",
- "The file isn't a capture file in a known format",
- "File contains record data we don't support",
- "That file format cannot be written to a pipe",
- NULL,
- "Files can't be saved in that format",
- "Files from that network type can't be saved in that format",
- "That file format doesn't support per-packet encapsulations",
- NULL,
- NULL,
- "Less data was read than was expected",
- "The file appears to be damaged or corrupt",
- "Less data was written than was requested",
- "Uncompression error: data oddly truncated",
- "Uncompression error: data would overflow buffer",
- "Uncompression error: bad LZ77 offset",
- "The standard input cannot be opened for random access",
- "That file format doesn't support compression",
- NULL,
- NULL,
- "Uncompression error",
- "Internal error"
-};
-#define FTAP_ERRLIST_SIZE (sizeof ftap_errlist / sizeof ftap_errlist[0])
-
-const char *
-ftap_strerror(int err)
-{
- static char errbuf[128];
- unsigned int ftap_errlist_index;
-
- if (err < 0) {
- ftap_errlist_index = -1 - err;
- if (ftap_errlist_index >= FTAP_ERRLIST_SIZE) {
- g_snprintf(errbuf, 128, "Error %d", err);
- return errbuf;
- }
- if (ftap_errlist[ftap_errlist_index] == NULL)
- return "Unknown reason";
- return ftap_errlist[ftap_errlist_index];
- } else
- return g_strerror(err);
-}
-
-/* Close only the sequential side, freeing up memory it uses.
-
- Note that we do *not* want to call the subtype's close function,
- as it would free any per-subtype data, and that data may be
- needed by the random-access side.
-
- Instead, if the subtype has a "sequential close" function, we call it,
- to free up stuff used only by the sequential side. */
-void
-ftap_sequential_close(ftap *fth)
-{
- if (fth->subtype_sequential_close != NULL)
- (*fth->subtype_sequential_close)(fth);
-
- if (fth->fh != NULL) {
- file_close(fth->fh);
- fth->fh = NULL;
- }
-
- if (fth->frame_buffer) {
- ws_buffer_free(fth->frame_buffer);
- g_free(fth->frame_buffer);
- fth->frame_buffer = NULL;
- }
-}
-
-static void
-g_fast_seek_item_free(gpointer data, gpointer user_data _U_)
-{
- g_free(data);
-}
-
-/*
- * Close the file descriptors for the sequential and random streams, but
- * don't discard any information about those streams. Used on Windows if
- * we need to rename a file that we have open or if we need to rename on
- * top of a file we have open.
- */
-void
-ftap_fdclose(ftap *fth)
-{
- if (fth->fh != NULL)
- file_fdclose(fth->fh);
- if (fth->random_fh != NULL)
- file_fdclose(fth->random_fh);
-}
-
-void
-ftap_close(ftap *fth)
-{
- ftap_sequential_close(fth);
-
- if (fth->subtype_close != NULL)
- (*fth->subtype_close)(fth);
-
- if (fth->random_fh != NULL)
- file_close(fth->random_fh);
-
- if (fth->priv != NULL)
- g_free(fth->priv);
-
- if (fth->fast_seek != NULL) {
- g_ptr_array_foreach(fth->fast_seek, g_fast_seek_item_free, NULL);
- g_ptr_array_free(fth->fast_seek, TRUE);
- }
-
- g_free(fth);
-}
-
-void
-ftap_cleareof(ftap *fth) {
- /* Reset EOF */
- file_clearerr(fth->fh);
-}
-
-gboolean
-ftap_read(ftap *fth, int *err, gchar **err_info, gint64 *data_offset)
-{
-#if 0
- /*
- * Set the packet encapsulation to the file's encapsulation
- * value; if that's not FTAP_ENCAP_PER_RECORD, it's the
- * right answer (and means that the read routine for this
- * capture file type doesn't have to set it), and if it
- * *is* FTAP_ENCAP_PER_RECORD, the caller needs to set it
- * anyway.
- */
- wth->phdr.pkt_encap = wth->file_encap;
-#endif
-
- if (!fth->subtype_read(fth, err, err_info, data_offset)) {
- /*
- * If we didn't get an error indication, we read
- * the last packet. See if there's any deferred
- * error, as might, for example, occur if we're
- * reading a compressed file, and we got an error
- * reading compressed data from the file, but
- * got enough compressed data to decompress the
- * last packet of the file.
- */
- if (*err == 0)
- *err = file_error(fth->fh, err_info);
- return FALSE; /* failure */
- }
-
-#if 0
- /*
- * It makes no sense for the captured data length to be bigger
- * than the actual data length.
- */
- if (wth->phdr.caplen > wth->phdr.len)
- wth->phdr.caplen = wth->phdr.len;
-
- /*
- * Make sure that it's not FTAP_ENCAP_PER_RECORD, as that
- * probably means the file has that encapsulation type
- * but the read routine didn't set this packet's
- * encapsulation type.
- */
- g_assert(wth->phdr.pkt_encap != FTAP_ENCAP_PER_RECORD);
-
-#endif
- return TRUE; /* success */
-}
-
-/*
- * Read packet data into a Buffer, growing the buffer as necessary.
- *
- * This returns an error on a short read, even if the short read hit
- * the EOF immediately. (The assumption is that each packet has a
- * header followed by raw packet data, and that we've already read the
- * header, so if we get an EOF trying to read the packet data, the file
- * has been cut short, even if the read didn't read any data at all.)
- */
-gboolean
-ftap_read_packet_bytes(FILE_F fh, Buffer *buf, guint length, int *err,
- gchar **err_info)
-{
- int bytes_read;
-
- ws_buffer_assure_space(buf, length);
- errno = FTAP_ERR_CANT_READ;
- bytes_read = file_read(ws_buffer_start_ptr(buf), length, fh);
-
- if (bytes_read < 0 || (guint)bytes_read != length) {
- *err = file_error(fh, err_info);
- if (*err == 0)
- *err = FTAP_ERR_SHORT_READ;
- return FALSE;
- }
- return TRUE;
-}
-
-/*
- * Return an approximation of the amount of data we've read sequentially
- * from the file so far. (gint64, in case that's 64 bits.)
- */
-gint64
-ftap_read_so_far(ftap *fth)
-{
- return file_tell_raw(fth->fh);
-}
-
-#if 0
-struct wtap_pkthdr *
-wtap_phdr(wtap *wth)
-{
- return &wth->phdr;
-}
-
-guint8 *
-wtap_buf_ptr(wtap *wth)
-{
- return ws_buffer_start_ptr(wth->frame_buffer);
-}
-#endif
-
-gboolean
-ftap_seek_read(ftap *fth, gint64 seek_off,
- Buffer *buf, int len,
- int *err, gchar **err_info)
-{
- return fth->subtype_seek_read(fth, seek_off, buf, len,
- err, err_info);
-}
diff --git a/filetap/ftap.h b/filetap/ftap.h
deleted file mode 100644
index c31f7d3225..0000000000
--- a/filetap/ftap.h
+++ /dev/null
@@ -1,388 +0,0 @@
-/* ftap.h
- *
- * Filetap Library
- * Copyright (c) 1998 by Gilbert Ramirez <gram@alumni.rice.edu>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#ifndef __FTAP_H__
-#define __FTAP_H__
-
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-
-#include <glib.h>
-#include <time.h>
-#include <wsutil/buffer.h>
-#include <wsutil/nstime.h>
-#include "ws_symbol_export.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-/* Encapsulation types. Choose names that truly reflect
- * what is contained in the packet trace file.
- *
- * FTAP_ENCAP_PER_RECORD is a value passed to "ftap_dump_open()" or
- * "ftap_dump_fd_open()" to indicate that there is no single encapsulation
- * type for all records in the file; this may cause those routines to
- * fail if the file format being written can't support that.
- * It's also returned by "ftap_file_encap()" for capture files that
- * don't have a single encapsulation type for all packets in the file.
- *
- * FTAP_ENCAP_UNKNOWN is returned by "ftap_pcap_encap_to_ftap_encap()"
- * if it's handed an unknown encapsulation.
- *
- */
-#define FTAP_ENCAP_PER_RECORD -1
-#define FTAP_ENCAP_UNKNOWN 0
-
- /* After adding new item here, please also add new item to encap_table_base array */
-
-#define FTAP_NUM_ENCAP_TYPES ftap_get_num_encap_types()
-
-/* File types/subtypes that can be read by filetap. */
-#define FTAP_FILE_TYPE_SUBTYPE_UNKNOWN 0
-
-#define FTAP_NUM_FILE_TYPES_SUBTYPES ftap_get_num_file_types_subtypes()
-
-/*
- * Maximum record size we'll support.
- * 65535 is the largest snapshot length that libpcap supports, so we
- * use that.
- */
-#define FTAP_MAX_RECORD_SIZE 65535
-
-typedef struct ftap ftap;
-typedef struct ftap_dumper ftap_dumper;
-
-typedef struct ftap_reader *FILE_F;
-
-/*
- * For registering extensions used for capture file formats.
- *
- * These items are used in dialogs for opening files, so that
- * the user can ask to see all capture files (as identified
- * by file extension) or particular types of capture files.
- *
- * Each file type has a description and a list of extensions the file
- * might have. Some file types aren't real file types, they're
- * just generic types, such as "text file" or "XML file", that can
- * be used for, among other things, captures we can read, or for
- * extensions such as ".cap" that were unimaginatively chosen by
- * several different sniffers for their file formats.
- */
-struct filetap_extension_info {
- /* the file type name */
- const char *name;
-
- /* a semicolon-separated list of file extensions used for this type */
- const char *extensions;
-};
-
-/*
- * For registering file types that we can open.
- *
- * Each file type has an open routine and an optional list of extensions
- * the file might have.
- *
- * The open routine should return:
- *
- * -1 on an I/O error;
- *
- * 1 if the file it's reading is one of the types it handles;
- *
- * 0 if the file it's reading isn't the type it handles.
- *
- * If the routine handles this type of file, it should set the "file_type"
- * field in the "struct ftap" to the type of the file.
- *
- * Note that the routine does not have to free the private data pointer on
- * error. The caller takes care of that by calling ftap_close on error.
- * (See https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=8518)
- *
- * However, the caller does have to free the private data pointer when
- * returning 0, since the next file type will be called and will likely
- * just overwrite the pointer.
- */
-
-/*
- * Some file formats have defined magic numbers at fixed offsets from
- * the beginning of the file; those routines should return 1 if and
- * only if the file has the magic number at that offset. (pcap-ng
- * is a bit of a special case, as it has both the Section Header Block
- * type field and its byte-order magic field; it checks for both.)
- * Those file formats do not require a file name extension in order
- * to recognize them or to avoid recognizing other file types as that
- * type, and have no extensions specified for them.
- */
-typedef int (*ftap_open_routine_t)(struct ftap*, int *, char **);
-
-/*
- * Some file formats don't have defined magic numbers at fixed offsets,
- * so a heuristic is required. If that file format has any file name
- * extensions used for it, a list of those extensions should be
- * specified, so that, if the name of the file being opened has an
- * extension, the file formats that use that extension are tried before
- * the ones that don't, to handle the case where a file of one type
- * might be recognized by the heuristics for a different file type.
- */
-struct ftap_heuristic_open_info {
- ftap_open_routine_t open_routine;
- const char *extensions;
- gchar **extensions_set; /* populated using extensions member during initialization */
-};
-
-struct ftap_file_type_subtype_info {
- /* the file type name */
- /* should be NULL for all "pseudo" types that are only internally used and not read/writeable */
- const char *name;
-
- /* the file type short name, used as a shortcut for the command line tools */
- /* should be NULL for all "pseudo" types that are only internally used and not read/writeable */
- const char *short_name;
-
- /* the default file extension, used to save this type */
- /* should be NULL if no default extension is known */
- const char *default_file_extension;
-
- /* a semicolon-separated list of additional file extensions */
- /* used for this type */
- /* should be NULL if no extensions, or no extensions other */
- /* than the default extension, are known */
- const char *additional_file_extensions;
-};
-
-
-/** On failure, "ftap_open_offline()" returns NULL, and puts into the
- * "int" pointed to by its second argument:
- *
- * @param filename Name of the file to open
- * @param err a positive "errno" value if the capture file can't be opened;
- * a negative number, indicating the type of error, on other failures.
- * @param err_info for some errors, a string giving more details of
- * the error
- * @param do_random TRUE if random access to the file will be done,
- * FALSE if not
- */
-WS_DLL_PUBLIC
-struct ftap* ftap_open_offline(const char *filename, int *err,
- gchar **err_info, gboolean do_random);
-
-/**
- * If we were compiled with zlib and we're at EOF, unset EOF so that
- * ftap_read/gzread has a chance to succeed. This is necessary if
- * we're tailing a file.
- */
-WS_DLL_PUBLIC
-void ftap_cleareof(ftap *fth);
-
-/** Returns TRUE if read was successful. FALSE if failure. data_offset is
- * set to the offset in the file where the data for the read packet is
- * located. */
-WS_DLL_PUBLIC
-gboolean ftap_read(ftap *fth, int *err, gchar **err_info,
- gint64 *data_offset);
-
-WS_DLL_PUBLIC
-gboolean ftap_seek_read (ftap *fth, gint64 seek_off,
- Buffer *buf, int len,
- int *err, gchar **err_info);
-
-/*** get various information snippets about the current file ***/
-
-/** Return an approximation of the amount of data we've read sequentially
- * from the file so far. */
-WS_DLL_PUBLIC
-gint64 ftap_read_so_far(ftap *fth);
-WS_DLL_PUBLIC
-gint64 ftap_file_size(ftap *fth, int *err);
-WS_DLL_PUBLIC
-gboolean ftap_iscompressed(ftap *fth);
-WS_DLL_PUBLIC
-guint ftap_snapshot_length(ftap *fth); /* per file */
-WS_DLL_PUBLIC
-int ftap_file_type_subtype(ftap *fth);
-WS_DLL_PUBLIC
-int ftap_file_encap(ftap *fth);
-
-/*** close the file descriptors for the current file ***/
-WS_DLL_PUBLIC
-void ftap_fdclose(ftap *fth);
-
-/*** reopen the random file descriptor for the current file ***/
-WS_DLL_PUBLIC
-gboolean ftap_fdreopen(ftap *fth, const char *filename, int *err);
-
-/*** close the current file ***/
-WS_DLL_PUBLIC
-void ftap_sequential_close(ftap *fth);
-WS_DLL_PUBLIC
-void ftap_close(ftap *fth);
-
-/*** various string converter functions ***/
-WS_DLL_PUBLIC
-const char *ftap_file_type_subtype_string(int file_type_subtype);
-WS_DLL_PUBLIC
-const char *ftap_file_type_subtype_short_string(int file_type_subtype);
-WS_DLL_PUBLIC
-int ftap_short_string_to_file_type_subtype(const char *short_name);
-
-/*** various file extension functions ***/
-WS_DLL_PUBLIC
-GSList *ftap_get_all_file_extensions_list(void);
-WS_DLL_PUBLIC
-const char *ftap_default_file_extension(int filetype);
-WS_DLL_PUBLIC
-GSList *ftap_get_file_extensions_list(int filetype, gboolean include_compressed);
-WS_DLL_PUBLIC
-void ftap_free_extensions_list(GSList *extensions);
-
-WS_DLL_PUBLIC
-const char *ftap_encap_string(int encap);
-WS_DLL_PUBLIC
-const char *ftap_encap_short_string(int encap);
-WS_DLL_PUBLIC
-int ftap_short_string_to_encap(const char *short_name);
-
-WS_DLL_PUBLIC
-const char *ftap_strerror(int err);
-
-/*** get available number of file types and encapsulations ***/
-WS_DLL_PUBLIC
-int ftap_get_num_file_type_extensions(void);
-WS_DLL_PUBLIC
-int ftap_get_num_encap_types(void);
-WS_DLL_PUBLIC
-int ftap_get_num_file_types_subtypes(void);
-
-/*** get information for file type extension ***/
-WS_DLL_PUBLIC
-const char *ftap_get_file_extension_type_name(int extension_type);
-WS_DLL_PUBLIC
-GSList *ftap_get_file_extension_type_extensions(guint extension_type);
-
-/*** dynamically register new file types and encapsulations ***/
-WS_DLL_PUBLIC
-void ftap_register_plugin_types(void);
-WS_DLL_PUBLIC
-void register_all_filetap_modules(void);
-WS_DLL_PUBLIC
-void ftap_register_file_type_extension(const struct filetap_extension_info *ei);
-WS_DLL_PUBLIC
-void ftap_register_magic_number_open_routine(ftap_open_routine_t open_routine);
-WS_DLL_PUBLIC
-void ftap_register_heuristic_open_info(struct ftap_heuristic_open_info *oi);
-WS_DLL_PUBLIC
-int ftap_register_file_type_subtypes(const struct ftap_file_type_subtype_info* fi);
-WS_DLL_PUBLIC
-int ftap_register_encap_type(const char* name, const char* short_name);
-
-
-/**
- * Filetap error codes.
- */
-#define FTAP_ERR_NOT_REGULAR_FILE -1
- /** The file being opened for reading isn't a plain file (or pipe) */
-
-#define FTAP_ERR_RANDOM_OPEN_PIPE -2
- /** The file is being opened for random access and it's a pipe */
-
-#define FTAP_ERR_FILE_UNKNOWN_FORMAT -3
- /** The file being opened is not a capture file in a known format */
-
-#define FTAP_ERR_UNSUPPORTED -4
- /** Supported file type, but there's something in the file we
- can't support */
-
-#define FTAP_ERR_CANT_WRITE_TO_PIPE -5
- /** Filetap can't save to a pipe in the specified format */
-
-#define FTAP_ERR_CANT_OPEN -6
- /** The file couldn't be opened, reason unknown */
-
-#define FTAP_ERR_UNSUPPORTED_FILE_TYPE -7
- /** Filetap can't save files in the specified format */
-
-#define FTAP_ERR_UNSUPPORTED_ENCAP -8
- /** Filetap can't read or save files in the specified format with the
- specified encapsulation */
-
-#define FTAP_ERR_ENCAP_PER_RECORD_UNSUPPORTED -9
- /** The specified format doesn't support per-packet encapsulations */
-
-#define FTAP_ERR_CANT_CLOSE -10
- /** The file couldn't be closed, reason unknown */
-
-#define FTAP_ERR_CANT_READ -11
- /** An attempt to read failed, reason unknown */
-
-#define FTAP_ERR_SHORT_READ -12
- /** An attempt to read read less data than it should have */
-
-#define FTAP_ERR_BAD_FILE -13
- /** The file appears to be damaged or corrupted or otherwise bogus */
-
-#define FTAP_ERR_SHORT_WRITE -14
- /** An attempt to write wrote less data than it should have */
-
-#define FTAP_ERR_UNC_TRUNCATED -15
- /** Compressed data was oddly truncated */
-
-#define FTAP_ERR_UNC_OVERFLOW -16
- /** Uncompressing data would overflow buffer */
-
-#define FTAP_ERR_UNC_BAD_OFFSET -17
- /** LZ77 compressed data has bad offset to string */
-
-#define FTAP_ERR_RANDOM_OPEN_STDIN -18
- /** We're trying to open the standard input for random access */
-
-#define FTAP_ERR_COMPRESSION_NOT_SUPPORTED -19
- /* The filetype doesn't support output compression */
-
-#define FTAP_ERR_CANT_SEEK -20
- /** An attempt to seek failed, reason unknown */
-
-#define FTAP_ERR_CANT_SEEK_COMPRESSED -21
- /** An attempt to seek on a compressed stream */
-
-#define FTAP_ERR_DECOMPRESS -22
- /** Error decompressing */
-
-#define FTAP_ERR_INTERNAL -23
- /** "Shouldn't happen" internal errors */
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* __FTAP_H__ */
-
-/*
- * Editor modelines - http://www.wireshark.org/tools/modelines.html
- *
- * Local variables:
- * c-basic-offset: 4
- * tab-width: 8
- * indent-tabs-mode: nil
- * End:
- *
- * vi: set shiftwidth=4 tabstop=8 expandtab:
- * :indentSize=4:tabSize=8:noTabs=true:
- */
diff --git a/image/Makefile.nmake b/image/Makefile.nmake
index 96d832e2fd..0cb78774f2 100644
--- a/image/Makefile.nmake
+++ b/image/Makefile.nmake
@@ -4,7 +4,7 @@ include ..\config.nmake
# Nmake uses an implicit rule to build a .res from a .rc file!
-ALL_RC=wireshark.rc libwireshark.rc tshark.rc tfshark.rc rawshark.rc capinfos.rc captype.rc editcap.rc text2pcap.rc mergecap.rc reordercap.rc filetap.rc wiretap.rc dumpcap.rc libwsutil.rc wireshark.exe.manifest
+ALL_RC=wireshark.rc libwireshark.rc tshark.rc tfshark.rc rawshark.rc capinfos.rc captype.rc editcap.rc text2pcap.rc mergecap.rc reordercap.rc wiretap.rc dumpcap.rc libwsutil.rc wireshark.exe.manifest
all : $(ALL_RC)
wireshark.exe.manifest: wireshark.exe.manifest.in ..\config.nmake
@@ -69,11 +69,6 @@ text2pcap.rc : text2pcap.rc.in ..\config.nmake
-e s/@RC_VERSION@/$(RC_VERSION)/ \
< text2pcap.rc.in > $@
-filetap.rc : filetap.rc.in ..\config.nmake
- sed -e s/@VERSION@/$(FTAP_VERSION)/ \
- -e s/@RC_VERSION@/$(RC_FTAP_VERSION)/ \
- < filetap.rc.in > $@
-
wiretap.rc : wiretap.rc.in ..\config.nmake
sed -e s/@VERSION@/$(WTAP_VERSION)/ \
-e s/@RC_VERSION@/$(RC_WTAP_VERSION)/ \
diff --git a/image/filetap.rc.in b/image/filetap.rc.in
deleted file mode 100644
index 189dc30aa6..0000000000
--- a/image/filetap.rc.in
+++ /dev/null
@@ -1,34 +0,0 @@
-#include "winver.h"
-
-VS_VERSION_INFO VERSIONINFO
- FILEVERSION @RC_VERSION@
- PRODUCTVERSION @RC_VERSION@
- FILEFLAGSMASK 0x0L
-#ifdef _DEBUG
- FILEFLAGS VS_FF_DEBUG
-#else
- FILEFLAGS 0x0L
-#endif
- FILEOS VOS_NT_WINDOWS32
- FILETYPE VFT_DLL
- FILESUBTYPE 0x0L
-BEGIN
- BLOCK "StringFileInfo"
- BEGIN
- BLOCK "040904b0"
- BEGIN
- VALUE "CompanyName", "The Wireshark developer community, http://www.wireshark.org/\0"
- VALUE "FileDescription", "Wireshark filetap library\0"
- VALUE "FileVersion", "@VERSION@\0"
- VALUE "InternalName", "filetap @VERSION@\0"
- VALUE "LegalCopyright", "Copyright © 2000 Gerald Combs <gerald@wireshark.org>, Gilbert Ramirez <gram@alumni.rice.edu> and others\0"
- VALUE "OriginalFilename", "filetap-@VERSION@.dll\0"
- VALUE "ProductName", "Wireshark\0"
- VALUE "ProductVersion", "@VERSION@\0"
- END
- END
- BLOCK "VarFileInfo"
- BEGIN
- VALUE "Translation", 0x409, 1200
- END
-END
diff --git a/make-version.pl b/make-version.pl
index cd0c926506..16257238f9 100755
--- a/make-version.pl
+++ b/make-version.pl
@@ -509,7 +509,7 @@ sub update_debian_wcf
while ($line = <DWCF>) {
# /usr/lib/wireshark/libwireshark.so.1.1.0
- if ($line =~ qr{^(/usr/lib/wireshark/lib(wireshark|wiretap|filetap).so\.\d+\.\d+\.)\d+$}) {
+ if ($line =~ qr{^(/usr/lib/wireshark/lib(wireshark|wiretap).so\.\d+\.\d+\.)\d+$}) {
$line = sprintf("$1%d\n", $version_pref{"version_micro"});
}
$contents .= $line
@@ -536,10 +536,10 @@ sub update_lib_releases
# "If the library source code has changed at all since the last
# update, then increment revision (‘c:r:a’ becomes ‘c:r+1:a’)."
# epan changes with each minor release, almost by definition. wiretap
- # and filetap changes with *most* releases.
+ # changes with *most* releases.
#
# http://www.gnu.org/software/libtool/manual/libtool.html#Updating-version-info
- for $filedir ("epan", "wiretap", "filetap") { # "wsutil"
+ for $filedir ("epan", "wiretap") { # "wsutil"
$contents = "";
$filepath = $filedir . "/Makefile.am";
open(MAKEFILE_AM, "< $filepath") || die "Can't read $filepath!";
diff --git a/tfshark.c b/tfshark.c
index a3a0a0c0e4..8a266b5c9a 100644
--- a/tfshark.c
+++ b/tfshark.c
@@ -95,7 +95,6 @@
#include <epan/stat_cmd_args.h>
#include <epan/timestamp.h>
#include <epan/ex-opt.h>
-#include <filetap/ftap.h>
#include <wiretap/wtap-int.h>
#include <wiretap/file_wrappers.h>
@@ -947,15 +946,11 @@ main(int argc, char *argv[])
#ifdef HAVE_PLUGINS
/* Register all the plugin types we have. */
epan_register_plugin_types(); /* Types known to libwireshark */
- ftap_register_plugin_types(); /* Types known to libfiletap */
/* Scan for plugins. This does *not* call their registration routines;
that's done later. */
scan_plugins();
- /* Register all libfiletap plugin modules. */
- register_all_filetap_modules();
-
#endif
/* Register all dissectors; we must do this before checking for the
@@ -1184,7 +1179,7 @@ main(int argc, char *argv[])
rfilter = optarg;
break;
case 'S': /* Set the line Separator to be printed between packets */
- separator = strdup(optarg);
+ separator = g_strdup(optarg);
break;
case 't': /* Time stamp type */
if (strcmp(optarg, "r") == 0)
@@ -1716,14 +1711,15 @@ process_packet_second_pass(capture_file *cf, epan_dissect_t *edt, frame_data *fd
}
gboolean
-local_wtap_read(capture_file *cf, struct wtap_pkthdr* file_phdr, int *err, gchar **err_info, gint64 *data_offset _U_, guint8** data_buffer)
+local_wtap_read(capture_file *cf, struct wtap_pkthdr* file_phdr _U_, int *err, gchar **err_info _U_, gint64 *data_offset _U_, guint8** data_buffer)
{
- int bytes_read;
+ /* int bytes_read; */
gint64 packet_size = wtap_file_size(cf->wth, err);
*data_buffer = (guint8*)g_malloc((gsize)packet_size);
- bytes_read = file_read(*data_buffer, (unsigned int)packet_size, cf->wth->fh);
+ /* bytes_read =*/ file_read(*data_buffer, (unsigned int)packet_size, cf->wth->fh);
+#if 0 /* no more filetap */
if (bytes_read < 0) {
*err = file_error(cf->wth->fh, err_info);
if (*err == 0)
@@ -1739,7 +1735,6 @@ local_wtap_read(capture_file *cf, struct wtap_pkthdr* file_phdr, int *err, gchar
file_phdr->caplen = (guint32)packet_size;
file_phdr->len = (guint32)packet_size;
-#if 0
/*
* Set the packet encapsulation to the file's encapsulation
* value; if that's not WTAP_ENCAP_PER_PACKET, it's the
@@ -1972,6 +1967,7 @@ load_cap_file(capture_file *cf, int max_packet_count, gint64 max_byte_count)
}
}
#endif
+#if 0
switch (err) {
case FTAP_ERR_UNSUPPORTED:
@@ -2012,6 +2008,7 @@ load_cap_file(capture_file *cf, int max_packet_count, gint64 max_byte_count)
cf->filename, ftap_strerror(err));
break;
}
+#endif
} else {
if (print_packet_info) {
if (!write_finale()) {
@@ -2537,35 +2534,16 @@ write_finale(void)
cf_status_t
cf_open(capture_file *cf, const char *fname, unsigned int type, gboolean is_tempfile, int *err)
{
-#if USE_FTAP
- ftap *fth;
-#else
- wtap *wth;
-#endif
gchar *err_info;
char err_msg[2048+1];
-#if USE_FTAP
- fth = ftap_open_offline(fname, err, &err_info, perform_two_pass_analysis);
- if (fth == NULL)
- goto fail;
-#else
- wth = wtap_open_offline(fname, type, err, &err_info, perform_two_pass_analysis);
- if (wth == NULL)
- goto fail;
-#endif
-
- /* The open succeeded. Fill in the information for this file. */
+ /* The open isn't implemented yet. Fill in the information for this file. */
/* Create new epan session for dissection. */
epan_free(cf->epan);
cf->epan = tfshark_epan_new(cf);
-#if USE_FTAP
- cf->wth = (struct wtap*)fth; /**** XXX - DOESN'T WORK RIGHT NOW!!!! */
-#else
- cf->wth = wth;
-#endif
+ cf->wth = NULL; /**** XXX - DOESN'T WORK RIGHT NOW!!!! */
cf->f_datalen = 0; /* not used, but set it anyway */
/* Set the file name because we need it to set the follow stream filter.
@@ -2579,16 +2557,16 @@ cf_open(capture_file *cf, const char *fname, unsigned int type, gboolean is_temp
/* No user changes yet. */
cf->unsaved_changes = FALSE;
- cf->cd_t = ftap_file_type_subtype((struct ftap*)cf->wth); /**** XXX - DOESN'T WORK RIGHT NOW!!!! */
+ cf->cd_t = 0; /**** XXX - DOESN'T WORK RIGHT NOW!!!! */
cf->open_type = type;
cf->count = 0;
cf->drops_known = FALSE;
cf->drops = 0;
- cf->snap = ftap_snapshot_length((struct ftap*)cf->wth); /**** XXX - DOESN'T WORK RIGHT NOW!!!! */
+ cf->snap = 0; /**** XXX - DOESN'T WORK RIGHT NOW!!!! */
if (cf->snap == 0) {
/* Snapshot length not known. */
cf->has_snap = FALSE;
- cf->snap = FTAP_MAX_RECORD_SIZE;
+ cf->snap = 0;
} else
cf->has_snap = TRUE;
nstime_set_zero(&cf->elapsed_time);
@@ -2600,7 +2578,7 @@ cf_open(capture_file *cf, const char *fname, unsigned int type, gboolean is_temp
return CF_OK;
-fail:
+/* fail: */
g_snprintf(err_msg, sizeof err_msg,
cf_open_error_message(*err, err_info, FALSE, cf->cd_t), fname);
cmdarg_err("%s", err_msg);
@@ -2632,14 +2610,15 @@ show_print_file_io_error(int err)
}
static const char *
-cf_open_error_message(int err, gchar *err_info, gboolean for_writing,
- int file_type)
+cf_open_error_message(int err, gchar *err_info _U_, gboolean for_writing,
+ int file_type _U_)
{
const char *errmsg;
- static char errmsg_errno[1024+1];
+ /* static char errmsg_errno[1024+1]; */
if (err < 0) {
/* Wiretap error. */
+#if 0
switch (err) {
case FTAP_ERR_NOT_REGULAR_FILE:
@@ -2748,6 +2727,7 @@ cf_open_error_message(int err, gchar *err_info, gboolean for_writing,
errmsg = errmsg_errno;
break;
}
+#endif
} else
errmsg = file_open_error_message(err, for_writing);
return errmsg;