aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--caputils/capture-pcap-util-unix.c92
-rw-r--r--caputils/capture-pcap-util.c91
-rw-r--r--caputils/capture-wpcap.c123
-rw-r--r--cmake/modules/FindPCAP.cmake72
-rw-r--r--tools/win-setup.ps18
5 files changed, 228 insertions, 158 deletions
diff --git a/caputils/capture-pcap-util-unix.c b/caputils/capture-pcap-util-unix.c
index e963f3de60..936de1ce50 100644
--- a/caputils/capture-pcap-util-unix.c
+++ b/caputils/capture-pcap-util-unix.c
@@ -18,10 +18,6 @@
#include "wspcap.h"
-#ifdef __APPLE__
-#include <dlfcn.h>
-#endif
-
#ifdef HAVE_LIBCAP
# include <sys/capability.h>
#endif
@@ -57,94 +53,6 @@ cant_get_if_list_error_message(const char *err_str)
return g_strdup_printf("Can't get list of interfaces: %s", err_str);
}
-#ifdef HAVE_PCAP_SET_TSTAMP_PRECISION
-/*
- * Request high-resolution time stamps.
- *
- * We don't check for errors - if this fails, we just live with boring old
- * microsecond-resolution time stamps. The only errors pcap_set_tstamp_precision()
- * is documenting as returning are PCAP_ERROR_TSTAMP_PRECISION_NOTSUP, which just
- * means we can't do nanosecond precision on this adapter, in which case we
- * just live with whatever resolution we get by default, and
- * PCAP_ERROR_ACTIVATED, which shouldn't happen as we shouldn't call this
- * after we've activated the pcap_t.
- */
-void
-request_high_resolution_timestamp(pcap_t *pcap_h)
-{
-#ifdef __APPLE__
- /*
- * On macOS, if you build with a newer SDK, pcap_set_tstamp_precision()
- * is available, so the code will be built with it.
- *
- * However, if you then try to run on an older release that
- * doesn't have pcap_set_tstamp_precision(), the dynamic linker
- * will fail, as it won't find pcap_set_tstamp_precision().
- *
- * libpcap doesn't use macOS "weak linking" for new routines,
- * so we can't just check whether a pointer to
- * pcap_set_tstamp_precision() is null and, if it is, not
- * call it. We have to, instead, use dlopen() to load
- * libpcap, and dlsym() to find a pointer to pcap_set_tstamp_precision(),
- * and if we find the pointer, call it.
- */
- static gboolean initialized = FALSE;
- static int (*p_pcap_set_tstamp_precision)(pcap_t *, int);
-
- if (!initialized) {
- p_pcap_set_tstamp_precision =
- (int (*)(pcap_t *, int))
- dlsym(RTLD_NEXT, "pcap_set_tstamp_precision");
- initialized = TRUE;
- }
- if (p_pcap_set_tstamp_precision != NULL)
- (*p_pcap_set_tstamp_precision)(pcap_h, PCAP_TSTAMP_PRECISION_NANO);
-#else /* __APPLE__ */
- /*
- * On other UN*Xes we require that we be run on an OS version
- * with a libpcap equal to or later than the version with which
- * we were built.
- */
- pcap_set_tstamp_precision(pcap_h, PCAP_TSTAMP_PRECISION_NANO);
-#endif /* __APPLE__ */
-}
-
-/*
- * Return TRUE if the pcap_t in question is set up for high-precision
- * time stamps, FALSE otherwise.
- */
-gboolean
-have_high_resolution_timestamp(pcap_t *pcap_h)
-{
-#ifdef __APPLE__
- /*
- * See above.
- */
- static gboolean initialized = FALSE;
- static int (*p_pcap_get_tstamp_precision)(pcap_t *);
-
- if (!initialized) {
- p_pcap_get_tstamp_precision =
- (int (*)(pcap_t *))
- dlsym(RTLD_NEXT, "pcap_get_tstamp_precision");
- initialized = TRUE;
- }
- if (p_pcap_get_tstamp_precision != NULL)
- return (*p_pcap_get_tstamp_precision)(pcap_h) == PCAP_TSTAMP_PRECISION_NANO;
- else
- return FALSE; /* Can't get implies couldn't set */
-#else /* __APPLE__ */
- /*
- * On other UN*Xes we require that we be run on an OS version
- * with a libpcap equal to or later than the version with which
- * we were built.
- */
- return pcap_get_tstamp_precision(pcap_h) == PCAP_TSTAMP_PRECISION_NANO;
-#endif /* __APPLE__ */
-}
-
-#endif /* HAVE_PCAP_SET_TSTAMP_PRECISION */
-
if_capabilities_t *
get_if_capabilities_local(interface_options *interface_opts,
cap_device_open_err *err, char **err_str)
diff --git a/caputils/capture-pcap-util.c b/caputils/capture-pcap-util.c
index 6b16ddceca..7abe416557 100644
--- a/caputils/capture-pcap-util.c
+++ b/caputils/capture-pcap-util.c
@@ -25,6 +25,10 @@
#include <sys/socket.h>
#endif
+#ifdef __APPLE__
+#include <dlfcn.h>
+#endif
+
#include "ws_attributes.h"
/*
@@ -1032,6 +1036,93 @@ get_pcap_timestamp_types(pcap_t *pch _U_, char **err_str _U_)
return list;
}
+#ifdef HAVE_PCAP_SET_TSTAMP_PRECISION
+/*
+ * Request high-resolution time stamps.
+ *
+ * We don't check for errors - if this fails, we just live with boring old
+ * microsecond-resolution time stamps. The only errors pcap_set_tstamp_precision()
+ * is documenting as returning are PCAP_ERROR_TSTAMP_PRECISION_NOTSUP, which just
+ * means we can't do nanosecond precision on this adapter, in which case we
+ * just live with whatever resolution we get by default, and
+ * PCAP_ERROR_ACTIVATED, which shouldn't happen as we shouldn't call this
+ * after we've activated the pcap_t.
+ */
+void
+request_high_resolution_timestamp(pcap_t *pcap_h)
+{
+#ifdef __APPLE__
+ /*
+ * On macOS, if you build with a newer SDK, pcap_set_tstamp_precision()
+ * is available, so the code will be built with it.
+ *
+ * However, if you then try to run on an older release that
+ * doesn't have pcap_set_tstamp_precision(), the dynamic linker
+ * will fail, as it won't find pcap_set_tstamp_precision().
+ *
+ * libpcap doesn't use macOS "weak linking" for new routines,
+ * so we can't just check whether a pointer to
+ * pcap_set_tstamp_precision() is null and, if it is, not
+ * call it. We have to, instead, use dlopen() to load
+ * libpcap, and dlsym() to find a pointer to pcap_set_tstamp_precision(),
+ * and if we find the pointer, call it.
+ */
+ static gboolean initialized = FALSE;
+ static int (*p_pcap_set_tstamp_precision)(pcap_t *, int);
+
+ if (!initialized) {
+ p_pcap_set_tstamp_precision =
+ (int (*)(pcap_t *, int))
+ dlsym(RTLD_NEXT, "pcap_set_tstamp_precision");
+ initialized = TRUE;
+ }
+ if (p_pcap_set_tstamp_precision != NULL)
+ (*p_pcap_set_tstamp_precision)(pcap_h, PCAP_TSTAMP_PRECISION_NANO);
+#else /* __APPLE__ */
+ /*
+ * On other UN*Xes we require that we be run on an OS version
+ * with a libpcap equal to or later than the version with which
+ * we were built.
+ */
+ pcap_set_tstamp_precision(pcap_h, PCAP_TSTAMP_PRECISION_NANO);
+#endif /* __APPLE__ */
+}
+
+/*
+ * Return TRUE if the pcap_t in question is set up for high-precision
+ * time stamps, FALSE otherwise.
+ */
+gboolean
+have_high_resolution_timestamp(pcap_t *pcap_h)
+{
+#ifdef __APPLE__
+ /*
+ * See above.
+ */
+ static gboolean initialized = FALSE;
+ static int (*p_pcap_get_tstamp_precision)(pcap_t *);
+
+ if (!initialized) {
+ p_pcap_get_tstamp_precision =
+ (int (*)(pcap_t *))
+ dlsym(RTLD_NEXT, "pcap_get_tstamp_precision");
+ initialized = TRUE;
+ }
+ if (p_pcap_get_tstamp_precision != NULL)
+ return (*p_pcap_get_tstamp_precision)(pcap_h) == PCAP_TSTAMP_PRECISION_NANO;
+ else
+ return FALSE; /* Can't get implies couldn't set */
+#else /* __APPLE__ */
+ /*
+ * On other UN*Xes we require that we be run on an OS version
+ * with a libpcap equal to or later than the version with which
+ * we were built.
+ */
+ return pcap_get_tstamp_precision(pcap_h) == PCAP_TSTAMP_PRECISION_NANO;
+#endif /* __APPLE__ */
+}
+
+#endif /* HAVE_PCAP_SET_TSTAMP_PRECISION */
#ifdef HAVE_PCAP_CREATE
#ifdef HAVE_BONDING
diff --git a/caputils/capture-wpcap.c b/caputils/capture-wpcap.c
index f34ea537e0..064b939ba3 100644
--- a/caputils/capture-wpcap.c
+++ b/caputils/capture-wpcap.c
@@ -46,7 +46,6 @@ gboolean has_wpcap = FALSE;
* for using Wireshark?
*/
-static char* (*p_pcap_lookupdev) (char *);
static void (*p_pcap_close) (pcap_t *);
static int (*p_pcap_stats) (pcap_t *, struct pcap_stat *);
static int (*p_pcap_dispatch) (pcap_t *, int, pcap_handler, guchar *);
@@ -76,7 +75,7 @@ static int (*p_pcap_next_ex) (pcap_t *, struct pcap_pkthdr **pkt_header, con
#ifdef HAVE_PCAP_REMOTE
static pcap_t* (*p_pcap_open) (const char *, int, int, int,
struct pcap_rmtauth *, char *);
-static int (*p_pcap_findalldevs_ex) (char *, struct pcap_rmtauth *,
+static int (*p_pcap_findalldevs_ex) (const char *, struct pcap_rmtauth *,
pcap_if_t **, char *);
static int (*p_pcap_createsrcstr) (char *, int, const char *, const char *,
const char *, char *);
@@ -106,6 +105,17 @@ static int (*p_pcap_activate)(pcap_t *);
static const char *(*p_pcap_statustostr)(int);
#endif
+#ifdef HAVE_PCAP_SET_TSTAMP_TYPE
+static int (*p_pcap_set_tstamp_type)(pcap_t *, int);
+static int (*p_pcap_set_tstamp_precision)(pcap_t *, int);
+static int (*p_pcap_get_tstamp_precision)(pcap_t *);
+static int (*p_pcap_list_tstamp_types)(pcap_t *, int **);
+static void (*p_pcap_free_tstamp_types)(int *);
+static int (*p_pcap_tstamp_type_name_to_val)(const char *);
+static const char * (*p_pcap_tstamp_type_val_to_name)(int);
+static const char * (*p_pcap_tstamp_type_val_to_description)(int);
+#endif
+
typedef struct {
const char *name;
gpointer *ptr;
@@ -120,7 +130,6 @@ load_wpcap(void)
/* These are the symbols I need or want from Wpcap */
static const symbol_table_t symbols[] = {
- SYM(pcap_lookupdev, FALSE),
SYM(pcap_close, FALSE),
SYM(pcap_stats, FALSE),
SYM(pcap_dispatch, FALSE),
@@ -169,6 +178,16 @@ load_wpcap(void)
SYM(pcap_activate, TRUE),
SYM(pcap_statustostr, TRUE),
#endif
+#ifdef HAVE_PCAP_SET_TSTAMP_TYPE
+ SYM(pcap_set_tstamp_type, TRUE),
+ SYM(pcap_set_tstamp_precision, TRUE),
+ SYM(pcap_get_tstamp_precision, TRUE),
+ SYM(pcap_list_tstamp_types, TRUE),
+ SYM(pcap_free_tstamp_types, TRUE),
+ SYM(pcap_tstamp_type_name_to_val, TRUE),
+ SYM(pcap_tstamp_type_val_to_name, TRUE),
+ SYM(pcap_tstamp_type_val_to_description, TRUE),
+#endif
{ NULL, NULL, FALSE }
};
@@ -261,19 +280,6 @@ cant_load_winpcap_err(const char *app_name)
app_name);
}
-char*
-pcap_lookupdev(char *errbuf)
-{
- char *ret;
- if (!has_wpcap) {
- return NULL;
- }
- ret = p_pcap_lookupdev(errbuf);
- if (ret == NULL)
- convert_errbuf_to_utf8(errbuf);
- return ret;
-}
-
void
pcap_close(pcap_t *a)
{
@@ -412,7 +418,7 @@ pcap_open(const char *a, int b, int c, int d, struct pcap_rmtauth *e, char *errb
}
int
-pcap_findalldevs_ex(char *a, struct pcap_rmtauth *b, pcap_if_t **c, char *errbuf)
+pcap_findalldevs_ex(const char *a, struct pcap_rmtauth *b, pcap_if_t **c, char *errbuf)
{
int ret;
g_assert(has_wpcap);
@@ -560,6 +566,81 @@ pcap_statustostr(int a)
}
#endif
+#ifdef HAVE_PCAP_SET_TSTAMP_TYPE
+int
+pcap_set_tstamp_type(pcap_t *a, int b) {
+ g_assert(has_wpcap);
+ if (p_pcap_set_tstamp_type != NULL) {
+ return p_pcap_set_tstamp_type(a, b);
+ }
+ return PCAP_ERROR_CANTSET_TSTAMP_TYPE;
+}
+
+int
+pcap_set_tstamp_precision(pcap_t *a, int b) {
+ g_assert(has_wpcap);
+ if (p_pcap_set_tstamp_precision != NULL) {
+ return p_pcap_set_tstamp_precision(a, b);
+ }
+ // No error code defined so return NOTSUP.
+ return PCAP_ERROR_TSTAMP_PRECISION_NOTSUP;
+}
+
+int
+pcap_get_tstamp_precision(pcap_t *a) {
+ g_assert(has_wpcap);
+ if (p_pcap_get_tstamp_precision != NULL) {
+ return p_pcap_get_tstamp_precision(a);
+ }
+ // No error code defined so return MICRO.
+ return PCAP_TSTAMP_PRECISION_MICRO;
+}
+
+int
+pcap_list_tstamp_types(pcap_t *a, int **b) {
+ g_assert(has_wpcap);
+ if (p_pcap_list_tstamp_types != NULL) {
+ return p_pcap_list_tstamp_types(a, b);
+ }
+ return PCAP_ERROR;
+}
+
+void
+pcap_free_tstamp_types(int *a) {
+ g_assert(has_wpcap);
+ if (p_pcap_free_tstamp_types != NULL) {
+ p_pcap_free_tstamp_types(a);
+ }
+}
+
+int
+pcap_tstamp_type_name_to_val(const char *a) {
+ g_assert(has_wpcap);
+ if (p_pcap_tstamp_type_name_to_val != NULL) {
+ return p_pcap_tstamp_type_name_to_val(a);
+ }
+ return PCAP_ERROR;
+}
+
+const char *
+pcap_tstamp_type_val_to_name(int a) {
+ g_assert(has_wpcap);
+ if (p_pcap_tstamp_type_val_to_name != NULL) {
+ return p_pcap_tstamp_type_val_to_name(a);
+ }
+ return NULL;
+}
+
+const char *
+pcap_tstamp_type_val_to_description(int a) {
+ g_assert(has_wpcap);
+ if (p_pcap_tstamp_type_val_to_description != NULL) {
+ return p_pcap_tstamp_type_val_to_description(a);
+ }
+ return NULL;
+}
+#endif
+
int
pcap_datalink_name_to_val(const char *name)
{
@@ -732,18 +813,12 @@ open_capture_device_local(capture_options *capture_opts,
}
/*
- * Neither WpdPack nor the Npcap SDK as of version 1.01 defines a version
- * string anywhere. Hard-code one for now.
- */
-#define WINPCAP_SDK_VERSION "4.1.2"
-
-/*
* Append the WinPcap or Npcap SDK version with which we were compiled to a GString.
*/
void
get_compiled_caplibs_version(GString *str)
{
- g_string_append(str, "with WinPcap SDK (WpdPack) " WINPCAP_SDK_VERSION);
+ g_string_append(str, "with libpcap");
}
/*
diff --git a/cmake/modules/FindPCAP.cmake b/cmake/modules/FindPCAP.cmake
index 0a3d4de404..75e49449e7 100644
--- a/cmake/modules/FindPCAP.cmake
+++ b/cmake/modules/FindPCAP.cmake
@@ -1,5 +1,5 @@
#
-# - Find pcap and winpcap
+# - Find libpcap
# Find the native PCAP includes and library
#
# PCAP_INCLUDE_DIRS - where to find pcap.h, etc.
@@ -7,13 +7,7 @@
# PCAP_FOUND - True if pcap found.
include(FindWSWinLibs)
-FindWSWinLibs("WpdPack" "PCAP_HINTS")
-
-# The 64-bit wpcap.lib is under /x64
-set(_PLATFORM_SUBDIR "")
-if(WIN32 AND WIRESHARK_TARGET_PLATFORM STREQUAL "win64")
- set(_PLATFORM_SUBDIR "/x64")
-endif()
+FindWSWinLibs("libpcap-*" "PCAP_HINTS")
#
# First, try pkg-config on platforms other than Windows.
@@ -117,15 +111,22 @@ find_path(PCAP_INCLUDE_DIR
"${PCAP_HINTS}/Include"
)
-find_library(PCAP_LIBRARY
- NAMES
- pcap
- wpcap
- HINTS
- ${PC_PCAP_LIBRARY_DIRS}
- ${PCAP_CONFIG_LIBRARY_DIRS}
- "${PCAP_HINTS}/Lib${_PLATFORM_SUBDIR}"
-)
+# On Windows we load wpcap.dll explicitly and probe its functions in
+# caputils\capture-wpcap.c. We don't want to link with pcap.lib since
+# that would bring in the non-capturing (null) pcap.dll from the vcpkg
+# library.
+if(WIN32)
+ set(_pkg_required_vars PCAP_INCLUDE_DIR)
+else()
+ find_library(PCAP_LIBRARY
+ NAMES
+ pcap
+ HINTS
+ ${PC_PCAP_LIBRARY_DIRS}
+ ${PCAP_CONFIG_LIBRARY_DIRS}
+ )
+ set(_pkg_required_vars PCAP_LIBRARY PCAP_INCLUDE_DIR)
+endif()
if(UNIX AND CMAKE_FIND_LIBRARY_SUFFIXES STREQUAL ".a")
# Try to find the static library (XXX - what about AIX?)
@@ -161,8 +162,8 @@ if(UNIX AND CMAKE_FIND_LIBRARY_SUFFIXES STREQUAL ".a")
endif()
include(FindPackageHandleStandardArgs)
-find_package_handle_standard_args(PCAP DEFAULT_MSG PCAP_LIBRARY PCAP_INCLUDE_DIR)
-mark_as_advanced(PCAP_LIBRARY PCAP_INCLUDE_DIR)
+find_package_handle_standard_args(PCAP DEFAULT_MSG ${_pkg_required_vars})
+mark_as_advanced(${_pkg_required_vars})
if(PCAP_FOUND)
set(PCAP_INCLUDE_DIRS ${PCAP_INCLUDE_DIR})
@@ -186,20 +187,6 @@ if(PCAP_FOUND)
if(WIN32)
#
- # Make sure we have at least the WinPcap 3.1 SDK, because we
- # we require at least libpcap 0.8's APIs. 3.1 is based on
- # libpcap 0.9.2, but 3.0 is based on a pre-0.8 snapshot of
- # libpcap.
- #
- # We check whether pcap_lib_version is defined in the pcap header,
- # using it as a proxy for all the 0.8 API's. if not, we fail.
- #
- check_symbol_exists( pcap_lib_version ${PCAP_INCLUDE_DIR}/pcap.h HAVE_PCAP_LIB_VERSION )
- if( NOT HAVE_PCAP_LIB_VERSION )
- message(FATAL_ERROR "You need WinPcap 3.1 or later, or Npcap")
- endif( NOT HAVE_PCAP_LIB_VERSION )
-
- #
# Prepopulate some values. WinPcap 3.1 and later, and Npcap, have these
# in their SDK, and compilation checks on Windows can be slow. We check
# whether they're present at run time, when we load wpcap.dll, and work
@@ -210,6 +197,8 @@ if(PCAP_FOUND)
set(HAVE_PCAP_FREE_DATALINKS TRUE)
set(HAVE_PCAP_OPEN TRUE)
set(HAVE_PCAP_SETSAMPLING TRUE)
+ set(HAVE_PCAP_SET_TSTAMP_PRECISION TRUE)
+ set(HAVE_PCAP_SET_TSTAMP_TYPE TRUE)
else(WIN32)
#
# Make sure we have at least libpcap 0.8, because we we require at
@@ -272,9 +261,16 @@ if(PCAP_FOUND)
endif()
if(PCAP_FOUND AND NOT TARGET pcap::pcap)
- add_library(pcap::pcap UNKNOWN IMPORTED)
- set_target_properties(pcap::pcap PROPERTIES
- IMPORTED_LOCATION "${PCAP_LIBRARIES}"
- INTERFACE_INCLUDE_DIRECTORIES "${PCAP_INCLUDE_DIRS}"
- )
+ if(WIN32)
+ add_library(pcap::pcap INTERFACE IMPORTED)
+ set_target_properties(pcap::pcap PROPERTIES
+ INTERFACE_INCLUDE_DIRECTORIES "${PCAP_INCLUDE_DIRS}"
+ )
+ else()
+ add_library(pcap::pcap UNKNOWN IMPORTED)
+ set_target_properties(pcap::pcap PROPERTIES
+ IMPORTED_LOCATION "${PCAP_LIBRARIES}"
+ INTERFACE_INCLUDE_DIRECTORIES "${PCAP_INCLUDE_DIRS}"
+ )
+ endif()
endif()
diff --git a/tools/win-setup.ps1 b/tools/win-setup.ps1
index f8234a20ba..77bbc150ce 100644
--- a/tools/win-setup.ps1
+++ b/tools/win-setup.ps1
@@ -69,8 +69,8 @@ Param(
# trouble instead of trying to catch exceptions everywhere.
$ErrorActionPreference = "Stop"
-$Win64CurrentTag = "2020-07-14"
-$Win32CurrentTag = "2020-07-14"
+$Win64CurrentTag = "2020-07-19"
+$Win32CurrentTag = "2020-07-19"
# Archive file / SHA256
$Win64Archives = @{
@@ -82,6 +82,7 @@ $Win64Archives = @{
"krb5-1.17-1-win64ws.zip" = "1f4a7ab86ae331ea9e58c9776a60def81ae9fe622882b2e8da2ad6ce6f6fb1d8";
"libgcrypt-1.8.3-win64ws.zip" = "53b1c636cb89de308ca4ea01b4990cf1deca7f6c2446189c7ff6e971137ffd76";
"libilbc-2.0.2-3-win64ws.zip" = "d7baeb98627c405bd7c3e41d6b07c4ea4f0f5db88436e566148320afd10cbb66";
+ "libpcap-1.9.1-1-win64ws.zip" = "5713acad1b095b0351c3b05d7c8e51351af91ae19c306bb1aa985b69c5af7f16";
"libsmi-svn-40773-win64ws.zip" = "571fcee71d741bf847c3247d4c2e1c42388ca6a9feebe08fc0d4ce053571d15d";
"libssh-0.7.3-1-win64ws.zip" = "3a81b9f4a914a46f15243bbb13b6919ef1c20d4bf502c47646caeccff2cbd75c";
"lua-5.2.4-unicode-win64-vc14.zip" = "e8968d2c7871ce1ea82cbd29ac1b3a2c59d3dec25e483c5e12de85df66f5d928";
@@ -94,7 +95,6 @@ $Win64Archives = @{
"spandsp-0.0.6-1-win64ws.zip" = "0e46c61a5a8dca562c36e88a8962a50c1ec1a9fcf89dd05996dac5a79e454527";
"vcpkg-export-20190318-win64ws.zip" = "72c2c43594b0581de2bc86517870a561cc40df294662502536b2a6c06cace87e";
"WinSparkle-0.5.7.zip" = "56d396ef0c4e8b0589ea74134e484376ca6459d972cd1ab1da6b9624d82e6d04";
- "WpdPack_4_1_2.zip" = "ea799cf2f26e4afb1892938070fd2b1ca37ce5cf75fec4349247df12b784edbd";
"zstd-1.4.0-win64ws.zip" = "154199227bdfdfa608972bcdcea38e20768937085e5a59a8fa06c72d07b00d6b";
}
@@ -107,6 +107,7 @@ $Win32Archives = @{
"krb5-1.17-1-win32ws.zip" = "f90cac08355ccfe624652d3e05f8e2e077b8830382315d4ea0a6fa52af08260b";
"libgcrypt-1.8.3-win32ws.zip" = "409b72f2809019050cca91b9e670047c50a0752ff52999089178da54ef926393";
"libilbc-2.0.2-3-win32ws.zip" = "b87967b5e46cd96d178bc3b3dbba5a75c069ef28ab8a86838c9d004690703997";
+ "libpcap-1.9.1-1-win32ws.zip" = "431d8a6bac7a5e80ff8c7f1fc99388fb17c9555589b368577dc8c9d2f4499275";
"libsmi-svn-40773-win32ws.zip" = "44bc81edfeb8948322ca365fc632e419383907c305cc922e6b74fdbb13827958";
"libssh-0.7.3-1-win32ws.zip" = "b02f0d318175194ac538a24c9c9fc280a0ecad69fb3afd4945c106b4b7c4fa6f";
"lua-5.2.4-unicode-win32-vc14.zip" = "ca2368a83f623674178e9441f71fb791e3c0b46f208e3dac28c6ac735f034bff";
@@ -119,7 +120,6 @@ $Win32Archives = @{
"spandsp-0.0.6-1-win32ws.zip" = "3c25f2f4d641d4257ec9922f6db77346a8eed2e360e7d0e27b828ade19c4705b";
"vcpkg-export-20190318-win32ws.zip" = "5f9eb78b1ea9e6762c2a4104e0126f1f5453919dc9df66fef2b1e0be8d8c5829";
"WinSparkle-0.5.7.zip" = "56d396ef0c4e8b0589ea74134e484376ca6459d972cd1ab1da6b9624d82e6d04";
- "WpdPack_4_1_2.zip" = "ea799cf2f26e4afb1892938070fd2b1ca37ce5cf75fec4349247df12b784edbd";
"zstd-1.4.0-win32ws.zip" = "9141716d4d749e67dad40d4aab6bbb3206085bf68e5acb03baf1e5667aa0b6f5";
}