Compare commits
2 Commits
master
...
bagder/spe
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3c7c614df5 | ||
|
|
ae72de1caa |
128
.github/scripts/cleancmd.pl
vendored
128
.github/scripts/cleancmd.pl
vendored
@ -3,55 +3,117 @@
|
|||||||
#
|
#
|
||||||
# SPDX-License-Identifier: curl
|
# SPDX-License-Identifier: curl
|
||||||
#
|
#
|
||||||
# Input: a cmdline docs markdown, it gets modified *in place*
|
# Input: cmdline docs markdown files, they get modified *in place*
|
||||||
|
#
|
||||||
|
# Strip off the leading meta-data/header part, remove all known curl symbols
|
||||||
|
# and long command line options. Also clean up whatever else the spell checker
|
||||||
|
# might have a problem with that we still deem is fine.
|
||||||
#
|
#
|
||||||
# The main purpose is to strip off the leading meta-data part, but also to
|
|
||||||
# clean up whatever else the spell checker might have a problem with that we
|
|
||||||
# still deem is fine.
|
|
||||||
|
|
||||||
my $header = 1;
|
open(S, "<./docs/libcurl/symbols-in-versions")
|
||||||
while(1) {
|
|| die "can't find symbols-in-versions";
|
||||||
# set this if the markdown has no meta-data header to skip
|
while(<S>) {
|
||||||
if($ARGV[0] eq "--no-header") {
|
if(/^([^ ]*) /) {
|
||||||
shift @ARGV;
|
push @asyms, $1;
|
||||||
$header = 0;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
last;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
close(S);
|
||||||
|
|
||||||
my $f = $ARGV[0];
|
# init the opts table with "special" options not easy to figure out
|
||||||
|
my @aopts = (
|
||||||
|
'--ftp-ssl-reqd', # old alias
|
||||||
|
);
|
||||||
|
|
||||||
open(F, "<$f") or die;
|
open(O, "<./docs/options-in-versions")
|
||||||
|
|| die "can't find options-in-versions";
|
||||||
my $ignore = $header;
|
while(<O>) {
|
||||||
my $sepcount = 0;
|
chomp;
|
||||||
my @out;
|
if(/^([^ ]+)/) {
|
||||||
while(<F>) {
|
my $o = $1;
|
||||||
if(/^---/ && $header) {
|
push @aopts, $o;
|
||||||
if(++$sepcount == 2) {
|
if($o =~ /^--no-(.*)/) {
|
||||||
$ignore = 0;
|
# for the --no options, also make one without it
|
||||||
|
push @aopts, "--$1";
|
||||||
}
|
}
|
||||||
|
elsif($o =~ /^--disable-(.*)/) {
|
||||||
|
# for the --disable options, also make the special ones
|
||||||
|
push @aopts, "--$1";
|
||||||
|
push @aopts, "--no-$1";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
close(O);
|
||||||
|
|
||||||
|
open(C, "<./.github/scripts/spellcheck.curl")
|
||||||
|
|| die "can't find spellcheck.curl";
|
||||||
|
while(<C>) {
|
||||||
|
if(/^\#/) {
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
chomp;
|
||||||
|
if(/^([^ ]+)/) {
|
||||||
|
push @asyms, $1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
close(C);
|
||||||
|
|
||||||
|
# longest symbols first
|
||||||
|
my @syms = sort { length($b) <=> length($a) } @asyms;
|
||||||
|
|
||||||
|
# longest cmdline options first
|
||||||
|
my @opts = sort { length($b) <=> length($a) } @aopts;
|
||||||
|
|
||||||
|
sub process {
|
||||||
|
my ($f) = @_;
|
||||||
|
|
||||||
|
my $ignore = 0;
|
||||||
|
my $sepcount = 0;
|
||||||
|
my $out;
|
||||||
|
my $line = 0;
|
||||||
|
open(F, "<$f") or die;
|
||||||
|
|
||||||
|
while(<F>) {
|
||||||
|
$line++;
|
||||||
|
if(/^---/ && ($line == 1)) {
|
||||||
|
$ignore = 1;
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
elsif(/^---/ && $ignore) {
|
||||||
|
$ignore = 0;
|
||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
next if($ignore);
|
next if($ignore);
|
||||||
|
|
||||||
# strip out backticked words
|
my $l = $_;
|
||||||
$_ =~ s/`[^`]+`//g;
|
|
||||||
|
|
||||||
# strip out all long command line options
|
# strip out backticked words
|
||||||
$_ =~ s/--[a-z0-9-]+//g;
|
$l =~ s/`[^`]+`//g;
|
||||||
|
|
||||||
|
# **bold**
|
||||||
|
$l =~ s/\*\*(\S.*?)\*\*//g;
|
||||||
|
# *italics*
|
||||||
|
$l =~ s/\*(\S.*?)\*//g;
|
||||||
|
|
||||||
# strip out https URLs, we don't want them spellchecked
|
# strip out https URLs, we don't want them spellchecked
|
||||||
$_ =~ s!https://[a-z0-9\#_/.-]+!!gi;
|
$l =~ s!https://[a-z0-9\#_/.-]+!!gi;
|
||||||
|
|
||||||
push @out, $_;
|
$out .= $l;
|
||||||
}
|
}
|
||||||
close(F);
|
close(F);
|
||||||
|
|
||||||
if(!$ignore) {
|
# cut out all known curl cmdline options
|
||||||
|
map { $out =~ s/$_//g; } (@opts);
|
||||||
|
|
||||||
|
# cut out all known curl symbols
|
||||||
|
map { $out =~ s/\b$_\b//g; } (@syms);
|
||||||
|
|
||||||
|
if(!$ignore) {
|
||||||
open(O, ">$f") or die;
|
open(O, ">$f") or die;
|
||||||
print O @out;
|
print O $out;
|
||||||
close(O);
|
close(O);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for my $f (@ARGV) {
|
||||||
|
process($f);
|
||||||
}
|
}
|
||||||
|
|||||||
86
.github/scripts/cleanspell.pl
vendored
86
.github/scripts/cleanspell.pl
vendored
@ -1,86 +0,0 @@
|
|||||||
#!/usr/bin/env perl
|
|
||||||
# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
|
|
||||||
#
|
|
||||||
# SPDX-License-Identifier: curl
|
|
||||||
#
|
|
||||||
# Given: a libcurl curldown man page
|
|
||||||
# Outputs: the same file, minus the SYNOPSIS and the EXAMPLE sections
|
|
||||||
#
|
|
||||||
|
|
||||||
my $f = $ARGV[0];
|
|
||||||
|
|
||||||
open(F, "<$f") or die;
|
|
||||||
|
|
||||||
my @out;
|
|
||||||
my $ignore = 0;
|
|
||||||
while(<F>) {
|
|
||||||
if($_ =~ /^# (SYNOPSIS|EXAMPLE)/) {
|
|
||||||
$ignore = 1;
|
|
||||||
}
|
|
||||||
elsif($ignore && ($_ =~ /^# [A-Z]/)) {
|
|
||||||
$ignore = 0;
|
|
||||||
}
|
|
||||||
elsif(!$ignore) {
|
|
||||||
# **bold**
|
|
||||||
$_ =~ s/\*\*(\S.*?)\*\*//g;
|
|
||||||
# *italics*
|
|
||||||
$_ =~ s/\*(\S.*?)\*//g;
|
|
||||||
|
|
||||||
$_ =~ s/CURL(M|SH|U|H)code//g;
|
|
||||||
$_ =~ s/CURL_[A-Z0-9_]*//g;
|
|
||||||
$_ =~ s/CURLALTSVC_[A-Z0-9_]*//g;
|
|
||||||
$_ =~ s/CURLAUTH_[A-Z0-9_]*//g;
|
|
||||||
$_ =~ s/CURLE_[A-Z0-9_]*//g;
|
|
||||||
$_ =~ s/CURLFORM_[A-Z0-9_]*//g;
|
|
||||||
$_ =~ s/CURLFTP_[A-Z0-9_]*//g;
|
|
||||||
$_ =~ s/CURLFTPAUTH_[A-Z0-9_]*//g;
|
|
||||||
$_ =~ s/CURLFTPMETHOD_[A-Z0-9_]*//g;
|
|
||||||
$_ =~ s/CURLFTPSSL_[A-Z0-9_]*//g;
|
|
||||||
$_ =~ s/CURLGSSAPI_[A-Z0-9_]*//g;
|
|
||||||
$_ =~ s/CURLHEADER_[A-Z0-9_]*//g;
|
|
||||||
$_ =~ s/CURLINFO_[A-Z0-9_]*//g;
|
|
||||||
$_ =~ s/CURLM_[A-Z0-9_]*//g;
|
|
||||||
$_ =~ s/CURLMIMEOPT_[A-Z0-9_]*//g;
|
|
||||||
$_ =~ s/CURLMOPT_[A-Z0-9_]*//g;
|
|
||||||
$_ =~ s/CURLOPT_[A-Z0-9_]*//g;
|
|
||||||
$_ =~ s/CURLPIPE_[A-Z0-9_]*//g;
|
|
||||||
$_ =~ s/CURLPROTO_[A-Z0-9_]*//g;
|
|
||||||
$_ =~ s/CURLPROXY_[A-Z0-9_]*//g;
|
|
||||||
$_ =~ s/CURLPX_[A-Z0-9_]*//g;
|
|
||||||
$_ =~ s/CURLSHE_[A-Z0-9_]*//g;
|
|
||||||
$_ =~ s/CURLSHOPT_[A-Z0-9_]*//g;
|
|
||||||
$_ =~ s/CURLSSLOPT_[A-Z0-9_]*//g;
|
|
||||||
$_ =~ s/CURLSSH_[A-Z0-9_]*//g;
|
|
||||||
$_ =~ s/CURLSSLBACKEND_[A-Z0-9_]*//g;
|
|
||||||
$_ =~ s/CURLU_[A-Z0-9_]*//g;
|
|
||||||
$_ =~ s/CURLUPART_[A-Z0-9_]*//g;
|
|
||||||
#$_ =~ s/\bCURLU\b//g; # stand-alone CURLU
|
|
||||||
$_ =~ s/CURLUE_[A-Z0-9_]*//g;
|
|
||||||
$_ =~ s/CURLHE_[A-Z0-9_]*//g;
|
|
||||||
$_ =~ s/CURLWS_[A-Z0-9_]*//g;
|
|
||||||
$_ =~ s/CURLKH[A-Z0-9_]*//g;
|
|
||||||
$_ =~ s/CURLUPART_[A-Z0-9_]*//g;
|
|
||||||
$_ =~ s/CURLUSESSL_[A-Z0-9_]*//g;
|
|
||||||
$_ =~ s/CURLPAUSE_[A-Z0-9_]*//g;
|
|
||||||
$_ =~ s/CURLHSTS_[A-Z0-9_]*//g;
|
|
||||||
$_ =~ s/curl_global_([a-z_]*)//g;
|
|
||||||
$_ =~ s/curl_(strequal|strnequal|formadd|waitfd|formget|getdate|formfree)//g;
|
|
||||||
$_ =~ s/curl_easy_([a-z]*)//g;
|
|
||||||
$_ =~ s/curl_multi_([a-z_]*)//g;
|
|
||||||
$_ =~ s/curl_mime_(subparts|addpart|filedata|data_cb)//g;
|
|
||||||
$_ =~ s/curl_ws_(send|recv|meta)//g;
|
|
||||||
$_ =~ s/curl_url_(dup)//g;
|
|
||||||
$_ =~ s/curl_pushheader_by(name|num)//g;
|
|
||||||
$_ =~ s/libcurl-(env|ws)//g;
|
|
||||||
$_ =~ s/libcurl\\-(env|ws)//g;
|
|
||||||
$_ =~ s/(^|\W)((tftp|https|http|ftp):\/\/[a-z0-9\-._~%:\/?\#\[\]\@!\$&'()*+,;=\\]+)//gi;
|
|
||||||
push @out, $_;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
close(F);
|
|
||||||
|
|
||||||
open(O, ">$f") or die;
|
|
||||||
for my $l (@out) {
|
|
||||||
print O $l;
|
|
||||||
}
|
|
||||||
close(O);
|
|
||||||
151
.github/scripts/spellcheck.curl
vendored
Normal file
151
.github/scripts/spellcheck.curl
vendored
Normal file
@ -0,0 +1,151 @@
|
|||||||
|
# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: curl
|
||||||
|
#
|
||||||
|
# common variable types + structs
|
||||||
|
# callback typedefs
|
||||||
|
# public functions names
|
||||||
|
# some man page names
|
||||||
|
curl_fileinfo
|
||||||
|
curl_forms
|
||||||
|
curl_hstsentry
|
||||||
|
curl_httppost
|
||||||
|
curl_index
|
||||||
|
curl_khkey
|
||||||
|
curl_pushheaders
|
||||||
|
curl_waitfd
|
||||||
|
CURLcode
|
||||||
|
CURLformoption
|
||||||
|
CURLHcode
|
||||||
|
CURLMcode
|
||||||
|
CURLMsg
|
||||||
|
CURLSHcode
|
||||||
|
CURLUcode
|
||||||
|
curl_calloc_callback
|
||||||
|
curl_chunk_bgn_callback
|
||||||
|
curl_chunk_end_callback
|
||||||
|
curl_conv_callback
|
||||||
|
curl_debug_callback
|
||||||
|
curl_fnmatch_callback
|
||||||
|
curl_formget_callback
|
||||||
|
curl_free_callback
|
||||||
|
curl_hstsread_callback
|
||||||
|
curl_hstswrite_callback
|
||||||
|
curl_ioctl_callback
|
||||||
|
curl_malloc_callback
|
||||||
|
curl_multi_timer_callback
|
||||||
|
curl_opensocket_callback
|
||||||
|
curl_prereq_callback
|
||||||
|
curl_progress_callback
|
||||||
|
curl_push_callback
|
||||||
|
curl_read_callback
|
||||||
|
curl_realloc_callback
|
||||||
|
curl_resolver_start_callback
|
||||||
|
curl_seek_callback
|
||||||
|
curl_socket_callback
|
||||||
|
curl_sockopt_callback
|
||||||
|
curl_ssl_ctx_callback
|
||||||
|
curl_strdup_callback
|
||||||
|
curl_trailer_callback
|
||||||
|
curl_write_callback
|
||||||
|
curl_xferinfo_callback
|
||||||
|
curl_strequal
|
||||||
|
curl_strnequal
|
||||||
|
curl_mime_init
|
||||||
|
curl_mime_free
|
||||||
|
curl_mime_addpart
|
||||||
|
curl_mime_name
|
||||||
|
curl_mime_filename
|
||||||
|
curl_mime_type
|
||||||
|
curl_mime_encoder
|
||||||
|
curl_mime_data
|
||||||
|
curl_mime_filedata
|
||||||
|
curl_mime_data_cb
|
||||||
|
curl_mime_subparts
|
||||||
|
curl_mime_headers
|
||||||
|
curl_formadd
|
||||||
|
curl_formget
|
||||||
|
curl_formfree
|
||||||
|
curl_getdate
|
||||||
|
curl_getenv
|
||||||
|
curl_version
|
||||||
|
curl_easy_escape
|
||||||
|
curl_escape
|
||||||
|
curl_easy_unescape
|
||||||
|
curl_unescape
|
||||||
|
curl_free
|
||||||
|
curl_global_init
|
||||||
|
curl_global_init_mem
|
||||||
|
curl_global_cleanup
|
||||||
|
curl_global_trace
|
||||||
|
curl_global_sslset
|
||||||
|
curl_slist_append
|
||||||
|
curl_slist_free_all
|
||||||
|
curl_getdate
|
||||||
|
curl_share_init
|
||||||
|
curl_share_setopt
|
||||||
|
curl_share_cleanup
|
||||||
|
curl_version_info
|
||||||
|
curl_easy_strerror
|
||||||
|
curl_share_strerror
|
||||||
|
curl_easy_pause
|
||||||
|
curl_easy_ssls_import
|
||||||
|
curl_easy_ssls_export
|
||||||
|
curl_easy_init
|
||||||
|
curl_easy_setopt
|
||||||
|
curl_easy_perform
|
||||||
|
curl_easy_cleanup
|
||||||
|
curl_easy_getinfo
|
||||||
|
curl_easy_duphandle
|
||||||
|
curl_easy_reset
|
||||||
|
curl_easy_recv
|
||||||
|
curl_easy_send
|
||||||
|
curl_easy_upkeep
|
||||||
|
curl_easy_header
|
||||||
|
curl_easy_nextheader
|
||||||
|
curl_mprintf
|
||||||
|
curl_mfprintf
|
||||||
|
curl_msprintf
|
||||||
|
curl_msnprintf
|
||||||
|
curl_mvprintf
|
||||||
|
curl_mvfprintf
|
||||||
|
curl_mvsprintf
|
||||||
|
curl_mvsnprintf
|
||||||
|
curl_maprintf
|
||||||
|
curl_mvaprintf
|
||||||
|
curl_multi_init
|
||||||
|
curl_multi_add_handle
|
||||||
|
curl_multi_remove_handle
|
||||||
|
curl_multi_fdset
|
||||||
|
curl_multi_waitfds
|
||||||
|
curl_multi_wait
|
||||||
|
curl_multi_poll
|
||||||
|
curl_multi_wakeup
|
||||||
|
curl_multi_perform
|
||||||
|
curl_multi_cleanup
|
||||||
|
curl_multi_info_read
|
||||||
|
curl_multi_strerror
|
||||||
|
curl_multi_socket
|
||||||
|
curl_multi_socket_action
|
||||||
|
curl_multi_socket_all
|
||||||
|
curl_multi_timeout
|
||||||
|
curl_multi_setopt
|
||||||
|
curl_multi_assign
|
||||||
|
curl_multi_get_handles
|
||||||
|
curl_pushheader_bynum
|
||||||
|
curl_pushheader_byname
|
||||||
|
curl_multi_waitfds
|
||||||
|
curl_easy_option_by_name
|
||||||
|
curl_easy_option_by_id
|
||||||
|
curl_easy_option_next
|
||||||
|
curl_url
|
||||||
|
curl_url_cleanup
|
||||||
|
curl_url_dup
|
||||||
|
curl_url_get
|
||||||
|
curl_url_set
|
||||||
|
curl_url_strerror
|
||||||
|
curl_ws_recv
|
||||||
|
curl_ws_send
|
||||||
|
curl_ws_meta
|
||||||
|
libcurl-env
|
||||||
|
libcurl-ws
|
||||||
16
.github/workflows/checkdocs.yml
vendored
16
.github/workflows/checkdocs.yml
vendored
@ -107,20 +107,8 @@ jobs:
|
|||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
name: checkout
|
name: checkout
|
||||||
|
|
||||||
- name: trim all man page *.md files
|
- name: trim all *.md files in docs/
|
||||||
run: find docs -name "*.md" ! -name "_*" -print0 | xargs -0 -n1 .github/scripts/cleancmd.pl
|
run: .github/scripts/cleancmd.pl $(find docs -name "*.md")
|
||||||
|
|
||||||
- name: trim libcurl man page *.md files
|
|
||||||
run: find docs/libcurl \( -name "curl_*.md" -o -name "libcurl*.md" \) -print0 | xargs -0 -n1 .github/scripts/cleanspell.pl
|
|
||||||
|
|
||||||
- name: trim libcurl option man page *.md files
|
|
||||||
run: find docs/libcurl/opts -name "CURL*.md" -print0 | xargs -0 -n1 .github/scripts/cleanspell.pl
|
|
||||||
|
|
||||||
- name: trim cmdline docs markdown _*.md files
|
|
||||||
run: find docs/cmdline-opts -name "_*.md" -print0 | xargs -0 -n1 .github/scripts/cleancmd.pl --no-header
|
|
||||||
|
|
||||||
- name: trim docs/ markdown _*.md files
|
|
||||||
run: git ls-files docs/*.md docs/internals/*.md | xargs -n1 .github/scripts/cleancmd.pl --no-header
|
|
||||||
|
|
||||||
- name: setup the custom wordlist
|
- name: setup the custom wordlist
|
||||||
run: grep -v '^#' .github/scripts/spellcheck.words > wordlist.txt
|
run: grep -v '^#' .github/scripts/spellcheck.words > wordlist.txt
|
||||||
|
|||||||
@ -59,4 +59,4 @@ used.
|
|||||||
|
|
||||||
Doing FTP over an HTTP proxy without --proxytunnel makes curl do HTTP with an
|
Doing FTP over an HTTP proxy without --proxytunnel makes curl do HTTP with an
|
||||||
FTP URL over the proxy. For such transfers, common FTP specific options do not
|
FTP URL over the proxy. For such transfers, common FTP specific options do not
|
||||||
work, including --ftp-ssl-reqd and --ftp-ssl-control.
|
work, including --ssl-reqd and --ftp-ssl-control.
|
||||||
|
|||||||
@ -24,53 +24,53 @@ displays information about the curl and libcurl installation.
|
|||||||
|
|
||||||
# OPTIONS
|
# OPTIONS
|
||||||
|
|
||||||
## --ca
|
## `--ca`
|
||||||
|
|
||||||
Displays the built-in path to the CA cert bundle this libcurl uses.
|
Displays the built-in path to the CA cert bundle this libcurl uses.
|
||||||
|
|
||||||
## --cc
|
## `--cc`
|
||||||
|
|
||||||
Displays the compiler used to build libcurl.
|
Displays the compiler used to build libcurl.
|
||||||
|
|
||||||
## --cflags
|
## `--cflags`
|
||||||
|
|
||||||
Set of compiler options (CFLAGS) to use when compiling files that use
|
Set of compiler options (CFLAGS) to use when compiling files that use
|
||||||
libcurl. Currently that is only the include path to the curl include files.
|
libcurl. Currently that is only the include path to the curl include files.
|
||||||
|
|
||||||
## --checkfor [version]
|
## `--checkfor [version]`
|
||||||
|
|
||||||
Specify the oldest possible libcurl version string you want, and this script
|
Specify the oldest possible libcurl version string you want, and this script
|
||||||
returns 0 if the current installation is new enough or it returns 1 and
|
returns 0 if the current installation is new enough or it returns 1 and
|
||||||
outputs a text saying that the current version is not new enough. (Added in
|
outputs a text saying that the current version is not new enough. (Added in
|
||||||
7.15.4)
|
7.15.4)
|
||||||
|
|
||||||
## --configure
|
## `--configure`
|
||||||
|
|
||||||
Displays the arguments given to configure when building curl.
|
Displays the arguments given to configure when building curl.
|
||||||
|
|
||||||
## --feature
|
## `--feature`
|
||||||
|
|
||||||
Lists what particular main features the installed libcurl was built with. At
|
Lists what particular main features the installed libcurl was built with. At
|
||||||
the time of writing, this list may include SSL, KRB4 or IPv6. Do not assume
|
the time of writing, this list may include SSL, KRB4 or IPv6. Do not assume
|
||||||
any particular order. The keywords are separated by newlines. There may be
|
any particular order. The keywords are separated by newlines. There may be
|
||||||
none, one, or several keywords in the list.
|
none, one, or several keywords in the list.
|
||||||
|
|
||||||
## --help
|
## `--help`
|
||||||
|
|
||||||
Displays the available options.
|
Displays the available options.
|
||||||
|
|
||||||
## --libs
|
## `--libs`
|
||||||
|
|
||||||
Shows the complete set of libs and other linker options you need in order to
|
Shows the complete set of libs and other linker options you need in order to
|
||||||
link your application with libcurl.
|
link your application with libcurl.
|
||||||
|
|
||||||
## --prefix
|
## `--prefix`
|
||||||
|
|
||||||
This is the prefix used when libcurl was installed. libcurl is then installed
|
This is the prefix used when libcurl was installed. libcurl is then installed
|
||||||
in $prefix/lib and its header files are installed in $prefix/include and so
|
in $prefix/lib and its header files are installed in $prefix/include and so
|
||||||
on. The prefix is set with "configure --prefix".
|
on. The prefix is set with `configure --prefix`.
|
||||||
|
|
||||||
## --protocols
|
## `--protocols`
|
||||||
|
|
||||||
Lists what particular protocols the installed libcurl was built to support. At
|
Lists what particular protocols the installed libcurl was built to support. At
|
||||||
the time of writing, this list may include HTTP, HTTPS, FTP, FTPS, FILE,
|
the time of writing, this list may include HTTP, HTTPS, FTP, FTPS, FILE,
|
||||||
@ -78,22 +78,22 @@ TELNET, LDAP, DICT and many more. Do not assume any particular order. The
|
|||||||
protocols are listed using uppercase and are separated by newlines. There may
|
protocols are listed using uppercase and are separated by newlines. There may
|
||||||
be none, one, or several protocols in the list. (Added in 7.13.0)
|
be none, one, or several protocols in the list. (Added in 7.13.0)
|
||||||
|
|
||||||
## --ssl-backends
|
## `--ssl-backends`
|
||||||
|
|
||||||
Lists the SSL backends that were enabled when libcurl was built. It might be
|
Lists the SSL backends that were enabled when libcurl was built. It might be
|
||||||
no, one or several names. If more than one name, they appear comma-separated.
|
no, one or several names. If more than one name, they appear comma-separated.
|
||||||
(Added in 7.58.0)
|
(Added in 7.58.0)
|
||||||
|
|
||||||
## --static-libs
|
## `--static-libs`
|
||||||
|
|
||||||
Shows the complete set of libs and other linker options you need in order to
|
Shows the complete set of libs and other linker options you need in order to
|
||||||
link your application with libcurl statically. (Added in 7.17.1)
|
link your application with libcurl statically. (Added in 7.17.1)
|
||||||
|
|
||||||
## --version
|
## `--version`
|
||||||
|
|
||||||
Outputs version information about the installed libcurl.
|
Outputs version information about the installed libcurl.
|
||||||
|
|
||||||
## --vernum
|
## `--vernum`
|
||||||
|
|
||||||
Outputs version information about the installed libcurl, in numerical mode.
|
Outputs version information about the installed libcurl, in numerical mode.
|
||||||
This shows the version number, in hexadecimal, using 8 bits for each part:
|
This shows the version number, in hexadecimal, using 8 bits for each part:
|
||||||
@ -104,22 +104,21 @@ omitted. (This option was broken in the 7.15.0 release.)
|
|||||||
# EXAMPLES
|
# EXAMPLES
|
||||||
|
|
||||||
What linker options do I need when I link with libcurl?
|
What linker options do I need when I link with libcurl?
|
||||||
~~~
|
|
||||||
$ curl-config --libs
|
$ curl-config --libs
|
||||||
~~~
|
|
||||||
What compiler options do I need when I compile using libcurl functions?
|
What compiler options do I need when I compile using libcurl functions?
|
||||||
~~~
|
|
||||||
$ curl-config --cflags
|
$ curl-config --cflags
|
||||||
~~~
|
|
||||||
How do I know if libcurl was built with SSL support?
|
How do I know if libcurl was built with SSL support?
|
||||||
~~~
|
|
||||||
$ curl-config --feature | grep SSL
|
$ curl-config --feature | grep SSL
|
||||||
~~~
|
|
||||||
What's the installed libcurl version?
|
What's the installed libcurl version?
|
||||||
~~~
|
|
||||||
$ curl-config --version
|
$ curl-config --version
|
||||||
~~~
|
|
||||||
How do I build a single file with a one-line command?
|
How do I build a single file with a one-line command?
|
||||||
~~~
|
|
||||||
$ `curl-config --cc --cflags` -o example source.c `curl-config --libs`
|
$ `curl-config --cc --cflags` -o example source.c `curl-config --libs`
|
||||||
~~~
|
|
||||||
|
|||||||
@ -28,11 +28,10 @@ const struct curl_easyoption *curl_easy_option_by_id(CURLoption id);
|
|||||||
# DESCRIPTION
|
# DESCRIPTION
|
||||||
|
|
||||||
Given a *CURLoption* **id**, this function returns a pointer to the
|
Given a *CURLoption* **id**, this function returns a pointer to the
|
||||||
*curl_easyoption* struct, holding information about the
|
*curl_easyoption* struct, holding information about the curl_easy_setopt(3)
|
||||||
curl_easy_setopt(3) option using that id. The option id is the CURLOPT_
|
option using that id. The option id is the `CURLOPT_` prefixed ones provided
|
||||||
prefix ones provided in the standard curl/curl.h header file. This function
|
in the standard curl/curl.h header file. This function returns the non-alias
|
||||||
returns the non-alias version of the cases where there is an alias function as
|
version of the cases where there is an alias function as well.
|
||||||
well.
|
|
||||||
|
|
||||||
If libcurl has no option with the given id, this function returns NULL.
|
If libcurl has no option with the given id, this function returns NULL.
|
||||||
|
|
||||||
|
|||||||
@ -27,11 +27,10 @@ const struct curl_easyoption *curl_easy_option_by_name(const char *name);
|
|||||||
|
|
||||||
# DESCRIPTION
|
# DESCRIPTION
|
||||||
|
|
||||||
Given a **name**, this function returns a pointer to the
|
Given a **name**, this function returns a pointer to the *curl_easyoption*
|
||||||
*curl_easyoption* struct, holding information about the
|
struct, holding information about the curl_easy_setopt(3) option using that
|
||||||
curl_easy_setopt(3) option using that name. The name should be specified
|
name. The name should be specified without the `CURLOPT_` prefix and the name
|
||||||
without the "CURLOPT_" prefix and the name comparison is made case
|
comparison is made case insensitive.
|
||||||
insensitive.
|
|
||||||
|
|
||||||
If libcurl has no option with the given name, this function returns NULL.
|
If libcurl has no option with the given name, this function returns NULL.
|
||||||
|
|
||||||
|
|||||||
@ -316,4 +316,4 @@ filenames are now escaped before transmission.
|
|||||||
# RETURN VALUE
|
# RETURN VALUE
|
||||||
|
|
||||||
0 means everything was OK, non-zero means an error occurred corresponding to a
|
0 means everything was OK, non-zero means an error occurred corresponding to a
|
||||||
CURL_FORMADD_* constant defined in *\<curl/curl.h\>*.
|
`CURL_FORMADD_*` constant defined in *\<curl/curl.h\>*.
|
||||||
|
|||||||
@ -38,9 +38,9 @@ first argument to the curl_formget_callback function.
|
|||||||
size_t len);"
|
size_t len);"
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
The curl_formget_callback is invoked for each part of the HTTP POST chain. The
|
The *curl_formget_callback* is invoked for each part of the HTTP POST chain.
|
||||||
character buffer passed to the callback must not be freed. The callback should
|
The character buffer passed to the callback must not be freed. The callback
|
||||||
return the buffer length passed to it on success.
|
should return the buffer length passed to it on success.
|
||||||
|
|
||||||
If the **CURLFORM_STREAM** option is used in the formpost, it prevents
|
If the **CURLFORM_STREAM** option is used in the formpost, it prevents
|
||||||
curl_formget(3) from working until you have performed the actual HTTP request.
|
curl_formget(3) from working until you have performed the actual HTTP request.
|
||||||
|
|||||||
@ -376,9 +376,8 @@ supports HTTP zstd content encoding using zstd library (Added in 7.72.0)
|
|||||||
|
|
||||||
*features* mask bit: CURL_VERSION_CONV
|
*features* mask bit: CURL_VERSION_CONV
|
||||||
|
|
||||||
libcurl was built with support for character conversions, as provided by the
|
libcurl was built with support for character conversions provided by
|
||||||
CURLOPT_CONV_* callbacks. Always 0 since 7.82.0. (Added in 7.15.4,
|
callbacks. Always 0 since 7.82.0. (Added in 7.15.4, deprecated.)
|
||||||
deprecated.)
|
|
||||||
|
|
||||||
## no name
|
## no name
|
||||||
|
|
||||||
|
|||||||
@ -23,16 +23,16 @@ These variables are intended for internal use only, subject to change and have
|
|||||||
many effects on the behavior of libcurl. Refer to the source code to determine
|
many effects on the behavior of libcurl. Refer to the source code to determine
|
||||||
how exactly they are being used.
|
how exactly they are being used.
|
||||||
|
|
||||||
## CURL_ALTSVC_HTTP
|
## `CURL_ALTSVC_HTTP`
|
||||||
|
|
||||||
Bypass the AltSvc HTTPS protocol restriction if this variable exists.
|
Bypass the AltSvc HTTPS protocol restriction if this variable exists.
|
||||||
|
|
||||||
## CURL_DBG_SOCK_RBLOCK
|
## `CURL_DBG_SOCK_RBLOCK`
|
||||||
|
|
||||||
The percentage of recv() calls that should be answered with a EAGAIN at random.
|
The percentage of recv() calls that should be answered with a EAGAIN at random.
|
||||||
For TCP/UNIX sockets.
|
For TCP/UNIX sockets.
|
||||||
|
|
||||||
## CURL_DBG_SOCK_RMAX
|
## `CURL_DBG_SOCK_RMAX`
|
||||||
|
|
||||||
The maximum data that shall be received from the network in one recv() call.
|
The maximum data that shall be received from the network in one recv() call.
|
||||||
For TCP/UNIX sockets. This is applied to every recv.
|
For TCP/UNIX sockets. This is applied to every recv.
|
||||||
@ -40,12 +40,12 @@ For TCP/UNIX sockets. This is applied to every recv.
|
|||||||
Example: **CURL_DBG_SOCK_RMAX=400** means recv buffer size is limited to a
|
Example: **CURL_DBG_SOCK_RMAX=400** means recv buffer size is limited to a
|
||||||
maximum of 400 bytes.
|
maximum of 400 bytes.
|
||||||
|
|
||||||
## CURL_DBG_SOCK_WBLOCK
|
## `CURL_DBG_SOCK_WBLOCK`
|
||||||
|
|
||||||
The percentage of send() calls that should be answered with a EAGAIN at random.
|
The percentage of send() calls that should be answered with a EAGAIN at random.
|
||||||
For TCP/UNIX sockets.
|
For TCP/UNIX sockets.
|
||||||
|
|
||||||
## CURL_DBG_SOCK_WPARTIAL
|
## `CURL_DBG_SOCK_WPARTIAL`
|
||||||
|
|
||||||
The percentage of data that shall be written to the network. For TCP/UNIX
|
The percentage of data that shall be written to the network. For TCP/UNIX
|
||||||
sockets. This is applied to every send.
|
sockets. This is applied to every send.
|
||||||
@ -53,12 +53,12 @@ sockets. This is applied to every send.
|
|||||||
Example: **CURL_DBG_SOCK_WPARTIAL=80** means a send with 1000 bytes would
|
Example: **CURL_DBG_SOCK_WPARTIAL=80** means a send with 1000 bytes would
|
||||||
only send 800.
|
only send 800.
|
||||||
|
|
||||||
## CURL_DBG_QUIC_WBLOCK
|
## `CURL_DBG_QUIC_WBLOCK`
|
||||||
|
|
||||||
The percentage of send() calls that should be answered with EAGAIN at random.
|
The percentage of send() calls that should be answered with EAGAIN at random.
|
||||||
QUIC only.
|
QUIC only.
|
||||||
|
|
||||||
## CURL_DEBUG
|
## `CURL_DEBUG`
|
||||||
|
|
||||||
Trace logging behavior as an alternative to calling curl_global_trace(3).
|
Trace logging behavior as an alternative to calling curl_global_trace(3).
|
||||||
|
|
||||||
@ -73,39 +73,39 @@ Example: **CURL_DEBUG=tcp,-http/2 curl -vv url** means trace protocol details,
|
|||||||
triggered by `-vv`, add tracing of TCP in addition and remove tracing of
|
triggered by `-vv`, add tracing of TCP in addition and remove tracing of
|
||||||
HTTP/2.
|
HTTP/2.
|
||||||
|
|
||||||
## CURL_DEBUG_SIZE
|
## `CURL_DEBUG_SIZE`
|
||||||
|
|
||||||
Fake the size returned by CURLINFO_HEADER_SIZE and CURLINFO_REQUEST_SIZE.
|
Fake the size returned by CURLINFO_HEADER_SIZE and CURLINFO_REQUEST_SIZE.
|
||||||
|
|
||||||
## CURL_GETHOSTNAME
|
## `CURL_GETHOSTNAME`
|
||||||
|
|
||||||
Fake the local machine's unqualified hostname for NTLM and SMTP.
|
Fake the local machine's unqualified hostname for NTLM and SMTP.
|
||||||
|
|
||||||
## CURL_HSTS_HTTP
|
## `CURL_HSTS_HTTP`
|
||||||
|
|
||||||
Bypass the HSTS HTTPS protocol restriction if this variable exists.
|
Bypass the HSTS HTTPS protocol restriction if this variable exists.
|
||||||
|
|
||||||
## CURL_FORCETIME
|
## `CURL_FORCETIME`
|
||||||
|
|
||||||
A time of 0 is used for AWS signatures and NTLM if this variable exists.
|
A time of 0 is used for AWS signatures and NTLM if this variable exists.
|
||||||
|
|
||||||
## CURL_ENTROPY
|
## `CURL_ENTROPY`
|
||||||
|
|
||||||
A fixed faked value to use instead of a proper random number so that functions
|
A fixed faked value to use instead of a proper random number so that functions
|
||||||
in libcurl that are otherwise getting random outputs can be tested for what
|
in libcurl that are otherwise getting random outputs can be tested for what
|
||||||
they generate.
|
they generate.
|
||||||
|
|
||||||
## CURL_SMALLREQSEND
|
## `CURL_SMALLREQSEND`
|
||||||
|
|
||||||
An alternative size of HTTP data to be sent at a time only if smaller than the
|
An alternative size of HTTP data to be sent at a time only if smaller than the
|
||||||
current.
|
current.
|
||||||
|
|
||||||
## CURL_SMALLSENDS
|
## `CURL_SMALLSENDS`
|
||||||
|
|
||||||
An alternative size of socket data to be sent at a time only if smaller than
|
An alternative size of socket data to be sent at a time only if smaller than
|
||||||
the current.
|
the current.
|
||||||
|
|
||||||
## CURL_TIME
|
## `CURL_TIME`
|
||||||
|
|
||||||
Fake Unix timestamp to use for AltSvc, HSTS and CURLINFO variables that are
|
Fake Unix timestamp to use for AltSvc, HSTS and CURLINFO variables that are
|
||||||
time related.
|
time related.
|
||||||
@ -114,34 +114,34 @@ This variable can also be used to fake the data returned by some CURLINFO
|
|||||||
variables that are not time-related (such as CURLINFO_LOCAL_PORT), and in that
|
variables that are not time-related (such as CURLINFO_LOCAL_PORT), and in that
|
||||||
case the value is not a timestamp.
|
case the value is not a timestamp.
|
||||||
|
|
||||||
## CURL_TRACE
|
## `CURL_TRACE`
|
||||||
|
|
||||||
LDAP tracing is enabled if this variable exists and its value is 1 or greater.
|
LDAP tracing is enabled if this variable exists and its value is 1 or greater.
|
||||||
|
|
||||||
OpenLDAP tracing is separate. Refer to CURL_OPENLDAP_TRACE.
|
OpenLDAP tracing is separate. Refer to CURL_OPENLDAP_TRACE.
|
||||||
|
|
||||||
## CURL_OPENLDAP_TRACE
|
## `CURL_OPENLDAP_TRACE`
|
||||||
|
|
||||||
OpenLDAP tracing is enabled if this variable exists and its value is 1 or
|
OpenLDAP tracing is enabled if this variable exists and its value is 1 or
|
||||||
greater. There is a number of debug levels, refer to *openldap.c* comments.
|
greater. There is a number of debug levels, refer to *openldap.c* comments.
|
||||||
|
|
||||||
## CURL_WS_CHUNK_SIZE
|
## `CURL_WS_CHUNK_SIZE`
|
||||||
|
|
||||||
Used to influence the buffer chunk size used for WebSocket encoding and
|
Used to influence the buffer chunk size used for WebSocket encoding and
|
||||||
decoding.
|
decoding.
|
||||||
|
|
||||||
## CURL_WS_CHUNK_EAGAIN
|
## `CURL_WS_CHUNK_EAGAIN`
|
||||||
|
|
||||||
Used to simulate blocking sends after this chunk size for WebSocket
|
Used to simulate blocking sends after this chunk size for WebSocket
|
||||||
connections.
|
connections.
|
||||||
|
|
||||||
## CURL_FORBID_REUSE
|
## `CURL_FORBID_REUSE`
|
||||||
|
|
||||||
Used to set the CURLOPT_FORBID_REUSE flag on each transfer initiated
|
Used to set the CURLOPT_FORBID_REUSE flag on each transfer initiated
|
||||||
by the curl command line tool. The value of the environment variable
|
by the curl command line tool. The value of the environment variable
|
||||||
does not matter.
|
does not matter.
|
||||||
|
|
||||||
## CURL_GRACEFUL_SHUTDOWN
|
## `CURL_GRACEFUL_SHUTDOWN`
|
||||||
|
|
||||||
Make a blocking, graceful shutdown of all remaining connections when
|
Make a blocking, graceful shutdown of all remaining connections when
|
||||||
a multi handle is destroyed. This implicitly triggers for easy handles
|
a multi handle is destroyed. This implicitly triggers for easy handles
|
||||||
|
|||||||
@ -32,7 +32,7 @@ CURLINFO_SCHEME(3) instead, because this option cannot return all
|
|||||||
possible protocols.
|
possible protocols.
|
||||||
|
|
||||||
Pass a pointer to a long to receive the version used in the last http
|
Pass a pointer to a long to receive the version used in the last http
|
||||||
connection. The returned value is set to one of the CURLPROTO_* values:
|
connection. The returned value is set to one of these values:
|
||||||
|
|
||||||
~~~c
|
~~~c
|
||||||
CURLPROTO_DICT, CURLPROTO_FILE, CURLPROTO_FTP, CURLPROTO_FTPS,
|
CURLPROTO_DICT, CURLPROTO_FILE, CURLPROTO_FTP, CURLPROTO_FTPS,
|
||||||
|
|||||||
@ -58,12 +58,11 @@ struct curl_tlssessioninfo {
|
|||||||
};
|
};
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
The *backend* struct member is one of the defines in the CURLSSLBACKEND_*
|
The *backend* struct member is one of these defines: CURLSSLBACKEND_NONE (when
|
||||||
series: CURLSSLBACKEND_NONE (when built without TLS support),
|
built without TLS support), CURLSSLBACKEND_WOLFSSL,
|
||||||
CURLSSLBACKEND_WOLFSSL, CURLSSLBACKEND_SECURETRANSPORT, CURLSSLBACKEND_GNUTLS,
|
CURLSSLBACKEND_SECURETRANSPORT, CURLSSLBACKEND_GNUTLS, CURLSSLBACKEND_MBEDTLS,
|
||||||
CURLSSLBACKEND_MBEDTLS, CURLSSLBACKEND_NSS, CURLSSLBACKEND_OPENSSL or
|
CURLSSLBACKEND_NSS, CURLSSLBACKEND_OPENSSL or CURLSSLBACKEND_SCHANNEL. (Note
|
||||||
CURLSSLBACKEND_SCHANNEL. (Note that the OpenSSL
|
that the OpenSSL forks are all reported as just OpenSSL here.)
|
||||||
forks are all reported as just OpenSSL here.)
|
|
||||||
|
|
||||||
The *internals* struct member points to a TLS library specific pointer for
|
The *internals* struct member points to a TLS library specific pointer for
|
||||||
the active ("in use") SSL connection, with the following underlying types:
|
the active ("in use") SSL connection, with the following underlying types:
|
||||||
|
|||||||
@ -28,8 +28,8 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_MIME_OPTIONS, long options);
|
|||||||
|
|
||||||
# DESCRIPTION
|
# DESCRIPTION
|
||||||
|
|
||||||
Pass a long that holds a bitmask of CURLMIMEOPT_* defines. Each bit is a
|
Pass a long that holds a bitmask of options. Each bit is a boolean flag used
|
||||||
Boolean flag used while encoding a MIME tree or multipart form data.
|
while encoding a MIME tree or multipart form data.
|
||||||
|
|
||||||
Available bits are:
|
Available bits are:
|
||||||
|
|
||||||
|
|||||||
@ -31,7 +31,7 @@ This option is deprecated. We strongly recommend using
|
|||||||
CURLOPT_PROTOCOLS_STR(3) instead because this option cannot control all
|
CURLOPT_PROTOCOLS_STR(3) instead because this option cannot control all
|
||||||
available protocols.
|
available protocols.
|
||||||
|
|
||||||
Pass a long that holds a bitmask of CURLPROTO_* defines. If used, this bitmask
|
Pass a long that holds a bitmask of protocol bits. If used, this bitmask
|
||||||
limits what protocols libcurl may use in the transfer. This allows you to have
|
limits what protocols libcurl may use in the transfer. This allows you to have
|
||||||
a libcurl built to support a wide range of protocols but still limit specific
|
a libcurl built to support a wide range of protocols but still limit specific
|
||||||
transfers to only be allowed to use a subset of them. By default libcurl
|
transfers to only be allowed to use a subset of them. By default libcurl
|
||||||
|
|||||||
@ -32,10 +32,10 @@ This option is deprecated. We strongly recommend using
|
|||||||
CURLOPT_REDIR_PROTOCOLS_STR(3) instead because this option cannot
|
CURLOPT_REDIR_PROTOCOLS_STR(3) instead because this option cannot
|
||||||
control all available protocols.
|
control all available protocols.
|
||||||
|
|
||||||
Pass a long that holds a bitmask of CURLPROTO_* defines. If used, this bitmask
|
Pass a long that holds a bitmask of protocol bits. If used, this bitmask
|
||||||
limits what protocols libcurl may use in a transfer that it follows to in a
|
limits what protocols libcurl may use in a transfer that it follows to in a
|
||||||
redirect when CURLOPT_FOLLOWLOCATION(3) is enabled. This allows you to
|
redirect when CURLOPT_FOLLOWLOCATION(3) is enabled. This allows you to limit
|
||||||
limit specific transfers to only be allowed to use a subset of protocols in
|
specific transfers to only be allowed to use a subset of protocols in
|
||||||
redirections.
|
redirections.
|
||||||
|
|
||||||
Protocols denied by CURLOPT_PROTOCOLS(3) are not overridden by this
|
Protocols denied by CURLOPT_PROTOCOLS(3) are not overridden by this
|
||||||
|
|||||||
@ -71,7 +71,7 @@ int main(void)
|
|||||||
~~~
|
~~~
|
||||||
|
|
||||||
If you are on Linux and somehow have a need for paths larger than 107 bytes,
|
If you are on Linux and somehow have a need for paths larger than 107 bytes,
|
||||||
you can use the proc filesystem to bypass the limitation:
|
you can use the *proc* filesystem to bypass the limitation:
|
||||||
|
|
||||||
~~~c
|
~~~c
|
||||||
int dirfd = open(long_directory_path_to_socket, O_DIRECTORY | O_RDONLY);
|
int dirfd = open(long_directory_path_to_socket, O_DIRECTORY | O_RDONLY);
|
||||||
|
|||||||
@ -81,9 +81,8 @@ int main(void)
|
|||||||
|
|
||||||
# HISTORY
|
# HISTORY
|
||||||
|
|
||||||
This option was known as CURLOPT_FTP_SSL up to 7.16.4, and the constants were
|
This option was known as CURLOPT_FTP_SSL up to 7.16.4. Supported by LDAP since
|
||||||
known as CURLFTPSSL_* Handled by LDAP since 7.81.0. Fully supported by the
|
7.81.0. Fully supported by the OpenLDAP backend only.
|
||||||
OpenLDAP backend only.
|
|
||||||
|
|
||||||
# %AVAILABILITY%
|
# %AVAILABILITY%
|
||||||
|
|
||||||
|
|||||||
@ -51,7 +51,7 @@ stdout
|
|||||||
A common technique is to use the write callback to store the incoming data
|
A common technique is to use the write callback to store the incoming data
|
||||||
into a dynamically growing allocated buffer, and then this
|
into a dynamically growing allocated buffer, and then this
|
||||||
CURLOPT_WRITEDATA(3) is used to point to a struct or the buffer to store data
|
CURLOPT_WRITEDATA(3) is used to point to a struct or the buffer to store data
|
||||||
in. Like in the getinmemory example:
|
in. Like in the *getinmemory* example:
|
||||||
https://curl.se/libcurl/c/getinmemory.html
|
https://curl.se/libcurl/c/getinmemory.html
|
||||||
|
|
||||||
# HISTORY
|
# HISTORY
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user