mirror of
https://github.com/curl/curl.git
synced 2026-04-11 12:01:42 +08:00
rtmp: drop support
- 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 - RTMP was used by 2.2% of curl users (self-identified in the 2025 survey) Closes #20673
This commit is contained in:
parent
ff28f67970
commit
ceae02db04
8
.github/labeler.yml
vendored
8
.github/labeler.yml
vendored
@ -369,14 +369,6 @@ POP3:
|
|||||||
lib/pop3.*\
|
lib/pop3.*\
|
||||||
}"
|
}"
|
||||||
|
|
||||||
RTMP:
|
|
||||||
- all:
|
|
||||||
- changed-files:
|
|
||||||
- any-glob-to-all-files: "{\
|
|
||||||
CMake/FindLibrtmp.cmake,\
|
|
||||||
lib/curl_rtmp.*\
|
|
||||||
}"
|
|
||||||
|
|
||||||
RTSP:
|
RTSP:
|
||||||
- all:
|
- all:
|
||||||
- changed-files:
|
- changed-files:
|
||||||
|
|||||||
1
.github/scripts/cmp-config.pl
vendored
1
.github/scripts/cmp-config.pl
vendored
@ -53,7 +53,6 @@ my %remove = (
|
|||||||
'#define HAVE_LDAP_SSL 1' => 1,
|
'#define HAVE_LDAP_SSL 1' => 1,
|
||||||
'#define HAVE_LIBBROTLIDEC 1' => 1,
|
'#define HAVE_LIBBROTLIDEC 1' => 1,
|
||||||
'#define HAVE_LIBPSL_H 1' => 1,
|
'#define HAVE_LIBPSL_H 1' => 1,
|
||||||
'#define HAVE_LIBRTMP_RTMP_H 1' => 1,
|
|
||||||
'#define HAVE_LIBSOCKET 1' => 1,
|
'#define HAVE_LIBSOCKET 1' => 1,
|
||||||
'#define HAVE_LIBSSH' => 1,
|
'#define HAVE_LIBSSH' => 1,
|
||||||
'#define HAVE_LIBSSH2 1' => 1,
|
'#define HAVE_LIBSSH2 1' => 1,
|
||||||
|
|||||||
6
.github/workflows/codeql.yml
vendored
6
.github/workflows/codeql.yml
vendored
@ -74,7 +74,7 @@ jobs:
|
|||||||
sudo rm -f /etc/apt/sources.list.d/{azure-cli.sources,microsoft-prod.list,ondrej-ubuntu-php-noble.sources}
|
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 update
|
||||||
sudo apt-get -o Dpkg::Use-Pty=0 install libpsl-dev libbrotli-dev libidn2-dev libssh2-1-dev libssh-dev \
|
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
|
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
|
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||||
@ -110,7 +110,7 @@ jobs:
|
|||||||
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"
|
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 \
|
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 \
|
-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
|
-DCURL_DISABLE_VERBOSE_STRINGS=ON
|
||||||
cmake --build _bld1
|
cmake --build _bld1
|
||||||
cmake --build _bld1 --target testdeps
|
cmake --build _bld1 --target testdeps
|
||||||
@ -121,7 +121,7 @@ jobs:
|
|||||||
cmake -B _bld2 -G Ninja -DCURL_DISABLE_TYPECHECK=ON -DCURL_WERROR=ON \
|
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_OPENSSL=ON -DOPENSSL_ROOT_DIR="$(brew --prefix openssl)" -DUSE_NGTCP2=ON \
|
||||||
-DCURL_USE_LIBSSH2=OFF -DCURL_USE_LIBSSH=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
|
||||||
cmake --build _bld2 --target testdeps
|
cmake --build _bld2 --target testdeps
|
||||||
cmake --build _bld2 --target curl-examples-build
|
cmake --build _bld2 --target curl-examples-build
|
||||||
|
|||||||
8
.github/workflows/linux-old.yml
vendored
8
.github/workflows/linux-old.yml
vendored
@ -69,7 +69,7 @@ jobs:
|
|||||||
sha256sum freexian-archive-keyring_2022.06.08_all.deb && dpkg -i freexian-archive-keyring_2022.06.08_all.deb
|
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
|
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 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
|
# 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
|
# 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.
|
# the main repo, so force the install.
|
||||||
@ -95,7 +95,7 @@ jobs:
|
|||||||
- name: 'CM build-only configure (out-of-tree)'
|
- name: 'CM build-only configure (out-of-tree)'
|
||||||
run: |
|
run: |
|
||||||
~/cmake/bin/cmake -B bld-1 -G Ninja -DCMAKE_UNITY_BUILD=ON -DCURL_WERROR=ON -DBUILD_SHARED_LIBS=ON \
|
~/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'
|
- name: 'CM build-only build'
|
||||||
run: |
|
run: |
|
||||||
@ -119,7 +119,7 @@ jobs:
|
|||||||
- name: 'CM configure (out-of-tree, c-ares, zstd, gssapi)'
|
- name: 'CM configure (out-of-tree, c-ares, zstd, gssapi)'
|
||||||
run: |
|
run: |
|
||||||
~/cmake/bin/cmake -B bld-cares -G Ninja -DCMAKE_UNITY_BUILD=ON -DCURL_WERROR=ON -DBUILD_SHARED_LIBS=ON \
|
~/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
|
-DCURL_LIBCURL_VERSIONED_SYMBOLS=ON
|
||||||
|
|
||||||
- name: 'CM configure log'
|
- name: 'CM configure log'
|
||||||
@ -158,7 +158,7 @@ jobs:
|
|||||||
cd bld-am
|
cd bld-am
|
||||||
../configure --prefix="$PWD"/../curl-install-am --enable-unity --enable-warnings --enable-werror --disable-shared \
|
../configure --prefix="$PWD"/../curl-install-am --enable-unity --enable-warnings --enable-werror --disable-shared \
|
||||||
--disable-dependency-tracking --enable-option-checking=fatal \
|
--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'
|
- name: 'AM configure log'
|
||||||
if: ${{ !cancelled() }}
|
if: ${{ !cancelled() }}
|
||||||
|
|||||||
10
.github/workflows/linux.yml
vendored
10
.github/workflows/linux.yml
vendored
@ -232,7 +232,7 @@ jobs:
|
|||||||
--with-openssl --enable-debug --disable-unity
|
--with-openssl --enable-debug --disable-unity
|
||||||
--disable-dict --disable-gopher --disable-ldap --disable-telnet
|
--disable-dict --disable-gopher --disable-ldap --disable-telnet
|
||||||
--disable-imap --disable-pop3 --disable-smtp
|
--disable-imap --disable-pop3 --disable-smtp
|
||||||
--without-librtmp --disable-rtsp
|
--disable-rtsp
|
||||||
--without-libssh2 --without-libssh
|
--without-libssh2 --without-libssh
|
||||||
--disable-tftp --disable-ftp --disable-file --disable-smb
|
--disable-tftp --disable-ftp --disable-file --disable-smb
|
||||||
|
|
||||||
@ -249,14 +249,14 @@ jobs:
|
|||||||
generate: -DCURL_USE_OPENSSL=ON -DENABLE_DEBUG=ON -DENABLE_ARES=ON
|
generate: -DCURL_USE_OPENSSL=ON -DENABLE_DEBUG=ON -DENABLE_ARES=ON
|
||||||
|
|
||||||
- name: 'openssl i686'
|
- 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: >-
|
configure: >-
|
||||||
PKG_CONFIG_PATH=/usr/lib/i386-linux-gnu/pkgconfig
|
PKG_CONFIG_PATH=/usr/lib/i386-linux-gnu/pkgconfig
|
||||||
CC=i686-linux-gnu-gcc-14
|
CC=i686-linux-gnu-gcc-14
|
||||||
CPPFLAGS=-I/usr/include/i386-linux-gnu
|
CPPFLAGS=-I/usr/include/i386-linux-gnu
|
||||||
LDFLAGS=-L/usr/lib/i386-linux-gnu
|
LDFLAGS=-L/usr/lib/i386-linux-gnu
|
||||||
--host=i686-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'
|
- name: '!ssl !http !smtp !imap'
|
||||||
image: ubuntu-24.04-arm
|
image: ubuntu-24.04-arm
|
||||||
@ -275,7 +275,7 @@ jobs:
|
|||||||
-DCURL_DISABLE_LDAP=ON -DUSE_LIBIDN2=OFF -DCURL_USE_LIBSSH2=OFF
|
-DCURL_DISABLE_LDAP=ON -DUSE_LIBIDN2=OFF -DCURL_USE_LIBSSH2=OFF
|
||||||
|
|
||||||
- name: 'clang-tidy'
|
- 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: skiprun mbedtls-latest-intel rustls wolfssl-opensslextra-intel
|
||||||
install_steps_brew: gsasl
|
install_steps_brew: gsasl
|
||||||
CC: clang-20
|
CC: clang-20
|
||||||
@ -283,7 +283,7 @@ jobs:
|
|||||||
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
|
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: >-
|
generate: >-
|
||||||
-DCURL_USE_OPENSSL=ON -DCURL_USE_WOLFSSL=ON -DCURL_USE_GNUTLS=ON -DCURL_USE_MBEDTLS=ON -DCURL_USE_RUSTLS=ON
|
-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
|
-DUSE_ECH=ON -DCURL_USE_GSSAPI=ON -DUSE_SSLS_EXPORT=ON
|
||||||
-DCURL_CLANG_TIDY=ON -DCLANG_TIDY=/usr/bin/clang-tidy-20
|
-DCURL_CLANG_TIDY=ON -DCLANG_TIDY=/usr/bin/clang-tidy-20
|
||||||
|
|
||||||
|
|||||||
12
.github/workflows/macos.yml
vendored
12
.github/workflows/macos.yml
vendored
@ -240,7 +240,7 @@ jobs:
|
|||||||
-DCURL_ENABLE_SSL=OFF -DHTTP_ONLY=ON
|
-DCURL_ENABLE_SSL=OFF -DHTTP_ONLY=ON
|
||||||
-DCURL_DISABLE_NTLM=ON -DCURL_DISABLE_ALTSVC=ON -DENABLE_UNIX_SOCKETS=OFF
|
-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_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
|
-DCURL_BROTLI=OFF -DCURL_ZLIB=OFF -DCURL_ZSTD=OFF
|
||||||
-DBUILD_STATIC_LIBS=ON -DBUILD_SHARED_LIBS=OFF
|
-DBUILD_STATIC_LIBS=ON -DBUILD_SHARED_LIBS=OFF
|
||||||
|
|
||||||
@ -265,19 +265,19 @@ jobs:
|
|||||||
compiler: clang
|
compiler: clang
|
||||||
generate: -DENABLE_DEBUG=ON -DOPENSSL_ROOT_DIR=/opt/homebrew/opt/openssl -DCURL_BROTLI=OFF -DCURL_ZSTD=OFF -DCURL_USE_LIBSSH2=OFF
|
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'
|
tflags: '--test-event --min=1300'
|
||||||
- name: 'OpenSSL gsasl rtmp AppleIDN SecTrust +examples'
|
- name: 'OpenSSL gsasl AppleIDN SecTrust +examples'
|
||||||
compiler: clang
|
compiler: clang
|
||||||
install: libnghttp3 libngtcp2 gsasl rtmpdump
|
install: libnghttp3 libngtcp2 gsasl
|
||||||
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
|
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'
|
- name: 'MultiSSL AppleIDN clang-tidy +examples'
|
||||||
image: macos-26
|
image: macos-26
|
||||||
compiler: clang
|
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
|
install_steps: skiprun
|
||||||
chkprefill: _chkprefill
|
chkprefill: _chkprefill
|
||||||
generate: >-
|
generate: >-
|
||||||
-DCURL_USE_OPENSSL=ON -DOPENSSL_ROOT_DIR=/opt/homebrew/opt/libressl -DCURL_DEFAULT_SSL_BACKEND=openssl
|
-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_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_USE_GSSAPI=ON -DGSS_ROOT_DIR=/opt/homebrew/opt/krb5
|
||||||
-DCURL_BROTLI=ON -DCURL_ZSTD=ON
|
-DCURL_BROTLI=ON -DCURL_ZSTD=ON
|
||||||
|
|||||||
@ -1,106 +0,0 @@
|
|||||||
#***************************************************************************
|
|
||||||
# _ _ ____ _
|
|
||||||
# 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()
|
|
||||||
@ -91,10 +91,6 @@ if("@USE_LIBPSL@")
|
|||||||
find_dependency(Libpsl MODULE)
|
find_dependency(Libpsl MODULE)
|
||||||
list(APPEND _curl_libs CURL::libpsl)
|
list(APPEND _curl_libs CURL::libpsl)
|
||||||
endif()
|
endif()
|
||||||
if("@USE_LIBRTMP@")
|
|
||||||
find_dependency(Librtmp MODULE)
|
|
||||||
list(APPEND _curl_libs CURL::librtmp)
|
|
||||||
endif()
|
|
||||||
if("@USE_LIBSSH@")
|
if("@USE_LIBSSH@")
|
||||||
find_dependency(Libssh MODULE)
|
find_dependency(Libssh MODULE)
|
||||||
list(APPEND _curl_libs CURL::libssh)
|
list(APPEND _curl_libs CURL::libssh)
|
||||||
|
|||||||
@ -1346,12 +1346,6 @@ if(CURL_USE_LIBUV)
|
|||||||
set(HAVE_UV_H ON)
|
set(HAVE_UV_H ON)
|
||||||
endif()
|
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)
|
option(ENABLE_UNIX_SOCKETS "Enable Unix domain sockets support" ON)
|
||||||
if(ENABLE_UNIX_SOCKETS)
|
if(ENABLE_UNIX_SOCKETS)
|
||||||
if(WIN32 OR DOS)
|
if(WIN32 OR DOS)
|
||||||
@ -1981,7 +1975,6 @@ curl_add_if("SFTP" USE_LIBSSH2 OR USE_LIBSSH)
|
|||||||
curl_add_if("IPFS" NOT CURL_DISABLE_IPFS)
|
curl_add_if("IPFS" NOT CURL_DISABLE_IPFS)
|
||||||
curl_add_if("IPNS" NOT CURL_DISABLE_IPFS)
|
curl_add_if("IPNS" NOT CURL_DISABLE_IPFS)
|
||||||
curl_add_if("RTSP" NOT CURL_DISABLE_RTSP)
|
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("MQTT" NOT CURL_DISABLE_MQTT)
|
||||||
curl_add_if("MQTTS" NOT CURL_DISABLE_MQTT AND _ssl_enabled)
|
curl_add_if("MQTTS" NOT CURL_DISABLE_MQTT AND _ssl_enabled)
|
||||||
curl_add_if("WS" NOT CURL_DISABLE_WEBSOCKETS)
|
curl_add_if("WS" NOT CURL_DISABLE_WEBSOCKETS)
|
||||||
@ -2343,7 +2336,6 @@ if(NOT CURL_DISABLE_INSTALL)
|
|||||||
# USE_GNUTLS
|
# USE_GNUTLS
|
||||||
# USE_GSASL
|
# USE_GSASL
|
||||||
# USE_LIBPSL
|
# USE_LIBPSL
|
||||||
# USE_LIBRTMP
|
|
||||||
# USE_LIBSSH
|
# USE_LIBSSH
|
||||||
# USE_LIBSSH2
|
# USE_LIBSSH2
|
||||||
# USE_LIBUV
|
# USE_LIBUV
|
||||||
@ -2380,7 +2372,6 @@ if(NOT CURL_DISABLE_INSTALL)
|
|||||||
"${CMAKE_CURRENT_SOURCE_DIR}/CMake/FindLibgsasl.cmake"
|
"${CMAKE_CURRENT_SOURCE_DIR}/CMake/FindLibgsasl.cmake"
|
||||||
"${CMAKE_CURRENT_SOURCE_DIR}/CMake/FindLibidn2.cmake"
|
"${CMAKE_CURRENT_SOURCE_DIR}/CMake/FindLibidn2.cmake"
|
||||||
"${CMAKE_CURRENT_SOURCE_DIR}/CMake/FindLibpsl.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/FindLibssh.cmake"
|
||||||
"${CMAKE_CURRENT_SOURCE_DIR}/CMake/FindLibssh2.cmake"
|
"${CMAKE_CURRENT_SOURCE_DIR}/CMake/FindLibssh2.cmake"
|
||||||
"${CMAKE_CURRENT_SOURCE_DIR}/CMake/FindLibuv.cmake"
|
"${CMAKE_CURRENT_SOURCE_DIR}/CMake/FindLibuv.cmake"
|
||||||
|
|||||||
@ -40,7 +40,6 @@ CMAKE_DIST = \
|
|||||||
CMake/FindLibgsasl.cmake \
|
CMake/FindLibgsasl.cmake \
|
||||||
CMake/FindLibidn2.cmake \
|
CMake/FindLibidn2.cmake \
|
||||||
CMake/FindLibpsl.cmake \
|
CMake/FindLibpsl.cmake \
|
||||||
CMake/FindLibrtmp.cmake \
|
|
||||||
CMake/FindLibssh.cmake \
|
CMake/FindLibssh.cmake \
|
||||||
CMake/FindLibssh2.cmake \
|
CMake/FindLibssh2.cmake \
|
||||||
CMake/FindLibuv.cmake \
|
CMake/FindLibuv.cmake \
|
||||||
|
|||||||
@ -8,8 +8,8 @@ SPDX-License-Identifier: curl
|
|||||||
|
|
||||||
curl is a command-line tool for transferring data from or to a server using
|
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,
|
URLs. It supports these protocols: DICT, FILE, FTP, FTPS, GOPHER, GOPHERS,
|
||||||
HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, MQTT, MQTTS, POP3, POP3S, RTMP, RTMPS,
|
HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, MQTT, MQTTS, POP3, POP3S, RTSP, SCP,
|
||||||
RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET, TFTP, WS and WSS.
|
SFTP, SMB, SMBS, SMTP, SMTPS, TELNET, TFTP, WS and WSS.
|
||||||
|
|
||||||
Learn how to use curl by reading [the
|
Learn how to use curl by reading [the
|
||||||
man page](https://curl.se/docs/manpage.html) or [everything
|
man page](https://curl.se/docs/manpage.html) or [everything
|
||||||
|
|||||||
85
configure.ac
85
configure.ac
@ -165,7 +165,6 @@ curl_unix_sockets_msg="no (--enable-unix-sockets)"
|
|||||||
curl_ldaps_msg="no (--enable-ldaps)"
|
curl_ldaps_msg="no (--enable-ldaps)"
|
||||||
curl_ipfs_msg="no (--enable-ipfs)"
|
curl_ipfs_msg="no (--enable-ipfs)"
|
||||||
curl_rtsp_msg="no (--enable-rtsp)"
|
curl_rtsp_msg="no (--enable-rtsp)"
|
||||||
curl_rtmp_msg="no (--with-librtmp)"
|
|
||||||
curl_psl_msg="no (--with-libpsl)"
|
curl_psl_msg="no (--with-libpsl)"
|
||||||
curl_altsvc_msg="enabled (--disable-alt-svc)"
|
curl_altsvc_msg="enabled (--disable-alt-svc)"
|
||||||
curl_headers_msg="enabled (--disable-headers-api)"
|
curl_headers_msg="enabled (--disable-headers-api)"
|
||||||
@ -2689,86 +2688,6 @@ if test "$CURL_DISABLE_LDAPS" != "1"; then
|
|||||||
curl_ldaps_msg="enabled"
|
curl_ldaps_msg="enabled"
|
||||||
fi
|
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 **********************************************************************
|
||||||
dnl Check for linker switch for versioned symbols
|
dnl Check for linker switch for versioned symbols
|
||||||
dnl **********************************************************************
|
dnl **********************************************************************
|
||||||
@ -5409,9 +5328,6 @@ fi
|
|||||||
if test "$CURL_DISABLE_RTSP" != "1"; then
|
if test "$CURL_DISABLE_RTSP" != "1"; then
|
||||||
SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS RTSP"
|
SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS RTSP"
|
||||||
fi
|
fi
|
||||||
if test "$USE_LIBRTMP" = "1"; then
|
|
||||||
SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS RTMP"
|
|
||||||
fi
|
|
||||||
if test "$CURL_DISABLE_WEBSOCKETS" != "1"; then
|
if test "$CURL_DISABLE_WEBSOCKETS" != "1"; then
|
||||||
SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS WS"
|
SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS WS"
|
||||||
if test "$SSL_ENABLED" = "1"; then
|
if test "$SSL_ENABLED" = "1"; then
|
||||||
@ -5523,7 +5439,6 @@ AC_MSG_NOTICE([Configured to build curl/libcurl:
|
|||||||
LDAPS: ${curl_ldaps_msg}
|
LDAPS: ${curl_ldaps_msg}
|
||||||
IPFS/IPNS: ${curl_ipfs_msg}
|
IPFS/IPNS: ${curl_ipfs_msg}
|
||||||
RTSP: ${curl_rtsp_msg}
|
RTSP: ${curl_rtsp_msg}
|
||||||
RTMP: ${curl_rtmp_msg}
|
|
||||||
PSL: ${curl_psl_msg}
|
PSL: ${curl_psl_msg}
|
||||||
Alt-svc: ${curl_altsvc_msg}
|
Alt-svc: ${curl_altsvc_msg}
|
||||||
Headers API: ${curl_headers_msg}
|
Headers API: ${curl_headers_msg}
|
||||||
|
|||||||
@ -16,18 +16,6 @@ how your use case cannot be satisfied properly using a workaround.
|
|||||||
|
|
||||||
In March 2026, we drop support for all c-ares versions before 1.16.0.
|
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
|
## TLS-SRP Authentication
|
||||||
|
|
||||||
Transport Layer Security Secure Remote Password is a TLS feature that does not
|
Transport Layer Security Secure Remote Password is a TLS feature that does not
|
||||||
@ -73,3 +61,5 @@ After curl 8.19.0 NTLM support becomes opt-in.
|
|||||||
- Support for Windows XP (removed in 8.19.0)
|
- Support for Windows XP (removed in 8.19.0)
|
||||||
- OpenSSL-QUIC (removed in 8.19.0)
|
- OpenSSL-QUIC (removed in 8.19.0)
|
||||||
- CMake 3.17 and older (removed in 8.20.0)
|
- CMake 3.17 and older (removed in 8.20.0)
|
||||||
|
- RTMP (removed in 8.20.0)
|
||||||
|
|
||||||
|
|||||||
@ -21,8 +21,8 @@ The curl project produces two products:
|
|||||||
### libcurl
|
### libcurl
|
||||||
|
|
||||||
A client-side URL transfer library, supporting DICT, FILE, FTP, FTPS, GOPHER,
|
A client-side URL transfer library, supporting DICT, FILE, FTP, FTPS, GOPHER,
|
||||||
GOPHERS, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, MQTT, MQTTS, POP3, POP3S, RTMP,
|
GOPHERS, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, MQTT, MQTTS, POP3, POP3S,
|
||||||
RTMPS, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET, TFTP, WS and WSS.
|
RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET, TFTP, WS and WSS.
|
||||||
|
|
||||||
libcurl supports HTTPS certificates, HTTP POST, HTTP PUT, FTP uploading,
|
libcurl supports HTTPS certificates, HTTP POST, HTTP PUT, FTP uploading,
|
||||||
Kerberos, SPNEGO, HTTP form based upload, proxies, cookies, user+password
|
Kerberos, SPNEGO, HTTP form based upload, proxies, cookies, user+password
|
||||||
|
|||||||
@ -493,3 +493,7 @@ We drop support for krb-ftp, Heimdal, wolfSSH and the winbuild build system.
|
|||||||
Add support for Apple SecTrust, native CA certs on Apple systems.
|
Add support for Apple SecTrust, native CA certs on Apple systems.
|
||||||
|
|
||||||
December 15: the website served 78 TB over the last month.
|
December 15: the website served 78 TB over the last month.
|
||||||
|
|
||||||
|
## 2026
|
||||||
|
|
||||||
|
April: removed support for RTMP
|
||||||
|
|||||||
@ -367,7 +367,6 @@ Details via CMake
|
|||||||
- `USE_APPLE_IDN`: Use Apple built-in IDN support. Default: `OFF`
|
- `USE_APPLE_IDN`: Use Apple built-in IDN support. Default: `OFF`
|
||||||
- `USE_APPLE_SECTRUST`: Use Apple OS-native certificate verification. Default: `OFF`
|
- `USE_APPLE_SECTRUST`: Use Apple OS-native certificate verification. Default: `OFF`
|
||||||
- `USE_LIBIDN2`: Use libidn2 for IDN support. Default: `ON`
|
- `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_NGHTTP2`: Use nghttp2 library. Default: `ON`
|
||||||
- `USE_NGTCP2`: Use ngtcp2 and nghttp3 libraries for HTTP/3 support. Default: `OFF`
|
- `USE_NGTCP2`: Use ngtcp2 and nghttp3 libraries for HTTP/3 support. Default: `OFF`
|
||||||
- `USE_QUICHE`: Use quiche library for HTTP/3 support. Default: `OFF`
|
- `USE_QUICHE`: Use quiche library for HTTP/3 support. Default: `OFF`
|
||||||
@ -418,8 +417,6 @@ Details via CMake
|
|||||||
- `LIBIDN2_LIBRARY`: Absolute path to `libidn2` library.
|
- `LIBIDN2_LIBRARY`: Absolute path to `libidn2` library.
|
||||||
- `LIBPSL_INCLUDE_DIR`: Absolute path to libpsl include directory.
|
- `LIBPSL_INCLUDE_DIR`: Absolute path to libpsl include directory.
|
||||||
- `LIBPSL_LIBRARY`: Absolute path to `libpsl` library.
|
- `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_INCLUDE_DIR`: Absolute path to libssh include directory.
|
||||||
- `LIBSSH_LIBRARY`: Absolute path to `libssh` library.
|
- `LIBSSH_LIBRARY`: Absolute path to `libssh` library.
|
||||||
- `LIBSSH_USE_STATIC_LIBS`: Configure for static libssh libraries. (experimental)
|
- `LIBSSH_USE_STATIC_LIBS`: Configure for static libssh libraries. (experimental)
|
||||||
|
|||||||
@ -623,7 +623,6 @@ disabling support for some features (run `./configure --help` to see them all):
|
|||||||
- `--without-ngtcp2` (HTTP/2 using ngtcp2)
|
- `--without-ngtcp2` (HTTP/2 using ngtcp2)
|
||||||
- `--without-zstd` (Zstd on-the-fly decompression)
|
- `--without-zstd` (Zstd on-the-fly decompression)
|
||||||
- `--without-libidn2` (internationalized domain names)
|
- `--without-libidn2` (internationalized domain names)
|
||||||
- `--without-librtmp` (RTMP)
|
|
||||||
- `--without-ssl` (SSL/TLS)
|
- `--without-ssl` (SSL/TLS)
|
||||||
- `--without-zlib` (gzip/deflate on-the-fly decompression)
|
- `--without-zlib` (gzip/deflate on-the-fly decompression)
|
||||||
|
|
||||||
|
|||||||
@ -141,9 +141,8 @@ curl supports the following schemes on URLs specified to transfer. They are
|
|||||||
matched case insensitively:
|
matched case insensitively:
|
||||||
|
|
||||||
`dict`, `file`, `ftp`, `ftps`, `gopher`, `gophers`, `http`, `https`, `imap`,
|
`dict`, `file`, `ftp`, `ftps`, `gopher`, `gophers`, `http`, `https`, `imap`,
|
||||||
`imaps`, `ldap`, `ldaps`, `mqtt`, `pop3`, `pop3s`, `rtmp`, `rtmpe`, `rtmps`,
|
`imaps`, `ldap`, `ldaps`, `mqtt`, `pop3`, `pop3s`, `rtsp`, `smb`, `smbs`,
|
||||||
`rtmpt`, `rtmpte`, `rtmpts`, `rtsp`, `smb`, `smbs`, `smtp`, `smtps`, `telnet`,
|
`smtp`, `smtps`, `telnet`, `tftp`
|
||||||
`tftp`
|
|
||||||
|
|
||||||
When the URL is specified to identify a proxy, curl recognizes the following
|
When the URL is specified to identify a proxy, curl recognizes the following
|
||||||
schemes:
|
schemes:
|
||||||
@ -209,10 +208,9 @@ only if the URL starts with a scheme.
|
|||||||
If the port number is not specified in the URL, curl uses a default port
|
If the port number is not specified in the URL, curl uses a default port
|
||||||
number based on the provide scheme:
|
number based on the provide scheme:
|
||||||
|
|
||||||
DICT 2628, FTP 21, FTPS 990, GOPHER 70, GOPHERS 70, HTTP 80, HTTPS 443,
|
DICT 2628, FTP 21, FTPS 990, GOPHER 70, GOPHERS 70, HTTP 80, HTTPS 443, IMAP
|
||||||
IMAP 143, IMAPS 993, LDAP 389, LDAPS 636, MQTT 1883, POP3 110, POP3S 995,
|
143, IMAPS 993, LDAP 389, LDAPS 636, MQTT 1883, POP3 110, POP3S 995, RTSP 554,
|
||||||
RTMP 1935, RTMPS 443, RTMPT 80, RTSP 554, SCP 22, SFTP 22, SMB 445, SMBS 445,
|
SCP 22, SFTP 22, SMB 445, SMBS 445, SMTP 25, SMTPS 465, TELNET 23, TFTP 69
|
||||||
SMTP 25, SMTPS 465, TELNET 23, TFTP 69
|
|
||||||
|
|
||||||
# Scheme specific behaviors
|
# Scheme specific behaviors
|
||||||
|
|
||||||
@ -381,15 +379,3 @@ machine's fully qualified domain name, which you might have obtained from an
|
|||||||
external function such as gethostname or getaddrinfo.
|
external function such as gethostname or getaddrinfo.
|
||||||
|
|
||||||
The default smtp port is 25. Some servers use port 587 as an alternative.
|
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`.
|
|
||||||
|
|||||||
@ -4,8 +4,8 @@
|
|||||||
|
|
||||||
**curl** is a tool for transferring data from or to a server using URLs. It
|
**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,
|
supports these protocols: DICT, FILE, FTP, FTPS, GOPHER, GOPHERS, HTTP, HTTPS,
|
||||||
IMAP, IMAPS, LDAP, LDAPS, MQTT, MQTTS, POP3, POP3S, RTMP, RTMPS, RTSP, SCP,
|
IMAP, IMAPS, LDAP, LDAPS, MQTT, MQTTS, POP3, POP3S, RTSP, SCP, SFTP, SMB,
|
||||||
SFTP, SMB, SMBS, SMTP, SMTPS, TELNET, TFTP, WS and WSS.
|
SMBS, SMTP, SMTPS, TELNET, TFTP, WS and WSS.
|
||||||
|
|
||||||
curl is powered by libcurl for all transfer-related features. See
|
curl is powered by libcurl for all transfer-related features. See
|
||||||
*libcurl(3)* for details.
|
*libcurl(3)* for details.
|
||||||
|
|||||||
@ -30,9 +30,6 @@ supported (yet).
|
|||||||
## POP3(S)
|
## POP3(S)
|
||||||
Downloading from a pop3 server means getting an email. With or without using
|
Downloading from a pop3 server means getting an email. With or without using
|
||||||
TLS.
|
TLS.
|
||||||
## RTMP(S)
|
|
||||||
The **Realtime Messaging Protocol** is primarily used to serve streaming media
|
|
||||||
and curl can download it.
|
|
||||||
## RTSP
|
## RTSP
|
||||||
curl supports RTSP 1.0 downloads.
|
curl supports RTSP 1.0 downloads.
|
||||||
## SCP
|
## SCP
|
||||||
|
|||||||
@ -42,8 +42,8 @@ set, it returns error.
|
|||||||
These are the available protocols:
|
These are the available protocols:
|
||||||
|
|
||||||
DICT, FILE, FTP, FTPS, GOPHER, GOPHERS, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS,
|
DICT, FILE, FTP, FTPS, GOPHER, GOPHERS, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS,
|
||||||
MQTT, MQTTS, POP3, POP3S, RTMP, RTMPE, RTMPS, RTMPT, RTMPTE, RTMPTS, RTSP,
|
MQTT, MQTTS, POP3, POP3S, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET,
|
||||||
SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET, TFTP, WS, WSS
|
TFTP, WS, WSS
|
||||||
|
|
||||||
You can set "ALL" as a short-cut to enable all protocols. Note that by setting
|
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
|
all, you may enable protocols that were not supported the day you write this
|
||||||
@ -81,6 +81,10 @@ int main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
|
# HISTORY
|
||||||
|
|
||||||
|
RTMP and its related protocol schemes are not supported since curl 8.20.0
|
||||||
|
|
||||||
# %AVAILABILITY%
|
# %AVAILABILITY%
|
||||||
|
|
||||||
# RETURN VALUE
|
# RETURN VALUE
|
||||||
|
|||||||
@ -46,8 +46,8 @@ By default libcurl allows HTTP, HTTPS, FTP and FTPS on redirects (since
|
|||||||
These are the available protocols:
|
These are the available protocols:
|
||||||
|
|
||||||
DICT, FILE, FTP, FTPS, GOPHER, GOPHERS, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS,
|
DICT, FILE, FTP, FTPS, GOPHER, GOPHERS, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS,
|
||||||
MQTT, MQTTS, POP3, POP3S, RTMP, RTMPE, RTMPS, RTMPT, RTMPTE, RTMPTS, RTSP,
|
MQTT, MQTTS, POP3, POP3S, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET,
|
||||||
SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET, TFTP, WS, WSS
|
TFTP, WS, WSS
|
||||||
|
|
||||||
You can set "ALL" as a short-cut to enable all protocols. Note that by setting
|
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
|
all, you may enable protocols that were not supported the day you write this
|
||||||
|
|||||||
@ -970,12 +970,12 @@ CURLPROTO_LDAPS 7.19.4
|
|||||||
CURLPROTO_MQTT 7.71.0
|
CURLPROTO_MQTT 7.71.0
|
||||||
CURLPROTO_POP3 7.20.0
|
CURLPROTO_POP3 7.20.0
|
||||||
CURLPROTO_POP3S 7.20.0
|
CURLPROTO_POP3S 7.20.0
|
||||||
CURLPROTO_RTMP 7.21.0
|
CURLPROTO_RTMP 7.21.0 8.20.0
|
||||||
CURLPROTO_RTMPE 7.21.0
|
CURLPROTO_RTMPE 7.21.0 8.20.0
|
||||||
CURLPROTO_RTMPS 7.21.0
|
CURLPROTO_RTMPS 7.21.0 8.20.0
|
||||||
CURLPROTO_RTMPT 7.21.0
|
CURLPROTO_RTMPT 7.21.0 8.20.0
|
||||||
CURLPROTO_RTMPTE 7.21.0
|
CURLPROTO_RTMPTE 7.21.0 8.20.0
|
||||||
CURLPROTO_RTMPTS 7.21.0
|
CURLPROTO_RTMPTS 7.21.0 8.20.0
|
||||||
CURLPROTO_RTSP 7.20.0
|
CURLPROTO_RTSP 7.20.0
|
||||||
CURLPROTO_SCP 7.19.4
|
CURLPROTO_SCP 7.19.4
|
||||||
CURLPROTO_SFTP 7.19.4
|
CURLPROTO_SFTP 7.19.4
|
||||||
|
|||||||
@ -171,7 +171,6 @@ LIB_CFILES = \
|
|||||||
curl_memrchr.c \
|
curl_memrchr.c \
|
||||||
curl_ntlm_core.c \
|
curl_ntlm_core.c \
|
||||||
curl_range.c \
|
curl_range.c \
|
||||||
curl_rtmp.c \
|
|
||||||
curl_sasl.c \
|
curl_sasl.c \
|
||||||
curl_sha512_256.c \
|
curl_sha512_256.c \
|
||||||
curl_share.c \
|
curl_share.c \
|
||||||
@ -305,7 +304,6 @@ LIB_HFILES = \
|
|||||||
curl_ntlm_core.h \
|
curl_ntlm_core.h \
|
||||||
curl_printf.h \
|
curl_printf.h \
|
||||||
curl_range.h \
|
curl_range.h \
|
||||||
curl_rtmp.h \
|
|
||||||
curl_sasl.h \
|
curl_sasl.h \
|
||||||
curl_setup.h \
|
curl_setup.h \
|
||||||
curl_sha256.h \
|
curl_sha256.h \
|
||||||
|
|||||||
@ -706,9 +706,6 @@ ${SIZEOF_TIME_T_CODE}
|
|||||||
/* if AmiSSL is in use */
|
/* if AmiSSL is in use */
|
||||||
#cmakedefine USE_AMISSL 1
|
#cmakedefine USE_AMISSL 1
|
||||||
|
|
||||||
/* if librtmp/rtmpdump is in use */
|
|
||||||
#cmakedefine USE_LIBRTMP 1
|
|
||||||
|
|
||||||
/* if GSASL is in use */
|
/* if GSASL is in use */
|
||||||
#cmakedefine USE_GSASL 1
|
#cmakedefine USE_GSASL 1
|
||||||
|
|
||||||
|
|||||||
248
lib/curl_rtmp.c
248
lib/curl_rtmp.c
@ -1,248 +0,0 @@
|
|||||||
/***************************************************************************
|
|
||||||
* _ _ ____ _
|
|
||||||
* 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 */
|
|
||||||
@ -1,31 +0,0 @@
|
|||||||
#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 */
|
|
||||||
141
lib/protocol.c
141
lib/protocol.c
@ -35,7 +35,6 @@
|
|||||||
#include "curl_ldap.h"
|
#include "curl_ldap.h"
|
||||||
#include "mqtt.h"
|
#include "mqtt.h"
|
||||||
#include "pop3.h"
|
#include "pop3.h"
|
||||||
#include "curl_rtmp.h"
|
|
||||||
#include "rtsp.h"
|
#include "rtsp.h"
|
||||||
#include "smb.h"
|
#include "smb.h"
|
||||||
#include "smtp.h"
|
#include "smtp.h"
|
||||||
@ -267,84 +266,6 @@ const struct Curl_scheme Curl_scheme_pop3s = {
|
|||||||
PORT_POP3S, /* defport */
|
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 = {
|
const struct Curl_scheme Curl_scheme_rtsp = {
|
||||||
"rtsp", /* scheme */
|
"rtsp", /* scheme */
|
||||||
#ifdef CURL_DISABLE_RTSP
|
#ifdef CURL_DISABLE_RTSP
|
||||||
@ -510,55 +431,49 @@ const struct Curl_scheme *Curl_getn_scheme(const char *scheme, size_t len)
|
|||||||
6. make sure this function uses the same hash function that worked for
|
6. make sure this function uses the same hash function that worked for
|
||||||
schemetable.c
|
schemetable.c
|
||||||
*/
|
*/
|
||||||
static const struct Curl_scheme * const all_schemes[67] = {
|
static const struct Curl_scheme * const all_schemes[47] = {
|
||||||
&Curl_scheme_file,
|
|
||||||
&Curl_scheme_mqtts, NULL,
|
|
||||||
&Curl_scheme_gophers, NULL,
|
|
||||||
&Curl_scheme_rtmpe,
|
|
||||||
&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_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_mqtt,
|
||||||
|
&Curl_scheme_smtp,
|
||||||
|
&Curl_scheme_tftp,
|
||||||
|
&Curl_scheme_imap, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
&Curl_scheme_ldaps,
|
||||||
|
&Curl_scheme_dict, NULL,
|
||||||
|
&Curl_scheme_file, NULL,
|
||||||
&Curl_scheme_pop3s,
|
&Curl_scheme_pop3s,
|
||||||
&Curl_scheme_imaps, NULL,
|
|
||||||
&Curl_scheme_ws, NULL,
|
|
||||||
&Curl_scheme_rtmpts,
|
|
||||||
&Curl_scheme_ldap, NULL, NULL,
|
|
||||||
&Curl_scheme_ftp,
|
&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)) {
|
if(len && (len <= 7)) {
|
||||||
const char *s = scheme;
|
const char *s = scheme;
|
||||||
size_t l = len;
|
size_t l = len;
|
||||||
const struct Curl_scheme *h;
|
const struct Curl_scheme *h;
|
||||||
unsigned int c = 978;
|
unsigned int c = 792;
|
||||||
while(l) {
|
while(l) {
|
||||||
c <<= 5;
|
c <<= 4;
|
||||||
c += (unsigned int)Curl_raw_tolower(*s);
|
c += (unsigned int)Curl_raw_tolower(*s);
|
||||||
s++;
|
s++;
|
||||||
l--;
|
l--;
|
||||||
}
|
}
|
||||||
|
|
||||||
h = all_schemes[c % 67];
|
h = all_schemes[c % 47];
|
||||||
if(h && curl_strnequal(scheme, h->name, len) && !h->name[len])
|
if(h && curl_strnequal(scheme, h->name, len) && !h->name[len])
|
||||||
return h;
|
return h;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -50,9 +50,6 @@ struct easy_pollset;
|
|||||||
#define PORT_SMTP 25
|
#define PORT_SMTP 25
|
||||||
#define PORT_SMTPS 465 /* sometimes called SSMTP */
|
#define PORT_SMTPS 465 /* sometimes called SSMTP */
|
||||||
#define PORT_RTSP 554
|
#define PORT_RTSP 554
|
||||||
#define PORT_RTMP 1935
|
|
||||||
#define PORT_RTMPT PORT_HTTP
|
|
||||||
#define PORT_RTMPS PORT_HTTPS
|
|
||||||
#define PORT_GOPHER 70
|
#define PORT_GOPHER 70
|
||||||
#define PORT_MQTT 1883
|
#define PORT_MQTT 1883
|
||||||
#define PORT_MQTTS 8883
|
#define PORT_MQTTS 8883
|
||||||
@ -264,12 +261,6 @@ extern const struct Curl_scheme Curl_scheme_mqtt;
|
|||||||
extern const struct Curl_scheme Curl_scheme_mqtts;
|
extern const struct Curl_scheme Curl_scheme_mqtts;
|
||||||
extern const struct Curl_scheme Curl_scheme_pop3;
|
extern const struct Curl_scheme Curl_scheme_pop3;
|
||||||
extern const struct Curl_scheme Curl_scheme_pop3s;
|
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_rtsp;
|
||||||
extern const struct Curl_scheme Curl_scheme_scp;
|
extern const struct Curl_scheme Curl_scheme_scp;
|
||||||
extern const struct Curl_scheme Curl_scheme_sftp;
|
extern const struct Curl_scheme Curl_scheme_sftp;
|
||||||
|
|||||||
@ -112,7 +112,6 @@
|
|||||||
#include "imap.h"
|
#include "imap.h"
|
||||||
#include "url.h"
|
#include "url.h"
|
||||||
#include "connect.h"
|
#include "connect.h"
|
||||||
#include "curl_rtmp.h"
|
|
||||||
#include "gopher.h"
|
#include "gopher.h"
|
||||||
#include "mqtt.h"
|
#include "mqtt.h"
|
||||||
#include "rtsp.h"
|
#include "rtsp.h"
|
||||||
|
|||||||
@ -46,11 +46,6 @@
|
|||||||
#include <libpsl.h>
|
#include <libpsl.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USE_LIBRTMP
|
|
||||||
#include <librtmp/rtmp.h>
|
|
||||||
#include "curl_rtmp.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_LIBZ
|
#ifdef HAVE_LIBZ
|
||||||
#include <zlib.h>
|
#include <zlib.h>
|
||||||
#endif
|
#endif
|
||||||
@ -178,9 +173,6 @@ char *curl_version(void)
|
|||||||
#if !defined(CURL_DISABLE_HTTP) && defined(USE_HTTP3)
|
#if !defined(CURL_DISABLE_HTTP) && defined(USE_HTTP3)
|
||||||
char h3_version[30];
|
char h3_version[30];
|
||||||
#endif
|
#endif
|
||||||
#ifdef USE_LIBRTMP
|
|
||||||
char rtmp_version[30];
|
|
||||||
#endif
|
|
||||||
#ifdef USE_GSASL
|
#ifdef USE_GSASL
|
||||||
char gsasl_buf[30];
|
char gsasl_buf[30];
|
||||||
#endif
|
#endif
|
||||||
@ -244,10 +236,6 @@ char *curl_version(void)
|
|||||||
Curl_quic_ver(h3_version, sizeof(h3_version));
|
Curl_quic_ver(h3_version, sizeof(h3_version));
|
||||||
src[i++] = h3_version;
|
src[i++] = h3_version;
|
||||||
#endif
|
#endif
|
||||||
#ifdef USE_LIBRTMP
|
|
||||||
Curl_rtmp_version(rtmp_version, sizeof(rtmp_version));
|
|
||||||
src[i++] = rtmp_version;
|
|
||||||
#endif
|
|
||||||
#ifdef USE_GSASL
|
#ifdef USE_GSASL
|
||||||
curl_msnprintf(gsasl_buf, sizeof(gsasl_buf), "libgsasl/%s",
|
curl_msnprintf(gsasl_buf, sizeof(gsasl_buf), "libgsasl/%s",
|
||||||
gsasl_check_version(NULL));
|
gsasl_check_version(NULL));
|
||||||
@ -350,14 +338,6 @@ static const char * const supported_protocols[] = {
|
|||||||
#if defined(USE_SSL) && !defined(CURL_DISABLE_POP3)
|
#if defined(USE_SSL) && !defined(CURL_DISABLE_POP3)
|
||||||
"pop3s",
|
"pop3s",
|
||||||
#endif
|
#endif
|
||||||
#ifdef USE_LIBRTMP
|
|
||||||
"rtmp",
|
|
||||||
"rtmpe",
|
|
||||||
"rtmps",
|
|
||||||
"rtmpt",
|
|
||||||
"rtmpte",
|
|
||||||
"rtmpts",
|
|
||||||
#endif
|
|
||||||
#ifndef CURL_DISABLE_RTSP
|
#ifndef CURL_DISABLE_RTSP
|
||||||
"rtsp",
|
"rtsp",
|
||||||
#endif
|
#endif
|
||||||
@ -694,13 +674,5 @@ curl_version_info_data *curl_version_info(CURLversion stamp)
|
|||||||
feature_names[n] = NULL; /* Terminate array. */
|
feature_names[n] = NULL; /* Terminate array. */
|
||||||
version_info.features = features;
|
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;
|
return &version_info;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -315,9 +315,6 @@ $write cvh "#endif"
|
|||||||
$write cvh "#ifdef USE_GNUTLS"
|
$write cvh "#ifdef USE_GNUTLS"
|
||||||
$write cvh "#undef USE_GNUTLS"
|
$write cvh "#undef USE_GNUTLS"
|
||||||
$write cvh "#endif"
|
$write cvh "#endif"
|
||||||
$write cvh "#ifdef USE_LIBRTMP"
|
|
||||||
$write cvh "#undef USE_LIBRTMP"
|
|
||||||
$write cvh "#endif"
|
|
||||||
$write cvh "#ifdef USE_MANUAL"
|
$write cvh "#ifdef USE_MANUAL"
|
||||||
$write cvh "#undef USE_MANUAL"
|
$write cvh "#undef USE_MANUAL"
|
||||||
$write cvh "#endif"
|
$write cvh "#endif"
|
||||||
|
|||||||
@ -166,8 +166,6 @@ my %knownprotos = (
|
|||||||
'MQTT' => 1,
|
'MQTT' => 1,
|
||||||
'POP3' => 1,
|
'POP3' => 1,
|
||||||
'POP3S' => 1,
|
'POP3S' => 1,
|
||||||
'RTMP' => 1,
|
|
||||||
'RTMPS' => 1,
|
|
||||||
'RTSP' => 1,
|
'RTSP' => 1,
|
||||||
'SCP' => 1,
|
'SCP' => 1,
|
||||||
'SFTP' => 1,
|
'SFTP' => 1,
|
||||||
|
|||||||
@ -46,12 +46,6 @@ static const char *scheme[] = {
|
|||||||
"mqtts",
|
"mqtts",
|
||||||
"pop3",
|
"pop3",
|
||||||
"pop3s",
|
"pop3s",
|
||||||
"rtmp",
|
|
||||||
"rtmpt",
|
|
||||||
"rtmpe",
|
|
||||||
"rtmpte",
|
|
||||||
"rtmps",
|
|
||||||
"rtmpts",
|
|
||||||
"rtsp",
|
"rtsp",
|
||||||
"scp",
|
"scp",
|
||||||
"sftp",
|
"sftp",
|
||||||
|
|||||||
@ -341,9 +341,6 @@ void tool_version_info(void)
|
|||||||
#endif /* !CURL_DISABLE_IPFS */
|
#endif /* !CURL_DISABLE_IPFS */
|
||||||
curl_mprintf("Protocols:");
|
curl_mprintf("Protocols:");
|
||||||
for(builtin = built_in_protos; *builtin; ++builtin) {
|
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
|
#ifndef CURL_DISABLE_IPFS
|
||||||
if(insert && insert == *builtin) {
|
if(insert && insert == *builtin) {
|
||||||
|
|||||||
@ -18,7 +18,7 @@ Curl_get_scheme unit test
|
|||||||
|
|
||||||
<verify>
|
<verify>
|
||||||
<stdout mode="text">
|
<stdout mode="text">
|
||||||
205 invokes
|
199 invokes
|
||||||
</stdout>
|
</stdout>
|
||||||
</verify>
|
</verify>
|
||||||
</testcase>
|
</testcase>
|
||||||
|
|||||||
@ -35,17 +35,17 @@ static CURLcode test_unit1627(const char *arg)
|
|||||||
/* all upper */
|
/* all upper */
|
||||||
"DICT", "FILE", "FTP", "FTPS", "GOPHER", "GOPHERS", "HTTP", "HTTPS",
|
"DICT", "FILE", "FTP", "FTPS", "GOPHER", "GOPHERS", "HTTP", "HTTPS",
|
||||||
"IMAP", "IMAPS", "LDAP", "LDAPS", "MQTT", "MQTTS", "POP3", "POP3S",
|
"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",
|
"TELNET", "TFTP", "WS", "WSS",
|
||||||
/* all lower */
|
/* all lower */
|
||||||
"dict", "file", "ftp", "ftps", "gopher", "gophers", "http", "https",
|
"dict", "file", "ftp", "ftps", "gopher", "gophers", "http", "https",
|
||||||
"imap", "imaps", "ldap", "ldaps", "mqtt", "mqtts", "pop3", "pop3s",
|
"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",
|
"telnet", "tftp", "ws", "wss",
|
||||||
/* mixed */
|
/* mixed */
|
||||||
"diCt", "fIle", "Ftp", "ftpS", "Gopher", "gOphers", "htTp", "httPs",
|
"diCt", "fIle", "Ftp", "ftpS", "Gopher", "gOphers", "htTp", "httPs",
|
||||||
"imAP", "imaPS", "LDap", "LDAps", "mQTT", "mqtTS", "pOP3", "pOP3s",
|
"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",
|
"TELNEt", "tFTP", "Ws", "wSS",
|
||||||
};
|
};
|
||||||
/* non-existing schemes */
|
/* non-existing schemes */
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user