From 12a13a69264fdef4281e4b13c8c7d92a272cc99e Mon Sep 17 00:00:00 2001 From: Jirka Novak Date: Mon, 18 Nov 2019 23:55:25 +0100 Subject: [PATCH] RTP: decode iLBC payload MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It is possible to decode iLBC payload. It uses libilbc library (https://github.com/TimothyGu/libilbc). Bug: 16314 Change-Id: Id4cad7ae32305a0e94ef32beb24e07733d7f834e Reviewed-on: https://code.wireshark.org/review/35686 Reviewed-by: João Valverde Petri-Dish: Pascal Quantin Tested-by: Petri Dish Buildbot Reviewed-by: Anders Broman --- CMakeLists.txt | 18 ++++ CMakeOptions.txt | 1 + cmake/modules/FindILBC.cmake | 77 +++++++++++++++++ cmakeconfig.h.in | 3 + docbook/release-notes.adoc | 1 + packaging/nsis/CMakeLists.txt | 2 +- packaging/nsis/wireshark.nsi | 1 + packaging/rpm/wireshark.spec.in | 9 ++ packaging/wix/CMakeLists.txt | 4 +- packaging/wix/Plugins.wxi | 4 + plugins/codecs/iLBC/CMakeLists.txt | 70 ++++++++++++++++ plugins/codecs/iLBC/iLBCdecode.c | 129 +++++++++++++++++++++++++++++ tools/debian-setup.sh | 4 + tools/rpm-setup.sh | 3 + tools/win-setup.ps1 | 7 +- 15 files changed, 328 insertions(+), 5 deletions(-) create mode 100644 cmake/modules/FindILBC.cmake create mode 100644 plugins/codecs/iLBC/CMakeLists.txt create mode 100644 plugins/codecs/iLBC/iLBCdecode.c diff --git a/CMakeLists.txt b/CMakeLists.txt index c8c5465ede..f12c920109 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1154,6 +1154,8 @@ ws_find_package(SPANDSP ENABLE_SPANDSP HAVE_SPANDSP) ws_find_package(BCG729 ENABLE_BCG729 HAVE_BCG729) +ws_find_package(ILBC ENABLE_ILBC HAVE_ILBC) + # CMake 3.9 and below used 'LIBXML2_LIBRARIES' as the name of the cache entry # storing the find_library result. Transfer it to the new cache variable such # that reset_find_package can detect and clear outdated cache variables. @@ -1467,6 +1469,11 @@ if(ENABLE_PLUGINS) plugins/codecs/G729 ) endif() + if(ILBC_FOUND) + list(APPEND PLUGIN_SRC_DIRS + plugins/codecs/iLBC + ) + endif() if(SBC_FOUND) list(APPEND PLUGIN_SRC_DIRS plugins/codecs/sbc @@ -1580,6 +1587,11 @@ set_package_properties(BCG729 PROPERTIES URL "https://www.linphone.org/technical-corner/bcg729/overview" PURPOSE "Support for G.729 codec in RTP player" ) +set_package_properties(ILBC PROPERTIES + DESCRIPTION "iLBC decoder" + URL "https://github.com/TimothyGu/libilbc" + PURPOSE "Support for iLBC codec in RTP player" +) set_package_properties(LIBXML2 PROPERTIES DESCRIPTION "XML parsing library" URL "http://xmlsoft.org/" @@ -1846,6 +1858,9 @@ if(WIN32) if (BCG729_FOUND) list (APPEND OPTIONAL_DLLS "${BCG729_DLL_DIR}/${BCG729_DLL}") endif(BCG729_FOUND) + if (ILBC_FOUND) + list (APPEND OPTIONAL_DLLS "${ILBC_DLL_DIR}/${ILBC_DLL}") + endif(ILBC_FOUND) if (LIBXML2_FOUND) foreach( _dll ${LIBXML2_DLLS} ) list (APPEND OPTIONAL_DLLS "${LIBXML2_DLL_DIR}/${_dll}") @@ -2975,6 +2990,9 @@ if(RPMBUILD_EXECUTABLE) if (BCG729_FOUND) list(APPEND _rpmbuild_with_args --with bcg729) endif() + if (ILBC_FOUND) + list(APPEND _rpmbuild_with_args --with ilbc) + endif() if (LIBXML2_FOUND) list(APPEND _rpmbuild_with_args --with libxml2) endif() diff --git a/CMakeOptions.txt b/CMakeOptions.txt index fb9133ec7d..cc5eb9d52d 100644 --- a/CMakeOptions.txt +++ b/CMakeOptions.txt @@ -92,6 +92,7 @@ option(ENABLE_KERBEROS "Build with Kerberos support" ON) option(ENABLE_SBC "Build with SBC Codec support in RTP Player" ON) option(ENABLE_SPANDSP "Build with G.722/G.726 codecs support in RTP Player" ON) option(ENABLE_BCG729 "Build with G.729 codec support in RTP Player" ON) +option(ENABLE_ILBC "Build with iLBC codec support in RTP Player" ON) option(ENABLE_LIBXML2 "Build with libxml2 support" ON) # How to install diff --git a/cmake/modules/FindILBC.cmake b/cmake/modules/FindILBC.cmake new file mode 100644 index 0000000000..014698b5e7 --- /dev/null +++ b/cmake/modules/FindILBC.cmake @@ -0,0 +1,77 @@ +# Find the system's ilbc includes and library +# +# ILBC_INCLUDE_DIRS - where to find ilbc.h +# ILBC_LIBRARIES - List of libraries when using ilbc +# ILBC_FOUND - True if ilbc found +# ILBC_DLL_DIR - (Windows) Path to the ilbc DLL +# ILBC_DLL - (Windows) Name of the ilbc DLL + +include( FindWSWinLibs ) +FindWSWinLibs( "libilbc-.*" "ILBC_HINTS" ) + +if (NOT WIN32) + find_package(PkgConfig) + pkg_search_module(PC_ILBC libilbc) +endif() + +find_path(ILBC_INCLUDE_DIR + NAMES ilbc.h + HINTS + "${PC_ILBC_INCLUDE_DIRS}" + "${ILBC_HINTS}/include" + PATHS /usr/local/include /usr/include +) + +find_library(ILBC_LIBRARY + NAMES + ilbc + libilbc + HINTS + "${PC_ILBC_LIBRARY_DIRS}" + "${ILBC_HINTS}/lib" + PATHS /usr/local/lib /usr/lib +) + +# Check if ilbc library is WebRTC from https://github.com/TimothyGu/libilbc +if(ILBC_INCLUDE_DIR AND ILBC_LIBRARY) + include(CheckSymbolExists) + cmake_push_check_state() + set(CMAKE_REQUIRED_INCLUDES ${ILBC_INCLUDE_DIR}) + set(CMAKE_REQUIRED_LIBRARIES ${ILBC_LIBRARY}) + check_symbol_exists("WebRtcIlbcfix_DecoderCreate" "ilbc.h" HAVE_ILBC_LIB_WEBRTC) + cmake_pop_check_state() + + if(NOT HAVE_ILBC_LIB_WEBRTC) + message(STATUS "Ignoring incompatible iLBC library.") + # Unset the variables so the search will rerun next time + set(ILBC_INCLUDE_DIR "ILBC_INCLUDE_DIR-NOTFOUND" CACHE PATH "" FORCE) + set(ILBC_LIBRARY "ILBC_LIBRARY-NOTFOUND" CACHE FILEPATH "" FORCE) + unset(HAVE_ILBC_LIB_WEBRTC CACHE) + endif() +endif() + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(iLBC DEFAULT_MSG ILBC_LIBRARY ILBC_INCLUDE_DIR) + +if( ILBC_FOUND ) + set( ILBC_INCLUDE_DIRS ${ILBC_INCLUDE_DIR} ) + set( ILBC_LIBRARIES ${ILBC_LIBRARY} ) + if (WIN32) + set ( ILBC_DLL_DIR "${ILBC_HINTS}/bin" + CACHE PATH "Path to ilbc DLL" + ) + file( GLOB _ilbc_dll RELATIVE "${ILBC_DLL_DIR}" + "${ILBC_DLL_DIR}/libilbc.dll" + ) + set ( ILBC_DLL ${_ilbc_dll} + # We're storing filenames only. Should we use STRING instead? + CACHE FILEPATH "ilbc DLL file name" + ) + mark_as_advanced( ILBC_DLL_DIR ILBC_DLL ) + endif() +else() + set( ILBC_INCLUDE_DIRS ) + set( ILBC_LIBRARIES ) +endif() + +mark_as_advanced( ILBC_LIBRARIES ILBC_INCLUDE_DIRS ) diff --git a/cmakeconfig.h.in b/cmakeconfig.h.in index 0135d1bfdc..f48e53371f 100644 --- a/cmakeconfig.h.in +++ b/cmakeconfig.h.in @@ -278,6 +278,9 @@ /* Define to 1 if you have the bcg729 library. */ #cmakedefine HAVE_BCG729 1 +/* Define to 1 if you have the ilbc library. */ +#cmakedefine HAVE_ILBC 1 + /* Define to 1 if you have the speexdsp library. */ #cmakedefine HAVE_SPEEXDSP 1 diff --git a/docbook/release-notes.adoc b/docbook/release-notes.adoc index 3d145326ca..f910a9e3e5 100644 --- a/docbook/release-notes.adoc +++ b/docbook/release-notes.adoc @@ -39,6 +39,7 @@ since version 3.2.0: the full names of Protobuf fields or messages in Filter toolbar for searching. * Dissector based on Protobuf can register itself to a new 'protobuf_field' dissector table, which is keyed with the full names of fields, for further parsing fields of BYETS or STRING type. +* Wireshark is able to decode, play and save iLBC payload on platforms where iLBC library (https://github.com/TimothyGu/libilbc) is available. // === Removed Features and Support diff --git a/packaging/nsis/CMakeLists.txt b/packaging/nsis/CMakeLists.txt index cd225e6505..a6459f28fd 100644 --- a/packaging/nsis/CMakeLists.txt +++ b/packaging/nsis/CMakeLists.txt @@ -150,7 +150,7 @@ foreach(_dll ${CARES_DLL} ${GCRYPT_DLLS} ${GNUTLS_DLLS} ${KERBEROS_DLLS} ${LIBSSH_DLL} ${LUA_DLL} ${LZ4_DLL} ${NGHTTP2_DLL} ${SBC_DLL} ${SMI_DLL} ${SNAPPY_DLL} ${SPANDSP_DLL} ${BCG729_DLL} ${LIBXML2_DLLS} ${WINSPARKLE_DLL} - ${ZLIB_DLL} ${BROTLI_DLLS} ${ZSTD_DLL} + ${ZLIB_DLL} ${BROTLI_DLLS} ${ZSTD_DLL} ${ILBC_DLL} # Needed for mmdbresolve ${MAXMINDDB_DLL} ) diff --git a/packaging/nsis/wireshark.nsi b/packaging/nsis/wireshark.nsi index 816ba067c8..21705d4afa 100644 --- a/packaging/nsis/wireshark.nsi +++ b/packaging/nsis/wireshark.nsi @@ -1031,6 +1031,7 @@ File "${STAGING_DIR}\plugins\${VERSION_MAJOR}.${VERSION_MINOR}\codecs\g726.dll" File "${STAGING_DIR}\plugins\${VERSION_MAJOR}.${VERSION_MINOR}\codecs\g729.dll" File "${STAGING_DIR}\plugins\${VERSION_MAJOR}.${VERSION_MINOR}\codecs\l16mono.dll" File "${STAGING_DIR}\plugins\${VERSION_MAJOR}.${VERSION_MINOR}\codecs\sbc.dll" +File "${STAGING_DIR}\plugins\${VERSION_MAJOR}.${VERSION_MINOR}\codecs\ilbc.dll" SectionEnd Section "Configuration Profiles" SecProfiles diff --git a/packaging/rpm/wireshark.spec.in b/packaging/rpm/wireshark.spec.in index b5352eec03..e271b328ae 100644 --- a/packaging/rpm/wireshark.spec.in +++ b/packaging/rpm/wireshark.spec.in @@ -20,6 +20,7 @@ %bcond_with guides %bcond_with brotli %bcond_with zstd +%bcond_with ilbc # Set at most one of these two: # Note that setcap requires rpmbuild 4.7.0 or later. @@ -340,6 +341,11 @@ cmake3 \ %if %{with ninja} -G Ninja \ %endif +%if %{with ilbc} + -DENABLE_ILBC=ON \ +%else + -DENABLE_ILBC=OFF \ +%endif %if %{with ninja} # Older RPM-based distributions used ninja-build in order to prevent a collision with @@ -497,6 +503,9 @@ update-mime-database %{_datadir}/mime &> /dev/null || : %{_libdir}/pkgconfig/wireshark.pc %changelog +* Sun Jan 19 2019 Jiri Novak +- Added ilbc codec as an option + * Fri Nov 22 2019 Gerald Combs - c-ares is a required package diff --git a/packaging/wix/CMakeLists.txt b/packaging/wix/CMakeLists.txt index ba89480b62..eb625ebc10 100644 --- a/packaging/wix/CMakeLists.txt +++ b/packaging/wix/CMakeLists.txt @@ -135,7 +135,7 @@ foreach(_dll ${CARES_DLL} ${GCRYPT_DLLS} ${GNUTLS_DLLS} ${KERBEROS_DLLS} ${LIBSSH_DLL} ${LUA_DLL} ${LZ4_DLL} ${NGHTTP2_DLL} ${SBC_DLL} ${SMI_DLL} ${SNAPPY_DLL} ${SPANDSP_DLL} ${BCG729_DLL} ${LIBXML2_DLLS} ${WINSPARKLE_DLL} - ${ZLIB_DLL} ${BROTLI_DLLS} ${ZSTD_DLL} + ${ZLIB_DLL} ${BROTLI_DLLS} ${ZSTD_DLL} ${ILBC_DLL} # Required for mmdbresolve ${MAXMINDDB_DLL} ) @@ -174,7 +174,7 @@ foreach(_dll ${CARES_DLL} ${GCRYPT_DLLS} ${GNUTLS_DLLS} ${KERBEROS_DLLS} ${LIBSSH_DLL} ${LUA_DLL} ${LZ4_DLL} ${NGHTTP2_DLL} ${SBC_DLL} ${SMI_DLL} ${SNAPPY_DLL} ${SPANDSP_DLL} ${BCG729_DLL} ${LIBXML2_DLLS} ${WINSPARKLE_DLL} - ${ZLIB_DLL} ${BROTLI_DLLS} ${ZSTD_DLL} + ${ZLIB_DLL} ${BROTLI_DLLS} ${ZSTD_DLL} ${ILBC_DLL} # mmdbresolve ${MAXMINDDB_DLL} ) diff --git a/packaging/wix/Plugins.wxi b/packaging/wix/Plugins.wxi index f6f729be2e..384acd7e1d 100644 --- a/packaging/wix/Plugins.wxi +++ b/packaging/wix/Plugins.wxi @@ -126,6 +126,9 @@ + + + @@ -136,6 +139,7 @@ + diff --git a/plugins/codecs/iLBC/CMakeLists.txt b/plugins/codecs/iLBC/CMakeLists.txt new file mode 100644 index 0000000000..4f960a34ce --- /dev/null +++ b/plugins/codecs/iLBC/CMakeLists.txt @@ -0,0 +1,70 @@ +# CMakeLists.txt +# +# Wireshark - Network traffic analyzer +# By Gerald Combs +# Copyright 1998 Gerald Combs +# +# SPDX-License-Identifier: GPL-2.0-or-later +# + +include(WiresharkPlugin) + +# Plugin name and version info (major minor micro extra) +set_module_info(ilbc 0 1 0 0) + +set(CODEC_SRC + iLBCdecode.c +) + +set(PLUGIN_FILES + plugin.c + ${CODEC_SRC} +) + +set_source_files_properties( + ${PLUGIN_FILES} + PROPERTIES + COMPILE_FLAGS "${WERROR_COMMON_FLAGS}" +) + +include_directories( + ${CMAKE_SOURCE_DIR}/codecs + ${CMAKE_CURRENT_SOURCE_DIR} +) + +register_plugin_files(plugin.c + plugin_codec + ${CODEC_SRC} +) + +add_plugin_library(ilbc codecs) + +target_link_libraries(ilbc wsutil ${ILBC_LIBRARIES}) + +target_include_directories(ilbc SYSTEM PRIVATE ${ILBC_INCLUDE_DIRS}) + +install_plugin(ilbc codecs) + +file(GLOB CODEC_HEADERS RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "*.h") +CHECKAPI( + NAME + ilbc + SWITCHES + -g abort -g termoutput -build + SOURCES + ${CODEC_SRC} + ${CODEC_HEADERS} +) + +# +# Editor modelines - https://www.wireshark.org/tools/modelines.html +# +# Local variables: +# c-basic-offset: 8 +# tab-width: 8 +# indent-tabs-mode: t +# End: +# +# vi: set shiftwidth=8 tabstop=8 noexpandtab: +# :indentSize=8:tabSize=8:noTabs=false: +# diff --git a/plugins/codecs/iLBC/iLBCdecode.c b/plugins/codecs/iLBC/iLBCdecode.c new file mode 100644 index 0000000000..c5e2a2873d --- /dev/null +++ b/plugins/codecs/iLBC/iLBCdecode.c @@ -0,0 +1,129 @@ +/* iLBCdecode.c + * iLBC codec + * + * Wireshark - Network traffic analyzer + * By Gerald Combs + * Copyright 1998 Gerald Combs + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include "config.h" +#include + +#include + +#include "ilbc.h" +#include "wsutil/codecs.h" +#include "ws_attributes.h" + +#define ILBC_20MS 20 +#define ILBC_30MS 30 +#define ILBC_PAYLOAD_LEN_20MS 38 +#define ILBC_PAYLOAD_LEN_30MS 50 +#define SAMPLE_SIZE 2 + +typedef struct { + iLBC_decinst_t *ilbc_ctx; /* Real iLBC context */ + guint8 payload_len; /* Remember last payload_len */ +} ilbc_ctx_t; + +static void * +codec_iLBC_init(void) +{ + ilbc_ctx_t *ctx; + + ctx=(ilbc_ctx_t *)g_malloc0(sizeof(*ctx)); + WebRtcIlbcfix_DecoderCreate(&(ctx->ilbc_ctx)); + + return ctx; +} + +static void +codec_iLBC_release(void *ctx) +{ + WebRtcIlbcfix_DecoderFree(((ilbc_ctx_t *)ctx)->ilbc_ctx); + g_free(ctx); +} + +static unsigned +codec_iLBC_get_channels(void *ctx _U_) +{ + return 1; +} + +static unsigned +codec_iLBC_get_frequency(void *ctx _U_) +{ + return 8000; +} + +static size_t +codec_iLBC_decode(void *ctx, const void *inputBytes, size_t inputBytesSize, + void *outputSamples, size_t *outputSamplesSize) +{ + int16_t speechType; // Not used in Wireshark code + int16_t *dataIn = (int16_t *)inputBytes; + int16_t *dataOut = (int16_t *)outputSamples; + ilbc_ctx_t *dataCtx = (ilbc_ctx_t *)ctx; + size_t outputSamplesCount; + + if (!outputSamples || !outputSamplesSize) + { + if (0 == inputBytesSize%ILBC_PAYLOAD_LEN_20MS) { + /* 20ms packet size = 160 samples = 320 bytes */ + return BLOCKL_20MS*SAMPLE_SIZE; + } else if (0 == inputBytesSize%ILBC_PAYLOAD_LEN_30MS) { + /* 30ms packet size = 240 samples = 480 bytes */ + return BLOCKL_30MS*SAMPLE_SIZE; + } else { + /* unknown packet size */ + return 0; + } + } + + if (0 == inputBytesSize%ILBC_PAYLOAD_LEN_20MS) { + /* 20ms packet size */ + if (dataCtx->payload_len != ILBC_20MS) { + WebRtcIlbcfix_DecoderInit(dataCtx->ilbc_ctx, ILBC_20MS); + dataCtx->payload_len = ILBC_20MS; + } + outputSamplesCount = WebRtcIlbcfix_Decode(dataCtx->ilbc_ctx, dataIn, + (int16_t)inputBytesSize, dataOut, &speechType); + } else if (0 == inputBytesSize%ILBC_PAYLOAD_LEN_30MS) { + /* 30ms packet size */ + if (dataCtx->payload_len != ILBC_30MS) { + WebRtcIlbcfix_DecoderInit(dataCtx->ilbc_ctx, ILBC_30MS); + dataCtx->payload_len = ILBC_30MS; + } + outputSamplesCount = WebRtcIlbcfix_Decode(dataCtx->ilbc_ctx, dataIn, + (int16_t)inputBytesSize, dataOut, &speechType); + } else { + /* unknown packet size */ + outputSamplesCount = 0; + } + + /* WebRtcIlbcfix_Decode returns count of samples, but we return count of bytes */ + *outputSamplesSize = outputSamplesCount*SAMPLE_SIZE; + return *outputSamplesSize; +} + +void +codec_register_iLBC(void) +{ + register_codec("iLBC", codec_iLBC_init, codec_iLBC_release, + codec_iLBC_get_channels, codec_iLBC_get_frequency, codec_iLBC_decode); +} + +/* + * Editor modelines - https://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/tools/debian-setup.sh b/tools/debian-setup.sh index ea86c29754..eeffa11648 100755 --- a/tools/debian-setup.sh +++ b/tools/debian-setup.sh @@ -155,6 +155,10 @@ add_package ADDITIONAL_LIST libsystemd-dev || add_package ADDITIONAL_LIST libsystemd-journal-dev || echo "libsystemd-dev is unavailable" +# ilbc library from http://www.deb-multimedia.org +add_package ADDITIONAL_LIST libilbc-dev || +echo "libilbc-dev is unavailable" + # softhsm2 2.0.0: Ubuntu 16.04 # softhsm2 2.2.0: Debian >= jessie-backports, Ubuntu 18.04 # softhsm2 >= 2.4.0: Debian >= buster, Ubuntu >= 18.10 diff --git a/tools/rpm-setup.sh b/tools/rpm-setup.sh index c4eff85ca1..158659ade6 100755 --- a/tools/rpm-setup.sh +++ b/tools/rpm-setup.sh @@ -219,6 +219,9 @@ echo "speex is unavailable" >&2 add_package ADDITIONAL_LIST libnl3-devel || add_package ADDITIONAL_LIST libnl-devel || echo "libnl3/libnl are unavailable" >&2 +add_package ADDITIONAL_LIST ilbc-devel || +echo "ilbc is unavailable" >&2 + ACTUAL_LIST=$BASIC_LIST # Now arrange for optional support libraries diff --git a/tools/win-setup.ps1 b/tools/win-setup.ps1 index c0c1673338..066c2cecca 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 = "2019-12-18" -$Win32CurrentTag = "2019-12-18" +$Win64CurrentTag = "2020-01-09" +$Win32CurrentTag = "2020-01-09" # Archive file / SHA256 $Win64Archives = @{ @@ -81,6 +81,7 @@ $Win64Archives = @{ "gnutls-3.6.3-1-win64ws.zip" = "994ac2578e7b4ca01e589ab2598927d53f7370bc3ff679f3006b0e6bb7a06df4"; "krb5-1.17-1-win64ws.zip" = "1f4a7ab86ae331ea9e58c9776a60def81ae9fe622882b2e8da2ad6ce6f6fb1d8"; "libgcrypt-1.8.3-win64ws.zip" = "53b1c636cb89de308ca4ea01b4990cf1deca7f6c2446189c7ff6e971137ffd76"; + "libilbc-2.0.2-3-win64ws.zip" = "d7baeb98627c405bd7c3e41d6b07c4ea4f0f5db88436e566148320afd10cbb66"; "libsmi-svn-40773-win64ws.zip" = "571fcee71d741bf847c3247d4c2e1c42388ca6a9feebe08fc0d4ce053571d15d"; "libssh-0.7.3-1-win64ws.zip" = "3a81b9f4a914a46f15243bbb13b6919ef1c20d4bf502c47646caeccff2cbd75c"; "lua-5.2.4-unicode-win64-vc14.zip" = "e8968d2c7871ce1ea82cbd29ac1b3a2c59d3dec25e483c5e12de85df66f5d928"; @@ -105,6 +106,7 @@ $Win32Archives = @{ "gnutls-3.6.3-1-win32ws.zip" = "42d8313ffb888f525d6c39330c39bcc2182e68ee8433a09dd85e1f1e1474f592"; "krb5-1.17-1-win32ws.zip" = "f90cac08355ccfe624652d3e05f8e2e077b8830382315d4ea0a6fa52af08260b"; "libgcrypt-1.8.3-win32ws.zip" = "409b72f2809019050cca91b9e670047c50a0752ff52999089178da54ef926393"; + "libilbc-2.0.2-3-win32ws.zip" = "e8582a98024d619f80e1212a7ef3179390f33b21697004cfd487f34fa886145c"; "libsmi-svn-40773-win32ws.zip" = "44bc81edfeb8948322ca365fc632e419383907c305cc922e6b74fdbb13827958"; "libssh-0.7.3-1-win32ws.zip" = "b02f0d318175194ac538a24c9c9fc280a0ecad69fb3afd4945c106b4b7c4fa6f"; "lua-5.2.4-unicode-win32-vc14.zip" = "ca2368a83f623674178e9441f71fb791e3c0b46f208e3dac28c6ac735f034bff"; @@ -161,6 +163,7 @@ $CleanupItems = @( "kfw-3-2-2*" "krb5-*-win??ws" "libgcrypt-*-win??ws" + "libilbc-2.0.2-3-win??ws" "libsmi-0.4.8" "libsmi-svn-40773-win??ws" "libssh-0.7.?-win??ws"