Compare commits
583 Commits
curl-7_15_
...
curl-7_15_
Author | SHA1 | Date | |
---|---|---|---|
![]() |
7010e5ea84 | ||
![]() |
2cba6b246d | ||
![]() |
52cc2a7a0c | ||
![]() |
c012e2b408 | ||
![]() |
646a6b604f | ||
![]() |
cca00a6378 | ||
![]() |
10b7fc7e51 | ||
![]() |
43e4544d51 | ||
![]() |
21aa8f0b45 | ||
![]() |
b708fa51ad | ||
![]() |
8709f6c4b3 | ||
![]() |
2ac560e58b | ||
![]() |
8f8ba9486d | ||
![]() |
f55924b3e0 | ||
![]() |
7240acdebc | ||
![]() |
b9b06b00bf | ||
![]() |
51f258d103 | ||
![]() |
4c75f1c7b7 | ||
![]() |
ed7bff1fec | ||
![]() |
01a79be2c9 | ||
![]() |
d211fcd34f | ||
![]() |
159834171e | ||
![]() |
8a38c72c48 | ||
![]() |
fbcdc192d5 | ||
![]() |
ee642859ef | ||
![]() |
9f579f12fc | ||
![]() |
825a526789 | ||
![]() |
ae8a01ead6 | ||
![]() |
9dde0b54a3 | ||
![]() |
f1343b2f55 | ||
![]() |
962b7985e6 | ||
![]() |
5a1c64d316 | ||
![]() |
01b2cf82ec | ||
![]() |
c033c4c71c | ||
![]() |
aa791ee5cf | ||
![]() |
305671e2ab | ||
![]() |
d654736834 | ||
![]() |
2c81bfead5 | ||
![]() |
77b3bc239d | ||
![]() |
c10d15aa0f | ||
![]() |
a88deadd6f | ||
![]() |
e6ea8f1199 | ||
![]() |
4d4151f6c1 | ||
![]() |
518becfe2e | ||
![]() |
6f6b93da02 | ||
![]() |
45b1843dc9 | ||
![]() |
cb86a302d8 | ||
![]() |
d15ed439ae | ||
![]() |
b765e1f3b7 | ||
![]() |
2527b53019 | ||
![]() |
78a47826b2 | ||
![]() |
ecfaa4f869 | ||
![]() |
f36adcdb73 | ||
![]() |
13616f8f96 | ||
![]() |
ab486d1e27 | ||
![]() |
9111909c1d | ||
![]() |
4a1a1a75fb | ||
![]() |
e4d6ade4b3 | ||
![]() |
c82e880f5b | ||
![]() |
f2aa3b21e0 | ||
![]() |
385db0e97d | ||
![]() |
4e58da5222 | ||
![]() |
1c6ebb0782 | ||
![]() |
7e8b84c3e7 | ||
![]() |
132067b081 | ||
![]() |
8c36fc8f31 | ||
![]() |
93858efe73 | ||
![]() |
ba7f27a3f6 | ||
![]() |
2f70fb7015 | ||
![]() |
655ec6bf8e | ||
![]() |
c4ad533300 | ||
![]() |
5cdbd0cf4a | ||
![]() |
a55c70d4ae | ||
![]() |
02938a010d | ||
![]() |
e40641bf7c | ||
![]() |
27c0b43897 | ||
![]() |
d46de5ab8b | ||
![]() |
73ebb0edde | ||
![]() |
684245d6ce | ||
![]() |
d157c29269 | ||
![]() |
4d2e81661b | ||
![]() |
483a586d55 | ||
![]() |
4ac54f8c2c | ||
![]() |
840aacf7dd | ||
![]() |
ab4256d53a | ||
![]() |
46c5e562bf | ||
![]() |
42f5a90d09 | ||
![]() |
ef82da93fb | ||
![]() |
06d05b18b2 | ||
![]() |
431c4bd6e3 | ||
![]() |
f72c4e82fd | ||
![]() |
9c83a20a27 | ||
![]() |
773bec5ae5 | ||
![]() |
f3c508f6e8 | ||
![]() |
2aa4710745 | ||
![]() |
3b0a920fad | ||
![]() |
daef1cf34d | ||
![]() |
bd8d4637a3 | ||
![]() |
d2cefc140a | ||
![]() |
ccfce89423 | ||
![]() |
700cd5805c | ||
![]() |
498aad8587 | ||
![]() |
73f407b7ae | ||
![]() |
4be7dcba48 | ||
![]() |
f0694c582e | ||
![]() |
f90f0c98d9 | ||
![]() |
95aecc5dbb | ||
![]() |
f975fd03a1 | ||
![]() |
8272874704 | ||
![]() |
86f4cead16 | ||
![]() |
88a1a10e6f | ||
![]() |
624e657210 | ||
![]() |
2278e8f1ba | ||
![]() |
58176d1484 | ||
![]() |
10489879f7 | ||
![]() |
fe22872d14 | ||
![]() |
4d95d23d99 | ||
![]() |
c6fc5a1a26 | ||
![]() |
012d75442a | ||
![]() |
dcc7900e7c | ||
![]() |
34f5e8ad0e | ||
![]() |
c2fee9894a | ||
![]() |
abd983e851 | ||
![]() |
28611704d9 | ||
![]() |
305dddeab0 | ||
![]() |
ee8112b42f | ||
![]() |
ca319f63ad | ||
![]() |
a09a8164db | ||
![]() |
e5cf6a20a7 | ||
![]() |
af5e6e7e6d | ||
![]() |
70f2b5e877 | ||
![]() |
8ef454dcbe | ||
![]() |
551a041283 | ||
![]() |
03288943af | ||
![]() |
725f734bae | ||
![]() |
0f32460656 | ||
![]() |
25180cc850 | ||
![]() |
2a0e41cab9 | ||
![]() |
05edd48ad0 | ||
![]() |
266ab95557 | ||
![]() |
0a4bba565c | ||
![]() |
2ddb9d57aa | ||
![]() |
4f012ad703 | ||
![]() |
a1cd180082 | ||
![]() |
bc2f0c7dcb | ||
![]() |
c6ae0ebcbf | ||
![]() |
c6ec576cbb | ||
![]() |
55329b56cb | ||
![]() |
7e43d06b60 | ||
![]() |
89f54f3739 | ||
![]() |
01fa02d0b5 | ||
![]() |
8bed45340a | ||
![]() |
55138753c6 | ||
![]() |
43369b8096 | ||
![]() |
bec1977137 | ||
![]() |
4c08eb4b11 | ||
![]() |
0163730437 | ||
![]() |
39745ac38e | ||
![]() |
cacf8bbb58 | ||
![]() |
a1c6d5861a | ||
![]() |
589c4596d8 | ||
![]() |
7a6d7fca42 | ||
![]() |
5305c9f1e8 | ||
![]() |
b1022ea4c1 | ||
![]() |
380a74a4ed | ||
![]() |
ff709848a6 | ||
![]() |
279dd6d878 | ||
![]() |
2e0ad842d0 | ||
![]() |
a3949c7786 | ||
![]() |
2320606262 | ||
![]() |
b01286d280 | ||
![]() |
64f72c22b9 | ||
![]() |
856114d05c | ||
![]() |
98b8c4b0c9 | ||
![]() |
01f5f0be5a | ||
![]() |
eb6d404753 | ||
![]() |
c508ab1aef | ||
![]() |
0793dc922c | ||
![]() |
00a41ab296 | ||
![]() |
37f4877e56 | ||
![]() |
a6fc45c02f | ||
![]() |
25411e01db | ||
![]() |
a8ac6f1dc1 | ||
![]() |
dfe1884c25 | ||
![]() |
3e5dcc8bcd | ||
![]() |
ff81900784 | ||
![]() |
4cb30a3057 | ||
![]() |
72f80b88f7 | ||
![]() |
3008d8133c | ||
![]() |
4524618bf2 | ||
![]() |
55d22ba10c | ||
![]() |
76cf020750 | ||
![]() |
f13ac35edf | ||
![]() |
59582a9d9d | ||
![]() |
6246bbc656 | ||
![]() |
1b028b419b | ||
![]() |
4c6c768422 | ||
![]() |
1d3969b215 | ||
![]() |
94116d9ebc | ||
![]() |
cc5174a89a | ||
![]() |
31552100c5 | ||
![]() |
8df5dcb193 | ||
![]() |
7929600798 | ||
![]() |
a05ea124b9 | ||
![]() |
6a03ab3ad4 | ||
![]() |
6a151c1312 | ||
![]() |
990e56fb13 | ||
![]() |
2bd3033f68 | ||
![]() |
fe105a07e3 | ||
![]() |
a5782defd3 | ||
![]() |
bcccd2fe74 | ||
![]() |
404e23734b | ||
![]() |
973d63f4f2 | ||
![]() |
405d98ee63 | ||
![]() |
f81724969d | ||
![]() |
edb5444fa3 | ||
![]() |
e877cb7bd7 | ||
![]() |
482b3ba702 | ||
![]() |
752acedc0b | ||
![]() |
fb88723afc | ||
![]() |
3718737091 | ||
![]() |
3d3f056f7e | ||
![]() |
c60621c367 | ||
![]() |
606562aa7e | ||
![]() |
f689d06ca9 | ||
![]() |
7cfd7f3fb1 | ||
![]() |
4a8dfb3461 | ||
![]() |
3752b3aead | ||
![]() |
b81d41df22 | ||
![]() |
dadf3f06ee | ||
![]() |
8ed0d5675f | ||
![]() |
d5e9041344 | ||
![]() |
d99c20f628 | ||
![]() |
973ed24dc8 | ||
![]() |
5d5f5e3be8 | ||
![]() |
d9e14408f0 | ||
![]() |
c9c5ce2365 | ||
![]() |
975534370f | ||
![]() |
28605f6bd3 | ||
![]() |
3c6d3b69c2 | ||
![]() |
00312e95fe | ||
![]() |
4223130bb0 | ||
![]() |
c811e1ce70 | ||
![]() |
77475f2ad0 | ||
![]() |
3680a2f6f5 | ||
![]() |
1946058e7b | ||
![]() |
73daf8ce33 | ||
![]() |
094ceeba14 | ||
![]() |
3b7359a27a | ||
![]() |
df9108e19b | ||
![]() |
6307e783d8 | ||
![]() |
b9cd73c76d | ||
![]() |
b62c230ca2 | ||
![]() |
800193da9b | ||
![]() |
577ba5783c | ||
![]() |
9bece2b313 | ||
![]() |
e85e30546c | ||
![]() |
758f6eed51 | ||
![]() |
80ee5d3bd8 | ||
![]() |
dd06c60ada | ||
![]() |
6ca627ae74 | ||
![]() |
80a0b81c2a | ||
![]() |
06a7b0561b | ||
![]() |
12db20be4e | ||
![]() |
3cbb1b2b64 | ||
![]() |
d75e587613 | ||
![]() |
414c57d138 | ||
![]() |
c14a84e6f2 | ||
![]() |
def0db30e7 | ||
![]() |
6ef7a81a3b | ||
![]() |
95152aec68 | ||
![]() |
8ed6762363 | ||
![]() |
87c5ed8bec | ||
![]() |
ecc6c1f501 | ||
![]() |
3d8338b0d4 | ||
![]() |
c91e25518f | ||
![]() |
a8dddeab61 | ||
![]() |
8f0a5ab660 | ||
![]() |
db03d4bdd0 | ||
![]() |
0ec96e4279 | ||
![]() |
6e520c4cdc | ||
![]() |
1e8683d72d | ||
![]() |
2df622fd14 | ||
![]() |
fede784fa2 | ||
![]() |
f191b143e9 | ||
![]() |
59212553b5 | ||
![]() |
e532b196cc | ||
![]() |
0f5232280c | ||
![]() |
38898ba4af | ||
![]() |
48f56d9600 | ||
![]() |
17bf5ac2fc | ||
![]() |
343b882d80 | ||
![]() |
db06d21339 | ||
![]() |
19240f08bb | ||
![]() |
d774730f83 | ||
![]() |
c2edf42567 | ||
![]() |
08f0e55b4f | ||
![]() |
deeb74b7e4 | ||
![]() |
0542002d7a | ||
![]() |
c1e307f585 | ||
![]() |
7b4ba43dcf | ||
![]() |
b0e4debaab | ||
![]() |
676597e961 | ||
![]() |
686d90745b | ||
![]() |
5dc02d53c3 | ||
![]() |
0598547b58 | ||
![]() |
67c7745f5d | ||
![]() |
a2c289646d | ||
![]() |
e6efecd054 | ||
![]() |
778b6a86c0 | ||
![]() |
e5babd086d | ||
![]() |
c212ebbdda | ||
![]() |
83b8de3d43 | ||
![]() |
e174d374f2 | ||
![]() |
4edb93508d | ||
![]() |
38c994b83b | ||
![]() |
1b8643d4c9 | ||
![]() |
d3c796f5b0 | ||
![]() |
83d8a6a450 | ||
![]() |
a21a77d230 | ||
![]() |
260b88c197 | ||
![]() |
655331a91b | ||
![]() |
09e569f83d | ||
![]() |
e4a4b562c4 | ||
![]() |
35b4a755f9 | ||
![]() |
5a4b43848a | ||
![]() |
d98869a088 | ||
![]() |
4d33cf739d | ||
![]() |
34e7daf989 | ||
![]() |
b0adcd6a46 | ||
![]() |
be285cde3f | ||
![]() |
0ff1faf7f2 | ||
![]() |
bcc62cc9e3 | ||
![]() |
97b466d409 | ||
![]() |
f17d9bba14 | ||
![]() |
d74725ce67 | ||
![]() |
3dad55d7a8 | ||
![]() |
598ffeea89 | ||
![]() |
83367f67de | ||
![]() |
15f2647d71 | ||
![]() |
6421d69bff | ||
![]() |
18081e30e1 | ||
![]() |
97181b5c0d | ||
![]() |
a63f9887b9 | ||
![]() |
1282aad4a5 | ||
![]() |
b8fad99f09 | ||
![]() |
c7e9e60b05 | ||
![]() |
47f2e1da73 | ||
![]() |
5975229919 | ||
![]() |
38295e8a75 | ||
![]() |
f9612b5eaf | ||
![]() |
5cf2ef2ef7 | ||
![]() |
938b5c886e | ||
![]() |
0618e68200 | ||
![]() |
bac52f3969 | ||
![]() |
d494d62953 | ||
![]() |
7206181385 | ||
![]() |
3f22901a43 | ||
![]() |
f70f11fc70 | ||
![]() |
cffebd7fd6 | ||
![]() |
b8c8e7349f | ||
![]() |
8bba99ae56 | ||
![]() |
b5c5f57613 | ||
![]() |
33df856925 | ||
![]() |
ce09cedd2e | ||
![]() |
7d68101f83 | ||
![]() |
aa50a00898 | ||
![]() |
26f112ba55 | ||
![]() |
159b9162f8 | ||
![]() |
d7999f9fcb | ||
![]() |
f13eba4c78 | ||
![]() |
050e82e088 | ||
![]() |
88377e5b61 | ||
![]() |
241af465fd | ||
![]() |
59510a554d | ||
![]() |
b10aa95d28 | ||
![]() |
097bee681a | ||
![]() |
8548c2fc61 | ||
![]() |
dc4fbd2e97 | ||
![]() |
60b029869f | ||
![]() |
f592ea6c30 | ||
![]() |
a39ac3d94a | ||
![]() |
4b23ddc002 | ||
![]() |
4486d336a6 | ||
![]() |
45e4b811b0 | ||
![]() |
0e6a1a4420 | ||
![]() |
b8bf708db9 | ||
![]() |
6fdbb01194 | ||
![]() |
d29147565c | ||
![]() |
75c9430559 | ||
![]() |
9ac99a80c3 | ||
![]() |
a15d107dde | ||
![]() |
09897b8146 | ||
![]() |
29e446e508 | ||
![]() |
10beb36b1c | ||
![]() |
a65a888866 | ||
![]() |
98180b5cc7 | ||
![]() |
92009181af | ||
![]() |
831bdb9f63 | ||
![]() |
50a4dbbb5e | ||
![]() |
ad6511c313 | ||
![]() |
7a37fa4aef | ||
![]() |
dcee24191f | ||
![]() |
87bcb6f377 | ||
![]() |
b0bc2f00d2 | ||
![]() |
3b19c7d0d9 | ||
![]() |
12f5c67bf5 | ||
![]() |
d7a83d8995 | ||
![]() |
7725729d90 | ||
![]() |
e96445bd02 | ||
![]() |
da2c124675 | ||
![]() |
8cb695a963 | ||
![]() |
54cbd7e154 | ||
![]() |
5994b62930 | ||
![]() |
2fbf94b0f3 | ||
![]() |
32bc30e210 | ||
![]() |
f3bc8e6ce1 | ||
![]() |
16f3a32bec | ||
![]() |
c44d2498e3 | ||
![]() |
2aed209efa | ||
![]() |
b55b780d7b | ||
![]() |
8d4eb2bc1f | ||
![]() |
67bf4f28ff | ||
![]() |
803582f8ac | ||
![]() |
03603f392a | ||
![]() |
fcfd6d9504 | ||
![]() |
c31451cf13 | ||
![]() |
5deff1a179 | ||
![]() |
e236a1c99b | ||
![]() |
a2f3094eb0 | ||
![]() |
65afc576ea | ||
![]() |
8971f656b4 | ||
![]() |
394ce9ee39 | ||
![]() |
67a83c1b34 | ||
![]() |
1e8d094274 | ||
![]() |
4c35a40858 | ||
![]() |
802b2aaf6a | ||
![]() |
0e79a8944b | ||
![]() |
bebf70667d | ||
![]() |
d9bd5de0b1 | ||
![]() |
31c7aa0ba4 | ||
![]() |
fc2388189f | ||
![]() |
4431338691 | ||
![]() |
bda1e9aeab | ||
![]() |
4969ca768d | ||
![]() |
2acd1c1642 | ||
![]() |
e1e753179a | ||
![]() |
f4cc8153ae | ||
![]() |
e4d8cb4ee0 | ||
![]() |
723a78ae3f | ||
![]() |
cd9d0d7dec | ||
![]() |
665d4f08c8 | ||
![]() |
00c7780fcb | ||
![]() |
15ab13dc42 | ||
![]() |
8a0ca3066e | ||
![]() |
ea01755bb4 | ||
![]() |
69c2084a18 | ||
![]() |
99c0a1a7d0 | ||
![]() |
5acf997e69 | ||
![]() |
dd87e4ed39 | ||
![]() |
2f8c26ba8a | ||
![]() |
81b9793807 | ||
![]() |
7278f17e8f | ||
![]() |
66c7427df0 | ||
![]() |
c1a06d858d | ||
![]() |
53b5fdbe9e | ||
![]() |
687cf0235e | ||
![]() |
b6e9229cf0 | ||
![]() |
089e4848d8 | ||
![]() |
58d2e7c6d1 | ||
![]() |
fa18d6fb76 | ||
![]() |
4dcb930247 | ||
![]() |
74a299fd08 | ||
![]() |
532a560d87 | ||
![]() |
0040a60559 | ||
![]() |
cc34342790 | ||
![]() |
bdbf6e9d19 | ||
![]() |
db86f765eb | ||
![]() |
b11dec5dd5 | ||
![]() |
86becc7591 | ||
![]() |
8922bc038b | ||
![]() |
009f5790a4 | ||
![]() |
0536b6c459 | ||
![]() |
0e3ebd9841 | ||
![]() |
598965a606 | ||
![]() |
d7a2938849 | ||
![]() |
a683658675 | ||
![]() |
25169f68b7 | ||
![]() |
e5247ae65d | ||
![]() |
a718cb05ff | ||
![]() |
b466ef2581 | ||
![]() |
c7a634641f | ||
![]() |
e4388643f1 | ||
![]() |
bc4208201c | ||
![]() |
a0d69d52a1 | ||
![]() |
c23a1be139 | ||
![]() |
9799f7afb0 | ||
![]() |
6358b24fac | ||
![]() |
b58634316f | ||
![]() |
e3657644d6 | ||
![]() |
7d1e3ebeed | ||
![]() |
9e61dfe85e | ||
![]() |
7b51aafa86 | ||
![]() |
5f487123df | ||
![]() |
f1f32477e3 | ||
![]() |
df2b1251a0 | ||
![]() |
02c7cf6fa5 | ||
![]() |
60006ff993 | ||
![]() |
f3af5d7b8e | ||
![]() |
d551412a32 | ||
![]() |
6de67a134e | ||
![]() |
8ec31398e0 | ||
![]() |
fd0d560b47 | ||
![]() |
cc542269a1 | ||
![]() |
7b488a3bef | ||
![]() |
f448168501 | ||
![]() |
80a8fb98db | ||
![]() |
898bb397b1 | ||
![]() |
74ed5b5ebd | ||
![]() |
178afd81a9 | ||
![]() |
d6eb1a7b98 | ||
![]() |
4ff56b15e9 | ||
![]() |
e6b98d3152 | ||
![]() |
5fd8dd2dce | ||
![]() |
0ad3e046a4 | ||
![]() |
d6c5d24af3 | ||
![]() |
8a3280a2de | ||
![]() |
450a0a647a | ||
![]() |
676c0cf123 | ||
![]() |
a731319321 | ||
![]() |
81b06a09b7 | ||
![]() |
23b34744d9 | ||
![]() |
bc8590aa12 | ||
![]() |
939d368d5f | ||
![]() |
336e3b8baf | ||
![]() |
47c06fa308 | ||
![]() |
b7f447f8d8 | ||
![]() |
03af76b631 | ||
![]() |
e105d5c28f | ||
![]() |
d6ffb4c177 | ||
![]() |
6dbfce1031 | ||
![]() |
fea5ddf585 | ||
![]() |
b9f39c2711 | ||
![]() |
5acac0309a | ||
![]() |
78febad718 | ||
![]() |
a6a5bba0a9 | ||
![]() |
51581c034d | ||
![]() |
8f25a95b47 | ||
![]() |
7f5d092223 | ||
![]() |
2e5cccd1b6 | ||
![]() |
2645782f89 | ||
![]() |
9533092511 | ||
![]() |
6005a461bb | ||
![]() |
e2df946eee | ||
![]() |
d14588120f | ||
![]() |
ab31cfa664 | ||
![]() |
af1c397969 | ||
![]() |
947f9deed5 | ||
![]() |
ce95eee903 | ||
![]() |
b15f3bb969 | ||
![]() |
998e8cba19 | ||
![]() |
e3f523ab2a | ||
![]() |
36485e56ed | ||
![]() |
b4113360f6 | ||
![]() |
2d71e22f08 | ||
![]() |
2ae67c431c | ||
![]() |
4b1a91b64f | ||
![]() |
4f69318e12 | ||
![]() |
1cc98ab50f | ||
![]() |
a6494602fd | ||
![]() |
50ec78b488 | ||
![]() |
7d044d14f9 | ||
![]() |
df03d5a8b2 | ||
![]() |
6a0ed81e67 | ||
![]() |
c94f3e8188 | ||
![]() |
1e5f6cc1dc | ||
![]() |
b1fece74e3 | ||
![]() |
fdbe0df6e7 | ||
![]() |
93d59520e4 | ||
![]() |
b68d3a073b | ||
![]() |
2100311f41 | ||
![]() |
e1269e3156 | ||
![]() |
c88d61b044 |
1183
CHANGES.2005
Normal file
1183
CHANGES.2005
Normal file
File diff suppressed because it is too large
Load Diff
2
COPYING
2
COPYING
@@ -1,6 +1,6 @@
|
|||||||
COPYRIGHT AND PERMISSION NOTICE
|
COPYRIGHT AND PERMISSION NOTICE
|
||||||
|
|
||||||
Copyright (c) 1996 - 2005, Daniel Stenberg, <daniel@haxx.se>.
|
Copyright (c) 1996 - 2006, Daniel Stenberg, <daniel@haxx.se>.
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
|
6
CVS-INFO
6
CVS-INFO
@@ -53,12 +53,6 @@ installed:
|
|||||||
give you an older version of the file that isn't up-to-date. That file was
|
give you an older version of the file that isn't up-to-date. That file was
|
||||||
checked in once and won't be updated very regularly.
|
checked in once and won't be updated very regularly.
|
||||||
|
|
||||||
o yacc/bison
|
|
||||||
|
|
||||||
If you don't have yacc or bison, you must rename the lib/getdate.c.cvs file
|
|
||||||
to lib/getdate.c to be able to build libcurl. yacc/bison is normally used
|
|
||||||
to generate the lib/getdate.c file from the lib/getdate.y source file.
|
|
||||||
|
|
||||||
MAC OS X
|
MAC OS X
|
||||||
|
|
||||||
With Mac OS X 10.2 and the associated Developer Tools, the installed versions
|
With Mac OS X 10.2 and the associated Developer Tools, the installed versions
|
||||||
|
29
README
29
README
@@ -7,7 +7,7 @@
|
|||||||
README
|
README
|
||||||
|
|
||||||
Curl is a command line tool for transferring data specified with URL
|
Curl is a command line tool for transferring data specified with URL
|
||||||
syntax. Find out how to use Curl by reading the curl.1 man page or the
|
syntax. Find out how to use curl by reading the curl.1 man page or the
|
||||||
MANUAL document. Find out how to install Curl by reading the INSTALL
|
MANUAL document. Find out how to install Curl by reading the INSTALL
|
||||||
document.
|
document.
|
||||||
|
|
||||||
@@ -33,32 +33,7 @@ WEB SITE
|
|||||||
Visit the curl web site or mirrors for the latest news and downloads:
|
Visit the curl web site or mirrors for the latest news and downloads:
|
||||||
|
|
||||||
Sweden http://curl.haxx.se/
|
Sweden http://curl.haxx.se/
|
||||||
Australia http://curl.planetmirror.com/
|
Mirrors http://curlm.haxx.se/
|
||||||
Austria http://curl.gds.tuwien.ac.at/
|
|
||||||
Denmark http://curl.cofman.dk/
|
|
||||||
France http://curl.fastmirror.net/
|
|
||||||
Germany http://curl.miscellaneousmirror.org/
|
|
||||||
Germany http://curl.mirror.at.stealer.net/
|
|
||||||
Germany http://curl.mirroring.de/
|
|
||||||
Germany http://curl.mons-new-media.de/
|
|
||||||
Germany http://curl.triplemind.com/
|
|
||||||
Germany http://curl.freemirror.de/
|
|
||||||
Netherlands http://curl.nedmirror.nl/
|
|
||||||
Russia http://curl.tsuren.net/
|
|
||||||
Taiwan http://curl.cs.pu.edu.tw/
|
|
||||||
Thailand http://curl.siamu.ac.th/
|
|
||||||
US (AZ) http://curl.islandofpoker.com/
|
|
||||||
US (CA) http://curl.mirror.redwire.net/
|
|
||||||
US (CA) http://curl.mirrormonster.com/
|
|
||||||
US (CA) http://curl.signal42.com/
|
|
||||||
US (CA) http://curl.tolix.org/
|
|
||||||
US (CA) http://curl.webhosting76.com/
|
|
||||||
US (CA) http://curl.meulie.net/
|
|
||||||
US (FL) http://curl.hoxt.com/
|
|
||||||
US (TX) http://curl.109k.com/
|
|
||||||
US (TX) http://curl.mirrors.cyberservers.net/
|
|
||||||
US (TX) http://curl.seekmeup.com/
|
|
||||||
US (TX) http://curl.hostingzero.com/
|
|
||||||
|
|
||||||
CVS
|
CVS
|
||||||
|
|
||||||
|
@@ -1,61 +1,57 @@
|
|||||||
Curl and libcurl 7.15.1
|
Curl and libcurl 7.15.5
|
||||||
|
|
||||||
Public curl release number: 91
|
Public curl release number: 95
|
||||||
Releases counted from the very beginning: 118
|
Releases counted from the very beginning: 122
|
||||||
Available command line options: 109
|
Available command line options: 114
|
||||||
Available curl_easy_setopt() options: 125
|
Available curl_easy_setopt() options: 133
|
||||||
Number of public functions in libcurl: 46
|
Number of public functions in libcurl: 54
|
||||||
Amount of public web site mirrors: 27
|
Amount of public web site mirrors: 33
|
||||||
Number of known libcurl bindings: 32
|
Number of known libcurl bindings: 32
|
||||||
Number of contributors: 459
|
Number of contributors: 506
|
||||||
|
|
||||||
This release includes the following changes:
|
This release includes the following changes:
|
||||||
|
|
||||||
o the libcurl.pc pkgconfig file now gets installed on make install
|
o added --ftp-ssl-reqd
|
||||||
o URL globbing now offers "range steps": [1-100:10]
|
o modified the prototype for the socket callback set with
|
||||||
o LDAPv3 is now the preferred LDAP protocol version
|
CURLMOPT_SOCKETFUNCTION
|
||||||
o --max-redirs and CURLOPT_MAXREDIRS set to 0 limits redirects
|
o added curl_multi_assign()
|
||||||
o improved MSVC makefile
|
o added CURLOPT_FTP_ALTERNATIVE_TO_USER and --ftp-alternative-to-user
|
||||||
|
o added a vcproj file for building libcurl
|
||||||
|
o added curl_formget()
|
||||||
|
o added CURLOPT_MAX_SEND_SPEED_LARGE and CURLOPT_MAX_RECV_SPEED_LARGE
|
||||||
|
o added configure --enable-hidden-symbols
|
||||||
|
o Made -K on a file that couldn't be read cause a warning to be displayed
|
||||||
|
|
||||||
This release includes the following bugfixes:
|
This release includes the following bugfixes:
|
||||||
|
|
||||||
o buffer overflow problem: http://curl.haxx.se/docs/adv_20051207.html
|
o chunked encoding when custom header "Transfer-Encoding: chunked" is set
|
||||||
o using file:// on non-existing files are properly handled
|
o Curl_strerror() crash on unknown errors
|
||||||
o builds fine on DJGPP
|
o changing Content-Type when doing formposts
|
||||||
o CURLOPT_ERRORBUFFER is now always filled in on errors
|
o added CURL_EXTERN to a few recent multi functions that lacked them
|
||||||
o curl outputs error on bad --limit-rate units
|
o splay-tree related problems for internal expire time handling
|
||||||
o fixed libcurl's use of poll() on cygwin
|
o FTP ASCII CRLF counter reset
|
||||||
o the GnuTLS code didn't support client certificates
|
o cookie parser now compares paths case sensitive
|
||||||
o TFTP over IPv6 works
|
o an easy handle with shared DNS cache added to a multi handle caused a crash
|
||||||
o no reverse lookups on IP addresses when ipv6-enabled
|
o couldn't override the Proxy-Connection: header for non-CONNECT requests
|
||||||
o SSPI compatibility fix: using the proper DLLs
|
o curl_multi_fdset() could wrongly return -1 as max_fd value
|
||||||
o binary LDAP properties are now shown base64 encoded
|
|
||||||
o Windows uploads from stdin using curl can now contain ctrl-Z bytes
|
|
||||||
o -r [num] would produce an invalid HTTP Range: header
|
|
||||||
o multi interface with multi IP hosts could leak socket descriptors
|
|
||||||
o the GnuTLS code didn't handle rehandshakes
|
|
||||||
o re-use of a dead FTP connection
|
|
||||||
o name resolve error codes fixed for Windows builds
|
|
||||||
o double WWW-Authenticate Digest headers are now handled
|
|
||||||
o curl-config --vernum fixed
|
|
||||||
|
|
||||||
Other curl-related news since the previous public release:
|
Other curl-related news:
|
||||||
|
|
||||||
o FTP-SSL is now RFC4217
|
o yassl 1.3.7 can now be used with libcurl as an optional TLS library for
|
||||||
o CurlPas 2005-11-05 was released: http://curlpas.sf.net/
|
HTTPS/FTPS support: http://www.yassl.com/
|
||||||
o pycurl 7.15.0 was released http://pycurl.sf.net
|
o cURLpp 0.6.0 was released: http://rrette.com/curlpp.html
|
||||||
o New web mirrors:
|
o pycurl-7.15.4 was released: http://pycurl.sf.net
|
||||||
http://curl.triplemind.com/ located in Mannheim, Germany
|
|
||||||
http://curl.nedmirror.nl located in Amsterdam, the Netherlands
|
New curl mirrors:
|
||||||
http://curl.hoxt.com located in Florida, US
|
|
||||||
|
o
|
||||||
|
|
||||||
This release would not have looked like this without help, code, reports and
|
This release would not have looked like this without help, code, reports and
|
||||||
advice from friends like these:
|
advice from friends like these:
|
||||||
|
|
||||||
Dave Dribin, Bradford Bruce, Temprimus, Ofer, Dima Barsky, Amol Pattekar, Jaz
|
Dan Fandrich, Peter Silva, Arve Knudsen, Michael Wallner, Toshiyuki Maezawa,
|
||||||
Fresh, tommink[at]post.pl, Gisle Vanem, Nis Jorgensen, Vilmos Nebehaj, Dmitry
|
Ingmar Runge, Ates Goral, David McCreedy, Jari Sundell, Georg Horn,
|
||||||
Bartsevich, David Lang, Eugene Kotlyarov, Jan Kunder, Yang Tse, Quagmire,
|
Gisle Vanem, Yang Tse, Michael Jerris, Dan Nelson, Yves Lejeune,
|
||||||
Albert Chin, David Shaw, Doug Kaufman, Bryan Henderson, Jamie Newton, Stefan
|
Maciej Karpiuk, Mark Lentczner
|
||||||
Esser
|
|
||||||
|
|
||||||
Thanks! (and sorry if I forgot to mention someone)
|
Thanks! (and sorry if I forgot to mention someone)
|
||||||
|
@@ -1,7 +1,5 @@
|
|||||||
To get fixed in 7.15.0 (planned release: November 2005)
|
To get fixed in 7.15.5 (planned release: August 2006)
|
||||||
======================
|
======================
|
||||||
|
|
||||||
60 - CONNECT 407 responses that kills the connection (not very likely though)
|
66 -
|
||||||
|
|
||||||
63 -
|
|
||||||
|
|
||||||
|
1276
acinclude.m4
1276
acinclude.m4
File diff suppressed because it is too large
Load Diff
@@ -11,3 +11,6 @@ Dan Fandrich
|
|||||||
Gisle Vanem
|
Gisle Vanem
|
||||||
Gunter Knauf
|
Gunter Knauf
|
||||||
Henrik Stoerner
|
Henrik Stoerner
|
||||||
|
Yang Tse
|
||||||
|
Nick Mathewson
|
||||||
|
Alexander Lazic
|
||||||
|
67
ares/CHANGES
67
ares/CHANGES
@@ -1,5 +1,66 @@
|
|||||||
Changelog for the c-ares project
|
Changelog for the c-ares project
|
||||||
|
|
||||||
|
* August 3 2006
|
||||||
|
|
||||||
|
- Ravi Pratap fixed ares_getsock() to actually return the proper bitmap and
|
||||||
|
not always zero!
|
||||||
|
|
||||||
|
Version 1.3.1 (June 24, 2006)
|
||||||
|
|
||||||
|
* July 23, 2006
|
||||||
|
|
||||||
|
- Gisle Vanem added getopt() to the ahost program. Currently accepts
|
||||||
|
only [-t {a|aaaa}] to specify address family in ares_gethostbyname().
|
||||||
|
|
||||||
|
* June 19, 2006
|
||||||
|
|
||||||
|
- (wahern) Removed "big endian" DNS section and RR data integer parser
|
||||||
|
macros from ares_dns.h, which break c-ares on my Sparc64. Bit-wise
|
||||||
|
operations in C operate on logical values. And in any event the octets are
|
||||||
|
already in big-endian (aka network) byte order so they're being reversed
|
||||||
|
(thus the source of the breakage).
|
||||||
|
|
||||||
|
* June 18, 2006
|
||||||
|
|
||||||
|
- William Ahern handles EAGAIN/EWOULDBLOCK errors in most of the I/O calls
|
||||||
|
from area_process.c.
|
||||||
|
|
||||||
|
TODO: Handle one last EAGAIN for a UDP socket send(2) in
|
||||||
|
ares__send_query().
|
||||||
|
|
||||||
|
* May 10, 2006
|
||||||
|
|
||||||
|
- Bram Matthys brought my attention to a libtool peculiarity where detecting
|
||||||
|
things such as C++ compiler actually is a bad thing and since we don't need
|
||||||
|
that detection I added a work-around, much inspired by a previous patch by
|
||||||
|
Paolo Bonzini. This also shortens the configure script quite a lot.
|
||||||
|
|
||||||
|
* May 3, 2006
|
||||||
|
|
||||||
|
- Nick Mathewson added the ARES_OPT_SOCK_STATE_CB option that when set makes
|
||||||
|
c-ares call a callback on socket state changes. A better way than the
|
||||||
|
ares_getsock() to get full control over the socket state.
|
||||||
|
|
||||||
|
* January 9, 2006
|
||||||
|
|
||||||
|
- Alexander Lazic improved the getservbyport_r() configure check.
|
||||||
|
|
||||||
|
* January 6, 2006
|
||||||
|
|
||||||
|
- Alexander Lazic pointed out that the buildconf should use the ACLOCAL_FLAGS
|
||||||
|
variable for easier controlling what it does and how it runs.
|
||||||
|
|
||||||
|
* January 5, 2006
|
||||||
|
|
||||||
|
- James Bursa fixed c-ares to find the hosts file on RISC OS, and made it
|
||||||
|
build with newer gcc versions that no longer defines "riscos".
|
||||||
|
|
||||||
|
* December 22
|
||||||
|
|
||||||
|
- Daniel Stenberg added ares_getsock() that extracts the set of sockets to
|
||||||
|
wait for action on. Similar to ares_fds() but not restricted to using
|
||||||
|
select() for the waiting.
|
||||||
|
|
||||||
* November 25
|
* November 25
|
||||||
|
|
||||||
- Yang Tse fixed some send() / recv() compiler warnings
|
- Yang Tse fixed some send() / recv() compiler warnings
|
||||||
@@ -8,15 +69,15 @@
|
|||||||
|
|
||||||
- Added constants that will be used by ares_getaddrinfo
|
- Added constants that will be used by ares_getaddrinfo
|
||||||
|
|
||||||
- Made ares_getnameinfo use the reentrant getservbyport (getservbyport_r) if it is
|
- Made ares_getnameinfo use the reentrant getservbyport (getservbyport_r) if it
|
||||||
available to ensure it works properly in a threaded environment.
|
is available to ensure it works properly in a threaded environment.
|
||||||
|
|
||||||
* September 10
|
* September 10
|
||||||
|
|
||||||
- configure fix for detecting a member in the sockaddr_in6 struct which failed
|
- configure fix for detecting a member in the sockaddr_in6 struct which failed
|
||||||
on ipv6-enabled HP-UX 11.00
|
on ipv6-enabled HP-UX 11.00
|
||||||
|
|
||||||
Version 1.3.0 (August 29, 2004)
|
Version 1.3.0 (August 29, 2005)
|
||||||
|
|
||||||
* August 21
|
* August 21
|
||||||
|
|
||||||
|
@@ -11,7 +11,7 @@ MSVCFILES = vc/adig/adig.dep vc/adig/adig.dsp vc/vc.dsw vc/ahost/ahost.dep \
|
|||||||
# adig and ahost are just sample programs and thus not mentioned with the
|
# adig and ahost are just sample programs and thus not mentioned with the
|
||||||
# regular sources and headers
|
# regular sources and headers
|
||||||
EXTRA_DIST = CHANGES README.cares Makefile.inc adig.c ahost.c $(man_MANS) \
|
EXTRA_DIST = CHANGES README.cares Makefile.inc adig.c ahost.c $(man_MANS) \
|
||||||
$(MSVCFILES) AUTHORS
|
$(MSVCFILES) AUTHORS config-win32.h
|
||||||
|
|
||||||
|
|
||||||
VER=-version-info 1:0:0
|
VER=-version-info 1:0:0
|
||||||
@@ -43,7 +43,13 @@ VER=-version-info 1:0:0
|
|||||||
# set age to 0. (c:r:a=0)
|
# set age to 0. (c:r:a=0)
|
||||||
#
|
#
|
||||||
|
|
||||||
libcares_la_LDFLAGS = $(VER)
|
if NO_UNDEFINED
|
||||||
|
# The -no-undefined flag is crucial for this to build fine on some platforms
|
||||||
|
UNDEF = -no-undefined
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
libcares_la_LDFLAGS = $(UNDEF) $(VER)
|
||||||
|
|
||||||
# Makefile.inc provides the CSOURCES and HHEADERS defines
|
# Makefile.inc provides the CSOURCES and HHEADERS defines
|
||||||
include Makefile.inc
|
include Makefile.inc
|
||||||
|
@@ -1,14 +1,15 @@
|
|||||||
CSOURCES = ares_fds.c ares_process.c ares_free_hostent.c ares_query.c \
|
CSOURCES = ares_fds.c ares_getsock.c ares_process.c ares_free_hostent.c \
|
||||||
ares__close_sockets.c ares_free_string.c ares_search.c ares__get_hostent.c \
|
ares_query.c ares__close_sockets.c ares_free_string.c ares_search.c \
|
||||||
ares_gethostbyaddr.c ares_send.c ares__read_line.c ares_gethostbyname.c \
|
ares__get_hostent.c ares_gethostbyaddr.c ares_send.c ares__read_line.c \
|
||||||
ares_strerror.c ares_cancel.c ares_init.c ares_timeout.c ares_destroy.c \
|
ares_gethostbyname.c ares_strerror.c ares_cancel.c ares_init.c \
|
||||||
ares_mkquery.c ares_version.c ares_expand_name.c ares_parse_a_reply.c \
|
ares_timeout.c ares_destroy.c ares_mkquery.c ares_version.c \
|
||||||
windows_port.c ares_expand_string.c ares_parse_ptr_reply.c \
|
ares_expand_name.c ares_parse_a_reply.c windows_port.c \
|
||||||
ares_parse_aaaa_reply.c ares_getnameinfo.c inet_net_pton.c bitncmp.c \
|
ares_expand_string.c ares_parse_ptr_reply.c ares_parse_aaaa_reply.c \
|
||||||
inet_ntop.c
|
ares_getnameinfo.c inet_net_pton.c bitncmp.c inet_ntop.c
|
||||||
|
|
||||||
HHEADERS = ares.h ares_private.h setup.h ares_dns.h ares_version.h \
|
HHEADERS = ares.h ares_private.h setup.h ares_dns.h ares_version.h \
|
||||||
nameser.h inet_net_pton.h inet_ntop.h ares_ipv6.h bitncmp.h
|
nameser.h inet_net_pton.h inet_ntop.h ares_ipv6.h bitncmp.h \
|
||||||
|
setup_once.h
|
||||||
|
|
||||||
MANPAGES= ares_destroy.3 ares_expand_name.3 ares_expand_string.3 ares_fds.3 \
|
MANPAGES= ares_destroy.3 ares_expand_name.3 ares_expand_string.3 ares_fds.3 \
|
||||||
ares_free_hostent.3 ares_free_string.3 ares_gethostbyaddr.3 \
|
ares_free_hostent.3 ares_free_string.3 ares_gethostbyaddr.3 \
|
||||||
|
@@ -20,7 +20,7 @@ endif
|
|||||||
TARGETS = adig.nlm ahost.nlm
|
TARGETS = adig.nlm ahost.nlm
|
||||||
LTARGET = libcares.lib
|
LTARGET = libcares.lib
|
||||||
VERSION = $(LIBCARES_VERSION)
|
VERSION = $(LIBCARES_VERSION)
|
||||||
COPYR = Copyright (C) 1996 - 2005, Daniel Stenberg, <daniel@haxx.se>
|
COPYR = Copyright (C) 1996 - 2006, Daniel Stenberg, <daniel@haxx.se>
|
||||||
DESCR = cURL $(subst .def,,$(notdir $@)) $(LIBCARES_VERSION_STR) - http://curl.haxx.se
|
DESCR = cURL $(subst .def,,$(notdir $@)) $(LIBCARES_VERSION_STR) - http://curl.haxx.se
|
||||||
MTSAFE = YES
|
MTSAFE = YES
|
||||||
STACK = 64000
|
STACK = 64000
|
||||||
@@ -88,7 +88,7 @@ LD = nlmconv
|
|||||||
LDFLAGS = -T
|
LDFLAGS = -T
|
||||||
AR = ar
|
AR = ar
|
||||||
ARFLAGS = -cq
|
ARFLAGS = -cq
|
||||||
CFLAGS += -fno-builtin -fpack-struct -fpcc-struct-return -fno-strict-aliasing
|
CFLAGS += -fno-builtin -fpcc-struct-return -fno-strict-aliasing
|
||||||
CFLAGS += -Wall -Wno-format -Wno-uninitialized # -pedantic
|
CFLAGS += -Wall -Wno-format -Wno-uninitialized # -pedantic
|
||||||
ifeq ($(LIBARCH),LIBC)
|
ifeq ($(LIBARCH),LIBC)
|
||||||
PRELUDE = $(SDK_LIBC)/imports/libcpre.gcc.o
|
PRELUDE = $(SDK_LIBC)/imports/libcpre.gcc.o
|
||||||
@@ -256,8 +256,8 @@ config.h: Makefile.netware
|
|||||||
@echo $(DL)** All your changes will be lost!!$(DL) >> $@
|
@echo $(DL)** All your changes will be lost!!$(DL) >> $@
|
||||||
@echo $(DL)*/$(DL) >> $@
|
@echo $(DL)*/$(DL) >> $@
|
||||||
@echo $(DL)#define OS "i586-pc-NetWare"$(DL) >> $@
|
@echo $(DL)#define OS "i586-pc-NetWare"$(DL) >> $@
|
||||||
@echo $(DL)#define VERSION "$(LIBCURL_VERSION_STR)"$(DL) >> $@
|
@echo $(DL)#define VERSION "$(LIBCARES_VERSION_STR)"$(DL) >> $@
|
||||||
@echo $(DL)#define PACKAGE_BUGREPORT "curl-bug@haxx.se"$(DL) >> $@
|
@echo $(DL)#define PACKAGE_BUGREPORT "a suitable curl mailing list => http://curl.haxx.se/mail/"$(DL) >> $@
|
||||||
@echo $(DL)#define HAVE_ARPA_INET_H 1$(DL) >> $@
|
@echo $(DL)#define HAVE_ARPA_INET_H 1$(DL) >> $@
|
||||||
@echo $(DL)#define HAVE_ARPA_NAMESER_H 1$(DL) >> $@
|
@echo $(DL)#define HAVE_ARPA_NAMESER_H 1$(DL) >> $@
|
||||||
@echo $(DL)#define HAVE_ASSERT_H 1$(DL) >> $@
|
@echo $(DL)#define HAVE_ASSERT_H 1$(DL) >> $@
|
||||||
@@ -276,7 +276,9 @@ config.h: Makefile.netware
|
|||||||
@echo $(DL)#define HAVE_LONGLONG 1$(DL) >> $@
|
@echo $(DL)#define HAVE_LONGLONG 1$(DL) >> $@
|
||||||
@echo $(DL)#define HAVE_MALLOC_H 1$(DL) >> $@
|
@echo $(DL)#define HAVE_MALLOC_H 1$(DL) >> $@
|
||||||
@echo $(DL)#define HAVE_NETINET_IN_H 1$(DL) >> $@
|
@echo $(DL)#define HAVE_NETINET_IN_H 1$(DL) >> $@
|
||||||
|
@echo $(DL)#define HAVE_RECV 1$(DL) >> $@
|
||||||
@echo $(DL)#define HAVE_SELECT 1$(DL) >> $@
|
@echo $(DL)#define HAVE_SELECT 1$(DL) >> $@
|
||||||
|
@echo $(DL)#define HAVE_SEND 1$(DL) >> $@
|
||||||
@echo $(DL)#define HAVE_SETJMP_H 1$(DL) >> $@
|
@echo $(DL)#define HAVE_SETJMP_H 1$(DL) >> $@
|
||||||
@echo $(DL)#define HAVE_SIGNAL 1$(DL) >> $@
|
@echo $(DL)#define HAVE_SIGNAL 1$(DL) >> $@
|
||||||
@echo $(DL)#define HAVE_SOCKET 1$(DL) >> $@
|
@echo $(DL)#define HAVE_SOCKET 1$(DL) >> $@
|
||||||
@@ -297,7 +299,18 @@ config.h: Makefile.netware
|
|||||||
@echo $(DL)#define HAVE_TIME_H 1$(DL) >> $@
|
@echo $(DL)#define HAVE_TIME_H 1$(DL) >> $@
|
||||||
@echo $(DL)#define HAVE_UNAME 1$(DL) >> $@
|
@echo $(DL)#define HAVE_UNAME 1$(DL) >> $@
|
||||||
@echo $(DL)#define HAVE_UNISTD_H 1$(DL) >> $@
|
@echo $(DL)#define HAVE_UNISTD_H 1$(DL) >> $@
|
||||||
|
@echo $(DL)#define RECV_TYPE_ARG1 int$(DL) >> $@
|
||||||
|
@echo $(DL)#define RECV_TYPE_ARG2 char *$(DL) >> $@
|
||||||
|
@echo $(DL)#define RECV_TYPE_ARG3 int$(DL) >> $@
|
||||||
|
@echo $(DL)#define RECV_TYPE_ARG4 int$(DL) >> $@
|
||||||
|
@echo $(DL)#define RECV_TYPE_RETV int$(DL) >> $@
|
||||||
@echo $(DL)#define RETSIGTYPE void$(DL) >> $@
|
@echo $(DL)#define RETSIGTYPE void$(DL) >> $@
|
||||||
|
@echo $(DL)#define SEND_QUAL_ARG2$(DL) >> $@
|
||||||
|
@echo $(DL)#define SEND_TYPE_ARG1 int$(DL) >> $@
|
||||||
|
@echo $(DL)#define SEND_TYPE_ARG2 char *$(DL) >> $@
|
||||||
|
@echo $(DL)#define SEND_TYPE_ARG3 int$(DL) >> $@
|
||||||
|
@echo $(DL)#define SEND_TYPE_ARG4 int$(DL) >> $@
|
||||||
|
@echo $(DL)#define SEND_TYPE_RETV int$(DL) >> $@
|
||||||
@echo $(DL)#define SIZEOF_CURL_OFF_T 4$(DL) >> $@
|
@echo $(DL)#define SIZEOF_CURL_OFF_T 4$(DL) >> $@
|
||||||
@echo $(DL)#define STDC_HEADERS 1$(DL) >> $@
|
@echo $(DL)#define STDC_HEADERS 1$(DL) >> $@
|
||||||
@echo $(DL)#define TIME_WITH_SYS_TIME 1$(DL) >> $@
|
@echo $(DL)#define TIME_WITH_SYS_TIME 1$(DL) >> $@
|
||||||
|
@@ -19,8 +19,8 @@ USE_WATT32 = 0
|
|||||||
|
|
||||||
CC = cl
|
CC = cl
|
||||||
|
|
||||||
CFLAGS = -nologo -$(CFG_MODEL)$(DEBUG_MODEL) -W2 -Yd -Zi
|
CFLAGS = -nologo -$(CFG_MODEL)$(DEBUG_MODEL) -W3 -Yd -Zi
|
||||||
LDFLAGS = -machine:i386 -map -warn:2
|
LDFLAGS = -machine:i386 -map
|
||||||
|
|
||||||
OBJ_DIR = VC6_obj
|
OBJ_DIR = VC6_obj
|
||||||
DEF_FILE = cares.def
|
DEF_FILE = cares.def
|
||||||
@@ -36,7 +36,7 @@ EX_LIBS = advapi32.lib ws2_32.lib
|
|||||||
|
|
||||||
!if "$(DEBUG_MODEL)" == "d"
|
!if "$(DEBUG_MODEL)" == "d"
|
||||||
CFLAGS = $(CFLAGS) -D_DEBUG -GZ
|
CFLAGS = $(CFLAGS) -D_DEBUG -GZ
|
||||||
LDFLAGS = $(LDFLAGS) -debug -debugtype:coff -fixed:no
|
LDFLAGS = $(LDFLAGS) -debug -fixed:no
|
||||||
|
|
||||||
!else
|
!else
|
||||||
CFLAGS = $(CFLAGS) -O2 -Og
|
CFLAGS = $(CFLAGS) -O2 -Og
|
||||||
@@ -52,6 +52,7 @@ OBJECTS = $(OBJ_DIR)\ares_fds.obj \
|
|||||||
$(OBJ_DIR)\ares_search.obj \
|
$(OBJ_DIR)\ares_search.obj \
|
||||||
$(OBJ_DIR)\ares__get_hostent.obj \
|
$(OBJ_DIR)\ares__get_hostent.obj \
|
||||||
$(OBJ_DIR)\ares_gethostbyaddr.obj \
|
$(OBJ_DIR)\ares_gethostbyaddr.obj \
|
||||||
|
$(OBJ_DIR)\ares_getsock.obj \
|
||||||
$(OBJ_DIR)\ares_send.obj \
|
$(OBJ_DIR)\ares_send.obj \
|
||||||
$(OBJ_DIR)\ares__read_line.obj \
|
$(OBJ_DIR)\ares__read_line.obj \
|
||||||
$(OBJ_DIR)\ares_gethostbyname.obj \
|
$(OBJ_DIR)\ares_gethostbyname.obj \
|
||||||
@@ -78,10 +79,10 @@ all: $(OBJ_DIR) cares.lib cares.dll cares_imp.lib ahost.exe adig.exe
|
|||||||
$(OBJ_DIR):
|
$(OBJ_DIR):
|
||||||
mkdir $(OBJ_DIR)
|
mkdir $(OBJ_DIR)
|
||||||
|
|
||||||
cares.lib: $(OBJECTS)
|
cares.lib: $(OBJ_DIR) $(OBJECTS)
|
||||||
lib -nologo -out:$@ $(OBJECTS)
|
lib -nologo -out:$@ $(OBJECTS)
|
||||||
|
|
||||||
cares_imp.lib cares.dll: $(DEF_FILE) $(OBJECTS)
|
cares_imp.lib cares.dll: $(OBJ_DIR) $(DEF_FILE) $(OBJECTS)
|
||||||
link $(LDFLAGS) -dll -implib:cares_imp.lib -out:cares.dll \
|
link $(LDFLAGS) -dll -implib:cares_imp.lib -out:cares.dll \
|
||||||
-def:$(DEF_FILE) $(OBJECTS) $(EX_LIBS)
|
-def:$(DEF_FILE) $(OBJECTS) $(EX_LIBS)
|
||||||
|
|
||||||
@@ -98,6 +99,7 @@ $(DEF_FILE): $(OBJECTS) Makefile.VC6
|
|||||||
@echo ares_free_string >> $@
|
@echo ares_free_string >> $@
|
||||||
@echo ares_gethostbyaddr >> $@
|
@echo ares_gethostbyaddr >> $@
|
||||||
@echo ares_gethostbyname >> $@
|
@echo ares_gethostbyname >> $@
|
||||||
|
@echo ares_getsock >> $@
|
||||||
@echo ares_init >> $@
|
@echo ares_init >> $@
|
||||||
@echo ares_init_options >> $@
|
@echo ares_init_options >> $@
|
||||||
@echo ares_mkquery >> $@
|
@echo ares_mkquery >> $@
|
||||||
@@ -119,10 +121,10 @@ $(DEF_FILE): $(OBJECTS) Makefile.VC6
|
|||||||
@echo ares_gettimeofday >> $@
|
@echo ares_gettimeofday >> $@
|
||||||
@echo ares_parse_aaaa_reply >> $@
|
@echo ares_parse_aaaa_reply >> $@
|
||||||
|
|
||||||
ahost.exe: $(OBJ_DIR)\ahost.obj cares_imp.lib
|
ahost.exe: $(OBJ_DIR) $(OBJ_DIR)\ahost.obj cares_imp.lib
|
||||||
link $(LDFLAGS) -out:$@ $(OBJ_DIR)\ahost.obj cares_imp.lib $(EX_LIBS)
|
link $(LDFLAGS) -out:$@ $(OBJ_DIR)\ahost.obj cares_imp.lib $(EX_LIBS)
|
||||||
|
|
||||||
adig.exe: $(OBJ_DIR)\adig.obj $(OBJ_DIR)\getopt.obj cares_imp.lib
|
adig.exe: $(OBJ_DIR) $(OBJ_DIR)\adig.obj $(OBJ_DIR)\getopt.obj cares_imp.lib
|
||||||
link $(LDFLAGS) -out:$@ $(OBJ_DIR)\adig.obj $(OBJ_DIR)\getopt.obj cares_imp.lib $(EX_LIBS)
|
link $(LDFLAGS) -out:$@ $(OBJ_DIR)\adig.obj $(OBJ_DIR)\getopt.obj cares_imp.lib $(EX_LIBS)
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
@@ -138,51 +140,58 @@ vclean realclean: clean
|
|||||||
#
|
#
|
||||||
# Copyright "gcc -MM .."
|
# Copyright "gcc -MM .."
|
||||||
#
|
#
|
||||||
$(OBJ_DIR)\ares_fds.obj: ares_fds.c setup.h ares.h ares_private.h ares_ipv6.h
|
$(OBJ_DIR)\ares_fds.obj: ares_fds.c setup.h setup_once.h ares.h ares_private.h \
|
||||||
$(OBJ_DIR)\ares_process.obj: ares_process.c setup.h nameser.h ares.h ares_dns.h \
|
|
||||||
ares_private.h ares_ipv6.h
|
|
||||||
$(OBJ_DIR)\ares_free_hostent.obj: ares_free_hostent.c setup.h ares.h ares_private.h \
|
|
||||||
ares_ipv6.h
|
ares_ipv6.h
|
||||||
$(OBJ_DIR)\ares_query.obj: ares_query.c setup.h nameser.h ares.h ares_dns.h \
|
$(OBJ_DIR)\ares_process.obj: ares_process.c setup.h setup_once.h nameser.h \
|
||||||
|
ares.h ares_dns.h ares_private.h ares_ipv6.h
|
||||||
|
$(OBJ_DIR)\ares_free_hostent.obj: ares_free_hostent.c setup.h setup_once.h \
|
||||||
|
ares.h ares_private.h ares_ipv6.h
|
||||||
|
$(OBJ_DIR)\ares_query.obj: ares_query.c setup.h setup_once.h nameser.h \
|
||||||
|
ares.h ares_dns.h ares_private.h ares_ipv6.h
|
||||||
|
$(OBJ_DIR)\ares__close_sockets.obj: ares__close_sockets.c setup.h setup_once.h \
|
||||||
|
ares.h ares_private.h ares_ipv6.h
|
||||||
|
$(OBJ_DIR)\ares_free_string.obj: ares_free_string.c setup.h setup_once.h ares.h
|
||||||
|
$(OBJ_DIR)\ares_search.obj: ares_search.c setup.h setup_once.h nameser.h \
|
||||||
|
ares.h ares_private.h ares_ipv6.h
|
||||||
|
$(OBJ_DIR)\ares__get_hostent.obj: ares__get_hostent.c setup.h setup_once.h \
|
||||||
|
ares.h ares_private.h ares_ipv6.h inet_net_pton.h
|
||||||
|
$(OBJ_DIR)\ares_gethostbyaddr.obj: ares_gethostbyaddr.c setup.h setup_once.h \
|
||||||
|
nameser.h ares.h ares_private.h ares_ipv6.h inet_net_pton.h
|
||||||
|
$(OBJ_DIR)\ares_send.obj: ares_send.c setup.h setup_once.h nameser.h ares.h \
|
||||||
|
ares_dns.h ares_private.h ares_ipv6.h
|
||||||
|
$(OBJ_DIR)\ares__read_line.obj: ares__read_line.c setup.h setup_once.h ares.h \
|
||||||
ares_private.h ares_ipv6.h
|
ares_private.h ares_ipv6.h
|
||||||
$(OBJ_DIR)\ares__close_sockets.obj: ares__close_sockets.c setup.h ares.h \
|
$(OBJ_DIR)\ares_gethostbyname.obj: ares_gethostbyname.c setup.h setup_once.h \
|
||||||
|
nameser.h ares.h ares_private.h ares_ipv6.h inet_net_pton.h bitncmp.h
|
||||||
|
$(OBJ_DIR)\ares_strerror.obj: ares_strerror.c setup.h setup_once.h ares.h
|
||||||
|
$(OBJ_DIR)\ares_cancel.obj: ares_cancel.c setup.h setup_once.h ares.h \
|
||||||
ares_private.h ares_ipv6.h
|
ares_private.h ares_ipv6.h
|
||||||
$(OBJ_DIR)\ares_free_string.obj: ares_free_string.c setup.h ares.h
|
$(OBJ_DIR)\ares_init.obj: ares_init.c setup.h setup_once.h nameser.h ares.h \
|
||||||
$(OBJ_DIR)\ares_search.obj: ares_search.c setup.h nameser.h ares.h ares_private.h \
|
|
||||||
ares_ipv6.h
|
|
||||||
$(OBJ_DIR)\ares__get_hostent.obj: ares__get_hostent.c setup.h ares.h ares_private.h \
|
|
||||||
ares_ipv6.h inet_net_pton.h
|
|
||||||
$(OBJ_DIR)\ares_gethostbyaddr.obj: ares_gethostbyaddr.c setup.h nameser.h ares.h \
|
|
||||||
ares_private.h ares_ipv6.h inet_net_pton.h
|
ares_private.h ares_ipv6.h inet_net_pton.h
|
||||||
$(OBJ_DIR)\ares_send.obj: ares_send.c setup.h nameser.h ares.h ares_dns.h \
|
$(OBJ_DIR)\ares_timeout.obj: ares_timeout.c setup.h setup_once.h ares.h \
|
||||||
ares_private.h ares_ipv6.h
|
ares_private.h ares_ipv6.h
|
||||||
$(OBJ_DIR)\ares__read_line.obj: ares__read_line.c setup.h ares.h ares_private.h \
|
$(OBJ_DIR)\ares_destroy.obj: ares_destroy.c setup.h setup_once.h ares.h \
|
||||||
|
ares_private.h ares_ipv6.h
|
||||||
|
$(OBJ_DIR)\ares_mkquery.obj: ares_mkquery.c setup.h setup_once.h nameser.h \
|
||||||
|
ares.h ares_dns.h
|
||||||
|
$(OBJ_DIR)\ares_version.obj: ares_version.c setup.h setup_once.h ares_version.h
|
||||||
|
$(OBJ_DIR)\ares_expand_name.obj: ares_expand_name.c setup.h setup_once.h \
|
||||||
|
nameser.h ares.h ares_private.h ares_ipv6.h
|
||||||
|
$(OBJ_DIR)\ares_parse_a_reply.obj: ares_parse_a_reply.c setup.h setup_once.h \
|
||||||
|
nameser.h ares.h ares_dns.h ares_private.h ares_ipv6.h
|
||||||
|
$(OBJ_DIR)\windows_port.obj: windows_port.c setup.h setup_once.h nameser.h \
|
||||||
|
ares.h ares_private.h ares_ipv6.h
|
||||||
|
$(OBJ_DIR)\ares_expand_string.obj: ares_expand_string.c setup.h setup_once.h \
|
||||||
|
nameser.h ares.h ares_private.h ares_ipv6.h
|
||||||
|
$(OBJ_DIR)\ares_parse_ptr_reply.obj: ares_parse_ptr_reply.c setup.h \
|
||||||
|
setup_once.h nameser.h ares.h ares_dns.h ares_private.h ares_ipv6.h
|
||||||
|
$(OBJ_DIR)\ares_parse_aaaa_reply.obj: ares_parse_aaaa_reply.c setup.h \
|
||||||
|
setup_once.h nameser.h ares.h ares_dns.h inet_net_pton.h ares_private.h \
|
||||||
ares_ipv6.h
|
ares_ipv6.h
|
||||||
$(OBJ_DIR)\ares_gethostbyname.obj: ares_gethostbyname.c setup.h nameser.h ares.h \
|
$(OBJ_DIR)\ares_getnameinfo.obj: ares_getnameinfo.c setup.h setup_once.h \
|
||||||
ares_private.h ares_ipv6.h inet_net_pton.h bitncmp.h
|
nameser.h ares.h ares_private.h ares_ipv6.h inet_ntop.h
|
||||||
$(OBJ_DIR)\ares_strerror.obj: ares_strerror.c setup.h ares.h
|
$(OBJ_DIR)\inet_net_pton.obj: inet_net_pton.c setup.h setup_once.h nameser.h \
|
||||||
$(OBJ_DIR)\ares_cancel.obj: ares_cancel.c setup.h ares.h ares_private.h ares_ipv6.h
|
|
||||||
$(OBJ_DIR)\ares_init.obj: ares_init.c setup.h nameser.h ares.h ares_private.h \
|
|
||||||
ares_ipv6.h inet_net_pton.h
|
ares_ipv6.h inet_net_pton.h
|
||||||
$(OBJ_DIR)\ares_timeout.obj: ares_timeout.c setup.h ares.h ares_private.h ares_ipv6.h
|
|
||||||
$(OBJ_DIR)\ares_destroy.obj: ares_destroy.c setup.h ares.h ares_private.h ares_ipv6.h
|
|
||||||
$(OBJ_DIR)\ares_mkquery.obj: ares_mkquery.c setup.h nameser.h ares.h ares_dns.h
|
|
||||||
$(OBJ_DIR)\ares_version.obj: ares_version.c setup.h ares_version.h
|
|
||||||
$(OBJ_DIR)\ares_expand_name.obj: ares_expand_name.c setup.h nameser.h ares.h \
|
|
||||||
ares_private.h ares_ipv6.h
|
|
||||||
$(OBJ_DIR)\ares_parse_a_reply.obj: ares_parse_a_reply.c setup.h nameser.h ares.h \
|
|
||||||
ares_dns.h ares_private.h ares_ipv6.h
|
|
||||||
$(OBJ_DIR)\windows_port.obj: windows_port.c setup.h nameser.h ares.h ares_private.h \
|
|
||||||
ares_ipv6.h
|
|
||||||
$(OBJ_DIR)\ares_expand_string.obj: ares_expand_string.c setup.h nameser.h ares.h \
|
|
||||||
ares_private.h ares_ipv6.h
|
|
||||||
$(OBJ_DIR)\ares_parse_ptr_reply.obj: ares_parse_ptr_reply.c setup.h nameser.h ares.h \
|
|
||||||
ares_dns.h ares_private.h ares_ipv6.h
|
|
||||||
$(OBJ_DIR)\ares_parse_aaaa_reply.obj: ares_parse_aaaa_reply.c setup.h nameser.h ares.h \
|
|
||||||
ares_dns.h inet_net_pton.h ares_private.h ares_ipv6.h
|
|
||||||
$(OBJ_DIR)\ares_getnameinfo.obj: ares_getnameinfo.c setup.h nameser.h ares.h \
|
|
||||||
ares_private.h ares_ipv6.h inet_ntop.h
|
|
||||||
$(OBJ_DIR)\inet_net_pton.obj: inet_net_pton.c setup.h nameser.h ares_ipv6.h \
|
|
||||||
inet_net_pton.h
|
|
||||||
$(OBJ_DIR)\bitncmp.obj: bitncmp.c bitncmp.h
|
$(OBJ_DIR)\bitncmp.obj: bitncmp.c bitncmp.h
|
||||||
$(OBJ_DIR)\inet_ntop.obj: inet_ntop.c setup.h nameser.h ares_ipv6.h inet_ntop.h
|
$(OBJ_DIR)\inet_ntop.obj: inet_ntop.c setup.h setup_once.h nameser.h \
|
||||||
|
ares_ipv6.h inet_ntop.h
|
||||||
|
1147
ares/acinclude.m4
1147
ares/acinclude.m4
File diff suppressed because it is too large
Load Diff
28
ares/adig.c
28
ares/adig.c
@@ -227,7 +227,7 @@ int main(int argc, char **argv)
|
|||||||
/* Set the TCP port number. */
|
/* Set the TCP port number. */
|
||||||
if (!isdigit((unsigned char)*optarg))
|
if (!isdigit((unsigned char)*optarg))
|
||||||
usage();
|
usage();
|
||||||
options.tcp_port = strtol(optarg, NULL, 0);
|
options.tcp_port = (unsigned short)strtol(optarg, NULL, 0);
|
||||||
optmask |= ARES_OPT_TCP_PORT;
|
optmask |= ARES_OPT_TCP_PORT;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -235,7 +235,7 @@ int main(int argc, char **argv)
|
|||||||
/* Set the UDP port number. */
|
/* Set the UDP port number. */
|
||||||
if (!isdigit((unsigned char)*optarg))
|
if (!isdigit((unsigned char)*optarg))
|
||||||
usage();
|
usage();
|
||||||
options.udp_port = strtol(optarg, NULL, 0);
|
options.udp_port = (unsigned short)strtol(optarg, NULL, 0);
|
||||||
optmask |= ARES_OPT_UDP_PORT;
|
optmask |= ARES_OPT_UDP_PORT;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -396,7 +396,7 @@ static const unsigned char *display_question(const unsigned char *aptr,
|
|||||||
*/
|
*/
|
||||||
if (aptr + QFIXEDSZ > abuf + alen)
|
if (aptr + QFIXEDSZ > abuf + alen)
|
||||||
{
|
{
|
||||||
free(name);
|
ares_free_string(name);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -412,7 +412,7 @@ static const unsigned char *display_question(const unsigned char *aptr,
|
|||||||
if (dnsclass != C_IN)
|
if (dnsclass != C_IN)
|
||||||
printf("\t%s", class_name(dnsclass));
|
printf("\t%s", class_name(dnsclass));
|
||||||
printf("\t%s\n", type_name(type));
|
printf("\t%s\n", type_name(type));
|
||||||
free(name);
|
ares_free_string(name);
|
||||||
return aptr;
|
return aptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -436,7 +436,7 @@ static const unsigned char *display_rr(const unsigned char *aptr,
|
|||||||
*/
|
*/
|
||||||
if (aptr + RRFIXEDSZ > abuf + alen)
|
if (aptr + RRFIXEDSZ > abuf + alen)
|
||||||
{
|
{
|
||||||
free(name);
|
ares_free_string(name);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -449,7 +449,7 @@ static const unsigned char *display_rr(const unsigned char *aptr,
|
|||||||
aptr += RRFIXEDSZ;
|
aptr += RRFIXEDSZ;
|
||||||
if (aptr + dlen > abuf + alen)
|
if (aptr + dlen > abuf + alen)
|
||||||
{
|
{
|
||||||
free(name);
|
ares_free_string(name);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -458,7 +458,7 @@ static const unsigned char *display_rr(const unsigned char *aptr,
|
|||||||
if (dnsclass != C_IN)
|
if (dnsclass != C_IN)
|
||||||
printf("\t%s", class_name(dnsclass));
|
printf("\t%s", class_name(dnsclass));
|
||||||
printf("\t%s", type_name(type));
|
printf("\t%s", type_name(type));
|
||||||
free(name);
|
ares_free_string(name);
|
||||||
|
|
||||||
/* Display the RR data. Don't touch aptr. */
|
/* Display the RR data. Don't touch aptr. */
|
||||||
switch (type)
|
switch (type)
|
||||||
@@ -476,7 +476,7 @@ static const unsigned char *display_rr(const unsigned char *aptr,
|
|||||||
if (status != ARES_SUCCESS)
|
if (status != ARES_SUCCESS)
|
||||||
return NULL;
|
return NULL;
|
||||||
printf("\t%s.", name);
|
printf("\t%s.", name);
|
||||||
free(name);
|
ares_free_string(name);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case T_HINFO:
|
case T_HINFO:
|
||||||
@@ -500,13 +500,13 @@ static const unsigned char *display_rr(const unsigned char *aptr,
|
|||||||
if (status != ARES_SUCCESS)
|
if (status != ARES_SUCCESS)
|
||||||
return NULL;
|
return NULL;
|
||||||
printf("\t%s.", name);
|
printf("\t%s.", name);
|
||||||
free(name);
|
ares_free_string(name);
|
||||||
p += len;
|
p += len;
|
||||||
status = ares_expand_name(p, abuf, alen, &name, &len);
|
status = ares_expand_name(p, abuf, alen, &name, &len);
|
||||||
if (status != ARES_SUCCESS)
|
if (status != ARES_SUCCESS)
|
||||||
return NULL;
|
return NULL;
|
||||||
printf("\t%s.", name);
|
printf("\t%s.", name);
|
||||||
free(name);
|
ares_free_string(name);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case T_MX:
|
case T_MX:
|
||||||
@@ -520,7 +520,7 @@ static const unsigned char *display_rr(const unsigned char *aptr,
|
|||||||
if (status != ARES_SUCCESS)
|
if (status != ARES_SUCCESS)
|
||||||
return NULL;
|
return NULL;
|
||||||
printf("\t%s.", name);
|
printf("\t%s.", name);
|
||||||
free(name);
|
ares_free_string(name);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case T_SOA:
|
case T_SOA:
|
||||||
@@ -532,13 +532,13 @@ static const unsigned char *display_rr(const unsigned char *aptr,
|
|||||||
if (status != ARES_SUCCESS)
|
if (status != ARES_SUCCESS)
|
||||||
return NULL;
|
return NULL;
|
||||||
printf("\t%s.\n", name);
|
printf("\t%s.\n", name);
|
||||||
free(name);
|
ares_free_string(name);
|
||||||
p += len;
|
p += len;
|
||||||
status = ares_expand_name(p, abuf, alen, &name, &len);
|
status = ares_expand_name(p, abuf, alen, &name, &len);
|
||||||
if (status != ARES_SUCCESS)
|
if (status != ARES_SUCCESS)
|
||||||
return NULL;
|
return NULL;
|
||||||
printf("\t\t\t\t\t\t%s.\n", name);
|
printf("\t\t\t\t\t\t%s.\n", name);
|
||||||
free(name);
|
ares_free_string(name);
|
||||||
p += len;
|
p += len;
|
||||||
if (p + 20 > aptr + dlen)
|
if (p + 20 > aptr + dlen)
|
||||||
return NULL;
|
return NULL;
|
||||||
@@ -592,7 +592,7 @@ static const unsigned char *display_rr(const unsigned char *aptr,
|
|||||||
if (status != ARES_SUCCESS)
|
if (status != ARES_SUCCESS)
|
||||||
return NULL;
|
return NULL;
|
||||||
printf("\t%s.", name);
|
printf("\t%s.", name);
|
||||||
free(name);
|
ares_free_string(name);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
42
ares/ahost.c
42
ares/ahost.c
@@ -1,4 +1,6 @@
|
|||||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
|
*
|
||||||
|
* $Id$
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this
|
* Permission to use, copy, modify, and distribute this
|
||||||
* software and its documentation for any purpose and without
|
* software and its documentation for any purpose and without
|
||||||
@@ -30,6 +32,10 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
#ifdef HAVE_GETOPT_H
|
||||||
|
#include <getopt.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "ares.h"
|
#include "ares.h"
|
||||||
#include "ares_dns.h"
|
#include "ares_dns.h"
|
||||||
#include "inet_ntop.h"
|
#include "inet_ntop.h"
|
||||||
@@ -52,7 +58,7 @@ static void usage(void);
|
|||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
ares_channel channel;
|
ares_channel channel;
|
||||||
int status, nfds;
|
int status, nfds, c, addr_family = AF_INET;
|
||||||
fd_set read_fds, write_fds;
|
fd_set read_fds, write_fds;
|
||||||
struct timeval *tvp, tv;
|
struct timeval *tvp, tv;
|
||||||
struct in_addr addr4;
|
struct in_addr addr4;
|
||||||
@@ -64,7 +70,28 @@ int main(int argc, char **argv)
|
|||||||
WSAStartup(wVersionRequested, &wsaData);
|
WSAStartup(wVersionRequested, &wsaData);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (argc <= 1)
|
while ((c = getopt(argc,argv,"t:h")) != -1)
|
||||||
|
{
|
||||||
|
switch (c)
|
||||||
|
{
|
||||||
|
case 't':
|
||||||
|
if (!strcasecmp(optarg,"a"))
|
||||||
|
addr_family = AF_INET;
|
||||||
|
else if (!strcasecmp(optarg,"aaaa"))
|
||||||
|
addr_family = AF_INET6;
|
||||||
|
else
|
||||||
|
usage();
|
||||||
|
break;
|
||||||
|
case 'h':
|
||||||
|
default:
|
||||||
|
usage();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
argc -= optind;
|
||||||
|
argv += optind;
|
||||||
|
if (argc < 1)
|
||||||
usage();
|
usage();
|
||||||
|
|
||||||
status = ares_init(&channel);
|
status = ares_init(&channel);
|
||||||
@@ -75,7 +102,7 @@ int main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Initiate the queries, one per command-line argument. */
|
/* Initiate the queries, one per command-line argument. */
|
||||||
for (argv++; *argv; argv++)
|
for ( ; *argv; argv++)
|
||||||
{
|
{
|
||||||
if (ares_inet_pton(AF_INET, *argv, &addr4) == 1)
|
if (ares_inet_pton(AF_INET, *argv, &addr4) == 1)
|
||||||
{
|
{
|
||||||
@@ -89,8 +116,7 @@ int main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* assume user wants A-records */
|
ares_gethostbyname(channel, *argv, addr_family, callback, *argv);
|
||||||
ares_gethostbyname(channel, *argv, AF_INET, callback, *argv);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -132,8 +158,8 @@ static void callback(void *arg, int status, struct hostent *host)
|
|||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
printf (", Aliases: ");
|
printf (", Aliases: ");
|
||||||
for (i = 0; host->h_aliases[i]; i++)
|
for (i = 0; host->h_aliases[i]; i++)
|
||||||
printf("%s ", host->h_aliases[i]);
|
printf("%s ", host->h_aliases[i]);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@@ -143,6 +169,6 @@ static void callback(void *arg, int status, struct hostent *host)
|
|||||||
|
|
||||||
static void usage(void)
|
static void usage(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "usage: ahost {host|addr} ...\n");
|
fprintf(stderr, "usage: ahost [-t {a|aaaa}] {host|addr} ...\n");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
60
ares/ares.h
60
ares/ares.h
@@ -31,7 +31,7 @@
|
|||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#include <tcp.h>
|
#include <tcp.h>
|
||||||
#elif defined(WIN32)
|
#elif defined(WIN32) && !defined(__CYGWIN__)
|
||||||
#include <winsock2.h>
|
#include <winsock2.h>
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#else
|
#else
|
||||||
@@ -70,8 +70,8 @@ extern "C" {
|
|||||||
#define ARES_EBADFLAGS 18
|
#define ARES_EBADFLAGS 18
|
||||||
|
|
||||||
/* ares_getaddrinfo error codes */
|
/* ares_getaddrinfo error codes */
|
||||||
#define ARES_ENONAME 19
|
#define ARES_ENONAME 19
|
||||||
#define ARES_EBADHINTS 20
|
#define ARES_EBADHINTS 20
|
||||||
|
|
||||||
/* Flag values */
|
/* Flag values */
|
||||||
#define ARES_FLAG_USEVC (1 << 0)
|
#define ARES_FLAG_USEVC (1 << 0)
|
||||||
@@ -93,6 +93,7 @@ extern "C" {
|
|||||||
#define ARES_OPT_SERVERS (1 << 6)
|
#define ARES_OPT_SERVERS (1 << 6)
|
||||||
#define ARES_OPT_DOMAINS (1 << 7)
|
#define ARES_OPT_DOMAINS (1 << 7)
|
||||||
#define ARES_OPT_LOOKUPS (1 << 8)
|
#define ARES_OPT_LOOKUPS (1 << 8)
|
||||||
|
#define ARES_OPT_SOCK_STATE_CB (1 << 9)
|
||||||
|
|
||||||
/* Nameinfo flag values */
|
/* Nameinfo flag values */
|
||||||
#define ARES_NI_NOFQDN (1 << 0)
|
#define ARES_NI_NOFQDN (1 << 0)
|
||||||
@@ -108,27 +109,44 @@ extern "C" {
|
|||||||
#define ARES_NI_LOOKUPHOST (1 << 8)
|
#define ARES_NI_LOOKUPHOST (1 << 8)
|
||||||
#define ARES_NI_LOOKUPSERVICE (1 << 9)
|
#define ARES_NI_LOOKUPSERVICE (1 << 9)
|
||||||
/* Reserved for future use */
|
/* Reserved for future use */
|
||||||
#define ARES_NI_IDN (1 << 10)
|
#define ARES_NI_IDN (1 << 10)
|
||||||
#define ARES_NI_IDN_ALLOW_UNASSIGNED (1 << 11)
|
#define ARES_NI_IDN_ALLOW_UNASSIGNED (1 << 11)
|
||||||
#define ARES_NI_IDN_USE_STD3_ASCII_RULES (1 << 12)
|
#define ARES_NI_IDN_USE_STD3_ASCII_RULES (1 << 12)
|
||||||
|
|
||||||
/* Addrinfo flag values */
|
/* Addrinfo flag values */
|
||||||
#define ARES_AI_CANONNAME (1 << 0)
|
#define ARES_AI_CANONNAME (1 << 0)
|
||||||
#define ARES_AI_NUMERICHOST (1 << 1)
|
#define ARES_AI_NUMERICHOST (1 << 1)
|
||||||
#define ARES_AI_PASSIVE (1 << 2)
|
#define ARES_AI_PASSIVE (1 << 2)
|
||||||
#define ARES_AI_NUMERICSERV (1 << 3)
|
#define ARES_AI_NUMERICSERV (1 << 3)
|
||||||
#define ARES_AI_V4MAPPED (1 << 4)
|
#define ARES_AI_V4MAPPED (1 << 4)
|
||||||
#define ARES_AI_ALL (1 << 5)
|
#define ARES_AI_ALL (1 << 5)
|
||||||
#define ARES_AI_ADDRCONFIG (1 << 6)
|
#define ARES_AI_ADDRCONFIG (1 << 6)
|
||||||
/* Reserved for future use */
|
/* Reserved for future use */
|
||||||
#define ARES_AI_IDN (1 << 10)
|
#define ARES_AI_IDN (1 << 10)
|
||||||
#define ARES_AI_IDN_ALLOW_UNASSIGNED (1 << 11)
|
#define ARES_AI_IDN_ALLOW_UNASSIGNED (1 << 11)
|
||||||
#define ARES_AI_IDN_USE_STD3_ASCII_RULES (1 << 12)
|
#define ARES_AI_IDN_USE_STD3_ASCII_RULES (1 << 12)
|
||||||
#define ARES_AI_CANONIDN (1 << 13)
|
#define ARES_AI_CANONIDN (1 << 13)
|
||||||
|
|
||||||
#define ARES_AI_MASK (ARES_AI_CANONNAME|ARES_AI_NUMERICHOST|ARES_AI_PASSIVE| \
|
#define ARES_AI_MASK (ARES_AI_CANONNAME|ARES_AI_NUMERICHOST|ARES_AI_PASSIVE| \
|
||||||
ARES_AI_NUMERICSERV|ARES_AI_V4MAPPED|ARES_AI_ALL| \
|
ARES_AI_NUMERICSERV|ARES_AI_V4MAPPED|ARES_AI_ALL| \
|
||||||
ARES_AI_ADDRCONFIG)
|
ARES_AI_ADDRCONFIG)
|
||||||
|
#define ARES_GETSOCK_MAXNUM 16 /* ares_getsock() can return info about this
|
||||||
|
many sockets */
|
||||||
|
#define ARES_GETSOCK_READABLE(bits,num) (bits & (1<< (num)))
|
||||||
|
#define ARES_GETSOCK_WRITABLE(bits,num) (bits & (1 << ((num) + \
|
||||||
|
ARES_GETSOCK_MAXNUM)))
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
typedef void (*ares_sock_state_cb)(void *data,
|
||||||
|
SOCKET socket,
|
||||||
|
int readable,
|
||||||
|
int writable);
|
||||||
|
#else
|
||||||
|
typedef void (*ares_sock_state_cb)(void *data,
|
||||||
|
int socket,
|
||||||
|
int readable,
|
||||||
|
int writable);
|
||||||
|
#endif
|
||||||
|
|
||||||
struct ares_options {
|
struct ares_options {
|
||||||
int flags;
|
int flags;
|
||||||
@@ -142,6 +160,8 @@ struct ares_options {
|
|||||||
char **domains;
|
char **domains;
|
||||||
int ndomains;
|
int ndomains;
|
||||||
char *lookups;
|
char *lookups;
|
||||||
|
ares_sock_state_cb sock_state_cb;
|
||||||
|
void *sock_state_cb_data;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct hostent;
|
struct hostent;
|
||||||
@@ -172,9 +192,11 @@ void ares_gethostbyname(ares_channel channel, const char *name, int family,
|
|||||||
void ares_gethostbyaddr(ares_channel channel, const void *addr, int addrlen,
|
void ares_gethostbyaddr(ares_channel channel, const void *addr, int addrlen,
|
||||||
int family, ares_host_callback callback, void *arg);
|
int family, ares_host_callback callback, void *arg);
|
||||||
void ares_getnameinfo(ares_channel channel, const struct sockaddr *sa,
|
void ares_getnameinfo(ares_channel channel, const struct sockaddr *sa,
|
||||||
socklen_t salen, int flags, ares_nameinfo_callback callback,
|
socklen_t salen, int flags,
|
||||||
|
ares_nameinfo_callback callback,
|
||||||
void *arg);
|
void *arg);
|
||||||
int ares_fds(ares_channel channel, fd_set *read_fds, fd_set *write_fds);
|
int ares_fds(ares_channel channel, fd_set *read_fds, fd_set *write_fds);
|
||||||
|
int ares_getsock(ares_channel channel, int *socks, int numsocks);
|
||||||
struct timeval *ares_timeout(ares_channel channel, struct timeval *maxtv,
|
struct timeval *ares_timeout(ares_channel channel, struct timeval *maxtv,
|
||||||
struct timeval *tv);
|
struct timeval *tv);
|
||||||
void ares_process(ares_channel channel, fd_set *read_fds, fd_set *write_fds);
|
void ares_process(ares_channel channel, fd_set *read_fds, fd_set *write_fds);
|
||||||
|
@@ -1,3 +1,5 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this
|
* Permission to use, copy, modify, and distribute this
|
||||||
@@ -23,7 +25,7 @@
|
|||||||
#include "ares.h"
|
#include "ares.h"
|
||||||
#include "ares_private.h"
|
#include "ares_private.h"
|
||||||
|
|
||||||
void ares__close_sockets(struct server_state *server)
|
void ares__close_sockets(ares_channel channel, struct server_state *server)
|
||||||
{
|
{
|
||||||
struct send_request *sendreq;
|
struct send_request *sendreq;
|
||||||
|
|
||||||
@@ -46,11 +48,13 @@ void ares__close_sockets(struct server_state *server)
|
|||||||
/* Close the TCP and UDP sockets. */
|
/* Close the TCP and UDP sockets. */
|
||||||
if (server->tcp_socket != ARES_SOCKET_BAD)
|
if (server->tcp_socket != ARES_SOCKET_BAD)
|
||||||
{
|
{
|
||||||
|
SOCK_STATE_CALLBACK(channel, server->tcp_socket, 0, 0);
|
||||||
closesocket(server->tcp_socket);
|
closesocket(server->tcp_socket);
|
||||||
server->tcp_socket = ARES_SOCKET_BAD;
|
server->tcp_socket = ARES_SOCKET_BAD;
|
||||||
}
|
}
|
||||||
if (server->udp_socket != ARES_SOCKET_BAD)
|
if (server->udp_socket != ARES_SOCKET_BAD)
|
||||||
{
|
{
|
||||||
|
SOCK_STATE_CALLBACK(channel, server->udp_socket, 0, 0);
|
||||||
closesocket(server->udp_socket);
|
closesocket(server->udp_socket);
|
||||||
server->udp_socket = ARES_SOCKET_BAD;
|
server->udp_socket = ARES_SOCKET_BAD;
|
||||||
}
|
}
|
||||||
|
@@ -1,3 +1,5 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this
|
* Permission to use, copy, modify, and distribute this
|
||||||
|
@@ -1,3 +1,5 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this
|
* Permission to use, copy, modify, and distribute this
|
||||||
@@ -50,7 +52,7 @@ int ares__read_line(FILE *fp, char **buf, int *bufsize)
|
|||||||
if ((*buf)[len - 1] == '\n')
|
if ((*buf)[len - 1] == '\n')
|
||||||
{
|
{
|
||||||
(*buf)[len - 1] = 0;
|
(*buf)[len - 1] = 0;
|
||||||
return ARES_SUCCESS;
|
break;
|
||||||
}
|
}
|
||||||
offset = len;
|
offset = len;
|
||||||
|
|
||||||
@@ -61,4 +63,5 @@ int ares__read_line(FILE *fp, char **buf, int *bufsize)
|
|||||||
*buf = newbuf;
|
*buf = newbuf;
|
||||||
*bufsize *= 2;
|
*bufsize *= 2;
|
||||||
}
|
}
|
||||||
|
return ARES_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@@ -34,6 +34,6 @@ might have been stored in their arguments.
|
|||||||
.BR ares_init (3)
|
.BR ares_init (3)
|
||||||
.BR ares_destroy (3)
|
.BR ares_destroy (3)
|
||||||
.SH NOTES
|
.SH NOTES
|
||||||
This function is not compatible with ares.
|
This function was added in c-ares 1.2.0
|
||||||
.SH AUTHOR
|
.SH AUTHOR
|
||||||
Dirk Manske
|
Dirk Manske
|
||||||
|
@@ -1,3 +1,5 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
/* Copyright (C) 2004 by Daniel Stenberg et al
|
/* Copyright (C) 2004 by Daniel Stenberg et al
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this software and its
|
* Permission to use, copy, modify, and distribute this software and its
|
||||||
@@ -38,6 +40,6 @@ void ares_cancel(ares_channel channel)
|
|||||||
if (!(channel->flags & ARES_FLAG_STAYOPEN))
|
if (!(channel->flags & ARES_FLAG_STAYOPEN))
|
||||||
{
|
{
|
||||||
for (i = 0; i < channel->nservers; i++)
|
for (i = 0; i < channel->nservers; i++)
|
||||||
ares__close_sockets(&channel->servers[i]);
|
ares__close_sockets(channel, &channel->servers[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,3 +1,5 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this
|
* Permission to use, copy, modify, and distribute this
|
||||||
@@ -24,7 +26,7 @@ void ares_destroy(ares_channel channel)
|
|||||||
struct query *query;
|
struct query *query;
|
||||||
|
|
||||||
for (i = 0; i < channel->nservers; i++)
|
for (i = 0; i < channel->nservers; i++)
|
||||||
ares__close_sockets(&channel->servers[i]);
|
ares__close_sockets(channel, &channel->servers[i]);
|
||||||
free(channel->servers);
|
free(channel->servers);
|
||||||
for (i = 0; i < channel->ndomains; i++)
|
for (i = 0; i < channel->ndomains; i++)
|
||||||
free(channel->domains[i]);
|
free(channel->domains[i]);
|
||||||
|
@@ -18,18 +18,6 @@
|
|||||||
#ifndef ARES__DNS_H
|
#ifndef ARES__DNS_H
|
||||||
#define ARES__DNS_H
|
#define ARES__DNS_H
|
||||||
|
|
||||||
#ifdef ARES_BIG_ENDIAN
|
|
||||||
/* big-endian aware versions */
|
|
||||||
#define DNS__16BIT(p) (((p)[1] << 8) | (p)[0])
|
|
||||||
#define DNS__32BIT(p) (((p)[3] << 24) | ((p)[2] << 16) | \
|
|
||||||
((p)[1] << 8) | (p)[0])
|
|
||||||
#define DNS__SET16BIT(p, v) (((p)[1] = ((v) >> 8) & 0xff), \
|
|
||||||
((p)[0] = (v) & 0xff))
|
|
||||||
#define DNS__SET32BIT(p, v) (((p)[3] = ((v) >> 24) & 0xff), \
|
|
||||||
((p)[2] = ((v) >> 16) & 0xff), \
|
|
||||||
((p)[1] = ((v) >> 8) & 0xff), \
|
|
||||||
((p)[0] = (v) & 0xff))
|
|
||||||
#else
|
|
||||||
#define DNS__16BIT(p) (((p)[0] << 8) | (p)[1])
|
#define DNS__16BIT(p) (((p)[0] << 8) | (p)[1])
|
||||||
#define DNS__32BIT(p) (((p)[0] << 24) | ((p)[1] << 16) | \
|
#define DNS__32BIT(p) (((p)[0] << 24) | ((p)[1] << 16) | \
|
||||||
((p)[2] << 8) | (p)[3])
|
((p)[2] << 8) | (p)[3])
|
||||||
@@ -39,7 +27,6 @@
|
|||||||
((p)[1] = ((v) >> 16) & 0xff), \
|
((p)[1] = ((v) >> 16) & 0xff), \
|
||||||
((p)[2] = ((v) >> 8) & 0xff), \
|
((p)[2] = ((v) >> 8) & 0xff), \
|
||||||
((p)[3] = (v) & 0xff))
|
((p)[3] = (v) & 0xff))
|
||||||
#endif
|
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
/* we cannot use this approach on systems where we can't access 16/32 bit
|
/* we cannot use this approach on systems where we can't access 16/32 bit
|
||||||
|
@@ -1,3 +1,5 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this
|
* Permission to use, copy, modify, and distribute this
|
||||||
|
@@ -1,3 +1,5 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this
|
* Permission to use, copy, modify, and distribute this
|
||||||
@@ -53,13 +55,13 @@ int ares_expand_string(const unsigned char *encoded,
|
|||||||
*s = malloc(len+1);
|
*s = malloc(len+1);
|
||||||
if (*s == NULL)
|
if (*s == NULL)
|
||||||
return ARES_ENOMEM;
|
return ARES_ENOMEM;
|
||||||
q = *s;
|
q = *s;
|
||||||
strncpy((char *)q, (char *)encoded, len);
|
strncpy((char *)q, (char *)encoded, len);
|
||||||
q[len] = '\0';
|
q[len] = '\0';
|
||||||
|
|
||||||
*s = q;
|
*s = q;
|
||||||
|
|
||||||
*enclen = len+1;
|
*enclen = len+1;
|
||||||
|
|
||||||
return ARES_SUCCESS;
|
return ARES_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@@ -1,3 +1,5 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this
|
* Permission to use, copy, modify, and distribute this
|
||||||
|
@@ -1,3 +1,5 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
/* Copyright 2000 by the Massachusetts Institute of Technology.
|
/* Copyright 2000 by the Massachusetts Institute of Technology.
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this
|
* Permission to use, copy, modify, and distribute this
|
||||||
@@ -16,6 +18,7 @@
|
|||||||
#include "setup.h"
|
#include "setup.h"
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include "ares.h"
|
#include "ares.h"
|
||||||
|
#include "ares_private.h"
|
||||||
|
|
||||||
void ares_free_string(void *str)
|
void ares_free_string(void *str)
|
||||||
{
|
{
|
||||||
|
@@ -1,3 +1,5 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this
|
* Permission to use, copy, modify, and distribute this
|
||||||
@@ -170,7 +172,7 @@ static void host_callback(void *arg, int status, unsigned char *abuf, int alen)
|
|||||||
}
|
}
|
||||||
else if (status == ARES_ENODATA && hquery->family == AF_INET6)
|
else if (status == ARES_ENODATA && hquery->family == AF_INET6)
|
||||||
{
|
{
|
||||||
/* There was no AAAA now lookup an A */
|
/* There was no AAAA. Now lookup an A */
|
||||||
hquery->family = AF_INET;
|
hquery->family = AF_INET;
|
||||||
ares_search(hquery->channel, hquery->name, C_IN, T_A, host_callback,
|
ares_search(hquery->channel, hquery->name, C_IN, T_A, host_callback,
|
||||||
hquery);
|
hquery);
|
||||||
|
@@ -70,7 +70,8 @@ struct nameinfo_query {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
static void nameinfo_callback(void *arg, int status, struct hostent *host);
|
static void nameinfo_callback(void *arg, int status, struct hostent *host);
|
||||||
static char *lookup_service(unsigned short port, int flags, char *buf);
|
static char *lookup_service(unsigned short port, int flags,
|
||||||
|
char *buf, size_t buflen);
|
||||||
#ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID
|
#ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID
|
||||||
static void append_scopeid(struct sockaddr_in6 *addr6, unsigned int scopeid,
|
static void append_scopeid(struct sockaddr_in6 *addr6, unsigned int scopeid,
|
||||||
char *buf, size_t buflen);
|
char *buf, size_t buflen);
|
||||||
@@ -109,7 +110,7 @@ void ares_getnameinfo(ares_channel channel, const struct sockaddr *sa, socklen_t
|
|||||||
port = addr->sin_port;
|
port = addr->sin_port;
|
||||||
else
|
else
|
||||||
port = addr6->sin6_port;
|
port = addr6->sin6_port;
|
||||||
service = lookup_service(port, flags, buf);
|
service = lookup_service(port, flags, buf, sizeof(buf));
|
||||||
callback(arg, ARES_SUCCESS, NULL, service);
|
callback(arg, ARES_SUCCESS, NULL, service);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -122,7 +123,7 @@ void ares_getnameinfo(ares_channel channel, const struct sockaddr *sa, socklen_t
|
|||||||
{
|
{
|
||||||
unsigned int port = 0;
|
unsigned int port = 0;
|
||||||
char ipbuf[IPBUFSIZ];
|
char ipbuf[IPBUFSIZ];
|
||||||
char srvbuf[32];
|
char srvbuf[33];
|
||||||
char *service = NULL;
|
char *service = NULL;
|
||||||
ipbuf[0] = 0;
|
ipbuf[0] = 0;
|
||||||
|
|
||||||
@@ -150,7 +151,7 @@ void ares_getnameinfo(ares_channel channel, const struct sockaddr *sa, socklen_t
|
|||||||
}
|
}
|
||||||
/* They also want a service */
|
/* They also want a service */
|
||||||
if (flags & ARES_NI_LOOKUPSERVICE)
|
if (flags & ARES_NI_LOOKUPSERVICE)
|
||||||
service = lookup_service(port, flags, srvbuf);
|
service = lookup_service(port, flags, srvbuf, sizeof(srvbuf));
|
||||||
callback(arg, ARES_SUCCESS, ipbuf, service);
|
callback(arg, ARES_SUCCESS, ipbuf, service);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -198,10 +199,10 @@ static void nameinfo_callback(void *arg, int status, struct hostent *host)
|
|||||||
{
|
{
|
||||||
if (niquery->family == AF_INET)
|
if (niquery->family == AF_INET)
|
||||||
service = lookup_service(niquery->addr.addr4.sin_port,
|
service = lookup_service(niquery->addr.addr4.sin_port,
|
||||||
niquery->flags, srvbuf);
|
niquery->flags, srvbuf, sizeof(srvbuf));
|
||||||
else
|
else
|
||||||
service = lookup_service(niquery->addr.addr6.sin6_port,
|
service = lookup_service(niquery->addr.addr6.sin6_port,
|
||||||
niquery->flags, srvbuf);
|
niquery->flags, srvbuf, sizeof(srvbuf));
|
||||||
}
|
}
|
||||||
/* NOFQDN means we have to strip off the domain name portion.
|
/* NOFQDN means we have to strip off the domain name portion.
|
||||||
We do this by determining our own domain name, then searching the string
|
We do this by determining our own domain name, then searching the string
|
||||||
@@ -240,10 +241,10 @@ static void nameinfo_callback(void *arg, int status, struct hostent *host)
|
|||||||
{
|
{
|
||||||
if (niquery->family == AF_INET)
|
if (niquery->family == AF_INET)
|
||||||
service = lookup_service(niquery->addr.addr4.sin_port,
|
service = lookup_service(niquery->addr.addr4.sin_port,
|
||||||
niquery->flags, srvbuf);
|
niquery->flags, srvbuf, sizeof(srvbuf));
|
||||||
else
|
else
|
||||||
service = lookup_service(niquery->addr.addr6.sin6_port,
|
service = lookup_service(niquery->addr.addr6.sin6_port,
|
||||||
niquery->flags, srvbuf);
|
niquery->flags, srvbuf, sizeof(srvbuf));
|
||||||
}
|
}
|
||||||
niquery->callback(niquery->arg, ARES_SUCCESS, ipbuf, service);
|
niquery->callback(niquery->arg, ARES_SUCCESS, ipbuf, service);
|
||||||
return;
|
return;
|
||||||
@@ -253,30 +254,21 @@ static void nameinfo_callback(void *arg, int status, struct hostent *host)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static char *lookup_service(unsigned short port, int flags,
|
static char *lookup_service(unsigned short port, int flags,
|
||||||
char *buf) /* 33 bytes buffer */
|
char *buf, size_t buflen)
|
||||||
{
|
{
|
||||||
if (port)
|
const char *proto;
|
||||||
{
|
struct servent *sep;
|
||||||
/* Just return the port as a string */
|
|
||||||
if (flags & ARES_NI_NUMERICSERV)
|
|
||||||
sprintf(buf, "%u", ntohs(port));
|
|
||||||
else
|
|
||||||
{
|
|
||||||
struct servent *se;
|
|
||||||
const char *proto;
|
|
||||||
#ifdef HAVE_GETSERVBYPORT_R
|
#ifdef HAVE_GETSERVBYPORT_R
|
||||||
#if GETSERVBYPORT_R_ARGS == 6
|
struct servent se;
|
||||||
struct servent ret;
|
|
||||||
char buf[4096];
|
|
||||||
int len = 4096;
|
|
||||||
#elif GETSERVBYPORT_R_ARGS == 5
|
|
||||||
char buf[4096];
|
|
||||||
int len = 4096;
|
|
||||||
#elif GETSERVBYPORT_R_ARGS == 4
|
|
||||||
struct servent ret;
|
|
||||||
struct servent_data sed;
|
|
||||||
#endif
|
#endif
|
||||||
#endif /* HAVE_GETSERVBYPORT_R */
|
char tmpbuf[4096];
|
||||||
|
|
||||||
|
if (port)
|
||||||
|
{
|
||||||
|
if (flags & ARES_NI_NUMERICSERV)
|
||||||
|
sep = NULL;
|
||||||
|
else
|
||||||
|
{
|
||||||
if (flags & ARES_NI_UDP)
|
if (flags & ARES_NI_UDP)
|
||||||
proto = "udp";
|
proto = "udp";
|
||||||
else if (flags & ARES_NI_SCTP)
|
else if (flags & ARES_NI_SCTP)
|
||||||
@@ -286,38 +278,40 @@ static char *lookup_service(unsigned short port, int flags,
|
|||||||
else
|
else
|
||||||
proto = "tcp";
|
proto = "tcp";
|
||||||
#ifdef HAVE_GETSERVBYPORT_R
|
#ifdef HAVE_GETSERVBYPORT_R
|
||||||
|
sep = &se;
|
||||||
|
memset(tmpbuf, 0, sizeof(tmpbuf));
|
||||||
#if GETSERVBYPORT_R_ARGS == 6
|
#if GETSERVBYPORT_R_ARGS == 6
|
||||||
se = &ret;
|
if (getservbyport_r(port, proto, &se, (void *)tmpbuf, sizeof(tmpbuf), &sep) != 0)
|
||||||
if (getservbyport_r(port, proto, se, buf, len, &ret))
|
sep = NULL;
|
||||||
se = NULL;
|
|
||||||
#elif GETSERVBYPORT_R_ARGS == 5
|
#elif GETSERVBYPORT_R_ARGS == 5
|
||||||
se = getservbyport_r(port, proto, se, buf, len);
|
sep = getservbyport_r(port, proto, &se, (void *)tmpbuf, sizeof(tmpbuf));
|
||||||
#elif GETSERVBYPORT_R_ARGS == 4
|
#elif GETSERVBYPORT_R_ARGS == 4
|
||||||
se = &ret;
|
if (getservbyport_r(port, proto, &se, (void *)tmpbuf) != 0)
|
||||||
if (getservbyport_r(port, proto, se, &sed) == -1)
|
sep = NULL;
|
||||||
se = NULL;
|
#else
|
||||||
#else
|
|
||||||
/* Lets just hope the OS uses TLS! */
|
/* Lets just hope the OS uses TLS! */
|
||||||
se = getservbyport(port, proto);
|
sep = getservbyport(port, proto);
|
||||||
#endif
|
#endif
|
||||||
#else
|
#else
|
||||||
/* Lets just hope the OS uses TLS! */
|
/* Lets just hope the OS uses TLS! */
|
||||||
se = getservbyport(port, proto);
|
sep = getservbyport(port, proto);
|
||||||
#endif
|
#endif
|
||||||
if (se && se->s_name) {
|
}
|
||||||
size_t len = strlen(se->s_name);
|
if (sep && sep->s_name)
|
||||||
if(len < 33) {
|
/* get service name */
|
||||||
strcpy(buf, se->s_name);
|
strcpy(tmpbuf, sep->s_name);
|
||||||
}
|
else
|
||||||
else
|
/* get port as a string */
|
||||||
/* too big name to fit the buffer */
|
sprintf(tmpbuf, "%u", ntohs(port));
|
||||||
buf[0]=0;
|
if (strlen(tmpbuf) < buflen)
|
||||||
}
|
/* return it if buffer big enough */
|
||||||
else
|
strcpy(buf, tmpbuf);
|
||||||
sprintf(buf, "%u", ntohs(port));
|
else
|
||||||
}
|
/* avoid reusing previous one */
|
||||||
|
buf[0] = '\0';
|
||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
buf[0] = '\0';
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
58
ares/ares_getsock.3
Normal file
58
ares/ares_getsock.3
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
.\" $Id$
|
||||||
|
.\"
|
||||||
|
.\" Copyright 1998 by Daniel Stenberg
|
||||||
|
.\"
|
||||||
|
.\" Permission to use, copy, modify, and distribute this
|
||||||
|
.\" software and its documentation for any purpose and without
|
||||||
|
.\" fee is hereby granted, provided that the above copyright
|
||||||
|
.\" notice appear in all copies and that both that copyright
|
||||||
|
.\" notice and this permission notice appear in supporting
|
||||||
|
.\" documentation, and that the name of M.I.T. not be used in
|
||||||
|
.\" advertising or publicity pertaining to distribution of the
|
||||||
|
.\" software without specific, written prior permission.
|
||||||
|
.\" M.I.T. makes no representations about the suitability of
|
||||||
|
.\" this software for any purpose. It is provided "as is"
|
||||||
|
.\" without express or implied warranty.
|
||||||
|
.\"
|
||||||
|
.TH ARES_GETSOCK 3 "22 December 2005"
|
||||||
|
.SH NAME
|
||||||
|
ares_getsock \- get file descriptors to wait on
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.nf
|
||||||
|
.B #include <ares.h>
|
||||||
|
.PP
|
||||||
|
.B int ares_getsock(ares_channel \fIchannel\fP, int *\fIsocks\fP,
|
||||||
|
.B int \fInumsocks\fP);
|
||||||
|
.fi
|
||||||
|
.SH DESCRIPTION
|
||||||
|
The
|
||||||
|
.B ares_getsock
|
||||||
|
function retrieves the set of file descriptors which the calling
|
||||||
|
application should wait on for reading and/or writing for the
|
||||||
|
processing of name service queries pending on the name service channel
|
||||||
|
identified by
|
||||||
|
.IR channel .
|
||||||
|
File descriptors will be set in the integer array pointed to by
|
||||||
|
\fIsocks\fP.
|
||||||
|
\fInumsocks\fP is the size of the given array in number of ints.
|
||||||
|
|
||||||
|
This function can only return information about up to 16 sockets. If more are
|
||||||
|
in use (however unlikely that is), they are simply not reported back.
|
||||||
|
.SH RETURN VALUES
|
||||||
|
\fBares_getsock\fP returns a bitmask for what actions to wait for on the
|
||||||
|
different sockets. The ares.h header file provides these convenience macros to
|
||||||
|
extract the information appropriately:
|
||||||
|
|
||||||
|
.nf
|
||||||
|
#define ARES_GETSOCK_MAXNUM 16 /* ares_getsock() can return info about
|
||||||
|
this many sockets */
|
||||||
|
#define ARES_GETSOCK_READABLE(bits,num) (bits & (1<< (num)))
|
||||||
|
#define ARES_GETSOCK_WRITABLE(bits,num) (bits & (1 << ((num) + \
|
||||||
|
ARES_GETSOCK_MAXNUM)))
|
||||||
|
.fi
|
||||||
|
.SH NOTES
|
||||||
|
This function was added in c-ares 1.3.1
|
||||||
|
.SH SEE ALSO
|
||||||
|
.BR ares_timeout (3),
|
||||||
|
.BR ares_fds (3),
|
||||||
|
.BR ares_process (3)
|
69
ares/ares_getsock.c
Normal file
69
ares/ares_getsock.c
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
|
/* Copyright 2005 by Daniel Stenberg.
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and distribute this software and its
|
||||||
|
* documentation for any purpose and without fee is hereby granted, provided
|
||||||
|
* that the above copyright notice appear in all copies and that both that
|
||||||
|
* copyright notice and this permission notice appear in supporting
|
||||||
|
* documentation, and that the name of M.I.T. not be used in advertising or
|
||||||
|
* publicity pertaining to distribution of the software without specific,
|
||||||
|
* written prior permission. M.I.T. makes no representations about the
|
||||||
|
* suitability of this software for any purpose. It is provided "as is"
|
||||||
|
* without express or implied warranty.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "setup.h"
|
||||||
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
#ifdef HAVE_SYS_TIME_H
|
||||||
|
#include <sys/time.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "ares.h"
|
||||||
|
#include "ares_private.h"
|
||||||
|
|
||||||
|
int ares_getsock(ares_channel channel,
|
||||||
|
int *s,
|
||||||
|
int numsocks) /* size of the 'socks' array */
|
||||||
|
{
|
||||||
|
struct server_state *server;
|
||||||
|
int i;
|
||||||
|
int sockindex=0;
|
||||||
|
int bitmap = 0;
|
||||||
|
unsigned int setbits = 0xffffffff;
|
||||||
|
|
||||||
|
ares_socket_t *socks = (ares_socket_t *)s;
|
||||||
|
|
||||||
|
/* No queries, no file descriptors. */
|
||||||
|
if (!channel->queries)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
for (i = 0; i < channel->nservers; i++)
|
||||||
|
{
|
||||||
|
server = &channel->servers[i];
|
||||||
|
if (server->udp_socket != ARES_SOCKET_BAD)
|
||||||
|
{
|
||||||
|
if(sockindex >= numsocks)
|
||||||
|
break;
|
||||||
|
socks[sockindex] = server->udp_socket;
|
||||||
|
bitmap |= ARES_GETSOCK_READABLE(setbits, sockindex);
|
||||||
|
sockindex++;
|
||||||
|
}
|
||||||
|
if (server->tcp_socket != ARES_SOCKET_BAD)
|
||||||
|
{
|
||||||
|
if(sockindex >= numsocks)
|
||||||
|
break;
|
||||||
|
socks[sockindex] = server->tcp_socket;
|
||||||
|
bitmap |= ARES_GETSOCK_READABLE(setbits, sockindex);
|
||||||
|
sockindex++;
|
||||||
|
|
||||||
|
if (server->qhead) {
|
||||||
|
/* then the tcp socket is also writable! */
|
||||||
|
bitmap |= ARES_GETSOCK_WRITABLE(setbits, sockindex-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return bitmap;
|
||||||
|
}
|
@@ -98,6 +98,24 @@ The lookups to perform for host queries.
|
|||||||
.I lookups
|
.I lookups
|
||||||
should be set to a string of the characters "b" or "f", where "b"
|
should be set to a string of the characters "b" or "f", where "b"
|
||||||
indicates a DNS lookup and "f" indicates a lookup in the hosts file.
|
indicates a DNS lookup and "f" indicates a lookup in the hosts file.
|
||||||
|
.TP 18
|
||||||
|
.B ARES_OPT_SOCK_STATE_CB
|
||||||
|
.B void (*\fIsock_state_cb\fP)(void *data, int s, int read, int write);
|
||||||
|
.br
|
||||||
|
.B void *\fIsock_state_cb_data\fP;
|
||||||
|
.br
|
||||||
|
A callback function to be invoked when a socket changes state.
|
||||||
|
.I s
|
||||||
|
will be passed the socket whose state has changed;
|
||||||
|
.I read
|
||||||
|
will be set to true if the socket should listen for read events, and
|
||||||
|
.I write
|
||||||
|
will be set to true if the socket should listen for write events.
|
||||||
|
The value of
|
||||||
|
.I sock_state_cb_data
|
||||||
|
will be passed as the
|
||||||
|
.I data
|
||||||
|
argument.
|
||||||
.PP
|
.PP
|
||||||
The
|
The
|
||||||
.I flags
|
.I flags
|
||||||
|
@@ -1,3 +1,5 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this
|
* Permission to use, copy, modify, and distribute this
|
||||||
@@ -93,6 +95,16 @@ int ares_init_options(ares_channel *channelptr, struct ares_options *options,
|
|||||||
struct server_state *server;
|
struct server_state *server;
|
||||||
struct timeval tv;
|
struct timeval tv;
|
||||||
|
|
||||||
|
#ifdef CURLDEBUG
|
||||||
|
const char *env = getenv("CARES_MEMDEBUG");
|
||||||
|
|
||||||
|
if (env)
|
||||||
|
curl_memdebug(env);
|
||||||
|
env = getenv("CARES_MEMLIMIT");
|
||||||
|
if (env)
|
||||||
|
curl_memlimit(atoi(env));
|
||||||
|
#endif
|
||||||
|
|
||||||
channel = malloc(sizeof(struct ares_channeldata));
|
channel = malloc(sizeof(struct ares_channeldata));
|
||||||
if (!channel)
|
if (!channel)
|
||||||
return ARES_ENOMEM;
|
return ARES_ENOMEM;
|
||||||
@@ -113,6 +125,7 @@ int ares_init_options(ares_channel *channelptr, struct ares_options *options,
|
|||||||
channel->queries = NULL;
|
channel->queries = NULL;
|
||||||
channel->domains = NULL;
|
channel->domains = NULL;
|
||||||
channel->sortlist = NULL;
|
channel->sortlist = NULL;
|
||||||
|
channel->sock_state_cb = NULL;
|
||||||
|
|
||||||
/* Initialize configuration by each of the four sources, from highest
|
/* Initialize configuration by each of the four sources, from highest
|
||||||
* precedence to lowest.
|
* precedence to lowest.
|
||||||
@@ -192,6 +205,11 @@ static int init_by_options(ares_channel channel, struct ares_options *options,
|
|||||||
channel->udp_port = options->udp_port;
|
channel->udp_port = options->udp_port;
|
||||||
if ((optmask & ARES_OPT_TCP_PORT) && channel->tcp_port == -1)
|
if ((optmask & ARES_OPT_TCP_PORT) && channel->tcp_port == -1)
|
||||||
channel->tcp_port = options->tcp_port;
|
channel->tcp_port = options->tcp_port;
|
||||||
|
if ((optmask & ARES_OPT_SOCK_STATE_CB) && channel->sock_state_cb == NULL)
|
||||||
|
{
|
||||||
|
channel->sock_state_cb = options->sock_state_cb;
|
||||||
|
channel->sock_state_cb_data = options->sock_state_cb_data;
|
||||||
|
}
|
||||||
|
|
||||||
/* Copy the servers, if given. */
|
/* Copy the servers, if given. */
|
||||||
if ((optmask & ARES_OPT_SERVERS) && channel->nservers == -1)
|
if ((optmask & ARES_OPT_SERVERS) && channel->nservers == -1)
|
||||||
@@ -504,7 +522,7 @@ DhcpNameServer
|
|||||||
if (status == ARES_SUCCESS)
|
if (status == ARES_SUCCESS)
|
||||||
status = ARES_EOF;
|
status = ARES_EOF;
|
||||||
|
|
||||||
#elif defined(riscos)
|
#elif defined(__riscos__)
|
||||||
|
|
||||||
/* Under RISC OS, name servers are listed in the
|
/* Under RISC OS, name servers are listed in the
|
||||||
system variable Inet$Resolvers, space separated. */
|
system variable Inet$Resolvers, space separated. */
|
||||||
|
@@ -40,14 +40,14 @@ struct sockaddr_in6
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef HAVE_STRUCT_ADDRINFO
|
#ifndef HAVE_STRUCT_ADDRINFO
|
||||||
struct addrinfo
|
struct addrinfo
|
||||||
{
|
{
|
||||||
int ai_flags;
|
int ai_flags;
|
||||||
int ai_family;
|
int ai_family;
|
||||||
int ai_socktype;
|
int ai_socktype;
|
||||||
int ai_protocol;
|
int ai_protocol;
|
||||||
size_t ai_addrlen;
|
socklen_t ai_addrlen; /* Follow rfc3493 struct addrinfo */
|
||||||
char *ai_cannonname;
|
char *ai_canonname;
|
||||||
struct sockaddr *ai_addr;
|
struct sockaddr *ai_addr;
|
||||||
struct addrinfo *ai_next;
|
struct addrinfo *ai_next;
|
||||||
};
|
};
|
||||||
|
@@ -1,3 +1,5 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this
|
* Permission to use, copy, modify, and distribute this
|
||||||
@@ -30,6 +32,7 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include "ares.h"
|
#include "ares.h"
|
||||||
#include "ares_dns.h"
|
#include "ares_dns.h"
|
||||||
|
#include "ares_private.h"
|
||||||
|
|
||||||
/* Header format, from RFC 1035:
|
/* Header format, from RFC 1035:
|
||||||
* 1 1 1 1 1 1
|
* 1 1 1 1 1 1
|
||||||
|
@@ -1,3 +1,5 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this
|
* Permission to use, copy, modify, and distribute this
|
||||||
|
@@ -1,3 +1,5 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
/* Copyright 2005 Dominick Meglio
|
/* Copyright 2005 Dominick Meglio
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this
|
* Permission to use, copy, modify, and distribute this
|
||||||
|
@@ -1,3 +1,5 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this
|
* Permission to use, copy, modify, and distribute this
|
||||||
|
@@ -1,3 +1,6 @@
|
|||||||
|
#ifndef __ARES_PRIVATE_H
|
||||||
|
#define __ARES_PRIVATE_H
|
||||||
|
|
||||||
/* $Id$ */
|
/* $Id$ */
|
||||||
|
|
||||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
@@ -62,6 +65,10 @@
|
|||||||
#define PATH_RESOLV_CONF "sys:/etc/resolv.cfg"
|
#define PATH_RESOLV_CONF "sys:/etc/resolv.cfg"
|
||||||
#define PATH_HOSTS "sys:/etc/hosts"
|
#define PATH_HOSTS "sys:/etc/hosts"
|
||||||
|
|
||||||
|
#elif defined(__riscos__)
|
||||||
|
|
||||||
|
#define PATH_HOSTS "InetDBase:Hosts"
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
#define PATH_RESOLV_CONF "/etc/resolv.conf"
|
#define PATH_RESOLV_CONF "/etc/resolv.conf"
|
||||||
@@ -172,13 +179,22 @@ struct ares_channeldata {
|
|||||||
|
|
||||||
/* Active queries */
|
/* Active queries */
|
||||||
struct query *queries;
|
struct query *queries;
|
||||||
|
|
||||||
|
ares_sock_state_cb sock_state_cb;
|
||||||
|
void *sock_state_cb_data;
|
||||||
};
|
};
|
||||||
|
|
||||||
void ares__send_query(ares_channel channel, struct query *query, time_t now);
|
void ares__send_query(ares_channel channel, struct query *query, time_t now);
|
||||||
void ares__close_sockets(struct server_state *server);
|
void ares__close_sockets(ares_channel channel, struct server_state *server);
|
||||||
int ares__get_hostent(FILE *fp, int family, struct hostent **host);
|
int ares__get_hostent(FILE *fp, int family, struct hostent **host);
|
||||||
int ares__read_line(FILE *fp, char **buf, int *bufsize);
|
int ares__read_line(FILE *fp, char **buf, int *bufsize);
|
||||||
|
|
||||||
|
#define SOCK_STATE_CALLBACK(c, s, r, w) \
|
||||||
|
do { \
|
||||||
|
if ((c)->sock_state_cb) \
|
||||||
|
(c)->sock_state_cb((c)->sock_state_cb_data, (s), (r), (w)); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
#ifdef CURLDEBUG
|
#ifdef CURLDEBUG
|
||||||
/* This is low-level hard-hacking memory leak tracking and similar. Using the
|
/* This is low-level hard-hacking memory leak tracking and similar. Using the
|
||||||
libcurl lowlevel code from within library is ugly and only works when
|
libcurl lowlevel code from within library is ugly and only works when
|
||||||
@@ -186,3 +202,6 @@ int ares__read_line(FILE *fp, char **buf, int *bufsize);
|
|||||||
this anyway for convenience. */
|
this anyway for convenience. */
|
||||||
#include "../lib/memdebug.h"
|
#include "../lib/memdebug.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#endif /* __ARES_PRIVATE_H */
|
||||||
|
|
||||||
|
@@ -1,3 +1,5 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this
|
* Permission to use, copy, modify, and distribute this
|
||||||
@@ -30,6 +32,8 @@
|
|||||||
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
|
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
|
||||||
#include <arpa/nameser_compat.h>
|
#include <arpa/nameser_compat.h>
|
||||||
#endif
|
#endif
|
||||||
|
#endif /* WIN32 && !WATT32 */
|
||||||
|
|
||||||
#ifdef HAVE_UNISTD_H
|
#ifdef HAVE_UNISTD_H
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#endif
|
#endif
|
||||||
@@ -39,7 +43,6 @@
|
|||||||
#ifdef NETWARE
|
#ifdef NETWARE
|
||||||
#include <sys/filio.h>
|
#include <sys/filio.h>
|
||||||
#endif
|
#endif
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@@ -62,6 +65,7 @@
|
|||||||
#define GET_ERRNO() errno
|
#define GET_ERRNO() errno
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static int try_again(int errnum);
|
||||||
static void write_tcp_data(ares_channel channel, fd_set *write_fds,
|
static void write_tcp_data(ares_channel channel, fd_set *write_fds,
|
||||||
time_t now);
|
time_t now);
|
||||||
static void read_tcp_data(ares_channel channel, fd_set *read_fds, time_t now);
|
static void read_tcp_data(ares_channel channel, fd_set *read_fds, time_t now);
|
||||||
@@ -93,6 +97,31 @@ void ares_process(ares_channel channel, fd_set *read_fds, fd_set *write_fds)
|
|||||||
process_timeouts(channel, now);
|
process_timeouts(channel, now);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Return 1 if the specified errno describes a readiness error, or 0
|
||||||
|
* otherwise. This is mostly for HP-UX, which could return EAGAIN or
|
||||||
|
* EWOULDBLOCK. See this man page
|
||||||
|
*
|
||||||
|
* http://devrsrc1.external.hp.com/STKS/cgi-bin/man2html?manpage=/usr/share/man/man2.Z/send.2
|
||||||
|
*/
|
||||||
|
static int try_again(int errnum)
|
||||||
|
{
|
||||||
|
#if !defined EWOULDBLOCK && !defined EAGAIN
|
||||||
|
#error "Neither EWOULDBLOCK nor EAGAIN defined"
|
||||||
|
#endif
|
||||||
|
switch (errnum)
|
||||||
|
{
|
||||||
|
#ifdef EWOULDBLOCK
|
||||||
|
case EWOULDBLOCK:
|
||||||
|
return 1;
|
||||||
|
#endif
|
||||||
|
#if defined EAGAIN && EAGAIN != EWOULDBLOCK
|
||||||
|
case EAGAIN:
|
||||||
|
return 1;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* If any TCP sockets select true for writing, write out queued data
|
/* If any TCP sockets select true for writing, write out queued data
|
||||||
* we have for them.
|
* we have for them.
|
||||||
*/
|
*/
|
||||||
@@ -103,7 +132,7 @@ static void write_tcp_data(ares_channel channel, fd_set *write_fds, time_t now)
|
|||||||
struct iovec *vec;
|
struct iovec *vec;
|
||||||
int i;
|
int i;
|
||||||
ssize_t scount;
|
ssize_t scount;
|
||||||
int wcount;
|
ssize_t wcount;
|
||||||
size_t n;
|
size_t n;
|
||||||
|
|
||||||
for (i = 0; i < channel->nservers; i++)
|
for (i = 0; i < channel->nservers; i++)
|
||||||
@@ -131,11 +160,12 @@ static void write_tcp_data(ares_channel channel, fd_set *write_fds, time_t now)
|
|||||||
vec[n].iov_len = sendreq->len;
|
vec[n].iov_len = sendreq->len;
|
||||||
n++;
|
n++;
|
||||||
}
|
}
|
||||||
wcount = writev(server->tcp_socket, vec, n);
|
wcount = (ssize_t)writev(server->tcp_socket, vec, n);
|
||||||
free(vec);
|
free(vec);
|
||||||
if (wcount < 0)
|
if (wcount < 0)
|
||||||
{
|
{
|
||||||
handle_error(channel, i, now);
|
if (!try_again(GET_ERRNO()))
|
||||||
|
handle_error(channel, i, now);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -148,7 +178,10 @@ static void write_tcp_data(ares_channel channel, fd_set *write_fds, time_t now)
|
|||||||
wcount -= sendreq->len;
|
wcount -= sendreq->len;
|
||||||
server->qhead = sendreq->next;
|
server->qhead = sendreq->next;
|
||||||
if (server->qhead == NULL)
|
if (server->qhead == NULL)
|
||||||
server->qtail = NULL;
|
{
|
||||||
|
SOCK_STATE_CALLBACK(channel, server->tcp_socket, 1, 0);
|
||||||
|
server->qtail = NULL;
|
||||||
|
}
|
||||||
free(sendreq);
|
free(sendreq);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -164,12 +197,11 @@ static void write_tcp_data(ares_channel channel, fd_set *write_fds, time_t now)
|
|||||||
/* Can't allocate iovecs; just send the first request. */
|
/* Can't allocate iovecs; just send the first request. */
|
||||||
sendreq = server->qhead;
|
sendreq = server->qhead;
|
||||||
|
|
||||||
scount = send(server->tcp_socket, (void *)sendreq->data,
|
scount = swrite(server->tcp_socket, sendreq->data, sendreq->len);
|
||||||
sendreq->len, 0);
|
|
||||||
|
|
||||||
if (scount < 0)
|
if (scount < 0)
|
||||||
{
|
{
|
||||||
handle_error(channel, i, now);
|
if (!try_again(GET_ERRNO()))
|
||||||
|
handle_error(channel, i, now);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -178,7 +210,10 @@ static void write_tcp_data(ares_channel channel, fd_set *write_fds, time_t now)
|
|||||||
{
|
{
|
||||||
server->qhead = sendreq->next;
|
server->qhead = sendreq->next;
|
||||||
if (server->qhead == NULL)
|
if (server->qhead == NULL)
|
||||||
server->qtail = NULL;
|
{
|
||||||
|
SOCK_STATE_CALLBACK(channel, server->tcp_socket, 1, 0);
|
||||||
|
server->qtail = NULL;
|
||||||
|
}
|
||||||
free(sendreq);
|
free(sendreq);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -197,7 +232,8 @@ static void write_tcp_data(ares_channel channel, fd_set *write_fds, time_t now)
|
|||||||
static void read_tcp_data(ares_channel channel, fd_set *read_fds, time_t now)
|
static void read_tcp_data(ares_channel channel, fd_set *read_fds, time_t now)
|
||||||
{
|
{
|
||||||
struct server_state *server;
|
struct server_state *server;
|
||||||
int i, count;
|
int i;
|
||||||
|
ssize_t count;
|
||||||
|
|
||||||
for (i = 0; i < channel->nservers; i++)
|
for (i = 0; i < channel->nservers; i++)
|
||||||
{
|
{
|
||||||
@@ -212,16 +248,17 @@ static void read_tcp_data(ares_channel channel, fd_set *read_fds, time_t now)
|
|||||||
/* We haven't yet read a length word, so read that (or
|
/* We haven't yet read a length word, so read that (or
|
||||||
* what's left to read of it).
|
* what's left to read of it).
|
||||||
*/
|
*/
|
||||||
count = recv(server->tcp_socket,
|
count = sread(server->tcp_socket,
|
||||||
(void *)(server->tcp_lenbuf + server->tcp_lenbuf_pos),
|
server->tcp_lenbuf + server->tcp_lenbuf_pos,
|
||||||
2 - server->tcp_lenbuf_pos, 0);
|
2 - server->tcp_lenbuf_pos);
|
||||||
if (count <= 0)
|
if (count <= 0)
|
||||||
{
|
{
|
||||||
handle_error(channel, i, now);
|
if (!(count == -1 && try_again(GET_ERRNO())))
|
||||||
|
handle_error(channel, i, now);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
server->tcp_lenbuf_pos += count;
|
server->tcp_lenbuf_pos += (int)count;
|
||||||
if (server->tcp_lenbuf_pos == 2)
|
if (server->tcp_lenbuf_pos == 2)
|
||||||
{
|
{
|
||||||
/* We finished reading the length word. Decode the
|
/* We finished reading the length word. Decode the
|
||||||
@@ -238,16 +275,17 @@ static void read_tcp_data(ares_channel channel, fd_set *read_fds, time_t now)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* Read data into the allocated buffer. */
|
/* Read data into the allocated buffer. */
|
||||||
count = recv(server->tcp_socket,
|
count = sread(server->tcp_socket,
|
||||||
(void *)(server->tcp_buffer + server->tcp_buffer_pos),
|
server->tcp_buffer + server->tcp_buffer_pos,
|
||||||
server->tcp_length - server->tcp_buffer_pos, 0);
|
server->tcp_length - server->tcp_buffer_pos);
|
||||||
if (count <= 0)
|
if (count <= 0)
|
||||||
{
|
{
|
||||||
handle_error(channel, i, now);
|
if (!(count == -1 && try_again(GET_ERRNO())))
|
||||||
|
handle_error(channel, i, now);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
server->tcp_buffer_pos += count;
|
server->tcp_buffer_pos += (int)count;
|
||||||
if (server->tcp_buffer_pos == server->tcp_length)
|
if (server->tcp_buffer_pos == server->tcp_length)
|
||||||
{
|
{
|
||||||
/* We finished reading this answer; process it and
|
/* We finished reading this answer; process it and
|
||||||
@@ -269,7 +307,8 @@ static void read_udp_packets(ares_channel channel, fd_set *read_fds,
|
|||||||
time_t now)
|
time_t now)
|
||||||
{
|
{
|
||||||
struct server_state *server;
|
struct server_state *server;
|
||||||
int i, count;
|
int i;
|
||||||
|
ssize_t count;
|
||||||
unsigned char buf[PACKETSZ + 1];
|
unsigned char buf[PACKETSZ + 1];
|
||||||
|
|
||||||
for (i = 0; i < channel->nservers; i++)
|
for (i = 0; i < channel->nservers; i++)
|
||||||
@@ -281,11 +320,13 @@ static void read_udp_packets(ares_channel channel, fd_set *read_fds,
|
|||||||
!FD_ISSET(server->udp_socket, read_fds))
|
!FD_ISSET(server->udp_socket, read_fds))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
count = recv(server->udp_socket, (void *)buf, sizeof(buf), 0);
|
count = sread(server->udp_socket, buf, sizeof(buf));
|
||||||
if (count <= 0)
|
if (count == -1 && try_again(GET_ERRNO()))
|
||||||
|
continue;
|
||||||
|
else if (count <= 0)
|
||||||
handle_error(channel, i, now);
|
handle_error(channel, i, now);
|
||||||
|
|
||||||
process_answer(channel, buf, count, i, 0, now);
|
process_answer(channel, buf, (int)count, i, 0, now);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -379,7 +420,7 @@ static void handle_error(ares_channel channel, int whichserver, time_t now)
|
|||||||
struct query *query, *next;
|
struct query *query, *next;
|
||||||
|
|
||||||
/* Reset communications with this server. */
|
/* Reset communications with this server. */
|
||||||
ares__close_sockets(&channel->servers[whichserver]);
|
ares__close_sockets(channel, &channel->servers[whichserver]);
|
||||||
|
|
||||||
/* Tell all queries talking to this server to move on and not try
|
/* Tell all queries talking to this server to move on and not try
|
||||||
* this server again.
|
* this server again.
|
||||||
@@ -451,7 +492,10 @@ void ares__send_query(ares_channel channel, struct query *query, time_t now)
|
|||||||
if (server->qtail)
|
if (server->qtail)
|
||||||
server->qtail->next = sendreq;
|
server->qtail->next = sendreq;
|
||||||
else
|
else
|
||||||
server->qhead = sendreq;
|
{
|
||||||
|
SOCK_STATE_CALLBACK(channel, server->tcp_socket, 1, 1);
|
||||||
|
server->qhead = sendreq;
|
||||||
|
}
|
||||||
server->qtail = sendreq;
|
server->qtail = sendreq;
|
||||||
query->timeout = 0;
|
query->timeout = 0;
|
||||||
}
|
}
|
||||||
@@ -466,9 +510,9 @@ void ares__send_query(ares_channel channel, struct query *query, time_t now)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (send(server->udp_socket, (void *)query->qbuf,
|
if (swrite(server->udp_socket, query->qbuf, query->qlen) == -1)
|
||||||
query->qlen, 0) == -1)
|
|
||||||
{
|
{
|
||||||
|
/* FIXME: Handle EAGAIN here since it likely can happen. */
|
||||||
query->skip_server[query->server] = 1;
|
query->skip_server[query->server] = 1;
|
||||||
next_server(channel, query, now);
|
next_server(channel, query, now);
|
||||||
return;
|
return;
|
||||||
@@ -574,6 +618,7 @@ static int open_tcp_socket(ares_channel channel, struct server_state *server)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SOCK_STATE_CALLBACK(channel, s, 1, 0);
|
||||||
server->tcp_buffer_pos = 0;
|
server->tcp_buffer_pos = 0;
|
||||||
server->tcp_socket = s;
|
server->tcp_socket = s;
|
||||||
return 0;
|
return 0;
|
||||||
@@ -603,6 +648,8 @@ static int open_udp_socket(ares_channel channel, struct server_state *server)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SOCK_STATE_CALLBACK(channel, s, 1, 0);
|
||||||
|
|
||||||
server->udp_socket = s;
|
server->udp_socket = s;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -713,7 +760,7 @@ static struct query *end_query (ares_channel channel, struct query *query, int s
|
|||||||
if (!channel->queries && !(channel->flags & ARES_FLAG_STAYOPEN))
|
if (!channel->queries && !(channel->flags & ARES_FLAG_STAYOPEN))
|
||||||
{
|
{
|
||||||
for (i = 0; i < channel->nservers; i++)
|
for (i = 0; i < channel->nservers; i++)
|
||||||
ares__close_sockets(&channel->servers[i]);
|
ares__close_sockets(channel, &channel->servers[i]);
|
||||||
}
|
}
|
||||||
return (next);
|
return (next);
|
||||||
}
|
}
|
||||||
|
@@ -1,3 +1,5 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this
|
* Permission to use, copy, modify, and distribute this
|
||||||
|
@@ -1,3 +1,5 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this
|
* Permission to use, copy, modify, and distribute this
|
||||||
|
@@ -1,3 +1,5 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this
|
* Permission to use, copy, modify, and distribute this
|
||||||
|
@@ -1,3 +1,5 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this
|
* Permission to use, copy, modify, and distribute this
|
||||||
|
@@ -1,3 +1,5 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this
|
* Permission to use, copy, modify, and distribute this
|
||||||
|
@@ -5,11 +5,11 @@
|
|||||||
|
|
||||||
#define ARES_VERSION_MAJOR 1
|
#define ARES_VERSION_MAJOR 1
|
||||||
#define ARES_VERSION_MINOR 3
|
#define ARES_VERSION_MINOR 3
|
||||||
#define ARES_VERSION_PATCH 0
|
#define ARES_VERSION_PATCH 1
|
||||||
#define ARES_VERSION ((ARES_VERSION_MAJOR<<16)|\
|
#define ARES_VERSION ((ARES_VERSION_MAJOR<<16)|\
|
||||||
(ARES_VERSION_MINOR<<8)|\
|
(ARES_VERSION_MINOR<<8)|\
|
||||||
(ARES_VERSION_PATCH))
|
(ARES_VERSION_PATCH))
|
||||||
#define ARES_VERSION_STR "1.3.0"
|
#define ARES_VERSION_STR "1.3.1"
|
||||||
|
|
||||||
const char *ares_version(int *version);
|
const char *ares_version(int *version);
|
||||||
|
|
||||||
|
@@ -1,3 +1,5 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
|
* Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
|
||||||
* Copyright (c) 1996,1999 by Internet Software Consortium.
|
* Copyright (c) 1996,1999 by Internet Software Consortium.
|
||||||
|
@@ -1,3 +1,6 @@
|
|||||||
|
#ifndef __ARES_BITNCMP_H
|
||||||
|
#define __ARES_BITNCMP_H
|
||||||
|
|
||||||
/* $Id$ */
|
/* $Id$ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -14,13 +17,10 @@
|
|||||||
* without express or implied warranty.
|
* without express or implied warranty.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef BITNCMP_H
|
|
||||||
#define BITNCMP_H
|
|
||||||
|
|
||||||
#ifndef HAVE_BITNCMP
|
#ifndef HAVE_BITNCMP
|
||||||
int ares_bitncmp(const void *l, const void *r, int n);
|
int ares_bitncmp(const void *l, const void *r, int n);
|
||||||
#else
|
#else
|
||||||
#define ares_bitncmp(x,y,z) bitncmp(x,y,z)
|
#define ares_bitncmp(x,y,z) bitncmp(x,y,z)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* BITNCMP_H */
|
#endif /* __ARES_BITNCMP_H */
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
${LIBTOOLIZE:-libtoolize} --copy --automake --force
|
${LIBTOOLIZE:-libtoolize} --copy --automake --force
|
||||||
${ACLOCAL:-aclocal}
|
${ACLOCAL:-aclocal} $ACLOCAL_FLAGS
|
||||||
${AUTOHEADER:-autoheader}
|
${AUTOHEADER:-autoheader}
|
||||||
${AUTOCONF:-autoconf}
|
${AUTOCONF:-autoconf}
|
||||||
${AUTOMAKE:-automake} --add-missing
|
${AUTOMAKE:-automake} --add-missing
|
||||||
|
@@ -1,3 +1,6 @@
|
|||||||
|
#ifndef __ARES_CONFIG_WIN32_H
|
||||||
|
#define __ARES_CONFIG_WIN32_H
|
||||||
|
|
||||||
/* $Id$ */
|
/* $Id$ */
|
||||||
|
|
||||||
/* Copyright (C) 2004 - 2005 by Daniel Stenberg et al
|
/* Copyright (C) 2004 - 2005 by Daniel Stenberg et al
|
||||||
@@ -13,23 +16,129 @@
|
|||||||
* without express or implied warranty.
|
* without express or implied warranty.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __CONFIG_WIN32_H
|
/* ================================================================ */
|
||||||
#define __CONFIG_WIN32_H
|
/* ares/config-win32.h - Hand crafted config file for windows */
|
||||||
|
/* ================================================================ */
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------- */
|
||||||
|
/* HEADER FILES */
|
||||||
|
/* ---------------------------------------------------------------- */
|
||||||
|
|
||||||
|
/* Define if you have the <getopt.h> header file. */
|
||||||
#if defined(__MINGW32__)
|
#if defined(__MINGW32__)
|
||||||
#define HAVE_GETOPT_H
|
#define HAVE_GETOPT_H 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(__MINGW32__) || defined(__WATCOMC__)
|
/* Define if you have the <unistd.h> header file. */
|
||||||
#define HAVE_UNISTD_H
|
#if defined(__MINGW32__) || defined(__WATCOMC__) || defined(__LCC__) || \
|
||||||
|
defined(__POCC__)
|
||||||
|
#define HAVE_UNISTD_H 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define HAVE_AF_INET6
|
/* Define if you have the <windows.h> header file. */
|
||||||
#define HAVE_PF_INET6
|
#define HAVE_WINDOWS_H 1
|
||||||
#define HAVE_IOCTLSOCKET
|
|
||||||
#define HAVE_STRUCT_IN6_ADDR
|
|
||||||
#define HAVE_STRUCT_SOCKADDR_IN6
|
|
||||||
#define HAVE_STRUCT_ADDRINFO
|
|
||||||
#define HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID
|
|
||||||
|
|
||||||
#endif /* __CONFIG_WIN32_H */
|
/* Define if you have the <winsock.h> header file. */
|
||||||
|
#define HAVE_WINSOCK_H 1
|
||||||
|
|
||||||
|
/* Define if you have the <winsock2.h> header file. */
|
||||||
|
#define HAVE_WINSOCK2_H 1
|
||||||
|
|
||||||
|
/* Define if you have the <ws2tcpip.h> header file. */
|
||||||
|
#define HAVE_WS2TCPIP_H 1
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------- */
|
||||||
|
/* FUNCTIONS */
|
||||||
|
/* ---------------------------------------------------------------- */
|
||||||
|
|
||||||
|
/* Define if you have the ioctlsocket function. */
|
||||||
|
#define HAVE_IOCTLSOCKET 1
|
||||||
|
|
||||||
|
/* Define if you have the getnameinfo function. */
|
||||||
|
#define HAVE_GETNAMEINFO 1
|
||||||
|
|
||||||
|
/* Define to the type qualifier of arg 1 for getnameinfo. */
|
||||||
|
#define GETNAMEINFO_QUAL_ARG1 const
|
||||||
|
|
||||||
|
/* Define to the type of arg 1 for getnameinfo. */
|
||||||
|
#define GETNAMEINFO_TYPE_ARG1 struct sockaddr *
|
||||||
|
|
||||||
|
/* Define to the type of arg 2 for getnameinfo. */
|
||||||
|
#define GETNAMEINFO_TYPE_ARG2 socklen_t
|
||||||
|
|
||||||
|
/* Define to the type of args 4 and 6 for getnameinfo. */
|
||||||
|
#define GETNAMEINFO_TYPE_ARG46 DWORD
|
||||||
|
|
||||||
|
/* Define to the type of arg 7 for getnameinfo. */
|
||||||
|
#define GETNAMEINFO_TYPE_ARG7 int
|
||||||
|
|
||||||
|
/* Define if you have the recv function. */
|
||||||
|
#define HAVE_RECV 1
|
||||||
|
|
||||||
|
/* Define to the type of arg 1 for recv. */
|
||||||
|
#define RECV_TYPE_ARG1 SOCKET
|
||||||
|
|
||||||
|
/* Define to the type of arg 2 for recv. */
|
||||||
|
#define RECV_TYPE_ARG2 char *
|
||||||
|
|
||||||
|
/* Define to the type of arg 3 for recv. */
|
||||||
|
#define RECV_TYPE_ARG3 int
|
||||||
|
|
||||||
|
/* Define to the type of arg 4 for recv. */
|
||||||
|
#define RECV_TYPE_ARG4 int
|
||||||
|
|
||||||
|
/* Define to the function return type for recv. */
|
||||||
|
#define RECV_TYPE_RETV int
|
||||||
|
|
||||||
|
/* Define if you have the send function. */
|
||||||
|
#define HAVE_SEND 1
|
||||||
|
|
||||||
|
/* Define to the type of arg 1 for send. */
|
||||||
|
#define SEND_TYPE_ARG1 SOCKET
|
||||||
|
|
||||||
|
/* Define to the type qualifier of arg 2 for send. */
|
||||||
|
#define SEND_QUAL_ARG2 const
|
||||||
|
|
||||||
|
/* Define to the type of arg 2 for send. */
|
||||||
|
#define SEND_TYPE_ARG2 char *
|
||||||
|
|
||||||
|
/* Define to the type of arg 3 for send. */
|
||||||
|
#define SEND_TYPE_ARG3 int
|
||||||
|
|
||||||
|
/* Define to the type of arg 4 for send. */
|
||||||
|
#define SEND_TYPE_ARG4 int
|
||||||
|
|
||||||
|
/* Define to the function return type for send. */
|
||||||
|
#define SEND_TYPE_RETV int
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------- */
|
||||||
|
/* STRUCT RELATED */
|
||||||
|
/* ---------------------------------------------------------------- */
|
||||||
|
|
||||||
|
/* Define this if you have struct addrinfo */
|
||||||
|
#define HAVE_STRUCT_ADDRINFO 1
|
||||||
|
|
||||||
|
/* Define this if you have struct sockaddr_storage */
|
||||||
|
#define HAVE_STRUCT_SOCKADDR_STORAGE 1
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------- */
|
||||||
|
/* IPV6 COMPATIBILITY */
|
||||||
|
/* ---------------------------------------------------------------- */
|
||||||
|
|
||||||
|
/* Define this if you have address family AF_INET6 */
|
||||||
|
#define HAVE_AF_INET6 1
|
||||||
|
|
||||||
|
/* Define this if you have protocol family PF_INET6 */
|
||||||
|
#define HAVE_PF_INET6 1
|
||||||
|
|
||||||
|
/* Define this if you have struct in6_addr */
|
||||||
|
#define HAVE_STRUCT_IN6_ADDR 1
|
||||||
|
|
||||||
|
/* Define this if you have struct sockaddr_in6 */
|
||||||
|
#define HAVE_STRUCT_SOCKADDR_IN6 1
|
||||||
|
|
||||||
|
/* Define this if you have sockaddr_in6 with scopeid */
|
||||||
|
#define HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID 1
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* __ARES_CONFIG_WIN32_H */
|
||||||
|
@@ -1,5 +1,8 @@
|
|||||||
|
|
||||||
dnl Process this file with autoconf to produce a configure script.
|
dnl Process this file with autoconf to produce a configure script.
|
||||||
|
AC_PREREQ(2.57)
|
||||||
AC_INIT(ares_init.c)
|
AC_INIT(ares_init.c)
|
||||||
|
AC_CONFIG_SRCDIR([ares_ipv6.h])
|
||||||
AM_CONFIG_HEADER(config.h)
|
AM_CONFIG_HEADER(config.h)
|
||||||
AM_MAINTAINER_MODE
|
AM_MAINTAINER_MODE
|
||||||
AM_INIT_AUTOMAKE(c-ares, CVS)
|
AM_INIT_AUTOMAKE(c-ares, CVS)
|
||||||
@@ -13,12 +16,7 @@ solaris*)
|
|||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
# check for ssize_t
|
AC_LIBTOOL_WIN32_DLL
|
||||||
AC_CHECK_TYPE(ssize_t, ,
|
|
||||||
AC_DEFINE(ssize_t, int, [the signed version of size_t]))
|
|
||||||
|
|
||||||
AC_SEARCH_LIBS(gethostbyname, nsl)
|
|
||||||
AC_SEARCH_LIBS(socket, socket)
|
|
||||||
|
|
||||||
dnl ************************************************************
|
dnl ************************************************************
|
||||||
dnl Option to switch on debug options. This makes an assumption that
|
dnl Option to switch on debug options. This makes an assumption that
|
||||||
@@ -38,9 +36,6 @@ AC_HELP_STRING([--disable-debug],[Disable debug options]),
|
|||||||
dnl when doing the debug stuff, use static library only
|
dnl when doing the debug stuff, use static library only
|
||||||
AC_DISABLE_SHARED
|
AC_DISABLE_SHARED
|
||||||
|
|
||||||
dnl Checks for standard header files, to make memdebug.h inclusions bettter
|
|
||||||
AC_HEADER_STDC
|
|
||||||
|
|
||||||
dnl the entire --enable-debug is a hack that lives and runs on top of
|
dnl the entire --enable-debug is a hack that lives and runs on top of
|
||||||
dnl libcurl stuff so this BUILDING_LIBCURL is not THAT much uglier
|
dnl libcurl stuff so this BUILDING_LIBCURL is not THAT much uglier
|
||||||
AC_DEFINE(BUILDING_LIBCURL, 1, [when building as static part of libcurl])
|
AC_DEFINE(BUILDING_LIBCURL, 1, [when building as static part of libcurl])
|
||||||
@@ -48,6 +43,15 @@ AC_HELP_STRING([--disable-debug],[Disable debug options]),
|
|||||||
CPPFLAGS="$CPPFLAGS -DCURLDEBUG -I$srcdir/../include"
|
CPPFLAGS="$CPPFLAGS -DCURLDEBUG -I$srcdir/../include"
|
||||||
CFLAGS="$CFLAGS -g"
|
CFLAGS="$CFLAGS -g"
|
||||||
|
|
||||||
|
dnl check for how to do large files, needed to get the curl_off_t check
|
||||||
|
dnl done right
|
||||||
|
AC_SYS_LARGEFILE
|
||||||
|
|
||||||
|
AC_CHECK_SIZEOF(curl_off_t, ,[
|
||||||
|
#include <stdio.h>
|
||||||
|
#include "$srcdir/../include/curl/curl.h"
|
||||||
|
])
|
||||||
|
|
||||||
dnl set compiler "debug" options to become more picky, and remove
|
dnl set compiler "debug" options to become more picky, and remove
|
||||||
dnl optimize options from CFLAGS
|
dnl optimize options from CFLAGS
|
||||||
CURL_CC_DEBUG_OPTS
|
CURL_CC_DEBUG_OPTS
|
||||||
@@ -57,8 +61,164 @@ AC_HELP_STRING([--disable-debug],[Disable debug options]),
|
|||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
dnl libtool setup
|
||||||
|
CARES_CLEAR_LIBTOOL_TAGS
|
||||||
AC_PROG_LIBTOOL
|
AC_PROG_LIBTOOL
|
||||||
|
|
||||||
|
AC_MSG_CHECKING([if we need -no-undefined])
|
||||||
|
case $host in
|
||||||
|
*-*-cygwin | *-*-mingw* | *-*-pw32*)
|
||||||
|
need_no_undefined=yes
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
need_no_undefined=no
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
AC_MSG_RESULT($need_no_undefined)
|
||||||
|
AM_CONDITIONAL(NO_UNDEFINED, test x$need_no_undefined = xyes)
|
||||||
|
|
||||||
|
dnl **********************************************************************
|
||||||
|
dnl Checks for libraries.
|
||||||
|
dnl **********************************************************************
|
||||||
|
|
||||||
|
dnl gethostbyname without lib or in the nsl lib?
|
||||||
|
AC_CHECK_FUNC(gethostbyname,
|
||||||
|
[HAVE_GETHOSTBYNAME="1"
|
||||||
|
],
|
||||||
|
[ AC_CHECK_LIB(nsl, gethostbyname,
|
||||||
|
[HAVE_GETHOSTBYNAME="1"
|
||||||
|
LIBS="$LIBS -lnsl"
|
||||||
|
])
|
||||||
|
])
|
||||||
|
|
||||||
|
if test "$HAVE_GETHOSTBYNAME" != "1"
|
||||||
|
then
|
||||||
|
dnl gethostbyname in the socket lib?
|
||||||
|
AC_CHECK_LIB(socket, gethostbyname,
|
||||||
|
[HAVE_GETHOSTBYNAME="1"
|
||||||
|
LIBS="$LIBS -lsocket"
|
||||||
|
])
|
||||||
|
fi
|
||||||
|
|
||||||
|
dnl At least one system has been identified to require BOTH nsl and socket
|
||||||
|
dnl libs at the same time to link properly.
|
||||||
|
if test "$HAVE_GETHOSTBYNAME" != "1"
|
||||||
|
then
|
||||||
|
AC_MSG_CHECKING([for gethostbyname with both nsl and socket libs])
|
||||||
|
my_ac_save_LIBS=$LIBS
|
||||||
|
LIBS="-lnsl -lsocket $LIBS"
|
||||||
|
AC_TRY_LINK( ,
|
||||||
|
[gethostbyname();],
|
||||||
|
[ dnl found it!
|
||||||
|
HAVE_GETHOSTBYNAME="1"
|
||||||
|
AC_MSG_RESULT([yes])],
|
||||||
|
[ dnl failed!
|
||||||
|
AC_MSG_RESULT([no])
|
||||||
|
dnl restore LIBS
|
||||||
|
LIBS=$my_ac_save_LIBS]
|
||||||
|
)
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test "$HAVE_GETHOSTBYNAME" != "1"
|
||||||
|
then
|
||||||
|
dnl This is for Msys/Mingw
|
||||||
|
AC_MSG_CHECKING([for gethostbyname in ws2_32])
|
||||||
|
my_ac_save_LIBS=$LIBS
|
||||||
|
LIBS="-lws2_32 $LIBS"
|
||||||
|
AC_TRY_LINK([#include <winsock2.h>],
|
||||||
|
[gethostbyname("www.dummysite.com");],
|
||||||
|
[ dnl worked!
|
||||||
|
ws2="yes"
|
||||||
|
AC_MSG_RESULT([yes])
|
||||||
|
HAVE_GETHOSTBYNAME="1"],
|
||||||
|
[ dnl failed, restore LIBS
|
||||||
|
LIBS=$my_ac_save_LIBS
|
||||||
|
AC_MSG_RESULT(no)]
|
||||||
|
)
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test "$HAVE_GETHOSTBYNAME" != "1"
|
||||||
|
then
|
||||||
|
dnl This is for eCos with a stubbed DNS implementation
|
||||||
|
AC_MSG_CHECKING([for gethostbyname for eCos])
|
||||||
|
AC_TRY_LINK([
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <netdb.h>],
|
||||||
|
[gethostbyname("www.dummysite.com");],
|
||||||
|
[ dnl worked!
|
||||||
|
AC_MSG_RESULT([yes])
|
||||||
|
HAVE_GETHOSTBYNAME="1"],
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
)
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test "$HAVE_GETHOSTBYNAME" != "1"
|
||||||
|
then
|
||||||
|
dnl gethostbyname in the net lib - for BeOS
|
||||||
|
AC_CHECK_LIB(net, gethostbyname,
|
||||||
|
[HAVE_GETHOSTBYNAME="1"
|
||||||
|
LIBS="$LIBS -lnet"
|
||||||
|
])
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
if test "$HAVE_GETHOSTBYNAME" = "1"; then
|
||||||
|
AC_DEFINE(HAVE_GETHOSTBYNAME, 1, [If you have gethostbyname])
|
||||||
|
else
|
||||||
|
AC_MSG_ERROR([couldn't find libraries for gethostbyname()])
|
||||||
|
fi
|
||||||
|
|
||||||
|
dnl resolve lib?
|
||||||
|
AC_CHECK_FUNC(strcasecmp, , [ AC_CHECK_LIB(resolve, strcasecmp) ])
|
||||||
|
|
||||||
|
if test "$ac_cv_lib_resolve_strcasecmp" = "$ac_cv_func_strcasecmp"; then
|
||||||
|
AC_CHECK_LIB(resolve, strcasecmp,
|
||||||
|
[LIBS="-lresolve $LIBS"],
|
||||||
|
,
|
||||||
|
-lnsl)
|
||||||
|
fi
|
||||||
|
|
||||||
|
dnl socket lib?
|
||||||
|
AC_CHECK_FUNC(connect, , [ AC_CHECK_LIB(socket, connect) ])
|
||||||
|
|
||||||
|
dnl dl lib?
|
||||||
|
AC_CHECK_FUNC(dlclose, , [ AC_CHECK_LIB(dl, dlopen) ])
|
||||||
|
|
||||||
|
AC_MSG_CHECKING([whether to use libgcc])
|
||||||
|
AC_ARG_ENABLE(libgcc,
|
||||||
|
AC_HELP_STRING([--enable-libgcc],[use libgcc when linking]),
|
||||||
|
[ case "$enableval" in
|
||||||
|
yes)
|
||||||
|
LIBS="$LIBS -lgcc"
|
||||||
|
AC_MSG_RESULT(yes)
|
||||||
|
;;
|
||||||
|
*) AC_MSG_RESULT(no)
|
||||||
|
;;
|
||||||
|
esac ],
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
)
|
||||||
|
|
||||||
|
dnl **********************************************************************
|
||||||
|
dnl Back to "normal" configuring
|
||||||
|
dnl **********************************************************************
|
||||||
|
|
||||||
|
dnl Checks for header files.
|
||||||
|
AC_HEADER_STDC
|
||||||
|
|
||||||
|
dnl **********************************************************************
|
||||||
|
dnl Make sure that our checks for headers windows.h winsock.h winsock2.h
|
||||||
|
dnl and ws2tcpip.h take precedence over any other further checks which
|
||||||
|
dnl could be done later using AC_CHECK_HEADER or AC_CHECK_HEADERS for
|
||||||
|
dnl this specific header files. And do them before its results are used.
|
||||||
|
dnl **********************************************************************
|
||||||
|
|
||||||
|
CURL_CHECK_HEADER_WINDOWS
|
||||||
|
CURL_CHECK_HEADER_WINSOCK
|
||||||
|
CURL_CHECK_HEADER_WINSOCK2
|
||||||
|
CURL_CHECK_HEADER_WS2TCPIP
|
||||||
|
|
||||||
|
CURL_CHECK_HEADER_MALLOC
|
||||||
|
|
||||||
dnl check for a few basic system headers we need
|
dnl check for a few basic system headers we need
|
||||||
AC_CHECK_HEADERS(
|
AC_CHECK_HEADERS(
|
||||||
sys/types.h \
|
sys/types.h \
|
||||||
@@ -67,17 +227,23 @@ AC_CHECK_HEADERS(
|
|||||||
sys/socket.h \
|
sys/socket.h \
|
||||||
sys/ioctl.h \
|
sys/ioctl.h \
|
||||||
netdb.h \
|
netdb.h \
|
||||||
winsock2.h \
|
|
||||||
ws2tcpip.h \
|
|
||||||
netinet/in.h \
|
netinet/in.h \
|
||||||
net/if.h \
|
net/if.h \
|
||||||
arpa/nameser.h \
|
arpa/nameser.h \
|
||||||
arpa/nameser_compat.h \
|
arpa/nameser_compat.h \
|
||||||
arpa/inet.h, , ,
|
arpa/inet.h,
|
||||||
|
dnl to do if not found
|
||||||
|
[],
|
||||||
|
dnl to do if found
|
||||||
|
[],
|
||||||
|
dnl default includes
|
||||||
[
|
[
|
||||||
#ifdef HAVE_SYS_TYPES_H
|
#ifdef HAVE_SYS_TYPES_H
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef HAVE_SYS_TIME_H
|
||||||
|
#include <sys/time.h>
|
||||||
|
#endif
|
||||||
dnl We do this default-include simply to make sure that the nameser_compat.h
|
dnl We do this default-include simply to make sure that the nameser_compat.h
|
||||||
dnl header *REALLY* can be include after the new nameser.h. It seems AIX 5.1
|
dnl header *REALLY* can be include after the new nameser.h. It seems AIX 5.1
|
||||||
dnl (and others?) is not designed to allow this.
|
dnl (and others?) is not designed to allow this.
|
||||||
@@ -89,39 +255,73 @@ dnl *Sigh* these are needed in order for net/if.h to get properly detected.
|
|||||||
#ifdef HAVE_SYS_SOCKET_H
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_WINSOCK2_H
|
#ifdef HAVE_NETINET_IN_H
|
||||||
#include <winsock2.h>
|
#include <netinet/in.h>
|
||||||
#endif
|
#endif
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
AC_CHECK_TYPE(socklen_t, ,
|
dnl Checks for typedefs, structures, and compiler characteristics.
|
||||||
AC_DEFINE(socklen_t, int, [the length of a socket address]),
|
AC_C_CONST
|
||||||
[
|
AC_TYPE_SIZE_T
|
||||||
#ifdef HAVE_SYS_TYPES_H
|
AC_HEADER_TIME
|
||||||
#include <sys/types.h>
|
|
||||||
#endif
|
AC_CHECK_SIZEOF(size_t)
|
||||||
#ifdef HAVE_SYS_SOCKET_H
|
AC_CHECK_SIZEOF(long)
|
||||||
#include <sys/socket.h>
|
AC_CHECK_SIZEOF(time_t)
|
||||||
#endif
|
|
||||||
#ifdef HAVE_WINSOCK2_H
|
AC_CHECK_TYPE(long long,
|
||||||
#include <winsock2.h>
|
[AC_DEFINE(HAVE_LONGLONG, 1, [if your compiler supports long long])]
|
||||||
#endif
|
longlong="yes"
|
||||||
])
|
)
|
||||||
|
|
||||||
|
if test "xyes" = "x$longlong"; then
|
||||||
|
AC_MSG_CHECKING([if numberLL works])
|
||||||
|
AC_COMPILE_IFELSE([long long val = 1000LL;],
|
||||||
|
[AC_DEFINE(HAVE_LL, 1, [if your compiler supports LL])]
|
||||||
|
AC_MSG_RESULT(yes),
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
)
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
# check for ssize_t
|
||||||
|
AC_CHECK_TYPE(ssize_t, ,
|
||||||
|
AC_DEFINE(ssize_t, int, [the signed version of size_t]))
|
||||||
|
|
||||||
|
# Check for socklen_t or equivalent
|
||||||
|
CURL_CHECK_TYPE_SOCKLEN_T
|
||||||
|
|
||||||
|
TYPE_IN_ADDR_T
|
||||||
|
|
||||||
|
TYPE_SOCKADDR_STORAGE
|
||||||
|
|
||||||
|
CURL_CHECK_FUNC_RECV
|
||||||
|
|
||||||
|
CURL_CHECK_FUNC_SEND
|
||||||
|
|
||||||
|
CURL_CHECK_MSG_NOSIGNAL
|
||||||
|
|
||||||
dnl check for AF_INET6
|
dnl check for AF_INET6
|
||||||
CARES_CHECK_CONSTANT(
|
CARES_CHECK_CONSTANT(
|
||||||
[
|
[
|
||||||
|
#undef inline
|
||||||
|
#ifdef HAVE_WINDOWS_H
|
||||||
|
#ifndef WIN32_LEAN_AND_MEAN
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#endif
|
||||||
|
#include <windows.h>
|
||||||
|
#ifdef HAVE_WINSOCK2_H
|
||||||
|
#include <winsock2.h>
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
#ifdef HAVE_SYS_TYPES_H
|
#ifdef HAVE_SYS_TYPES_H
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_SYS_SOCKET_H
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_WINSOCK2_H
|
|
||||||
#include <winsock2.h>
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
], [PF_INET6],
|
], [PF_INET6],
|
||||||
AC_DEFINE_UNQUOTED(HAVE_PF_INET6,1,[Define to 1 if you have PF_INET6.])
|
AC_DEFINE_UNQUOTED(HAVE_PF_INET6,1,[Define to 1 if you have PF_INET6.])
|
||||||
)
|
)
|
||||||
@@ -129,16 +329,23 @@ CARES_CHECK_CONSTANT(
|
|||||||
dnl check for PF_INET6
|
dnl check for PF_INET6
|
||||||
CARES_CHECK_CONSTANT(
|
CARES_CHECK_CONSTANT(
|
||||||
[
|
[
|
||||||
|
#undef inline
|
||||||
|
#ifdef HAVE_WINDOWS_H
|
||||||
|
#ifndef WIN32_LEAN_AND_MEAN
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#endif
|
||||||
|
#include <windows.h>
|
||||||
|
#ifdef HAVE_WINSOCK2_H
|
||||||
|
#include <winsock2.h>
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
#ifdef HAVE_SYS_TYPES_H
|
#ifdef HAVE_SYS_TYPES_H
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_SYS_SOCKET_H
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_WINSOCK2_H
|
|
||||||
#include <winsock2.h>
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
], [AF_INET6],
|
], [AF_INET6],
|
||||||
AC_DEFINE_UNQUOTED(HAVE_AF_INET6,1,[Define to 1 if you have AF_INET6.])
|
AC_DEFINE_UNQUOTED(HAVE_AF_INET6,1,[Define to 1 if you have AF_INET6.])
|
||||||
)
|
)
|
||||||
@@ -147,17 +354,25 @@ CARES_CHECK_CONSTANT(
|
|||||||
dnl check for the in6_addr structure
|
dnl check for the in6_addr structure
|
||||||
CARES_CHECK_STRUCT(
|
CARES_CHECK_STRUCT(
|
||||||
[
|
[
|
||||||
#ifdef HAVE_SYS_TYPES_H
|
#undef inline
|
||||||
#include <sys/types.h>
|
#ifdef HAVE_WINDOWS_H
|
||||||
|
#ifndef WIN32_LEAN_AND_MEAN
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
#endif
|
#endif
|
||||||
|
#include <windows.h>
|
||||||
#ifdef HAVE_WINSOCK2_H
|
#ifdef HAVE_WINSOCK2_H
|
||||||
#include <winsock2.h>
|
#include <winsock2.h>
|
||||||
#endif
|
|
||||||
#ifdef HAVE_WS2TCPIP_H
|
#ifdef HAVE_WS2TCPIP_H
|
||||||
#include <ws2tcpip.h>
|
#include <ws2tcpip.h>
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#ifdef HAVE_SYS_TYPES_H
|
||||||
|
#include <sys/types.h>
|
||||||
|
#endif
|
||||||
#ifdef HAVE_NETINET_IN_H
|
#ifdef HAVE_NETINET_IN_H
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
], [in6_addr],
|
], [in6_addr],
|
||||||
AC_DEFINE_UNQUOTED(HAVE_STRUCT_IN6_ADDR,1,[Define to 1 if you have struct in6_addr.])
|
AC_DEFINE_UNQUOTED(HAVE_STRUCT_IN6_ADDR,1,[Define to 1 if you have struct in6_addr.])
|
||||||
@@ -166,17 +381,25 @@ CARES_CHECK_STRUCT(
|
|||||||
dnl check for the sockaddr_in6 structure
|
dnl check for the sockaddr_in6 structure
|
||||||
CARES_CHECK_STRUCT(
|
CARES_CHECK_STRUCT(
|
||||||
[
|
[
|
||||||
#ifdef HAVE_SYS_TYPES_H
|
#undef inline
|
||||||
#include <sys/types.h>
|
#ifdef HAVE_WINDOWS_H
|
||||||
|
#ifndef WIN32_LEAN_AND_MEAN
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
#endif
|
#endif
|
||||||
|
#include <windows.h>
|
||||||
#ifdef HAVE_WINSOCK2_H
|
#ifdef HAVE_WINSOCK2_H
|
||||||
#include <winsock2.h>
|
#include <winsock2.h>
|
||||||
#endif
|
|
||||||
#ifdef HAVE_WS2TCPIP_H
|
#ifdef HAVE_WS2TCPIP_H
|
||||||
#include <ws2tcpip.h>
|
#include <ws2tcpip.h>
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#ifdef HAVE_SYS_TYPES_H
|
||||||
|
#include <sys/types.h>
|
||||||
|
#endif
|
||||||
#ifdef HAVE_NETINET_IN_H
|
#ifdef HAVE_NETINET_IN_H
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
], [sockaddr_in6],
|
], [sockaddr_in6],
|
||||||
AC_DEFINE_UNQUOTED(HAVE_STRUCT_SOCKADDR_IN6,1,
|
AC_DEFINE_UNQUOTED(HAVE_STRUCT_SOCKADDR_IN6,1,
|
||||||
@@ -188,17 +411,25 @@ AC_CHECK_MEMBER(struct sockaddr_in6.sin6_scope_id,
|
|||||||
[Define to 1 if your struct sockaddr_in6 has sin6_scope_id.])
|
[Define to 1 if your struct sockaddr_in6 has sin6_scope_id.])
|
||||||
, ,
|
, ,
|
||||||
[
|
[
|
||||||
#ifdef HAVE_SYS_TYPES_H
|
#undef inline
|
||||||
#include <sys/types.h>
|
#ifdef HAVE_WINDOWS_H
|
||||||
|
#ifndef WIN32_LEAN_AND_MEAN
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
#endif
|
#endif
|
||||||
|
#include <windows.h>
|
||||||
#ifdef HAVE_WINSOCK2_H
|
#ifdef HAVE_WINSOCK2_H
|
||||||
#include <winsock2.h>
|
#include <winsock2.h>
|
||||||
#endif
|
|
||||||
#ifdef HAVE_WS2TCPIP_H
|
#ifdef HAVE_WS2TCPIP_H
|
||||||
#include <ws2tcpip.h>
|
#include <ws2tcpip.h>
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#ifdef HAVE_SYS_TYPES_H
|
||||||
|
#include <sys/types.h>
|
||||||
|
#endif
|
||||||
#ifdef HAVE_NETINET_IN_H
|
#ifdef HAVE_NETINET_IN_H
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
])
|
])
|
||||||
|
|
||||||
@@ -207,15 +438,22 @@ AC_CHECK_MEMBER(struct addrinfo.ai_flags,
|
|||||||
AC_DEFINE_UNQUOTED(HAVE_STRUCT_ADDRINFO,1,
|
AC_DEFINE_UNQUOTED(HAVE_STRUCT_ADDRINFO,1,
|
||||||
[Define to 1 if you have struct addrinfo.]),,
|
[Define to 1 if you have struct addrinfo.]),,
|
||||||
[
|
[
|
||||||
#ifdef HAVE_SYS_TYPES_H
|
#undef inline
|
||||||
#include <sys/types.h>
|
#ifdef HAVE_WINDOWS_H
|
||||||
|
#ifndef WIN32_LEAN_AND_MEAN
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_WINSOCaK2_H
|
#include <windows.h>
|
||||||
|
#ifdef HAVE_WINSOCK2_H
|
||||||
#include <winsock2.h>
|
#include <winsock2.h>
|
||||||
#endif
|
|
||||||
#ifdef HAVE_WS2TCPIP_H
|
#ifdef HAVE_WS2TCPIP_H
|
||||||
#include <ws2tcpip.h>
|
#include <ws2tcpip.h>
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#ifdef HAVE_SYS_TYPES_H
|
||||||
|
#include <sys/types.h>
|
||||||
|
#endif
|
||||||
#ifdef HAVE_NETINET_IN_H
|
#ifdef HAVE_NETINET_IN_H
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
#endif
|
#endif
|
||||||
@@ -224,10 +462,30 @@ AC_CHECK_MEMBER(struct addrinfo.ai_flags,
|
|||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_NETDB_H
|
#ifdef HAVE_NETDB_H
|
||||||
#include <netdb.h>
|
#include <netdb.h>
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
AC_CHECK_FUNCS( bitncmp \
|
||||||
|
if_indextoname,
|
||||||
|
dnl if found
|
||||||
|
[],
|
||||||
|
dnl if not found, $ac_func is the name we check for
|
||||||
|
func="$ac_func"
|
||||||
|
AC_MSG_CHECKING([deeper for $func])
|
||||||
|
AC_TRY_LINK( [],
|
||||||
|
[ $func ();],
|
||||||
|
AC_MSG_RESULT(yes!)
|
||||||
|
eval "ac_cv_func_$func=yes"
|
||||||
|
def=`echo "HAVE_$func" | tr 'a-z' 'A-Z'`
|
||||||
|
AC_DEFINE_UNQUOTED($def, 1, [If you have $func]),
|
||||||
|
AC_MSG_RESULT(but still no)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
dnl check for inet_pton
|
dnl check for inet_pton
|
||||||
AC_CHECK_FUNCS(inet_pton)
|
AC_CHECK_FUNCS(inet_pton)
|
||||||
dnl Some systems have it, but not IPv6
|
dnl Some systems have it, but not IPv6
|
||||||
@@ -241,9 +499,6 @@ AC_TRY_RUN(
|
|||||||
#ifdef HAVE_SYS_SOCKET_H
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_WINSOCK_H
|
|
||||||
#include <winsock.h>
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_NETINET_IN_H
|
#ifdef HAVE_NETINET_IN_H
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
#endif
|
#endif
|
||||||
@@ -273,9 +528,6 @@ AC_TRY_RUN(
|
|||||||
#ifdef HAVE_SYS_SOCKET_H
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_WINSOCK_H
|
|
||||||
#include <winsock.h>
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_NETINET_IN_H
|
#ifdef HAVE_NETINET_IN_H
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
#endif
|
#endif
|
||||||
@@ -307,9 +559,6 @@ AC_TRY_RUN(
|
|||||||
#ifdef HAVE_SYS_SOCKET_H
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_WINSOCK_H
|
|
||||||
#include <winsock.h>
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_NETINET_IN_H
|
#ifdef HAVE_NETINET_IN_H
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
#endif
|
#endif
|
||||||
@@ -325,52 +574,82 @@ int main()
|
|||||||
}
|
}
|
||||||
], [
|
], [
|
||||||
AC_MSG_RESULT(yes)
|
AC_MSG_RESULT(yes)
|
||||||
AC_DEFINE_UNQUOTED(HAVE_INET_NTOP_IPV6,1,[Define to 1 if inet_ntop supports IPv6.])
|
AC_DEFINE_UNQUOTED(HAVE_INET_NTOP_IPV6,1,
|
||||||
|
[Define to 1 if inet_ntop supports IPv6.])
|
||||||
], AC_MSG_RESULT(no),AC_MSG_RESULT(no))
|
], AC_MSG_RESULT(no),AC_MSG_RESULT(no))
|
||||||
fi
|
fi
|
||||||
|
|
||||||
AC_CHECK_SIZEOF(struct in6_addr, ,
|
AC_CHECK_SIZEOF(struct in6_addr, ,
|
||||||
[
|
[
|
||||||
|
#undef inline
|
||||||
|
#ifdef HAVE_WINDOWS_H
|
||||||
|
#ifndef WIN32_LEAN_AND_MEAN
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#endif
|
||||||
|
#include <windows.h>
|
||||||
|
#ifdef HAVE_WINSOCK2_H
|
||||||
|
#include <winsock2.h>
|
||||||
|
#ifdef HAVE_WS2TCPIP_H
|
||||||
|
#include <ws2tcpip.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
#ifdef HAVE_SYS_TYPES_H
|
#ifdef HAVE_SYS_TYPES_H
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_SYS_SOCKET_H
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_WINSOCK_H
|
|
||||||
#include <winsock.h>
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_NETINET_IN_H
|
#ifdef HAVE_NETINET_IN_H
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
AC_CHECK_SIZEOF(struct in_addr, ,
|
AC_CHECK_SIZEOF(struct in_addr, ,
|
||||||
[
|
[
|
||||||
|
#undef inline
|
||||||
|
#ifdef HAVE_WINDOWS_H
|
||||||
|
#ifndef WIN32_LEAN_AND_MEAN
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#endif
|
||||||
|
#include <windows.h>
|
||||||
|
#ifdef HAVE_WINSOCK2_H
|
||||||
|
#include <winsock2.h>
|
||||||
|
#ifdef HAVE_WS2TCPIP_H
|
||||||
|
#include <ws2tcpip.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
#ifdef HAVE_SYS_TYPES_H
|
#ifdef HAVE_SYS_TYPES_H
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_SYS_SOCKET_H
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_WINSOCK_H
|
|
||||||
#include <winsock.h>
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_NETINET_IN_H
|
#ifdef HAVE_NETINET_IN_H
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
AC_CHECK_FUNCS([bitncmp if_indextoname])
|
|
||||||
|
|
||||||
dnl God bless non-standardized functions! We need to see which getservbyport_r variant is available
|
dnl Check if the getnameinfo function is available
|
||||||
|
dnl and get the types of five of its arguments.
|
||||||
|
CURL_CHECK_FUNC_GETNAMEINFO
|
||||||
|
|
||||||
|
|
||||||
|
dnl God bless non-standardized functions! We need to see which getservbyport_r
|
||||||
|
dnl variant is available
|
||||||
CARES_CHECK_GETSERVBYPORT_R
|
CARES_CHECK_GETSERVBYPORT_R
|
||||||
|
|
||||||
CURL_CHECK_NONBLOCKING_SOCKET
|
CURL_CHECK_NONBLOCKING_SOCKET
|
||||||
|
|
||||||
AC_C_BIGENDIAN(
|
AC_C_BIGENDIAN(
|
||||||
[AC_DEFINE(ARES_BIG_ENDIAN, 1, [define this if ares is built for a big endian system])],
|
[AC_DEFINE(ARES_BIG_ENDIAN, 1,
|
||||||
|
[define this if ares is built for a big endian system])],
|
||||||
,
|
,
|
||||||
[AC_MSG_WARN([couldn't figure out endianess, assuming little endian!])]
|
[AC_MSG_WARN([couldn't figure out endianess, assuming little endian!])]
|
||||||
)
|
)
|
||||||
|
@@ -1,3 +1,5 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
|
* Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
|
||||||
* Copyright (c) 1996,1999 by Internet Software Consortium.
|
* Copyright (c) 1996,1999 by Internet Software Consortium.
|
||||||
|
@@ -1,3 +1,6 @@
|
|||||||
|
#ifndef __ARES_INET_NET_PTON_H
|
||||||
|
#define __ARES_INET_NET_PTON_H
|
||||||
|
|
||||||
/* $Id$ */
|
/* $Id$ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -14,9 +17,6 @@
|
|||||||
* without express or implied warranty.
|
* without express or implied warranty.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef INET_NET_PTON_H
|
|
||||||
#define INET_NET_PTON_H
|
|
||||||
|
|
||||||
#if defined(HAVE_INET_PTON) && defined(HAVE_INET_PTON_IPV6)
|
#if defined(HAVE_INET_PTON) && defined(HAVE_INET_PTON_IPV6)
|
||||||
#define ares_inet_pton(x,y,z) inet_pton(x,y,z)
|
#define ares_inet_pton(x,y,z) inet_pton(x,y,z)
|
||||||
#else
|
#else
|
||||||
@@ -28,4 +28,4 @@ int ares_inet_pton(int af, const char *src, void *dst);
|
|||||||
int ares_inet_net_pton(int af, const char *src, void *dst, size_t size);
|
int ares_inet_net_pton(int af, const char *src, void *dst, size_t size);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* INET_NET_PTON_H */
|
#endif /* __ARES_INET_NET_PTON_H */
|
||||||
|
@@ -129,9 +129,13 @@ inet_ntop6(const unsigned char *src, char *dst, size_t size)
|
|||||||
* Keep this in mind if you think this function should have been coded
|
* Keep this in mind if you think this function should have been coded
|
||||||
* to use pointer overlays. All the world's not a VAX.
|
* to use pointer overlays. All the world's not a VAX.
|
||||||
*/
|
*/
|
||||||
char tmp[sizeof "ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255"], *tp;
|
char tmp[sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255")];
|
||||||
struct { int base, len; } best = { 0,0 }, cur = { 0,0 };
|
char *tp;
|
||||||
unsigned int words[NS_IN6ADDRSZ / NS_INT16SZ];
|
struct {
|
||||||
|
long base;
|
||||||
|
long len;
|
||||||
|
} best, cur;
|
||||||
|
unsigned long words[NS_IN6ADDRSZ / NS_INT16SZ];
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -139,11 +143,15 @@ inet_ntop6(const unsigned char *src, char *dst, size_t size)
|
|||||||
* Copy the input (bytewise) array into a wordwise array.
|
* Copy the input (bytewise) array into a wordwise array.
|
||||||
* Find the longest run of 0x00's in src[] for :: shorthanding.
|
* Find the longest run of 0x00's in src[] for :: shorthanding.
|
||||||
*/
|
*/
|
||||||
memset(words, '\0', sizeof words);
|
memset(words, '\0', sizeof(words));
|
||||||
for (i = 0; i < NS_IN6ADDRSZ; i++)
|
for (i = 0; i < NS_IN6ADDRSZ; i++)
|
||||||
words[i / 2] |= (src[i] << ((1 - (i % 2)) << 3));
|
words[i / 2] |= (src[i] << ((1 - (i % 2)) << 3));
|
||||||
|
|
||||||
best.base = -1;
|
best.base = -1;
|
||||||
cur.base = -1;
|
cur.base = -1;
|
||||||
|
best.len = 0;
|
||||||
|
cur.len = 0;
|
||||||
|
|
||||||
for (i = 0; i < (NS_IN6ADDRSZ / NS_INT16SZ); i++)
|
for (i = 0; i < (NS_IN6ADDRSZ / NS_INT16SZ); i++)
|
||||||
{
|
{
|
||||||
if (words[i] == 0)
|
if (words[i] == 0)
|
||||||
@@ -192,12 +200,12 @@ inet_ntop6(const unsigned char *src, char *dst, size_t size)
|
|||||||
if (i == 6 && best.base == 0 &&
|
if (i == 6 && best.base == 0 &&
|
||||||
(best.len == 6 || (best.len == 5 && words[5] == 0xffff)))
|
(best.len == 6 || (best.len == 5 && words[5] == 0xffff)))
|
||||||
{
|
{
|
||||||
if (!inet_ntop4(src+12, tp, sizeof tmp - (tp - tmp)))
|
if (!inet_ntop4(src+12, tp, sizeof(tmp) - (tp - tmp)))
|
||||||
return (NULL);
|
return (NULL);
|
||||||
tp += strlen(tp);
|
tp += strlen(tp);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
tp += SPRINTF((tp, "%x", words[i]));
|
tp += SPRINTF((tp, "%lx", words[i]));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Was it a trailing run of 0x00's? */
|
/* Was it a trailing run of 0x00's? */
|
||||||
|
@@ -1,3 +1,6 @@
|
|||||||
|
#ifndef __ARES_INET_NTOP_H
|
||||||
|
#define __ARES_INET_NTOP_H
|
||||||
|
|
||||||
/* $Id$ */
|
/* $Id$ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -14,13 +17,10 @@
|
|||||||
* without express or implied warranty.
|
* without express or implied warranty.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef INET_NTOP_H
|
#if defined(HAVE_INET_NTOP) && defined(HAVE_INET_NTOP_IPV6)
|
||||||
#define INET_NTOP_H
|
|
||||||
|
|
||||||
#ifdef HAVE_INET_NTOP
|
|
||||||
#define ares_inet_ntop(w,x,y,z) inet_ntop(w,x,y,z)
|
#define ares_inet_ntop(w,x,y,z) inet_ntop(w,x,y,z)
|
||||||
#else
|
#else
|
||||||
const char *ares_inet_ntop(int af, const void *src, char *dst, size_t size);
|
const char *ares_inet_ntop(int af, const void *src, char *dst, size_t size);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* INET_NET_NTOP_H */
|
#endif /* __ARES_INET_NTOP_H */
|
||||||
|
@@ -7,7 +7,9 @@
|
|||||||
port build */
|
port build */
|
||||||
|
|
||||||
#ifndef NETWARE
|
#ifndef NETWARE
|
||||||
|
#ifndef __CYGWIN__
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
#endif
|
||||||
#include <process.h> /* for the _getpid() proto */
|
#include <process.h> /* for the _getpid() proto */
|
||||||
#endif /* !NETWARE */
|
#endif /* !NETWARE */
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
98
ares/setup.h
98
ares/setup.h
@@ -1,5 +1,7 @@
|
|||||||
#ifndef ARES_SETUP_H
|
#ifndef __ARES_SETUP_H
|
||||||
#define ARES_SETUP_H
|
#define __ARES_SETUP_H
|
||||||
|
|
||||||
|
/* $Id$ */
|
||||||
|
|
||||||
/* Copyright (C) 2004 - 2005 by Daniel Stenberg et al
|
/* Copyright (C) 2004 - 2005 by Daniel Stenberg et al
|
||||||
*
|
*
|
||||||
@@ -14,6 +16,21 @@
|
|||||||
* without express or implied warranty.
|
* without express or implied warranty.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#if !defined(WIN32) && defined(__WIN32__)
|
||||||
|
/* Borland fix */
|
||||||
|
#define WIN32
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(WIN32) && defined(_WIN32)
|
||||||
|
/* VS2005 on x64 fix */
|
||||||
|
#define WIN32
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Include configuration script results or hand-crafted
|
||||||
|
* configuration file for platforms which lack config tool.
|
||||||
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#else
|
#else
|
||||||
@@ -22,18 +39,60 @@
|
|||||||
#include "config-win32.h"
|
#include "config-win32.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* simple work-around for now, for systems without configure support */
|
#endif /* HAVE_CONFIG_H */
|
||||||
#ifndef __DJGPP__
|
|
||||||
|
/*
|
||||||
|
* Include header files for windows builds before redefining anything.
|
||||||
|
* Use this preproessor block only to include or exclude windows.h,
|
||||||
|
* winsock2.h, ws2tcpip.h or winsock.h. Any other windows thing belongs
|
||||||
|
* to any other further and independant block. Under Cygwin things work
|
||||||
|
* just as under linux (e.g. <sys/socket.h>) and the winsock headers should
|
||||||
|
* never be included when __CYGWIN__ is defined. configure script takes
|
||||||
|
* care of this, not defining HAVE_WINDOWS_H, HAVE_WINSOCK_H, HAVE_WINSOCK2_H,
|
||||||
|
* neither HAVE_WS2TCPIP_H when __CYGWIN__ is defined.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef HAVE_WINDOWS_H
|
||||||
|
# ifndef WIN32_LEAN_AND_MEAN
|
||||||
|
# define WIN32_LEAN_AND_MEAN
|
||||||
|
# endif
|
||||||
|
# include <windows.h>
|
||||||
|
# ifdef HAVE_WINSOCK2_H
|
||||||
|
# include <winsock2.h>
|
||||||
|
# ifdef HAVE_WS2TCPIP_H
|
||||||
|
# include <ws2tcpip.h>
|
||||||
|
# endif
|
||||||
|
# else
|
||||||
|
# ifdef HAVE_WINSOCK_H
|
||||||
|
# include <winsock.h>
|
||||||
|
# endif
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Work-arounds for systems without configure support
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef HAVE_CONFIG_H
|
||||||
|
|
||||||
|
#if defined(__DJGPP__) || (defined(__WATCOMC__) && (__WATCOMC__ >= 1240)) || \
|
||||||
|
defined(__POCC__)
|
||||||
|
#else
|
||||||
#define ssize_t int
|
#define ssize_t int
|
||||||
#endif
|
#endif
|
||||||
#ifndef _MSC_VER
|
|
||||||
|
#ifndef HAVE_WS2TCPIP_H
|
||||||
#define socklen_t int
|
#define socklen_t int
|
||||||
#endif
|
#endif
|
||||||
#endif /* HAVE_CONFIG_H */
|
|
||||||
|
|
||||||
/* Recent autoconf versions define these symbols in config.h. We don't want
|
#endif /* HAVE_CONFIG_H */
|
||||||
them (since they collide with the libcurl ones when we build
|
|
||||||
--enable-debug) so we undef them again here. */
|
/*
|
||||||
|
* Recent autoconf versions define these symbols in config.h. We don't
|
||||||
|
* want them (since they collide with the libcurl ones when we build
|
||||||
|
* --enable-debug) so we undef them again here.
|
||||||
|
*/
|
||||||
|
|
||||||
#undef PACKAGE_STRING
|
#undef PACKAGE_STRING
|
||||||
#undef PACKAGE_TARNAME
|
#undef PACKAGE_TARNAME
|
||||||
#undef PACKAGE_VERSION
|
#undef PACKAGE_VERSION
|
||||||
@@ -42,10 +101,11 @@
|
|||||||
#undef VERSION
|
#undef VERSION
|
||||||
#undef PACKAGE
|
#undef PACKAGE
|
||||||
|
|
||||||
/* now typedef our socket type */
|
/*
|
||||||
|
* Typedef our socket type
|
||||||
|
*/
|
||||||
|
|
||||||
#if defined(WIN32) && !defined(WATT32)
|
#if defined(WIN32) && !defined(WATT32)
|
||||||
#include <winsock2.h>
|
|
||||||
#include <ws2tcpip.h>
|
|
||||||
typedef SOCKET ares_socket_t;
|
typedef SOCKET ares_socket_t;
|
||||||
#define ARES_SOCKET_BAD INVALID_SOCKET
|
#define ARES_SOCKET_BAD INVALID_SOCKET
|
||||||
#else
|
#else
|
||||||
@@ -53,8 +113,10 @@ typedef int ares_socket_t;
|
|||||||
#define ARES_SOCKET_BAD -1
|
#define ARES_SOCKET_BAD -1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Assume a few thing unless they're set by configure
|
/*
|
||||||
|
* Assume a few thing unless they're set by configure
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#if !defined(HAVE_SYS_TIME_H) && !defined(_MSC_VER)
|
#if !defined(HAVE_SYS_TIME_H) && !defined(_MSC_VER)
|
||||||
#define HAVE_SYS_TIME_H
|
#define HAVE_SYS_TIME_H
|
||||||
#endif
|
#endif
|
||||||
@@ -89,4 +151,12 @@ int ares_strcasecmp(const char *s1, const char *s2);
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* ARES_SETUP_H */
|
/*
|
||||||
|
* Include macros and defines that should only be processed once.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __SETUP_ONCE_H
|
||||||
|
#include "setup_once.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* __ARES_SETUP_H */
|
||||||
|
109
ares/setup_once.h
Normal file
109
ares/setup_once.h
Normal file
@@ -0,0 +1,109 @@
|
|||||||
|
#ifndef __SETUP_ONCE_H
|
||||||
|
#define __SETUP_ONCE_H
|
||||||
|
|
||||||
|
/* $Id$ */
|
||||||
|
|
||||||
|
/* Copyright (C) 2004 - 2006 by Daniel Stenberg et al
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and distribute this software and its
|
||||||
|
* documentation for any purpose and without fee is hereby granted, provided
|
||||||
|
* that the above copyright notice appear in all copies and that both that
|
||||||
|
* copyright notice and this permission notice appear in supporting
|
||||||
|
* documentation, and that the name of M.I.T. not be used in advertising or
|
||||||
|
* publicity pertaining to distribution of the software without specific,
|
||||||
|
* written prior permission. M.I.T. makes no representations about the
|
||||||
|
* suitability of this software for any purpose. It is provided "as is"
|
||||||
|
* without express or implied warranty.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If we have the MSG_NOSIGNAL define, make sure we use
|
||||||
|
* it as the fourth argument of send() and recv()
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef HAVE_MSG_NOSIGNAL
|
||||||
|
#define SEND_4TH_ARG MSG_NOSIGNAL
|
||||||
|
#else
|
||||||
|
#define SEND_4TH_ARG 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The definitions for the return type and arguments types
|
||||||
|
* of functions recv() and send() belong and come from the
|
||||||
|
* configuration file. Do not define them in any other place.
|
||||||
|
*
|
||||||
|
* HAVE_RECV is defined if you have a function named recv()
|
||||||
|
* which is used to read incoming data from sockets. If your
|
||||||
|
* function has another name then don't define HAVE_RECV.
|
||||||
|
*
|
||||||
|
* If HAVE_RECV is defined then RECV_TYPE_ARG1, RECV_TYPE_ARG2,
|
||||||
|
* RECV_TYPE_ARG3, RECV_TYPE_ARG4 and RECV_TYPE_RETV must also
|
||||||
|
* be defined.
|
||||||
|
*
|
||||||
|
* HAVE_SEND is defined if you have a function named send()
|
||||||
|
* which is used to write outgoing data on a connected socket.
|
||||||
|
* If yours has another name then don't define HAVE_SEND.
|
||||||
|
*
|
||||||
|
* If HAVE_SEND is defined then SEND_TYPE_ARG1, SEND_QUAL_ARG2,
|
||||||
|
* SEND_TYPE_ARG2, SEND_TYPE_ARG3, SEND_TYPE_ARG4 and
|
||||||
|
* SEND_TYPE_RETV must also be defined.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef HAVE_RECV
|
||||||
|
#if !defined(RECV_TYPE_ARG1) || \
|
||||||
|
!defined(RECV_TYPE_ARG2) || \
|
||||||
|
!defined(RECV_TYPE_ARG3) || \
|
||||||
|
!defined(RECV_TYPE_ARG4) || \
|
||||||
|
!defined(RECV_TYPE_RETV)
|
||||||
|
/* */
|
||||||
|
Error Missing_definition_of_return_and_arguments_types_of_recv
|
||||||
|
/* */
|
||||||
|
#else
|
||||||
|
#define sread(x,y,z) (ssize_t)recv((RECV_TYPE_ARG1)(x), \
|
||||||
|
(RECV_TYPE_ARG2)(y), \
|
||||||
|
(RECV_TYPE_ARG3)(z), \
|
||||||
|
(RECV_TYPE_ARG4)(SEND_4TH_ARG))
|
||||||
|
#endif
|
||||||
|
#else /* HAVE_RECV */
|
||||||
|
#ifdef DJGPP
|
||||||
|
#define sread(x,y,z) (ssize_t)read_s((int)(x), (char *)(y), (int)(z))
|
||||||
|
#endif
|
||||||
|
#ifndef sread
|
||||||
|
/* */
|
||||||
|
Error Missing_definition_of_macro_sread
|
||||||
|
/* */
|
||||||
|
#endif
|
||||||
|
#endif /* HAVE_RECV */
|
||||||
|
|
||||||
|
#ifdef HAVE_SEND
|
||||||
|
#if !defined(SEND_TYPE_ARG1) || \
|
||||||
|
!defined(SEND_QUAL_ARG2) || \
|
||||||
|
!defined(SEND_TYPE_ARG2) || \
|
||||||
|
!defined(SEND_TYPE_ARG3) || \
|
||||||
|
!defined(SEND_TYPE_ARG4) || \
|
||||||
|
!defined(SEND_TYPE_RETV)
|
||||||
|
/* */
|
||||||
|
Error Missing_definition_of_return_and_arguments_types_of_send
|
||||||
|
/* */
|
||||||
|
#else
|
||||||
|
#define swrite(x,y,z) (ssize_t)send((SEND_TYPE_ARG1)(x), \
|
||||||
|
(SEND_TYPE_ARG2)(y), \
|
||||||
|
(SEND_TYPE_ARG3)(z), \
|
||||||
|
(SEND_TYPE_ARG4)(SEND_4TH_ARG))
|
||||||
|
#endif
|
||||||
|
#else /* HAVE_SEND */
|
||||||
|
#ifdef DJGPP
|
||||||
|
#define swrite(x,y,z) (ssize_t)write_s((int)(x), (char *)(y), (int)(z))
|
||||||
|
#endif
|
||||||
|
#ifndef swrite
|
||||||
|
/* */
|
||||||
|
Error Missing_definition_of_macro_swrite
|
||||||
|
/* */
|
||||||
|
#endif
|
||||||
|
#endif /* HAVE_SEND */
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* __SETUP_ONCE_H */
|
||||||
|
|
@@ -1,5 +1,7 @@
|
|||||||
#include "setup.h"
|
#include "setup.h"
|
||||||
|
|
||||||
|
/* $Id$ */
|
||||||
|
|
||||||
/* only do the following on windows
|
/* only do the following on windows
|
||||||
*/
|
*/
|
||||||
#if (defined(WIN32) || defined(WATT32)) && !defined(MSDOS)
|
#if (defined(WIN32) || defined(WATT32)) && !defined(MSDOS)
|
||||||
@@ -100,6 +102,6 @@ ares_writev (ares_socket_t s, const struct iovec *vector, size_t count)
|
|||||||
memcpy (bp, vector[i].iov_base, vector[i].iov_len);
|
memcpy (bp, vector[i].iov_base, vector[i].iov_len);
|
||||||
bp += vector[i].iov_len;
|
bp += vector[i].iov_len;
|
||||||
}
|
}
|
||||||
return send (s, (const void*)buffer, bytes, 0);
|
return (int)swrite(s, buffer, bytes);
|
||||||
}
|
}
|
||||||
#endif /* WIN32 builds only */
|
#endif /* WIN32 builds only */
|
||||||
|
51
buildconf
51
buildconf
@@ -1,4 +1,26 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
#***************************************************************************
|
||||||
|
# _ _ ____ _
|
||||||
|
# Project ___| | | | _ \| |
|
||||||
|
# / __| | | | |_) | |
|
||||||
|
# | (__| |_| | _ <| |___
|
||||||
|
# \___|\___/|_| \_\_____|
|
||||||
|
#
|
||||||
|
# Copyright (C) 1998 - 2005, 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.
|
||||||
|
#
|
||||||
|
# $Id$
|
||||||
|
###########################################################################
|
||||||
|
|
||||||
die(){
|
die(){
|
||||||
echo "$@"
|
echo "$@"
|
||||||
@@ -13,6 +35,7 @@ findtool(){
|
|||||||
IFS=":"
|
IFS=":"
|
||||||
for path in $PATH
|
for path in $PATH
|
||||||
do
|
do
|
||||||
|
# echo "checks for $file in $path" >&2
|
||||||
if test -f "$path/$file"; then
|
if test -f "$path/$file"; then
|
||||||
echo "$path/$file"
|
echo "$path/$file"
|
||||||
return
|
return
|
||||||
@@ -85,8 +108,7 @@ fi
|
|||||||
|
|
||||||
echo "buildconf: automake version $am_version (ok)"
|
echo "buildconf: automake version $am_version (ok)"
|
||||||
|
|
||||||
ac=`findtool aclocal`
|
ac=`findtool ${ACLOCAL:-aclocal}`
|
||||||
|
|
||||||
if test -z "$ac"; then
|
if test -z "$ac"; then
|
||||||
echo "buildconf: aclocal not found. Weird automake installation!"
|
echo "buildconf: aclocal not found. Weird automake installation!"
|
||||||
exit 1
|
exit 1
|
||||||
@@ -107,11 +129,16 @@ LIBTOOL_WANTED_VERSION=1.4.2
|
|||||||
# glibtool, with 'libtool' being something completely different.
|
# glibtool, with 'libtool' being something completely different.
|
||||||
libtool=`findtool glibtool 2>/dev/null`
|
libtool=`findtool glibtool 2>/dev/null`
|
||||||
if test ! -x "$libtool"; then
|
if test ! -x "$libtool"; then
|
||||||
libtool=`findtool libtool`
|
libtool=`findtool ${LIBTOOL:-libtool}`
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# set the LIBTOOLIZE here so that glibtoolize is used if glibtool was found
|
if test -z "$LIBTOOLIZE"; then
|
||||||
LIBTOOLIZE="${libtool}ize"
|
# set the LIBTOOLIZE here so that glibtoolize is used if glibtool was found
|
||||||
|
# $libtool is already the full path
|
||||||
|
libtoolize="${libtool}ize"
|
||||||
|
else
|
||||||
|
libtoolize=`findtool $LIBTOOLIZE`
|
||||||
|
fi
|
||||||
|
|
||||||
lt_pversion=`$libtool --version 2>/dev/null|head -n 1|sed -e 's/^[^0-9]*//g' -e 's/[- ].*//'`
|
lt_pversion=`$libtool --version 2>/dev/null|head -n 1|sed -e 's/^[^0-9]*//g' -e 's/[- ].*//'`
|
||||||
if test -z "$lt_pversion"; then
|
if test -z "$lt_pversion"; then
|
||||||
@@ -150,7 +177,7 @@ fi
|
|||||||
|
|
||||||
echo "buildconf: libtool version $lt_version (ok)"
|
echo "buildconf: libtool version $lt_version (ok)"
|
||||||
|
|
||||||
if test -f "$LIBTOOLIZE"; then
|
if test -f "$libtoolize"; then
|
||||||
echo "buildconf: libtoolize found"
|
echo "buildconf: libtoolize found"
|
||||||
else
|
else
|
||||||
echo "buildconf: libtoolize not found. Weird libtool installation!"
|
echo "buildconf: libtoolize not found. Weird libtool installation!"
|
||||||
@@ -173,14 +200,14 @@ fi
|
|||||||
#--------------------------------------------------------------------------
|
#--------------------------------------------------------------------------
|
||||||
# perl check
|
# perl check
|
||||||
#
|
#
|
||||||
PERL=`findtool perl`
|
PERL=`findtool ${PERL:-perl}`
|
||||||
|
|
||||||
# ------------------------------------------------------------
|
# ------------------------------------------------------------
|
||||||
|
|
||||||
# run the correct scripts now
|
# run the correct scripts now
|
||||||
|
|
||||||
echo "buildconf: running libtoolize"
|
echo "buildconf: running libtoolize"
|
||||||
${LIBTOOLIZE:-libtoolize} --copy --automake --force || die "The libtool command failed"
|
$libtoolize --copy --automake --force || die "The libtoolize command failed"
|
||||||
echo "buildconf: running aclocal"
|
echo "buildconf: running aclocal"
|
||||||
${ACLOCAL:-aclocal} $ACLOCAL_FLAGS || die "The aclocal command line failed"
|
${ACLOCAL:-aclocal} $ACLOCAL_FLAGS || die "The aclocal command line failed"
|
||||||
if test -n "$PERL"; then
|
if test -n "$PERL"; then
|
||||||
@@ -199,12 +226,8 @@ ${AUTOCONF:-autoconf} || die "The autoconf command failed"
|
|||||||
|
|
||||||
if test -d ares; then
|
if test -d ares; then
|
||||||
cd ares
|
cd ares
|
||||||
echo "buildconf: running ares/libtoolize"
|
echo "buildconf: running in ares"
|
||||||
${LIBTOOLIZE:-libtoolize} --copy --automake --force || die "The libtool command failed"
|
./buildconf
|
||||||
echo "buildconf: running ares/aclocal"
|
|
||||||
${ACLOCAL:-aclocal} $ACLOCAL_FLAGS || die "The ares aclocal command failed"
|
|
||||||
echo "buildconf: running ares/autoconf"
|
|
||||||
${AUTOCONF:-autoconf} || die "The ares autoconf command failed"
|
|
||||||
cd ..
|
cd ..
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
293
configure.ac
293
configure.ac
@@ -1,4 +1,25 @@
|
|||||||
dnl $Id$
|
#***************************************************************************
|
||||||
|
# _ _ ____ _
|
||||||
|
# Project ___| | | | _ \| |
|
||||||
|
# / __| | | | |_) | |
|
||||||
|
# | (__| |_| | _ <| |___
|
||||||
|
# \___|\___/|_| \_\_____|
|
||||||
|
#
|
||||||
|
# Copyright (C) 1998 - 2006, 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.
|
||||||
|
#
|
||||||
|
# $Id$
|
||||||
|
###########################################################################
|
||||||
dnl Process this file with autoconf to produce a configure script.
|
dnl Process this file with autoconf to produce a configure script.
|
||||||
|
|
||||||
AC_PREREQ(2.57)
|
AC_PREREQ(2.57)
|
||||||
@@ -140,6 +161,19 @@ dnl The install stuff has already been taken care of by the automake stuff
|
|||||||
dnl AC_PROG_INSTALL
|
dnl AC_PROG_INSTALL
|
||||||
AC_PROG_MAKE_SET
|
AC_PROG_MAKE_SET
|
||||||
|
|
||||||
|
dnl **********************************************************************
|
||||||
|
dnl Make sure that our checks for headers windows.h winsock.h winsock2.h
|
||||||
|
dnl and ws2tcpip.h take precedence over any other further checks which
|
||||||
|
dnl could be done later using AC_CHECK_HEADER or AC_CHECK_HEADERS for
|
||||||
|
dnl this specific header files. And do them before its results are used.
|
||||||
|
dnl **********************************************************************
|
||||||
|
|
||||||
|
CURL_CHECK_HEADER_WINDOWS
|
||||||
|
CURL_CHECK_HEADER_WINSOCK
|
||||||
|
CURL_CHECK_HEADER_WINSOCK2
|
||||||
|
CURL_CHECK_HEADER_WS2TCPIP
|
||||||
|
|
||||||
|
|
||||||
dnl ************************************************************
|
dnl ************************************************************
|
||||||
dnl switch off particular protocols
|
dnl switch off particular protocols
|
||||||
dnl
|
dnl
|
||||||
@@ -151,10 +185,8 @@ AC_HELP_STRING([--disable-http],[Disable HTTP support]),
|
|||||||
no)
|
no)
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
AC_DEFINE(CURL_DISABLE_HTTP, 1, [to disable HTTP])
|
AC_DEFINE(CURL_DISABLE_HTTP, 1, [to disable HTTP])
|
||||||
AC_MSG_WARN([disable HTTP disables FTP over proxy and GOPHER too])
|
AC_MSG_WARN([disable HTTP disables FTP over proxy])
|
||||||
AC_DEFINE(CURL_DISABLE_GOPHER, 1, [to disable GOPHER])
|
|
||||||
AC_SUBST(CURL_DISABLE_HTTP, [1])
|
AC_SUBST(CURL_DISABLE_HTTP, [1])
|
||||||
AC_SUBST(CURL_DISABLE_GOPHER, [1])
|
|
||||||
;;
|
;;
|
||||||
*) AC_MSG_RESULT(yes)
|
*) AC_MSG_RESULT(yes)
|
||||||
;;
|
;;
|
||||||
@@ -176,21 +208,6 @@ AC_HELP_STRING([--disable-ftp],[Disable FTP support]),
|
|||||||
esac ],
|
esac ],
|
||||||
AC_MSG_RESULT(yes)
|
AC_MSG_RESULT(yes)
|
||||||
)
|
)
|
||||||
AC_MSG_CHECKING([whether to support gopher])
|
|
||||||
AC_ARG_ENABLE(gopher,
|
|
||||||
AC_HELP_STRING([--enable-gopher],[Enable GOPHER support])
|
|
||||||
AC_HELP_STRING([--disable-gopher],[Disable GOPHER support]),
|
|
||||||
[ case "$enableval" in
|
|
||||||
no)
|
|
||||||
AC_MSG_RESULT(no)
|
|
||||||
AC_DEFINE(CURL_DISABLE_GOPHER, 1, [to disable GOPHER])
|
|
||||||
AC_SUBST(CURL_DISABLE_GOPHER, [1])
|
|
||||||
;;
|
|
||||||
*) AC_MSG_RESULT(yes)
|
|
||||||
;;
|
|
||||||
esac ],
|
|
||||||
AC_MSG_RESULT(yes)
|
|
||||||
)
|
|
||||||
AC_MSG_CHECKING([whether to support file])
|
AC_MSG_CHECKING([whether to support file])
|
||||||
AC_ARG_ENABLE(file,
|
AC_ARG_ENABLE(file,
|
||||||
AC_HELP_STRING([--enable-file],[Enable FILE support])
|
AC_HELP_STRING([--enable-file],[Enable FILE support])
|
||||||
@@ -289,6 +306,12 @@ AC_HELP_STRING([--disable-manual],[Disable built-in manual]),
|
|||||||
dnl The actual use of the USE_MANUAL variable is done much later in this
|
dnl The actual use of the USE_MANUAL variable is done much later in this
|
||||||
dnl script to allow other actions to disable it as well.
|
dnl script to allow other actions to disable it as well.
|
||||||
|
|
||||||
|
dnl **********************************************************************
|
||||||
|
dnl check if this is the Intel ICC compiler, and if so make it stricter
|
||||||
|
dnl (convert warning 147 into an error) so that it properly can detect the
|
||||||
|
dnl gethostbyname_r() version
|
||||||
|
dnl **********************************************************************
|
||||||
|
CURL_DETECT_ICC([CFLAGS="$CFLAGS -we 147"])
|
||||||
|
|
||||||
dnl **********************************************************************
|
dnl **********************************************************************
|
||||||
dnl Checks for libraries.
|
dnl Checks for libraries.
|
||||||
@@ -350,6 +373,21 @@ then
|
|||||||
)
|
)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if test "$HAVE_GETHOSTBYNAME" != "1"
|
||||||
|
then
|
||||||
|
dnl This is for eCos with a stubbed DNS implementation
|
||||||
|
AC_MSG_CHECKING([for gethostbyname for eCos])
|
||||||
|
AC_TRY_LINK([
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <netdb.h>],
|
||||||
|
[gethostbyname("www.dummysite.com");],
|
||||||
|
[ dnl worked!
|
||||||
|
AC_MSG_RESULT([yes])
|
||||||
|
HAVE_GETHOSTBYNAME="1"],
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
)
|
||||||
|
fi
|
||||||
|
|
||||||
if test "$HAVE_GETHOSTBYNAME" != "1"
|
if test "$HAVE_GETHOSTBYNAME" != "1"
|
||||||
then
|
then
|
||||||
dnl gethostbyname in the net lib - for BeOS
|
dnl gethostbyname in the net lib - for BeOS
|
||||||
@@ -449,20 +487,31 @@ dnl **********************************************************************
|
|||||||
dnl Check for the presence of the winmm library.
|
dnl Check for the presence of the winmm library.
|
||||||
dnl **********************************************************************
|
dnl **********************************************************************
|
||||||
|
|
||||||
AC_MSG_CHECKING([for timeGetTime in winmm])
|
case $host in
|
||||||
my_ac_save_LIBS=$LIBS
|
*-*-cygwin*)
|
||||||
LIBS="-lwinmm $LIBS"
|
dnl Under Cygwin, winmm exists but is not needed as WIN32 is not #defined
|
||||||
AC_TRY_LINK([#include <windef.h>
|
dnl and gettimeofday() will be used regardless of the outcome of this test.
|
||||||
#include <mmsystem.h>
|
dnl Skip this test, otherwise -lwinmm will be needlessly added to LIBS
|
||||||
],
|
dnl (and recorded as such in the .la file, potentially affecting downstream
|
||||||
[timeGetTime();],
|
dnl clients of the library.)
|
||||||
[ dnl worked!
|
;;
|
||||||
AC_MSG_RESULT([yes])
|
*)
|
||||||
],
|
AC_MSG_CHECKING([for timeGetTime in winmm])
|
||||||
[ dnl failed, restore LIBS
|
my_ac_save_LIBS=$LIBS
|
||||||
LIBS=$my_ac_save_LIBS
|
LIBS="-lwinmm $LIBS"
|
||||||
AC_MSG_RESULT(no)]
|
AC_TRY_LINK([#include <windef.h>
|
||||||
)
|
#include <mmsystem.h>
|
||||||
|
],
|
||||||
|
[timeGetTime();],
|
||||||
|
[ dnl worked!
|
||||||
|
AC_MSG_RESULT([yes])
|
||||||
|
],
|
||||||
|
[ dnl failed, restore LIBS
|
||||||
|
LIBS=$my_ac_save_LIBS
|
||||||
|
AC_MSG_RESULT(no)]
|
||||||
|
)
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
dnl **********************************************************************
|
dnl **********************************************************************
|
||||||
dnl Checks for IPv6
|
dnl Checks for IPv6
|
||||||
@@ -503,10 +552,6 @@ main()
|
|||||||
|
|
||||||
if test "$ipv6" = "yes"; then
|
if test "$ipv6" = "yes"; then
|
||||||
curl_ipv6_msg="enabled"
|
curl_ipv6_msg="enabled"
|
||||||
|
|
||||||
CURL_CHECK_WORKING_GETADDRINFO
|
|
||||||
|
|
||||||
CURL_CHECK_NI_WITHSCOPEID
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
dnl **********************************************************************
|
dnl **********************************************************************
|
||||||
@@ -795,7 +840,7 @@ OPT_SSL=off
|
|||||||
dnl Default to no CA bundle
|
dnl Default to no CA bundle
|
||||||
ca="no"
|
ca="no"
|
||||||
AC_ARG_WITH(ssl,dnl
|
AC_ARG_WITH(ssl,dnl
|
||||||
AC_HELP_STRING([--with-ssl=PATH],[where to look for SSL, PATH points to the SSL installation (default: /usr/local/ssl)])
|
AC_HELP_STRING([--with-ssl=PATH],[Where to look for OpenSSL, PATH points to the SSL installation (default: /usr/local/ssl); when possible, set the PKG_CONFIG_PATH environment variable instead of using this option])
|
||||||
AC_HELP_STRING([--without-ssl], [disable SSL]),
|
AC_HELP_STRING([--without-ssl], [disable SSL]),
|
||||||
OPT_SSL=$withval)
|
OPT_SSL=$withval)
|
||||||
|
|
||||||
@@ -865,18 +910,26 @@ if test X"$OPT_SSL" != Xno; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
dnl This is for Msys/Mingw
|
dnl This is for Msys/Mingw
|
||||||
AC_MSG_CHECKING([for gdi32])
|
case $host in
|
||||||
my_ac_save_LIBS=$LIBS
|
*-*-cygwin*)
|
||||||
LIBS="-lgdi32 $LIBS"
|
dnl Under Cygwin this is extraneous and causes an unnecessary -lgdi32
|
||||||
AC_TRY_LINK([#include <windef.h>
|
dnl to be added to LIBS and recorded in the .la file.
|
||||||
#include <wingdi.h>],
|
;;
|
||||||
[GdiFlush();],
|
*)
|
||||||
[ dnl worked!
|
AC_MSG_CHECKING([for gdi32])
|
||||||
AC_MSG_RESULT([yes])],
|
my_ac_save_LIBS=$LIBS
|
||||||
[ dnl failed, restore LIBS
|
LIBS="-lgdi32 $LIBS"
|
||||||
LIBS=$my_ac_save_LIBS
|
AC_TRY_LINK([#include <windef.h>
|
||||||
AC_MSG_RESULT(no)]
|
#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, CRYPTO_lock,[
|
||||||
HAVECRYPTO="yes"
|
HAVECRYPTO="yes"
|
||||||
@@ -924,9 +977,18 @@ if test X"$OPT_SSL" != Xno; then
|
|||||||
AC_DEFINE(USE_OPENSSL, 1, [if OpenSSL is in use]))
|
AC_DEFINE(USE_OPENSSL, 1, [if OpenSSL is in use]))
|
||||||
|
|
||||||
if test $ac_cv_header_openssl_x509_h = no; then
|
if test $ac_cv_header_openssl_x509_h = no; then
|
||||||
AC_CHECK_HEADERS(x509.h rsa.h crypto.h pem.h ssl.h err.h,
|
dnl we don't use the "action" part of the AC_CHECK_HEADERS macro
|
||||||
|
dnl since 'err.h' might in fact find a krb4 header with the same
|
||||||
|
dnl name
|
||||||
|
AC_CHECK_HEADERS(x509.h rsa.h crypto.h pem.h ssl.h err.h)
|
||||||
|
|
||||||
|
if test $ac_cv_header_x509_h = yes &&
|
||||||
|
test $ac_cv_header_crypto_h = yes &&
|
||||||
|
test $ac_cv_header_ssl_h = yes; then
|
||||||
|
dnl three matches
|
||||||
curl_ssl_msg="enabled (OpenSSL)"
|
curl_ssl_msg="enabled (OpenSSL)"
|
||||||
OPENSSL_ENABLED=1)
|
OPENSSL_ENABLED=1
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -1047,10 +1109,10 @@ if test "$OPENSSL_ENABLED" != "1"; then
|
|||||||
fi
|
fi
|
||||||
if test -n "$addlib"; then
|
if test -n "$addlib"; then
|
||||||
|
|
||||||
CLEANLDFLAGS="$LDFLAGS"
|
CLEANLIBS="$LIBS"
|
||||||
CLEANCPPFLAGS="$CPPFLAGS"
|
CLEANCPPFLAGS="$CPPFLAGS"
|
||||||
|
|
||||||
LDFLAGS="$LDFLAGS $addlib"
|
LIBS="$LIBS $addlib"
|
||||||
if test "$addcflags" != "-I/usr/include"; then
|
if test "$addcflags" != "-I/usr/include"; then
|
||||||
CPPFLAGS="$CPPFLAGS $addcflags"
|
CPPFLAGS="$CPPFLAGS $addcflags"
|
||||||
fi
|
fi
|
||||||
@@ -1063,7 +1125,7 @@ if test "$OPENSSL_ENABLED" != "1"; then
|
|||||||
curl_ssl_msg="enabled (GnuTLS)"
|
curl_ssl_msg="enabled (GnuTLS)"
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
LDFLAGS="$CLEANLDFLAGS"
|
LIBS="$CLEANLIBS"
|
||||||
CPPFLAGS="$CLEANCPPFLAGS"
|
CPPFLAGS="$CLEANCPPFLAGS"
|
||||||
])
|
])
|
||||||
|
|
||||||
@@ -1288,8 +1350,8 @@ AC_HELP_STRING([--enable-thread],[look for thread-safe functions]),
|
|||||||
|
|
||||||
if test X"$OPT_THREAD" = Xoff
|
if test X"$OPT_THREAD" = Xoff
|
||||||
then
|
then
|
||||||
AC_DEFINE(DISABLED_THREADSAFE, 1, \
|
AC_DEFINE(DISABLED_THREADSAFE, 1,
|
||||||
Set to explicitly specify we don't want to use thread-safe functions)
|
[Set to explicitly specify we don't want to use thread-safe functions])
|
||||||
else
|
else
|
||||||
if test "$ipv6" != "yes"; then
|
if test "$ipv6" != "yes"; then
|
||||||
dnl dig around for gethostbyname_r()
|
dnl dig around for gethostbyname_r()
|
||||||
@@ -1380,7 +1442,8 @@ if test x$cross_compiling != xyes; then
|
|||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
,
|
,
|
||||||
dnl not invoked when crosscompiling)
|
dnl not invoked when crosscompiling)
|
||||||
])
|
echo "hej"
|
||||||
|
)
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
dnl and for crosscompilings
|
dnl and for crosscompilings
|
||||||
@@ -1395,7 +1458,9 @@ dnl **********************************************************************
|
|||||||
dnl Checks for header files.
|
dnl Checks for header files.
|
||||||
AC_HEADER_STDC
|
AC_HEADER_STDC
|
||||||
|
|
||||||
dnl First check for the very most basic headers. Then we can use these
|
CURL_CHECK_HEADER_MALLOC
|
||||||
|
|
||||||
|
dnl Now check for the very most basic headers. Then we can use these
|
||||||
dnl ones as default-headers when checking for the rest!
|
dnl ones as default-headers when checking for the rest!
|
||||||
AC_CHECK_HEADERS(
|
AC_CHECK_HEADERS(
|
||||||
sys/types.h \
|
sys/types.h \
|
||||||
@@ -1405,7 +1470,6 @@ AC_CHECK_HEADERS(
|
|||||||
sys/ioctl.h \
|
sys/ioctl.h \
|
||||||
assert.h \
|
assert.h \
|
||||||
unistd.h \
|
unistd.h \
|
||||||
malloc.h \
|
|
||||||
stdlib.h \
|
stdlib.h \
|
||||||
limits.h \
|
limits.h \
|
||||||
arpa/inet.h \
|
arpa/inet.h \
|
||||||
@@ -1422,8 +1486,6 @@ AC_CHECK_HEADERS(
|
|||||||
fcntl.h \
|
fcntl.h \
|
||||||
dlfcn.h \
|
dlfcn.h \
|
||||||
alloca.h \
|
alloca.h \
|
||||||
winsock.h \
|
|
||||||
winsock2.h \
|
|
||||||
time.h \
|
time.h \
|
||||||
io.h \
|
io.h \
|
||||||
pwd.h \
|
pwd.h \
|
||||||
@@ -1493,13 +1555,21 @@ fi
|
|||||||
AC_CHECK_TYPE(ssize_t, ,
|
AC_CHECK_TYPE(ssize_t, ,
|
||||||
AC_DEFINE(ssize_t, int, [the signed version of size_t]))
|
AC_DEFINE(ssize_t, int, [the signed version of size_t]))
|
||||||
|
|
||||||
TYPE_SOCKLEN_T
|
# Check for socklen_t or equivalent
|
||||||
|
CURL_CHECK_TYPE_SOCKLEN_T
|
||||||
|
|
||||||
TYPE_IN_ADDR_T
|
TYPE_IN_ADDR_T
|
||||||
|
|
||||||
TYPE_SOCKADDR_STORAGE
|
TYPE_SOCKADDR_STORAGE
|
||||||
|
|
||||||
AC_FUNC_SELECT_ARGTYPES
|
AC_FUNC_SELECT_ARGTYPES
|
||||||
|
|
||||||
|
CURL_CHECK_FUNC_RECV
|
||||||
|
|
||||||
|
CURL_CHECK_FUNC_SEND
|
||||||
|
|
||||||
|
CURL_CHECK_MSG_NOSIGNAL
|
||||||
|
|
||||||
dnl Checks for library functions.
|
dnl Checks for library functions.
|
||||||
dnl AC_PROG_GCC_TRADITIONAL
|
dnl AC_PROG_GCC_TRADITIONAL
|
||||||
AC_TYPE_SIGNAL
|
AC_TYPE_SIGNAL
|
||||||
@@ -1543,8 +1613,10 @@ AC_CHECK_FUNCS( strtoll \
|
|||||||
ftruncate \
|
ftruncate \
|
||||||
pipe \
|
pipe \
|
||||||
poll \
|
poll \
|
||||||
|
getprotobyname \
|
||||||
getrlimit \
|
getrlimit \
|
||||||
setrlimit,
|
setrlimit \
|
||||||
|
fork,
|
||||||
dnl if found
|
dnl if found
|
||||||
[],
|
[],
|
||||||
dnl if not found, $ac_func is the name we check for
|
dnl if not found, $ac_func is the name we check for
|
||||||
@@ -1565,16 +1637,33 @@ fi
|
|||||||
|
|
||||||
dnl For some reason, the check above doesn't properly detect select() with
|
dnl For some reason, the check above doesn't properly detect select() with
|
||||||
dnl Msys/Mingw
|
dnl Msys/Mingw
|
||||||
if test "$ac_cv_func_select" != "yes"; then
|
if test "$ac_cv_func_select" = "no"; then
|
||||||
AC_MSG_CHECKING([for select in ws2_32])
|
AC_MSG_CHECKING([for select in ws2_32])
|
||||||
AC_TRY_LINK([#include <winsock2.h>],
|
AC_TRY_LINK([
|
||||||
[select(0,(fd_set *)NULL,(fd_set *)NULL,(fd_set *)NULL,(struct timeval *)NULL);],
|
#undef inline
|
||||||
[ dnl worked!
|
#ifdef HAVE_WINDOWS_H
|
||||||
AC_MSG_RESULT([yes])
|
#ifndef WIN32_LEAN_AND_MEAN
|
||||||
HAVE_SELECT="1"
|
#define WIN32_LEAN_AND_MEAN
|
||||||
AC_DEFINE_UNQUOTED(HAVE_SELECT,1)],
|
#endif
|
||||||
[AC_MSG_ERROR(You can't compile without a select)]
|
#include <windows.h>
|
||||||
)
|
#ifdef HAVE_WINSOCK2_H
|
||||||
|
#include <winsock2.h>
|
||||||
|
#else
|
||||||
|
#ifdef HAVE_WINSOCK_H
|
||||||
|
#include <winsock.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
],[
|
||||||
|
select(0,(fd_set *)NULL,(fd_set *)NULL,(fd_set *)NULL,(struct timeval *)NULL);
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT([yes])
|
||||||
|
HAVE_SELECT="1"
|
||||||
|
AC_DEFINE_UNQUOTED(HAVE_SELECT, 1,
|
||||||
|
[Define to 1 if you have the select function.])
|
||||||
|
],[
|
||||||
|
AC_MSG_ERROR([You can't compile without a select])
|
||||||
|
])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
dnl sigsetjmp() might be a macro and no function so if it isn't found already
|
dnl sigsetjmp() might be a macro and no function so if it isn't found already
|
||||||
@@ -1613,6 +1702,15 @@ AC_CHECK_DECL(inet_pton, ,
|
|||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
dnl Check if the getnameinfo function is available
|
||||||
|
dnl and get the types of five of its arguments.
|
||||||
|
CURL_CHECK_FUNC_GETNAMEINFO
|
||||||
|
|
||||||
|
if test "$ipv6" = "yes"; then
|
||||||
|
CURL_CHECK_WORKING_GETADDRINFO
|
||||||
|
CURL_CHECK_NI_WITHSCOPEID
|
||||||
|
fi
|
||||||
|
|
||||||
AC_MSG_CHECKING([if we are Mac OS X (to disable poll)])
|
AC_MSG_CHECKING([if we are Mac OS X (to disable poll)])
|
||||||
disable_poll=no
|
disable_poll=no
|
||||||
case $host in
|
case $host in
|
||||||
@@ -1878,6 +1976,52 @@ AC_HELP_STRING([--disable-cookies],[Disable cookies support]),
|
|||||||
AC_MSG_RESULT(yes)
|
AC_MSG_RESULT(yes)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
dnl ************************************************************
|
||||||
|
dnl Enable hiding of internal symbols in library to reduce its size and
|
||||||
|
dnl speed dynamic linking of applications. This currently is only supported
|
||||||
|
dnl on gcc >= 4.0 and SunPro C.
|
||||||
|
dnl
|
||||||
|
AC_MSG_CHECKING([whether to enable hidden symbols in the library])
|
||||||
|
AC_ARG_ENABLE(hidden-symbols,
|
||||||
|
AC_HELP_STRING([--enable-hidden-symbols],[Hide internal symbols in library])
|
||||||
|
AC_HELP_STRING([--disable-hidden-symbols],[Leave all symbols with default visibility in library]),
|
||||||
|
[ case "$enableval" in
|
||||||
|
no)
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
AC_MSG_CHECKING([whether $CC supports it])
|
||||||
|
if test "$GCC" = yes ; then
|
||||||
|
if $CC --help --verbose 2>&1 | grep fvisibility= > /dev/null ; then
|
||||||
|
AC_MSG_RESULT(yes)
|
||||||
|
AC_DEFINE(CURL_HIDDEN_SYMBOLS, 1, [to enable hidden symbols])
|
||||||
|
AC_SUBST(CURL_HIDDEN_SYMBOLS)
|
||||||
|
AC_DEFINE(CURL_EXTERN_SYMBOL, [__attribute__ ((visibility ("default")))], [to make a symbol visible])
|
||||||
|
AC_SUBST(CURL_EXTERN_SYMBOL)
|
||||||
|
CFLAGS="$CFLAGS -fvisibility=hidden"
|
||||||
|
else
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
fi
|
||||||
|
|
||||||
|
else
|
||||||
|
dnl Test for SunPro cc
|
||||||
|
if $CC 2>&1 | grep flags >/dev/null && $CC -flags | grep xldscope= >/dev/null ; then
|
||||||
|
AC_MSG_RESULT(yes)
|
||||||
|
AC_DEFINE(CURL_HIDDEN_SYMBOLS, 1, [to enable hidden symbols])
|
||||||
|
AC_SUBST(CURL_HIDDEN_SYMBOLS)
|
||||||
|
AC_DEFINE(CURL_EXTERN_SYMBOL, [__global], [to make a symbol visible])
|
||||||
|
AC_SUBST(CURL_EXTERN_SYMBOL)
|
||||||
|
CFLAGS="$CFLAGS -xldscope=hidden"
|
||||||
|
else
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac ],
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
)
|
||||||
|
|
||||||
|
dnl ************************************************************
|
||||||
if test "x$ws2" = "xyes"; then
|
if test "x$ws2" = "xyes"; then
|
||||||
|
|
||||||
dnl If ws2_32 is wanted, make sure it is the _last_ lib in LIBS (makes
|
dnl If ws2_32 is wanted, make sure it is the _last_ lib in LIBS (makes
|
||||||
@@ -1915,6 +2059,9 @@ AC_CONFIG_FILES([Makefile \
|
|||||||
packages/EPM/curl.list \
|
packages/EPM/curl.list \
|
||||||
packages/EPM/Makefile \
|
packages/EPM/Makefile \
|
||||||
packages/vms/Makefile \
|
packages/vms/Makefile \
|
||||||
|
packages/AIX/Makefile \
|
||||||
|
packages/AIX/RPM/Makefile \
|
||||||
|
packages/AIX/RPM/curl.spec \
|
||||||
curl-config \
|
curl-config \
|
||||||
libcurl.pc
|
libcurl.pc
|
||||||
])
|
])
|
||||||
|
@@ -1,10 +1,30 @@
|
|||||||
#! /bin/sh
|
#! /bin/sh
|
||||||
|
#***************************************************************************
|
||||||
|
# _ _ ____ _
|
||||||
|
# Project ___| | | | _ \| |
|
||||||
|
# / __| | | | |_) | |
|
||||||
|
# | (__| |_| | _ <| |___
|
||||||
|
# \___|\___/|_| \_\_____|
|
||||||
|
#
|
||||||
|
# Copyright (C) 2001 - 2006, 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.
|
||||||
|
#
|
||||||
|
# $Id$
|
||||||
|
###########################################################################
|
||||||
#
|
#
|
||||||
# The idea to this kind of setup info script was stolen from numerous
|
# The idea to this kind of setup info script was stolen from numerous
|
||||||
# other packages, such as neon, libxml and gnome.
|
# other packages, such as neon, libxml and gnome.
|
||||||
#
|
#
|
||||||
# $Id$
|
|
||||||
#
|
|
||||||
prefix=@prefix@
|
prefix=@prefix@
|
||||||
exec_prefix=@exec_prefix@
|
exec_prefix=@exec_prefix@
|
||||||
includedir=@includedir@
|
includedir=@includedir@
|
||||||
@@ -19,6 +39,7 @@ Available values for OPTION include:
|
|||||||
--ca ca bundle install path
|
--ca ca bundle install path
|
||||||
--cc compiler
|
--cc compiler
|
||||||
--cflags pre-processor and compiler flags
|
--cflags pre-processor and compiler flags
|
||||||
|
--checkfor [version] check for (lib)curl of the specified version
|
||||||
--features newline separated list of enabled features
|
--features newline separated list of enabled features
|
||||||
--protocols newline separated list of enabled protocols
|
--protocols newline separated list of enabled protocols
|
||||||
--help display this help and exit
|
--help display this help and exit
|
||||||
@@ -101,9 +122,6 @@ while test $# -gt 0; do
|
|||||||
echo "FTPS"
|
echo "FTPS"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
if test "@CURL_DISABLE_GOPHER@" != "1"; then
|
|
||||||
echo "GOPHER"
|
|
||||||
fi
|
|
||||||
if test "@CURL_DISABLE_FILE@" != "1"; then
|
if test "@CURL_DISABLE_FILE@" != "1"; then
|
||||||
echo "FILE"
|
echo "FILE"
|
||||||
fi
|
fi
|
||||||
@@ -125,6 +143,26 @@ while test $# -gt 0; do
|
|||||||
exit 0
|
exit 0
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
--checkfor)
|
||||||
|
checkfor=$2
|
||||||
|
cmajor=`echo $checkfor | cut -d. -f1`
|
||||||
|
cminor=`echo $checkfor | cut -d. -f2`
|
||||||
|
# when extracting the patch part we strip off everything after a
|
||||||
|
# dash as that's used for things like version 1.2.3-CVS
|
||||||
|
cpatch=`echo $checkfor | cut -d. -f3 | cut -d- -f1`
|
||||||
|
checknum=`echo "$cmajor*256*256 + $cminor*256 + ${cpatch:-0}" | bc`
|
||||||
|
numuppercase=`echo @VERSIONNUM@ | tr 'a-f' 'A-F'`
|
||||||
|
nownum=`echo "obase=10; ibase=16; $numuppercase" | bc`
|
||||||
|
|
||||||
|
if test "$nownum" -ge "$checknum"; then
|
||||||
|
# silent success
|
||||||
|
exit 0
|
||||||
|
else
|
||||||
|
echo "requested version $checkfor is newer than existing @VERSION@"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
|
||||||
--vernum)
|
--vernum)
|
||||||
echo @VERSIONNUM@
|
echo @VERSIONNUM@
|
||||||
exit 0
|
exit 0
|
||||||
|
@@ -46,8 +46,8 @@ Cocoa
|
|||||||
|
|
||||||
D
|
D
|
||||||
|
|
||||||
Written by Charles Sanders and James Wavro
|
Written by Kenneth Bogert
|
||||||
http://www.atari-soldiers.com/libcurl.html
|
http://curl.haxx.se/libcurl/d/
|
||||||
|
|
||||||
Dylan
|
Dylan
|
||||||
|
|
||||||
@@ -155,6 +155,11 @@ S-Lang
|
|||||||
S-Lang binding written by John E Davis
|
S-Lang binding written by John E Davis
|
||||||
http://www.jedsoft.org/slang/modules/curl.html
|
http://www.jedsoft.org/slang/modules/curl.html
|
||||||
|
|
||||||
|
SPL
|
||||||
|
|
||||||
|
SPL binding written by Clifford Wolf
|
||||||
|
http://www.clifford.at/spl/
|
||||||
|
|
||||||
Tcl
|
Tcl
|
||||||
|
|
||||||
Tclcurl is written by Andr<64>s Garc<72>a
|
Tclcurl is written by Andr<64>s Garc<72>a
|
||||||
@@ -173,3 +178,8 @@ wxWidgets
|
|||||||
|
|
||||||
Written by Casey O'Donnell
|
Written by Casey O'Donnell
|
||||||
http://homepage.mac.com/codonnell/wxcurldav/
|
http://homepage.mac.com/codonnell/wxcurldav/
|
||||||
|
|
||||||
|
XBLite
|
||||||
|
|
||||||
|
Written by David Szafranski
|
||||||
|
http://perso.wanadoo.fr/xblite/libraries.html
|
||||||
|
@@ -1,12 +1,12 @@
|
|||||||
Date: October 27, 2005
|
Date: May 15, 2006
|
||||||
Author: Daniel Stenberg <daniel@haxx.se>
|
Author: Daniel Stenberg <daniel@haxx.se>
|
||||||
URL: http://curl.haxx.se/legal/distro-dilemma.html
|
URL: http://curl.haxx.se/legal/distro-dilemma.html
|
||||||
|
|
||||||
Condition
|
Condition
|
||||||
|
|
||||||
This document is written to describe the situation as it is right
|
This document is written to describe the situation as it is right
|
||||||
now. libcurl 7.15.0 is currently the latest version available. Things may (or
|
now. libcurl 7.15.3 is currently the latest version available. Things may of
|
||||||
perhaps will) of course change in the future.
|
course change in the future.
|
||||||
|
|
||||||
This document reflects my view and understanding of these things. Please tell
|
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.
|
me where and how you think I'm wrong, and I'll try to correct my mistakes.
|
||||||
@@ -16,11 +16,10 @@ Background
|
|||||||
The Free Software Foundation has deemed the Original BSD license[1] to be
|
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
|
"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,
|
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
|
it MUST NOT be linked with any Original BSD-licensed parts or libraries.
|
||||||
libraries. Doing so will violate the GPL license. For a long time, very many
|
Doing so will violate the GPL license. For a long time, very many GPL
|
||||||
GPL licensed programs have avoided this license mess by adding an
|
licensed programs have avoided this license mess by adding an exception[8] to
|
||||||
exception[8] to their license. And many others have just closed their eyes
|
their license. And many others have just closed their eyes for this problem.
|
||||||
for this problem.
|
|
||||||
|
|
||||||
libcurl is MIT-style[4] licensed - how on earth did this dilemma fall onto
|
libcurl is MIT-style[4] licensed - how on earth did this dilemma fall onto
|
||||||
our plates?
|
our plates?
|
||||||
@@ -49,25 +48,13 @@ Part of the Operating System
|
|||||||
Debian does however not take this stance and has officially(?) claimed that
|
Debian does however not take this stance and has officially(?) claimed that
|
||||||
OpenSSL is not a required part of the Debian operating system
|
OpenSSL is not a required part of the Debian operating system
|
||||||
|
|
||||||
Debian-legal
|
|
||||||
|
|
||||||
In August 2004 I figured I should start pulling people's attention to this to
|
|
||||||
see if anyone has any bright ideas or if they would dismiss my worries based
|
|
||||||
on some elegant writing I had missed somewhere:
|
|
||||||
|
|
||||||
My post to debian-legal on August 12 2004:
|
|
||||||
|
|
||||||
http://lists.debian.org/debian-legal/2004/08/msg00279.html
|
|
||||||
|
|
||||||
Several people agreed then that this is a known and rather big problem, but
|
|
||||||
the following discussion didn't result in much.
|
|
||||||
|
|
||||||
GnuTLS
|
GnuTLS
|
||||||
|
|
||||||
With the release of libcurl 7.14.0 (May 2005), it can now get built to use
|
With the release of libcurl 7.14.0 (May 2005), libcurl can now get built to
|
||||||
GnuTLS instead of OpenSSL. GnuTLS is a LGPL[7] licensed library that offers a
|
use GnuTLS instead of OpenSSL. GnuTLS is an LGPL[7] licensed library that
|
||||||
matching set of features as OpenSSL does. Now, you can build and distribute
|
offers a matching set of features as OpenSSL does. Now, you can build and
|
||||||
an SSL capable libcurl without including any Original BSD licensed code.
|
distribute an TLS/SSL capable libcurl without including any Original BSD
|
||||||
|
licensed code.
|
||||||
|
|
||||||
I believe Debian is the first distro to provide libcurl/GnutTLS packages.
|
I believe Debian is the first distro to provide libcurl/GnutTLS packages.
|
||||||
|
|
||||||
@@ -80,23 +67,20 @@ GnuTLS vs OpenSSL
|
|||||||
and it has not been tested nor used very extensively, while the OpenSSL
|
and it has not been tested nor used very extensively, while the OpenSSL
|
||||||
equivalent code has been used and thus matured for more than seven (7) years.
|
equivalent code has been used and thus matured for more than seven (7) years.
|
||||||
|
|
||||||
In August 2005, the debian-devel mailing list discovered the license issue as
|
|
||||||
a GPL licensed application wanted SSL capabilities from libcurl and thus was
|
|
||||||
forced to use the GnuTLS powered libcurl. For a reason that is unknown to me,
|
|
||||||
the application authors didn't want to or was unable to add an exception to
|
|
||||||
their GPL license. Alas, the license problem hit the fan again.
|
|
||||||
|
|
||||||
GnuTLS
|
GnuTLS
|
||||||
- LGPL licensened
|
- LGPL licensened
|
||||||
- supports SRP
|
- supports SRP
|
||||||
- lacks SSLv2 support
|
- lacks SSLv2 support
|
||||||
- lacks MD2 support (used by at least some CA certs)
|
- lacks MD2 support (used by at least some CA certs)
|
||||||
|
- lacks the crypto functions libcurl uses for NTLM
|
||||||
|
|
||||||
OpenSSL
|
OpenSSL
|
||||||
- Original BSD licensened
|
- Original BSD licensened
|
||||||
- lacks SRP
|
- lacks SRP
|
||||||
- supports SSLv2
|
- supports SSLv2
|
||||||
- older and more widely used
|
- 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
|
||||||
|
|
||||||
The Better License, Original BSD or LGPL?
|
The Better License, Original BSD or LGPL?
|
||||||
|
|
||||||
@@ -124,20 +108,21 @@ More SSL Libraries
|
|||||||
Application Angle of this Problem
|
Application Angle of this Problem
|
||||||
|
|
||||||
libcurl is built to use one SSL/TLS library. It uses a single fixed name (by
|
libcurl is built to use one SSL/TLS library. It uses a single fixed name (by
|
||||||
default), and applications are built/linked to use that single lib. Replacing
|
default) on the built/created lib file, and applications are built/linked to
|
||||||
one libcurl instance with another one that uses the other SSL/TLS library
|
use that single lib. Replacing one libcurl instance with another one that
|
||||||
might break one or more applications (due to ABI differences and/or different
|
uses the other SSL/TLS library might break one or more applications (due to
|
||||||
feature set). You want your application to use the libcurl it was built for.
|
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
|
Project cURL Angle of this Problem
|
||||||
|
|
||||||
We distribute libcurl and everyone may build libcurl with either library. At
|
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
|
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
|
affects users - GPL application authors only - of our lib as it comes
|
||||||
included and delivered on some distros.
|
included and delivered on some distros.
|
||||||
|
|
||||||
libcurl has different ABI when built with different SSL/TLS libraries due to
|
libcurl has different ABI when built with different SSL/TLS libraries due to
|
||||||
two reasons:
|
these reasons:
|
||||||
|
|
||||||
1. No one has worked on fixing this. The mutex/lock callbacks should be set
|
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
|
with a generic libcurl function that should use the proper underlying
|
||||||
@@ -146,25 +131,25 @@ Project cURL Angle of this Problem
|
|||||||
2. The CURLOPT_SSL_CTX_FUNCTION option is not possible to "emulate" on GnuTLS
|
2. The CURLOPT_SSL_CTX_FUNCTION option is not possible to "emulate" on GnuTLS
|
||||||
but simply requires OpenSSL.
|
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
|
Distro Angle of this Problem
|
||||||
|
|
||||||
A distro can provide separate libcurls built with different SSL/TLS libraries
|
To my knowledge there is only one distro that ships libcurl built with either
|
||||||
to work around this, but at least Debian seems to be very hostile against
|
one of the SSL libs supported.
|
||||||
such an approach, probably since it makes things like devel packages for the
|
|
||||||
different libs collide since they would provide the same include files and
|
Debian Linux is now (since mid September 2005) providing two different
|
||||||
man pages etc.
|
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.
|
||||||
|
|
||||||
Fixing the Only Problem
|
Fixing the Only Problem
|
||||||
|
|
||||||
The only problem is thus for distributions that want to offer libcurl
|
The only problem is thus for distributions that want to offer libcurl
|
||||||
versions built with more than one SSL/TLS library.
|
versions built with more than one SSL/TLS library.
|
||||||
|
|
||||||
Debian is now (since mid September 2005) providing two different devel
|
|
||||||
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 previously been said as a transitional system not
|
|
||||||
desired to keep in the long run.
|
|
||||||
|
|
||||||
Since multiple libcurl binaries using different names are ruled out, we need
|
Since multiple libcurl binaries using different names are ruled out, we need
|
||||||
to come up with a way to have one single libcurl that someone uses different
|
to come up with a way to have one single libcurl that someone uses different
|
||||||
underlying libraries. The best(?) approach currently suggested involves this:
|
underlying libraries. The best(?) approach currently suggested involves this:
|
||||||
@@ -194,9 +179,9 @@ Fixing the Only Problem
|
|||||||
|
|
||||||
When Will This Happen
|
When Will This Happen
|
||||||
|
|
||||||
Note again that this is not a problem in curl, it doesn't solve any actual
|
This is not a problem in curl, it doesn't solve any actual technical problems
|
||||||
technical problems in our project. Don't hold your breath for this to happen
|
in our project. Don't hold your breath for this to happen very soon (if at
|
||||||
very soon (if at all) unless you step forward and contribute.
|
all) unless you step forward and contribute.
|
||||||
|
|
||||||
The suggestion that is outlined above is still only a suggestion. Feel free
|
The suggestion that is outlined above is still only a suggestion. Feel free
|
||||||
to bring a better idea!
|
to bring a better idea!
|
||||||
@@ -206,7 +191,7 @@ When Will This Happen
|
|||||||
code like today (without the use of lib2), should you decide to ignore the
|
code like today (without the use of lib2), should you decide to ignore the
|
||||||
problems outlined in this document.
|
problems outlined in this document.
|
||||||
|
|
||||||
Update: Work on this has been initiated by Richard Atterer:
|
Work on this was suggested by Richard Atterer:
|
||||||
|
|
||||||
http://curl.haxx.se/mail/lib-2005-09/0066.html
|
http://curl.haxx.se/mail/lib-2005-09/0066.html
|
||||||
|
|
||||||
|
5
docs/FAQ
5
docs/FAQ
@@ -114,7 +114,7 @@ FAQ
|
|||||||
libcurl
|
libcurl
|
||||||
|
|
||||||
A free and easy-to-use client-side URL transfer library, supporting FTP,
|
A free and easy-to-use client-side URL transfer library, supporting FTP,
|
||||||
FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE and LDAP. libcurl supports
|
FTPS, HTTP, HTTPS, TELNET, DICT, FILE and LDAP. libcurl supports
|
||||||
HTTPS certificates, HTTP POST, HTTP PUT, FTP uploading, kerberos, HTTP
|
HTTPS certificates, HTTP POST, HTTP PUT, FTP uploading, kerberos, HTTP
|
||||||
form based upload, proxies, cookies, user+password authentication, file
|
form based upload, proxies, cookies, user+password authentication, file
|
||||||
transfer resume, http proxy tunneling and more!
|
transfer resume, http proxy tunneling and more!
|
||||||
@@ -132,8 +132,7 @@ FAQ
|
|||||||
A command line tool for getting or sending files using URL syntax.
|
A command line tool for getting or sending files using URL syntax.
|
||||||
|
|
||||||
Since curl uses libcurl, it supports a range of common Internet protocols,
|
Since curl uses libcurl, it supports a range of common Internet protocols,
|
||||||
currently including HTTP, HTTPS, FTP, FTPS, GOPHER, LDAP, DICT, TELNET and
|
currently including HTTP, HTTPS, FTP, FTPS, LDAP, DICT, TELNET and FILE.
|
||||||
FILE.
|
|
||||||
|
|
||||||
We pronounce curl and cURL with an initial k sound: [kurl].
|
We pronounce curl and cURL with an initial k sound: [kurl].
|
||||||
|
|
||||||
|
@@ -91,8 +91,8 @@ FTP
|
|||||||
- no dir depth limit
|
- no dir depth limit
|
||||||
|
|
||||||
FTPS (*1)
|
FTPS (*1)
|
||||||
- explicit ftps:// support that use SSL on both connections
|
- implicit ftps:// support that use SSL on both connections
|
||||||
- implicit "AUTH TSL" and "AUTH SSL" usage to "upgrade" plain ftp://
|
- explicit "AUTH TSL" and "AUTH SSL" usage to "upgrade" plain ftp://
|
||||||
connection to use SSL for both or one of the connections
|
connection to use SSL for both or one of the connections
|
||||||
|
|
||||||
TFTP
|
TFTP
|
||||||
@@ -109,10 +109,6 @@ LDAP (*2)
|
|||||||
DICT
|
DICT
|
||||||
- extended DICT URL support
|
- extended DICT URL support
|
||||||
|
|
||||||
GOPHER
|
|
||||||
- GET
|
|
||||||
- via http-proxy
|
|
||||||
|
|
||||||
FILE
|
FILE
|
||||||
- URL support
|
- URL support
|
||||||
- "uploads"
|
- "uploads"
|
||||||
|
39
docs/INSTALL
39
docs/INSTALL
@@ -129,6 +129,18 @@ UNIX
|
|||||||
If you're a curl developer and use gcc, you might want to enable more
|
If you're a curl developer and use gcc, you might want to enable more
|
||||||
debug options with the --enable-debug option.
|
debug options with the --enable-debug option.
|
||||||
|
|
||||||
|
curl can be built to use a whole range of libraries to provide various
|
||||||
|
useful services, and configure will try to auto-detect a decent
|
||||||
|
default. But if you want to alter it, you can select how to deal with
|
||||||
|
each individual library.
|
||||||
|
|
||||||
|
To build with GnuTLS support instead of OpenSSL for SSL/TLS, note that
|
||||||
|
you need to use both --without-ssl and --with-gnutls.
|
||||||
|
|
||||||
|
To build with yassl support instead of OpenSSL or GunTLS, you must build
|
||||||
|
yassl with its OpenSSL emulation enabled and point to that directory root
|
||||||
|
with configure --with-ssl.
|
||||||
|
|
||||||
Win32
|
Win32
|
||||||
=====
|
=====
|
||||||
|
|
||||||
@@ -260,7 +272,6 @@ Win32
|
|||||||
CURL_DISABLE_TELNET disables TELNET
|
CURL_DISABLE_TELNET disables TELNET
|
||||||
CURL_DISABLE_DICT disables DICT
|
CURL_DISABLE_DICT disables DICT
|
||||||
CURL_DISABLE_FILE disables FILE
|
CURL_DISABLE_FILE disables FILE
|
||||||
CURL_DISABLE_GOPHER disables GOPHER
|
|
||||||
|
|
||||||
If you want to set any of these defines you have the following
|
If you want to set any of these defines you have the following
|
||||||
possibilities:
|
possibilities:
|
||||||
@@ -507,13 +518,17 @@ CROSS COMPILE
|
|||||||
|
|
||||||
./configure --host=ARCH-OS
|
./configure --host=ARCH-OS
|
||||||
|
|
||||||
|
REDUCING SIZE
|
||||||
|
=============
|
||||||
|
|
||||||
There are a number of configure options that can be used to reduce the
|
There are a number of configure options that can be used to reduce the
|
||||||
size of libcurl for embedded applications where binary size is an
|
size of libcurl for embedded applications where binary size is an
|
||||||
important factor. First, be sure to set the CFLAGS environment variable
|
important factor. First, be sure to set the CFLAGS variable when
|
||||||
when configuring with any compiler optimization flags to reduce the
|
configuring with any relevant compiler optimization flags to reduce the
|
||||||
size of the binary. For gcc, this would mean at minimum:
|
size of the binary. For gcc, this would mean at minimum the -Os option
|
||||||
|
and probably the -march=X option as well, e.g.:
|
||||||
|
|
||||||
env CFLAGS='-Os' ./configure ...
|
./configure CFLAGS='-Os' ...
|
||||||
|
|
||||||
Be sure to specify as many --disable- and --without- flags on the configure
|
Be sure to specify as many --disable- and --without- flags on the configure
|
||||||
command-line as you can to disable all the libcurl features that you
|
command-line as you can to disable all the libcurl features that you
|
||||||
@@ -527,10 +542,24 @@ CROSS COMPILE
|
|||||||
--disable-crypto-auth (disables HTTP cryptographic authentication)
|
--disable-crypto-auth (disables HTTP cryptographic authentication)
|
||||||
--disable-ipv6 (disables support for IPv6)
|
--disable-ipv6 (disables support for IPv6)
|
||||||
--disable-verbose (eliminates debugging strings and error code strings)
|
--disable-verbose (eliminates debugging strings and error code strings)
|
||||||
|
--enable-hidden-symbols (eliminates unneeded symbols in library)
|
||||||
--without-libidn (disables support for the libidn DNS library)
|
--without-libidn (disables support for the libidn DNS library)
|
||||||
--without-ssl (disables support for SSL/TLS)
|
--without-ssl (disables support for SSL/TLS)
|
||||||
--without-zlib (disables support for on-the-fly decompression)
|
--without-zlib (disables support for on-the-fly decompression)
|
||||||
|
|
||||||
|
The GNU linker has a number of options to reduce the size of the libcurl
|
||||||
|
dynamic libraries on some platforms even further. Specify them by giving
|
||||||
|
the options -Wl,-Bsymbolic and -Wl,-s on the gcc command-line.
|
||||||
|
Be sure also to strip debugging symbols from your binaries after
|
||||||
|
compiling using 'strip' (or the appropriate variant if cross-compiling).
|
||||||
|
If space is really tight, you may be able to remove some unneeded
|
||||||
|
sections of the library using the -R option to objcopy (e.g. the
|
||||||
|
.comment section).
|
||||||
|
|
||||||
|
Using these techniques it is possible to create an HTTP-only shared
|
||||||
|
libcurl library for i386 Linux platforms that is less than 90 KB in
|
||||||
|
size (as of version 7.15.4).
|
||||||
|
|
||||||
You may find that statically linking libcurl to your application will
|
You may find that statically linking libcurl to your application will
|
||||||
result in a lower total size.
|
result in a lower total size.
|
||||||
|
|
||||||
|
@@ -3,7 +3,37 @@ 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
|
changelog of the current development status, as one or more of these problems
|
||||||
may have been fixed since this was written!
|
may have been fixed since this was written!
|
||||||
|
|
||||||
28. The TFTP code is not portable and will fail on some architectures.
|
34. The SOCKS connection codes don't properly acknowledge (connect) timeouts.
|
||||||
|
|
||||||
|
33. Doing multi-pass HTTP authentication on a non-default port does not work.
|
||||||
|
This happens because the multi-pass code abuses the redirect following code
|
||||||
|
for doing multiple requests, and when we following redirects to an absolute
|
||||||
|
URL we must use the newly specified port and not the one specified in the
|
||||||
|
original URL. A proper fix to this would need to separate the negotiation
|
||||||
|
"redirect" from an actual redirect.
|
||||||
|
|
||||||
|
32. (At least on Windows) If libcurl is built with c-ares and there's no DNS
|
||||||
|
server configured in the system, the ares_init() call fails and thus
|
||||||
|
curl_easy_init() fails as well. This causes weird effects for people who use
|
||||||
|
numerical IP addresses only.
|
||||||
|
|
||||||
|
31. "curl-config --libs" will include details set in LDFLAGS when configure is
|
||||||
|
run that might be needed only for building libcurl. Similarly, it might
|
||||||
|
include options that perhaps aren't suitable both for static and dynamic
|
||||||
|
linking. Further, curl-config --cflags suffers from the same effects with
|
||||||
|
CFLAGS/CPPFLAGS.
|
||||||
|
|
||||||
|
30. You need to use -g to the command line tool in order to use RFC2732-style
|
||||||
|
IPv6 numerical addresses in URLs.
|
||||||
|
|
||||||
|
29. IPv6 URLs with zone ID is not supported.
|
||||||
|
http://www.ietf.org/internet-drafts/draft-fenner-literal-zone-02.txt
|
||||||
|
specifies the use of a plus sign instead of a percent when specifying zone
|
||||||
|
IDs in URLs to get around the problem of percent signs being
|
||||||
|
special. According to the reporter, Firefox deals with the URL _with_ a
|
||||||
|
percent letter (which seems like a blatant URL spec violation).
|
||||||
|
|
||||||
|
See http://curl.haxx.se/bug/view.cgi?id=1371118
|
||||||
|
|
||||||
26. NTLM authentication using SSPI (on Windows) when (lib)curl is running in
|
26. NTLM authentication using SSPI (on Windows) when (lib)curl is running in
|
||||||
"system context" will make it use wrong(?) user name - at least when compared
|
"system context" will make it use wrong(?) user name - at least when compared
|
||||||
@@ -15,15 +45,11 @@ may have been fixed since this was written!
|
|||||||
--proxy-anyauth. There's work in progress on this problem, and a recent
|
--proxy-anyauth. There's work in progress on this problem, and a recent
|
||||||
patch was posted here: http://curl.haxx.se/mail/lib-2005-08/0074.html
|
patch was posted here: http://curl.haxx.se/mail/lib-2005-08/0074.html
|
||||||
|
|
||||||
24. Harshal Pradhan's Use-after-free with libcurl+ares. This probably occurs
|
|
||||||
because there is a pending ares callback that gets called after the
|
|
||||||
connection struct has been freed in libcurl:
|
|
||||||
http://curl.haxx.se/mail/lib-2005-08/0022.html
|
|
||||||
Fixing this properly most likely requires a new c-ares function.
|
|
||||||
|
|
||||||
23. We don't support SOCKS for IPv6. We don't support FTPS over a SOCKS proxy.
|
23. We don't support SOCKS for IPv6. We don't support FTPS over a SOCKS proxy.
|
||||||
We don't have any test cases for SOCKS proxy. We probably have even more
|
We don't have any test cases for SOCKS proxy. We probably have even more
|
||||||
bugs and lack of features when a SOCKS proxy is used.
|
bugs and lack of features when a SOCKS proxy is used. And there seem to be a
|
||||||
|
problem with SOCKS when doing FTP: See
|
||||||
|
http://curl.haxx.se/bug/view.cgi?id=1371540
|
||||||
|
|
||||||
22. Sending files to a FTP server using curl on VMS, might lead to curl
|
22. Sending files to a FTP server using curl on VMS, might lead to curl
|
||||||
complaining on "unaligned file size" on completion. The problem is related
|
complaining on "unaligned file size" on completion. The problem is related
|
||||||
@@ -40,12 +66,11 @@ may have been fixed since this was written!
|
|||||||
specification). The receiver will convert the data from the standard
|
specification). The receiver will convert the data from the standard
|
||||||
form to his own internal form.
|
form to his own internal form.
|
||||||
|
|
||||||
|
Since 7.15.4 at least line endings are converted.
|
||||||
|
|
||||||
19. FTP 3rd party transfers with the multi interface doesn't work. Test:
|
19. FTP 3rd party transfers with the multi interface doesn't work. Test:
|
||||||
define CURL_MULTIEASY, rebuild curl, run test case 230 - 232.
|
define CURL_MULTIEASY, rebuild curl, run test case 230 - 232.
|
||||||
|
|
||||||
18. test case 57 has </test> that should be </client> but when corrected, the
|
|
||||||
test case fails!
|
|
||||||
|
|
||||||
16. FTP URLs passed to curl may contain NUL (0x00) in the RFC 1738 <user>,
|
16. FTP URLs passed to curl may contain NUL (0x00) in the RFC 1738 <user>,
|
||||||
<password>, and <fpath> components, encoded as "%00". The problem is that
|
<password>, and <fpath> components, encoded as "%00". The problem is that
|
||||||
curl_unescape does not detect this, but instead returns a shortened C
|
curl_unescape does not detect this, but instead returns a shortened C
|
||||||
@@ -78,10 +103,6 @@ may have been fixed since this was written!
|
|||||||
http://curl.haxx.se/bug/view.cgi?id=1004841. How?
|
http://curl.haxx.se/bug/view.cgi?id=1004841. How?
|
||||||
http://curl.haxx.se/mail/lib-2004-08/0182.html
|
http://curl.haxx.se/mail/lib-2004-08/0182.html
|
||||||
|
|
||||||
9. --limit-rate using -d or -F does not work. This is because the limit logic
|
|
||||||
is provided by the curl app in its read/write callbacks, and when doing
|
|
||||||
-d/-F the callbacks aren't used! http://curl.haxx.se/bug/view.cgi?id=921395
|
|
||||||
|
|
||||||
8. Doing resumed upload over HTTP does not work with '-C -', because curl
|
8. Doing resumed upload over HTTP does not work with '-C -', because curl
|
||||||
doesn't do a HEAD first to get the initial size. This needs to be done
|
doesn't do a HEAD first to get the initial size. This needs to be done
|
||||||
manually for HTTP PUT resume to work, and then '-C [index]'.
|
manually for HTTP PUT resume to work, and then '-C [index]'.
|
||||||
@@ -103,8 +124,6 @@ may have been fixed since this was written!
|
|||||||
libcurl thinks of it as the *compressed* length. Some explanations are here:
|
libcurl thinks of it as the *compressed* length. Some explanations are here:
|
||||||
http://curl.haxx.se/mail/lib-2003-06/0146.html
|
http://curl.haxx.se/mail/lib-2003-06/0146.html
|
||||||
|
|
||||||
3. GOPHER transfers seem broken
|
|
||||||
|
|
||||||
2. If a HTTP server responds to a HEAD request and includes a body (thus
|
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
|
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
|
reading and return back. If a second request (let's assume a GET) is then
|
||||||
|
@@ -32,7 +32,8 @@ OpenSSL http://www.openssl.org/source/license.html
|
|||||||
are not allowed to ship binaries that link with OpenSSL that includes
|
are not allowed to ship binaries that link with OpenSSL that includes
|
||||||
GPL code (unless that specific GPL code includes an exception for
|
GPL code (unless that specific GPL code includes an exception for
|
||||||
OpenSSL - a habit that is growing more and more common). If OpenSSL's
|
OpenSSL - a habit that is growing more and more common). If OpenSSL's
|
||||||
licensing is a problem for you, consider using GnuTLS instead.
|
licensing is a problem for you, consider using GnuTLS or yassl
|
||||||
|
instead.
|
||||||
|
|
||||||
GnuTLS http://www.gnutls.org/
|
GnuTLS http://www.gnutls.org/
|
||||||
|
|
||||||
@@ -41,6 +42,11 @@ GnuTLS http://www.gnutls.org/
|
|||||||
GnuTLS itself depends on and uses other libs (libgcrypt and
|
GnuTLS itself depends on and uses other libs (libgcrypt and
|
||||||
libgpg-error) and they too are LGPL- or GPL-licensed.
|
libgpg-error) and they too are LGPL- or GPL-licensed.
|
||||||
|
|
||||||
|
yassl http://www.yassl.com/
|
||||||
|
|
||||||
|
(May be used for SSL/TLS support) Uses the GPL[1] license. If this is
|
||||||
|
a problem for you, consider using OpenSSL or GnuTLS instead.
|
||||||
|
|
||||||
c-ares http://daniel.haxx.se/projects/c-ares/license.html
|
c-ares http://daniel.haxx.se/projects/c-ares/license.html
|
||||||
|
|
||||||
(Used for asynchronous name resolves) Uses an MIT license that is very
|
(Used for asynchronous name resolves) Uses an MIT license that is very
|
||||||
@@ -56,9 +62,9 @@ krb4
|
|||||||
|
|
||||||
While nothing in particular says that a Kerberos4 library must use any
|
While nothing in particular says that a Kerberos4 library must use any
|
||||||
particular license, the one I've tried and used successfully so far
|
particular license, the one I've tried and used successfully so far
|
||||||
(kth-krb4) is Original BSD-licensed with the announcement clause. Some
|
(kth-krb4) is partly Original BSD-licensed with the announcement
|
||||||
of the code in libcurl that is written to deal with Kerberos4 likewise
|
clause. Some of the code in libcurl that is written to deal with
|
||||||
have such a license.
|
Kerberos4 is Modified BSD-licensed.
|
||||||
|
|
||||||
MIT Kerberos http://web.mit.edu/kerberos/www/dist/
|
MIT Kerberos http://web.mit.edu/kerberos/www/dist/
|
||||||
|
|
||||||
|
12
docs/MANUAL
12
docs/MANUAL
@@ -23,10 +23,6 @@ SIMPLE USAGE
|
|||||||
|
|
||||||
curl ftp://cool.haxx.se/
|
curl ftp://cool.haxx.se/
|
||||||
|
|
||||||
Get a gopher document from funet's gopher server:
|
|
||||||
|
|
||||||
curl gopher://gopher.funet.fi
|
|
||||||
|
|
||||||
Get the definition of curl from a dictionary:
|
Get the definition of curl from a dictionary:
|
||||||
|
|
||||||
curl dict://dict.org/m:curl
|
curl dict://dict.org/m:curl
|
||||||
@@ -94,10 +90,6 @@ USING PASSWORDS
|
|||||||
|
|
||||||
Probably most commonly used with private certificates, as explained below.
|
Probably most commonly used with private certificates, as explained below.
|
||||||
|
|
||||||
GOPHER
|
|
||||||
|
|
||||||
Curl features no password support for gopher.
|
|
||||||
|
|
||||||
PROXY
|
PROXY
|
||||||
|
|
||||||
Get an ftp file using a proxy named my-proxy that uses port 888:
|
Get an ftp file using a proxy named my-proxy that uses port 888:
|
||||||
@@ -734,7 +726,7 @@ LDAP
|
|||||||
Working with LDAP URLs":
|
Working with LDAP URLs":
|
||||||
http://developer.netscape.com/docs/manuals/dirsdk/csdk30/url.htm
|
http://developer.netscape.com/docs/manuals/dirsdk/csdk30/url.htm
|
||||||
|
|
||||||
RFC 2255, "The LDAP URL Format" http://www.rfc-editor.org/rfc/rfc2255.txt
|
RFC 2255, "The LDAP URL Format" http://curl.haxx.se/rfc/rfc2255.txt
|
||||||
|
|
||||||
To show you an example, this is now I can get all people from my local LDAP
|
To show you an example, this is now I can get all people from my local LDAP
|
||||||
server that has a certain sub-domain in their email address:
|
server that has a certain sub-domain in their email address:
|
||||||
@@ -748,7 +740,7 @@ ENVIRONMENT VARIABLES
|
|||||||
|
|
||||||
Curl reads and understands the following environment variables:
|
Curl reads and understands the following environment variables:
|
||||||
|
|
||||||
http_proxy, HTTPS_PROXY, FTP_PROXY, GOPHER_PROXY
|
http_proxy, HTTPS_PROXY, FTP_PROXY
|
||||||
|
|
||||||
They should be set for protocol-specific proxies. General proxy should be
|
They should be set for protocol-specific proxies. General proxy should be
|
||||||
set with
|
set with
|
||||||
|
49
docs/THANKS
49
docs/THANKS
@@ -8,19 +8,24 @@ Adrian Schuur
|
|||||||
Alan Pinstein
|
Alan Pinstein
|
||||||
Albert Chin-A-Young
|
Albert Chin-A-Young
|
||||||
Albert Choy
|
Albert Choy
|
||||||
|
Ale Vesely
|
||||||
Aleksandar Milivojevic
|
Aleksandar Milivojevic
|
||||||
Alex Neblett
|
Alex Neblett
|
||||||
Alex Suykov
|
Alex Suykov
|
||||||
Alex aka WindEagle
|
Alex aka WindEagle
|
||||||
Alexander Kourakos
|
Alexander Kourakos
|
||||||
Alexander Krasnostavsky
|
Alexander Krasnostavsky
|
||||||
|
Alexander Lazic
|
||||||
Alexander Zhuravlev
|
Alexander Zhuravlev
|
||||||
Alexis Carvalho
|
Alexis Carvalho
|
||||||
|
Amol Pattekar
|
||||||
Andi Jahja
|
Andi Jahja
|
||||||
Andreas Damm
|
Andreas Damm
|
||||||
|
Andreas Ntaflos
|
||||||
Andreas Olsson
|
Andreas Olsson
|
||||||
Andreas Rieke
|
Andreas Rieke
|
||||||
Andres Garcia
|
Andres Garcia
|
||||||
|
Andrew Benham
|
||||||
Andrew Bushnell
|
Andrew Bushnell
|
||||||
Andrew Francis
|
Andrew Francis
|
||||||
Andrew Fuller
|
Andrew Fuller
|
||||||
@@ -31,6 +36,7 @@ Angus Mackay
|
|||||||
Antoine Calando
|
Antoine Calando
|
||||||
Anton Kalmykov
|
Anton Kalmykov
|
||||||
Arkadiusz Miskiewicz
|
Arkadiusz Miskiewicz
|
||||||
|
Ates Goral
|
||||||
Augustus Saunders
|
Augustus Saunders
|
||||||
Avery Fay
|
Avery Fay
|
||||||
Ben Greear
|
Ben Greear
|
||||||
@@ -41,12 +47,13 @@ Bjorn Reese
|
|||||||
Bj<EFBFBD>rn Stenberg
|
Bj<EFBFBD>rn Stenberg
|
||||||
Bob Schader
|
Bob Schader
|
||||||
Brad Burdick
|
Brad Burdick
|
||||||
|
Bradford Bruce
|
||||||
Brent Beardsley
|
Brent Beardsley
|
||||||
Brian Akins
|
Brian Akins
|
||||||
|
Brian Dessent
|
||||||
Brian R Duffy
|
Brian R Duffy
|
||||||
Bruce Mitchener
|
Bruce Mitchener
|
||||||
Bryan Henderson
|
Bryan Henderson
|
||||||
Bryan Henderson
|
|
||||||
Bryan Kemp
|
Bryan Kemp
|
||||||
Caolan McNamara
|
Caolan McNamara
|
||||||
Casey O'Donnell
|
Casey O'Donnell
|
||||||
@@ -91,7 +98,9 @@ David Hull
|
|||||||
David J Meyer
|
David J Meyer
|
||||||
David James
|
David James
|
||||||
David Kimdon
|
David Kimdon
|
||||||
|
David Lang
|
||||||
David LeBlanc
|
David LeBlanc
|
||||||
|
David McCreedy
|
||||||
David Odin
|
David Odin
|
||||||
David Phillips
|
David Phillips
|
||||||
David Shaw
|
David Shaw
|
||||||
@@ -100,6 +109,7 @@ David Thiel
|
|||||||
David Yan
|
David Yan
|
||||||
Detlef Schmier
|
Detlef Schmier
|
||||||
Diego Casorran
|
Diego Casorran
|
||||||
|
Dima Barsky
|
||||||
Dimitris Sarris
|
Dimitris Sarris
|
||||||
Dinar
|
Dinar
|
||||||
Dirk Eddelbuettel
|
Dirk Eddelbuettel
|
||||||
@@ -112,6 +122,8 @@ Doug Kaufman
|
|||||||
Doug Porter
|
Doug Porter
|
||||||
Douglas E. Wegscheid
|
Douglas E. Wegscheid
|
||||||
Douglas R. Horner
|
Douglas R. Horner
|
||||||
|
Dov Murik
|
||||||
|
Duane Cathey
|
||||||
Dustin Boswell
|
Dustin Boswell
|
||||||
Dylan Ellicott
|
Dylan Ellicott
|
||||||
Dylan Salisbury
|
Dylan Salisbury
|
||||||
@@ -131,6 +143,7 @@ Eric Young
|
|||||||
Erick Nuwendam
|
Erick Nuwendam
|
||||||
Erwan Legrand
|
Erwan Legrand
|
||||||
Erwin Authried
|
Erwin Authried
|
||||||
|
Eugene Kotlyarov
|
||||||
Evan Jordan
|
Evan Jordan
|
||||||
Fabrizio Ammollo
|
Fabrizio Ammollo
|
||||||
Fedor Karpelevitch
|
Fedor Karpelevitch
|
||||||
@@ -180,6 +193,7 @@ Ian Wilkes
|
|||||||
Ignacio Vazquez-Abrams
|
Ignacio Vazquez-Abrams
|
||||||
Igor Polyakov
|
Igor Polyakov
|
||||||
Ilguiz Latypov
|
Ilguiz Latypov
|
||||||
|
Ilja van Sprundel
|
||||||
Ingo Ralf Blum
|
Ingo Ralf Blum
|
||||||
Ingo Wilken
|
Ingo Wilken
|
||||||
Jacky Lam
|
Jacky Lam
|
||||||
@@ -191,8 +205,12 @@ James Gallagher
|
|||||||
James Griffiths
|
James Griffiths
|
||||||
James MacMillan
|
James MacMillan
|
||||||
Jamie Lokier
|
Jamie Lokier
|
||||||
|
Jamie Newton
|
||||||
Jamie Wilkinson
|
Jamie Wilkinson
|
||||||
|
Jan Kunder
|
||||||
Jason S. Priebe
|
Jason S. Priebe
|
||||||
|
Jaz Fresh
|
||||||
|
Jean Jacques Drouin
|
||||||
Jean-Claude Chauve
|
Jean-Claude Chauve
|
||||||
Jean-Louis Lemaire
|
Jean-Louis Lemaire
|
||||||
Jean-Marc Ranger
|
Jean-Marc Ranger
|
||||||
@@ -234,11 +252,14 @@ J
|
|||||||
Kai Sommerfeld
|
Kai Sommerfeld
|
||||||
Kai-Uwe Rommel
|
Kai-Uwe Rommel
|
||||||
Kang-Jin Lee
|
Kang-Jin Lee
|
||||||
|
Karl Moerder
|
||||||
Karol Pietrzak
|
Karol Pietrzak
|
||||||
|
Katie Wang
|
||||||
Keith MacDonald
|
Keith MacDonald
|
||||||
Keith McGuigan
|
Keith McGuigan
|
||||||
Ken Hirsch
|
Ken Hirsch
|
||||||
Ken Rastatter
|
Ken Rastatter
|
||||||
|
Kent Boortz
|
||||||
Kevin Fisk
|
Kevin Fisk
|
||||||
Kevin Lussier
|
Kevin Lussier
|
||||||
Kevin Roth
|
Kevin Roth
|
||||||
@@ -279,6 +300,8 @@ Marco G. Salvagno
|
|||||||
Marcus Webster
|
Marcus Webster
|
||||||
Mario Schroeder
|
Mario Schroeder
|
||||||
Mark Butler
|
Mark Butler
|
||||||
|
Mark Eichin
|
||||||
|
Markus Koetter
|
||||||
Markus Moeller
|
Markus Moeller
|
||||||
Markus Oberhumer
|
Markus Oberhumer
|
||||||
Martijn Koster
|
Martijn Koster
|
||||||
@@ -297,10 +320,14 @@ Mekonikum
|
|||||||
Mettgut Jamalla
|
Mettgut Jamalla
|
||||||
Michael Benedict
|
Michael Benedict
|
||||||
Michael Curtis
|
Michael Curtis
|
||||||
|
Michael Jahn
|
||||||
Michael Mealling
|
Michael Mealling
|
||||||
Michael Wallner
|
Michael Wallner
|
||||||
Michal Bonino
|
Michal Bonino
|
||||||
|
Michal Marek
|
||||||
|
Michele Bini
|
||||||
Mihai Ionescu
|
Mihai Ionescu
|
||||||
|
Mikael Sennerholm
|
||||||
Mike Bytnar
|
Mike Bytnar
|
||||||
Mike Dobbs
|
Mike Dobbs
|
||||||
Miklos Nemeth
|
Miklos Nemeth
|
||||||
@@ -321,8 +348,11 @@ Nicolas Croiset
|
|||||||
Nicolas Fran<61>ois
|
Nicolas Fran<61>ois
|
||||||
Niels van Tongeren
|
Niels van Tongeren
|
||||||
Nikita Schmidt
|
Nikita Schmidt
|
||||||
|
Nis Jorgensen
|
||||||
Nodak Sodak
|
Nodak Sodak
|
||||||
Norbert Novotny
|
Norbert Novotny
|
||||||
|
Ofer
|
||||||
|
Olaf St<53>ben
|
||||||
Oren Tirosh
|
Oren Tirosh
|
||||||
P R Schaffner
|
P R Schaffner
|
||||||
Patrick Bihan-Faou
|
Patrick Bihan-Faou
|
||||||
@@ -331,6 +361,7 @@ Paul Harrington
|
|||||||
Paul Marquis
|
Paul Marquis
|
||||||
Paul Moore
|
Paul Moore
|
||||||
Paul Nolan
|
Paul Nolan
|
||||||
|
Paul Querna
|
||||||
Pavel Cenek
|
Pavel Cenek
|
||||||
Pavel Orehov
|
Pavel Orehov
|
||||||
Pawel A. Gajda
|
Pawel A. Gajda
|
||||||
@@ -338,7 +369,9 @@ Pedro Neves
|
|||||||
Pete Su
|
Pete Su
|
||||||
Peter Bray
|
Peter Bray
|
||||||
Peter Forret
|
Peter Forret
|
||||||
|
Peter Heuchert
|
||||||
Peter Pentchev
|
Peter Pentchev
|
||||||
|
Peter Su
|
||||||
Peter Sylvester
|
Peter Sylvester
|
||||||
Peter Todd
|
Peter Todd
|
||||||
Peter Verhas
|
Peter Verhas
|
||||||
@@ -348,8 +381,10 @@ Phil Karn
|
|||||||
Philip Gladstone
|
Philip Gladstone
|
||||||
Philippe Hameau
|
Philippe Hameau
|
||||||
Philippe Raoult
|
Philippe Raoult
|
||||||
|
Philippe Vaucher
|
||||||
Pierre
|
Pierre
|
||||||
Puneet Pawaia
|
Puneet Pawaia
|
||||||
|
Quagmire
|
||||||
Rafael Sagula
|
Rafael Sagula
|
||||||
Ralph Beckmann
|
Ralph Beckmann
|
||||||
Ralph Mitchell
|
Ralph Mitchell
|
||||||
@@ -376,7 +411,9 @@ Robert D. Young
|
|||||||
Robert Olson
|
Robert Olson
|
||||||
Robert Weaver
|
Robert Weaver
|
||||||
Robin Kay
|
Robin Kay
|
||||||
|
Robson Braga Araujo
|
||||||
Rodney Simmons
|
Rodney Simmons
|
||||||
|
Roland Blom
|
||||||
Roland Krikava
|
Roland Krikava
|
||||||
Roland Zimmermann
|
Roland Zimmermann
|
||||||
Roman Koifman
|
Roman Koifman
|
||||||
@@ -399,12 +436,14 @@ Sergio Ballestrero
|
|||||||
Seshubabu Pasam
|
Seshubabu Pasam
|
||||||
Shard
|
Shard
|
||||||
Shawn Poulson
|
Shawn Poulson
|
||||||
|
Shmulik Regev
|
||||||
Siddhartha Prakash Jain
|
Siddhartha Prakash Jain
|
||||||
Simon Dick
|
Simon Dick
|
||||||
Simon Josefsson
|
Simon Josefsson
|
||||||
Simon Liu
|
Simon Liu
|
||||||
Spiridonoff A.V
|
Spiridonoff A.V
|
||||||
Stadler Stephan
|
Stadler Stephan
|
||||||
|
Stefan Esser
|
||||||
Stefan Ulrich
|
Stefan Ulrich
|
||||||
Stephan Bergmann
|
Stephan Bergmann
|
||||||
Stephen Kick
|
Stephen Kick
|
||||||
@@ -421,6 +460,8 @@ Sven Neuhaus
|
|||||||
S<EFBFBD>bastien Willemijns
|
S<EFBFBD>bastien Willemijns
|
||||||
T. Bharath
|
T. Bharath
|
||||||
T. Yamada
|
T. Yamada
|
||||||
|
Temprimus
|
||||||
|
Thomas Klausner
|
||||||
Thomas Schwinge
|
Thomas Schwinge
|
||||||
Thomas Tonino
|
Thomas Tonino
|
||||||
Tim Baker
|
Tim Baker
|
||||||
@@ -429,6 +470,7 @@ Tim Costello
|
|||||||
Tim Sneddon
|
Tim Sneddon
|
||||||
Toby Peterson
|
Toby Peterson
|
||||||
Todd Kulesza
|
Todd Kulesza
|
||||||
|
Todd Vierling
|
||||||
Tom Benoist
|
Tom Benoist
|
||||||
Tom Lee
|
Tom Lee
|
||||||
Tom Mattison
|
Tom Mattison
|
||||||
@@ -446,7 +488,9 @@ Traian Nicolescu
|
|||||||
Troels Walsted Hansen
|
Troels Walsted Hansen
|
||||||
Troy Engel
|
Troy Engel
|
||||||
Tupone Alfredo
|
Tupone Alfredo
|
||||||
|
Ulf H<>rnhammar
|
||||||
Ulrich Zadow
|
Ulrich Zadow
|
||||||
|
Vilmos Nebehaj
|
||||||
Vincent Bronner
|
Vincent Bronner
|
||||||
Vincent Penquerc'h
|
Vincent Penquerc'h
|
||||||
Vincent Sanders
|
Vincent Sanders
|
||||||
@@ -459,7 +503,10 @@ Wesley Laxton
|
|||||||
Wez Furlong
|
Wez Furlong
|
||||||
Wilfredo Sanchez
|
Wilfredo Sanchez
|
||||||
Wojciech Zwiefka
|
Wojciech Zwiefka
|
||||||
|
Xavier Bouchoux
|
||||||
|
Yang Tse
|
||||||
Yarram Sunil
|
Yarram Sunil
|
||||||
Zvi Har'El
|
Zvi Har'El
|
||||||
nk
|
nk
|
||||||
swalkaus at yahoo.com
|
swalkaus at yahoo.com
|
||||||
|
tommink[at]post.pl
|
||||||
|
48
docs/TODO
48
docs/TODO
@@ -14,12 +14,6 @@ TODO
|
|||||||
|
|
||||||
LIBCURL
|
LIBCURL
|
||||||
|
|
||||||
* Introduce an interface to libcurl that allows applications to easier get to
|
|
||||||
know what cookies that are received. CURLINFO_COOKIELIST to get a
|
|
||||||
curl_slist with cookies (netscape/mozilla cookie file formatted), and
|
|
||||||
CURLOPT_COOKIELIST to set a list of cookies (using the same format).
|
|
||||||
http://curl.haxx.se/mail/lib-2004-12/0195.html
|
|
||||||
|
|
||||||
* Introduce another callback interface for upload/download that makes one
|
* Introduce another callback interface for upload/download that makes one
|
||||||
less copy of data and thus a faster operation.
|
less copy of data and thus a faster operation.
|
||||||
[http://curl.haxx.se/dev/no_copy_callbacks.txt]
|
[http://curl.haxx.se/dev/no_copy_callbacks.txt]
|
||||||
@@ -43,15 +37,29 @@ TODO
|
|||||||
* Add option that changes the interval in which the progress callback is
|
* Add option that changes the interval in which the progress callback is
|
||||||
called at most.
|
called at most.
|
||||||
|
|
||||||
|
* Make libcurl built with c-ares use c-ares' IPv6 abilities. They weren't
|
||||||
|
present when we first added c-ares support but they have been added since!
|
||||||
|
When this is done and works, we can actually start considering making c-ares
|
||||||
|
powered libcurl the default build (which of course would require that we'd
|
||||||
|
bundle the c-ares source code in the libcurl source code releases).
|
||||||
|
|
||||||
|
* Support CONNECT 407 responses that kill the connection and expect the
|
||||||
|
client to reconnect to complete the authentication. Currently libcurl
|
||||||
|
assumes that a proxy connection will be kept alive.
|
||||||
|
|
||||||
|
* Make the curl/*.h headers include the proper system includes based on what
|
||||||
|
was present at the time when configure was run. Currently, the sys/select.h
|
||||||
|
header is for example included by curl/multi.h only on specific platforms
|
||||||
|
we know MUST have it. This is error-prone. We therefore want the header
|
||||||
|
files to adapt to configure results. Those results must be stored in a new
|
||||||
|
header and they must use a curl name space, i.e not be HAVE_* prefix (as
|
||||||
|
that would risk collide with other apps that use libcurl and that runs
|
||||||
|
configure).
|
||||||
|
|
||||||
LIBCURL - multi interface
|
LIBCURL - multi interface
|
||||||
|
|
||||||
* Add a curl_multi_fdset() alternative. this allows apps to avoid the
|
|
||||||
FD_SETSIZE problem with select().
|
|
||||||
|
|
||||||
* Add curl_multi_timeout() to make libcurl's ares-functionality better.
|
|
||||||
|
|
||||||
* Make sure we don't ever loop because of non-blocking sockets return
|
* Make sure we don't ever loop because of non-blocking sockets return
|
||||||
EWOULDBLOCK or similar. This FTP command sending, the SSL connection etc.
|
EWOULDBLOCK or similar. The GnuTLS connection etc.
|
||||||
|
|
||||||
* Make transfers treated more carefully. We need a way to tell libcurl we
|
* Make transfers treated more carefully. We need a way to tell libcurl we
|
||||||
have data to write, as the current system expects us to upload data each
|
have data to write, as the current system expects us to upload data each
|
||||||
@@ -61,10 +69,6 @@ TODO
|
|||||||
ready to accept read data. Today libcurl feeds the data as soon as it is
|
ready to accept read data. Today libcurl feeds the data as soon as it is
|
||||||
available for reading, no matter what.
|
available for reading, no matter what.
|
||||||
|
|
||||||
* Add curl_multi_socket() and family to the multi interface that gets file
|
|
||||||
descriptors, as an alternative to the curl_multi_fdset(). This is necessary
|
|
||||||
to allow apps to properly avoid the FD_SETSIZE problem.
|
|
||||||
|
|
||||||
* Make curl_easy_perform() a wrapper-function that simply creates a multi
|
* Make curl_easy_perform() a wrapper-function that simply creates a multi
|
||||||
handle, adds the easy handle to it, runs curl_multi_perform() until the
|
handle, adds the easy handle to it, runs curl_multi_perform() until the
|
||||||
transfer is done, then detach the easy handle, destroy the multi handle and
|
transfer is done, then detach the easy handle, destroy the multi handle and
|
||||||
@@ -131,6 +135,10 @@ TODO
|
|||||||
|
|
||||||
SSL
|
SSL
|
||||||
|
|
||||||
|
* Provide a libcurl API for setting mutex callbacks in the underlying SSL
|
||||||
|
library, so that the same application code can use mutex-locking
|
||||||
|
independently of OpenSSL or GnutTLS being used.
|
||||||
|
|
||||||
* Anton Fedorov's "dumpcert" patch:
|
* Anton Fedorov's "dumpcert" patch:
|
||||||
http://curl.haxx.se/mail/lib-2004-03/0088.html
|
http://curl.haxx.se/mail/lib-2004-03/0088.html
|
||||||
|
|
||||||
@@ -182,6 +190,11 @@ TODO
|
|||||||
* Work out a common method with Peter Sylvester's OpenSSL-patch for SRP
|
* Work out a common method with Peter Sylvester's OpenSSL-patch for SRP
|
||||||
on the TLS to provide name and password
|
on the TLS to provide name and password
|
||||||
|
|
||||||
|
* Fix the connection phase to be non-blocking when multi interface is used
|
||||||
|
|
||||||
|
* Add a way to check if the connection seems to be alive, to corrspond to the
|
||||||
|
SSL_peak() way we use with OpenSSL.
|
||||||
|
|
||||||
LDAP
|
LDAP
|
||||||
|
|
||||||
* Look over the implementation. The looping will have to "go away" from the
|
* Look over the implementation. The looping will have to "go away" from the
|
||||||
@@ -193,7 +206,8 @@ TODO
|
|||||||
* RTSP - RFC2326 (protocol - very HTTP-like, also contains URL description)
|
* RTSP - RFC2326 (protocol - very HTTP-like, also contains URL description)
|
||||||
|
|
||||||
* SFTP/SCP/SSH (no RFCs for protocol nor URI/URL format). An implementation
|
* SFTP/SCP/SSH (no RFCs for protocol nor URI/URL format). An implementation
|
||||||
should most probably use an existing ssh library, such as OpenSSH.
|
should most probably use an existing ssh library, such as OpenSSH. or
|
||||||
|
libssh2.org
|
||||||
|
|
||||||
* RSYNC (no RFCs for protocol nor URI/URL format). An implementation should
|
* RSYNC (no RFCs for protocol nor URI/URL format). An implementation should
|
||||||
most probably use an existing rsync library, such as librsync.
|
most probably use an existing rsync library, such as librsync.
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
.\" * | (__| |_| | _ <| |___
|
.\" * | (__| |_| | _ <| |___
|
||||||
.\" * \___|\___/|_| \_\_____|
|
.\" * \___|\___/|_| \_\_____|
|
||||||
.\" *
|
.\" *
|
||||||
.\" * Copyright (C) 1998 - 2005, Daniel Stenberg, <daniel@haxx.se>, et al.
|
.\" * Copyright (C) 1998 - 2006, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
.\" *
|
.\" *
|
||||||
.\" * This software is licensed as described in the file COPYING, which
|
.\" * This software is licensed as described in the file COPYING, which
|
||||||
.\" * you should have received as part of this distribution. The terms
|
.\" * you should have received as part of this distribution. The terms
|
||||||
@@ -21,7 +21,7 @@
|
|||||||
.\" * $Id$
|
.\" * $Id$
|
||||||
.\" **************************************************************************
|
.\" **************************************************************************
|
||||||
.\"
|
.\"
|
||||||
.TH curl-config 1 "25 Jan 2004" "Curl 7.13.0" "curl-config manual"
|
.TH curl-config 1 "25 Jan 2004" "Curl 7.15.4" "curl-config manual"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
curl-config \- Get information about a libcurl installation
|
curl-config \- Get information about a libcurl installation
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
@@ -37,6 +37,11 @@ Displays the compiler used to build libcurl.
|
|||||||
.IP "--cflags"
|
.IP "--cflags"
|
||||||
Set of compiler options (CFLAGS) to use when compiling files that use
|
Set of compiler options (CFLAGS) to use when compiling files that use
|
||||||
libcurl. Currently that is only thw include path to the curl include files.
|
libcurl. Currently that is only thw include path to the curl include files.
|
||||||
|
.IP "--checkfor [version]"
|
||||||
|
Specify the oldest possible libcurl version string you want, and this
|
||||||
|
script will return 0 if the current installation is new enough or it
|
||||||
|
returns 1 and outputs a text saying that the current version is not new
|
||||||
|
enough. (Added in 7.15.4)
|
||||||
.IP "--feature"
|
.IP "--feature"
|
||||||
Lists what particular main features the installed libcurl was built with. At
|
Lists what particular main features the installed libcurl was built with. At
|
||||||
the time of writing, this list may include SSL, KRB4 or IPv6. Do not assume
|
the time of writing, this list may include SSL, KRB4 or IPv6. Do not assume
|
||||||
@@ -53,10 +58,10 @@ in $prefix/lib and its header files are installed in $prefix/include and so
|
|||||||
on. The prefix is set with "configure --prefix".
|
on. The prefix is set with "configure --prefix".
|
||||||
.IP "--protocols"
|
.IP "--protocols"
|
||||||
Lists what particular protocols the installed libcurl was built to support. At
|
Lists what particular protocols the installed libcurl was built to support. At
|
||||||
the time of writing, this list may include HTTP, HTTPS, FTP, FTPS, GOPHER,
|
the time of writing, this list may include HTTP, HTTPS, FTP, FTPS, FILE,
|
||||||
FILE, TELNET, LDAP, DICT. Do not assume any particular order. The protocols
|
TELNET, LDAP, DICT. Do not assume any particular order. The protocols will
|
||||||
will be listed using uppercase and are separated by newlines. There may be
|
be listed using uppercase and are separated by newlines. There may be none,
|
||||||
none, one or several protocols in the list. (Added in 7.13.0)
|
one or several protocols in the list. (Added in 7.13.0)
|
||||||
.IP "--version"
|
.IP "--version"
|
||||||
Outputs version information about the installed libcurl.
|
Outputs version information about the installed libcurl.
|
||||||
.IP "--vernum"
|
.IP "--vernum"
|
||||||
|
227
docs/curl.1
227
docs/curl.1
@@ -5,7 +5,7 @@
|
|||||||
.\" * | (__| |_| | _ <| |___
|
.\" * | (__| |_| | _ <| |___
|
||||||
.\" * \___|\___/|_| \_\_____|
|
.\" * \___|\___/|_| \_\_____|
|
||||||
.\" *
|
.\" *
|
||||||
.\" * Copyright (C) 1998 - 2005, Daniel Stenberg, <daniel@haxx.se>, et al.
|
.\" * Copyright (C) 1998 - 2006, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
.\" *
|
.\" *
|
||||||
.\" * This software is licensed as described in the file COPYING, which
|
.\" * This software is licensed as described in the file COPYING, which
|
||||||
.\" * you should have received as part of this distribution. The terms
|
.\" * you should have received as part of this distribution. The terms
|
||||||
@@ -21,7 +21,7 @@
|
|||||||
.\" * $Id$
|
.\" * $Id$
|
||||||
.\" **************************************************************************
|
.\" **************************************************************************
|
||||||
.\"
|
.\"
|
||||||
.TH curl 1 "24 Nov 2005" "Curl 7.15.1" "Curl Manual"
|
.TH curl 1 "21 Mar 2006" "Curl 7.15.4" "Curl Manual"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
curl \- transfer a URL
|
curl \- transfer a URL
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
@@ -30,8 +30,8 @@ curl \- transfer a URL
|
|||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
||||||
.B curl
|
.B curl
|
||||||
is a tool to transfer data from or to a server, using one of the supported
|
is a tool to transfer data from or to a server, using one of the supported
|
||||||
protocols (HTTP, HTTPS, FTP, FTPS, TFTP, GOPHER, DICT, TELNET, LDAP or
|
protocols (HTTP, HTTPS, FTP, FTPS, TFTP, DICT, TELNET, LDAP or FILE).
|
||||||
FILE). The command is designed to work without user interaction.
|
The command is designed to work without user interaction.
|
||||||
|
|
||||||
curl offers a busload of useful tricks like proxy support, user
|
curl offers a busload of useful tricks like proxy support, user
|
||||||
authentication, ftp upload, HTTP post, SSL (https:) connections, cookies, file
|
authentication, ftp upload, HTTP post, SSL (https:) connections, cookies, file
|
||||||
@@ -43,7 +43,7 @@ curl is powered by libcurl for all transfer-related features. See
|
|||||||
for details.
|
for details.
|
||||||
.SH URL
|
.SH URL
|
||||||
The URL syntax is protocol dependent. You'll find a detailed description in
|
The URL syntax is protocol dependent. You'll find a detailed description in
|
||||||
RFC 2396.
|
RFC 3986.
|
||||||
|
|
||||||
You can specify multiple URLs or parts of URLs by writing part sets within
|
You can specify multiple URLs or parts of URLs by writing part sets within
|
||||||
braces as in:
|
braces as in:
|
||||||
@@ -80,6 +80,24 @@ getting many files from the same server will not do multiple connects /
|
|||||||
handshakes. This improves speed. Of course this is only done on files
|
handshakes. This improves speed. Of course this is only done on files
|
||||||
specified on a single command line and cannot be used between separate curl
|
specified on a single command line and cannot be used between separate curl
|
||||||
invokes.
|
invokes.
|
||||||
|
.SH "PROGRESS METER"
|
||||||
|
curl normally displays a progress meter during operations, indicating amount
|
||||||
|
of transfered data, transfer speeds and estimated time left etc.
|
||||||
|
|
||||||
|
However, since curl displays data to the terminal by default, if you invoke
|
||||||
|
curl to do an operation and it is about to write data to the terminal, it
|
||||||
|
\fIdisables\fP the progress meter as otherwise it would mess up the output
|
||||||
|
mixing progress meter and response data.
|
||||||
|
|
||||||
|
If you want a progress meter for HTTP POST or PUT requests, you need to
|
||||||
|
redirect the response output to a file, using shell redirect (>), -o [file] or
|
||||||
|
similar.
|
||||||
|
|
||||||
|
It is not the same case for FTP upload as that operation is not spitting out
|
||||||
|
any response data to the terminal.
|
||||||
|
|
||||||
|
If you prefer a progress "bar" instead of the regular meter, \fI-#\fP is your
|
||||||
|
friend.
|
||||||
.SH OPTIONS
|
.SH OPTIONS
|
||||||
.IP "-a/--append"
|
.IP "-a/--append"
|
||||||
(FTP) When used in an FTP upload, this will tell curl to append to the target
|
(FTP) When used in an FTP upload, this will tell curl to append to the target
|
||||||
@@ -100,7 +118,7 @@ most secure one the remote site claims it supports. This is done by first
|
|||||||
doing a request and checking the response-headers, thus inducing an extra
|
doing a request and checking the response-headers, thus inducing an extra
|
||||||
network round-trip. This is used instead of setting a specific authentication
|
network round-trip. This is used instead of setting a specific authentication
|
||||||
method, which you can do with \fI--basic\fP, \fI--digest\fP, \fI--ntlm\fP, and
|
method, which you can do with \fI--basic\fP, \fI--digest\fP, \fI--ntlm\fP, and
|
||||||
\fI--negotiate\fP. (Added in 7.10.6)
|
\fI--negotiate\fP.
|
||||||
|
|
||||||
Note that using --anyauth is not recommended if you do uploads from stdin,
|
Note that using --anyauth is not recommended if you do uploads from stdin,
|
||||||
since it may require data to be sent twice and then the client must be able to
|
since it may require data to be sent twice and then the client must be able to
|
||||||
@@ -140,7 +158,7 @@ If this option is used twice, the second one will disable ASCII usage.
|
|||||||
(HTTP) Tells curl to use HTTP Basic authentication. This is the default and
|
(HTTP) Tells curl to use HTTP Basic authentication. This is the default and
|
||||||
this option is usually pointless, unless you use it to override a previously
|
this option is usually pointless, unless you use it to override a previously
|
||||||
set option that sets a different authentication method (such as \fI--ntlm\fP,
|
set option that sets a different authentication method (such as \fI--ntlm\fP,
|
||||||
\fI--digest\fP and \fI--negotiate\fP). (Added in 7.10.6)
|
\fI--digest\fP and \fI--negotiate\fP).
|
||||||
|
|
||||||
If this option is used several times, the following occurrences make no
|
If this option is used several times, the following occurrences make no
|
||||||
difference.
|
difference.
|
||||||
@@ -198,7 +216,8 @@ To create remote directories when using FTP, try \fI--ftp-create-dirs\fP.
|
|||||||
.IP "--crlf"
|
.IP "--crlf"
|
||||||
(FTP) Convert LF to CRLF in upload. Useful for MVS (OS/390).
|
(FTP) Convert LF to CRLF in upload. Useful for MVS (OS/390).
|
||||||
|
|
||||||
If this option is used twice, the second will again disable crlf converting.
|
If this option is used several times, the following occurrences make no
|
||||||
|
difference.
|
||||||
.IP "-d/--data <data>"
|
.IP "-d/--data <data>"
|
||||||
(HTTP) Sends the specified data in a POST request to the HTTP server, in a way
|
(HTTP) Sends the specified data in a POST request to the HTTP server, in a way
|
||||||
that can emulate as if a user has filled in a HTML form and pressed the submit
|
that can emulate as if a user has filled in a HTML form and pressed the submit
|
||||||
@@ -242,7 +261,7 @@ append data.
|
|||||||
prevents the password from being sent over the wire in clear text. Use this in
|
prevents the password from being sent over the wire in clear text. Use this in
|
||||||
combination with the normal \fI-u/--user\fP option to set user name and
|
combination with the normal \fI-u/--user\fP option to set user name and
|
||||||
password. See also \fI--ntlm\fP, \fI--negotiate\fP and \fI--anyauth\fP for
|
password. See also \fI--ntlm\fP, \fI--negotiate\fP and \fI--anyauth\fP for
|
||||||
related options. (Added in curl 7.10.6)
|
related options.
|
||||||
|
|
||||||
If this option is used several times, the following occurrences make no
|
If this option is used several times, the following occurrences make no
|
||||||
difference.
|
difference.
|
||||||
@@ -252,7 +271,7 @@ active FTP transfers. Curl will normally always first attempt to use EPRT,
|
|||||||
then LPRT before using PORT, but with this option, it will use PORT right
|
then LPRT before using PORT, but with this option, it will use PORT right
|
||||||
away. EPRT and LPRT are extensions to the original FTP protocol, may not work
|
away. EPRT and LPRT are extensions to the original FTP protocol, may not work
|
||||||
on all servers but enable more functionality in a better way than the
|
on all servers but enable more functionality in a better way than the
|
||||||
traditional PORT command. (Added in 7.10.5)
|
traditional PORT command.
|
||||||
|
|
||||||
If this option is used several times, each occurrence will toggle this on/off.
|
If this option is used several times, each occurrence will toggle this on/off.
|
||||||
.IP "--disable-epsv"
|
.IP "--disable-epsv"
|
||||||
@@ -276,9 +295,9 @@ If this option is used several times, the last one will be used.
|
|||||||
.IP "-e/--referer <URL>"
|
.IP "-e/--referer <URL>"
|
||||||
(HTTP) Sends the "Referer Page" information to the HTTP server. This can also
|
(HTTP) Sends the "Referer Page" information to the HTTP server. This can also
|
||||||
be set with the \fI-H/--header\fP flag of course. When used with
|
be set with the \fI-H/--header\fP flag of course. When used with
|
||||||
\fI-L/--location\fP you can append ";auto" to the referer URL to make curl
|
\fI-L/--location\fP you can append ";auto" to the --referer URL to make curl
|
||||||
automatically set the previous URL when it follows a Location: header. The
|
automatically set the previous URL when it follows a Location: header. The
|
||||||
\&";auto" string can be used alone, even if you don't set an initial referer.
|
\&";auto" string can be used alone, even if you don't set an initial --referer.
|
||||||
|
|
||||||
If this option is used several times, the last one will be used.
|
If this option is used several times, the last one will be used.
|
||||||
.IP "--engine <name>"
|
.IP "--engine <name>"
|
||||||
@@ -336,9 +355,9 @@ If this option is used several times, the last one will be used.
|
|||||||
.IP "-f/--fail"
|
.IP "-f/--fail"
|
||||||
(HTTP) Fail silently (no output at all) on server errors. This is mostly done
|
(HTTP) Fail silently (no output at all) on server errors. This is mostly done
|
||||||
like this to better enable scripts etc to better deal with failed attempts. In
|
like this to better enable scripts etc to better deal with failed attempts. In
|
||||||
normal cases when a HTTP server fails to deliver a document, it returns a HTML
|
normal cases when a HTTP server fails to deliver a document, it returns an
|
||||||
document stating so (which often also describes why and more). This flag will
|
HTML document stating so (which often also describes why and more). This flag
|
||||||
prevent curl from outputting that and fail silently instead.
|
will prevent curl from outputting that and return error 22.
|
||||||
|
|
||||||
If this option is used twice, the second will again disable silent failure.
|
If this option is used twice, the second will again disable silent failure.
|
||||||
.IP "--ftp-account [data]"
|
.IP "--ftp-account [data]"
|
||||||
@@ -350,15 +369,38 @@ If this option is used twice, the second will override the previous use.
|
|||||||
.IP "--ftp-create-dirs"
|
.IP "--ftp-create-dirs"
|
||||||
(FTP) When an FTP URL/operation uses a path that doesn't currently exist on
|
(FTP) When an FTP URL/operation uses a path that doesn't currently exist on
|
||||||
the server, the standard behavior of curl is to fail. Using this option, curl
|
the server, the standard behavior of curl is to fail. Using this option, curl
|
||||||
will instead attempt to create missing directories. (Added in 7.10.7)
|
will instead attempt to create missing directories.
|
||||||
|
|
||||||
If this option is used twice, the second will again disable silent failure.
|
If this option is used twice, the second will again disable directory creation.
|
||||||
|
.IP "--ftp-method [method]"
|
||||||
|
(FTP) Control what method curl should use to reach a file on a FTP(S)
|
||||||
|
server. The method argument should be one of the following alternatives:
|
||||||
|
.RS
|
||||||
|
.IP multicwd
|
||||||
|
curl does a single CWD operation for each path part in the given URL. For deep
|
||||||
|
hierarchies this means very many commands. This is how RFC1738 says it should
|
||||||
|
be done. This is the default but the slowest behavior.
|
||||||
|
.IP nocwd
|
||||||
|
curl does no CWD at all. curl will do SIZE, RETR, STOR etc and give a full
|
||||||
|
path to the server for all these commands. This is the fastest behavior.
|
||||||
|
.IP singlecwd
|
||||||
|
curl does one CWD with the full target directory and then operates on the file
|
||||||
|
\&"normally" (like in the multicwd case). This is somewhat more standards
|
||||||
|
compliant than 'nocwd' but without the full penalty of 'multicwd'.
|
||||||
|
.RE
|
||||||
.IP "--ftp-pasv"
|
.IP "--ftp-pasv"
|
||||||
(FTP) Use PASV when transferring. PASV is the internal default behavior, but
|
(FTP) Use PASV when transferring. PASV is the internal default behavior, but
|
||||||
using this option can be used to override a previous --ftp-port option. (Added
|
using this option can be used to override a previous --ftp-port option. (Added
|
||||||
in 7.11.0)
|
in 7.11.0)
|
||||||
|
|
||||||
If this option is used twice, the second will again disable silent failure.
|
If this option is used several times, the following occurrences make no
|
||||||
|
difference.
|
||||||
|
|
||||||
|
.IP "--ftp-alternative-to-user <command>"
|
||||||
|
(FTP) If authenticating with the USER and PASS commands fails, send this
|
||||||
|
command. When connecting to Tumbleweed's Secure Transport server over FTPS
|
||||||
|
using a client certificate, using "SITE AUTH" will tell the server to retrieve
|
||||||
|
the username from the certificate. (Added in 7.15.5)
|
||||||
.IP "--ftp-skip-pasv-ip"
|
.IP "--ftp-skip-pasv-ip"
|
||||||
(FTP) Tell curl to not use the IP address the server suggests in its response
|
(FTP) Tell curl to not use the IP address the server suggests in its response
|
||||||
to curl's PASV command when curl connects the data connection. Instead curl
|
to curl's PASV command when curl connects the data connection. Instead curl
|
||||||
@@ -367,9 +409,18 @@ connection. (Added in 7.14.2)
|
|||||||
|
|
||||||
This option has no effect if PORT, EPRT or EPSV is used instead of PASV.
|
This option has no effect if PORT, EPRT or EPSV is used instead of PASV.
|
||||||
|
|
||||||
If this option is used twice, the second will again disable silent failure.
|
If this option is used twice, the second will again use the server's suggested
|
||||||
|
address.
|
||||||
.IP "--ftp-ssl"
|
.IP "--ftp-ssl"
|
||||||
(FTP) Make the FTP connection switch to use SSL/TLS. (Added in 7.11.0)
|
(FTP) Try to use SSL/TLS for the FTP connection.
|
||||||
|
Reverts to a non-secure connection if the server doesn't support SSL/TLS.
|
||||||
|
(Added in 7.11.0)
|
||||||
|
|
||||||
|
If this option is used twice, the second will again disable this.
|
||||||
|
.IP "--ftp-ssl-reqd"
|
||||||
|
(FTP) Require SSL/TLS for the FTP connection.
|
||||||
|
Terminates the connection if the server doesn't support SSL/TLS.
|
||||||
|
(Added in 7.15.5)
|
||||||
|
|
||||||
If this option is used twice, the second will again disable this.
|
If this option is used twice, the second will again disable this.
|
||||||
.IP "-F/--form <name=content>"
|
.IP "-F/--form <name=content>"
|
||||||
@@ -428,7 +479,8 @@ with a '?' separator.
|
|||||||
If used in combination with -I, the POST data will instead be appended to the
|
If used in combination with -I, the POST data will instead be appended to the
|
||||||
URL with a HEAD request.
|
URL with a HEAD request.
|
||||||
|
|
||||||
If used multiple times, nothing special happens.
|
If this option is used several times, the following occurrences make no
|
||||||
|
difference.
|
||||||
.IP "-h/--help"
|
.IP "-h/--help"
|
||||||
Usage help.
|
Usage help.
|
||||||
.IP "-H/--header <header>"
|
.IP "-H/--header <header>"
|
||||||
@@ -479,15 +531,14 @@ If this option is used twice, the second will again disable header only.
|
|||||||
(HTTP) When curl is told to read cookies from a given file, this option will
|
(HTTP) When curl is told to read cookies from a given file, this option will
|
||||||
make it discard all "session cookies". This will basically have the same effect
|
make it discard all "session cookies". This will basically have the same effect
|
||||||
as if a new session is started. Typical browsers always discard session
|
as if a new session is started. Typical browsers always discard session
|
||||||
cookies when they're closed down. (Added in 7.9.7)
|
cookies when they're closed down.
|
||||||
|
|
||||||
If this option is used several times, each occurrence will toggle this on/off.
|
If this option is used several times, each occurrence will toggle this on/off.
|
||||||
.IP "-k/--insecure"
|
.IP "-k/--insecure"
|
||||||
(SSL) This option explicitly allows curl to perform "insecure" SSL connections
|
(SSL) This option explicitly allows curl to perform "insecure" SSL connections
|
||||||
and transfers. Starting with curl 7.10, all SSL connections will be attempted
|
and transfers. All SSL connections are attempted to be made secure by using
|
||||||
to be made secure by using the CA certificate bundle installed by
|
the CA certificate bundle installed by default. This makes all connections
|
||||||
default. This makes all connections considered "insecure" to fail unless
|
considered "insecure" to fail unless \fI-k/--insecure\fP is used.
|
||||||
\fI-k/--insecure\fP is used.
|
|
||||||
|
|
||||||
If this option is used twice, the second time will again disable it.
|
If this option is used twice, the second time will again disable it.
|
||||||
.IP "--key <key>"
|
.IP "--key <key>"
|
||||||
@@ -514,7 +565,7 @@ Specify which config file to read curl arguments from. The config file is a
|
|||||||
text file in which command line arguments can be written which then will be
|
text file in which command line arguments can be written which then will be
|
||||||
used as if they were written on the actual command line. Options and their
|
used as if they were written on the actual command line. Options and their
|
||||||
parameters must be specified on the same config file line. If the parameter is
|
parameters must be specified on the same config file line. If the parameter is
|
||||||
to contain white spaces, the parameter must be inclosed within quotes. If the
|
to contain white spaces, the parameter must be enclosed within quotes. If the
|
||||||
first column of a config line is a '#' character, the rest of the line will be
|
first column of a config line is a '#' character, the rest of the line will be
|
||||||
treated as a comment.
|
treated as a comment.
|
||||||
|
|
||||||
@@ -554,8 +605,6 @@ If you are also using the \fI-Y/--speed-limit\fP option, that option will take
|
|||||||
precedence and might cripple the rate-limiting slightly, to help keeping the
|
precedence and might cripple the rate-limiting slightly, to help keeping the
|
||||||
speed-limit logic working.
|
speed-limit logic working.
|
||||||
|
|
||||||
This option was introduced in curl 7.10.
|
|
||||||
|
|
||||||
If this option is used several times, the last one will be used.
|
If this option is used several times, the last one will be used.
|
||||||
.IP "-l/--list-only"
|
.IP "-l/--list-only"
|
||||||
(FTP)
|
(FTP)
|
||||||
@@ -569,15 +618,21 @@ list only files in their response to NLST; they do not include
|
|||||||
subdirectories and symbolic links.
|
subdirectories and symbolic links.
|
||||||
|
|
||||||
If this option is used twice, the second will again disable list only.
|
If this option is used twice, the second will again disable list only.
|
||||||
|
.IP "--local-port <num>[-num]"
|
||||||
|
Set a prefered number or range of local port numbers to use for the
|
||||||
|
connection(s). Note that port numbers by nature is a scarce resource that
|
||||||
|
will be busy at times so setting this range to something too narrow might
|
||||||
|
cause unnecessary connection setup failures. (Added in 7.15.2)
|
||||||
.IP "-L/--location"
|
.IP "-L/--location"
|
||||||
(HTTP/HTTPS) If the server reports that the requested page has a different
|
(HTTP/HTTPS) If the server reports that the requested page has moved to a
|
||||||
location (indicated with the header line Location:) this flag will let curl
|
different location (indicated with a Location: header and a 3XX response code)
|
||||||
attempt to reattempt the get on the new place. If used together with
|
this option will make curl redo the request on the new place. If used together
|
||||||
\fI-i/--include\fP or \fI-I/--head\fP, headers from all requested pages will
|
with \fI-i/--include\fP or \fI-I/--head\fP, headers from all requested pages
|
||||||
be shown. If authentication is used, curl will only send its credentials to
|
will be shown. When authentication is used, curl only sends its credentials to
|
||||||
the initial host, so if a redirect takes curl to a different host, it won't
|
the initial host. If a redirect takes curl to a different host, it won't be
|
||||||
intercept the user+password. See also \fI--location-trusted\fP on how to
|
able to intercept the user+password. See also \fI--location-trusted\fP on how
|
||||||
change this.
|
to change this. You can limit the amount of redirects to follow by using the
|
||||||
|
\fI--max-redirs\fP option.
|
||||||
|
|
||||||
If this option is used twice, the second will again disable location following.
|
If this option is used twice, the second will again disable location following.
|
||||||
.IP "--location-trusted"
|
.IP "--location-trusted"
|
||||||
@@ -631,7 +686,7 @@ Very similar to \fI--netrc\fP, but this option makes the .netrc usage
|
|||||||
designed by Microsoft and is used in their web applications. It is primarily
|
designed by Microsoft and is used in their web applications. It is primarily
|
||||||
meant as a support for Kerberos5 authentication but may be also used along
|
meant as a support for Kerberos5 authentication but may be also used along
|
||||||
with another authentication methods. For more information see IETF draft
|
with another authentication methods. For more information see IETF draft
|
||||||
draft-brezak-spnego-http-04.txt. (Added in 7.10.6)
|
draft-brezak-spnego-http-04.txt.
|
||||||
|
|
||||||
This option requires that the library was built with GSSAPI support. This is
|
This option requires that the library was built with GSSAPI support. This is
|
||||||
not very common. Use \fI-V/--version\fP to see if your version supports
|
not very common. Use \fI-V/--version\fP to see if your version supports
|
||||||
@@ -656,7 +711,7 @@ designed by Microsoft and is used by IIS web servers. It is a proprietary
|
|||||||
protocol, reversed engineered by clever people and implemented in curl based
|
protocol, reversed engineered by clever people and implemented in curl based
|
||||||
on their efforts. This kind of behavior should not be endorsed, you should
|
on their efforts. This kind of behavior should not be endorsed, you should
|
||||||
encourage everyone who uses NTLM to switch to a public and documented
|
encourage everyone who uses NTLM to switch to a public and documented
|
||||||
authentication method instead. Such as Digest. (Added in 7.10.6)
|
authentication method instead. Such as Digest.
|
||||||
|
|
||||||
If you want to enable NTLM for your proxy authentication, then use
|
If you want to enable NTLM for your proxy authentication, then use
|
||||||
\fI--proxy-ntlm\fP.
|
\fI--proxy-ntlm\fP.
|
||||||
@@ -686,8 +741,8 @@ dynamically.
|
|||||||
Write output to a local file named like the remote file we get. (Only the file
|
Write output to a local file named like the remote file we get. (Only the file
|
||||||
part of the remote file is used, the path is cut off.)
|
part of the remote file is used, the path is cut off.)
|
||||||
|
|
||||||
The remote file name to use for saving is extracted from the given URL.
|
The remote file name to use for saving is extracted from the given URL,
|
||||||
Nothing else
|
nothing else.
|
||||||
|
|
||||||
You may use this option as many times as you have number of URLs.
|
You may use this option as many times as you have number of URLs.
|
||||||
.IP "--pass <phrase>"
|
.IP "--pass <phrase>"
|
||||||
@@ -696,8 +751,8 @@ You may use this option as many times as you have number of URLs.
|
|||||||
If this option is used several times, the last one will be used.
|
If this option is used several times, the last one will be used.
|
||||||
.IP "--proxy-anyauth"
|
.IP "--proxy-anyauth"
|
||||||
Tells curl to pick a suitable authentication method when communicating with
|
Tells curl to pick a suitable authentication method when communicating with
|
||||||
the given proxy. This will cause an extra request/response round-trip. Added
|
the given proxy. This will cause an extra request/response round-trip. (Added
|
||||||
in curl 7.13.2.
|
in 7.13.2)
|
||||||
|
|
||||||
If this option is used twice, the second will again disable the proxy use-any
|
If this option is used twice, the second will again disable the proxy use-any
|
||||||
authentication.
|
authentication.
|
||||||
@@ -740,7 +795,8 @@ i.e "192.168.10.1" to specify exact IP number
|
|||||||
.IP "host name"
|
.IP "host name"
|
||||||
i.e "my.host.domain" to specify machine
|
i.e "my.host.domain" to specify machine
|
||||||
.IP "-"
|
.IP "-"
|
||||||
(any single-letter string) to make it pick the machine's default
|
make curl pick the same IP address that is already used for the control
|
||||||
|
connection
|
||||||
.RE
|
.RE
|
||||||
|
|
||||||
If this option is used several times, the last one will be used. Disable the
|
If this option is used several times, the last one will be used. Disable the
|
||||||
@@ -821,7 +877,7 @@ for all forthcoming retries it will double the waiting time until it reaches
|
|||||||
10 minutes which then will be the delay between the rest of the retries. By
|
10 minutes which then will be the delay between the rest of the retries. By
|
||||||
using \fI--retry-delay\fP you disable this exponential backoff algorithm. See
|
using \fI--retry-delay\fP you disable this exponential backoff algorithm. See
|
||||||
also \fI--retry-max-time\fP to limit the total time allowed for
|
also \fI--retry-max-time\fP to limit the total time allowed for
|
||||||
retries. (Option added in 7.12.3)
|
retries. (Added in 7.12.3)
|
||||||
|
|
||||||
If this option is used multiple times, the last occurrence decide the amount.
|
If this option is used multiple times, the last occurrence decide the amount.
|
||||||
.IP "--retry-delay <seconds>"
|
.IP "--retry-delay <seconds>"
|
||||||
@@ -829,7 +885,7 @@ Make curl sleep this amount of time between each retry when a transfer has
|
|||||||
failed with a transient error (it changes the default backoff time algorithm
|
failed with a transient error (it changes the default backoff time algorithm
|
||||||
between retries). This option is only interesting if \fI--retry\fP is also
|
between retries). This option is only interesting if \fI--retry\fP is also
|
||||||
used. Setting this delay to zero will make curl use the default backoff time.
|
used. Setting this delay to zero will make curl use the default backoff time.
|
||||||
(Option added in 7.12.3)
|
(Added in 7.12.3)
|
||||||
|
|
||||||
If this option is used multiple times, the last occurrence decide the amount.
|
If this option is used multiple times, the last occurrence decide the amount.
|
||||||
.IP "--retry-max-time <seconds>"
|
.IP "--retry-max-time <seconds>"
|
||||||
@@ -838,26 +894,36 @@ done as usual (see \fI--retry\fP) as long as the timer hasn't reached this
|
|||||||
given limit. Notice that if the timer hasn't reached the limit, the request
|
given limit. Notice that if the timer hasn't reached the limit, the request
|
||||||
will be made and while performing, it may take longer than this given time
|
will be made and while performing, it may take longer than this given time
|
||||||
period. To limit a single request\'s maximum time, use \fI-m/--max-time\fP.
|
period. To limit a single request\'s maximum time, use \fI-m/--max-time\fP.
|
||||||
Set this option to zero to not timeout retries. (Option added in 7.12.3)
|
Set this option to zero to not timeout retries. (Added in 7.12.3)
|
||||||
|
|
||||||
If this option is used multiple times, the last occurrence decide the amount.
|
If this option is used multiple times, the last occurrence decide the amount.
|
||||||
.IP "-s/--silent"
|
.IP "-s/--silent"
|
||||||
Silent mode. Don't show progress meter or error messages. Makes
|
Silent mode. Don't show progress meter or error messages. Makes
|
||||||
Curl mute.
|
Curl mute.
|
||||||
|
|
||||||
If this option is used twice, the second will again disable mute.
|
If this option is used twice, the second will again disable silent mode.
|
||||||
.IP "-S/--show-error"
|
.IP "-S/--show-error"
|
||||||
When used with -s it makes curl show error message if it fails.
|
When used with -s it makes curl show error message if it fails.
|
||||||
|
|
||||||
If this option is used twice, the second will again disable show error.
|
If this option is used twice, the second will again disable show error.
|
||||||
.IP "--socks <host[:port]>"
|
.IP "--socks4 <host[:port]>"
|
||||||
Use the specified SOCKS5 proxy. If the port number is not specified, it is
|
Use the specified SOCKS4 proxy. If the port number is not specified, it is
|
||||||
assumed at port 1080. (Option added in 7.11.1)
|
assumed at port 1080. (Added in 7.15.2)
|
||||||
|
|
||||||
This option overrides any previous use of \fI-x/--proxy\fP, as they are
|
This option overrides any previous use of \fI-x/--proxy\fP, as they are
|
||||||
mutually exclusive.
|
mutually exclusive.
|
||||||
|
|
||||||
If this option is used several times, the last one will be used.
|
If this option is used several times, the last one will be used.
|
||||||
|
.IP "--socks5 <host[:port]>"
|
||||||
|
Use the specified SOCKS5 proxy. If the port number is not specified, it is
|
||||||
|
assumed at port 1080. (Added in 7.11.1)
|
||||||
|
|
||||||
|
This option overrides any previous use of \fI-x/--proxy\fP, as they are
|
||||||
|
mutually exclusive.
|
||||||
|
|
||||||
|
If this option is used several times, the last one will be used. (This option
|
||||||
|
was previously wrongly documented and used as --socks without the number
|
||||||
|
appended.)
|
||||||
.IP "--stderr <file>"
|
.IP "--stderr <file>"
|
||||||
Redirect all writes to stderr to the specified file instead. If the file name
|
Redirect all writes to stderr to the specified file instead. If the file name
|
||||||
is a plain '-', it is instead written to stdout. This option has no point when
|
is a plain '-', it is instead written to stdout. This option has no point when
|
||||||
@@ -887,13 +953,10 @@ this is used on a http(s) server, the PUT command will be used.
|
|||||||
|
|
||||||
Use the file name "-" (a single dash) to use stdin instead of a given file.
|
Use the file name "-" (a single dash) to use stdin instead of a given file.
|
||||||
|
|
||||||
Before 7.10.8, when this option was used several times, the last one was used.
|
You can specify one -T for each URL on the command line. Each -T + URL pair
|
||||||
|
specifies what to upload and to where. curl also supports "globbing" of the -T
|
||||||
In curl 7.10.8 and later, you can specify one -T for each URL on the command
|
argument, meaning that you can upload multiple files to a single URL by using
|
||||||
line. Each -T + URL pair specifies what to upload and to where. curl also
|
the same URL globbing style supported in the URL, like this:
|
||||||
supports "globbing" of the -T argument, meaning that you can upload multiple
|
|
||||||
files to a single URL by using the same URL globbing style supported in the
|
|
||||||
URL, like this:
|
|
||||||
|
|
||||||
curl -T "{file1,file2}" http://www.uploadtothissite.com
|
curl -T "{file1,file2}" http://www.uploadtothissite.com
|
||||||
|
|
||||||
@@ -905,8 +968,7 @@ Enables a full trace dump of all incoming and outgoing data, including
|
|||||||
descriptive information, to the given output file. Use "-" as filename to have
|
descriptive information, to the given output file. Use "-" as filename to have
|
||||||
the output sent to stdout.
|
the output sent to stdout.
|
||||||
|
|
||||||
If this option is used several times, the last one will be used. (Added in
|
If this option is used several times, the last one will be used.
|
||||||
7.9.7)
|
|
||||||
.IP "--trace-ascii <file>"
|
.IP "--trace-ascii <file>"
|
||||||
Enables a full trace dump of all incoming and outgoing data, including
|
Enables a full trace dump of all incoming and outgoing data, including
|
||||||
descriptive information, to the given output file. Use "-" as filename to have
|
descriptive information, to the given output file. Use "-" as filename to have
|
||||||
@@ -916,13 +978,12 @@ This is very similar to \fI--trace\fP, but leaves out the hex part and only
|
|||||||
shows the ASCII part of the dump. It makes smaller output that might be easier
|
shows the ASCII part of the dump. It makes smaller output that might be easier
|
||||||
to read for untrained humans.
|
to read for untrained humans.
|
||||||
|
|
||||||
If this option is used several times, the last one will be used. (Added in
|
If this option is used several times, the last one will be used.
|
||||||
7.9.7)
|
|
||||||
.IP "--trace-time"
|
.IP "--trace-time"
|
||||||
Prepends a time stamp to each trace or verbose line that curl displays.
|
Prepends a time stamp to each trace or verbose line that curl displays.
|
||||||
|
(Added in 7.14.0)
|
||||||
|
|
||||||
If this option is used several times, each occurrence will toggle it on/off.
|
If this option is used several times, each occurrence will toggle it on/off.
|
||||||
(Added in 7.14.0 )
|
|
||||||
.IP "-u/--user <user:password>"
|
.IP "-u/--user <user:password>"
|
||||||
Specify user and password to use for server authentication. Overrides
|
Specify user and password to use for server authentication. Overrides
|
||||||
\fI-n/--netrc\fP and \fI--netrc-optional\fP.
|
\fI-n/--netrc\fP and \fI--netrc-optional\fP.
|
||||||
@@ -1076,13 +1137,17 @@ The average download speed that curl measured for the complete download.
|
|||||||
The average upload speed that curl measured for the complete upload.
|
The average upload speed that curl measured for the complete upload.
|
||||||
.TP
|
.TP
|
||||||
.B content_type
|
.B content_type
|
||||||
The Content-Type of the requested document, if there was any. (Added in 7.9.5)
|
The Content-Type of the requested document, if there was any.
|
||||||
.TP
|
.TP
|
||||||
.B num_connects
|
.B num_connects
|
||||||
Number of new connects made in the recent transfer. (Added in 7.12.3)
|
Number of new connects made in the recent transfer. (Added in 7.12.3)
|
||||||
.TP
|
.TP
|
||||||
.B num_redirects
|
.B num_redirects
|
||||||
Number of redirects that were followed in the request. (Added in 7.12.3)
|
Number of redirects that were followed in the request. (Added in 7.12.3)
|
||||||
|
.TP
|
||||||
|
.B ftp_entry_path
|
||||||
|
The initial path libcurl ended up in when logging on to the remote FTP
|
||||||
|
server. (Added in 7.15.4)
|
||||||
.RE
|
.RE
|
||||||
|
|
||||||
If this option is used several times, the last one will be used.
|
If this option is used several times, the last one will be used.
|
||||||
@@ -1175,11 +1240,11 @@ Note that not all FTP server allow 3rd party transfers. (Added in 7.13.0)
|
|||||||
.IP "-4/--ipv4"
|
.IP "-4/--ipv4"
|
||||||
If libcurl is capable of resolving an address to multiple IP versions (which
|
If libcurl is capable of resolving an address to multiple IP versions (which
|
||||||
it is if it is ipv6-capable), this option tells libcurl to resolve names to
|
it is if it is ipv6-capable), this option tells libcurl to resolve names to
|
||||||
IPv4 addresses only. (Added in 7.10.8)
|
IPv4 addresses only.
|
||||||
.IP "-6/--ipv6"
|
.IP "-6/--ipv6"
|
||||||
If libcurl is capable of resolving an address to multiple IP versions (which
|
If libcurl is capable of resolving an address to multiple IP versions (which
|
||||||
it is if it is ipv6-capable), this option tells libcurl to resolve names to
|
it is if it is ipv6-capable), this option tells libcurl to resolve names to
|
||||||
IPv6 addresses only. (Added in 7.10.8)
|
IPv6 addresses only.
|
||||||
.IP "-#/--progress-bar"
|
.IP "-#/--progress-bar"
|
||||||
Make curl display progress information as a progress bar instead of the
|
Make curl display progress information as a progress bar instead of the
|
||||||
default statistics.
|
default statistics.
|
||||||
@@ -1188,7 +1253,7 @@ If this option is used twice, the second will again disable the progress bar.
|
|||||||
.SH FILES
|
.SH FILES
|
||||||
.I ~/.curlrc
|
.I ~/.curlrc
|
||||||
.RS
|
.RS
|
||||||
Default config file.
|
Default config file, see \fI-K/--config\fP for details.
|
||||||
|
|
||||||
.SH ENVIRONMENT
|
.SH ENVIRONMENT
|
||||||
.IP "http_proxy [protocol://]<host>[:port]"
|
.IP "http_proxy [protocol://]<host>[:port]"
|
||||||
@@ -1197,8 +1262,6 @@ Sets proxy server to use for HTTP.
|
|||||||
Sets proxy server to use for HTTPS.
|
Sets proxy server to use for HTTPS.
|
||||||
.IP "FTP_PROXY [protocol://]<host>[:port]"
|
.IP "FTP_PROXY [protocol://]<host>[:port]"
|
||||||
Sets proxy server to use for FTP.
|
Sets proxy server to use for FTP.
|
||||||
.IP "GOPHER_PROXY [protocol://]<host>[:port]"
|
|
||||||
Sets proxy server to use for GOPHER.
|
|
||||||
.IP "ALL_PROXY [protocol://]<host>[:port]"
|
.IP "ALL_PROXY [protocol://]<host>[:port]"
|
||||||
Sets proxy server to use if no protocol-specific proxy is set.
|
Sets proxy server to use if no protocol-specific proxy is set.
|
||||||
.IP "NO_PROXY <comma-separated list of hosts>"
|
.IP "NO_PROXY <comma-separated list of hosts>"
|
||||||
@@ -1343,6 +1406,32 @@ Unrecognized transfer encoding
|
|||||||
Invalid LDAP URL
|
Invalid LDAP URL
|
||||||
.IP 63
|
.IP 63
|
||||||
Maximum file size exceeded
|
Maximum file size exceeded
|
||||||
|
.IP 64
|
||||||
|
Requested FTP SSL level failed
|
||||||
|
.IP 65
|
||||||
|
Sending the data requires a rewind that failed
|
||||||
|
.IP 66
|
||||||
|
Failed to initialise SSL Engine
|
||||||
|
.IP 67
|
||||||
|
User, password or similar was not accepted and curl failed to login
|
||||||
|
.IP 68
|
||||||
|
File not found on TFTP server
|
||||||
|
.IP 69
|
||||||
|
Permission problem on TFTP server
|
||||||
|
.IP 70
|
||||||
|
Out of disk space on TFTP server
|
||||||
|
.IP 71
|
||||||
|
Illegal TFTP operation
|
||||||
|
.IP 72
|
||||||
|
Unknown TFTP transfer ID
|
||||||
|
.IP 73
|
||||||
|
File already exists (TFTP)
|
||||||
|
.IP 74
|
||||||
|
No such user (TFTP)
|
||||||
|
.IP 75
|
||||||
|
Character conversion failed
|
||||||
|
.IP 76
|
||||||
|
Character conversion functions required
|
||||||
.IP XX
|
.IP XX
|
||||||
There will appear more error codes here in future releases. The existing ones
|
There will appear more error codes here in future releases. The existing ones
|
||||||
are meant to never change.
|
are meant to never change.
|
||||||
|
@@ -11,7 +11,7 @@ EXTRA_DIST = README curlgtk.c sepheaders.c simple.c postit2.c \
|
|||||||
multi-post.c fopen.c simplepost.c makefile.dj curlx.c https.c \
|
multi-post.c fopen.c simplepost.c makefile.dj curlx.c https.c \
|
||||||
multi-debugcallback.c fileupload.c getinfo.c ftp3rdparty.c debug.c \
|
multi-debugcallback.c fileupload.c getinfo.c ftp3rdparty.c debug.c \
|
||||||
anyauthput.c htmltitle.cc htmltidy.c opensslthreadlock.c \
|
anyauthput.c htmltitle.cc htmltidy.c opensslthreadlock.c \
|
||||||
cookie_interface.c cacertinmem.c
|
cookie_interface.c cacertinmem.c synctime.c sampleconv.c ftpuploadresume.c
|
||||||
|
|
||||||
all:
|
all:
|
||||||
@echo "done"
|
@echo "done"
|
||||||
|
@@ -33,6 +33,8 @@ we expect you to actually torture our web site with your tests! Thanks.
|
|||||||
EXAMPLES
|
EXAMPLES
|
||||||
|
|
||||||
anyauthput.c - HTTP PUT using "any" authentication method
|
anyauthput.c - HTTP PUT using "any" authentication method
|
||||||
|
cacertinmem.c - Use a built-in PEM certificate to retrieve a https page
|
||||||
|
cookie_interface.c - shows usage of simple cookie interface
|
||||||
curlgtk.c - download using a GTK progress bar
|
curlgtk.c - download using a GTK progress bar
|
||||||
curlx.c - getting file info from the remote cert data
|
curlx.c - getting file info from the remote cert data
|
||||||
debug.c - showing how to use the debug callback
|
debug.c - showing how to use the debug callback
|
||||||
@@ -55,6 +57,7 @@ multi-double.c - a multi-interface app doing two simultaneous transfers
|
|||||||
multi-post.c - a multi-interface app doing a multipart formpost
|
multi-post.c - a multi-interface app doing a multipart formpost
|
||||||
multi-single.c - a multi-interface app getting a single file
|
multi-single.c - a multi-interface app getting a single file
|
||||||
multithread.c - an example using multi-treading transfering multiple files
|
multithread.c - an example using multi-treading transfering multiple files
|
||||||
|
opensslthreadlock.c - show how to do locking when using OpenSSL multi-threaded
|
||||||
persistant.c - request two URLs with a persistant connection
|
persistant.c - request two URLs with a persistant connection
|
||||||
post-callback.c - send a HTTP POST using a callback
|
post-callback.c - send a HTTP POST using a callback
|
||||||
postit2.c - send a HTTP multipart formpost
|
postit2.c - send a HTTP multipart formpost
|
||||||
@@ -62,3 +65,4 @@ sepheaders.c - download headers to a separate file
|
|||||||
simple.c - the most simple download a URL source
|
simple.c - the most simple download a URL source
|
||||||
simplepost.c - HTTP POST
|
simplepost.c - HTTP POST
|
||||||
simplessl.c - HTTPS example with certificates many options set
|
simplessl.c - HTTPS example with certificates many options set
|
||||||
|
synctime.c - Sync local time by extracing date from remote HTTP servers
|
||||||
|
154
docs/examples/ftpuploadresume.c
Normal file
154
docs/examples/ftpuploadresume.c
Normal file
@@ -0,0 +1,154 @@
|
|||||||
|
/*****************************************************************************
|
||||||
|
* _ _ ____ _
|
||||||
|
* Project ___| | | | _ \| |
|
||||||
|
* / __| | | | |_) | |
|
||||||
|
* | (__| |_| | _ <| |___
|
||||||
|
* \___|\___/|_| \_\_____|
|
||||||
|
*
|
||||||
|
* $Id$
|
||||||
|
*
|
||||||
|
* 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
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#include <curl/curl.h>
|
||||||
|
|
||||||
|
|
||||||
|
/* The MinGW headers are missing a few Win32 function definitions,
|
||||||
|
you shouldn't need this if you use VC++ */
|
||||||
|
int __cdecl _snscanf(const char * input, size_t length, const char * format, ...);
|
||||||
|
|
||||||
|
|
||||||
|
/* parse headers for Content-Length */
|
||||||
|
size_t getcontentlengthfunc(void *ptr, size_t size, size_t nmemb, void *stream) {
|
||||||
|
int r;
|
||||||
|
long len = 0;
|
||||||
|
|
||||||
|
/* _snscanf() is Win32 specific */
|
||||||
|
r = _snscanf(ptr, size * nmemb, "Content-Length: %ld\n", &len);
|
||||||
|
|
||||||
|
if (r) /* Microsoft: we don't read the specs */
|
||||||
|
*((long *) stream) = len;
|
||||||
|
|
||||||
|
return size * nmemb;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* discard downloaded data */
|
||||||
|
size_t discardfunc(void *ptr, size_t size, size_t nmemb, void *stream) {
|
||||||
|
return size * nmemb;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* read data to upload */
|
||||||
|
size_t readfunc(void *ptr, size_t size, size_t nmemb, void *stream)
|
||||||
|
{
|
||||||
|
FILE *f = stream;
|
||||||
|
size_t n;
|
||||||
|
|
||||||
|
if (ferror(f))
|
||||||
|
return CURL_READFUNC_ABORT;
|
||||||
|
|
||||||
|
n = fread(ptr, size, nmemb, f) * size;
|
||||||
|
|
||||||
|
return n;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int upload(CURL *curlhandle, const char * remotepath, const char * localpath,
|
||||||
|
long timeout, long tries)
|
||||||
|
{
|
||||||
|
FILE *f;
|
||||||
|
long uploaded_len = 0;
|
||||||
|
CURLcode r = CURLE_GOT_NOTHING;
|
||||||
|
int c;
|
||||||
|
|
||||||
|
f = fopen(localpath, "rb");
|
||||||
|
if (f == NULL) {
|
||||||
|
perror(NULL);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
curl_easy_setopt(curlhandle, CURLOPT_UPLOAD, TRUE);
|
||||||
|
|
||||||
|
curl_easy_setopt(curlhandle, CURLOPT_URL, remotepath);
|
||||||
|
|
||||||
|
if (timeout)
|
||||||
|
curl_easy_setopt(curlhandle, CURLOPT_FTP_RESPONSE_TIMEOUT, timeout);
|
||||||
|
|
||||||
|
curl_easy_setopt(curlhandle, CURLOPT_HEADERFUNCTION, getcontentlengthfunc);
|
||||||
|
curl_easy_setopt(curlhandle, CURLOPT_HEADERDATA, &uploaded_len);
|
||||||
|
|
||||||
|
curl_easy_setopt(curlhandle, CURLOPT_WRITEFUNCTION, discardfunc);
|
||||||
|
|
||||||
|
curl_easy_setopt(curlhandle, CURLOPT_READFUNCTION, readfunc);
|
||||||
|
curl_easy_setopt(curlhandle, CURLOPT_READDATA, f);
|
||||||
|
|
||||||
|
curl_easy_setopt(curlhandle, CURLOPT_FTPPORT, "-"); /* disable passive mode */
|
||||||
|
curl_easy_setopt(curlhandle, CURLOPT_FTP_CREATE_MISSING_DIRS, TRUE);
|
||||||
|
|
||||||
|
curl_easy_setopt(curlhandle, CURLOPT_VERBOSE, TRUE);
|
||||||
|
|
||||||
|
for (c = 0; (r != CURLE_OK) && (c < tries); c++) {
|
||||||
|
/* are we resuming? */
|
||||||
|
if (c) { /* yes */
|
||||||
|
/* determine the length of the file already written */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* With NOBODY and NOHEADER, libcurl will issue a SIZE
|
||||||
|
* command, but the only way to retrieve the result is
|
||||||
|
* to parse the returned Content-Length header. Thus,
|
||||||
|
* getcontentlengthfunc(). We need discardfunc() above
|
||||||
|
* because HEADER will dump the headers to stdout
|
||||||
|
* without it.
|
||||||
|
*/
|
||||||
|
curl_easy_setopt(curlhandle, CURLOPT_NOBODY, TRUE);
|
||||||
|
curl_easy_setopt(curlhandle, CURLOPT_HEADER, TRUE);
|
||||||
|
|
||||||
|
r = curl_easy_perform(curlhandle);
|
||||||
|
if (r != CURLE_OK)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
curl_easy_setopt(curlhandle, CURLOPT_NOBODY, FALSE);
|
||||||
|
curl_easy_setopt(curlhandle, CURLOPT_HEADER, FALSE);
|
||||||
|
|
||||||
|
fseek(f, uploaded_len, SEEK_SET);
|
||||||
|
|
||||||
|
curl_easy_setopt(curlhandle, CURLOPT_FTPAPPEND, TRUE);
|
||||||
|
}
|
||||||
|
else { /* no */
|
||||||
|
curl_easy_setopt(curlhandle, CURLOPT_FTPAPPEND, FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
r = curl_easy_perform(curlhandle);
|
||||||
|
}
|
||||||
|
|
||||||
|
fclose(f);
|
||||||
|
|
||||||
|
if (r == CURLE_OK)
|
||||||
|
return 1;
|
||||||
|
else {
|
||||||
|
fprintf(stderr, "%s\n", curl_easy_strerror(r));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int c, char **argv) {
|
||||||
|
CURL *curlhandle = NULL;
|
||||||
|
|
||||||
|
curl_global_init(CURL_GLOBAL_ALL);
|
||||||
|
curlhandle = curl_easy_init();
|
||||||
|
|
||||||
|
upload(curlhandle, "ftp://user:pass@host/path/file", "C:\\file", 0, 3);
|
||||||
|
|
||||||
|
curl_easy_cleanup(curlhandle);
|
||||||
|
curl_global_cleanup();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
@@ -87,8 +87,10 @@ int main(int argc, char **argv)
|
|||||||
/* now specify which file to upload */
|
/* now specify which file to upload */
|
||||||
curl_easy_setopt(curl, CURLOPT_READDATA, hd_src);
|
curl_easy_setopt(curl, CURLOPT_READDATA, hd_src);
|
||||||
|
|
||||||
/* and give the size of the upload */
|
/* provide the size of the upload, we specicially typecast the value
|
||||||
curl_easy_setopt(curl, CURLOPT_INFILESIZE_LARGE, file_info.st_size);
|
to curl_off_t since we must be sure to use the correct data size */
|
||||||
|
curl_easy_setopt(curl, CURLOPT_INFILESIZE_LARGE,
|
||||||
|
(curl_off_t)file_info.st_size);
|
||||||
|
|
||||||
/* Now run off and do what you've been told! */
|
/* Now run off and do what you've been told! */
|
||||||
res = curl_easy_perform(curl);
|
res = curl_easy_perform(curl);
|
||||||
|
@@ -24,12 +24,13 @@ int main(int argc, char *argv[])
|
|||||||
CURLM *multi_handle;
|
CURLM *multi_handle;
|
||||||
int still_running;
|
int still_running;
|
||||||
|
|
||||||
struct HttpPost *formpost=NULL;
|
struct curl_httppost *formpost=NULL;
|
||||||
struct HttpPost *lastptr=NULL;
|
struct curl_httppost *lastptr=NULL;
|
||||||
struct curl_slist *headerlist=NULL;
|
struct curl_slist *headerlist=NULL;
|
||||||
char buf[] = "Expect:";
|
char buf[] = "Expect:";
|
||||||
|
|
||||||
/* Fill in the file upload field */
|
/* Fill in the file upload field. This makes libcurl load data from
|
||||||
|
the given file name when curl_easy_perform() is called. */
|
||||||
curl_formadd(&formpost,
|
curl_formadd(&formpost,
|
||||||
&lastptr,
|
&lastptr,
|
||||||
CURLFORM_COPYNAME, "sendfile",
|
CURLFORM_COPYNAME, "sendfile",
|
||||||
@@ -43,7 +44,6 @@ int main(int argc, char *argv[])
|
|||||||
CURLFORM_COPYCONTENTS, "postit2.c",
|
CURLFORM_COPYCONTENTS, "postit2.c",
|
||||||
CURLFORM_END);
|
CURLFORM_END);
|
||||||
|
|
||||||
|
|
||||||
/* Fill in the submit field too, even if this is rarely needed */
|
/* Fill in the submit field too, even if this is rarely needed */
|
||||||
curl_formadd(&formpost,
|
curl_formadd(&formpost,
|
||||||
&lastptr,
|
&lastptr,
|
||||||
|
@@ -78,7 +78,7 @@ int main(void)
|
|||||||
curl_slist *chunk = NULL;
|
curl_slist *chunk = NULL;
|
||||||
|
|
||||||
chunk = curl_slist_append(chunk, "Transfer-Encoding: chunked");
|
chunk = curl_slist_append(chunk, "Transfer-Encoding: chunked");
|
||||||
res = curl_easy_setopt(curl, CURLOPT_HTTPHEADER);
|
res = curl_easy_setopt(curl, CURLOPT_HTTPHEADER, chunk);
|
||||||
/* use curl_slist_free_all() after the *perform() call to free this
|
/* use curl_slist_free_all() after the *perform() call to free this
|
||||||
list again */
|
list again */
|
||||||
}
|
}
|
||||||
@@ -101,7 +101,7 @@ int main(void)
|
|||||||
curl_slist *chunk = NULL;
|
curl_slist *chunk = NULL;
|
||||||
|
|
||||||
chunk = curl_slist_append(chunk, "Expect:");
|
chunk = curl_slist_append(chunk, "Expect:");
|
||||||
res = curl_easy_setopt(curl, CURLOPT_HTTPHEADER);
|
res = curl_easy_setopt(curl, CURLOPT_HTTPHEADER, chunk);
|
||||||
/* use curl_slist_free_all() after the *perform() call to free this
|
/* use curl_slist_free_all() after the *perform() call to free this
|
||||||
list again */
|
list again */
|
||||||
}
|
}
|
||||||
|
95
docs/examples/sampleconv.c
Normal file
95
docs/examples/sampleconv.c
Normal file
@@ -0,0 +1,95 @@
|
|||||||
|
/*****************************************************************************
|
||||||
|
* _ _ ____ _
|
||||||
|
* Project ___| | | | _ \| |
|
||||||
|
* / __| | | | |_) | |
|
||||||
|
* | (__| |_| | _ <| |___
|
||||||
|
* \___|\___/|_| \_\_____|
|
||||||
|
*
|
||||||
|
* $Id$
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
This is a simple example showing how a program on a non-ASCII platform
|
||||||
|
would invoke callbacks to do its own codeset conversions instead of
|
||||||
|
using the built-in iconv functions in libcurl.
|
||||||
|
|
||||||
|
The IBM-1047 EBCDIC codeset is used for this example but the code
|
||||||
|
would be similar for other non-ASCII codesets.
|
||||||
|
|
||||||
|
Three callback functions are created below:
|
||||||
|
my_conv_from_ascii_to_ebcdic,
|
||||||
|
my_conv_from_ebcdic_to_ascii, and
|
||||||
|
my_conv_from_utf8_to_ebcdic
|
||||||
|
|
||||||
|
The "platform_xxx" calls represent platform-specific conversion routines.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <curl/curl.h>
|
||||||
|
|
||||||
|
CURLcode my_conv_from_ascii_to_ebcdic(char *buffer, size_t length)
|
||||||
|
{
|
||||||
|
char *tempptrin, *tempptrout;
|
||||||
|
size_t bytes = length;
|
||||||
|
int rc;
|
||||||
|
tempptrin = tempptrout = buffer;
|
||||||
|
rc = platform_a2e(&tempptrin, &bytes, &tempptrout, &bytes);
|
||||||
|
if (rc == PLATFORM_CONV_OK) {
|
||||||
|
return(CURLE_OK);
|
||||||
|
} else {
|
||||||
|
return(CURLE_CONV_FAILED);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
CURLcode my_conv_from_ebcdic_to_ascii(char *buffer, size_t length)
|
||||||
|
{
|
||||||
|
char *tempptrin, *tempptrout;
|
||||||
|
size_t bytes = length;
|
||||||
|
int rc;
|
||||||
|
tempptrin = tempptrout = buffer;
|
||||||
|
rc = platform_e2a(&tempptrin, &bytes, &tempptrout, &bytes);
|
||||||
|
if (rc == PLATFORM_CONV_OK) {
|
||||||
|
return(CURLE_OK);
|
||||||
|
} else {
|
||||||
|
return(CURLE_CONV_FAILED);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
CURLcode my_conv_from_utf8_to_ebcdic(char *buffer, size_t length)
|
||||||
|
{
|
||||||
|
char *tempptrin, *tempptrout;
|
||||||
|
size_t bytes = length;
|
||||||
|
int rc;
|
||||||
|
tempptrin = tempptrout = buffer;
|
||||||
|
rc = platform_u2e(&tempptrin, &bytes, &tempptrout, &bytes);
|
||||||
|
if (rc == PLATFORM_CONV_OK) {
|
||||||
|
return(CURLE_OK);
|
||||||
|
} else {
|
||||||
|
return(CURLE_CONV_FAILED);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
CURL *curl;
|
||||||
|
CURLcode res;
|
||||||
|
|
||||||
|
curl = curl_easy_init();
|
||||||
|
if(curl) {
|
||||||
|
curl_easy_setopt(curl, CURLOPT_URL, "curl.haxx.se");
|
||||||
|
|
||||||
|
/* use platform-specific functions for codeset conversions */
|
||||||
|
curl_easy_setopt(curl, CURLOPT_CONV_FROM_NETWORK_FUNCTION,
|
||||||
|
my_conv_from_ascii_to_ebcdic);
|
||||||
|
curl_easy_setopt(curl, CURLOPT_CONV_TO_NETWORK_FUNCTION,
|
||||||
|
my_conv_from_ebcdic_to_ascii);
|
||||||
|
curl_easy_setopt(curl, CURLOPT_CONV_FROM_UTF8_FUNCTION,
|
||||||
|
my_conv_from_utf8_to_ebcdic);
|
||||||
|
|
||||||
|
res = curl_easy_perform(curl);
|
||||||
|
|
||||||
|
/* always cleanup */
|
||||||
|
curl_easy_cleanup(curl);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
341
docs/examples/synctime.c
Normal file
341
docs/examples/synctime.c
Normal file
@@ -0,0 +1,341 @@
|
|||||||
|
/*****************************************************************************
|
||||||
|
* _ _ ____ _
|
||||||
|
* Project ___| | | | _ \| |
|
||||||
|
* / __| | | | |_) | |
|
||||||
|
* | (__| |_| | _ <| |___
|
||||||
|
* \___|\___/|_| \_\_____|
|
||||||
|
*
|
||||||
|
* $Id$
|
||||||
|
*
|
||||||
|
* This example code only builds as-is on Windows.
|
||||||
|
*
|
||||||
|
* Synchronising your computer clock via Internet time server usually relies
|
||||||
|
* on DAYTIME, TIME, or NTP protocols. These protocols provide good accurate
|
||||||
|
* time synchronisation but it does not work very well through a
|
||||||
|
* firewall/proxy. Some adjustment has to be made to the firewall/proxy for
|
||||||
|
* these protocols to work properly.
|
||||||
|
*
|
||||||
|
* There is an indirect method. Since most webserver provide server time in
|
||||||
|
* their HTTP header, therefore you could synchronise your computer clock
|
||||||
|
* using HTTP protocol which has no problem with firewall/proxy.
|
||||||
|
*
|
||||||
|
* For this software to work, you should take note of these items.
|
||||||
|
* 1. Your firewall/proxy must allow your computer to surf internet.
|
||||||
|
* 2. Webserver system time must in sync with the NTP time server,
|
||||||
|
* or at least provide an accurate time keeping.
|
||||||
|
* 3. Webserver HTTP header does not provide the milliseconds units,
|
||||||
|
* so there is no way to get very accurate time.
|
||||||
|
* 4. This software could only provide an accuracy of +- a few seconds,
|
||||||
|
* as Round-Trip delay time is not taken into consideration.
|
||||||
|
* Compensation of network, firewall/proxy delay cannot be simply divide
|
||||||
|
* the Round-Trip delay time by half.
|
||||||
|
* 5. Win32 SetSystemTime() API will set your computer clock according to
|
||||||
|
* GMT/UTC time. Therefore your computer timezone must be properly set.
|
||||||
|
* 6. Webserver data should not be cached by the proxy server. Some
|
||||||
|
* webserver provide Cache-Control to prevent caching.
|
||||||
|
*
|
||||||
|
* References:
|
||||||
|
* http://tf.nist.gov/timefreq/service/its.htm
|
||||||
|
* http://tf.nist.gov/timefreq/service/firewall.htm
|
||||||
|
*
|
||||||
|
* Usage:
|
||||||
|
* This software will synchronise your computer clock only when you issue
|
||||||
|
* it with --synctime. By default, it only display the webserver's clock.
|
||||||
|
*
|
||||||
|
* Written by: Frank (contributed to libcurl)
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
* EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
|
||||||
|
* WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
*
|
||||||
|
* IN NO EVENT SHALL THE AUTHOR OF THIS SOFTWARE BE LIABLE FOR
|
||||||
|
* ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
|
||||||
|
* OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
|
||||||
|
* WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
|
||||||
|
* LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
|
||||||
|
* OF THIS SOFTWARE.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <time.h>
|
||||||
|
#ifndef __CYGWIN__
|
||||||
|
#include <windows.h>
|
||||||
|
#endif
|
||||||
|
#include <curl/curl.h>
|
||||||
|
|
||||||
|
|
||||||
|
#define MAX_STRING 256
|
||||||
|
#define MAX_STRING1 MAX_STRING+1
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
char http_proxy[MAX_STRING1];
|
||||||
|
char proxy_user[MAX_STRING1];
|
||||||
|
char timeserver[MAX_STRING1];
|
||||||
|
} conf_t;
|
||||||
|
|
||||||
|
char DefaultTimeServer[4][MAX_STRING1] =
|
||||||
|
{
|
||||||
|
"http://nist.time.gov/timezone.cgi?UTC/s/0",
|
||||||
|
"http://www.google.com/",
|
||||||
|
"http://www.worldtimeserver.com/current_time_in_UTC.aspx",
|
||||||
|
"http://www.worldtime.com/cgi-bin/wt.cgi"
|
||||||
|
};
|
||||||
|
|
||||||
|
char *DayStr[] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
|
||||||
|
char *MthStr[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun",
|
||||||
|
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
|
||||||
|
|
||||||
|
int ShowAllHeader;
|
||||||
|
int AutoSyncTime;
|
||||||
|
SYSTEMTIME SYSTime;
|
||||||
|
SYSTEMTIME LOCALTime;
|
||||||
|
|
||||||
|
#define HTTP_COMMAND_HEAD 0
|
||||||
|
#define HTTP_COMMAND_GET 1
|
||||||
|
|
||||||
|
|
||||||
|
size_t SyncTime_CURL_WriteOutput(void *ptr, size_t size, size_t nmemb,
|
||||||
|
void *stream)
|
||||||
|
{
|
||||||
|
fwrite(ptr, size, nmemb, stream);
|
||||||
|
return(nmemb*size);
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t SyncTime_CURL_WriteHeader(void *ptr, size_t size, size_t nmemb,
|
||||||
|
void *stream)
|
||||||
|
{
|
||||||
|
int i, RetVal;
|
||||||
|
char TmpStr1[26], TmpStr2[26];
|
||||||
|
|
||||||
|
if (ShowAllHeader == 1)
|
||||||
|
fprintf(stderr, "%s", (char *)(ptr));
|
||||||
|
|
||||||
|
if (strncmp((char *)(ptr), "Date:", 5) == 0) {
|
||||||
|
if (ShowAllHeader == 0)
|
||||||
|
fprintf(stderr, "HTTP Server. %s", (char *)(ptr));
|
||||||
|
|
||||||
|
if (AutoSyncTime == 1) {
|
||||||
|
*TmpStr1 = 0;
|
||||||
|
*TmpStr2 = 0;
|
||||||
|
if (strlen((char *)(ptr)) > 50) /* Can prevent buffer overflow to
|
||||||
|
TmpStr1 & 2? */
|
||||||
|
AutoSyncTime = 0;
|
||||||
|
else {
|
||||||
|
RetVal = sscanf ((char *)(ptr), "Date: %s %d %s %d %d:%d:%d",
|
||||||
|
TmpStr1, &SYSTime.wDay, TmpStr2, &SYSTime.wYear,
|
||||||
|
&SYSTime.wHour, &SYSTime.wMinute, &SYSTime.wSecond);
|
||||||
|
|
||||||
|
if (RetVal == 7) {
|
||||||
|
|
||||||
|
SYSTime.wMilliseconds = 500; /* adjust to midpoint, 0.5 sec */
|
||||||
|
for (i=0; i<12; i++) {
|
||||||
|
if (strcmp(MthStr[i], TmpStr2) == 0) {
|
||||||
|
SYSTime.wMonth = i+1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
AutoSyncTime = 3; /* Computer clock will be adjusted */
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
AutoSyncTime = 0; /* Error in sscanf() fields conversion */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strncmp((char *)(ptr), "X-Cache: HIT", 12) == 0) {
|
||||||
|
fprintf(stderr, "ERROR: HTTP Server data is cached."
|
||||||
|
" Server Date is no longer valid.\n");
|
||||||
|
AutoSyncTime = 0;
|
||||||
|
}
|
||||||
|
return(nmemb*size);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SyncTime_CURL_Init(CURL *curl, char *proxy_port,
|
||||||
|
char *proxy_user_password)
|
||||||
|
{
|
||||||
|
if (strlen(proxy_port) > 0)
|
||||||
|
curl_easy_setopt(curl, CURLOPT_PROXY, proxy_port);
|
||||||
|
|
||||||
|
if (strlen(proxy_user_password) > 0)
|
||||||
|
curl_easy_setopt(curl, CURLOPT_PROXYUSERPWD, proxy_user_password);
|
||||||
|
|
||||||
|
/* Trick Webserver by claiming that you are using Microsoft WinXP SP2, IE6 */
|
||||||
|
curl_easy_setopt(curl, CURLOPT_USERAGENT,
|
||||||
|
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)");
|
||||||
|
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, *SyncTime_CURL_WriteOutput);
|
||||||
|
curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, *SyncTime_CURL_WriteHeader);
|
||||||
|
}
|
||||||
|
|
||||||
|
int SyncTime_CURL_Fetch(CURL *curl, char *URL_Str, char *OutFileName,
|
||||||
|
int HttpGetBody)
|
||||||
|
{
|
||||||
|
FILE *outfile;
|
||||||
|
CURLcode res;
|
||||||
|
|
||||||
|
outfile = NULL;
|
||||||
|
if (HttpGetBody == HTTP_COMMAND_HEAD)
|
||||||
|
curl_easy_setopt(curl, CURLOPT_NOBODY, 1);
|
||||||
|
else {
|
||||||
|
outfile = fopen(OutFileName, "wb");
|
||||||
|
curl_easy_setopt(curl, CURLOPT_WRITEDATA, outfile);
|
||||||
|
}
|
||||||
|
|
||||||
|
curl_easy_setopt(curl, CURLOPT_URL, URL_Str);
|
||||||
|
res = curl_easy_perform(curl);
|
||||||
|
if (outfile != NULL)
|
||||||
|
fclose(outfile);
|
||||||
|
return res; /* (CURLE_OK) */
|
||||||
|
}
|
||||||
|
|
||||||
|
void showUsage(void)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "SYNCTIME: Synchronising computer clock with time server"
|
||||||
|
" using HTTP protocol.\n");
|
||||||
|
fprintf(stderr, "Usage : SYNCTIME [Option]\n");
|
||||||
|
fprintf(stderr, "Options :\n");
|
||||||
|
fprintf(stderr, " --server=WEBSERVER Use this time server instead"
|
||||||
|
" of default.\n");
|
||||||
|
fprintf(stderr, " --showall Show all HTTP header.\n");
|
||||||
|
fprintf(stderr, " --synctime Synchronising computer clock"
|
||||||
|
" with time server.\n");
|
||||||
|
fprintf(stderr, " --proxy-user=USER[:PASS] Set proxy username and"
|
||||||
|
" password.\n");
|
||||||
|
fprintf(stderr, " --proxy=HOST[:PORT] Use HTTP proxy on given"
|
||||||
|
" port.\n");
|
||||||
|
fprintf(stderr, " --help Print this help.\n");
|
||||||
|
fprintf(stderr, "\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
int conf_init(conf_t *conf)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
*conf->http_proxy = 0;
|
||||||
|
for (i=0; i<MAX_STRING1; i++)
|
||||||
|
conf->proxy_user[i] = 0; /* Clean up password from memory */
|
||||||
|
*conf->timeserver = 0;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
CURL *curl;
|
||||||
|
conf_t conf[1];
|
||||||
|
int OptionIndex;
|
||||||
|
struct tm *lt;
|
||||||
|
struct tm *gmt;
|
||||||
|
time_t tt;
|
||||||
|
time_t tt_local;
|
||||||
|
time_t tt_gmt;
|
||||||
|
double tzonediffFloat;
|
||||||
|
int tzonediffWord;
|
||||||
|
char timeBuf[61];
|
||||||
|
char tzoneBuf[16];
|
||||||
|
int RetValue;
|
||||||
|
|
||||||
|
OptionIndex = 0;
|
||||||
|
ShowAllHeader = 0; /* Do not show HTTP Header */
|
||||||
|
AutoSyncTime = 0; /* Do not synchronise computer clock */
|
||||||
|
RetValue = 0; /* Successful Exit */
|
||||||
|
conf_init(conf);
|
||||||
|
|
||||||
|
if (argc > 1) {
|
||||||
|
while (OptionIndex < argc) {
|
||||||
|
if (strncmp(argv[OptionIndex], "--server=", 9) == 0)
|
||||||
|
snprintf(conf->timeserver, MAX_STRING, "%s", &argv[OptionIndex][9]);
|
||||||
|
|
||||||
|
if (strcmp(argv[OptionIndex], "--showall") == 0)
|
||||||
|
ShowAllHeader = 1;
|
||||||
|
|
||||||
|
if (strcmp(argv[OptionIndex], "--synctime") == 0)
|
||||||
|
AutoSyncTime = 1;
|
||||||
|
|
||||||
|
if (strncmp(argv[OptionIndex], "--proxy-user=", 13) == 0)
|
||||||
|
snprintf(conf->proxy_user, MAX_STRING, "%s", &argv[OptionIndex][13]);
|
||||||
|
|
||||||
|
if (strncmp(argv[OptionIndex], "--proxy=", 8) == 0)
|
||||||
|
snprintf(conf->http_proxy, MAX_STRING, "%s", &argv[OptionIndex][8]);
|
||||||
|
|
||||||
|
if ((strcmp(argv[OptionIndex], "--help") == 0) ||
|
||||||
|
(strcmp(argv[OptionIndex], "/?") == 0)) {
|
||||||
|
showUsage();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
OptionIndex++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (*conf->timeserver == 0) /* Use default server for time information */
|
||||||
|
snprintf(conf->timeserver, MAX_STRING, "%s", DefaultTimeServer[0]);
|
||||||
|
|
||||||
|
/* Init CURL before usage */
|
||||||
|
curl_global_init(CURL_GLOBAL_ALL);
|
||||||
|
curl = curl_easy_init();
|
||||||
|
if (curl) {
|
||||||
|
SyncTime_CURL_Init(curl, conf->http_proxy, conf->proxy_user);
|
||||||
|
|
||||||
|
/* Calculating time diff between GMT and localtime */
|
||||||
|
tt = time(0);
|
||||||
|
lt = localtime(&tt);
|
||||||
|
tt_local = mktime(lt);
|
||||||
|
gmt = gmtime(&tt);
|
||||||
|
tt_gmt = mktime(gmt);
|
||||||
|
tzonediffFloat = difftime(tt_local, tt_gmt);
|
||||||
|
tzonediffWord = (int)(tzonediffFloat/3600.0);
|
||||||
|
|
||||||
|
if ((double)(tzonediffWord * 3600) == tzonediffFloat)
|
||||||
|
snprintf(tzoneBuf, 15, "%+03d'00'", tzonediffWord);
|
||||||
|
else
|
||||||
|
snprintf(tzoneBuf, 15, "%+03d'30'", tzonediffWord);
|
||||||
|
|
||||||
|
/* Get current system time and local time */
|
||||||
|
GetSystemTime(&SYSTime);
|
||||||
|
GetLocalTime(&LOCALTime);
|
||||||
|
snprintf(timeBuf, 60, "%s, %02d %s %04d %02d:%02d:%02d.%03d, ",
|
||||||
|
DayStr[LOCALTime.wDayOfWeek], LOCALTime.wDay,
|
||||||
|
MthStr[LOCALTime.wMonth-1], LOCALTime.wYear,
|
||||||
|
LOCALTime.wHour, LOCALTime.wMinute, LOCALTime.wSecond,
|
||||||
|
LOCALTime.wMilliseconds);
|
||||||
|
fprintf(stderr, "\nBefore HTTP. Date: %s%s\n\n", timeBuf, tzoneBuf);
|
||||||
|
|
||||||
|
/* HTTP HEAD command to the Webserver */
|
||||||
|
fprintf(stderr, "Fetch: %s\n", conf->timeserver);
|
||||||
|
SyncTime_CURL_Fetch(curl, conf->timeserver, "index.htm",
|
||||||
|
HTTP_COMMAND_HEAD);
|
||||||
|
|
||||||
|
GetLocalTime(&LOCALTime);
|
||||||
|
snprintf(timeBuf, 60, "%s, %02d %s %04d %02d:%02d:%02d.%03d, ",
|
||||||
|
DayStr[LOCALTime.wDayOfWeek], LOCALTime.wDay,
|
||||||
|
MthStr[LOCALTime.wMonth-1], LOCALTime.wYear,
|
||||||
|
LOCALTime.wHour, LOCALTime.wMinute, LOCALTime.wSecond,
|
||||||
|
LOCALTime.wMilliseconds);
|
||||||
|
fprintf(stderr, "\nAfter HTTP. Date: %s%s\n", timeBuf, tzoneBuf);
|
||||||
|
|
||||||
|
if (AutoSyncTime == 3) {
|
||||||
|
/* Synchronising computer clock */
|
||||||
|
if (!SetSystemTime(&SYSTime)) { /* Set system time */
|
||||||
|
fprintf(stderr, "ERROR: Unable to set system time.\n");
|
||||||
|
RetValue = 1;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
/* Successfully re-adjusted computer clock */
|
||||||
|
GetLocalTime(&LOCALTime);
|
||||||
|
snprintf(timeBuf, 60, "%s, %02d %s %04d %02d:%02d:%02d.%03d, ",
|
||||||
|
DayStr[LOCALTime.wDayOfWeek], LOCALTime.wDay,
|
||||||
|
MthStr[LOCALTime.wMonth-1], LOCALTime.wYear,
|
||||||
|
LOCALTime.wHour, LOCALTime.wMinute, LOCALTime.wSecond,
|
||||||
|
LOCALTime.wMilliseconds);
|
||||||
|
fprintf(stderr, "\nNew System's Date: %s%s\n", timeBuf, tzoneBuf);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Cleanup before exit */
|
||||||
|
conf_init(conf);
|
||||||
|
curl_easy_cleanup(curl);
|
||||||
|
}
|
||||||
|
return RetValue;
|
||||||
|
}
|
@@ -4,51 +4,56 @@
|
|||||||
|
|
||||||
AUTOMAKE_OPTIONS = foreign no-dependencies
|
AUTOMAKE_OPTIONS = foreign no-dependencies
|
||||||
|
|
||||||
man_MANS = curl_easy_cleanup.3 curl_easy_getinfo.3 curl_easy_init.3 \
|
man_MANS = curl_easy_cleanup.3 curl_easy_getinfo.3 curl_easy_init.3 \
|
||||||
curl_easy_perform.3 curl_easy_setopt.3 curl_easy_duphandle.3 \
|
curl_easy_perform.3 curl_easy_setopt.3 curl_easy_duphandle.3 \
|
||||||
curl_formadd.3 curl_formfree.3 curl_getdate.3 curl_getenv.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_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_version_info.3 curl_escape.3 curl_unescape.3 curl_free.3 \
|
||||||
curl_strequal.3 curl_mprintf.3 curl_global_init.3 \
|
curl_strequal.3 curl_mprintf.3 curl_global_init.3 curl_global_cleanup.3 \
|
||||||
curl_global_cleanup.3 curl_multi_add_handle.3 curl_multi_cleanup.3 \
|
curl_multi_add_handle.3 curl_multi_cleanup.3 curl_multi_fdset.3 \
|
||||||
curl_multi_fdset.3 curl_multi_info_read.3 curl_multi_init.3 \
|
curl_multi_info_read.3 curl_multi_init.3 curl_multi_perform.3 \
|
||||||
curl_multi_perform.3 curl_multi_remove_handle.3 curl_share_cleanup.3 \
|
curl_multi_remove_handle.3 curl_share_cleanup.3 curl_share_init.3 \
|
||||||
curl_share_init.3 curl_share_setopt.3 libcurl.3 libcurl-easy.3 \
|
curl_share_setopt.3 libcurl.3 libcurl-easy.3 libcurl-multi.3 \
|
||||||
libcurl-multi.3 libcurl-share.3 libcurl-errors.3 curl_easy_strerror.3 \
|
libcurl-share.3 libcurl-errors.3 curl_easy_strerror.3 \
|
||||||
curl_multi_strerror.3 curl_share_strerror.3 curl_global_init_mem.3 \
|
curl_multi_strerror.3 curl_share_strerror.3 curl_global_init_mem.3 \
|
||||||
libcurl-tutorial.3 curl_easy_reset.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
|
||||||
|
|
||||||
HTMLPAGES = curl_easy_cleanup.html curl_easy_getinfo.html \
|
HTMLPAGES = curl_easy_cleanup.html curl_easy_getinfo.html \
|
||||||
curl_easy_init.html curl_easy_perform.html curl_easy_setopt.html \
|
curl_easy_init.html curl_easy_perform.html curl_easy_setopt.html \
|
||||||
curl_easy_duphandle.html curl_formadd.html curl_formfree.html \
|
curl_easy_duphandle.html curl_formadd.html curl_formfree.html \
|
||||||
curl_getdate.html curl_getenv.html curl_slist_append.html \
|
curl_getdate.html curl_getenv.html curl_slist_append.html \
|
||||||
curl_slist_free_all.html curl_version.html curl_version_info.html \
|
curl_slist_free_all.html curl_version.html curl_version_info.html \
|
||||||
curl_escape.html curl_unescape.html curl_free.html curl_strequal.html \
|
curl_escape.html curl_unescape.html curl_free.html curl_strequal.html \
|
||||||
curl_mprintf.html curl_global_init.html curl_global_cleanup.html \
|
curl_mprintf.html curl_global_init.html curl_global_cleanup.html \
|
||||||
curl_multi_add_handle.html curl_multi_cleanup.html \
|
curl_multi_add_handle.html curl_multi_cleanup.html curl_multi_fdset.html \
|
||||||
curl_multi_fdset.html curl_multi_info_read.html curl_multi_init.html \
|
curl_multi_info_read.html curl_multi_init.html curl_multi_perform.html \
|
||||||
curl_multi_perform.html curl_multi_remove_handle.html \
|
curl_multi_remove_handle.html curl_share_cleanup.html \
|
||||||
curl_share_cleanup.html curl_share_init.html curl_share_setopt.html \
|
curl_share_init.html curl_share_setopt.html libcurl.html \
|
||||||
libcurl.html libcurl-multi.html libcurl-easy.html libcurl-share.html \
|
libcurl-multi.html libcurl-easy.html libcurl-share.html \
|
||||||
libcurl-errors.html curl_easy_strerror.html curl_multi_strerror.html \
|
libcurl-errors.html curl_easy_strerror.html curl_multi_strerror.html \
|
||||||
curl_share_strerror.html curl_global_init_mem.html \
|
curl_share_strerror.html curl_global_init_mem.html libcurl-tutorial.html \
|
||||||
libcurl-tutorial.html curl_easy_reset.html
|
curl_easy_reset.html curl_easy_escape.html curl_easy_unescape.html \
|
||||||
|
curl_multi_setopt.html curl_multi_socket.html curl_multi_timeout.html \
|
||||||
|
curl_formget.html curl_multi_assign.html
|
||||||
|
|
||||||
PDFPAGES = curl_easy_cleanup.pdf curl_easy_getinfo.pdf \
|
PDFPAGES = curl_easy_cleanup.pdf curl_easy_getinfo.pdf curl_easy_init.pdf \
|
||||||
curl_easy_init.pdf curl_easy_perform.pdf curl_easy_setopt.pdf \
|
curl_easy_perform.pdf curl_easy_setopt.pdf curl_easy_duphandle.pdf \
|
||||||
curl_easy_duphandle.pdf curl_formadd.pdf curl_formfree.pdf \
|
curl_formadd.pdf curl_formfree.pdf curl_getdate.pdf curl_getenv.pdf \
|
||||||
curl_getdate.pdf curl_getenv.pdf curl_slist_append.pdf \
|
curl_slist_append.pdf curl_slist_free_all.pdf curl_version.pdf \
|
||||||
curl_slist_free_all.pdf curl_version.pdf curl_version_info.pdf \
|
curl_version_info.pdf curl_escape.pdf curl_unescape.pdf curl_free.pdf \
|
||||||
curl_escape.pdf curl_unescape.pdf curl_free.pdf curl_strequal.pdf \
|
curl_strequal.pdf curl_mprintf.pdf curl_global_init.pdf \
|
||||||
curl_mprintf.pdf curl_global_init.pdf curl_global_cleanup.pdf \
|
curl_global_cleanup.pdf curl_multi_add_handle.pdf curl_multi_cleanup.pdf \
|
||||||
curl_multi_add_handle.pdf curl_multi_cleanup.pdf curl_multi_fdset.pdf \
|
curl_multi_fdset.pdf curl_multi_info_read.pdf curl_multi_init.pdf \
|
||||||
curl_multi_info_read.pdf curl_multi_init.pdf curl_multi_perform.pdf \
|
curl_multi_perform.pdf curl_multi_remove_handle.pdf \
|
||||||
curl_multi_remove_handle.pdf curl_share_cleanup.pdf \
|
curl_share_cleanup.pdf curl_share_init.pdf curl_share_setopt.pdf \
|
||||||
curl_share_init.pdf curl_share_setopt.pdf libcurl.pdf \
|
libcurl.pdf libcurl-multi.pdf libcurl-easy.pdf libcurl-share.pdf \
|
||||||
libcurl-multi.pdf libcurl-easy.pdf libcurl-share.pdf \
|
libcurl-errors.pdf curl_easy_strerror.pdf curl_multi_strerror.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_share_strerror.pdf curl_global_init_mem.pdf libcurl-tutorial.pdf \
|
curl_easy_reset.pdf curl_easy_escape.pdf curl_easy_unescape.pdf \
|
||||||
curl_easy_reset.pdf
|
curl_multi_setopt.pdf curl_multi_socket.pdf curl_multi_timeout.pdf \
|
||||||
|
curl_formget.pdf curl_multi_assign.pdf
|
||||||
|
|
||||||
CLEANFILES = $(HTMLPAGES) $(PDFPAGES)
|
CLEANFILES = $(HTMLPAGES) $(PDFPAGES)
|
||||||
|
|
||||||
|
47
docs/libcurl/curl_easy_escape.3
Normal file
47
docs/libcurl/curl_easy_escape.3
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
.\" **************************************************************************
|
||||||
|
.\" * _ _ ____ _
|
||||||
|
.\" * Project ___| | | | _ \| |
|
||||||
|
.\" * / __| | | | |_) | |
|
||||||
|
.\" * | (__| |_| | _ <| |___
|
||||||
|
.\" * \___|\___/|_| \_\_____|
|
||||||
|
.\" *
|
||||||
|
.\" * Copyright (C) 1998 - 2006, 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.
|
||||||
|
.\" *
|
||||||
|
.\" * $Id$
|
||||||
|
.\" **************************************************************************
|
||||||
|
.\"
|
||||||
|
.TH curl_easy_escape 3 "7 April 2006" "libcurl 7.15.4" "libcurl Manual"
|
||||||
|
.SH NAME
|
||||||
|
curl_easy_escape - URL encodes the given string
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.B #include <curl/curl.h>
|
||||||
|
.sp
|
||||||
|
.BI "char *curl_easy_escape( CURL *" curl ", char *" url ", int "length " );"
|
||||||
|
.ad
|
||||||
|
.SH DESCRIPTION
|
||||||
|
This function converts the given input string to an URL encoded string and
|
||||||
|
returns that as a new allocated string. All input characters that are not a-z,
|
||||||
|
A-Z or 0-9 are converted to their "URL escaped" version (%NN where NN is a
|
||||||
|
two-digit hexadecimal number).
|
||||||
|
|
||||||
|
If the \fBlength\fP argument is set to 0 (zero), curl_easy_escape() uses
|
||||||
|
strlen() on the input \fBurl\fP to find out the size.
|
||||||
|
|
||||||
|
You must \fIcurl_free(3)\fP the returned string when you're done with it.
|
||||||
|
.SH AVAILABILITY
|
||||||
|
Added in 7.15.4 and replaces the old curl_escape() function.
|
||||||
|
.SH RETURN VALUE
|
||||||
|
A pointer to a zero terminated string or NULL if it failed.
|
||||||
|
.SH "SEE ALSO"
|
||||||
|
.BR curl_easy_unescape "(3), " curl_free "(3), " RFC 2396
|
@@ -1,8 +1,27 @@
|
|||||||
.\" You can view this file with:
|
.\" **************************************************************************
|
||||||
.\" nroff -man [file]
|
.\" * _ _ ____ _
|
||||||
.\" $Id$
|
.\" * Project ___| | | | _ \| |
|
||||||
|
.\" * / __| | | | |_) | |
|
||||||
|
.\" * | (__| |_| | _ <| |___
|
||||||
|
.\" * \___|\___/|_| \_\_____|
|
||||||
|
.\" *
|
||||||
|
.\" * Copyright (C) 1998 - 2006, 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.
|
||||||
|
.\" *
|
||||||
|
.\" * $Id$
|
||||||
|
.\" **************************************************************************
|
||||||
.\"
|
.\"
|
||||||
.TH curl_easy_getinfo 3 "6 Oct 2005" "libcurl 7.12.3" "libcurl Manual"
|
.TH curl_easy_getinfo 3 "21 Mar 2006" "libcurl 7.15.4" "libcurl Manual"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
curl_easy_getinfo - extract information from a curl handle
|
curl_easy_getinfo - extract information from a curl handle
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
@@ -44,10 +63,8 @@ information before the transfer is made, by using the CURLOPT_FILETIME option
|
|||||||
to \fIcurl_easy_setopt(3)\fP or you will unconditionally get a -1 back. (Added
|
to \fIcurl_easy_setopt(3)\fP or you will unconditionally get a -1 back. (Added
|
||||||
in 7.5)
|
in 7.5)
|
||||||
.IP CURLINFO_TOTAL_TIME
|
.IP CURLINFO_TOTAL_TIME
|
||||||
Pass a pointer to a double to receive the total transaction time in seconds
|
Pass a pointer to a double to receive the total time in seconds for the
|
||||||
for the previous transfer. This time does not include the connect time, so if
|
previous transfer, including name resolving, TCP connect etc.
|
||||||
you want the complete operation time, you should add the
|
|
||||||
CURLINFO_CONNECT_TIME.
|
|
||||||
.IP CURLINFO_NAMELOOKUP_TIME
|
.IP CURLINFO_NAMELOOKUP_TIME
|
||||||
Pass a pointer to a double to receive the time, in seconds, it took from the
|
Pass a pointer to a double to receive the time, in seconds, it took from the
|
||||||
start until the name resolving was completed.
|
start until the name resolving was completed.
|
||||||
@@ -141,17 +158,29 @@ cookies cURL knows (expired ones, too). Don't forget to
|
|||||||
cookies (cookies for the handle have not been enabled or simply none have been
|
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
|
received) 'struct curl_slist *' will be set to point to NULL. (Added in
|
||||||
7.14.1)
|
7.14.1)
|
||||||
|
.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\fP.
|
||||||
|
(Added in 7.15.2)
|
||||||
|
.IP CURLINFO_FTP_ENTRY_PATH
|
||||||
|
Pass a pointer to a 'char *' 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)
|
||||||
.SH TIMES
|
.SH TIMES
|
||||||
.NF
|
.NF
|
||||||
An overview of the six time values available from curl_easy_getinfo()
|
An overview of the six time values available from curl_easy_getinfo()
|
||||||
|
|
||||||
curk_easy_perform()
|
curl_easy_perform()
|
||||||
|
|
|
|
||||||
|--NT
|
|--NT
|
||||||
|--|--CT
|
|--|--CT
|
||||||
|--|--|--PT
|
|--|--|--PT
|
||||||
|--|--|--|--ST
|
|--|--|--|--ST
|
||||||
|--|--|--TT
|
|--|--|--|--|--TT
|
||||||
|--|--|--|--|--RT
|
|--|--|--|--|--RT
|
||||||
.FI
|
.FI
|
||||||
.IP NT
|
.IP NT
|
||||||
@@ -168,9 +197,7 @@ and negotiations that are specific to the particular protocol(s) involved.
|
|||||||
\fICURLINFO_STARTTRANSFER_TIME\fP. The time it took from the start until the
|
\fICURLINFO_STARTTRANSFER_TIME\fP. The time it took from the start until the
|
||||||
first byte is just about to be transferred.
|
first byte is just about to be transferred.
|
||||||
.IP TT
|
.IP TT
|
||||||
\fICURLINFO_TOTAL_TIME\fP. Time of the previous transfer. This time does not
|
\fICURLINFO_TOTAL_TIME\fP. Total time of the previous request.
|
||||||
include the connect time (CT), so if you want the complete operation time, you
|
|
||||||
should add that.
|
|
||||||
.IP RT
|
.IP RT
|
||||||
\fICURLINFO_REDIRECT_TIME\fP. The time it took for all redirection steps
|
\fICURLINFO_REDIRECT_TIME\fP. The time it took for all redirection steps
|
||||||
include name lookup, connect, pretransfer and transfer before final
|
include name lookup, connect, pretransfer and transfer before final
|
||||||
|
@@ -14,6 +14,17 @@ handle that you must use as input to other easy-functions. curl_easy_init
|
|||||||
initializes curl and this call \fBMUST\fP have a corresponding call to
|
initializes curl and this call \fBMUST\fP have a corresponding call to
|
||||||
\fIcurl_easy_cleanup(3)\fP when the operation is complete.
|
\fIcurl_easy_cleanup(3)\fP when the operation is complete.
|
||||||
|
|
||||||
|
If you did not already call \fIcurl_global_init(3)\fP,
|
||||||
|
\fIcurl_easy_init(3)\fP does it automatically.
|
||||||
|
This may be lethal in multi-threaded cases, since \fIcurl_global_init(3)\fP is
|
||||||
|
not thread-safe, and it may result in resource problems because there is
|
||||||
|
no corresponding cleanup.
|
||||||
|
|
||||||
|
You are strongly advised to not allow this automatic behaviour, by
|
||||||
|
calling \fIcurl_global_init(3)\fP yourself properly.
|
||||||
|
See the description in \fBlibcurl\fP(3) of global environment
|
||||||
|
requirements for details of how to use this function.
|
||||||
|
|
||||||
.SH RETURN VALUE
|
.SH RETURN VALUE
|
||||||
If this function returns NULL, something went wrong and you cannot use the
|
If this function returns NULL, something went wrong and you cannot use the
|
||||||
other curl functions.
|
other curl functions.
|
||||||
|
@@ -15,8 +15,8 @@ it was just created with \fIcurl_easy_init(3)\fP.
|
|||||||
|
|
||||||
It does not change the following information kept in the handle: live
|
It does not change the following information kept in the handle: live
|
||||||
connections, the Session ID cache, the DNS cache, the cookies and shares.
|
connections, the Session ID cache, the DNS cache, the cookies and shares.
|
||||||
|
.SH AVAILABILITY
|
||||||
This function was added in libcurl 7.12.1.
|
This function was added in libcurl 7.12.1
|
||||||
.SH RETURN VALUE
|
.SH RETURN VALUE
|
||||||
Nothing
|
Nothing
|
||||||
.SH "SEE ALSO"
|
.SH "SEE ALSO"
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
.\" * | (__| |_| | _ <| |___
|
.\" * | (__| |_| | _ <| |___
|
||||||
.\" * \___|\___/|_| \_\_____|
|
.\" * \___|\___/|_| \_\_____|
|
||||||
.\" *
|
.\" *
|
||||||
.\" * Copyright (C) 1998 - 2005, Daniel Stenberg, <daniel@haxx.se>, et al.
|
.\" * Copyright (C) 1998 - 2006, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
.\" *
|
.\" *
|
||||||
.\" * This software is licensed as described in the file COPYING, which
|
.\" * This software is licensed as described in the file COPYING, which
|
||||||
.\" * you should have received as part of this distribution. The terms
|
.\" * you should have received as part of this distribution. The terms
|
||||||
@@ -21,9 +21,9 @@
|
|||||||
.\" * $Id$
|
.\" * $Id$
|
||||||
.\" **************************************************************************
|
.\" **************************************************************************
|
||||||
.\"
|
.\"
|
||||||
.TH curl_easy_setopt 3 "27 Oct 2005" "libcurl 7.14.2" "libcurl Manual"
|
.TH curl_easy_setopt 3 "19 Apr 2006" "libcurl 7.15.4" "libcurl Manual"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
curl_easy_setopt - set options for a curl easy handle
|
curl_easy_setopt \- set options for a curl easy handle
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
#include <curl/curl.h>
|
#include <curl/curl.h>
|
||||||
|
|
||||||
@@ -169,12 +169,18 @@ added in 7.12.3)
|
|||||||
.IP CURLOPT_PROGRESSFUNCTION
|
.IP CURLOPT_PROGRESSFUNCTION
|
||||||
Function pointer that should match the \fIcurl_progress_callback\fP prototype
|
Function pointer that should match the \fIcurl_progress_callback\fP prototype
|
||||||
found in \fI<curl/curl.h>\fP. This function gets called by libcurl instead of
|
found in \fI<curl/curl.h>\fP. This function gets called by libcurl instead of
|
||||||
its internal equivalent with a frequent interval during data transfer.
|
its internal equivalent with a frequent interval during operation (roughly
|
||||||
Unknown/unused argument values will be set to zero (like if you only download
|
once per second) no matter if data is being transfered or not. Unknown/unused
|
||||||
data, the upload size will remain 0). Returning a non-zero value from this
|
argument values passed to the callback will be set to zero (like if you only
|
||||||
callback will cause libcurl to abort the transfer and return
|
download data, the upload size will remain 0). Returning a non-zero value from
|
||||||
|
this callback will cause libcurl to abort the transfer and return
|
||||||
\fICURLE_ABORTED_BY_CALLBACK\fP.
|
\fICURLE_ABORTED_BY_CALLBACK\fP.
|
||||||
|
|
||||||
|
If you transfer data with the multi interface, this function will not be
|
||||||
|
called during periods of idleness unless you call the appropriate libcurl
|
||||||
|
function that performs transfers. Usage of the \fBCURLOPT_PROGRESSFUNCTION\fP
|
||||||
|
callback is not recommended when using the multi interface.
|
||||||
|
|
||||||
\fICURLOPT_NOPROGRESS\fP must be set to FALSE to make this function actually
|
\fICURLOPT_NOPROGRESS\fP must be set to FALSE to make this function actually
|
||||||
get called.
|
get called.
|
||||||
.IP CURLOPT_PROGRESSDATA
|
.IP CURLOPT_PROGRESSDATA
|
||||||
@@ -258,6 +264,51 @@ and trust file settings.
|
|||||||
Data pointer to pass to the ssl context callback set by the option
|
Data pointer to pass to the ssl context callback set by the option
|
||||||
\fICURLOPT_SSL_CTX_FUNCTION\fP, this is the pointer you'll get as third
|
\fICURLOPT_SSL_CTX_FUNCTION\fP, this is the pointer you'll get as third
|
||||||
parameter, otherwise \fBNULL\fP. (Added in 7.11.0)
|
parameter, otherwise \fBNULL\fP. (Added in 7.11.0)
|
||||||
|
.IP CURLOPT_CONV_TO_NETWORK_FUNCTION
|
||||||
|
.IP CURLOPT_CONV_FROM_NETWORK_FUNCTION
|
||||||
|
.IP CURLOPT_CONV_FROM_UTF8_FUNCTION
|
||||||
|
Function pointers that should match the following prototype: CURLcode
|
||||||
|
function(char *ptr, size_t length);
|
||||||
|
|
||||||
|
These three options apply to non-ASCII platforms only. They are available
|
||||||
|
only if \fBCURL_DOES_CONVERSIONS\fP was defined when libcurl was built. When
|
||||||
|
this is the case, \fIcurl_version_info(3)\fP will return the CURL_VERSION_CONV
|
||||||
|
feature bit set.
|
||||||
|
|
||||||
|
The data to be converted is in a buffer pointed to by the ptr parameter. The
|
||||||
|
amount of data to convert is indicated by the length parameter. The converted
|
||||||
|
data overlays the input data in the buffer pointed to by the ptr parameter.
|
||||||
|
CURLE_OK should be returned upon successful conversion. A CURLcode return
|
||||||
|
value defined by curl.h, such as CURLE_CONV_FAILED, should be returned if an
|
||||||
|
error was encountered.
|
||||||
|
|
||||||
|
\fBCURLOPT_CONV_TO_NETWORK_FUNCTION\fP and
|
||||||
|
\fBCURLOPT_CONV_FROM_NETWORK_FUNCTION\fP convert between the host encoding and
|
||||||
|
the network encoding. They are used when commands or ASCII data are
|
||||||
|
sent/received over the network.
|
||||||
|
|
||||||
|
\fBCURLOPT_CONV_FROM_UTF8_FUNCTION\fP is called to convert from UTF8 into the
|
||||||
|
host encoding. It is required only for SSL processing.
|
||||||
|
|
||||||
|
If you set a callback pointer to NULL, or don't set it at all, the built-in
|
||||||
|
libcurl iconv functions will be used. If HAVE_ICONV was not defined when
|
||||||
|
libcurl was built, and no callback has been established, conversion will
|
||||||
|
return the CURLE_CONV_REQD error code.
|
||||||
|
|
||||||
|
If HAVE_ICONV is defined, CURL_ICONV_CODESET_OF_HOST must also be defined.
|
||||||
|
For example:
|
||||||
|
|
||||||
|
\&#define CURL_ICONV_CODESET_OF_HOST "IBM-1047"
|
||||||
|
|
||||||
|
The iconv code in libcurl will default the network and UTF8 codeset names as
|
||||||
|
follows:
|
||||||
|
|
||||||
|
\&#define CURL_ICONV_CODESET_OF_NETWORK "ISO8859-1"
|
||||||
|
|
||||||
|
\&#define CURL_ICONV_CODESET_FOR_UTF8 "UTF-8"
|
||||||
|
|
||||||
|
You will need to override these definitions if they are different on your
|
||||||
|
system.
|
||||||
.SH ERROR OPTIONS
|
.SH ERROR OPTIONS
|
||||||
.IP CURLOPT_ERRORBUFFER
|
.IP CURLOPT_ERRORBUFFER
|
||||||
Pass a char * to a buffer that the libcurl may store human readable error
|
Pass a char * to a buffer that the libcurl may store human readable error
|
||||||
@@ -275,7 +326,7 @@ Pass a FILE * as parameter. Tell libcurl to use this stream instead of stderr
|
|||||||
when showing the progress meter and displaying \fICURLOPT_VERBOSE\fP data.
|
when showing the progress meter and displaying \fICURLOPT_VERBOSE\fP data.
|
||||||
.IP CURLOPT_FAILONERROR
|
.IP CURLOPT_FAILONERROR
|
||||||
A non-zero parameter tells the library to fail silently if the HTTP code
|
A non-zero parameter tells the library to fail silently if the HTTP code
|
||||||
returned is equal to or larger than 300. The default action would be to return
|
returned is equal to or larger than 400. The default action would be to return
|
||||||
the page normally, ignoring that code.
|
the page normally, ignoring that code.
|
||||||
.SH NETWORK OPTIONS
|
.SH NETWORK OPTIONS
|
||||||
.IP CURLOPT_URL
|
.IP CURLOPT_URL
|
||||||
@@ -290,7 +341,10 @@ given protocol of the set URL is not supported, libcurl will return on error
|
|||||||
\fIcurl_multi_perform(3)\fP. Use \fIcurl_version_info(3)\fP for detailed info
|
\fIcurl_multi_perform(3)\fP. Use \fIcurl_version_info(3)\fP for detailed info
|
||||||
on which protocols that are supported.
|
on which protocols that are supported.
|
||||||
|
|
||||||
\fICURLOPT_URL\fP is the only option that must be set before
|
The string given to CURLOPT_URL must be url-encoded and following the RFC 2396
|
||||||
|
(http://curl.haxx.se/rfc/rfc2396.txt).
|
||||||
|
|
||||||
|
\fICURLOPT_URL\fP is the only option that \fBmust\fP be set before
|
||||||
\fIcurl_easy_perform(3)\fP is called.
|
\fIcurl_easy_perform(3)\fP is called.
|
||||||
.IP CURLOPT_PROXY
|
.IP CURLOPT_PROXY
|
||||||
Set HTTP proxy to use. The parameter should be a char * to a zero terminated
|
Set HTTP proxy to use. The parameter should be a char * to a zero terminated
|
||||||
@@ -319,8 +373,8 @@ Pass a long with this option to set the proxy port to connect to unless it is
|
|||||||
specified in the proxy string \fICURLOPT_PROXY\fP.
|
specified in the proxy string \fICURLOPT_PROXY\fP.
|
||||||
.IP CURLOPT_PROXYTYPE
|
.IP CURLOPT_PROXYTYPE
|
||||||
Pass a long with this option to set type of the proxy. Available options for
|
Pass a long with this option to set type of the proxy. Available options for
|
||||||
this are \fICURLPROXY_HTTP\fP and \fICURLPROXY_SOCKS5\fP, with the HTTP one
|
this are \fICURLPROXY_HTTP\fP, \fICURLPROXY_SOCKS4\fP (added in 7.15.2)
|
||||||
being default. (Added in 7.10)
|
\fICURLPROXY_SOCKS5\fP. The HTTP type is default. (Added in 7.10)
|
||||||
.IP CURLOPT_HTTPPROXYTUNNEL
|
.IP CURLOPT_HTTPPROXYTUNNEL
|
||||||
Set the parameter to non-zero to get the library to tunnel all operations
|
Set the parameter to non-zero to get the library to tunnel all operations
|
||||||
through a given HTTP proxy. There is a big difference between using a proxy
|
through a given HTTP proxy. There is a big difference between using a proxy
|
||||||
@@ -330,6 +384,19 @@ don't want this tunneling option.
|
|||||||
Pass a char * as parameter. This set the interface name to use as outgoing
|
Pass a char * as parameter. This set the interface name to use as outgoing
|
||||||
network interface. The name can be an interface name, an IP address or a host
|
network interface. The name can be an interface name, an IP address or a host
|
||||||
name.
|
name.
|
||||||
|
.IP CURLOPT_LOCALPORT
|
||||||
|
Pass a long. This sets the local port number of the socket used for
|
||||||
|
connection. This can be used in combination with \fICURLOPT_INTERFACE\fP and
|
||||||
|
you are recommended to use \fICURLOPT_LOCALPORTRANGE\fP as well when this is
|
||||||
|
set. Note that port numbers are only valid 1 - 65535. (Added in 7.15.2)
|
||||||
|
.IP CURLOPT_LOCALPORTRANGE
|
||||||
|
Pass a long. This is the number of attempts libcurl should do to find a
|
||||||
|
working local port number. It starts with the given \fICURLOPT_LOCALPORT\fP
|
||||||
|
and adds one to the number for each retry. Setting this value to 1 or below
|
||||||
|
will make libcurl do only one try for exact port number. Note that port
|
||||||
|
numbers by nature is a scarce resource that will be busy at times so setting
|
||||||
|
this value to something too low might cause unnecessary connection setup
|
||||||
|
failures. (Added in 7.15.2)
|
||||||
.IP CURLOPT_DNS_CACHE_TIMEOUT
|
.IP CURLOPT_DNS_CACHE_TIMEOUT
|
||||||
Pass a long, this sets the timeout in seconds. Name resolves will be kept in
|
Pass a long, this sets the timeout in seconds. Name resolves will be kept in
|
||||||
memory for this number of seconds. Set to zero (0) to completely disable
|
memory for this number of seconds. Set to zero (0) to completely disable
|
||||||
@@ -615,15 +682,17 @@ list. If you add a header that is otherwise generated and used by libcurl
|
|||||||
internally, your added one will be used instead. If you add a header with no
|
internally, your added one will be used instead. If you add a header with no
|
||||||
contents as in 'Accept:' (no data on the right side of the colon), the
|
contents as in 'Accept:' (no data on the right side of the colon), the
|
||||||
internally used header will get disabled. Thus, using this option you can add
|
internally used header will get disabled. Thus, using this option you can add
|
||||||
new headers, replace internal headers and remove internal headers. The
|
new headers, replace internal headers and remove internal headers. To add a
|
||||||
headers included in the linked list must not be CRLF-terminated, because
|
header with no contents, make the contents be two quotes: \&"". The headers
|
||||||
curl adds CRLF after each header item. Failure to comply with this will
|
included in the linked list must not be CRLF-terminated, because curl adds
|
||||||
result in strange bugs because the server will most likely ignore part
|
CRLF after each header item. Failure to comply with this will result in
|
||||||
of the headers you specified.
|
strange bugs because the server will most likely ignore part of the headers
|
||||||
|
you specified.
|
||||||
|
|
||||||
The first line in a request (usually containing a GET or POST) is not a header
|
The first line in a request (containing the method, usually a GET or POST) is
|
||||||
and cannot be replaced using this option. Only the lines following the
|
not a header and cannot be replaced using this option. Only the lines
|
||||||
request-line are headers.
|
following the request-line are headers. Adding this method line in this list
|
||||||
|
of headers will only cause your request to send an invalid header.
|
||||||
|
|
||||||
Pass a NULL to this to reset back to no custom headers.
|
Pass a NULL to this to reset back to no custom headers.
|
||||||
|
|
||||||
@@ -694,6 +763,8 @@ Pass a char * to a cookie string. Cookie can be either in Netscape / Mozilla
|
|||||||
format or just regular HTTP-style header (Set-Cookie: ...) format. If cURL
|
format or just regular HTTP-style header (Set-Cookie: ...) format. If cURL
|
||||||
cookie engine was not enabled it will enable its cookie engine. Passing a
|
cookie engine was not enabled it will enable its cookie engine. Passing a
|
||||||
magic string \&"ALL" will erase all cookies known by cURL. (Added in 7.14.1)
|
magic string \&"ALL" will erase all cookies known by cURL. (Added in 7.14.1)
|
||||||
|
Passing the special string \&"SESS" will only erase all session cookies known
|
||||||
|
by cURL. (Added in 7.15.4)
|
||||||
.IP CURLOPT_HTTPGET
|
.IP CURLOPT_HTTPGET
|
||||||
Pass a long. If the long is non-zero, this forces the HTTP request to get back
|
Pass a long. If the long is non-zero, this forces the HTTP request to get back
|
||||||
to GET. usable if a POST, HEAD, PUT or a custom request have been used
|
to GET. usable if a POST, HEAD, PUT or a custom request have been used
|
||||||
@@ -789,6 +860,12 @@ waiting for a response, this value overrides \fICURLOPT_TIMEOUT\fP. It is
|
|||||||
recommended that if used in conjunction with \fICURLOPT_TIMEOUT\fP, you set
|
recommended that if used in conjunction with \fICURLOPT_TIMEOUT\fP, you set
|
||||||
\fICURLOPT_FTP_RESPONSE_TIMEOUT\fP to a value smaller than
|
\fICURLOPT_FTP_RESPONSE_TIMEOUT\fP to a value smaller than
|
||||||
\fICURLOPT_TIMEOUT\fP. (Added in 7.10.8)
|
\fICURLOPT_TIMEOUT\fP. (Added in 7.10.8)
|
||||||
|
.IP CURLOPT_FTP_ALTERNATIVE_TO_USER
|
||||||
|
Pass a char * as parameter, pointing to a string which will be used to
|
||||||
|
authenticate if the usual FTP "USER user" and "PASS password" negotiation
|
||||||
|
fails. This is currently only known to be required when connecting to
|
||||||
|
Tumbleweed's Secure Transport FTPS server using client certificates for
|
||||||
|
authentication. (Added in 7.15.5)
|
||||||
.IP CURLOPT_FTP_SKIP_PASV_IP
|
.IP CURLOPT_FTP_SKIP_PASV_IP
|
||||||
Pass a long. If set to a non-zero value, it instructs libcurl to not use the
|
Pass a long. If set to a non-zero value, it instructs libcurl to not use the
|
||||||
IP address the server suggests in its 227-response to libcurl's PASV command
|
IP address the server suggests in its 227-response to libcurl's PASV command
|
||||||
@@ -838,6 +915,23 @@ Exactly like \fICURLOPT_POSTQUOTE\fP, but for the source host.
|
|||||||
Pass a pointer to a zero-terminated string (or NULL to disable). When an FTP
|
Pass a pointer to a zero-terminated string (or NULL to disable). When an FTP
|
||||||
server asks for "account data" after user name and password has been provided,
|
server asks for "account data" after user name and password has been provided,
|
||||||
this data is sent off using the ACCT command. (Added in 7.13.0)
|
this data is sent off using the ACCT command. (Added in 7.13.0)
|
||||||
|
.IP CURLOPT_FTP_FILEMETHOD
|
||||||
|
Pass a long that should have one of the following values. This option controls
|
||||||
|
what method libcurl should use to reach a file on a FTP(S) server. The
|
||||||
|
argument should be one of the following alternatives:
|
||||||
|
.RS
|
||||||
|
.IP CURLFTPMETHOD_MULTICWD
|
||||||
|
libcurl does a single CWD operation for each path part in the given URL. For
|
||||||
|
deep hierarchies this means very many commands. This is how RFC1738 says it
|
||||||
|
should be done. This is the default but the slowest behavior.
|
||||||
|
.IP CURLFTPMETHOD_NOCWD
|
||||||
|
libcurl does no CWD at all. libcurl will do SIZE, RETR, STOR etc and give a
|
||||||
|
full path to the server for all these commands. This is the fastest behavior.
|
||||||
|
.IP CURLFTPMETHOD_SINGLECWD
|
||||||
|
libcurl does one CWD with the full target directory and then operates on the
|
||||||
|
file \&"normally" (like in the multicwd case). This is somewhat more standards
|
||||||
|
compliant than 'nocwd' but without the full penalty of 'multicwd'.
|
||||||
|
.RE
|
||||||
.SH PROTOCOL OPTIONS
|
.SH PROTOCOL OPTIONS
|
||||||
.IP CURLOPT_TRANSFERTEXT
|
.IP CURLOPT_TRANSFERTEXT
|
||||||
A non-zero parameter tells the library to use ASCII mode for ftp transfers,
|
A non-zero parameter tells the library to use ASCII mode for ftp transfers,
|
||||||
@@ -964,6 +1058,14 @@ for the library to consider it too slow and abort.
|
|||||||
Pass a long as parameter. It contains the time in seconds that the transfer
|
Pass a long as parameter. It contains the time in seconds that the transfer
|
||||||
should be below the \fICURLOPT_LOW_SPEED_LIMIT\fP for the library to consider
|
should be below the \fICURLOPT_LOW_SPEED_LIMIT\fP for the library to consider
|
||||||
it too slow and abort.
|
it too slow and abort.
|
||||||
|
.IP CURLOPT_MAX_SEND_SPEED_LARGE
|
||||||
|
Pass a curl_off_t as parameter. If an upload exceeds this speed on cumulative
|
||||||
|
average during the transfer, the transfer will pause to keep the average rate
|
||||||
|
less than or equal to the parameter value. (default: 0, unlimited)
|
||||||
|
.IP CURLOPT_MAX_RECV_SPEED_LARGE
|
||||||
|
Pass a curl_off_t as parameter. If an upload exceeds this speed on cumulative
|
||||||
|
average during the transfer, the transfer will pause to keep the average rate
|
||||||
|
less than or equal to the parameter value. (default: 0, unlimited)
|
||||||
.IP CURLOPT_MAXCONNECTS
|
.IP CURLOPT_MAXCONNECTS
|
||||||
Pass a long. The set number will be the persistent connection cache size. The
|
Pass a long. The set number will be the persistent connection cache size. The
|
||||||
set amount will be the maximum amount of simultaneously open connections that
|
set amount will be the maximum amount of simultaneously open connections that
|
||||||
@@ -1024,6 +1126,14 @@ Resolve to ipv4 addresses.
|
|||||||
.IP CURL_IPRESOLVE_V6
|
.IP CURL_IPRESOLVE_V6
|
||||||
Resolve to ipv6 addresses.
|
Resolve to ipv6 addresses.
|
||||||
.RE
|
.RE
|
||||||
|
.IP CURLOPT_CONNECT_ONLY
|
||||||
|
Pass a long. A non-zero parameter tells the library to perform any required
|
||||||
|
proxy authentication and connection setup, but no data transfer.
|
||||||
|
|
||||||
|
This option is useful with the \fICURLINFO_LASTSOCKET\fP option to
|
||||||
|
\fIcurl_easy_getinfo(3)\fP. The library can set up the connection and then the
|
||||||
|
application can obtain the most recently used socket for special data
|
||||||
|
transfers. (Added in 7.15.2)
|
||||||
.SH SSL and SECURITY OPTIONS
|
.SH SSL and SECURITY OPTIONS
|
||||||
.IP CURLOPT_SSLCERT
|
.IP CURLOPT_SSLCERT
|
||||||
Pass a pointer to a zero terminated string as parameter. The string should be
|
Pass a pointer to a zero terminated string as parameter. The string should be
|
||||||
@@ -1114,6 +1224,9 @@ certificates to verify the peer with. This makes sense only when used in
|
|||||||
combination with the \fICURLOPT_SSL_VERIFYPEER\fP option. If
|
combination with the \fICURLOPT_SSL_VERIFYPEER\fP option. If
|
||||||
\fICURLOPT_SSL_VERIFYPEER\fP is zero, \fICURLOPT_CAINFO\fP need not
|
\fICURLOPT_SSL_VERIFYPEER\fP is zero, \fICURLOPT_CAINFO\fP need not
|
||||||
even indicate an accessible file.
|
even indicate an accessible file.
|
||||||
|
|
||||||
|
Note that option is by default set to the system path where libcurl's cacert
|
||||||
|
bundle is assumed to be stored, as established at build time.
|
||||||
.IP CURLOPT_CAPATH
|
.IP CURLOPT_CAPATH
|
||||||
Pass a char * to a zero terminated string naming a directory holding
|
Pass a char * to a zero terminated string naming a directory holding
|
||||||
multiple CA certificates to verify the peer with. The certificate
|
multiple CA certificates to verify the peer with. The certificate
|
||||||
|
@@ -12,7 +12,7 @@ curl_easy_strerror - return string describing error code
|
|||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
||||||
The curl_easy_strerror() function returns a string describing the CURLcode
|
The curl_easy_strerror() function returns a string describing the CURLcode
|
||||||
error code passed in the argument \fIerrornum\fP.
|
error code passed in the argument \fIerrornum\fP.
|
||||||
|
.SH AVAILABILITY
|
||||||
This function was added in libcurl 7.12.0
|
This function was added in libcurl 7.12.0
|
||||||
.SH RETURN VALUE
|
.SH RETURN VALUE
|
||||||
A pointer to a zero terminated string.
|
A pointer to a zero terminated string.
|
||||||
|
52
docs/libcurl/curl_easy_unescape.3
Normal file
52
docs/libcurl/curl_easy_unescape.3
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
.\" **************************************************************************
|
||||||
|
.\" * _ _ ____ _
|
||||||
|
.\" * Project ___| | | | _ \| |
|
||||||
|
.\" * / __| | | | |_) | |
|
||||||
|
.\" * | (__| |_| | _ <| |___
|
||||||
|
.\" * \___|\___/|_| \_\_____|
|
||||||
|
.\" *
|
||||||
|
.\" * Copyright (C) 1998 - 2006, 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.
|
||||||
|
.\" *
|
||||||
|
.\" * $Id$
|
||||||
|
.\" **************************************************************************
|
||||||
|
.\"
|
||||||
|
.TH curl_easy_unescape 3 "7 April 2006" "libcurl 7.15.4" "libcurl Manual"
|
||||||
|
.SH NAME
|
||||||
|
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 " );"
|
||||||
|
.ad
|
||||||
|
.SH DESCRIPTION
|
||||||
|
This function converts the given URL encoded input string to a "plain string"
|
||||||
|
and returns that in an allocated memory area. All input characters that are
|
||||||
|
URL encoded (%XX where XX is a two-digit hexadecimal number) are converted to
|
||||||
|
their binary versions.
|
||||||
|
|
||||||
|
If the \fBlength\fP argument is set to 0 (zero), curl_easy_unescape() will use
|
||||||
|
strlen() on the input \fIurl\fP string to find out the size.
|
||||||
|
|
||||||
|
If \fBoutlength\fP is non-NULL, the function will write the length of the
|
||||||
|
returned string in the integer it points to. This allows an escaped string
|
||||||
|
containing %00 to still get used properly after unescaping.
|
||||||
|
|
||||||
|
You must \fIcurl_free(3)\fP the returned string when you're done with it.
|
||||||
|
.SH AVAILABILITY
|
||||||
|
Added in 7.15.4 and replaces the old curl_unescape() function.
|
||||||
|
.SH RETURN VALUE
|
||||||
|
A pointer to a zero terminated string or NULL if it failed.
|
||||||
|
.SH "SEE ALSO"
|
||||||
|
.I curl_easy_escape(3), curl_free(3), RFC 2396
|
@@ -11,6 +11,8 @@ curl_escape - URL encodes the given string
|
|||||||
.BI "char *curl_escape( char *" url ", int "length " );"
|
.BI "char *curl_escape( char *" url ", int "length " );"
|
||||||
.ad
|
.ad
|
||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
||||||
|
Obsolete function. Use \fIcurl_easy_escape(3)\fP instead!
|
||||||
|
|
||||||
This function will convert the given input string to an URL encoded string and
|
This function will convert the given input string to an URL encoded string and
|
||||||
return that as a new allocated string. All input characters that are not a-z,
|
return that as a new allocated string. All input characters that are not a-z,
|
||||||
A-Z or 0-9 will be converted to their "URL escaped" version (%NN where NN is a
|
A-Z or 0-9 will be converted to their "URL escaped" version (%NN where NN is a
|
||||||
@@ -20,6 +22,9 @@ If the 'length' argument is set to 0, curl_escape() will use strlen() on the
|
|||||||
input 'url' string to find out the size.
|
input 'url' string to find out the size.
|
||||||
|
|
||||||
You must curl_free() the returned string when you're done with it.
|
You must curl_free() the returned string when you're done with it.
|
||||||
|
.SH AVAILABILITY
|
||||||
|
Since 7.15.4, \fIcurl_easy_escape(3)\fP should be used. This function will
|
||||||
|
be removed in a future release.
|
||||||
.SH RETURN VALUE
|
.SH RETURN VALUE
|
||||||
A pointer to a zero terminated string or NULL if it failed.
|
A pointer to a zero terminated string or NULL if it failed.
|
||||||
.SH "SEE ALSO"
|
.SH "SEE ALSO"
|
||||||
|
49
docs/libcurl/curl_formget.3
Normal file
49
docs/libcurl/curl_formget.3
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
.\" You can view this file with:
|
||||||
|
.\" nroff -man [file]
|
||||||
|
.\" $Id$
|
||||||
|
.\"
|
||||||
|
.TH curl_formget 3 "20 June 2006" "libcurl 7.15.5" "libcurl Manual"
|
||||||
|
.SH NAME
|
||||||
|
curl_formget - serialize a previously build multipart/formdata HTTP POST chain
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.B #include <curl/curl.h>
|
||||||
|
.sp
|
||||||
|
.BI "void curl_formget(struct curl_httppost *" form, " void *" arg,
|
||||||
|
.BI " curl_formget_callback " append ");"
|
||||||
|
.ad
|
||||||
|
.SH DESCRIPTION
|
||||||
|
curl_formget() is used to serialize data previously built/appended with
|
||||||
|
\fIcurl_formadd(3)\fP. Accepts a void pointer as second argument which will be
|
||||||
|
passed to the curl_formget_callback function.
|
||||||
|
|
||||||
|
.BI "typedef size_t (*curl_formget_callback)(void *" arg, " const char *" buf,
|
||||||
|
.BI " size_t " len ");"
|
||||||
|
.nf
|
||||||
|
|
||||||
|
The curl_formget_callback will be executed for each part of the HTTP POST
|
||||||
|
chain. The void *arg pointer will be the one passed as second argument to
|
||||||
|
curl_formget(). The character buffer passed to it must not be freed. The
|
||||||
|
callback should return the buffer length passed to it on success.
|
||||||
|
.SH RETURN VALUE
|
||||||
|
0 means everything was ok, non-zero means an error occurred
|
||||||
|
.SH EXAMPLE
|
||||||
|
.nf
|
||||||
|
|
||||||
|
size_t print_httppost_callback(void *arg, const char *buf, size_t len)
|
||||||
|
{
|
||||||
|
fwrite(buf, len, 1, stdout);
|
||||||
|
(*(size_t *) arg) += len;
|
||||||
|
return len;
|
||||||
|
}
|
||||||
|
size_t print_httppost(struct curl_httppost *post)
|
||||||
|
{
|
||||||
|
size_t total_size = 0;
|
||||||
|
if(curl_formget(post, &total_size, print_httppost_callback)) {
|
||||||
|
return (size_t) -1;
|
||||||
|
}
|
||||||
|
return total_size;
|
||||||
|
}
|
||||||
|
.SH AVAILABILITY
|
||||||
|
This function was added in libcurl 7.15.5
|
||||||
|
.SH "SEE ALSO"
|
||||||
|
.BR curl_formadd "(3) "
|
@@ -18,10 +18,9 @@ will instead be made "available" by source code access only, and then as
|
|||||||
curlx_getenv().
|
curlx_getenv().
|
||||||
.SH RETURN VALUE
|
.SH RETURN VALUE
|
||||||
If successful, curl_getenv() returns a pointer to the value of the specified
|
If successful, curl_getenv() returns a pointer to the value of the specified
|
||||||
environment. The memory it refers to is malloc()ed why the application must
|
environment. The memory it refers to is malloc()ed so the application must
|
||||||
free() this when the data has completed to serve its purpose. When
|
free() this when the data is no longer needed. When \fIcurl_getenv(3)\fP fails
|
||||||
.I curl_getenv(3)
|
to find the specified name, it returns a null pointer.
|
||||||
fails to find the specified name, it returns a null pointer.
|
|
||||||
.SH NOTE
|
.SH NOTE
|
||||||
Under unix operating systems, there isn't any point in returning an allocated
|
Under unix operating systems, there isn't any point in returning an allocated
|
||||||
memory, although other systems won't work properly if this isn't done. The
|
memory, although other systems won't work properly if this isn't done. The
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
.\" nroff -man [file]
|
.\" nroff -man [file]
|
||||||
.\" $Id$
|
.\" $Id$
|
||||||
.\"
|
.\"
|
||||||
.TH curl_global_cleanup 3 "28 May 2001" "libcurl 7.8" "libcurl Manual"
|
.TH curl_global_cleanup 3 "17 Feb 2006" "libcurl 7.8" "libcurl Manual"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
curl_global_cleanup - global libcurl cleanup
|
curl_global_cleanup - global libcurl cleanup
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
@@ -11,13 +11,22 @@ curl_global_cleanup - global libcurl cleanup
|
|||||||
.BI "void curl_global_cleanup(void);"
|
.BI "void curl_global_cleanup(void);"
|
||||||
.ad
|
.ad
|
||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
||||||
curl_global_cleanup must be called once (no matter how many threads or libcurl
|
This function releases resources acquired by \fBcurl_global_init(3)\fP.
|
||||||
sessions that'll be used) by every application that uses libcurl, after all
|
|
||||||
uses of libcurl is complete.
|
|
||||||
|
|
||||||
This is the opposite of \fIcurl_global_init(3)\fP.
|
You should call \fIcurl_global_cleanup(3)\fP once for each call you make to
|
||||||
|
\fIcurl_global_init(3)\fP, after you are done using libcurl.
|
||||||
|
|
||||||
|
\fBThis function is not thread safe.\fP You must not call it when any other
|
||||||
|
thread in the program (i.e. a thread sharing the same memory) is running.
|
||||||
|
This doesn't just mean no other thread that is using libcurl. Because
|
||||||
|
\fBcurl_global_cleanup(3)\fP calls functions of other libraries that are
|
||||||
|
similarly thread unsafe, it could conflict with any other thread that uses
|
||||||
|
these other libraries.
|
||||||
|
|
||||||
|
See the description in \fBlibcurl(3)\fP of global environment requirements for
|
||||||
|
details of how to use this function.
|
||||||
|
|
||||||
Not calling this function may result in memory leaks.
|
|
||||||
.SH "SEE ALSO"
|
.SH "SEE ALSO"
|
||||||
.BR curl_global_init "(3), "
|
.BR curl_global_init "(3), "
|
||||||
|
.BR libcurl "(3), "
|
||||||
|
|
||||||
|
@@ -11,19 +11,30 @@ curl_global_init - Global libcurl initialisation
|
|||||||
.BI "CURLcode curl_global_init(long " flags ");"
|
.BI "CURLcode curl_global_init(long " flags ");"
|
||||||
.ad
|
.ad
|
||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
||||||
This function should only be called once (no matter how many threads or
|
This function sets up the program environment that libcurl needs. Think of it
|
||||||
libcurl sessions that'll be used) by every application that uses libcurl.
|
as an extension of the library loader.
|
||||||
|
|
||||||
If this function hasn't been invoked when \fIcurl_easy_init(3)\fP is called,
|
This function must be called at least once within a program (a program is all
|
||||||
it will be done automatically by libcurl.
|
the code that shares a memory space) before the program calls any other
|
||||||
|
function in libcurl. The environment it sets up is constant for the life of
|
||||||
|
the program and is the same for every program, so multiple calls have the same
|
||||||
|
effect as one call.
|
||||||
|
|
||||||
The flags option is a bit pattern that tells libcurl exact what features to
|
The flags option is a bit pattern that tells libcurl exactly what features to
|
||||||
init, as described below. Set the desired bits by ORing the values together.
|
init, as described below. Set the desired bits by ORing the values together.
|
||||||
|
In normal operation, you must specify CURL_GLOBAL_ALL. Don't use any other
|
||||||
|
value unless you are familiar with and mean to control internal operations of
|
||||||
|
libcurl.
|
||||||
|
|
||||||
You must however \fBalways\fP use the \fIcurl_global_cleanup(3)\fP function,
|
\fBThis function is not thread safe.\fP You must not call it when any other
|
||||||
as that cannot be called automatically for you by libcurl.
|
thread in the program (i.e. a thread sharing the same memory) is running.
|
||||||
|
This doesn't just mean no other thread that is using libcurl. Because
|
||||||
|
\fIcurl_global_init()\fP calls functions of other libraries that are similarly
|
||||||
|
thread unsafe, it could conflict with any other thread that uses these other
|
||||||
|
libraries.
|
||||||
|
|
||||||
Calling this function more than once will cause unpredictable results.
|
See the description in \fBlibcurl\fP(3) of global environment requirements for
|
||||||
|
details of how to use this function.
|
||||||
|
|
||||||
.SH FLAGS
|
.SH FLAGS
|
||||||
.TP 5
|
.TP 5
|
||||||
@@ -44,3 +55,5 @@ other curl functions.
|
|||||||
.SH "SEE ALSO"
|
.SH "SEE ALSO"
|
||||||
.BR curl_global_init_mem "(3), "
|
.BR curl_global_init_mem "(3), "
|
||||||
.BR curl_global_cleanup "(3), "
|
.BR curl_global_cleanup "(3), "
|
||||||
|
.BR curl_easy_init "(3) "
|
||||||
|
.BR libcurl "(3) "
|
||||||
|
@@ -15,6 +15,11 @@ this \fImulti_handle\fP control the specified \fIeasy_handle\fP.
|
|||||||
When an easy handle has been added to a multi stack, you can not and you must
|
When an easy handle has been added to a multi stack, you can not and you must
|
||||||
not use \fIcurl_easy_perform(3)\fP on that handle!
|
not use \fIcurl_easy_perform(3)\fP on that handle!
|
||||||
|
|
||||||
|
If the easy handle is not set to use a shared (CURLOPT_SHARE) or global DNS
|
||||||
|
cache (CURLOPT_DNS_USE_GLOBAL_CACHE), it will be made to use the DNS cache
|
||||||
|
that is shared between all easy handles within the multi handle when
|
||||||
|
\fIcurl_multi_add_handle(3)\fP is called.
|
||||||
|
|
||||||
The easy handle will remain added until you remove it again with
|
The easy handle will remain added until you remove it again with
|
||||||
\fIcurl_multi_remove_handle(3)\fP. You should remove the easy handle from the
|
\fIcurl_multi_remove_handle(3)\fP. You should remove the easy handle from the
|
||||||
multi stack before you terminate first the easy handle and then the multi
|
multi stack before you terminate first the easy handle and then the multi
|
||||||
|
44
docs/libcurl/curl_multi_assign.3
Normal file
44
docs/libcurl/curl_multi_assign.3
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
.\" $Id$
|
||||||
|
.\"
|
||||||
|
.TH curl_multi_assign 3 "9 Jul 2006" "libcurl 7.16.0" "libcurl Manual"
|
||||||
|
.SH NAME
|
||||||
|
curl_multi_assign \- set data to associated with an internal socket
|
||||||
|
.SH SYNOPSIS
|
||||||
|
#include <curl/curl.h>
|
||||||
|
|
||||||
|
CURLMcode curl_multi_assign(CURLM *multi_handle, curl_socket_t sockfd,
|
||||||
|
void *sockptr);
|
||||||
|
.SH DESCRIPTION
|
||||||
|
This function assigns an association in the multi handle between the given
|
||||||
|
socket and a private pointer of the application. This is (only) useful for
|
||||||
|
\fIcurl_multi_socket(3)\fP uses.
|
||||||
|
|
||||||
|
When set, the \fIsockptr\fP pointer will be passed to all future socket
|
||||||
|
callbacks for the specific \fIsockfd\fP socket.
|
||||||
|
|
||||||
|
If the given \fIsockfd\fP isn't already in use by libcurl, this function will
|
||||||
|
return an error.
|
||||||
|
|
||||||
|
libcurl only keeps one single pointer associated with a socket, so calling
|
||||||
|
this function several times for the same socket will make the last set pointer
|
||||||
|
get used.
|
||||||
|
|
||||||
|
The idea here being that this association (socket to private pointer) is
|
||||||
|
something that just about every application that uses this API will need and
|
||||||
|
then libcurl can just as well do it since it already has an internal hash
|
||||||
|
table lookup for this.
|
||||||
|
.SH "RETURN VALUE"
|
||||||
|
The standard CURLMcode for multi interface error codes.
|
||||||
|
.SH "TYPICAL USAGE"
|
||||||
|
In a typical application you allocate a struct or at least use some kind of
|
||||||
|
semi-dynamic data for each socket that we must wait for action on when using
|
||||||
|
the \fIcurl_multi_socket(3)\fP approach.
|
||||||
|
|
||||||
|
When our socket-callback get called by libcurl and we get to know about yet
|
||||||
|
another socket to wait for, we can use \fIcurl_multi_assign(3)\fP to point out
|
||||||
|
the particular data so that when we get updates about this same socket again,
|
||||||
|
we don't have to find the struct associated with this socket by ourselves.
|
||||||
|
.SH AVAILABILITY
|
||||||
|
This function was added in libcurl 7.15.5, although not deemed stable yet.
|
||||||
|
.SH "SEE ALSO"
|
||||||
|
.BR curl_multi_setopt "(3), " curl_multi_socket "(3) "
|
@@ -1,6 +1,6 @@
|
|||||||
.\" $Id$
|
.\" $Id$
|
||||||
.\"
|
.\"
|
||||||
.TH curl_multi_fdset 3 "25 Apr 2005" "libcurl 7.9.5" "libcurl Manual"
|
.TH curl_multi_fdset 3 "2 Jan 2006" "libcurl 7.16.0" "libcurl Manual"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
curl_multi_fdset - extracts file descriptor information from a multi handle
|
curl_multi_fdset - extracts file descriptor information from a multi handle
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
@@ -30,8 +30,12 @@ rather small (single-digit number of seconds) timeout and call
|
|||||||
\fIcurl_multi_perform\fP regularly - even if no activity has been seen on the
|
\fIcurl_multi_perform\fP regularly - even if no activity has been seen on the
|
||||||
fd_sets - as otherwise libcurl-internal retries and timeouts may not work as
|
fd_sets - as otherwise libcurl-internal retries and timeouts may not work as
|
||||||
you'd think and want.
|
you'd think and want.
|
||||||
|
|
||||||
|
Starting with libcurl 7.16.0, you should use \fBcurl_multi_timeout\fP to
|
||||||
|
figure out how long to wait for action.
|
||||||
.SH RETURN VALUE
|
.SH RETURN VALUE
|
||||||
CURLMcode type, general libcurl multi interface error code. See
|
CURLMcode type, general libcurl multi interface error code. See
|
||||||
\fIlibcurl-errors(3)\fP
|
\fIlibcurl-errors(3)\fP
|
||||||
.SH "SEE ALSO"
|
.SH "SEE ALSO"
|
||||||
.BR curl_multi_cleanup "(3)," curl_multi_init "(3)"
|
.BR curl_multi_cleanup "(3)," curl_multi_init "(3), "
|
||||||
|
.BR curl_multi_timeout "(3) "
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user