Compare commits
620 Commits
curl-7_14_
...
curl-7_15_
Author | SHA1 | Date | |
---|---|---|---|
![]() |
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 | ||
![]() |
f49df54a36 | ||
![]() |
952bbc4410 | ||
![]() |
1eb4b85d72 | ||
![]() |
59b6cb9e91 | ||
![]() |
e06afaeb7a | ||
![]() |
8c6f654b26 | ||
![]() |
1d8212e53a | ||
![]() |
083c5e17e1 | ||
![]() |
272231fb09 | ||
![]() |
67b4d9b232 | ||
![]() |
21709e1557 | ||
![]() |
9c312637d1 | ||
![]() |
feacad7f68 | ||
![]() |
6513303498 | ||
![]() |
3e2a52b034 | ||
![]() |
176d4e85e9 | ||
![]() |
84d30dffb6 | ||
![]() |
0fd282b078 | ||
![]() |
cdf4afbe50 | ||
![]() |
b222b2304e | ||
![]() |
fdf9900114 | ||
![]() |
5867eb2dd2 | ||
![]() |
61f145e3de | ||
![]() |
b97e7fc730 | ||
![]() |
01cbf08064 | ||
![]() |
fec632e948 | ||
![]() |
6aab5b57e1 | ||
![]() |
d2a27e02ce | ||
![]() |
b55506a76d | ||
![]() |
afc2aa2b3f | ||
![]() |
d055b269ed | ||
![]() |
8a246a4a9f | ||
![]() |
2f684351bf | ||
![]() |
74e5beab9d | ||
![]() |
b41765f441 | ||
![]() |
05a6013f42 | ||
![]() |
cfff544d67 | ||
![]() |
599d9642ca | ||
![]() |
0264faaa4e | ||
![]() |
4022a60ea7 | ||
![]() |
39e366fc11 | ||
![]() |
096675824f | ||
![]() |
80bfa76ac9 | ||
![]() |
b2e553a82e | ||
![]() |
772b64d9d3 | ||
![]() |
92c0de518e | ||
![]() |
ff96456513 | ||
![]() |
e89adbef51 | ||
![]() |
22a6a6cf81 | ||
![]() |
fd870e4e8a | ||
![]() |
d52ed3fff2 | ||
![]() |
bac17ab7d8 | ||
![]() |
9ace303528 | ||
![]() |
7e81c35cdc | ||
![]() |
0f125d9bcf | ||
![]() |
d4714517c0 | ||
![]() |
280e4bf4c3 | ||
![]() |
adf462fe05 | ||
![]() |
c2862742ab | ||
![]() |
8a712eb5af | ||
![]() |
d58790af17 | ||
![]() |
9ef7a13403 | ||
![]() |
a5da1219bb | ||
![]() |
be524fed38 | ||
![]() |
042016b85e | ||
![]() |
f6da574324 | ||
![]() |
b09d5c3135 | ||
![]() |
ec65c3fd53 | ||
![]() |
7ca2f31c8d | ||
![]() |
2275737a5d | ||
![]() |
5e3836055f | ||
![]() |
37a6a0bb3e | ||
![]() |
6bcca3eca9 | ||
![]() |
ce40b8d531 | ||
![]() |
9f109b94b8 | ||
![]() |
89024febde | ||
![]() |
b7a673c6e2 | ||
![]() |
7f68be770d | ||
![]() |
4f173f35db | ||
![]() |
ae9fbe573e | ||
![]() |
29676f473d | ||
![]() |
a5fcb26ab1 | ||
![]() |
d68b1a1e8c | ||
![]() |
bd8baed138 | ||
![]() |
00a7dda273 | ||
![]() |
4dba07c384 | ||
![]() |
4d39c6b7cc | ||
![]() |
7d6f6158c9 | ||
![]() |
6863dbbc0c | ||
![]() |
28b96efd8b | ||
![]() |
0f82af0f49 | ||
![]() |
f0d839436f | ||
![]() |
f1aa4b4127 | ||
![]() |
ccdb43f7f1 | ||
![]() |
72900f0f90 | ||
![]() |
3ad958ddb1 | ||
![]() |
2c77cc90f4 | ||
![]() |
db4c33b4fb | ||
![]() |
3fb04115fc | ||
![]() |
4faaa32aef | ||
![]() |
cab59b4c32 | ||
![]() |
931eff89f5 | ||
![]() |
175335808b | ||
![]() |
e00216581e | ||
![]() |
23951ec00c | ||
![]() |
a8fc5d0f9f | ||
![]() |
f5e85bab1c | ||
![]() |
9a44fa83dc | ||
![]() |
6b1e54da62 | ||
![]() |
b91421b107 | ||
![]() |
43b3954fa5 | ||
![]() |
80f2e3f263 | ||
![]() |
9ea423b4c1 | ||
![]() |
b259c9c535 | ||
![]() |
80f481a5f7 | ||
![]() |
115fe1b577 | ||
![]() |
06d6ea651e | ||
![]() |
966fa848a0 | ||
![]() |
6f8fe67ace | ||
![]() |
d49edc8e09 | ||
![]() |
3b9c20fe31 | ||
![]() |
bd72c5eacf | ||
![]() |
9d152a77fd | ||
![]() |
33dc28b905 | ||
![]() |
43ce64dcca | ||
![]() |
9e0882ba98 | ||
![]() |
c890149c8c | ||
![]() |
1a1ab2e2e8 | ||
![]() |
715b706caa | ||
![]() |
bfa9c42c25 | ||
![]() |
9d98f97e1b | ||
![]() |
5eb5ce6ff3 | ||
![]() |
be9c873a6e | ||
![]() |
034d80f6cd | ||
![]() |
021e786c71 | ||
![]() |
0c6bb8cb66 | ||
![]() |
4d7f08a99e | ||
![]() |
fdef584681 | ||
![]() |
f335bac8a3 | ||
![]() |
51369753bb | ||
![]() |
82a4c2bce3 | ||
![]() |
e73c6e039e | ||
![]() |
19bad0844f | ||
![]() |
96cec4dfd7 | ||
![]() |
943aea6267 | ||
![]() |
b433e4a1e7 | ||
![]() |
20f1966c0e | ||
![]() |
ab1f5c3edd | ||
![]() |
b2be6799f2 | ||
![]() |
ea2618fc6f | ||
![]() |
62fdf8eaed | ||
![]() |
d3569a3572 | ||
![]() |
89df76e449 | ||
![]() |
e5b2f33b4f | ||
![]() |
934d312f50 | ||
![]() |
68917eb517 | ||
![]() |
3beb2f6b5d | ||
![]() |
b29017f15b | ||
![]() |
db83a0ebbc | ||
![]() |
6d9fddb95d | ||
![]() |
4284190cc4 | ||
![]() |
5e4cbd2d24 | ||
![]() |
06c3bec65d | ||
![]() |
e8c3bb45ba | ||
![]() |
4ec55a964d | ||
![]() |
b9420864c0 | ||
![]() |
bf6588b6a7 | ||
![]() |
e43217e664 | ||
![]() |
e19ee2d102 | ||
![]() |
b4c53e2cfd | ||
![]() |
a2902de67c | ||
![]() |
da192f7955 | ||
![]() |
a2210d23c3 | ||
![]() |
bd5a622400 | ||
![]() |
b9494cb0d6 | ||
![]() |
0f73af4470 | ||
![]() |
45e26b5c02 | ||
![]() |
6af5ea38ce | ||
![]() |
b6f0aa4394 | ||
![]() |
774dab58f6 | ||
![]() |
e3bdb98f7a | ||
![]() |
58d628c9f8 | ||
![]() |
1e69394545 | ||
![]() |
1cf798ad14 | ||
![]() |
da3992d2e9 | ||
![]() |
48908e4633 | ||
![]() |
f5ae149338 | ||
![]() |
3fe5311967 | ||
![]() |
6a48639c68 | ||
![]() |
e7093b3ca8 | ||
![]() |
d0a4104c0c | ||
![]() |
90559bed53 | ||
![]() |
973a18cf03 | ||
![]() |
3c666ce57a | ||
![]() |
a1287ec64f | ||
![]() |
5fbfa1bfa8 | ||
![]() |
da3ecc91f8 | ||
![]() |
09c8f558f7 | ||
![]() |
528a149def | ||
![]() |
29e36afb6b | ||
![]() |
0e39543d35 | ||
![]() |
0de20d8ee6 | ||
![]() |
cd5de5c0e5 | ||
![]() |
bd5afc26bd | ||
![]() |
9542dfdcdc | ||
![]() |
97a6d7b1a8 | ||
![]() |
209b9d4374 | ||
![]() |
0b8ccd0ae7 | ||
![]() |
0b7f5ad508 | ||
![]() |
8a38805e82 | ||
![]() |
836d88a4b8 | ||
![]() |
d5268ed511 | ||
![]() |
0e7d93858d | ||
![]() |
2164d760b7 | ||
![]() |
b9c8de598b | ||
![]() |
9889a811db | ||
![]() |
9e38d882b9 | ||
![]() |
e8635044b5 | ||
![]() |
56dea0ac9a | ||
![]() |
e8b77477c7 | ||
![]() |
64298e528d | ||
![]() |
4f1465e7c7 | ||
![]() |
6120041b69 | ||
![]() |
8c1213627d | ||
![]() |
3e6ae6eeb8 | ||
![]() |
291e9aeabd | ||
![]() |
a3d776187a | ||
![]() |
e55f502e2f | ||
![]() |
e369270f88 | ||
![]() |
7e845e7cfd | ||
![]() |
56d9624b56 | ||
![]() |
911d135deb | ||
![]() |
8107b90678 | ||
![]() |
7722452b98 |
@@ -12,3 +12,4 @@ depcomp
|
|||||||
config.guess
|
config.guess
|
||||||
config.sub
|
config.sub
|
||||||
ltmain.sh
|
ltmain.sh
|
||||||
|
libcurl.pc
|
||||||
|
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
|
||||||
|
@@ -31,6 +31,9 @@ bin_SCRIPTS = curl-config
|
|||||||
SUBDIRS = lib src
|
SUBDIRS = lib src
|
||||||
DIST_SUBDIRS = $(SUBDIRS) tests include packages docs
|
DIST_SUBDIRS = $(SUBDIRS) tests include packages docs
|
||||||
|
|
||||||
|
pkgconfigdir = $(libdir)/pkgconfig
|
||||||
|
pkgconfig_DATA = libcurl.pc
|
||||||
|
|
||||||
dist-hook:
|
dist-hook:
|
||||||
rm -rf $(top_builddir)/tests/log
|
rm -rf $(top_builddir)/tests/log
|
||||||
find $(distdir) -name "*.dist" -exec rm {} \;
|
find $(distdir) -name "*.dist" -exec rm {} \;
|
||||||
|
27
README
27
README
@@ -32,31 +32,8 @@ 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/
|
|
||||||
Canada -- http://curl.meulie.net/
|
|
||||||
Denmark -- http://curl.cofman.dk/
|
|
||||||
Estonia -- http://curl.wildyou.net/
|
|
||||||
France -- http://curl.mirror.internet.tp/
|
|
||||||
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.netmirror.org/
|
|
||||||
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 (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
|
||||||
|
|
||||||
|
116
RELEASE-NOTES
116
RELEASE-NOTES
@@ -1,74 +1,72 @@
|
|||||||
Curl and libcurl 7.14.1
|
Curl and libcurl 7.15.4
|
||||||
|
|
||||||
Public curl release number: 89
|
Public curl release number: 94
|
||||||
Releases counted from the very beginning: 116
|
Releases counted from the very beginning: 121
|
||||||
Available command line options: 108
|
Available command line options: 112
|
||||||
Available curl_easy_setopt() options: 123
|
Available curl_easy_setopt() options: 132
|
||||||
Number of public functions in libcurl: 46
|
Number of public functions in libcurl: 49
|
||||||
Amount of public web site mirrors: 25
|
Amount of public web site mirrors: 33
|
||||||
Number of known libcurl bindings: 31
|
Number of known libcurl bindings: 32
|
||||||
Number of contributors: 447
|
Number of contributors: 492
|
||||||
|
|
||||||
This release includes the following changes:
|
This release includes the following changes:
|
||||||
|
|
||||||
o GNU GSS support
|
o NTLM2 session response support
|
||||||
o --ignore-content-length and CURLOPT_IGNORE_CONTENT_LENGTH added
|
o CURLOPT_COOKIELIST set to "SESS" clears all session cookies
|
||||||
o negotiates data connection SSL earlier when doing FTPS with PASV
|
o CURLINFO_LASTSOCKET returned sockets are now checked more before returned
|
||||||
o CURLOPT_COOKIELIST and CURLINFO_COOKIELIST
|
o curl-config got a --checkfor option to compare version numbers
|
||||||
o trailer support for chunked encoded data streams
|
o line end conversions for FTP ASCII transfers
|
||||||
o -x/CURL_PROXY strings may now contain user+password
|
o curl_multi_socket() API added (still mostly untested)
|
||||||
o --trace-time now outputs the full microsecond, all 6 digits
|
o conversion callback options for EBCDIC <=> ASCII conversions
|
||||||
|
o added CURLINFO_FTP_ENTRY_PATH
|
||||||
|
o less blocking for the multi interface during (Open)SSL connect negotiation
|
||||||
|
|
||||||
This release includes the following bugfixes:
|
This release includes the following bugfixes:
|
||||||
|
|
||||||
o MSVC build problem with the DSP file
|
o builds fine on cygwin
|
||||||
o windows threaded resolver access violation with multi interface
|
o md5-sess with Digest authentication
|
||||||
o test suite works with valgrind 3
|
o dict with letters such as space in a word
|
||||||
o CA cert verification with GnuTLS builds
|
o dict with url-encoded words in the URL
|
||||||
o handles expiry times in cookie files that go beyond 32 bits in size
|
o libcurl.m4 when default=yes but no libcurl was found
|
||||||
o several client problems with files, such as doing -d @file when the file
|
o numerous bugs fixed in the TFTP code
|
||||||
isn't readable now gets a warning displayed
|
o possible memory leak when adding easy handles to multi stack
|
||||||
o write callback abort didn't always "take"
|
o TFTP works in a more portable fashion (== on more platforms)
|
||||||
o the curl -z "bad syntax" warning is now hidden when -s is used
|
o WSAGetLastError() is now used (better) on Windows
|
||||||
o curl -d @nonexisting no longer makes a GET
|
o GnuTLS non-block case that could cause data trashing
|
||||||
o minor debug callback data size
|
o deflate code survives lack of zlib header
|
||||||
o date parsing of dates including daylight savings time zone names
|
o CURLOPT_INTERFACE works with hostname
|
||||||
o using NTLM over proxy with an FTP URL
|
o configure runs fine with ICC
|
||||||
o curl-config --features now displays SSL when built with GnuTLS too
|
o closed control connection with FTP when easy handle was removed from multi
|
||||||
o CURLOPT_HTTPGET, CURLOPT_POST and CURLOPT_HTTPPOST reset CURLOPT_NOBODY
|
o curl --trace crash when built with VS2005
|
||||||
o builds fine on AmigaOS again
|
o SSL connect time-out
|
||||||
o corrected date parsing on Windows with auto-DST-adjust enabled
|
o improved NTLM functionality
|
||||||
o treats CONNECT 407 responses with bodies better during Digest/NTLM auth
|
o following redirects with more than one question mark in source URL
|
||||||
o improved strerror_r() API guessing when cross-compiling
|
o fixed debug build crash with -d
|
||||||
o debug builds work on Tru64
|
o generates a fine AIX Toolbox RPM spec
|
||||||
o improved libcurl.m4
|
o treat FTP AUTH failures properly
|
||||||
o possible memory leak in windows name resolves
|
o TFTP transfers could trash data
|
||||||
o c-ares enabled build with mingw
|
o -d + -G combo crash
|
||||||
o proxy host set with numerical IPv6 address
|
|
||||||
o better treatment of binary zeroes in HTTP response headers
|
|
||||||
o fixed the notorious FTP server failure in the test suite
|
|
||||||
o better checking of text output in the test suite on windows
|
|
||||||
o FTP servers' TYPE command response check made less strict
|
|
||||||
o URL-without-slash as in http://somehost?data
|
|
||||||
o strerror_r() configure check for HP-UX 10.20 (and others)
|
|
||||||
o time parse work-around on HP-UX 10.20 since its gmtime_r() is broken
|
|
||||||
|
|
||||||
Other curl-related news since the previous public release:
|
Other curl-related news:
|
||||||
|
|
||||||
o cURLpp 0.5.2 was released at http://rrette.com/curlpp.html
|
o tclcurl 0.15.3 was released:
|
||||||
o Rexx/CURL 1.3 was released at http://rexxcurl.sf.net/
|
http://personal1.iddeo.es/andresgarci/tclcurl/english/
|
||||||
o http://curl.miscellaneousmirror.org is a new German curl mirror
|
|
||||||
o LuaCURL by Alexander Marinov at http://luacurl.luaforge.net/
|
New curl mirrors:
|
||||||
o http://curl.hostingzero.com/ is a new US curl mirror
|
|
||||||
o ocurl 0.2.1 was released at http://sourceforge.net/projects/ocurl
|
o http://curl.webdesign-zdg.de/ in Frankfurt, Germany
|
||||||
|
o http://curl.de-mirror.de/ in Aachen, Germany
|
||||||
|
o http://curl.osmirror.nl/ in Amsterdam, the Netherlands
|
||||||
|
o http://curl.usphp.com/ in Florida, US
|
||||||
|
o http://curl.oslevel.de/ in Karlsruhe, Germany
|
||||||
|
|
||||||
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:
|
||||||
|
|
||||||
John McGowan, Georg Wicherski, Andres Garcia, Eric Cooper, Todd Kulesza,
|
Dan Fandrich, Ilja van Sprundel, David McCreedy, Tor Arntsen, Xavier Bouchoux,
|
||||||
Tupone Alfredo, Gisle Vanem, David Shaw, Andrew Bushnell, Dan Fandrich,
|
David Byron, Michele Bini, Ates Goral, Katie Wang, Robson Braga Araujo,
|
||||||
Adrian Schuur, Diego Casorran, Peteris Krumins, Jon Grubbs, Christopher
|
Ale Vesely, Paul Querna, Gisle Vanem, Mark Eichin, Roland Blom, Andreas
|
||||||
R. Palmer, Mario Schroeder, Richard Clayton, James Bursa, Jeff Pohlmeyer,
|
Ntaflos, David Shaw, Michael Wallner, Olaf St<53>ben, Mikael Sennerholm,
|
||||||
Norbert Novotny, Toby Peterson, Simon Josefsson, Igor Polyakov, Kevin Lussier
|
Brian Dessent
|
||||||
|
|
||||||
Thanks! (and sorry if I forgot to mention someone)
|
Thanks! (and sorry if I forgot to mention someone)
|
||||||
|
11
TODO-RELEASE
11
TODO-RELEASE
@@ -1,12 +1,5 @@
|
|||||||
Issues not sorted in any particular order.
|
To get fixed in 7.15.4 (planned release: June 2006)
|
||||||
|
|
||||||
To get fixed in 7.14.1 (planned release: August 2005)
|
|
||||||
======================
|
======================
|
||||||
|
|
||||||
To get fixed in 7.14.2 (planned release: October 2005)
|
66 -
|
||||||
======================
|
|
||||||
|
|
||||||
60 - CONNECT 407 responses that kills the connection
|
|
||||||
|
|
||||||
63 -
|
|
||||||
|
|
||||||
|
600
acinclude.m4
600
acinclude.m4
@@ -1,3 +1,393 @@
|
|||||||
|
#***************************************************************************
|
||||||
|
# _ _ ____ _
|
||||||
|
# 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 CURL_CHECK_HEADER_WINDOWS
|
||||||
|
dnl -------------------------------------------------
|
||||||
|
dnl Check for compilable and valid windows.h header
|
||||||
|
|
||||||
|
AC_DEFUN([CURL_CHECK_HEADER_WINDOWS], [
|
||||||
|
AC_CACHE_CHECK([for windows.h], [ac_cv_header_windows_h], [
|
||||||
|
AC_COMPILE_IFELSE([
|
||||||
|
AC_LANG_PROGRAM([
|
||||||
|
#undef inline
|
||||||
|
#ifndef WIN32_LEAN_AND_MEAN
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#endif
|
||||||
|
#include <windows.h>
|
||||||
|
],[
|
||||||
|
int dummy=2*WINVER;
|
||||||
|
])
|
||||||
|
],[
|
||||||
|
ac_cv_header_windows_h="yes"
|
||||||
|
],[
|
||||||
|
ac_cv_header_windows_h="no"
|
||||||
|
])
|
||||||
|
])
|
||||||
|
if test "x$ac_cv_header_windows_h" = "xyes"; then
|
||||||
|
AC_DEFINE_UNQUOTED(HAVE_WINDOWS_H, 1,
|
||||||
|
[Define to 1 if you have the windows.h header file.])
|
||||||
|
AC_DEFINE_UNQUOTED(WIN32_LEAN_AND_MEAN, 1,
|
||||||
|
[Define to avoid automatic inclusion of winsock.h])
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
|
||||||
|
|
||||||
|
dnl CURL_CHECK_HEADER_WINSOCK
|
||||||
|
dnl -------------------------------------------------
|
||||||
|
dnl Check for compilable and valid winsock.h header
|
||||||
|
|
||||||
|
AC_DEFUN([CURL_CHECK_HEADER_WINSOCK], [
|
||||||
|
AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl
|
||||||
|
AC_CACHE_CHECK([for winsock.h], [ac_cv_header_winsock_h], [
|
||||||
|
AC_COMPILE_IFELSE([
|
||||||
|
AC_LANG_PROGRAM([
|
||||||
|
#undef inline
|
||||||
|
#ifndef WIN32_LEAN_AND_MEAN
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#endif
|
||||||
|
#include <windows.h>
|
||||||
|
#include <winsock.h>
|
||||||
|
],[
|
||||||
|
int dummy=WSACleanup();
|
||||||
|
])
|
||||||
|
],[
|
||||||
|
ac_cv_header_winsock_h="yes"
|
||||||
|
],[
|
||||||
|
ac_cv_header_winsock_h="no"
|
||||||
|
])
|
||||||
|
])
|
||||||
|
if test "x$ac_cv_header_winsock_h" = "xyes"; then
|
||||||
|
AC_DEFINE_UNQUOTED(HAVE_WINSOCK_H, 1,
|
||||||
|
[Define to 1 if you have the winsock.h header file.])
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
|
||||||
|
|
||||||
|
dnl CURL_CHECK_HEADER_WINSOCK2
|
||||||
|
dnl -------------------------------------------------
|
||||||
|
dnl Check for compilable and valid winsock2.h header
|
||||||
|
|
||||||
|
AC_DEFUN([CURL_CHECK_HEADER_WINSOCK2], [
|
||||||
|
AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl
|
||||||
|
AC_CACHE_CHECK([for winsock2.h], [ac_cv_header_winsock2_h], [
|
||||||
|
AC_COMPILE_IFELSE([
|
||||||
|
AC_LANG_PROGRAM([
|
||||||
|
#undef inline
|
||||||
|
#ifndef WIN32_LEAN_AND_MEAN
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#endif
|
||||||
|
#include <windows.h>
|
||||||
|
#include <winsock2.h>
|
||||||
|
],[
|
||||||
|
int dummy=2*IPPROTO_ESP;
|
||||||
|
])
|
||||||
|
],[
|
||||||
|
ac_cv_header_winsock2_h="yes"
|
||||||
|
],[
|
||||||
|
ac_cv_header_winsock2_h="no"
|
||||||
|
])
|
||||||
|
])
|
||||||
|
if test "x$ac_cv_header_winsock2_h" = "xyes"; then
|
||||||
|
AC_DEFINE_UNQUOTED(HAVE_WINSOCK2_H, 1,
|
||||||
|
[Define to 1 if you have the winsock2.h header file.])
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
|
||||||
|
|
||||||
|
dnl CURL_CHECK_HEADER_WS2TCPIP
|
||||||
|
dnl -------------------------------------------------
|
||||||
|
dnl Check for compilable and valid ws2tcpip.h header
|
||||||
|
|
||||||
|
AC_DEFUN([CURL_CHECK_HEADER_WS2TCPIP], [
|
||||||
|
AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl
|
||||||
|
AC_CACHE_CHECK([for ws2tcpip.h], [ac_cv_header_ws2tcpip_h], [
|
||||||
|
AC_COMPILE_IFELSE([
|
||||||
|
AC_LANG_PROGRAM([
|
||||||
|
#undef inline
|
||||||
|
#ifndef WIN32_LEAN_AND_MEAN
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#endif
|
||||||
|
#include <windows.h>
|
||||||
|
#include <winsock2.h>
|
||||||
|
#include <ws2tcpip.h>
|
||||||
|
],[
|
||||||
|
int dummy=2*IP_PKTINFO;
|
||||||
|
])
|
||||||
|
],[
|
||||||
|
ac_cv_header_ws2tcpip_h="yes"
|
||||||
|
],[
|
||||||
|
ac_cv_header_ws2tcpip_h="no"
|
||||||
|
])
|
||||||
|
])
|
||||||
|
if test "x$ac_cv_header_ws2tcpip_h" = "xyes"; then
|
||||||
|
AC_DEFINE_UNQUOTED(HAVE_WS2TCPIP_H, 1,
|
||||||
|
[Define to 1 if you have the ws2tcpip.h header file.])
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
|
||||||
|
|
||||||
|
dnl CURL_CHECK_TYPE_SOCKLEN_T
|
||||||
|
dnl -------------------------------------------------
|
||||||
|
dnl Check for existing socklen_t type, and provide
|
||||||
|
dnl an equivalent type if socklen_t not available
|
||||||
|
|
||||||
|
AC_DEFUN([CURL_CHECK_TYPE_SOCKLEN_T], [
|
||||||
|
AC_REQUIRE([CURL_CHECK_HEADER_WS2TCPIP])dnl
|
||||||
|
AC_CHECK_TYPE([socklen_t], ,[
|
||||||
|
AC_CACHE_CHECK([for socklen_t equivalent],
|
||||||
|
[curl_cv_socklen_t_equiv], [
|
||||||
|
curl_cv_socklen_t_equiv="unknown"
|
||||||
|
for arg2 in "struct sockaddr" void; do
|
||||||
|
for t in int size_t unsigned long "unsigned long"; do
|
||||||
|
AC_COMPILE_IFELSE([
|
||||||
|
AC_LANG_PROGRAM([
|
||||||
|
#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>
|
||||||
|
#else
|
||||||
|
#ifdef HAVE_WINSOCK_H
|
||||||
|
#include <winsock.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#ifdef HAVE_SYS_TYPES_H
|
||||||
|
#include <sys/types.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
int getpeername (int, $arg2 *, $t *);
|
||||||
|
],[
|
||||||
|
$t len=0;
|
||||||
|
getpeername(0,0,&len);
|
||||||
|
])
|
||||||
|
],[
|
||||||
|
curl_cv_socklen_t_equiv="$t"
|
||||||
|
break 2
|
||||||
|
])
|
||||||
|
done
|
||||||
|
done
|
||||||
|
])
|
||||||
|
if test "$curl_cv_socklen_t_equiv" = "unknown"; then
|
||||||
|
AC_MSG_ERROR([Cannot find a type to use in place of socklen_t])
|
||||||
|
else
|
||||||
|
AC_DEFINE_UNQUOTED(socklen_t, $curl_cv_socklen_t_equiv,
|
||||||
|
[type to use in place of socklen_t if not defined])
|
||||||
|
fi
|
||||||
|
],[
|
||||||
|
#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
|
||||||
|
#include <sys/types.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
])
|
||||||
|
])
|
||||||
|
|
||||||
|
|
||||||
|
dnl CURL_CHECK_FUNC_GETNAMEINFO
|
||||||
|
dnl -------------------------------------------------
|
||||||
|
dnl Test if the getnameinfo function is available,
|
||||||
|
dnl and check the types of five of its arguments.
|
||||||
|
dnl If the function succeeds HAVE_GETNAMEINFO will be
|
||||||
|
dnl defined, defining the types of the arguments in
|
||||||
|
dnl GETNAMEINFO_TYPE_ARG1, GETNAMEINFO_TYPE_ARG2,
|
||||||
|
dnl GETNAMEINFO_TYPE_ARG46 and GETNAMEINFO_TYPE_ARG7.
|
||||||
|
dnl This function is experimental and its results shall
|
||||||
|
dnl not be trusted while this notice is in place ------
|
||||||
|
|
||||||
|
AC_DEFUN([CURL_CHECK_FUNC_GETNAMEINFO], [
|
||||||
|
AC_REQUIRE([CURL_CHECK_HEADER_WS2TCPIP])dnl
|
||||||
|
AC_REQUIRE([CURL_CHECK_TYPE_SOCKLEN_T])dnl
|
||||||
|
AC_CHECK_HEADERS(sys/types.h sys/socket.h netdb.h)
|
||||||
|
#
|
||||||
|
AC_MSG_CHECKING([for getnameinfo])
|
||||||
|
AC_LINK_IFELSE([
|
||||||
|
AC_LANG_FUNC_LINK_TRY([getnameinfo])
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT([yes])
|
||||||
|
curl_cv_getnameinfo="yes"
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT([no])
|
||||||
|
curl_cv_getnameinfo="no"
|
||||||
|
])
|
||||||
|
#
|
||||||
|
if test "$curl_cv_getnameinfo" != "yes"; then
|
||||||
|
AC_MSG_CHECKING([deeper for getnameinfo])
|
||||||
|
AC_TRY_LINK([
|
||||||
|
],[
|
||||||
|
getnameinfo();
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT([yes])
|
||||||
|
curl_cv_getnameinfo="yes"
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT([but still no])
|
||||||
|
curl_cv_getnameinfo="no"
|
||||||
|
])
|
||||||
|
fi
|
||||||
|
#
|
||||||
|
if test "$curl_cv_getnameinfo" != "yes"; then
|
||||||
|
AC_MSG_CHECKING([deeper and deeper for getnameinfo])
|
||||||
|
AC_TRY_LINK([
|
||||||
|
#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
|
||||||
|
#include <sys/types.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_NETDB_H
|
||||||
|
#include <netdb.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
],[
|
||||||
|
getnameinfo(0, 0, 0, 0, 0, 0, 0);
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT([yes])
|
||||||
|
curl_cv_getnameinfo="yes"
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT([but still no])
|
||||||
|
curl_cv_getnameinfo="no"
|
||||||
|
])
|
||||||
|
fi
|
||||||
|
#
|
||||||
|
if test "$curl_cv_getnameinfo" = "yes"; then
|
||||||
|
AC_CACHE_CHECK([types of arguments for getnameinfo],
|
||||||
|
[curl_cv_func_getnameinfo_args], [
|
||||||
|
curl_cv_func_getnameinfo_args="unknown"
|
||||||
|
for gni_arg1 in 'struct sockaddr *' 'const struct sockaddr *' 'void *'; do
|
||||||
|
for gni_arg2 in 'socklen_t' 'size_t' 'int'; do
|
||||||
|
for gni_arg46 in 'size_t' 'int' 'socklen_t' 'unsigned int' 'DWORD'; do
|
||||||
|
for gni_arg7 in 'int' 'unsigned int'; do
|
||||||
|
AC_COMPILE_IFELSE([
|
||||||
|
AC_LANG_PROGRAM([
|
||||||
|
#undef inline
|
||||||
|
#ifdef HAVE_WINDOWS_H
|
||||||
|
#ifndef WIN32_LEAN_AND_MEAN
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#endif
|
||||||
|
#if (!defined(_WIN32_WINNT)) || (_WIN32_WINNT < 0x0501)
|
||||||
|
#undef _WIN32_WINNT
|
||||||
|
#define _WIN32_WINNT 0x0501
|
||||||
|
#endif
|
||||||
|
#include <windows.h>
|
||||||
|
#ifdef HAVE_WINSOCK2_H
|
||||||
|
#include <winsock2.h>
|
||||||
|
#ifdef HAVE_WS2TCPIP_H
|
||||||
|
#include <ws2tcpip.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#define GNICALLCONV WSAAPI
|
||||||
|
#else
|
||||||
|
#ifdef HAVE_SYS_TYPES_H
|
||||||
|
#include <sys/types.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_NETDB_H
|
||||||
|
#include <netdb.h>
|
||||||
|
#endif
|
||||||
|
#define GNICALLCONV
|
||||||
|
#endif
|
||||||
|
extern int GNICALLCONV getnameinfo($gni_arg1, $gni_arg2,
|
||||||
|
char *, $gni_arg46,
|
||||||
|
char *, $gni_arg46,
|
||||||
|
$gni_arg7);
|
||||||
|
],[
|
||||||
|
$gni_arg2 salen=0;
|
||||||
|
$gni_arg46 hostlen=0;
|
||||||
|
$gni_arg46 servlen=0;
|
||||||
|
$gni_arg7 flags=0;
|
||||||
|
int res = getnameinfo(0, salen, 0, hostlen, 0, servlen, flags);
|
||||||
|
])
|
||||||
|
],[
|
||||||
|
curl_cv_func_getnameinfo_args="$gni_arg1,$gni_arg2,$gni_arg46,$gni_arg7"
|
||||||
|
break 4
|
||||||
|
])
|
||||||
|
done
|
||||||
|
done
|
||||||
|
done
|
||||||
|
done
|
||||||
|
]) # AC_CACHE_CHECK
|
||||||
|
if test "$curl_cv_func_getnameinfo_args" = "unknown"; then
|
||||||
|
AC_MSG_WARN([Cannot find proper types to use for getnameinfo args])
|
||||||
|
AC_MSG_WARN([HAVE_GETNAMEINFO will not be defined])
|
||||||
|
else
|
||||||
|
gni_prev_IFS=$IFS; IFS=','
|
||||||
|
set dummy `echo "$curl_cv_func_getnameinfo_args" | sed 's/\*/\*/g'`
|
||||||
|
IFS=$gni_prev_IFS
|
||||||
|
shift
|
||||||
|
AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG1, $[1],
|
||||||
|
[Define to the type of arg 1 for getnameinfo.])
|
||||||
|
AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG2, $[2],
|
||||||
|
[Define to the type of arg 2 for getnameinfo.])
|
||||||
|
AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG46, $[3],
|
||||||
|
[Define to the type of args 4 and 6 for getnameinfo.])
|
||||||
|
AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG7, $[4],
|
||||||
|
[Define to the type of arg 7 for getnameinfo.])
|
||||||
|
AC_DEFINE_UNQUOTED(HAVE_GETNAMEINFO, 1,
|
||||||
|
[Define to 1 if you have the getnameinfo function.])
|
||||||
|
ac_cv_func_getnameinfo="yes"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
]) # AC_DEFUN
|
||||||
|
|
||||||
|
|
||||||
|
dnl CURL_CHECK_NONBLOCKING_SOCKET
|
||||||
|
dnl -------------------------------------------------
|
||||||
dnl Check for how to set a socket to non-blocking state. There seems to exist
|
dnl Check for how to set a socket to non-blocking state. There seems to exist
|
||||||
dnl four known different ways, with the one used almost everywhere being POSIX
|
dnl four known different ways, with the one used almost everywhere being POSIX
|
||||||
dnl and XPG3, while the other different ways for different systems (old BSD,
|
dnl and XPG3, while the other different ways for different systems (old BSD,
|
||||||
@@ -59,12 +449,27 @@ dnl FIONBIO test was also bad
|
|||||||
dnl the code was bad, try a different program now, test 3
|
dnl the code was bad, try a different program now, test 3
|
||||||
|
|
||||||
AC_TRY_COMPILE([
|
AC_TRY_COMPILE([
|
||||||
/* headers for ioctlsocket test (cygwin?) */
|
/* headers for ioctlsocket test (Windows) */
|
||||||
|
#undef inline
|
||||||
|
#ifdef HAVE_WINDOWS_H
|
||||||
|
#ifndef WIN32_LEAN_AND_MEAN
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#endif
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
#ifdef HAVE_WINSOCK2_H
|
||||||
|
#include <winsock2.h>
|
||||||
|
#else
|
||||||
|
#ifdef HAVE_WINSOCK_H
|
||||||
|
#include <winsock.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
],[
|
],[
|
||||||
/* ioctlsocket source code */
|
/* ioctlsocket source code */
|
||||||
int socket;
|
SOCKET sd;
|
||||||
unsigned long flags = ioctlsocket(socket, FIONBIO, &flags);
|
unsigned long flags = 0;
|
||||||
|
sd = socket(0, 0, 0);
|
||||||
|
ioctlsocket(sd, FIONBIO, &flags);
|
||||||
],[
|
],[
|
||||||
dnl ioctlsocket test was good
|
dnl ioctlsocket test was good
|
||||||
nonblock="ioctlsocket"
|
nonblock="ioctlsocket"
|
||||||
@@ -122,6 +527,9 @@ dnl end of non-blocking try-compile test
|
|||||||
fi
|
fi
|
||||||
])
|
])
|
||||||
|
|
||||||
|
|
||||||
|
dnl TYPE_SOCKADDR_STORAGE
|
||||||
|
dnl -------------------------------------------------
|
||||||
dnl Check for struct sockaddr_storage. Most IPv6-enabled hosts have it, but
|
dnl Check for struct sockaddr_storage. Most IPv6-enabled hosts have it, but
|
||||||
dnl AIX 4.3 is one known exception.
|
dnl AIX 4.3 is one known exception.
|
||||||
AC_DEFUN([TYPE_SOCKADDR_STORAGE],
|
AC_DEFUN([TYPE_SOCKADDR_STORAGE],
|
||||||
@@ -130,6 +538,16 @@ AC_DEFUN([TYPE_SOCKADDR_STORAGE],
|
|||||||
AC_DEFINE(HAVE_STRUCT_SOCKADDR_STORAGE, 1,
|
AC_DEFINE(HAVE_STRUCT_SOCKADDR_STORAGE, 1,
|
||||||
[if struct sockaddr_storage is defined]), ,
|
[if struct sockaddr_storage is defined]), ,
|
||||||
[
|
[
|
||||||
|
#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
|
||||||
@@ -141,56 +559,14 @@ AC_DEFUN([TYPE_SOCKADDR_STORAGE],
|
|||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_ARPA_INET_H
|
#ifdef HAVE_ARPA_INET_H
|
||||||
#include <arpa/inet.h>
|
#include <arpa/inet.h>
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
])
|
])
|
||||||
|
|
||||||
])
|
])
|
||||||
|
|
||||||
dnl Check for socklen_t: historically on BSD it is an int, and in
|
|
||||||
dnl POSIX 1g it is a type of its own, but some platforms use different
|
|
||||||
dnl types for the argument to getsockopt, getpeername, etc. So we
|
|
||||||
dnl have to test to find something that will work.
|
|
||||||
AC_DEFUN([TYPE_SOCKLEN_T],
|
|
||||||
[
|
|
||||||
AC_CHECK_TYPE([socklen_t], ,[
|
|
||||||
AC_MSG_CHECKING([for socklen_t equivalent])
|
|
||||||
AC_CACHE_VAL([curl_cv_socklen_t_equiv],
|
|
||||||
[
|
|
||||||
# Systems have either "struct sockaddr *" or
|
|
||||||
# "void *" as the second argument to getpeername
|
|
||||||
curl_cv_socklen_t_equiv=
|
|
||||||
for arg2 in "struct sockaddr" void; do
|
|
||||||
for t in int size_t unsigned long "unsigned long"; do
|
|
||||||
AC_TRY_COMPILE([
|
|
||||||
#ifdef HAVE_SYS_TYPES_H
|
|
||||||
#include <sys/types.h>
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_SYS_SOCKET_H
|
|
||||||
#include <sys/socket.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
int getpeername (int, $arg2 *, $t *);
|
|
||||||
],[
|
|
||||||
$t len;
|
|
||||||
getpeername(0,0,&len);
|
|
||||||
],[
|
|
||||||
curl_cv_socklen_t_equiv="$t"
|
|
||||||
break
|
|
||||||
])
|
|
||||||
done
|
|
||||||
done
|
|
||||||
|
|
||||||
if test "x$curl_cv_socklen_t_equiv" = x; then
|
|
||||||
AC_MSG_ERROR([Cannot find a type to use in place of socklen_t])
|
|
||||||
fi
|
|
||||||
])
|
|
||||||
AC_MSG_RESULT($curl_cv_socklen_t_equiv)
|
|
||||||
AC_DEFINE_UNQUOTED(socklen_t, $curl_cv_socklen_t_equiv,
|
|
||||||
[type to use in place of socklen_t if not defined])],
|
|
||||||
[#include <sys/types.h>
|
|
||||||
#include <sys/socket.h>])
|
|
||||||
])
|
|
||||||
|
|
||||||
|
dnl TYPE_IN_ADDR_T
|
||||||
|
dnl -------------------------------------------------
|
||||||
dnl Check for in_addr_t: it is used to receive the return code of inet_addr()
|
dnl Check for in_addr_t: it is used to receive the return code of inet_addr()
|
||||||
dnl and a few other things.
|
dnl and a few other things.
|
||||||
AC_DEFUN([TYPE_IN_ADDR_T],
|
AC_DEFUN([TYPE_IN_ADDR_T],
|
||||||
@@ -202,15 +578,33 @@ AC_DEFUN([TYPE_IN_ADDR_T],
|
|||||||
curl_cv_in_addr_t_equiv=
|
curl_cv_in_addr_t_equiv=
|
||||||
for t in "unsigned long" int size_t unsigned long; do
|
for t in "unsigned long" int size_t unsigned long; do
|
||||||
AC_TRY_COMPILE([
|
AC_TRY_COMPILE([
|
||||||
#ifdef HAVE_SYS_TYPES_H
|
#undef inline
|
||||||
#include <sys/types.h>
|
#ifdef HAVE_WINDOWS_H
|
||||||
#endif
|
#ifndef WIN32_LEAN_AND_MEAN
|
||||||
#ifdef HAVE_SYS_SOCKET_H
|
#define WIN32_LEAN_AND_MEAN
|
||||||
#include <sys/socket.h>
|
#endif
|
||||||
#endif
|
#include <windows.h>
|
||||||
#ifdef HAVE_ARPA_INET_H
|
#ifdef HAVE_WINSOCK2_H
|
||||||
#include <arpa/inet.h>
|
#include <winsock2.h>
|
||||||
#endif
|
#else
|
||||||
|
#ifdef HAVE_WINSOCK_H
|
||||||
|
#include <winsock.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#ifdef HAVE_SYS_TYPES_H
|
||||||
|
#include <sys/types.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_NETINET_IN_H
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_ARPA_INET_H
|
||||||
|
#include <arpa/inet.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
],[
|
],[
|
||||||
$t data = inet_addr ("1.2.3.4");
|
$t data = inet_addr ("1.2.3.4");
|
||||||
],[
|
],[
|
||||||
@@ -226,10 +620,36 @@ AC_DEFUN([TYPE_IN_ADDR_T],
|
|||||||
AC_MSG_RESULT($curl_cv_in_addr_t_equiv)
|
AC_MSG_RESULT($curl_cv_in_addr_t_equiv)
|
||||||
AC_DEFINE_UNQUOTED(in_addr_t, $curl_cv_in_addr_t_equiv,
|
AC_DEFINE_UNQUOTED(in_addr_t, $curl_cv_in_addr_t_equiv,
|
||||||
[type to use in place of in_addr_t if not defined])],
|
[type to use in place of in_addr_t if not defined])],
|
||||||
[#include <sys/types.h>
|
[
|
||||||
|
#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>
|
||||||
|
#else
|
||||||
|
#ifdef HAVE_WINSOCK_H
|
||||||
|
#include <winsock.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#ifdef HAVE_SYS_TYPES_H
|
||||||
|
#include <sys/types.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#include <arpa/inet.h>])
|
#endif
|
||||||
])
|
#ifdef HAVE_NETINET_IN_H
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_ARPA_INET_H
|
||||||
|
#include <arpa/inet.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
]) dnl AC_CHECK_TYPE
|
||||||
|
]) dnl AC_DEFUN
|
||||||
|
|
||||||
dnl ************************************************************
|
dnl ************************************************************
|
||||||
dnl check for "localhost", if it doesn't exist, we can't do the
|
dnl check for "localhost", if it doesn't exist, we can't do the
|
||||||
@@ -684,12 +1104,45 @@ if test "$ac_cv_func_gethostbyname_r" = "yes"; then
|
|||||||
fi
|
fi
|
||||||
])
|
])
|
||||||
|
|
||||||
|
|
||||||
|
dnl **********************************************************************
|
||||||
|
dnl CURL_DETECT_ICC ([ACTION-IF-YES])
|
||||||
|
dnl
|
||||||
|
dnl check if this is the Intel ICC compiler, and if so run the ACTION-IF-YES
|
||||||
|
dnl sets the $ICC variable to "yes" or "no"
|
||||||
|
dnl **********************************************************************
|
||||||
|
AC_DEFUN([CURL_DETECT_ICC],
|
||||||
|
[
|
||||||
|
ICC="no"
|
||||||
|
AC_MSG_CHECKING([for icc in use])
|
||||||
|
if test "$GCC" = "yes"; then
|
||||||
|
dnl check if this is icc acting as gcc in disguise
|
||||||
|
AC_EGREP_CPP([^__INTEL_COMPILER], [__INTEL_COMPILER],
|
||||||
|
dnl action if the text is found, this it has not been replaced by the
|
||||||
|
dnl cpp
|
||||||
|
ICC="no",
|
||||||
|
dnl the text was not found, it was replaced by the cpp
|
||||||
|
ICC="yes"
|
||||||
|
AC_MSG_RESULT([yes])
|
||||||
|
[$1]
|
||||||
|
)
|
||||||
|
fi
|
||||||
|
if test "$ICC" = "no"; then
|
||||||
|
# this is not ICC
|
||||||
|
AC_MSG_RESULT([no])
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
|
||||||
dnl We create a function for detecting which compiler we use and then set as
|
dnl We create a function for detecting which compiler we use and then set as
|
||||||
dnl pendantic compiler options as possible for that particular compiler. The
|
dnl pendantic compiler options as possible for that particular compiler. The
|
||||||
dnl options are only used for debug-builds.
|
dnl options are only used for debug-builds.
|
||||||
|
|
||||||
AC_DEFUN([CURL_CC_DEBUG_OPTS],
|
AC_DEFUN([CURL_CC_DEBUG_OPTS],
|
||||||
[
|
[
|
||||||
|
if test "z$ICC" = "z"; then
|
||||||
|
CURL_DETECT_ICC
|
||||||
|
fi
|
||||||
|
|
||||||
if test "$GCC" = "yes"; then
|
if test "$GCC" = "yes"; then
|
||||||
|
|
||||||
dnl figure out gcc version!
|
dnl figure out gcc version!
|
||||||
@@ -700,17 +1153,6 @@ AC_DEFUN([CURL_CC_DEBUG_OPTS],
|
|||||||
gccnum=`(expr $num1 "*" 100 + $num2) 2>/dev/null`
|
gccnum=`(expr $num1 "*" 100 + $num2) 2>/dev/null`
|
||||||
AC_MSG_RESULT($gccver)
|
AC_MSG_RESULT($gccver)
|
||||||
|
|
||||||
AC_MSG_CHECKING([if this is icc in disguise])
|
|
||||||
AC_EGREP_CPP([^__INTEL_COMPILER], [__INTEL_COMPILER],
|
|
||||||
dnl action if the text is found, this it has not been replaced by the
|
|
||||||
dnl cpp
|
|
||||||
ICC="no"
|
|
||||||
AC_MSG_RESULT([no]),
|
|
||||||
dnl the text was not found, it was replaced by the cpp
|
|
||||||
ICC="yes"
|
|
||||||
AC_MSG_RESULT([yes])
|
|
||||||
)
|
|
||||||
|
|
||||||
if test "$ICC" = "yes"; then
|
if test "$ICC" = "yes"; then
|
||||||
dnl this is icc, not gcc.
|
dnl this is icc, not gcc.
|
||||||
|
|
||||||
@@ -881,3 +1323,19 @@ else
|
|||||||
AC_MSG_RESULT($DLFOUNDFILE)
|
AC_MSG_RESULT($DLFOUNDFILE)
|
||||||
fi
|
fi
|
||||||
])
|
])
|
||||||
|
|
||||||
|
# This is only a temporary fix. This macro is here to replace the broken one
|
||||||
|
# delivered by the automake project (including the 1.9.6 release). As soon as
|
||||||
|
# they ship a working version we SHOULD remove this work-around.
|
||||||
|
|
||||||
|
AC_DEFUN([AM_MISSING_HAS_RUN],
|
||||||
|
[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
|
||||||
|
test x"${MISSING+set}" = xset || MISSING="\${SHELL} \"$am_aux_dir/missing\""
|
||||||
|
# Use eval to expand $SHELL
|
||||||
|
if eval "$MISSING --run true"; then
|
||||||
|
am_missing_run="$MISSING --run "
|
||||||
|
else
|
||||||
|
am_missing_run=
|
||||||
|
AC_MSG_WARN([`missing' script is too old or missing])
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
@@ -11,3 +11,6 @@ Dan Fandrich
|
|||||||
Gisle Vanem
|
Gisle Vanem
|
||||||
Gunter Knauf
|
Gunter Knauf
|
||||||
Henrik Stoerner
|
Henrik Stoerner
|
||||||
|
Yang Tse
|
||||||
|
Nick Mathewson
|
||||||
|
Alexander Lazic
|
||||||
|
49
ares/CHANGES
49
ares/CHANGES
@@ -1,5 +1,54 @@
|
|||||||
Changelog for the c-ares project
|
Changelog for the c-ares project
|
||||||
|
|
||||||
|
* 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
|
||||||
|
|
||||||
|
- Yang Tse fixed some send() / recv() compiler warnings
|
||||||
|
|
||||||
|
* September 18
|
||||||
|
|
||||||
|
- Added constants that will be used by ares_getaddrinfo
|
||||||
|
|
||||||
|
- Made ares_getnameinfo use the reentrant getservbyport (getservbyport_r) if it
|
||||||
|
is available to ensure it works properly in a threaded environment.
|
||||||
|
|
||||||
|
* September 10
|
||||||
|
|
||||||
|
- configure fix for detecting a member in the sockaddr_in6 struct which failed
|
||||||
|
on ipv6-enabled HP-UX 11.00
|
||||||
|
|
||||||
Version 1.3.0 (August 29, 2004)
|
Version 1.3.0 (August 29, 2004)
|
||||||
|
|
||||||
* August 21
|
* August 21
|
||||||
|
@@ -13,6 +13,7 @@ Makefile.in
|
|||||||
Makefile.dj
|
Makefile.dj
|
||||||
Makefile.m32
|
Makefile.m32
|
||||||
Makefile.netware
|
Makefile.netware
|
||||||
|
Makefile.vc6
|
||||||
install-sh
|
install-sh
|
||||||
mkinstalldirs
|
mkinstalldirs
|
||||||
configure
|
configure
|
||||||
|
@@ -4,10 +4,9 @@ lib_LTLIBRARIES = libcares.la
|
|||||||
|
|
||||||
man_MANS = $(MANPAGES)
|
man_MANS = $(MANPAGES)
|
||||||
|
|
||||||
MSVCFILES = vc/adig/adig.dep vc/adig/adig.dsp vc/adig/adig.mak \
|
MSVCFILES = vc/adig/adig.dep vc/adig/adig.dsp vc/vc.dsw vc/ahost/ahost.dep \
|
||||||
vc/adig/adig.plg vc/vc.dsw vc/ahost/ahost.dep vc/ahost/ahost.dsp \
|
vc/ahost/ahost.dsp vc/areslib/areslib.dep vc/areslib/areslib.dsp \
|
||||||
vc/ahost/ahost.mak vc/ahost/ahost.plg vc/areslib/areslib.dep \
|
vc/areslib/areslib.dsw
|
||||||
vc/areslib/areslib.dsp vc/areslib/areslib.mak vc/areslib/areslib.plg
|
|
||||||
|
|
||||||
# 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
|
||||||
@@ -44,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
|
||||||
|
@@ -9,7 +9,12 @@ include Makefile.inc
|
|||||||
WATT32_ROOT = $(subst \,/,$(WATT_ROOT))
|
WATT32_ROOT = $(subst \,/,$(WATT_ROOT))
|
||||||
|
|
||||||
CC = gcc
|
CC = gcc
|
||||||
CFLAGS = -O2 -Wall -DWATT32 -Dselect=select_s -I$(WATT32_ROOT)/inc
|
CFLAGS = -O2 -Wall -DWATT32 -Dselect=select_s -DHAVE_AF_INET6 \
|
||||||
|
-DHAVE_PF_INET6 -DHAVE_IOCTLSOCKET -DHAVE_STRUCT_IN6_ADDR \
|
||||||
|
-DHAVE_STRUCT_SOCKADDR_IN6 -DHAVE_STRUCT_ADDRINFO \
|
||||||
|
-DHAVE_ARPA_NAMESER_H -DNS_INADDRSZ=4 \
|
||||||
|
-DHAVE_SOCKADDR_IN6_SIN6_SCOPE_ID -I$(WATT32_ROOT)/inc
|
||||||
|
|
||||||
LDFLAGS = -s
|
LDFLAGS = -s
|
||||||
EX_LIBS = $(WATT32_ROOT)/lib/libwatt.a
|
EX_LIBS = $(WATT32_ROOT)/lib/libwatt.a
|
||||||
|
|
||||||
|
@@ -1,11 +1,11 @@
|
|||||||
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
|
||||||
|
@@ -7,29 +7,21 @@
|
|||||||
## Quick hack by Guenter; comments to: /dev/nul
|
## Quick hack by Guenter; comments to: /dev/nul
|
||||||
|
|
||||||
CC = gcc
|
CC = gcc
|
||||||
AR = ar
|
|
||||||
RANLIB = ranlib
|
RANLIB = ranlib
|
||||||
STRIP = strip -g
|
|
||||||
#RM = rm -f
|
|
||||||
|
|
||||||
########################################################
|
########################################################
|
||||||
## Nothing more to do below this line!
|
## Nothing more to do below this line!
|
||||||
|
|
||||||
LIB=libcares.a
|
LIB=libcares.a
|
||||||
CC=gcc
|
CC=gcc
|
||||||
#CPPFLAGS=@CPPFLAGS@
|
CFLAGS=-O2 -Wall
|
||||||
WARN_FLAGS=-Wall
|
|
||||||
CFLAGS=-O2
|
|
||||||
CFLAGS+=${WARN_CFLAGS} ${ERROR_CFLAGS}
|
|
||||||
DEFS=-DMINGW32
|
|
||||||
LDFLAGS=-s
|
LDFLAGS=-s
|
||||||
LIBS=-lwsock32
|
LIBS=-lwsock32
|
||||||
ALL_CFLAGS=${CPPFLAGS} ${CFLAGS} ${DEFS}
|
|
||||||
|
|
||||||
MANPAGES := $(patsubst %.c,%.o,$(wildcard ares_*.3))
|
MANPAGES := $(patsubst %.c,%.o,$(wildcard ares_*.3))
|
||||||
|
|
||||||
OBJS := $(patsubst %.c,%.o,$(wildcard ares_*.c))
|
OBJS := $(patsubst %.c,%.o,$(wildcard ares_*.c))
|
||||||
OBJS += windows_port.o
|
OBJS += windows_port.o inet_ntop.o inet_net_pton.o bitncmp.o
|
||||||
|
|
||||||
$(LIB): ${OBJS}
|
$(LIB): ${OBJS}
|
||||||
ar cru $@ ${OBJS}
|
ar cru $@ ${OBJS}
|
||||||
@@ -51,7 +43,7 @@ ahost.exe: ahost.o $(LIB)
|
|||||||
${OBJS}: ares.h ares_dns.h ares_private.h
|
${OBJS}: ares.h ares_dns.h ares_private.h
|
||||||
|
|
||||||
.c.o:
|
.c.o:
|
||||||
${CC} -c ${ALL_CFLAGS} $<
|
${CC} -c ${CFLAGS} $<
|
||||||
|
|
||||||
check:
|
check:
|
||||||
|
|
||||||
@@ -73,3 +65,4 @@ clean:
|
|||||||
|
|
||||||
distclean: clean
|
distclean: clean
|
||||||
rm -f config.cache config.log config.status Makefile
|
rm -f config.cache config.log config.status Makefile
|
||||||
|
|
||||||
|
@@ -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) >> $@
|
||||||
|
190
ares/Makefile.vc6
Normal file
190
ares/Makefile.vc6
Normal file
@@ -0,0 +1,190 @@
|
|||||||
|
# $Id$
|
||||||
|
#
|
||||||
|
# C-ares makefile for MSVC6+
|
||||||
|
# G. Vanem <giva@bgnett.no>.
|
||||||
|
#
|
||||||
|
|
||||||
|
CFG_MODEL = MD
|
||||||
|
DEBUG_MODEL = d
|
||||||
|
USE_WATT32 = 0
|
||||||
|
|
||||||
|
#
|
||||||
|
# Configurations:
|
||||||
|
# -MD - msvcrt.dll, threads, release (normal)
|
||||||
|
# -MDd - msvcrtd.dll, threads, debug
|
||||||
|
# -ML - libc, no threads, release
|
||||||
|
# -MLd - libc, no threads, debug
|
||||||
|
# -MT - libc, threads, release
|
||||||
|
# -MTd - libc, threads, debug
|
||||||
|
|
||||||
|
CC = cl
|
||||||
|
|
||||||
|
CFLAGS = -nologo -$(CFG_MODEL)$(DEBUG_MODEL) -W3 -Yd -Zi
|
||||||
|
LDFLAGS = -machine:i386 -map
|
||||||
|
|
||||||
|
OBJ_DIR = VC6_obj
|
||||||
|
DEF_FILE = cares.def
|
||||||
|
|
||||||
|
!if "$(USE_WATT32)" == "1"
|
||||||
|
CFLAGS = $(CFLAGS) -UWIN32 -DWATT32 -I$(WATT_ROOT)\inc
|
||||||
|
EX_LIBS = $(WATT_ROOT)\lib\wattcpvc_imp.lib
|
||||||
|
|
||||||
|
!else
|
||||||
|
CFLAGS = $(CFLAGS) -DWIN32 -DWIN32_LEAN_AND_MEAN
|
||||||
|
EX_LIBS = advapi32.lib ws2_32.lib
|
||||||
|
!endif
|
||||||
|
|
||||||
|
!if "$(DEBUG_MODEL)" == "d"
|
||||||
|
CFLAGS = $(CFLAGS) -D_DEBUG -GZ
|
||||||
|
LDFLAGS = $(LDFLAGS) -debug -fixed:no
|
||||||
|
|
||||||
|
!else
|
||||||
|
CFLAGS = $(CFLAGS) -O2 -Og
|
||||||
|
LDFLAGS = $(LDFLAGS) -release
|
||||||
|
!endif
|
||||||
|
|
||||||
|
OBJECTS = $(OBJ_DIR)\ares_fds.obj \
|
||||||
|
$(OBJ_DIR)\ares_process.obj \
|
||||||
|
$(OBJ_DIR)\ares_free_hostent.obj \
|
||||||
|
$(OBJ_DIR)\ares_query.obj \
|
||||||
|
$(OBJ_DIR)\ares__close_sockets.obj \
|
||||||
|
$(OBJ_DIR)\ares_free_string.obj \
|
||||||
|
$(OBJ_DIR)\ares_search.obj \
|
||||||
|
$(OBJ_DIR)\ares__get_hostent.obj \
|
||||||
|
$(OBJ_DIR)\ares_gethostbyaddr.obj \
|
||||||
|
$(OBJ_DIR)\ares_getsock.obj \
|
||||||
|
$(OBJ_DIR)\ares_send.obj \
|
||||||
|
$(OBJ_DIR)\ares__read_line.obj \
|
||||||
|
$(OBJ_DIR)\ares_gethostbyname.obj \
|
||||||
|
$(OBJ_DIR)\ares_getnameinfo.obj \
|
||||||
|
$(OBJ_DIR)\ares_strerror.obj \
|
||||||
|
$(OBJ_DIR)\ares_cancel.obj \
|
||||||
|
$(OBJ_DIR)\ares_init.obj \
|
||||||
|
$(OBJ_DIR)\ares_timeout.obj \
|
||||||
|
$(OBJ_DIR)\ares_destroy.obj \
|
||||||
|
$(OBJ_DIR)\ares_mkquery.obj \
|
||||||
|
$(OBJ_DIR)\ares_version.obj \
|
||||||
|
$(OBJ_DIR)\ares_expand_name.obj \
|
||||||
|
$(OBJ_DIR)\ares_parse_a_reply.obj \
|
||||||
|
$(OBJ_DIR)\ares_parse_aaaa_reply.obj \
|
||||||
|
$(OBJ_DIR)\windows_port.obj \
|
||||||
|
$(OBJ_DIR)\ares_expand_string.obj \
|
||||||
|
$(OBJ_DIR)\ares_parse_ptr_reply.obj \
|
||||||
|
$(OBJ_DIR)\bitncmp.obj \
|
||||||
|
$(OBJ_DIR)\inet_net_pton.obj \
|
||||||
|
$(OBJ_DIR)\inet_ntop.obj
|
||||||
|
|
||||||
|
all: $(OBJ_DIR) cares.lib cares.dll cares_imp.lib ahost.exe adig.exe
|
||||||
|
|
||||||
|
$(OBJ_DIR):
|
||||||
|
mkdir $(OBJ_DIR)
|
||||||
|
|
||||||
|
cares.lib: $(OBJ_DIR) $(OBJECTS)
|
||||||
|
lib -nologo -out:$@ $(OBJECTS)
|
||||||
|
|
||||||
|
cares_imp.lib cares.dll: $(OBJ_DIR) $(DEF_FILE) $(OBJECTS)
|
||||||
|
link $(LDFLAGS) -dll -implib:cares_imp.lib -out:cares.dll \
|
||||||
|
-def:$(DEF_FILE) $(OBJECTS) $(EX_LIBS)
|
||||||
|
|
||||||
|
$(DEF_FILE): $(OBJECTS) Makefile.VC6
|
||||||
|
@echo ; Generated. DO NOT EDIT > $@
|
||||||
|
@echo LIBRARY cares.dll >> $@
|
||||||
|
@echo EXPORTS >> $@
|
||||||
|
@echo ares_cancel >> $@
|
||||||
|
@echo ares_destroy >> $@
|
||||||
|
@echo ares_expand_name >> $@
|
||||||
|
@echo ares_expand_string >> $@
|
||||||
|
@echo ares_fds >> $@
|
||||||
|
@echo ares_free_hostent >> $@
|
||||||
|
@echo ares_free_string >> $@
|
||||||
|
@echo ares_gethostbyaddr >> $@
|
||||||
|
@echo ares_gethostbyname >> $@
|
||||||
|
@echo ares_getsock >> $@
|
||||||
|
@echo ares_init >> $@
|
||||||
|
@echo ares_init_options >> $@
|
||||||
|
@echo ares_mkquery >> $@
|
||||||
|
@echo ares_parse_a_reply >> $@
|
||||||
|
@echo ares_parse_ptr_reply >> $@
|
||||||
|
@echo ares_process >> $@
|
||||||
|
@echo ares_query >> $@
|
||||||
|
@echo ares_search >> $@
|
||||||
|
@echo ares_strerror >> $@
|
||||||
|
@echo ares_strncasecmp >> $@
|
||||||
|
@echo ares_strcasecmp >> $@
|
||||||
|
@echo ares_timeout >> $@
|
||||||
|
@echo ares_version >> $@
|
||||||
|
@echo ares_inet_net_pton >> $@
|
||||||
|
@echo ares_inet_ntop >> $@
|
||||||
|
@echo ares_inet_pton >> $@
|
||||||
|
@echo ares_writev >> $@
|
||||||
|
@echo ares_getnameinfo >> $@
|
||||||
|
@echo ares_gettimeofday >> $@
|
||||||
|
@echo ares_parse_aaaa_reply >> $@
|
||||||
|
|
||||||
|
ahost.exe: $(OBJ_DIR) $(OBJ_DIR)\ahost.obj cares_imp.lib
|
||||||
|
link $(LDFLAGS) -out:$@ $(OBJ_DIR)\ahost.obj cares_imp.lib $(EX_LIBS)
|
||||||
|
|
||||||
|
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)
|
||||||
|
|
||||||
|
clean:
|
||||||
|
- del $(OBJ_DIR)\*.obj *.ilk *.pdb *.pbt *.pbi *.pbo *._xe *.map
|
||||||
|
|
||||||
|
vclean realclean: clean
|
||||||
|
- del $(DEF_FILE) cares.lib cares_imp.* cares.dll ahost.exe adig.exe
|
||||||
|
- rd $(OBJ_DIR)
|
||||||
|
|
||||||
|
.c{$(OBJ_DIR)}.obj:
|
||||||
|
$(CC) $(CFLAGS) -Fo$*.obj -c $<
|
||||||
|
|
||||||
|
#
|
||||||
|
# Copyright "gcc -MM .."
|
||||||
|
#
|
||||||
|
$(OBJ_DIR)\ares_fds.obj: ares_fds.c setup.h ares.h ares_private.h ares_ipv6.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
|
||||||
|
$(OBJ_DIR)\ares_query.obj: ares_query.c setup.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 ares.h \
|
||||||
|
ares_private.h ares_ipv6.h
|
||||||
|
$(OBJ_DIR)\ares_free_string.obj: ares_free_string.c setup.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
|
||||||
|
$(OBJ_DIR)\ares_send.obj: ares_send.c setup.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 ares.h ares_private.h \
|
||||||
|
ares_ipv6.h
|
||||||
|
$(OBJ_DIR)\ares_gethostbyname.obj: ares_gethostbyname.c setup.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 ares.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
|
||||||
|
$(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)\inet_ntop.obj: inet_ntop.c setup.h nameser.h ares_ipv6.h inet_ntop.h
|
@@ -1,3 +1,372 @@
|
|||||||
|
|
||||||
|
|
||||||
|
dnl CURL_CHECK_HEADER_WINDOWS
|
||||||
|
dnl -------------------------------------------------
|
||||||
|
dnl Check for compilable and valid windows.h header
|
||||||
|
|
||||||
|
AC_DEFUN([CURL_CHECK_HEADER_WINDOWS], [
|
||||||
|
AC_CACHE_CHECK([for windows.h], [ac_cv_header_windows_h], [
|
||||||
|
AC_COMPILE_IFELSE([
|
||||||
|
AC_LANG_PROGRAM([
|
||||||
|
#undef inline
|
||||||
|
#ifndef WIN32_LEAN_AND_MEAN
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#endif
|
||||||
|
#include <windows.h>
|
||||||
|
],[
|
||||||
|
int dummy=2*WINVER;
|
||||||
|
])
|
||||||
|
],[
|
||||||
|
ac_cv_header_windows_h="yes"
|
||||||
|
],[
|
||||||
|
ac_cv_header_windows_h="no"
|
||||||
|
])
|
||||||
|
])
|
||||||
|
if test "x$ac_cv_header_windows_h" = "xyes"; then
|
||||||
|
AC_DEFINE_UNQUOTED(HAVE_WINDOWS_H, 1,
|
||||||
|
[Define to 1 if you have the windows.h header file.])
|
||||||
|
AC_DEFINE_UNQUOTED(WIN32_LEAN_AND_MEAN, 1,
|
||||||
|
[Define to avoid automatic inclusion of winsock.h])
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
|
||||||
|
|
||||||
|
dnl CURL_CHECK_HEADER_WINSOCK
|
||||||
|
dnl -------------------------------------------------
|
||||||
|
dnl Check for compilable and valid winsock.h header
|
||||||
|
|
||||||
|
AC_DEFUN([CURL_CHECK_HEADER_WINSOCK], [
|
||||||
|
AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl
|
||||||
|
AC_CACHE_CHECK([for winsock.h], [ac_cv_header_winsock_h], [
|
||||||
|
AC_COMPILE_IFELSE([
|
||||||
|
AC_LANG_PROGRAM([
|
||||||
|
#undef inline
|
||||||
|
#ifndef WIN32_LEAN_AND_MEAN
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#endif
|
||||||
|
#include <windows.h>
|
||||||
|
#include <winsock.h>
|
||||||
|
],[
|
||||||
|
int dummy=WSACleanup();
|
||||||
|
])
|
||||||
|
],[
|
||||||
|
ac_cv_header_winsock_h="yes"
|
||||||
|
],[
|
||||||
|
ac_cv_header_winsock_h="no"
|
||||||
|
])
|
||||||
|
])
|
||||||
|
if test "x$ac_cv_header_winsock_h" = "xyes"; then
|
||||||
|
AC_DEFINE_UNQUOTED(HAVE_WINSOCK_H, 1,
|
||||||
|
[Define to 1 if you have the winsock.h header file.])
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
|
||||||
|
|
||||||
|
dnl CURL_CHECK_HEADER_WINSOCK2
|
||||||
|
dnl -------------------------------------------------
|
||||||
|
dnl Check for compilable and valid winsock2.h header
|
||||||
|
|
||||||
|
AC_DEFUN([CURL_CHECK_HEADER_WINSOCK2], [
|
||||||
|
AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl
|
||||||
|
AC_CACHE_CHECK([for winsock2.h], [ac_cv_header_winsock2_h], [
|
||||||
|
AC_COMPILE_IFELSE([
|
||||||
|
AC_LANG_PROGRAM([
|
||||||
|
#undef inline
|
||||||
|
#ifndef WIN32_LEAN_AND_MEAN
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#endif
|
||||||
|
#include <windows.h>
|
||||||
|
#include <winsock2.h>
|
||||||
|
],[
|
||||||
|
int dummy=2*IPPROTO_ESP;
|
||||||
|
])
|
||||||
|
],[
|
||||||
|
ac_cv_header_winsock2_h="yes"
|
||||||
|
],[
|
||||||
|
ac_cv_header_winsock2_h="no"
|
||||||
|
])
|
||||||
|
])
|
||||||
|
if test "x$ac_cv_header_winsock2_h" = "xyes"; then
|
||||||
|
AC_DEFINE_UNQUOTED(HAVE_WINSOCK2_H, 1,
|
||||||
|
[Define to 1 if you have the winsock2.h header file.])
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
|
||||||
|
|
||||||
|
dnl CURL_CHECK_HEADER_WS2TCPIP
|
||||||
|
dnl -------------------------------------------------
|
||||||
|
dnl Check for compilable and valid ws2tcpip.h header
|
||||||
|
|
||||||
|
AC_DEFUN([CURL_CHECK_HEADER_WS2TCPIP], [
|
||||||
|
AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl
|
||||||
|
AC_CACHE_CHECK([for ws2tcpip.h], [ac_cv_header_ws2tcpip_h], [
|
||||||
|
AC_COMPILE_IFELSE([
|
||||||
|
AC_LANG_PROGRAM([
|
||||||
|
#undef inline
|
||||||
|
#ifndef WIN32_LEAN_AND_MEAN
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#endif
|
||||||
|
#include <windows.h>
|
||||||
|
#include <winsock2.h>
|
||||||
|
#include <ws2tcpip.h>
|
||||||
|
],[
|
||||||
|
int dummy=2*IP_PKTINFO;
|
||||||
|
])
|
||||||
|
],[
|
||||||
|
ac_cv_header_ws2tcpip_h="yes"
|
||||||
|
],[
|
||||||
|
ac_cv_header_ws2tcpip_h="no"
|
||||||
|
])
|
||||||
|
])
|
||||||
|
if test "x$ac_cv_header_ws2tcpip_h" = "xyes"; then
|
||||||
|
AC_DEFINE_UNQUOTED(HAVE_WS2TCPIP_H, 1,
|
||||||
|
[Define to 1 if you have the ws2tcpip.h header file.])
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
|
||||||
|
|
||||||
|
dnl CURL_CHECK_TYPE_SOCKLEN_T
|
||||||
|
dnl -------------------------------------------------
|
||||||
|
dnl Check for existing socklen_t type, and provide
|
||||||
|
dnl an equivalent type if socklen_t not available
|
||||||
|
|
||||||
|
AC_DEFUN([CURL_CHECK_TYPE_SOCKLEN_T], [
|
||||||
|
AC_REQUIRE([CURL_CHECK_HEADER_WS2TCPIP])dnl
|
||||||
|
AC_CHECK_TYPE([socklen_t], ,[
|
||||||
|
AC_CACHE_CHECK([for socklen_t equivalent],
|
||||||
|
[curl_cv_socklen_t_equiv], [
|
||||||
|
curl_cv_socklen_t_equiv="unknown"
|
||||||
|
for arg2 in "struct sockaddr" void; do
|
||||||
|
for t in int size_t unsigned long "unsigned long"; do
|
||||||
|
AC_COMPILE_IFELSE([
|
||||||
|
AC_LANG_PROGRAM([
|
||||||
|
#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>
|
||||||
|
#else
|
||||||
|
#ifdef HAVE_WINSOCK_H
|
||||||
|
#include <winsock.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#ifdef HAVE_SYS_TYPES_H
|
||||||
|
#include <sys/types.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
int getpeername (int, $arg2 *, $t *);
|
||||||
|
],[
|
||||||
|
$t len=0;
|
||||||
|
getpeername(0,0,&len);
|
||||||
|
])
|
||||||
|
],[
|
||||||
|
curl_cv_socklen_t_equiv="$t"
|
||||||
|
break 2
|
||||||
|
])
|
||||||
|
done
|
||||||
|
done
|
||||||
|
])
|
||||||
|
if test "$curl_cv_socklen_t_equiv" = "unknown"; then
|
||||||
|
AC_MSG_ERROR([Cannot find a type to use in place of socklen_t])
|
||||||
|
else
|
||||||
|
AC_DEFINE_UNQUOTED(socklen_t, $curl_cv_socklen_t_equiv,
|
||||||
|
[type to use in place of socklen_t if not defined])
|
||||||
|
fi
|
||||||
|
],[
|
||||||
|
#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
|
||||||
|
#include <sys/types.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
])
|
||||||
|
])
|
||||||
|
|
||||||
|
|
||||||
|
dnl CURL_CHECK_FUNC_GETNAMEINFO
|
||||||
|
dnl -------------------------------------------------
|
||||||
|
dnl Test if the getnameinfo function is available,
|
||||||
|
dnl and check the types of five of its arguments.
|
||||||
|
dnl If the function succeeds HAVE_GETNAMEINFO will be
|
||||||
|
dnl defined, defining the types of the arguments in
|
||||||
|
dnl GETNAMEINFO_TYPE_ARG1, GETNAMEINFO_TYPE_ARG2,
|
||||||
|
dnl GETNAMEINFO_TYPE_ARG46 and GETNAMEINFO_TYPE_ARG7.
|
||||||
|
dnl This function is experimental and its results shall
|
||||||
|
dnl not be trusted while this notice is in place ------
|
||||||
|
|
||||||
|
AC_DEFUN([CURL_CHECK_FUNC_GETNAMEINFO], [
|
||||||
|
AC_REQUIRE([CURL_CHECK_HEADER_WS2TCPIP])dnl
|
||||||
|
AC_REQUIRE([CURL_CHECK_TYPE_SOCKLEN_T])dnl
|
||||||
|
AC_CHECK_HEADERS(sys/types.h sys/socket.h netdb.h)
|
||||||
|
#
|
||||||
|
AC_MSG_CHECKING([for getnameinfo])
|
||||||
|
AC_LINK_IFELSE([
|
||||||
|
AC_LANG_FUNC_LINK_TRY([getnameinfo])
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT([yes])
|
||||||
|
curl_cv_getnameinfo="yes"
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT([no])
|
||||||
|
curl_cv_getnameinfo="no"
|
||||||
|
])
|
||||||
|
#
|
||||||
|
if test "$curl_cv_getnameinfo" != "yes"; then
|
||||||
|
AC_MSG_CHECKING([deeper for getnameinfo])
|
||||||
|
AC_TRY_LINK([
|
||||||
|
],[
|
||||||
|
getnameinfo();
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT([yes])
|
||||||
|
curl_cv_getnameinfo="yes"
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT([but still no])
|
||||||
|
curl_cv_getnameinfo="no"
|
||||||
|
])
|
||||||
|
fi
|
||||||
|
#
|
||||||
|
if test "$curl_cv_getnameinfo" != "yes"; then
|
||||||
|
AC_MSG_CHECKING([deeper and deeper for getnameinfo])
|
||||||
|
AC_TRY_LINK([
|
||||||
|
#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
|
||||||
|
#include <sys/types.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_NETDB_H
|
||||||
|
#include <netdb.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
],[
|
||||||
|
getnameinfo(0, 0, 0, 0, 0, 0, 0);
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT([yes])
|
||||||
|
curl_cv_getnameinfo="yes"
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT([but still no])
|
||||||
|
curl_cv_getnameinfo="no"
|
||||||
|
])
|
||||||
|
fi
|
||||||
|
#
|
||||||
|
if test "$curl_cv_getnameinfo" = "yes"; then
|
||||||
|
AC_CACHE_CHECK([types of arguments for getnameinfo],
|
||||||
|
[curl_cv_func_getnameinfo_args], [
|
||||||
|
curl_cv_func_getnameinfo_args="unknown"
|
||||||
|
for gni_arg1 in 'struct sockaddr *' 'const struct sockaddr *' 'void *'; do
|
||||||
|
for gni_arg2 in 'socklen_t' 'size_t' 'int'; do
|
||||||
|
for gni_arg46 in 'size_t' 'int' 'socklen_t' 'unsigned int' 'DWORD'; do
|
||||||
|
for gni_arg7 in 'int' 'unsigned int'; do
|
||||||
|
AC_COMPILE_IFELSE([
|
||||||
|
AC_LANG_PROGRAM([
|
||||||
|
#undef inline
|
||||||
|
#ifdef HAVE_WINDOWS_H
|
||||||
|
#ifndef WIN32_LEAN_AND_MEAN
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#endif
|
||||||
|
#if (!defined(_WIN32_WINNT)) || (_WIN32_WINNT < 0x0501)
|
||||||
|
#undef _WIN32_WINNT
|
||||||
|
#define _WIN32_WINNT 0x0501
|
||||||
|
#endif
|
||||||
|
#include <windows.h>
|
||||||
|
#ifdef HAVE_WINSOCK2_H
|
||||||
|
#include <winsock2.h>
|
||||||
|
#ifdef HAVE_WS2TCPIP_H
|
||||||
|
#include <ws2tcpip.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#define GNICALLCONV WSAAPI
|
||||||
|
#else
|
||||||
|
#ifdef HAVE_SYS_TYPES_H
|
||||||
|
#include <sys/types.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_NETDB_H
|
||||||
|
#include <netdb.h>
|
||||||
|
#endif
|
||||||
|
#define GNICALLCONV
|
||||||
|
#endif
|
||||||
|
extern int GNICALLCONV getnameinfo($gni_arg1, $gni_arg2,
|
||||||
|
char *, $gni_arg46,
|
||||||
|
char *, $gni_arg46,
|
||||||
|
$gni_arg7);
|
||||||
|
],[
|
||||||
|
$gni_arg2 salen=0;
|
||||||
|
$gni_arg46 hostlen=0;
|
||||||
|
$gni_arg46 servlen=0;
|
||||||
|
$gni_arg7 flags=0;
|
||||||
|
int res = getnameinfo(0, salen, 0, hostlen, 0, servlen, flags);
|
||||||
|
])
|
||||||
|
],[
|
||||||
|
curl_cv_func_getnameinfo_args="$gni_arg1,$gni_arg2,$gni_arg46,$gni_arg7"
|
||||||
|
break 4
|
||||||
|
])
|
||||||
|
done
|
||||||
|
done
|
||||||
|
done
|
||||||
|
done
|
||||||
|
]) # AC_CACHE_CHECK
|
||||||
|
if test "$curl_cv_func_getnameinfo_args" = "unknown"; then
|
||||||
|
AC_MSG_WARN([Cannot find proper types to use for getnameinfo args])
|
||||||
|
AC_MSG_WARN([HAVE_GETNAMEINFO will not be defined])
|
||||||
|
else
|
||||||
|
gni_prev_IFS=$IFS; IFS=','
|
||||||
|
set dummy `echo "$curl_cv_func_getnameinfo_args" | sed 's/\*/\*/g'`
|
||||||
|
IFS=$gni_prev_IFS
|
||||||
|
shift
|
||||||
|
AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG1, $[1],
|
||||||
|
[Define to the type of arg 1 for getnameinfo.])
|
||||||
|
AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG2, $[2],
|
||||||
|
[Define to the type of arg 2 for getnameinfo.])
|
||||||
|
AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG46, $[3],
|
||||||
|
[Define to the type of args 4 and 6 for getnameinfo.])
|
||||||
|
AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG7, $[4],
|
||||||
|
[Define to the type of arg 7 for getnameinfo.])
|
||||||
|
AC_DEFINE_UNQUOTED(HAVE_GETNAMEINFO, 1,
|
||||||
|
[Define to 1 if you have the getnameinfo function.])
|
||||||
|
ac_cv_func_getnameinfo="yes"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
]) # AC_DEFUN
|
||||||
|
|
||||||
|
|
||||||
|
dnl CURL_CHECK_NONBLOCKING_SOCKET
|
||||||
|
dnl -------------------------------------------------
|
||||||
dnl Check for how to set a socket to non-blocking state. There seems to exist
|
dnl Check for how to set a socket to non-blocking state. There seems to exist
|
||||||
dnl four known different ways, with the one used almost everywhere being POSIX
|
dnl four known different ways, with the one used almost everywhere being POSIX
|
||||||
dnl and XPG3, while the other different ways for different systems (old BSD,
|
dnl and XPG3, while the other different ways for different systems (old BSD,
|
||||||
@@ -59,12 +428,27 @@ dnl FIONBIO test was also bad
|
|||||||
dnl the code was bad, try a different program now, test 3
|
dnl the code was bad, try a different program now, test 3
|
||||||
|
|
||||||
AC_TRY_COMPILE([
|
AC_TRY_COMPILE([
|
||||||
/* headers for ioctlsocket test (cygwin?) */
|
/* headers for ioctlsocket test (Windows) */
|
||||||
|
#undef inline
|
||||||
|
#ifdef HAVE_WINDOWS_H
|
||||||
|
#ifndef WIN32_LEAN_AND_MEAN
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#endif
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
#ifdef HAVE_WINSOCK2_H
|
||||||
|
#include <winsock2.h>
|
||||||
|
#else
|
||||||
|
#ifdef HAVE_WINSOCK_H
|
||||||
|
#include <winsock.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
],[
|
],[
|
||||||
/* ioctlsocket source code */
|
/* ioctlsocket source code */
|
||||||
int socket;
|
SOCKET sd;
|
||||||
unsigned long flags = ioctlsocket(socket, FIONBIO, &flags);
|
unsigned long flags = 0;
|
||||||
|
sd = socket(0, 0, 0);
|
||||||
|
ioctlsocket(sd, FIONBIO, &flags);
|
||||||
],[
|
],[
|
||||||
dnl ioctlsocket test was good
|
dnl ioctlsocket test was good
|
||||||
nonblock="ioctlsocket"
|
nonblock="ioctlsocket"
|
||||||
@@ -122,6 +506,132 @@ dnl end of non-blocking try-compile test
|
|||||||
fi
|
fi
|
||||||
])
|
])
|
||||||
|
|
||||||
|
|
||||||
|
dnl TYPE_SOCKADDR_STORAGE
|
||||||
|
dnl -------------------------------------------------
|
||||||
|
dnl Check for struct sockaddr_storage. Most IPv6-enabled hosts have it, but
|
||||||
|
dnl AIX 4.3 is one known exception.
|
||||||
|
AC_DEFUN([TYPE_SOCKADDR_STORAGE],
|
||||||
|
[
|
||||||
|
AC_CHECK_TYPE([struct sockaddr_storage],
|
||||||
|
AC_DEFINE(HAVE_STRUCT_SOCKADDR_STORAGE, 1,
|
||||||
|
[if struct sockaddr_storage is defined]), ,
|
||||||
|
[
|
||||||
|
#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
|
||||||
|
#include <sys/types.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_NETINET_IN_H
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_ARPA_INET_H
|
||||||
|
#include <arpa/inet.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
])
|
||||||
|
])
|
||||||
|
|
||||||
|
|
||||||
|
dnl TYPE_IN_ADDR_T
|
||||||
|
dnl -------------------------------------------------
|
||||||
|
dnl Check for in_addr_t: it is used to receive the return code of inet_addr()
|
||||||
|
dnl and a few other things.
|
||||||
|
AC_DEFUN([TYPE_IN_ADDR_T],
|
||||||
|
[
|
||||||
|
AC_CHECK_TYPE([in_addr_t], ,[
|
||||||
|
AC_MSG_CHECKING([for in_addr_t equivalent])
|
||||||
|
AC_CACHE_VAL([curl_cv_in_addr_t_equiv],
|
||||||
|
[
|
||||||
|
curl_cv_in_addr_t_equiv=
|
||||||
|
for t in "unsigned long" int size_t unsigned long; do
|
||||||
|
AC_TRY_COMPILE([
|
||||||
|
#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>
|
||||||
|
#else
|
||||||
|
#ifdef HAVE_WINSOCK_H
|
||||||
|
#include <winsock.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#ifdef HAVE_SYS_TYPES_H
|
||||||
|
#include <sys/types.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_NETINET_IN_H
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_ARPA_INET_H
|
||||||
|
#include <arpa/inet.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
],[
|
||||||
|
$t data = inet_addr ("1.2.3.4");
|
||||||
|
],[
|
||||||
|
curl_cv_in_addr_t_equiv="$t"
|
||||||
|
break
|
||||||
|
])
|
||||||
|
done
|
||||||
|
|
||||||
|
if test "x$curl_cv_in_addr_t_equiv" = x; then
|
||||||
|
AC_MSG_ERROR([Cannot find a type to use in place of in_addr_t])
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
AC_MSG_RESULT($curl_cv_in_addr_t_equiv)
|
||||||
|
AC_DEFINE_UNQUOTED(in_addr_t, $curl_cv_in_addr_t_equiv,
|
||||||
|
[type to use in place of in_addr_t if not defined])],
|
||||||
|
[
|
||||||
|
#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>
|
||||||
|
#else
|
||||||
|
#ifdef HAVE_WINSOCK_H
|
||||||
|
#include <winsock.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#ifdef HAVE_SYS_TYPES_H
|
||||||
|
#include <sys/types.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_NETINET_IN_H
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_ARPA_INET_H
|
||||||
|
#include <arpa/inet.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
]) dnl AC_CHECK_TYPE
|
||||||
|
]) dnl AC_DEFUN
|
||||||
|
|
||||||
|
|
||||||
dnl We create a function for detecting which compiler we use and then set as
|
dnl We create a function for detecting which compiler we use and then set as
|
||||||
dnl pendantic compiler options as possible for that particular compiler. The
|
dnl pendantic compiler options as possible for that particular compiler. The
|
||||||
dnl options are only used for debug-builds.
|
dnl options are only used for debug-builds.
|
||||||
@@ -242,26 +752,6 @@ AC_DEFUN([CARES_CHECK_STRUCT], [
|
|||||||
fi
|
fi
|
||||||
])
|
])
|
||||||
|
|
||||||
dnl This macro determins if the specified struct contains a specific member.
|
|
||||||
dnl Syntax:
|
|
||||||
dnl CARES_CHECK_STRUCT_MEMBER(headers, struct name, member name, if found, [if not found])
|
|
||||||
|
|
||||||
AC_DEFUN([CARES_CHECK_STRUCT_MEMBER], [
|
|
||||||
AC_MSG_CHECKING([if struct $2 has member $3])
|
|
||||||
AC_TRY_COMPILE([$1],
|
|
||||||
[
|
|
||||||
struct $2 struct_instance;
|
|
||||||
struct_instance.$3 = 0;
|
|
||||||
], ac_struct="yes", ac_found="no")
|
|
||||||
if test "$ac_struct" = "yes" ; then
|
|
||||||
AC_MSG_RESULT(yes)
|
|
||||||
$4
|
|
||||||
else
|
|
||||||
AC_MSG_RESULT(no)
|
|
||||||
$5
|
|
||||||
fi
|
|
||||||
])
|
|
||||||
|
|
||||||
dnl This macro determines if the specified constant exists in the specified file
|
dnl This macro determines if the specified constant exists in the specified file
|
||||||
dnl Syntax:
|
dnl Syntax:
|
||||||
dnl CARES_CHECK_CONSTANT(headers, constant name, if found, [if not found])
|
dnl CARES_CHECK_CONSTANT(headers, constant name, if found, [if not found])
|
||||||
@@ -289,3 +779,86 @@ AC_DEFUN([CARES_CHECK_CONSTANT], [
|
|||||||
])
|
])
|
||||||
|
|
||||||
|
|
||||||
|
dnl This macro determines how many parameters getservbyport_r takes
|
||||||
|
AC_DEFUN([CARES_CHECK_GETSERVBYPORT_R], [
|
||||||
|
AC_MSG_CHECKING([how many arguments getservbyport_r takes])
|
||||||
|
AC_TRY_LINK(
|
||||||
|
[#include <netdb.h>],
|
||||||
|
[
|
||||||
|
int p1, p5;
|
||||||
|
char *p2, p4[4096];
|
||||||
|
struct servent *p3, *p6;
|
||||||
|
getservbyport_r(p1, p2, p3, p4, p5, &p6);
|
||||||
|
], ac_func_getservbyport_r=6,
|
||||||
|
[AC_TRY_LINK(
|
||||||
|
[#include <netdb.h>],
|
||||||
|
[
|
||||||
|
int p1, p5;
|
||||||
|
char *p2, p4[4096];
|
||||||
|
struct servent *p3;
|
||||||
|
getservbyport_r(p1, p2, p3, p4, p5);
|
||||||
|
], ac_func_getservbyport_r=5,
|
||||||
|
[AC_TRY_LINK(
|
||||||
|
[#include <netdb.h>],
|
||||||
|
[
|
||||||
|
int p1;
|
||||||
|
char *p2;
|
||||||
|
struct servent *p3;
|
||||||
|
struct servent_data p4;
|
||||||
|
getservbyport_r(p1, p2, p3, &p4);
|
||||||
|
], ac_func_getservbyport_r=4, ac_func_getservbyport_r=0
|
||||||
|
)]
|
||||||
|
)]
|
||||||
|
)
|
||||||
|
if test $ac_func_getservbyport_r != "0" ; then
|
||||||
|
AC_MSG_RESULT($ac_func_getservbyport_r)
|
||||||
|
AC_DEFINE(HAVE_GETSERVBYPORT_R, 1, [Specifies whether getservbyport_r is present])
|
||||||
|
AC_DEFINE_UNQUOTED(GETSERVBYPORT_R_ARGS, $ac_func_getservbyport_r, [Specifies the number of arguments to
|
||||||
|
getservbyport_r])
|
||||||
|
if test $ac_func_getservbyport_r = "4" ; then
|
||||||
|
AC_DEFINE(GETSERVBYPORT_R_BUFSIZE, sizeof(struct servent_data), [Specifies the size of the buffer to pass to
|
||||||
|
getservbyport_r])
|
||||||
|
else
|
||||||
|
AC_DEFINE(GETSERVBYPORT_R_BUFSIZE, 4096, [Specifies the size of the buffer to pass to getservbyport_r])
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
AC_MSG_RESULT([not found])
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
|
||||||
|
# Prevent libtool for checking how to run C++ compiler and check for other
|
||||||
|
# tools we don't want to use. We do this by m4-defining the _LT_AC_TAGCONFIG
|
||||||
|
# variable to the code to run, as by default it uses a much more complicated
|
||||||
|
# approach. The code below that is actually added seems to be used for cases
|
||||||
|
# where configure has trouble figuring out what C compiler to use but where
|
||||||
|
# the installed libtool has an idea.
|
||||||
|
#
|
||||||
|
# This function is a re-implemented version of the Paolo Bonzini fix posted to
|
||||||
|
# the c-ares mailing list by Bram Matthys on May 6 2006. My version removes
|
||||||
|
# redundant code but also adds the LTCFLAGS check that wasn't in that patch.
|
||||||
|
#
|
||||||
|
# Some code in this function was extracted from the generated configure script.
|
||||||
|
#
|
||||||
|
# CARES_CLEAR_LIBTOOL_TAGS
|
||||||
|
AC_DEFUN([CARES_CLEAR_LIBTOOL_TAGS],
|
||||||
|
[m4_define([_LT_AC_TAGCONFIG], [
|
||||||
|
if test -f "$ltmain"; then
|
||||||
|
if test ! -f "${ofile}"; then
|
||||||
|
AC_MSG_WARN([output file `$ofile' does not exist])
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test -z "$LTCC"; then
|
||||||
|
eval "`$SHELL ${ofile} --config | grep '^LTCC='`"
|
||||||
|
if test -z "$LTCC"; then
|
||||||
|
AC_MSG_WARN([output file `$ofile' does not look like a libtool
|
||||||
|
script])
|
||||||
|
else
|
||||||
|
AC_MSG_WARN([using `LTCC=$LTCC', extracted from `$ofile'])
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if test -z "$LTCFLAGS"; then
|
||||||
|
eval "`$SHELL ${ofile} --config | grep '^LTCFLAGS='`"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
])]
|
||||||
|
)
|
||||||
|
45
ares/adig.c
45
ares/adig.c
@@ -27,14 +27,23 @@
|
|||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <netdb.h>
|
#include <netdb.h>
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef HAVE_GETOPT_H
|
||||||
|
#include <getopt.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
|
||||||
#include "ares.h"
|
#include "ares.h"
|
||||||
#include "ares_dns.h"
|
#include "ares_dns.h"
|
||||||
|
#include "inet_ntop.h"
|
||||||
|
|
||||||
|
#ifdef WATT32
|
||||||
|
#undef WIN32 /* Redefined in MingW headers */
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef INADDR_NONE
|
#ifndef INADDR_NONE
|
||||||
#define INADDR_NONE 0xffffffff
|
#define INADDR_NONE 0xffffffff
|
||||||
@@ -45,8 +54,10 @@
|
|||||||
#define T_SRV 33 /* server selection */
|
#define T_SRV 33 /* server selection */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef optind
|
||||||
extern int optind;
|
extern int optind;
|
||||||
extern char *optarg;
|
extern char *optarg;
|
||||||
|
#endif
|
||||||
|
|
||||||
struct nv {
|
struct nv {
|
||||||
const char *name;
|
const char *name;
|
||||||
@@ -216,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;
|
||||||
|
|
||||||
@@ -224,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;
|
||||||
}
|
}
|
||||||
@@ -412,7 +423,7 @@ static const unsigned char *display_rr(const unsigned char *aptr,
|
|||||||
char *name;
|
char *name;
|
||||||
int type, dnsclass, ttl, dlen, status;
|
int type, dnsclass, ttl, dlen, status;
|
||||||
long len;
|
long len;
|
||||||
struct in_addr addr;
|
char addr[46];
|
||||||
|
|
||||||
/* Parse the RR name. */
|
/* Parse the RR name. */
|
||||||
status = ares_expand_name(aptr, abuf, alen, &name, &len);
|
status = ares_expand_name(aptr, abuf, alen, &name, &len);
|
||||||
@@ -474,12 +485,12 @@ static const unsigned char *display_rr(const unsigned char *aptr,
|
|||||||
len = *p;
|
len = *p;
|
||||||
if (p + len + 1 > aptr + dlen)
|
if (p + len + 1 > aptr + dlen)
|
||||||
return NULL;
|
return NULL;
|
||||||
printf("\t%.*s", len, p + 1);
|
printf("\t%.*s", (int)len, p + 1);
|
||||||
p += len + 1;
|
p += len + 1;
|
||||||
len = *p;
|
len = *p;
|
||||||
if (p + len + 1 > aptr + dlen)
|
if (p + len + 1 > aptr + dlen)
|
||||||
return NULL;
|
return NULL;
|
||||||
printf("\t%.*s", len, p + 1);
|
printf("\t%.*s", (int)len, p + 1);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case T_MINFO:
|
case T_MINFO:
|
||||||
@@ -504,7 +515,7 @@ static const unsigned char *display_rr(const unsigned char *aptr,
|
|||||||
*/
|
*/
|
||||||
if (dlen < 2)
|
if (dlen < 2)
|
||||||
return NULL;
|
return NULL;
|
||||||
printf("\t%d", (aptr[0] << 8) | aptr[1]);
|
printf("\t%d", DNS__16BIT(aptr));
|
||||||
status = ares_expand_name(aptr + 2, abuf, alen, &name, &len);
|
status = ares_expand_name(aptr + 2, abuf, alen, &name, &len);
|
||||||
if (status != ARES_SUCCESS)
|
if (status != ARES_SUCCESS)
|
||||||
return NULL;
|
return NULL;
|
||||||
@@ -531,12 +542,9 @@ static const unsigned char *display_rr(const unsigned char *aptr,
|
|||||||
p += len;
|
p += len;
|
||||||
if (p + 20 > aptr + dlen)
|
if (p + 20 > aptr + dlen)
|
||||||
return NULL;
|
return NULL;
|
||||||
printf("\t\t\t\t\t\t( %d %d %d %d %d )",
|
printf("\t\t\t\t\t\t( %lu %lu %lu %lu %lu )",
|
||||||
(p[0] << 24) | (p[1] << 16) | (p[2] << 8) | p[3],
|
DNS__32BIT(p), DNS__32BIT(p+4), DNS__32BIT(p+8),
|
||||||
(p[4] << 24) | (p[5] << 16) | (p[6] << 8) | p[7],
|
DNS__32BIT(p+12), DNS__32BIT(p+16));
|
||||||
(p[8] << 24) | (p[9] << 16) | (p[10] << 8) | p[11],
|
|
||||||
(p[12] << 24) | (p[13] << 16) | (p[14] << 8) | p[15],
|
|
||||||
(p[16] << 24) | (p[17] << 16) | (p[18] << 8) | p[19]);
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case T_TXT:
|
case T_TXT:
|
||||||
@@ -548,7 +556,7 @@ static const unsigned char *display_rr(const unsigned char *aptr,
|
|||||||
len = *p;
|
len = *p;
|
||||||
if (p + len + 1 > aptr + dlen)
|
if (p + len + 1 > aptr + dlen)
|
||||||
return NULL;
|
return NULL;
|
||||||
printf("\t%.*s", len, p + 1);
|
printf("\t%.*s", (int)len, p + 1);
|
||||||
p += len + 1;
|
p += len + 1;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -557,8 +565,14 @@ static const unsigned char *display_rr(const unsigned char *aptr,
|
|||||||
/* The RR data is a four-byte Internet address. */
|
/* The RR data is a four-byte Internet address. */
|
||||||
if (dlen != 4)
|
if (dlen != 4)
|
||||||
return NULL;
|
return NULL;
|
||||||
memcpy(&addr, aptr, sizeof(struct in_addr));
|
printf("\t%s", ares_inet_ntop(AF_INET,aptr,addr,sizeof(addr)));
|
||||||
printf("\t%s", inet_ntoa(addr));
|
break;
|
||||||
|
|
||||||
|
case T_AAAA:
|
||||||
|
/* The RR data is a 16-byte IPv6 address. */
|
||||||
|
if (dlen != 16)
|
||||||
|
return NULL;
|
||||||
|
printf("\t%s", ares_inet_ntop(AF_INET6,aptr,addr,sizeof(addr)));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case T_WKS:
|
case T_WKS:
|
||||||
@@ -583,6 +597,7 @@ static const unsigned char *display_rr(const unsigned char *aptr,
|
|||||||
|
|
||||||
default:
|
default:
|
||||||
printf("\t[Unknown RR; cannot parse]");
|
printf("\t[Unknown RR; cannot parse]");
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
printf("\n");
|
printf("\n");
|
||||||
|
|
||||||
|
48
ares/ahost.c
48
ares/ahost.c
@@ -29,13 +29,23 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include "ares.h"
|
#include "ares.h"
|
||||||
#include "ares_dns.h"
|
#include "ares_dns.h"
|
||||||
|
#include "inet_ntop.h"
|
||||||
|
#include "inet_net_pton.h"
|
||||||
|
|
||||||
#ifndef INADDR_NONE
|
#ifndef INADDR_NONE
|
||||||
#define INADDR_NONE 0xffffffff
|
#define INADDR_NONE 0xffffffff
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef HAVE_STRUCT_IN6_ADDR
|
||||||
|
struct in6_addr
|
||||||
|
{
|
||||||
|
unsigned char s6_addr[16];
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
static void callback(void *arg, int status, struct hostent *host);
|
static void callback(void *arg, int status, struct hostent *host);
|
||||||
static void usage(void);
|
static void usage(void);
|
||||||
|
|
||||||
@@ -45,7 +55,8 @@ int main(int argc, char **argv)
|
|||||||
int status, nfds;
|
int status, nfds;
|
||||||
fd_set read_fds, write_fds;
|
fd_set read_fds, write_fds;
|
||||||
struct timeval *tvp, tv;
|
struct timeval *tvp, tv;
|
||||||
struct in_addr addr;
|
struct in_addr addr4;
|
||||||
|
struct in6_addr addr6;
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
WORD wVersionRequested = MAKEWORD(1,1);
|
WORD wVersionRequested = MAKEWORD(1,1);
|
||||||
@@ -66,13 +77,20 @@ 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; argv++)
|
||||||
{
|
{
|
||||||
addr.s_addr = inet_addr(*argv);
|
if (ares_inet_pton(AF_INET, *argv, &addr4) == 1)
|
||||||
if (addr.s_addr == INADDR_NONE)
|
{
|
||||||
ares_gethostbyname(channel, *argv, AF_INET, callback, *argv);
|
ares_gethostbyaddr(channel, &addr4, sizeof(addr4), AF_INET, callback,
|
||||||
|
*argv);
|
||||||
|
}
|
||||||
|
else if (ares_inet_pton(AF_INET6, *argv, &addr6) == 1)
|
||||||
|
{
|
||||||
|
ares_gethostbyaddr(channel, &addr6, sizeof(addr6), AF_INET6, callback,
|
||||||
|
*argv);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ares_gethostbyaddr(channel, &addr, sizeof(addr), AF_INET, callback,
|
/* assume user wants A-records */
|
||||||
*argv);
|
ares_gethostbyname(channel, *argv, AF_INET, callback, *argv);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -95,7 +113,6 @@ int main(int argc, char **argv)
|
|||||||
|
|
||||||
static void callback(void *arg, int status, struct hostent *host)
|
static void callback(void *arg, int status, struct hostent *host)
|
||||||
{
|
{
|
||||||
struct in_addr addr;
|
|
||||||
char **p;
|
char **p;
|
||||||
|
|
||||||
if (status != ARES_SUCCESS)
|
if (status != ARES_SUCCESS)
|
||||||
@@ -106,8 +123,21 @@ static void callback(void *arg, int status, struct hostent *host)
|
|||||||
|
|
||||||
for (p = host->h_addr_list; *p; p++)
|
for (p = host->h_addr_list; *p; p++)
|
||||||
{
|
{
|
||||||
memcpy(&addr, *p, sizeof(struct in_addr));
|
char addr_buf[46] = "??";
|
||||||
printf("%-32s\t%s\n", host->h_name, inet_ntoa(addr));
|
|
||||||
|
ares_inet_ntop(host->h_addrtype, *p, addr_buf, sizeof(addr_buf));
|
||||||
|
printf("%-32s\t%s", host->h_name, addr_buf);
|
||||||
|
#if 0
|
||||||
|
if (host->h_aliases[0])
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
printf (", Aliases: ");
|
||||||
|
for (i = 0; host->h_aliases[i]; i++)
|
||||||
|
printf("%s ", host->h_aliases[i]);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
puts("");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
52
ares/ares.h
52
ares/ares.h
@@ -32,7 +32,7 @@
|
|||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#include <tcp.h>
|
#include <tcp.h>
|
||||||
#elif defined(WIN32)
|
#elif defined(WIN32)
|
||||||
#include <winsock.h>
|
#include <winsock2.h>
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#else
|
#else
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
@@ -69,6 +69,10 @@ extern "C" {
|
|||||||
/* ares_getnameinfo error codes */
|
/* ares_getnameinfo error codes */
|
||||||
#define ARES_EBADFLAGS 18
|
#define ARES_EBADFLAGS 18
|
||||||
|
|
||||||
|
/* ares_getaddrinfo error codes */
|
||||||
|
#define ARES_ENONAME 19
|
||||||
|
#define ARES_EBADHINTS 20
|
||||||
|
|
||||||
/* Flag values */
|
/* Flag values */
|
||||||
#define ARES_FLAG_USEVC (1 << 0)
|
#define ARES_FLAG_USEVC (1 << 0)
|
||||||
#define ARES_FLAG_PRIMARY (1 << 1)
|
#define ARES_FLAG_PRIMARY (1 << 1)
|
||||||
@@ -89,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)
|
||||||
@@ -105,8 +110,43 @@ extern "C" {
|
|||||||
#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_ALLOW_UNASSIGNED (1 << 11)
|
#define ARES_NI_IDN_ALLOW_UNASSIGNED (1 << 11)
|
||||||
#define ARES_NI_USE_STD3_ASCII_RULES (1 << 12)
|
#define ARES_NI_IDN_USE_STD3_ASCII_RULES (1 << 12)
|
||||||
|
|
||||||
|
/* Addrinfo flag values */
|
||||||
|
#define ARES_AI_CANONNAME (1 << 0)
|
||||||
|
#define ARES_AI_NUMERICHOST (1 << 1)
|
||||||
|
#define ARES_AI_PASSIVE (1 << 2)
|
||||||
|
#define ARES_AI_NUMERICSERV (1 << 3)
|
||||||
|
#define ARES_AI_V4MAPPED (1 << 4)
|
||||||
|
#define ARES_AI_ALL (1 << 5)
|
||||||
|
#define ARES_AI_ADDRCONFIG (1 << 6)
|
||||||
|
/* Reserved for future use */
|
||||||
|
#define ARES_AI_IDN (1 << 10)
|
||||||
|
#define ARES_AI_IDN_ALLOW_UNASSIGNED (1 << 11)
|
||||||
|
#define ARES_AI_IDN_USE_STD3_ASCII_RULES (1 << 12)
|
||||||
|
#define ARES_AI_CANONIDN (1 << 13)
|
||||||
|
|
||||||
|
#define ARES_AI_MASK (ARES_AI_CANONNAME|ARES_AI_NUMERICHOST|ARES_AI_PASSIVE| \
|
||||||
|
ARES_AI_NUMERICSERV|ARES_AI_V4MAPPED|ARES_AI_ALL| \
|
||||||
|
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;
|
||||||
@@ -120,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;
|
||||||
@@ -150,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);
|
||||||
|
@@ -23,7 +23,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 +46,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;
|
||||||
}
|
}
|
||||||
|
@@ -50,7 +50,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 +61,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
|
||||||
|
@@ -38,6 +38,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]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -24,7 +24,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,6 +18,18 @@
|
|||||||
#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])
|
||||||
@@ -27,6 +39,16 @@
|
|||||||
((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
|
||||||
|
/* we cannot use this approach on systems where we can't access 16/32 bit
|
||||||
|
data on un-aligned addresses */
|
||||||
|
#define DNS__16BIT(p) ntohs(*(unsigned short*)(p))
|
||||||
|
#define DNS__32BIT(p) ntohl(*(unsigned long*)(p))
|
||||||
|
#define DNS__SET16BIT(p, v) *(unsigned short*)(p) = htons(v)
|
||||||
|
#define DNS__SET32BIT(p, v) *(unsigned long*)(p) = htonl(v)
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Macros for parsing a DNS header */
|
/* Macros for parsing a DNS header */
|
||||||
#define DNS_HEADER_QID(h) DNS__16BIT(h)
|
#define DNS_HEADER_QID(h) DNS__16BIT(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
|
||||||
@@ -44,13 +46,13 @@ int ares_fds(ares_channel channel, fd_set *read_fds, fd_set *write_fds)
|
|||||||
nfds = server->udp_socket + 1;
|
nfds = server->udp_socket + 1;
|
||||||
}
|
}
|
||||||
if (server->tcp_socket != ARES_SOCKET_BAD)
|
if (server->tcp_socket != ARES_SOCKET_BAD)
|
||||||
{
|
{
|
||||||
FD_SET(server->tcp_socket, read_fds);
|
FD_SET(server->tcp_socket, read_fds);
|
||||||
if (server->qhead)
|
if (server->qhead)
|
||||||
FD_SET(server->tcp_socket, write_fds);
|
FD_SET(server->tcp_socket, write_fds);
|
||||||
if (server->tcp_socket >= nfds)
|
if (server->tcp_socket >= nfds)
|
||||||
nfds = server->tcp_socket + 1;
|
nfds = server->tcp_socket + 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return (int)nfds;
|
return (int)nfds;
|
||||||
}
|
}
|
||||||
|
@@ -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 by Dominick Meglio
|
/* Copyright 2005 by Dominick Meglio
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this
|
* Permission to use, copy, modify, and distribute this
|
||||||
@@ -68,17 +70,19 @@ 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 char *append_scopeid(struct sockaddr_in6 *addr6, unsigned int scopeid, char *buf);
|
static void append_scopeid(struct sockaddr_in6 *addr6, unsigned int scopeid,
|
||||||
|
char *buf, size_t buflen);
|
||||||
#endif
|
#endif
|
||||||
static char *ares_striendstr(const char *s1, const char *s2);
|
static char *ares_striendstr(const char *s1, const char *s2);
|
||||||
|
|
||||||
void ares_getnameinfo(ares_channel channel, const struct sockaddr *sa, socklen_t salen,
|
void ares_getnameinfo(ares_channel channel, const struct sockaddr *sa, socklen_t salen,
|
||||||
int flags, ares_nameinfo_callback callback, void *arg)
|
int flags, ares_nameinfo_callback callback, void *arg)
|
||||||
{
|
{
|
||||||
struct sockaddr_in *addr;
|
struct sockaddr_in *addr = NULL;
|
||||||
struct sockaddr_in6 *addr6;
|
struct sockaddr_in6 *addr6 = NULL;
|
||||||
struct nameinfo_query *niquery;
|
struct nameinfo_query *niquery;
|
||||||
|
|
||||||
/* Verify the buffer size */
|
/* Verify the buffer size */
|
||||||
@@ -106,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;
|
||||||
}
|
}
|
||||||
@@ -119,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;
|
||||||
|
|
||||||
@@ -137,7 +141,7 @@ void ares_getnameinfo(ares_channel channel, const struct sockaddr *sa, socklen_t
|
|||||||
port = addr6->sin6_port;
|
port = addr6->sin6_port;
|
||||||
/* If the system supports scope IDs, use it */
|
/* If the system supports scope IDs, use it */
|
||||||
#ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID
|
#ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID
|
||||||
append_scopeid(addr6, flags, ipbuf);
|
append_scopeid(addr6, flags, ipbuf, sizeof(ipbuf));
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -147,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;
|
||||||
}
|
}
|
||||||
@@ -194,9 +198,11 @@ static void nameinfo_callback(void *arg, int status, struct hostent *host)
|
|||||||
if (niquery->flags & ARES_NI_LOOKUPSERVICE)
|
if (niquery->flags & ARES_NI_LOOKUPSERVICE)
|
||||||
{
|
{
|
||||||
if (niquery->family == AF_INET)
|
if (niquery->family == AF_INET)
|
||||||
service = lookup_service(niquery->addr.addr4.sin_port, niquery->flags, srvbuf);
|
service = lookup_service(niquery->addr.addr4.sin_port,
|
||||||
|
niquery->flags, srvbuf, sizeof(srvbuf));
|
||||||
else
|
else
|
||||||
service = lookup_service(niquery->addr.addr6.sin6_port, niquery->flags, srvbuf);
|
service = lookup_service(niquery->addr.addr6.sin6_port,
|
||||||
|
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
|
||||||
@@ -227,16 +233,18 @@ static void nameinfo_callback(void *arg, int status, struct hostent *host)
|
|||||||
{
|
{
|
||||||
ares_inet_ntop(AF_INET6, &niquery->addr.addr6.sin6_addr, ipbuf, IPBUFSIZ);
|
ares_inet_ntop(AF_INET6, &niquery->addr.addr6.sin6_addr, ipbuf, IPBUFSIZ);
|
||||||
#ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID
|
#ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID
|
||||||
append_scopeid(&niquery->addr.addr6, niquery->flags, ipbuf);
|
append_scopeid(&niquery->addr.addr6, niquery->flags, ipbuf, sizeof(ipbuf));
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
/* They want a service too */
|
/* They want a service too */
|
||||||
if (niquery->flags & ARES_NI_LOOKUPSERVICE)
|
if (niquery->flags & ARES_NI_LOOKUPSERVICE)
|
||||||
{
|
{
|
||||||
if (niquery->family == AF_INET)
|
if (niquery->family == AF_INET)
|
||||||
service = lookup_service(niquery->addr.addr4.sin_port, niquery->flags, srvbuf);
|
service = lookup_service(niquery->addr.addr4.sin_port,
|
||||||
|
niquery->flags, srvbuf, sizeof(srvbuf));
|
||||||
else
|
else
|
||||||
service = lookup_service(niquery->addr.addr6.sin6_port, niquery->flags, srvbuf);
|
service = lookup_service(niquery->addr.addr6.sin6_port,
|
||||||
|
niquery->flags, srvbuf, sizeof(srvbuf));
|
||||||
}
|
}
|
||||||
niquery->callback(niquery->arg, ARES_SUCCESS, ipbuf, service);
|
niquery->callback(niquery->arg, ARES_SUCCESS, ipbuf, service);
|
||||||
return;
|
return;
|
||||||
@@ -245,18 +253,22 @@ static void nameinfo_callback(void *arg, int status, struct hostent *host)
|
|||||||
free(niquery);
|
free(niquery);
|
||||||
}
|
}
|
||||||
|
|
||||||
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)
|
||||||
{
|
{
|
||||||
|
const char *proto;
|
||||||
|
struct servent *sep;
|
||||||
|
#ifdef HAVE_GETSERVBYPORT_R
|
||||||
|
struct servent se;
|
||||||
|
#endif
|
||||||
|
char tmpbuf[4096];
|
||||||
|
|
||||||
if (port)
|
if (port)
|
||||||
{
|
{
|
||||||
/* Just return the port as a string */
|
|
||||||
if (flags & ARES_NI_NUMERICSERV)
|
if (flags & ARES_NI_NUMERICSERV)
|
||||||
sprintf(buf, "%u", ntohs(port));
|
sep = NULL;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
struct servent *se;
|
|
||||||
const char *proto;
|
|
||||||
|
|
||||||
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)
|
||||||
@@ -265,39 +277,78 @@ static char *lookup_service(unsigned short port, int flags, char *buf)
|
|||||||
proto = "dccp";
|
proto = "dccp";
|
||||||
else
|
else
|
||||||
proto = "tcp";
|
proto = "tcp";
|
||||||
se = getservbyport(port, proto);
|
#ifdef HAVE_GETSERVBYPORT_R
|
||||||
if (se && se->s_name)
|
sep = &se;
|
||||||
strcpy(buf, se->s_name);
|
memset(tmpbuf, 0, sizeof(tmpbuf));
|
||||||
else
|
#if GETSERVBYPORT_R_ARGS == 6
|
||||||
sprintf(buf, "%u", ntohs(port));
|
if (getservbyport_r(port, proto, &se, (void *)tmpbuf, sizeof(tmpbuf), &sep) != 0)
|
||||||
|
sep = NULL;
|
||||||
|
#elif GETSERVBYPORT_R_ARGS == 5
|
||||||
|
sep = getservbyport_r(port, proto, &se, (void *)tmpbuf, sizeof(tmpbuf));
|
||||||
|
#elif GETSERVBYPORT_R_ARGS == 4
|
||||||
|
if (getservbyport_r(port, proto, &se, (void *)tmpbuf) != 0)
|
||||||
|
sep = NULL;
|
||||||
|
#else
|
||||||
|
/* Lets just hope the OS uses TLS! */
|
||||||
|
sep = getservbyport(port, proto);
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
/* Lets just hope the OS uses TLS! */
|
||||||
|
sep = getservbyport(port, proto);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
if (sep && sep->s_name)
|
||||||
|
/* get service name */
|
||||||
|
strcpy(tmpbuf, sep->s_name);
|
||||||
|
else
|
||||||
|
/* get port as a string */
|
||||||
|
sprintf(tmpbuf, "%u", ntohs(port));
|
||||||
|
if (strlen(tmpbuf) < buflen)
|
||||||
|
/* return it if buffer big enough */
|
||||||
|
strcpy(buf, tmpbuf);
|
||||||
|
else
|
||||||
|
/* avoid reusing previous one */
|
||||||
|
buf[0] = '\0';
|
||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
buf[0] = '\0';
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID
|
#ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID
|
||||||
static char *append_scopeid(struct sockaddr_in6 *addr6, unsigned int flags, char *buf)
|
static void append_scopeid(struct sockaddr_in6 *addr6, unsigned int flags,
|
||||||
|
char *buf, size_t buflen)
|
||||||
{
|
{
|
||||||
char tmpbuf[IF_NAMESIZE + 1];
|
char fmt_u[] = "%u";
|
||||||
|
char fmt_lu[] = "%lu";
|
||||||
|
char tmpbuf[IF_NAMESIZE + 2];
|
||||||
|
size_t bufl;
|
||||||
|
char *fmt = (sizeof(addr6->sin6_scope_id) > sizeof(unsigned int))?fmt_lu:fmt_u;
|
||||||
|
|
||||||
tmpbuf[0] = '%';
|
tmpbuf[0] = '%';
|
||||||
|
|
||||||
#ifdef HAVE_IF_INDEXTONAME
|
#ifdef HAVE_IF_INDEXTONAME
|
||||||
if ((flags & ARES_NI_NUMERICSCOPE) || (!IN6_IS_ADDR_LINKLOCAL(&addr6->sin6_addr)
|
if ((flags & ARES_NI_NUMERICSCOPE) ||
|
||||||
&& !IN6_IS_ADDR_MC_LINKLOCAL(&addr6->sin6_addr)))
|
(!IN6_IS_ADDR_LINKLOCAL(&addr6->sin6_addr)
|
||||||
|
&& !IN6_IS_ADDR_MC_LINKLOCAL(&addr6->sin6_addr)))
|
||||||
{
|
{
|
||||||
sprintf(&tmpbuf[1], "%u", addr6->sin6_scope_id);
|
sprintf(&tmpbuf[1], fmt, addr6->sin6_scope_id);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (if_indextoname(addr6->sin6_scope_id, &tmpbuf[1]) == NULL)
|
if (if_indextoname(addr6->sin6_scope_id, &tmpbuf[1]) == NULL)
|
||||||
sprintf(&tmpbuf[1], "%u", addr6->sin6_scope_id);
|
sprintf(&tmpbuf[1], fmt, addr6->sin6_scope_id);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
sprintf(&tmpbuf[1], "%u", addr6->sin6_scope_id);
|
sprintf(&tmpbuf[1], fmt, addr6->sin6_scope_id);
|
||||||
|
(void) flags;
|
||||||
#endif
|
#endif
|
||||||
strcat(buf, tmpbuf);
|
tmpbuf[IF_NAMESIZE + 1] = '\0';
|
||||||
return buf;
|
bufl = strlen(buf);
|
||||||
|
|
||||||
|
if(bufl + strlen(tmpbuf) < buflen)
|
||||||
|
/* only append the scopeid string if it fits in the target buffer */
|
||||||
|
strcpy(&buf[bufl], tmpbuf);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
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)
|
71
ares/ares_getsock.c
Normal file
71
ares/ares_getsock.c
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
/* $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;
|
||||||
|
ares_socket_t nfds;
|
||||||
|
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;
|
||||||
|
|
||||||
|
nfds = 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 (int)nfds;
|
||||||
|
}
|
@@ -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
|
||||||
|
@@ -113,6 +113,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 +193,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 +510,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. */
|
||||||
|
@@ -62,6 +62,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 +176,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
|
||||||
|
@@ -30,6 +30,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 +41,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>
|
||||||
@@ -103,7 +104,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++)
|
||||||
@@ -148,7 +149,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,7 +168,8 @@ 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, sendreq->data, sendreq->len, 0);
|
scount = send(server->tcp_socket, (void *)sendreq->data,
|
||||||
|
sendreq->len, 0);
|
||||||
|
|
||||||
if (scount < 0)
|
if (scount < 0)
|
||||||
{
|
{
|
||||||
@@ -177,7 +182,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
|
||||||
@@ -212,8 +220,8 @@ static void read_tcp_data(ares_channel channel, fd_set *read_fds, time_t now)
|
|||||||
* what's left to read of it).
|
* what's left to read of it).
|
||||||
*/
|
*/
|
||||||
count = recv(server->tcp_socket,
|
count = recv(server->tcp_socket,
|
||||||
server->tcp_lenbuf + server->tcp_buffer_pos,
|
(void *)(server->tcp_lenbuf + server->tcp_lenbuf_pos),
|
||||||
2 - server->tcp_buffer_pos, 0);
|
2 - server->tcp_lenbuf_pos, 0);
|
||||||
if (count <= 0)
|
if (count <= 0)
|
||||||
{
|
{
|
||||||
handle_error(channel, i, now);
|
handle_error(channel, i, now);
|
||||||
@@ -238,7 +246,7 @@ static void read_tcp_data(ares_channel channel, fd_set *read_fds, time_t now)
|
|||||||
{
|
{
|
||||||
/* Read data into the allocated buffer. */
|
/* Read data into the allocated buffer. */
|
||||||
count = recv(server->tcp_socket,
|
count = recv(server->tcp_socket,
|
||||||
server->tcp_buffer + server->tcp_buffer_pos,
|
(void *)(server->tcp_buffer + server->tcp_buffer_pos),
|
||||||
server->tcp_length - server->tcp_buffer_pos, 0);
|
server->tcp_length - server->tcp_buffer_pos, 0);
|
||||||
if (count <= 0)
|
if (count <= 0)
|
||||||
{
|
{
|
||||||
@@ -280,7 +288,7 @@ 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, buf, sizeof(buf), 0);
|
count = recv(server->udp_socket, (void *)buf, sizeof(buf), 0);
|
||||||
if (count <= 0)
|
if (count <= 0)
|
||||||
handle_error(channel, i, now);
|
handle_error(channel, i, now);
|
||||||
|
|
||||||
@@ -378,7 +386,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.
|
||||||
@@ -450,7 +458,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;
|
||||||
}
|
}
|
||||||
@@ -465,7 +476,8 @@ void ares__send_query(ares_channel channel, struct query *query, time_t now)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (send(server->udp_socket, query->qbuf, query->qlen, 0) == -1)
|
if (send(server->udp_socket, (void *)query->qbuf,
|
||||||
|
query->qlen, 0) == -1)
|
||||||
{
|
{
|
||||||
query->skip_server[query->server] = 1;
|
query->skip_server[query->server] = 1;
|
||||||
next_server(channel, query, now);
|
next_server(channel, query, now);
|
||||||
@@ -572,6 +584,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;
|
||||||
@@ -601,6 +614,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;
|
||||||
}
|
}
|
||||||
@@ -711,7 +726,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);
|
||||||
}
|
}
|
||||||
|
@@ -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,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
|
||||||
|
87
ares/config-win32.h
Normal file
87
ares/config-win32.h
Normal file
@@ -0,0 +1,87 @@
|
|||||||
|
#ifndef __ARES_CONFIG_WIN32_H
|
||||||
|
#define __ARES_CONFIG_WIN32_H
|
||||||
|
|
||||||
|
/* $Id$ */
|
||||||
|
|
||||||
|
/* Copyright (C) 2004 - 2005 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* ================================================================ */
|
||||||
|
/* ares/config-win32.h - Hand crafted config file for windows */
|
||||||
|
/* ================================================================ */
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------- */
|
||||||
|
/* HEADER FILES */
|
||||||
|
/* ---------------------------------------------------------------- */
|
||||||
|
|
||||||
|
/* Define if you have the <getopt.h> header file. */
|
||||||
|
#if defined(__MINGW32__)
|
||||||
|
#define HAVE_GETOPT_H 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Define if you have the <unistd.h> header file. */
|
||||||
|
#if defined(__MINGW32__) || defined(__WATCOMC__) || defined(__LCC__) || \
|
||||||
|
defined(__POCC__)
|
||||||
|
#define HAVE_UNISTD_H 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Define if you have the <windows.h> header file. */
|
||||||
|
#define HAVE_WINDOWS_H 1
|
||||||
|
|
||||||
|
/* 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
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------- */
|
||||||
|
/* 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,13 +16,12 @@ solaris*)
|
|||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
# check for ssize_t
|
|
||||||
AC_CHECK_TYPE(ssize_t, ,
|
|
||||||
AC_DEFINE(ssize_t, int, [the signed version of size_t]))
|
|
||||||
|
|
||||||
AC_SEARCH_LIBS(gethostbyname, nsl)
|
AC_SEARCH_LIBS(gethostbyname, nsl)
|
||||||
AC_SEARCH_LIBS(socket, socket)
|
AC_SEARCH_LIBS(socket, socket)
|
||||||
|
|
||||||
|
dnl check for cygwin stuff
|
||||||
|
AC_LIBTOOL_WIN32_DLL
|
||||||
|
|
||||||
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
|
||||||
dnl this is built as an 'ares' subdir in the curl source tree. Subject for
|
dnl this is built as an 'ares' subdir in the curl source tree. Subject for
|
||||||
@@ -38,9 +40,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 +47,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 +65,37 @@ 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 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
|
||||||
|
|
||||||
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 \
|
||||||
@@ -66,16 +103,24 @@ AC_CHECK_HEADERS(
|
|||||||
sys/select.h \
|
sys/select.h \
|
||||||
sys/socket.h \
|
sys/socket.h \
|
||||||
sys/ioctl.h \
|
sys/ioctl.h \
|
||||||
winsock.h \
|
netdb.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.
|
||||||
@@ -87,39 +132,68 @@ 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_WINSOCK_H
|
#ifdef HAVE_NETINET_IN_H
|
||||||
#include <winsock.h>
|
#include <netinet/in.h>
|
||||||
#endif
|
#endif
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
dnl Checks for typedefs, structures, and compiler characteristics.
|
||||||
|
AC_C_CONST
|
||||||
|
AC_TYPE_SIZE_T
|
||||||
|
AC_HEADER_TIME
|
||||||
|
|
||||||
|
AC_CHECK_SIZEOF(size_t)
|
||||||
|
AC_CHECK_SIZEOF(long)
|
||||||
|
AC_CHECK_SIZEOF(time_t)
|
||||||
|
|
||||||
|
AC_CHECK_TYPE(long long,
|
||||||
|
[AC_DEFINE(HAVE_LONGLONG, 1, [if your compiler supports long long])]
|
||||||
|
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
|
||||||
|
|
||||||
AC_CHECK_TYPE(socklen_t, ,
|
|
||||||
AC_DEFINE(socklen_t, int, [the length of a socket address]),
|
|
||||||
[
|
|
||||||
#ifdef HAVE_SYS_TYPES_H
|
|
||||||
#include <sys/types.h>
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_SYS_SOCKET_H
|
|
||||||
#include <sys/socket.h>
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_WINSOCK_H
|
|
||||||
#include <winsock.h>
|
|
||||||
#endif
|
|
||||||
])
|
|
||||||
|
|
||||||
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_WINSOCK_H
|
|
||||||
#include <winsock.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.])
|
||||||
)
|
)
|
||||||
@@ -127,16 +201,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_WINSOCK_H
|
|
||||||
#include <winsock.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.])
|
||||||
)
|
)
|
||||||
@@ -145,14 +226,25 @@ CARES_CHECK_CONSTANT(
|
|||||||
dnl check for the in6_addr structure
|
dnl check for the in6_addr structure
|
||||||
CARES_CHECK_STRUCT(
|
CARES_CHECK_STRUCT(
|
||||||
[
|
[
|
||||||
|
#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_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
|
||||||
], [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.])
|
||||||
@@ -161,55 +253,111 @@ CARES_CHECK_STRUCT(
|
|||||||
dnl check for the sockaddr_in6 structure
|
dnl check for the sockaddr_in6 structure
|
||||||
CARES_CHECK_STRUCT(
|
CARES_CHECK_STRUCT(
|
||||||
[
|
[
|
||||||
|
#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_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
|
||||||
], [sockaddr_in6],
|
], [sockaddr_in6],
|
||||||
AC_DEFINE_UNQUOTED(HAVE_STRUCT_SOCKADDR_IN6,1,
|
AC_DEFINE_UNQUOTED(HAVE_STRUCT_SOCKADDR_IN6,1,
|
||||||
[Define to 1 if you have struct sockaddr_in6.]) ac_have_sockaddr_in6=yes
|
[Define to 1 if you have struct sockaddr_in6.]) ac_have_sockaddr_in6=yes
|
||||||
)
|
)
|
||||||
|
|
||||||
if test "$ac_have_sockaddr_in6" = "yes" ; then
|
AC_CHECK_MEMBER(struct sockaddr_in6.sin6_scope_id,
|
||||||
CARES_CHECK_STRUCT_MEMBER(
|
AC_DEFINE_UNQUOTED(HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID,1,
|
||||||
|
[Define to 1 if your struct sockaddr_in6 has sin6_scope_id.])
|
||||||
|
, ,
|
||||||
[
|
[
|
||||||
|
#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_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
|
||||||
], [sockaddr_in6], [sin6_scope_id],
|
#endif
|
||||||
AC_DEFINE_UNQUOTED(HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID,1,
|
])
|
||||||
[Define to 1 if your struct sockaddr_in6 has sin6_scope_id.])
|
|
||||||
)
|
|
||||||
fi
|
|
||||||
|
|
||||||
dnl check for the addrinfo structure
|
dnl check for the addrinfo structure
|
||||||
CARES_CHECK_STRUCT(
|
AC_CHECK_MEMBER(struct addrinfo.ai_flags,
|
||||||
|
AC_DEFINE_UNQUOTED(HAVE_STRUCT_ADDRINFO,1,
|
||||||
|
[Define to 1 if you have struct addrinfo.]),,
|
||||||
[
|
[
|
||||||
|
#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_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
|
||||||
], [addrinfo],
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
AC_DEFINE_UNQUOTED(HAVE_STRUCT_ADDRINFO,1,
|
#include <sys/socket.h>
|
||||||
[Define to 1 if you have struct addrinfo.])
|
#endif
|
||||||
|
#ifdef HAVE_NETDB_H
|
||||||
|
#include <netdb.h>
|
||||||
|
#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
|
||||||
@@ -223,9 +371,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
|
||||||
@@ -255,9 +400,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
|
||||||
@@ -289,9 +431,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,45 +446,84 @@ 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
|
||||||
]
|
|
||||||
)
|
|
||||||
AC_CHECK_SIZEOF(struct in_addr, ,
|
|
||||||
[
|
|
||||||
#ifdef HAVE_SYS_TYPES_H
|
|
||||||
#include <sys/types.h>
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_SYS_SOCKET_H
|
|
||||||
#include <sys/socket.h>
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_WINSOCK_H
|
|
||||||
#include <winsock.h>
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_NETINET_IN_H
|
|
||||||
#include <netinet/in.h>
|
|
||||||
#endif
|
#endif
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
AC_CHECK_FUNCS([bitncmp if_indextoname])
|
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
|
||||||
|
#include <sys/types.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_NETINET_IN_H
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
CURL_CHECK_NONBLOCKING_SOCKET
|
CURL_CHECK_NONBLOCKING_SOCKET
|
||||||
|
|
||||||
|
AC_C_BIGENDIAN(
|
||||||
|
[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_OUTPUT(Makefile)
|
AC_OUTPUT(Makefile)
|
||||||
|
232
ares/inet_ntop.c
232
ares/inet_ntop.c
@@ -1,3 +1,5 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
/* Copyright (c) 1996 by Internet Software Consortium.
|
/* Copyright (c) 1996 by Internet Software Consortium.
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this software for any
|
* Permission to use, copy, modify, and distribute this software for any
|
||||||
@@ -63,144 +65,156 @@ static const char *inet_ntop6(const unsigned char *src, char *dst, size_t size);
|
|||||||
|
|
||||||
/* char *
|
/* char *
|
||||||
* inet_ntop(af, src, dst, size)
|
* inet_ntop(af, src, dst, size)
|
||||||
* convert a network format address to presentation format.
|
* convert a network format address to presentation format.
|
||||||
* return:
|
* return:
|
||||||
* pointer to presentation format address (`dst'), or NULL (see errno).
|
* pointer to presentation format address (`dst'), or NULL (see errno).
|
||||||
* author:
|
* author:
|
||||||
* Paul Vixie, 1996.
|
* Paul Vixie, 1996.
|
||||||
*/
|
*/
|
||||||
const char *
|
const char *
|
||||||
ares_inet_ntop(int af, const void *src, char *dst, size_t size)
|
ares_inet_ntop(int af, const void *src, char *dst, size_t size)
|
||||||
{
|
{
|
||||||
|
switch (af)
|
||||||
switch (af) {
|
{
|
||||||
case AF_INET:
|
case AF_INET:
|
||||||
return (inet_ntop4(src, dst, size));
|
return (inet_ntop4(src, dst, size));
|
||||||
case AF_INET6:
|
case AF_INET6:
|
||||||
return (inet_ntop6(src, dst, size));
|
return (inet_ntop6(src, dst, size));
|
||||||
default:
|
default:
|
||||||
errno = EAFNOSUPPORT;
|
errno = EAFNOSUPPORT;
|
||||||
return (NULL);
|
return (NULL);
|
||||||
}
|
}
|
||||||
/* NOTREACHED */
|
/* NOTREACHED */
|
||||||
}
|
}
|
||||||
|
|
||||||
/* const char *
|
/* const char *
|
||||||
* inet_ntop4(src, dst, size)
|
* inet_ntop4(src, dst, size)
|
||||||
* format an IPv4 address, more or less like inet_ntoa()
|
* format an IPv4 address, more or less like inet_ntoa()
|
||||||
* return:
|
* return:
|
||||||
* `dst' (as a const)
|
* `dst' (as a const)
|
||||||
* notes:
|
* notes:
|
||||||
* (1) uses no statics
|
* (1) uses no statics
|
||||||
* (2) takes a unsigned char* not an in_addr as input
|
* (2) takes a unsigned char* not an in_addr as input
|
||||||
* author:
|
* author:
|
||||||
* Paul Vixie, 1996.
|
* Paul Vixie, 1996.
|
||||||
*/
|
*/
|
||||||
static const char *
|
static const char *
|
||||||
inet_ntop4(const unsigned char *src, char *dst, size_t size)
|
inet_ntop4(const unsigned char *src, char *dst, size_t size)
|
||||||
{
|
{
|
||||||
static const char fmt[] = "%u.%u.%u.%u";
|
static const char fmt[] = "%u.%u.%u.%u";
|
||||||
char tmp[sizeof "255.255.255.255"];
|
char tmp[sizeof "255.255.255.255"];
|
||||||
|
|
||||||
if (SPRINTF((tmp, fmt, src[0], src[1], src[2], src[3])) > size) {
|
if (SPRINTF((tmp, fmt, src[0], src[1], src[2], src[3])) > size)
|
||||||
errno = ENOSPC;
|
{
|
||||||
return (NULL);
|
errno = ENOSPC;
|
||||||
}
|
return (NULL);
|
||||||
strcpy(dst, tmp);
|
}
|
||||||
return (dst);
|
strcpy(dst, tmp);
|
||||||
|
return (dst);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* const char *
|
/* const char *
|
||||||
* inet_ntop6(src, dst, size)
|
* inet_ntop6(src, dst, size)
|
||||||
* convert IPv6 binary address into presentation (printable) format
|
* convert IPv6 binary address into presentation (printable) format
|
||||||
* author:
|
* author:
|
||||||
* Paul Vixie, 1996.
|
* Paul Vixie, 1996.
|
||||||
*/
|
*/
|
||||||
static const char *
|
static const char *
|
||||||
inet_ntop6(const unsigned char *src, char *dst, size_t size)
|
inet_ntop6(const unsigned char *src, char *dst, size_t size)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* Note that int32_t and int16_t need only be "at least" large enough
|
* Note that int32_t and int16_t need only be "at least" large enough
|
||||||
* to contain a value of the specified size. On some systems, like
|
* to contain a value of the specified size. On some systems, like
|
||||||
* Crays, there is no such thing as an integer variable with 16 bits.
|
* Crays, there is no such thing as an integer variable with 16 bits.
|
||||||
* 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"], *tp;
|
||||||
struct { int base, len; } best, cur;
|
struct { int base, len; } best = { 0,0 }, cur = { 0,0 };
|
||||||
unsigned int words[NS_IN6ADDRSZ / NS_INT16SZ];
|
unsigned int words[NS_IN6ADDRSZ / NS_INT16SZ];
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Preprocess:
|
* Preprocess:
|
||||||
* 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;
|
||||||
for (i = 0; i < (NS_IN6ADDRSZ / NS_INT16SZ); i++) {
|
for (i = 0; i < (NS_IN6ADDRSZ / NS_INT16SZ); i++)
|
||||||
if (words[i] == 0) {
|
{
|
||||||
if (cur.base == -1)
|
if (words[i] == 0)
|
||||||
cur.base = i, cur.len = 1;
|
{
|
||||||
else
|
if (cur.base == -1)
|
||||||
cur.len++;
|
cur.base = i, cur.len = 1;
|
||||||
} else {
|
else
|
||||||
if (cur.base != -1) {
|
cur.len++;
|
||||||
if (best.base == -1 || cur.len > best.len)
|
}
|
||||||
best = cur;
|
else
|
||||||
cur.base = -1;
|
{
|
||||||
}
|
if (cur.base != -1)
|
||||||
}
|
{
|
||||||
}
|
if (best.base == -1 || cur.len > best.len)
|
||||||
if (cur.base != -1) {
|
best = cur;
|
||||||
if (best.base == -1 || cur.len > best.len)
|
cur.base = -1;
|
||||||
best = cur;
|
}
|
||||||
}
|
}
|
||||||
if (best.base != -1 && best.len < 2)
|
}
|
||||||
best.base = -1;
|
if (cur.base != -1)
|
||||||
|
{
|
||||||
|
if (best.base == -1 || cur.len > best.len)
|
||||||
|
best = cur;
|
||||||
|
}
|
||||||
|
if (best.base != -1 && best.len < 2)
|
||||||
|
best.base = -1;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Format the result.
|
* Format the result.
|
||||||
*/
|
*/
|
||||||
tp = tmp;
|
tp = tmp;
|
||||||
for (i = 0; i < (NS_IN6ADDRSZ / NS_INT16SZ); i++) {
|
for (i = 0; i < (NS_IN6ADDRSZ / NS_INT16SZ); i++)
|
||||||
/* Are we inside the best run of 0x00's? */
|
{
|
||||||
if (best.base != -1 && i >= best.base &&
|
/* Are we inside the best run of 0x00's? */
|
||||||
i < (best.base + best.len)) {
|
if (best.base != -1 && i >= best.base &&
|
||||||
if (i == best.base)
|
i < (best.base + best.len))
|
||||||
*tp++ = ':';
|
{
|
||||||
continue;
|
if (i == best.base)
|
||||||
}
|
*tp++ = ':';
|
||||||
/* Are we following an initial run of 0x00s or any real hex? */
|
continue;
|
||||||
if (i != 0)
|
}
|
||||||
*tp++ = ':';
|
/* Are we following an initial run of 0x00s or any real hex? */
|
||||||
/* Is this address an encapsulated IPv4? */
|
if (i != 0)
|
||||||
if (i == 6 && best.base == 0 &&
|
*tp++ = ':';
|
||||||
(best.len == 6 || (best.len == 5 && words[5] == 0xffff))) {
|
/* Is this address an encapsulated IPv4? */
|
||||||
if (!inet_ntop4(src+12, tp, sizeof tmp - (tp - tmp)))
|
if (i == 6 && best.base == 0 &&
|
||||||
return (NULL);
|
(best.len == 6 || (best.len == 5 && words[5] == 0xffff)))
|
||||||
tp += strlen(tp);
|
{
|
||||||
break;
|
if (!inet_ntop4(src+12, tp, sizeof tmp - (tp - tmp)))
|
||||||
}
|
return (NULL);
|
||||||
tp += SPRINTF((tp, "%x", words[i]));
|
tp += strlen(tp);
|
||||||
}
|
break;
|
||||||
/* Was it a trailing run of 0x00's? */
|
}
|
||||||
if (best.base != -1 && (best.base + best.len) == (NS_IN6ADDRSZ / NS_INT16SZ))
|
tp += SPRINTF((tp, "%x", words[i]));
|
||||||
*tp++ = ':';
|
}
|
||||||
*tp++ = '\0';
|
|
||||||
|
|
||||||
/*
|
/* Was it a trailing run of 0x00's? */
|
||||||
* Check for overflow, copy, and we're done.
|
if (best.base != -1 && (best.base + best.len) == (NS_IN6ADDRSZ / NS_INT16SZ))
|
||||||
*/
|
*tp++ = ':';
|
||||||
if ((size_t)(tp - tmp) > size) {
|
*tp++ = '\0';
|
||||||
errno = ENOSPC;
|
|
||||||
return (NULL);
|
/*
|
||||||
}
|
* Check for overflow, copy, and we're done.
|
||||||
strcpy(dst, tmp);
|
*/
|
||||||
return (dst);
|
if ((size_t)(tp - tmp) > size)
|
||||||
|
{
|
||||||
|
errno = ENOSPC;
|
||||||
|
return (NULL);
|
||||||
|
}
|
||||||
|
strcpy(dst, tmp);
|
||||||
|
return (dst);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@@ -1,3 +1,5 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
#ifndef ARES_NAMESER_H
|
#ifndef ARES_NAMESER_H
|
||||||
#define ARES_NAMESER_H
|
#define ARES_NAMESER_H
|
||||||
|
|
||||||
@@ -16,7 +18,7 @@
|
|||||||
|
|
||||||
#define EINPROGRESS WSAEINPROGRESS
|
#define EINPROGRESS WSAEINPROGRESS
|
||||||
#define EWOULDBLOCK WSAEWOULDBLOCK
|
#define EWOULDBLOCK WSAEWOULDBLOCK
|
||||||
#define EMSGSIZE WSAEMSGSIZE
|
#define EMSGSIZE WSAEMSGSIZE
|
||||||
#define EAFNOSUPPORT WSAEAFNOSUPPORT
|
#define EAFNOSUPPORT WSAEAFNOSUPPORT
|
||||||
|
|
||||||
/* Structure for scatter/gather I/O. */
|
/* Structure for scatter/gather I/O. */
|
||||||
|
88
ares/setup.h
88
ares/setup.h
@@ -1,5 +1,5 @@
|
|||||||
#ifndef ARES_SETUP_H
|
#ifndef __ARES_SETUP_H
|
||||||
#define ARES_SETUP_H
|
#define __ARES_SETUP_H
|
||||||
|
|
||||||
/* Copyright (C) 2004 - 2005 by Daniel Stenberg et al
|
/* Copyright (C) 2004 - 2005 by Daniel Stenberg et al
|
||||||
*
|
*
|
||||||
@@ -14,17 +14,79 @@
|
|||||||
* 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
|
||||||
/* simple work-around for now, for systems without configure support */
|
|
||||||
|
#ifdef WIN32
|
||||||
|
#include "config-win32.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* HAVE_CONFIG_H */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#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
|
||||||
|
|
||||||
|
#ifndef HAVE_WS2TCPIP_H
|
||||||
#define socklen_t int
|
#define socklen_t int
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* 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
|
||||||
@@ -33,9 +95,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 <winsock.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
|
||||||
@@ -43,8 +107,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
|
||||||
@@ -58,7 +124,7 @@ typedef int ares_socket_t;
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if (defined(WIN32) || defined(WATT32)) && \
|
#if (defined(WIN32) || defined(WATT32)) && \
|
||||||
!(defined(__MINGW32__) || defined(NETWARE))
|
!(defined(__MINGW32__) || defined(NETWARE) || defined(__DJGPP__))
|
||||||
/* protos for the functions we provide in windows_port.c */
|
/* protos for the functions we provide in windows_port.c */
|
||||||
int ares_strncasecmp(const char *s1, const char *s2, int n);
|
int ares_strncasecmp(const char *s1, const char *s2, int n);
|
||||||
int ares_strcasecmp(const char *s1, const char *s2);
|
int ares_strcasecmp(const char *s1, const char *s2);
|
||||||
@@ -79,4 +145,4 @@ int ares_strcasecmp(const char *s1, const char *s2);
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* ARES_SETUP_H */
|
#endif /* __ARES_SETUP_H */
|
||||||
|
@@ -1,213 +0,0 @@
|
|||||||
# Microsoft Developer Studio Generated NMAKE File, Based on adig.dsp
|
|
||||||
!IF "$(CFG)" == ""
|
|
||||||
CFG=adig - Win32 Debug
|
|
||||||
!MESSAGE No configuration specified. Defaulting to adig - Win32 Debug.
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
!IF "$(CFG)" != "adig - Win32 Release" && "$(CFG)" != "adig - Win32 Debug"
|
|
||||||
!MESSAGE Invalid configuration "$(CFG)" specified.
|
|
||||||
!MESSAGE You can specify a configuration when running NMAKE
|
|
||||||
!MESSAGE by defining the macro CFG on the command line. For example:
|
|
||||||
!MESSAGE
|
|
||||||
!MESSAGE NMAKE /f "adig.mak" CFG="adig - Win32 Debug"
|
|
||||||
!MESSAGE
|
|
||||||
!MESSAGE Possible choices for configuration are:
|
|
||||||
!MESSAGE
|
|
||||||
!MESSAGE "adig - Win32 Release" (based on "Win32 (x86) Console Application")
|
|
||||||
!MESSAGE "adig - Win32 Debug" (based on "Win32 (x86) Console Application")
|
|
||||||
!MESSAGE
|
|
||||||
!ERROR An invalid configuration is specified.
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
!IF "$(OS)" == "Windows_NT"
|
|
||||||
NULL=
|
|
||||||
!ELSE
|
|
||||||
NULL=nul
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
CPP=cl.exe
|
|
||||||
RSC=rc.exe
|
|
||||||
|
|
||||||
!IF "$(CFG)" == "adig - Win32 Release"
|
|
||||||
|
|
||||||
OUTDIR=.\Release
|
|
||||||
INTDIR=.\Release
|
|
||||||
# Begin Custom Macros
|
|
||||||
OutDir=.\Release
|
|
||||||
# End Custom Macros
|
|
||||||
|
|
||||||
!IF "$(RECURSE)" == "0"
|
|
||||||
|
|
||||||
ALL : "$(OUTDIR)\adig.exe"
|
|
||||||
|
|
||||||
!ELSE
|
|
||||||
|
|
||||||
ALL : "areslib - Win32 Release" "$(OUTDIR)\adig.exe"
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
!IF "$(RECURSE)" == "1"
|
|
||||||
CLEAN :"areslib - Win32 ReleaseCLEAN"
|
|
||||||
!ELSE
|
|
||||||
CLEAN :
|
|
||||||
!ENDIF
|
|
||||||
-@erase "$(INTDIR)\adig.obj"
|
|
||||||
-@erase "$(INTDIR)\getopt.obj"
|
|
||||||
-@erase "$(INTDIR)\vc60.idb"
|
|
||||||
-@erase "$(OUTDIR)\adig.exe"
|
|
||||||
|
|
||||||
"$(OUTDIR)" :
|
|
||||||
if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
|
|
||||||
|
|
||||||
CPP_PROJ=/nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /Fp"$(INTDIR)\adig.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
|
|
||||||
BSC32=bscmake.exe
|
|
||||||
BSC32_FLAGS=/nologo /o"$(OUTDIR)\adig.bsc"
|
|
||||||
BSC32_SBRS= \
|
|
||||||
|
|
||||||
LINK32=link.exe
|
|
||||||
LINK32_FLAGS=wsock32.lib areslib.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:no /pdb:"$(OUTDIR)\adig.pdb" /machine:I386 /out:"$(OUTDIR)\adig.exe" /libpath:"..\areslib\Release"
|
|
||||||
LINK32_OBJS= \
|
|
||||||
"$(INTDIR)\adig.obj" \
|
|
||||||
"$(INTDIR)\getopt.obj" \
|
|
||||||
"..\areslib\Release\areslib.lib"
|
|
||||||
|
|
||||||
"$(OUTDIR)\adig.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
|
|
||||||
$(LINK32) @<<
|
|
||||||
$(LINK32_FLAGS) $(LINK32_OBJS)
|
|
||||||
<<
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "adig - Win32 Debug"
|
|
||||||
|
|
||||||
OUTDIR=.\Debug
|
|
||||||
INTDIR=.\Debug
|
|
||||||
# Begin Custom Macros
|
|
||||||
OutDir=.\Debug
|
|
||||||
# End Custom Macros
|
|
||||||
|
|
||||||
!IF "$(RECURSE)" == "0"
|
|
||||||
|
|
||||||
ALL : "$(OUTDIR)\adig.exe"
|
|
||||||
|
|
||||||
!ELSE
|
|
||||||
|
|
||||||
ALL : "areslib - Win32 Debug" "$(OUTDIR)\adig.exe"
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
!IF "$(RECURSE)" == "1"
|
|
||||||
CLEAN :"areslib - Win32 DebugCLEAN"
|
|
||||||
!ELSE
|
|
||||||
CLEAN :
|
|
||||||
!ENDIF
|
|
||||||
-@erase "$(INTDIR)\adig.obj"
|
|
||||||
-@erase "$(INTDIR)\getopt.obj"
|
|
||||||
-@erase "$(INTDIR)\vc60.idb"
|
|
||||||
-@erase "$(INTDIR)\vc60.pdb"
|
|
||||||
-@erase "$(OUTDIR)\adig.exe"
|
|
||||||
-@erase "$(OUTDIR)\adig.ilk"
|
|
||||||
-@erase "$(OUTDIR)\adig.pdb"
|
|
||||||
|
|
||||||
"$(OUTDIR)" :
|
|
||||||
if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
|
|
||||||
|
|
||||||
CPP_PROJ=/nologo /MLd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /Fp"$(INTDIR)\adig.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c
|
|
||||||
BSC32=bscmake.exe
|
|
||||||
BSC32_FLAGS=/nologo /o"$(OUTDIR)\adig.bsc"
|
|
||||||
BSC32_SBRS= \
|
|
||||||
|
|
||||||
LINK32=link.exe
|
|
||||||
LINK32_FLAGS=wsock32.lib areslib.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:yes /pdb:"$(OUTDIR)\adig.pdb" /debug /machine:I386 /out:"$(OUTDIR)\adig.exe" /pdbtype:sept /libpath:"..\areslib\Debug"
|
|
||||||
LINK32_OBJS= \
|
|
||||||
"$(INTDIR)\adig.obj" \
|
|
||||||
"$(INTDIR)\getopt.obj" \
|
|
||||||
"..\areslib\Debug\areslib.lib"
|
|
||||||
|
|
||||||
"$(OUTDIR)\adig.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
|
|
||||||
$(LINK32) @<<
|
|
||||||
$(LINK32_FLAGS) $(LINK32_OBJS)
|
|
||||||
<<
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
.c{$(INTDIR)}.obj::
|
|
||||||
$(CPP) @<<
|
|
||||||
$(CPP_PROJ) $<
|
|
||||||
<<
|
|
||||||
|
|
||||||
.cpp{$(INTDIR)}.obj::
|
|
||||||
$(CPP) @<<
|
|
||||||
$(CPP_PROJ) $<
|
|
||||||
<<
|
|
||||||
|
|
||||||
.cxx{$(INTDIR)}.obj::
|
|
||||||
$(CPP) @<<
|
|
||||||
$(CPP_PROJ) $<
|
|
||||||
<<
|
|
||||||
|
|
||||||
.c{$(INTDIR)}.sbr::
|
|
||||||
$(CPP) @<<
|
|
||||||
$(CPP_PROJ) $<
|
|
||||||
<<
|
|
||||||
|
|
||||||
.cpp{$(INTDIR)}.sbr::
|
|
||||||
$(CPP) @<<
|
|
||||||
$(CPP_PROJ) $<
|
|
||||||
<<
|
|
||||||
|
|
||||||
.cxx{$(INTDIR)}.sbr::
|
|
||||||
$(CPP) @<<
|
|
||||||
$(CPP_PROJ) $<
|
|
||||||
<<
|
|
||||||
|
|
||||||
|
|
||||||
!IF "$(NO_EXTERNAL_DEPS)" != "1"
|
|
||||||
!IF EXISTS("adig.dep")
|
|
||||||
!INCLUDE "adig.dep"
|
|
||||||
!ELSE
|
|
||||||
!MESSAGE Warning: cannot find "adig.dep"
|
|
||||||
!ENDIF
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
|
|
||||||
!IF "$(CFG)" == "adig - Win32 Release" || "$(CFG)" == "adig - Win32 Debug"
|
|
||||||
SOURCE=..\..\adig.c
|
|
||||||
|
|
||||||
"$(INTDIR)\adig.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
SOURCE=..\..\getopt.c
|
|
||||||
|
|
||||||
"$(INTDIR)\getopt.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
!IF "$(CFG)" == "adig - Win32 Release"
|
|
||||||
|
|
||||||
"areslib - Win32 Release" :
|
|
||||||
cd "..\areslib"
|
|
||||||
$(MAKE) /$(MAKEFLAGS) /F ".\areslib.mak" CFG="areslib - Win32 Release"
|
|
||||||
cd "..\adig"
|
|
||||||
|
|
||||||
"areslib - Win32 ReleaseCLEAN" :
|
|
||||||
cd "..\areslib"
|
|
||||||
$(MAKE) /$(MAKEFLAGS) /F ".\areslib.mak" CFG="areslib - Win32 Release" RECURSE=1 CLEAN
|
|
||||||
cd "..\adig"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "adig - Win32 Debug"
|
|
||||||
|
|
||||||
"areslib - Win32 Debug" :
|
|
||||||
cd "..\areslib"
|
|
||||||
$(MAKE) /$(MAKEFLAGS) /F ".\areslib.mak" CFG="areslib - Win32 Debug"
|
|
||||||
cd "..\adig"
|
|
||||||
|
|
||||||
"areslib - Win32 DebugCLEAN" :
|
|
||||||
cd "..\areslib"
|
|
||||||
$(MAKE) /$(MAKEFLAGS) /F ".\areslib.mak" CFG="areslib - Win32 Debug" RECURSE=1 CLEAN
|
|
||||||
cd "..\adig"
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
@@ -1,77 +0,0 @@
|
|||||||
<html>
|
|
||||||
<body>
|
|
||||||
<pre>
|
|
||||||
<h1>Build Log</h1>
|
|
||||||
<h3>
|
|
||||||
--------------------Configuration: areslib - Win32 Release--------------------
|
|
||||||
</h3>
|
|
||||||
<h3>Command Lines</h3>
|
|
||||||
Creating temporary file "C:\DOCUME~1\liren\LOCALS~1\Temp\RSP615A.tmp" with contents
|
|
||||||
[
|
|
||||||
/nologo /MD /W3 /GX /O2 /I "..\.." /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /Fp"Release/areslib.pch" /YX /Fo"Release/" /Fd"Release/" /FD /c
|
|
||||||
"Z:\ARES-1.1.1\ares_gethostbyname.c"
|
|
||||||
"Z:\ARES-1.1.1\ares_init.c"
|
|
||||||
]
|
|
||||||
Creating command line "cl.exe @C:\DOCUME~1\liren\LOCALS~1\Temp\RSP615A.tmp"
|
|
||||||
Creating temporary file "C:\DOCUME~1\liren\LOCALS~1\Temp\RSP615B.tmp" with contents
|
|
||||||
[
|
|
||||||
/nologo /out:"Release\areslib.lib"
|
|
||||||
".\Release\ares__close_sockets.obj"
|
|
||||||
".\Release\ares__get_hostent.obj"
|
|
||||||
".\Release\ares__read_line.obj"
|
|
||||||
".\Release\ares_destroy.obj"
|
|
||||||
".\Release\ares_expand_name.obj"
|
|
||||||
".\Release\ares_fds.obj"
|
|
||||||
".\Release\ares_free_errmem.obj"
|
|
||||||
".\Release\ares_free_hostent.obj"
|
|
||||||
".\Release\ares_free_string.obj"
|
|
||||||
".\Release\ares_gethostbyaddr.obj"
|
|
||||||
".\Release\ares_gethostbyname.obj"
|
|
||||||
".\Release\ares_init.obj"
|
|
||||||
".\Release\ares_mkquery.obj"
|
|
||||||
".\Release\ares_parse_a_reply.obj"
|
|
||||||
".\Release\ares_parse_ptr_reply.obj"
|
|
||||||
".\Release\ares_process.obj"
|
|
||||||
".\Release\ares_query.obj"
|
|
||||||
".\Release\ares_search.obj"
|
|
||||||
".\Release\ares_send.obj"
|
|
||||||
".\Release\ares_strerror.obj"
|
|
||||||
".\Release\ares_timeout.obj"
|
|
||||||
".\Release\windows_port.obj"
|
|
||||||
]
|
|
||||||
Creating command line "link.exe -lib @C:\DOCUME~1\liren\LOCALS~1\Temp\RSP615B.tmp"
|
|
||||||
<h3>Output Window</h3>
|
|
||||||
Compiling...
|
|
||||||
ares_gethostbyname.c
|
|
||||||
Z:\ARES-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition
|
|
||||||
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR'
|
|
||||||
ares_init.c
|
|
||||||
Z:\ARES-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition
|
|
||||||
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR'
|
|
||||||
Z:\ARES-1.1.1\ares_init.c(141) : warning C4013: '_getpid' undefined; assuming extern returning int
|
|
||||||
Z:\ARES-1.1.1\ares_init.c(236) : warning C4101: 'p' : unreferenced local variable
|
|
||||||
Z:\ARES-1.1.1\ares_init.c(237) : warning C4101: 'linesize' : unreferenced local variable
|
|
||||||
Z:\ARES-1.1.1\ares_init.c(235) : warning C4101: 'fp' : unreferenced local variable
|
|
||||||
Creating library...
|
|
||||||
<h3>
|
|
||||||
--------------------Configuration: adig - Win32 Release--------------------
|
|
||||||
</h3>
|
|
||||||
<h3>Command Lines</h3>
|
|
||||||
Creating temporary file "C:\DOCUME~1\liren\LOCALS~1\Temp\RSP615C.tmp" with contents
|
|
||||||
[
|
|
||||||
wsock32.lib areslib.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:no /pdb:"Release/adig.pdb" /machine:I386 /out:"Release/adig.exe" /libpath:"..\areslib\Release"
|
|
||||||
".\Release\adig.obj"
|
|
||||||
".\Release\getopt.obj"
|
|
||||||
"\ARES-1.1.1\vc\areslib\Release\areslib.lib"
|
|
||||||
]
|
|
||||||
Creating command line "link.exe @C:\DOCUME~1\liren\LOCALS~1\Temp\RSP615C.tmp"
|
|
||||||
<h3>Output Window</h3>
|
|
||||||
Linking...
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<h3>Results</h3>
|
|
||||||
adig.exe - 0 error(s), 6 warning(s)
|
|
||||||
</pre>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
@@ -1,223 +0,0 @@
|
|||||||
# Microsoft Developer Studio Generated NMAKE File, Based on ahost.dsp
|
|
||||||
!IF "$(CFG)" == ""
|
|
||||||
CFG=ahost - Win32 Debug
|
|
||||||
!MESSAGE No configuration specified. Defaulting to ahost - Win32 Debug.
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
!IF "$(CFG)" != "ahost - Win32 Release" && "$(CFG)" != "ahost - Win32 Debug"
|
|
||||||
!MESSAGE Invalid configuration "$(CFG)" specified.
|
|
||||||
!MESSAGE You can specify a configuration when running NMAKE
|
|
||||||
!MESSAGE by defining the macro CFG on the command line. For example:
|
|
||||||
!MESSAGE
|
|
||||||
!MESSAGE NMAKE /f "ahost.mak" CFG="ahost - Win32 Debug"
|
|
||||||
!MESSAGE
|
|
||||||
!MESSAGE Possible choices for configuration are:
|
|
||||||
!MESSAGE
|
|
||||||
!MESSAGE "ahost - Win32 Release" (based on "Win32 (x86) Console Application")
|
|
||||||
!MESSAGE "ahost - Win32 Debug" (based on "Win32 (x86) Console Application")
|
|
||||||
!MESSAGE
|
|
||||||
!ERROR An invalid configuration is specified.
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
!IF "$(OS)" == "Windows_NT"
|
|
||||||
NULL=
|
|
||||||
!ELSE
|
|
||||||
NULL=nul
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
CPP=cl.exe
|
|
||||||
RSC=rc.exe
|
|
||||||
|
|
||||||
!IF "$(CFG)" == "ahost - Win32 Release"
|
|
||||||
|
|
||||||
OUTDIR=.\Release
|
|
||||||
INTDIR=.\Release
|
|
||||||
# Begin Custom Macros
|
|
||||||
OutDir=.\Release
|
|
||||||
# End Custom Macros
|
|
||||||
|
|
||||||
!IF "$(RECURSE)" == "0"
|
|
||||||
|
|
||||||
ALL : "$(OUTDIR)\ahost.exe"
|
|
||||||
|
|
||||||
!ELSE
|
|
||||||
|
|
||||||
ALL : "areslib - Win32 Release" "$(OUTDIR)\ahost.exe"
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
!IF "$(RECURSE)" == "1"
|
|
||||||
CLEAN :"areslib - Win32 ReleaseCLEAN"
|
|
||||||
!ELSE
|
|
||||||
CLEAN :
|
|
||||||
!ENDIF
|
|
||||||
-@erase "$(INTDIR)\ahost.obj"
|
|
||||||
-@erase "$(INTDIR)\vc60.idb"
|
|
||||||
-@erase "$(OUTDIR)\ahost.exe"
|
|
||||||
|
|
||||||
"$(OUTDIR)" :
|
|
||||||
if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
|
|
||||||
|
|
||||||
CPP_PROJ=/nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /Fp"$(INTDIR)\ahost.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
|
|
||||||
BSC32=bscmake.exe
|
|
||||||
BSC32_FLAGS=/nologo /o"$(OUTDIR)\ahost.bsc"
|
|
||||||
BSC32_SBRS= \
|
|
||||||
|
|
||||||
LINK32=link.exe
|
|
||||||
LINK32_FLAGS=wsock32.lib areslib.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:no /pdb:"$(OUTDIR)\ahost.pdb" /machine:I386 /out:"$(OUTDIR)\ahost.exe" /libpath:"..\areslib\Release"
|
|
||||||
LINK32_OBJS= \
|
|
||||||
"$(INTDIR)\ahost.obj" \
|
|
||||||
"..\areslib\Release\areslib.lib"
|
|
||||||
|
|
||||||
"$(OUTDIR)\ahost.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
|
|
||||||
$(LINK32) @<<
|
|
||||||
$(LINK32_FLAGS) $(LINK32_OBJS)
|
|
||||||
<<
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "ahost - Win32 Debug"
|
|
||||||
|
|
||||||
OUTDIR=.\Debug
|
|
||||||
INTDIR=.\Debug
|
|
||||||
# Begin Custom Macros
|
|
||||||
OutDir=.\Debug
|
|
||||||
# End Custom Macros
|
|
||||||
|
|
||||||
!IF "$(RECURSE)" == "0"
|
|
||||||
|
|
||||||
ALL : "$(OUTDIR)\ahost.exe" "$(OUTDIR)\ahost.bsc"
|
|
||||||
|
|
||||||
!ELSE
|
|
||||||
|
|
||||||
ALL : "areslib - Win32 Debug" "$(OUTDIR)\ahost.exe" "$(OUTDIR)\ahost.bsc"
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
!IF "$(RECURSE)" == "1"
|
|
||||||
CLEAN :"areslib - Win32 DebugCLEAN"
|
|
||||||
!ELSE
|
|
||||||
CLEAN :
|
|
||||||
!ENDIF
|
|
||||||
-@erase "$(INTDIR)\ahost.obj"
|
|
||||||
-@erase "$(INTDIR)\ahost.sbr"
|
|
||||||
-@erase "$(INTDIR)\vc60.idb"
|
|
||||||
-@erase "$(INTDIR)\vc60.pdb"
|
|
||||||
-@erase "$(OUTDIR)\ahost.bsc"
|
|
||||||
-@erase "$(OUTDIR)\ahost.exe"
|
|
||||||
-@erase "$(OUTDIR)\ahost.ilk"
|
|
||||||
-@erase "$(OUTDIR)\ahost.pdb"
|
|
||||||
|
|
||||||
"$(OUTDIR)" :
|
|
||||||
if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
|
|
||||||
|
|
||||||
CPP_PROJ=/nologo /MLd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\ahost.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c
|
|
||||||
BSC32=bscmake.exe
|
|
||||||
BSC32_FLAGS=/nologo /o"$(OUTDIR)\ahost.bsc"
|
|
||||||
BSC32_SBRS= \
|
|
||||||
"$(INTDIR)\ahost.sbr"
|
|
||||||
|
|
||||||
"$(OUTDIR)\ahost.bsc" : "$(OUTDIR)" $(BSC32_SBRS)
|
|
||||||
$(BSC32) @<<
|
|
||||||
$(BSC32_FLAGS) $(BSC32_SBRS)
|
|
||||||
<<
|
|
||||||
|
|
||||||
LINK32=link.exe
|
|
||||||
LINK32_FLAGS=wsock32.lib areslib.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:yes /pdb:"$(OUTDIR)\ahost.pdb" /debug /machine:I386 /out:"$(OUTDIR)\ahost.exe" /pdbtype:sept /libpath:"..\areslib\Debug"
|
|
||||||
LINK32_OBJS= \
|
|
||||||
"$(INTDIR)\ahost.obj" \
|
|
||||||
"..\areslib\Debug\areslib.lib"
|
|
||||||
|
|
||||||
"$(OUTDIR)\ahost.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
|
|
||||||
$(LINK32) @<<
|
|
||||||
$(LINK32_FLAGS) $(LINK32_OBJS)
|
|
||||||
<<
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
.c{$(INTDIR)}.obj::
|
|
||||||
$(CPP) @<<
|
|
||||||
$(CPP_PROJ) $<
|
|
||||||
<<
|
|
||||||
|
|
||||||
.cpp{$(INTDIR)}.obj::
|
|
||||||
$(CPP) @<<
|
|
||||||
$(CPP_PROJ) $<
|
|
||||||
<<
|
|
||||||
|
|
||||||
.cxx{$(INTDIR)}.obj::
|
|
||||||
$(CPP) @<<
|
|
||||||
$(CPP_PROJ) $<
|
|
||||||
<<
|
|
||||||
|
|
||||||
.c{$(INTDIR)}.sbr::
|
|
||||||
$(CPP) @<<
|
|
||||||
$(CPP_PROJ) $<
|
|
||||||
<<
|
|
||||||
|
|
||||||
.cpp{$(INTDIR)}.sbr::
|
|
||||||
$(CPP) @<<
|
|
||||||
$(CPP_PROJ) $<
|
|
||||||
<<
|
|
||||||
|
|
||||||
.cxx{$(INTDIR)}.sbr::
|
|
||||||
$(CPP) @<<
|
|
||||||
$(CPP_PROJ) $<
|
|
||||||
<<
|
|
||||||
|
|
||||||
|
|
||||||
!IF "$(NO_EXTERNAL_DEPS)" != "1"
|
|
||||||
!IF EXISTS("ahost.dep")
|
|
||||||
!INCLUDE "ahost.dep"
|
|
||||||
!ELSE
|
|
||||||
!MESSAGE Warning: cannot find "ahost.dep"
|
|
||||||
!ENDIF
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
|
|
||||||
!IF "$(CFG)" == "ahost - Win32 Release" || "$(CFG)" == "ahost - Win32 Debug"
|
|
||||||
SOURCE=..\..\ahost.c
|
|
||||||
|
|
||||||
!IF "$(CFG)" == "ahost - Win32 Release"
|
|
||||||
|
|
||||||
|
|
||||||
"$(INTDIR)\ahost.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "ahost - Win32 Debug"
|
|
||||||
|
|
||||||
|
|
||||||
"$(INTDIR)\ahost.obj" "$(INTDIR)\ahost.sbr" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
!IF "$(CFG)" == "ahost - Win32 Release"
|
|
||||||
|
|
||||||
"areslib - Win32 Release" :
|
|
||||||
cd "..\areslib"
|
|
||||||
$(MAKE) /$(MAKEFLAGS) /F ".\areslib.mak" CFG="areslib - Win32 Release"
|
|
||||||
cd "..\ahost"
|
|
||||||
|
|
||||||
"areslib - Win32 ReleaseCLEAN" :
|
|
||||||
cd "..\areslib"
|
|
||||||
$(MAKE) /$(MAKEFLAGS) /F ".\areslib.mak" CFG="areslib - Win32 Release" RECURSE=1 CLEAN
|
|
||||||
cd "..\ahost"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "ahost - Win32 Debug"
|
|
||||||
|
|
||||||
"areslib - Win32 Debug" :
|
|
||||||
cd "..\areslib"
|
|
||||||
$(MAKE) /$(MAKEFLAGS) /F ".\areslib.mak" CFG="areslib - Win32 Debug"
|
|
||||||
cd "..\ahost"
|
|
||||||
|
|
||||||
"areslib - Win32 DebugCLEAN" :
|
|
||||||
cd "..\areslib"
|
|
||||||
$(MAKE) /$(MAKEFLAGS) /F ".\areslib.mak" CFG="areslib - Win32 Debug" RECURSE=1 CLEAN
|
|
||||||
cd "..\ahost"
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
@@ -1,16 +0,0 @@
|
|||||||
<html>
|
|
||||||
<body>
|
|
||||||
<pre>
|
|
||||||
<h1>Build Log</h1>
|
|
||||||
<h3>
|
|
||||||
--------------------Configuration: ahost - Win32 Release--------------------
|
|
||||||
</h3>
|
|
||||||
<h3>Command Lines</h3>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<h3>Results</h3>
|
|
||||||
ahost.exe - 0 error(s), 0 warning(s)
|
|
||||||
</pre>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
@@ -63,8 +63,8 @@ LIB32=link.exe -lib
|
|||||||
# PROP Output_Dir "Debug"
|
# PROP Output_Dir "Debug"
|
||||||
# PROP Intermediate_Dir "Debug"
|
# PROP Intermediate_Dir "Debug"
|
||||||
# PROP Target_Dir ""
|
# PROP Target_Dir ""
|
||||||
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
|
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
|
||||||
# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\.." /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
|
# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\.." /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
|
||||||
# ADD BASE RSC /l 0x409 /d "_DEBUG"
|
# ADD BASE RSC /l 0x409 /d "_DEBUG"
|
||||||
# ADD RSC /l 0x409 /d "_DEBUG"
|
# ADD RSC /l 0x409 /d "_DEBUG"
|
||||||
BSC32=bscmake.exe
|
BSC32=bscmake.exe
|
||||||
@@ -97,6 +97,10 @@ SOURCE=..\..\ares__read_line.c
|
|||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\..\ares_cancel.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=..\..\ares_destroy.c
|
SOURCE=..\..\ares_destroy.c
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
@@ -137,6 +141,10 @@ SOURCE=..\..\ares_parse_a_reply.c
|
|||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\..\ares_parse_aaaa_reply.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=..\..\ares_parse_ptr_reply.c
|
SOURCE=..\..\ares_parse_ptr_reply.c
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
@@ -153,14 +161,6 @@ SOURCE=..\..\ares_search.c
|
|||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=..\..\ares_cancel.c
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=..\..\ares_version.c
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=..\..\ares_send.c
|
SOURCE=..\..\ares_send.c
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
@@ -173,6 +173,22 @@ SOURCE=..\..\ares_timeout.c
|
|||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\..\ares_version.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\..\bitncmp.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\..\inet_net_pton.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\..\inet_ntop.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=..\..\windows_port.c
|
SOURCE=..\..\windows_port.c
|
||||||
# End Source File
|
# End Source File
|
||||||
# End Group
|
# End Group
|
||||||
@@ -189,7 +205,7 @@ SOURCE=..\..\ares_dns.h
|
|||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=..\..\ares_version.h
|
SOURCE=..\..\ares_ipv6.h
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
@@ -197,6 +213,22 @@ SOURCE=..\..\ares_private.h
|
|||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\..\ares_version.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\..\bitncmp.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\..\inet_net_pton.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\..\inet_ntop.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=..\..\nameser.h
|
SOURCE=..\..\nameser.h
|
||||||
# End Source File
|
# End Source File
|
||||||
# End Group
|
# End Group
|
||||||
|
29
ares/vc/areslib/areslib.dsw
Normal file
29
ares/vc/areslib/areslib.dsw
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
Microsoft Developer Studio Workspace File, Format Version 6.00
|
||||||
|
# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
|
Project: "areslib"=.\areslib.dsp - Package Owner=<4>
|
||||||
|
|
||||||
|
Package=<5>
|
||||||
|
{{{
|
||||||
|
}}}
|
||||||
|
|
||||||
|
Package=<4>
|
||||||
|
{{{
|
||||||
|
}}}
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
|
Global:
|
||||||
|
|
||||||
|
Package=<5>
|
||||||
|
{{{
|
||||||
|
}}}
|
||||||
|
|
||||||
|
Package=<3>
|
||||||
|
{{{
|
||||||
|
}}}
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
|
@@ -1,367 +0,0 @@
|
|||||||
# Microsoft Developer Studio Generated NMAKE File, Based on areslib.dsp
|
|
||||||
!IF "$(CFG)" == ""
|
|
||||||
CFG=areslib - Win32 Debug
|
|
||||||
!MESSAGE No configuration specified. Defaulting to areslib - Win32 Debug.
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
!IF "$(CFG)" != "areslib - Win32 Release" && "$(CFG)" != "areslib - Win32 Debug"
|
|
||||||
!MESSAGE Invalid configuration "$(CFG)" specified.
|
|
||||||
!MESSAGE You can specify a configuration when running NMAKE
|
|
||||||
!MESSAGE by defining the macro CFG on the command line. For example:
|
|
||||||
!MESSAGE
|
|
||||||
!MESSAGE NMAKE /f "areslib.mak" CFG="areslib - Win32 Debug"
|
|
||||||
!MESSAGE
|
|
||||||
!MESSAGE Possible choices for configuration are:
|
|
||||||
!MESSAGE
|
|
||||||
!MESSAGE "areslib - Win32 Release" (based on "Win32 (x86) Static Library")
|
|
||||||
!MESSAGE "areslib - Win32 Debug" (based on "Win32 (x86) Static Library")
|
|
||||||
!MESSAGE
|
|
||||||
!ERROR An invalid configuration is specified.
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
!IF "$(OS)" == "Windows_NT"
|
|
||||||
NULL=
|
|
||||||
!ELSE
|
|
||||||
NULL=nul
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
CPP=cl.exe
|
|
||||||
RSC=rc.exe
|
|
||||||
|
|
||||||
!IF "$(CFG)" == "areslib - Win32 Release"
|
|
||||||
|
|
||||||
OUTDIR=.\Release
|
|
||||||
INTDIR=.\Release
|
|
||||||
# Begin Custom Macros
|
|
||||||
OutDir=.\Release
|
|
||||||
# End Custom Macros
|
|
||||||
|
|
||||||
ALL : "$(OUTDIR)\areslib.lib"
|
|
||||||
|
|
||||||
|
|
||||||
CLEAN :
|
|
||||||
-@erase "$(INTDIR)\ares__close_sockets.obj"
|
|
||||||
-@erase "$(INTDIR)\ares__get_hostent.obj"
|
|
||||||
-@erase "$(INTDIR)\ares__read_line.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_destroy.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_expand_name.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_fds.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_free_hostent.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_free_string.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_gethostbyaddr.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_gethostbyname.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_init.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_mkquery.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_parse_a_reply.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_parse_ptr_reply.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_process.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_query.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_search.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_send.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_strerror.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_timeout.obj"
|
|
||||||
-@erase "$(INTDIR)\vc60.idb"
|
|
||||||
-@erase "$(INTDIR)\windows_port.obj"
|
|
||||||
-@erase "$(OUTDIR)\areslib.lib"
|
|
||||||
|
|
||||||
"$(OUTDIR)" :
|
|
||||||
if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
|
|
||||||
|
|
||||||
CPP_PROJ=/nologo /MD /W3 /GX /O2 /I "..\.." /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /Fp"$(INTDIR)\areslib.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
|
|
||||||
BSC32=bscmake.exe
|
|
||||||
BSC32_FLAGS=/nologo /o"$(OUTDIR)\areslib.bsc"
|
|
||||||
BSC32_SBRS= \
|
|
||||||
|
|
||||||
LIB32=link.exe -lib
|
|
||||||
LIB32_FLAGS=/nologo /out:"$(OUTDIR)\areslib.lib"
|
|
||||||
LIB32_OBJS= \
|
|
||||||
"$(INTDIR)\ares__close_sockets.obj" \
|
|
||||||
"$(INTDIR)\ares__get_hostent.obj" \
|
|
||||||
"$(INTDIR)\ares__read_line.obj" \
|
|
||||||
"$(INTDIR)\ares_destroy.obj" \
|
|
||||||
"$(INTDIR)\ares_expand_name.obj" \
|
|
||||||
"$(INTDIR)\ares_fds.obj" \
|
|
||||||
"$(INTDIR)\ares_free_hostent.obj" \
|
|
||||||
"$(INTDIR)\ares_free_string.obj" \
|
|
||||||
"$(INTDIR)\ares_gethostbyaddr.obj" \
|
|
||||||
"$(INTDIR)\ares_gethostbyname.obj" \
|
|
||||||
"$(INTDIR)\ares_init.obj" \
|
|
||||||
"$(INTDIR)\ares_mkquery.obj" \
|
|
||||||
"$(INTDIR)\ares_parse_a_reply.obj" \
|
|
||||||
"$(INTDIR)\ares_parse_ptr_reply.obj" \
|
|
||||||
"$(INTDIR)\ares_process.obj" \
|
|
||||||
"$(INTDIR)\ares_query.obj" \
|
|
||||||
"$(INTDIR)\ares_search.obj" \
|
|
||||||
"$(INTDIR)\ares_cancel.obj" \
|
|
||||||
"$(INTDIR)\ares_version.obj" \
|
|
||||||
"$(INTDIR)\ares_send.obj" \
|
|
||||||
"$(INTDIR)\ares_strerror.obj" \
|
|
||||||
"$(INTDIR)\ares_timeout.obj" \
|
|
||||||
"$(INTDIR)\windows_port.obj"
|
|
||||||
|
|
||||||
"$(OUTDIR)\areslib.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS)
|
|
||||||
$(LIB32) @<<
|
|
||||||
$(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS)
|
|
||||||
<<
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "areslib - Win32 Debug"
|
|
||||||
|
|
||||||
OUTDIR=.\Debug
|
|
||||||
INTDIR=.\Debug
|
|
||||||
# Begin Custom Macros
|
|
||||||
OutDir=.\Debug
|
|
||||||
# End Custom Macros
|
|
||||||
|
|
||||||
ALL : "$(OUTDIR)\areslib.lib"
|
|
||||||
|
|
||||||
|
|
||||||
CLEAN :
|
|
||||||
-@erase "$(INTDIR)\ares__close_sockets.obj"
|
|
||||||
-@erase "$(INTDIR)\ares__get_hostent.obj"
|
|
||||||
-@erase "$(INTDIR)\ares__read_line.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_destroy.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_expand_name.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_fds.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_free_hostent.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_free_string.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_gethostbyaddr.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_gethostbyname.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_init.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_mkquery.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_parse_a_reply.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_parse_ptr_reply.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_process.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_query.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_search.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_cancel.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_version.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_send.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_strerror.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_timeout.obj"
|
|
||||||
-@erase "$(INTDIR)\vc60.idb"
|
|
||||||
-@erase "$(INTDIR)\vc60.pdb"
|
|
||||||
-@erase "$(INTDIR)\windows_port.obj"
|
|
||||||
-@erase "$(OUTDIR)\areslib.lib"
|
|
||||||
|
|
||||||
"$(OUTDIR)" :
|
|
||||||
if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
|
|
||||||
|
|
||||||
CPP_PROJ=/nologo /MLd /W3 /Gm /GX /ZI /Od /I "..\.." /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /Fp"$(INTDIR)\areslib.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c
|
|
||||||
BSC32=bscmake.exe
|
|
||||||
BSC32_FLAGS=/nologo /o"$(OUTDIR)\areslib.bsc"
|
|
||||||
BSC32_SBRS= \
|
|
||||||
|
|
||||||
LIB32=link.exe -lib
|
|
||||||
LIB32_FLAGS=/nologo /out:"$(OUTDIR)\areslib.lib"
|
|
||||||
LIB32_OBJS= \
|
|
||||||
"$(INTDIR)\ares__close_sockets.obj" \
|
|
||||||
"$(INTDIR)\ares__get_hostent.obj" \
|
|
||||||
"$(INTDIR)\ares__read_line.obj" \
|
|
||||||
"$(INTDIR)\ares_destroy.obj" \
|
|
||||||
"$(INTDIR)\ares_expand_name.obj" \
|
|
||||||
"$(INTDIR)\ares_fds.obj" \
|
|
||||||
"$(INTDIR)\ares_free_hostent.obj" \
|
|
||||||
"$(INTDIR)\ares_free_string.obj" \
|
|
||||||
"$(INTDIR)\ares_gethostbyaddr.obj" \
|
|
||||||
"$(INTDIR)\ares_gethostbyname.obj" \
|
|
||||||
"$(INTDIR)\ares_init.obj" \
|
|
||||||
"$(INTDIR)\ares_mkquery.obj" \
|
|
||||||
"$(INTDIR)\ares_parse_a_reply.obj" \
|
|
||||||
"$(INTDIR)\ares_parse_ptr_reply.obj" \
|
|
||||||
"$(INTDIR)\ares_process.obj" \
|
|
||||||
"$(INTDIR)\ares_query.obj" \
|
|
||||||
"$(INTDIR)\ares_search.obj" \
|
|
||||||
"$(INTDIR)\ares_send.obj" \
|
|
||||||
"$(INTDIR)\ares_strerror.obj" \
|
|
||||||
"$(INTDIR)\ares_timeout.obj" \
|
|
||||||
"$(INTDIR)\windows_port.obj"
|
|
||||||
|
|
||||||
"$(OUTDIR)\areslib.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS)
|
|
||||||
$(LIB32) @<<
|
|
||||||
$(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS)
|
|
||||||
<<
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
.c{$(INTDIR)}.obj::
|
|
||||||
$(CPP) @<<
|
|
||||||
$(CPP_PROJ) $<
|
|
||||||
<<
|
|
||||||
|
|
||||||
.cpp{$(INTDIR)}.obj::
|
|
||||||
$(CPP) @<<
|
|
||||||
$(CPP_PROJ) $<
|
|
||||||
<<
|
|
||||||
|
|
||||||
.cxx{$(INTDIR)}.obj::
|
|
||||||
$(CPP) @<<
|
|
||||||
$(CPP_PROJ) $<
|
|
||||||
<<
|
|
||||||
|
|
||||||
.c{$(INTDIR)}.sbr::
|
|
||||||
$(CPP) @<<
|
|
||||||
$(CPP_PROJ) $<
|
|
||||||
<<
|
|
||||||
|
|
||||||
.cpp{$(INTDIR)}.sbr::
|
|
||||||
$(CPP) @<<
|
|
||||||
$(CPP_PROJ) $<
|
|
||||||
<<
|
|
||||||
|
|
||||||
.cxx{$(INTDIR)}.sbr::
|
|
||||||
$(CPP) @<<
|
|
||||||
$(CPP_PROJ) $<
|
|
||||||
<<
|
|
||||||
|
|
||||||
|
|
||||||
!IF "$(NO_EXTERNAL_DEPS)" != "1"
|
|
||||||
!IF EXISTS("areslib.dep")
|
|
||||||
!INCLUDE "areslib.dep"
|
|
||||||
!ELSE
|
|
||||||
!MESSAGE Warning: cannot find "areslib.dep"
|
|
||||||
!ENDIF
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
|
|
||||||
!IF "$(CFG)" == "areslib - Win32 Release" || "$(CFG)" == "areslib - Win32 Debug"
|
|
||||||
SOURCE=..\..\ares__close_sockets.c
|
|
||||||
|
|
||||||
"$(INTDIR)\ares__close_sockets.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
SOURCE=..\..\ares__get_hostent.c
|
|
||||||
|
|
||||||
"$(INTDIR)\ares__get_hostent.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
SOURCE=..\..\ares__read_line.c
|
|
||||||
|
|
||||||
"$(INTDIR)\ares__read_line.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
SOURCE=..\..\ares_destroy.c
|
|
||||||
|
|
||||||
"$(INTDIR)\ares_destroy.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
SOURCE=..\..\ares_expand_name.c
|
|
||||||
|
|
||||||
"$(INTDIR)\ares_expand_name.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
SOURCE=..\..\ares_fds.c
|
|
||||||
|
|
||||||
"$(INTDIR)\ares_fds.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
SOURCE=..\..\ares_free_hostent.c
|
|
||||||
|
|
||||||
"$(INTDIR)\ares_free_hostent.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
SOURCE=..\..\ares_free_string.c
|
|
||||||
|
|
||||||
"$(INTDIR)\ares_free_string.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
SOURCE=..\..\ares_gethostbyaddr.c
|
|
||||||
|
|
||||||
"$(INTDIR)\ares_gethostbyaddr.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
SOURCE=..\..\ares_gethostbyname.c
|
|
||||||
|
|
||||||
"$(INTDIR)\ares_gethostbyname.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
SOURCE=..\..\ares_init.c
|
|
||||||
|
|
||||||
"$(INTDIR)\ares_init.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
SOURCE=..\..\ares_mkquery.c
|
|
||||||
|
|
||||||
"$(INTDIR)\ares_mkquery.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
SOURCE=..\..\ares_parse_a_reply.c
|
|
||||||
|
|
||||||
"$(INTDIR)\ares_parse_a_reply.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
SOURCE=..\..\ares_parse_ptr_reply.c
|
|
||||||
|
|
||||||
"$(INTDIR)\ares_parse_ptr_reply.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
SOURCE=..\..\ares_process.c
|
|
||||||
|
|
||||||
"$(INTDIR)\ares_process.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
SOURCE=..\..\ares_query.c
|
|
||||||
|
|
||||||
"$(INTDIR)\ares_query.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
SOURCE=..\..\ares_search.c
|
|
||||||
|
|
||||||
"$(INTDIR)\ares_search.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
SOURCE=..\..\ares_version.c
|
|
||||||
|
|
||||||
"$(INTDIR)\ares_version.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
SOURCE=..\..\ares_cancel.c
|
|
||||||
|
|
||||||
"$(INTDIR)\ares_cancel.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
SOURCE=..\..\ares_send.c
|
|
||||||
|
|
||||||
"$(INTDIR)\ares_send.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
SOURCE=..\..\ares_strerror.c
|
|
||||||
|
|
||||||
"$(INTDIR)\ares_strerror.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
SOURCE=..\..\ares_timeout.c
|
|
||||||
|
|
||||||
"$(INTDIR)\ares_timeout.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
SOURCE=..\..\windows_port.c
|
|
||||||
|
|
||||||
"$(INTDIR)\windows_port.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
@@ -1,125 +0,0 @@
|
|||||||
<html>
|
|
||||||
<body>
|
|
||||||
<pre>
|
|
||||||
<h1>Build Log</h1>
|
|
||||||
<h3>
|
|
||||||
--------------------Configuration: areslib - Win32 Release--------------------
|
|
||||||
</h3>
|
|
||||||
<h3>Command Lines</h3>
|
|
||||||
Creating temporary file "C:\DOCUME~1\liren\LOCALS~1\Temp\RSP603D.tmp" with contents
|
|
||||||
[
|
|
||||||
/nologo /MD /W3 /GX /O2 /I "..\.." /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /Fp"Release/areslib.pch" /YX /Fo"Release/" /Fd"Release/" /FD /c
|
|
||||||
"Z:\ares-1.1.1\ares__close_sockets.c"
|
|
||||||
"Z:\ares-1.1.1\ares__get_hostent.c"
|
|
||||||
"Z:\ares-1.1.1\ares__read_line.c"
|
|
||||||
"Z:\ares-1.1.1\ares_destroy.c"
|
|
||||||
"Z:\ares-1.1.1\ares_expand_name.c"
|
|
||||||
"Z:\ares-1.1.1\ares_fds.c"
|
|
||||||
"Z:\ares-1.1.1\ares_free_errmem.c"
|
|
||||||
"Z:\ares-1.1.1\ares_free_hostent.c"
|
|
||||||
"Z:\ares-1.1.1\ares_free_string.c"
|
|
||||||
"Z:\ares-1.1.1\ares_gethostbyaddr.c"
|
|
||||||
"Z:\ares-1.1.1\ares_gethostbyname.c"
|
|
||||||
"Z:\ares-1.1.1\ares_init.c"
|
|
||||||
"Z:\ares-1.1.1\ares_mkquery.c"
|
|
||||||
"Z:\ares-1.1.1\ares_parse_a_reply.c"
|
|
||||||
"Z:\ares-1.1.1\ares_parse_ptr_reply.c"
|
|
||||||
"Z:\ares-1.1.1\ares_process.c"
|
|
||||||
"Z:\ares-1.1.1\ares_query.c"
|
|
||||||
"Z:\ares-1.1.1\ares_search.c"
|
|
||||||
"Z:\ares-1.1.1\ares_send.c"
|
|
||||||
"Z:\ares-1.1.1\ares_strerror.c"
|
|
||||||
"Z:\ares-1.1.1\ares_timeout.c"
|
|
||||||
"Z:\ares-1.1.1\windows_port.c"
|
|
||||||
]
|
|
||||||
Creating command line "cl.exe @C:\DOCUME~1\liren\LOCALS~1\Temp\RSP603D.tmp"
|
|
||||||
Creating temporary file "C:\DOCUME~1\liren\LOCALS~1\Temp\RSP603E.tmp" with contents
|
|
||||||
[
|
|
||||||
/nologo /out:"Release\areslib.lib"
|
|
||||||
".\Release\ares__close_sockets.obj"
|
|
||||||
".\Release\ares__get_hostent.obj"
|
|
||||||
".\Release\ares__read_line.obj"
|
|
||||||
".\Release\ares_destroy.obj"
|
|
||||||
".\Release\ares_expand_name.obj"
|
|
||||||
".\Release\ares_fds.obj"
|
|
||||||
".\Release\ares_free_errmem.obj"
|
|
||||||
".\Release\ares_free_hostent.obj"
|
|
||||||
".\Release\ares_free_string.obj"
|
|
||||||
".\Release\ares_gethostbyaddr.obj"
|
|
||||||
".\Release\ares_gethostbyname.obj"
|
|
||||||
".\Release\ares_init.obj"
|
|
||||||
".\Release\ares_mkquery.obj"
|
|
||||||
".\Release\ares_parse_a_reply.obj"
|
|
||||||
".\Release\ares_parse_ptr_reply.obj"
|
|
||||||
".\Release\ares_process.obj"
|
|
||||||
".\Release\ares_query.obj"
|
|
||||||
".\Release\ares_search.obj"
|
|
||||||
".\Release\ares_send.obj"
|
|
||||||
".\Release\ares_strerror.obj"
|
|
||||||
".\Release\ares_timeout.obj"
|
|
||||||
".\Release\windows_port.obj"
|
|
||||||
]
|
|
||||||
Creating command line "link.exe -lib @C:\DOCUME~1\liren\LOCALS~1\Temp\RSP603E.tmp"
|
|
||||||
<h3>Output Window</h3>
|
|
||||||
Compiling...
|
|
||||||
ares__close_sockets.c
|
|
||||||
Z:\ares-1.1.1\ares__close_sockets.c(46) : warning C4013: 'close' undefined; assuming extern returning int
|
|
||||||
ares__get_hostent.c
|
|
||||||
ares__read_line.c
|
|
||||||
ares_destroy.c
|
|
||||||
ares_expand_name.c
|
|
||||||
Z:\ares-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition
|
|
||||||
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR'
|
|
||||||
ares_fds.c
|
|
||||||
ares_free_errmem.c
|
|
||||||
ares_free_hostent.c
|
|
||||||
ares_free_string.c
|
|
||||||
ares_gethostbyaddr.c
|
|
||||||
Z:\ares-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition
|
|
||||||
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR'
|
|
||||||
ares_gethostbyname.c
|
|
||||||
Z:\ares-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition
|
|
||||||
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR'
|
|
||||||
ares_init.c
|
|
||||||
Z:\ares-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition
|
|
||||||
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR'
|
|
||||||
Z:\ares-1.1.1\ares_init.c(141) : warning C4013: '_getpid' undefined; assuming extern returning int
|
|
||||||
Z:\ares-1.1.1\ares_init.c(236) : warning C4101: 'p' : unreferenced local variable
|
|
||||||
Z:\ares-1.1.1\ares_init.c(237) : warning C4101: 'linesize' : unreferenced local variable
|
|
||||||
Z:\ares-1.1.1\ares_init.c(235) : warning C4101: 'fp' : unreferenced local variable
|
|
||||||
ares_mkquery.c
|
|
||||||
Z:\ares-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition
|
|
||||||
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR'
|
|
||||||
ares_parse_a_reply.c
|
|
||||||
Z:\ares-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition
|
|
||||||
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR'
|
|
||||||
Z:\ares-1.1.1\ares_parse_a_reply.c(90) : warning C4018: '<' : signed/unsigned mismatch
|
|
||||||
ares_parse_ptr_reply.c
|
|
||||||
Z:\ares-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition
|
|
||||||
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR'
|
|
||||||
Z:\ares-1.1.1\ares_parse_ptr_reply.c(71) : warning C4018: '<' : signed/unsigned mismatch
|
|
||||||
ares_process.c
|
|
||||||
Z:\ares-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition
|
|
||||||
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR'
|
|
||||||
ares_query.c
|
|
||||||
Z:\ares-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition
|
|
||||||
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR'
|
|
||||||
ares_search.c
|
|
||||||
Z:\ares-1.1.1\ares_search.c(229) : warning C4013: 'strncasecmp' undefined; assuming extern returning int
|
|
||||||
ares_send.c
|
|
||||||
Z:\ares-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition
|
|
||||||
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR'
|
|
||||||
ares_strerror.c
|
|
||||||
ares_timeout.c
|
|
||||||
windows_port.c
|
|
||||||
Z:\ares-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition
|
|
||||||
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR'
|
|
||||||
Creating library...
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<h3>Results</h3>
|
|
||||||
areslib.lib - 0 error(s), 19 warning(s)
|
|
||||||
</pre>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
53
buildconf
53
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,17 +226,13 @@ ${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
|
||||||
|
|
||||||
echo "buildconf: running automake"
|
echo "buildconf: running automake"
|
||||||
${AUTOMAKE:-automake} -a || die "The automake command failed"
|
${AUTOMAKE:-automake} -a -c || die "The automake command failed"
|
||||||
|
|
||||||
echo "buildconf: OK"
|
echo "buildconf: OK"
|
||||||
exit 0
|
exit 0
|
||||||
|
267
configure.ac
267
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)
|
||||||
@@ -122,13 +143,13 @@ case $host in
|
|||||||
*-*-mingw*)
|
*-*-mingw*)
|
||||||
AC_DEFINE(BUILDING_LIBCURL, 1, [when building libcurl itself])
|
AC_DEFINE(BUILDING_LIBCURL, 1, [when building libcurl itself])
|
||||||
AC_MSG_RESULT(yes)
|
AC_MSG_RESULT(yes)
|
||||||
<EFBFBD> <20>AC_MSG_CHECKING([if we need CURL_STATICLIB])
|
AC_MSG_CHECKING([if we need CURL_STATICLIB])
|
||||||
if test "X$enable_shared" = "Xno"
|
if test "X$enable_shared" = "Xno"
|
||||||
then
|
then
|
||||||
AC_DEFINE(CURL_STATICLIB, 1, [when not building a shared library])
|
AC_DEFINE(CURL_STATICLIB, 1, [when not building a shared library])
|
||||||
AC_MSG_RESULT(yes)
|
AC_MSG_RESULT(yes)
|
||||||
<EFBFBD> <20>else
|
else
|
||||||
<EFBFBD> <20> <20>AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
@@ -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])
|
||||||
@@ -251,6 +268,21 @@ AC_HELP_STRING([--disable-telnet],[Disable TELNET support]),
|
|||||||
esac ],
|
esac ],
|
||||||
AC_MSG_RESULT(yes)
|
AC_MSG_RESULT(yes)
|
||||||
)
|
)
|
||||||
|
AC_MSG_CHECKING([whether to support tftp])
|
||||||
|
AC_ARG_ENABLE(tftp,
|
||||||
|
AC_HELP_STRING([--enable-tftp],[Enable TFTP support])
|
||||||
|
AC_HELP_STRING([--disable-tftp],[Disable TFTP support]),
|
||||||
|
[ case "$enableval" in
|
||||||
|
no)
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
AC_DEFINE(CURL_DISABLE_TFTP, 1, [to disable TFTP])
|
||||||
|
AC_SUBST(CURL_DISABLE_TFTP, [1])
|
||||||
|
;;
|
||||||
|
*) AC_MSG_RESULT(yes)
|
||||||
|
;;
|
||||||
|
esac ],
|
||||||
|
AC_MSG_RESULT(yes)
|
||||||
|
)
|
||||||
|
|
||||||
dnl **********************************************************************
|
dnl **********************************************************************
|
||||||
dnl Check for built-in manual
|
dnl Check for built-in manual
|
||||||
@@ -274,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.
|
||||||
@@ -434,20 +472,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
|
||||||
@@ -780,7 +829,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)
|
||||||
|
|
||||||
@@ -850,18 +899,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"
|
||||||
@@ -909,9 +966,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
|
||||||
|
|
||||||
@@ -1032,10 +1098,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
|
||||||
@@ -1048,7 +1114,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"
|
||||||
])
|
])
|
||||||
|
|
||||||
@@ -1273,8 +1339,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()
|
||||||
@@ -1365,7 +1431,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
|
||||||
@@ -1380,7 +1447,8 @@ 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
|
|
||||||
|
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 \
|
||||||
@@ -1407,8 +1475,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 \
|
||||||
@@ -1419,6 +1485,8 @@ AC_CHECK_HEADERS(
|
|||||||
libgen.h \
|
libgen.h \
|
||||||
locale.h \
|
locale.h \
|
||||||
errno.h \
|
errno.h \
|
||||||
|
arpa/tftp.h \
|
||||||
|
sys/filio.h \
|
||||||
setjmp.h,
|
setjmp.h,
|
||||||
dnl to do if not found
|
dnl to do if not found
|
||||||
[],
|
[],
|
||||||
@@ -1476,7 +1544,9 @@ 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
|
||||||
@@ -1487,6 +1557,13 @@ dnl Checks for library functions.
|
|||||||
dnl AC_PROG_GCC_TRADITIONAL
|
dnl AC_PROG_GCC_TRADITIONAL
|
||||||
AC_TYPE_SIGNAL
|
AC_TYPE_SIGNAL
|
||||||
dnl AC_FUNC_VPRINTF
|
dnl AC_FUNC_VPRINTF
|
||||||
|
case $host in
|
||||||
|
*msdosdjgpp)
|
||||||
|
ac_cv_func_pipe=no
|
||||||
|
skipcheck_pipe=yes
|
||||||
|
AC_MSG_NOTICE([skip check for pipe on msdosdjgpp])
|
||||||
|
;;
|
||||||
|
esac
|
||||||
AC_CHECK_FUNCS( strtoll \
|
AC_CHECK_FUNCS( strtoll \
|
||||||
socket \
|
socket \
|
||||||
select \
|
select \
|
||||||
@@ -1519,12 +1596,16 @@ 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
|
||||||
func="$ac_func"
|
func="$ac_func"
|
||||||
|
eval skipcheck=\$skipcheck_$func
|
||||||
|
if test "x$skipcheck" != "xyes"; then
|
||||||
AC_MSG_CHECKING([deeper for $func])
|
AC_MSG_CHECKING([deeper for $func])
|
||||||
AC_TRY_LINK( [],
|
AC_TRY_LINK( [],
|
||||||
[ $func ();],
|
[ $func ();],
|
||||||
@@ -1534,21 +1615,38 @@ dnl if not found, $ac_func is the name we check for
|
|||||||
AC_DEFINE_UNQUOTED($def, 1, [If you have $func]),
|
AC_DEFINE_UNQUOTED($def, 1, [If you have $func]),
|
||||||
AC_MSG_RESULT(but still no)
|
AC_MSG_RESULT(but still no)
|
||||||
)
|
)
|
||||||
|
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
|
||||||
@@ -1572,8 +1670,25 @@ AC_CHECK_DECL(basename, ,
|
|||||||
#ifdef HAVE_LIBGEN_H
|
#ifdef HAVE_LIBGEN_H
|
||||||
#include <libgen.h>
|
#include <libgen.h>
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef HAVE_UNISTD_H
|
||||||
|
#include <unistd.h>
|
||||||
|
#endif
|
||||||
)
|
)
|
||||||
|
|
||||||
|
AC_CHECK_DECL(inet_pton, ,
|
||||||
|
AC_DEFINE(HAVE_NO_INET_PTON_PROTO, 1,
|
||||||
|
[Defined if no inet_pton() prototype available]),
|
||||||
|
[
|
||||||
|
#ifdef HAVE_ARPA_INET_H
|
||||||
|
#include <arpa/inet.h>
|
||||||
|
#endif
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
dnl Check if the getnameinfo function is available
|
||||||
|
dnl and get the types of five of its arguments.
|
||||||
|
CURL_CHECK_FUNC_GETNAMEINFO
|
||||||
|
|
||||||
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
|
||||||
@@ -1673,7 +1788,7 @@ AC_HELP_STRING([--disable-ares],[Disable ares for name lookups]),
|
|||||||
*) AC_MSG_RESULT(yes)
|
*) AC_MSG_RESULT(yes)
|
||||||
|
|
||||||
if test "x$IPV6_ENABLED" = "x1"; then
|
if test "x$IPV6_ENABLED" = "x1"; then
|
||||||
AC_MSG_ERROR([ares doesn't work with ipv6, disable ipv6 to use ares])
|
AC_MSG_NOTICE([ares may not work properly with ipv6])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
AC_DEFINE(USE_ARES, 1, [Define if you want to enable ares support])
|
AC_DEFINE(USE_ARES, 1, [Define if you want to enable ares support])
|
||||||
@@ -1767,7 +1882,6 @@ AC_HELP_STRING([--disable-sspi],[Disable SSPI]),
|
|||||||
AC_MSG_RESULT(yes)
|
AC_MSG_RESULT(yes)
|
||||||
AC_DEFINE(USE_WINDOWS_SSPI, 1, [to enable SSPI support])
|
AC_DEFINE(USE_WINDOWS_SSPI, 1, [to enable SSPI support])
|
||||||
AC_SUBST(USE_WINDOWS_SSPI)
|
AC_SUBST(USE_WINDOWS_SSPI)
|
||||||
LIBS="$LIBS -lsecur32"
|
|
||||||
curl_sspi_msg="yes"
|
curl_sspi_msg="yes"
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
@@ -1877,6 +1991,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
|
||||||
@@ -116,12 +134,35 @@ while test $# -gt 0; do
|
|||||||
if test "@CURL_DISABLE_DICT@" != "1"; then
|
if test "@CURL_DISABLE_DICT@" != "1"; then
|
||||||
echo "DICT"
|
echo "DICT"
|
||||||
fi
|
fi
|
||||||
|
if test "@CURL_DISABLE_TFTP@" != "1"; then
|
||||||
|
echo "TFTP"
|
||||||
|
fi
|
||||||
;;
|
;;
|
||||||
--version)
|
--version)
|
||||||
echo libcurl @VERSION@
|
echo libcurl @VERSION@
|
||||||
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
|
||||||
|
@@ -150,6 +150,16 @@ Scheme
|
|||||||
Bigloo binding written by Kirill Lisovsky
|
Bigloo binding written by Kirill Lisovsky
|
||||||
http://curl.haxx.se/libcurl/scheme/
|
http://curl.haxx.se/libcurl/scheme/
|
||||||
|
|
||||||
|
S-Lang
|
||||||
|
|
||||||
|
S-Lang binding written by John E Davis
|
||||||
|
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
|
||||||
@@ -161,10 +171,15 @@ Visual Basic
|
|||||||
http://sourceforge.net/projects/libcurl-vb/
|
http://sourceforge.net/projects/libcurl-vb/
|
||||||
|
|
||||||
Q
|
Q
|
||||||
|
The libcurl module is part of the default install
|
||||||
http://q-lang.sourceforge.net/
|
http://q-lang.sourceforge.net/
|
||||||
|
|
||||||
wxWidgets
|
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
|
||||||
|
@@ -4,11 +4,11 @@
|
|||||||
| (__| |_| | _ <| |___
|
| (__| |_| | _ <| |___
|
||||||
\___|\___/|_| \_\_____|
|
\___|\___/|_| \_\_____|
|
||||||
|
|
||||||
To Think About When Contributing Source Code
|
When Contributing Source Code
|
||||||
|
|
||||||
This document is intended to offer some simple guidelines that can be useful
|
This document is intended to offer guidelines that can be useful to keep in
|
||||||
to keep in mind when you decide to contribute to the project. This concerns
|
mind when you decide to contribute to the project. This concerns new features
|
||||||
new features as well as corrections to existing flaws or bugs.
|
as well as corrections to existing flaws or bugs.
|
||||||
|
|
||||||
Join the Community
|
Join the Community
|
||||||
|
|
||||||
@@ -20,13 +20,26 @@ Join the Community
|
|||||||
The License Issue
|
The License Issue
|
||||||
|
|
||||||
When contributing with code, you agree to put your changes and new code under
|
When contributing with code, you agree to put your changes and new code under
|
||||||
the same license curl and libcurl is already using unless stated otherwise.
|
the same license curl and libcurl is already using unless stated and agreed
|
||||||
|
otherwise.
|
||||||
|
|
||||||
If you add a larger piece of code, you can opt to make that file or set of
|
If you add a larger piece of code, you can opt to make that file or set of
|
||||||
files to use a different license as long as they don't enforce any changes to
|
files to use a different license as long as they don't enforce any changes to
|
||||||
the rest of the package and they make sense. Such "separate parts" can not be
|
the rest of the package and they make sense. Such "separate parts" can not be
|
||||||
GPL (as we don't want the GPL virus to attack users of libcurl) but they must
|
GPL licensed (as we don't want copyleft to affect users of libcurl) but they
|
||||||
use "GPL compatible" licenses.
|
must use "GPL compatible" licenses (as we want to allow users to use libcurl
|
||||||
|
properly in GPL licensed environments).
|
||||||
|
|
||||||
|
When changing existing source code, you do not alter the copyright of the
|
||||||
|
original file(s). The copyright will still be owned by the original
|
||||||
|
creator(s) or those who have been assigned copyright by the original
|
||||||
|
author(s).
|
||||||
|
|
||||||
|
By submitting a patch to the curl project, you are assumed to have the right
|
||||||
|
to the code and to be allowed by your employer or whatever to hand over that
|
||||||
|
patch/code to us. We will credit you for your changes as far as possible, to
|
||||||
|
give credit but also to keep a trace back to who made what changes. Please
|
||||||
|
always provide us with your full real name when contributing!
|
||||||
|
|
||||||
What To Read
|
What To Read
|
||||||
|
|
||||||
|
@@ -1,12 +1,12 @@
|
|||||||
Date: September 1, 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 sitution as it is right now. libcurl
|
This document is written to describe the situation as it is right
|
||||||
7.14.0 is currently the latest version available. Things may (or perhaps
|
now. libcurl 7.15.3 is currently the latest version available. Things may of
|
||||||
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-licenced 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?
|
||||||
@@ -33,12 +32,15 @@ Background
|
|||||||
tend to), you have a clash. GPL vs Original BSD.
|
tend to), you have a clash. GPL vs Original BSD.
|
||||||
|
|
||||||
This dilemma is not libcurl-specific nor is it specific to any particular
|
This dilemma is not libcurl-specific nor is it specific to any particular
|
||||||
Linux distro.
|
Linux distro. (This article mentions and refers to Debian several times, but
|
||||||
|
only because Debian seems to be the only Linux distro to have faced this
|
||||||
|
issue yet since no other distro is shipping libcurl built with two SSL
|
||||||
|
libraries.)
|
||||||
|
|
||||||
Part of the Operating System
|
Part of the Operating System
|
||||||
|
|
||||||
This would not be a problem if the used lib would be considered part of the
|
This would not be a problem if the used lib would be considered part of the
|
||||||
uderlying operating system, as then the GPL license has an exception
|
underlying operating system, as then the GPL license has an exception
|
||||||
clause[6] that allows applications to use such libs without having to be
|
clause[6] that allows applications to use such libs without having to be
|
||||||
allowed to distribute it or its sources. Possibly some distros will claim
|
allowed to distribute it or its sources. Possibly some distros will claim
|
||||||
that OpenSSL is part of their operating system.
|
that OpenSSL is part of their operating system.
|
||||||
@@ -46,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.
|
||||||
|
|
||||||
@@ -77,11 +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
|
GnuTLS
|
||||||
a GPL licensed application wanted SSL capabilities from libcurl and thus was
|
- LGPL licensened
|
||||||
forced to use the GnuTLS powered libcurl. For a reason that is unknown to me,
|
- supports SRP
|
||||||
the application authors didn't want to or was unable to add an exception to
|
- lacks SSLv2 support
|
||||||
their GPL license. Alas, the license problem hit the fan again.
|
- lacks MD2 support (used by at least some CA certs)
|
||||||
|
- lacks the crypto functions libcurl uses for NTLM
|
||||||
|
|
||||||
|
OpenSSL
|
||||||
|
- Original BSD licensened
|
||||||
|
- lacks SRP
|
||||||
|
- supports SSLv2
|
||||||
|
- older and more widely used
|
||||||
|
- provides crypto functions libcurl uses for NTLM
|
||||||
|
- libcurl can do non-blocking connects with it in 7.15.4 and later
|
||||||
|
|
||||||
The Better License, Original BSD or LGPL?
|
The Better License, Original BSD or LGPL?
|
||||||
|
|
||||||
@@ -92,8 +91,13 @@ The Better License, Original BSD or LGPL?
|
|||||||
Instead, I think we should accept the fact that the SSL/TLS libraries and
|
Instead, I think we should accept the fact that the SSL/TLS libraries and
|
||||||
their different licenses will fit different applications and their authors
|
their different licenses will fit different applications and their authors
|
||||||
differently depending on the applications' licenses and their general usage
|
differently depending on the applications' licenses and their general usage
|
||||||
pattern (considering how LGPL libraries can be burdonsome for embedded
|
pattern (considering how LGPL libraries for example can be burdensome for
|
||||||
systems usage).
|
embedded systems usage).
|
||||||
|
|
||||||
|
In Debian land, there seems to be a common opinion that LGPL is "maximally
|
||||||
|
compatible" with apps while Original BSD is not. Like this:
|
||||||
|
|
||||||
|
http://lists.debian.org/debian-devel/2005/09/msg01417.html
|
||||||
|
|
||||||
More SSL Libraries
|
More SSL Libraries
|
||||||
|
|
||||||
@@ -104,25 +108,42 @@ 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
|
||||||
|
these reasons:
|
||||||
|
|
||||||
|
1. No one has worked on fixing this. The mutex/lock callbacks should be set
|
||||||
|
with a generic libcurl function that should use the proper underlying
|
||||||
|
functions.
|
||||||
|
|
||||||
|
2. The CURLOPT_SSL_CTX_FUNCTION option is not possible to "emulate" on GnuTLS
|
||||||
|
but simply requires OpenSSL.
|
||||||
|
|
||||||
|
3. There might be some other subtle differences just because nobody has yet
|
||||||
|
tried to make a fixed ABI like this.
|
||||||
|
|
||||||
Distro Angle of this Problem
|
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
|
||||||
|
|
||||||
@@ -158,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!
|
||||||
@@ -170,6 +191,10 @@ 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.
|
||||||
|
|
||||||
|
Work on this was suggested by Richard Atterer:
|
||||||
|
|
||||||
|
http://curl.haxx.se/mail/lib-2005-09/0066.html
|
||||||
|
|
||||||
Footnotes
|
Footnotes
|
||||||
|
|
||||||
[1] = http://www.xfree86.org/3.3.6/COPYRIGHT2.html#6
|
[1] = http://www.xfree86.org/3.3.6/COPYRIGHT2.html#6
|
||||||
|
132
docs/FAQ
132
docs/FAQ
@@ -1,4 +1,4 @@
|
|||||||
Updated: August 26, 2005 (http://curl.haxx.se/docs/faq.html)
|
Updated: November 2, 2005 (http://curl.haxx.se/docs/faq.html)
|
||||||
_ _ ____ _
|
_ _ ____ _
|
||||||
___| | | | _ \| |
|
___| | | | _ \| |
|
||||||
/ __| | | | |_) | |
|
/ __| | | | |_) | |
|
||||||
@@ -16,6 +16,8 @@ FAQ
|
|||||||
1.6 What do you get for making curl?
|
1.6 What do you get for making curl?
|
||||||
1.7 What about CURL from curl.com?
|
1.7 What about CURL from curl.com?
|
||||||
1.8 I have a problem who do I mail?
|
1.8 I have a problem who do I mail?
|
||||||
|
1.9 Where do I buy commercial support for curl?
|
||||||
|
1.10 How many are using curl?
|
||||||
|
|
||||||
2. Install Related Problems
|
2. Install Related Problems
|
||||||
2.1 configure doesn't find OpenSSL even when it is installed
|
2.1 configure doesn't find OpenSSL even when it is installed
|
||||||
@@ -88,6 +90,7 @@ FAQ
|
|||||||
6.4 I have a program that uses LGPL libraries, can I use libcurl?
|
6.4 I have a program that uses LGPL libraries, can I use libcurl?
|
||||||
6.5 Can I modify curl/libcurl for my program and keep the changes secret?
|
6.5 Can I modify curl/libcurl for my program and keep the changes secret?
|
||||||
6.6 Can you please change the curl/libcurl license to XXXX?
|
6.6 Can you please change the curl/libcurl license to XXXX?
|
||||||
|
6.7 What are my obligations when using libcurl in my commerical apps?
|
||||||
|
|
||||||
7. PHP/CURL Issues
|
7. PHP/CURL Issues
|
||||||
7.1 What is PHP/CURL?
|
7.1 What is PHP/CURL?
|
||||||
@@ -111,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!
|
||||||
@@ -129,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].
|
||||||
|
|
||||||
@@ -148,6 +150,10 @@ FAQ
|
|||||||
You can use libcurl for free in your application, be it open source,
|
You can use libcurl for free in your application, be it open source,
|
||||||
commercial or closed-source.
|
commercial or closed-source.
|
||||||
|
|
||||||
|
libcurl is most probably the most portable, most powerful and most often
|
||||||
|
used C-based multi-platform file transfer library on this planet - be it
|
||||||
|
open source or commercial.
|
||||||
|
|
||||||
1.3 What is curl not?
|
1.3 What is curl not?
|
||||||
|
|
||||||
Curl is *not* a wget clone. That is a common misconception. Never, during
|
Curl is *not* a wget clone. That is a common misconception. Never, during
|
||||||
@@ -205,7 +211,7 @@ FAQ
|
|||||||
improvements and have them inserted in the main sources (of course on the
|
improvements and have them inserted in the main sources (of course on the
|
||||||
condition that developers agree on that the fixes are good).
|
condition that developers agree on that the fixes are good).
|
||||||
|
|
||||||
The full list of the more than 400 contributors is found in the docs/THANKS
|
The full list of the more than 450 contributors is found in the docs/THANKS
|
||||||
file.
|
file.
|
||||||
|
|
||||||
curl is developed by a community, with Daniel at the wheel.
|
curl is developed by a community, with Daniel at the wheel.
|
||||||
@@ -259,6 +265,52 @@ FAQ
|
|||||||
flaw is announced to the world, thus lessen the impact the problem will have
|
flaw is announced to the world, thus lessen the impact the problem will have
|
||||||
on existing users.
|
on existing users.
|
||||||
|
|
||||||
|
1.9 Where do I buy commercial support for curl?
|
||||||
|
|
||||||
|
curl is fully open source. It means you can hire any skilled engineer to fix
|
||||||
|
your curl-related problems.
|
||||||
|
|
||||||
|
We list available alternatives on the curl web site:
|
||||||
|
http://curl.haxx.se/support.html
|
||||||
|
|
||||||
|
1.10 How many are using curl?
|
||||||
|
|
||||||
|
It is impossible to tell.
|
||||||
|
|
||||||
|
We don't know how many users that knowingly have installed and use curl.
|
||||||
|
|
||||||
|
We don't know how many users that use curl without knowing that they are in
|
||||||
|
fact using it.
|
||||||
|
|
||||||
|
We don't know how many users that downloaded or installed curl and then
|
||||||
|
never use it.
|
||||||
|
|
||||||
|
Some facts to use as input to the math:
|
||||||
|
|
||||||
|
curl packages have been downloaded from the curl.haxx.se site well over a
|
||||||
|
million times. curl is installed by default with most Linux
|
||||||
|
distributions. curl is installed by default with Mac OS X. curl and libcurl
|
||||||
|
as used by numerous applications that include libcurl binaries in their
|
||||||
|
distribution packages (like Adobe Acrobat Reader and Google Earth).
|
||||||
|
|
||||||
|
More than 40 known named companies use curl in commercial environments and
|
||||||
|
products. More than 100 known named open source projects depend on
|
||||||
|
(lib)curl.
|
||||||
|
|
||||||
|
In a poll on the curl web site mid-2005, more than 50% of the 300+ answers
|
||||||
|
estimated a user base of one million users or more.
|
||||||
|
|
||||||
|
In March 2005, the "Linux Counter project" estimated a total Linux user base
|
||||||
|
of some 29 millions, while Netcraft detected some 4 million "active" Linux
|
||||||
|
based web servers. A guess is that a fair amount of these Linux
|
||||||
|
installations have curl installed.
|
||||||
|
|
||||||
|
http://curl.haxx.se/docs/companies.html
|
||||||
|
http://curl.haxx.se/docs/programs.html
|
||||||
|
http://curl.haxx.se/libcurl/using/apps.html
|
||||||
|
http://counter.li.org/estimates.php
|
||||||
|
http://news.netcraft.com/archives/2005/03/14/fedora_makes_rapid_progress.html
|
||||||
|
|
||||||
|
|
||||||
2. Install Related Problems
|
2. Install Related Problems
|
||||||
|
|
||||||
@@ -514,22 +566,24 @@ FAQ
|
|||||||
- Server certificate. The server you communicate with has a server
|
- Server certificate. The server you communicate with has a server
|
||||||
certificate. You can and should verify this certificate to make sure that
|
certificate. You can and should verify this certificate to make sure that
|
||||||
you are truly talking to the real server and not a server impersonating
|
you are truly talking to the real server and not a server impersonating
|
||||||
it. The server certificate verification process is made by using a
|
it.
|
||||||
Certificate Authority certificate ("CA cert") that was used to sign the
|
|
||||||
server certificate. Server certificate verification is enabled by default
|
|
||||||
in curl and libcurl and is often the reason for problems as explained in
|
|
||||||
FAQ entry 4.12 and the SSLCERTS document
|
|
||||||
(http://curl.haxx.se/docs/sslcerts.html). Server certificates that are
|
|
||||||
"self-signed" or otherwise signed by a CA that you do not have a CA cert
|
|
||||||
for, cannot be verified. If the verification during a connect fails, you
|
|
||||||
are refused access. You then need to explicitly disable the verification
|
|
||||||
to connect to the server.
|
|
||||||
|
|
||||||
- Certificate Authority certificate ("CA cert"). You often have several CA
|
- Certificate Authority certificate ("CA cert"). You often have several CA
|
||||||
certs in a CA cert bundle that can be used to verify a server certificate
|
certs in a CA cert bundle that can be used to verify a server certificate
|
||||||
that was signed by one of the authorities in the bundle. curl comes with a
|
that was signed by one of the authorities in the bundle. curl comes with a
|
||||||
default CA cert bundle. You can override the default.
|
default CA cert bundle. You can override the default.
|
||||||
|
|
||||||
|
The server certificate verification process is made by using a Certificate
|
||||||
|
Authority certificate ("CA cert") that was used to sign the server
|
||||||
|
certificate. Server certificate verification is enabled by default in curl
|
||||||
|
and libcurl and is often the reason for problems as explained in FAQ entry
|
||||||
|
4.12 and the SSLCERTS document
|
||||||
|
(http://curl.haxx.se/docs/sslcerts.html). Server certificates that are
|
||||||
|
"self-signed" or otherwise signed by a CA that you do not have a CA cert
|
||||||
|
for, cannot be verified. If the verification during a connect fails, you
|
||||||
|
are refused access. You then need to explicitly disable the verification
|
||||||
|
to connect to the server.
|
||||||
|
|
||||||
3.17 How do I list the root dir of an FTP server?
|
3.17 How do I list the root dir of an FTP server?
|
||||||
|
|
||||||
There are two ways. The way defined in the RFC is to use an encoded slash
|
There are two ways. The way defined in the RFC is to use an encoded slash
|
||||||
@@ -546,6 +600,8 @@ FAQ
|
|||||||
|
|
||||||
No.
|
No.
|
||||||
|
|
||||||
|
But you could easily write your own program using libcurl to do such stunts.
|
||||||
|
|
||||||
|
|
||||||
4. Running Problems
|
4. Running Problems
|
||||||
|
|
||||||
@@ -751,11 +807,11 @@ FAQ
|
|||||||
curl supports HTTP redirects fine (see item 3.8). Browsers generally support
|
curl supports HTTP redirects fine (see item 3.8). Browsers generally support
|
||||||
at least two other ways to perform directs that curl does not:
|
at least two other ways to perform directs that curl does not:
|
||||||
|
|
||||||
1 - Meta tags. You can write a HTML tag that will cause the browser to
|
- Meta tags. You can write a HTML tag that will cause the browser to
|
||||||
redirect to another given URL after a certain time.
|
redirect to another given URL after a certain time.
|
||||||
|
|
||||||
2 - Javascript. You can write a javascript program embeded in a HTML page
|
- Javascript. You can write a javascript program embeded in a HTML page
|
||||||
that redirects the browser to another given URL.
|
that redirects the browser to another given URL.
|
||||||
|
|
||||||
There is no way to make curl follow these redirects. You must either
|
There is no way to make curl follow these redirects. You must either
|
||||||
manually figure out what the page is set to do, or you write a script that
|
manually figure out what the page is set to do, or you write a script that
|
||||||
@@ -793,8 +849,8 @@ FAQ
|
|||||||
|
|
||||||
One solution to this problem could be to have a pointer to a struct that you
|
One solution to this problem could be to have a pointer to a struct that you
|
||||||
pass to the callback function. You set the pointer using the
|
pass to the callback function. You set the pointer using the
|
||||||
curl_easy_setopt(CURLOPT_FILE) function. Then that pointer will be passed to
|
CURLOPT_WRITEDATA option. Then that pointer will be passed to the callback
|
||||||
the callback instead of a FILE * to a file:
|
instead of a FILE * to a file:
|
||||||
|
|
||||||
/* imaginary struct */
|
/* imaginary struct */
|
||||||
struct MemoryStruct {
|
struct MemoryStruct {
|
||||||
@@ -901,7 +957,10 @@ FAQ
|
|||||||
|
|
||||||
5.9 How does libcurl resolve host names?
|
5.9 How does libcurl resolve host names?
|
||||||
|
|
||||||
libcurl includes a number of different name resolve functions:
|
libcurl supports a large a number of different name resolve functions. One
|
||||||
|
of them is picked at build-time and will be used unconditionally. Thus, if
|
||||||
|
you want to change name resolver function you must rebuild libcurl and tell
|
||||||
|
it to use a different function.
|
||||||
|
|
||||||
- The non-ipv6 resolver that can use one out of four host name resolve calls
|
- The non-ipv6 resolver that can use one out of four host name resolve calls
|
||||||
(depending on what your system supports):
|
(depending on what your system supports):
|
||||||
@@ -914,6 +973,8 @@ FAQ
|
|||||||
- The ipv6-resolver that uses getaddrinfo()
|
- The ipv6-resolver that uses getaddrinfo()
|
||||||
|
|
||||||
- The c-ares based name resolver that uses the c-ares library for resolves.
|
- The c-ares based name resolver that uses the c-ares library for resolves.
|
||||||
|
Using this offers asynchronous name resolves but it currently has no IPv6
|
||||||
|
support.
|
||||||
|
|
||||||
- The Windows threaded resolver. It use:
|
- The Windows threaded resolver. It use:
|
||||||
|
|
||||||
@@ -926,8 +987,8 @@ FAQ
|
|||||||
5.10 How do I prevent libcurl from writing the response to stdout?
|
5.10 How do I prevent libcurl from writing the response to stdout?
|
||||||
|
|
||||||
libcurl provides a default built-in write function that writes received data
|
libcurl provides a default built-in write function that writes received data
|
||||||
to stdout. Set a WRITEFUNCTION to receive the data, or possibly set
|
to stdout. Set the CURLOPT_WRITEFUNCTION to receive the data, or possibly
|
||||||
WRITEDATA to a different FILE * handle.
|
set CURLOPT_WRITEDATA to a different FILE * handle.
|
||||||
|
|
||||||
5.11 How do I make libcurl not receive the whole HTTP response?
|
5.11 How do I make libcurl not receive the whole HTTP response?
|
||||||
|
|
||||||
@@ -956,6 +1017,9 @@ FAQ
|
|||||||
is just a brief summary for the cases we get the most questions. (Parts of
|
is just a brief summary for the cases we get the most questions. (Parts of
|
||||||
this section was much enhanced by Bjorn Reese.)
|
this section was much enhanced by Bjorn Reese.)
|
||||||
|
|
||||||
|
We are not lawyers and this is not legal advice. You should probably consult
|
||||||
|
one if you want true and accurate legal insights without our prejudice.
|
||||||
|
|
||||||
6.1 I have a GPL program, can I use the libcurl library?
|
6.1 I have a GPL program, can I use the libcurl library?
|
||||||
|
|
||||||
Yes!
|
Yes!
|
||||||
@@ -1000,6 +1064,26 @@ FAQ
|
|||||||
libraries that use it. It should be possible for everyone to use libcurl or
|
libraries that use it. It should be possible for everyone to use libcurl or
|
||||||
curl in their projects, no matter what license they already have in use.
|
curl in their projects, no matter what license they already have in use.
|
||||||
|
|
||||||
|
6.7 What are my obligations when using libcurl in my commerical apps?
|
||||||
|
|
||||||
|
Next to none. All you need to adhere to is the MIT-style license (stated in
|
||||||
|
the COPYING file) which basically says you have to include the copyright
|
||||||
|
notice in "all copies" and that you may not use the copyright holder's name
|
||||||
|
when promoting your software.
|
||||||
|
|
||||||
|
You do not have to release any of your source code.
|
||||||
|
|
||||||
|
You do not have to reveal or make public any changes to the libcurl source
|
||||||
|
code.
|
||||||
|
|
||||||
|
You do not have to reveal or make public that you are using libcurl within
|
||||||
|
your app.
|
||||||
|
|
||||||
|
As can be seen here: http://curl.haxx.se/docs/companies.html and
|
||||||
|
elsewhere, more and more companies are dicovering the power
|
||||||
|
of libcurl and take advantage of it even in commercial environments.
|
||||||
|
|
||||||
|
|
||||||
7. PHP/CURL Issues
|
7. PHP/CURL Issues
|
||||||
|
|
||||||
7.1 What is PHP/CURL?
|
7.1 What is PHP/CURL?
|
||||||
|
@@ -91,10 +91,13 @@ 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
|
||||||
|
- download / upload
|
||||||
|
|
||||||
TELNET
|
TELNET
|
||||||
- connection negotiation
|
- connection negotiation
|
||||||
- custom telnet options
|
- custom telnet options
|
||||||
@@ -106,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"
|
||||||
|
@@ -145,3 +145,9 @@ August 2004:
|
|||||||
April 2005:
|
April 2005:
|
||||||
|
|
||||||
GnuTLS can now optionally be used for the secure layer when curl is built.
|
GnuTLS can now optionally be used for the secure layer when curl is built.
|
||||||
|
|
||||||
|
September 2005:
|
||||||
|
|
||||||
|
TFTP support was added.
|
||||||
|
|
||||||
|
More than 100,000 unique visitors of the curl web site. 25 mirrors.
|
||||||
|
264
docs/INSTALL
264
docs/INSTALL
@@ -132,172 +132,150 @@ UNIX
|
|||||||
Win32
|
Win32
|
||||||
=====
|
=====
|
||||||
|
|
||||||
Without SSL:
|
MingW32
|
||||||
|
-------
|
||||||
|
|
||||||
MingW32 (GCC-2.95) style
|
Run the 'mingw32.bat' file to get the proper environment variables set,
|
||||||
------------------------
|
then run 'make mingw32' in the root dir. Use 'make mingw32-ssl' to build
|
||||||
Run the 'mingw32.bat' file to get the proper environment variables
|
curl SSL enabled.
|
||||||
set, then run 'make mingw32' in the root dir.
|
|
||||||
|
|
||||||
If you have any problems linking libraries or finding header files, be
|
If you have any problems linking libraries or finding header files, be sure
|
||||||
sure to verify that the provided "Makefile.m32" files use the proper
|
to verify that the provided "Makefile.m32" files use the proper paths, and
|
||||||
paths, and adjust as necessary.
|
adjust as necessary.
|
||||||
|
|
||||||
Cygwin style
|
Cygwin
|
||||||
------------
|
------
|
||||||
Almost identical to the unix installation. Run the configure script in
|
|
||||||
the curl root with 'sh configure'. Make sure you have the sh
|
|
||||||
executable in /bin/ or you'll see the configure fail towards the end.
|
|
||||||
|
|
||||||
Run 'make'
|
Almost identical to the unix installation. Run the configure script in the
|
||||||
|
curl root with 'sh configure'. Make sure you have the sh executable in
|
||||||
|
/bin/ or you'll see the configure fail towards the end.
|
||||||
|
|
||||||
Microsoft command line style
|
Run 'make'
|
||||||
----------------------------
|
|
||||||
Run the 'vcvars32.bat' file to get the proper environment variables
|
|
||||||
set, then run 'nmake vc' in the root dir.
|
|
||||||
|
|
||||||
The vcvars32.bat file is part of the Microsoft development
|
Dev-Cpp
|
||||||
environment.
|
-------
|
||||||
|
|
||||||
IDE-style
|
See the separate INSTALL.devcpp file for details.
|
||||||
-------------------------
|
|
||||||
If you use VC++, Borland or similar compilers. Include all lib source
|
|
||||||
files in a static lib "project" (all .c and .h files that is).
|
|
||||||
(you should name it libcurl or similar)
|
|
||||||
|
|
||||||
Make the sources in the src/ drawer be a "win32 console application"
|
MSVC from command line
|
||||||
project. Name it curl.
|
----------------------
|
||||||
|
|
||||||
For VC++ 6, there's an included Makefile.vc6 that should be possible
|
Run the 'vcvars32.bat' file to get a proper environment. The
|
||||||
to use out-of-the-box.
|
vcvars32.bat file is part of the Microsoft development environment and
|
||||||
|
you may find it in 'C:\Program Files\Microsoft Visual Studio\vc98\bin'
|
||||||
|
provided that you installed Visual C/C++ 6 in the default directory.
|
||||||
|
|
||||||
|
Then run 'nmake vc' in curl's root directory.
|
||||||
|
|
||||||
|
If you want to compile with zlib support, you will need to build
|
||||||
|
zlib (http://www.gzip.org/zlib/) as well. Please read the zlib
|
||||||
|
documentation on how to compile zlib. Define the ZLIB_PATH environment
|
||||||
|
variable to the location of zlib.h and zlib.lib, for example:
|
||||||
|
|
||||||
|
set ZLIB_PATH=c:\zlib-1.2.1
|
||||||
|
|
||||||
|
Then run 'nmake vc-zlib' in curl's root directory.
|
||||||
|
|
||||||
|
If you want to compile with SSL support you need the OpenSSL package.
|
||||||
|
Please read the OpenSSL documentation on how to compile and install
|
||||||
|
the OpenSSL libraries. The build process of OpenSSL generates the
|
||||||
|
libeay32.dll and ssleay32.dll files in the out32dll subdirectory in
|
||||||
|
the OpenSSL home directory. OpenSSL static libraries (libeay32.lib,
|
||||||
|
ssleay32.lib, RSAglue.lib) are created in the out32 subdirectory.
|
||||||
|
|
||||||
|
Before running nmake define the OPENSSL_PATH environment variable with
|
||||||
|
the root/base directory of OpenSSL, for example:
|
||||||
|
|
||||||
|
set OPENSSL_PATH=c:\openssl-0.9.7d
|
||||||
|
|
||||||
|
Then run 'nmake vc-ssl' or 'nmake vc-ssl-dll' in curl's root
|
||||||
|
directory. 'nmake vc-ssl' will create a libcurl static and dynamic
|
||||||
|
libraries in the lib subdirectory, as well as a statically linked
|
||||||
|
version of curl.exe in the src subdirectory. This statically linked
|
||||||
|
version is a standalone executable not requiring any DLL at
|
||||||
|
runtime. This make method requires that you have the static OpenSSL
|
||||||
|
libraries available in OpenSSL's out32 subdirectory.
|
||||||
|
'nmake vc-ssl-dll' creates the libcurl dynamic library and
|
||||||
|
links curl.exe against libcurl and OpenSSL dynamically.
|
||||||
|
This executable requires libcurl.dll and the OpenSSL DLLs
|
||||||
|
at runtime.
|
||||||
|
Run 'nmake vc-ssl-zlib' to build with both ssl and zlib support.
|
||||||
|
|
||||||
|
Borland C++ compiler
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
compile openssl
|
||||||
|
|
||||||
|
Make sure you include the paths to curl/include and openssl/inc32 in
|
||||||
|
your bcc32.cnf file
|
||||||
|
|
||||||
|
eg : -I"c:\Bcc55\include;c:\path_curl\include;c:\path_openssl\inc32"
|
||||||
|
|
||||||
|
Check to make sure that all of the sources listed in lib/Makefile.b32
|
||||||
|
are present in the /path_to_curl/lib directory. (Check the src
|
||||||
|
directory for missing ones.)
|
||||||
|
|
||||||
|
Make sure the environment variable "BCCDIR" is set to the install
|
||||||
|
location for the compiler eg : c:\Borland\BCC55
|
||||||
|
|
||||||
|
command line:
|
||||||
|
make -f /path_to_curl/lib/Makefile-ssl.b32
|
||||||
|
|
||||||
|
compile simplessl.c with appropriate links
|
||||||
|
|
||||||
|
c:\curl\docs\examples\> bcc32 -L c:\path_to_curl\lib\libcurl.lib
|
||||||
|
-L c:\borland\bcc55\lib\psdk\ws2_32.lib
|
||||||
|
-L c:\openssl\out32\libeay32.lib
|
||||||
|
-L c:\openssl\out32\ssleay32.lib
|
||||||
|
simplessl.c
|
||||||
|
|
||||||
|
|
||||||
With SSL:
|
MSVC IDE
|
||||||
|
--------
|
||||||
|
|
||||||
MingW32 (GCC-2.95) style
|
If you use VC++, Borland or similar compilers. Include all lib source
|
||||||
------------------------
|
files in a static lib "project" (all .c and .h files that is).
|
||||||
Run the 'mingw32.bat' file to get the proper environment variables
|
(you should name it libcurl or similar)
|
||||||
set, then run 'make mingw32-ssl' in the root dir.
|
|
||||||
|
|
||||||
If you have any problems linking libraries or finding header files, be
|
Make the sources in the src/ drawer be a "win32 console application"
|
||||||
sure to look at the provided "Makefile.m32" files for the proper
|
project. Name it curl.
|
||||||
paths, and adjust as necessary.
|
|
||||||
|
|
||||||
Cygwin style
|
For VC++ 6, there's an included Makefile.vc6 that should be possible
|
||||||
------------
|
to use out-of-the-box.
|
||||||
Haven't done, nor got any reports on how to do. It should although be
|
|
||||||
identical to the unix setup for the same purpose. See above.
|
|
||||||
|
|
||||||
Microsoft command line style
|
|
||||||
----------------------------
|
|
||||||
|
|
||||||
Run the 'vcvars32.bat' file to get a proper environment. The
|
|
||||||
vcvars32.bat file is part of the Microsoft development environment and
|
|
||||||
you may find it in 'C:\Program Files\Microsoft Visual Studio\vc98\bin'
|
|
||||||
provided that you installed Visual C/C++ 6 in the default directory.
|
|
||||||
|
|
||||||
Then run 'nmake vc' in curl's root directory.
|
|
||||||
|
|
||||||
If you want to compile with zlib support, you will need to build
|
|
||||||
zlib (http://www.gzip.org/zlib/) as well. Please read the zlib
|
|
||||||
documentation on how to compile zlib. Define the ZLIB_PATH environment
|
|
||||||
variable to the location of zlib.h and zlib.lib, for example:
|
|
||||||
|
|
||||||
set ZLIB_PATH=c:\zlib-1.2.1
|
|
||||||
|
|
||||||
Then run 'nmake vc-zlib' in curl's root directory.
|
|
||||||
|
|
||||||
If you want to compile with SSL support you need the OpenSSL package.
|
|
||||||
Please read the OpenSSL documentation on how to compile and install
|
|
||||||
the OpenSSL libraries. The build process of OpenSSL generates the
|
|
||||||
libeay32.dll and ssleay32.dll files in the out32dll subdirectory in
|
|
||||||
the OpenSSL home directory. OpenSSL static libraries (libeay32.lib,
|
|
||||||
ssleay32.lib, RSAglue.lib) are created in the out32 subdirectory.
|
|
||||||
|
|
||||||
Before running nmake define the OPENSSL_PATH environment variable with
|
|
||||||
the root/base directory of OpenSSL, for example:
|
|
||||||
|
|
||||||
set OPENSSL_PATH=c:\openssl-0.9.7d
|
|
||||||
|
|
||||||
Then run 'nmake vc-ssl' or 'nmake vc-ssl-dll' in curl's root
|
|
||||||
directory. 'nmake vc-ssl' will create a libcurl static and dynamic
|
|
||||||
libraries in the lib subdirectory, as well as a statically linked
|
|
||||||
version of curl.exe in the src subdirectory. This statically linked
|
|
||||||
version is a standalone executable not requiring any DLL at
|
|
||||||
runtime. This make method requires that you have the static OpenSSL
|
|
||||||
libraries available in OpenSSL's out32 subdirectory.
|
|
||||||
'nmake vc-ssl-dll' creates the libcurl dynamic library and
|
|
||||||
links curl.exe against libcurl and OpenSSL dynamically.
|
|
||||||
This executable requires libcurl.dll and the OpenSSL DLLs
|
|
||||||
at runtime.
|
|
||||||
Run 'nmake vc-ssl-zlib' to build with both ssl and zlib support.
|
|
||||||
|
|
||||||
Microsoft / Borland style
|
|
||||||
-------------------------
|
|
||||||
If you have OpenSSL, and want curl to take advantage of it, edit your
|
|
||||||
project properties to use the SSL include path, link with the SSL libs
|
|
||||||
and define the USE_SSLEAY symbol.
|
|
||||||
|
|
||||||
Using Borland C++ compiler version 5.5.1 (available as free download
|
|
||||||
from Borland's site)
|
|
||||||
---------------------------------------------------------------------
|
|
||||||
|
|
||||||
compile openssl
|
|
||||||
|
|
||||||
Make sure you include the paths to curl/include and openssl/inc32 in
|
|
||||||
your bcc32.cnf file
|
|
||||||
|
|
||||||
|
|
||||||
eg : -I"c:\Bcc55\include;c:\path_curl\include;c:\path_openssl\inc32"
|
Disabling Specific Protocols in Win32 builds
|
||||||
|
--------------------------------------------
|
||||||
|
|
||||||
Check to make sure that all of the sources listed in lib/Makefile.b32
|
The configure utility, unfortunately, is not available for the Windows
|
||||||
are present in the /path_to_curl/lib directory. (Check the src
|
environment, therefore, you cannot use the various disable-protocol
|
||||||
directory for missing ones.)
|
options of the configure utility on this platform.
|
||||||
|
|
||||||
Make sure the environment variable "BCCDIR" is set to the install
|
However, you can use the following defines to disable specific
|
||||||
location for the compiler eg : c:\Borland\BCC55
|
protocols:
|
||||||
|
|
||||||
command line:
|
HTTP_ONLY disables all protocols except HTTP
|
||||||
make -f /path_to_curl/lib/Makefile-ssl.b32
|
CURL_DISABLE_FTP disables FTP
|
||||||
|
CURL_DISABLE_LDAP disables LDAP
|
||||||
|
CURL_DISABLE_TELNET disables TELNET
|
||||||
|
CURL_DISABLE_DICT disables DICT
|
||||||
|
CURL_DISABLE_FILE disables FILE
|
||||||
|
|
||||||
compile simplessl.c with appropriate links
|
If you want to set any of these defines you have the following
|
||||||
|
possibilities:
|
||||||
|
|
||||||
c:\curl\docs\examples\> bcc32 -L c:\path_to_curl\lib\libcurl.lib
|
- Modify lib/setup.h
|
||||||
-L c:\borland\bcc55\lib\psdk\ws2_32.lib
|
- Modify lib/Makefile.vc6
|
||||||
-L c:\openssl\out32\libeay32.lib
|
- Add defines to Project/Settings/C/C++/General/Preprocessor Definitions
|
||||||
-L c:\openssl\out32\ssleay32.lib
|
in the curllib.dsw/curllib.dsp Visual C++ 6 IDE project.
|
||||||
simplessl.c
|
|
||||||
|
|
||||||
Disabling Specific Protocols:
|
|
||||||
|
|
||||||
The configure utility, unfortunately, is not available for the Windows
|
|
||||||
environment, therefore, you cannot use the various disable-protocol
|
|
||||||
options of the configure utility on this platform.
|
|
||||||
|
|
||||||
However, you can use the following defines to disable specific
|
|
||||||
protocols:
|
|
||||||
|
|
||||||
HTTP_ONLY disables all protocols except HTTP
|
|
||||||
CURL_DISABLE_FTP disables FTP
|
|
||||||
CURL_DISABLE_LDAP disables LDAP
|
|
||||||
CURL_DISABLE_TELNET disables TELNET
|
|
||||||
CURL_DISABLE_DICT disables DICT
|
|
||||||
CURL_DISABLE_FILE disables FILE
|
|
||||||
CURL_DISABLE_GOPHER disables GOPHER
|
|
||||||
|
|
||||||
If you want to set any of these defines you have the following
|
|
||||||
possibilities:
|
|
||||||
|
|
||||||
- Modify lib/setup.h
|
|
||||||
- Modify lib/Makefile.vc6
|
|
||||||
- Add defines to Project/Settings/C/C++/General/Preprocessor Definitions
|
|
||||||
in the curllib.dsw/curllib.dsp Visual C++ 6 IDE project.
|
|
||||||
|
|
||||||
|
|
||||||
Important (with SSL or not):
|
Important static libcurl usage note
|
||||||
When building an application that uses the static libcurl library, you
|
-----------------------------------
|
||||||
must add '-DCURL_STATICLIB' to your CFLAGS. Otherwise the linker will
|
|
||||||
look for dynamic import symbols.
|
When building an application that uses the static libcurl library, you must
|
||||||
|
add '-DCURL_STATICLIB' to your CFLAGS. Otherwise the linker will look for
|
||||||
|
dynamic import symbols.
|
||||||
|
|
||||||
|
|
||||||
IBM OS/2
|
IBM OS/2
|
||||||
|
302
docs/INSTALL.devcpp
Normal file
302
docs/INSTALL.devcpp
Normal file
@@ -0,0 +1,302 @@
|
|||||||
|
DevCpp-Mingw Install & Compilation Sept 2005
|
||||||
|
==================================
|
||||||
|
|
||||||
|
Reference Emails available at curl@haxx.se:
|
||||||
|
|
||||||
|
Libcurl Install and Use Issues
|
||||||
|
Awaiting an Answer for Win 32 Install
|
||||||
|
res = curl_easy_perform(curl); Error
|
||||||
|
Makefile Issues
|
||||||
|
|
||||||
|
|
||||||
|
Having previously done a thorough review of what was available that met my
|
||||||
|
requirements under GPL, I settled for Libcurl as the software of choice for
|
||||||
|
many reasons not the least of which was the support.
|
||||||
|
|
||||||
|
Background
|
||||||
|
----------
|
||||||
|
|
||||||
|
This quest started when I innocently tried to incorporate the libcurl library
|
||||||
|
into my simple source code. I figured that a few easy steps would accomplish
|
||||||
|
this without major headaches. I had no idea that I would be facing an almost
|
||||||
|
insurmountable challenge.
|
||||||
|
|
||||||
|
The main problem lies in two areas. First the bulk of support for libcurl
|
||||||
|
exists for a Unix/linux command line environments. This is of little help when
|
||||||
|
it comes to Windows O/S.
|
||||||
|
|
||||||
|
Secondly the help that does exist for the Windows O/S focused around mingw
|
||||||
|
thru a command line argument environment.
|
||||||
|
|
||||||
|
You may ask "Why is this a problem?"
|
||||||
|
|
||||||
|
I'm using a Windows O/S with DevCpp. For those of you who are unfamiliar with
|
||||||
|
DevCpp, it is a window shell GUI that replaces the command line environment
|
||||||
|
for gcc. A definite improvement that I am unwilling to give up. However using
|
||||||
|
DevCpp presented its own set of issues. Inadvertently I also made some
|
||||||
|
careless errors such as compiling the 7.14 version of Makefile with an older
|
||||||
|
version of source code. Thanks to Dan Fandrich for picking this up.
|
||||||
|
|
||||||
|
I did eventually with the help of Daniel, Phillipe and others manage to
|
||||||
|
implement successfully (the only mingw available version)
|
||||||
|
curl-7.13.0-win32-ssl-devel-mingw32 into the DevCpp environment. Only the
|
||||||
|
dynamic libcurl.dll libcurldll.a libraries worked. The static library which I
|
||||||
|
was interested in did not. Furthermore when I tried to implement one of the
|
||||||
|
examples included with the curl package (get info.c) it caused the executable
|
||||||
|
to crash. Tracing the bug I found it in the code and function res =
|
||||||
|
curl_easy_perform(curl);.
|
||||||
|
|
||||||
|
At this point I had to make a choice as to whether invest my limited
|
||||||
|
time-energy resource to fixing the bug or to compile the new version
|
||||||
|
available. After searching the archives I found a very similar or the same bug
|
||||||
|
reported from version 7.12x on. Daniel did inform me that he thought that this
|
||||||
|
bug had been fixed with the latest version. So I proceeded to compile the
|
||||||
|
latest SSL version where I faced other challenges.
|
||||||
|
|
||||||
|
In order to make this process unremarkable for others using the same
|
||||||
|
environment I decided to document the process so that others will find it
|
||||||
|
routine. It would be a shame if newbies could not implement this excellent
|
||||||
|
package for their use.
|
||||||
|
|
||||||
|
I would like to thank the many others in this forum and in the DevCpp forum
|
||||||
|
for their help. Without your help I may either have given up or it would have
|
||||||
|
taken me many times longer to achieve success.
|
||||||
|
|
||||||
|
The Cookbook Approach
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
This discussion will be confined to a SSL static library compilation and
|
||||||
|
installation. Limited mention and comments will be inserted where appropriate
|
||||||
|
to help with non-SSL, dynamic libraries and executables.
|
||||||
|
|
||||||
|
|
||||||
|
Using Makefile from DevCpp to compile Libcurl libraries
|
||||||
|
|
||||||
|
Preamble
|
||||||
|
--------
|
||||||
|
|
||||||
|
Using the latest version release - curl-7.14.0.tar.gz. Curl source code is
|
||||||
|
platform independent. This simply means that the source code can be compiled
|
||||||
|
for any Operating System (Linux/Unix Windows etc. and variations of thereof).
|
||||||
|
|
||||||
|
The first thing to note is that inside curl-7.14.0 you will find two folders
|
||||||
|
lib and src. Both contain Makefile.m32 (required for win mingw library or exe
|
||||||
|
compilation) files which are different. The main difference between these two
|
||||||
|
folders and the makefiles is that the src folder contents are used to compile
|
||||||
|
an executable file(curl.exe) while the lib folder contents are used to compile
|
||||||
|
a static (libcurl.a) and dynamic (libcurl.dll & libcurldll.a) file that can be
|
||||||
|
used to compile libcurl with your own source code so that one can use and
|
||||||
|
access all libcurl functions.
|
||||||
|
|
||||||
|
Before we start please make sure that DevCpp is installed properly. In
|
||||||
|
particular make sure you have no spaces in the name of any of the directories
|
||||||
|
and subdirectories where DevCpp is installed. Failure to comply with the
|
||||||
|
install instructions may produce erratic behaviour in DevCpp. For further info
|
||||||
|
check the following sites
|
||||||
|
|
||||||
|
http://aditsu.freeunixhost.com/dev-cpp-faq.html
|
||||||
|
http://sourceforge.net/forum/message.php?msg_id=3252213
|
||||||
|
|
||||||
|
As I have mentioned before I will confine this to the SSL Library compilations
|
||||||
|
but the process is very similar for compilation of the executable - curl.exe;
|
||||||
|
just substitute the src folder makefile in its stead.
|
||||||
|
|
||||||
|
First use a text processor Notepad, or your own favourite text processor. To
|
||||||
|
engage your favourite text processor, select Makefile.m32 click once with your
|
||||||
|
mouse on file icon; icon turns blue, press the shift key and right-click on
|
||||||
|
mouse, menu appears select "Open with", select your favourite text processor.
|
||||||
|
|
||||||
|
Next read the contents of Makefile.m32. It includes instructions on its use.
|
||||||
|
|
||||||
|
Method I - DOS Command Line
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
Note - The only reason I have included this method is that Method II which is
|
||||||
|
the preferred method for compiling does not allow for the setting of option
|
||||||
|
switches (e.g. SSL = 1 or SSL =0). At least that's what they tell me at the
|
||||||
|
Dev-Cpp forum.
|
||||||
|
|
||||||
|
1 - Make a copy of (D:\Dev-Cpp\bin) bin folder and name it "bin Original"
|
||||||
|
place it in the Dev-Cpp installed directory (D:\Dev-Cpp\ for this example)
|
||||||
|
|
||||||
|
2 - Copy the entire contents of the LIB folder of curl-7.14.0.tar.gz or zip
|
||||||
|
version into the bin folder above (D:\Dev-Cpp\bin). The reason being is that
|
||||||
|
the make.exe file resides in this folder. Make.exe will use - Makefile.m32,
|
||||||
|
Makefile.inc, and the source code included in the lib folder to compile the
|
||||||
|
source code. There is a PATH issue with make.exe that remains unresolved at
|
||||||
|
least for me. Unless the entire source code to be compiled is placed entirely
|
||||||
|
within the directory of make.exe an error message will be generated - "file
|
||||||
|
xxxx.yyy not available".
|
||||||
|
|
||||||
|
3- Go to Dev-Cpp\bin and double click on make .exe. You will see a DOS window
|
||||||
|
quickly pop up and close very quickly. Not to worry! Please do not skip this
|
||||||
|
step.
|
||||||
|
|
||||||
|
4- Click on the start button\Programs\MS-DOS Prompt.Once the DOS Window is up
|
||||||
|
Type the disk drive letter (e.g. E: ) engage the enter button. The path should
|
||||||
|
automatically take you to the directory of the make.exe file.
|
||||||
|
|
||||||
|
5- To compile the source code simply type at the DOS prompt make -f
|
||||||
|
Makefile.m32 as per instructions contained in the Makefile.m32 file (use any
|
||||||
|
text processor to read instructions). I don't believe that this makefile
|
||||||
|
allows for the option of non SSL. Ignore any warnings.
|
||||||
|
|
||||||
|
6- Collect and make copies of libcurl.a, libcurl.dll, libcurldll.a and any *.o
|
||||||
|
compilations you might need in another directory outside of the bin directory
|
||||||
|
as you will need this files shortly to set up libcurl for use with
|
||||||
|
Dev-cpp. For most apps *.o is not required. Later on we will show what to do
|
||||||
|
with these files.
|
||||||
|
|
||||||
|
7- You are finished but before closing we need to do cleanup - erase the bin
|
||||||
|
folder and rename the "bin Original" folder created in step 1 to bin.
|
||||||
|
|
||||||
|
Note to compile a curl executable the process is probably similar but instead
|
||||||
|
of using the LIB folder contents use the SRC folder contents and Makefiles in
|
||||||
|
curl-7.14.0.tar.gz. File directories relative placements must be respected for
|
||||||
|
compiling to take place successfully. This may not be possible with the PATH
|
||||||
|
problem that make.exe experiences. If anyone has solved this PATH issue and
|
||||||
|
please make sure it actually works on Win 9x/2000/XP before letting me
|
||||||
|
know. Then please let me or Daniel in on the solution so that it can be
|
||||||
|
included with these instructions. Thanks.
|
||||||
|
|
||||||
|
or
|
||||||
|
|
||||||
|
Method II - Dev-Cpp GUI
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
1- Copy the entire contents of the LIB folder of curl-7.14.0.tar.gz or zip
|
||||||
|
version into any folder outside of (Dev-Cpp\bin).
|
||||||
|
|
||||||
|
2- Drop the File/New/click on Project.
|
||||||
|
|
||||||
|
3- New Project Dialogue box appears. Double click on the Static Library.
|
||||||
|
|
||||||
|
4- Create Project Dialogue box appears. Select the LIB folder location to
|
||||||
|
place and locate your Project File Name. Placing the Project File Name
|
||||||
|
elsewhere may cause problems (PATH issue problem again).
|
||||||
|
|
||||||
|
5- Drop down the Project/Project Options. Project Options Dialogue box
|
||||||
|
appears.
|
||||||
|
|
||||||
|
6- Select the Makefile tab in the Project Options Dialogue Box. Check Box -
|
||||||
|
Use Custom Makefile. Click on the Folder icon at the extreme right of the
|
||||||
|
Check Box. Select Makefile.m32 in the folder wherever you have placed the
|
||||||
|
contents of the LIB Folder. Press OK and close the Dialogue Box.
|
||||||
|
|
||||||
|
7- Drop the Menu Project/Click on Add to Project. Open File Dialogue Box
|
||||||
|
appears. The Dialogue Box should open in the folder wherever you have placed
|
||||||
|
the contents of the LIB Folder. If not go there.
|
||||||
|
|
||||||
|
8- Select Crtl-A to select all files in the LIB folder. Click on open to add
|
||||||
|
files and close box. Wait till all files are added. This may take 30 seconds
|
||||||
|
or longer.
|
||||||
|
|
||||||
|
9- Drop the Menu Execute/Click on Compile.
|
||||||
|
|
||||||
|
10- That's it.
|
||||||
|
|
||||||
|
|
||||||
|
The following steps must be completed if Curl is to work properly
|
||||||
|
=================================================================
|
||||||
|
|
||||||
|
LIB folder inclusions (*.a placement)
|
||||||
|
-------------------------------------
|
||||||
|
|
||||||
|
1- Refer to Method I - DOS Command Line point # 6 Take libcurl.a, libcurldll.a
|
||||||
|
and install it in the directory C( or whichever drive Dev is installed)
|
||||||
|
:\Dev-Cpp\lib.
|
||||||
|
|
||||||
|
|
||||||
|
Include Folder
|
||||||
|
--------------
|
||||||
|
|
||||||
|
1- Create a new folder by the name of curl (do not change the name curl to
|
||||||
|
some other name as it will cause major issues) in the directory
|
||||||
|
C:\Dev-Cpp\include.
|
||||||
|
|
||||||
|
2- Copy the entire contents of the curl folder of curl-7.14.0.tar.gz or zip
|
||||||
|
version into the newly created curl directory - C:\Dev-Cpp\include\curl.
|
||||||
|
|
||||||
|
Links To Include And Lib Folder
|
||||||
|
-------------------------------
|
||||||
|
|
||||||
|
1- Drop the Menu - Tools\Compiler Options\Directories\Libraries. Make sure
|
||||||
|
that C( or whichever drive Dev is installed):\DEV-CPP\lib is included.
|
||||||
|
|
||||||
|
2- Next select the Menu - Tools\Compiler Options\Directories\C Includes. Make
|
||||||
|
sure that C:\DEV-CPP\include and C:\Dev-Cpp\include\curl are included.
|
||||||
|
|
||||||
|
3- Next select the Menu - Tools\Compiler Options\Directories\C++
|
||||||
|
Includes. Make sure that C:\DEV-CPP\include and C:\Dev-Cpp\include\curl are
|
||||||
|
included.
|
||||||
|
|
||||||
|
Linker Links
|
||||||
|
------------
|
||||||
|
|
||||||
|
1- Drop the Menu - Tools\Compiler Options\Directories\Compiler.
|
||||||
|
|
||||||
|
2- Make sure that the box "Add these commands to the linker command line" is
|
||||||
|
checked.
|
||||||
|
|
||||||
|
3- Include in the white space immediately below the box referred in 2 -lcurl
|
||||||
|
-lws2_32 -lwinmm.
|
||||||
|
|
||||||
|
SSL Files
|
||||||
|
---------
|
||||||
|
|
||||||
|
1- Get the latest openSSL (as of time of this writing)
|
||||||
|
openssl-0.9.7e-win32-bin.zip for the minimalist package of the openssl-0.9.7e
|
||||||
|
binaries ported to MS Windows 95/98/NT/XP using the MingW32/GCC-3.1
|
||||||
|
development environment. The file may be downloaded at
|
||||||
|
http://curl.haxx.se/download/.
|
||||||
|
|
||||||
|
2- Open the above zip file. You will find two files - SDL.dll,
|
||||||
|
SDL_mixer.dll. Install them in the directory C:\WINDOWS\SYSTEM32 for Win 9x
|
||||||
|
users and c:\winnt\system32 for NT-family users.
|
||||||
|
|
||||||
|
Multithreading Files
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
To be completed
|
||||||
|
|
||||||
|
#define
|
||||||
|
-------
|
||||||
|
|
||||||
|
1- Make sure that your program includes the following - #define CURL_STATICLIB
|
||||||
|
must be declared FIRST before any other define functions may be
|
||||||
|
added. Otherwise you may experience link errors.
|
||||||
|
|
||||||
|
2- Don't forget to include #include "curl/curl.h".
|
||||||
|
|
||||||
|
e.g.
|
||||||
|
#define CURL_STATICLIB
|
||||||
|
#include <windows.h>
|
||||||
|
#include "curl/curl.h"
|
||||||
|
#include <fstream>
|
||||||
|
#include <iostream>
|
||||||
|
#include <vector>
|
||||||
|
etc...
|
||||||
|
|
||||||
|
|
||||||
|
Static or Dynamic Library
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
The above steps apply for the use by a static library. Should you choose to
|
||||||
|
use a dynamic library you will be required to perform these additional steps.
|
||||||
|
|
||||||
|
1- Refer to Method I - DOS Command Line point # 6. Install libcurl.dll in the
|
||||||
|
directory C:\WINDOWS\SYSTEM32 for Win 9x users and c:\winnt\system32 for
|
||||||
|
NT-family users.
|
||||||
|
|
||||||
|
2- Refer to Linker Links point 3 - Replace -lcurl with -lcurldll.
|
||||||
|
|
||||||
|
Voila you're done.
|
||||||
|
|
||||||
|
The non-SSL static Library build may not be possible to use at least as of the
|
||||||
|
time of this writing - v7.14. Check reference emails - Phillipe and I found it
|
||||||
|
impossible to fully compile as certain files were missing for linking. No big
|
||||||
|
loss as SSL is a major plus.
|
||||||
|
|
||||||
|
Hope this Helps
|
||||||
|
|
||||||
|
Tom
|
@@ -3,27 +3,59 @@ 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!
|
||||||
|
|
||||||
|
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
|
||||||
|
"system context" will make it use wrong(?) user name - at least when compared
|
||||||
|
to what winhttp does. See http://curl.haxx.se/bug/view.cgi?id=1281867
|
||||||
|
|
||||||
25. When doing a CONNECT request with curl it doesn't properly handle if the
|
25. When doing a CONNECT request with curl it doesn't properly handle if the
|
||||||
proxy closes the connection within the authentication "negotiation phase".
|
proxy closes the connection within the authentication "negotiation phase".
|
||||||
Like if you do HTTPS or similar over a proxy and you use perhaps
|
Like if you do HTTPS or similar over a proxy and you use perhaps
|
||||||
--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
|
||||||
to VMS file structures and the perceived file sizes stat() returns. A
|
to VMS file structures and the perceived file sizes stat() returns. A
|
||||||
possible fix would involve sending a "STRU VMS" command.
|
possible fix would involve sending a "STRU VMS" command.
|
||||||
http://sourceforge.net/support/tracker.php?aid=1156287
|
http://curl.haxx.se/bug/view.cgi?id=1156287
|
||||||
|
|
||||||
21. FTP ASCII transfers do not follow RFC959. They don't convert the data
|
21. FTP ASCII transfers do not follow RFC959. They don't convert the data
|
||||||
accordingly (not for sending nor for receiving). RFC 959 section 3.1.1.1
|
accordingly (not for sending nor for receiving). RFC 959 section 3.1.1.1
|
||||||
@@ -34,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
|
||||||
@@ -69,11 +100,12 @@ may have been fixed since this was written!
|
|||||||
10. To get HTTP Negotiate authentication to work fine, you need to provide a
|
10. To get HTTP Negotiate authentication to work fine, you need to provide a
|
||||||
(fake) user name (this concerns both curl and the lib) because the code
|
(fake) user name (this concerns both curl and the lib) because the code
|
||||||
wrongly only considers authentication if there's a user name provided.
|
wrongly only considers authentication if there's a user name provided.
|
||||||
Bug report #1004841. How? http://curl.haxx.se/mail/lib-2004-08/0182.html
|
http://curl.haxx.se/bug/view.cgi?id=1004841. How?
|
||||||
|
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
|
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
|
is provided by the curl app in its read/write callbacks, and when doing
|
||||||
-d/-F the callbacks aren't used! Bug report #921395.
|
-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
|
||||||
@@ -96,8 +128,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
|
||||||
|
@@ -56,9 +56,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
|
||||||
|
@@ -14,10 +14,10 @@ SUBDIRS = examples libcurl
|
|||||||
|
|
||||||
CLEANFILES = $(GENHTMLPAGES) $(PDFPAGES)
|
CLEANFILES = $(GENHTMLPAGES) $(PDFPAGES)
|
||||||
|
|
||||||
EXTRA_DIST = MANUAL BUGS CONTRIBUTE FAQ FEATURES INTERNALS SSLCERTS \
|
EXTRA_DIST = MANUAL BUGS CONTRIBUTE FAQ FEATURES INTERNALS SSLCERTS \
|
||||||
README.win32 RESOURCES TODO TheArtOfHttpScripting THANKS VERSIONS \
|
README.win32 RESOURCES TODO TheArtOfHttpScripting THANKS VERSIONS \
|
||||||
KNOWN_BUGS BINDINGS $(man_MANS) $(HTMLPAGES) HISTORY INSTALL \
|
KNOWN_BUGS BINDINGS $(man_MANS) $(HTMLPAGES) HISTORY INSTALL \
|
||||||
$(PDFPAGES) LICENSE-MIXING README.netware DISTRO-DILEMMA
|
$(PDFPAGES) LICENSE-MIXING README.netware DISTRO-DILEMMA INSTALL.devcpp
|
||||||
|
|
||||||
MAN2HTML= roffit < $< >$@
|
MAN2HTML= roffit < $< >$@
|
||||||
|
|
||||||
|
69
docs/THANKS
69
docs/THANKS
@@ -9,22 +9,25 @@ Alan Pinstein
|
|||||||
Albert Chin-A-Young
|
Albert Chin-A-Young
|
||||||
Albert Choy
|
Albert Choy
|
||||||
Aleksandar Milivojevic
|
Aleksandar Milivojevic
|
||||||
Alex aka WindEagle
|
|
||||||
Alex Neblett
|
Alex Neblett
|
||||||
Alex Suykov
|
Alex Suykov
|
||||||
|
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
|
||||||
Andr<EFBFBD>s Garc<72>a
|
|
||||||
Andreas Damm
|
Andreas Damm
|
||||||
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
|
||||||
|
Andr<EFBFBD>s Garc<72>a
|
||||||
Andy Cedilnik
|
Andy Cedilnik
|
||||||
Andy Serpa
|
Andy Serpa
|
||||||
Angus Mackay
|
Angus Mackay
|
||||||
@@ -34,18 +37,19 @@ Arkadiusz Miskiewicz
|
|||||||
Augustus Saunders
|
Augustus Saunders
|
||||||
Avery Fay
|
Avery Fay
|
||||||
Ben Greear
|
Ben Greear
|
||||||
|
Ben Madsen
|
||||||
Benjamin Gerard
|
Benjamin Gerard
|
||||||
Bertrand Demiddelaer
|
Bertrand Demiddelaer
|
||||||
Bj<EFBFBD>rn Stenberg
|
|
||||||
Bjorn Reese
|
Bjorn Reese
|
||||||
|
Bj<EFBFBD>rn Stenberg
|
||||||
Bob Schader
|
Bob Schader
|
||||||
Brad Burdick
|
Brad Burdick
|
||||||
|
Bradford Bruce
|
||||||
Brent Beardsley
|
Brent Beardsley
|
||||||
Brian Akins
|
Brian Akins
|
||||||
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
|
||||||
@@ -75,8 +79,9 @@ Dan C
|
|||||||
Dan Fandrich
|
Dan Fandrich
|
||||||
Dan Torop
|
Dan Torop
|
||||||
Dan Zitter
|
Dan Zitter
|
||||||
Daniel at touchtunes
|
|
||||||
Daniel Stenberg
|
Daniel Stenberg
|
||||||
|
Daniel at touchtunes
|
||||||
|
Darryl House
|
||||||
Dave Dribin
|
Dave Dribin
|
||||||
Dave Halbakken
|
Dave Halbakken
|
||||||
Dave Hamilton
|
Dave Hamilton
|
||||||
@@ -89,18 +94,23 @@ 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
|
||||||
David Tarendash
|
David Tarendash
|
||||||
David Thiel
|
David Thiel
|
||||||
|
David Yan
|
||||||
Detlef Schmier
|
Detlef Schmier
|
||||||
Diego Casorran
|
Diego Casorran
|
||||||
|
Dima Barsky
|
||||||
Dimitris Sarris
|
Dimitris Sarris
|
||||||
Dinar
|
Dinar
|
||||||
Dirk Eddelbuettel
|
Dirk Eddelbuettel
|
||||||
Dirk Manske
|
Dirk Manske
|
||||||
|
Dmitry Bartsevich
|
||||||
Dolbneff A.V
|
Dolbneff A.V
|
||||||
Domenico Andreoli
|
Domenico Andreoli
|
||||||
Dominick Meglio
|
Dominick Meglio
|
||||||
@@ -108,6 +118,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
|
||||||
@@ -127,6 +139,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
|
||||||
@@ -138,8 +151,6 @@ Frank Ticheler
|
|||||||
Fred New
|
Fred New
|
||||||
Fred Noz
|
Fred Noz
|
||||||
Frederic Lepied
|
Frederic Lepied
|
||||||
G<EFBFBD>nter Knauf
|
|
||||||
G<EFBFBD>tz Babin-Ebell
|
|
||||||
Gautam Mani
|
Gautam Mani
|
||||||
Gaz Iqbal
|
Gaz Iqbal
|
||||||
Georg Horn
|
Georg Horn
|
||||||
@@ -162,6 +173,8 @@ Guenole Bescon
|
|||||||
Guillaume Arluison
|
Guillaume Arluison
|
||||||
Gustaf Hui
|
Gustaf Hui
|
||||||
Gwenole Beauchesne
|
Gwenole Beauchesne
|
||||||
|
G<EFBFBD>tz Babin-Ebell
|
||||||
|
G<EFBFBD>nter Knauf
|
||||||
Hamish Mackenzie
|
Hamish Mackenzie
|
||||||
Hanno Kranzhoff
|
Hanno Kranzhoff
|
||||||
Hans Steegers
|
Hans Steegers
|
||||||
@@ -174,11 +187,10 @@ Ian Ford
|
|||||||
Ian Gulliver
|
Ian Gulliver
|
||||||
Ian Wilkes
|
Ian Wilkes
|
||||||
Ignacio Vazquez-Abrams
|
Ignacio Vazquez-Abrams
|
||||||
|
Igor Polyakov
|
||||||
Ilguiz Latypov
|
Ilguiz Latypov
|
||||||
Ingo Ralf Blum
|
Ingo Ralf Blum
|
||||||
Ingo Wilken
|
Ingo Wilken
|
||||||
J<EFBFBD>rg Mueller-Tolk
|
|
||||||
J<EFBFBD>rn Hartroth
|
|
||||||
Jacky Lam
|
Jacky Lam
|
||||||
Jacob Meuser
|
Jacob Meuser
|
||||||
James Bursa
|
James Bursa
|
||||||
@@ -188,8 +200,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
|
||||||
@@ -208,6 +224,7 @@ Johan Anderson
|
|||||||
Johan Nilsson
|
Johan Nilsson
|
||||||
John Crow
|
John Crow
|
||||||
John Janssen
|
John Janssen
|
||||||
|
John Kelly
|
||||||
John Lask
|
John Lask
|
||||||
John McGowan
|
John McGowan
|
||||||
Jon Grubbs
|
Jon Grubbs
|
||||||
@@ -225,15 +242,20 @@ Jukka Pihl
|
|||||||
Julian Noble
|
Julian Noble
|
||||||
Jun-ichiro itojun Hagino
|
Jun-ichiro itojun Hagino
|
||||||
Jurij Smakov
|
Jurij Smakov
|
||||||
|
J<EFBFBD>rg Mueller-Tolk
|
||||||
|
J<EFBFBD>rn Hartroth
|
||||||
Kai Sommerfeld
|
Kai Sommerfeld
|
||||||
Kai-Uwe Rommel
|
Kai-Uwe Rommel
|
||||||
Kang-Jin Lee
|
Kang-Jin Lee
|
||||||
|
Karl Moerder
|
||||||
Karol Pietrzak
|
Karol Pietrzak
|
||||||
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 Roth
|
Kevin Roth
|
||||||
Kimmo Kinnunen
|
Kimmo Kinnunen
|
||||||
Kjell Ericson
|
Kjell Ericson
|
||||||
@@ -272,6 +294,7 @@ Marco G. Salvagno
|
|||||||
Marcus Webster
|
Marcus Webster
|
||||||
Mario Schroeder
|
Mario Schroeder
|
||||||
Mark Butler
|
Mark Butler
|
||||||
|
Markus Koetter
|
||||||
Markus Moeller
|
Markus Moeller
|
||||||
Markus Oberhumer
|
Markus Oberhumer
|
||||||
Martijn Koster
|
Martijn Koster
|
||||||
@@ -290,8 +313,11 @@ Mekonikum
|
|||||||
Mettgut Jamalla
|
Mettgut Jamalla
|
||||||
Michael Benedict
|
Michael Benedict
|
||||||
Michael Curtis
|
Michael Curtis
|
||||||
|
Michael Jahn
|
||||||
Michael Mealling
|
Michael Mealling
|
||||||
|
Michael Wallner
|
||||||
Michal Bonino
|
Michal Bonino
|
||||||
|
Michal Marek
|
||||||
Mihai Ionescu
|
Mihai Ionescu
|
||||||
Mike Bytnar
|
Mike Bytnar
|
||||||
Mike Dobbs
|
Mike Dobbs
|
||||||
@@ -310,10 +336,13 @@ Nick Humfrey
|
|||||||
Nico Baggus
|
Nico Baggus
|
||||||
Nicolas Berloquin
|
Nicolas Berloquin
|
||||||
Nicolas Croiset
|
Nicolas Croiset
|
||||||
|
Nicolas Fran<61>ois
|
||||||
Niels van Tongeren
|
Niels van Tongeren
|
||||||
Nikita Schmidt
|
Nikita Schmidt
|
||||||
nk
|
Nis Jorgensen
|
||||||
Nodak Sodak
|
Nodak Sodak
|
||||||
|
Norbert Novotny
|
||||||
|
Ofer
|
||||||
Oren Tirosh
|
Oren Tirosh
|
||||||
P R Schaffner
|
P R Schaffner
|
||||||
Patrick Bihan-Faou
|
Patrick Bihan-Faou
|
||||||
@@ -329,7 +358,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
|
||||||
@@ -339,8 +370,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 +409,6 @@ Rosimildo da Silva
|
|||||||
Roy Shan
|
Roy Shan
|
||||||
Rune Kleveland
|
Rune Kleveland
|
||||||
Ryan Nelson
|
Ryan Nelson
|
||||||
S<EFBFBD>bastien Willemijns
|
|
||||||
S. Moonesamy
|
S. Moonesamy
|
||||||
Salvador D<>vila
|
Salvador D<>vila
|
||||||
Salvatore Sorrentino
|
Salvatore Sorrentino
|
||||||
@@ -385,16 +417,20 @@ Samuel D
|
|||||||
Samuel Listopad
|
Samuel Listopad
|
||||||
Sander Gates
|
Sander Gates
|
||||||
Saul good
|
Saul good
|
||||||
|
Scott Davis
|
||||||
Sebastien Willemijns
|
Sebastien Willemijns
|
||||||
Sergio Ballestrero
|
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 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
|
||||||
@@ -408,9 +444,11 @@ Steven Bazyl
|
|||||||
Steven G. Johnson
|
Steven G. Johnson
|
||||||
Stoned Elipot
|
Stoned Elipot
|
||||||
Sven Neuhaus
|
Sven Neuhaus
|
||||||
swalkaus at yahoo.com
|
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
|
||||||
@@ -419,6 +457,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
|
||||||
@@ -436,7 +475,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
|
||||||
@@ -449,5 +490,9 @@ Wesley Laxton
|
|||||||
Wez Furlong
|
Wez Furlong
|
||||||
Wilfredo Sanchez
|
Wilfredo Sanchez
|
||||||
Wojciech Zwiefka
|
Wojciech Zwiefka
|
||||||
|
Yang Tse
|
||||||
Yarram Sunil
|
Yarram Sunil
|
||||||
Zvi Har'El
|
Zvi Har'El
|
||||||
|
nk
|
||||||
|
swalkaus at yahoo.com
|
||||||
|
tommink[at]post.pl
|
||||||
|
56
docs/TODO
56
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]
|
||||||
@@ -31,7 +25,7 @@ TODO
|
|||||||
* Introduce a new error code indicating authentication problems (for proxy
|
* Introduce a new error code indicating authentication problems (for proxy
|
||||||
CONNECT error 407 for example). This cannot be an error code, we must not
|
CONNECT error 407 for example). This cannot be an error code, we must not
|
||||||
return informational stuff as errors, consider a new info returned by
|
return informational stuff as errors, consider a new info returned by
|
||||||
curl_easy_getinfo() #845941
|
curl_easy_getinfo() http://curl.haxx.se/bug/view.cgi?id=845941
|
||||||
|
|
||||||
* Use 'struct lifreq' and SIOCGLIFADDR instead of 'struct ifreq' and
|
* Use 'struct lifreq' and SIOCGLIFADDR instead of 'struct ifreq' and
|
||||||
SIOCGIFADDR on newer Solaris versions as they claim the latter is obsolete.
|
SIOCGIFADDR on newer Solaris versions as they claim the latter is obsolete.
|
||||||
@@ -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
|
||||||
@@ -83,7 +87,7 @@ TODO
|
|||||||
|
|
||||||
* Support GSS/Kerberos 5 for ftp file transfer. This will allow user
|
* Support GSS/Kerberos 5 for ftp file transfer. This will allow user
|
||||||
authentication and file encryption. Possible libraries and example clients
|
authentication and file encryption. Possible libraries and example clients
|
||||||
are available from MIT or Heimdal. Requsted by Markus Moeller.
|
are available from MIT or Heimdal. Requested by Markus Moeller.
|
||||||
|
|
||||||
* REST fix for servers not behaving well on >2GB requests. This should fail
|
* REST fix for servers not behaving well on >2GB requests. This should fail
|
||||||
if the server doesn't set the pointer to the requested index. The tricky
|
if the server doesn't set the pointer to the requested index. The tricky
|
||||||
@@ -182,6 +186,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
|
||||||
@@ -190,16 +199,11 @@ TODO
|
|||||||
|
|
||||||
NEW PROTOCOLS
|
NEW PROTOCOLS
|
||||||
|
|
||||||
* TFTP - RFC1350 (protocol) and RFC3617 (URI format)
|
|
||||||
|
|
||||||
Dan Fandrich: I wrote a tftp protocol module as part of the I-Boot
|
|
||||||
bootloader under a BSD-style license with attribution clause
|
|
||||||
http://download.intrinsyc.com/supported/tools/i-boot-lite/i-boot-lite-1.8/src/libs/net/tftp.c
|
|
||||||
|
|
||||||
* 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.
|
||||||
@@ -217,7 +221,7 @@ TODO
|
|||||||
* Globbing support for -d and -F, as in 'curl -d "name=foo[0-9]" URL'.
|
* Globbing support for -d and -F, as in 'curl -d "name=foo[0-9]" URL'.
|
||||||
Requested by Dane Jensen and others. This is easily scripted though.
|
Requested by Dane Jensen and others. This is easily scripted though.
|
||||||
|
|
||||||
* Add an option that prevents cURL from overwiting existing local files. When
|
* Add an option that prevents cURL from overwriting existing local files. When
|
||||||
used, and there already is an existing file with the target file name
|
used, and there already is an existing file with the target file name
|
||||||
(either -O or -o), a number should be appended (and increased if already
|
(either -O or -o), a number should be appended (and increased if already
|
||||||
existing). So that index.html becomes first index.html.1 and then
|
existing). So that index.html becomes first index.html.1 and then
|
||||||
|
@@ -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"
|
||||||
@@ -64,7 +69,7 @@ Outputs version information about the installed libcurl, in numerical mode.
|
|||||||
This outputs the version number, in hexadecimal, with 8 bits for each part;
|
This outputs the version number, in hexadecimal, with 8 bits for each part;
|
||||||
major, minor, patch. So that libcurl 7.7.4 would appear as 070704 and libcurl
|
major, minor, patch. So that libcurl 7.7.4 would appear as 070704 and libcurl
|
||||||
12.13.14 would appear as 0c0d0e... Note that the initial zero might be
|
12.13.14 would appear as 0c0d0e... Note that the initial zero might be
|
||||||
omitted.
|
omitted. (This option was broken in the 7.15.0 release.)
|
||||||
.SH "EXAMPLES"
|
.SH "EXAMPLES"
|
||||||
What linker options do I need when I link with libcurl?
|
What linker options do I need when I link with libcurl?
|
||||||
|
|
||||||
|
256
docs/curl.1
256
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 "12 Aug 2005" "Curl 7.14.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, GOPHER, DICT, TELNET, LDAP or FILE). The
|
protocols (HTTP, HTTPS, FTP, FTPS, TFTP, DICT, TELNET, LDAP or FILE).
|
||||||
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:
|
||||||
@@ -64,11 +64,40 @@ several ones next to each other:
|
|||||||
You can specify any amount of URLs on the command line. They will be fetched
|
You can specify any amount of URLs on the command line. They will be fetched
|
||||||
in a sequential manner in the specified order.
|
in a sequential manner in the specified order.
|
||||||
|
|
||||||
|
Since curl 7.15.1 you can also specify step counter for the ranges, so that
|
||||||
|
you can get every Nth number or letter:
|
||||||
|
|
||||||
|
http://www.numericals.com/file[1-100:10].txt
|
||||||
|
http://www.letters.com/file[a-z:2].txt
|
||||||
|
|
||||||
|
If you specify URL without protocol:// prefix, curl will attempt to guess what
|
||||||
|
protocol you might want. It will then default to HTTP but try other protocols
|
||||||
|
based on often-used host name prefixes. For example, for host names starting
|
||||||
|
with "ftp." curl will assume you want to speak FTP.
|
||||||
|
|
||||||
Curl will attempt to re-use connections for multiple file transfers, so that
|
Curl will attempt to re-use connections for multiple file transfers, so that
|
||||||
getting many files from the same server will not do multiple connects /
|
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
|
||||||
@@ -89,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
|
||||||
@@ -129,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.
|
||||||
@@ -187,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
|
||||||
@@ -231,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.
|
||||||
@@ -241,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"
|
||||||
@@ -265,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>"
|
||||||
@@ -325,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]"
|
||||||
@@ -339,15 +369,43 @@ 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-skip-pasv-ip"
|
||||||
|
(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
|
||||||
|
will re-use the same IP address it already uses for the control
|
||||||
|
connection. (Added in 7.14.2)
|
||||||
|
|
||||||
|
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 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) Make the FTP connection switch to use SSL/TLS. (Added in 7.11.0)
|
||||||
|
|
||||||
@@ -408,7 +466,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>"
|
||||||
@@ -459,15 +518,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>"
|
||||||
@@ -494,7 +552,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.
|
||||||
|
|
||||||
@@ -534,8 +592,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)
|
||||||
@@ -549,15 +605,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"
|
||||||
@@ -579,8 +641,7 @@ this given limit. This concerns both FTP and HTTP transfers.
|
|||||||
.IP "-m/--max-time <seconds>"
|
.IP "-m/--max-time <seconds>"
|
||||||
Maximum time in seconds that you allow the whole operation to take. This is
|
Maximum time in seconds that you allow the whole operation to take. This is
|
||||||
useful for preventing your batch jobs from hanging for hours due to slow
|
useful for preventing your batch jobs from hanging for hours due to slow
|
||||||
networks or links going down. This doesn't work fully in win32 systems. See
|
networks or links going down. See also the \fI--connect-timeout\fP option.
|
||||||
also the \fI--connect-timeout\fP option.
|
|
||||||
|
|
||||||
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 "-M/--manual"
|
.IP "-M/--manual"
|
||||||
@@ -599,7 +660,7 @@ directory.
|
|||||||
|
|
||||||
A quick and very simple example of how to setup a \fI.netrc\fP to allow curl
|
A quick and very simple example of how to setup a \fI.netrc\fP to allow curl
|
||||||
to ftp to the machine host.domain.com with user name \&'myself' and password
|
to ftp to the machine host.domain.com with user name \&'myself' and password
|
||||||
'secret' should look similar to:
|
\&'secret' should look similar to:
|
||||||
|
|
||||||
.B "machine host.domain.com login myself password secret"
|
.B "machine host.domain.com login myself password secret"
|
||||||
|
|
||||||
@@ -612,12 +673,16 @@ 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
|
||||||
GSS-Negotiate.
|
GSS-Negotiate.
|
||||||
|
|
||||||
|
When using this option, you must also provide a fake -u/--user option to
|
||||||
|
activate the authentication code properly. Sending a '-u :' is enough as the
|
||||||
|
user name and password from the -u option aren't actually used.
|
||||||
|
|
||||||
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.
|
||||||
.IP "-N/--no-buffer"
|
.IP "-N/--no-buffer"
|
||||||
@@ -633,7 +698,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.
|
||||||
@@ -663,8 +728,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>"
|
||||||
@@ -673,8 +738,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.
|
||||||
@@ -717,7 +782,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
|
||||||
@@ -757,7 +823,7 @@ specifies the second 500 bytes
|
|||||||
.B -500
|
.B -500
|
||||||
specifies the last 500 bytes
|
specifies the last 500 bytes
|
||||||
.TP
|
.TP
|
||||||
.B 9500
|
.B 9500-
|
||||||
specifies the bytes from offset 9500 and forward
|
specifies the bytes from offset 9500 and forward
|
||||||
.TP
|
.TP
|
||||||
.B 0-0,-1
|
.B 0-0,-1
|
||||||
@@ -798,7 +864,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>"
|
||||||
@@ -806,7 +872,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>"
|
||||||
@@ -815,26 +881,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
|
||||||
@@ -864,13 +940,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
|
||||||
|
|
||||||
@@ -882,8 +955,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
|
||||||
@@ -893,21 +965,28 @@ 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.
|
||||||
|
|
||||||
|
If you use an SSPI-enabled curl binary and do NTLM autentication, you can
|
||||||
|
force curl to pick up the user name and password from your environment by
|
||||||
|
simply specifying a single colon with this option: "-u :".
|
||||||
|
|
||||||
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 "-U/--proxy-user <user:password>"
|
.IP "-U/--proxy-user <user:password>"
|
||||||
Specify user and password to use for proxy authentication.
|
Specify user and password to use for proxy authentication.
|
||||||
|
|
||||||
|
If you use an SSPI-enabled curl binary and do NTLM autentication, you can
|
||||||
|
force curl to pick up the user name and password from your environment by
|
||||||
|
simply specifying a single colon with this option: "-U :".
|
||||||
|
|
||||||
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 "--url <URL>"
|
.IP "--url <URL>"
|
||||||
Specify a URL to fetch. This option is mostly handy when you want to specify
|
Specify a URL to fetch. This option is mostly handy when you want to specify
|
||||||
@@ -1045,13 +1124,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.
|
||||||
@@ -1114,7 +1197,8 @@ If this option is used several times, the last one will be used.
|
|||||||
.IP "--max-redirs <num>"
|
.IP "--max-redirs <num>"
|
||||||
Set maximum number of redirection-followings allowed. If \fI-L/--location\fP
|
Set maximum number of redirection-followings allowed. If \fI-L/--location\fP
|
||||||
is used, this option can be used to prevent curl from following redirections
|
is used, this option can be used to prevent curl from following redirections
|
||||||
\&"in absurdum".
|
\&"in absurdum". By default, the limit is set to 50 redirections. Set this
|
||||||
|
option to -1 to make it limitless.
|
||||||
|
|
||||||
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 "-0/--http1.0"
|
.IP "-0/--http1.0"
|
||||||
@@ -1143,11 +1227,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.
|
||||||
@@ -1165,13 +1249,11 @@ 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>"
|
||||||
list of host names that shouldn't go through any proxy. If set to a asterisk
|
list of host names that shouldn't go through any proxy. If set to a asterisk
|
||||||
'*' only, it matches all hosts.
|
\&'*' only, it matches all hosts.
|
||||||
.SH EXIT CODES
|
.SH EXIT CODES
|
||||||
There exists a bunch of different error codes and their corresponding error
|
There exists a bunch of different error codes and their corresponding error
|
||||||
messages that may appear during bad conditions. At the time of this writing,
|
messages that may appear during bad conditions. At the time of this writing,
|
||||||
@@ -1193,7 +1275,9 @@ Failed to connect to host.
|
|||||||
.IP 8
|
.IP 8
|
||||||
FTP weird server reply. The server sent data curl couldn't parse.
|
FTP weird server reply. The server sent data curl couldn't parse.
|
||||||
.IP 9
|
.IP 9
|
||||||
FTP access denied. The server denied login.
|
FTP access denied. The server denied login or denied access to the particular
|
||||||
|
resource or directory you wanted to reach. Most often you tried to change to a
|
||||||
|
directory that doesn't exist on the server.
|
||||||
.IP 10
|
.IP 10
|
||||||
FTP user/password incorrect. Either one or both were not accepted by the
|
FTP user/password incorrect. Either one or both were not accepted by the
|
||||||
server.
|
server.
|
||||||
@@ -1309,6 +1393,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;
|
||||||
|
}
|
@@ -14,6 +14,8 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
#include <curl/curl.h>
|
#include <curl/curl.h>
|
||||||
#include <curl/types.h>
|
#include <curl/types.h>
|
||||||
@@ -93,5 +95,8 @@ int main(int argc, char **argv)
|
|||||||
* you're done with it, you should free() it as a nice application.
|
* you're done with it, you should free() it as a nice application.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
if(chunk.memory)
|
||||||
|
free(chunk.memory);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@@ -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;
|
||||||
|
}
|
339
docs/examples/synctime.c
Normal file
339
docs/examples/synctime.c
Normal file
@@ -0,0 +1,339 @@
|
|||||||
|
/*****************************************************************************
|
||||||
|
* _ _ ____ _
|
||||||
|
* 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>
|
||||||
|
#include <windows.h>
|
||||||
|
#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,56 +4,58 @@
|
|||||||
|
|
||||||
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
|
||||||
|
|
||||||
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
|
||||||
|
|
||||||
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
|
||||||
|
|
||||||
CLEANFILES = $(HTMLPAGES) $(PDFPAGES)
|
CLEANFILES = $(HTMLPAGES) $(PDFPAGES)
|
||||||
|
|
||||||
EXTRA_DIST = $(man_MANS) $(HTMLPAGES) index.html $(PDFPAGES) libcurl.m4 \
|
EXTRA_DIST = $(man_MANS) $(HTMLPAGES) index.html $(PDFPAGES) libcurl.m4
|
||||||
getinfo-times
|
|
||||||
|
|
||||||
MAN2HTML= roffit --mandir=. < $< >$@
|
MAN2HTML= roffit --mandir=. < $< >$@
|
||||||
|
|
||||||
|
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 "22 Dec 2004" "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,6 +158,50 @@ 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
|
||||||
|
.NF
|
||||||
|
An overview of the six time values available from curl_easy_getinfo()
|
||||||
|
|
||||||
|
curl_easy_perform()
|
||||||
|
|
|
||||||
|
|--NT
|
||||||
|
|--|--CT
|
||||||
|
|--|--|--PT
|
||||||
|
|--|--|--|--ST
|
||||||
|
|--|--|--|--|--TT
|
||||||
|
|--|--|--|--|--RT
|
||||||
|
.FI
|
||||||
|
.IP NT
|
||||||
|
\fICURLINFO_NAMELOOKUP_TIME\fP. The time it took from the start until the name
|
||||||
|
resolving was completed.
|
||||||
|
.IP CT
|
||||||
|
\fICURLINFO_CONNECT_TIME\fP. The time it took from the start until the connect
|
||||||
|
to the remote host (or proxy) was completed.
|
||||||
|
.IP PT
|
||||||
|
\fICURLINFO_PRETRANSFER_TIME\fP. The time it took from the start until the
|
||||||
|
file transfer is just about to begin. This includes all pre-transfer commands
|
||||||
|
and negotiations that are specific to the particular protocol(s) involved.
|
||||||
|
.IP ST
|
||||||
|
\fICURLINFO_STARTTRANSFER_TIME\fP. The time it took from the start until the
|
||||||
|
first byte is just about to be transferred.
|
||||||
|
.IP TT
|
||||||
|
\fICURLINFO_TOTAL_TIME\fP. Total time of the previous request.
|
||||||
|
.IP RT
|
||||||
|
\fICURLINFO_REDIRECT_TIME\fP. The time it took for all redirection steps
|
||||||
|
include name lookup, connect, pretransfer and transfer before final
|
||||||
|
transaction was started. So, this is zero if no redirection took place.
|
||||||
.SH RETURN VALUE
|
.SH RETURN VALUE
|
||||||
If the operation was successful, CURLE_OK is returned. Otherwise an
|
If the operation was successful, CURLE_OK is returned. Otherwise an
|
||||||
appropriate error code will be returned.
|
appropriate error code will be returned.
|
||||||
|
@@ -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 "28 Jul 2005" "libcurl 7.14.1" "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>
|
||||||
|
|
||||||
@@ -44,11 +44,11 @@ between transfers, so if you want subsequent transfers with different options,
|
|||||||
you must change them between the transfers. You can optionally reset all
|
you must change them between the transfers. You can optionally reset all
|
||||||
options back to internal default with \fIcurl_easy_reset(3)\fP.
|
options back to internal default with \fIcurl_easy_reset(3)\fP.
|
||||||
|
|
||||||
\fBNOTE:\fP strings passed to libcurl as 'char *' arguments, will not be
|
Strings passed to libcurl as 'char *' arguments, will not be copied by the
|
||||||
copied by the library. Instead you should keep them available until libcurl no
|
library. Instead you should keep them available until libcurl no longer needs
|
||||||
longer needs them. Failing to do so will cause very odd behavior or even
|
them. Failing to do so will cause very odd behavior or even crashes. libcurl
|
||||||
crashes. libcurl will need them until you call \fIcurl_easy_cleanup(3)\fP or
|
will need them until you call \fIcurl_easy_cleanup(3)\fP or you set the same
|
||||||
you set the same option again to use a different pointer.
|
option again to use a different pointer.
|
||||||
|
|
||||||
The \fIhandle\fP is the return code from a \fIcurl_easy_init(3)\fP or
|
The \fIhandle\fP is the return code from a \fIcurl_easy_init(3)\fP or
|
||||||
\fIcurl_easy_duphandle(3)\fP call.
|
\fIcurl_easy_duphandle(3)\fP call.
|
||||||
@@ -70,8 +70,8 @@ preceding the data (like HTTP).
|
|||||||
A non-zero parameter tells the library to shut off the built-in progress meter
|
A non-zero parameter tells the library to shut off the built-in progress meter
|
||||||
completely.
|
completely.
|
||||||
|
|
||||||
\fBNOTE:\fP future versions of libcurl is likely to not have any built-in
|
Future versions of libcurl is likely to not have any built-in progress meter
|
||||||
progress meter at all.
|
at all.
|
||||||
.IP CURLOPT_NOSIGNAL
|
.IP CURLOPT_NOSIGNAL
|
||||||
Pass a long. If it is non-zero, libcurl will not use any functions that
|
Pass a long. If it is non-zero, libcurl will not use any functions that
|
||||||
install signal handlers or any functions that cause signals to be sent to the
|
install signal handlers or any functions that cause signals to be sent to the
|
||||||
@@ -96,19 +96,26 @@ transfer and return \fICURLE_WRITE_ERROR\fP.
|
|||||||
This function may be called with zero bytes data if the transfered file is
|
This function may be called with zero bytes data if the transfered file is
|
||||||
empty.
|
empty.
|
||||||
|
|
||||||
|
Set this option to NULL to get the internal default function. The internal
|
||||||
|
default function will write the data to the FILE * given with
|
||||||
|
\fICURLOPT_WRITEDATA\fP.
|
||||||
|
|
||||||
Set the \fIstream\fP argument with the \fICURLOPT_WRITEDATA\fP option.
|
Set the \fIstream\fP argument with the \fICURLOPT_WRITEDATA\fP option.
|
||||||
|
|
||||||
\fBNOTE:\fP you will be passed as much data as possible in all invokes, but
|
The callback function will be passed as much data as possible in all invokes,
|
||||||
you cannot possibly make any assumptions. It may be one byte, it may be
|
but you cannot possibly make any assumptions. It may be one byte, it may be
|
||||||
thousands. The maximum amount of data that can be passed to the write callback
|
thousands. The maximum amount of data that can be passed to the write callback
|
||||||
is defined in the curl.h header file: CURL_MAX_WRITE_SIZE.
|
is defined in the curl.h header file: CURL_MAX_WRITE_SIZE.
|
||||||
.IP CURLOPT_WRITEDATA
|
.IP CURLOPT_WRITEDATA
|
||||||
Data pointer to pass to the file write function. Note that if you specify the
|
Data pointer to pass to the file write function. If you use the
|
||||||
\fICURLOPT_WRITEFUNCTION\fP, this is the pointer you'll get as input. If you
|
\fICURLOPT_WRITEFUNCTION\fP option, this is the pointer you'll get as
|
||||||
don't use a callback, you must pass a 'FILE *' as libcurl will pass this to
|
input. If you don't use a callback, you must pass a 'FILE *' as libcurl will
|
||||||
fwrite() when writing data.
|
pass this to fwrite() when writing data.
|
||||||
|
|
||||||
\fBNOTE:\fP If you're using libcurl as a win32 DLL, you MUST use the
|
The internal \fICURLOPT_WRITEFUNCTION\fP will write the data to the FILE *
|
||||||
|
given with this option, or to stdout if this option hasn't been set.
|
||||||
|
|
||||||
|
If you're using libcurl as a win32 DLL, you \fBMUST\fP use the
|
||||||
\fICURLOPT_WRITEFUNCTION\fP if you set this option or you will experience
|
\fICURLOPT_WRITEFUNCTION\fP if you set this option or you will experience
|
||||||
crashes.
|
crashes.
|
||||||
|
|
||||||
@@ -129,15 +136,20 @@ server expected it, like when you've told you will upload N bytes and you
|
|||||||
upload less than N bytes), you may experience that the server "hangs" waiting
|
upload less than N bytes), you may experience that the server "hangs" waiting
|
||||||
for the rest of the data that won't come.
|
for the rest of the data that won't come.
|
||||||
|
|
||||||
In libcurl 7.12.1 and later, the read callback may return
|
The read callback may return \fICURL_READFUNC_ABORT\fP to stop the current
|
||||||
\fICURL_READFUNC_ABORT\fP to stop the current operation at once, with a
|
operation immediately, resulting in a \fICURLE_ABORTED_BY_CALLBACK\fP error
|
||||||
\fICURLE_ABORTED_BY_CALLBACK\fP error code from the transfer.
|
code from the transfer (Added in 7.12.1)
|
||||||
.IP CURLOPT_READDATA
|
|
||||||
Data pointer to pass to the file read function. Note that if you specify the
|
|
||||||
\fICURLOPT_READFUNCTION\fP, this is the pointer you'll get as input. If you
|
|
||||||
don't specify a read callback, this must be a valid FILE *.
|
|
||||||
|
|
||||||
\fBNOTE:\fP If you're using libcurl as a win32 DLL, you MUST use a
|
If you set the callback pointer to NULL, or doesn't set it at all, the default
|
||||||
|
internal read function will be used. It is simply doing an fread() on the FILE
|
||||||
|
* stream set with \fICURLOPT_READDATA\fP.
|
||||||
|
.IP CURLOPT_READDATA
|
||||||
|
Data pointer to pass to the file read function. If you use the
|
||||||
|
\fICURLOPT_READFUNCTION\fP option, this is the pointer you'll get as input. If
|
||||||
|
you don't specify a read callback but instead rely on the default internal
|
||||||
|
read function, this data must be a valid readable FILE *.
|
||||||
|
|
||||||
|
If you're using libcurl as a win32 DLL, you MUST use a
|
||||||
\fICURLOPT_READFUNCTION\fP if you set this option.
|
\fICURLOPT_READFUNCTION\fP if you set this option.
|
||||||
|
|
||||||
This option is also known with the older name \fICURLOPT_INFILE\fP, the name
|
This option is also known with the older name \fICURLOPT_INFILE\fP, the name
|
||||||
@@ -157,14 +169,19 @@ 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 data transfer (roughly
|
||||||
Unknown/unused argument values will be set to zero (like if you only download
|
once per second). Unknown/unused argument values pass to the callback will be
|
||||||
data, the upload size will remain 0). Returning a non-zero value from this
|
set to zero (like if you only download data, the upload size will remain
|
||||||
callback will cause libcurl to abort the transfer and return
|
0). Returning a non-zero value from this callback will cause libcurl to abort
|
||||||
\fICURLE_ABORTED_BY_CALLBACK\fP.
|
the transfer and return \fICURLE_ABORTED_BY_CALLBACK\fP.
|
||||||
|
|
||||||
Also note that \fICURLOPT_NOPROGRESS\fP must be set to FALSE to make this
|
If you transfer data with the multi interface, this function will not be
|
||||||
function actually get called.
|
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
|
||||||
|
get called.
|
||||||
.IP CURLOPT_PROGRESSDATA
|
.IP CURLOPT_PROGRESSDATA
|
||||||
Pass a pointer that will be untouched by libcurl and passed as the first
|
Pass a pointer that will be untouched by libcurl and passed as the first
|
||||||
argument in the progress callback set with \fICURLOPT_PROGRESSFUNCTION\fP.
|
argument in the progress callback set with \fICURLOPT_PROGRESSFUNCTION\fP.
|
||||||
@@ -236,33 +253,79 @@ option was introduced in 7.11.0.
|
|||||||
This function will get called on all new connections made to a server, during
|
This function will get called on all new connections made to a server, during
|
||||||
the SSL negotiation. The SSL_CTX pointer will be a new one every time.
|
the SSL negotiation. The SSL_CTX pointer will be a new one every time.
|
||||||
|
|
||||||
\fBNOTE:\fP To use this properly, a non-trivial amount of knowledge of the
|
To use this properly, a non-trivial amount of knowledge of the openssl
|
||||||
openssl libraries is necessary. Using this function allows for example to use
|
libraries is necessary. Using this function allows for example to use openssl
|
||||||
openssl callbacks to add additional validation code for certificates, and even
|
callbacks to add additional validation code for certificates, and even to
|
||||||
to change the actual URI of an HTTPS request (example used in the lib509 test
|
change the actual URI of an HTTPS request (example used in the lib509 test
|
||||||
case). See also the example section for a replacement of the key, certificate
|
case). See also the example section for a replacement of the key, certificate
|
||||||
and trust file settings.
|
and trust file settings.
|
||||||
.IP CURLOPT_SSL_CTX_DATA
|
.IP CURLOPT_SSL_CTX_DATA
|
||||||
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
|
||||||
messages in. This may be more helpful than just the return code from the
|
messages in. This may be more helpful than just the return code from
|
||||||
library. The buffer must be at least CURL_ERROR_SIZE big.
|
\fIcurl_easy_perform\fP. The buffer must be at least CURL_ERROR_SIZE big.
|
||||||
|
|
||||||
Use \fICURLOPT_VERBOSE\fP and \fICURLOPT_DEBUGFUNCTION\fP to better
|
Use \fICURLOPT_VERBOSE\fP and \fICURLOPT_DEBUGFUNCTION\fP to better
|
||||||
debug/trace why errors happen.
|
debug/trace why errors happen.
|
||||||
|
|
||||||
\fBNote:\fP if the library does not return an error, the buffer may not have
|
If the library does not return an error, the buffer may not have been
|
||||||
been touched. Do not rely on the contents in those cases.
|
touched. Do not rely on the contents in those cases.
|
||||||
|
|
||||||
.IP CURLOPT_STDERR
|
.IP CURLOPT_STDERR
|
||||||
Pass a FILE * as parameter. Tell libcurl to use this stream instead of stderr
|
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
|
||||||
@@ -277,7 +340,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.
|
||||||
|
|
||||||
\fBNOTE:\fP \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
|
||||||
@@ -306,17 +372,30 @@ 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. Note that there is a big difference between using
|
through a given HTTP proxy. There is a big difference between using a proxy
|
||||||
a proxy and to tunnel through it. If you don't know what this means, you
|
and to tunnel through it. If you don't know what this means, you probably
|
||||||
probably don't want this tunneling option.
|
don't want this tunneling option.
|
||||||
.IP CURLOPT_INTERFACE
|
.IP CURLOPT_INTERFACE
|
||||||
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
|
||||||
@@ -331,10 +410,14 @@ thread-safe and this will use a global variable.
|
|||||||
to using the share interface instead! See \fICURLOPT_SHARE\fP and
|
to using the share interface instead! See \fICURLOPT_SHARE\fP and
|
||||||
\fIcurl_share_init(3)\fP.
|
\fIcurl_share_init(3)\fP.
|
||||||
.IP CURLOPT_BUFFERSIZE
|
.IP CURLOPT_BUFFERSIZE
|
||||||
Pass a long specifying your preferred size for the receive buffer in libcurl.
|
Pass a long specifying your preferred size (in bytes) for the receive buffer
|
||||||
The main point of this would be that the write callback gets called more often
|
in libcurl. The main point of this would be that the write callback gets
|
||||||
and with smaller chunks. This is just treated as a request, not an order. You
|
called more often and with smaller chunks. This is just treated as a request,
|
||||||
cannot be guaranteed to actually get the given size. (Added in 7.10)
|
not an order. You cannot be guaranteed to actually get the given size. (Added
|
||||||
|
in 7.10)
|
||||||
|
|
||||||
|
This size is by default set as big as possible (CURL_MAX_WRITE_SIZE), so it
|
||||||
|
only makse sense to use this option if you want it smaller.
|
||||||
.IP CURLOPT_PORT
|
.IP CURLOPT_PORT
|
||||||
Pass a long specifying what remote port number to connect to, instead of the
|
Pass a long specifying what remote port number to connect to, instead of the
|
||||||
one specified in the URL or the default port for the used protocol.
|
one specified in the URL or the default port for the used protocol.
|
||||||
@@ -360,9 +443,9 @@ This parameter controls the preference of libcurl between using user names and
|
|||||||
passwords from your \fI~/.netrc\fP file, relative to user names and passwords
|
passwords from your \fI~/.netrc\fP file, relative to user names and passwords
|
||||||
in the URL supplied with \fICURLOPT_URL\fP.
|
in the URL supplied with \fICURLOPT_URL\fP.
|
||||||
|
|
||||||
\fBNote:\fP libcurl uses a user name (and supplied or prompted password)
|
libcurl uses a user name (and supplied or prompted password) supplied with
|
||||||
supplied with \fICURLOPT_USERPWD\fP in preference to any of the options
|
\fICURLOPT_USERPWD\fP in preference to any of the options controlled by this
|
||||||
controlled by this parameter.
|
parameter.
|
||||||
|
|
||||||
Pass a long, set to one of the values described below.
|
Pass a long, set to one of the values described below.
|
||||||
.RS
|
.RS
|
||||||
@@ -386,9 +469,8 @@ and to search the file with the host only.
|
|||||||
Only machine name, user name and password are taken into account
|
Only machine name, user name and password are taken into account
|
||||||
(init macros and similar things aren't supported).
|
(init macros and similar things aren't supported).
|
||||||
|
|
||||||
\fBNote:\fP libcurl does not verify that the file has the correct properties
|
libcurl does not verify that the file has the correct properties set (as the
|
||||||
set (as the standard Unix ftp client does). It should only be readable by
|
standard Unix ftp client does). It should only be readable by user.
|
||||||
user.
|
|
||||||
.IP CURLOPT_NETRC_FILE
|
.IP CURLOPT_NETRC_FILE
|
||||||
Pass a char * as parameter, pointing to a zero terminated string containing
|
Pass a char * as parameter, pointing to a zero terminated string containing
|
||||||
the full path name to the file you want libcurl to use as .netrc file. If this
|
the full path name to the file you want libcurl to use as .netrc file. If this
|
||||||
@@ -398,6 +480,11 @@ find the a .netrc file in the current user's home directory. (Added in 7.10.9)
|
|||||||
Pass a char * as parameter, which should be [user name]:[password] to use for
|
Pass a char * as parameter, which should be [user name]:[password] to use for
|
||||||
the connection. Use \fICURLOPT_HTTPAUTH\fP to decide authentication method.
|
the connection. Use \fICURLOPT_HTTPAUTH\fP to decide authentication method.
|
||||||
|
|
||||||
|
When using NTLM, you can set domain by prepending it to the user name and
|
||||||
|
separating the domain and name with a forward (/) or backward slash (\\). Like
|
||||||
|
this: "domain/user:password" or "domain\\user:password". Some HTTP servers (on
|
||||||
|
Windows) support this style even for Basic authentication.
|
||||||
|
|
||||||
When using HTTP and \fICURLOPT_FOLLOWLOCATION\fP, libcurl might perform
|
When using HTTP and \fICURLOPT_FOLLOWLOCATION\fP, libcurl might perform
|
||||||
several requests to possibly different hosts. libcurl will only send this user
|
several requests to possibly different hosts. libcurl will only send this user
|
||||||
and password information to hosts using the initial host name (unless
|
and password information to hosts using the initial host name (unless
|
||||||
@@ -413,9 +500,9 @@ Pass a long as parameter, which is set to a bitmask, to tell libcurl what
|
|||||||
authentication method(s) you want it to use. The available bits are listed
|
authentication method(s) you want it to use. The available bits are listed
|
||||||
below. If more than one bit is set, libcurl will first query the site to see
|
below. If more than one bit is set, libcurl will first query the site to see
|
||||||
what authentication methods it supports and then pick the best one you allow
|
what authentication methods it supports and then pick the best one you allow
|
||||||
it to use. Note that for some methods, this will induce an extra network
|
it to use. For some methods, this will induce an extra network round-trip. Set
|
||||||
round-trip. Set the actual name and password with the \fICURLOPT_USERPWD\fP
|
the actual name and password with the \fICURLOPT_USERPWD\fP option. (Added in
|
||||||
option. (Added in 7.10.6)
|
7.10.6)
|
||||||
.RS
|
.RS
|
||||||
.IP CURLAUTH_BASIC
|
.IP CURLAUTH_BASIC
|
||||||
HTTP Basic authentication. This is the default choice, and the only method
|
HTTP Basic authentication. This is the default choice, and the only method
|
||||||
@@ -433,15 +520,14 @@ applications. It is primarily meant as a support for Kerberos5 authentication
|
|||||||
but may be also used along with another authentication methods. For more
|
but may be also used along with another authentication methods. For more
|
||||||
information see IETF draft draft-brezak-spnego-http-04.txt.
|
information see IETF draft draft-brezak-spnego-http-04.txt.
|
||||||
|
|
||||||
\fBNOTE\fP that you need to build libcurl with a suitable GSS-API library for
|
You need to build libcurl with a suitable GSS-API library for this to work.
|
||||||
this to work.
|
|
||||||
.IP CURLAUTH_NTLM
|
.IP CURLAUTH_NTLM
|
||||||
HTTP NTLM authentication. A proprietary protocol invented and used by
|
HTTP NTLM authentication. A proprietary protocol invented and used by
|
||||||
Microsoft. It uses a challenge-response and hash concept similar to Digest, to
|
Microsoft. It uses a challenge-response and hash concept similar to Digest, to
|
||||||
prevent the password from being eavesdropped.
|
prevent the password from being eavesdropped.
|
||||||
|
|
||||||
\fBNOTE\fP that you need to build libcurl with SSL support for this option to
|
You need to build libcurl with OpenSSL support for this option to work, or
|
||||||
work.
|
build libcurl on Windows.
|
||||||
.IP CURLAUTH_ANY
|
.IP CURLAUTH_ANY
|
||||||
This is a convenience macro that sets all bits and thus makes libcurl pick any
|
This is a convenience macro that sets all bits and thus makes libcurl pick any
|
||||||
it finds suitable. libcurl will automatically select the one it finds most
|
it finds suitable. libcurl will automatically select the one it finds most
|
||||||
@@ -456,11 +542,11 @@ Pass a long as parameter, which is set to a bitmask, to tell libcurl what
|
|||||||
authentication method(s) you want it to use for your proxy authentication. If
|
authentication method(s) you want it to use for your proxy authentication. If
|
||||||
more than one bit is set, libcurl will first query the site to see what
|
more than one bit is set, libcurl will first query the site to see what
|
||||||
authentication methods it supports and then pick the best one you allow it to
|
authentication methods it supports and then pick the best one you allow it to
|
||||||
use. Note that for some methods, this will induce an extra network
|
use. For some methods, this will induce an extra network round-trip. Set the
|
||||||
round-trip. Set the actual name and password with the
|
actual name and password with the \fICURLOPT_PROXYUSERPWD\fP option. The
|
||||||
\fICURLOPT_PROXYUSERPWD\fP option. The bitmask can be constructed by or'ing
|
bitmask can be constructed by or'ing together the bits listed above for the
|
||||||
together the bits listed above for the \fICURLOPT_HTTPAUTH\fP option. As of
|
\fICURLOPT_HTTPAUTH\fP option. As of this writing, only Basic, Digest and NTLM
|
||||||
this writing, only Basic, Digest and NTLM work. (Added in 7.10.7)
|
work. (Added in 7.10.7)
|
||||||
.SH HTTP OPTIONS
|
.SH HTTP OPTIONS
|
||||||
.IP CURLOPT_AUTOREFERER
|
.IP CURLOPT_AUTOREFERER
|
||||||
Pass a non-zero parameter to enable this. When enabled, libcurl will
|
Pass a non-zero parameter to enable this. When enabled, libcurl will
|
||||||
@@ -483,19 +569,21 @@ lib/README.encoding for details.
|
|||||||
A non-zero parameter tells the library to follow any Location: header that the
|
A non-zero parameter tells the library to follow any Location: header that the
|
||||||
server sends as part of an HTTP header.
|
server sends as part of an HTTP header.
|
||||||
|
|
||||||
\fBNOTE:\fP this means that the library will re-send the same request on the
|
This means that the library will re-send the same request on the new location
|
||||||
new location and follow new Location: headers all the way until no more such
|
and follow new Location: headers all the way until no more such headers are
|
||||||
headers are returned. \fICURLOPT_MAXREDIRS\fP can be used to limit the number
|
returned. \fICURLOPT_MAXREDIRS\fP can be used to limit the number of redirects
|
||||||
of redirects libcurl will follow.
|
libcurl will follow.
|
||||||
.IP CURLOPT_UNRESTRICTED_AUTH
|
.IP CURLOPT_UNRESTRICTED_AUTH
|
||||||
A non-zero parameter tells the library it can continue to send authentication
|
A non-zero parameter tells the library it can continue to send authentication
|
||||||
(user+password) when following locations, even when hostname changed. Note
|
(user+password) when following locations, even when hostname changed. This
|
||||||
that this is meaningful only when setting \fICURLOPT_FOLLOWLOCATION\fP.
|
option is meaningful only when setting \fICURLOPT_FOLLOWLOCATION\fP.
|
||||||
.IP CURLOPT_MAXREDIRS
|
.IP CURLOPT_MAXREDIRS
|
||||||
Pass a long. The set number will be the redirection limit. If that many
|
Pass a long. The set number will be the redirection limit. If that many
|
||||||
redirections have been followed, the next redirect will cause an error
|
redirections have been followed, the next redirect will cause an error
|
||||||
(\fICURLE_TOO_MANY_REDIRECTS\fP). This option only makes sense if the
|
(\fICURLE_TOO_MANY_REDIRECTS\fP). This option only makes sense if the
|
||||||
\fICURLOPT_FOLLOWLOCATION\fP is used at the same time.
|
\fICURLOPT_FOLLOWLOCATION\fP is used at the same time. Added in 7.15.1:
|
||||||
|
Setting the limit to 0 will make libcurl refuse any redirect. Set it to -1 for
|
||||||
|
an infinite number of redirects (which is the default)
|
||||||
.IP CURLOPT_PUT
|
.IP CURLOPT_PUT
|
||||||
A non-zero parameter tells the library to use HTTP PUT to transfer data. The
|
A non-zero parameter tells the library to use HTTP PUT to transfer data. The
|
||||||
data should be set with \fICURLOPT_READDATA\fP and \fICURLOPT_INFILESIZE\fP.
|
data should be set with \fICURLOPT_READDATA\fP and \fICURLOPT_INFILESIZE\fP.
|
||||||
@@ -549,8 +637,8 @@ commonly used one by HTML forms. See also the \fICURLOPT_POST\fP. Using
|
|||||||
Using POST with HTTP 1.1 implies the use of a "Expect: 100-continue" header.
|
Using POST with HTTP 1.1 implies the use of a "Expect: 100-continue" header.
|
||||||
You can disable this header with \fICURLOPT_HTTPHEADER\fP as usual.
|
You can disable this header with \fICURLOPT_HTTPHEADER\fP as usual.
|
||||||
|
|
||||||
\fBNote:\fP to make multipart/formdata posts (aka rfc1867-posts), check out
|
To make multipart/formdata posts (aka rfc1867-posts), check out the
|
||||||
the \fICURLOPT_HTTPPOST\fP option.
|
\fICURLOPT_HTTPPOST\fP option.
|
||||||
.IP CURLOPT_POSTFIELDSIZE
|
.IP CURLOPT_POSTFIELDSIZE
|
||||||
If you want to post data to the server without letting libcurl do a strlen()
|
If you want to post data to the server without letting libcurl do a strlen()
|
||||||
to measure the data size, this option must be used. When this option is used
|
to measure the data size, this option must be used. When this option is used
|
||||||
@@ -593,19 +681,21 @@ 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.
|
||||||
|
|
||||||
\fBNOTE:\fP The most commonly replaced headers have "shortcuts" in the options
|
The most commonly replaced headers have "shortcuts" in the options
|
||||||
\fICURLOPT_COOKIE\fP, \fICURLOPT_USERAGENT\fP and \fICURLOPT_REFERER\fP.
|
\fICURLOPT_COOKIE\fP, \fICURLOPT_USERAGENT\fP and \fICURLOPT_REFERER\fP.
|
||||||
.IP CURLOPT_HTTP200ALIASES
|
.IP CURLOPT_HTTP200ALIASES
|
||||||
Pass a pointer to a linked list of aliases to be treated as valid HTTP 200
|
Pass a pointer to a linked list of aliases to be treated as valid HTTP 200
|
||||||
@@ -618,9 +708,9 @@ The linked list should be a fully valid list of struct curl_slist structs, and
|
|||||||
be properly filled in. Use \fIcurl_slist_append(3)\fP to create the list and
|
be properly filled in. Use \fIcurl_slist_append(3)\fP to create the list and
|
||||||
\fIcurl_slist_free_all(3)\fP to clean up an entire list.
|
\fIcurl_slist_free_all(3)\fP to clean up an entire list.
|
||||||
|
|
||||||
\fBNOTE:\fP The alias itself is not parsed for any version strings. So if your
|
The alias itself is not parsed for any version strings. So if your alias is
|
||||||
alias is "MYHTTP/9.9", Libcurl will not treat the server as responding with
|
\&"MYHTTP/9.9", Libcurl will not treat the server as responding with HTTP
|
||||||
HTTP version 9.9. Instead Libcurl will use the value set by option
|
version 9.9. Instead Libcurl will use the value set by option
|
||||||
\fICURLOPT_HTTP_VERSION\fP.
|
\fICURLOPT_HTTP_VERSION\fP.
|
||||||
.IP CURLOPT_COOKIE
|
.IP CURLOPT_COOKIE
|
||||||
Pass a pointer to a zero terminated string as parameter. It will be used to
|
Pass a pointer to a zero terminated string as parameter. It will be used to
|
||||||
@@ -655,7 +745,7 @@ instead have the cookies written to stdout. Using this option also enables
|
|||||||
cookies for this session, so if you for example follow a location it will make
|
cookies for this session, so if you for example follow a location it will make
|
||||||
matching cookies get sent accordingly.
|
matching cookies get sent accordingly.
|
||||||
|
|
||||||
\fBNOTE:\fP If the cookie jar file can't be created or written to (when the
|
If the cookie jar file can't be created or written to (when the
|
||||||
\fIcurl_easy_cleanup(3)\fP is called), libcurl will not and cannot report an
|
\fIcurl_easy_cleanup(3)\fP is called), libcurl will not and cannot report an
|
||||||
error for this. Using \fICURLOPT_VERBOSE\fP or \fICURLOPT_DEBUGFUNCTION\fP
|
error for this. Using \fICURLOPT_VERBOSE\fP or \fICURLOPT_DEBUGFUNCTION\fP
|
||||||
will get a warning to display, but that is the only visible feedback you get
|
will get a warning to display, but that is the only visible feedback you get
|
||||||
@@ -672,6 +762,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
|
||||||
@@ -762,11 +854,19 @@ directory. (Added in 7.10.7)
|
|||||||
.IP CURLOPT_FTP_RESPONSE_TIMEOUT
|
.IP CURLOPT_FTP_RESPONSE_TIMEOUT
|
||||||
Pass a long. Causes curl to set a timeout period (in seconds) on the amount
|
Pass a long. Causes curl to set a timeout period (in seconds) on the amount
|
||||||
of time that the server is allowed to take in order to generate a response
|
of time that the server is allowed to take in order to generate a response
|
||||||
message for a command before the session is considered hung. Note that while
|
message for a command before the session is considered hung. While curl is
|
||||||
curl is waiting for a response, this value overrides \fICURLOPT_TIMEOUT\fP. It
|
waiting for a response, this value overrides \fICURLOPT_TIMEOUT\fP. It is
|
||||||
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_SKIP_PASV_IP
|
||||||
|
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
|
||||||
|
when libcurl connects the data connection. Instead libcurl will re-use the
|
||||||
|
same IP address it already uses for the control connection. But it will use
|
||||||
|
the port number from the 227-response. (Added in 7.14.2)
|
||||||
|
|
||||||
|
This option has no effect if PORT, EPRT or EPSV is used instead of PASV.
|
||||||
.IP CURLOPT_FTP_SSL
|
.IP CURLOPT_FTP_SSL
|
||||||
Pass a long using one of the values from below, to make libcurl use your
|
Pass a long using one of the values from below, to make libcurl use your
|
||||||
desired level of SSL for the ftp transfer. (Added in 7.11.0)
|
desired level of SSL for the ftp transfer. (Added in 7.11.0)
|
||||||
@@ -808,6 +908,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,
|
||||||
@@ -816,10 +933,9 @@ stdout to binary mode. This option can be usable when transferring text data
|
|||||||
between systems with different views on certain characters, such as newlines
|
between systems with different views on certain characters, such as newlines
|
||||||
or similar.
|
or similar.
|
||||||
|
|
||||||
\fBNOTE:\fP libcurl does not do a complete ASCII conversion when doing ASCII
|
libcurl does not do a complete ASCII conversion when doing ASCII transfers
|
||||||
transfers over FTP. This is a known limitation/flaw that nobody has
|
over FTP. This is a known limitation/flaw that nobody has rectified. libcurl
|
||||||
rectified. libcurl simply sets the mode to ascii and performs a standard
|
simply sets the mode to ascii and performs a standard transfer.
|
||||||
transfer.
|
|
||||||
.IP CURLOPT_CRLF
|
.IP CURLOPT_CRLF
|
||||||
Convert Unix newlines to CRLF newlines on transfers.
|
Convert Unix newlines to CRLF newlines on transfers.
|
||||||
.IP CURLOPT_RANGE
|
.IP CURLOPT_RANGE
|
||||||
@@ -845,11 +961,11 @@ server supports the command first.
|
|||||||
|
|
||||||
Restore to the internal default by setting this to NULL.
|
Restore to the internal default by setting this to NULL.
|
||||||
|
|
||||||
\fBNOTE:\fP Many people have wrongly used this option to replace the entire
|
Many people have wrongly used this option to replace the entire request with
|
||||||
request with their own, including multiple headers and POST contents. While
|
their own, including multiple headers and POST contents. While that might work
|
||||||
that might work in many cases, it will cause libcurl to send invalid requests
|
in many cases, it will cause libcurl to send invalid requests and it could
|
||||||
and it could possibly confuse the remote server badly. Use \fICURLOPT_POST\fP
|
possibly confuse the remote server badly. Use \fICURLOPT_POST\fP and
|
||||||
and \fICURLOPT_POSTFIELDS\fP to set POST data. Use \fICURLOPT_HTTPHEADER\fP to
|
\fICURLOPT_POSTFIELDS\fP to set POST data. Use \fICURLOPT_HTTPHEADER\fP to
|
||||||
replace or extend the set of headers sent by libcurl. Use
|
replace or extend the set of headers sent by libcurl. Use
|
||||||
\fICURLOPT_HTTP_VERSION\fP to change HTTP version.
|
\fICURLOPT_HTTP_VERSION\fP to change HTTP version.
|
||||||
.IP CURLOPT_FILETIME
|
.IP CURLOPT_FILETIME
|
||||||
@@ -893,26 +1009,26 @@ Pass a long as parameter. This allows you to specify the maximum size (in
|
|||||||
bytes) of a file to download. If the file requested is larger than this value,
|
bytes) of a file to download. If the file requested is larger than this value,
|
||||||
the transfer will not start and CURLE_FILESIZE_EXCEEDED will be returned.
|
the transfer will not start and CURLE_FILESIZE_EXCEEDED will be returned.
|
||||||
|
|
||||||
\fBNOTE:\fP The file size is not always known prior to download, and for such
|
The file size is not always known prior to download, and for such files this
|
||||||
files this option has no effect even if the file transfer ends up being larger
|
option has no effect even if the file transfer ends up being larger than this
|
||||||
than this given limit. This concerns both FTP and HTTP transfers.
|
given limit. This concerns both FTP and HTTP transfers.
|
||||||
.IP CURLOPT_MAXFILESIZE_LARGE
|
.IP CURLOPT_MAXFILESIZE_LARGE
|
||||||
Pass a curl_off_t as parameter. This allows you to specify the maximum size
|
Pass a curl_off_t as parameter. This allows you to specify the maximum size
|
||||||
(in bytes) of a file to download. If the file requested is larger than this
|
(in bytes) of a file to download. If the file requested is larger than this
|
||||||
value, the transfer will not start and \fICURLE_FILESIZE_EXCEEDED\fP will be
|
value, the transfer will not start and \fICURLE_FILESIZE_EXCEEDED\fP will be
|
||||||
returned. (Added in 7.11.0)
|
returned. (Added in 7.11.0)
|
||||||
|
|
||||||
\fBNOTE:\fP The file size is not always known prior to download, and for such
|
The file size is not always known prior to download, and for such files this
|
||||||
files this option has no effect even if the file transfer ends up being larger
|
option has no effect even if the file transfer ends up being larger than this
|
||||||
than this given limit. This concerns both FTP and HTTP transfers.
|
given limit. This concerns both FTP and HTTP transfers.
|
||||||
.IP CURLOPT_TIMECONDITION
|
.IP CURLOPT_TIMECONDITION
|
||||||
Pass a long as parameter. This defines how the \fICURLOPT_TIMEVALUE\fP time
|
Pass a long as parameter. This defines how the \fICURLOPT_TIMEVALUE\fP time
|
||||||
value is treated. You can set this parameter to \fICURL_TIMECOND_IFMODSINCE\fP
|
value is treated. You can set this parameter to \fICURL_TIMECOND_IFMODSINCE\fP
|
||||||
or \fICURL_TIMECOND_IFUNMODSINCE\fP. This feature applies to HTTP and FTP.
|
or \fICURL_TIMECOND_IFUNMODSINCE\fP. This feature applies to HTTP and FTP.
|
||||||
|
|
||||||
\fBNOTE:\fP The last modification time of a file is not always known and in such
|
The last modification time of a file is not always known and in such instances
|
||||||
instances this feature will have no effect even if the given time condition
|
this feature will have no effect even if the given time condition would have
|
||||||
would have not been met.
|
not been met.
|
||||||
.IP CURLOPT_TIMEVALUE
|
.IP CURLOPT_TIMEVALUE
|
||||||
Pass a long as parameter. This should be the time in seconds since 1 jan 1970,
|
Pass a long as parameter. This should be the time in seconds since 1 jan 1970,
|
||||||
and the time will be used in a condition as specified with
|
and the time will be used in a condition as specified with
|
||||||
@@ -925,8 +1041,8 @@ considerable time and limiting operations to less than a few minutes risk
|
|||||||
aborting perfectly normal operations. This option will cause curl to use the
|
aborting perfectly normal operations. This option will cause curl to use the
|
||||||
SIGALRM to enable time-outing system calls.
|
SIGALRM to enable time-outing system calls.
|
||||||
|
|
||||||
\fBNOTE:\fP this is not recommended to use in unix multi-threaded programs, as
|
In unix-like systems, this might cause signals to be used unless
|
||||||
it uses signals unless \fICURLOPT_NOSIGNAL\fP (see above) is set.
|
\fICURLOPT_NOSIGNAL\fP is set.
|
||||||
.IP CURLOPT_LOW_SPEED_LIMIT
|
.IP CURLOPT_LOW_SPEED_LIMIT
|
||||||
Pass a long as parameter. It contains the transfer speed in bytes per second
|
Pass a long as parameter. It contains the transfer speed in bytes per second
|
||||||
that the transfer should be below during \fICURLOPT_LOW_SPEED_TIME\fP seconds
|
that the transfer should be below during \fICURLOPT_LOW_SPEED_TIME\fP seconds
|
||||||
@@ -947,9 +1063,9 @@ When reaching the maximum limit, curl uses the \fICURLOPT_CLOSEPOLICY\fP to
|
|||||||
figure out which of the existing connections to close to prevent the number of
|
figure out which of the existing connections to close to prevent the number of
|
||||||
open connections to increase.
|
open connections to increase.
|
||||||
|
|
||||||
\fBNOTE:\fP if you already have performed transfers with this curl handle,
|
If you already have performed transfers with this curl handle, setting a
|
||||||
setting a smaller MAXCONNECTS than before may cause open connections to get
|
smaller MAXCONNECTS than before may cause open connections to get closed
|
||||||
closed unnecessarily.
|
unnecessarily.
|
||||||
.IP CURLOPT_CLOSEPOLICY
|
.IP CURLOPT_CLOSEPOLICY
|
||||||
Pass a long. This option sets what policy libcurl should use when the
|
Pass a long. This option sets what policy libcurl should use when the
|
||||||
connection cache is filled and one of the open connections has to be closed to
|
connection cache is filled and one of the open connections has to be closed to
|
||||||
@@ -981,8 +1097,8 @@ it has connected, this option is of no more use. Set to zero to disable
|
|||||||
connection timeout (it will then only timeout on the system's internal
|
connection timeout (it will then only timeout on the system's internal
|
||||||
timeouts). See also the \fICURLOPT_TIMEOUT\fP option.
|
timeouts). See also the \fICURLOPT_TIMEOUT\fP option.
|
||||||
|
|
||||||
\fBNOTE:\fP this is not recommended to use in unix multi-threaded programs, as
|
In unix-like systems, this might cause signals to be used unless
|
||||||
it uses signals unless \fICURLOPT_NOSIGNAL\fP (see above) is set.
|
\fICURLOPT_NOSIGNAL\fP is set.
|
||||||
.IP CURLOPT_IPRESOLVE
|
.IP CURLOPT_IPRESOLVE
|
||||||
Allows an application to select what kind of IP addresses to use when
|
Allows an application to select what kind of IP addresses to use when
|
||||||
resolving host names. This is only interesting when using host names that
|
resolving host names. This is only interesting when using host names that
|
||||||
@@ -995,6 +1111,14 @@ Resolve to ipv4 addresses.
|
|||||||
.IP CURL_IPRESOLVE_V6
|
.IP CURL_IPRESOLVE_V6
|
||||||
Resolve to ipv6 addresses.
|
Resolve to ipv6 addresses.
|
||||||
.RE
|
.RE
|
||||||
|
.SH 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
|
||||||
@@ -1019,9 +1143,9 @@ changed with \fICURLOPT_SSLKEYTYPE\fP.
|
|||||||
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
|
||||||
the format of your private key. Supported formats are "PEM", "DER" and "ENG".
|
the format of your private key. Supported formats are "PEM", "DER" and "ENG".
|
||||||
|
|
||||||
\fBNOTE:\fP The format "ENG" enables you to load the private key from a crypto
|
The format "ENG" enables you to load the private key from a crypto engine. In
|
||||||
engine. In this case \fICURLOPT_SSLKEY\fP is used as an identifier passed to
|
this case \fICURLOPT_SSLKEY\fP is used as an identifier passed to the
|
||||||
the engine. You have to set the crypto engine with \fICURLOPT_SSLENGINE\fP.
|
engine. You have to set the crypto engine with \fICURLOPT_SSLENGINE\fP.
|
||||||
\&"DER" format key file currently does not work because of a bug in OpenSSL.
|
\&"DER" format key file currently does not work because of a bug in OpenSSL.
|
||||||
.IP CURLOPT_SSLKEYPASSWD
|
.IP CURLOPT_SSLKEYPASSWD
|
||||||
Pass a pointer to a zero terminated string as parameter. It will be used as
|
Pass a pointer to a zero terminated string as parameter. It will be used as
|
||||||
@@ -1031,14 +1155,14 @@ Pass a pointer to a zero terminated string as parameter. It will be used as
|
|||||||
the identifier for the crypto engine you want to use for your private
|
the identifier for the crypto engine you want to use for your private
|
||||||
key.
|
key.
|
||||||
|
|
||||||
\fBNOTE:\fP If the crypto device cannot be loaded,
|
If the crypto device cannot be loaded, \fICURLE_SSL_ENGINE_NOTFOUND\fP is
|
||||||
\fICURLE_SSL_ENGINE_NOTFOUND\fP is returned.
|
returned.
|
||||||
.IP CURLOPT_SSLENGINE_DEFAULT
|
.IP CURLOPT_SSLENGINE_DEFAULT
|
||||||
Sets the actual crypto engine as the default for (asymmetric) crypto
|
Sets the actual crypto engine as the default for (asymmetric) crypto
|
||||||
operations.
|
operations.
|
||||||
|
|
||||||
\fBNOTE:\fP If the crypto device cannot be set,
|
If the crypto device cannot be set, \fICURLE_SSL_ENGINE_SETFAILED\fP is
|
||||||
\fICURLE_SSL_ENGINE_SETFAILED\fP is returned.
|
returned.
|
||||||
.IP CURLOPT_SSLVERSION
|
.IP CURLOPT_SSLVERSION
|
||||||
Pass a long as parameter to control what version of SSL/TLS to attempt to use.
|
Pass a long as parameter to control what version of SSL/TLS to attempt to use.
|
||||||
The available options are:
|
The available options are:
|
||||||
@@ -1085,6 +1209,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
|
||||||
@@ -1104,26 +1231,25 @@ socket. It will be used to seed the random engine for SSL.
|
|||||||
.IP CURLOPT_SSL_VERIFYHOST
|
.IP CURLOPT_SSL_VERIFYHOST
|
||||||
Pass a long as parameter.
|
Pass a long as parameter.
|
||||||
|
|
||||||
This option determines whether curl verifies that the server claims to be
|
This option determines whether libcurl verifies that the server cert is for
|
||||||
who you want it to be.
|
the server it is known as.
|
||||||
|
|
||||||
When negotiating an SSL connection, the server sends a certificate
|
When negotiating an SSL connection, the server sends a certificate indicating
|
||||||
indicating its identity.
|
its identity.
|
||||||
|
|
||||||
When \fICURLOPT_SSL_VERIFYHOST\fP is 2, that certificate must indicate
|
When \fICURLOPT_SSL_VERIFYHOST\fP is 2, that certificate must indicate that
|
||||||
that the server is the server to which you meant to connect, or the
|
the server is the server to which you meant to connect, or the connection
|
||||||
connection fails.
|
fails.
|
||||||
|
|
||||||
Curl considers the server the intended one when the Common Name field
|
Curl considers the server the intended one when the Common Name field or a
|
||||||
or a Subject Alternate Name field in the certificate matches the host
|
Subject Alternate Name field in the certificate matches the host name in the
|
||||||
name in the URL to which you told Curl to connect.
|
URL to which you told Curl to connect.
|
||||||
|
|
||||||
When the value is 1, the certificate must contain a Common Name field,
|
When the value is 1, the certificate must contain a Common Name field, but it
|
||||||
but it doesn't matter what name it says. (This is not ordinarily a
|
doesn't matter what name it says. (This is not ordinarily a useful setting).
|
||||||
useful setting).
|
|
||||||
|
|
||||||
When the value is 0, the connection succeeds regardless of the names in
|
When the value is 0, the connection succeeds regardless of the names in the
|
||||||
the certificate.
|
certificate.
|
||||||
|
|
||||||
The default, since 7.10, is 2.
|
The default, since 7.10, is 2.
|
||||||
|
|
||||||
|
@@ -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,7 +22,10 @@ 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"
|
||||||
.BR curl_unescape(3), curl_free(3), RFC 2396
|
.BR curl_unescape "(3), " curl_free "(3), " RFC 2396
|
||||||
|
@@ -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
|
||||||
libcurl sessions that'll be used) by every application that uses libcurl.
|
of it 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
|
||||||
it will be done automatically by libcurl.
|
all 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
|
||||||
as that cannot be called automatically for you by libcurl.
|
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 \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) "
|
||||||
|
@@ -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) "
|
||||||
|
@@ -36,9 +36,9 @@ NOTE that this only returns errors etc regarding the whole multi stack. There
|
|||||||
might still have occurred problems on individual transfers even when this
|
might still have occurred problems on individual transfers even when this
|
||||||
function returns OK.
|
function returns OK.
|
||||||
.SH "TYPICAL USAGE"
|
.SH "TYPICAL USAGE"
|
||||||
Most application will use \fIcurl_multi_fdset(3)\fP to get the multi_handle's
|
Most applications will use \fIcurl_multi_fdset(3)\fP to get the multi_handle's
|
||||||
file descriptors, then it'll wait for action on them using select() and as
|
file descriptors, then it'll wait for action on them using \fBselect(3)\fP and
|
||||||
soon as one or more of them are ready, \fIcurl_multi_perform(3)\fP gets
|
as soon as one or more of them are ready, \fIcurl_multi_perform(3)\fP gets
|
||||||
called.
|
called.
|
||||||
.SH "SEE ALSO"
|
.SH "SEE ALSO"
|
||||||
.BR curl_multi_cleanup "(3), " curl_multi_init "(3), "
|
.BR curl_multi_cleanup "(3), " curl_multi_init "(3), "
|
||||||
|
42
docs/libcurl/curl_multi_setopt.3
Normal file
42
docs/libcurl/curl_multi_setopt.3
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
.\" $Id$
|
||||||
|
.\"
|
||||||
|
.TH curl_multi_setopt 3 "8 Jan 2006" "libcurl 7.16.0" "libcurl Manual"
|
||||||
|
.SH NAME
|
||||||
|
curl_multi_setopt \- set options for a curl multi handle
|
||||||
|
.SH SYNOPSIS
|
||||||
|
#include <curl/curl.h>
|
||||||
|
|
||||||
|
CURLMcode curl_multi_setopt(CURLM * multi_handle, CURLMoption option, param);
|
||||||
|
.SH DESCRIPTION
|
||||||
|
curl_multi_setopt() is used to tell a libcurl multi handle how to behave. By
|
||||||
|
using the appropriate options to \fIcurl_multi_setopt\fP, you can change
|
||||||
|
libcurl's behaviour when using that multi handle. All options are set with
|
||||||
|
the \fIoption\fP followed by the parameter \fIparam\fP. That parameter can be
|
||||||
|
a \fBlong\fP, a \fBfunction pointer\fP, an \fBobject pointer\fP or a
|
||||||
|
\fBcurl_off_t\fP type, depending on what the specific option expects. Read
|
||||||
|
this manual carefully as bad input values may cause libcurl to behave badly!
|
||||||
|
You can only set one option in each function call.
|
||||||
|
|
||||||
|
.SH OPTIONS
|
||||||
|
.IP CURLMOPT_SOCKETFUNCTION
|
||||||
|
Pass a pointer to a function matching the curl_socket_callback prototype. The
|
||||||
|
\fIcurl_multi_socket(3)\fP functions inform the application about updates in
|
||||||
|
the socket (file descriptor) status by doing none, one or multiple calls to
|
||||||
|
the curl_socket_callback given in the \fBparam\fP argument. They update the
|
||||||
|
status with changes since the previous time a \fIcurl_multi_socket(3)\fP
|
||||||
|
function was called. If the given callback pointer is NULL, no callback will
|
||||||
|
be called. Set the callback's fourth argument with \fICURLMOPT_SOCKETDATA\fP.
|
||||||
|
See \fIcurl_multi_socket(3)\fP for more callback details.
|
||||||
|
.IP CURLMOPT_SOCKETDATA
|
||||||
|
Pass a pointer to whatever you want passed to the curl_socket_callback's forth
|
||||||
|
argument, the userp pointer. This is not used by libcurl but only passed-thru
|
||||||
|
as-is. Set the callback pointer with \fICURLMOPT_SOCKETFUNCTION\fP.
|
||||||
|
.SH RETURNS
|
||||||
|
The standard CURLMcode for multi interface error codes. Note that it returns a
|
||||||
|
CURLM_UNKNOWN_OPTION if you try setting an option that this version of libcurl
|
||||||
|
doesn't know of.
|
||||||
|
.SH AVAILABILITY
|
||||||
|
This function was added in libcurl 7.16.0
|
||||||
|
.SH "SEE ALSO"
|
||||||
|
.BR curl_multi_cleanup "(3), " curl_multi_init "(3), "
|
||||||
|
.BR curl_multi_socket "(3), " curl_multi_info_read "(3)"
|
96
docs/libcurl/curl_multi_socket.3
Normal file
96
docs/libcurl/curl_multi_socket.3
Normal file
@@ -0,0 +1,96 @@
|
|||||||
|
.\" $Id$
|
||||||
|
.\"
|
||||||
|
.TH curl_multi_socket 3 "21 Dec 2005" "libcurl 7.16.0" "libcurl Manual"
|
||||||
|
.SH NAME
|
||||||
|
curl_multi_socket \- reads/writes available data
|
||||||
|
.SH SYNOPSIS
|
||||||
|
#include <curl/curl.h>
|
||||||
|
|
||||||
|
CURLMcode curl_multi_socket(CURLM * multi_handle, curl_socket_t sockfd);
|
||||||
|
|
||||||
|
CURLMcode curl_multi_socket_all(CURLM *multi_handle);
|
||||||
|
.SH DESCRIPTION
|
||||||
|
Alternative versions of \fIcurl_multi_perform()\fP that allows the application
|
||||||
|
to pass in one of the file descriptors/sockets that have been detected to have
|
||||||
|
\&"action" on them and let libcurl perform. This allows libcurl to not have to
|
||||||
|
scan through all possible file descriptors to check for action. When the
|
||||||
|
application has detected action on a socket handled by libcurl, it should call
|
||||||
|
\fIcurl_multi_perform()\fP with the \fBsockfd\fP argument set to the socket
|
||||||
|
with the action.
|
||||||
|
|
||||||
|
These functions inform the application about updates in the socket (file
|
||||||
|
descriptor) status by doing none, one or multiple calls to the
|
||||||
|
curl_socket_callback given with the CURLMOPT_SOCKETFUNCTION option to
|
||||||
|
\fIcurl_multi_setopt(3)\fP. They update the status with changes since the
|
||||||
|
previous time this function was called.
|
||||||
|
|
||||||
|
If you want to force libcurl to (re-)check all its internal sockets and
|
||||||
|
transfers instead of just a single one, you call
|
||||||
|
\fBcurl_multi_socket_all(3)\fP instead.
|
||||||
|
|
||||||
|
An application should call \fBcurl_multi_timeout(3)\fP to figure out how long
|
||||||
|
it should wait for socket actions \- at most \- before doing the timeout
|
||||||
|
action: call the \fBcurl_multi_socket(3)\fP function with the \fBsockfd\fP
|
||||||
|
argument set to CURL_SOCKET_TIMEOUT.
|
||||||
|
|
||||||
|
The socket \fBcallback\fP function uses a prototype like this
|
||||||
|
.nf
|
||||||
|
|
||||||
|
int curl_socket_callback(CURL *easy, /* easy handle */
|
||||||
|
curl_socket_t s, /* socket */
|
||||||
|
int action, /* see values below */
|
||||||
|
void *userp); /* "private" pointer */
|
||||||
|
|
||||||
|
.fi
|
||||||
|
The callback MUST return 0.
|
||||||
|
|
||||||
|
The \fIaction\fP (third) argument to the callback has one of five values:
|
||||||
|
.RS
|
||||||
|
.IP "CURL_POLL_NONE (0)"
|
||||||
|
register, not interested in readiness (yet)
|
||||||
|
.IP "CURL_POLL_IN (1)"
|
||||||
|
register, interested in read readiness
|
||||||
|
.IP "CURL_POLL_OUT (2)"
|
||||||
|
register, interested in write readiness
|
||||||
|
.IP "CURL_POLL_INOUT (3)"
|
||||||
|
register, interested in both read and write readiness
|
||||||
|
.IP "CURL_POLL_REMOVE (4)"
|
||||||
|
deregister
|
||||||
|
.RE
|
||||||
|
.SH "RETURN VALUE"
|
||||||
|
CURLMcode type, general libcurl multi interface error code.
|
||||||
|
|
||||||
|
If you receive \fICURLM_CALL_MULTI_PERFORM\fP, this basically means that you
|
||||||
|
should call \fIcurl_multi_perform\fP again, before you wait for more actions
|
||||||
|
on libcurl's sockets. You don't have to do it immediately, but the return code
|
||||||
|
means that libcurl may have more data available to return or that there may be
|
||||||
|
more data to send off before it is "satisfied".
|
||||||
|
|
||||||
|
NOTE that this only returns errors etc regarding the whole multi stack. There
|
||||||
|
might still have occurred problems on individual transfers even when this
|
||||||
|
function returns OK.
|
||||||
|
.SH "TYPICAL USAGE"
|
||||||
|
1. Create a multi handle
|
||||||
|
|
||||||
|
2. Set the socket callback with CURLMOPT_SOCKETFUNCTION
|
||||||
|
|
||||||
|
3. Add easy handles
|
||||||
|
|
||||||
|
4. Call curl_multi_socket_all() first once
|
||||||
|
|
||||||
|
5. Setup a "collection" of sockets to supervise when your socket
|
||||||
|
callback is called.
|
||||||
|
|
||||||
|
6. Use curl_multi_timeout() to figure out how long to wait for action
|
||||||
|
|
||||||
|
7. Wait for action on any of libcurl's sockets
|
||||||
|
|
||||||
|
8, When action happens, call curl_multi_socket() for the socket(s) that got
|
||||||
|
action.
|
||||||
|
|
||||||
|
9. Go back to step 6.
|
||||||
|
.SH AVAILABILITY
|
||||||
|
This function was added in libcurl 7.16.0
|
||||||
|
.SH "SEE ALSO"
|
||||||
|
.BR curl_multi_cleanup "(3), " curl_multi_init "(3), "
|
||||||
|
.BR curl_multi_fdset "(3), " curl_multi_info_read "(3)"
|
1
docs/libcurl/curl_multi_socket_all.3
Normal file
1
docs/libcurl/curl_multi_socket_all.3
Normal file
@@ -0,0 +1 @@
|
|||||||
|
.so man3/curl_multi_socket.3
|
@@ -12,7 +12,7 @@ curl_multi_strerror - return string describing error code
|
|||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
||||||
The curl_multi_strerror() function returns a string describing the CURLMcode
|
The curl_multi_strerror() function returns a string describing the CURLMcode
|
||||||
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.
|
||||||
|
38
docs/libcurl/curl_multi_timeout.3
Normal file
38
docs/libcurl/curl_multi_timeout.3
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
.\" $Id$
|
||||||
|
.\"
|
||||||
|
.TH curl_multi_timeout 3 "2 Jan 2006" "libcurl 7.16.0" "libcurl Manual"
|
||||||
|
.SH NAME
|
||||||
|
curl_multi_timeout \- how long to wait for action before proceeding
|
||||||
|
.SH SYNOPSIS
|
||||||
|
#include <curl/curl.h>
|
||||||
|
|
||||||
|
CURLMcode curl_multi_timeout(CURLM *multi_handle, long *timeout);
|
||||||
|
.SH DESCRIPTION
|
||||||
|
|
||||||
|
An application using the libcurl multi interface should call
|
||||||
|
\fBcurl_multi_timeout(3)\fP to figure out how long it should wait for socket
|
||||||
|
actions \- at most \- before proceeding.
|
||||||
|
|
||||||
|
Proceeding means either doing the socket-style timeout action: call the
|
||||||
|
\fBcurl_multi_socket(3)\fP function with the \fBsockfd\fP argument set to
|
||||||
|
CURL_SOCKET_TIMEOUT and the \fBeasy\fP argument set to CURL_EASY_TIMEOUT, or
|
||||||
|
simply calling \fBcurl_multi_perform(3)\fP if you're using the simpler and
|
||||||
|
older multi interface approach.
|
||||||
|
|
||||||
|
The timeout value returned in the long \fBtimeout\fP points to, is in number
|
||||||
|
of milliseconds at this very moment. If 0, it means you should proceed
|
||||||
|
immediately without waiting for anything. If it returns -1, there's no timeout
|
||||||
|
at all set.
|
||||||
|
.SH "RETURN VALUE"
|
||||||
|
The standard CURLMcode for multi interface error codes.
|
||||||
|
.SH "TYPICAL USAGE"
|
||||||
|
Call \fBcurl_multi_timeout(3)\fP, then wait for action on the sockets. You
|
||||||
|
figure out which sockets to wait for by calling \fBcurl_multi_fdset(3)\fP or
|
||||||
|
by a previous call to \fBcurl_multi_socket(3)\fP.
|
||||||
|
.SH AVAILABILITY
|
||||||
|
This function was added in libcurl 7.16.0
|
||||||
|
.SH "SEE ALSO"
|
||||||
|
.BR curl_multi_cleanup "(3), " curl_multi_init "(3), "
|
||||||
|
.BR curl_multi_fdset "(3), " curl_multi_info_read "(3), "
|
||||||
|
.BR curl_multi_socket "(3) "
|
||||||
|
|
@@ -12,7 +12,7 @@ curl_share_strerror - return string describing error code
|
|||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
||||||
The curl_share_strerror() function returns a string describing the CURLSHcode
|
The curl_share_strerror() function returns a string describing the CURLSHcode
|
||||||
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.
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user