lib/pop3.*\
}"
-RTMP:
- - all:
- - changed-files:
- - any-glob-to-all-files: "{\
- CMake/FindLibrtmp.cmake,\
- lib/curl_rtmp.*\
- }"
-
RTSP:
- all:
- changed-files:
'#define HAVE_LDAP_SSL 1' => 1,
'#define HAVE_LIBBROTLIDEC 1' => 1,
'#define HAVE_LIBPSL_H 1' => 1,
- '#define HAVE_LIBRTMP_RTMP_H 1' => 1,
'#define HAVE_LIBSOCKET 1' => 1,
'#define HAVE_LIBSSH' => 1,
'#define HAVE_LIBSSH2 1' => 1,
sudo rm -f /etc/apt/sources.list.d/{azure-cli.sources,microsoft-prod.list,ondrej-ubuntu-php-noble.sources}
sudo apt-get -o Dpkg::Use-Pty=0 update
sudo apt-get -o Dpkg::Use-Pty=0 install libpsl-dev libbrotli-dev libidn2-dev libssh2-1-dev libssh-dev \
- libnghttp2-dev libldap-dev libkrb5-dev librtmp-dev libgnutls28-dev libwolfssl-dev
+ libnghttp2-dev libldap-dev libkrb5-dev libgnutls28-dev libwolfssl-dev
HOMEBREW_NO_AUTO_UPDATE=1 /home/linuxbrew/.linuxbrew/bin/brew install c-ares gsasl libnghttp3 libngtcp2 mbedtls rustls-ffi
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
export PKG_CONFIG_PATH; PKG_CONFIG_PATH="$(brew --prefix c-ares)/lib/pkgconfig:$(brew --prefix mbedtls)/lib/pkgconfig:$(brew --prefix rustls-ffi)/lib/pkgconfig:$(brew --prefix gsasl)/lib/pkgconfig"
cmake -B _bld1 -G Ninja -DCURL_DISABLE_TYPECHECK=ON -DCURL_WERROR=ON -DENABLE_DEBUG=ON \
-DCURL_USE_GNUTLS=ON -DCURL_USE_MBEDTLS=ON -DCURL_USE_RUSTLS=ON -DCURL_USE_WOLFSSL=ON \
- -DUSE_LIBRTMP=ON -DCURL_USE_GSASL=ON -DCURL_USE_GSSAPI=ON -DUSE_SSLS_EXPORT=ON -DUSE_ECH=ON -DENABLE_ARES=ON \
+ -DCURL_USE_GSASL=ON -DCURL_USE_GSSAPI=ON -DUSE_SSLS_EXPORT=ON -DUSE_ECH=ON -DENABLE_ARES=ON \
-DCURL_DISABLE_VERBOSE_STRINGS=ON
cmake --build _bld1
cmake --build _bld1 --target testdeps
cmake -B _bld2 -G Ninja -DCURL_DISABLE_TYPECHECK=ON -DCURL_WERROR=ON \
-DCURL_USE_OPENSSL=ON -DOPENSSL_ROOT_DIR="$(brew --prefix openssl)" -DUSE_NGTCP2=ON \
-DCURL_USE_LIBSSH2=OFF -DCURL_USE_LIBSSH=ON \
- -DUSE_LIBRTMP=ON -DCURL_USE_GSASL=ON -DCURL_USE_GSSAPI=ON -DUSE_SSLS_EXPORT=ON
+ -DCURL_USE_GSASL=ON -DCURL_USE_GSSAPI=ON -DUSE_SSLS_EXPORT=ON
cmake --build _bld2
cmake --build _bld2 --target testdeps
cmake --build _bld2 --target curl-examples-build
sha256sum freexian-archive-keyring_2022.06.08_all.deb && dpkg -i freexian-archive-keyring_2022.06.08_all.deb
echo 'deb http://deb.freexian.com/extended-lts stretch-lts main contrib non-free' | tee /etc/apt/sources.list.d/extended-lts.list
apt-get -o Dpkg::Use-Pty=0 update
- apt-get -o Dpkg::Use-Pty=0 install -y --no-install-suggests --no-install-recommends make automake autoconf libtool ninja-build gcc pkg-config libpsl-dev libzstd-dev zlib1g-dev libc-ares-dev libkrb5-dev libldap2-dev librtmp-dev stunnel4
+ apt-get -o Dpkg::Use-Pty=0 install -y --no-install-suggests --no-install-recommends make automake autoconf libtool ninja-build gcc pkg-config libpsl-dev libzstd-dev zlib1g-dev libc-ares-dev libkrb5-dev libldap2-dev stunnel4
# GitHub's actions/checkout needs newer glibc and libstdc++. The latter also depends on
# gcc-8-base, but it does not actually seem used in our situation and is not available in
# the main repo, so force the install.
- name: 'CM build-only configure (out-of-tree)'
run: |
~/cmake/bin/cmake -B bld-1 -G Ninja -DCMAKE_UNITY_BUILD=ON -DCURL_WERROR=ON -DBUILD_SHARED_LIBS=ON \
- -DCURL_ENABLE_SSL=OFF -DENABLE_ARES=OFF -DCURL_ZSTD=OFF -DCURL_USE_GSSAPI=OFF -DCURL_USE_LIBSSH2=OFF -DCURL_USE_LIBSSH=OFF -DUSE_LIBRTMP=ON
+ -DCURL_ENABLE_SSL=OFF -DENABLE_ARES=OFF -DCURL_ZSTD=OFF -DCURL_USE_GSSAPI=OFF -DCURL_USE_LIBSSH2=OFF -DCURL_USE_LIBSSH=OFF
- name: 'CM build-only build'
run: |
- name: 'CM configure (out-of-tree, c-ares, zstd, gssapi)'
run: |
~/cmake/bin/cmake -B bld-cares -G Ninja -DCMAKE_UNITY_BUILD=ON -DCURL_WERROR=ON -DBUILD_SHARED_LIBS=ON \
- -DCURL_ENABLE_SSL=OFF -DENABLE_ARES=ON -DCURL_USE_GSSAPI=ON -DCURL_USE_LIBSSH2=OFF -DCURL_USE_LIBSSH=OFF -DUSE_LIBRTMP=ON \
+ -DCURL_ENABLE_SSL=OFF -DENABLE_ARES=ON -DCURL_USE_GSSAPI=ON -DCURL_USE_LIBSSH2=OFF -DCURL_USE_LIBSSH=OFF \
-DCURL_LIBCURL_VERSIONED_SYMBOLS=ON
- name: 'CM configure log'
cd bld-am
../configure --prefix="$PWD"/../curl-install-am --enable-unity --enable-warnings --enable-werror --disable-shared \
--disable-dependency-tracking --enable-option-checking=fatal \
- --without-ssl --enable-ares --without-libssh2 --with-zstd --with-gssapi --with-librtmp
+ --without-ssl --enable-ares --without-libssh2 --with-zstd --with-gssapi
- name: 'AM configure log'
if: ${{ !cancelled() }}
--with-openssl --enable-debug --disable-unity
--disable-dict --disable-gopher --disable-ldap --disable-telnet
--disable-imap --disable-pop3 --disable-smtp
- --without-librtmp --disable-rtsp
+ --disable-rtsp
--without-libssh2 --without-libssh
--disable-tftp --disable-ftp --disable-file --disable-smb
generate: -DCURL_USE_OPENSSL=ON -DENABLE_DEBUG=ON -DENABLE_ARES=ON
- name: 'openssl i686'
- install_packages: gcc-14-i686-linux-gnu libssl-dev:i386 librtmp-dev:i386 libssh2-1-dev:i386 libidn2-dev:i386 libc-ares-dev:i386 zlib1g-dev:i386
+ install_packages: gcc-14-i686-linux-gnu libssl-dev:i386 libssh2-1-dev:i386 libidn2-dev:i386 libc-ares-dev:i386 zlib1g-dev:i386
configure: >-
PKG_CONFIG_PATH=/usr/lib/i386-linux-gnu/pkgconfig
CC=i686-linux-gnu-gcc-14
CPPFLAGS=-I/usr/include/i386-linux-gnu
LDFLAGS=-L/usr/lib/i386-linux-gnu
--host=i686-linux-gnu
- --with-openssl --with-librtmp --with-libssh2 --with-libidn2 --enable-ares --enable-debug
+ --with-openssl --with-libssh2 --with-libidn2 --enable-ares --enable-debug
- name: '!ssl !http !smtp !imap'
image: ubuntu-24.04-arm
-DCURL_DISABLE_LDAP=ON -DUSE_LIBIDN2=OFF -DCURL_USE_LIBSSH2=OFF
- name: 'clang-tidy'
- install_packages: clang-20 clang-tidy-20 libssl-dev libidn2-dev libssh2-1-dev libnghttp2-dev libldap-dev libkrb5-dev librtmp-dev libgnutls28-dev
+ install_packages: clang-20 clang-tidy-20 libssl-dev libidn2-dev libssh2-1-dev libnghttp2-dev libldap-dev libkrb5-dev libgnutls28-dev
install_steps: skiprun mbedtls-latest-intel rustls wolfssl-opensslextra-intel
install_steps_brew: gsasl
CC: clang-20
PKG_CONFIG_PATH: /home/runner/wolfssl-opensslextra/lib/pkgconfig:/home/runner/mbedtls/lib/pkgconfig:/home/runner/rustls/lib/pkgconfig:/home/linuxbrew/.linuxbrew/opt/gsasl/lib/pkgconfig
generate: >-
-DCURL_USE_OPENSSL=ON -DCURL_USE_WOLFSSL=ON -DCURL_USE_GNUTLS=ON -DCURL_USE_MBEDTLS=ON -DCURL_USE_RUSTLS=ON
- -DCURL_USE_GSASL=ON -DUSE_LIBRTMP=ON
+ -DCURL_USE_GSASL=ON
-DUSE_ECH=ON -DCURL_USE_GSSAPI=ON -DUSE_SSLS_EXPORT=ON
-DCURL_CLANG_TIDY=ON -DCLANG_TIDY=/usr/bin/clang-tidy-20
-DCURL_ENABLE_SSL=OFF -DHTTP_ONLY=ON
-DCURL_DISABLE_NTLM=ON -DCURL_DISABLE_ALTSVC=ON -DENABLE_UNIX_SOCKETS=OFF
-DCURL_USE_LIBSSH2=OFF -DCURL_USE_LIBSSH=OFF -DUSE_NGHTTP2=OFF
- -DCURL_USE_GSSAPI=OFF -DUSE_LIBIDN2=OFF -DCURL_USE_LIBPSL=OFF -DUSE_LIBRTMP=OFF
+ -DCURL_USE_GSSAPI=OFF -DUSE_LIBIDN2=OFF -DCURL_USE_LIBPSL=OFF
-DCURL_BROTLI=OFF -DCURL_ZLIB=OFF -DCURL_ZSTD=OFF
-DBUILD_STATIC_LIBS=ON -DBUILD_SHARED_LIBS=OFF
compiler: clang
generate: -DENABLE_DEBUG=ON -DOPENSSL_ROOT_DIR=/opt/homebrew/opt/openssl -DCURL_BROTLI=OFF -DCURL_ZSTD=OFF -DCURL_USE_LIBSSH2=OFF
tflags: '--test-event --min=1300'
- - name: 'OpenSSL gsasl rtmp AppleIDN SecTrust +examples'
+ - name: 'OpenSSL gsasl AppleIDN SecTrust +examples'
compiler: clang
- install: libnghttp3 libngtcp2 gsasl rtmpdump
- generate: -DOPENSSL_ROOT_DIR=/opt/homebrew/opt/openssl -DCURL_USE_GSASL=ON -DUSE_LIBRTMP=ON -DUSE_APPLE_IDN=ON -DUSE_NGTCP2=ON -DCURL_DISABLE_VERBOSE_STRINGS=ON -DUSE_APPLE_SECTRUST=ON
+ install: libnghttp3 libngtcp2 gsasl
+ generate: -DOPENSSL_ROOT_DIR=/opt/homebrew/opt/openssl -DCURL_USE_GSASL=ON -DUSE_APPLE_IDN=ON -DUSE_NGTCP2=ON -DCURL_DISABLE_VERBOSE_STRINGS=ON -DUSE_APPLE_SECTRUST=ON
- name: 'MultiSSL AppleIDN clang-tidy +examples'
image: macos-26
compiler: clang
- install: llvm gnutls nettle libressl krb5 mbedtls gsasl rustls-ffi rtmpdump libssh fish
+ install: llvm gnutls nettle libressl krb5 mbedtls gsasl rustls-ffi libssh fish
install_steps: skiprun
chkprefill: _chkprefill
generate: >-
-DCURL_USE_OPENSSL=ON -DOPENSSL_ROOT_DIR=/opt/homebrew/opt/libressl -DCURL_DEFAULT_SSL_BACKEND=openssl
- -DCURL_USE_GNUTLS=ON -DCURL_USE_MBEDTLS=ON -DCURL_USE_RUSTLS=ON -DENABLE_ARES=ON -DCURL_USE_GSASL=ON -DUSE_LIBRTMP=ON
+ -DCURL_USE_GNUTLS=ON -DCURL_USE_MBEDTLS=ON -DCURL_USE_RUSTLS=ON -DENABLE_ARES=ON -DCURL_USE_GSASL=ON
-DCURL_USE_LIBSSH2=OFF -DCURL_USE_LIBSSH=ON -DUSE_APPLE_IDN=ON -DUSE_SSLS_EXPORT=ON
-DCURL_USE_GSSAPI=ON -DGSS_ROOT_DIR=/opt/homebrew/opt/krb5
-DCURL_BROTLI=ON -DCURL_ZSTD=ON
+++ /dev/null
-#***************************************************************************
-# _ _ ____ _
-# Project ___| | | | _ \| |
-# / __| | | | |_) | |
-# | (__| |_| | _ <| |___
-# \___|\___/|_| \_\_____|
-#
-# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
-#
-# This software is licensed as described in the file COPYING, which
-# you should have received as part of this distribution. The terms
-# are also available at https://curl.se/docs/copyright.html.
-#
-# You may opt to use, copy, modify, merge, publish, distribute and/or sell
-# copies of the Software, and permit persons to whom the Software is
-# furnished to do so, under the terms of the COPYING file.
-#
-# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
-# KIND, either express or implied.
-#
-# SPDX-License-Identifier: curl
-#
-###########################################################################
-# Find the librtmp library
-#
-# Input variables:
-#
-# - `LIBRTMP_INCLUDE_DIR`: Absolute path to librtmp include directory.
-# - `LIBRTMP_LIBRARY`: Absolute path to `librtmp` library.
-#
-# Defines:
-#
-# - `LIBRTMP_FOUND`: System has librtmp.
-# - `LIBRTMP_VERSION`: Version of librtmp.
-# - `CURL::librtmp`: librtmp library target.
-
-set(_librtmp_pc_requires "librtmp")
-
-if(CURL_USE_PKGCONFIG AND
- NOT DEFINED LIBRTMP_INCLUDE_DIR AND
- NOT DEFINED LIBRTMP_LIBRARY)
- find_package(PkgConfig QUIET)
- pkg_check_modules(_librtmp ${_librtmp_pc_requires})
-endif()
-
-if(_librtmp_FOUND AND _librtmp_INCLUDE_DIRS)
- set(Librtmp_FOUND TRUE)
- set(LIBRTMP_FOUND TRUE)
- set(LIBRTMP_VERSION ${_librtmp_VERSION})
- message(STATUS "Found Librtmp (via pkg-config): ${_librtmp_INCLUDE_DIRS} (found version \"${LIBRTMP_VERSION}\")")
-else()
- find_path(LIBRTMP_INCLUDE_DIR NAMES "librtmp/rtmp.h")
- find_library(LIBRTMP_LIBRARY NAMES "rtmp")
-
- unset(LIBRTMP_VERSION CACHE)
- if(LIBRTMP_INCLUDE_DIR AND EXISTS "${LIBRTMP_INCLUDE_DIR}/librtmp/rtmp.h")
- set(_version_regex "#[\t ]*define[\t ]+RTMP_LIB_VERSION[\t ]+0x([0-9a-fA-F][0-9a-fA-F])([0-9a-fA-F][0-9a-fA-F]).*")
- file(STRINGS "${LIBRTMP_INCLUDE_DIR}/librtmp/rtmp.h" _version_str REGEX "${_version_regex}")
- string(REGEX REPLACE "${_version_regex}" "\\1" _version_str1 "${_version_str}")
- string(REGEX REPLACE "${_version_regex}" "\\2" _version_str2 "${_version_str}")
- math(EXPR _version_str1 "0x${_version_str1}" OUTPUT_FORMAT DECIMAL)
- math(EXPR _version_str2 "0x${_version_str2}" OUTPUT_FORMAT DECIMAL)
- set(LIBRTMP_VERSION "${_version_str1}.${_version_str2}")
- unset(_version_regex)
- unset(_version_str1)
- unset(_version_str2)
- endif()
-
- include(FindPackageHandleStandardArgs)
- find_package_handle_standard_args(Librtmp
- REQUIRED_VARS
- LIBRTMP_INCLUDE_DIR
- LIBRTMP_LIBRARY
- VERSION_VAR
- LIBRTMP_VERSION
- )
-
- if(LIBRTMP_FOUND)
- set(_librtmp_INCLUDE_DIRS ${LIBRTMP_INCLUDE_DIR})
- set(_librtmp_LIBRARIES ${LIBRTMP_LIBRARY})
- endif()
-
- mark_as_advanced(LIBRTMP_INCLUDE_DIR LIBRTMP_LIBRARY)
-
- # Necessary when linking a static librtmp
- find_package(OpenSSL)
- if(OpenSSL_FOUND)
- list(APPEND _librtmp_LIBRARIES OpenSSL::SSL OpenSSL::Crypto)
- endif()
-endif()
-
-if(LIBRTMP_FOUND)
- if(WIN32)
- list(APPEND _librtmp_LIBRARIES "winmm")
- endif()
-
- if(NOT TARGET CURL::librtmp)
- add_library(CURL::librtmp INTERFACE IMPORTED)
- set_target_properties(CURL::librtmp PROPERTIES
- INTERFACE_LIBCURL_PC_MODULES "${_librtmp_pc_requires}"
- INTERFACE_COMPILE_OPTIONS "${_librtmp_CFLAGS}"
- INTERFACE_INCLUDE_DIRECTORIES "${_librtmp_INCLUDE_DIRS}"
- INTERFACE_LINK_DIRECTORIES "${_librtmp_LIBRARY_DIRS}"
- INTERFACE_LINK_LIBRARIES "${_librtmp_LIBRARIES}")
- endif()
-endif()
find_dependency(Libpsl MODULE)
list(APPEND _curl_libs CURL::libpsl)
endif()
-if("@USE_LIBRTMP@")
- find_dependency(Librtmp MODULE)
- list(APPEND _curl_libs CURL::librtmp)
-endif()
if("@USE_LIBSSH@")
find_dependency(Libssh MODULE)
list(APPEND _curl_libs CURL::libssh)
set(HAVE_UV_H ON)
endif()
-option(USE_LIBRTMP "Enable librtmp from rtmpdump" OFF)
-if(USE_LIBRTMP)
- find_package(Librtmp MODULE REQUIRED)
- list(APPEND CURL_LIBS CURL::librtmp)
-endif()
-
option(ENABLE_UNIX_SOCKETS "Enable Unix domain sockets support" ON)
if(ENABLE_UNIX_SOCKETS)
if(WIN32 OR DOS)
curl_add_if("IPFS" NOT CURL_DISABLE_IPFS)
curl_add_if("IPNS" NOT CURL_DISABLE_IPFS)
curl_add_if("RTSP" NOT CURL_DISABLE_RTSP)
-curl_add_if("RTMP" USE_LIBRTMP)
curl_add_if("MQTT" NOT CURL_DISABLE_MQTT)
curl_add_if("MQTTS" NOT CURL_DISABLE_MQTT AND _ssl_enabled)
curl_add_if("WS" NOT CURL_DISABLE_WEBSOCKETS)
# USE_GNUTLS
# USE_GSASL
# USE_LIBPSL
- # USE_LIBRTMP
# USE_LIBSSH
# USE_LIBSSH2
# USE_LIBUV
"${CMAKE_CURRENT_SOURCE_DIR}/CMake/FindLibgsasl.cmake"
"${CMAKE_CURRENT_SOURCE_DIR}/CMake/FindLibidn2.cmake"
"${CMAKE_CURRENT_SOURCE_DIR}/CMake/FindLibpsl.cmake"
- "${CMAKE_CURRENT_SOURCE_DIR}/CMake/FindLibrtmp.cmake"
"${CMAKE_CURRENT_SOURCE_DIR}/CMake/FindLibssh.cmake"
"${CMAKE_CURRENT_SOURCE_DIR}/CMake/FindLibssh2.cmake"
"${CMAKE_CURRENT_SOURCE_DIR}/CMake/FindLibuv.cmake"
CMake/FindLibgsasl.cmake \
CMake/FindLibidn2.cmake \
CMake/FindLibpsl.cmake \
- CMake/FindLibrtmp.cmake \
CMake/FindLibssh.cmake \
CMake/FindLibssh2.cmake \
CMake/FindLibuv.cmake \
curl is a command-line tool for transferring data from or to a server using
URLs. It supports these protocols: DICT, FILE, FTP, FTPS, GOPHER, GOPHERS,
-HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, MQTT, MQTTS, POP3, POP3S, RTMP, RTMPS,
-RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET, TFTP, WS and WSS.
+HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, MQTT, MQTTS, POP3, POP3S, RTSP, SCP,
+SFTP, SMB, SMBS, SMTP, SMTPS, TELNET, TFTP, WS and WSS.
Learn how to use curl by reading [the
man page](https://curl.se/docs/manpage.html) or [everything
curl_ldaps_msg="no (--enable-ldaps)"
curl_ipfs_msg="no (--enable-ipfs)"
curl_rtsp_msg="no (--enable-rtsp)"
- curl_rtmp_msg="no (--with-librtmp)"
curl_psl_msg="no (--with-libpsl)"
curl_altsvc_msg="enabled (--disable-alt-svc)"
curl_headers_msg="enabled (--disable-headers-api)"
curl_ldaps_msg="enabled"
fi
-dnl **********************************************************************
-dnl Check for the presence of LIBRTMP libraries and headers
-dnl **********************************************************************
-
-dnl Default to compiler & linker defaults for LIBRTMP files & libraries.
-OPT_LIBRTMP=off
-AC_ARG_WITH(librtmp,dnl
-AS_HELP_STRING([--with-librtmp=PATH],[Where to look for librtmp, PATH points to the LIBRTMP installation; when possible, set the PKG_CONFIG_PATH environment variable instead of using this option])
-AS_HELP_STRING([--without-librtmp], [disable LIBRTMP]),
- OPT_LIBRTMP=$withval)
-
-if test "x$OPT_LIBRTMP" != "xno"; then
- dnl backup the pre-librtmp variables
- CLEANLDFLAGS="$LDFLAGS"
- CLEANLDFLAGSPC="$LDFLAGSPC"
- CLEANCPPFLAGS="$CPPFLAGS"
- CLEANLIBS="$LIBS"
-
- case "$OPT_LIBRTMP" in
- yes)
- dnl --with-librtmp (without path) used
- CURL_CHECK_PKGCONFIG(librtmp)
-
- if test "$PKGCONFIG" != "no"; then
- LIB_RTMP=`$PKGCONFIG --libs-only-l librtmp`
- LD_RTMP=`$PKGCONFIG --libs-only-L librtmp`
- CPP_RTMP=`$PKGCONFIG --cflags-only-I librtmp`
- version=`$PKGCONFIG --modversion librtmp`
- DIR_RTMP=`echo $LD_RTMP | $SED -e 's/^-L//'`
- else
- dnl To avoid link errors, we do not allow --librtmp without
- dnl a pkgconfig file
- AC_MSG_ERROR([--librtmp was specified but could not find librtmp pkgconfig file.])
- fi
- ;;
- off)
- dnl no --with-librtmp option given, just check default places
- LIB_RTMP="-lrtmp"
- ;;
- *)
- dnl use the given --with-librtmp spot
- LIB_RTMP="-lrtmp"
- PREFIX_RTMP=$OPT_LIBRTMP
- ;;
- esac
-
- dnl if given with a prefix, we set -L and -I based on that
- if test -n "$PREFIX_RTMP"; then
- LD_RTMP=-L${PREFIX_RTMP}/lib$libsuff
- CPP_RTMP=-I${PREFIX_RTMP}/include
- DIR_RTMP=${PREFIX_RTMP}/lib$libsuff
- fi
-
- LDFLAGS="$LDFLAGS $LD_RTMP"
- LDFLAGSPC="$LDFLAGSPC $LD_RTMP"
- CPPFLAGS="$CPPFLAGS $CPP_RTMP"
- LIBS="$LIB_RTMP $LIBS"
-
- AC_CHECK_LIB(rtmp, RTMP_Init,
- [
- AC_CHECK_HEADERS(librtmp/rtmp.h,
- curl_rtmp_msg="enabled (librtmp)"
- AC_DEFINE(USE_LIBRTMP, 1, [if librtmp is in use])
- USE_LIBRTMP=1
- LIBCURL_PC_REQUIRES_PRIVATE="$LIBCURL_PC_REQUIRES_PRIVATE librtmp"
- )
- ],
- dnl not found, revert back to clean variables
- LDFLAGS=$CLEANLDFLAGS
- LDFLAGSPC=$CLEANLDFLAGSPC
- CPPFLAGS=$CLEANCPPFLAGS
- LIBS=$CLEANLIBS
- )
-
- if test "x$OPT_LIBRTMP" != "xoff" &&
- test "$USE_LIBRTMP" != "1"; then
- AC_MSG_ERROR([librtmp libs and/or directories were not found where specified!])
- fi
-fi
-
dnl **********************************************************************
dnl Check for linker switch for versioned symbols
dnl **********************************************************************
if test "$CURL_DISABLE_RTSP" != "1"; then
SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS RTSP"
fi
-if test "$USE_LIBRTMP" = "1"; then
- SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS RTMP"
-fi
if test "$CURL_DISABLE_WEBSOCKETS" != "1"; then
SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS WS"
if test "$SSL_ENABLED" = "1"; then
LDAPS: ${curl_ldaps_msg}
IPFS/IPNS: ${curl_ipfs_msg}
RTSP: ${curl_rtsp_msg}
- RTMP: ${curl_rtmp_msg}
PSL: ${curl_psl_msg}
Alt-svc: ${curl_altsvc_msg}
Headers API: ${curl_headers_msg}
In March 2026, we drop support for all c-ares versions before 1.16.0.
-## RTMP
-
-RTMP in curl is powered by the 3rd party library librtmp.
-
-- RTMP is barely used by curl users (2.2% in the 2025 survey)
-- librtmp has no test cases, makes no proper releases and has not had a single
- commit within the last year
-- librtmp parses the URL itself and requires non-compliant URLs for this
-- we have no RTMP tests
-
-Support for RTMP in libcurl gets removed in April 2026.
-
## TLS-SRP Authentication
Transport Layer Security Secure Remote Password is a TLS feature that does not
- Support for Windows XP (removed in 8.19.0)
- OpenSSL-QUIC (removed in 8.19.0)
- CMake 3.17 and older (removed in 8.20.0)
+- RTMP (removed in 8.20.0)
+
### libcurl
A client-side URL transfer library, supporting DICT, FILE, FTP, FTPS, GOPHER,
-GOPHERS, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, MQTT, MQTTS, POP3, POP3S, RTMP,
-RTMPS, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET, TFTP, WS and WSS.
+GOPHERS, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, MQTT, MQTTS, POP3, POP3S,
+RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET, TFTP, WS and WSS.
libcurl supports HTTPS certificates, HTTP POST, HTTP PUT, FTP uploading,
Kerberos, SPNEGO, HTTP form based upload, proxies, cookies, user+password
Add support for Apple SecTrust, native CA certs on Apple systems.
December 15: the website served 78 TB over the last month.
+
+## 2026
+
+April: removed support for RTMP
- `USE_APPLE_IDN`: Use Apple built-in IDN support. Default: `OFF`
- `USE_APPLE_SECTRUST`: Use Apple OS-native certificate verification. Default: `OFF`
- `USE_LIBIDN2`: Use libidn2 for IDN support. Default: `ON`
-- `USE_LIBRTMP`: Enable librtmp from rtmpdump. Default: `OFF`
- `USE_NGHTTP2`: Use nghttp2 library. Default: `ON`
- `USE_NGTCP2`: Use ngtcp2 and nghttp3 libraries for HTTP/3 support. Default: `OFF`
- `USE_QUICHE`: Use quiche library for HTTP/3 support. Default: `OFF`
- `LIBIDN2_LIBRARY`: Absolute path to `libidn2` library.
- `LIBPSL_INCLUDE_DIR`: Absolute path to libpsl include directory.
- `LIBPSL_LIBRARY`: Absolute path to `libpsl` library.
-- `LIBRTMP_INCLUDE_DIR`: Absolute path to librtmp include directory.
-- `LIBRTMP_LIBRARY`: Absolute path to `librtmp` library.
- `LIBSSH_INCLUDE_DIR`: Absolute path to libssh include directory.
- `LIBSSH_LIBRARY`: Absolute path to `libssh` library.
- `LIBSSH_USE_STATIC_LIBS`: Configure for static libssh libraries. (experimental)
- `--without-ngtcp2` (HTTP/2 using ngtcp2)
- `--without-zstd` (Zstd on-the-fly decompression)
- `--without-libidn2` (internationalized domain names)
-- `--without-librtmp` (RTMP)
- `--without-ssl` (SSL/TLS)
- `--without-zlib` (gzip/deflate on-the-fly decompression)
matched case insensitively:
`dict`, `file`, `ftp`, `ftps`, `gopher`, `gophers`, `http`, `https`, `imap`,
-`imaps`, `ldap`, `ldaps`, `mqtt`, `pop3`, `pop3s`, `rtmp`, `rtmpe`, `rtmps`,
-`rtmpt`, `rtmpte`, `rtmpts`, `rtsp`, `smb`, `smbs`, `smtp`, `smtps`, `telnet`,
-`tftp`
+`imaps`, `ldap`, `ldaps`, `mqtt`, `pop3`, `pop3s`, `rtsp`, `smb`, `smbs`,
+`smtp`, `smtps`, `telnet`, `tftp`
When the URL is specified to identify a proxy, curl recognizes the following
schemes:
If the port number is not specified in the URL, curl uses a default port
number based on the provide scheme:
-DICT 2628, FTP 21, FTPS 990, GOPHER 70, GOPHERS 70, HTTP 80, HTTPS 443,
-IMAP 143, IMAPS 993, LDAP 389, LDAPS 636, MQTT 1883, POP3 110, POP3S 995,
-RTMP 1935, RTMPS 443, RTMPT 80, RTSP 554, SCP 22, SFTP 22, SMB 445, SMBS 445,
-SMTP 25, SMTPS 465, TELNET 23, TFTP 69
+DICT 2628, FTP 21, FTPS 990, GOPHER 70, GOPHERS 70, HTTP 80, HTTPS 443, IMAP
+143, IMAPS 993, LDAP 389, LDAPS 636, MQTT 1883, POP3 110, POP3S 995, RTSP 554,
+SCP 22, SFTP 22, SMB 445, SMBS 445, SMTP 25, SMTPS 465, TELNET 23, TFTP 69
# Scheme specific behaviors
external function such as gethostname or getaddrinfo.
The default smtp port is 25. Some servers use port 587 as an alternative.
-
-## RTMP
-
-There is no official URL spec for RTMP so libcurl uses the URL syntax supported
-by the underlying librtmp library. It has a syntax where it wants a
-traditional URL, followed by a space and a series of space-separated
-`name=value` pairs.
-
-While space is not typically a "legal" letter, libcurl accepts them. When a
-user wants to pass in a `#` (hash) character it is treated as a fragment and
-it gets cut off by libcurl if provided literally. You have to escape it by
-providing it as backslash and its ASCII value in hexadecimal: `\23`.
**curl** is a tool for transferring data from or to a server using URLs. It
supports these protocols: DICT, FILE, FTP, FTPS, GOPHER, GOPHERS, HTTP, HTTPS,
-IMAP, IMAPS, LDAP, LDAPS, MQTT, MQTTS, POP3, POP3S, RTMP, RTMPS, RTSP, SCP,
-SFTP, SMB, SMBS, SMTP, SMTPS, TELNET, TFTP, WS and WSS.
+IMAP, IMAPS, LDAP, LDAPS, MQTT, MQTTS, POP3, POP3S, RTSP, SCP, SFTP, SMB,
+SMBS, SMTP, SMTPS, TELNET, TFTP, WS and WSS.
curl is powered by libcurl for all transfer-related features. See
*libcurl(3)* for details.
## POP3(S)
Downloading from a pop3 server means getting an email. With or without using
TLS.
-## RTMP(S)
-The **Realtime Messaging Protocol** is primarily used to serve streaming media
-and curl can download it.
## RTSP
curl supports RTSP 1.0 downloads.
## SCP
These are the available protocols:
DICT, FILE, FTP, FTPS, GOPHER, GOPHERS, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS,
-MQTT, MQTTS, POP3, POP3S, RTMP, RTMPE, RTMPS, RTMPT, RTMPTE, RTMPTS, RTSP,
-SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET, TFTP, WS, WSS
+MQTT, MQTTS, POP3, POP3S, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET,
+TFTP, WS, WSS
You can set "ALL" as a short-cut to enable all protocols. Note that by setting
all, you may enable protocols that were not supported the day you write this
}
~~~
+# HISTORY
+
+RTMP and its related protocol schemes are not supported since curl 8.20.0
+
# %AVAILABILITY%
# RETURN VALUE
These are the available protocols:
DICT, FILE, FTP, FTPS, GOPHER, GOPHERS, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS,
-MQTT, MQTTS, POP3, POP3S, RTMP, RTMPE, RTMPS, RTMPT, RTMPTE, RTMPTS, RTSP,
-SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET, TFTP, WS, WSS
+MQTT, MQTTS, POP3, POP3S, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET,
+TFTP, WS, WSS
You can set "ALL" as a short-cut to enable all protocols. Note that by setting
all, you may enable protocols that were not supported the day you write this
CURLPROTO_MQTT 7.71.0
CURLPROTO_POP3 7.20.0
CURLPROTO_POP3S 7.20.0
-CURLPROTO_RTMP 7.21.0
-CURLPROTO_RTMPE 7.21.0
-CURLPROTO_RTMPS 7.21.0
-CURLPROTO_RTMPT 7.21.0
-CURLPROTO_RTMPTE 7.21.0
-CURLPROTO_RTMPTS 7.21.0
+CURLPROTO_RTMP 7.21.0 8.20.0
+CURLPROTO_RTMPE 7.21.0 8.20.0
+CURLPROTO_RTMPS 7.21.0 8.20.0
+CURLPROTO_RTMPT 7.21.0 8.20.0
+CURLPROTO_RTMPTE 7.21.0 8.20.0
+CURLPROTO_RTMPTS 7.21.0 8.20.0
CURLPROTO_RTSP 7.20.0
CURLPROTO_SCP 7.19.4
CURLPROTO_SFTP 7.19.4
curl_memrchr.c \
curl_ntlm_core.c \
curl_range.c \
- curl_rtmp.c \
curl_sasl.c \
curl_sha512_256.c \
curl_share.c \
curl_ntlm_core.h \
curl_printf.h \
curl_range.h \
- curl_rtmp.h \
curl_sasl.h \
curl_setup.h \
curl_sha256.h \
/* if AmiSSL is in use */
#cmakedefine USE_AMISSL 1
-/* if librtmp/rtmpdump is in use */
-#cmakedefine USE_LIBRTMP 1
-
/* if GSASL is in use */
#cmakedefine USE_GSASL 1
+++ /dev/null
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
- * Copyright (C) Howard Chu, <hyc@highlandsun.com>
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at https://curl.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- * SPDX-License-Identifier: curl
- *
- ***************************************************************************/
-#include "curl_setup.h"
-
-#include "curl_rtmp.h"
-#include "urldata.h"
-
-#ifdef USE_LIBRTMP
-
-#include "url.h"
-#include "curlx/nonblock.h"
-#include "progress.h" /* for Curl_pgrsSetUploadSize */
-#include "transfer.h"
-#include "bufref.h"
-
-#include <librtmp/rtmp.h>
-
-#if defined(USE_WINSOCK) || defined(LWIP_SO_SNDRCVTIMEO_NONSTANDARD)
-#define SET_RCVTIMEO(tv, s) int tv = s * 1000
-#else
-#define SET_RCVTIMEO(tv, s) struct timeval tv = { s, 0 }
-#endif
-
-#define DEF_BUFTIME (2 * 60 * 60 * 1000) /* 2 hours */
-
-/* meta key for storing RTMP* at connection */
-#define CURL_META_RTMP_CONN "meta:proto:rtmp:conn"
-
-static Curl_recv rtmp_recv;
-static Curl_send rtmp_send;
-
-static void rtmp_conn_dtor(void *key, size_t klen, void *entry)
-{
- RTMP *r = entry;
- (void)key;
- (void)klen;
- RTMP_Close(r);
- RTMP_Free(r);
-}
-
-static CURLcode rtmp_setup_connection(struct Curl_easy *data,
- struct connectdata *conn)
-{
- RTMP *r = RTMP_Alloc();
- if(!r ||
- Curl_conn_meta_set(conn, CURL_META_RTMP_CONN, r, rtmp_conn_dtor))
- return CURLE_OUT_OF_MEMORY;
-
- RTMP_Init(r);
- RTMP_SetBufferMS(r, DEF_BUFTIME);
- if(!RTMP_SetupURL(r, CURL_UNCONST(Curl_bufref_ptr(&data->state.url))))
- /* rtmp_conn_dtor() performs the cleanup */
- return CURLE_URL_MALFORMAT;
- return CURLE_OK;
-}
-
-static CURLcode rtmp_connect(struct Curl_easy *data, bool *done)
-{
- struct connectdata *conn = data->conn;
- RTMP *r = Curl_conn_meta_get(conn, CURL_META_RTMP_CONN);
- SET_RCVTIMEO(tv, 10);
-
- if(!r)
- return CURLE_FAILED_INIT;
-
- if(conn->sock[FIRSTSOCKET] > INT_MAX) {
- /* The socket value is invalid for rtmp. */
- return CURLE_FAILED_INIT;
- }
-
- r->m_sb.sb_socket = (int)conn->sock[FIRSTSOCKET];
-
- /* We have to know if it is a write before we send the
- * connect request packet
- */
- if(data->state.upload)
- r->Link.protocol |= RTMP_FEATURE_WRITE;
-
- /* For plain streams, use the buffer toggle trick to keep data flowing */
- if(!(r->Link.lFlags & RTMP_LF_LIVE) &&
- !(r->Link.protocol & RTMP_FEATURE_HTTP))
- r->Link.lFlags |= RTMP_LF_BUFX;
-
- (void)curlx_nonblock(r->m_sb.sb_socket, FALSE);
- setsockopt(r->m_sb.sb_socket, SOL_SOCKET, SO_RCVTIMEO,
- (char *)&tv, sizeof(tv));
-
- if(!RTMP_Connect1(r, NULL))
- return CURLE_FAILED_INIT;
-
- /* Clients must send a periodic BytesReceived report to the server */
- r->m_bSendCounter = TRUE;
-
- *done = TRUE;
- conn->recv[FIRSTSOCKET] = rtmp_recv;
- conn->send[FIRSTSOCKET] = rtmp_send;
- return CURLE_OK;
-}
-
-static CURLcode rtmp_do(struct Curl_easy *data, bool *done)
-{
- struct connectdata *conn = data->conn;
- RTMP *r = Curl_conn_meta_get(conn, CURL_META_RTMP_CONN);
-
- if(!r || !RTMP_ConnectStream(r, 0))
- return CURLE_FAILED_INIT;
-
- if(data->state.upload) {
- Curl_pgrsSetUploadSize(data, data->state.infilesize);
- Curl_xfer_setup_send(data, FIRSTSOCKET);
- }
- else
- Curl_xfer_setup_recv(data, FIRSTSOCKET, -1);
- *done = TRUE;
- return CURLE_OK;
-}
-
-static CURLcode rtmp_done(struct Curl_easy *data, CURLcode status,
- bool premature)
-{
- (void)data;
- (void)status;
- (void)premature;
-
- return CURLE_OK;
-}
-
-static CURLcode rtmp_disconnect(struct Curl_easy *data,
- struct connectdata *conn,
- bool dead_connection)
-{
- RTMP *r = Curl_conn_meta_get(conn, CURL_META_RTMP_CONN);
- (void)data;
- (void)dead_connection;
- if(r)
- Curl_conn_meta_remove(conn, CURL_META_RTMP_CONN);
- return CURLE_OK;
-}
-
-static CURLcode rtmp_recv(struct Curl_easy *data, int sockindex, char *buf,
- size_t len, size_t *pnread)
-{
- struct connectdata *conn = data->conn;
- RTMP *r = Curl_conn_meta_get(conn, CURL_META_RTMP_CONN);
- CURLcode result = CURLE_OK;
- ssize_t rv;
-
- (void)sockindex;
- *pnread = 0;
- if(!r)
- return CURLE_FAILED_INIT;
-
- rv = RTMP_Read(r, buf, curlx_uztosi(len));
- if(!curlx_sztouz(rv, pnread)) {
- if(r->m_read.status == RTMP_READ_COMPLETE ||
- r->m_read.status == RTMP_READ_EOF) {
- data->req.size = data->req.bytecount;
- }
- else
- result = CURLE_RECV_ERROR;
- }
-
- return result;
-}
-
-static CURLcode rtmp_send(struct Curl_easy *data, int sockindex,
- const uint8_t *buf, size_t len, bool eos,
- size_t *pnwritten)
-{
- struct connectdata *conn = data->conn;
- RTMP *r = Curl_conn_meta_get(conn, CURL_META_RTMP_CONN);
- ssize_t rv;
-
- (void)sockindex;
- (void)eos;
- *pnwritten = 0;
- if(!r)
- return CURLE_FAILED_INIT;
-
- rv = RTMP_Write(r, (const char *)buf, curlx_uztosi(len));
- if(!curlx_sztouz(rv, pnwritten))
- return CURLE_SEND_ERROR;
-
- return CURLE_OK;
-}
-
-void Curl_rtmp_version(char *version, size_t len)
-{
- char suff[2];
- if(RTMP_LIB_VERSION & 0xff) {
- suff[0] = (RTMP_LIB_VERSION & 0xff) + 'a' - 1;
- suff[1] = '\0';
- }
- else
- suff[0] = '\0';
-
- curl_msnprintf(version, len, "librtmp/%d.%d%s",
- RTMP_LIB_VERSION >> 16, (RTMP_LIB_VERSION >> 8) & 0xff,
- suff);
-}
-
-/*
- * RTMP protocol handler.h, based on https://rtmpdump.mplayerhq.hu/
- */
-
-const struct Curl_protocol Curl_protocol_rtmp = {
- rtmp_setup_connection, /* setup_connection */
- rtmp_do, /* do_it */
- rtmp_done, /* done */
- ZERO_NULL, /* do_more */
- rtmp_connect, /* connect_it */
- ZERO_NULL, /* connecting */
- ZERO_NULL, /* doing */
- ZERO_NULL, /* proto_pollset */
- ZERO_NULL, /* doing_pollset */
- ZERO_NULL, /* domore_pollset */
- ZERO_NULL, /* perform_pollset */
- rtmp_disconnect, /* disconnect */
- ZERO_NULL, /* write_resp */
- ZERO_NULL, /* write_resp_hd */
- ZERO_NULL, /* connection_is_dead */
- ZERO_NULL, /* attach connection */
- ZERO_NULL, /* follow */
-};
-
-#endif /* USE_LIBRTMP */
+++ /dev/null
-#ifndef HEADER_CURL_RTMP_H
-#define HEADER_CURL_RTMP_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) Howard Chu, <hyc@highlandsun.com>
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at https://curl.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- * SPDX-License-Identifier: curl
- *
- ***************************************************************************/
-#ifdef USE_LIBRTMP
-extern const struct Curl_protocol Curl_protocol_rtmp;
-void Curl_rtmp_version(char *version, size_t len);
-#endif
-
-#endif /* HEADER_CURL_RTMP_H */
#include "curl_ldap.h"
#include "mqtt.h"
#include "pop3.h"
-#include "curl_rtmp.h"
#include "rtsp.h"
#include "smb.h"
#include "smtp.h"
PORT_POP3S, /* defport */
};
-const struct Curl_scheme Curl_scheme_rtmp = {
- "rtmp", /* scheme */
-#ifndef USE_LIBRTMP
- ZERO_NULL,
-#else
- &Curl_protocol_rtmp,
-#endif
- CURLPROTO_RTMP, /* protocol */
- CURLPROTO_RTMP, /* family */
- PROTOPT_NONE, /* flags */
- PORT_RTMP, /* defport */
-};
-
-const struct Curl_scheme Curl_scheme_rtmpt = {
- "rtmpt", /* scheme */
-#ifndef USE_LIBRTMP
- ZERO_NULL,
-#else
- &Curl_protocol_rtmp,
-#endif
- CURLPROTO_RTMPT, /* protocol */
- CURLPROTO_RTMPT, /* family */
- PROTOPT_NONE, /* flags */
- PORT_RTMPT, /* defport */
-};
-
-const struct Curl_scheme Curl_scheme_rtmpe = {
- "rtmpe", /* scheme */
-#ifndef USE_LIBRTMP
- ZERO_NULL,
-#else
- &Curl_protocol_rtmp,
-#endif
- CURLPROTO_RTMPE, /* protocol */
- CURLPROTO_RTMPE, /* family */
- PROTOPT_NONE, /* flags */
- PORT_RTMP, /* defport */
-};
-
-const struct Curl_scheme Curl_scheme_rtmpte = {
- "rtmpte", /* scheme */
-#ifndef USE_LIBRTMP
- ZERO_NULL,
-#else
- &Curl_protocol_rtmp,
-#endif
- CURLPROTO_RTMPTE, /* protocol */
- CURLPROTO_RTMPTE, /* family */
- PROTOPT_NONE, /* flags */
- PORT_RTMPT, /* defport */
-};
-
-const struct Curl_scheme Curl_scheme_rtmps = {
- "rtmps", /* scheme */
-#ifndef USE_LIBRTMP
- ZERO_NULL,
-#else
- &Curl_protocol_rtmp,
-#endif
- CURLPROTO_RTMPS, /* protocol */
- CURLPROTO_RTMP, /* family */
- PROTOPT_NONE, /* flags */
- PORT_RTMPS, /* defport */
-};
-
-const struct Curl_scheme Curl_scheme_rtmpts = {
- "rtmpts", /* scheme */
-#ifndef USE_LIBRTMP
- ZERO_NULL,
-#else
- &Curl_protocol_rtmp,
-#endif
- CURLPROTO_RTMPTS, /* protocol */
- CURLPROTO_RTMPT, /* family */
- PROTOPT_NONE, /* flags */
- PORT_RTMPS, /* defport */
-};
-
const struct Curl_scheme Curl_scheme_rtsp = {
"rtsp", /* scheme */
#ifdef CURL_DISABLE_RTSP
6. make sure this function uses the same hash function that worked for
schemetable.c
*/
- static const struct Curl_scheme * const all_schemes[67] = {
- &Curl_scheme_file,
- &Curl_scheme_mqtts, NULL,
- &Curl_scheme_gophers, NULL,
- &Curl_scheme_rtmpe,
+ static const struct Curl_scheme * const all_schemes[47] = {
+ &Curl_scheme_mqtt,
&Curl_scheme_smtp,
- &Curl_scheme_sftp,
- &Curl_scheme_smb,
- &Curl_scheme_smtps,
- &Curl_scheme_telnet,
- &Curl_scheme_gopher,
- &Curl_scheme_tftp, NULL, NULL, NULL,
- &Curl_scheme_ftps,
- &Curl_scheme_http,
- &Curl_scheme_imap,
- &Curl_scheme_rtmps,
- &Curl_scheme_rtmpt, NULL, NULL, NULL,
+ &Curl_scheme_tftp,
+ &Curl_scheme_imap, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
&Curl_scheme_ldaps,
- &Curl_scheme_wss,
- &Curl_scheme_https, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- &Curl_scheme_rtsp,
- &Curl_scheme_smbs,
- &Curl_scheme_scp, NULL, NULL, NULL,
- &Curl_scheme_pop3, NULL, NULL,
- &Curl_scheme_rtmp, NULL, NULL, NULL,
- &Curl_scheme_rtmpte, NULL, NULL, NULL,
- &Curl_scheme_dict, NULL, NULL, NULL,
- &Curl_scheme_mqtt,
+ &Curl_scheme_dict, NULL,
+ &Curl_scheme_file, NULL,
&Curl_scheme_pop3s,
- &Curl_scheme_imaps, NULL,
- &Curl_scheme_ws, NULL,
- &Curl_scheme_rtmpts,
- &Curl_scheme_ldap, NULL, NULL,
&Curl_scheme_ftp,
+ &Curl_scheme_scp,
+ &Curl_scheme_mqtts,
+ &Curl_scheme_imaps,
+ &Curl_scheme_ldap,
+ &Curl_scheme_http,
+ &Curl_scheme_smb, NULL, NULL,
+ &Curl_scheme_telnet,
+ &Curl_scheme_https,
+ &Curl_scheme_gopher,
+ &Curl_scheme_rtsp, NULL, NULL,
+ &Curl_scheme_wss, NULL,
+ &Curl_scheme_gophers,
+ &Curl_scheme_smtps,
+ &Curl_scheme_pop3,
+ &Curl_scheme_ws, NULL, NULL,
+ &Curl_scheme_sftp,
+ &Curl_scheme_ftps, NULL,
+ &Curl_scheme_smbs, NULL,
};
if(len && (len <= 7)) {
const char *s = scheme;
size_t l = len;
const struct Curl_scheme *h;
- unsigned int c = 978;
+ unsigned int c = 792;
while(l) {
- c <<= 5;
+ c <<= 4;
c += (unsigned int)Curl_raw_tolower(*s);
s++;
l--;
}
- h = all_schemes[c % 67];
+ h = all_schemes[c % 47];
if(h && curl_strnequal(scheme, h->name, len) && !h->name[len])
return h;
}
#define PORT_SMTP 25
#define PORT_SMTPS 465 /* sometimes called SSMTP */
#define PORT_RTSP 554
-#define PORT_RTMP 1935
-#define PORT_RTMPT PORT_HTTP
-#define PORT_RTMPS PORT_HTTPS
#define PORT_GOPHER 70
#define PORT_MQTT 1883
#define PORT_MQTTS 8883
extern const struct Curl_scheme Curl_scheme_mqtts;
extern const struct Curl_scheme Curl_scheme_pop3;
extern const struct Curl_scheme Curl_scheme_pop3s;
-extern const struct Curl_scheme Curl_scheme_rtmp;
-extern const struct Curl_scheme Curl_scheme_rtmpe;
-extern const struct Curl_scheme Curl_scheme_rtmpt;
-extern const struct Curl_scheme Curl_scheme_rtmpte;
-extern const struct Curl_scheme Curl_scheme_rtmps;
-extern const struct Curl_scheme Curl_scheme_rtmpts;
extern const struct Curl_scheme Curl_scheme_rtsp;
extern const struct Curl_scheme Curl_scheme_scp;
extern const struct Curl_scheme Curl_scheme_sftp;
#include "imap.h"
#include "url.h"
#include "connect.h"
-#include "curl_rtmp.h"
#include "gopher.h"
#include "mqtt.h"
#include "rtsp.h"
#include <libpsl.h>
#endif
-#ifdef USE_LIBRTMP
-#include <librtmp/rtmp.h>
-#include "curl_rtmp.h"
-#endif
-
#ifdef HAVE_LIBZ
#include <zlib.h>
#endif
#if !defined(CURL_DISABLE_HTTP) && defined(USE_HTTP3)
char h3_version[30];
#endif
-#ifdef USE_LIBRTMP
- char rtmp_version[30];
-#endif
#ifdef USE_GSASL
char gsasl_buf[30];
#endif
Curl_quic_ver(h3_version, sizeof(h3_version));
src[i++] = h3_version;
#endif
-#ifdef USE_LIBRTMP
- Curl_rtmp_version(rtmp_version, sizeof(rtmp_version));
- src[i++] = rtmp_version;
-#endif
#ifdef USE_GSASL
curl_msnprintf(gsasl_buf, sizeof(gsasl_buf), "libgsasl/%s",
gsasl_check_version(NULL));
#if defined(USE_SSL) && !defined(CURL_DISABLE_POP3)
"pop3s",
#endif
-#ifdef USE_LIBRTMP
- "rtmp",
- "rtmpe",
- "rtmps",
- "rtmpt",
- "rtmpte",
- "rtmpts",
-#endif
#ifndef CURL_DISABLE_RTSP
"rtsp",
#endif
feature_names[n] = NULL; /* Terminate array. */
version_info.features = features;
-#ifdef USE_LIBRTMP
- {
- static char rtmp_version[30];
- Curl_rtmp_version(rtmp_version, sizeof(rtmp_version));
- version_info.rtmp_version = rtmp_version;
- }
-#endif
-
return &version_info;
}
$write cvh "#ifdef USE_GNUTLS"
$write cvh "#undef USE_GNUTLS"
$write cvh "#endif"
-$write cvh "#ifdef USE_LIBRTMP"
-$write cvh "#undef USE_LIBRTMP"
-$write cvh "#endif"
$write cvh "#ifdef USE_MANUAL"
$write cvh "#undef USE_MANUAL"
$write cvh "#endif"
'MQTT' => 1,
'POP3' => 1,
'POP3S' => 1,
- 'RTMP' => 1,
- 'RTMPS' => 1,
'RTSP' => 1,
'SCP' => 1,
'SFTP' => 1,
"mqtts",
"pop3",
"pop3s",
- "rtmp",
- "rtmpt",
- "rtmpe",
- "rtmpte",
- "rtmps",
- "rtmpts",
"rtsp",
"scp",
"sftp",
#endif /* !CURL_DISABLE_IPFS */
curl_mprintf("Protocols:");
for(builtin = built_in_protos; *builtin; ++builtin) {
- /* Special case: do not list rtmp?* protocols.
- They may only appear together with "rtmp" */
- if(!curl_strnequal(*builtin, "rtmp", 4) || !builtin[0][4])
- curl_mprintf(" %s", *builtin);
+ curl_mprintf(" %s", *builtin);
#ifndef CURL_DISABLE_IPFS
if(insert && insert == *builtin) {
curl_mprintf(" ipfs ipns");
<verify>
<stdout mode="text">
-205 invokes
+199 invokes
</stdout>
</verify>
</testcase>
/* all upper */
"DICT", "FILE", "FTP", "FTPS", "GOPHER", "GOPHERS", "HTTP", "HTTPS",
"IMAP", "IMAPS", "LDAP", "LDAPS", "MQTT", "MQTTS", "POP3", "POP3S",
- "RTMP", "RTMPS", "RTSP", "SCP", "SFTP", "SMB", "SMBS", "SMTP", "SMTPS",
+ "RTSP", "SCP", "SFTP", "SMB", "SMBS", "SMTP", "SMTPS",
"TELNET", "TFTP", "WS", "WSS",
/* all lower */
"dict", "file", "ftp", "ftps", "gopher", "gophers", "http", "https",
"imap", "imaps", "ldap", "ldaps", "mqtt", "mqtts", "pop3", "pop3s",
- "rtmp", "rtmps", "rtsp", "scp", "sftp", "smb", "smbs", "smtp", "smtps",
+ "rtsp", "scp", "sftp", "smb", "smbs", "smtp", "smtps",
"telnet", "tftp", "ws", "wss",
/* mixed */
"diCt", "fIle", "Ftp", "ftpS", "Gopher", "gOphers", "htTp", "httPs",
"imAP", "imaPS", "LDap", "LDAps", "mQTT", "mqtTS", "pOP3", "pOP3s",
- "rTMp", "rTMPS", "RtsP", "ScP", "SFtP", "Smb", "smBS", "sMTP", "SMTPs",
+ "RtsP", "ScP", "SFtP", "Smb", "smBS", "sMTP", "SMTPs",
"TELNEt", "tFTP", "Ws", "wSS",
};
/* non-existing schemes */