Compare commits
459 Commits
curl-7_43_
...
HTTPS-prox
Author | SHA1 | Date | |
---|---|---|---|
![]() |
ed24d41cb1 | ||
![]() |
cc9b053d84 | ||
![]() |
3e7a1ff9a6 | ||
![]() |
e21bd4ecb5 | ||
![]() |
4bb13975a8 | ||
![]() |
4e28002898 | ||
![]() |
ff8d352ae9 | ||
![]() |
250d786bd2 | ||
![]() |
0cf80c05ea | ||
![]() |
b27893d15c | ||
![]() |
05cd55f229 | ||
![]() |
ec6d8a38ae | ||
![]() |
127a7b0257 | ||
![]() |
043c5f5c33 | ||
![]() |
171de1bef8 | ||
![]() |
f956ebf252 | ||
![]() |
68a7d38aa0 | ||
![]() |
b4c39010b5 | ||
![]() |
a72207ecf0 | ||
![]() |
6c5f4303fe | ||
![]() |
39904d6f7d | ||
![]() |
88f585c3a1 | ||
![]() |
051485d9e0 | ||
![]() |
3c4065f402 | ||
![]() |
d0ddfe2216 | ||
![]() |
ca770d87e2 | ||
![]() |
ee04bee82b | ||
![]() |
6cfd646f58 | ||
![]() |
808a17ee67 | ||
![]() |
ba4d8f7eba | ||
![]() |
febda2f305 | ||
![]() |
ceb396c54a | ||
![]() |
796c6ef02b | ||
![]() |
60cf8157c7 | ||
![]() |
ad2d517545 | ||
![]() |
1ee0aded89 | ||
![]() |
f322ca7765 | ||
![]() |
fd0c678e21 | ||
![]() |
aba281e762 | ||
![]() |
64e959ffe3 | ||
![]() |
86e2197337 | ||
![]() |
6c20a87105 | ||
![]() |
b430d94fb2 | ||
![]() |
0755308a6a | ||
![]() |
53b13d0c71 | ||
![]() |
431ba85829 | ||
![]() |
eb3703f052 | ||
![]() |
d7e352402c | ||
![]() |
278ea24a7a | ||
![]() |
1f82df9146 | ||
![]() |
077fd8f1fa | ||
![]() |
b6baa108fa | ||
![]() |
88702ebb31 | ||
![]() |
d6d58dd558 | ||
![]() |
a7c4bcd971 | ||
![]() |
3c24400636 | ||
![]() |
dcf5b614ca | ||
![]() |
6479f5a076 | ||
![]() |
d64add3c71 | ||
![]() |
a215381c94 | ||
![]() |
3e0d64d075 | ||
![]() |
01b7d8274c | ||
![]() |
7023d8aa37 | ||
![]() |
eaa98cef8d | ||
![]() |
4e3d396900 | ||
![]() |
f54a4aa9a3 | ||
![]() |
6225c48a03 | ||
![]() |
9b7f8ab21b | ||
![]() |
2200bf6205 | ||
![]() |
729b92afbe | ||
![]() |
23b8fc15c8 | ||
![]() |
e3c85405d0 | ||
![]() |
2581585961 | ||
![]() |
007f3e0971 | ||
![]() |
23c4090fd3 | ||
![]() |
50bff12ac8 | ||
![]() |
1a614c6c37 | ||
![]() |
505d966850 | ||
![]() |
748ffc77c6 | ||
![]() |
60c86297bf | ||
![]() |
cd3aba1a5c | ||
![]() |
f6fbbd6dc3 | ||
![]() |
210fc95c0f | ||
![]() |
3bd7f28000 | ||
![]() |
3f7b1bb89f | ||
![]() |
1ea3a7d5e4 | ||
![]() |
cba5bc5854 | ||
![]() |
ca5f9341ef | ||
![]() |
49a991346e | ||
![]() |
fbf09b7775 | ||
![]() |
f6ce8c9abb | ||
![]() |
4c62066cec | ||
![]() |
9b87078d55 | ||
![]() |
370ee919b3 | ||
![]() |
e2f430c74a | ||
![]() |
ea2c959db4 | ||
![]() |
ca20ca54b2 | ||
![]() |
d9a1776b32 | ||
![]() |
72d99f2e7b | ||
![]() |
2f4f4108d6 | ||
![]() |
03b6e07816 | ||
![]() |
6288cb9304 | ||
![]() |
eefd5a95af | ||
![]() |
b1fc8c0e97 | ||
![]() |
529f9310b1 | ||
![]() |
b1199def8c | ||
![]() |
b7d894d808 | ||
![]() |
d31ed6ac71 | ||
![]() |
419d410ca0 | ||
![]() |
3042cb5043 | ||
![]() |
23cc0c00d4 | ||
![]() |
ace68fdc0c | ||
![]() |
9744ef2289 | ||
![]() |
c238d4da1b | ||
![]() |
5fecdc26f7 | ||
![]() |
257a1c0d14 | ||
![]() |
fe7590f729 | ||
![]() |
72646c2e48 | ||
![]() |
4201e4a9ac | ||
![]() |
4c773bcb47 | ||
![]() |
cb922d47d6 | ||
![]() |
06b5fd8fde | ||
![]() |
5cf0166636 | ||
![]() |
19cb0c4a88 | ||
![]() |
e77b5b7453 | ||
![]() |
684816cd9b | ||
![]() |
2b98cb57c4 | ||
![]() |
3fde8a4971 | ||
![]() |
443e81ea47 | ||
![]() |
c6aedf680f | ||
![]() |
854976ad7b | ||
![]() |
14d5a86b3e | ||
![]() |
db532eff1e | ||
![]() |
3ad83bc3a6 | ||
![]() |
13ddb9e54a | ||
![]() |
7715a70ba2 | ||
![]() |
6f8ecea059 | ||
![]() |
048f84637f | ||
![]() |
d30ad55c59 | ||
![]() |
08e5fb4465 | ||
![]() |
2e373f4a6f | ||
![]() |
bce689605d | ||
![]() |
8256b44e5a | ||
![]() |
da2d3b5805 | ||
![]() |
3771da335b | ||
![]() |
8bb43ecd05 | ||
![]() |
645fc44764 | ||
![]() |
2c000d91f3 | ||
![]() |
aed57fdc95 | ||
![]() |
69ea579700 | ||
![]() |
b1d55997e5 | ||
![]() |
2eb4f5efe9 | ||
![]() |
5bf36ea30d | ||
![]() |
c6ff538ebd | ||
![]() |
8fd190c04f | ||
![]() |
ec9cbb1757 | ||
![]() |
69b89050d4 | ||
![]() |
963b7bd4f7 | ||
![]() |
af90becf4b | ||
![]() |
46ad4f7f93 | ||
![]() |
790d6de485 | ||
![]() |
4f037367ed | ||
![]() |
32fc638ddf | ||
![]() |
119037325d | ||
![]() |
710bb89cf3 | ||
![]() |
095fe60e27 | ||
![]() |
4d60e125de | ||
![]() |
7c478cad57 | ||
![]() |
0110cced2a | ||
![]() |
5f87906e0e | ||
![]() |
684bf30802 | ||
![]() |
6b56901b56 | ||
![]() |
7362008c1c | ||
![]() |
1467dec147 | ||
![]() |
0583ed3e48 | ||
![]() |
67ae07c2e0 | ||
![]() |
3f8d4e264d | ||
![]() |
bb72b9453d | ||
![]() |
5fde69cdc3 | ||
![]() |
443014e905 | ||
![]() |
37af1766e9 | ||
![]() |
67dbf8aa9c | ||
![]() |
4d95491636 | ||
![]() |
47b7d658b4 | ||
![]() |
f65e07ca59 | ||
![]() |
30c131f51f | ||
![]() |
c979a3d0c4 | ||
![]() |
c184a5c6bc | ||
![]() |
c00cec9864 | ||
![]() |
958d2ffb19 | ||
![]() |
a9fd53887b | ||
![]() |
65ca3b083c | ||
![]() |
82e3e8e31f | ||
![]() |
887a4a19aa | ||
![]() |
b550a1c067 | ||
![]() |
202162daeb | ||
![]() |
a7cb6a28e2 | ||
![]() |
3d4ffa71f7 | ||
![]() |
cdba82e1c2 | ||
![]() |
68c620fdc7 | ||
![]() |
fad9604613 | ||
![]() |
0e17369f5b | ||
![]() |
481e0de00a | ||
![]() |
df6a4d3519 | ||
![]() |
e30763c72e | ||
![]() |
6a0bd6ce8b | ||
![]() |
4e6f7aee64 | ||
![]() |
1b8a5afe78 | ||
![]() |
87e533ace0 | ||
![]() |
27620171ff | ||
![]() |
664398e43b | ||
![]() |
3a4f42dd0c | ||
![]() |
5ea0004438 | ||
![]() |
f1ccf68e8c | ||
![]() |
d36d83ba4b | ||
![]() |
5dc556031b | ||
![]() |
0e91737615 | ||
![]() |
7380433d6a | ||
![]() |
a60bde79f9 | ||
![]() |
82db076d9f | ||
![]() |
25a2e8ebaf | ||
![]() |
1869164293 | ||
![]() |
4ceddcf8ca | ||
![]() |
e1a4bab86a | ||
![]() |
8a0ff1e529 | ||
![]() |
668231c309 | ||
![]() |
cb6a07fed0 | ||
![]() |
b604b7f040 | ||
![]() |
9bb198026e | ||
![]() |
749c0ca05b | ||
![]() |
c764cb4add | ||
![]() |
6099f5fcac | ||
![]() |
4963948089 | ||
![]() |
b850437991 | ||
![]() |
eb8283bb1a | ||
![]() |
415f0370ea | ||
![]() |
347a6ee597 | ||
![]() |
2a59fb25cc | ||
![]() |
fb0825cb0a | ||
![]() |
dfeb85a187 | ||
![]() |
96a3488eae | ||
![]() |
45e918564a | ||
![]() |
1abb218fe0 | ||
![]() |
ac7be02e69 | ||
![]() |
37f173cfd0 | ||
![]() |
2132708ac2 | ||
![]() |
4a889441d3 | ||
![]() |
ce034356d2 | ||
![]() |
f21408132a | ||
![]() |
aec249f89f | ||
![]() |
e7d171da6b | ||
![]() |
874413b3e1 | ||
![]() |
62f306ff34 | ||
![]() |
36f6f6f4f2 | ||
![]() |
a78534794e | ||
![]() |
110d99c661 | ||
![]() |
6d91b70d8b | ||
![]() |
2acaf3c804 | ||
![]() |
9756d1da76 | ||
![]() |
22cb631198 | ||
![]() |
613e5022fe | ||
![]() |
2c12ac8de2 | ||
![]() |
30aa38c818 | ||
![]() |
8363656cb4 | ||
![]() |
38ef1b3e7f | ||
![]() |
1d89fd983a | ||
![]() |
b3c7f5159a | ||
![]() |
1cea72bfde | ||
![]() |
14ff86256b | ||
![]() |
e4fb5f2f61 | ||
![]() |
e67e71d62b | ||
![]() |
618dfd65e4 | ||
![]() |
1f1f131e09 | ||
![]() |
9518139c73 | ||
![]() |
5a136398ed | ||
![]() |
7166d91a03 | ||
![]() |
31673ff517 | ||
![]() |
bedf0a588e | ||
![]() |
6ba9a1b952 | ||
![]() |
bc66c21c23 | ||
![]() |
a9c97fba81 | ||
![]() |
1a85c8ef15 | ||
![]() |
9e1b1ca606 | ||
![]() |
15da07d2f2 | ||
![]() |
5be0c88297 | ||
![]() |
052a9dfdad | ||
![]() |
7332ac565c | ||
![]() |
105828a309 | ||
![]() |
2bcd3ef7b2 | ||
![]() |
1a7f66a3de | ||
![]() |
c75a1e7750 | ||
![]() |
daf7f98c11 | ||
![]() |
bb0acba67d | ||
![]() |
5778e6f526 | ||
![]() |
c8a656d3c7 | ||
![]() |
9ee40ce2ab | ||
![]() |
0b8e9c8522 | ||
![]() |
9a5574ca7b | ||
![]() |
ade6682f8d | ||
![]() |
002d58f1e8 | ||
![]() |
cde447217f | ||
![]() |
9d29afdfe3 | ||
![]() |
0cc0b7e268 | ||
![]() |
aa9ead36a4 | ||
![]() |
ecece2cfb5 | ||
![]() |
4d13b78aec | ||
![]() |
39dcf352d2 | ||
![]() |
55a255ee9c | ||
![]() |
4c47cbf533 | ||
![]() |
c22fae7ccc | ||
![]() |
d712da787e | ||
![]() |
2b743dcf8e | ||
![]() |
333c36b276 | ||
![]() |
1ab763acce | ||
![]() |
a8e9e0c205 | ||
![]() |
4a21346ef3 | ||
![]() |
4aee1f9cf5 | ||
![]() |
b9b7ccd04a | ||
![]() |
84d122a8d6 | ||
![]() |
5b9151231d | ||
![]() |
cf8975387f | ||
![]() |
0342ada31f | ||
![]() |
3f5f042e5d | ||
![]() |
bb6b521f69 | ||
![]() |
8279dd7d39 | ||
![]() |
fe6049f04b | ||
![]() |
7f11259eb7 | ||
![]() |
473807b95f | ||
![]() |
f08e30d7bc | ||
![]() |
6428b8de42 | ||
![]() |
97c9d31884 | ||
![]() |
9947f259bf | ||
![]() |
33de75ed63 | ||
![]() |
df5965ebf4 | ||
![]() |
6e566451ce | ||
![]() |
07f7cdc309 | ||
![]() |
3725748599 | ||
![]() |
1e67bc5eaf | ||
![]() |
12f915ca2a | ||
![]() |
4b96240d3f | ||
![]() |
1b3d3f9237 | ||
![]() |
c4eb10e2f0 | ||
![]() |
3b4ee0d432 | ||
![]() |
c092b0f0f3 | ||
![]() |
f75b6065db | ||
![]() |
11ab3f8918 | ||
![]() |
a1b2a6bd93 | ||
![]() |
c8331f515e | ||
![]() |
23b84e448f | ||
![]() |
0da1f5dc5c | ||
![]() |
909f0a82b0 | ||
![]() |
8b1d00ac1a | ||
![]() |
f7dcc7c118 | ||
![]() |
ecf7618e12 | ||
![]() |
5b9a006b8f | ||
![]() |
fc69e2f7ec | ||
![]() |
bdd8cf4777 | ||
![]() |
dda81c1d5f | ||
![]() |
2d7e165761 | ||
![]() |
8356022d17 | ||
![]() |
467309406e | ||
![]() |
b656715da3 | ||
![]() |
9b95306d4c | ||
![]() |
98e8b050ef | ||
![]() |
d9efd36907 | ||
![]() |
1627930177 | ||
![]() |
299b74fcfc | ||
![]() |
279965c923 | ||
![]() |
7db03e5c21 | ||
![]() |
a728225a92 | ||
![]() |
29e5cf2a2d | ||
![]() |
0f645adc95 | ||
![]() |
373b77bca2 | ||
![]() |
6d62d2c55d | ||
![]() |
14b9e780d4 | ||
![]() |
8204844f47 | ||
![]() |
b46a7744bc | ||
![]() |
a284b0ebc4 | ||
![]() |
c5d060cab4 | ||
![]() |
98835eed29 | ||
![]() |
cee21eb6a7 | ||
![]() |
da650c1e54 | ||
![]() |
40c921f8b8 | ||
![]() |
7a8e861a56 | ||
![]() |
ad32457623 | ||
![]() |
32d4260c2d | ||
![]() |
1df8d28381 | ||
![]() |
fa0eeedf35 | ||
![]() |
68d17643f5 | ||
![]() |
aab76af1fa | ||
![]() |
172b2beba6 | ||
![]() |
606b29fe0d | ||
![]() |
60b19630b0 | ||
![]() |
de74e856e6 | ||
![]() |
cd20e81e89 | ||
![]() |
79416fb2d6 | ||
![]() |
8f0178a56b | ||
![]() |
845b011614 | ||
![]() |
ce1bf87a04 | ||
![]() |
5602ad721b | ||
![]() |
55b78c5ae9 | ||
![]() |
c00b18d540 | ||
![]() |
4ed8537be6 | ||
![]() |
cd2644fe2c | ||
![]() |
1c5997ae9d | ||
![]() |
f9087b7499 | ||
![]() |
7df237b0b1 | ||
![]() |
211b265ffd | ||
![]() |
316054e8cd | ||
![]() |
66a5f76583 | ||
![]() |
f7e2cd278a | ||
![]() |
b505df4b68 | ||
![]() |
616cecfdb6 | ||
![]() |
b59f296bf6 | ||
![]() |
e58bd8e41a | ||
![]() |
e6749055d6 | ||
![]() |
8208dd3b22 | ||
![]() |
0c46abd79a | ||
![]() |
1f70cdef98 | ||
![]() |
e3e06e1aee | ||
![]() |
37402b5eb8 | ||
![]() |
3d90ec5448 | ||
![]() |
69c77f69a5 | ||
![]() |
dc2cbfda89 | ||
![]() |
1b5eba8324 | ||
![]() |
ddb106d7f6 | ||
![]() |
77044b53f7 | ||
![]() |
c712aa0ebe | ||
![]() |
a384f28ca6 | ||
![]() |
bf445b6e12 | ||
![]() |
a3a55d80ec | ||
![]() |
e9f0dd43bc | ||
![]() |
f65ab8864e | ||
![]() |
feea9263e9 | ||
![]() |
ea7134ac87 | ||
![]() |
70191958b5 | ||
![]() |
5156982377 | ||
![]() |
903b6e0556 | ||
![]() |
f44b803f16 | ||
![]() |
6842afbf44 | ||
![]() |
ea1eec8ea8 | ||
![]() |
570076e82c | ||
![]() |
ef0fdb83b8 | ||
![]() |
1c3811f4fd | ||
![]() |
afbee791d5 | ||
![]() |
2546134b97 | ||
![]() |
93aacc3050 | ||
![]() |
307f212379 | ||
![]() |
26ddc536b0 | ||
![]() |
0e7d76d6a8 | ||
![]() |
26583a62ab | ||
![]() |
cf6ef2dc92 | ||
![]() |
3b93f1a3ec | ||
![]() |
46d0eba2e9 | ||
![]() |
4a2398627c | ||
![]() |
b88f980a74 | ||
![]() |
85739723ba | ||
![]() |
f72b30e6fb | ||
![]() |
52d83cb0c6 |
62
.gitignore
vendored
62
.gitignore
vendored
@@ -1,51 +1,51 @@
|
||||
.deps
|
||||
.libs
|
||||
*.lib
|
||||
*.pdb
|
||||
*.asc
|
||||
*.dll
|
||||
*.exe
|
||||
*.obj
|
||||
*.asc
|
||||
.*.swp
|
||||
Debug
|
||||
Release
|
||||
*.exp
|
||||
*.la
|
||||
*.lib
|
||||
*.lo
|
||||
*.o
|
||||
*.obj
|
||||
*.pdb
|
||||
*~
|
||||
.*.swp
|
||||
.cproject
|
||||
.deps
|
||||
.dirstamp
|
||||
.libs
|
||||
.project
|
||||
.settings
|
||||
/build/
|
||||
/builds/
|
||||
CHANGES.dist
|
||||
Debug
|
||||
INSTALL
|
||||
Makefile
|
||||
Makefile.in
|
||||
Release
|
||||
TAGS
|
||||
aclocal.m4
|
||||
aclocal.m4.bak
|
||||
autom4te.cache
|
||||
compile
|
||||
config.cache
|
||||
config.guess
|
||||
config.log
|
||||
config.status
|
||||
config.sub
|
||||
configure
|
||||
depcomp
|
||||
libtool
|
||||
ltmain.sh
|
||||
compile
|
||||
curl-config
|
||||
libcurl.pc
|
||||
missing
|
||||
curl-*.tar.gz
|
||||
curl-*.tar.bz2
|
||||
curl-*.tar.gz
|
||||
curl-*.tar.lzma
|
||||
curl-*.zip
|
||||
INSTALL
|
||||
curl-config
|
||||
depcomp
|
||||
install-sh
|
||||
*.o
|
||||
*.lo
|
||||
*.la
|
||||
libcurl.pc
|
||||
libtool
|
||||
ltmain.sh
|
||||
missing
|
||||
mkinstalldirs
|
||||
tags
|
||||
TAGS
|
||||
*~
|
||||
aclocal.m4.bak
|
||||
CHANGES.dist
|
||||
.project
|
||||
.cproject
|
||||
.settings
|
||||
.dirstamp
|
||||
test-driver
|
||||
/build/
|
||||
/builds/
|
||||
|
10
.travis.yml
10
.travis.yml
@@ -1,5 +1,15 @@
|
||||
os:
|
||||
- linux
|
||||
- osx
|
||||
|
||||
sudo: false
|
||||
|
||||
language: c
|
||||
|
||||
install:
|
||||
- if [ "$TRAVIS_OS_NAME" == "osx" ]; then brew update > /dev/null; fi
|
||||
- if [ "$TRAVIS_OS_NAME" == "osx" ]; then brew install openssl libidn rtmpdump libssh2 c-ares libmetalink libressl nghttp2; fi
|
||||
|
||||
before_script:
|
||||
- ./buildconf
|
||||
|
||||
|
14
CHANGES
14
CHANGES
@@ -1,15 +1,7 @@
|
||||
_ _ ____ _
|
||||
___| | | | _ \| |
|
||||
/ __| | | | |_) | |
|
||||
| (__| |_| | _ <| |___
|
||||
\___|\___/|_| \_\_____|
|
||||
See http://curl.haxx.se/changes.html for the edited and human readable online
|
||||
version of what has changed over the years in different curl releases.
|
||||
|
||||
Changelog
|
||||
|
||||
This file no longer holds the changelog. Now you can generate it yourself
|
||||
like this:
|
||||
Generate a CHANGES file like the one present in evey release like this:
|
||||
|
||||
$ git log --pretty=fuller --no-color --date=short --decorate=full | \
|
||||
./log2changes.pl
|
||||
|
||||
The older, manually edited, changelog is found in git named CHANGES.0
|
||||
|
@@ -139,7 +139,7 @@ int main(void)
|
||||
rc = gethostbyname_r(address, &h, &hdata);
|
||||
#elif defined(HAVE_GETHOSTBYNAME_R_5) || \
|
||||
defined(HAVE_GETHOSTBYNAME_R_5_REENTRANT)
|
||||
rc = gethostbyname_r(address, &h, buffer, 8192, 0, &h_errnop);
|
||||
rc = gethostbyname_r(address, &h, buffer, 8192, &h_errnop);
|
||||
(void)hp; /* not used for test */
|
||||
#elif defined(HAVE_GETHOSTBYNAME_R_6) || \
|
||||
defined(HAVE_GETHOSTBYNAME_R_6_REENTRANT)
|
||||
|
@@ -10,8 +10,8 @@ endmacro(add_header_include)
|
||||
|
||||
set(signature_call_conv)
|
||||
if(HAVE_WINDOWS_H)
|
||||
add_header_include(HAVE_WINDOWS_H "windows.h")
|
||||
add_header_include(HAVE_WINSOCK2_H "winsock2.h")
|
||||
add_header_include(HAVE_WINDOWS_H "windows.h")
|
||||
add_header_include(HAVE_WINSOCK_H "winsock.h")
|
||||
set(_source_epilogue
|
||||
"${_source_epilogue}\n#ifndef WIN32_LEAN_AND_MEAN\n#define WIN32_LEAN_AND_MEAN\n#endif")
|
||||
|
@@ -122,10 +122,10 @@ endif()
|
||||
option(CURL_HIDDEN_SYMBOLS "Set to ON to hide libcurl internal symbols (=hide all symbols that aren't officially external)." ON)
|
||||
mark_as_advanced(CURL_HIDDEN_SYMBOLS)
|
||||
|
||||
# IF(WIN32)
|
||||
# OPTION(CURL_WINDOWS_SSPI "Use windows libraries to allow NTLM authentication without openssl" ON)
|
||||
# MARK_AS_ADVANCED(CURL_WINDOWS_SSPI)
|
||||
# ENDIF()
|
||||
IF(WIN32)
|
||||
OPTION(CURL_WINDOWS_SSPI "Use windows libraries to allow NTLM authentication without openssl" ON)
|
||||
MARK_AS_ADVANCED(CURL_WINDOWS_SSPI)
|
||||
ENDIF()
|
||||
|
||||
option(HTTP_ONLY "disables all protocols except HTTP (This overrides all CURL_DISABLE_* options)" OFF)
|
||||
mark_as_advanced(HTTP_ONLY)
|
||||
@@ -186,7 +186,7 @@ option(DISABLED_THREADSAFE "Set to explicitly specify we don't want to use threa
|
||||
mark_as_advanced(DISABLED_THREADSAFE)
|
||||
option(ENABLE_IPV6 "Define if you want to enable IPv6 support" ON)
|
||||
mark_as_advanced(ENABLE_IPV6)
|
||||
if(ENABLE_IPV6)
|
||||
if(ENABLE_IPV6 AND NOT WIN32)
|
||||
include(CheckStructHasMember)
|
||||
check_struct_has_member("struct sockaddr_in6" sin6_addr "netinet/in.h"
|
||||
HAVE_SOCKADDR_IN6_SIN6_ADDR)
|
||||
@@ -355,9 +355,10 @@ if(NOT CURL_DISABLE_LDAP)
|
||||
check_include_file_concat("winber.h" HAVE_WINBER_H)
|
||||
endif()
|
||||
|
||||
set(CMAKE_REQUIRED_INCLUDES_BAK ${CMAKE_REQUIRED_INCLUDES})
|
||||
set(CMAKE_LDAP_INCLUDE_DIR "" CACHE STRING "Path to LDAP include directory")
|
||||
if(CMAKE_LDAP_INCLUDE_DIR)
|
||||
set(CMAKE_REQUIRED_INCLUDES ${CMAKE_LDAP_INCLUDE_DIR})
|
||||
list(APPEND CMAKE_REQUIRED_INCLUDES ${CMAKE_LDAP_INCLUDE_DIR})
|
||||
endif()
|
||||
check_include_file_concat("ldap.h" HAVE_LDAP_H)
|
||||
check_include_file_concat("lber.h" HAVE_LBER_H)
|
||||
@@ -365,9 +366,11 @@ if(NOT CURL_DISABLE_LDAP)
|
||||
if(NOT HAVE_LDAP_H)
|
||||
message(STATUS "LDAP_H not found CURL_DISABLE_LDAP set ON")
|
||||
set(CURL_DISABLE_LDAP ON CACHE BOOL "" FORCE)
|
||||
set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES_BAK}) #LDAP includes won't be used
|
||||
elseif(NOT HAVE_LIBLDAP)
|
||||
message(STATUS "LDAP library '${CMAKE_LDAP_LIB}' not found CURL_DISABLE_LDAP set ON")
|
||||
set(CURL_DISABLE_LDAP ON CACHE BOOL "" FORCE)
|
||||
set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES_BAK}) #LDAP includes won't be used
|
||||
else()
|
||||
if(CMAKE_USE_OPENLDAP)
|
||||
set(USE_OPENLDAP ON)
|
||||
@@ -448,6 +451,7 @@ if(CURL_ZLIB)
|
||||
set(HAVE_LIBZ ON)
|
||||
list(APPEND CURL_LIBS ${ZLIB_LIBRARIES})
|
||||
include_directories(${ZLIB_INCLUDE_DIRS})
|
||||
list(APPEND CMAKE_REQUIRED_INCLUDES ${ZLIB_INCLUDE_DIRS})
|
||||
endif()
|
||||
endif()
|
||||
|
||||
@@ -463,7 +467,7 @@ if(CMAKE_USE_LIBSSH2)
|
||||
if(LIBSSH2_FOUND)
|
||||
list(APPEND CURL_LIBS ${LIBSSH2_LIBRARY})
|
||||
set(CMAKE_REQUIRED_LIBRARIES ${LIBSSH2_LIBRARY})
|
||||
set(CMAKE_REQUIRED_INCLUDES "${LIBSSH2_INCLUDE_DIR}")
|
||||
list(APPEND CMAKE_REQUIRED_INCLUDES "${LIBSSH2_INCLUDE_DIR}")
|
||||
include_directories("${LIBSSH2_INCLUDE_DIR}")
|
||||
set(HAVE_LIBSSH2 ON)
|
||||
set(USE_LIBSSH2 ON)
|
||||
@@ -491,12 +495,12 @@ mark_as_advanced(CMAKE_USE_GSSAPI)
|
||||
if(CMAKE_USE_GSSAPI)
|
||||
find_package(GSS)
|
||||
|
||||
set(HAVE_GSS_API ${GSS_FOUND})
|
||||
set(HAVE_GSSAPI ${GSS_FOUND})
|
||||
if(GSS_FOUND)
|
||||
|
||||
message(STATUS "Found ${GSS_FLAVOUR} GSSAPI version: \"${GSS_VERSION}\"")
|
||||
|
||||
set(CMAKE_REQUIRED_INCLUDES ${GSS_INCLUDE_DIR})
|
||||
list(APPEND CMAKE_REQUIRED_INCLUDES ${GSS_INCLUDE_DIRECTORIES})
|
||||
check_include_file_concat("gssapi/gssapi.h" HAVE_GSSAPI_GSSAPI_H)
|
||||
check_include_file_concat("gssapi/gssapi_generic.h" HAVE_GSSAPI_GSSAPI_GENERIC_H)
|
||||
check_include_file_concat("gssapi/gssapi_krb5.h" HAVE_GSSAPI_GSSAPI_KRB5_H)
|
||||
@@ -532,7 +536,7 @@ if(CMAKE_USE_GSSAPI)
|
||||
|
||||
endif()
|
||||
|
||||
include_directories(${GSS_INCLUDE_DIR})
|
||||
include_directories(${GSS_INCLUDE_DIRECTORIES})
|
||||
link_directories(${GSS_LINK_DIRECTORIES})
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${GSS_COMPILER_FLAGS}")
|
||||
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${GSS_LINKER_FLAGS}")
|
||||
@@ -552,12 +556,25 @@ else()
|
||||
unset(USE_UNIX_SOCKETS CACHE)
|
||||
endif()
|
||||
|
||||
|
||||
# Check for header files
|
||||
if(NOT UNIX)
|
||||
check_include_file_concat("windows.h" HAVE_WINDOWS_H)
|
||||
check_include_file_concat("winsock.h" HAVE_WINSOCK_H)
|
||||
check_include_file_concat("ws2tcpip.h" HAVE_WS2TCPIP_H)
|
||||
check_include_file_concat("winsock2.h" HAVE_WINSOCK2_H)
|
||||
if(CURL_WINDOWS_SSPI)
|
||||
set(CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS} -DSECURITY_WIN32")
|
||||
check_include_file_concat("sspi.h" HAVE_SSPI_H)
|
||||
if(HAVE_SSPI_H)
|
||||
check_include_file_concat("schannel.h" HAVE_SCHANNEL_H)
|
||||
set(USE_WINDOWS_SSPI ON)
|
||||
if(HAVE_SCHANNEL_H)
|
||||
set(USE_SCHANNEL ON)
|
||||
set(SSL_ENABLED ON)
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
endif(NOT UNIX)
|
||||
|
||||
check_include_file_concat("stdio.h" HAVE_STDIO_H)
|
||||
@@ -1046,12 +1063,12 @@ _add_if("AsynchDNS" USE_ARES OR USE_THREADS_POSIX)
|
||||
_add_if("IDN" HAVE_LIBIDN)
|
||||
# TODO SSP1 (WinSSL) check is missing
|
||||
_add_if("SSPI" USE_WINDOWS_SSPI)
|
||||
_add_if("GSS-API" HAVE_GSS_API)
|
||||
_add_if("GSS-API" HAVE_GSSAPI)
|
||||
# TODO SSP1 missing for SPNEGO
|
||||
_add_if("SPNEGO" NOT CURL_DISABLE_CRYPTO_AUTH AND
|
||||
(HAVE_GSS_API OR USE_WINDOWS_SSPI))
|
||||
(HAVE_GSSAPI OR USE_WINDOWS_SSPI))
|
||||
_add_if("Kerberos" NOT CURL_DISABLE_CRYPTO_AUTH AND
|
||||
(HAVE_GSS_API OR USE_WINDOWS_SSPI))
|
||||
(HAVE_GSSAPI OR USE_WINDOWS_SSPI))
|
||||
# NTLM support requires crypto function adaptions from various SSL libs
|
||||
# TODO alternative SSL libs tests for SSP1, GNUTLS, NSS, DARWINSSL
|
||||
if(NOT CURL_DISABLE_CRYPTO_AUTH AND (USE_OPENSSL OR
|
||||
@@ -1136,7 +1153,7 @@ set(VERSIONNUM "${CURL_VERSION_NUM}")
|
||||
# Finally generate a "curl-config" matching this config
|
||||
configure_file("${CURL_SOURCE_DIR}/curl-config.in"
|
||||
"${CURL_BINARY_DIR}/curl-config" @ONLY)
|
||||
install(FILES "${CMAKE_BINARY_DIR}/curl-config"
|
||||
install(FILES "${CURL_BINARY_DIR}/curl-config"
|
||||
DESTINATION bin
|
||||
PERMISSIONS
|
||||
OWNER_READ OWNER_WRITE OWNER_EXECUTE
|
||||
@@ -1146,7 +1163,7 @@ install(FILES "${CMAKE_BINARY_DIR}/curl-config"
|
||||
# Finally generate a pkg-config file matching this config
|
||||
configure_file("${CURL_SOURCE_DIR}/libcurl.pc.in"
|
||||
"${CURL_BINARY_DIR}/libcurl.pc" @ONLY)
|
||||
install(FILES "${CMAKE_BINARY_DIR}/libcurl.pc"
|
||||
install(FILES "${CURL_BINARY_DIR}/libcurl.pc"
|
||||
DESTINATION lib/pkgconfig)
|
||||
|
||||
# This needs to be run very last so other parts of the scripts can take advantage of this.
|
||||
|
@@ -65,7 +65,7 @@ else
|
||||
ARCHES64='-arch x86_64'
|
||||
#We "know" that 10.4 and earlier do not support 64bit
|
||||
OLD_SDK64=`ls $SDK_PATH|egrep -v "10.[0-4]"|head -1`
|
||||
NEW_SDK64=`ls -r $SDK_PATH|egrep -v "10.[0-4]"|head -1`
|
||||
NEW_SDK64=`ls -r $SDK_PATH|egrep -v "10.[0-4][^0-9]" | head -1`
|
||||
if test $USE_OLD -gt 0
|
||||
then
|
||||
SDK64=$OLD_SDK64
|
||||
|
84
Makefile.am
84
Makefile.am
@@ -32,86 +32,97 @@ CMAKE_DIST = CMakeLists.txt CMake/CMakeConfigurableFile.in \
|
||||
VC6_LIBTMPL = projects/Windows/VC6/lib/libcurl.tmpl
|
||||
VC6_LIBDSP = projects/Windows/VC6/lib/libcurl.dsp.dist
|
||||
VC6_LIBDSP_DEPS = $(VC6_LIBTMPL) Makefile.am lib/Makefile.inc
|
||||
VC6_SRCTMPL = projects/Windows/VC6/src/curlsrc.tmpl
|
||||
VC6_SRCDSP = projects/Windows/VC6/src/curlsrc.dsp.dist
|
||||
VC6_SRCTMPL = projects/Windows/VC6/src/curl.tmpl
|
||||
VC6_SRCDSP = projects/Windows/VC6/src/curl.dsp.dist
|
||||
VC6_SRCDSP_DEPS = $(VC6_SRCTMPL) Makefile.am src/Makefile.inc
|
||||
|
||||
VC7_LIBTMPL = projects/Windows/VC7/lib/libcurl.tmpl
|
||||
VC7_LIBVCPROJ = projects/Windows/VC7/lib/libcurl.vcproj.dist
|
||||
VC7_LIBVCPROJ_DEPS = $(VC7_LIBTMPL) Makefile.am lib/Makefile.inc
|
||||
VC7_SRCTMPL = projects/Windows/VC7/src/curlsrc.tmpl
|
||||
VC7_SRCVCPROJ = projects/Windows/VC7/src/curlsrc.vcproj.dist
|
||||
VC7_SRCTMPL = projects/Windows/VC7/src/curl.tmpl
|
||||
VC7_SRCVCPROJ = projects/Windows/VC7/src/curl.vcproj.dist
|
||||
VC7_SRCVCPROJ_DEPS = $(VC7_SRCTMPL) Makefile.am src/Makefile.inc
|
||||
|
||||
VC71_LIBTMPL = projects/Windows/VC7.1/lib/libcurl.tmpl
|
||||
VC71_LIBVCPROJ = projects/Windows/VC7.1/lib/libcurl.vcproj.dist
|
||||
VC71_LIBVCPROJ_DEPS = $(VC71_LIBTMPL) Makefile.am lib/Makefile.inc
|
||||
VC71_SRCTMPL = projects/Windows/VC7.1/src/curlsrc.tmpl
|
||||
VC71_SRCVCPROJ = projects/Windows/VC7.1/src/curlsrc.vcproj.dist
|
||||
VC71_SRCTMPL = projects/Windows/VC7.1/src/curl.tmpl
|
||||
VC71_SRCVCPROJ = projects/Windows/VC7.1/src/curl.vcproj.dist
|
||||
VC71_SRCVCPROJ_DEPS = $(VC71_SRCTMPL) Makefile.am src/Makefile.inc
|
||||
|
||||
VC8_LIBTMPL = projects/Windows/VC8/lib/libcurl.tmpl
|
||||
VC8_LIBVCPROJ = projects/Windows/VC8/lib/libcurl.vcproj.dist
|
||||
VC8_LIBVCPROJ_DEPS = $(VC8_LIBTMPL) Makefile.am lib/Makefile.inc
|
||||
VC8_SRCTMPL = projects/Windows/VC8/src/curlsrc.tmpl
|
||||
VC8_SRCVCPROJ = projects/Windows/VC8/src/curlsrc.vcproj.dist
|
||||
VC8_SRCTMPL = projects/Windows/VC8/src/curl.tmpl
|
||||
VC8_SRCVCPROJ = projects/Windows/VC8/src/curl.vcproj.dist
|
||||
VC8_SRCVCPROJ_DEPS = $(VC8_SRCTMPL) Makefile.am src/Makefile.inc
|
||||
|
||||
VC9_LIBTMPL = projects/Windows/VC9/lib/libcurl.tmpl
|
||||
VC9_LIBVCPROJ = projects/Windows/VC9/lib/libcurl.vcproj.dist
|
||||
VC9_LIBVCPROJ_DEPS = $(VC9_LIBTMPL) Makefile.am lib/Makefile.inc
|
||||
VC9_SRCTMPL = projects/Windows/VC9/src/curlsrc.tmpl
|
||||
VC9_SRCVCPROJ = projects/Windows/VC9/src/curlsrc.vcproj.dist
|
||||
VC9_SRCTMPL = projects/Windows/VC9/src/curl.tmpl
|
||||
VC9_SRCVCPROJ = projects/Windows/VC9/src/curl.vcproj.dist
|
||||
VC9_SRCVCPROJ_DEPS = $(VC9_SRCTMPL) Makefile.am src/Makefile.inc
|
||||
|
||||
VC10_LIBTMPL = projects/Windows/VC10/lib/libcurl.tmpl
|
||||
VC10_LIBVCXPROJ = projects/Windows/VC10/lib/libcurl.vcxproj.dist
|
||||
VC10_LIBVCXPROJ_DEPS = $(VC10_LIBTMPL) Makefile.am lib/Makefile.inc
|
||||
VC10_SRCTMPL = projects/Windows/VC10/src/curlsrc.tmpl
|
||||
VC10_SRCVCXPROJ = projects/Windows/VC10/src/curlsrc.vcxproj.dist
|
||||
VC10_SRCTMPL = projects/Windows/VC10/src/curl.tmpl
|
||||
VC10_SRCVCXPROJ = projects/Windows/VC10/src/curl.vcxproj.dist
|
||||
VC10_SRCVCXPROJ_DEPS = $(VC10_SRCTMPL) Makefile.am src/Makefile.inc
|
||||
|
||||
VC11_LIBTMPL = projects/Windows/VC11/lib/libcurl.tmpl
|
||||
VC11_LIBVCXPROJ = projects/Windows/VC11/lib/libcurl.vcxproj.dist
|
||||
VC11_LIBVCXPROJ_DEPS = $(VC11_LIBTMPL) Makefile.am lib/Makefile.inc
|
||||
VC11_SRCTMPL = projects/Windows/VC11/src/curlsrc.tmpl
|
||||
VC11_SRCVCXPROJ = projects/Windows/VC11/src/curlsrc.vcxproj.dist
|
||||
VC11_SRCTMPL = projects/Windows/VC11/src/curl.tmpl
|
||||
VC11_SRCVCXPROJ = projects/Windows/VC11/src/curl.vcxproj.dist
|
||||
VC11_SRCVCXPROJ_DEPS = $(VC11_SRCTMPL) Makefile.am src/Makefile.inc
|
||||
|
||||
VC12_LIBTMPL = projects/Windows/VC12/lib/libcurl.tmpl
|
||||
VC12_LIBVCXPROJ = projects/Windows/VC12/lib/libcurl.vcxproj.dist
|
||||
VC12_LIBVCXPROJ_DEPS = $(VC12_LIBTMPL) Makefile.am lib/Makefile.inc
|
||||
VC12_SRCTMPL = projects/Windows/VC12/src/curlsrc.tmpl
|
||||
VC12_SRCVCXPROJ = projects/Windows/VC12/src/curlsrc.vcxproj.dist
|
||||
VC12_SRCTMPL = projects/Windows/VC12/src/curl.tmpl
|
||||
VC12_SRCVCXPROJ = projects/Windows/VC12/src/curl.vcxproj.dist
|
||||
VC12_SRCVCXPROJ_DEPS = $(VC12_SRCTMPL) Makefile.am src/Makefile.inc
|
||||
|
||||
VC14_LIBTMPL = projects/Windows/VC14/lib/libcurl.tmpl
|
||||
VC14_LIBVCXPROJ = projects/Windows/VC14/lib/libcurl.vcxproj.dist
|
||||
VC14_LIBVCXPROJ_DEPS = $(VC14_LIBTMPL) Makefile.am lib/Makefile.inc
|
||||
VC14_SRCTMPL = projects/Windows/VC14/src/curl.tmpl
|
||||
VC14_SRCVCXPROJ = projects/Windows/VC14/src/curl.vcxproj.dist
|
||||
VC14_SRCVCXPROJ_DEPS = $(VC14_SRCTMPL) Makefile.am src/Makefile.inc
|
||||
|
||||
VC_DIST = projects/README \
|
||||
projects/build-openssl.bat \
|
||||
projects/build-wolfssl.bat \
|
||||
projects/checksrc.bat \
|
||||
projects/Windows/VC6/curl-all.dsw \
|
||||
projects/Windows/VC6/lib/libcurl.dsw \
|
||||
projects/Windows/VC6/src/curlsrc.dsw \
|
||||
projects/Windows/VC6/src/curl.dsw \
|
||||
projects/Windows/VC7/curl-all.sln \
|
||||
projects/Windows/VC7/lib/libcurl.sln \
|
||||
projects/Windows/VC7/src/curlsrc.sln \
|
||||
projects/Windows/VC7/src/curl.sln \
|
||||
projects/Windows/VC7.1/curl-all.sln \
|
||||
projects/Windows/VC7.1/lib/libcurl.sln \
|
||||
projects/Windows/VC7.1/src/curlsrc.sln \
|
||||
projects/Windows/VC7.1/src/curl.sln \
|
||||
projects/Windows/VC8/curl-all.sln \
|
||||
projects/Windows/VC8/lib/libcurl.sln \
|
||||
projects/Windows/VC8/src/curlsrc.sln \
|
||||
projects/Windows/VC8/src/curl.sln \
|
||||
projects/Windows/VC9/curl-all.sln \
|
||||
projects/Windows/VC9/lib/libcurl.sln \
|
||||
projects/Windows/VC9/src/curlsrc.sln \
|
||||
projects/Windows/VC9/src/curl.sln \
|
||||
projects/Windows/VC10/curl-all.sln \
|
||||
projects/Windows/VC10/lib/libcurl.sln \
|
||||
projects/Windows/VC10/src/curlsrc.sln \
|
||||
projects/Windows/VC10/src/curl.sln \
|
||||
projects/Windows/VC11/curl-all.sln \
|
||||
projects/Windows/VC11/lib/libcurl.sln \
|
||||
projects/Windows/VC11/src/curlsrc.sln \
|
||||
projects/Windows/VC11/src/curl.sln \
|
||||
projects/Windows/VC12/curl-all.sln \
|
||||
projects/Windows/VC12/lib/libcurl.sln \
|
||||
projects/Windows/VC12/src/curlsrc.sln
|
||||
projects/Windows/VC12/src/curl.sln \
|
||||
projects/Windows/VC14/curl-all.sln \
|
||||
projects/Windows/VC14/lib/libcurl.sln \
|
||||
projects/Windows/VC14/src/curl.sln
|
||||
|
||||
WINBUILD_DIST = winbuild/BUILD.WINDOWS.txt winbuild/gen_resp_file.bat \
|
||||
winbuild/MakefileBuild.vc winbuild/Makefile.vc \
|
||||
@@ -124,7 +135,8 @@ EXTRA_DIST = CHANGES COPYING maketgz Makefile.dist curl-config.in \
|
||||
CLEANFILES = $(VC6_LIBDSP) $(VC6_SRCDSP) $(VC7_LIBVCPROJ) $(VC7_SRCVCPROJ) \
|
||||
$(VC71_LIBVCPROJ) $(VC71_SRCVCPROJ) $(VC8_LIBVCPROJ) $(VC8_SRCVCPROJ) \
|
||||
$(VC9_LIBVCPROJ) $(VC9_SRCVCPROJ) $(VC10_LIBVCXPROJ) $(VC10_SRCVCXPROJ) \
|
||||
$(VC11_LIBVCXPROJ) $(VC11_SRCVCXPROJ) $(VC12_LIBVCXPROJ) $(VC12_SRCVCXPROJ)
|
||||
$(VC11_LIBVCXPROJ) $(VC11_SRCVCXPROJ) $(VC12_LIBVCXPROJ) $(VC12_SRCVCXPROJ) \
|
||||
$(VC14_LIBVCXPROJ) $(VC14_SRCVCXPROJ)
|
||||
|
||||
bin_SCRIPTS = curl-config
|
||||
|
||||
@@ -269,7 +281,7 @@ vc-ide: $(VC6_LIBDSP_DEPS) $(VC6_SRCDSP_DEPS) $(VC7_LIBVCPROJ_DEPS) \
|
||||
$(VC8_LIBVCPROJ_DEPS) $(VC8_SRCVCPROJ_DEPS) $(VC9_LIBVCPROJ_DEPS) \
|
||||
$(VC9_SRCVCPROJ_DEPS) $(VC10_LIBVCXPROJ_DEPS) $(VC10_SRCVCXPROJ_DEPS) \
|
||||
$(VC11_LIBVCXPROJ_DEPS) $(VC11_SRCVCXPROJ_DEPS) $(VC12_LIBVCXPROJ_DEPS) \
|
||||
$(VC12_SRCVCXPROJ_DEPS)
|
||||
$(VC12_SRCVCXPROJ_DEPS) $(VC14_LIBVCXPROJ_DEPS) $(VC14_SRCVCXPROJ_DEPS)
|
||||
@(win32_lib_srcs='$(LIB_CFILES)'; \
|
||||
win32_lib_hdrs='$(LIB_HFILES) config-win32.h'; \
|
||||
win32_lib_rc='$(LIB_RCFILES)'; \
|
||||
@@ -530,4 +542,22 @@ function gen_element(type, dir, file)\
|
||||
-v src_rc="$$win32_src_rc" \
|
||||
-v src_x_srcs="$$sorted_src_x_srcs" \
|
||||
-v src_x_hdrs="$$sorted_src_x_hdrs" \
|
||||
"$$awk_code" $(srcdir)/$(VC12_SRCTMPL) > $(VC12_SRCVCXPROJ) || { exit 1; };)
|
||||
"$$awk_code" $(srcdir)/$(VC12_SRCTMPL) > $(VC12_SRCVCXPROJ) || { exit 1; }; \
|
||||
\
|
||||
echo "generating '$(VC14_LIBVCXPROJ)'"; \
|
||||
awk -v proj_type=vcxproj \
|
||||
-v lib_srcs="$$sorted_lib_srcs" \
|
||||
-v lib_hdrs="$$sorted_lib_hdrs" \
|
||||
-v lib_rc="$$win32_lib_rc" \
|
||||
-v lib_vtls_srcs="$$sorted_lib_vtls_srcs" \
|
||||
-v lib_vtls_hdrs="$$sorted_lib_vtls_hdrs" \
|
||||
"$$awk_code" $(srcdir)/$(VC14_LIBTMPL) > $(VC14_LIBVCXPROJ) || { exit 1; }; \
|
||||
\
|
||||
echo "generating '$(VC14_SRCVCXPROJ)'"; \
|
||||
awk -v proj_type=vcxproj \
|
||||
-v src_srcs="$$sorted_src_srcs" \
|
||||
-v src_hdrs="$$sorted_src_hdrs" \
|
||||
-v src_rc="$$win32_src_rc" \
|
||||
-v src_x_srcs="$$sorted_src_x_srcs" \
|
||||
-v src_x_hdrs="$$sorted_src_x_hdrs" \
|
||||
"$$awk_code" $(srcdir)/$(VC14_SRCTMPL) > $(VC14_SRCVCXPROJ) || { exit 1; };)
|
||||
|
@@ -5,7 +5,7 @@
|
||||
# | (__| |_| | _ <| |___
|
||||
# \___|\___/|_| \_\_____|
|
||||
#
|
||||
# Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
# Copyright (C) 1998 - 2015, 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
|
||||
@@ -566,6 +566,17 @@ src/Makefile.vc12: src/Makefile.vc6
|
||||
@echo "generate $@"
|
||||
@sed -e "s#/GX /DWIN32 /YX#/EHsc /DWIN32#" -e "s#/GZ#/RTC1#" -e "s/ws2_32.lib/ws2_32.lib/g" -e "s/vc6/vc12/g" -e "s/VC6/VC12/g" src/Makefile.vc6 > src/Makefile.vc12
|
||||
|
||||
# VC14 makefiles are for use with VS2015
|
||||
vc14: lib/Makefile.vc14 src/Makefile.vc14
|
||||
|
||||
lib/Makefile.vc14: lib/Makefile.vc6
|
||||
@echo "generate $@"
|
||||
@sed -e "s#/GX /DWIN32 /YX#/EHsc /DWIN32#" -e "s#/GZ#/RTC1#" -e "s/ws2_32.lib/ws2_32.lib/g" -e "s/vc6/vc14/g" -e "s/VC6/VC14/g" lib/Makefile.vc6 > lib/Makefile.vc14
|
||||
|
||||
src/Makefile.vc14: src/Makefile.vc6
|
||||
@echo "generate $@"
|
||||
@sed -e "s#/GX /DWIN32 /YX#/EHsc /DWIN32#" -e "s#/GZ#/RTC1#" -e "s/ws2_32.lib/ws2_32.lib/g" -e "s/vc6/vc14/g" -e "s/VC6/VC14/g" src/Makefile.vc6 > src/Makefile.vc14
|
||||
|
||||
ca-bundle: lib/mk-ca-bundle.pl
|
||||
@echo "generate a fresh ca-bundle.crt"
|
||||
@perl $< -b -l -u lib/ca-bundle.crt
|
||||
|
215
RELEASE-NOTES
215
RELEASE-NOTES
@@ -1,92 +1,73 @@
|
||||
Curl and libcurl 7.43.0
|
||||
Curl and libcurl 7.46.0
|
||||
|
||||
Public curl releases: 147
|
||||
Command line options: 176
|
||||
curl_easy_setopt() options: 219
|
||||
Public functions in libcurl: 58
|
||||
Contributors: 1291
|
||||
Public curl releases: 150
|
||||
Command line options: 177
|
||||
curl_easy_setopt() options: 221
|
||||
Public functions in libcurl: 61
|
||||
Contributors: 1322
|
||||
|
||||
This release includes the following changes:
|
||||
|
||||
o Added CURLOPT_PROXY_SERVICE_NAME[11]
|
||||
o Added CURLOPT_SERVICE_NAME[12]
|
||||
o New curl option: --proxy-service-name[13]
|
||||
o Mew curl option: --service-name [14]
|
||||
o New curl option: --data-raw [5]
|
||||
o Added CURLOPT_PIPEWAIT [15]
|
||||
o Added support for multiplexing transfers using HTTP/2, enable this
|
||||
with the new CURLPIPE_MULTIPLEX bit for CURLMOPT_PIPELINING [16]
|
||||
o HTTP/2: requires nghttp2 1.0.0 or later
|
||||
o scripts: add zsh.pl for generating zsh completion
|
||||
o curl.h: add CURL_HTTP_VERSION_2
|
||||
o configure: build silently by default
|
||||
o cookies: Add support for Publix Suffix List with libpsl
|
||||
o vtls: added support for mbedTLS [7]
|
||||
o Added CURLOPT_STREAM_DEPENDS [8]
|
||||
o Added CURLOPT_STREAM_DEPENDS_E [9]
|
||||
o Added CURLOPT_STREAM_WEIGHT [10]
|
||||
o Added CURLFORM_CONTENTLEN [14]
|
||||
o oauth2: Added support for OAUTHBEARER SASL mechanism to IMAP, POP3 and SNMP
|
||||
|
||||
This release includes the following bugfixes:
|
||||
|
||||
o CVE-2015-3236: lingering HTTP credentials in connection re-use [30]
|
||||
o CVE-2015-3237: SMB send off unrelated memory contents [31]
|
||||
o nss: fix compilation failure with old versions of NSS [1]
|
||||
o curl_easy_getinfo.3: document 'internals' in CURLINFO_TLS_SESSION
|
||||
o schannel.c: Fix possible SEC_E_BUFFER_TOO_SMALL error
|
||||
o Curl_ossl_init: load builtin modules [2]
|
||||
o configure: follow-up fix for krb5-config [3]
|
||||
o sasl_sspi: Populate domain from the realm in the challenge [4]
|
||||
o netrc: support 'default' token
|
||||
o README: convert to UTF-8
|
||||
o cyassl: Implement public key pinning
|
||||
o nss: implement public key pinning for NSS backend
|
||||
o mingw build: add arch -m32/-m64 to LDFLAGS
|
||||
o schannel: Fix out of bounds array [6]
|
||||
o configure: remove autogenerated files by autoconf
|
||||
o configure: remove --automake from libtoolize call
|
||||
o acinclude.m4: fix shell test for default CA cert bundle/path
|
||||
o schannel: fix regression in schannel_recv [7]
|
||||
o openssl: skip trace outputs for ssl_ver == 0 [8]
|
||||
o gnutls: properly retrieve certificate status
|
||||
o netrc: Read in text mode when cygwin [9]
|
||||
o winbuild: Document the option used to statically link the CRT [10]
|
||||
o FTP: Make EPSV use the control IP address rather than the original host
|
||||
o FTP: fix dangling conn->ip_addr dereference on verbose EPSV
|
||||
o conncache: keep bundles on host+port bases, not only host names
|
||||
o runtests.pl: use 'h2c' now, no -14 anymore
|
||||
o curlver: introducing new version number (checking) macros
|
||||
o openssl: boringssl build brekage, use SSL_CTX_set_msg_callback [17]
|
||||
o CURLOPT_POSTFIELDS.3: correct variable names [18]
|
||||
o curl_easy_unescape.3: update RFC reference [19]
|
||||
o gnutls: don't fail on non-fatal alerts during handshake
|
||||
o testcurl.pl: allow source to be in an arbitrary directory
|
||||
o CURLOPT_HTTPPROXYTUNNEL.3: only works with a HTTP proxy
|
||||
o SSPI-error: Change SEC_E_ILLEGAL_MESSAGE description [20]
|
||||
o parse_proxy: switch off tunneling if non-HTTP proxy [21]
|
||||
o share_init: fix OOM crash
|
||||
o perl: remove subdir, not touched in 9 years
|
||||
o CURLOPT_COOKIELIST.3: Add example
|
||||
o CURLOPT_COOKIE.3: Explain that the cookies won't be modified [22]
|
||||
o CURLOPT_COOKIELIST.3: Explain Set-Cookie without a domain [23]
|
||||
o FAQ: How do I port libcurl to my OS?
|
||||
o openssl: Use TLS_client_method for OpenSSL 1.1.0+
|
||||
o HTTP-NTLM: fail auth on connection close instead of looping [24]
|
||||
o curl_setup: Add macros for FOPEN_READTEXT, FOPEN_WRITETEXT [25]
|
||||
o curl_getdate.3: update RFC reference
|
||||
o curl_multi_info_read.3: added example
|
||||
o curl_multi_perform.3: added example
|
||||
o curl_multi_timeout.3: added example
|
||||
o cookie: Stop exporting any-domain cookies [26]
|
||||
o openssl: remove dummy callback use from SSL_CTX_set_verify()
|
||||
o openssl: remove SSL_get_session()-using code
|
||||
o openssl: removed USERDATA_IN_PWD_CALLBACK kludge
|
||||
o openssl: removed error string #ifdef
|
||||
o openssl: Fix verification of server-sent legacy intermediates [27]
|
||||
o docs: man page indentation and syntax fixes
|
||||
o docs: Spelling fixes
|
||||
o fopen.c: fix a few compiler warnings
|
||||
o CURLOPT_OPENSOCKETFUNCTION: return error at once [28]
|
||||
o schannel: Add support for optional client certificates
|
||||
o build: Properly detect OpenSSL 1.0.2 when using configure
|
||||
o urldata: store POST size in state.infilesize too [29]
|
||||
o security:choose_mech remove dead code
|
||||
o rtsp_do: remove dead code
|
||||
o docs: many HTTP URIs changed to HTTPS
|
||||
o schannel: schannel_recv overhaul [32]
|
||||
o des: Fix header conditional for Curl_des_set_odd_parity
|
||||
o ntlm: get rid of unconditional use of long long [1]
|
||||
o CURLOPT_CERTINFO.3: fix reference to CURLINFO_CERTINFO
|
||||
o docs: CURLINFO_LASTSOCKET => CURLINFO_ACTIVESOCKET [2]
|
||||
o http2: Fix http2_recv to return -1 if recv returned -1
|
||||
o curl_global_init_mem: set function pointers before doing init
|
||||
o ntlm: error out without 64bit support as the code needs it [1]
|
||||
o openssl: Fix set up of pkcs12 certificate verification chain
|
||||
o acinclude: remove PKGCONFIG override [3]
|
||||
o test1531: case the size to fix the test on non-largefile builds
|
||||
o fread_func: move callback pointer from set to state struct [4]
|
||||
o test1601: fix compilation with --enable-debug and --disable-crypto-auth
|
||||
o http2: Don't pass unitialized name+len pairs to nghttp2_submit_request [5]
|
||||
o curlbuild.h: Fix non-configure compiling to mips and sh4 targets
|
||||
o tool: Generate easysrc with last cache linked-list [6]
|
||||
o cmake: Fix for add_subdirectory(curl) use-case
|
||||
o vtls: fix compiler warning for TLS backends without sha256
|
||||
o build: fix for MSDOS/djgpp
|
||||
o checksrc: add crude // detection
|
||||
o http2: on_frame_recv: trust the conn/data input
|
||||
o ftp: allow CURLOPT_IGNORE_CONTENT_LENGTH to ignore size [11]
|
||||
o polarssl/mbedtls: fix name space pollution
|
||||
o build: Fix mingw ssl gdi32 order [12]
|
||||
o build: Fix support for PKG_CONFIG
|
||||
o MacOSX-Framework: sdk regex fix for sdk 10.10 and later
|
||||
o socks: Fix incorrect port numbers in failed connect messages
|
||||
o curl.1: -E: s/private certificate/client certificate
|
||||
o curl.h: s/HTTPPOST_/CURL_HTTPOST_ [13]
|
||||
o curl_formadd: support >2GB files on windows [14]
|
||||
o http redirects: %-encode bytes outside of ascii range [15]
|
||||
o rawstr: Speed up Curl_raw_toupper by 40%
|
||||
o curl_ntlm_core: fix 2 curl_off_t constant overflows.
|
||||
o getinfo: CURLINFO_ACTIVESOCKET: fix bad socket value
|
||||
o tftp tests: verify sent options too
|
||||
o imap: Don't call imap_atom() when no mailbox specified in LIST command
|
||||
o imap: Fixed double quote in LIST command when mailbox contains spaces
|
||||
o imap: Don't check for continuation when executing a CUSTOMREQUEST [16]
|
||||
o acinclude: Remove check for 16-bit curl_off_t
|
||||
o BoringSSL: Work with stricter BIO_get_mem_data() [17]
|
||||
o cmake: Add missing feature macros in config header [18]
|
||||
o sasl_sspi: fixed unicode build for digest authentication [19]
|
||||
o sasl_sspi: fix identity memory leak in digest authentication
|
||||
o unit1602: Fixed failure in torture test
|
||||
o unit1603: Added unit tests for hash functions
|
||||
o vtls/openssl: remove unused traces of yassl ifdefs
|
||||
o openssl: remove #ifdefs for < 0.9.7 support
|
||||
o typecheck-gcc.h: add some missing options
|
||||
o curl: mark two more options strings for --libcurl output
|
||||
o openssl: Free modules on cleanup [20]
|
||||
|
||||
This release includes the following known bugs:
|
||||
|
||||
@@ -95,51 +76,35 @@ This release includes the following known bugs:
|
||||
This release would not have looked like this without help, code, reports and
|
||||
advice from friends like these:
|
||||
|
||||
Alessandro Ghedini, Alexander Dyagilev, Anders Bakken, Anthony Avina,
|
||||
Ashish Shukla, Bert Huijben, Brian Chrisman, Brian Prodoehl, Chris Araman,
|
||||
Dagobert Michelsen, Dan Fandrich, Daniel Melani, Daniel Stenberg,
|
||||
Dmitry Eremin-Solenikov, Drake Arconis, Egon Eckert, Frank Meier, Fred Stluka,
|
||||
Gisle Vanem, Grant Pannell, Isaac Boukris, Jens Rantil, Joel Depooter,
|
||||
Kamil Dudka, Linus Nielsen Feltzing, Linus Nielsen Feltzing Feltzing,
|
||||
Liviu Chircu, Marc Hoersken, Michael Osipov, Oren Souroujon, Orgad Shaneh,
|
||||
Patrick Monnerat, Patrick Rapin, Paul Howarth, Paul Oliver, Rafayel Mkrtchyan,
|
||||
Ray Satiro, Sean Boudreau, Tatsuhiro Tsujikawa, Tomas Tomecek, Viktor Szakáts,
|
||||
Ville Skyttä, Yehezkel Horowitz,
|
||||
(43 contributors)
|
||||
Anders Bakken, Dan Fandrich, Daniel Hwang, Daniel Stenberg, Dmitry S. Baikov,
|
||||
Douglas Creager, Erik Johansson, Gisle Vanem, Javier G. Sogo, John Levon,
|
||||
Jonas Minnberg, Justin Ehlert, Kamil Dudka, Kang Lin, Kurt Fankhauser,
|
||||
Lauri Kasanen, Marcel Raad, Patrick Monnerat, Rainer Jung, Ray Satiro,
|
||||
Richard Hosking, Sebastian Pohlschmidt, Stefan Bühler, Steve Holme,
|
||||
Svyatoslav Mishyn, Tatsuhiro Tsujikawa, Tim Rühsen, xiangbin li,
|
||||
(28 contributors)
|
||||
|
||||
Thanks! (and sorry if I forgot to mention someone)
|
||||
|
||||
References to bug reports and discussions on issues:
|
||||
|
||||
[1] = http://curl.haxx.se/mail/lib-2015-04/0095.html
|
||||
[2] = https://github.com/bagder/curl/pull/206
|
||||
[3] = https://github.com/bagder/curl/commit/5b668606527613179d0349f21b4ab0df2971e3d2#commitcomment-10473445
|
||||
[4] = https://github.com/bagder/curl/pull/141
|
||||
[5] = https://github.com/bagder/curl/issues/198
|
||||
[6] = http://curl.haxx.se/mail/lib-2015-04/0199.html
|
||||
[7] = https://github.com/bagder/curl/issues/244
|
||||
[8] = https://github.com/bagder/curl/issues/219
|
||||
[9] = https://github.com/bagder/curl/pull/258
|
||||
[10] = https://github.com/bagder/curl/issues/254
|
||||
[11] = http://curl.haxx.se/libcurl/c/CURLOPT_PROXY_SERVICE_NAME.html
|
||||
[12] = http://curl.haxx.se/libcurl/c/CURLOPT_SERVICE_NAME.html
|
||||
[13] = http://curl.haxx.se/docs/manpage.html#--proxy-service-name
|
||||
[14] = http://curl.haxx.se/docs/manpage.html#--service-name
|
||||
[15] = http://curl.haxx.se/libcurl/c/CURLOPT_PIPEWAIT.html
|
||||
[16] = http://curl.haxx.se/libcurl/c/CURLMOPT_PIPELINING.html
|
||||
[17] = https://github.com/bagder/curl/issues/275
|
||||
[18] = https://github.com/bagder/curl/issues/281
|
||||
[19] = https://github.com/bagder/curl/issues/282
|
||||
[20] = https://github.com/bagder/curl/issues/267
|
||||
[21] = http://curl.haxx.se/mail/lib-2015-05/0056.html
|
||||
[22] = http://curl.haxx.se/mail/lib-2015-05/0115.html
|
||||
[23] = http://curl.haxx.se/mail/lib-2015-05/0137.html
|
||||
[24] = https://github.com/bagder/curl/issues/256
|
||||
[25] = https://github.com/bagder/curl/pull/258#issuecomment-107093055
|
||||
[26] = https://github.com/bagder/curl/issues/292
|
||||
[27] = https://rt.openssl.org/Ticket/Display.html?id=3621&user=guest&pass=guest
|
||||
[28] = http://curl.haxx.se/mail/lib-2015-06/0047.html
|
||||
[29] = http://curl.haxx.se/mail/lib-2015-06/0019.html
|
||||
[30] = http://curl.haxx.se/docs/adv_20150617A.html
|
||||
[31] = http://curl.haxx.se/docs/adv_20150617B.html
|
||||
[32] = https://github.com/bagder/curl/issues/244
|
||||
[1] = http://curl.haxx.se/bug/?i=478
|
||||
[2] = http://curl.haxx.se/bug/?i=479
|
||||
[3] = http://curl.haxx.se/mail/lib-2015-10/0035.html
|
||||
[4] = http://curl.haxx.se/bug/?i=346
|
||||
[5] = http://curl.haxx.se/bug/?i=493
|
||||
[6] = http://curl.haxx.se/bug/?i=452
|
||||
[7] = http://curl.haxx.se/bug/?i=496
|
||||
[8] = http://curl.haxx.se/libcurl/c/CURLOPT_STREAM_DEPENDS.html
|
||||
[9] = http://curl.haxx.se/libcurl/c/CURLOPT_STREAM_DEPENDS_E.html
|
||||
[10] = http://curl.haxx.se/libcurl/c/CURLOPT_STREAM_WEIGHT.html
|
||||
[11] = http://curl.haxx.se/bug/?i=480
|
||||
[12] = https://github.com/bagder/curl/pull/501
|
||||
[13] = http://curl.haxx.se/bug/?i=506
|
||||
[14] = http://curl.haxx.se/bug/?i=425
|
||||
[15] = http://curl.haxx.se/bug/?i=473
|
||||
[16] = http://curl.haxx.se/bug/?i=486
|
||||
[17] = http://curl.haxx.se/bug/?i=524
|
||||
[18] = http://curl.haxx.se/bug/?i=523
|
||||
[19] = http://curl.haxx.se/bug/?i=525
|
||||
[20] = http://curl.haxx.se/bug/?i=526
|
||||
|
58
acinclude.m4
58
acinclude.m4
@@ -5,7 +5,7 @@
|
||||
# | (__| |_| | _ <| |___
|
||||
# \___|\___/|_| \_\_____|
|
||||
#
|
||||
# Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
# Copyright (C) 1998 - 2015, 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
|
||||
@@ -1851,8 +1851,10 @@ AC_DEFUN([CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC], [
|
||||
AC_REQUIRE([AC_HEADER_TIME])dnl
|
||||
AC_CHECK_HEADERS(sys/types.h sys/time.h time.h)
|
||||
AC_MSG_CHECKING([for monotonic clock_gettime])
|
||||
AC_COMPILE_IFELSE([
|
||||
AC_LANG_PROGRAM([[
|
||||
#
|
||||
if test "x$dontwant_rt" == "xno" ; then
|
||||
AC_COMPILE_IFELSE([
|
||||
AC_LANG_PROGRAM([[
|
||||
#ifdef HAVE_SYS_TYPES_H
|
||||
#include <sys/types.h>
|
||||
#endif
|
||||
@@ -1866,17 +1868,18 @@ AC_DEFUN([CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC], [
|
||||
#include <time.h>
|
||||
#endif
|
||||
#endif
|
||||
]],[[
|
||||
struct timespec ts;
|
||||
(void)clock_gettime(CLOCK_MONOTONIC, &ts);
|
||||
]])
|
||||
],[
|
||||
AC_MSG_RESULT([yes])
|
||||
ac_cv_func_clock_gettime="yes"
|
||||
],[
|
||||
AC_MSG_RESULT([no])
|
||||
ac_cv_func_clock_gettime="no"
|
||||
])
|
||||
]],[[
|
||||
struct timespec ts;
|
||||
(void)clock_gettime(CLOCK_MONOTONIC, &ts);
|
||||
]])
|
||||
],[
|
||||
AC_MSG_RESULT([yes])
|
||||
ac_cv_func_clock_gettime="yes"
|
||||
],[
|
||||
AC_MSG_RESULT([no])
|
||||
ac_cv_func_clock_gettime="no"
|
||||
])
|
||||
fi
|
||||
dnl Definition of HAVE_CLOCK_GETTIME_MONOTONIC is intentionally postponed
|
||||
dnl until library linking and run-time checks for clock_gettime succeed.
|
||||
])
|
||||
@@ -2834,7 +2837,6 @@ AC_DEFUN([CURL_CONFIGURE_CURL_OFF_T], [
|
||||
#
|
||||
x_LP64_long=""
|
||||
x_LP32_long=""
|
||||
x_LP16_long=""
|
||||
#
|
||||
if test "$ac_cv_sizeof_long" -eq "8" &&
|
||||
test "$ac_cv_sizeof_voidp" -ge "8"; then
|
||||
@@ -2842,9 +2844,6 @@ AC_DEFUN([CURL_CONFIGURE_CURL_OFF_T], [
|
||||
elif test "$ac_cv_sizeof_long" -eq "4" &&
|
||||
test "$ac_cv_sizeof_voidp" -ge "4"; then
|
||||
x_LP32_long="long"
|
||||
elif test "$ac_cv_sizeof_long" -eq "2" &&
|
||||
test "$ac_cv_sizeof_voidp" -ge "2"; then
|
||||
x_LP16_long="long"
|
||||
fi
|
||||
#
|
||||
dnl DO_CURL_OFF_T_CHECK results are stored in next 3 vars
|
||||
@@ -2878,17 +2877,6 @@ AC_DEFUN([CURL_CONFIGURE_CURL_OFF_T], [
|
||||
done
|
||||
AC_MSG_RESULT([$curl_typeof_curl_off_t])
|
||||
fi
|
||||
if test "$curl_typeof_curl_off_t" = "unknown"; then
|
||||
AC_MSG_CHECKING([for 16-bit curl_off_t data type])
|
||||
for t2 in \
|
||||
"$x_LP16_long" \
|
||||
'int16_t' \
|
||||
'__int16' \
|
||||
'int' ; do
|
||||
DO_CURL_OFF_T_CHECK([$t2], [2])
|
||||
done
|
||||
AC_MSG_RESULT([$curl_typeof_curl_off_t])
|
||||
fi
|
||||
if test "$curl_typeof_curl_off_t" = "unknown"; then
|
||||
AC_MSG_ERROR([cannot find data type for curl_off_t.])
|
||||
fi
|
||||
@@ -3049,12 +3037,14 @@ dnl Optionally PKG_CONFIG_LIBDIR may be given as $pcdir.
|
||||
dnl
|
||||
|
||||
AC_DEFUN([CURL_CHECK_PKGCONFIG], [
|
||||
if test -n "$PKG_CONFIG"; then
|
||||
PKGCONFIG="$PKG_CONFIG"
|
||||
else
|
||||
AC_PATH_TOOL([PKGCONFIG], [pkg-config], [no],
|
||||
[$PATH:/usr/bin:/usr/local/bin])
|
||||
fi
|
||||
|
||||
PKGCONFIG="no"
|
||||
|
||||
AC_PATH_TOOL( PKGCONFIG, pkg-config, no, $PATH:/usr/bin:/usr/local/bin)
|
||||
|
||||
if test x$PKGCONFIG != xno; then
|
||||
if test "x$PKGCONFIG" != "xno"; then
|
||||
AC_MSG_CHECKING([for $1 options with pkg-config])
|
||||
dnl ask pkg-config about $1
|
||||
itexists=`CURL_EXPORT_PCDIR([$2]) dnl
|
||||
|
19
appveyor.yml
Normal file
19
appveyor.yml
Normal file
@@ -0,0 +1,19 @@
|
||||
version: 7.45.0.{build}
|
||||
|
||||
environment:
|
||||
matrix:
|
||||
- PRJ_GEN: "Visual Studio 11 2012 Win64"
|
||||
BDIR: msvc2012
|
||||
PRJ_CFG: Release
|
||||
- PRJ_GEN: "Visual Studio 12 2013 Win64"
|
||||
BDIR: msvc2013
|
||||
PRJ_CFG: Release
|
||||
- PRJ_GEN: "Visual Studio 14 2015 Win64"
|
||||
BDIR: msvc2015
|
||||
PRJ_CFG: Release
|
||||
|
||||
build_script:
|
||||
- mkdir build.%BDIR%
|
||||
- cd build.%BDIR%
|
||||
- cmake .. -G"%PRJ_GEN%"
|
||||
- cmake --build . --config %PRJ_CFG% --clean-first
|
374
buildconf.bat
374
buildconf.bat
@@ -1,38 +1,352 @@
|
||||
@echo off
|
||||
REM
|
||||
REM
|
||||
REM This batch file must be used to set up a git tree to build on
|
||||
REM systems where there is no autotools support (i.e. Microsoft).
|
||||
REM
|
||||
REM This file is not included nor needed for curl's release
|
||||
REM archives, neither for curl's daily snapshot archives.
|
||||
rem ***************************************************************************
|
||||
rem * _ _ ____ _
|
||||
rem * Project ___| | | | _ \| |
|
||||
rem * / __| | | | |_) | |
|
||||
rem * | (__| |_| | _ <| |___
|
||||
rem * \___|\___/|_| \_\_____|
|
||||
rem *
|
||||
rem * Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
rem *
|
||||
rem * This software is licensed as described in the file COPYING, which
|
||||
rem * you should have received as part of this distribution. The terms
|
||||
rem * are also available at http://curl.haxx.se/docs/copyright.html.
|
||||
rem *
|
||||
rem * You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
rem * copies of the Software, and permit persons to whom the Software is
|
||||
rem * furnished to do so, under the terms of the COPYING file.
|
||||
rem *
|
||||
rem * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
rem * KIND, either express or implied.
|
||||
rem *
|
||||
rem ***************************************************************************
|
||||
|
||||
if exist GIT-INFO goto start_doing
|
||||
ECHO ERROR: This file shall only be used with a curl git tree checkout.
|
||||
goto end_all
|
||||
:start_doing
|
||||
rem NOTES
|
||||
rem
|
||||
rem This batch file must be used to set up a git tree to build on systems where
|
||||
rem there is no autotools support (i.e. DOS and Windows).
|
||||
rem
|
||||
rem This file is not included or required for curl's release archives or daily
|
||||
rem snapshot archives.
|
||||
|
||||
REM create tool_hugehelp.c
|
||||
if not exist src\tool_hugehelp.c.cvs goto end_hugehelp_c
|
||||
copy /Y src\tool_hugehelp.c.cvs src\tool_hugehelp.c
|
||||
:end_hugehelp_c
|
||||
:begin
|
||||
rem Set our variables
|
||||
if "%OS%" == "Windows_NT" setlocal
|
||||
set MODE=GENERATE
|
||||
|
||||
REM create Makefile
|
||||
if not exist Makefile.dist goto end_makefile
|
||||
copy /Y Makefile.dist Makefile
|
||||
:end_makefile
|
||||
rem Switch to this batch file's directory
|
||||
cd /d "%~0\.." 1>NUL 2>&1
|
||||
|
||||
REM create curlbuild.h
|
||||
if not exist include\curl\curlbuild.h.dist goto end_curlbuild_h
|
||||
copy /Y include\curl\curlbuild.h.dist include\curl\curlbuild.h
|
||||
:end_curlbuild_h
|
||||
rem Check we are running from a curl git repository
|
||||
if not exist GIT-INFO goto norepo
|
||||
|
||||
REM setup c-ares git tree
|
||||
if not exist ares\buildconf.bat goto end_c_ares
|
||||
cd ares
|
||||
call buildconf.bat
|
||||
cd ..
|
||||
:end_c_ares
|
||||
rem Detect programs. HAVE_<PROGNAME>
|
||||
rem When not found the variable is set undefined. The undefined pattern
|
||||
rem allows for statements like "if not defined HAVE_PERL (command)"
|
||||
groff --version <NUL 1>NUL 2>&1
|
||||
if errorlevel 1 (set HAVE_GROFF=) else (set HAVE_GROFF=Y)
|
||||
nroff --version <NUL 1>NUL 2>&1
|
||||
if errorlevel 1 (set HAVE_NROFF=) else (set HAVE_NROFF=Y)
|
||||
perl --version <NUL 1>NUL 2>&1
|
||||
if errorlevel 1 (set HAVE_PERL=) else (set HAVE_PERL=Y)
|
||||
gzip --version <NUL 1>NUL 2>&1
|
||||
if errorlevel 1 (set HAVE_GZIP=) else (set HAVE_GZIP=Y)
|
||||
|
||||
:end_all
|
||||
:parseArgs
|
||||
if "%~1" == "" goto start
|
||||
|
||||
if /i "%~1" == "-clean" (
|
||||
set MODE=CLEAN
|
||||
) else if /i "%~1" == "-?" (
|
||||
goto syntax
|
||||
) else if /i "%~1" == "-h" (
|
||||
goto syntax
|
||||
) else if /i "%~1" == "-help" (
|
||||
goto syntax
|
||||
) else (
|
||||
goto unknown
|
||||
)
|
||||
|
||||
shift & goto parseArgs
|
||||
|
||||
:start
|
||||
if "%MODE%" == "GENERATE" (
|
||||
echo.
|
||||
echo Generating prerequisite files
|
||||
|
||||
call :generate
|
||||
if errorlevel 4 goto nogencurlbuild
|
||||
if errorlevel 3 goto nogenhugehelp
|
||||
if errorlevel 2 goto nogenmakefile
|
||||
if errorlevel 1 goto warning
|
||||
|
||||
) else (
|
||||
echo.
|
||||
echo Removing prerequisite files
|
||||
|
||||
call :clean
|
||||
if errorlevel 3 goto nocleancurlbuild
|
||||
if errorlevel 2 goto nocleanhugehelp
|
||||
if errorlevel 1 goto nocleanmakefile
|
||||
)
|
||||
|
||||
goto success
|
||||
|
||||
rem Main generate function.
|
||||
rem
|
||||
rem Returns:
|
||||
rem
|
||||
rem 0 - success
|
||||
rem 1 - success with simplified tool_hugehelp.c
|
||||
rem 2 - failed to generate Makefile
|
||||
rem 3 - failed to generate tool_hugehelp.c
|
||||
rem 4 - failed to generate curlbuild.h
|
||||
rem
|
||||
:generate
|
||||
if "%OS%" == "Windows_NT" setlocal
|
||||
set BASIC_HUGEHELP=0
|
||||
|
||||
rem Create Makefile
|
||||
echo * %CD%\Makefile
|
||||
if exist Makefile.dist (
|
||||
copy /Y Makefile.dist Makefile 1>NUL 2>&1
|
||||
if errorlevel 1 (
|
||||
if "%OS%" == "Windows_NT" endlocal
|
||||
exit /B 2
|
||||
)
|
||||
)
|
||||
|
||||
rem Create tool_hugehelp.c
|
||||
echo * %CD%\src\tool_hugehelp.c
|
||||
call :genHugeHelp
|
||||
if errorlevel 2 (
|
||||
if "%OS%" == "Windows_NT" endlocal
|
||||
exit /B 3
|
||||
)
|
||||
if errorlevel 1 (
|
||||
set BASIC_HUGEHELP=1
|
||||
)
|
||||
cmd /c exit 0
|
||||
|
||||
rem Create curlbuild.h
|
||||
echo * %CD%\include\curl\curlbuild.h
|
||||
if exist include\curl\curlbuild.h.dist (
|
||||
copy /Y include\curl\curlbuild.h.dist include\curl\curlbuild.h 1>NUL 2>&1
|
||||
if errorlevel 1 (
|
||||
if "%OS%" == "Windows_NT" endlocal
|
||||
exit /B 4
|
||||
)
|
||||
)
|
||||
|
||||
rem Setup c-ares git tree
|
||||
if exist ares\buildconf.bat (
|
||||
echo.
|
||||
echo Configuring c-ares build environment
|
||||
cd ares
|
||||
call buildconf.bat
|
||||
cd ..
|
||||
)
|
||||
|
||||
if "%BASIC_HUGEHELP%" == "1" (
|
||||
if "%OS%" == "Windows_NT" endlocal
|
||||
exit /B 1
|
||||
)
|
||||
|
||||
if "%OS%" == "Windows_NT" endlocal
|
||||
exit /B 0
|
||||
|
||||
rem Main clean function.
|
||||
rem
|
||||
rem Returns:
|
||||
rem
|
||||
rem 0 - success
|
||||
rem 1 - failed to clean Makefile
|
||||
rem 2 - failed to clean tool_hugehelp.c
|
||||
rem 3 - failed to clean curlbuild.h
|
||||
rem
|
||||
:clean
|
||||
rem Remove Makefile
|
||||
echo * %CD%\Makefile
|
||||
if exist Makefile (
|
||||
del Makefile 2>NUL
|
||||
if exist Makefile (
|
||||
exit /B 1
|
||||
)
|
||||
)
|
||||
|
||||
rem Remove tool_hugehelp.c
|
||||
echo * %CD%\src\tool_hugehelp.c
|
||||
if exist src\tool_hugehelp.c (
|
||||
del src\tool_hugehelp.c 2>NUL
|
||||
if exist src\tool_hugehelp.c (
|
||||
exit /B 2
|
||||
)
|
||||
)
|
||||
|
||||
rem Remove curlbuild.h
|
||||
echo * %CD%\include\curl\curlbuild.h
|
||||
if exist include\curl\curlbuild.h (
|
||||
del include\curl\curlbuild.h 2>NUL
|
||||
if exist include\curl\curlbuild.h (
|
||||
exit /B 3
|
||||
)
|
||||
)
|
||||
|
||||
exit /B
|
||||
|
||||
rem Function to generate src\tool_hugehelp.c
|
||||
rem
|
||||
rem Returns:
|
||||
rem
|
||||
rem 0 - full tool_hugehelp.c generated
|
||||
rem 1 - simplified tool_hugehelp.c
|
||||
rem 2 - failure
|
||||
rem
|
||||
:genHugeHelp
|
||||
if "%OS%" == "Windows_NT" setlocal
|
||||
set LC_ALL=C
|
||||
set ROFFCMD=
|
||||
set BASIC=1
|
||||
|
||||
if defined HAVE_PERL (
|
||||
if defined HAVE_GROFF (
|
||||
set ROFFCMD=groff -mtty-char -Tascii -P-c -man
|
||||
) else if defined HAVE_NROFF (
|
||||
set ROFFCMD=nroff -c -Tascii -man
|
||||
)
|
||||
)
|
||||
|
||||
if defined ROFFCMD (
|
||||
echo #include "tool_setup.h"> src\tool_hugehelp.c
|
||||
echo #include "tool_hugehelp.h">> src\tool_hugehelp.c
|
||||
|
||||
if defined HAVE_GZIP (
|
||||
echo #ifndef HAVE_LIBZ>> src\tool_hugehelp.c
|
||||
)
|
||||
|
||||
%ROFFCMD% docs\curl.1 2>NUL | perl src\mkhelp.pl docs\MANUAL >> src\tool_hugehelp.c
|
||||
if defined HAVE_GZIP (
|
||||
echo #else>> src\tool_hugehelp.c
|
||||
%ROFFCMD% docs\curl.1 2>NUL | perl src\mkhelp.pl -c docs\MANUAL >> src\tool_hugehelp.c
|
||||
echo #endif /^* HAVE_LIBZ ^*/>> src\tool_hugehelp.c
|
||||
)
|
||||
|
||||
set BASIC=0
|
||||
) else (
|
||||
if exist src\tool_hugehelp.c.cvs (
|
||||
copy /Y src\tool_hugehelp.c.cvs src\tool_hugehelp.c 1>NUL 2>&1
|
||||
) else (
|
||||
echo #include "tool_setup.h"> src\tool_hugehelp.c
|
||||
echo #include "tool_hugehelp.hd">> src\tool_hugehelp.c
|
||||
echo.>> src\tool_hugehelp.c
|
||||
echo void hugehelp(void^)>> src\tool_hugehelp.c
|
||||
echo {>> src\tool_hugehelp.c
|
||||
echo #ifdef USE_MANUAL>> src\tool_hugehelp.c
|
||||
echo fputs("Built-in manual not included\n", stdout^);>> src\tool_hugehelp.c
|
||||
echo #endif>> src\tool_hugehelp.c
|
||||
echo }>> src\tool_hugehelp.c
|
||||
)
|
||||
)
|
||||
|
||||
findstr "/C:void hugehelp(void)" src\tool_hugehelp.c 1>NUL 2>&1
|
||||
if errorlevel 1 (
|
||||
if "%OS%" == "Windows_NT" endlocal
|
||||
exit /B 2
|
||||
)
|
||||
|
||||
if "%BASIC%" == "1" (
|
||||
if "%OS%" == "Windows_NT" endlocal
|
||||
exit /B 1
|
||||
)
|
||||
|
||||
if "%OS%" == "Windows_NT" endlocal
|
||||
exit /B 0
|
||||
|
||||
rem Function to clean-up local variables under DOS, Windows 3.x and
|
||||
rem Windows 9x as setlocal isn't available until Windows NT
|
||||
rem
|
||||
:dosCleanup
|
||||
set MODE=
|
||||
set HAVE_GROFF=
|
||||
set HAVE_NROFF=
|
||||
set HAVE_PERL=
|
||||
set HAVE_GZIP=
|
||||
set BASIC_HUGEHELP=
|
||||
set LC_ALL
|
||||
set ROFFCMD=
|
||||
set BASIC=
|
||||
|
||||
exit /B
|
||||
|
||||
:syntax
|
||||
rem Display the help
|
||||
echo.
|
||||
echo Usage: buildconf [-clean]
|
||||
echo.
|
||||
echo -clean - Removes the files
|
||||
goto error
|
||||
|
||||
:unknown
|
||||
echo.
|
||||
echo Error: Unknown argument '%1'
|
||||
goto error
|
||||
|
||||
:norepo
|
||||
echo.
|
||||
echo Error: This batch file should only be used with a curl git repository
|
||||
goto error
|
||||
|
||||
:nogenmakefile
|
||||
echo.
|
||||
echo Error: Unable to generate Makefile
|
||||
goto error
|
||||
|
||||
:nogenhugehelp
|
||||
echo.
|
||||
echo Error: Unable to generate src\tool_hugehelp.c
|
||||
goto error
|
||||
|
||||
:nogencurlbuild
|
||||
echo.
|
||||
echo Error: Unable to generate include\curl\curlbuild.h
|
||||
goto error
|
||||
|
||||
:nocleanmakefile
|
||||
echo.
|
||||
echo Error: Unable to clean Makefile
|
||||
goto error
|
||||
|
||||
:nocleanhugehelp
|
||||
echo.
|
||||
echo Error: Unable to clean src\tool_hugehelp.c
|
||||
goto error
|
||||
|
||||
:nocleancurlbuild
|
||||
echo.
|
||||
echo Error: Unable to clean include\curl\curlbuild.h
|
||||
goto error
|
||||
|
||||
:warning
|
||||
echo.
|
||||
echo Warning: The curl manual could not be integrated in the source. This means when
|
||||
echo you build curl the manual will not be available (curl --man^). Integration of
|
||||
echo the manual is not required and a summary of the options will still be available
|
||||
echo (curl --help^). To integrate the manual your PATH is required to have
|
||||
echo groff/nroff, perl and optionally gzip for compression.
|
||||
goto success
|
||||
|
||||
:error
|
||||
if "%OS%" == "Windows_NT" (
|
||||
endlocal
|
||||
) else (
|
||||
call :dosCleanup
|
||||
)
|
||||
exit /B 1
|
||||
|
||||
:success
|
||||
if "%OS%" == "Windows_NT" (
|
||||
endlocal
|
||||
) else (
|
||||
call :dosCleanup
|
||||
)
|
||||
exit /B 0
|
||||
|
230
configure.ac
230
configure.ac
@@ -39,6 +39,7 @@ AC_CONFIG_SRCDIR([lib/urldata.h])
|
||||
AC_CONFIG_HEADERS(lib/curl_config.h include/curl/curlbuild.h)
|
||||
AC_CONFIG_MACRO_DIR([m4])
|
||||
AM_MAINTAINER_MODE
|
||||
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
|
||||
|
||||
CURL_CHECK_OPTION_DEBUG
|
||||
CURL_CHECK_OPTION_OPTIMIZE
|
||||
@@ -47,6 +48,7 @@ CURL_CHECK_OPTION_WERROR
|
||||
CURL_CHECK_OPTION_CURLDEBUG
|
||||
CURL_CHECK_OPTION_SYMBOL_HIDING
|
||||
CURL_CHECK_OPTION_ARES
|
||||
CURL_CHECK_OPTION_RT
|
||||
|
||||
XC_CHECK_PATH_SEPARATOR
|
||||
|
||||
@@ -147,7 +149,7 @@ AC_SUBST(PKGADD_VENDOR)
|
||||
|
||||
dnl
|
||||
dnl initialize all the info variables
|
||||
curl_ssl_msg="no (--with-{ssl,gnutls,nss,polarssl,cyassl,axtls,winssl,darwinssl} )"
|
||||
curl_ssl_msg="no (--with-{ssl,gnutls,nss,polarssl,mbedtls,cyassl,axtls,winssl,darwinssl} )"
|
||||
curl_ssh_msg="no (--with-libssh2)"
|
||||
curl_zlib_msg="no (--with-zlib)"
|
||||
curl_gss_msg="no (--with-gssapi)"
|
||||
@@ -165,6 +167,7 @@ curl_verbose_msg="enabled (--disable-verbose)"
|
||||
curl_rtsp_msg="no (--enable-rtsp)"
|
||||
curl_rtmp_msg="no (--with-librtmp)"
|
||||
curl_mtlnk_msg="no (--with-libmetalink)"
|
||||
curl_psl_msg="no (--with-libpsl)"
|
||||
|
||||
init_ssl_msg=${curl_ssl_msg}
|
||||
|
||||
@@ -1396,6 +1399,24 @@ if test "$curl_ssl_msg" = "$init_ssl_msg" && test X"$OPT_SSL" != Xno; then
|
||||
CLEANCPPFLAGS="$CPPFLAGS"
|
||||
CLEANLIBS="$LIBS"
|
||||
|
||||
dnl This is for Msys/Mingw
|
||||
case $host in
|
||||
*-*-msys* | *-*-mingw*)
|
||||
AC_MSG_CHECKING([for gdi32])
|
||||
my_ac_save_LIBS=$LIBS
|
||||
LIBS="-lgdi32 $LIBS"
|
||||
AC_TRY_LINK([#include <windef.h>
|
||||
#include <wingdi.h>],
|
||||
[GdiFlush();],
|
||||
[ dnl worked!
|
||||
AC_MSG_RESULT([yes])],
|
||||
[ dnl failed, restore LIBS
|
||||
LIBS=$my_ac_save_LIBS
|
||||
AC_MSG_RESULT(no)]
|
||||
)
|
||||
;;
|
||||
esac
|
||||
|
||||
case "$OPT_SSL" in
|
||||
yes)
|
||||
dnl --with-ssl (without path) used
|
||||
@@ -1474,31 +1495,13 @@ if test "$curl_ssl_msg" = "$init_ssl_msg" && test X"$OPT_SSL" != Xno; then
|
||||
CPPFLAGS="$CPPFLAGS $SSL_CPPFLAGS"
|
||||
LDFLAGS="$LDFLAGS $SSL_LDFLAGS"
|
||||
|
||||
dnl This is for Msys/Mingw
|
||||
case $host in
|
||||
*-*-msys* | *-*-mingw*)
|
||||
AC_MSG_CHECKING([for gdi32])
|
||||
my_ac_save_LIBS=$LIBS
|
||||
LIBS="-lgdi32 $LIBS"
|
||||
AC_TRY_LINK([#include <windef.h>
|
||||
#include <wingdi.h>],
|
||||
[GdiFlush();],
|
||||
[ dnl worked!
|
||||
AC_MSG_RESULT([yes])],
|
||||
[ dnl failed, restore LIBS
|
||||
LIBS=$my_ac_save_LIBS
|
||||
AC_MSG_RESULT(no)]
|
||||
)
|
||||
;;
|
||||
esac
|
||||
|
||||
AC_CHECK_LIB(crypto, CRYPTO_lock,[
|
||||
AC_CHECK_LIB(crypto, HMAC_Update,[
|
||||
HAVECRYPTO="yes"
|
||||
LIBS="-lcrypto $LIBS"
|
||||
],[
|
||||
LDFLAGS="$CLEANLDFLAGS -L$LIB_OPENSSL"
|
||||
CPPFLAGS="$CLEANCPPFLAGS -I$PREFIX_OPENSSL/include/openssl -I$PREFIX_OPENSSL/include"
|
||||
AC_CHECK_LIB(crypto, CRYPTO_add_lock,[
|
||||
AC_CHECK_LIB(crypto, HMAC_Init_ex,[
|
||||
HAVECRYPTO="yes"
|
||||
LIBS="-lcrypto $LIBS"], [
|
||||
LDFLAGS="$CLEANLDFLAGS"
|
||||
@@ -1508,6 +1511,46 @@ if test "$curl_ssl_msg" = "$init_ssl_msg" && test X"$OPT_SSL" != Xno; then
|
||||
])
|
||||
|
||||
|
||||
if test X"$HAVECRYPTO" = X"yes"; then
|
||||
AC_MSG_CHECKING([OpenSSL linking without -ldl])
|
||||
saved_libs=$LIBS
|
||||
AC_TRY_LINK(
|
||||
[
|
||||
#include <openssl/evp.h>
|
||||
],
|
||||
[
|
||||
SSLeay_add_all_algorithms();
|
||||
],
|
||||
[
|
||||
AC_MSG_RESULT(yes)
|
||||
LIBS="$saved_libs"
|
||||
],
|
||||
[
|
||||
AC_MSG_RESULT(no)
|
||||
AC_MSG_CHECKING([OpenSSL linking with -ldl])
|
||||
LIBS="-ldl $LIBS"
|
||||
AC_TRY_LINK(
|
||||
[
|
||||
#include <openssl/evp.h>
|
||||
],
|
||||
[
|
||||
SSLeay_add_all_algorithms();
|
||||
],
|
||||
[
|
||||
AC_MSG_RESULT(yes)
|
||||
LIBS="$saved_libs -ldl"
|
||||
],
|
||||
[
|
||||
AC_MSG_RESULT(no)
|
||||
LIBS="$saved_libs"
|
||||
]
|
||||
)
|
||||
|
||||
]
|
||||
)
|
||||
|
||||
fi
|
||||
|
||||
if test X"$HAVECRYPTO" = X"yes"; then
|
||||
dnl This is only reasonable to do if crypto actually is there: check for
|
||||
dnl SSL libs NOTE: it is important to do this AFTER the crypto lib
|
||||
@@ -1579,7 +1622,8 @@ if test "$curl_ssl_msg" = "$init_ssl_msg" && test X"$OPT_SSL" != Xno; then
|
||||
dnl Older versions of Cyassl (some time before 2.9.4) don't have
|
||||
dnl SSL_get_shutdown (but this check won't actually detect it there
|
||||
dnl as it's a macro that needs the header files be included)
|
||||
dnl BoringSSL doesn't have DES_set_odd_parity
|
||||
dnl BoringSSL didn't have DES_set_odd_parity for a while but now it is
|
||||
dnl back again.
|
||||
|
||||
AC_CHECK_FUNCS( RAND_status \
|
||||
RAND_screen \
|
||||
@@ -1591,14 +1635,22 @@ if test "$curl_ssl_msg" = "$init_ssl_msg" && test X"$OPT_SSL" != Xno; then
|
||||
DES_set_odd_parity )
|
||||
|
||||
AC_MSG_CHECKING([for BoringSSL])
|
||||
if test "x$ac_cv_func_DES_set_odd_parity" != "xyes"; then
|
||||
curl_ssl_msg="enabled (BoringSSL)"
|
||||
AC_DEFINE_UNQUOTED(HAVE_BORINGSSL, 1,
|
||||
[Define to 1 if using BoringSSL.])
|
||||
AC_MSG_RESULT([yes])
|
||||
else
|
||||
AC_MSG_RESULT([no])
|
||||
fi
|
||||
AC_COMPILE_IFELSE([
|
||||
AC_LANG_PROGRAM([[
|
||||
#include <openssl/base.h>
|
||||
]],[[
|
||||
#ifndef OPENSSL_IS_BORINGSSL
|
||||
#error not boringssl
|
||||
#endif
|
||||
]])
|
||||
],[
|
||||
AC_MSG_RESULT([yes])
|
||||
AC_DEFINE_UNQUOTED(HAVE_BORINGSSL, 1,
|
||||
[Define to 1 if using BoringSSL.])
|
||||
],[
|
||||
AC_MSG_RESULT([no])
|
||||
])
|
||||
|
||||
AC_MSG_CHECKING([for libressl])
|
||||
AC_COMPILE_IFELSE([
|
||||
AC_LANG_PROGRAM([[
|
||||
@@ -1786,6 +1838,7 @@ if test "$curl_ssl_msg" = "$init_ssl_msg"; then
|
||||
AC_MSG_NOTICE([Added $gtlslib to LD_LIBRARY_PATH])
|
||||
fi
|
||||
fi
|
||||
AC_CHECK_FUNCS(gnutls_certificate_set_x509_key_file2)
|
||||
fi
|
||||
|
||||
fi
|
||||
@@ -1923,6 +1976,93 @@ if test "$curl_ssl_msg" = "$init_ssl_msg"; then
|
||||
|
||||
fi
|
||||
|
||||
dnl ----------------------------------------------------
|
||||
dnl check for mbedTLS
|
||||
dnl ----------------------------------------------------
|
||||
|
||||
OPT_MBEDTLS=no
|
||||
|
||||
_cppflags=$CPPFLAGS
|
||||
_ldflags=$LDFLAGS
|
||||
AC_ARG_WITH(mbedtls,dnl
|
||||
AC_HELP_STRING([--with-mbedtls=PATH],[where to look for mbedTLS, PATH points to the installation root])
|
||||
AC_HELP_STRING([--without-mbedtls], [disable mbedTLS detection]),
|
||||
OPT_MBEDTLS=$withval)
|
||||
|
||||
if test "$curl_ssl_msg" = "$init_ssl_msg"; then
|
||||
|
||||
if test X"$OPT_MBEDTLS" != Xno; then
|
||||
|
||||
if test "$OPT_MBEDTLS" = "yes"; then
|
||||
OPT_MBEDTLS=""
|
||||
fi
|
||||
|
||||
if test -z "$OPT_MBEDTLS" ; then
|
||||
dnl check for lib first without setting any new path
|
||||
|
||||
AC_CHECK_LIB(mbedtls, mbedtls_havege_init,
|
||||
dnl libmbedtls found, set the variable
|
||||
[
|
||||
AC_DEFINE(USE_MBEDTLS, 1, [if mbedTLS is enabled])
|
||||
AC_SUBST(USE_MBEDTLS, [1])
|
||||
MBEDTLS_ENABLED=1
|
||||
USE_MBEDTLS="yes"
|
||||
curl_ssl_msg="enabled (mbedTLS)"
|
||||
], [], -lmbedx509 -lmbedcrypto)
|
||||
fi
|
||||
|
||||
addld=""
|
||||
addlib=""
|
||||
addcflags=""
|
||||
mbedtlslib=""
|
||||
|
||||
if test "x$USE_MBEDTLS" != "xyes"; then
|
||||
dnl add the path and test again
|
||||
addld=-L$OPT_MBEDTLS/lib$libsuff
|
||||
addcflags=-I$OPT_MBEDTLS/include
|
||||
mbedtlslib=$OPT_MBEDTLS/lib$libsuff
|
||||
|
||||
LDFLAGS="$LDFLAGS $addld"
|
||||
if test "$addcflags" != "-I/usr/include"; then
|
||||
CPPFLAGS="$CPPFLAGS $addcflags"
|
||||
fi
|
||||
|
||||
AC_CHECK_LIB(mbedtls, mbedtls_ssl_init,
|
||||
[
|
||||
AC_DEFINE(USE_MBEDTLS, 1, [if mbedTLS is enabled])
|
||||
AC_SUBST(USE_MBEDTLS, [1])
|
||||
MBEDTLS_ENABLED=1
|
||||
USE_MBEDTLS="yes"
|
||||
curl_ssl_msg="enabled (mbedTLS)"
|
||||
],
|
||||
[
|
||||
CPPFLAGS=$_cppflags
|
||||
LDFLAGS=$_ldflags
|
||||
], -lmbedx509 -lmbedcrypto)
|
||||
fi
|
||||
|
||||
if test "x$USE_MBEDTLS" = "xyes"; then
|
||||
AC_MSG_NOTICE([detected mbedTLS])
|
||||
|
||||
LIBS="-lmbedtls -lmbedx509 -lmbedcrypto $LIBS"
|
||||
|
||||
if test -n "$mbedtlslib"; then
|
||||
dnl when shared libs were found in a path that the run-time
|
||||
dnl linker doesn't search through, we need to add it to
|
||||
dnl LD_LIBRARY_PATH to prevent further configure tests to fail
|
||||
dnl due to this
|
||||
if test "x$cross_compiling" != "xyes"; then
|
||||
LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$mbedtlslib"
|
||||
export LD_LIBRARY_PATH
|
||||
AC_MSG_NOTICE([Added $mbedtlslib to LD_LIBRARY_PATH])
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
fi dnl mbedTLS not disabled
|
||||
|
||||
fi
|
||||
|
||||
dnl ----------------------------------------------------
|
||||
dnl check for CyaSSL
|
||||
dnl ----------------------------------------------------
|
||||
@@ -2247,7 +2387,7 @@ if test "$curl_ssl_msg" = "$init_ssl_msg"; then
|
||||
fi
|
||||
fi
|
||||
|
||||
if test "x$OPENSSL_ENABLED$GNUTLS_ENABLED$NSS_ENABLED$POLARSSL_ENABLED$AXTLS_ENABLED$CYASSL_ENABLED$WINSSL_ENABLED$DARWINSSL_ENABLED" = "x"; then
|
||||
if test "x$OPENSSL_ENABLED$GNUTLS_ENABLED$NSS_ENABLED$POLARSSL_ENABLED$MBEDTLS_ENABLED$AXTLS_ENABLED$CYASSL_ENABLED$WINSSL_ENABLED$DARWINSSL_ENABLED" = "x"; then
|
||||
AC_MSG_WARN([SSL disabled, you will not be able to use HTTPS, FTPS, NTLM and more.])
|
||||
AC_MSG_WARN([Use --with-ssl, --with-gnutls, --with-polarssl, --with-cyassl, --with-nss, --with-axtls, --with-winssl, or --with-darwinssl to address this.])
|
||||
else
|
||||
@@ -2262,6 +2402,27 @@ dnl **********************************************************************
|
||||
|
||||
CURL_CHECK_CA_BUNDLE
|
||||
|
||||
dnl **********************************************************************
|
||||
dnl Check for libpsl
|
||||
dnl **********************************************************************
|
||||
|
||||
AC_ARG_WITH(libpsl,
|
||||
AS_HELP_STRING([--without-libpsl],
|
||||
[disable support for libpsl cookie checking]),
|
||||
with_libpsl=$withval,
|
||||
with_libpsl=yes)
|
||||
if test $with_libpsl != "no"; then
|
||||
AC_SEARCH_LIBS(psl_builtin, psl,
|
||||
[curl_psl_msg="yes";
|
||||
AC_DEFINE([USE_LIBPSL], [1], [PSL support enabled])
|
||||
],
|
||||
[curl_psl_msg="no (libpsl not found)";
|
||||
AC_MSG_WARN([libpsl was not found])
|
||||
]
|
||||
)
|
||||
fi
|
||||
AM_CONDITIONAL([USE_LIBPSL], [test "$curl_psl_msg" = "yes"])
|
||||
|
||||
dnl **********************************************************************
|
||||
dnl Check for libmetalink
|
||||
dnl **********************************************************************
|
||||
@@ -3217,7 +3378,7 @@ if test "x$want_thres" = xyes && test "x$want_ares" = xyes; then
|
||||
[Options --enable-threaded-resolver and --enable-ares are mutually exclusive])
|
||||
fi
|
||||
|
||||
if test "$want_thres" = "yes"; then
|
||||
if test "$want_thres" = "yes" && test "$dontwant_rt" = "no"; then
|
||||
AC_CHECK_HEADER(pthread.h,
|
||||
[ AC_DEFINE(HAVE_PTHREAD_H, 1, [if you have <pthread.h>])
|
||||
save_CFLAGS="$CFLAGS"
|
||||
@@ -3485,6 +3646,10 @@ if test "x$HAVE_GSSAPI" = "x1"; then
|
||||
SUPPORT_FEATURES="$SUPPORT_FEATURES GSS-API"
|
||||
fi
|
||||
|
||||
if test "x$curl_psl_msg" = "xyes"; then
|
||||
SUPPORT_FEATURES="$SUPPORT_FEATURES PSL"
|
||||
fi
|
||||
|
||||
if test "x$CURL_DISABLE_CRYPTO_AUTH" != "x1" -a \
|
||||
\( "x$HAVE_GSSAPI" = "x1" -o "x$USE_WINDOWS_SSPI" = "x1" \); then
|
||||
SUPPORT_FEATURES="$SUPPORT_FEATURES SPNEGO"
|
||||
@@ -3690,6 +3855,7 @@ AC_MSG_NOTICE([Configured to build curl/libcurl:
|
||||
RTSP support: ${curl_rtsp_msg}
|
||||
RTMP support: ${curl_rtmp_msg}
|
||||
metalink support: ${curl_mtlnk_msg}
|
||||
PSL support: ${curl_psl_msg}
|
||||
HTTP2 support: ${curl_h2_msg}
|
||||
Protocols: ${SUPPORT_PROTOCOLS}
|
||||
])
|
||||
|
32
docs/CODE_OF_CONDUCT.md
Normal file
32
docs/CODE_OF_CONDUCT.md
Normal file
@@ -0,0 +1,32 @@
|
||||
Contributor Code of Conduct
|
||||
===========================
|
||||
|
||||
As contributors and maintainers of this project, we pledge to respect all
|
||||
people who contribute through reporting issues, posting feature requests,
|
||||
updating documentation, submitting pull requests or patches, and other
|
||||
activities.
|
||||
|
||||
We are committed to making participation in this project a harassment-free
|
||||
experience for everyone, regardless of level of experience, gender, gender
|
||||
identity and expression, sexual orientation, disability, personal appearance,
|
||||
body size, race, ethnicity, age, or religion.
|
||||
|
||||
Examples of unacceptable behavior by participants include the use of sexual
|
||||
language or imagery, derogatory comments or personal attacks, trolling, public
|
||||
or private harassment, insults, or other unprofessional conduct.
|
||||
|
||||
Project maintainers have the right and responsibility to remove, edit, or
|
||||
reject comments, commits, code, wiki edits, issues, and other contributions
|
||||
that are not aligned to this Code of Conduct. Project maintainers who do not
|
||||
follow the Code of Conduct may be removed from the project team.
|
||||
|
||||
This code of conduct applies both within project spaces and in public spaces
|
||||
when an individual is representing the project or its community.
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||
reported by opening an issue or contacting one or more of the project
|
||||
maintainers.
|
||||
|
||||
This Code of Conduct is adapted from the [Contributor
|
||||
Covenant](http://contributor-covenant.org), version 1.1.0, available at
|
||||
[http://contributor-covenant.org/version/1/1/0/](http://contributor-covenant.org/version/1/1/0/)
|
@@ -1,176 +0,0 @@
|
||||
Date: February 11, 2007
|
||||
Author: Daniel Stenberg <daniel@haxx.se>
|
||||
URL: http://curl.haxx.se/legal/distro-dilemma.html
|
||||
|
||||
Condition
|
||||
|
||||
This document is written to describe the situation as it is right now.
|
||||
libcurl 7.16.1 is currently the latest version available. Things may of
|
||||
course change in the future.
|
||||
|
||||
This document reflects my view and understanding of these things. Please tell
|
||||
me where and how you think I'm wrong, and I'll try to correct my mistakes.
|
||||
|
||||
Background
|
||||
|
||||
The Free Software Foundation has deemed the Original BSD license[1] to be
|
||||
"incompatible"[2] with GPL[3]. I'd rather say it is the other way around, but
|
||||
the point is the same: if you distribute a binary version of a GPL program,
|
||||
it MUST NOT be linked with any Original BSD-licensed parts or libraries.
|
||||
Doing so will violate the GPL license. For a long time, very many GPL
|
||||
licensed programs have avoided this license mess by adding an exception[8] to
|
||||
their license. And many others have just closed their eyes for this problem.
|
||||
|
||||
libcurl is MIT-style[4] licensed - how on earth did this dilemma fall onto
|
||||
our plates?
|
||||
|
||||
libcurl is only a little library. libcurl can be built to use OpenSSL for its
|
||||
SSL/TLS capabilities. OpenSSL is basically Original BSD licensed[5].
|
||||
|
||||
If libcurl built to use OpenSSL is used by a GPL-licensed application and you
|
||||
decide to distribute a binary version of it (Linux distros - for example -
|
||||
tend to), you have a clash. GPL vs Original BSD.
|
||||
|
||||
This dilemma is not libcurl-specific nor is it specific to any particular
|
||||
Linux distro. (This article mentions and refers to Debian several times, but
|
||||
only because Debian seems to be the only Linux distro to have faced this
|
||||
issue yet since no other distro is shipping libcurl built with two SSL
|
||||
libraries.)
|
||||
|
||||
Part of the Operating System
|
||||
|
||||
This would not be a problem if the used lib would be considered part of the
|
||||
underlying operating system, as then the GPL license has an exception
|
||||
clause[6] that allows applications to use such libs without having to be
|
||||
allowed to distribute it or its sources. Possibly some distros will claim
|
||||
that OpenSSL is part of their operating system.
|
||||
|
||||
Debian does however not take this stance and has officially(?) claimed that
|
||||
OpenSSL is not a required part of the Debian operating system
|
||||
|
||||
Some people claim that this paragraph cannot be exploited this way by a Linux
|
||||
distro, but I am not a lawyer and that is a discussion left outside of this
|
||||
document.
|
||||
|
||||
GnuTLS
|
||||
|
||||
Since May 2005 libcurl can get built to use GnuTLS instead of OpenSSL. GnuTLS
|
||||
is an LGPL[7] licensed library that offers a matching set of features as
|
||||
OpenSSL does. Now, you can build and distribute an TLS/SSL capable libcurl
|
||||
without including any Original BSD licensed code.
|
||||
|
||||
I believe Debian is the first (only?) distro that provides libcurl/GnuTLS
|
||||
packages.
|
||||
|
||||
yassl
|
||||
|
||||
libcurl can get also get built to use yassl for the TLS/SSL layer. yassl is a
|
||||
GPL[3] licensed library.
|
||||
|
||||
|
||||
GnuTLS vs OpenSSL vs yassl
|
||||
|
||||
While these three libraries offer similar features, they are not equal.
|
||||
libcurl does not (yet) offer a standardized stable ABI if you decide to
|
||||
switch from using libcurl-openssl to libcurl-gnutls or vice-versa. The GnuTLS
|
||||
and yassl support is very recent in libcurl and it has not been tested nor
|
||||
used very extensively, while the OpenSSL equivalent code has been used and
|
||||
thus matured since 1999.
|
||||
|
||||
GnuTLS
|
||||
- LGPL licensed
|
||||
- supports SRP
|
||||
- lacks SSLv2 support
|
||||
- lacks MD2 support (used by at least some CA certs)
|
||||
- lacks the crypto functions libcurl uses for NTLM
|
||||
|
||||
OpenSSL
|
||||
- Original BSD licensed
|
||||
- lacks SRP
|
||||
- supports SSLv2
|
||||
- older and more widely used
|
||||
- provides crypto functions libcurl uses for NTLM
|
||||
- libcurl can do non-blocking connects with it in 7.15.4 and later
|
||||
|
||||
yassl
|
||||
- GPL licensed
|
||||
- much untested and unproven in the real work by (lib)curl users so we don't
|
||||
know a lot about restrictions or benefits from using this
|
||||
|
||||
The Better License, Original BSD, GPL or LGPL?
|
||||
|
||||
It isn't obvious or without debate to any objective interested party that
|
||||
either of these licenses are the "better" or even the "preferred" one in a
|
||||
generic situation.
|
||||
|
||||
Instead, I think we should accept the fact that the SSL/TLS libraries and
|
||||
their different licenses will fit different applications and their authors
|
||||
differently depending on the applications' licenses and their general usage
|
||||
pattern (considering how GPL and LGPL libraries for example can be burdensome
|
||||
for embedded systems usage).
|
||||
|
||||
In Debian land, there seems to be a common opinion that LGPL is "maximally
|
||||
compatible" with apps while Original BSD is not. Like this:
|
||||
|
||||
https://lists.debian.org/debian-devel/2005/09/msg01417.html
|
||||
|
||||
More SSL Libraries
|
||||
|
||||
In libcurl, there's no stopping us here. There are more Open Source/Free
|
||||
SSL/TLS libraries out there and we would very much like to support them as
|
||||
well, to offer application authors an even wider scope of choice.
|
||||
|
||||
Application Angle of this Problem
|
||||
|
||||
libcurl is built to use one SSL/TLS library. It uses a single fixed name (by
|
||||
default) on the built/created lib file, and applications are built/linked to
|
||||
use that single lib. Replacing one libcurl instance with another one that
|
||||
uses the other SSL/TLS library might break one or more applications (due to
|
||||
ABI differences and/or different feature set). You want your application to
|
||||
use the libcurl it was built for.
|
||||
|
||||
Project cURL Angle of this Problem
|
||||
|
||||
We distribute libcurl and everyone may build libcurl with either library at
|
||||
their choice. This problem is not directly a problem of ours. It merely
|
||||
affects users - GPL application authors only - of our lib as it comes
|
||||
included and delivered on some distros.
|
||||
|
||||
libcurl has different ABI when built with different SSL/TLS libraries due to
|
||||
these reasons:
|
||||
|
||||
1. No one has worked on fixing this. The mutex/lock callbacks should be set
|
||||
with a generic libcurl function that should use the proper underlying
|
||||
functions.
|
||||
|
||||
2. The CURLOPT_SSL_CTX_FUNCTION option is not possible to "emulate" on GnuTLS
|
||||
but simply requires OpenSSL.
|
||||
|
||||
3. There might be some other subtle differences just because nobody has yet
|
||||
tried to make a fixed ABI like this.
|
||||
|
||||
Distro Angle of this Problem
|
||||
|
||||
To my knowledge there is only one distro that ships libcurl built with either
|
||||
OpenSSL or GnuTLS.
|
||||
|
||||
Debian Linux is now (since mid September 2005) providing two different
|
||||
libcurl packages, one for libcurl built with OpenSSL and one built with
|
||||
GnuTLS. They use different .so names and can this both be installed in a
|
||||
single system simultaneously. This has been said to be a transitional system
|
||||
not desired to keep in the long run.
|
||||
|
||||
Footnotes
|
||||
|
||||
[1] = http://www.xfree86.org/3.3.6/COPYRIGHT2.html#6
|
||||
[2] = https://www.gnu.org/philosophy/bsd.html
|
||||
[3] = https://www.gnu.org/licenses/gpl.html
|
||||
[4] = http://curl.haxx.se/docs/copyright.html
|
||||
[5] = https://www.openssl.org/source/license.html
|
||||
[6] = https://www.gnu.org/licenses/gpl.html end of section 3
|
||||
[7] = https://www.gnu.org/licenses/lgpl.html
|
||||
[8] = https://en.wikipedia.org/wiki/OpenSSL_exception
|
||||
|
||||
Feedback/Updates provided by
|
||||
|
||||
Eric Cooper
|
12
docs/FAQ
12
docs/FAQ
@@ -1536,9 +1536,7 @@ FAQ
|
||||
|
||||
7.2 Who wrote PHP/CURL?
|
||||
|
||||
PHP/CURL is a module that comes with the regular PHP package. It depends and
|
||||
uses libcurl, so you need to have libcurl installed properly first before
|
||||
PHP/CURL can be used. PHP/CURL was initially written by Sterling Hughes.
|
||||
PHP/CURL was initially written by Sterling Hughes.
|
||||
|
||||
7.3 Can I perform multiple requests using the same handle?
|
||||
|
||||
@@ -1547,4 +1545,10 @@ FAQ
|
||||
unknown to me).
|
||||
|
||||
After a transfer, you just set new options in the handle and make another
|
||||
transfer. This will make libcurl to re-use the same connection if it can.
|
||||
transfer. This will make libcurl re-use the same connection if it can.
|
||||
|
||||
7.4 Does PHP/CURL have dependencies?
|
||||
|
||||
PHP/CURL is a module that comes with the regular PHP package. It depends on
|
||||
and uses libcurl, so you need to have libcurl installed properly before
|
||||
PHP/CURL can be used.
|
||||
|
24
docs/INSTALL
24
docs/INSTALL
@@ -471,6 +471,15 @@ Win32
|
||||
add '-DCURL_STATICLIB' to your CFLAGS. Otherwise the linker will look for
|
||||
dynamic import symbols.
|
||||
|
||||
Legacy Windows and SSL
|
||||
----------------------
|
||||
|
||||
WinSSL (specifically SChannel from Windows SSPI), is the native SSL library
|
||||
in Windows. However, WinSSL in Windows <= XP is unable to connect to servers
|
||||
that no longer support the legacy handshakes and algorithms used by those
|
||||
versions. If you will be using curl in one of those earlier versions of
|
||||
Windows you should choose another SSL backend such as OpenSSL.
|
||||
|
||||
Apple iOS and Mac OS X
|
||||
======================
|
||||
|
||||
@@ -941,9 +950,10 @@ REDUCING SIZE
|
||||
important factor. First, be sure to set the CFLAGS variable when
|
||||
configuring with any relevant compiler optimization flags to reduce the
|
||||
size of the binary. For gcc, this would mean at minimum the -Os option,
|
||||
and potentially the -march=X and -mdynamic-no-pic options as well, e.g.
|
||||
and potentially the -march=X, -mdynamic-no-pic and -flto options as well,
|
||||
e.g.
|
||||
|
||||
./configure CFLAGS='-Os' ...
|
||||
./configure CFLAGS='-Os' LDFLAGS='-Wl,-Bsymbolic'...
|
||||
|
||||
Note that newer compilers often produce smaller code than older versions
|
||||
due to improved optimization.
|
||||
@@ -961,7 +971,9 @@ REDUCING SIZE
|
||||
--disable-ipv6 (disables support for IPv6)
|
||||
--disable-manual (disables support for the built-in documentation)
|
||||
--disable-proxy (disables support for HTTP and SOCKS proxies)
|
||||
--disable-unix-sockets (disables support for UNIX sockets)
|
||||
--disable-verbose (eliminates debugging strings and error code strings)
|
||||
--disable-versioned-symbols (disables support for versioned symbols)
|
||||
--enable-hidden-symbols (eliminates unneeded symbols in the shared library)
|
||||
--without-libidn (disables support for the libidn DNS library)
|
||||
--without-librtmp (disables support for RTMP)
|
||||
@@ -974,7 +986,7 @@ REDUCING SIZE
|
||||
configure command-line, e.g.
|
||||
|
||||
CFLAGS="-Os -ffunction-sections -fdata-sections \
|
||||
-fno-unwind-tables -fno-asynchronous-unwind-tables" \
|
||||
-fno-unwind-tables -fno-asynchronous-unwind-tables -flto" \
|
||||
LDFLAGS="-Wl,-s -Wl,-Bsymbolic -Wl,--gc-sections"
|
||||
|
||||
Be sure also to strip debugging symbols from your binaries after
|
||||
@@ -984,9 +996,9 @@ REDUCING SIZE
|
||||
.comment section).
|
||||
|
||||
Using these techniques it is possible to create a basic HTTP-only shared
|
||||
libcurl library for i386 Linux platforms that is only 114 KiB in size, and
|
||||
an FTP-only library that is 115 KiB in size (as of libcurl version 7.35.0,
|
||||
using gcc 4.8.2).
|
||||
libcurl library for i386 Linux platforms that is only 109 KiB in size, and
|
||||
an FTP-only library that is 109 KiB in size (as of libcurl version 7.45.0,
|
||||
using gcc 4.9.2).
|
||||
|
||||
You may find that statically linking libcurl to your application will
|
||||
result in a lower total size than dynamically linking.
|
||||
|
@@ -3,6 +3,9 @@ join in and help us correct one or more of these! Also be sure to check the
|
||||
changelog of the current development status, as one or more of these problems
|
||||
may have been fixed since this was written!
|
||||
|
||||
91. "curl_easy_perform hangs with imap and PolarSSL"
|
||||
https://github.com/bagder/curl/issues/334
|
||||
|
||||
90. IMAP "SEARCH ALL" truncates output on large boxes. "A quick search of the
|
||||
code reveals that pingpong.c contains some truncation code, at line 408,
|
||||
when it deems the server response to be too large truncating it to 40
|
||||
@@ -32,6 +35,7 @@ may have been fixed since this was written!
|
||||
CURLINFO_STARTTRANSFER_TIME is wrong. While using POST
|
||||
CURLINFO_STARTTRANSFER_TIME minus CURLINFO_PRETRANSFER_TIME is near to zero
|
||||
every time.
|
||||
https://github.com/bagder/curl/issues/218
|
||||
http://curl.haxx.se/bug/view.cgi?id=1213
|
||||
|
||||
84. CURLINFO_SSL_VERIFYRESULT is only implemented for the OpenSSL and NSS
|
||||
@@ -58,16 +62,6 @@ may have been fixed since this was written!
|
||||
that can receive data. This is subject for change in the future.
|
||||
http://curl.haxx.se/bug/view.cgi?id=1116
|
||||
|
||||
78. curl and libcurl don't always signal the client properly when "sending"
|
||||
zero bytes files - it makes for example the command line client not creating
|
||||
any file at all. Like when using FTP.
|
||||
http://curl.haxx.se/bug/view.cgi?id=1063
|
||||
|
||||
76. The SOCKET type in Win64 is 64 bits large (and thus so is curl_socket_t on
|
||||
that platform), and long is only 32 bits. It makes it impossible for
|
||||
curl_easy_getinfo() to return a socket properly with the CURLINFO_LASTSOCKET
|
||||
option as for all other operating systems.
|
||||
|
||||
75. NTLM authentication involving unicode user name or password only works
|
||||
properly if built with UNICODE defined together with the WinSSL/schannel
|
||||
backend. The original problem was mentioned in:
|
||||
@@ -245,13 +239,3 @@ may have been fixed since this was written!
|
||||
it seems HTTP servers send the *uncompressed* length in that header and
|
||||
libcurl thinks of it as the *compressed* length. Some explanations are here:
|
||||
http://curl.haxx.se/mail/lib-2003-06/0146.html
|
||||
|
||||
2. If a HTTP server responds to a HEAD request and includes a body (thus
|
||||
violating the RFC2616), curl won't wait to read the response but just stop
|
||||
reading and return back. If a second request (let's assume a GET) is then
|
||||
immediately made to the same server again, the connection will be re-used
|
||||
fine of course, and the second request will be sent off but when the
|
||||
response is to get read, the previous response-body is what curl will read
|
||||
and havoc is what happens.
|
||||
More details on this is found in this libcurl mailing list thread:
|
||||
http://curl.haxx.se/mail/lib-2002-08/0000.html
|
||||
|
@@ -33,12 +33,12 @@ SUBDIRS = examples libcurl
|
||||
|
||||
CLEANFILES = $(GENHTMLPAGES) $(PDFPAGES)
|
||||
|
||||
EXTRA_DIST = MANUAL BUGS CONTRIBUTE FAQ FEATURES INTERNALS SSLCERTS \
|
||||
README.win32 RESOURCES TODO TheArtOfHttpScripting THANKS VERSIONS \
|
||||
KNOWN_BUGS BINDINGS $(man_MANS) $(HTMLPAGES) HISTORY INSTALL \
|
||||
$(PDFPAGES) LICENSE-MIXING README.netware DISTRO-DILEMMA INSTALL.devcpp \
|
||||
MAIL-ETIQUETTE HTTP-COOKIES SECURITY RELEASE-PROCEDURE \
|
||||
SSL-PROBLEMS HTTP2.md ROADMAP.md
|
||||
EXTRA_DIST = MANUAL BUGS CONTRIBUTE FAQ FEATURES INTERNALS SSLCERTS \
|
||||
README.win32 RESOURCES TODO TheArtOfHttpScripting THANKS VERSIONS \
|
||||
KNOWN_BUGS BINDINGS $(man_MANS) $(HTMLPAGES) HISTORY INSTALL \
|
||||
$(PDFPAGES) LICENSE-MIXING README.netware INSTALL.devcpp \
|
||||
MAIL-ETIQUETTE HTTP-COOKIES SECURITY RELEASE-PROCEDURE SSL-PROBLEMS \
|
||||
HTTP2.md ROADMAP.md CODE_OF_CONDUCT.md
|
||||
|
||||
MAN2HTML= roffit < $< >$@
|
||||
|
||||
|
@@ -24,6 +24,8 @@ in the source code repo
|
||||
|
||||
- upload the 8 resulting files to the primary download directory
|
||||
|
||||
- upload the 4 tarballs to github for the HTTPS download
|
||||
|
||||
in the curl-www repo
|
||||
--------------------
|
||||
|
||||
@@ -78,9 +80,7 @@ Coming dates
|
||||
Based on the description above, here are some planned release dates (at the
|
||||
time of this writing):
|
||||
|
||||
- June 17, 2015 (version 7.43.0)
|
||||
- August 12, 2015
|
||||
- October 7, 2015
|
||||
- October 7, 2015 (version 7.45.0)
|
||||
- December 2, 2015
|
||||
- January 27, 2016
|
||||
- March 23, 2016
|
||||
|
@@ -18,20 +18,6 @@ HTTP/2
|
||||
To decide: if we need to bundle parts of the nghttp2 stuff that probably
|
||||
won't be shipped by many distros.
|
||||
|
||||
- stream properties API
|
||||
|
||||
Provide options for setting priorities and dependencies among the streams
|
||||
(easy handles). They are mostly information set for the stream and sent to
|
||||
the server so we don't have to add much logic for this.
|
||||
|
||||
- server push
|
||||
|
||||
Not exactly clear exactly how to support this API-wise, but by adding
|
||||
handles without asking for a resource it could be a way to be prepared to
|
||||
receive pushes in case such are sent. We probably need it to still specify
|
||||
a URL with host name, port etc but we probably need a special option to
|
||||
tell libcurl it is for server push purposes.
|
||||
|
||||
- provide option for HTTP/2 "prior knowledge" over clear text
|
||||
|
||||
As it would avoid the roundtrip-heavy Upgrade: procedures when you _know_
|
||||
@@ -117,7 +103,7 @@ Improve
|
||||
|
||||
2. curl -h output (considered overwhelming to users)
|
||||
|
||||
3. we have > 160 command line options, is there a way to redo things to
|
||||
3. we have > 170 command line options, is there a way to redo things to
|
||||
simplify or improve the situation as we are likely to keep adding
|
||||
features/options in the future too
|
||||
|
||||
|
@@ -26,7 +26,7 @@ CA bundle missing intermediate certificates
|
||||
problems if your CA cert does not have the certificates for the
|
||||
intermediates in the whole trust chain.
|
||||
|
||||
SSL version
|
||||
Protocol version
|
||||
|
||||
Some broken servers fail to support the protocol negotiation properly that
|
||||
SSL servers are supposed to handle. This may cause the connection to fail
|
||||
@@ -36,7 +36,9 @@ SSL version
|
||||
An additional complication can be that modern SSL libraries sometimes are
|
||||
built with support for older SSL and TLS versions disabled!
|
||||
|
||||
SSL ciphers
|
||||
All versions of SSL are considered insecure and should be avoided. Use TLS.
|
||||
|
||||
Ciphers
|
||||
|
||||
Clients give servers a list of ciphers to select from. If the list doesn't
|
||||
include any ciphers the server wants/can use, the connection handshake
|
||||
@@ -51,6 +53,10 @@ SSL ciphers
|
||||
Note that these weak ciphers are identified as flawed. For example, this
|
||||
includes symmetric ciphers with less than 128 bit keys and RC4.
|
||||
|
||||
WinSSL in Windows XP is not able to connect to servers that no longer
|
||||
support the legacy handshakes and algorithms used by those versions, so we
|
||||
advice against building curl to use WinSSL on really old Windows versions.
|
||||
|
||||
References:
|
||||
|
||||
https://tools.ietf.org/html/draft-popov-tls-prohibiting-rc4-01
|
||||
@@ -65,3 +71,17 @@ Allow BEAST
|
||||
introduced. Exactly as it sounds, it re-introduces the BEAST vulnerability
|
||||
but on the other hand it allows curl to connect to that kind of strange
|
||||
servers.
|
||||
|
||||
Disabling certificate revocation checks
|
||||
|
||||
Some SSL backends may do certificate revocation checks (CRL, OCSP, etc)
|
||||
depending on the OS or build configuration. The --ssl-no-revoke option was
|
||||
introduced in 7.44.0 to disable revocation checking but currently is only
|
||||
supported for WinSSL (the native Windows SSL library), with an exception in
|
||||
the case of Windows' Untrusted Publishers blacklist which it seems can't be
|
||||
bypassed. This option may have broader support to accommodate other SSL
|
||||
backends in the future.
|
||||
|
||||
References:
|
||||
|
||||
http://curl.haxx.se/docs/ssl-compared.html
|
||||
|
33
docs/THANKS
33
docs/THANKS
@@ -131,12 +131,14 @@ Benbuck Nason
|
||||
Benjamin Gerard
|
||||
Benjamin Gilbert
|
||||
Benjamin Johnson
|
||||
Benjamin Kircher
|
||||
Benoit Neil
|
||||
Benoit Sigoure
|
||||
Bernard Leak
|
||||
Bernhard Reutner-Fischer
|
||||
Bert Huijben
|
||||
Bertrand Demiddelaer
|
||||
Bertrand Simonnet
|
||||
Bill Doyle
|
||||
Bill Egert
|
||||
Bill Hoffman
|
||||
@@ -234,6 +236,7 @@ Cris Bailiff
|
||||
Cristian Rodríguez
|
||||
Curt Bogmine
|
||||
Cyrill Osterwalder
|
||||
Cédric Connes
|
||||
Cédric Deltheil
|
||||
D. Flinkmann
|
||||
Da-Yoon Chung
|
||||
@@ -252,9 +255,13 @@ Dan Zitter
|
||||
Daniel Black
|
||||
Daniel Cater
|
||||
Daniel Egger
|
||||
Daniel Hwang
|
||||
Daniel Johnson
|
||||
Daniel Kahn Gillmor
|
||||
Daniel Lee Hwang
|
||||
Daniel Melani
|
||||
Daniel Mentz
|
||||
Daniel Seither
|
||||
Daniel Steinberg
|
||||
Daniel Stenberg
|
||||
Daniel Theron
|
||||
@@ -297,6 +304,7 @@ David Woodhouse
|
||||
David Wright
|
||||
David Yan
|
||||
Dengminwen
|
||||
Denis Feklushkin
|
||||
Dennis Clarke
|
||||
Derek Higgins
|
||||
Detlef Schmier
|
||||
@@ -364,12 +372,14 @@ Eric Lubin
|
||||
Eric Melville
|
||||
Eric Mertens
|
||||
Eric Rautman
|
||||
Eric Ridge
|
||||
Eric S. Raymond
|
||||
Eric Thelin
|
||||
Eric Vergnaud
|
||||
Eric Wong
|
||||
Eric Young
|
||||
Erick Nuwendam
|
||||
Erik Janssen
|
||||
Erik Johansson
|
||||
Ernest Beinrohr
|
||||
Erwan Legrand
|
||||
@@ -384,6 +394,7 @@ Fabian Hiernaux
|
||||
Fabian Keil
|
||||
Fabrizio Ammollo
|
||||
Fedor Karpelevitch
|
||||
Feist Josselin
|
||||
Felix Yan
|
||||
Felix von Leitner
|
||||
Feng Tu
|
||||
@@ -453,6 +464,7 @@ Guido Berhoerster
|
||||
Guillaume Arluison
|
||||
Gunter Knauf
|
||||
Gustaf Hui
|
||||
Gustavo Grieco
|
||||
Gwenole Beauchesne
|
||||
Gökhan Şengün
|
||||
Götz Babin-Ebell
|
||||
@@ -497,6 +509,7 @@ Iida Yosiaki
|
||||
Ilguiz Latypov
|
||||
Ilja van Sprundel
|
||||
Immanuel Gregoire
|
||||
Inca R
|
||||
Ingmar Runge
|
||||
Ingo Ralf Blum
|
||||
Ingo Wilken
|
||||
@@ -507,6 +520,7 @@ Jack Zhang
|
||||
Jacky Lam
|
||||
Jacob Meuser
|
||||
Jacob Moshenko
|
||||
Jactry Zeng
|
||||
Jad Chamcham
|
||||
Jakub Zakrzewski
|
||||
James Bursa
|
||||
@@ -720,6 +734,7 @@ Linas Vepstas
|
||||
Lindley French
|
||||
Ling Thio
|
||||
Linus Nielsen Feltzing
|
||||
Lior Kaplan
|
||||
Lisa Xu
|
||||
Liviu Chircu
|
||||
Liza Alenchery
|
||||
@@ -742,6 +757,7 @@ Maciej Karpiuk
|
||||
Maciej Puzio
|
||||
Maciej W. Rozycki
|
||||
Maks Naumov
|
||||
Maksim Stsepanenka
|
||||
Mamoru Tasaka
|
||||
Mandy Wu
|
||||
Manfred Schwarb
|
||||
@@ -825,6 +841,7 @@ Michael Day
|
||||
Michael Goffioul
|
||||
Michael Jahn
|
||||
Michael Jerris
|
||||
Michael Kalinin
|
||||
Michael Kaufmann
|
||||
Michael Mealling
|
||||
Michael Mueller
|
||||
@@ -835,6 +852,7 @@ Michael Stillwell
|
||||
Michael Wallner
|
||||
Michal Bonino
|
||||
Michal Marek
|
||||
Michał Fita
|
||||
Michał Górny
|
||||
Michał Kowalczyk
|
||||
Michel Promonet
|
||||
@@ -868,6 +886,7 @@ Nagai H
|
||||
Nathan Coulter
|
||||
Nathan O'Sullivan
|
||||
Nathanael Nerode
|
||||
Nathaniel Waisbrot
|
||||
Naveen Chandran
|
||||
Naveen Noel
|
||||
Neil Bowers
|
||||
@@ -903,6 +922,7 @@ Oliver Gondža
|
||||
Oliver Kuckertz
|
||||
Oliver Schindler
|
||||
Olivier Berger
|
||||
Orange Tsai
|
||||
Oren Souroujon
|
||||
Oren Tirosh
|
||||
Orgad Shaneh
|
||||
@@ -998,6 +1018,7 @@ Rainer Canavan
|
||||
Rainer Jung
|
||||
Rainer Koenig
|
||||
Rajesh Naganathan
|
||||
Rajkumar Mandal
|
||||
Ralf S. Engelschall
|
||||
Ralph Beckmann
|
||||
Ralph Mitchell
|
||||
@@ -1007,6 +1028,7 @@ Ravi Pratap
|
||||
Ray Dassen
|
||||
Ray Pekowski
|
||||
Ray Satiro
|
||||
Razvan Cojocaru
|
||||
Reinout van Schouwen
|
||||
Remi Gacogne
|
||||
Renato Botelho
|
||||
@@ -1031,6 +1053,7 @@ Richard Michael
|
||||
Richard Moore
|
||||
Richard Prescott
|
||||
Richard Silverman
|
||||
Richard van den Berg
|
||||
Rick Jones
|
||||
Rick Richardson
|
||||
Rob Crittenden
|
||||
@@ -1054,6 +1077,7 @@ Robson Braga Araujo
|
||||
Rodney Simmons
|
||||
Rodric Glaser
|
||||
Rodrigo Silva
|
||||
Roger Leigh
|
||||
Roland Blom
|
||||
Roland Krikava
|
||||
Roland Zimmermann
|
||||
@@ -1078,6 +1102,7 @@ Salvador Dávila
|
||||
Salvatore Sorrentino
|
||||
Sam Deane
|
||||
Sam Hurst
|
||||
Sam Roth
|
||||
Sam Schanken
|
||||
Sampo Kellomaki
|
||||
Samuel Díaz García
|
||||
@@ -1157,15 +1182,18 @@ Sune Ahlgren
|
||||
Sven Anders
|
||||
Sven Neuhaus
|
||||
Sven Wegener
|
||||
Svyatoslav Mishyn
|
||||
Symeon Paraschoudis
|
||||
Sébastien Willemijns
|
||||
T. Bharath
|
||||
T. Yamada
|
||||
TJ Saunders
|
||||
Tae Hyoung Ahn
|
||||
Taneli Vahakangas
|
||||
Tanguy Fautre
|
||||
Tatsuhiro Tsujikawa
|
||||
Temprimus
|
||||
Terri Oda
|
||||
Thomas Braun
|
||||
Thomas J. Moore
|
||||
Thomas Klausner
|
||||
@@ -1174,6 +1202,7 @@ Thomas Lopatic
|
||||
Thomas Ruecker
|
||||
Thomas Schwinge
|
||||
Thomas Tonino
|
||||
Thorsten Schöning
|
||||
Tiit Pikma
|
||||
Till Maas
|
||||
Tim Ansell
|
||||
@@ -1186,6 +1215,7 @@ Tim Heckman
|
||||
Tim Newsome
|
||||
Tim Ruehsen
|
||||
Tim Sneddon
|
||||
Tim Stack
|
||||
Tim Starling
|
||||
Timo Sirainen
|
||||
Tinus van den Berg
|
||||
@@ -1195,7 +1225,6 @@ Tobias Stoeckmann
|
||||
Toby Peterson
|
||||
Todd A Ouska
|
||||
Todd Kulesza
|
||||
Todd Ouska
|
||||
Todd Vierling
|
||||
Tom Benoist
|
||||
Tom Donovan
|
||||
@@ -1255,6 +1284,7 @@ Vojtech Janota
|
||||
Vojtech Minarik
|
||||
Vojtěch Král
|
||||
Vsevolod Novikov
|
||||
W. Mark Kubacki
|
||||
Waldek Kozba
|
||||
Walter J. Mack
|
||||
Ward Willats
|
||||
@@ -1294,4 +1324,5 @@ Zvi Har'El
|
||||
nk
|
||||
swalkaus at yahoo.com
|
||||
tommink[at]post.pl
|
||||
Štefan Kremeň
|
||||
Никита Дорохин
|
||||
|
@@ -50,3 +50,4 @@ s/Jiří Hruška/Jiri Hruska/
|
||||
s/Viktor Szakats/Viktor Szakáts/
|
||||
s/Jonathan Cardoso/Jonathan Cardoso Machado/
|
||||
s/Linus Nielsen/Linus Nielsen Feltzing/
|
||||
s/Todd Ouska$/Todd A Ouska/
|
||||
|
61
docs/TODO
61
docs/TODO
@@ -25,6 +25,8 @@
|
||||
1.7 Detect when called from within callbacks
|
||||
1.8 Allow SSL (HTTPS) to proxy
|
||||
1.9 Cache negative name resolves
|
||||
1.10 Support IDNA2008
|
||||
1.11 minimize dependencies with dynamicly loaded modules
|
||||
|
||||
2. libcurl - multi interface
|
||||
2.1 More non-blocking
|
||||
@@ -50,6 +52,7 @@
|
||||
5.4 SPDY
|
||||
5.5 auth= in URLs
|
||||
5.6 Refuse "downgrade" redirects
|
||||
5.7 More compressions
|
||||
|
||||
6. TELNET
|
||||
6.1 ditch stdin
|
||||
@@ -112,6 +115,7 @@
|
||||
17.7 warning when sending binary output to terminal
|
||||
17.8 offer color-coded HTTP header output
|
||||
17.9 Choose the name of file in braces for complex URLs
|
||||
17.10 improve how curl works in a windows console window
|
||||
|
||||
18. Build
|
||||
18.1 roffit
|
||||
@@ -218,6 +222,19 @@
|
||||
A name resolve that has failed is likely to fail when made again within a
|
||||
short period of time. Currently we only cache positive responses.
|
||||
|
||||
1.10 Support IDNA2008
|
||||
|
||||
International Domain Names are supported in libcurl since years back, powered
|
||||
by libidn. libidn implements IDNA2003 which has been superseded by IDNA2008.
|
||||
libidn2 is an existing library offering support for IDNA2008.
|
||||
|
||||
1.11 minimize dependencies with dynamicly loaded modules
|
||||
|
||||
We can create a system with loadable modules/plug-ins, where these modules
|
||||
would be the ones that link to 3rd party libs. That would allow us to avoid
|
||||
having to load ALL dependencies since only the necessary ones for this
|
||||
app/invoke/used protocols would be necessary to load. See
|
||||
https://github.com/bagder/curl/issues/349
|
||||
|
||||
2. libcurl - multi interface
|
||||
|
||||
@@ -356,6 +373,14 @@ This is not detailed in any FTP specification.
|
||||
Consider a way to tell curl to refuse to "downgrade" protocol with a redirect
|
||||
and/or possibly a bit that refuses redirect to change protocol completely.
|
||||
|
||||
5.7 More compressions
|
||||
|
||||
Compression algorithms that perform better than gzip are being considered for
|
||||
use and inclusion in existing browsers. For example 'brotli'. If servers
|
||||
follow along it is a good reason for us to also allow users to take advantage
|
||||
of this. The algorithm: https://github.com/google/brotli The Firefox bug:
|
||||
https://bugzilla.mozilla.org/show_bug.cgi?id=366559
|
||||
|
||||
|
||||
6. TELNET
|
||||
|
||||
@@ -608,32 +633,38 @@ Currently the SMB authentication uses NTLMv1.
|
||||
|
||||
17.6 warning when setting an option
|
||||
|
||||
Display a warning when libcurl returns an error when setting an option.
|
||||
This can be useful to tell when support for a particular feature hasn't been
|
||||
compiled into the library.
|
||||
Display a warning when libcurl returns an error when setting an option.
|
||||
This can be useful to tell when support for a particular feature hasn't been
|
||||
compiled into the library.
|
||||
|
||||
17.7 warning when sending binary output to terminal
|
||||
|
||||
Provide a way that prompts the user for confirmation before binary data is
|
||||
sent to the terminal, much in the style 'less' does it.
|
||||
Provide a way that prompts the user for confirmation before binary data is
|
||||
sent to the terminal, much in the style 'less' does it.
|
||||
|
||||
17.8 offer color-coded HTTP header output
|
||||
|
||||
By offering different color output on the header name and the header
|
||||
contents, they could be made more readable and thus help users working on
|
||||
HTTP services.
|
||||
By offering different color output on the header name and the header
|
||||
contents, they could be made more readable and thus help users working on
|
||||
HTTP services.
|
||||
|
||||
17.9 Choose the name of file in braces for complex URLs
|
||||
|
||||
When using braces to download a list of URLs and you use complicated names
|
||||
in the list of alternatives, it could be handy to allow curl to use other
|
||||
names when saving.
|
||||
When using braces to download a list of URLs and you use complicated names
|
||||
in the list of alternatives, it could be handy to allow curl to use other
|
||||
names when saving.
|
||||
|
||||
Consider a way to offer that. Possibly like
|
||||
{partURL1:name1,partURL2:name2,partURL3:name3} where the name following the
|
||||
colon is the output name.
|
||||
Consider a way to offer that. Possibly like
|
||||
{partURL1:name1,partURL2:name2,partURL3:name3} where the name following the
|
||||
colon is the output name.
|
||||
|
||||
See https://github.com/bagder/curl/issues/221
|
||||
See https://github.com/bagder/curl/issues/221
|
||||
|
||||
17.10 improve how curl works in a windows console window
|
||||
|
||||
If you pull the scrollbar when transferring with curl in a Windows console
|
||||
window, the transfer is interrupted and can get disconnected. This can
|
||||
probably be improved. See https://github.com/bagder/curl/issues/322
|
||||
|
||||
|
||||
18. Build
|
||||
|
110
docs/curl.1
110
docs/curl.1
@@ -171,10 +171,11 @@ a level of control).
|
||||
.IP "-2, --sslv2"
|
||||
(SSL) Forces curl to use SSL version 2 when negotiating with a remote SSL
|
||||
server. Sometimes curl is built without SSLv2 support. SSLv2 is widely
|
||||
considered insecure.
|
||||
considered insecure (see RFC 6176).
|
||||
.IP "-3, --sslv3"
|
||||
(SSL) Forces curl to use SSL version 3 when negotiating with a remote SSL
|
||||
server. Sometimes curl is built without SSLv3 support.
|
||||
server. Sometimes curl is built without SSLv3 support. SSLv3 is widely
|
||||
considered insecure (see RFC 7568).
|
||||
.IP "-4, --ipv4"
|
||||
This option tells curl to resolve names to IPv4 addresses only, and not for
|
||||
example try IPv6.
|
||||
@@ -212,7 +213,7 @@ be in the format "NAME1=VALUE1; NAME2=VALUE2".
|
||||
|
||||
If no '=' symbol is used in the line, it is treated as a filename to use to
|
||||
read previously stored cookie lines from, which should be used in this session
|
||||
if they match. Using this method also activates the "cookie parser" which will
|
||||
if they match. Using this method also activates the cookie engine which will
|
||||
make curl record incoming cookies too, which may be handy if you're using this
|
||||
in combination with the \fI-L, --location\fP option. The file format of the
|
||||
file to read cookies from should be plain HTTP headers or the Netscape/Mozilla
|
||||
@@ -222,6 +223,15 @@ The file specified with \fI-b, --cookie\fP is only used as input. No cookies
|
||||
will be written to the file. To store cookies, use the \fI-c, --cookie-jar\fP
|
||||
option.
|
||||
|
||||
Exercise caution if you are using this option and multiple transfers may occur.
|
||||
If you use the NAME1=VALUE1; format, or in a file use the Set-Cookie format and
|
||||
don't specify a domain, then the cookie is sent for any domain (even after
|
||||
redirects are followed) and cannot be modified by a server-set cookie. If the
|
||||
cookie engine is enabled and a server sets a cookie of the same name then both
|
||||
will be sent on a future transfer to that server, likely not what you intended.
|
||||
To address these issues set a domain in Set-Cookie (doing that will include
|
||||
sub-domains) or use the Netscape format.
|
||||
|
||||
If this option is used several times, the last one will be used.
|
||||
.IP "-B, --use-ascii"
|
||||
(FTP/LDAP) Enable ASCII transfer. For FTP, this can also be enforced by using
|
||||
@@ -253,6 +263,9 @@ won't fail or even report an error clearly. Using -v will get a warning
|
||||
displayed, but that is the only visible feedback you get about this possibly
|
||||
lethal situation.
|
||||
|
||||
Since 7.43.0 cookies that were imported in the Set-Cookie format without a
|
||||
domain name are not exported by this option.
|
||||
|
||||
If this option is used several times, the last specified file name will be
|
||||
used.
|
||||
.IP "-C, --continue-at <offset>"
|
||||
@@ -475,10 +488,10 @@ If this option is used several times, the last one will be used.
|
||||
(SSL) Tells curl to use the specified client certificate file when getting a
|
||||
file with HTTPS, FTPS or another SSL-based protocol. The certificate must be
|
||||
in PKCS#12 format if using Secure Transport, or PEM format if using any other
|
||||
engine. If the optional password isn't specified, it will be queried
|
||||
for on the terminal. Note that this option assumes a \&"certificate" file that
|
||||
is the private key and the private certificate concatenated! See \fI--cert\fP
|
||||
and \fI--key\fP to specify them independently.
|
||||
engine. If the optional password isn't specified, it will be queried for on
|
||||
the terminal. Note that this option assumes a \&"certificate" file that is the
|
||||
private key and the client certificate concatenated! See \fI--cert\fP and
|
||||
\fI--key\fP to specify them independently.
|
||||
|
||||
If curl is built against the NSS SSL library then this option can tell
|
||||
curl the nickname of the certificate to use within the NSS database defined
|
||||
@@ -544,9 +557,11 @@ OpenSSL-powered curl to make SSL-connections much more efficiently than using
|
||||
|
||||
If this option is set, the default capath value will be ignored, and if it is
|
||||
used several times, the last one will be used.
|
||||
.IP "--pinnedpubkey <pinned public key>"
|
||||
(SSL) Tells curl to use the specified public key file to verify the peer. The
|
||||
file must contain a single public key in PEM or DER format.
|
||||
.IP "--pinnedpubkey <pinned public key (hashes)>"
|
||||
(SSL) Tells curl to use the specified public key file (or hashes) to verify the
|
||||
peer. This can be a path to a file which contains a single public key in PEM or
|
||||
DER format, or any number of base64 encoded sha256 hashes preceded by
|
||||
\'sha256//\' and separated by \';\'
|
||||
|
||||
When negotiating a TLS or SSL connection, the server sends a certificate
|
||||
indicating its identity. A public key is extracted from this certificate and
|
||||
@@ -554,7 +569,8 @@ if it does not exactly match the public key provided to this option, curl will
|
||||
abort the connection before sending or receiving any data.
|
||||
|
||||
Added in 7.39.0 for OpenSSL, GnuTLS and GSKit. Added in 7.43.0 for NSS and
|
||||
wolfSSL/CyaSSL. Other SSL backends not supported.
|
||||
wolfSSL/CyaSSL. sha256 support added in 7.44.0 for OpenSSL,
|
||||
GnuTLS, NSS and wolfSSL/CyaSSL. Other SSL backends not supported.
|
||||
|
||||
If this option is used several times, the last one will be used.
|
||||
.IP "--cert-status"
|
||||
@@ -604,7 +620,9 @@ input:
|
||||
\fBcurl\fP -F password=@/etc/passwd www.mypasswords.com
|
||||
|
||||
To read content from stdin instead of a file, use - as the filename. This goes
|
||||
for both @ and < constructs.
|
||||
for both @ and < constructs. Unfortunately it does not support reading the
|
||||
file from a named pipe or similar, as it needs the full size before the
|
||||
transfer starts.
|
||||
|
||||
You can also tell curl what Content-Type to use by using 'type=', in a manner
|
||||
similar to:
|
||||
@@ -771,10 +789,12 @@ This option can be used multiple times to add/replace/remove multiple headers.
|
||||
be the 128 bit MD5 checksum of the remote host's public key, curl will refuse
|
||||
the connection with the host unless the md5sums match. (Added in 7.17.1)
|
||||
.IP "--ignore-content-length"
|
||||
(HTTP)
|
||||
Ignore the Content-Length header. This is particularly useful for servers
|
||||
running Apache 1.x, which will report incorrect Content-Length for files
|
||||
larger than 2 gigabytes.
|
||||
For HTTP, Ignore the Content-Length header. This is particularly useful for
|
||||
servers running Apache 1.x, which will report incorrect Content-Length for
|
||||
files larger than 2 gigabytes.
|
||||
|
||||
For FTP (since 7.46.0), skip the RETR command to figure out the size before
|
||||
downloading a file.
|
||||
.IP "-i, --include"
|
||||
(HTTP) Include the HTTP-header in the output. The HTTP-header includes things
|
||||
like server-name, date of the document, HTTP-version and more...
|
||||
@@ -1245,21 +1265,21 @@ this option set you tell it not to do that.
|
||||
|
||||
(Added in 7.42.0)
|
||||
.IP "--post301"
|
||||
(HTTP) Tells curl to respect RFC 2616/10.3.2 and not convert POST requests
|
||||
(HTTP) Tells curl to respect RFC 7230/6.4.2 and not convert POST requests
|
||||
into GET requests when following a 301 redirection. The non-RFC behaviour is
|
||||
ubiquitous in web browsers, so curl does the conversion by default to maintain
|
||||
consistency. However, a server may require a POST to remain a POST after such
|
||||
a redirection. This option is meaningful only when using \fI-L, --location\fP
|
||||
(Added in 7.17.1)
|
||||
.IP "--post302"
|
||||
(HTTP) Tells curl to respect RFC 2616/10.3.2 and not convert POST requests
|
||||
(HTTP) Tells curl to respect RFC 7230/6.4.3 and not convert POST requests
|
||||
into GET requests when following a 302 redirection. The non-RFC behaviour is
|
||||
ubiquitous in web browsers, so curl does the conversion by default to maintain
|
||||
consistency. However, a server may require a POST to remain a POST after such
|
||||
a redirection. This option is meaningful only when using \fI-L, --location\fP
|
||||
(Added in 7.19.1)
|
||||
.IP "--post303"
|
||||
(HTTP) Tells curl to respect RFC 2616/10.3.2 and not convert POST requests
|
||||
(HTTP) Tells curl to respect RFC 7230/6.4.4 and not convert POST requests
|
||||
into GET requests when following a 303 redirection. The non-RFC behaviour is
|
||||
ubiquitous in web browsers, so curl does the conversion by default to maintain
|
||||
consistency. However, a server may require a POST to remain a POST after such
|
||||
@@ -1306,9 +1326,40 @@ This option can be used multiple times, in which case the effect is the same
|
||||
as concatenating the protocols into one instance of the option.
|
||||
|
||||
(Added in 7.20.2)
|
||||
.IP "--proto-default <protocol>"
|
||||
Tells curl to use \fIprotocol\fP for any URL missing a scheme name.
|
||||
|
||||
Example:
|
||||
|
||||
.RS
|
||||
.IP "--proto-default https ftp.mozilla.org"
|
||||
https://ftp.mozilla.org
|
||||
.RE
|
||||
|
||||
An unknown or unsupported protocol causes error
|
||||
\fICURLE_UNSUPPORTED_PROTOCOL\fP.
|
||||
|
||||
This option does not change the default proxy protocol (http).
|
||||
|
||||
Without this option curl would make a guess based on the host, see \fI--url\fP
|
||||
for details.
|
||||
|
||||
(Added in 7.45.0)
|
||||
.IP "--proto-redir <protocols>"
|
||||
Tells curl to use the listed protocols after a redirect. See --proto for
|
||||
how protocols are represented.
|
||||
Tells curl to use the listed protocols on redirect. See --proto for how
|
||||
protocols are represented.
|
||||
|
||||
Example:
|
||||
|
||||
.RS
|
||||
.IP "--proto-redir -all,http,https"
|
||||
Allow only HTTP and HTTPS on redirect.
|
||||
.RE
|
||||
|
||||
By default curl will allow all protocols on redirect except several disabled
|
||||
for security reasons: Since 7.19.4 FILE and SCP are disabled, and since 7.40.0
|
||||
SMB and SMBS are also disabled. Specifying \fIall\fP or \fI+all\fP enables all
|
||||
protocols on redirect, including those disabled for security.
|
||||
|
||||
(Added in 7.20.2)
|
||||
.IP "--proxy-anyauth"
|
||||
@@ -1423,13 +1474,10 @@ specifies the last 500 bytes
|
||||
specifies the bytes from offset 9500 and forward
|
||||
.TP
|
||||
.B 0-0,-1
|
||||
specifies the first and last byte only(*)(H)
|
||||
.TP
|
||||
.B 500-700,600-799
|
||||
specifies 300 bytes from offset 500(H)
|
||||
specifies the first and last byte only(*)(HTTP)
|
||||
.TP
|
||||
.B 100-199,500-599
|
||||
specifies two separate 100-byte ranges(*)(H)
|
||||
specifies two separate 100-byte ranges(*) (HTTP)
|
||||
.RE
|
||||
.IP
|
||||
(*) = NOTE that this will cause the server to reply with a multipart
|
||||
@@ -1542,6 +1590,10 @@ and TLS1.0 protocols known as BEAST. If this option isn't used, the SSL layer
|
||||
may use workarounds known to cause interoperability problems with some older
|
||||
SSL implementations. WARNING: this option loosens the SSL security, and by
|
||||
using this flag you ask for exactly that. (Added in 7.25.0)
|
||||
.IP "--ssl-no-revoke"
|
||||
(WinSSL) This option tells curl to disable certificate revocation checks.
|
||||
WARNING: this option loosens the SSL security, and by using this flag you ask
|
||||
for exactly that. (Added in 7.44.0)
|
||||
.IP "--socks4 <host[:port]>"
|
||||
Use the specified SOCKS4 proxy. If the port number is not specified, it is
|
||||
assumed at port 1080. (Added in 7.15.2)
|
||||
@@ -1751,6 +1803,12 @@ If this option is used several times, the last one will be used.
|
||||
Specify a URL to fetch. This option is mostly handy when you want to specify
|
||||
URL(s) in a config file.
|
||||
|
||||
If the given URL is missing a scheme name (such as "http://" or "ftp://" etc)
|
||||
then curl will make a guess based on the host. If the outermost sub-domain name
|
||||
matches DICT, FTP, IMAP, LDAP, POP3 or SMTP then that protocol will be used,
|
||||
otherwise HTTP will be used. Since 7.45.0 guessing can be disabled by setting a
|
||||
default protocol, see \fI--proto-default\fP for details.
|
||||
|
||||
This option may be used any number of times. To control where this URL is
|
||||
written, use the \fI-o, --output\fP or the \fI-O, --remote-name\fP options.
|
||||
.IP "-v, --verbose"
|
||||
|
@@ -5,7 +5,7 @@
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
* Copyright (C) 1998 - 2015, 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
|
||||
@@ -19,9 +19,10 @@
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
/* Example application source code using the multi interface to download many
|
||||
* files, but with a capped maximum amount of simultaneous transfers.
|
||||
*
|
||||
/* <DESC>
|
||||
* Source code using the multi interface to download many
|
||||
* files, with a capped maximum amount of simultaneous transfers.
|
||||
* </DESC>
|
||||
* Written by Michael Wallner
|
||||
*/
|
||||
|
||||
|
@@ -32,7 +32,7 @@ check_PROGRAMS = 10-at-a-time anyauthput cookie_interface debug fileupload \
|
||||
imap-list imap-lsub imap-fetch imap-store imap-append imap-examine \
|
||||
imap-search imap-create imap-delete imap-copy imap-noop imap-ssl \
|
||||
imap-tls imap-multi url2file sftpget ftpsget postinmemory http2-download \
|
||||
http2-upload
|
||||
http2-upload http2-serverpush
|
||||
|
||||
# These examples require external dependencies that may not be commonly
|
||||
# available on POSIX systems, so don't bother attempting to compile them here.
|
||||
|
@@ -50,7 +50,7 @@ LIBRTMP_PATH = ../../../librtmp-2.4
|
||||
endif
|
||||
# Edit the path below to point to the base of your libidn package.
|
||||
ifndef LIBIDN_PATH
|
||||
LIBIDN_PATH = ../../../libidn-1.30
|
||||
LIBIDN_PATH = ../../../libidn-1.32
|
||||
endif
|
||||
# Edit the path below to point to the base of your MS IDN package.
|
||||
# Microsoft Internationalized Domain Names (IDN) Mitigation APIs 1.1
|
||||
|
@@ -34,7 +34,7 @@ endif
|
||||
|
||||
# Edit the path below to point to the base of your libidn package.
|
||||
ifndef LIBIDN_PATH
|
||||
LIBIDN_PATH = ../../../libidn-1.30
|
||||
LIBIDN_PATH = ../../../libidn-1.32
|
||||
endif
|
||||
|
||||
# Edit the path below to point to the base of your librtmp package.
|
||||
|
@@ -5,7 +5,7 @@
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
* Copyright (C) 1998 - 2015, 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
|
||||
@@ -19,6 +19,11 @@
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
/* <DESC>
|
||||
* HTTP PUT upload with authentiction using "any" method. libcurl picks the
|
||||
* one the server supports/wants.
|
||||
* </DESC>
|
||||
*/
|
||||
#include <stdio.h>
|
||||
#include <fcntl.h>
|
||||
#ifdef WIN32
|
||||
|
@@ -5,7 +5,7 @@
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 2012 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
* Copyright (C) 2012 - 2015, 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
|
||||
@@ -20,11 +20,11 @@
|
||||
*
|
||||
***************************************************************************/
|
||||
|
||||
/* <DESC>
|
||||
* demonstrate the use of multi socket interface with boost::asio
|
||||
* </DESC>
|
||||
*/
|
||||
/*
|
||||
* file: asiohiper.cpp
|
||||
* Example program to demonstrate the use of multi socket interface
|
||||
* with boost::asio
|
||||
*
|
||||
* This program is in c++ and uses boost::asio instead of libevent/libev.
|
||||
* Requires boost::asio, boost::bind and boost::system
|
||||
*
|
||||
|
@@ -5,7 +5,7 @@
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
* Copyright (C) 1998 - 2015, 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
|
||||
@@ -19,17 +19,11 @@
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
/* Example using a "in core" PEM certificate to retrieve a https page.
|
||||
* Written by Theo Borm
|
||||
/* <DESC>
|
||||
* CA cert in memory with OpenSSL to get a HTTPS page.
|
||||
* </DESC>
|
||||
*/
|
||||
|
||||
/* on a netBSD system with OPENSSL& LIBCURL installed from
|
||||
* pkgsrc (using default paths) this program can be compiled using:
|
||||
* gcc -I/usr/pkg/include -L/usr/pkg/lib -lcurl -Wl,-R/usr/pkg/lib -lssl
|
||||
* -lcrypto -lz -o curlcacerttest curlcacerttest.c
|
||||
* on other operating systems you may want to change paths to headers
|
||||
* and libraries
|
||||
*/
|
||||
#include <openssl/ssl.h>
|
||||
#include <curl/curl.h>
|
||||
#include <stdio.h>
|
||||
|
@@ -5,7 +5,7 @@
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
* Copyright (C) 1998 - 2015, 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
|
||||
@@ -19,6 +19,10 @@
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
/* <DESC>
|
||||
* Extract lots of TLS certificate info.
|
||||
* </DESC>
|
||||
*/
|
||||
#include <stdio.h>
|
||||
|
||||
#include <curl/curl.h>
|
||||
|
@@ -5,7 +5,7 @@
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
* Copyright (C) 1998 - 2015, 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
|
||||
@@ -19,6 +19,10 @@
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
/* <DESC>
|
||||
* Show transfer timing info after download completes.
|
||||
* </DESC>
|
||||
*/
|
||||
/* Example source code to show how the callback function can be used to
|
||||
* download data into a chunk of memory instead of storing it in a file.
|
||||
* After successful download we use curl_easy_getinfo() calls to get the
|
||||
|
@@ -5,7 +5,7 @@
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
* Copyright (C) 1998 - 2015, 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
|
||||
@@ -19,7 +19,10 @@
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
/* This example shows usage of simple cookie interface. */
|
||||
/* <DESC>
|
||||
* Import and export cookies with COOKIELIST.
|
||||
* </DESC>
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
@@ -5,9 +5,12 @@
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (c) 2000 David Odin (aka DindinX) for MandrakeSoft
|
||||
*/
|
||||
/* <DESC>
|
||||
* use the libcurl in a gtk-threaded application
|
||||
* </DESC>
|
||||
*/
|
||||
/* Copyright (c) 2000 David Odin (aka DindinX) for MandrakeSoft */
|
||||
/* an attempt to use the curl library in concert with a gtk-threaded application */
|
||||
|
||||
#include <stdio.h>
|
||||
#include <gtk/gtk.h>
|
||||
|
@@ -9,7 +9,10 @@
|
||||
certificate presented during ssl session establishment.
|
||||
|
||||
*/
|
||||
|
||||
/* <DESC>
|
||||
* demonstrates use of SSL context callback, requires OpenSSL
|
||||
* </DESC>
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2003 The OpenEvidence Project. All rights reserved.
|
||||
|
@@ -5,7 +5,7 @@
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
* Copyright (C) 1998 - 2015, 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
|
||||
@@ -19,6 +19,10 @@
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
/* <DESC>
|
||||
* Show how CURLOPT_DEBUGFUNCTION can be used.
|
||||
* </DESC>
|
||||
*/
|
||||
#include <stdio.h>
|
||||
#include <curl/curl.h>
|
||||
|
||||
|
@@ -5,7 +5,7 @@
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
* Copyright (C) 1998 - 2015, 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
|
||||
@@ -19,6 +19,10 @@
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
/* <DESC>
|
||||
* multi socket interface together with libev
|
||||
* </DESC>
|
||||
*/
|
||||
/* Example application source code using the multi socket interface to
|
||||
* download many files at once.
|
||||
*
|
||||
|
@@ -5,7 +5,7 @@
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
* Copyright (C) 1998 - 2015, 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
|
||||
@@ -19,9 +19,10 @@
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
/*
|
||||
* This is an example demonstrating how an application can pass in a custom
|
||||
/* <DESC>
|
||||
* An example demonstrating how an application can pass in a custom
|
||||
* socket to libcurl to use. This example also handles the connect itself.
|
||||
* </DESC>
|
||||
*/
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
@@ -5,7 +5,7 @@
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
* Copyright (C) 1998 - 2015, 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
|
||||
@@ -19,6 +19,10 @@
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
/* <DESC>
|
||||
* Upload to a file:// URL
|
||||
* </DESC>
|
||||
*/
|
||||
#include <stdio.h>
|
||||
#include <curl/curl.h>
|
||||
#include <sys/stat.h>
|
||||
|
@@ -42,6 +42,10 @@
|
||||
*
|
||||
* This example requires libcurl 7.9.7 or later.
|
||||
*/
|
||||
/* <DESC>
|
||||
* implements an fopen() abstraction allowing reading from URLs
|
||||
* </DESC>
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
@@ -5,7 +5,7 @@
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
* Copyright (C) 1998 - 2015, 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
|
||||
@@ -19,6 +19,10 @@
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
/* <DESC>
|
||||
* FTP wildcard pattern matching
|
||||
* </DESC>
|
||||
*/
|
||||
#include <curl/curl.h>
|
||||
#include <stdio.h>
|
||||
|
||||
|
@@ -5,7 +5,7 @@
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
* Copyright (C) 1998 - 2015, 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
|
||||
@@ -23,11 +23,9 @@
|
||||
|
||||
#include <curl/curl.h>
|
||||
|
||||
/*
|
||||
* This is an example showing how to get a single file from an FTP server.
|
||||
* It delays the actual destination file creation until the first write
|
||||
* callback so that it won't create an empty file in case the remote file
|
||||
* doesn't exist or something else fails.
|
||||
/* <DESC>
|
||||
* Get a single file from an FTP server.
|
||||
* </DESC>
|
||||
*/
|
||||
|
||||
struct FtpFile {
|
||||
|
@@ -5,7 +5,7 @@
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
* Copyright (C) 1998 - 2015, 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
|
||||
@@ -24,9 +24,9 @@
|
||||
|
||||
#include <curl/curl.h>
|
||||
|
||||
/*
|
||||
* This is an example showing how to check a single file's size and mtime
|
||||
* from an FTP server.
|
||||
/* <DESC>
|
||||
* Checks a single file's size and mtime from an FTP server.
|
||||
* </DESC>
|
||||
*/
|
||||
|
||||
static size_t throw_away(void *ptr, size_t size, size_t nmemb, void *data)
|
||||
|
@@ -5,7 +5,7 @@
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
* Copyright (C) 1998 - 2015, 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
|
||||
@@ -23,13 +23,11 @@
|
||||
|
||||
#include <curl/curl.h>
|
||||
|
||||
/*
|
||||
* Similar to ftpget.c but this also stores the received response-lines
|
||||
/* <DESC>
|
||||
* Similar to ftpget.c but also stores the received response-lines
|
||||
* in a separate file using our own callback!
|
||||
*
|
||||
* This functionality was introduced in libcurl 7.9.3.
|
||||
* </DESC>
|
||||
*/
|
||||
|
||||
static size_t
|
||||
write_response(void *ptr, size_t size, size_t nmemb, void *data)
|
||||
{
|
||||
|
@@ -5,7 +5,7 @@
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
* Copyright (C) 1998 - 2015, 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
|
||||
@@ -24,11 +24,9 @@
|
||||
|
||||
#include <curl/curl.h>
|
||||
|
||||
/*
|
||||
* This is an example showing how to get a single file from an FTPS server.
|
||||
* It delays the actual destination file creation until the first write
|
||||
* callback so that it won't create an empty file in case the remote file
|
||||
* doesn't exist or something else fails.
|
||||
/* <DESC>
|
||||
* Get a single file from an FTPS server.
|
||||
* </DESC>
|
||||
*/
|
||||
|
||||
struct FtpFile {
|
||||
|
@@ -5,7 +5,7 @@
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
* Copyright (C) 1998 - 2015, 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
|
||||
@@ -33,11 +33,10 @@
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
|
||||
/*
|
||||
* This example shows an FTP upload, with a rename of the file just after
|
||||
* a successful upload.
|
||||
*
|
||||
* Example based on source code provided by Erick Nuwendam. Thanks!
|
||||
/* <DESC>
|
||||
* Performs an FTP upload and renames the file just after a successful
|
||||
* transfer.
|
||||
* </DESC>
|
||||
*/
|
||||
|
||||
#define LOCAL_FILE "/tmp/uploadthis.txt"
|
||||
|
@@ -5,7 +5,7 @@
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
* Copyright (C) 1998 - 2015, 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
|
||||
@@ -19,13 +19,9 @@
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
/* Upload to FTP, resuming failed transfers
|
||||
*
|
||||
* Compile for MinGW like this:
|
||||
* gcc -Wall -pedantic -std=c99 ftpuploadwithresume.c -o ftpuploadresume.exe
|
||||
* -lcurl -lmsvcr70
|
||||
*
|
||||
* Written by Philip Bock
|
||||
/* <DESC>
|
||||
* Upload to FTP, resuming failed transfers.
|
||||
* </DESC>
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
|
@@ -5,7 +5,7 @@
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
* Copyright (C) 1998 - 2015, 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
|
||||
@@ -19,6 +19,10 @@
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
/* <DESC>
|
||||
* Use getinfo to get content-type after completed transfer.
|
||||
* </DESC>
|
||||
*/
|
||||
#include <stdio.h>
|
||||
#include <curl/curl.h>
|
||||
|
||||
@@ -27,18 +31,14 @@ int main(void)
|
||||
CURL *curl;
|
||||
CURLcode res;
|
||||
|
||||
/* http://curl.haxx.se/libcurl/c/curl_easy_init.html */
|
||||
curl = curl_easy_init();
|
||||
if(curl) {
|
||||
/* http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTURL */
|
||||
curl_easy_setopt(curl, CURLOPT_URL, "http://www.example.com/");
|
||||
/* http://curl.haxx.se/libcurl/c/curl_easy_perform.html */
|
||||
res = curl_easy_perform(curl);
|
||||
|
||||
if(CURLE_OK == res) {
|
||||
char *ct;
|
||||
/* ask for the content-type */
|
||||
/* http://curl.haxx.se/libcurl/c/curl_easy_getinfo.html */
|
||||
res = curl_easy_getinfo(curl, CURLINFO_CONTENT_TYPE, &ct);
|
||||
|
||||
if((CURLE_OK == res) && ct)
|
||||
@@ -46,7 +46,6 @@ int main(void)
|
||||
}
|
||||
|
||||
/* always cleanup */
|
||||
/* http://curl.haxx.se/libcurl/c/curl_easy_cleanup.html */
|
||||
curl_easy_cleanup(curl);
|
||||
}
|
||||
return 0;
|
||||
|
@@ -5,7 +5,7 @@
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
* Copyright (C) 1998 - 2015, 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
|
||||
@@ -19,8 +19,10 @@
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
/* Example source code to show how the callback function can be used to
|
||||
* download data into a chunk of memory instead of storing it in a file.
|
||||
/* <DESC>
|
||||
* Shows how the write callback function can be used to download data into a
|
||||
* chunk of memory instead of storing it in a file.
|
||||
* </DESC>
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
@@ -34,7 +36,6 @@ struct MemoryStruct {
|
||||
size_t size;
|
||||
};
|
||||
|
||||
|
||||
static size_t
|
||||
WriteMemoryCallback(void *contents, size_t size, size_t nmemb, void *userp)
|
||||
{
|
||||
@@ -55,7 +56,6 @@ WriteMemoryCallback(void *contents, size_t size, size_t nmemb, void *userp)
|
||||
return realsize;
|
||||
}
|
||||
|
||||
|
||||
int main(void)
|
||||
{
|
||||
CURL *curl_handle;
|
||||
|
@@ -5,7 +5,7 @@
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
* Copyright (C) 1998 - 2015, 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
|
||||
@@ -19,6 +19,10 @@
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
/* <DESC>
|
||||
* multi socket API usage together with with glib2
|
||||
* </DESC>
|
||||
*/
|
||||
/* Example application source code using the multi socket interface to
|
||||
* download many files at once.
|
||||
*
|
||||
|
@@ -5,7 +5,7 @@
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
* Copyright (C) 1998 - 2015, 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
|
||||
@@ -19,6 +19,10 @@
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
/* <DESC>
|
||||
* multi socket API usage with libevent 2
|
||||
* </DESC>
|
||||
*/
|
||||
/* Example application source code using the multi socket interface to
|
||||
download many files at once.
|
||||
|
||||
@@ -326,7 +330,7 @@ static void new_conn(char *url, GlobalInfo *g )
|
||||
conn->url = strdup(url);
|
||||
curl_easy_setopt(conn->easy, CURLOPT_URL, conn->url);
|
||||
curl_easy_setopt(conn->easy, CURLOPT_WRITEFUNCTION, write_cb);
|
||||
curl_easy_setopt(conn->easy, CURLOPT_WRITEDATA, &conn);
|
||||
curl_easy_setopt(conn->easy, CURLOPT_WRITEDATA, conn);
|
||||
curl_easy_setopt(conn->easy, CURLOPT_VERBOSE, 1L);
|
||||
curl_easy_setopt(conn->easy, CURLOPT_ERRORBUFFER, conn->error);
|
||||
curl_easy_setopt(conn->easy, CURLOPT_PRIVATE, conn);
|
||||
|
@@ -5,7 +5,7 @@
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
* Copyright (C) 2012 - 2015, 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
|
||||
@@ -20,13 +20,13 @@
|
||||
*
|
||||
***************************************************************************/
|
||||
|
||||
/* <DESC>
|
||||
* Uses the "Streaming HTML parser" to extract the href pieces in a streaming
|
||||
* manner from a downloaded HTML.
|
||||
* </DESC>
|
||||
*/
|
||||
/*
|
||||
* This example uses the "Streaming HTML parser" to extract the href pieces in
|
||||
* a streaming manner from a downloaded HTML. Kindly donated by Michał
|
||||
* Kowalczyk.
|
||||
*
|
||||
* The parser is found at
|
||||
* http://code.google.com/p/htmlstreamparser/
|
||||
* The HTML parser is found at http://code.google.com/p/htmlstreamparser/
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
|
@@ -5,7 +5,7 @@
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
* Copyright (C) 1998 - 2015, 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
|
||||
@@ -19,13 +19,12 @@
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
/* Download a document and use libtidy to parse the HTML.
|
||||
* Written by Jeff Pohlmeyer
|
||||
*
|
||||
/* <DESC>
|
||||
* Download a document and use libtidy to parse the HTML.
|
||||
* </DESC>
|
||||
*/
|
||||
/*
|
||||
* LibTidy => http://tidy.sourceforge.net
|
||||
*
|
||||
* gcc -Wall -I/usr/local/include tidycurl.c -lcurl -ltidy -o tidycurl
|
||||
*
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
|
@@ -5,7 +5,7 @@
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
* Copyright (C) 1998 - 2015, 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
|
||||
@@ -19,8 +19,10 @@
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
// Get a web page, parse it with libxml.
|
||||
//
|
||||
/* <DESC>
|
||||
* Get a web page, extract the title with libxml.
|
||||
* </DESC>
|
||||
*/
|
||||
// Written by Lars Nilsson
|
||||
//
|
||||
// GNU C++ compile command line suggestion (edit paths accordingly):
|
||||
|
@@ -5,7 +5,7 @@
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
* Copyright (C) 1998 - 2015, 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
|
||||
@@ -19,6 +19,10 @@
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
/* <DESC>
|
||||
* simple HTTP POST using the easy interface
|
||||
* </DESC>
|
||||
*/
|
||||
#include <stdio.h>
|
||||
#include <curl/curl.h>
|
||||
|
||||
|
@@ -19,6 +19,10 @@
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
/* <DESC>
|
||||
* Multiplexed HTTP/2 downloads over a single connection
|
||||
* </DESC>
|
||||
*/
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
|
317
docs/examples/http2-serverpush.c
Normal file
317
docs/examples/http2-serverpush.c
Normal file
@@ -0,0 +1,317 @@
|
||||
/***************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2015, 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 http://curl.haxx.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.
|
||||
*
|
||||
***************************************************************************/
|
||||
/* <DESC>
|
||||
* HTTP/2 server push
|
||||
* </DESC>
|
||||
*/
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
/* somewhat unix-specific */
|
||||
#include <sys/time.h>
|
||||
#include <unistd.h>
|
||||
|
||||
/* curl stuff */
|
||||
#include <curl/curl.h>
|
||||
|
||||
#ifndef CURLPIPE_MULTIPLEX
|
||||
#error "too old libcurl, can't do HTTP/2 server push!"
|
||||
#endif
|
||||
|
||||
static
|
||||
void dump(const char *text, unsigned char *ptr, size_t size,
|
||||
char nohex)
|
||||
{
|
||||
size_t i;
|
||||
size_t c;
|
||||
|
||||
unsigned int width=0x10;
|
||||
|
||||
if(nohex)
|
||||
/* without the hex output, we can fit more on screen */
|
||||
width = 0x40;
|
||||
|
||||
fprintf(stderr, "%s, %ld bytes (0x%lx)\n",
|
||||
text, (long)size, (long)size);
|
||||
|
||||
for(i=0; i<size; i+= width) {
|
||||
|
||||
fprintf(stderr, "%4.4lx: ", (long)i);
|
||||
|
||||
if(!nohex) {
|
||||
/* hex not disabled, show it */
|
||||
for(c = 0; c < width; c++)
|
||||
if(i+c < size)
|
||||
fprintf(stderr, "%02x ", ptr[i+c]);
|
||||
else
|
||||
fputs(" ", stderr);
|
||||
}
|
||||
|
||||
for(c = 0; (c < width) && (i+c < size); c++) {
|
||||
/* check for 0D0A; if found, skip past and start a new line of output */
|
||||
if (nohex && (i+c+1 < size) && ptr[i+c]==0x0D && ptr[i+c+1]==0x0A) {
|
||||
i+=(c+2-width);
|
||||
break;
|
||||
}
|
||||
fprintf(stderr, "%c",
|
||||
(ptr[i+c]>=0x20) && (ptr[i+c]<0x80)?ptr[i+c]:'.');
|
||||
/* check again for 0D0A, to avoid an extra \n if it's at width */
|
||||
if (nohex && (i+c+2 < size) && ptr[i+c+1]==0x0D && ptr[i+c+2]==0x0A) {
|
||||
i+=(c+3-width);
|
||||
break;
|
||||
}
|
||||
}
|
||||
fputc('\n', stderr); /* newline */
|
||||
}
|
||||
}
|
||||
|
||||
static
|
||||
int my_trace(CURL *handle, curl_infotype type,
|
||||
char *data, size_t size,
|
||||
void *userp)
|
||||
{
|
||||
const char *text;
|
||||
(void)handle; /* prevent compiler warning */
|
||||
(void)userp;
|
||||
switch (type) {
|
||||
case CURLINFO_TEXT:
|
||||
fprintf(stderr, "== Info: %s", data);
|
||||
default: /* in case a new one is introduced to shock us */
|
||||
return 0;
|
||||
|
||||
case CURLINFO_HEADER_OUT:
|
||||
text = "=> Send header";
|
||||
break;
|
||||
case CURLINFO_DATA_OUT:
|
||||
text = "=> Send data";
|
||||
break;
|
||||
case CURLINFO_SSL_DATA_OUT:
|
||||
text = "=> Send SSL data";
|
||||
break;
|
||||
case CURLINFO_HEADER_IN:
|
||||
text = "<= Recv header";
|
||||
break;
|
||||
case CURLINFO_DATA_IN:
|
||||
text = "<= Recv data";
|
||||
break;
|
||||
case CURLINFO_SSL_DATA_IN:
|
||||
text = "<= Recv SSL data";
|
||||
break;
|
||||
}
|
||||
|
||||
dump(text, (unsigned char *)data, size, 1);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void setup(CURL *hnd)
|
||||
{
|
||||
FILE *out = fopen("dl", "wb");
|
||||
|
||||
/* write to this file */
|
||||
curl_easy_setopt(hnd, CURLOPT_WRITEDATA, out);
|
||||
|
||||
/* set the same URL */
|
||||
curl_easy_setopt(hnd, CURLOPT_URL, "https://localhost:8443/index.html");
|
||||
|
||||
/* send it verbose for max debuggaility */
|
||||
curl_easy_setopt(hnd, CURLOPT_VERBOSE, 1L);
|
||||
curl_easy_setopt(hnd, CURLOPT_DEBUGFUNCTION, my_trace);
|
||||
|
||||
/* HTTP/2 please */
|
||||
curl_easy_setopt(hnd, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_2_0);
|
||||
|
||||
/* we use a self-signed test server, skip verification during debugging */
|
||||
curl_easy_setopt(hnd, CURLOPT_SSL_VERIFYPEER, 0L);
|
||||
curl_easy_setopt(hnd, CURLOPT_SSL_VERIFYHOST, 0L);
|
||||
|
||||
#if (CURLPIPE_MULTIPLEX > 0)
|
||||
/* wait for pipe connection to confirm */
|
||||
curl_easy_setopt(hnd, CURLOPT_PIPEWAIT, 1L);
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
/* called when there's an incoming push */
|
||||
static int server_push_callback(CURL *parent,
|
||||
CURL *easy,
|
||||
size_t num_headers,
|
||||
struct curl_pushheaders *headers,
|
||||
void *userp)
|
||||
{
|
||||
char *headp;
|
||||
size_t i;
|
||||
int *transfers = (int *)userp;
|
||||
char filename[128];
|
||||
FILE *out;
|
||||
static unsigned int count = 0;
|
||||
|
||||
(void)parent; /* we have no use for this */
|
||||
|
||||
sprintf(filename, "push%u", count++);
|
||||
|
||||
/* here's a new stream, save it in a new file for each new push */
|
||||
out = fopen(filename, "wb");
|
||||
|
||||
/* write to this file */
|
||||
curl_easy_setopt(easy, CURLOPT_WRITEDATA, out);
|
||||
|
||||
fprintf(stderr, "**** push callback approves stream %u, got %d headers!\n",
|
||||
count, (int)num_headers);
|
||||
|
||||
for(i=0; i<num_headers; i++) {
|
||||
headp = curl_pushheader_bynum(headers, i);
|
||||
fprintf(stderr, "**** header %u: %s\n", (int)i, headp);
|
||||
}
|
||||
|
||||
headp = curl_pushheader_byname(headers, ":path");
|
||||
if(headp) {
|
||||
fprintf(stderr, "**** The PATH is %s\n", headp /* skip :path + colon */ );
|
||||
}
|
||||
|
||||
(*transfers)++; /* one more */
|
||||
return CURL_PUSH_OK;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Download a file over HTTP/2, take care of server push.
|
||||
*/
|
||||
int main(void)
|
||||
{
|
||||
CURL *easy;
|
||||
CURLM *multi_handle;
|
||||
int still_running; /* keep number of running handles */
|
||||
int transfers=1; /* we start with one */
|
||||
struct CURLMsg *m;
|
||||
|
||||
/* init a multi stack */
|
||||
multi_handle = curl_multi_init();
|
||||
|
||||
easy = curl_easy_init();
|
||||
|
||||
/* set options */
|
||||
setup(easy);
|
||||
|
||||
/* add the easy transfer */
|
||||
curl_multi_add_handle(multi_handle, easy);
|
||||
|
||||
curl_multi_setopt(multi_handle, CURLMOPT_PIPELINING, CURLPIPE_MULTIPLEX);
|
||||
curl_multi_setopt(multi_handle, CURLMOPT_PUSHFUNCTION, server_push_callback);
|
||||
curl_multi_setopt(multi_handle, CURLMOPT_PUSHDATA, &transfers);
|
||||
|
||||
/* we start some action by calling perform right away */
|
||||
curl_multi_perform(multi_handle, &still_running);
|
||||
|
||||
do {
|
||||
struct timeval timeout;
|
||||
int rc; /* select() return code */
|
||||
CURLMcode mc; /* curl_multi_fdset() return code */
|
||||
|
||||
fd_set fdread;
|
||||
fd_set fdwrite;
|
||||
fd_set fdexcep;
|
||||
int maxfd = -1;
|
||||
|
||||
long curl_timeo = -1;
|
||||
|
||||
FD_ZERO(&fdread);
|
||||
FD_ZERO(&fdwrite);
|
||||
FD_ZERO(&fdexcep);
|
||||
|
||||
/* set a suitable timeout to play around with */
|
||||
timeout.tv_sec = 1;
|
||||
timeout.tv_usec = 0;
|
||||
|
||||
curl_multi_timeout(multi_handle, &curl_timeo);
|
||||
if(curl_timeo >= 0) {
|
||||
timeout.tv_sec = curl_timeo / 1000;
|
||||
if(timeout.tv_sec > 1)
|
||||
timeout.tv_sec = 1;
|
||||
else
|
||||
timeout.tv_usec = (curl_timeo % 1000) * 1000;
|
||||
}
|
||||
|
||||
/* get file descriptors from the transfers */
|
||||
mc = curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd);
|
||||
|
||||
if(mc != CURLM_OK) {
|
||||
fprintf(stderr, "curl_multi_fdset() failed, code %d.\n", mc);
|
||||
break;
|
||||
}
|
||||
|
||||
/* On success the value of maxfd is guaranteed to be >= -1. We call
|
||||
select(maxfd + 1, ...); specially in case of (maxfd == -1) there are
|
||||
no fds ready yet so we call select(0, ...) --or Sleep() on Windows--
|
||||
to sleep 100ms, which is the minimum suggested value in the
|
||||
curl_multi_fdset() doc. */
|
||||
|
||||
if(maxfd == -1) {
|
||||
#ifdef _WIN32
|
||||
Sleep(100);
|
||||
rc = 0;
|
||||
#else
|
||||
/* Portable sleep for platforms other than Windows. */
|
||||
struct timeval wait = { 0, 100 * 1000 }; /* 100ms */
|
||||
rc = select(0, NULL, NULL, NULL, &wait);
|
||||
#endif
|
||||
}
|
||||
else {
|
||||
/* Note that on some platforms 'timeout' may be modified by select().
|
||||
If you need access to the original value save a copy beforehand. */
|
||||
rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout);
|
||||
}
|
||||
|
||||
switch(rc) {
|
||||
case -1:
|
||||
/* select error */
|
||||
break;
|
||||
case 0:
|
||||
default:
|
||||
/* timeout or readable/writable sockets */
|
||||
curl_multi_perform(multi_handle, &still_running);
|
||||
break;
|
||||
}
|
||||
|
||||
/*
|
||||
* A little caution when doing server push is that libcurl itself has
|
||||
* created and added one or more easy handles but we need to clean them up
|
||||
* when we are done.
|
||||
*/
|
||||
|
||||
do {
|
||||
int msgq = 0;;
|
||||
m = curl_multi_info_read(multi_handle, &msgq);
|
||||
if(m && (m->msg == CURLMSG_DONE)) {
|
||||
CURL *e = m->easy_handle;
|
||||
transfers--;
|
||||
curl_multi_remove_handle(multi_handle, e);
|
||||
curl_easy_cleanup(e);
|
||||
}
|
||||
} while(m);
|
||||
|
||||
} while(transfers); /* as long as we have transfers going */
|
||||
|
||||
curl_multi_cleanup(multi_handle);
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
@@ -19,6 +19,10 @@
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
/* <DESC>
|
||||
* Multiplexed HTTP/2 uploads over a single connection
|
||||
* </DESC>
|
||||
*/
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <fcntl.h>
|
||||
|
@@ -5,7 +5,7 @@
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
* Copyright (C) 1998 - 2015, 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
|
||||
@@ -19,6 +19,10 @@
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
/* <DESC>
|
||||
* HTTP request with custom modified, removed and added headers
|
||||
* </DESC>
|
||||
*/
|
||||
#include <stdio.h>
|
||||
#include <curl/curl.h>
|
||||
|
||||
|
@@ -5,7 +5,7 @@
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
* Copyright (C) 1998 - 2015, 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
|
||||
@@ -19,6 +19,10 @@
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
/* <DESC>
|
||||
* HTTP PUT with easy interface and read callback
|
||||
* </DESC>
|
||||
*/
|
||||
#include <stdio.h>
|
||||
#include <fcntl.h>
|
||||
#include <sys/stat.h>
|
||||
|
@@ -5,7 +5,7 @@
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
* Copyright (C) 1998 - 2015, 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
|
||||
@@ -19,6 +19,10 @@
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
/* <DESC>
|
||||
* Simple HTTPS GET
|
||||
* </DESC>
|
||||
*/
|
||||
#include <stdio.h>
|
||||
#include <curl/curl.h>
|
||||
|
||||
|
@@ -5,7 +5,7 @@
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
* Copyright (C) 1998 - 2015, 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
|
||||
@@ -19,6 +19,10 @@
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
/* <DESC>
|
||||
* Simple IMAP APPEND use
|
||||
* </DESC>
|
||||
*/
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <curl/curl.h>
|
||||
|
@@ -19,10 +19,6 @@
|
||||
# KIND, either express or implied.
|
||||
#
|
||||
###########################################################################
|
||||
#
|
||||
# Adapted for djgpp / Watt-32 / DOS by
|
||||
# Gisle Vanem <gvanem@broadpark.no>
|
||||
#
|
||||
|
||||
TOPDIR = ../..
|
||||
|
||||
|
@@ -5,7 +5,7 @@
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
* Copyright (C) 1998 - 2015, 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
|
||||
@@ -19,7 +19,10 @@
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
/* This is an example showing the multi interface and the debug callback. */
|
||||
/* <DESC>
|
||||
* multi interface and debug callback
|
||||
* </DESC>
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
@@ -5,7 +5,7 @@
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
* Copyright (C) 1998 - 2015, 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
|
||||
@@ -19,6 +19,10 @@
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
/* <DESC>
|
||||
* multi interface code doing two parallel HTTP transfers
|
||||
* </DESC>
|
||||
*/
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
|
@@ -5,7 +5,7 @@
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
* Copyright (C) 1998 - 2015, 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
|
||||
@@ -19,8 +19,11 @@
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
/* This is an example application source code using the multi interface
|
||||
* to do a multipart formpost without "blocking". */
|
||||
/* <DESC>
|
||||
* using the multi interface to do a multipart formpost without blocking
|
||||
* </DESC>
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <sys/time.h>
|
||||
|
@@ -5,7 +5,7 @@
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
* Copyright (C) 1998 - 2015, 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
|
||||
@@ -19,7 +19,10 @@
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
/* This is a very simple example using the multi interface. */
|
||||
/* <DESC>
|
||||
* using the multi interface to do a single download
|
||||
* </DESC>
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
@@ -76,7 +79,7 @@ int main(void)
|
||||
|
||||
if(mc != CURLM_OK)
|
||||
{
|
||||
fprintf(stderr, "curl_multi_fdset() failed, code %d.\n", mc);
|
||||
fprintf(stderr, "curl_multi_wait() failed, code %d.\n", mc);
|
||||
break;
|
||||
}
|
||||
|
||||
|
@@ -5,7 +5,7 @@
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
* Copyright (C) 1998 - 2015, 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
|
||||
@@ -20,6 +20,10 @@
|
||||
*
|
||||
***************************************************************************/
|
||||
|
||||
/* <DESC>
|
||||
* multi_socket API using libuv
|
||||
* </DESC>
|
||||
*/
|
||||
/* Example application code using the multi socket interface to download
|
||||
multiple files at once, but instead of using curl_multi_perform and
|
||||
curl_multi_wait, which uses select(), we use libuv.
|
||||
|
@@ -5,7 +5,7 @@
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
* Copyright (C) 1998 - 2015, 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
|
||||
@@ -19,8 +19,10 @@
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
/* A multi-threaded example that uses pthreads extensively to fetch
|
||||
* X remote files at once */
|
||||
/* <DESC>
|
||||
* A multi-threaded example that uses pthreads to fetch several files at once
|
||||
* </DESC>
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <pthread.h>
|
||||
|
@@ -5,7 +5,7 @@
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
* Copyright (C) 1998 - 2015, 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
|
||||
@@ -19,16 +19,17 @@
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
/* Example source code to show one way to set the necessary OpenSSL locking
|
||||
* callbacks if you want to do multi-threaded transfers with HTTPS/FTPS with
|
||||
* libcurl built to use OpenSSL.
|
||||
*
|
||||
/* <DESC>
|
||||
* one way to set the necessary OpenSSL locking callbacks if you want to do
|
||||
* multi-threaded transfers with HTTPS/FTPS with libcurl built to use OpenSSL.
|
||||
* </DESC>
|
||||
*/
|
||||
/*
|
||||
* This is not a complete stand-alone example.
|
||||
*
|
||||
* Author: Jeremy Brown
|
||||
*/
|
||||
|
||||
|
||||
#include <stdio.h>
|
||||
#include <pthread.h>
|
||||
#include <openssl/err.h>
|
||||
|
@@ -5,7 +5,7 @@
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
* Copyright (C) 1998 - 2015, 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
|
||||
@@ -19,6 +19,10 @@
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
/* <DESC>
|
||||
* re-using handles to do HTTP persistent connections
|
||||
* </DESC>
|
||||
*/
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include <curl/curl.h>
|
||||
|
@@ -5,7 +5,7 @@
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
* Copyright (C) 1998 - 2015, 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
|
||||
@@ -19,8 +19,10 @@
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
/* An example source code that issues a HTTP POST and we provide the actual
|
||||
/* <DESC>
|
||||
* An example source code that issues a HTTP POST and we provide the actual
|
||||
* data through a read callback.
|
||||
* </DESC>
|
||||
*/
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
@@ -1,63 +1,55 @@
|
||||
_ _ ____ _
|
||||
___| | | | _ \| |
|
||||
/ __| | | | |_) | |
|
||||
| (__| |_| | _ <| |___
|
||||
\___|\___/|_| \_\_____|
|
||||
|
||||
libcurl's binary interface
|
||||
|
||||
ABI - Application Binary Interface
|
||||
----------------------------------
|
||||
==================================
|
||||
|
||||
"ABI" describes the low-level interface between an application program and a
|
||||
library. Calling conventions, function arguments, return values, struct
|
||||
sizes/defines and more.
|
||||
"ABI" describes the low-level interface between an application program and a
|
||||
library. Calling conventions, function arguments, return values, struct
|
||||
sizes/defines and more.
|
||||
|
||||
[Wikipedia has a longer description](http://en.wikipedia.org/wiki/Application_binary_interface)
|
||||
[Wikipedia has a longer description](https://en.wikipedia.org/wiki/Application_binary_interface)
|
||||
|
||||
Upgrades
|
||||
--------
|
||||
|
||||
In the vast majority of all cases, a typical libcurl upgrade does not break
|
||||
the ABI at all. Your application can remain using libcurl just as before,
|
||||
only with less bugs and possibly with added new features. You need to read
|
||||
the release notes, and if they mention an ABI break/soname bump, you may
|
||||
have to verify that your application still builds fine and uses libcurl as
|
||||
it now is defined to work.
|
||||
In the vast majority of all cases, a typical libcurl upgrade does not break
|
||||
the ABI at all. Your application can remain using libcurl just as before,
|
||||
only with less bugs and possibly with added new features. You need to read
|
||||
the release notes, and if they mention an ABI break/soname bump, you may have
|
||||
to verify that your application still builds fine and uses libcurl as it now
|
||||
is defined to work.
|
||||
|
||||
Version Numbers
|
||||
---------------
|
||||
|
||||
In libcurl land, you really can't tell by the libcurl version number if that
|
||||
libcurl is binary compatible or not with another libcurl version.
|
||||
In libcurl land, you really can't tell by the libcurl version number if that
|
||||
libcurl is binary compatible or not with another libcurl version.
|
||||
|
||||
Soname Bumps
|
||||
------------
|
||||
|
||||
Whenever there are changes done to the library that will cause an ABI
|
||||
breakage, that may require your application to get attention or possibly be
|
||||
changed to adhere to new things, we will bump the soname. Then the library
|
||||
will get a different output name and thus can in fact be installed in
|
||||
parallel with an older installed lib (on most systems). Thus, old
|
||||
applications built against the previous ABI version will remain working and
|
||||
using the older lib, while newer applications build and use the newer one.
|
||||
Whenever there are changes done to the library that will cause an ABI
|
||||
breakage, that may require your application to get attention or possibly be
|
||||
changed to adhere to new things, we will bump the soname. Then the library
|
||||
will get a different output name and thus can in fact be installed in
|
||||
parallel with an older installed lib (on most systems). Thus, old
|
||||
applications built against the previous ABI version will remain working and
|
||||
using the older lib, while newer applications build and use the newer one.
|
||||
|
||||
During the first seven years of libcurl releases, there have only been four
|
||||
ABI breakages.
|
||||
During the first seven years of libcurl releases, there have only been four
|
||||
ABI breakages.
|
||||
|
||||
We are determined to bump the SONAME as rarely as possible. Ideally, we
|
||||
never do it again.
|
||||
We are determined to bump the SONAME as rarely as possible. Ideally, we
|
||||
never do it again.
|
||||
|
||||
Downgrades
|
||||
----------
|
||||
|
||||
Going to an older libcurl version from one you're currently using can be a
|
||||
tricky thing. Mostly we add features and options to newer libcurls as that
|
||||
won't break ABI or hamper existing applications. This has the implication
|
||||
that going backwards may get you in a situation where you pick a libcurl
|
||||
that doesn't support the options your application needs. Or possibly you
|
||||
even downgrade so far so you cross an ABI break border and thus a different
|
||||
soname, and then your application may need to adapt to the modified ABI.
|
||||
Going to an older libcurl version from one you're currently using can be a
|
||||
tricky thing. Mostly we add features and options to newer libcurls as that
|
||||
won't break ABI or hamper existing applications. This has the implication
|
||||
that going backwards may get you in a situation where you pick a libcurl that
|
||||
doesn't support the options your application needs. Or possibly you even
|
||||
downgrade so far so you cross an ABI break border and thus a different
|
||||
soname, and then your application may need to adapt to the modified ABI.
|
||||
|
||||
History
|
||||
-------
|
||||
|
@@ -29,18 +29,19 @@ man_MANS = curl_easy_cleanup.3 curl_easy_getinfo.3 curl_easy_init.3 \
|
||||
curl_formadd.3 curl_formfree.3 curl_getdate.3 curl_getenv.3 \
|
||||
curl_slist_append.3 curl_slist_free_all.3 curl_version.3 \
|
||||
curl_version_info.3 curl_escape.3 curl_unescape.3 curl_free.3 \
|
||||
curl_strequal.3 curl_mprintf.3 curl_global_init.3 curl_global_cleanup.3 \
|
||||
curl_multi_add_handle.3 curl_multi_cleanup.3 curl_multi_fdset.3 \
|
||||
curl_multi_info_read.3 curl_multi_init.3 curl_multi_perform.3 \
|
||||
curl_multi_remove_handle.3 curl_share_cleanup.3 curl_share_init.3 \
|
||||
curl_share_setopt.3 libcurl.3 libcurl-easy.3 libcurl-multi.3 \
|
||||
libcurl-share.3 libcurl-errors.3 curl_easy_strerror.3 \
|
||||
curl_strequal.3 curl_mprintf.3 curl_global_init.3 \
|
||||
curl_global_cleanup.3 curl_multi_add_handle.3 curl_multi_cleanup.3 \
|
||||
curl_multi_fdset.3 curl_multi_info_read.3 curl_multi_init.3 \
|
||||
curl_multi_perform.3 curl_multi_remove_handle.3 curl_share_cleanup.3 \
|
||||
curl_share_init.3 curl_share_setopt.3 libcurl.3 libcurl-easy.3 \
|
||||
libcurl-multi.3 libcurl-share.3 libcurl-errors.3 curl_easy_strerror.3 \
|
||||
curl_multi_strerror.3 curl_share_strerror.3 curl_global_init_mem.3 \
|
||||
libcurl-tutorial.3 curl_easy_reset.3 curl_easy_escape.3 \
|
||||
curl_easy_unescape.3 curl_multi_setopt.3 curl_multi_socket.3 \
|
||||
curl_multi_timeout.3 curl_formget.3 curl_multi_assign.3 \
|
||||
curl_easy_pause.3 curl_easy_recv.3 curl_easy_send.3 \
|
||||
curl_multi_socket_action.3 curl_multi_wait.3 libcurl-symbols.3
|
||||
curl_multi_socket_action.3 curl_multi_wait.3 libcurl-symbols.3 \
|
||||
libcurl-thread.3
|
||||
|
||||
HTMLPAGES = curl_easy_cleanup.html curl_easy_getinfo.html \
|
||||
curl_easy_init.html curl_easy_perform.html curl_easy_setopt.html \
|
||||
@@ -60,27 +61,28 @@ HTMLPAGES = curl_easy_cleanup.html curl_easy_getinfo.html \
|
||||
curl_easy_unescape.html curl_multi_setopt.html curl_multi_socket.html \
|
||||
curl_multi_timeout.html curl_formget.html curl_multi_assign.html \
|
||||
curl_easy_pause.html curl_easy_recv.html curl_easy_send.html \
|
||||
curl_multi_socket_action.html curl_multi_wait.html libcurl-symbols.html
|
||||
curl_multi_socket_action.html curl_multi_wait.html \
|
||||
libcurl-symbols.html libcurl-thread.html
|
||||
|
||||
PDFPAGES = curl_easy_cleanup.pdf curl_easy_getinfo.pdf \
|
||||
curl_easy_init.pdf curl_easy_perform.pdf curl_easy_setopt.pdf \
|
||||
curl_easy_duphandle.pdf curl_formadd.pdf curl_formfree.pdf \
|
||||
curl_getdate.pdf curl_getenv.pdf curl_slist_append.pdf \
|
||||
curl_slist_free_all.pdf curl_version.pdf curl_version_info.pdf \
|
||||
curl_getdate.pdf curl_getenv.pdf curl_slist_append.pdf \
|
||||
curl_slist_free_all.pdf curl_version.pdf curl_version_info.pdf \
|
||||
curl_escape.pdf curl_unescape.pdf curl_free.pdf curl_strequal.pdf \
|
||||
curl_mprintf.pdf curl_global_init.pdf curl_global_cleanup.pdf \
|
||||
curl_multi_add_handle.pdf curl_multi_cleanup.pdf curl_multi_fdset.pdf \
|
||||
curl_multi_info_read.pdf curl_multi_init.pdf curl_multi_perform.pdf \
|
||||
curl_multi_remove_handle.pdf curl_share_cleanup.pdf curl_share_init.pdf \
|
||||
curl_share_setopt.pdf libcurl.pdf libcurl-multi.pdf libcurl-easy.pdf \
|
||||
libcurl-share.pdf libcurl-errors.pdf curl_easy_strerror.pdf \
|
||||
curl_multi_strerror.pdf curl_share_strerror.pdf \
|
||||
curl_global_init_mem.pdf libcurl-tutorial.pdf curl_easy_reset.pdf \
|
||||
curl_easy_escape.pdf curl_easy_unescape.pdf curl_multi_setopt.pdf \
|
||||
curl_multi_socket.pdf curl_multi_timeout.pdf curl_formget.pdf \
|
||||
curl_multi_assign.pdf curl_easy_pause.pdf curl_easy_recv.pdf \
|
||||
curl_easy_send.pdf curl_multi_socket_action.pdf curl_multi_wait.pdf \
|
||||
libcurl-symbols.pdf
|
||||
curl_multi_remove_handle.pdf curl_share_cleanup.pdf \
|
||||
curl_share_init.pdf curl_share_setopt.pdf libcurl.pdf \
|
||||
libcurl-multi.pdf libcurl-easy.pdf libcurl-share.pdf \
|
||||
libcurl-errors.pdf curl_easy_strerror.pdf curl_multi_strerror.pdf \
|
||||
curl_share_strerror.pdf curl_global_init_mem.pdf libcurl-tutorial.pdf \
|
||||
curl_easy_reset.pdf curl_easy_escape.pdf curl_easy_unescape.pdf \
|
||||
curl_multi_setopt.pdf curl_multi_socket.pdf curl_multi_timeout.pdf \
|
||||
curl_formget.pdf curl_multi_assign.pdf curl_easy_pause.pdf \
|
||||
curl_easy_recv.pdf curl_easy_send.pdf curl_multi_socket_action.pdf \
|
||||
curl_multi_wait.pdf libcurl-symbols.pdf libcurl-thread.pdf
|
||||
|
||||
m4macrodir = $(datadir)/aclocal
|
||||
dist_m4macro_DATA = libcurl.m4
|
||||
|
@@ -26,7 +26,8 @@ curl_easy_escape - URL encodes the given string
|
||||
.SH SYNOPSIS
|
||||
.B #include <curl/curl.h>
|
||||
.sp
|
||||
.BI "char *curl_easy_escape( CURL *" curl ", char *" string ", int "length " );"
|
||||
.BI "char *curl_easy_escape( CURL *" curl ", const char *" string
|
||||
.BI ", int "length " );"
|
||||
.ad
|
||||
.SH DESCRIPTION
|
||||
This function converts the given input \fIstring\fP to a URL encoded string
|
||||
@@ -48,10 +49,10 @@ CURL *curl = curl_easy_init();
|
||||
if(curl) {
|
||||
char *output = curl_easy_escape(curl, "data to convert", 15);
|
||||
if(output) {
|
||||
printf("Encoded: %s\n", output);
|
||||
printf("Encoded: %s\\n", output);
|
||||
curl_free(output);
|
||||
}
|
||||
}}
|
||||
}
|
||||
.fi
|
||||
.SH "SEE ALSO"
|
||||
.BR curl_easy_unescape "(3), " curl_free "(3), " RFC 3986
|
||||
|
@@ -34,256 +34,190 @@ third argument \fBMUST\fP be a pointer to a long, a pointer to a char *, a
|
||||
pointer to a struct curl_slist * or a pointer to a double (as this
|
||||
documentation describes further down). The data pointed-to will be filled in
|
||||
accordingly and can be relied upon only if the function returns CURLE_OK. Use
|
||||
this function AFTER a performed transfer if you want to get transfer- oriented
|
||||
this function AFTER a performed transfer if you want to get transfer related
|
||||
data.
|
||||
|
||||
You should not free the memory returned by this function unless it is
|
||||
explicitly mentioned below.
|
||||
.SH AVAILABLE INFORMATION
|
||||
The following information can be extracted:
|
||||
|
||||
.IP CURLINFO_EFFECTIVE_URL
|
||||
Pass a pointer to a char pointer to receive the last used effective URL.
|
||||
Last used URL.
|
||||
See \fICURLINFO_EFFECTIVE_URL(3)\fP
|
||||
|
||||
.IP CURLINFO_RESPONSE_CODE
|
||||
Pass a pointer to a long to receive the last received HTTP, FTP or SMTP
|
||||
response code. This option was previously known as CURLINFO_HTTP_CODE in
|
||||
libcurl 7.10.7 and earlier. The value will be zero if no server response code
|
||||
has been received. Note that a proxy's CONNECT response should be read with
|
||||
\fICURLINFO_HTTP_CONNECTCODE\fP and not this.
|
||||
Last received response code.
|
||||
See \fICURLINFO_RESPONSE_CODE(3)\fP
|
||||
|
||||
Support for SMTP responses added in 7.25.0.
|
||||
.IP CURLINFO_HTTP_CONNECTCODE
|
||||
Pass a pointer to a long to receive the last received proxy response code to a
|
||||
CONNECT request.
|
||||
Last proxy CONNECT response code.
|
||||
See \fICURLINFO_HTTP_CONNECTCODE(3)\fP
|
||||
|
||||
.IP CURLINFO_FILETIME
|
||||
Pass a pointer to a long to receive the remote time of the retrieved document
|
||||
(in number of seconds since 1 jan 1970 in the GMT/UTC time zone). If you get
|
||||
-1, it can be because of many reasons (unknown, the server hides it or the
|
||||
server doesn't support the command that tells document time etc) and the time
|
||||
of the document is unknown. Note that you must tell the server to collect this
|
||||
information before the transfer is made, by using the
|
||||
\fICURLOPT_FILETIME(3)\fP option to \fIcurl_easy_setopt(3)\fP or you will
|
||||
unconditionally get a -1 back. (Added in 7.5)
|
||||
Remote time of the retrieved document.
|
||||
See \fICURLINFO_FILETIME(3)\fP
|
||||
|
||||
.IP CURLINFO_TOTAL_TIME
|
||||
Pass a pointer to a double to receive the total time in seconds for the
|
||||
previous transfer, including name resolving, TCP connect etc.
|
||||
Total time of previous transfer.
|
||||
See \fICURLINFO_TOTAL_TIME(3)\fP
|
||||
|
||||
.IP CURLINFO_NAMELOOKUP_TIME
|
||||
Pass a pointer to a double to receive the time, in seconds, it took from the
|
||||
start until the name resolving was completed.
|
||||
Time from start until name resolving completed.
|
||||
See \fICURLINFO_NAMELOOKUP_TIME(3)\fP
|
||||
|
||||
.IP CURLINFO_CONNECT_TIME
|
||||
Pass a pointer to a double to receive the time, in seconds, it took from the
|
||||
start until the connect to the remote host (or proxy) was completed.
|
||||
Time from start until remote host or proxy completed.
|
||||
See \fICURLINFO_CONNECT_TIME(3)\fP
|
||||
|
||||
.IP CURLINFO_APPCONNECT_TIME
|
||||
Pass a pointer to a double to receive the time, in seconds, it took from the
|
||||
start until the SSL/SSH connect/handshake to the remote host was completed.
|
||||
This time is most often very near to the PRETRANSFER time, except for cases
|
||||
such as HTTP pipelining where the pretransfer time can be delayed due to waits
|
||||
in line for the pipeline and more. (Added in 7.19.0)
|
||||
Time from start until SSL/SSH handshake completed.
|
||||
See \fICURLINFO_APPCONNECT_TIME(3)\fP
|
||||
|
||||
.IP CURLINFO_PRETRANSFER_TIME
|
||||
Pass a pointer to a double to receive the time, in seconds, it took from the
|
||||
start until the file transfer is just about to begin. This includes all
|
||||
pre-transfer commands and negotiations that are specific to the particular
|
||||
protocol(s) involved. It does \fInot\fP involve the sending of the protocol-
|
||||
specific request that triggers a transfer.
|
||||
Time from start until just before the transfer begins.
|
||||
See \fICURLINFO_PRETRANSFER_TIME(3)\fP
|
||||
|
||||
.IP CURLINFO_STARTTRANSFER_TIME
|
||||
Pass a pointer to a double to receive the time, in seconds, it took from the
|
||||
start until the first byte is received by libcurl. This includes
|
||||
CURLINFO_PRETRANSFER_TIME and also the time the server needs to calculate the
|
||||
result.
|
||||
Time from start until just when the first byte is received.
|
||||
See \fICURLINFO_STARTTRANSFER_TIME(3)\fP
|
||||
|
||||
.IP CURLINFO_REDIRECT_TIME
|
||||
Pass a pointer to a double to receive the total time, in seconds, it took for
|
||||
all redirection steps include name lookup, connect, pretransfer and transfer
|
||||
before final transaction was started. CURLINFO_REDIRECT_TIME contains the
|
||||
complete execution time for multiple redirections. (Added in 7.9.7)
|
||||
Time taken for all redirect steps before the final transfer.
|
||||
See \fICURLINFO_REDIRECT_TIME(3)\fP
|
||||
|
||||
.IP CURLINFO_REDIRECT_COUNT
|
||||
Pass a pointer to a long to receive the total number of redirections that were
|
||||
actually followed. (Added in 7.9.7)
|
||||
Total number of redirects that were followed.
|
||||
See \fICURLINFO_REDIRECT_COUNT(3)\fP
|
||||
|
||||
.IP CURLINFO_REDIRECT_URL
|
||||
Pass a pointer to a char pointer to receive the URL a redirect \fIwould\fP
|
||||
take you to if you would enable \fICURLOPT_FOLLOWLOCATION(3)\fP. This can come
|
||||
very handy if you think using the built-in libcurl redirect logic isn't good
|
||||
enough for you but you would still prefer to avoid implementing all the magic
|
||||
of figuring out the new URL. (Added in 7.18.2)
|
||||
URL a redirect would take you to, had you enabled redirects.
|
||||
See \fICURLINFO_REDIRECT_URL(3)\fP
|
||||
|
||||
.IP CURLINFO_SIZE_UPLOAD
|
||||
Pass a pointer to a double to receive the total amount of bytes that were
|
||||
uploaded.
|
||||
Number of bytes uploaded.
|
||||
See \fICURLINFO_SIZE_UPLOAD(3)\fP
|
||||
|
||||
.IP CURLINFO_SIZE_DOWNLOAD
|
||||
Pass a pointer to a double to receive the total amount of bytes that were
|
||||
downloaded. The amount is only for the latest transfer and will be reset again
|
||||
for each new transfer. This counts actual payload data, what's also commonly
|
||||
called body. All meta and header data are excluded and will not be counted in
|
||||
this number.
|
||||
Number of bytes downloaded.
|
||||
See \fICURLINFO_SIZE_DOWNLOAD(3)\fP
|
||||
|
||||
.IP CURLINFO_SPEED_DOWNLOAD
|
||||
Pass a pointer to a double to receive the average download speed that curl
|
||||
measured for the complete download. Measured in bytes/second.
|
||||
Average download speed.
|
||||
See \fICURLINFO_SPEED_DOWNLOAD(3)\fP
|
||||
|
||||
.IP CURLINFO_SPEED_UPLOAD
|
||||
Pass a pointer to a double to receive the average upload speed that curl
|
||||
measured for the complete upload. Measured in bytes/second.
|
||||
Average upload speed.
|
||||
See \fICURLINFO_SPEED_UPLOAD(3)\fP
|
||||
|
||||
.IP CURLINFO_HEADER_SIZE
|
||||
Pass a pointer to a long to receive the total size of all the headers
|
||||
received. Measured in number of bytes.
|
||||
Number of bytes of all headers received.
|
||||
See \fICURLINFO_HEADER_SIZE(3)\fP
|
||||
|
||||
.IP CURLINFO_REQUEST_SIZE
|
||||
Pass a pointer to a long to receive the total size of the issued
|
||||
requests. This is so far only for HTTP requests. Note that this may be more
|
||||
than one request if FOLLOWLOCATION is true.
|
||||
Number of bytes sent in the issued HTTP requests.
|
||||
See \fICURLINFO_REQUEST_SIZE(3)\fP
|
||||
|
||||
.IP CURLINFO_SSL_VERIFYRESULT
|
||||
Pass a pointer to a long to receive the result of the certification
|
||||
verification that was requested (using the \fICURLOPT_SSL_VERIFYPEER(3)\fP
|
||||
option to \fIcurl_easy_setopt(3)\fP).
|
||||
Certificate verification result.
|
||||
See \fICURLINFO_SSL_VERIFYRESULT(3)\fP
|
||||
|
||||
.IP CURLINFO_SSL_ENGINES
|
||||
Pass the address of a 'struct curl_slist *' to receive a linked-list of
|
||||
OpenSSL crypto-engines supported. Note that engines are normally implemented
|
||||
in separate dynamic libraries. Hence not all the returned engines may be
|
||||
available at run-time. \fBNOTE:\fP you must call \fIcurl_slist_free_all(3)\fP
|
||||
on the list pointer once you're done with it, as libcurl will not free the
|
||||
data for you. (Added in 7.12.3)
|
||||
A list of OpenSSL crypto engines.
|
||||
See \fICURLINFO_SSL_ENGINES(3)\fP
|
||||
|
||||
.IP CURLINFO_CONTENT_LENGTH_DOWNLOAD
|
||||
Pass a pointer to a double to receive the content-length of the download. This
|
||||
is the value read from the Content-Length: field. Since 7.19.4, this returns -1
|
||||
if the size isn't known.
|
||||
Content length from the Content-Length header.
|
||||
See \fICURLINFO_CONTENT_LENGTH_DOWNLOAD(3)\fP
|
||||
|
||||
.IP CURLINFO_CONTENT_LENGTH_UPLOAD
|
||||
Pass a pointer to a double to receive the specified size of the upload. Since
|
||||
7.19.4, this returns -1 if the size isn't known.
|
||||
Upload size.
|
||||
See \fICURLINFO_CONTENT_LENGTH_UPLOAD(3)\fP
|
||||
|
||||
.IP CURLINFO_CONTENT_TYPE
|
||||
Pass a pointer to a char pointer to receive the content-type of the downloaded
|
||||
object. This is the value read from the Content-Type: field. If you get NULL,
|
||||
it means that the server didn't send a valid Content-Type header or that the
|
||||
protocol used doesn't support this.
|
||||
Content type from the Content-Type header.
|
||||
See \fICURLINFO_CONTENT_TYPE(3)\fP
|
||||
|
||||
.IP CURLINFO_PRIVATE
|
||||
Pass a pointer to a char pointer to receive the pointer to the private data
|
||||
associated with the curl handle (set with the \fICURLOPT_PRIVATE(3)\fP option
|
||||
to \fIcurl_easy_setopt(3)\fP). Please note that for internal reasons, the
|
||||
value is returned as a char pointer, although effectively being a 'void *'.
|
||||
(Added in 7.10.3)
|
||||
User's private data pointer.
|
||||
See \fICURLINFO_PRIVATE(3)\fP
|
||||
|
||||
.IP CURLINFO_HTTPAUTH_AVAIL
|
||||
Pass a pointer to a long to receive a bitmask indicating the authentication
|
||||
method(s) available. The meaning of the bits is explained in the
|
||||
\fICURLOPT_HTTPAUTH(3)\fP option for \fIcurl_easy_setopt(3)\fP. (Added in
|
||||
7.10.8)
|
||||
Available HTTP authentication methods.
|
||||
See \fICURLINFO_HTTPAUTH_AVAIL(3)\fP
|
||||
|
||||
.IP CURLINFO_PROXYAUTH_AVAIL
|
||||
Pass a pointer to a long to receive a bitmask indicating the authentication
|
||||
method(s) available for your proxy authentication. (Added in 7.10.8)
|
||||
Available HTTP proxy authentication methods.
|
||||
See \fICURLINFO_PROXYAUTH_AVAIL(3)\fP
|
||||
|
||||
.IP CURLINFO_OS_ERRNO
|
||||
Pass a pointer to a long to receive the errno variable from a connect failure.
|
||||
Note that the value is only set on failure, it is not reset upon a
|
||||
successful operation. (Added in 7.12.2)
|
||||
The errno from the last failure to connect.
|
||||
See \fICURLINFO_OS_ERRNO(3)\fP
|
||||
|
||||
.IP CURLINFO_NUM_CONNECTS
|
||||
Pass a pointer to a long to receive how many new connections libcurl had to
|
||||
create to achieve the previous transfer (only the successful connects are
|
||||
counted). Combined with \fICURLINFO_REDIRECT_COUNT\fP you are able to know
|
||||
how many times libcurl successfully reused existing connection(s) or not. See
|
||||
the Connection Options of \fIcurl_easy_setopt(3)\fP to see how libcurl tries
|
||||
to make persistent connections to save time. (Added in 7.12.3)
|
||||
Number of new successful connections used for previous transfer.
|
||||
See \fICURLINFO_NUM_CONNECTS(3)\fP
|
||||
|
||||
.IP CURLINFO_PRIMARY_IP
|
||||
Pass a pointer to a char pointer to receive the pointer to a zero-terminated
|
||||
string holding the IP address of the most recent connection done with this
|
||||
\fBcurl\fP handle. This string may be IPv6 if that's enabled. Note that you
|
||||
get a pointer to a memory area that will be re-used at next request so you
|
||||
need to copy the string if you want to keep the information. (Added in 7.19.0)
|
||||
IP address of the last connection.
|
||||
See \fICURLINFO_PRIMARY_IP(3)\fP
|
||||
|
||||
.IP CURLINFO_PRIMARY_PORT
|
||||
Pass a pointer to a long to receive the destination port of the most recent
|
||||
connection done with this \fBcurl\fP handle. (Added in 7.21.0)
|
||||
Port of the last connection.
|
||||
See \fICURLINFO_PRIMARY_PORT(3)\fP
|
||||
|
||||
.IP CURLINFO_LOCAL_IP
|
||||
Pass a pointer to a char pointer to receive the pointer to a zero-terminated
|
||||
string holding the local (source) IP address of the most recent connection done
|
||||
with this \fBcurl\fP handle. This string may be IPv6 if that's enabled. The
|
||||
same restrictions apply as to \fICURLINFO_PRIMARY_IP\fP. (Added in 7.21.0)
|
||||
Local-end IP address of last connection.
|
||||
See \fICURLINFO_LOCAL_IP(3)\fP
|
||||
|
||||
.IP CURLINFO_LOCAL_PORT
|
||||
Pass a pointer to a long to receive the local (source) port of the most recent
|
||||
connection done with this \fBcurl\fP handle. (Added in 7.21.0)
|
||||
Local-end port of last connection.
|
||||
See \fICURLINFO_LOCAL_PORT(3)\fP
|
||||
|
||||
.IP CURLINFO_COOKIELIST
|
||||
Pass a pointer to a 'struct curl_slist *' to receive a linked-list of all
|
||||
cookies cURL knows (expired ones, too). Don't forget to
|
||||
\fIcurl_slist_free_all(3)\fP the list after it has been used. If there are no
|
||||
cookies (cookies for the handle have not been enabled or simply none have been
|
||||
received) 'struct curl_slist *' will be set to point to NULL. (Added in
|
||||
7.14.1)
|
||||
List of all known cookies.
|
||||
See \fICURLINFO_COOKIELIST(3)\fP
|
||||
|
||||
.IP CURLINFO_LASTSOCKET
|
||||
Pass a pointer to a long to receive the last socket used by this curl
|
||||
session. If the socket is no longer valid, -1 is returned. When you finish
|
||||
working with the socket, you must call curl_easy_cleanup() as usual and let
|
||||
libcurl close the socket and cleanup other resources associated with the
|
||||
handle. This is typically used in combination with
|
||||
\fICURLOPT_CONNECT_ONLY(3)\fP. (Added in 7.15.2)
|
||||
Last socket used.
|
||||
See \fICURLINFO_LASTSOCKET(3)\fP
|
||||
|
||||
.IP CURLINFO_ACTIVESOCKET
|
||||
The session's active socket.
|
||||
See \fICURLINFO_ACTIVESOCKET(3)\fP
|
||||
|
||||
NOTE: this API is not really working on win64, since the SOCKET type on win64
|
||||
is 64 bit large while its 'long' is only 32 bits.
|
||||
.IP CURLINFO_FTP_ENTRY_PATH
|
||||
Pass a pointer to a char pointer to receive a pointer to a string holding the
|
||||
path of the entry path. That is the initial path libcurl ended up in when
|
||||
logging on to the remote FTP server. This stores a NULL as pointer if
|
||||
something is wrong. (Added in 7.15.4)
|
||||
The entry path after logging in to an FTP server.
|
||||
See \fICURLINFO_FTP_ENTRY_PATH(3)\fP
|
||||
|
||||
Also works for SFTP since 7.21.4
|
||||
.IP CURLINFO_CERTINFO
|
||||
Pass a pointer to a 'struct curl_certinfo *' and you'll get it set to point to
|
||||
struct that holds a number of linked lists with info about the certificate
|
||||
chain, assuming you had \fICURLOPT_CERTINFO(3)\fP enabled when the previous
|
||||
request was done. The struct reports how many certs it found and then you can
|
||||
extract info for each of those certs by following the linked lists. The info
|
||||
chain is provided in a series of data in the format "name:content" where the
|
||||
content is for the specific named data. See also the certinfo.c example. NOTE:
|
||||
this option is only available in libcurl built with OpenSSL, NSS or GSKit
|
||||
support. (Added in 7.19.1)
|
||||
Certificate chain.
|
||||
See \fICURLINFO_CERTINFO(3)\fP
|
||||
|
||||
.IP CURLINFO_TLS_SESSION
|
||||
Pass a pointer to a 'struct curl_tlssessioninfo *'. The pointer will be
|
||||
initialized to refer to a 'struct curl_tlssessioninfo *' that will contain an
|
||||
enum indicating the SSL library used for the handshake and the respective
|
||||
internal TLS session structure of this underlying SSL library.
|
||||
|
||||
This may then be used to extract certificate information in a format
|
||||
convenient for further processing, such as manual validation. NOTE: this
|
||||
option may not be available for all SSL backends; unsupported SSL backends
|
||||
will return 'CURLSSLBACKEND_NONE' to indicate that they are not supported;
|
||||
this does not mean that no SSL backend was used. (Added in 7.34.0)
|
||||
|
||||
.nf
|
||||
struct curl_tlssessioninfo {
|
||||
curl_sslbackend backend;
|
||||
void *internals;
|
||||
};
|
||||
.fi
|
||||
|
||||
The \fIinternals\fP struct member will point to a TLS library specific pointer
|
||||
with the following underlying types:
|
||||
.RS
|
||||
.IP OpenSSL
|
||||
SSL_CTX *
|
||||
.IP GnuTLS
|
||||
gnutls_session_t
|
||||
.IP NSS
|
||||
PRFileDesc *
|
||||
.IP gskit
|
||||
gsk_handle
|
||||
.RE
|
||||
TLS session info that can be used for further processing.
|
||||
See \fICURLINFO_TLS_SESSION(3)\fP
|
||||
|
||||
.IP CURLINFO_CONDITION_UNMET
|
||||
Pass a pointer to a long to receive the number 1 if the condition provided in
|
||||
the previous request didn't match (see \fICURLOPT_TIMECONDITION(3)\fP). Alas,
|
||||
if this returns a 1 you know that the reason you didn't get data in return is
|
||||
because it didn't fulfill the condition. The long ths argument points to will
|
||||
get a zero stored if the condition instead was met. (Added in 7.19.4)
|
||||
Whether or not a time conditional was met.
|
||||
See \fICURLINFO_CONDITION_UNMET(3)\fP
|
||||
|
||||
.IP CURLINFO_RTSP_SESSION_ID
|
||||
Pass a pointer to a char pointer to receive a pointer to a string holding the
|
||||
most recent RTSP Session ID.
|
||||
RTSP session ID.
|
||||
See \fICURLINFO_RTSP_SESSION_ID(3)\fP
|
||||
|
||||
Applications wishing to resume an RTSP session on another connection should
|
||||
retrieve this info before closing the active connection.
|
||||
.IP CURLINFO_RTSP_CLIENT_CSEQ
|
||||
Pass a pointer to a long to receive the next CSeq that will be used by the
|
||||
application.
|
||||
RTSP CSeq that will next be used.
|
||||
See \fICURLINFO_RTSP_CLIENT_CSEQ(3)\fP
|
||||
|
||||
.IP CURLINFO_RTSP_SERVER_CSEQ
|
||||
Pass a pointer to a long to receive the next server CSeq that will be expected
|
||||
by the application.
|
||||
RTSP CSeq that will next be expected.
|
||||
See \fICURLINFO_RTSP_SERVER_CSEQ(3)\fP
|
||||
|
||||
\fI(NOTE: listening for server initiated requests is currently
|
||||
unimplemented).\fP
|
||||
|
||||
Applications wishing to resume an RTSP session on another connection should
|
||||
retrieve this info before closing the active connection.
|
||||
.IP CURLINFO_RTSP_CSEQ_RECV
|
||||
Pass a pointer to a long to receive the most recently received CSeq from the
|
||||
server. If your application encounters a \fICURLE_RTSP_CSEQ_ERROR\fP then you
|
||||
may wish to troubleshoot and/or fix the CSeq mismatch by peeking at this value.
|
||||
RTSP CSeq last received.
|
||||
See \fICURLINFO_RTSP_CSEQ_RECV(3)\fP
|
||||
|
||||
.SH TIMES
|
||||
.nf
|
||||
An overview of the six time values available from curl_easy_getinfo()
|
||||
|
@@ -62,7 +62,7 @@ function is called again without this bit set. Thus, the read callback
|
||||
.IP CURLPAUSE_ALL
|
||||
Convenience define that pauses both directions.
|
||||
.IP CURLPAUSE_CONT
|
||||
Convenience define that unpauses both directions
|
||||
Convenience define that unpauses both directions.
|
||||
.SH RETURN VALUE
|
||||
CURLE_OK (zero) means that the option was set properly, and a non-zero return
|
||||
code means something wrong occurred after the new state was set. See the
|
||||
|
@@ -42,14 +42,14 @@ buffer. The variable \fBn\fP points to will receive the number of received
|
||||
bytes.
|
||||
|
||||
To establish the connection, set \fBCURLOPT_CONNECT_ONLY(3)\fP option before
|
||||
calling \fIcurl_easy_perform(3)\fP or \cIcurl_multi_perform(3)\fP. Note that
|
||||
calling \fIcurl_easy_perform(3)\fP or \fIcurl_multi_perform(3)\fP. Note that
|
||||
\fIcurl_easy_recv(3)\fP does not work on connections that were created without
|
||||
this option.
|
||||
|
||||
You must ensure that the socket has data to read before calling
|
||||
\fIcurl_easy_recv(3)\fP, otherwise the call will return \fBCURLE_AGAIN\fP -
|
||||
the socket is used in non-blocking mode internally. Use
|
||||
\fIcurl_easy_getinfo(3)\fP with \fBCURLINFO_LASTSOCKET\fP to obtain the
|
||||
\fIcurl_easy_getinfo(3)\fP with \fBCURLINFO_ACTIVESOCKET(3)\fP to obtain the
|
||||
socket; use your operating system facilities like \fIselect(2)\fP to check if
|
||||
it has any data you can read.
|
||||
.SH AVAILABILITY
|
||||
|
@@ -47,7 +47,7 @@ this option.
|
||||
You must ensure that the socket is writable before calling
|
||||
\fIcurl_easy_send(3)\fP, otherwise the call will return \fBCURLE_AGAIN\fP -
|
||||
the socket is used in non-blocking mode internally. Use
|
||||
\fIcurl_easy_getinfo(3)\fP with \fBCURLINFO_LASTSOCKET\fP to obtain the
|
||||
\fIcurl_easy_getinfo(3)\fP with \fBCURLINFO_ACTIVESOCKET(3)\fP to obtain the
|
||||
socket; use your operating system facilities like \fIselect(2)\fP to check if
|
||||
it can be written to.
|
||||
.SH AVAILABILITY
|
||||
|
@@ -50,6 +50,8 @@ really \fICURLOPT_POSTFIELDS(3)\fP, but the alternative that copies the string
|
||||
\fICURLOPT_COPYPOSTFIELDS(3)\fP has some usage characteristics you need to
|
||||
read up on.
|
||||
|
||||
The order in which the options are set does not matter.
|
||||
|
||||
Before version 7.17.0, strings were not copied. Instead the user was forced
|
||||
keep them available until libcurl no longer needed them.
|
||||
|
||||
@@ -151,6 +153,8 @@ Disable squashing /../ and /./ sequences in the path. See \fICURLOPT_PATH_AS_IS(
|
||||
Allowed protocols. See \fICURLOPT_PROTOCOLS(3)\fP
|
||||
.IP CURLOPT_REDIR_PROTOCOLS
|
||||
Protocols to allow redirects to. See \fICURLOPT_REDIR_PROTOCOLS(3)\fP
|
||||
.IP CURLOPT_DEFAULT_PROTOCOL
|
||||
Default protocol. See \fICURLOPT_DEFAULT_PROTOCOL(3)\fP
|
||||
.IP CURLOPT_PROXY
|
||||
Proxy to use. See \fICURLOPT_PROXY(3)\fP
|
||||
.IP CURLOPT_PROXYPORT
|
||||
@@ -291,6 +295,15 @@ Disable Content decoding. See \fICURLOPT_HTTP_CONTENT_DECODING(3)\fP
|
||||
Disable Transfer decoding. See \fICURLOPT_HTTP_TRANSFER_DECODING(3)\fP
|
||||
.IP CURLOPT_EXPECT_100_TIMEOUT_MS
|
||||
100-continue timeout. See \fICURLOPT_EXPECT_100_TIMEOUT_MS(3)\fP
|
||||
.IP CURLOPT_PIPEWAIT
|
||||
Wait on connection to pipeline on it. See \fICURLOPT_PIPEWAIT(3)\fP
|
||||
.IP CURLOPT_STREAM_DEPENDS
|
||||
This HTTP/2 stream depends on another. See \fICURLOPT_STREAM_DEPENDS(3)\fP
|
||||
.IP CURLOPT_STREAM_DEPENDS_E
|
||||
This HTTP/2 stream depends on another exclusively. See
|
||||
\fICURLOPT_STREAM_DEPENDS_E(3)\fP
|
||||
.IP CURLOPT_STREAM_WEIGHT
|
||||
Set this HTTP/2 stream's weight. See \fICURLOPT_STREAM_WEIGHT(3)\fP
|
||||
.SH SMTP OPTIONS
|
||||
.IP CURLOPT_MAIL_FROM
|
||||
Address of the sender. See \fICURLOPT_MAIL_FROM(3)\fP
|
||||
@@ -523,8 +536,8 @@ if(curl) {
|
||||
curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
|
||||
res = curl_easy_perform(curl);
|
||||
curl_easy_cleanup(curl);
|
||||
}}
|
||||
}
|
||||
.fi
|
||||
.SH "SEE ALSO"
|
||||
.BR curl_easy_init "(3), " curl_easy_cleanup "(3), " curl_easy_reset "(3), "
|
||||
.BR curl_multi_setopt "(3), "
|
||||
.BR curl_easy_getinfo "(3), " curl_multi_setopt "(3), "
|
||||
|
@@ -26,8 +26,8 @@ curl_easy_unescape - URL decodes the given string
|
||||
.SH SYNOPSIS
|
||||
.B #include <curl/curl.h>
|
||||
.sp
|
||||
.BI "char *curl_easy_unescape( CURL *" curl ", char *" url ", int "inlength
|
||||
.BI ", int *" outlength " );"
|
||||
.BI "char *curl_easy_unescape( CURL *" curl ", const char *" url
|
||||
.BI ", int "inlength ", int *" outlength " );"
|
||||
.ad
|
||||
.SH DESCRIPTION
|
||||
This function converts the given URL encoded input string to a "plain string"
|
||||
|
@@ -25,7 +25,7 @@ curl_escape - URL encodes the given string
|
||||
.SH SYNOPSIS
|
||||
.B #include <curl/curl.h>
|
||||
.sp
|
||||
.BI "char *curl_escape( char *" url ", int "length " );"
|
||||
.BI "char *curl_escape( const char *" url ", int "length " );"
|
||||
.ad
|
||||
.SH DESCRIPTION
|
||||
Obsolete function. Use \fIcurl_easy_escape(3)\fP instead!
|
||||
|
@@ -5,7 +5,7 @@
|
||||
.\" * | (__| |_| | _ <| |___
|
||||
.\" * \___|\___/|_| \_\_____|
|
||||
.\" *
|
||||
.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
.\" * Copyright (C) 1998 - 2015, 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
|
||||
@@ -83,7 +83,18 @@ to send away. libcurl will use the pointer and refer to the data in your
|
||||
application, so you must make sure it remains until curl no longer needs it.
|
||||
If the data isn't NUL-terminated, or if you'd like it to contain zero bytes,
|
||||
you must set its length with \fBCURLFORM_CONTENTSLENGTH\fP.
|
||||
.IP CURLFORM_CONTENTLEN
|
||||
followed by a curl_off_t value giving the length of the contents. Note that
|
||||
for \fICURLFORM_STREAM\fP contents, this option is mandatory.
|
||||
|
||||
If you pass a 0 (zero) for this option, libcurl will instead do a strlen() on
|
||||
the contents to figure out the size. If you really want to send a zero byte
|
||||
content then you must make sure strlen() on the data pointer returns zero.
|
||||
|
||||
(Option added in 7.46.0)
|
||||
.IP CURLFORM_CONTENTSLENGTH
|
||||
(This option is deprecated. Use \fICURLFORM_CONTENTLEN\fP instead!)
|
||||
|
||||
followed by a long giving the length of the contents. Note that for
|
||||
\fICURLFORM_STREAM\fP contents, this option is mandatory.
|
||||
|
||||
@@ -103,6 +114,9 @@ given file match one of the internally known file extensions. For
|
||||
providing multiple \fBCURLFORM_FILE\fP arguments each followed by the filename
|
||||
(and each \fICURLFORM_FILE\fP is allowed to have a
|
||||
\fICURLFORM_CONTENTTYPE\fP).
|
||||
|
||||
The given upload file has to exist in its full in the file system already when
|
||||
the upload starts, as libcurl needs to read the correct file size beforehand.
|
||||
.IP CURLFORM_CONTENTTYPE
|
||||
is used in combination with \fICURLFORM_FILE\fP. Followed by a pointer to a
|
||||
string which provides the content-type for this part, possibly instead of an
|
||||
|
@@ -5,7 +5,7 @@
|
||||
.\" * | (__| |_| | _ <| |___
|
||||
.\" * \___|\___/|_| \_\_____|
|
||||
.\" *
|
||||
.\" * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
.\" * Copyright (C) 1998 - 2015, 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
|
||||
@@ -26,7 +26,7 @@ curl_formget - serialize a previously built multipart/formdata HTTP POST chain
|
||||
.nf
|
||||
.B #include <curl/curl.h>
|
||||
|
||||
void curl_formget(struct curl_httppost * form, void *userp,
|
||||
int curl_formget(struct curl_httppost * form, void *userp,
|
||||
curl_formget_callback append );
|
||||
.SH DESCRIPTION
|
||||
curl_formget() is used to serialize data previously built/appended with
|
||||
|
@@ -36,11 +36,13 @@ This function works exactly as \fIcurl_global_init(3)\fP with one addition: it
|
||||
allows the application to set callbacks to replace the otherwise used internal
|
||||
memory functions.
|
||||
|
||||
This man page only adds documentation for the callbacks, see the
|
||||
\fIcurl_global_init(3)\fP man page for all the rest. When you use this
|
||||
function, all callback arguments must be set to valid function pointers.
|
||||
If you are using libcurl from multiple threads or libcurl was built with the
|
||||
threaded resolver option then the callback functions must be thread safe. The
|
||||
threaded resolver is a common build option to enable (and in some cases the
|
||||
default) so we strongly urge you to make your callback functions thread safe.
|
||||
|
||||
The prototypes for the given callbacks should match these:
|
||||
All callback arguments must be set to valid function pointers. The
|
||||
prototypes for the given callbacks must match these:
|
||||
.IP "void *malloc_callback(size_t size);"
|
||||
To replace malloc()
|
||||
.IP "void free_callback(void *ptr);"
|
||||
@@ -51,6 +53,9 @@ To replace realloc()
|
||||
To replace strdup()
|
||||
.IP "void *calloc_callback(size_t nmemb, size_t size);"
|
||||
To replace calloc()
|
||||
.RE
|
||||
This function is otherwise the same as \fIcurl_global_init(3)\fP, please refer
|
||||
to that man page for documentation.
|
||||
.SH "CAUTION"
|
||||
Manipulating these gives considerable powers to the application to severely
|
||||
screw things up for libcurl. Take care!
|
||||
|
@@ -31,7 +31,7 @@ CURLMcode curl_multi_add_handle(CURLM *multi_handle, CURL *easy_handle);
|
||||
Adds a standard easy handle to the multi stack. This function call will make
|
||||
this \fImulti_handle\fP control the specified \fIeasy_handle\fP.
|
||||
|
||||
While an easy handle is added to a multi stack, you can not and you must not
|
||||
While an easy handle is added to a multi stack, you cannot and you must not
|
||||
use \fIcurl_easy_perform(3)\fP on that handle. After having removed the easy
|
||||
handle from the multi stack again, it is perfectly fine to use it with the
|
||||
easy interface again.
|
||||
|
@@ -28,7 +28,7 @@ curl_multi_remove_handle - remove an easy handle from a multi session
|
||||
CURLMcode curl_multi_remove_handle(CURLM *multi_handle, CURL *easy_handle);
|
||||
.ad
|
||||
.SH DESCRIPTION
|
||||
Removes a given \fIeasy_handle\fI from the \fImulti_handle\fI. This will make
|
||||
Removes a given \fIeasy_handle\fP from the \fImulti_handle\fP. This will make
|
||||
the specified easy handle be removed from this multi handle's control.
|
||||
|
||||
When the easy handle has been removed from a multi stack, it is again
|
||||
|
@@ -5,7 +5,7 @@
|
||||
.\" * | (__| |_| | _ <| |___
|
||||
.\" * \___|\___/|_| \_\_____|
|
||||
.\" *
|
||||
.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
.\" * Copyright (C) 1998 - 2015, 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
|
||||
@@ -37,32 +37,36 @@ expects. Read this manual carefully as bad input values may cause libcurl to
|
||||
behave badly! You can only set one option in each function call.
|
||||
|
||||
.SH OPTIONS
|
||||
.IP CURLMOPT_SOCKETFUNCTION
|
||||
See \fICURLMOPT_SOCKETFUNCTION(3)\fP
|
||||
.IP CURLMOPT_SOCKETDATA
|
||||
See \fICURLMOPT_SOCKETDATA(3)\fP
|
||||
.IP CURLMOPT_PIPELINING
|
||||
See \fICURLMOPT_PIPELINING(3)\fP
|
||||
.IP CURLMOPT_TIMERFUNCTION
|
||||
See \fICURLMOPT_TIMERFUNCTION(3)\fP
|
||||
.IP CURLMOPT_TIMERDATA
|
||||
See \fICURLMOPT_TIMERDATA(3)\fP
|
||||
.IP CURLMOPT_MAXCONNECTS
|
||||
See \fICURLMOPT_MAXCONNECTS(3)\fP
|
||||
.IP CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE
|
||||
See \fICURLMOPT_CHUNK_LENGTH_PENALTY_SIZE(3)\fP
|
||||
.IP CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE
|
||||
See \fICURLMOPT_CONTENT_LENGTH_PENALTY_SIZE(3)\fP
|
||||
.IP CURLMOPT_MAX_HOST_CONNECTIONS
|
||||
See \fICURLMOPT_MAX_HOST_CONNECTIONS(3)\fP
|
||||
.IP CURLMOPT_MAX_PIPELINE_LENGTH
|
||||
See \fICURLMOPT_MAX_PIPELINE_LENGTH(3)\fP
|
||||
.IP CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE
|
||||
See \fICURLMOPT_CONTENT_LENGTH_PENALTY_SIZE(3)\fP
|
||||
.IP CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE
|
||||
See \fICURLMOPT_CHUNK_LENGTH_PENALTY_SIZE(3)\fP
|
||||
.IP CURLMOPT_MAX_TOTAL_CONNECTIONS
|
||||
See \fICURLMOPT_MAX_TOTAL_CONNECTIONS(3)\fP
|
||||
.IP CURLMOPT_MAXCONNECTS
|
||||
See \fICURLMOPT_MAXCONNECTS(3)\fP
|
||||
.IP CURLMOPT_PIPELINING
|
||||
See \fICURLMOPT_PIPELINING(3)\fP
|
||||
.IP CURLMOPT_PIPELINING_SITE_BL
|
||||
See \fICURLMOPT_PIPELINING_SITE_BL(3)\fP
|
||||
.IP CURLMOPT_PIPELINING_SERVER_BL
|
||||
See \fICURLMOPT_PIPELINING_SERVER_BL(3)\fP
|
||||
.IP CURLMOPT_MAX_TOTAL_CONNECTIONS
|
||||
See \fICURLMOPT_MAX_TOTAL_CONNECTIONS(3)\fP
|
||||
.IP CURLMOPT_PUSHFUNCTION
|
||||
See \fICURLMOPT_PUSHFUNCTION(3)\fP
|
||||
.IP CURLMOPT_PUSHDATA
|
||||
See \fICURLMOPT_PUSHDATA(3)\fP
|
||||
.IP CURLMOPT_SOCKETFUNCTION
|
||||
See \fICURLMOPT_SOCKETFUNCTION(3)\fP
|
||||
.IP CURLMOPT_SOCKETDATA
|
||||
See \fICURLMOPT_SOCKETDATA(3)\fP
|
||||
.IP CURLMOPT_TIMERFUNCTION
|
||||
See \fICURLMOPT_TIMERFUNCTION(3)\fP
|
||||
.IP CURLMOPT_TIMERDATA
|
||||
See \fICURLMOPT_TIMERDATA(3)\fP
|
||||
.SH RETURNS
|
||||
The standard CURLMcode for multi interface error codes. Note that it returns a
|
||||
CURLM_UNKNOWN_OPTION if you try setting an option that this version of libcurl
|
||||
|
@@ -5,7 +5,7 @@
|
||||
.\" * | (__| |_| | _ <| |___
|
||||
.\" * \___|\___/|_| \_\_____|
|
||||
.\" *
|
||||
.\" * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
.\" * Copyright (C) 1998 - 2015, 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
|
||||
@@ -46,6 +46,10 @@ pointer is returned.
|
||||
struct curl_slist *slist=NULL;
|
||||
|
||||
slist = curl_slist_append(slist, "pragma:");
|
||||
|
||||
if (slist == NULL)
|
||||
return -1;
|
||||
|
||||
curl_easy_setopt(handle, CURLOPT_HTTPHEADER, slist);
|
||||
|
||||
curl_easy_perform(handle);
|
||||
|
@@ -25,7 +25,7 @@ curl_unescape - URL decodes the given string
|
||||
.SH SYNOPSIS
|
||||
.B #include <curl/curl.h>
|
||||
.sp
|
||||
.BI "char *curl_unescape( char *" url ", int "length " );"
|
||||
.BI "char *curl_unescape( const char *" url ", int "length " );"
|
||||
.ad
|
||||
.SH DESCRIPTION
|
||||
Obsolete function. Use \fIcurl_easy_unescape(3)\fP instead!
|
||||
|
@@ -17,6 +17,7 @@
|
||||
<br><a href="libcurl-share.html">libcurl-share</a>
|
||||
<br><a href="libcurl-errors.html">libcurl-errors</a>
|
||||
<br><a href="libcurl-tutorial.html">libcurl-tutorial</a>
|
||||
<br><a href="libcurl-thread.html">libcurl-thread</a>
|
||||
|
||||
<H2>Library Functions (A-Z)</H2>
|
||||
<a href="curl_easy_cleanup.html">curl_easy_cleanup</A>
|
||||
|
@@ -5,7 +5,7 @@
|
||||
.\" * | (__| |_| | _ <| |___
|
||||
.\" * \___|\___/|_| \_\_____|
|
||||
.\" *
|
||||
.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
.\" * Copyright (C) 1998 - 2015, 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
|
||||
@@ -74,7 +74,7 @@ After having sent the FTP password to the server, libcurl expects a proper
|
||||
reply. This error code indicates that an unexpected code was returned.
|
||||
.IP "CURLE_FTP_ACCEPT_TIMEOUT (12)"
|
||||
During an active FTP session while waiting for the server to connect, the
|
||||
\fICURLOPT_ACCEPTTIMOUT_MS(3)\fP (or the internal default) timeout expired.
|
||||
\fICURLOPT_ACCEPTTIMEOUT_MS(3)\fP (or the internal default) timeout expired.
|
||||
.IP "CURLE_FTP_WEIRD_PASV_REPLY (13)"
|
||||
libcurl failed to get a sensible result back from the server as a response to
|
||||
either a PASV or a EPSV command. The server is flawed.
|
||||
@@ -247,6 +247,10 @@ Chunk callback reported error.
|
||||
.IP "CURLE_NO_CONNECTION_AVAILABLE (89)"
|
||||
(For internal use only, will never be returned by libcurl) No connection
|
||||
available, the session will be queued. (added in 7.30.0)
|
||||
.IP "CURLE_SSL_PINNEDPUBKEYNOTMATCH (90)"
|
||||
Failed to match the pinned key specified with \fICURLOPT_PINNEDPUBLICKEY(3)\fP.
|
||||
.IP "CURLE_SSL_INVALIDCERTSTATUS (91)"
|
||||
Status returned failure when asked with \fICURLOPT_SSL_VERIFYSTATUS(3)\fP.
|
||||
.IP "CURLE_OBSOLETE*"
|
||||
These error codes will never be returned. They were used in an old libcurl
|
||||
version and are currently unused.
|
||||
|
@@ -5,7 +5,7 @@
|
||||
.\" * | (__| |_| | _ <| |___
|
||||
.\" * \___|\___/|_| \_\_____|
|
||||
.\" *
|
||||
.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
.\" * Copyright (C) 1998 - 2015, 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
|
||||
@@ -51,28 +51,27 @@ To use the multi interface, you must first create a 'multi handle' with
|
||||
\fIcurl_multi_init(3)\fP. This handle is then used as input to all further
|
||||
curl_multi_* functions.
|
||||
|
||||
With a multi handle and the multi interface you can do any amount of
|
||||
simultaneous transfers in parallel. Each single transfer is built up around an
|
||||
easy handle. You must create the easy handles you need, and setup the
|
||||
appropriate options for each easy handle, as outlined in the \fIlibcurl(3)\fP
|
||||
man page, using \fIcurl_easy_setopt(3)\fP.
|
||||
With a multi handle and the multi interface you can do several simultaneous
|
||||
transfers in parallel. Each single transfer is built up around an easy
|
||||
handle. You create all the easy handles you need, and setup the appropriate
|
||||
options for each easy handle using \fIcurl_easy_setopt(3)\fP.
|
||||
|
||||
There are two flavours of the multi interface, the select() oriented one and
|
||||
the event based one we called multi_socket. You will benefit from reading
|
||||
through the description of both versions to full understand how they work and
|
||||
the event based one we call multi_socket. You will benefit from reading
|
||||
through the description of both versions to fully understand how they work and
|
||||
differentiate. We start out with the select() oriented version.
|
||||
|
||||
When an easy handle is setup for a transfer, then instead of using
|
||||
When an easy handle is setup and ready for transfer, then instead of using
|
||||
\fIcurl_easy_perform(3)\fP like when using the easy interface for transfers,
|
||||
you should add the easy handle to the multi handle with
|
||||
\fIcurl_multi_add_handle(3)\fP. The multi handle is sometimes referred to as a
|
||||
\'multi stack\' because of the fact that it may hold a large amount of easy
|
||||
handles.
|
||||
\fIcurl_multi_add_handle(3)\fP. You can add more easy handles to a multi
|
||||
handle at any point, even if other transfers are already running.
|
||||
|
||||
Should you change your mind, the easy handle is again removed from the multi
|
||||
stack using \fIcurl_multi_remove_handle(3)\fP. Once removed from the multi
|
||||
handle, you can again use other easy interface functions like
|
||||
\fIcurl_easy_perform(3)\fP on the handle or whatever you think is necessary.
|
||||
\fIcurl_easy_perform(3)\fP on the handle or whatever you think is
|
||||
necessary. You can remove handles at any point in time during transfers.
|
||||
|
||||
Adding the easy handle to the multi handle does not start the transfer.
|
||||
Remember that one of the main ideas with this interface is to let your
|
||||
@@ -84,16 +83,16 @@ current transfers in the multi stack that are ready to transfer anything. It
|
||||
may be all, it may be none. When there's nothing more to do for now, it
|
||||
returns back to the calling application.
|
||||
|
||||
Your application can acquire knowledge from libcurl when it would like to get
|
||||
invoked to transfer data, so that you don't have to busy-loop and call that
|
||||
\fIcurl_multi_perform(3)\fP like crazy. \fIcurl_multi_fdset(3)\fP offers an
|
||||
interface using which you can extract fd_sets from libcurl to use in select()
|
||||
or poll() calls in order to get to know when the transfers in the multi stack
|
||||
might need attention. This also makes it very easy for your program to wait
|
||||
for input on your own private file descriptors at the same time or perhaps
|
||||
timeout every now and then, should you want that. \fIcurl_multi_timeout(3)\fP
|
||||
also helps you with providing a suitable timeout period for your select()
|
||||
call.
|
||||
Your application extracts info from libcurl about when it would like to get
|
||||
invoked to transfer data or do other work. The most convenient way is to use
|
||||
\fIcurl_multi_wait(3)\fP that will help you wait until the application should
|
||||
call libcurl again. The older API to accomplish the same thing is
|
||||
\fIcurl_multi_fdset(3)\fP that extracts fd_sets from libcurl to use in
|
||||
select() or poll() calls in order to get to know when the transfers in the
|
||||
multi stack might need attention. Both these APIs allow for your program to
|
||||
wait for input on your own private file descriptors at the same time
|
||||
\fIcurl_multi_timeout(3)\fP also helps you with providing a suitable timeout
|
||||
period for your select() calls.
|
||||
|
||||
\fIcurl_multi_perform(3)\fP stores the number of still running transfers in
|
||||
one of its input arguments, and by reading that you can figure out when all
|
||||
@@ -114,9 +113,9 @@ the multi stack. You need to first remove the easy handle with
|
||||
\fIcurl_easy_cleanup(3)\fP, or possibly set new options to it and add it again
|
||||
with \fIcurl_multi_add_handle(3)\fP to start another transfer.
|
||||
|
||||
When all transfers in the multi stack are done, cleanup the multi handle with
|
||||
When all transfers in the multi stack are done, close the multi handle with
|
||||
\fIcurl_multi_cleanup(3)\fP. Be careful and please note that you \fBMUST\fP
|
||||
invoke separate \fIcurl_easy_cleanup(3)\fP calls on every single easy handle
|
||||
invoke separate \fIcurl_easy_cleanup(3)\fP calls for every single easy handle
|
||||
to clean them up properly.
|
||||
|
||||
If you want to re-use an easy handle that was added to the multi handle for
|
||||
|
95
docs/libcurl/libcurl-thread.3
Normal file
95
docs/libcurl/libcurl-thread.3
Normal file
@@ -0,0 +1,95 @@
|
||||
.\" **************************************************************************
|
||||
.\" * _ _ ____ _
|
||||
.\" * Project ___| | | | _ \| |
|
||||
.\" * / __| | | | |_) | |
|
||||
.\" * | (__| |_| | _ <| |___
|
||||
.\" * \___|\___/|_| \_\_____|
|
||||
.\" *
|
||||
.\" * Copyright (C) 2015, 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 http://curl.haxx.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.
|
||||
.\" *
|
||||
.\" **************************************************************************
|
||||
.\"
|
||||
.TH libcurl-thread 3 "13 Jul 2015" "libcurl" "libcurl thread safety"
|
||||
.SH NAME
|
||||
libcurl-thread \- libcurl thread safety
|
||||
.SH "Multi-threading with libcurl"
|
||||
libcurl is thread safe but has no internal thread synchronization. You may have
|
||||
to provide your own locking should you meet any of the thread safety exceptions
|
||||
below.
|
||||
|
||||
\fBHandles.\fP You must \fBnever\fP share the same handle in multiple threads.
|
||||
You can pass the handles around among threads, but you must never use a single
|
||||
handle from more than one thread at any given time.
|
||||
|
||||
\fBShared objects.\fP You can share certain data between multiple handles by
|
||||
using the share interface but you must provide your own locking and set
|
||||
\fIcurl_share_setopt(3)\fP CURLSHOPT_LOCKFUNC and CURLSHOPT_UNLOCKFUNC.
|
||||
.SH TLS
|
||||
If you are accessing HTTPS or FTPS URLs in a multi-threaded manner, you are
|
||||
then of course using the underlying SSL library multi-threaded and those libs
|
||||
might have their own requirements on this issue. You may need to provide one
|
||||
or two functions to allow it to function properly:
|
||||
.IP OpenSSL
|
||||
http://www.openssl.org/docs/crypto/threads.html#DESCRIPTION
|
||||
|
||||
http://curl.haxx.se/libcurl/c/opensslthreadlock.html
|
||||
.IP GnuTLS
|
||||
http://gnutls.org/manual/html_node/Thread-safety.html
|
||||
.IP NSS
|
||||
thread-safe already without anything required.
|
||||
.IP PolarSSL
|
||||
Required actions unknown.
|
||||
.IP yassl
|
||||
Required actions unknown.
|
||||
.IP axTLS
|
||||
Required actions unknown.
|
||||
.IP Secure-Transport
|
||||
The engine is used by libcurl in a way that is fully thread-safe.
|
||||
.IP WinSSL
|
||||
The engine is used by libcurl in a way that is fully thread-safe.
|
||||
.IP wolfSSL
|
||||
The engine is used by libcurl in a way that is fully thread-safe.
|
||||
.SH "Other areas of caution"
|
||||
.IP Signals
|
||||
Signals are used for timing out name resolves (during DNS lookup) - when built
|
||||
without using either the c-ares or threaded resolver backends. When using
|
||||
multiple threads you should set the \fICURLOPT_NOSIGNAL(3)\fP option to 1L for
|
||||
all handles. Everything will or might work fine except that timeouts are not
|
||||
honored during the DNS lookup - which you can work around by building libcurl
|
||||
with c-ares support. c-ares is a library that provides asynchronous name
|
||||
resolves. On some platforms, libcurl simply will not function properly
|
||||
multi-threaded unless this option is set.
|
||||
.IP "Name resolving"
|
||||
\fBgethostby* functions and other system calls.\fP These functions, provided
|
||||
by your operating system, must be thread safe. It is very important that
|
||||
libcurl can find and use thread safe versions of these and other system calls,
|
||||
as otherwise it can't function fully thread safe. Some operating systems are
|
||||
known to have faulty thread implementations. We have previously received
|
||||
problem reports on *BSD (at least in the past, they may be working fine these
|
||||
days). Some operating systems that are known to have solid and working thread
|
||||
support are Linux, Solaris and Windows.
|
||||
.IP "curl_global_* functions"
|
||||
These functions are not thread safe. If you are using libcurl with multiple
|
||||
threads it is especially important that before use you call
|
||||
\fIcurl_global_init(3)\fP or \fIcurl_global_init_mem(3)\fP to explicitly
|
||||
initialize the library and its dependents, rather than rely on the "lazy"
|
||||
fail-safe initialization that takes place the first time
|
||||
\fIcurl_easy_init(3)\fP is called. For an in-depth explanation refer to
|
||||
\fIlibcurl(3)\fP section \fBGLOBAL CONSTANTS\fP.
|
||||
.IP "Memory functions"
|
||||
These functions, provided either by your operating system or your own
|
||||
replacements, must be thread safe. You can use \fIcurl_global_init_mem(3)\fP
|
||||
to set your own replacement memory functions.
|
||||
.IP Non-safe functions
|
||||
\fICURLOPT_DNS_USE_GLOBAL_CACHE(3)\fP is not thread-safe.
|
@@ -256,58 +256,8 @@ complication for you. Given simply the URL to a file, libcurl will take care
|
||||
of all the details needed to get the file moved from one machine to another.
|
||||
|
||||
.SH "Multi-threading Issues"
|
||||
The first basic rule is that you must \fBnever\fP simultaneously share a
|
||||
libcurl handle (be it easy or multi or whatever) between multiple
|
||||
threads. Only use one handle in one thread at any time. You can pass the
|
||||
handles around among threads, but you must never use a single handle from more
|
||||
than one thread at any given time.
|
||||
|
||||
libcurl is completely thread safe, except for two issues: signals and SSL/TLS
|
||||
handlers. Signals are used for timing out name resolves (during DNS lookup) -
|
||||
when built without using either the c-ares or threaded resolver backends.
|
||||
|
||||
If you are accessing HTTPS or FTPS URLs in a multi-threaded manner, you are
|
||||
then of course using the underlying SSL library multi-threaded and those libs
|
||||
might have their own requirements on this issue. Basically, you need to
|
||||
provide one or two functions to allow it to function properly. For all
|
||||
details, see this:
|
||||
|
||||
OpenSSL
|
||||
|
||||
http://www.openssl.org/docs/crypto/threads.html#DESCRIPTION
|
||||
|
||||
GnuTLS
|
||||
|
||||
http://gnutls.org/manual/html_node/Thread-safety.html
|
||||
|
||||
NSS
|
||||
|
||||
is claimed to be thread-safe already without anything required.
|
||||
|
||||
PolarSSL
|
||||
|
||||
Required actions unknown.
|
||||
|
||||
yassl
|
||||
|
||||
Required actions unknown.
|
||||
|
||||
axTLS
|
||||
|
||||
Required actions unknown.
|
||||
|
||||
Secure Transport
|
||||
|
||||
The engine is fully thread-safe, and no additional steps are required.
|
||||
|
||||
When using multiple threads you should set the \fICURLOPT_NOSIGNAL(3)\fP
|
||||
option to 1 for all handles. Everything will or might work fine except that
|
||||
timeouts are not honored during the DNS lookup - which you can work around by
|
||||
building libcurl with c-ares support. c-ares is a library that provides
|
||||
asynchronous name resolves. On some platforms, libcurl simply will not
|
||||
function properly multi-threaded unless this option is set.
|
||||
|
||||
Also, note that \fICURLOPT_DNS_USE_GLOBAL_CACHE(3)\fP is not thread-safe.
|
||||
libcurl is thread safe but there are a few exceptions. Refer to
|
||||
\fIlibcurl-thread(3)\fP for more information.
|
||||
|
||||
.SH "When It Doesn't Work"
|
||||
There will always be times when the transfer fails for some reason. You might
|
||||
@@ -1005,7 +955,7 @@ or understand incoming cookies and they will just be ignored. However, when
|
||||
the parser is enabled the cookies will be understood and the cookies will be
|
||||
kept in memory and used properly in subsequent requests when the same handle
|
||||
is used. Many times this is enough, and you may not have to save the cookies
|
||||
to disk at all. Note that the file you specify to \ICURLOPT_COOKIEFILE(3)\fP
|
||||
to disk at all. Note that the file you specify to \fICURLOPT_COOKIEFILE(3)\fP
|
||||
doesn't have to exist to enable the parser, so a common way to just enable the
|
||||
parser and not read any cookies is to use the name of a file you know doesn't
|
||||
exist.
|
||||
@@ -1136,11 +1086,15 @@ NTLM authentication, HTTPS, FTPS, SCP and SFTP are a few examples.
|
||||
.IP "Redirects"
|
||||
The \fICURLOPT_FOLLOWLOCATION(3)\fP option automatically follows HTTP
|
||||
redirects sent by a remote server. These redirects can refer to any kind of
|
||||
URL, not just HTTP. A redirect to a file: URL would cause the libcurl to read
|
||||
(or write) arbitrary files from the local filesystem. If the application
|
||||
returns the data back to the user (as would happen in some kinds of CGI
|
||||
scripts), an attacker could leverage this to read otherwise forbidden data
|
||||
(e.g. file://localhost/etc/passwd).
|
||||
URL, not just HTTP. By default libcurl will allow all protocols on redirect
|
||||
except several disabled for security reasons: Since 7.19.4 FILE and SCP are
|
||||
disabled, and since 7.40.0 SMB and SMBS are also disabled.
|
||||
|
||||
A redirect to a file: URL would cause the libcurl to read (or write) arbitrary
|
||||
files from the local filesystem. If the application returns the data back to
|
||||
the user (as would happen in some kinds of CGI scripts), an attacker could
|
||||
leverage this to read otherwise forbidden data (e.g.
|
||||
file://localhost/etc/passwd).
|
||||
|
||||
If authentication credentials are stored in the ~/.netrc file, or Kerberos
|
||||
is in use, any other URL type (not just file:) that requires
|
||||
|
@@ -5,7 +5,7 @@
|
||||
.\" * | (__| |_| | _ <| |___
|
||||
.\" * \___|\___/|_| \_\_____|
|
||||
.\" *
|
||||
.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
.\" * Copyright (C) 1998 - 2015, 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
|
||||
@@ -97,8 +97,8 @@ Unix-like operating system that ship libcurl as part of their distributions
|
||||
often don't provide the curl-config tool, but simply install the library and
|
||||
headers in the common path for this purpose.
|
||||
|
||||
Many Linux and similar sytems use pkg-config to provide build and link options
|
||||
about libraries and libcurl supports that as well.
|
||||
Many Linux and similar systems use pkg-config to provide build and link
|
||||
options about libraries and libcurl supports that as well.
|
||||
.SH "LIBCURL SYMBOL NAMES"
|
||||
All public functions in the libcurl interface are prefixed with 'curl_' (with
|
||||
a lowercase c). You can find other functions in the library source code, but
|
||||
@@ -111,13 +111,8 @@ libcurl works
|
||||
.B exactly
|
||||
the same, on any of the platforms it compiles and builds on.
|
||||
.SH "THREADS"
|
||||
Never ever call curl-functions simultaneously using the same handle from
|
||||
several threads. libcurl is thread-safe and can be used in any number of
|
||||
threads, but you must use separate curl handles if you want to use libcurl in
|
||||
more than one thread simultaneously.
|
||||
|
||||
The global environment functions are not thread-safe. See \fBGLOBAL
|
||||
CONSTANTS\fP below for details.
|
||||
libcurl is thread safe but there are a few exceptions. Refer to
|
||||
\fIlibcurl-thread(3)\fP for more information.
|
||||
|
||||
.SH "PERSISTENT CONNECTIONS"
|
||||
Persistent connections means that libcurl can re-use the same connection for
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user