Compare commits
3490 Commits
curl-6_5_1
...
pre-ares
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1e7e53c87e | ||
|
|
b9fdf3cc3b | ||
|
|
c462601362 | ||
|
|
859877dcfc | ||
|
|
c04ce95106 | ||
|
|
98ee12bc35 | ||
|
|
fdda786fa2 | ||
|
|
831be4f4dd | ||
|
|
41ae97e710 | ||
|
|
f72ba7f79d | ||
|
|
296046510b | ||
|
|
db9f87f697 | ||
|
|
3270ea55dd | ||
|
|
a358ac24f4 | ||
|
|
8bedd43b28 | ||
|
|
9ea2087ede | ||
|
|
9f7c634133 | ||
|
|
da20d68a12 | ||
|
|
d3e512c738 | ||
|
|
339f84fe1f | ||
|
|
2d41b735ec | ||
|
|
e3b4dd08ff | ||
|
|
6809a906bb | ||
|
|
1c35cbcc07 | ||
|
|
5f8989a436 | ||
|
|
aa7b0648ff | ||
|
|
2fbe61960f | ||
|
|
bdb5e5a250 | ||
|
|
48a580e609 | ||
|
|
1361fc69b9 | ||
|
|
93352e56d8 | ||
|
|
d9246ff24d | ||
|
|
9301bc3444 | ||
|
|
76352c4e2d | ||
|
|
428f41bd12 | ||
|
|
99c32e460f | ||
|
|
83f249cf65 | ||
|
|
2c2baa93ea | ||
|
|
f0278ca114 | ||
|
|
297b1b5013 | ||
|
|
e9f63bf4e8 | ||
|
|
556ce1c6a1 | ||
|
|
cc4ff62681 | ||
|
|
0423fd9b55 | ||
|
|
789ab20bf7 | ||
|
|
b47462bd68 | ||
|
|
1a94fee42d | ||
|
|
a91ce6a5d6 | ||
|
|
981ffd9fce | ||
|
|
e76c960624 | ||
|
|
416c92cc6f | ||
|
|
fb731eb3e7 | ||
|
|
6f2a4d290f | ||
|
|
cefc8ba938 | ||
|
|
d0bd644eef | ||
|
|
071c95128e | ||
|
|
1a192c489b | ||
|
|
56014e74a0 | ||
|
|
172271498d | ||
|
|
f2882cb88c | ||
|
|
152f1fee40 | ||
|
|
968234e6ae | ||
|
|
5e133e2dff | ||
|
|
0049c09fc3 | ||
|
|
a2a63c27f4 | ||
|
|
c50a601f1a | ||
|
|
bc0fd6db71 | ||
|
|
52b631fade | ||
|
|
2f0bc9d1f7 | ||
|
|
5ef6520d4e | ||
|
|
2c1925161e | ||
|
|
0529b349d5 | ||
|
|
b4620364a2 | ||
|
|
634aef3895 | ||
|
|
06c86d1a8c | ||
|
|
79749f8eb4 | ||
|
|
b036986b3e | ||
|
|
938f1d1da7 | ||
|
|
58b6b3df06 | ||
|
|
f9c3347f7c | ||
|
|
5b72eb0b03 | ||
|
|
6dd4c13bc0 | ||
|
|
e4e7db551f | ||
|
|
ebfde8da56 | ||
|
|
756bc0f4b7 | ||
|
|
269d491b6a | ||
|
|
449e5bc2ad | ||
|
|
8736c11d84 | ||
|
|
45fc760985 | ||
|
|
7968e3c2de | ||
|
|
964a41c75c | ||
|
|
5931d53637 | ||
|
|
3ed3ae5bcf | ||
|
|
6519cc70c5 | ||
|
|
505a4f27fa | ||
|
|
79144eba99 | ||
|
|
26e17d89c9 | ||
|
|
4322c1106f | ||
|
|
73071dfd4f | ||
|
|
b7c14b3c27 | ||
|
|
3130b44535 | ||
|
|
a2bd73334f | ||
|
|
1a393f5625 | ||
|
|
d4951e837e | ||
|
|
26f6365e93 | ||
|
|
3a552b1e63 | ||
|
|
69eb1790da | ||
|
|
a1af6f3614 | ||
|
|
3aced61465 | ||
|
|
6f02ddfce8 | ||
|
|
c2faa39b62 | ||
|
|
2d3734b8b5 | ||
|
|
ed908b7f89 | ||
|
|
f7d795a364 | ||
|
|
8919b39d54 | ||
|
|
84cedc094e | ||
|
|
3b2b2496d7 | ||
|
|
445684c409 | ||
|
|
898e067ccc | ||
|
|
12859e345f | ||
|
|
89f4af695e | ||
|
|
308bc9d919 | ||
|
|
db566c54ae | ||
|
|
81d403e207 | ||
|
|
2bd71d70ff | ||
|
|
1eef6f44ba | ||
|
|
204f03912f | ||
|
|
f8c3b3aa18 | ||
|
|
d4df981463 | ||
|
|
497c6d516d | ||
|
|
8288862b7e | ||
|
|
9aae16c236 | ||
|
|
80c194a70a | ||
|
|
c832b2db5b | ||
|
|
27018882ec | ||
|
|
caf6e9c540 | ||
|
|
e727fb82f2 | ||
|
|
c78df56801 | ||
|
|
d13202f43b | ||
|
|
9d139a6b35 | ||
|
|
d2abe44e6f | ||
|
|
bc67228576 | ||
|
|
ecf32c964a | ||
|
|
e58f30b82a | ||
|
|
654e3f1101 | ||
|
|
86689dc524 | ||
|
|
5f62a0c1ca | ||
|
|
ad1bf0f389 | ||
|
|
9c7703ace1 | ||
|
|
4a8155b53c | ||
|
|
80d6d5c5c4 | ||
|
|
c624be8388 | ||
|
|
09df1cd41e | ||
|
|
52c5b57200 | ||
|
|
5ea04a852e | ||
|
|
a2eef05198 | ||
|
|
55f75af353 | ||
|
|
fb6a51b8fd | ||
|
|
252cc2213e | ||
|
|
73c5f24fa4 | ||
|
|
4c80e103a0 | ||
|
|
39ea557360 | ||
|
|
d0cc92a01a | ||
|
|
d7980c1a45 | ||
|
|
e56ae1426c | ||
|
|
696843c020 | ||
|
|
6ff5621dd7 | ||
|
|
e7fb72a732 | ||
|
|
8d30d34e0c | ||
|
|
bc7fe85f8a | ||
|
|
89352d92c5 | ||
|
|
c32390d84c | ||
|
|
45ca866a2d | ||
|
|
ceef206c21 | ||
|
|
7c6424f0a9 | ||
|
|
bc942de6f1 | ||
|
|
06984df5cb | ||
|
|
4f136a3a76 | ||
|
|
363bf3ba30 | ||
|
|
acb895956a | ||
|
|
21e87b9bb3 | ||
|
|
c896ebcf12 | ||
|
|
d288222e80 | ||
|
|
4eb2a6c9a3 | ||
|
|
2563731c4d | ||
|
|
4e410111db | ||
|
|
5670563a26 | ||
|
|
6caa656d01 | ||
|
|
c12af7aed1 | ||
|
|
dcb6d1c01d | ||
|
|
18234cbdac | ||
|
|
06bf988dc1 | ||
|
|
55ff4c3f08 | ||
|
|
4915002168 | ||
|
|
5bd8d60e41 | ||
|
|
fc872808c5 | ||
|
|
0f4feda382 | ||
|
|
90b0f38316 | ||
|
|
18f630ab21 | ||
|
|
e97fd44151 | ||
|
|
b75679778f | ||
|
|
35a84ad576 | ||
|
|
4ed28be75a | ||
|
|
e2f4656a86 | ||
|
|
1e14da5c60 | ||
|
|
b2ef79ef3d | ||
|
|
f488874ff5 | ||
|
|
23258648da | ||
|
|
6b84ebe501 | ||
|
|
07dd067f73 | ||
|
|
420744d048 | ||
|
|
01108e3a63 | ||
|
|
8026b1e194 | ||
|
|
a39d77227f | ||
|
|
9f69deec7d | ||
|
|
e912f772e0 | ||
|
|
0102726aeb | ||
|
|
1e7aa04040 | ||
|
|
00a7c6fe6b | ||
|
|
87f8c0d471 | ||
|
|
334d78cd18 | ||
|
|
2356325592 | ||
|
|
d78ec593fa | ||
|
|
d5043133e6 | ||
|
|
509f69a457 | ||
|
|
662c659220 | ||
|
|
9a6566e774 | ||
|
|
4da0428d9e | ||
|
|
8ee1177206 | ||
|
|
e9154b2549 | ||
|
|
d398a0dd58 | ||
|
|
7723a24297 | ||
|
|
95a4b8db68 | ||
|
|
663c1898a3 | ||
|
|
465de793e8 | ||
|
|
de9b76cef0 | ||
|
|
1747a8d3d9 | ||
|
|
1094e79749 | ||
|
|
22569681bc | ||
|
|
e615d117a0 | ||
|
|
a51258b6bb | ||
|
|
8894bd07b6 | ||
|
|
ec45a9e825 | ||
|
|
871358a6e5 | ||
|
|
2e2e0fba60 | ||
|
|
4a5139e3f4 | ||
|
|
8f85933d7c | ||
|
|
246f3a63f6 | ||
|
|
e99eff4eb0 | ||
|
|
c0197f19cf | ||
|
|
3994d67eea | ||
|
|
9ead79c9d4 | ||
|
|
9371aed46c | ||
|
|
940707ad66 | ||
|
|
e6c267fb4c | ||
|
|
93538fccd6 | ||
|
|
83a7fad308 | ||
|
|
3c7e33388e | ||
|
|
7b0f35edb6 | ||
|
|
94a157d0b0 | ||
|
|
ca04620253 | ||
|
|
073ef0b36a | ||
|
|
c41c05d4f4 | ||
|
|
f1ea54e07a | ||
|
|
a139ce901a | ||
|
|
7431957113 | ||
|
|
1752d80915 | ||
|
|
aa7420e109 | ||
|
|
a290d4b9db | ||
|
|
19a4314e7f | ||
|
|
d166e85e0a | ||
|
|
f213e857ab | ||
|
|
eb6130baa7 | ||
|
|
f69ea2c68a | ||
|
|
078441d477 | ||
|
|
95f6b15a67 | ||
|
|
ee29dbdb8f | ||
|
|
15f3f4c93f | ||
|
|
6932e94e0e | ||
|
|
3ef06d7efe | ||
|
|
fb012b48e9 | ||
|
|
bc77bf217f | ||
|
|
37d1e9351e | ||
|
|
4494c0dee0 | ||
|
|
26afc604ac | ||
|
|
9aefcada19 | ||
|
|
69fc363760 | ||
|
|
bea02ddebe | ||
|
|
3fb257c39c | ||
|
|
7c96c5a39b | ||
|
|
efd836d971 | ||
|
|
836aaa1647 | ||
|
|
bf2b3dbf3e | ||
|
|
b4fa2ff995 | ||
|
|
2f9cabc30b | ||
|
|
63593f5597 | ||
|
|
c0acaa5d2c | ||
|
|
2e46f8d0a6 | ||
|
|
51da6aaa07 | ||
|
|
c8b79e36db | ||
|
|
208374bcc9 | ||
|
|
7f0a6e7203 | ||
|
|
54ebb9cfd4 | ||
|
|
49e9c1495b | ||
|
|
a84b0fbd52 | ||
|
|
c95814c04d | ||
|
|
9f8123f1b8 | ||
|
|
8b23db4f4d | ||
|
|
d77cc13374 | ||
|
|
9a12db1aa2 | ||
|
|
eb54d34bec | ||
|
|
4b1203d4c9 | ||
|
|
183a9c6244 | ||
|
|
1f2294d585 | ||
|
|
0b839c4f77 | ||
|
|
1d4fd1fcae | ||
|
|
b1d8d72c16 | ||
|
|
bafb68b844 | ||
|
|
21873b52e9 | ||
|
|
0aa8b82871 | ||
|
|
f9781afafd | ||
|
|
fece361a55 | ||
|
|
7b51b2f128 | ||
|
|
22d88fb28e | ||
|
|
f7c5b28e76 | ||
|
|
5760f2a307 | ||
|
|
ee46efb5a5 | ||
|
|
eb6ffebfc7 | ||
|
|
c06c44f286 | ||
|
|
019c4088cf | ||
|
|
0b0a88b78d | ||
|
|
028e9cc56f | ||
|
|
e0d8615ece | ||
|
|
c8ecbda40b | ||
|
|
2324c10d43 | ||
|
|
89cfa76291 | ||
|
|
072070a22c | ||
|
|
3c3ad134ea | ||
|
|
a4ffcfd4d5 | ||
|
|
136670c58a | ||
|
|
28169725fa | ||
|
|
5b13106f54 | ||
|
|
1a2db0dfb1 | ||
|
|
696f95bb0a | ||
|
|
acec588fe3 | ||
|
|
6ed0da8e98 | ||
|
|
7fd91d70bd | ||
|
|
61788a0389 | ||
|
|
0821447b5b | ||
|
|
3cba274ba6 | ||
|
|
df7bbcfd21 | ||
|
|
021d406f0c | ||
|
|
294569c502 | ||
|
|
bfd00ac2ed | ||
|
|
735a4714f4 | ||
|
|
827fd47198 | ||
|
|
e26b917661 | ||
|
|
92872a2a3c | ||
|
|
16ddb09cb4 | ||
|
|
d37031f14e | ||
|
|
b4e84ca7d2 | ||
|
|
47970b9e6f | ||
|
|
f65f120d50 | ||
|
|
df00ec3c82 | ||
|
|
ad6fca28f9 | ||
|
|
fd33923496 | ||
|
|
a55649dc82 | ||
|
|
9558f229db | ||
|
|
7917bfb1c9 | ||
|
|
25f611ca42 | ||
|
|
e6eb49e7e0 | ||
|
|
9a075f53dc | ||
|
|
4b3f800c03 | ||
|
|
82bc76b243 | ||
|
|
18b9b04907 | ||
|
|
87f1f08b36 | ||
|
|
7d7ebbe9f7 | ||
|
|
5111ce782f | ||
|
|
20b0e563ce | ||
|
|
8b6cf239a3 | ||
|
|
bcc285cffd | ||
|
|
d5ba030942 | ||
|
|
803f43592a | ||
|
|
904b9ccaa3 | ||
|
|
89721ff04a | ||
|
|
6164823921 | ||
|
|
f8b3c47f99 | ||
|
|
56dd2da962 | ||
|
|
68bb74d172 | ||
|
|
bf5e12c8e0 | ||
|
|
de11f5e53a | ||
|
|
b125e8e23a | ||
|
|
b28b616eb2 | ||
|
|
4534ca238d | ||
|
|
cee0e94294 | ||
|
|
8319ea7078 | ||
|
|
5334a58f9b | ||
|
|
2616bdc4cd | ||
|
|
c149b3f797 | ||
|
|
d349eb3d43 | ||
|
|
9b43ade1c0 | ||
|
|
ad05d0a8d9 | ||
|
|
e6bfbe9683 | ||
|
|
c871efca4b | ||
|
|
12c72b419c | ||
|
|
a15b7691ca | ||
|
|
01618d323b | ||
|
|
bb6d0e37e3 | ||
|
|
24a6100897 | ||
|
|
0251563c98 | ||
|
|
72673a351b | ||
|
|
96b7131844 | ||
|
|
dcc2f16416 | ||
|
|
c2b8a04000 | ||
|
|
d65587b06c | ||
|
|
1ab0134522 | ||
|
|
afffce80f0 | ||
|
|
70b80b0160 | ||
|
|
64067a04b5 | ||
|
|
38cf0268c0 | ||
|
|
2d2034703f | ||
|
|
571ceeff90 | ||
|
|
34c4ba4321 | ||
|
|
babb372eb9 | ||
|
|
5b9b82c1cd | ||
|
|
075c534270 | ||
|
|
f317f8b149 | ||
|
|
f8d552dde5 | ||
|
|
606f72bb13 | ||
|
|
327e6a2b4f | ||
|
|
be8f6c7f5c | ||
|
|
073448e0ea | ||
|
|
f136f435b5 | ||
|
|
ebea6b487b | ||
|
|
e5b7dc56e6 | ||
|
|
c2d8025a0a | ||
|
|
853e240e1d | ||
|
|
8755a6d1ac | ||
|
|
9f723061cb | ||
|
|
652683fc04 | ||
|
|
83a463891d | ||
|
|
957b618fdc | ||
|
|
ebe5191b63 | ||
|
|
c426234df7 | ||
|
|
8c3a10392e | ||
|
|
d0e44946e9 | ||
|
|
46a593d968 | ||
|
|
eb0cc34951 | ||
|
|
1c7dfda4bc | ||
|
|
3c0e4a2fa1 | ||
|
|
c753072ae1 | ||
|
|
243942a7aa | ||
|
|
8d5ac8b43c | ||
|
|
17962b3d2e | ||
|
|
f70acd5979 | ||
|
|
ffe5c46224 | ||
|
|
3242ea5f66 | ||
|
|
39a282bffc | ||
|
|
29583004ce | ||
|
|
0a1a185874 | ||
|
|
8f809e2a93 | ||
|
|
f216059b49 | ||
|
|
9121b1f41d | ||
|
|
60e015d0c1 | ||
|
|
7e049fca61 | ||
|
|
0f0e4de6a4 | ||
|
|
bc1102922b | ||
|
|
a3d3642a30 | ||
|
|
248eb47329 | ||
|
|
52ebf50607 | ||
|
|
d34a4b126e | ||
|
|
de96719a45 | ||
|
|
9876ed09fe | ||
|
|
17cbbe3dc5 | ||
|
|
b995af17eb | ||
|
|
6589579850 | ||
|
|
5ddc260fc2 | ||
|
|
db5c9cd4c0 | ||
|
|
9b6d010aef | ||
|
|
065b87e949 | ||
|
|
a6206a3aef | ||
|
|
30639ed72b | ||
|
|
9d02a39e13 | ||
|
|
fc0af0d4d1 | ||
|
|
a683416081 | ||
|
|
9faf57ee8d | ||
|
|
44b9ccb7e2 | ||
|
|
de003d9cf8 | ||
|
|
8a2a523c70 | ||
|
|
c3dfe50aaf | ||
|
|
9659d862c7 | ||
|
|
69ab4cd391 | ||
|
|
498f3985b3 | ||
|
|
977175d4fd | ||
|
|
3ddc7b9390 | ||
|
|
10e9bf623f | ||
|
|
48a5c64e94 | ||
|
|
140606ccd5 | ||
|
|
f56d006f93 | ||
|
|
beb13a1d3e | ||
|
|
fa47138327 | ||
|
|
9421d4510a | ||
|
|
ff8abfca85 | ||
|
|
5c858965b8 | ||
|
|
e3f83cb17a | ||
|
|
de6008e01a | ||
|
|
6417e696df | ||
|
|
5d28f3781b | ||
|
|
10026bb62e | ||
|
|
21c16f923c | ||
|
|
32cef52f0d | ||
|
|
e7dd7c54ff | ||
|
|
b0b50bd12a | ||
|
|
f2c6057490 | ||
|
|
169b2eeb94 | ||
|
|
f81d027f60 | ||
|
|
872eeb7339 | ||
|
|
7f67a28c2a | ||
|
|
30a46e1135 | ||
|
|
3a01478ce8 | ||
|
|
53d71fab60 | ||
|
|
be891f112c | ||
|
|
89934239d7 | ||
|
|
8986037fdd | ||
|
|
a7c72b7abf | ||
|
|
409ac80710 | ||
|
|
fc7bebdf55 | ||
|
|
ca52549557 | ||
|
|
8948a65654 | ||
|
|
b4e33cfcc7 | ||
|
|
86742e8334 | ||
|
|
173b35eaf8 | ||
|
|
2b054e5309 | ||
|
|
a302ff1605 | ||
|
|
f7bb4e6138 | ||
|
|
5c5489916b | ||
|
|
5627cf7167 | ||
|
|
c05dae4a68 | ||
|
|
57e61e3743 | ||
|
|
a6c395c156 | ||
|
|
543e0b1e0f | ||
|
|
64b0ff875f | ||
|
|
a034208a00 | ||
|
|
5f1251586b | ||
|
|
6f6cffdc32 | ||
|
|
21a98ef264 | ||
|
|
aa90436435 | ||
|
|
61225052f9 | ||
|
|
dee3163d95 | ||
|
|
8b0668b99e | ||
|
|
8471a82c85 | ||
|
|
ed4dff63b9 | ||
|
|
838e776542 | ||
|
|
39c12790bc | ||
|
|
126e6d6645 | ||
|
|
5796a1b282 | ||
|
|
90982529fc | ||
|
|
aba51d6b60 | ||
|
|
49bc4567bb | ||
|
|
2ac52705c6 | ||
|
|
d0eb56dd97 | ||
|
|
b9c60df04b | ||
|
|
8c236e4dfa | ||
|
|
154a59f21f | ||
|
|
9689e1c548 | ||
|
|
5a83976c99 | ||
|
|
b5276a9a69 | ||
|
|
30377baa5e | ||
|
|
aa8b7dd336 | ||
|
|
f26a338a54 | ||
|
|
c4383f1d99 | ||
|
|
4527995e66 | ||
|
|
b0fbb98f41 | ||
|
|
63667dfd96 | ||
|
|
77c388c928 | ||
|
|
a69b814ded | ||
|
|
c51ada766d | ||
|
|
ef2709f97c | ||
|
|
bf9b9ca29d | ||
|
|
64f224bb22 | ||
|
|
285a8fe4d0 | ||
|
|
3773d76dfd | ||
|
|
94c5c7bd6d | ||
|
|
12cfc4c0b0 | ||
|
|
9a2de6e6ee | ||
|
|
2ede47b8c8 | ||
|
|
76e107506f | ||
|
|
6f35ed51dc | ||
|
|
c94ba66310 | ||
|
|
a15133f5cf | ||
|
|
cc09e9d4c2 | ||
|
|
16e0da2c4b | ||
|
|
ed22f75241 | ||
|
|
ba25cad6e2 | ||
|
|
abb01123cb | ||
|
|
e2d249f8c5 | ||
|
|
4a2ac166fa | ||
|
|
5fab55383d | ||
|
|
f152f23a68 | ||
|
|
24e78b3571 | ||
|
|
9a239edb52 | ||
|
|
abcc5c5a82 | ||
|
|
cb5ba675a7 | ||
|
|
2288086695 | ||
|
|
61421b7a8f | ||
|
|
6a7e53a7c7 | ||
|
|
ca134d5522 | ||
|
|
ec24efda74 | ||
|
|
7f0f10e498 | ||
|
|
aa5af100b4 | ||
|
|
37ae32f688 | ||
|
|
d0cffdec5d | ||
|
|
0f34521612 | ||
|
|
e69362df22 | ||
|
|
3de8f6f38e | ||
|
|
5359bc8083 | ||
|
|
eb6a14fe10 | ||
|
|
2912537533 | ||
|
|
cfb32da198 | ||
|
|
9b4f92130f | ||
|
|
5a2ab686a6 | ||
|
|
3b8583b014 | ||
|
|
ed29552b1e | ||
|
|
a2ada3cf96 | ||
|
|
88825a1187 | ||
|
|
264e7fc58b | ||
|
|
1698015e3c | ||
|
|
39dc14c002 | ||
|
|
04c499a5fc | ||
|
|
efbe930a69 | ||
|
|
747f87f61e | ||
|
|
5a4c56fc44 | ||
|
|
81f45ba92a | ||
|
|
a5dc4e32f2 | ||
|
|
2b839853ec | ||
|
|
66b6cd68ed | ||
|
|
0ef3d90838 | ||
|
|
5cc50f9b27 | ||
|
|
e879e26a5b | ||
|
|
96d84150e1 | ||
|
|
2aa0c6c488 | ||
|
|
811138386f | ||
|
|
c433cf7459 | ||
|
|
e0d6ebc2f2 | ||
|
|
4938991ab8 | ||
|
|
13722f536e | ||
|
|
57f0e3292d | ||
|
|
da5ae565ab | ||
|
|
87c5066242 | ||
|
|
b528bde470 | ||
|
|
57572e550f | ||
|
|
3aea0d3d68 | ||
|
|
9ae920c1b6 | ||
|
|
dff406a360 | ||
|
|
d346ba5c3c | ||
|
|
978541adc2 | ||
|
|
637bce2707 | ||
|
|
07e3dc2ee2 | ||
|
|
ead065d803 | ||
|
|
0150bff7b4 | ||
|
|
0f493b6038 | ||
|
|
f26b709c50 | ||
|
|
ae10d9cf22 | ||
|
|
81af9674ed | ||
|
|
b63df7991a | ||
|
|
a79990465c | ||
|
|
ad6bd530ac | ||
|
|
c1b369fd4c | ||
|
|
01fcd3c2d5 | ||
|
|
7196d784d3 | ||
|
|
0f0aaf51e0 | ||
|
|
b5f493c55a | ||
|
|
0aa031beb9 | ||
|
|
db6ff224f8 | ||
|
|
b3c7cd61f3 | ||
|
|
9ae05c4d91 | ||
|
|
264e6f6efd | ||
|
|
ec7bccf671 | ||
|
|
49f75ee8ce | ||
|
|
4bcc866c52 | ||
|
|
c65e088caf | ||
|
|
6ca4116555 | ||
|
|
f6cdb820af | ||
|
|
081e5a82ff | ||
|
|
2ad2a4bd9f | ||
|
|
645e700da3 | ||
|
|
92aea29a30 | ||
|
|
e1c01af929 | ||
|
|
7ef749497d | ||
|
|
d72aa49126 | ||
|
|
e92bd312ec | ||
|
|
b097c2cfb0 | ||
|
|
a39cdc80b7 | ||
|
|
a47250810e | ||
|
|
1f50f3031f | ||
|
|
75145dd753 | ||
|
|
d0b97f7e1f | ||
|
|
199a0311e2 | ||
|
|
fa446f860f | ||
|
|
7a74303f3c | ||
|
|
7d9eabb981 | ||
|
|
ff5308a5af | ||
|
|
3f8ba3a986 | ||
|
|
4a555de1b2 | ||
|
|
d27e4a08f9 | ||
|
|
bf678a1ca9 | ||
|
|
13a903de28 | ||
|
|
a3c14c031e | ||
|
|
e90d528026 | ||
|
|
d64dd77993 | ||
|
|
113850a748 | ||
|
|
1c49a00d64 | ||
|
|
eef6c83503 | ||
|
|
ceb5648eb7 | ||
|
|
a0eadb76ea | ||
|
|
065852e46c | ||
|
|
e5e2fb8274 | ||
|
|
0210b3c893 | ||
|
|
7df5677b46 | ||
|
|
2e71876b28 | ||
|
|
11576b1142 | ||
|
|
ce011b8a2d | ||
|
|
12cfb4f7ee | ||
|
|
9e1123debe | ||
|
|
c7354142c0 | ||
|
|
dee84f448f | ||
|
|
1607711603 | ||
|
|
8bca5e05b8 | ||
|
|
f68505ee23 | ||
|
|
d2174da641 | ||
|
|
255b1e68d0 | ||
|
|
fbee6b87f5 | ||
|
|
3836a70f97 | ||
|
|
e0ec9fa294 | ||
|
|
80fe50590f | ||
|
|
ae18d1c55a | ||
|
|
75194373e0 | ||
|
|
f3875048f6 | ||
|
|
210af986ad | ||
|
|
c03044f492 | ||
|
|
522b85ae21 | ||
|
|
208e56dbe9 | ||
|
|
42acb00c81 | ||
|
|
ca6e770837 | ||
|
|
775968003c | ||
|
|
323d3e9b5d | ||
|
|
16f9755e73 | ||
|
|
66eb98bb0a | ||
|
|
299546f5c0 | ||
|
|
7be9b4c418 | ||
|
|
03c22b4576 | ||
|
|
ef749fa9ce | ||
|
|
a23c92596e | ||
|
|
abb1497c98 | ||
|
|
7a8594da43 | ||
|
|
cbf28daed9 | ||
|
|
0ff1ca30c3 | ||
|
|
2cff251863 | ||
|
|
73d996bf26 | ||
|
|
5bc78cb724 | ||
|
|
cdba92ac3c | ||
|
|
6d28f92ffe | ||
|
|
01387f42c5 | ||
|
|
8f52b731f4 | ||
|
|
d442088ed3 | ||
|
|
22a323890a | ||
|
|
163bba1410 | ||
|
|
db1c618fcf | ||
|
|
01bdfa7b6d | ||
|
|
6a88c8d845 | ||
|
|
b8a6913e09 | ||
|
|
744d8c1006 | ||
|
|
c2e2c98d81 | ||
|
|
3fa353a2d3 | ||
|
|
c27c9f80d2 | ||
|
|
b5a74715cf | ||
|
|
13ee2901f4 | ||
|
|
32c03eadd6 | ||
|
|
0fa512f26d | ||
|
|
219d88518c | ||
|
|
ecf3aee43a | ||
|
|
7f08cab73e | ||
|
|
c4e9ef199e | ||
|
|
9e612b5550 | ||
|
|
203633d34d | ||
|
|
45bd009bb1 | ||
|
|
ee656415c4 | ||
|
|
156aad198f | ||
|
|
b1ffb79a50 | ||
|
|
d6654bfe00 | ||
|
|
eefdd67d22 | ||
|
|
86a86d7afd | ||
|
|
b6dac2b484 | ||
|
|
e6367abae9 | ||
|
|
fc4d1d9a60 | ||
|
|
94bae20776 | ||
|
|
bb8c8d273c | ||
|
|
ee600ace37 | ||
|
|
da86e32eb4 | ||
|
|
b5bbc04ad1 | ||
|
|
265c58611f | ||
|
|
25c973a39e | ||
|
|
123c7b32db | ||
|
|
e2d8e2c4ae | ||
|
|
701509d322 | ||
|
|
c3cc616264 | ||
|
|
91b84b89e4 | ||
|
|
017ec204a9 | ||
|
|
8dbfecd153 | ||
|
|
512db1bc54 | ||
|
|
e157aabd4d | ||
|
|
db2fea448c | ||
|
|
dd82d69b8c | ||
|
|
27328281b7 | ||
|
|
51d205b267 | ||
|
|
84800914f6 | ||
|
|
9b296e65bd | ||
|
|
5f649a1649 | ||
|
|
daea056210 | ||
|
|
30c0db06bd | ||
|
|
91168c005c | ||
|
|
cfa0054077 | ||
|
|
3d5820648b | ||
|
|
d08df97fe5 | ||
|
|
fd6624a058 | ||
|
|
8aa41dd04b | ||
|
|
e890113fc6 | ||
|
|
e2e64798b5 | ||
|
|
b9b6a6566a | ||
|
|
dc9e415602 | ||
|
|
84fa12c885 | ||
|
|
296b35fe9b | ||
|
|
0ff89b9c3c | ||
|
|
3b33540c99 | ||
|
|
29d0174253 | ||
|
|
cc7f2a0d08 | ||
|
|
b1579aed2f | ||
|
|
9247daf953 | ||
|
|
9031e33b66 | ||
|
|
1ee1f5f427 | ||
|
|
a5874a5393 | ||
|
|
969217c9d9 | ||
|
|
e399502c7a | ||
|
|
6883f0c49f | ||
|
|
3fc2c813cc | ||
|
|
9de4b99fc7 | ||
|
|
24e7036822 | ||
|
|
ec9acbcda7 | ||
|
|
c0460660d5 | ||
|
|
b03f4919fb | ||
|
|
08620743b9 | ||
|
|
41362f063a | ||
|
|
5b3069e265 | ||
|
|
b466924717 | ||
|
|
cbc0f65fa3 | ||
|
|
35089a4289 | ||
|
|
aef3131e92 | ||
|
|
342fce97af | ||
|
|
fb5d267bd0 | ||
|
|
c19844a0a3 | ||
|
|
22cf05519a | ||
|
|
511ce35631 | ||
|
|
e9b7548dd6 | ||
|
|
010cde0a4a | ||
|
|
cac5251a98 | ||
|
|
3b825bcbfb | ||
|
|
31959fb24b | ||
|
|
5e9675ad1e | ||
|
|
084b7675b2 | ||
|
|
ed8be5bc55 | ||
|
|
efca2943a0 | ||
|
|
371da7132f | ||
|
|
9a3ff5c46a | ||
|
|
b36c654a3d | ||
|
|
ddeb2613ec | ||
|
|
2d02d20911 | ||
|
|
b2563b9f9f | ||
|
|
fccf6925b1 | ||
|
|
4a7cf65064 | ||
|
|
56587e2821 | ||
|
|
33b8e71583 | ||
|
|
1c96128695 | ||
|
|
ca516b1b26 | ||
|
|
ba4e69bebc | ||
|
|
de5e9f100c | ||
|
|
955da86a3e | ||
|
|
8d85be4c5e | ||
|
|
93eadfb10f | ||
|
|
f8e0b18439 | ||
|
|
64bbe9dfaf | ||
|
|
2e8a9416af | ||
|
|
5dd40bd0bb | ||
|
|
1822dd0549 | ||
|
|
751e49fb0a | ||
|
|
56c43604d0 | ||
|
|
7438c378be | ||
|
|
0e0caf7c06 | ||
|
|
5644f4a295 | ||
|
|
98e1605b17 | ||
|
|
73f0e32d1a | ||
|
|
713cb56fea | ||
|
|
bd3bb70ee8 | ||
|
|
8aa3f14303 | ||
|
|
ac285b453e | ||
|
|
daf55705e4 | ||
|
|
7140baae72 | ||
|
|
27a2e590cd | ||
|
|
7172fa058a | ||
|
|
c0790ccf08 | ||
|
|
87c43517cd | ||
|
|
6561ec524b | ||
|
|
982c5460f0 | ||
|
|
2a3a8848f3 | ||
|
|
752520e428 | ||
|
|
8095b776fe | ||
|
|
e504103e2c | ||
|
|
904183262a | ||
|
|
2a0bc64226 | ||
|
|
6b975c308c | ||
|
|
74be55a477 | ||
|
|
394832c2d6 | ||
|
|
f636c12255 | ||
|
|
03e4a8214c | ||
|
|
6d7785a35b | ||
|
|
904f579332 | ||
|
|
a72d789b08 | ||
|
|
87ad7ace18 | ||
|
|
35153eb524 | ||
|
|
c8ee1fa62e | ||
|
|
5c1a6ed719 | ||
|
|
9d68fde148 | ||
|
|
c7d517f6d2 | ||
|
|
183f1531d3 | ||
|
|
6dfe0ec31e | ||
|
|
8b3f1cebda | ||
|
|
086daf913c | ||
|
|
6a3e2272e9 | ||
|
|
d0e0bf53a6 | ||
|
|
0009e4dfb9 | ||
|
|
30b7a9f172 | ||
|
|
c74cb59e08 | ||
|
|
c1f29a8e08 | ||
|
|
cb895ec335 | ||
|
|
2df4866cfa | ||
|
|
423a1cf486 | ||
|
|
7aeb63c817 | ||
|
|
476fa1f4d2 | ||
|
|
0bea215560 | ||
|
|
3c20b98d99 | ||
|
|
8bcdda29d4 | ||
|
|
c88036405f | ||
|
|
60cddab4f2 | ||
|
|
411ca1c050 | ||
|
|
d1be3a4a1d | ||
|
|
b5dd257427 | ||
|
|
4cf953678d | ||
|
|
ca5678c8c1 | ||
|
|
9e4594be53 | ||
|
|
d16c757c28 | ||
|
|
312bcafd05 | ||
|
|
be24652d4d | ||
|
|
6ab44d9439 | ||
|
|
108cb14d1f | ||
|
|
b98308b524 | ||
|
|
215c445583 | ||
|
|
20d8e32a58 | ||
|
|
33306b2749 | ||
|
|
94eeeba79a | ||
|
|
ecd29a289a | ||
|
|
e7d0af72e3 | ||
|
|
fcb1d3521a | ||
|
|
890bf3bd27 | ||
|
|
dafd81178f | ||
|
|
99dfdebc64 | ||
|
|
c1cfdd6323 | ||
|
|
264a9bc6ed | ||
|
|
f79f5cbf82 | ||
|
|
7313501e30 | ||
|
|
d8b2c819e7 | ||
|
|
69f6d14b81 | ||
|
|
9f3856e646 | ||
|
|
a46e2e9900 | ||
|
|
14f0dd2dd0 | ||
|
|
c051438fa1 | ||
|
|
52e32ac1d3 | ||
|
|
7f8ad34ba2 | ||
|
|
a9c0302454 | ||
|
|
a33e89b44a | ||
|
|
e203ecebee | ||
|
|
2f8e7f56b3 | ||
|
|
2443e1f38c | ||
|
|
eb164098b7 | ||
|
|
62527fa98a | ||
|
|
b9f8e80b14 | ||
|
|
b79e250ed2 | ||
|
|
fc5c9d8f17 | ||
|
|
72d57a8ee6 | ||
|
|
23262e30bc | ||
|
|
8b4ad40ed6 | ||
|
|
d7e9797365 | ||
|
|
e54e0c7877 | ||
|
|
5cb06d8fd6 | ||
|
|
2b34d4e1f7 | ||
|
|
c7aa095fac | ||
|
|
93f1784526 | ||
|
|
559dc503c2 | ||
|
|
414afe0935 | ||
|
|
4ad4f3fc70 | ||
|
|
67273eed9b | ||
|
|
3c63e1d8d9 | ||
|
|
cae555c977 | ||
|
|
407583e8e2 | ||
|
|
131645dc31 | ||
|
|
dafd644fe7 | ||
|
|
73cc1742af | ||
|
|
87afd7686f | ||
|
|
8ce10b5dfa | ||
|
|
943e31b35c | ||
|
|
20f85b94df | ||
|
|
17b784381e | ||
|
|
e3031fddb9 | ||
|
|
38c994a7ae | ||
|
|
85e2e96fb6 | ||
|
|
be35b3ad03 | ||
|
|
dbbd871ea1 | ||
|
|
813911db59 | ||
|
|
3c49b405de | ||
|
|
4cfffd6c4a | ||
|
|
e9f1c12f0f | ||
|
|
4fe252847c | ||
|
|
109cbbe9c5 | ||
|
|
fd3881eaa6 | ||
|
|
08ef208fb7 | ||
|
|
8c45e2a641 | ||
|
|
25dc520163 | ||
|
|
fc37ef9e4b | ||
|
|
11ba367fc9 | ||
|
|
78473f71eb | ||
|
|
8b77f40f99 | ||
|
|
d866716565 | ||
|
|
307d0effe2 | ||
|
|
b47b053e54 | ||
|
|
b79f01caf3 | ||
|
|
0db227f55e | ||
|
|
ac48b38842 | ||
|
|
0cbb9365c6 | ||
|
|
798b8c522b | ||
|
|
15bc7e19f9 | ||
|
|
0be3f1a063 | ||
|
|
c0257c6721 | ||
|
|
9aec0fc7de | ||
|
|
bce5e0d82c | ||
|
|
62032ee248 | ||
|
|
775645f29b | ||
|
|
99c0456872 | ||
|
|
0236bee5de | ||
|
|
59c11b82d5 | ||
|
|
98871d1e9e | ||
|
|
b40dc5d742 | ||
|
|
17b0723713 | ||
|
|
ec585e8907 | ||
|
|
0aeb25ff3b | ||
|
|
a928f2c4aa | ||
|
|
51fcee6f81 | ||
|
|
654be65590 | ||
|
|
105ec79b2b | ||
|
|
c759d8427a | ||
|
|
c7b03d6479 | ||
|
|
2080738883 | ||
|
|
48bc73c271 | ||
|
|
3d0969d1d1 | ||
|
|
323f195036 | ||
|
|
c3c392fc98 | ||
|
|
5d2944c211 | ||
|
|
fe3ba1dd11 | ||
|
|
0c00eb93a0 | ||
|
|
baa77ec13b | ||
|
|
9263652c6d | ||
|
|
bc74375543 | ||
|
|
edb1756050 | ||
|
|
5215f6f654 | ||
|
|
1913b4eeed | ||
|
|
b44a4da5df | ||
|
|
919878fbb2 | ||
|
|
06bdf83419 | ||
|
|
2ff2810a92 | ||
|
|
20d9c1b30d | ||
|
|
bbe10cb0cb | ||
|
|
daba8f3a70 | ||
|
|
1458c3668d | ||
|
|
980a47b42b | ||
|
|
f7ca561b06 | ||
|
|
cacd756efd | ||
|
|
8539e76cb9 | ||
|
|
3bbf694d5a | ||
|
|
44debdde62 | ||
|
|
c6cf2b8e93 | ||
|
|
69c5452b25 | ||
|
|
d321056e8d | ||
|
|
d9a1a59f22 | ||
|
|
0b898b5a8a | ||
|
|
a9e0885be0 | ||
|
|
57ff28c9b7 | ||
|
|
86cc34c0de | ||
|
|
39028f1bd4 | ||
|
|
71f4c05665 | ||
|
|
9ef9797998 | ||
|
|
ab9374de57 | ||
|
|
913e997061 | ||
|
|
8e50d6b6f3 | ||
|
|
2db0744a7b | ||
|
|
2de0028349 | ||
|
|
35d04c5398 | ||
|
|
b1becd0ed5 | ||
|
|
bd9650bc81 | ||
|
|
969a25d1b2 | ||
|
|
f144f77ba7 | ||
|
|
abea1f8910 | ||
|
|
8eaa7fec76 | ||
|
|
fdace647e8 | ||
|
|
d7531c18fc | ||
|
|
ef3f978784 | ||
|
|
e410860e0e | ||
|
|
c64fca1b0c | ||
|
|
15b2a3af91 | ||
|
|
8358505b6d | ||
|
|
1c42779845 | ||
|
|
32823f17e0 | ||
|
|
e1c2e3f5e9 | ||
|
|
044755b30f | ||
|
|
9aa22399a8 | ||
|
|
f564905ac4 | ||
|
|
00e4f81446 | ||
|
|
8927ddec16 | ||
|
|
f6525ae200 | ||
|
|
0be7944d66 | ||
|
|
47819ea86e | ||
|
|
96ce3461ad | ||
|
|
8b6d555421 | ||
|
|
3b9ef8dfc8 | ||
|
|
db6d4bcf47 | ||
|
|
471f1d694f | ||
|
|
495f6f6bd3 | ||
|
|
36e35b6f60 | ||
|
|
192606bc4b | ||
|
|
53a9fdf078 | ||
|
|
ef436bdbe8 | ||
|
|
72d722b07b | ||
|
|
21fc402c01 | ||
|
|
381f77756d | ||
|
|
a386562d9a | ||
|
|
2bc84fb163 | ||
|
|
08f8917acb | ||
|
|
62d205a2ec | ||
|
|
29e873b12d | ||
|
|
95f78080ab | ||
|
|
9549cfde02 | ||
|
|
2361aabbef | ||
|
|
e0cc8d2ce9 | ||
|
|
53c0e97117 | ||
|
|
bb44791bf3 | ||
|
|
9ebcfe9dff | ||
|
|
f339bf613c | ||
|
|
b00c59816d | ||
|
|
a00918116d | ||
|
|
d26c318321 | ||
|
|
eb8770506f | ||
|
|
c06171a802 | ||
|
|
5528c1eaa5 | ||
|
|
93516effe4 | ||
|
|
38e518c710 | ||
|
|
3f6133be27 | ||
|
|
c3bfb355c5 | ||
|
|
c69dd14cbc | ||
|
|
7954652b80 | ||
|
|
ca35b39900 | ||
|
|
09df9b90c3 | ||
|
|
308ae5cbf2 | ||
|
|
1cd5cdfccb | ||
|
|
606e7fd744 | ||
|
|
e8109b09b1 | ||
|
|
536ea60d73 | ||
|
|
3390b6446c | ||
|
|
bfc7f1e4ac | ||
|
|
8ba410a56e | ||
|
|
14d1da3ae0 | ||
|
|
2a72641a0b | ||
|
|
9c4e5dc3ee | ||
|
|
540e5ffa90 | ||
|
|
c1a57591ee | ||
|
|
1a4f72dd4f | ||
|
|
c3c8bbd3b2 | ||
|
|
fb7d34cea8 | ||
|
|
0866c1b52d | ||
|
|
136f728b49 | ||
|
|
5d28a857a4 | ||
|
|
edbe0d166c | ||
|
|
4db8c8b1a3 | ||
|
|
2b16b8604a | ||
|
|
f630929810 | ||
|
|
016abdfef6 | ||
|
|
fd915609cd | ||
|
|
064697fde6 | ||
|
|
a03fd7b81c | ||
|
|
1cfcbc50a6 | ||
|
|
ea1f138c08 | ||
|
|
d560207ea1 | ||
|
|
90b51831fd | ||
|
|
38ed8938d8 | ||
|
|
547e91dbf0 | ||
|
|
04da96e044 | ||
|
|
4a7def101b | ||
|
|
541e5a3b82 | ||
|
|
5af61716aa | ||
|
|
6f3e0051c3 | ||
|
|
703ecc3521 | ||
|
|
67b0f9aacd | ||
|
|
854277bae5 | ||
|
|
ca9760756a | ||
|
|
f1f993a25b | ||
|
|
eb0f727818 | ||
|
|
dc3d0289d6 | ||
|
|
bd830c6f4d | ||
|
|
51d602f973 | ||
|
|
30d5401f31 | ||
|
|
ab6b0f9843 | ||
|
|
c560327f26 | ||
|
|
28939dd45c | ||
|
|
3853e3d6f3 | ||
|
|
6062a1bd68 | ||
|
|
8d94688fd1 | ||
|
|
6b4532b592 | ||
|
|
286fb6f645 | ||
|
|
340caf5da3 | ||
|
|
171c4fd49f | ||
|
|
b8a0fb1dfe | ||
|
|
e65993bccb | ||
|
|
7ffb4660ec | ||
|
|
974f314f57 | ||
|
|
4cec22fa19 | ||
|
|
069477d35c | ||
|
|
eaff1a344e | ||
|
|
1fe1e39a88 | ||
|
|
33b06f56f0 | ||
|
|
61a84abe2a | ||
|
|
3d03100079 | ||
|
|
5297a52bf0 | ||
|
|
88631276e8 | ||
|
|
2c0d9ad64c | ||
|
|
5c691ed835 | ||
|
|
f73864a045 | ||
|
|
94da04fcac | ||
|
|
5f758fbd11 | ||
|
|
fb29529a52 | ||
|
|
3cd2673077 | ||
|
|
d242214e18 | ||
|
|
468b787272 | ||
|
|
cfdb6f851c | ||
|
|
7886f120f3 | ||
|
|
76fe69b133 | ||
|
|
e1bae4fc7e | ||
|
|
bc9705f758 | ||
|
|
c819e234b8 | ||
|
|
ce021b79a7 | ||
|
|
805a2f6f99 | ||
|
|
eb78400b53 | ||
|
|
4852f9ffbd | ||
|
|
c8d2ad2513 | ||
|
|
9f374c2050 | ||
|
|
5799852424 | ||
|
|
6417fa95cf | ||
|
|
61f6284a35 | ||
|
|
6b1a1a62a3 | ||
|
|
feacb4b481 | ||
|
|
fe3c874001 | ||
|
|
d9459b54d9 | ||
|
|
017be8a882 | ||
|
|
b86e543a13 | ||
|
|
c2d4fd876c | ||
|
|
58cad04bbb | ||
|
|
9bb64d6827 | ||
|
|
4441df90c1 | ||
|
|
f51f2417c5 | ||
|
|
aad617647d | ||
|
|
49c0d62dda | ||
|
|
f752098ba5 | ||
|
|
a4477b9e4b | ||
|
|
ad3cef0fc8 | ||
|
|
d89dbe5bd6 | ||
|
|
b0475dbdbc | ||
|
|
60b2e74fa3 | ||
|
|
cda16297d1 | ||
|
|
d6c9a72e15 | ||
|
|
4d7b1512c1 | ||
|
|
d8a35d745e | ||
|
|
e22657ea13 | ||
|
|
d06d6b5534 | ||
|
|
cec8ab1fde | ||
|
|
9fc62a8dd0 | ||
|
|
61540b98c2 | ||
|
|
465ae39e86 | ||
|
|
01f04b9a41 | ||
|
|
34f9ab1046 | ||
|
|
699876778b | ||
|
|
8fc5a0d19e | ||
|
|
62b5926d58 | ||
|
|
4d1037f385 | ||
|
|
e4addb3975 | ||
|
|
2aef351980 | ||
|
|
d88c153c7d | ||
|
|
9e9883082e | ||
|
|
71440df4c7 | ||
|
|
80b004a57d | ||
|
|
ea8476a2dc | ||
|
|
cb85ca18ab | ||
|
|
f1103b95cf | ||
|
|
aa5ff53bcf | ||
|
|
907dabed5d | ||
|
|
0cacbc892c | ||
|
|
6753c3c715 | ||
|
|
36e1363e3d | ||
|
|
d1a711eb6a | ||
|
|
d8dea4dcc7 | ||
|
|
ca161737bc | ||
|
|
3612c3774e | ||
|
|
e6a65bb3ef | ||
|
|
ff291eee48 | ||
|
|
66b8f48a88 | ||
|
|
634760cbdc | ||
|
|
a23a897ad2 | ||
|
|
d9c244278d | ||
|
|
b6c4185b27 | ||
|
|
5896d35e72 | ||
|
|
b4dfdd8bbc | ||
|
|
e6ed3478ea | ||
|
|
db08d9c6b9 | ||
|
|
9490278ece | ||
|
|
fd8bf5f171 | ||
|
|
c9bc14a222 | ||
|
|
63708cbfb0 | ||
|
|
d9f307623c | ||
|
|
540f77a627 | ||
|
|
71bb2d0b8b | ||
|
|
87dc44e434 | ||
|
|
29e0fcd091 | ||
|
|
2e9a798f09 | ||
|
|
b32a39f44f | ||
|
|
d86f9611b3 | ||
|
|
6a62fc4a40 | ||
|
|
7cdd6455d7 | ||
|
|
e4fefd088d | ||
|
|
95e601e2b1 | ||
|
|
b1ffe7b74a | ||
|
|
417c8fb602 | ||
|
|
85efa64c31 | ||
|
|
d8cb026e80 | ||
|
|
41dd5121f0 | ||
|
|
94482d7ca5 | ||
|
|
4d0e51aead | ||
|
|
ae8a8c8ba4 | ||
|
|
7d043f46d5 | ||
|
|
cbca19d6c2 | ||
|
|
b40b9677b6 | ||
|
|
c80ad865db | ||
|
|
758eae49ab | ||
|
|
721b05e343 | ||
|
|
a333bddeeb | ||
|
|
4c6a52fe90 | ||
|
|
792d73a9cf | ||
|
|
9a95a3f8c3 | ||
|
|
485edb777f | ||
|
|
a8c3431ae9 | ||
|
|
6fe4a6fa9a | ||
|
|
6d8c7356d6 | ||
|
|
a782c96e81 | ||
|
|
c795123cd5 | ||
|
|
0ec370e6fb | ||
|
|
3d5732d4e0 | ||
|
|
b795929858 | ||
|
|
535258ffe4 | ||
|
|
cc161b96ac | ||
|
|
5c4b422b18 | ||
|
|
89bad584c3 | ||
|
|
e21926f7f0 | ||
|
|
e452f467d4 | ||
|
|
dfda7ba456 | ||
|
|
feb6b6445e | ||
|
|
0b57fa9c51 | ||
|
|
55c6f60c90 | ||
|
|
9def011e8e | ||
|
|
7cf6e8c9cc | ||
|
|
cdee43aa59 | ||
|
|
9c25b58b4c | ||
|
|
83f35463f5 | ||
|
|
818cdb879e | ||
|
|
3eead2d6c4 | ||
|
|
5cffe055ad | ||
|
|
3d4511daf3 | ||
|
|
4748b40ad9 | ||
|
|
c40b4f6c39 | ||
|
|
d3b96dd394 | ||
|
|
f946df640b | ||
|
|
fef78bd6f1 | ||
|
|
9e6cc86bf7 | ||
|
|
b544c5fa5c | ||
|
|
afa64ee31f | ||
|
|
e9bfef0eb1 | ||
|
|
ddbcccd43d | ||
|
|
5370d7a6eb | ||
|
|
685b180ab6 | ||
|
|
9dab850874 | ||
|
|
0d5bfe883e | ||
|
|
cc2f1d4894 | ||
|
|
a8dd13db4c | ||
|
|
325391aef9 | ||
|
|
3474ec4ecb | ||
|
|
ec1736d488 | ||
|
|
4522579688 | ||
|
|
907a6e0eed | ||
|
|
d20186a7b8 | ||
|
|
b28051881e | ||
|
|
bdea56cd3f | ||
|
|
8a3ec2c659 | ||
|
|
14e9420d2c | ||
|
|
5b58e61f28 | ||
|
|
be2f3071b5 | ||
|
|
85dbf82d93 | ||
|
|
a9c4963cc0 | ||
|
|
a4934387d5 | ||
|
|
e88a2ec6fc | ||
|
|
0666960173 | ||
|
|
f114caca90 | ||
|
|
9468c9c796 | ||
|
|
76c53c690c | ||
|
|
c341b11aaf | ||
|
|
6212e6990a | ||
|
|
28049a183c | ||
|
|
5d3dd7911e | ||
|
|
ae8375516b | ||
|
|
e3f10eb825 | ||
|
|
2b1f683239 | ||
|
|
a2b19c9a63 | ||
|
|
4146ce8267 | ||
|
|
170bd6dafc | ||
|
|
7e16ec8724 | ||
|
|
8c459156f8 | ||
|
|
2db894807b | ||
|
|
95ceeb6e0b | ||
|
|
c9c00d2a23 | ||
|
|
1afe49864d | ||
|
|
6924bee3a0 | ||
|
|
39d4552dab | ||
|
|
a23c63738f | ||
|
|
e911945c55 | ||
|
|
6d58d13710 | ||
|
|
0b177cb165 | ||
|
|
3e31b619de | ||
|
|
f925979b2f | ||
|
|
49f7fa82b9 | ||
|
|
e4cd4cf3f3 | ||
|
|
e74b20926d | ||
|
|
a312127c91 | ||
|
|
1dc5bf4f73 | ||
|
|
01cfe670c5 | ||
|
|
fd307bfe29 | ||
|
|
a00de093a7 | ||
|
|
7bfe853af3 | ||
|
|
cbaecca8e9 | ||
|
|
8edfb370a8 | ||
|
|
4c08c8f7db | ||
|
|
c174680a03 | ||
|
|
cb5f6e18e6 | ||
|
|
b798e7a5ae | ||
|
|
5deab7ad27 | ||
|
|
12cdfd282d | ||
|
|
eba8035e12 | ||
|
|
edcbf4350b | ||
|
|
9289ea471f | ||
|
|
7d06185aa6 | ||
|
|
01ecb1d7e7 | ||
|
|
e177f14595 | ||
|
|
5c6eddcadd | ||
|
|
b3b4786990 | ||
|
|
fbe2907599 | ||
|
|
343da8d4b3 | ||
|
|
8d97792dbc | ||
|
|
8d07c87be7 | ||
|
|
ed21701df3 | ||
|
|
df01507582 | ||
|
|
f2bda5fd5b | ||
|
|
cba9838e8f | ||
|
|
b6dba9f5dd | ||
|
|
6e9d1617c6 | ||
|
|
ea811fee52 | ||
|
|
7391fd8f6a | ||
|
|
6c00c58f2a | ||
|
|
4931fbce49 | ||
|
|
fefc7ea600 | ||
|
|
d220389647 | ||
|
|
a1f910c159 | ||
|
|
e4866563de | ||
|
|
47f45aa229 | ||
|
|
affe334675 | ||
|
|
ee7e184e26 | ||
|
|
bec0ebacf1 | ||
|
|
5bd6d631c6 | ||
|
|
fd1799f3bb | ||
|
|
d84a0c51e0 | ||
|
|
d9a7c7de51 | ||
|
|
d57e09889a | ||
|
|
eecb86bfb0 | ||
|
|
0b1197936c | ||
|
|
b545ac6391 | ||
|
|
a922132e4a | ||
|
|
9474e8d6d2 | ||
|
|
6328428568 | ||
|
|
ea9a88a9b8 | ||
|
|
aec7358ca4 | ||
|
|
3c334b2bb6 | ||
|
|
75bba0da92 | ||
|
|
c0bfe7be15 | ||
|
|
22ac08e06d | ||
|
|
87037136ef | ||
|
|
2182e37433 | ||
|
|
1de82b220d | ||
|
|
bd878756fc | ||
|
|
8d7f402efb | ||
|
|
d3299beec7 | ||
|
|
f9192db358 | ||
|
|
c69c0c0446 | ||
|
|
deb2911c0e | ||
|
|
e31a306a38 | ||
|
|
d9a7773011 | ||
|
|
2b14916813 | ||
|
|
1d1530e14c | ||
|
|
b4fdc025a8 | ||
|
|
f1c14fe0b4 | ||
|
|
38306cda54 | ||
|
|
5a0f0023cf | ||
|
|
6dcdb8b821 | ||
|
|
781f52a287 | ||
|
|
f75ff58b4b | ||
|
|
ae9bf16dee | ||
|
|
17a8bf212f | ||
|
|
4fc76afef4 | ||
|
|
a31155a72a | ||
|
|
75601f7924 | ||
|
|
8b6314ccfb | ||
|
|
6de7dc5879 | ||
|
|
6aaee5f23b | ||
|
|
dd06dcebe1 | ||
|
|
b35c26b751 | ||
|
|
128f341635 | ||
|
|
e48bc1be48 | ||
|
|
0077b9c0a2 | ||
|
|
fe37fb5921 | ||
|
|
221ecd0a30 | ||
|
|
560492707d | ||
|
|
dfdf4916fa | ||
|
|
97a8c98886 | ||
|
|
62fb70e9d1 | ||
|
|
8a9098a36c | ||
|
|
28027c2aa2 | ||
|
|
d60029d66e | ||
|
|
226fe8bdf9 | ||
|
|
33237b4502 | ||
|
|
af6c394785 | ||
|
|
558d12d7f6 | ||
|
|
bfa8a6da26 | ||
|
|
aa6b3d22a2 | ||
|
|
2eb355733f | ||
|
|
e66cdacb93 | ||
|
|
c67f2da283 | ||
|
|
e192261788 | ||
|
|
c63ca99c1c | ||
|
|
1c99c4ad11 | ||
|
|
bbcfc10677 | ||
|
|
47e67eab26 | ||
|
|
650b95045d | ||
|
|
5603134e58 | ||
|
|
d12fd897cb | ||
|
|
5e95203a5d | ||
|
|
cad4a571ce | ||
|
|
139ab3740a | ||
|
|
7b832e1745 | ||
|
|
914b9e441b | ||
|
|
f0f6ab49f5 | ||
|
|
436d147925 | ||
|
|
4bd78a7df4 | ||
|
|
7ee6a9dc25 | ||
|
|
1b56ae8478 | ||
|
|
d52c0b6f05 | ||
|
|
3ff2bfa0e4 | ||
|
|
aa21a3d5c3 | ||
|
|
fc33ad8cf2 | ||
|
|
779043f7a3 | ||
|
|
265bb99382 | ||
|
|
7493db2338 | ||
|
|
c3ad019c99 | ||
|
|
05b84bfe91 | ||
|
|
dbfa1e55b6 | ||
|
|
a0fd63f611 | ||
|
|
4ec0401529 | ||
|
|
61e6554b7f | ||
|
|
f6f3f79aa8 | ||
|
|
c16c017f8b | ||
|
|
2f03ef39d1 | ||
|
|
db33926432 | ||
|
|
946090b9cd | ||
|
|
1f7f0fda71 | ||
|
|
b84d947be4 | ||
|
|
07c67138c9 | ||
|
|
10717bd39b | ||
|
|
302bb4a4b3 | ||
|
|
81b5af2d1b | ||
|
|
87c562845c | ||
|
|
6c81d74626 | ||
|
|
533c24a471 | ||
|
|
6a9697387a | ||
|
|
85c8981b3d | ||
|
|
6c5b8e1d59 | ||
|
|
2cc16d89e6 | ||
|
|
42eb74922d | ||
|
|
c528a7ee33 | ||
|
|
eb2da7ec2b | ||
|
|
01ed950bbe | ||
|
|
b1076e0a9e | ||
|
|
332eb7651a | ||
|
|
cfdcf5c933 | ||
|
|
820de919b6 | ||
|
|
a32cd520bd | ||
|
|
b93a60daf9 | ||
|
|
e2844f5e04 | ||
|
|
cabb46db3d | ||
|
|
d09b436937 | ||
|
|
10fdb1d743 | ||
|
|
f0d3fccd4b | ||
|
|
aff19f64b5 | ||
|
|
15a56b42d6 | ||
|
|
d3706814e9 | ||
|
|
6513dcef68 | ||
|
|
81f22465ba | ||
|
|
dccc77a325 | ||
|
|
13ac89af24 | ||
|
|
ffefcab1bc | ||
|
|
0226b53b75 | ||
|
|
bbf80d0f93 | ||
|
|
6003f24f78 | ||
|
|
4382a80b9a | ||
|
|
9fe920cd90 | ||
|
|
f0ee7115d3 | ||
|
|
5986c653ef | ||
|
|
0e7203be89 | ||
|
|
52dbc96c32 | ||
|
|
1c8da21083 | ||
|
|
8f304d8167 | ||
|
|
30a0bd9cf5 | ||
|
|
ae40cdf92f | ||
|
|
b342fbdcda | ||
|
|
d1ea596f88 | ||
|
|
064cf971ef | ||
|
|
91b1598756 | ||
|
|
17b18bca3c | ||
|
|
be3d601217 | ||
|
|
ca0fd33d2d | ||
|
|
271f96f78f | ||
|
|
b0130e6b3b | ||
|
|
d0c1f3e25b | ||
|
|
b244710ddb | ||
|
|
d465291ded | ||
|
|
84e462d5f6 | ||
|
|
508466a175 | ||
|
|
e6dd4a6456 | ||
|
|
8d62e21072 | ||
|
|
25fe47f262 | ||
|
|
fe8365d214 | ||
|
|
2519a8cc9f | ||
|
|
b8ff21124a | ||
|
|
6aafc2dfd2 | ||
|
|
65b22480f4 | ||
|
|
60f19269d0 | ||
|
|
5121499082 | ||
|
|
3e049a90b7 | ||
|
|
c5d97df7f1 | ||
|
|
c2479ccb7a | ||
|
|
fc07eb45f4 | ||
|
|
c7cdb0f266 | ||
|
|
92aedf850e | ||
|
|
dd157fc349 | ||
|
|
05f3ca880f | ||
|
|
a18d41a463 | ||
|
|
1affbff8f9 | ||
|
|
c55d0bb804 | ||
|
|
0ffec712e1 | ||
|
|
6ebac3dc76 | ||
|
|
3b976ea9f1 | ||
|
|
2c16dfb526 | ||
|
|
fe3a78ab19 | ||
|
|
1a984ea847 | ||
|
|
2a0cde3041 | ||
|
|
3552775b52 | ||
|
|
818a632e80 | ||
|
|
00afb0f638 | ||
|
|
2e32d415c0 | ||
|
|
3dfc509d33 | ||
|
|
4379142af7 | ||
|
|
8a6dc57212 | ||
|
|
af636c535c | ||
|
|
2f77b0a4c6 | ||
|
|
08ad385e0e | ||
|
|
5623e0bb0e | ||
|
|
3d438d8d64 | ||
|
|
d89c495782 | ||
|
|
f5ba174f4d | ||
|
|
329bcf3a71 | ||
|
|
0cb12d7e78 | ||
|
|
3bfa06c9a2 | ||
|
|
f34573c8e2 | ||
|
|
4163b86cd2 | ||
|
|
5b948512f9 | ||
|
|
2297a7a70c | ||
|
|
dc82f9e6df | ||
|
|
e60e7414b9 | ||
|
|
c6caa9fd60 | ||
|
|
c84ad40ccd | ||
|
|
ab7f25ab41 | ||
|
|
6d213e207d | ||
|
|
9b6545c479 | ||
|
|
96fb118251 | ||
|
|
617d6eb7ce | ||
|
|
99888388dc | ||
|
|
7d24ce9651 | ||
|
|
cbc35b1fb8 | ||
|
|
027fc719cc | ||
|
|
f6b2e9e8a4 | ||
|
|
c4f1a9f690 | ||
|
|
542055074b | ||
|
|
7b93348aae | ||
|
|
eaf475b538 | ||
|
|
4118c68df1 | ||
|
|
69d5d88259 | ||
|
|
7e6a36ea7b | ||
|
|
6878c0b88f | ||
|
|
bbdc9f15e7 | ||
|
|
ae4f8243a9 | ||
|
|
1c83dee948 | ||
|
|
b66dedc017 | ||
|
|
b07e2a08f9 | ||
|
|
64543e09ec | ||
|
|
58936efff6 | ||
|
|
dbd32278f8 | ||
|
|
6d35984286 | ||
|
|
c046dc904c | ||
|
|
bc8375a1e8 | ||
|
|
83877d5ec6 | ||
|
|
3f248dd163 | ||
|
|
c9954d1941 | ||
|
|
e165332211 | ||
|
|
d25310cb6f | ||
|
|
fbb9d23a25 | ||
|
|
2d32e8831b | ||
|
|
42a9d96fae | ||
|
|
3edd9b4dfc | ||
|
|
1a8cf79ae0 | ||
|
|
b736bdc8e5 | ||
|
|
babb985f1a | ||
|
|
b22a5f756c | ||
|
|
d733061873 | ||
|
|
bca0c8d253 | ||
|
|
53ac8004e7 | ||
|
|
7b76499e82 | ||
|
|
9f45190fa1 | ||
|
|
f933cb3b75 | ||
|
|
c6822f5a7f | ||
|
|
4e276b1b68 | ||
|
|
50e9f8ffd3 | ||
|
|
7d3daa598f | ||
|
|
7349940bdb | ||
|
|
78000dbd5d | ||
|
|
b585f411cd | ||
|
|
5ccd6bb842 | ||
|
|
5193894603 | ||
|
|
29b76a52fb | ||
|
|
0436bc22f2 | ||
|
|
cd16efa2f2 | ||
|
|
56562bad59 | ||
|
|
a26081b555 | ||
|
|
aa9c01ad3e | ||
|
|
4e37187e44 | ||
|
|
74d5a6fb3b | ||
|
|
83da58ce91 | ||
|
|
45cc78fdbc | ||
|
|
010044e03c | ||
|
|
db0e3cc60c | ||
|
|
8dd6a4e369 | ||
|
|
92abbcef4c | ||
|
|
1e8f0c5771 | ||
|
|
532bca41e5 | ||
|
|
b438c46764 | ||
|
|
ef48c73783 | ||
|
|
2c5e416591 | ||
|
|
8e91d5de8e | ||
|
|
2f85f3b147 | ||
|
|
20a47acb3a | ||
|
|
6bc85a94f9 | ||
|
|
71bf8a6985 | ||
|
|
59a76e4010 | ||
|
|
65b9c0d44d | ||
|
|
f2a25966cf | ||
|
|
51afc3d8c5 | ||
|
|
0c2f60036a | ||
|
|
3dcdcfc572 | ||
|
|
9f8c51cbd8 | ||
|
|
de79348a90 | ||
|
|
56bc31e9f9 | ||
|
|
a9181f8f00 | ||
|
|
3685f792cb | ||
|
|
e227a276ce | ||
|
|
7b5b60d275 | ||
|
|
e719f4169c | ||
|
|
d8fb2b2e63 | ||
|
|
fdeaae678d | ||
|
|
f30102f038 | ||
|
|
a27ac6f394 | ||
|
|
093c0a098e | ||
|
|
c3363f833c | ||
|
|
47def8091c | ||
|
|
cfb32ec0cd | ||
|
|
5d9ae88f58 | ||
|
|
9d066935e5 | ||
|
|
bc40063e07 | ||
|
|
3c92d45386 | ||
|
|
fcf4fccfa4 | ||
|
|
eafd2c6bd5 | ||
|
|
64f00454e5 | ||
|
|
d678727430 | ||
|
|
efc15fb128 | ||
|
|
3d4cd8c9aa | ||
|
|
420259993e | ||
|
|
66087bdac6 | ||
|
|
ac70a43452 | ||
|
|
72dbe9da72 | ||
|
|
dd02881788 | ||
|
|
ced8955325 | ||
|
|
51ca5fcbe0 | ||
|
|
56ff2aa059 | ||
|
|
9f77771ff9 | ||
|
|
f0fa858885 | ||
|
|
3298630500 | ||
|
|
dc27488c47 | ||
|
|
375e615a6d | ||
|
|
6918427fae | ||
|
|
9d342bbf07 | ||
|
|
afc81ada0c | ||
|
|
5cd267b2be | ||
|
|
09da90076f | ||
|
|
d0079d9054 | ||
|
|
ede5b54edc | ||
|
|
c5fdeef41d | ||
|
|
6ca45beaed | ||
|
|
2a07626aa8 | ||
|
|
9127554852 | ||
|
|
9ff28a8237 | ||
|
|
e9aa07f660 | ||
|
|
88e21894c7 | ||
|
|
09da2c1767 | ||
|
|
ae2ecfc5cb | ||
|
|
cc610f0d1f | ||
|
|
8333644c84 | ||
|
|
4d13b2cc64 | ||
|
|
48dc74aecc | ||
|
|
888d39e083 | ||
|
|
7239ecd456 | ||
|
|
598e8dfbfb | ||
|
|
9efdb68035 | ||
|
|
14b898cb05 | ||
|
|
8d16b2b119 | ||
|
|
4d2cb8b32a | ||
|
|
d5001a3f0b | ||
|
|
91f5ac4d5c | ||
|
|
f9977df50d | ||
|
|
711650b178 | ||
|
|
c9adbc9f1c | ||
|
|
611fbfa917 | ||
|
|
ecfacfb334 | ||
|
|
645413f5ef | ||
|
|
5becdc38b3 | ||
|
|
f36cea67fe | ||
|
|
b556d6caee | ||
|
|
a17a78c477 | ||
|
|
146413a53c | ||
|
|
437fd064c9 | ||
|
|
28dd4e4f1f | ||
|
|
f92dc70beb | ||
|
|
6d8f1328bf | ||
|
|
8d1d93d56d | ||
|
|
f8e102c485 | ||
|
|
d816fcc965 | ||
|
|
e30dcd0501 | ||
|
|
24dc7cffbd | ||
|
|
3bc83926ce | ||
|
|
c5cca4d059 | ||
|
|
0db04c4f56 | ||
|
|
5c566c9aa3 | ||
|
|
822f02313d | ||
|
|
d934890c1e | ||
|
|
0e25cf41c4 | ||
|
|
5214dbbd02 | ||
|
|
0c716d51ad | ||
|
|
86367d675a | ||
|
|
bd8cef5a70 | ||
|
|
708431e2ea | ||
|
|
db5c1c61e5 | ||
|
|
aa4ff6d8b9 | ||
|
|
6d5b8b50e1 | ||
|
|
600d7b11e6 | ||
|
|
afa7648be6 | ||
|
|
5c344fc23a | ||
|
|
5a905e0bb8 | ||
|
|
c31216949d | ||
|
|
2cb893575d | ||
|
|
63f1f58077 | ||
|
|
36e9507e29 | ||
|
|
1fde1431c9 | ||
|
|
bec97a0999 | ||
|
|
07de3c9df0 | ||
|
|
8950a2dfa1 | ||
|
|
be47d83555 | ||
|
|
d5054ad52d | ||
|
|
051fad8d88 | ||
|
|
c4532b9a07 | ||
|
|
0e7824d1a9 | ||
|
|
a2c78607a6 | ||
|
|
cc1a4edf3d | ||
|
|
db7bde1d7a | ||
|
|
719008596a | ||
|
|
377e78d917 | ||
|
|
894b47da9b | ||
|
|
54e7246342 | ||
|
|
9b3b050640 | ||
|
|
a0e389caa2 | ||
|
|
b747408f9e | ||
|
|
d3e55d8155 | ||
|
|
96c7253cea | ||
|
|
3f5227dfc7 | ||
|
|
b91103099a | ||
|
|
82d3ded922 | ||
|
|
5a8d1c4cd1 | ||
|
|
46372c04ee | ||
|
|
6147879837 | ||
|
|
e2e3c95d3b | ||
|
|
c3b448dcea | ||
|
|
86da31e031 | ||
|
|
1d7075e339 | ||
|
|
610ec27d93 | ||
|
|
70f2717c11 | ||
|
|
b31a54c46a | ||
|
|
08238f4320 | ||
|
|
06993556f3 | ||
|
|
144459d364 | ||
|
|
0fa61eff77 | ||
|
|
a0be515d2d | ||
|
|
5900c0f767 | ||
|
|
d10cf2ba94 | ||
|
|
bae1a75731 | ||
|
|
f5adc8e53f | ||
|
|
67df4c9e6c | ||
|
|
50adfe3be9 | ||
|
|
71794da389 | ||
|
|
6ef11f0b13 | ||
|
|
a5705acc9c | ||
|
|
47e7a3e678 | ||
|
|
0ece1b5c34 | ||
|
|
315954c175 | ||
|
|
27ce46a85d | ||
|
|
ea3cc81487 | ||
|
|
a9b139b25c | ||
|
|
bbdd5adf6e | ||
|
|
d425f5389d | ||
|
|
26983053c4 | ||
|
|
8e0043165a | ||
|
|
c13dbf7bae | ||
|
|
a2b6ef3478 | ||
|
|
b6526af442 | ||
|
|
4edba42c7c | ||
|
|
1180ef4b31 | ||
|
|
94bf462473 | ||
|
|
233b3f718f | ||
|
|
0452fd8657 | ||
|
|
613eafaf02 | ||
|
|
725bd1dddf | ||
|
|
9835629801 | ||
|
|
3c52c53ddd | ||
|
|
321ba15a82 | ||
|
|
9e5dfc15ac | ||
|
|
8d52681e1d | ||
|
|
56f6815d3d | ||
|
|
ce07e79f3c | ||
|
|
723ced9336 | ||
|
|
73417b59c7 | ||
|
|
f4e2774ab8 | ||
|
|
d5112c0dec | ||
|
|
aace68c91b | ||
|
|
4034f31823 | ||
|
|
5323340cae | ||
|
|
3aae2ec511 | ||
|
|
df09214c62 | ||
|
|
12acab9b86 | ||
|
|
c9c2115088 | ||
|
|
d73d28a75b | ||
|
|
13bf964b78 | ||
|
|
3fb9c5727c | ||
|
|
b69f33ed44 | ||
|
|
56e8d073bf | ||
|
|
83a8786fe1 | ||
|
|
e3d7cc895b | ||
|
|
0f425b01aa | ||
|
|
c5a4b52d83 | ||
|
|
fc2d24105c | ||
|
|
6704d44dd4 | ||
|
|
3d9aeccc90 | ||
|
|
08655d8d5d | ||
|
|
3e5dbac7a2 | ||
|
|
05d9c9b849 | ||
|
|
4c2fb64e21 | ||
|
|
46a897f604 | ||
|
|
d4b23198fa | ||
|
|
6581663687 | ||
|
|
4398151fd5 | ||
|
|
d5fbfa3d0b | ||
|
|
3a588fc9e7 | ||
|
|
7dbad3c382 | ||
|
|
8f55c3d47d | ||
|
|
732d80a770 | ||
|
|
bd277e3daa | ||
|
|
a1cec0e49a | ||
|
|
9027005411 | ||
|
|
1d3542a38f | ||
|
|
429b09ee04 | ||
|
|
6c2a9009e9 | ||
|
|
1b00298b52 | ||
|
|
5ad4a52281 | ||
|
|
db5e67e34a | ||
|
|
a2688b6ca1 | ||
|
|
ceb8f1cb22 | ||
|
|
a7a3d49996 | ||
|
|
c36fc521bd | ||
|
|
ca43cd46a7 | ||
|
|
47ff6f29f4 | ||
|
|
861ca06f11 | ||
|
|
d9e54a3cdf | ||
|
|
32eaf9e83a | ||
|
|
9ce94207e2 | ||
|
|
9518e06413 | ||
|
|
aa21e42d5b | ||
|
|
16215e80d2 | ||
|
|
658c7e8afc | ||
|
|
666d0b67d1 | ||
|
|
97f3099ff6 | ||
|
|
5a0a51a7ac | ||
|
|
38783506fe | ||
|
|
70ad8a0b2b | ||
|
|
cec8a3afb2 | ||
|
|
f78de2d8c1 | ||
|
|
7d17713d62 | ||
|
|
546f4dca52 | ||
|
|
09a9b57bae | ||
|
|
10ab082188 | ||
|
|
4999087879 | ||
|
|
bff5f1b944 | ||
|
|
6e22b74253 | ||
|
|
a547f3a21e | ||
|
|
db9bb9221f | ||
|
|
7994817185 | ||
|
|
5ce97dbf0a | ||
|
|
0879515d4c | ||
|
|
2a6e1ea83c | ||
|
|
ea6d35d973 | ||
|
|
a80f65c578 | ||
|
|
7751756636 | ||
|
|
2de6d8baf6 | ||
|
|
b8c69928db | ||
|
|
b73746ae43 | ||
|
|
ca06bbe583 | ||
|
|
a9665b092b | ||
|
|
1ad7023758 | ||
|
|
1a7e13e166 | ||
|
|
3a37c0ae23 | ||
|
|
ccb3a13ce6 | ||
|
|
94a3886455 | ||
|
|
616d8eda41 | ||
|
|
85bb25e628 | ||
|
|
83a5e39065 | ||
|
|
bd0afd8db4 | ||
|
|
2d68ea45d8 | ||
|
|
5f42ef8f5b | ||
|
|
dff0145447 | ||
|
|
8e1f95ac7d | ||
|
|
95e7e551f6 | ||
|
|
5afc694879 | ||
|
|
b1c57788f3 | ||
|
|
3d4bb3be22 | ||
|
|
0c063f85fc | ||
|
|
c11a1bf72a | ||
|
|
f195502064 | ||
|
|
4df9d94414 | ||
|
|
9a7fc9ce3a | ||
|
|
9fa464aa94 | ||
|
|
d95ed06aa9 | ||
|
|
5abe5f664a | ||
|
|
e9e5197cea | ||
|
|
7b4b166718 | ||
|
|
e32641d412 | ||
|
|
1603f64771 | ||
|
|
c8926138d1 | ||
|
|
ab6c8a06e0 | ||
|
|
f35b6e90f5 | ||
|
|
b49565308f | ||
|
|
f8c357e4ff | ||
|
|
4b6c240832 | ||
|
|
022ea42265 | ||
|
|
b54b68ac7b | ||
|
|
1ddf2907c7 | ||
|
|
33dc9c1f95 | ||
|
|
f112cc14b9 | ||
|
|
5de39884c3 | ||
|
|
e840c109e7 | ||
|
|
f1ce203686 | ||
|
|
d6ccc33dec | ||
|
|
1b2f4031e1 | ||
|
|
64822958e6 | ||
|
|
af59b9b94c | ||
|
|
59ab21ed07 | ||
|
|
edec65246a | ||
|
|
95837043e2 | ||
|
|
dcfb10fb31 | ||
|
|
0553ab8181 | ||
|
|
410dd54da7 | ||
|
|
7b9ec9507f | ||
|
|
4045cd5ec0 | ||
|
|
81b6ebc0f4 | ||
|
|
56da5a05be | ||
|
|
c528dc53c9 | ||
|
|
ed786290e2 | ||
|
|
8b2861da85 | ||
|
|
2a70465434 | ||
|
|
d60cd937b7 | ||
|
|
76125e196c | ||
|
|
8219990012 | ||
|
|
f8d09660cd | ||
|
|
823fa6d273 | ||
|
|
2cf45f68b0 | ||
|
|
7950a95401 | ||
|
|
24805e17d7 | ||
|
|
490d46affb | ||
|
|
d30c478378 | ||
|
|
5b6640960a | ||
|
|
6f543f3ede | ||
|
|
93bcfd4e65 | ||
|
|
1400561a5a | ||
|
|
8dc4ac2147 | ||
|
|
7948b0becc | ||
|
|
72e67d3b9d | ||
|
|
711a3a79e3 | ||
|
|
a6a3673804 | ||
|
|
944f9a73f4 | ||
|
|
5ab1a10e9c | ||
|
|
1813d2ddf7 | ||
|
|
2827f5327a | ||
|
|
47bb09e908 | ||
|
|
7f21669ef2 | ||
|
|
3a145180cc | ||
|
|
f24d54a9c4 | ||
|
|
9478d796a3 | ||
|
|
00b00c6931 | ||
|
|
e791f6ec58 | ||
|
|
8987244758 | ||
|
|
9b69f6faab | ||
|
|
e7b966b9eb | ||
|
|
e7801afed1 | ||
|
|
929366b5ae | ||
|
|
e1d8c5daa7 | ||
|
|
2b44fdab2e | ||
|
|
3e0a95bb78 | ||
|
|
f0efa89484 | ||
|
|
45037a39aa | ||
|
|
31336d63ae | ||
|
|
2c39a4381a | ||
|
|
532624bafe | ||
|
|
8469918306 | ||
|
|
9646a8b346 | ||
|
|
5e2a74fcc4 | ||
|
|
813d7585c7 | ||
|
|
ae55c1c144 | ||
|
|
1a6143feba | ||
|
|
b70a4227b3 | ||
|
|
7d82bc81a2 | ||
|
|
be449bdea1 | ||
|
|
798aaf0c0a | ||
|
|
6f2fca53ad | ||
|
|
cd4aed6690 | ||
|
|
fa601af722 | ||
|
|
303b3cf41c | ||
|
|
fc535aa086 | ||
|
|
cd33795903 | ||
|
|
c9d233d34a | ||
|
|
bd192d5387 | ||
|
|
4ac7a087c6 | ||
|
|
2d5039184e | ||
|
|
b1bbaebb17 | ||
|
|
8f6997cbde | ||
|
|
e18ecaf108 | ||
|
|
fe67ba6d2b | ||
|
|
e39e6c537e | ||
|
|
4e4a899306 | ||
|
|
9a78db6e59 | ||
|
|
6475600afa | ||
|
|
e450888b15 | ||
|
|
23522a66d1 | ||
|
|
116462a512 | ||
|
|
217e033120 | ||
|
|
259ac2dd77 | ||
|
|
4ebf001d37 | ||
|
|
5e326014cd | ||
|
|
0b0bbffa35 | ||
|
|
2b35432fcc | ||
|
|
ef8a2bc4fc | ||
|
|
96d235d9a3 | ||
|
|
eaf51b62b9 | ||
|
|
80994a123e | ||
|
|
b1cd033c27 | ||
|
|
268867311e | ||
|
|
6840f80d21 | ||
|
|
cac6876734 | ||
|
|
753011c8db | ||
|
|
2774dc390a | ||
|
|
eb4534f735 | ||
|
|
efb957039d | ||
|
|
fe82ddda46 | ||
|
|
94af496ac4 | ||
|
|
6f17c2f140 | ||
|
|
490c00fb30 | ||
|
|
2d0dbd87c3 | ||
|
|
13a5e16f35 | ||
|
|
3d54ba1b9e | ||
|
|
e051f904f2 | ||
|
|
f8d94a3849 | ||
|
|
ac691cae88 | ||
|
|
43d0d75688 | ||
|
|
77f34915ce | ||
|
|
72b8993164 | ||
|
|
6b9bd96c06 | ||
|
|
6532f737eb | ||
|
|
928ff54388 | ||
|
|
95c94bf658 | ||
|
|
7f295939d0 | ||
|
|
aa27db6986 | ||
|
|
4ce5fa3ea9 | ||
|
|
ffa7c13117 | ||
|
|
fbca7a83fc | ||
|
|
870bacd689 | ||
|
|
d9f39cc99b | ||
|
|
f2e6d235f2 | ||
|
|
baa220c1af | ||
|
|
cabef4732d | ||
|
|
cab90bf98a | ||
|
|
ab449cce73 | ||
|
|
b541537c66 | ||
|
|
285e998fae | ||
|
|
c503930b8d | ||
|
|
5c6859e537 | ||
|
|
4e376a2f1a | ||
|
|
edd608aa76 | ||
|
|
88d536eb3b | ||
|
|
d567659bf4 | ||
|
|
e0558ae541 | ||
|
|
034f6378da | ||
|
|
af129c499e | ||
|
|
8b4809a898 | ||
|
|
88d14e96ca | ||
|
|
04d1491a6b | ||
|
|
de16ddd5b4 | ||
|
|
27751df6ec | ||
|
|
cf02eb11f6 | ||
|
|
22b8d387bc | ||
|
|
bfd89c8078 | ||
|
|
223c48e6b5 | ||
|
|
7bb7550e23 | ||
|
|
adf00f5b2e | ||
|
|
0844c4fdb2 | ||
|
|
38cabc4fdb | ||
|
|
ec340e3e33 | ||
|
|
f44f512f24 | ||
|
|
ce0e2cc017 | ||
|
|
b082832220 | ||
|
|
1e5e0f9a26 | ||
|
|
ac3ae8f775 | ||
|
|
a51fd91db2 | ||
|
|
d300cf4d84 | ||
|
|
a9d0a85842 | ||
|
|
81da4fc995 | ||
|
|
b6ca1be1cd | ||
|
|
20d67917c4 | ||
|
|
915b10052c | ||
|
|
d3516810a7 | ||
|
|
68af9a222e | ||
|
|
58c3bdc1a4 | ||
|
|
72dec6cfec | ||
|
|
8dc9f4330c | ||
|
|
c77f77a1ce | ||
|
|
2966ef6661 | ||
|
|
93c53424c8 | ||
|
|
4a2812c5e8 | ||
|
|
4852a4930c | ||
|
|
b555ca5baa | ||
|
|
4a6eaf1b95 | ||
|
|
a8bc40fe4e | ||
|
|
1b9e26a287 | ||
|
|
9f24645a5b | ||
|
|
441a957d57 | ||
|
|
adc0edc44b | ||
|
|
4836154cef | ||
|
|
0058e87ed5 | ||
|
|
23903306a7 | ||
|
|
49b9926d5a | ||
|
|
6c50d2ee7d | ||
|
|
9e8615ae1d | ||
|
|
bb51c20c8b | ||
|
|
a84af986fd | ||
|
|
3ab3be1b6e | ||
|
|
3ceb2bcbb9 | ||
|
|
2457a31948 | ||
|
|
9e1e318691 | ||
|
|
e1132ecbe6 | ||
|
|
ccb92f1a8a | ||
|
|
8526fa97ce | ||
|
|
f85c29aad8 | ||
|
|
4677f733b2 | ||
|
|
e82d2dc634 | ||
|
|
b56f1e5185 | ||
|
|
c7c942861a | ||
|
|
a50fac0e63 | ||
|
|
e0f56897d5 | ||
|
|
c7dbde9f3f | ||
|
|
8fd89d6b93 | ||
|
|
632e951e14 | ||
|
|
a3a2d200fa | ||
|
|
4c2ca97d6d | ||
|
|
11f2464a22 | ||
|
|
291075b12f | ||
|
|
282939c6fe | ||
|
|
fef1fc0d32 | ||
|
|
dc6da007ad | ||
|
|
7be8993f94 | ||
|
|
bad4c8967b | ||
|
|
4dbac041f1 | ||
|
|
dd344b65f2 | ||
|
|
5c25c7bbfa | ||
|
|
a6d9ccf66b | ||
|
|
89ba66e071 | ||
|
|
85631150ce | ||
|
|
3654bd1b56 | ||
|
|
237edbc9d8 | ||
|
|
4127903183 | ||
|
|
2ffc20dc7c | ||
|
|
a2a446cb2f | ||
|
|
9304055df5 | ||
|
|
53e0c1b1a6 | ||
|
|
4efa1e8e4c | ||
|
|
ecba113125 | ||
|
|
350c536f6c | ||
|
|
a33eb9881c | ||
|
|
bbe8aa073e | ||
|
|
14521b418e | ||
|
|
73982c65d2 | ||
|
|
2eb94acb95 | ||
|
|
6a80fb3482 | ||
|
|
26d4c80049 | ||
|
|
3974f30ed4 | ||
|
|
44c246dbf2 | ||
|
|
ef07903a51 | ||
|
|
a7dc45997f | ||
|
|
583c2e2f09 | ||
|
|
90cce2ae3a | ||
|
|
775dc07eb5 | ||
|
|
a652db18bd | ||
|
|
48f3feed59 | ||
|
|
4ddb3fbbf4 | ||
|
|
cc872ebc19 | ||
|
|
ba46006896 | ||
|
|
0b7e0638a9 | ||
|
|
be49b01952 | ||
|
|
8d0c1d5495 | ||
|
|
2769a9ab0b | ||
|
|
8ea5b5bbd0 | ||
|
|
0ce49cb7ed | ||
|
|
d802dfe86a | ||
|
|
aabc0c08a1 | ||
|
|
476addb9c1 | ||
|
|
37d7a198d5 | ||
|
|
16fe0c9be3 | ||
|
|
f88ff705a4 | ||
|
|
e83550f511 | ||
|
|
fde31f0988 | ||
|
|
d3090ac3f9 | ||
|
|
2cf26d4fb7 | ||
|
|
f470a131a6 | ||
|
|
04b20b7ed2 | ||
|
|
ff4f4abe4b | ||
|
|
f4703aee2f | ||
|
|
4c485994db | ||
|
|
a921ee7b52 | ||
|
|
f6d4a25f68 | ||
|
|
2dfd2c642d | ||
|
|
a2072a1fd0 | ||
|
|
03fea9722c | ||
|
|
a44a8cef99 | ||
|
|
97ad165a63 | ||
|
|
a508e73a8d | ||
|
|
32f966b239 | ||
|
|
60a43561e2 | ||
|
|
a91b7d461d | ||
|
|
8755c44d40 | ||
|
|
5dd1cb0614 | ||
|
|
b34bee45ca | ||
|
|
e22fb3e7bc | ||
|
|
6ea51f3cd7 | ||
|
|
8e9f0a73d0 | ||
|
|
80fbcdf2f2 | ||
|
|
0fd9f64287 | ||
|
|
b6175ec792 | ||
|
|
1ee7f92ce4 | ||
|
|
3fd65fb7d8 | ||
|
|
ebcafe73b3 | ||
|
|
8274bee963 | ||
|
|
60aa975610 | ||
|
|
28a9108257 | ||
|
|
d1b0b08ba0 | ||
|
|
cc7fc20251 | ||
|
|
5ab751f5d0 | ||
|
|
fb1ce5fd5b | ||
|
|
fd8ea204c0 | ||
|
|
b86674174a | ||
|
|
69994f0114 | ||
|
|
879c6c5711 | ||
|
|
18f044f19d | ||
|
|
d7b54eb835 | ||
|
|
5eafb69bdb | ||
|
|
a086e99bae | ||
|
|
62056a644f | ||
|
|
b2362bf51c | ||
|
|
022099266e | ||
|
|
870cea2aea | ||
|
|
04c10e021c | ||
|
|
d712a4e800 | ||
|
|
d9f989c8c8 | ||
|
|
90bb87b40e | ||
|
|
025fa762f6 | ||
|
|
ac510ab6a4 | ||
|
|
65b286ca35 | ||
|
|
cc5c53454a | ||
|
|
f7874cad29 | ||
|
|
84e71e1c50 | ||
|
|
88bb054e1d | ||
|
|
b054fbaebd | ||
|
|
53e3c225ee | ||
|
|
50a53d4eec | ||
|
|
6bd1ed034a | ||
|
|
fa491ed910 | ||
|
|
66a1e3df69 | ||
|
|
28497e7ee4 | ||
|
|
87c7f403a9 | ||
|
|
1a2c3acb3b | ||
|
|
b54d752783 | ||
|
|
b1328430c9 | ||
|
|
34efa74a59 | ||
|
|
794d08a728 | ||
|
|
0abc999c4d | ||
|
|
3e65062be2 | ||
|
|
45ffb16c2a | ||
|
|
0b8b0b7c86 | ||
|
|
053bf49bd2 | ||
|
|
8b08dfed38 | ||
|
|
ba3a3553dc | ||
|
|
6a26104724 | ||
|
|
8b35b89f4d | ||
|
|
31f9d4016d | ||
|
|
bb601731ea | ||
|
|
9a85172896 | ||
|
|
a0eb52bee1 | ||
|
|
6235a8d969 | ||
|
|
0d6a87ed7a | ||
|
|
b6241b3c89 | ||
|
|
1e14f8d4c7 | ||
|
|
bc5954fe2d | ||
|
|
02f6894af5 | ||
|
|
76576cd1e2 | ||
|
|
997672ba9a | ||
|
|
ec1f42a154 | ||
|
|
aa1c3bb46d | ||
|
|
95f0714ff8 | ||
|
|
c050619b36 | ||
|
|
58085dbbf6 | ||
|
|
546572da04 | ||
|
|
005536cc28 | ||
|
|
3d5b6aa3b0 | ||
|
|
f8d883355d | ||
|
|
c23df41d83 | ||
|
|
8e7b261984 | ||
|
|
08e3d034ef | ||
|
|
2f869f89ff | ||
|
|
0f310a5001 | ||
|
|
ad1abee441 | ||
|
|
669709f80e | ||
|
|
ea409d0374 | ||
|
|
eaaa1a1fd4 | ||
|
|
78b4851da1 | ||
|
|
38c47803dd | ||
|
|
455663ba5e | ||
|
|
efb5d9a403 | ||
|
|
b1a5208e6b | ||
|
|
e6dacd92ec | ||
|
|
952b3a2c0f | ||
|
|
721f9bca84 | ||
|
|
ad4d5fabf8 | ||
|
|
aa860990ad | ||
|
|
0fa9135d9f | ||
|
|
8f0114a4dd | ||
|
|
5980c2977b | ||
|
|
19f8d71508 | ||
|
|
6f3bccd911 | ||
|
|
96f81a5c4a | ||
|
|
ca05d1b59c | ||
|
|
895dc5e530 | ||
|
|
bcc6ca6fd1 | ||
|
|
d538241a58 | ||
|
|
71b4b2ffa9 | ||
|
|
65b4a63f56 | ||
|
|
ecbee01f4b | ||
|
|
34fed76a35 | ||
|
|
0adf0cfde7 | ||
|
|
d6c456db85 | ||
|
|
36c88343d3 | ||
|
|
2360e5ce12 | ||
|
|
d445eac162 | ||
|
|
e0a6d20e20 | ||
|
|
3bb979b897 | ||
|
|
010daec776 | ||
|
|
e2b0ad8429 | ||
|
|
6eed95103a | ||
|
|
4eb2a165e8 | ||
|
|
b7fc1e45b5 | ||
|
|
3395a2fa9e | ||
|
|
a564a54e21 | ||
|
|
92186dc3d3 | ||
|
|
7bd6507eec | ||
|
|
d4cc810de3 | ||
|
|
bea7bbee1b | ||
|
|
fe64570d5d | ||
|
|
df6ad8d8d6 | ||
|
|
f8e1fc32de | ||
|
|
8c6d56f1f9 | ||
|
|
1841c8ee6a | ||
|
|
70793595fe | ||
|
|
28a8e1602d | ||
|
|
cce05b9138 | ||
|
|
72a7fd4dc7 | ||
|
|
9a6a476cf5 | ||
|
|
5d0efedd2d | ||
|
|
a426818a78 | ||
|
|
bfe413d8bd | ||
|
|
dbbd20646f | ||
|
|
b8fe4deb13 | ||
|
|
332a016e3c | ||
|
|
3738e4bdc0 | ||
|
|
3201d2dafa | ||
|
|
0a1e002ca4 | ||
|
|
9195bb64d4 | ||
|
|
11ee547a0e | ||
|
|
147de35d41 | ||
|
|
e16e9b91ae | ||
|
|
f9cde0646f | ||
|
|
195233ed5c | ||
|
|
048e654514 | ||
|
|
dfbd45142d | ||
|
|
ff681f7bfd | ||
|
|
60bbb64a81 | ||
|
|
c622f2bb4e | ||
|
|
cd59f13da6 | ||
|
|
11d718bf52 | ||
|
|
8e8846d876 | ||
|
|
7d562bb685 | ||
|
|
20ddd35669 | ||
|
|
063f88cd14 | ||
|
|
87b0b7cab9 | ||
|
|
70d0d9d4da | ||
|
|
4ae3bd71ea | ||
|
|
a9390665b8 | ||
|
|
fb7a6e3423 | ||
|
|
cc99e3f7de | ||
|
|
e6b40bb6ac | ||
|
|
f2fd1b8856 | ||
|
|
cb4efcf275 | ||
|
|
56a27d608a | ||
|
|
46c9075eab | ||
|
|
d95fa648e9 | ||
|
|
563ad213dc | ||
|
|
0121d7d731 | ||
|
|
8495fac1c5 | ||
|
|
38c349f751 | ||
|
|
542df800ab | ||
|
|
3e88b1cac5 | ||
|
|
d774b10afb | ||
|
|
b449b94393 | ||
|
|
a6cb9b08b2 | ||
|
|
440a3101d0 | ||
|
|
9778a5356b | ||
|
|
de7dcdbc54 | ||
|
|
070968abbc | ||
|
|
e97fc2aab5 | ||
|
|
a23ac24192 | ||
|
|
9ee14644a7 | ||
|
|
c576e114b9 | ||
|
|
639a7982ba | ||
|
|
5bbe189420 | ||
|
|
93ff159e32 | ||
|
|
8eb8a0a8e4 | ||
|
|
a4af638867 | ||
|
|
75a9a87ec2 | ||
|
|
b5ba011110 | ||
|
|
e9b763ff05 | ||
|
|
ac0bad2433 | ||
|
|
67d5c0a970 | ||
|
|
580896d615 | ||
|
|
11693c0faa | ||
|
|
26cd8eda4a | ||
|
|
8cd3f44040 | ||
|
|
2b30bfc349 | ||
|
|
8ec4dba599 | ||
|
|
1efec6572e | ||
|
|
781dd7a9bf | ||
|
|
beb8761b22 | ||
|
|
071c7de9fe | ||
|
|
3e7ebcd051 | ||
|
|
c67952fc5c | ||
|
|
7d7c24f915 | ||
|
|
0dc8c4d451 | ||
|
|
9cf4434ae2 | ||
|
|
8ccd8b6dbc | ||
|
|
b4f70aa2c8 | ||
|
|
f54a282ccc | ||
|
|
2a11bdc216 | ||
|
|
5cd4c3ed24 | ||
|
|
147a673063 | ||
|
|
9ce5827fc1 | ||
|
|
97f1c93674 | ||
|
|
e61ceaf1bd | ||
|
|
1118612249 | ||
|
|
a23db7b7c7 | ||
|
|
f6b6dff46a | ||
|
|
55b8ceac18 | ||
|
|
bcf448ee32 | ||
|
|
91e4da7ddb | ||
|
|
2873c18132 | ||
|
|
5dd0a8a63e | ||
|
|
2103dc41f5 | ||
|
|
2ef13230cb | ||
|
|
9479ac6dda | ||
|
|
4e878eae79 | ||
|
|
1e8e90a220 | ||
|
|
fe95c7dc34 | ||
|
|
6dae34d5da | ||
|
|
36c621c9df | ||
|
|
1717963e3d | ||
|
|
4646a1ffa9 | ||
|
|
0cb4eba002 | ||
|
|
5eba359b5d | ||
|
|
07ce7539a8 | ||
|
|
c21f848c1c | ||
|
|
84e94fda8b | ||
|
|
ebd6897b10 | ||
|
|
5ab8a9d32f | ||
|
|
cf8704ccdf | ||
|
|
5543c2f11f | ||
|
|
90ac37a683 | ||
|
|
dd893fd8a4 | ||
|
|
834f079918 | ||
|
|
2665c763df | ||
|
|
d1cfbd51b5 | ||
|
|
a3ba6b7a6a | ||
|
|
415d2e7cb7 | ||
|
|
af4451ec26 | ||
|
|
7c6562683a | ||
|
|
b6fa2f882c | ||
|
|
b6c5da337a | ||
|
|
9bc24e4876 | ||
|
|
4af55809e4 | ||
|
|
9c63fcf210 | ||
|
|
1f17fb5f89 | ||
|
|
584dbffe60 | ||
|
|
1c6f6f6972 | ||
|
|
da06a6e7e3 | ||
|
|
46e0937263 | ||
|
|
a1d6ad2610 | ||
|
|
5f3d63ed5b | ||
|
|
63b5748eb6 | ||
|
|
e2590430c5 | ||
|
|
ada9bc2b24 | ||
|
|
43da41e73e | ||
|
|
720fa45b56 | ||
|
|
7de874c438 | ||
|
|
2078c1a01a | ||
|
|
f7a8909372 | ||
|
|
250df30e64 | ||
|
|
b887cf7521 | ||
|
|
630e932091 | ||
|
|
cdabd67aa9 | ||
|
|
42e4f9d776 | ||
|
|
c111033595 | ||
|
|
26d1aaccdf | ||
|
|
ce95d2020f | ||
|
|
948c3b3aa9 | ||
|
|
a140e5311d | ||
|
|
7686ac3f2c | ||
|
|
54778134e4 | ||
|
|
c59baa06f0 | ||
|
|
c107303ade | ||
|
|
21b05afc99 | ||
|
|
eebcf7d4f5 | ||
|
|
8d169dfadd | ||
|
|
b12e334d83 | ||
|
|
7e36c4437e | ||
|
|
3c7a80a275 | ||
|
|
61e2a8108b | ||
|
|
abb14de7e0 | ||
|
|
ccd57e58f6 | ||
|
|
58d70db92e | ||
|
|
09f6fc22ed | ||
|
|
833ce37cb9 | ||
|
|
07e7018564 | ||
|
|
db70cd28b3 | ||
|
|
f6e2bfd464 | ||
|
|
1ae5dab8fb | ||
|
|
c6355e6a43 | ||
|
|
7d26eb61fe | ||
|
|
8613ce377f | ||
|
|
d6b94488a1 | ||
|
|
5d7b32d09f | ||
|
|
ed16d30ea8 | ||
|
|
6f7c70fbbc | ||
|
|
9ab5d30e3b | ||
|
|
3b44a3df76 | ||
|
|
572c29a4a3 | ||
|
|
9464c5430d | ||
|
|
a14aaaf23f | ||
|
|
c41c5a0ef2 | ||
|
|
c0c0283356 | ||
|
|
1bcd3e601a | ||
|
|
e721f85c83 | ||
|
|
7015c61b86 | ||
|
|
30ec0af109 | ||
|
|
f585b66af7 | ||
|
|
1b77c18430 | ||
|
|
bd0bd35771 | ||
|
|
368e3526ea | ||
|
|
1bbe407a4d | ||
|
|
513bc44421 | ||
|
|
4cc76d1576 | ||
|
|
6dc5c6ffc7 | ||
|
|
c69c79dd04 | ||
|
|
7fca24b14b | ||
|
|
2fa0d3dd5f | ||
|
|
3a8210c975 | ||
|
|
d69302202d | ||
|
|
227662d2ed | ||
|
|
3cb3d43913 | ||
|
|
c8a546c941 | ||
|
|
62fec1d28d | ||
|
|
ac98c73b04 | ||
|
|
a145654394 | ||
|
|
e8382ba290 | ||
|
|
fcb347d124 | ||
|
|
c331ef02f9 | ||
|
|
3a3f632bf0 | ||
|
|
68d7b6f871 | ||
|
|
c43a9d9068 | ||
|
|
64e80091db | ||
|
|
4f255ffbeb | ||
|
|
80d75b0eaf | ||
|
|
808c4020e6 | ||
|
|
149d6363b3 | ||
|
|
30eab8ca51 | ||
|
|
e49a82b06c | ||
|
|
45fdb48189 | ||
|
|
3fcc9677c4 | ||
|
|
1552bd9c8c | ||
|
|
939c0c5521 | ||
|
|
f0b9aefd2e | ||
|
|
11f3c51e8f | ||
|
|
1a329b98a3 | ||
|
|
29bcba9a90 | ||
|
|
1716dbb68a | ||
|
|
16ecfcf62c | ||
|
|
8bafc3692d | ||
|
|
8a75120568 | ||
|
|
3d96ee7423 | ||
|
|
b3dbdfa306 | ||
|
|
25bad589ba | ||
|
|
0b6cd75004 | ||
|
|
7872cc131a | ||
|
|
210aa4371c | ||
|
|
6f438bc8fb | ||
|
|
65840f1fd1 | ||
|
|
5fc492e5c6 | ||
|
|
abcd1e7d5a | ||
|
|
6429c378a2 | ||
|
|
d830f10417 | ||
|
|
3d6fcbf97b | ||
|
|
609be218c2 | ||
|
|
41084e57ca | ||
|
|
9afab85105 | ||
|
|
7822233964 | ||
|
|
022315089b | ||
|
|
faa5c14aee | ||
|
|
3dd886955b | ||
|
|
c2dbf21459 | ||
|
|
133eb220b9 | ||
|
|
c5796d9e39 | ||
|
|
d80f87554c | ||
|
|
c1d37470f6 | ||
|
|
9c695393b2 | ||
|
|
444024ea14 | ||
|
|
afcd933b4c | ||
|
|
ae0a6835bd | ||
|
|
f2f11be8ba | ||
|
|
e09eda9c7c | ||
|
|
c6877a414e | ||
|
|
a3eb91ffb1 | ||
|
|
12708473a6 | ||
|
|
9012f8cdb3 | ||
|
|
e26ee09586 | ||
|
|
7d09e51162 | ||
|
|
18ebde6960 | ||
|
|
b0c0e8d815 | ||
|
|
16502d7d15 | ||
|
|
ce05deece8 | ||
|
|
b77e2528e7 | ||
|
|
27f8cf6dfc | ||
|
|
f5aa7f64bd | ||
|
|
44254c4945 | ||
|
|
a9ea507c6a | ||
|
|
b137d5ec23 | ||
|
|
4792eee5d0 | ||
|
|
a84625eca6 | ||
|
|
19d3fd1185 | ||
|
|
a9be9bc7f5 | ||
|
|
e8b99d21e5 | ||
|
|
f6c57990ee | ||
|
|
370d7f7527 | ||
|
|
7d38692c4f | ||
|
|
a997d60304 | ||
|
|
ff8fb8cdb0 | ||
|
|
b915ca68f9 | ||
|
|
703fc264f0 | ||
|
|
19d92834ed | ||
|
|
9ade752fa7 | ||
|
|
e8a5f3026f | ||
|
|
2cac4a9c72 | ||
|
|
39e939a507 | ||
|
|
803005892c | ||
|
|
08cfdf909e | ||
|
|
434ce48016 | ||
|
|
10051e6916 | ||
|
|
d54cdf294b | ||
|
|
2e342d5d9b | ||
|
|
fe84071e80 | ||
|
|
044ca343ad | ||
|
|
f59ea9adb3 | ||
|
|
0cec4ba6bf | ||
|
|
14ca732a8f | ||
|
|
53c27c7722 | ||
|
|
c2f5b71dc9 | ||
|
|
6403257886 | ||
|
|
4031104404 | ||
|
|
9f9cac7402 | ||
|
|
06730bc905 | ||
|
|
0d181b596b | ||
|
|
b60f1b1d17 | ||
|
|
4d1706798f | ||
|
|
4ac48317cf | ||
|
|
ed8dbf4ac2 | ||
|
|
97f43e98e7 | ||
|
|
f76ef1fb67 | ||
|
|
3bcdfd5cb4 | ||
|
|
7ce518701b | ||
|
|
10272550b6 | ||
|
|
784f57f9eb | ||
|
|
24dee483e9 | ||
|
|
887e728b7d | ||
|
|
c03e0074c6 | ||
|
|
0d12c56738 | ||
|
|
880208c5b2 | ||
|
|
f4acbed214 | ||
|
|
910fc8522a | ||
|
|
6d90be0757 | ||
|
|
3d8bb1c27a | ||
|
|
1c8121a89e | ||
|
|
0db48a8109 | ||
|
|
5594741acb | ||
|
|
cbaeed7232 | ||
|
|
6d7587d327 | ||
|
|
9ee94b3d84 | ||
|
|
2c100371d2 | ||
|
|
184ad46a27 | ||
|
|
74d35416a2 | ||
|
|
2fff6a4b0e | ||
|
|
bf43b49a20 | ||
|
|
6ad9bd8022 | ||
|
|
ec5ac82cfe | ||
|
|
76ac228e44 | ||
|
|
b0828267bc | ||
|
|
9c10cb4684 | ||
|
|
3d8c4ce526 | ||
|
|
ec420c62d9 | ||
|
|
5d44f00201 | ||
|
|
cddeb939ed | ||
|
|
45cf0cf3ec | ||
|
|
ff7729e2bc | ||
|
|
7dcda6a370 | ||
|
|
dde277d86a | ||
|
|
a5146c7297 | ||
|
|
69abefc936 | ||
|
|
dad2317e6e | ||
|
|
22d8aa37e0 | ||
|
|
160d2a30db | ||
|
|
cb1842cb52 | ||
|
|
6ced1ba615 | ||
|
|
54e46e199c | ||
|
|
ca8196a4dc | ||
|
|
52707f9590 | ||
|
|
be2369ed14 | ||
|
|
76af68e8ab | ||
|
|
421fccb12a | ||
|
|
173f12db68 | ||
|
|
983e3ae8c5 | ||
|
|
62213e529c | ||
|
|
ea3b6914cc | ||
|
|
c8cd35e640 | ||
|
|
706f5e1a5d | ||
|
|
db7d772d3e | ||
|
|
64761bc786 | ||
|
|
9980568f42 | ||
|
|
05a1910968 | ||
|
|
a5217dd10e | ||
|
|
0d7ba0ec61 | ||
|
|
b2f0ca8a43 | ||
|
|
a00bb13766 | ||
|
|
7c7923761d | ||
|
|
e9b69bc757 | ||
|
|
2aaae10fe8 | ||
|
|
6bd75ab840 | ||
|
|
b8f7d94ef1 | ||
|
|
d4cd079b9c | ||
|
|
013770a7e2 | ||
|
|
f4c26ddb6a | ||
|
|
9f77434c3a | ||
|
|
989ff585b1 | ||
|
|
f589c1c024 | ||
|
|
e86f3b9144 | ||
|
|
79a84d20f2 | ||
|
|
20801181b2 | ||
|
|
3723c52057 | ||
|
|
0e78911ce3 | ||
|
|
b7a5fb1794 | ||
|
|
6f4f3c79b6 | ||
|
|
593df2f18a | ||
|
|
fde82cd4e0 | ||
|
|
801626de19 | ||
|
|
92f53b0e4d | ||
|
|
d419d975b3 | ||
|
|
b5739b3a97 | ||
|
|
86d4488cc7 | ||
|
|
ce1cb29d20 | ||
|
|
526eca191a | ||
|
|
79beebdabe | ||
|
|
39abde5db5 | ||
|
|
fb962a281e | ||
|
|
2f6e61d5fb | ||
|
|
ea9ede15e3 | ||
|
|
4768c9cdbb | ||
|
|
d6b1162a63 | ||
|
|
486591f9d1 | ||
|
|
458ec524e1 | ||
|
|
a40b55d5c8 | ||
|
|
5aa5ecb29b | ||
|
|
20dd0670ba | ||
|
|
43e1e1cd1a | ||
|
|
55b7c1c364 | ||
|
|
190ecd652a | ||
|
|
2677c27b08 | ||
|
|
c938166520 | ||
|
|
50d564b4d4 | ||
|
|
29d21bea18 | ||
|
|
b734bc37eb | ||
|
|
2c123051bb | ||
|
|
b82fa8d959 | ||
|
|
c84aa663a1 | ||
|
|
7db43ae0ed | ||
|
|
ae58d84429 | ||
|
|
eb993c28ca | ||
|
|
2830504f4f | ||
|
|
2a5e68ea89 | ||
|
|
c06f726614 | ||
|
|
52909688cf | ||
|
|
c1474b9507 | ||
|
|
708e9cf294 | ||
|
|
70778f2cb6 | ||
|
|
bdb411c6ca | ||
|
|
56ac132401 | ||
|
|
44137c7932 | ||
|
|
19a754dc8c | ||
|
|
641351ee16 | ||
|
|
7b49d40bb0 | ||
|
|
3e5ba33e2d | ||
|
|
9a9013ac25 | ||
|
|
59693250c4 | ||
|
|
336b0b7d82 | ||
|
|
f22c690b1f | ||
|
|
05ec503eac | ||
|
|
4b8fd86f04 | ||
|
|
16cf5ee1c9 | ||
|
|
a7937ed49c | ||
|
|
4c0bae3649 | ||
|
|
4a7d62c8c3 | ||
|
|
d4a4b564ec | ||
|
|
5d4bceda20 | ||
|
|
42280e95bf | ||
|
|
b2ad1f68cc | ||
|
|
13e9a4d8f4 | ||
|
|
9c0d9784f6 | ||
|
|
91c879461e | ||
|
|
bda9fde4d8 | ||
|
|
0def60bf9d | ||
|
|
1665435040 | ||
|
|
aa86f697f6 | ||
|
|
e48747d95d | ||
|
|
0a72154cd2 | ||
|
|
3e6a354c4c | ||
|
|
f0b8aac325 | ||
|
|
ec3054e1f2 | ||
|
|
7c6414ebbd | ||
|
|
85705e105c | ||
|
|
874f6024e6 | ||
|
|
a03cdd7e83 | ||
|
|
f9155568c6 | ||
|
|
c0936824d4 | ||
|
|
57ddd7e928 | ||
|
|
868488b518 | ||
|
|
7f77a061dd | ||
|
|
2d16e1a777 | ||
|
|
2297bc4791 | ||
|
|
34a2d446e0 | ||
|
|
fdd91b2209 | ||
|
|
7ea4551b1b | ||
|
|
77bbbd868b | ||
|
|
3b91db110b | ||
|
|
ab9dfac24e | ||
|
|
5a07305dc8 | ||
|
|
56c0c67dff | ||
|
|
885184aa14 | ||
|
|
e0e67812de | ||
|
|
eb72e001a7 | ||
|
|
cdfa5f5d7b | ||
|
|
0c19d2518c | ||
|
|
e64b8a8f86 | ||
|
|
e2641a394d | ||
|
|
bd3dca96f6 | ||
|
|
3cd77a19ca | ||
|
|
e02affb5d0 | ||
|
|
24f9ae1f72 | ||
|
|
2bd70e1351 | ||
|
|
336124c3dc | ||
|
|
8e735d1eea | ||
|
|
aa9a60287d | ||
|
|
6736c1610c | ||
|
|
1cc8af2779 | ||
|
|
bfb118e42a | ||
|
|
3f0aa0648f | ||
|
|
a58e336d85 | ||
|
|
27435f0648 | ||
|
|
69e82e7383 | ||
|
|
b2daec2477 | ||
|
|
c605f81a09 | ||
|
|
d5b06bcf3b | ||
|
|
d5e6404b8b | ||
|
|
bc84fe1cf3 | ||
|
|
460aa295e0 | ||
|
|
143ff23c4f | ||
|
|
6195412005 | ||
|
|
4e120f34a5 | ||
|
|
14bcdcfcdd | ||
|
|
3c0194bb72 | ||
|
|
172f0ba12d | ||
|
|
4035543763 | ||
|
|
920579ba11 | ||
|
|
1ff573c649 | ||
|
|
7b5c551835 | ||
|
|
a5b2eb7962 | ||
|
|
78423c5899 | ||
|
|
2bcb8abf40 | ||
|
|
b32bf42763 | ||
|
|
61fb8fea10 | ||
|
|
c0a44b4b9b | ||
|
|
ef8741d23c | ||
|
|
56548f9a13 | ||
|
|
36000e5287 | ||
|
|
8cb15395d0 | ||
|
|
4ccda6d692 | ||
|
|
7390c3a8af | ||
|
|
e5e259030f | ||
|
|
9f4f16b55d | ||
|
|
e05922c428 | ||
|
|
71fb701168 | ||
|
|
b6bb734215 | ||
|
|
e7736324b4 | ||
|
|
e0e01e5a59 | ||
|
|
852b664e45 | ||
|
|
e6cdb68a88 | ||
|
|
349811f3da | ||
|
|
823785c53e | ||
|
|
1c0fd24a36 | ||
|
|
5c0b2f29b9 | ||
|
|
e446edc288 | ||
|
|
b5d152caf7 | ||
|
|
6f7dcf3f22 | ||
|
|
0cff279063 | ||
|
|
09ba856e39 | ||
|
|
1df033a1c5 | ||
|
|
3264ce04ee | ||
|
|
3b0d49e1c9 | ||
|
|
f6daff475f | ||
|
|
9d0d8280e9 | ||
|
|
cdfb83e0e3 | ||
|
|
02037971ed | ||
|
|
a5b01cf4e8 | ||
|
|
68c231e1b0 | ||
|
|
949eaf8ad4 | ||
|
|
950110ecb1 | ||
|
|
5f8e93d3b0 | ||
|
|
e4a7e18a0c | ||
|
|
8f5ffd94a2 | ||
|
|
c44b10de41 | ||
|
|
135cc036aa | ||
|
|
f6163b375f | ||
|
|
b2d73c50d3 | ||
|
|
834b7de33c | ||
|
|
debdd93e1b | ||
|
|
4e8ddedc8f | ||
|
|
751d503f54 | ||
|
|
b2e47dfde4 | ||
|
|
0af8201cc2 | ||
|
|
7717212912 | ||
|
|
ccb2b5d22c | ||
|
|
85174ed358 | ||
|
|
111d1d09d3 | ||
|
|
4f5a4c9bd5 | ||
|
|
8c62e337b0 | ||
|
|
51bcdb472b | ||
|
|
5ee185f420 | ||
|
|
fb739ac130 | ||
|
|
cdd91bed46 | ||
|
|
9defb83930 | ||
|
|
0f8facb49b | ||
|
|
d49d05bce6 | ||
|
|
1e2e6a4e33 | ||
|
|
5b39a48e22 | ||
|
|
2918836cef | ||
|
|
b900318d8d | ||
|
|
c58dc8f82f | ||
|
|
0ddacf929a | ||
|
|
a513e97464 | ||
|
|
03a56b3e56 | ||
|
|
18f67852be | ||
|
|
693aab0e95 | ||
|
|
ccd0f07c41 | ||
|
|
5865860ad6 | ||
|
|
bf56377865 | ||
|
|
e012d32e66 | ||
|
|
763797ab3c | ||
|
|
2cdd150723 | ||
|
|
d46b006f22 | ||
|
|
033263e696 | ||
|
|
eee5c71aff | ||
|
|
f1b8566ea2 | ||
|
|
d3f9b2a490 | ||
|
|
398d21696f | ||
|
|
99fbcac6b9 | ||
|
|
c23e387928 | ||
|
|
ef77d484f0 | ||
|
|
df7b9e7af6 | ||
|
|
f612f194be | ||
|
|
dfec172157 | ||
|
|
888182c16d | ||
|
|
d5ad450db6 | ||
|
|
b0274a553b | ||
|
|
e372a440c0 | ||
|
|
91bda5650c | ||
|
|
13962adcb5 | ||
|
|
221f1c2ca2 | ||
|
|
0e0b72714c | ||
|
|
3396d97399 | ||
|
|
c4fc231934 | ||
|
|
bac96e9f49 | ||
|
|
00505c9247 | ||
|
|
60ee571bd6 | ||
|
|
bdfe654aee | ||
|
|
32e013eb87 | ||
|
|
d03db1cd11 | ||
|
|
1dac7f4d05 | ||
|
|
ad01481b28 | ||
|
|
28ad7dc4a1 | ||
|
|
e40f0be7e3 | ||
|
|
f353258ff6 | ||
|
|
1754d6166c | ||
|
|
481871768b | ||
|
|
43d75c5f3b | ||
|
|
35e901a21e | ||
|
|
c62cc76fdb | ||
|
|
7bac857fdd | ||
|
|
ce406a732f | ||
|
|
a82eb0fc6d | ||
|
|
6f6dfa97a8 | ||
|
|
aa8a2fbde3 | ||
|
|
3471e2c59d | ||
|
|
37249c3a41 | ||
|
|
def69c3087 | ||
|
|
35aa363587 | ||
|
|
7eafb0f325 | ||
|
|
c9c7fcf411 | ||
|
|
4dba5750d4 | ||
|
|
398e3f423f | ||
|
|
281d4cedc7 | ||
|
|
c23f35ce2a | ||
|
|
0f4444e90b | ||
|
|
a98648bd8c | ||
|
|
4ee420f23e | ||
|
|
31dc1f4247 | ||
|
|
ec109b3540 | ||
|
|
5019fe75a7 | ||
|
|
00eaf20298 | ||
|
|
96009453e8 | ||
|
|
0da7057591 | ||
|
|
23f22bd53e | ||
|
|
86ff2c46b7 | ||
|
|
be8b2a1e30 | ||
|
|
0a2f677374 | ||
|
|
74be53a577 | ||
|
|
5e7cd528b0 | ||
|
|
60eab89f10 | ||
|
|
1cedcce3e9 | ||
|
|
61c4342736 | ||
|
|
216b198494 | ||
|
|
6e3a6e79e5 | ||
|
|
2cf44fb374 | ||
|
|
dab9658b3e | ||
|
|
3f9b9dfdee | ||
|
|
76229d3da1 | ||
|
|
6562caf6a2 | ||
|
|
d49eba2aed | ||
|
|
bb7929ec50 | ||
|
|
a1c0a5d0f2 | ||
|
|
1be0bf56a6 | ||
|
|
53c2798886 | ||
|
|
7271ebf23e | ||
|
|
b6e18f2f66 | ||
|
|
400ca043c7 | ||
|
|
d4ffc5ef32 | ||
|
|
1b1f143cd6 | ||
|
|
31b8eea041 | ||
|
|
903f4c16cc | ||
|
|
1998aee2a2 | ||
|
|
d4731b7050 | ||
|
|
8d2c24265d | ||
|
|
e559a7b872 | ||
|
|
af352740db | ||
|
|
4e35b4387c | ||
|
|
a8f99e7924 | ||
|
|
f8e916db46 | ||
|
|
e2a63bee59 | ||
|
|
4496e8ab8c | ||
|
|
c3318b49fd | ||
|
|
bfb169062b | ||
|
|
2b53a24c4f | ||
|
|
89e960f118 | ||
|
|
7d1ef9646d | ||
|
|
e7ce27a22c | ||
|
|
ad692ba1f3 | ||
|
|
c1283c5881 | ||
|
|
349a3aaf5b | ||
|
|
8fd44dd648 | ||
|
|
0d7cce1f08 | ||
|
|
b174aeaac9 | ||
|
|
a2f045451f | ||
|
|
02f994a715 | ||
|
|
f0ced0110f | ||
|
|
e9640b6831 | ||
|
|
fe4580eee1 | ||
|
|
1f32da93d7 | ||
|
|
e5c792d4e6 | ||
|
|
c3c7739811 | ||
|
|
513ac758da | ||
|
|
0a57b8cd60 | ||
|
|
4c32b6c201 | ||
|
|
a79b541bd2 | ||
|
|
1cf13c825f | ||
|
|
9d5c6df788 | ||
|
|
c1ab16dabb | ||
|
|
6f3a2cafff | ||
|
|
6b1a5f2200 | ||
|
|
0a998a29ff | ||
|
|
433b73192c | ||
|
|
215c75135b | ||
|
|
f50fd062e9 | ||
|
|
3d8f377561 | ||
|
|
9ec6e9f254 | ||
|
|
b8159cae5c | ||
|
|
5785a81bbf | ||
|
|
f71a1485f3 | ||
|
|
e76515fabd | ||
|
|
471edc0b9e | ||
|
|
293cae68bf | ||
|
|
1156252f92 | ||
|
|
29eda80f96 | ||
|
|
29bfaaa190 | ||
|
|
18853542a1 | ||
|
|
5b7a5046e6 | ||
|
|
0cb4814105 | ||
|
|
76f3498636 | ||
|
|
f836400094 | ||
|
|
841f370a96 | ||
|
|
c8262b2be6 | ||
|
|
0a8d0395e1 | ||
|
|
6bdfe18b67 | ||
|
|
78686a5487 | ||
|
|
bb3fa8855c | ||
|
|
caf8c01e85 | ||
|
|
e999182758 | ||
|
|
d9c41a0ffd | ||
|
|
1ef3600a07 | ||
|
|
e33ac6b3be | ||
|
|
f22717fe6c | ||
|
|
1c6eccbf84 | ||
|
|
f30ffef477 | ||
|
|
72158ad2cf | ||
|
|
ddd3ca4e5a | ||
|
|
d6b3b05e2e | ||
|
|
b88136fc4c | ||
|
|
789b43fc92 | ||
|
|
6489735491 | ||
|
|
fb9c5650ce | ||
|
|
94deff653b | ||
|
|
435f17195e | ||
|
|
8e8da82178 | ||
|
|
eb88f3d9b1 | ||
|
|
e9957b87cd | ||
|
|
f93baee594 | ||
|
|
ce7e3586da | ||
|
|
94ec5ff44a | ||
|
|
e54f09a218 | ||
|
|
069347c83d | ||
|
|
022f1766f9 | ||
|
|
3e20192ff2 | ||
|
|
ec520ceefd | ||
|
|
a374925bb7 | ||
|
|
d9650164b3 | ||
|
|
094b6a8b6a | ||
|
|
5da5cfa33e | ||
|
|
2dbadc6405 | ||
|
|
3b60784f27 | ||
|
|
72f7f0183b | ||
|
|
e22d75cd6e | ||
|
|
2488fff451 | ||
|
|
611f50fb76 | ||
|
|
eede4c33df | ||
|
|
32fd2ffab7 | ||
|
|
3586f7eaf0 | ||
|
|
287ebf730e | ||
|
|
77153b4efb | ||
|
|
dbcfd3df79 | ||
|
|
45271fd084 | ||
|
|
dbc12876ab | ||
|
|
aedfcaa168 | ||
|
|
4fd4a6888a | ||
|
|
dd730b09db | ||
|
|
c045301128 | ||
|
|
edcd5df1fe | ||
|
|
8f03732b25 | ||
|
|
138fe1b934 | ||
|
|
d46932369a | ||
|
|
476e0502ad | ||
|
|
ecb2b95b1c | ||
|
|
28b0b7316d | ||
|
|
57623228d2 | ||
|
|
29470107cd | ||
|
|
ef34ad2968 | ||
|
|
ebf0fe0df9 | ||
|
|
ba17b97e0a | ||
|
|
c8f62fc762 | ||
|
|
e5b72506c9 | ||
|
|
ef62fc7fe7 | ||
|
|
52195a0547 | ||
|
|
e5ba9f058f | ||
|
|
2ea0129ed8 | ||
|
|
980ee98ec9 | ||
|
|
8d76ad6c8e | ||
|
|
784c29c6c5 | ||
|
|
95ddb16768 | ||
|
|
5d39dde961 | ||
|
|
15c143bba9 | ||
|
|
6d522c9c1d | ||
|
|
45885f30c2 | ||
|
|
1ea12e705e | ||
|
|
a0ce95e155 | ||
|
|
abc751ae13 | ||
|
|
b6d06a9590 | ||
|
|
784e9406ae | ||
|
|
9e157ad2ec | ||
|
|
85e6e935c5 | ||
|
|
9a85060cde | ||
|
|
fb3a5ab6ee | ||
|
|
52585e8b31 | ||
|
|
3ad1df668e | ||
|
|
d5bc98fcec | ||
|
|
c10684ac3f | ||
|
|
f81e775954 | ||
|
|
e92a10c36f | ||
|
|
9b20d0a47f | ||
|
|
67fea90f3f | ||
|
|
ceda25398b | ||
|
|
285994a5ae | ||
|
|
e27e490c7e | ||
|
|
dbd864a2a6 | ||
|
|
dc98405114 | ||
|
|
7c37c6a8e9 | ||
|
|
4341671545 | ||
|
|
2bd72eb53d | ||
|
|
c35238e0a3 | ||
|
|
39b1801c63 | ||
|
|
98e5d82a34 | ||
|
|
96dde76b99 | ||
|
|
fb9d1ff00f | ||
|
|
c9053bf3d4 | ||
|
|
601b8e78c7 | ||
|
|
bc10563c98 | ||
|
|
5330a85133 | ||
|
|
95c2534a95 | ||
|
|
febd0e7059 | ||
|
|
984878ed7a | ||
|
|
de275780a9 | ||
|
|
b64dd9c13f | ||
|
|
fac113a275 | ||
|
|
89f05410d9 | ||
|
|
0d12792514 | ||
|
|
7aae77f0fd | ||
|
|
72cb0f7a69 | ||
|
|
d0e640deba | ||
|
|
f9ec7d3a0f | ||
|
|
75cd7f482d | ||
|
|
eb856b04fe | ||
|
|
cd9ad9e54b | ||
|
|
c30a3913b5 | ||
|
|
d620ada259 | ||
|
|
00ad88408d | ||
|
|
d62d25bdb4 | ||
|
|
ae6a5018dd | ||
|
|
c0c225b938 | ||
|
|
0059911261 | ||
|
|
e67157b5a2 | ||
|
|
2f668aba96 | ||
|
|
4a33436663 | ||
|
|
0eb1f1e5d0 | ||
|
|
9849c76d88 | ||
|
|
e541da93fe | ||
|
|
0fac349c62 | ||
|
|
83acbda569 | ||
|
|
1acda9ef9c | ||
|
|
20161c38f2 | ||
|
|
7b6394b75a | ||
|
|
d1a1fcc6f1 | ||
|
|
475869a612 |
14
.cvsignore
Normal file
14
.cvsignore
Normal file
@@ -0,0 +1,14 @@
|
||||
config.log
|
||||
Makefile
|
||||
libtool
|
||||
Makefile.in
|
||||
aclocal.m4
|
||||
configure
|
||||
config.h
|
||||
config.status
|
||||
curl-config
|
||||
autom4te.cache
|
||||
depcomp
|
||||
config.guess
|
||||
config.sub
|
||||
ltmain.sh
|
||||
56
BUGS
56
BUGS
@@ -1,56 +0,0 @@
|
||||
_ _ ____ _
|
||||
___| | | | _ \| |
|
||||
/ __| | | | |_) | |
|
||||
| (__| |_| | _ <| |___
|
||||
\___|\___/|_| \_\_____|
|
||||
|
||||
BUGS
|
||||
|
||||
Curl has grown substantially from that day, several years ago, when I
|
||||
started fiddling with it. When I write this, there are 16500 lines of source
|
||||
code, and by the time you read this it has probably grown even more.
|
||||
|
||||
Of course there are lots of bugs left. And lots of misfeatures.
|
||||
|
||||
To help us make curl the stable and solid product we want it to be, we need
|
||||
bug reports and bug fixes. If you can't fix a bug yourself and submit a fix
|
||||
for it, try to report an as detailed report as possible to the curl mailing
|
||||
list to allow one of us to have a go at a solution. You should also post
|
||||
your bug/problem at curl's bug tracking system over at
|
||||
|
||||
http://sourceforge.net/bugs/?group_id=976
|
||||
|
||||
When reporting a bug, you should include information that will help us
|
||||
understand what's wrong, what's expected and how to repeat it. You therefore
|
||||
need to supply your operating system's name and version number (uname -a
|
||||
under a unix is fine), what version of curl you're using (curl -v is fine),
|
||||
what URL you were working with and anything else you think matters.
|
||||
|
||||
If curl crashed, causing a core dump (in unix), there is hardly any use to
|
||||
send that huge file to anyone of us. Unless we have an exact same system
|
||||
setup as you, we can't do much with it. What we instead ask of you is to get
|
||||
a stack trace and send that (much smaller) output to us instead!
|
||||
|
||||
The address and how to subscribe to the mailing list is detailed in the
|
||||
README.curl file.
|
||||
|
||||
HOW TO GET A STACK TRACE with a common unix debugger
|
||||
====================================================
|
||||
|
||||
First, you must make sure that you compile all sources with -g and that you
|
||||
don't 'strip' the final executable.
|
||||
|
||||
Run the program until it bangs.
|
||||
|
||||
Run your debugger on the core file, like '<debugger> curl core'. <debugger>
|
||||
should be replaced with the name of your debugger, in most cases that will
|
||||
be 'gdb', but 'dbx' and others also occur.
|
||||
|
||||
When the debugger has finnished loading the core file and presents you a
|
||||
prompt, you can give the compiler instructions. Enter 'where' (without the
|
||||
quotes) and press return.
|
||||
|
||||
The list that is presented is the stack trace. If everything worked, it is
|
||||
supposed to contain the chaing of functions that were called when curl
|
||||
crashed.
|
||||
|
||||
786
CHANGES.0
Normal file
786
CHANGES.0
Normal file
@@ -0,0 +1,786 @@
|
||||
Version 5.3a (win32 only)
|
||||
|
||||
Troy Engel
|
||||
- Corrected a win32 bug in the environment variable part.
|
||||
|
||||
Version 5.3
|
||||
|
||||
Gilbert Ramirez Jr. (21 Dec 1998)
|
||||
- I have implemented the "quote" function of FTP clients. It allows you to
|
||||
send arbitrary commands to the remote FTP server. I chose the -Q/--quote
|
||||
command-line arguments.
|
||||
|
||||
You can have more than one quoted string, and curl will apply them in
|
||||
order. This is what I use for my MVS upload:
|
||||
|
||||
curl -B --crlf -Q "site lrecl=80" -Q "site blk=8000" -T file ftp://os390/test
|
||||
|
||||
Curl will send the two quoted "site" commands in the proper order.
|
||||
|
||||
- Made it compile smoothly on AIX.
|
||||
|
||||
Gilbert Ramirez Jr. (18 Dec 1998)
|
||||
- Brought an MVS patch: -3/--mvs, for ftp upload to the MVS ftp server.
|
||||
|
||||
Troy Engel (17 Dec 1998)
|
||||
- Brought a correction that fixes the win32 curl bug.
|
||||
|
||||
Daniel Stenberg
|
||||
- A bug, pointed out to me by Dr H. T. Leung, caused curl to crash on the -A
|
||||
flag on certain systems. Actually, all systems should've!
|
||||
|
||||
- Added a few defines to make directories/file names get build nicer (with _
|
||||
instead of . and \ instead of / in win32).
|
||||
|
||||
- steve <fisk at polar.bowdoin.edu> reported a weird bug that occured if the
|
||||
ftp server response line had a parenthesis on the line before the (size)
|
||||
info. I hope it works better now!
|
||||
|
||||
Version 5.2.1
|
||||
|
||||
Steven G. Johnson (Dec 14, 1998)
|
||||
- Brought a fix that corrected a crash in 5.2 due to bad treatment of the
|
||||
environment variables.
|
||||
|
||||
Version 5.2
|
||||
|
||||
Daniel Stenberg (Dec 14, 1998)
|
||||
- Rewrote the mkhelp script and now, the mkhelp.pl script generates the
|
||||
hugehelp.c file from the README *and* the man page file curl.1. By using
|
||||
both files, I no longer need to have double information in both the man
|
||||
page and the README as well. So, win32-users will only have the hugehelp.c
|
||||
file for all info, but then, they download the plain binary most times
|
||||
anyway.
|
||||
|
||||
- gcc2.8.1 with the -Wall flag complaints a lot on subscript has type `char'
|
||||
if I don't explicitly typecast the argument to isdigit() or isspace() to
|
||||
int. So I did to compile warning free with that too.
|
||||
|
||||
- Added checks for 'long double' and 'long long' in the configure script. I
|
||||
need those for the mprintf.c source to compile well on non long long
|
||||
comforming systems!
|
||||
|
||||
Version 5.1 (not publicly released)
|
||||
|
||||
Daniel Stenberg (Dec 10, 1998)
|
||||
- I got a request for a pre-compiled NT Alpha version. Anyone?
|
||||
|
||||
- Added Lynx/CERN www lib proxy environment variable support. That means curl
|
||||
now reads and understands the following environment variables:
|
||||
|
||||
HTTP_PROXY, HTTPS_PROXY, FTP_PROXY, GOPHER_PROXY
|
||||
|
||||
They should be set for protocol-specific proxies. General proxy should be
|
||||
set with
|
||||
|
||||
ALL_PROXY
|
||||
|
||||
And a comma-separated list of host names that shouldn't go through any
|
||||
proxy is set in (only an asterisk, '*' matches all hosts).
|
||||
|
||||
NO_PROXY
|
||||
|
||||
The usage of the -x/--proxy flag overrides the environment variables.
|
||||
|
||||
- Proxy can now be specified with a procotol:// prefix.
|
||||
|
||||
- Wrote the curl.1 man page.
|
||||
|
||||
- Introduced a whole new dynamic buffer system for all sprintf()s. It is
|
||||
based on the *printf() package by yours truly and Bjorn Reese. Hopefully,
|
||||
there aren't that many buffer overflow risks left now.
|
||||
|
||||
- Ah, I should mention I've compiled and built curl successfully under
|
||||
solaris 2.6 with gcc now, gcc 2.7.2 won't work but 2.8.1 did ok.
|
||||
|
||||
Oren Tirosh (Dec 3, 1998)
|
||||
- Brought two .spec files, to use when creating (Linux) Redhat style RPM
|
||||
packages. They're named curl.spec and curl-ssl.spec.
|
||||
|
||||
Troy Engel
|
||||
- Supplied the src/Makefile.vc6 for easy compiling with VC++ under Win32.
|
||||
|
||||
Version 5.0
|
||||
|
||||
Daniel Stenberg (Dec 1, 1998)
|
||||
- Not a single bug report in ages.
|
||||
- Corrected getpass.c and main.c to compile warning and error free with the
|
||||
Win32 VC++ crap.
|
||||
|
||||
Version 5.0 beta 24
|
||||
|
||||
Daniel Stenberg (Nov 20, 1998)
|
||||
|
||||
HOW TO BUILD A RELEASE ARCHIVE:
|
||||
|
||||
* Pre-requisite software:
|
||||
What To build what Reads data from
|
||||
==== ============= ===============
|
||||
GNU automake Makefile.in, aclocal.m4 configure.in
|
||||
GNU make(1) - " -
|
||||
GNU gcc(1) - " -
|
||||
GNU autoconf configure configure.in
|
||||
GNU autoheader(2) config.h.in configure.in, acconfig.h
|
||||
|
||||
* Make sure all files that should be part of the archive are put in FILES.
|
||||
|
||||
* Run './maketgz' and enter version number of the new to become archive.
|
||||
|
||||
maketgz does:
|
||||
|
||||
- Enters the newly created version number in url.h.
|
||||
- (If you don't have automake, this script will warn about that, but unless
|
||||
you have changed the Makefile.am files, that is nothing to care about.)
|
||||
If you have it, it'll run it.
|
||||
- If you have autoconf, the configure.in will be edited to get the newly
|
||||
created version number and autoconf will be run.
|
||||
- Creates a new directory named curl-<version>. (Actually, it uses the base
|
||||
name of the current directory up to the first '-'.)
|
||||
- Copies all files mentioned in FILES to the new directory. Saving
|
||||
permissions and directory structure.
|
||||
- Uses tar to create an archive of it all, named curl-<version>.tar.gz
|
||||
- gzips the archive
|
||||
- Removes the new directory and all its contents.
|
||||
|
||||
* When done, you have an archive stored in your directory named
|
||||
curl-<version>.tar.gz.
|
||||
|
||||
Done!
|
||||
|
||||
(1) They're required to make automake run properly.
|
||||
(2) It is distributed as a part of the GNU autoconf archive.
|
||||
|
||||
Daniel Stenberg (Nov 18, 1998)
|
||||
- I changed the TAG-system. If you ever used urlget() from this package in
|
||||
another product, you need to recompile with the new headers. I did this
|
||||
new stuff to better deal with different compilers and system with different
|
||||
variable sizes. I think it makes it a little more portable. This proves
|
||||
to compile warning free with the problematic IRIX compiler!
|
||||
- Win32 compiled with a silly error. Corrected now.
|
||||
- Brian Chaplin reported yet another problem in
|
||||
multiline FTP responses. I've tried to correct it. I mailed him a new
|
||||
version and I hope he gets back soon with positive feedback!
|
||||
- Improved the 'maketgz' to create a temporary directory tree which it makes
|
||||
an archive from instead of the previous renaming of the current one.
|
||||
- Mailing list opened (see README).
|
||||
- Made -v more verbose on the PASV section of ftp transfers. Now it tells
|
||||
host name and IP of the new host (and port number). I also added a section
|
||||
about PORT vs PASV in the README.
|
||||
|
||||
Version 5.0 beta 21
|
||||
|
||||
Angus Mackay (Nov 15, 1998)
|
||||
- Introduced automake stuff.
|
||||
|
||||
Daniel Stenberg (Nov 13, 1998)
|
||||
- Just made a successful GET of a document from an SSL-server using my own
|
||||
private certificate for authentication! The certificate has to be in PEM
|
||||
format. You do that the easiest way (although not *that* easy) by
|
||||
downloading the SSLyeay PKCS#12-patch by Dr Stephen N. Henson from his site
|
||||
at: http://www.drh-consultancy.demon.co.uk/. Using his tool, you can
|
||||
convert any modern Netscape or (even) MSIE certificate to PEM-format. Use
|
||||
it with 'curl -E <certificate:password> https://site.com'. If this isn't a
|
||||
cool feature, then I don't know what cool features look like! ;-)
|
||||
- Working slowly on telnet connections. #define TRY_TELNET to try it out.
|
||||
(curl -u user:passwd "telnet://host.com/cat .login" is one example) I do
|
||||
have problem to define how it should work. The prime purpose for this must
|
||||
be to get (8bit clean) files via telnet, and it really isn't that easy to
|
||||
get files this way. Still having problems with \n being converted to \r\n.
|
||||
|
||||
Angus Mackay (Nov 12, 1998)
|
||||
- Corrected another bug in the long parameter name parser.
|
||||
- Modified getpass.c (NOTE: see the special licensing in the top of that
|
||||
source file).
|
||||
|
||||
Daniel Stenberg (Nov 12, 1998)
|
||||
- We may have removed the silly warnings from url.c when compiled under IRIX.
|
||||
Thanks again to Bjorn Reese and Martin Staael.
|
||||
- Wrote formfind.pl which is a new perl script intended to help you find out
|
||||
how a FORM submission should be done. This needs a little more work to get
|
||||
really good.
|
||||
|
||||
Daniel Stenberg (Nov 11, 1998)
|
||||
- Made the HTTP header-checker accept white spaces before the HTTP/1.? line.
|
||||
Appearantly some proxies/sites add such at times (my test proxy did when I
|
||||
downloaded a gopher page with it)!
|
||||
- Moved the former -h to -M and made -h show the short help text instead. I
|
||||
had to enable a forced help text option. Now an even shorter help text will
|
||||
be presented when an unknown option and similar, is used.
|
||||
- stdcheaders.h didn't work with IRIX 6.4 native cc compiler. I hope my
|
||||
changes don't make other versions go nuts instead.
|
||||
|
||||
Daniel Stenberg (Nov 10, 1998)
|
||||
- Added a weird check in the configure script to check for the silly AIX
|
||||
warnings about my #define strcasecmp() stuff. I do that define to prevent
|
||||
me and other contributors to accidentaly use that function name instead
|
||||
of strequal()...
|
||||
- I bugfixed Angus's getpass.c very little.
|
||||
- Fixed the verbose flag names to getopt-style, i.e 'curl --loc' will be
|
||||
sufficient instead of --location as "loc" is a unique prefix. Also, anything
|
||||
after a '--' is treated as an URL. So if you do have a host with a weeeird
|
||||
name you can do 'curl -- -host.com'.
|
||||
- Another getopt-adjust; curl now accepts flags after the URL on the command
|
||||
line. 'curl www.foo.com -O' is perfectly valid.
|
||||
- Corrected the .curlrc parser so that strtok() is no longer used and I
|
||||
believe it works better. Even URLs can be specified in it now.
|
||||
|
||||
Angus Mackay (Nov 9, 1998)
|
||||
- Replaced getpass.c with a newly written one, not under GPL license
|
||||
- Changed OS to a #define in config.h instead of compiler flag
|
||||
- Makefile now uses -DHAVE_CONFIG_H
|
||||
|
||||
Daniel Stenberg (Nov 9, 1998)
|
||||
- Ok, I expanded the tgz-target to update the version string on each occation
|
||||
I build a release archive!
|
||||
- I reacted on Angus Mackay's initiative and remade the parameter parser to
|
||||
be more getopt compliant. Curl now supports "merged" flags as in
|
||||
curl -lsv ftp.site.com
|
||||
Do note that I had to move three short-names of the options. Parameters
|
||||
that needs an additional string such as -x must be stand-alone or the
|
||||
last in a merged sequence:
|
||||
curl -lsx my-proxy ftp.site.com
|
||||
is ok, but using the flags in a different order like '-lxs' would cause
|
||||
unexpected results (as the 's' option would be skipped).
|
||||
- I've changed the headers in all files that are subject to the MozPL
|
||||
license, as they are supposed to look like when conforming.
|
||||
- Made the configure script make the config.h. The former config.h is now
|
||||
setup.h.
|
||||
- The RESOURCES and TODO files have been added to the archive.
|
||||
|
||||
Angus Mackay (Nov 5, 1998)
|
||||
- Fixed getpass.c and various configure stuff
|
||||
|
||||
Daniel Stenberg (Nov 3, 1998)
|
||||
- Use -H/--header for custom HTTP-headers. Lets you pass on your own
|
||||
specified headers to the remote server. I wouldn't recommend trying to use
|
||||
a header with a defined usage according to standards. Use this flag once
|
||||
for every custom header you want to add.
|
||||
- Use -B/--ftp-ascii to force ftp to use ASCII mode when transfering files.
|
||||
- Corrected the 'getlinks.pl' script, I accidentally left my silly proxy
|
||||
usage in there! Since the introduction of the .curlrc file, it is easier to
|
||||
write scripts that use curl since proxies and stuff should be in the
|
||||
.curlrc file anyway.
|
||||
- Introducing the new -F flag for HTTP POST. It supports multipart/form-data
|
||||
which means it is gonna be possible to upload files etc through HTTP POST.
|
||||
Shiraz Kanga asked for the feature and my brother,
|
||||
Bj<42>rn Stenberg helped me design the user
|
||||
interface for this beast. This feature requires quite some docs,
|
||||
since it has turned out not only quite capable, but also complicated! :-)
|
||||
- A note here, since I've received mail about it. SSLeay versions prior to
|
||||
0.8 will *not* work with curl!
|
||||
- Wil Langford reported a bug that occurred since curl
|
||||
did not properly use CRLF when issuing ftp commands. I fixed it.
|
||||
- Rearranged the order config files are read. .curlrc is now *always* read
|
||||
first and before the command line flags. -K config files then act as
|
||||
additional config items.
|
||||
- Use -q AS THE FIRST OPTION specified to prevent .curlrc from being read.
|
||||
- You can now disable a proxy by using -x "". Useful if the .curlrc file
|
||||
specifies a proxy and you wanna fetch something without going through
|
||||
that.
|
||||
- I'm thinking of dropping the -p support. Its really not useful since ports
|
||||
could (and should?) be specified as :<port> appended on the host name
|
||||
instead, both in URLs and to proxy host names.
|
||||
- Martin Staael reports curl -L bugs under Windows NT
|
||||
(test with URL http://come.to/scsde). This bug is not present in this
|
||||
version anymore.
|
||||
- Added support for the weird FTP URL type= thing. You can download a file
|
||||
using ASCII transfer by appending ";type=A" to the right of it. Other
|
||||
available types are type=D for dir-list (NLST) and type=I for binary
|
||||
transfer. I can't say I've ever seen anyone use this kind of URL though!
|
||||
:-)
|
||||
- Troy Engel pointed out a bug in my getenv("HOME")
|
||||
usage for win32 systems. I introduce getenv.c to better cope with
|
||||
this. Mr Engel helps me with the details around that...
|
||||
- A little note to myself and others, I should make the win32-binary built
|
||||
with SSL support...
|
||||
- Ryan Nelson sent me comments about building curl
|
||||
with SSL under FreeBSD. See the Makefile for details. Using the configure
|
||||
script, it should work better and automatically now...
|
||||
- Cleaned up in the port number mess in the source. No longer stores and uses
|
||||
proxy port number separate from normal port number.
|
||||
- 'configure' script working. Confirmed compiles on:
|
||||
Host SSL Compiler
|
||||
SunOS 5.5 no gcc
|
||||
SunOS 5.5.1 yes gcc
|
||||
SunOS 5.6 no cc (with gcc, it has the "gcc include files" problem)
|
||||
SunOS 4.1.3 no gcc (without ANSI C headers)
|
||||
SunOS 4.1.2 no gcc (native compiler failed)
|
||||
Linux 2.0.18 no gcc
|
||||
Linux 2.0.32 yes gcc
|
||||
Linux 2.0.35 no gcc (with glibc)
|
||||
IRIX 6.2 no gcc (cc compiles generate a few warnings)
|
||||
IRIX 6.4 no cc (generated warnings though)
|
||||
Win32 no Borland
|
||||
OSF4.0 no ?
|
||||
|
||||
- Ooops. The 5beta (and 4.10) under win32 failed if the HOME variable wasn't
|
||||
set.
|
||||
- When using a proxy, curl now guesses and uses the protocol part in cases
|
||||
like:
|
||||
curl -x proxy:80 www.site.com
|
||||
Proxies normally go nuts unless http:// is prepended to the host name, so
|
||||
if curl is used like this, it guesses protocol and appends the protocol
|
||||
string before passing it to the proxy. It already did this when used
|
||||
without proxy.
|
||||
- Better port usage with SSL through proxy now. If you specified a different
|
||||
https-port when accessing through a proxy, it didn't use that number
|
||||
correctly. I also rewrote the code that parses the stuff read from the
|
||||
proxy when you wanna connect through it with SSL.
|
||||
- Bjorn Reese helped me work around one of the compiler
|
||||
warnings on IRIX native cc compiles.
|
||||
|
||||
Version 4.10 (Oct 26, 1998)
|
||||
Daniel Stenberg
|
||||
- John A. Bristor suggested a config file switch,
|
||||
and since I've been having that idea kind of in the background for a long
|
||||
time I rewrote the parameter parsing function a little and now I introduce
|
||||
the -K/--config flag. I also made curl *always* (unless -K is used) try to
|
||||
load the .curlrc file for command line parameters. The syntax for the
|
||||
config file is the standard command line argument style. Details in 'curl
|
||||
-h' or the README.
|
||||
- I removed the -k option. Keep-alive isn't really anything anyone would
|
||||
want to enable with curl anyway.
|
||||
- Martin Staael helped me add the 'irix' target. Now
|
||||
"make irix" should build curl successfully on non-gcc SGI machines.
|
||||
- Single switches now toggle behaviours. I.e if you use -v -v the second
|
||||
will switch off the verbose mode the first one enabled. This is so that
|
||||
you can disable a default setting a .curlrc file enables etc.
|
||||
|
||||
Version 4.9 (Oct 7, 1998)
|
||||
Daniel Stenberg
|
||||
- Martin Staael suggested curl would support cookies.
|
||||
I added -b/--cookie to enable free-text cookie data to be passed. There's
|
||||
also a little blurb about general cookie stuff in the README/help text.
|
||||
- dmh <dmh at jet.es> suggested HTTP resume capabilities. Although you could
|
||||
manually get curl to resume HTTP documents, I made the -c resume flag work
|
||||
for HTTP too (unless -r is used too, which would be very odd anyway).
|
||||
- Added checklinks.pl to the archive. It is a still experimental perl script
|
||||
that checks all links of a web page by using curl.
|
||||
- Rearranged the archive hierarchy a little. Build the executable in the
|
||||
src/ dir from now on!
|
||||
- Version 4.9 and hereafter, is no longer released under the GPL license.
|
||||
I have now updated the LEGAL file etc and now this is released using the
|
||||
Mozilla Public License to avoid the plague known as "the GPL virus". You
|
||||
must make the source available if you decide to change and/or redistribute
|
||||
curl, but if you decide to use curl within something else you do not need
|
||||
to offer the world the source to that too.
|
||||
- Curl did not like HTTP servers that sent no headers at all on a GET
|
||||
request. It is a violation of RFC2068 but appearantly some servers do
|
||||
that anyway. Thanks to Gordon Beaton for the report!
|
||||
- -L/--location was added after a suggestion from Martin Staael. This makes
|
||||
curl ATTEMPT to follow the Location: redirect if one is present in the HTTP
|
||||
headers. If -i or -I is used with this flag, you will see headers from all
|
||||
sites the Location: points to. Do note that the first server can point to a
|
||||
second that points to a third etc. It seems the Location: parameter (said
|
||||
to be an AbsoluteURI in RFC2068) isn't always absolute.. :-/ Anyway, I've
|
||||
made curl ATTEMPT to do the best it can to deal with the reality.
|
||||
- Added getlinks.pl to the archive. getlinks.pl selectively downloads
|
||||
files that a web page links to.
|
||||
|
||||
Version 4.8.4
|
||||
Daniel Stenberg
|
||||
- As Julian Romero Nieto reported, curl reported wrong version number.
|
||||
- As Teemu Yli-Elsila pointed out, the win32 version of 4.8 (and probably all
|
||||
other versions for win32) didn't work with binary files since I'm too used
|
||||
to the UNIX style fopen() where binary and text don't differ...
|
||||
- Ralph Beckmann brought me some changes that lets curl compile error and
|
||||
warning free with -Wall -pedantic with g++. I also took the opportunity to
|
||||
clean off some unused variables and similar.
|
||||
- Ralph Beckmann made me aware of a really odd bug now corrected. When curl
|
||||
read a set of headers from a HTTP server, divided into more than one read
|
||||
and the first read showed a full line *exactly* (i.e ending with a
|
||||
newline), curl did not behave well.
|
||||
|
||||
Version 4.8.3
|
||||
Daniel Stenberg
|
||||
- I was too quick to release 4.8.2 with too little testing. One of the
|
||||
changes is now reverted slightly to the 4.8.1 way since 4.8.2 couldn't
|
||||
upload files. I still think both problems corrected in 4.8.2 remain
|
||||
corrected. Reported by Julian Romero Nieto.
|
||||
|
||||
Version 4.8.2
|
||||
Daniel Stenberg
|
||||
- Bernhard Iselborn reported two FTP protocol errors curl did. They're now
|
||||
corrected. Both appeared when getting files from a MS FTP server! :-)
|
||||
|
||||
Version 4.8.1
|
||||
Daniel Stenberg
|
||||
- Added a last update of the progress meter when the transfer is done. The
|
||||
final output on the screen didn't have to be the final size transfered
|
||||
which made it sometimes look odd.
|
||||
- Thanks to David Long I got rid of a silly bug that happened if a HTTP-page
|
||||
had nothing but header. Appearantly Solaris deals with negative sizes in
|
||||
fwrite() calls a lot better than Linux does... =B-]
|
||||
|
||||
Version 4.8
|
||||
Daniel Stenberg
|
||||
- Continue FTP file transfer. -c is the switch. Note that you need to
|
||||
specify a file name if you wanna resume a download (you can't resume a
|
||||
download sent to stdout). Resuming upload may be limited by the server
|
||||
since curl is then using the non-RFC959 command SIZE to get the size of
|
||||
the target file before upload begins (to figure out which offset to
|
||||
use). Use -C to specify the offset yourself! -C is handy if you're doing
|
||||
the output to something else but a plain file or when you just want to get
|
||||
the end of a file.
|
||||
- recursiveftpget.pl now features a maximum recursive level argument.
|
||||
|
||||
Version 4.7
|
||||
Daniel Stenberg
|
||||
- Added support to abort a download if the speed is below a certain amount
|
||||
(speed-limit) bytes per second for a certain (speed-time) time.
|
||||
- Wrote a perl script 'recursiveftpget.pl' to recursively use curl to get a
|
||||
whole ftp directory tree. It is meant as an example of how curl can be
|
||||
used. I agree it isn't the wisest thing to do to make a separate new
|
||||
connection for each file and directory for this.
|
||||
|
||||
Version 4.6
|
||||
Daniel Stenberg
|
||||
- Added a first attempt to optionally parse the .netrc file for login user
|
||||
and password. If used with http, it enables user authentication. -n is
|
||||
the new switch.
|
||||
- Removed the extra newlines on the default user-agent string.
|
||||
- Corrected the missing ftp upload error messages when it failed without the
|
||||
verbose flag set. Gary W. Swearingen found it.
|
||||
- Now using alarm() to enable second-precision timeout even on the name
|
||||
resolving/connecting phase. The timeout is although reset after that first
|
||||
sequence. (This should be corrected.) Gary W. Swearingen reported.
|
||||
- Now spells "Unknown" properly, as in "Unknown option 'z'"... :-)
|
||||
- Added bug report email address in the README.
|
||||
- Added a "current speed" field to the progress meter. It shows the average
|
||||
speed the last 5 seconds. The other speed field shows the average speed of
|
||||
the entire transfer so far.
|
||||
|
||||
Version 4.5.1
|
||||
Linas Vepstas
|
||||
- SSL through proxy fix
|
||||
- Added -A to allow User-Agent: changes
|
||||
|
||||
Daniel Stenberg
|
||||
- Made the -A work when SSL-through-proxy.
|
||||
|
||||
Version 4.5
|
||||
Linas Vepstas
|
||||
- More SSL corrections
|
||||
- I've added a port to AIX.
|
||||
- running SSL through a proxy causes a chunk of code to be executred twice.
|
||||
one of those blocks needs to be deleted.
|
||||
|
||||
Daniel Stenberg
|
||||
- Made -i and -I work again
|
||||
|
||||
Version 4.4
|
||||
Linas Vepstas
|
||||
- -x can now also specify proxyport when used as in 'proxyhost:proxyport'
|
||||
- SSL fixes
|
||||
|
||||
Version 4.3
|
||||
Daniel Stenberg
|
||||
- Adjusted to compile under win32 (VisualC++ 5). The -P switch does not
|
||||
support network interface names in win32. I couldn't figure out how!
|
||||
|
||||
Version 4.2
|
||||
Linas Vepstas / Sampo Kellomaki
|
||||
- Added SSL / SSLeay support (https://)
|
||||
- Added the -T usage for HTTP POST.
|
||||
|
||||
Daniel Stenberg
|
||||
- Bugfixed the SSL implementation.
|
||||
- Made -P a lot better to use other IP addresses. It now accepts a following
|
||||
parameter that can be either
|
||||
interface - i.e "eth0" to specify which interface's IP address you
|
||||
want to use
|
||||
IP address - i.e "192.168.10.1" to specify exact IP number
|
||||
host name - i.e "my.host.domain" to specify machine
|
||||
"-" - (any single-letter string) to make it pick the machine's
|
||||
default
|
||||
- The Makefile is now ready to compile for solaris, sunos4 and linux right
|
||||
out of the box.
|
||||
- Better generated version string seen with 'curl -V'
|
||||
|
||||
Version 4.1
|
||||
Daniel Stenberg
|
||||
- The IP number returned by the ftp server as a reply to PASV does no longer
|
||||
have to DNS resolve. In fact, no IP-number-only addresses have to anymore.
|
||||
- Binds better to available port when -P is used.
|
||||
- Now LISTs ./ instead of / when used as in ftp://ftp.funet.fi/. The reason
|
||||
for this is that exactly that site, ftp.funet.fi, does not allow LIST /
|
||||
while LIST ./ is fine. Any objections?
|
||||
|
||||
Version 4 (1998-03-20)
|
||||
Daniel Stenberg
|
||||
- I took another huge step and changed both version number and project name!
|
||||
The reason for the new name is that there are just one too many programs
|
||||
named urlget already and this program already can a lot more than merely
|
||||
getting URLs, and the reason for the version number is that I did add the
|
||||
pretty big change in -P and since I changed name I wanted to start with
|
||||
something fresh!
|
||||
- The --style flags are working better now.
|
||||
- Listing directories with FTP often reported that the file transfer was
|
||||
incomplete. Wrong assumptions were too common for directories, why no
|
||||
size will be attempted to get compared on them from now on.
|
||||
- Implemented the -P flag that let's the ftp control issue a PORT command
|
||||
instead of the standard PASV.
|
||||
- -a for appending FTP uploads works.
|
||||
|
||||
***************************************************************************
|
||||
|
||||
Version 3.12 (14 March 1998)
|
||||
Daniel Stenberg
|
||||
- End-of-header tracking still lacked support for \r\n or just \n at the
|
||||
end of the last header line.
|
||||
Sergio Barresi
|
||||
- Added PROXY authentication.
|
||||
Rafael Sagula
|
||||
- Fixed some little bugs.
|
||||
|
||||
Version 3.11
|
||||
Daniel Stenberg
|
||||
- The header parsing was still not correct since the 3.2 modification...
|
||||
|
||||
Version 3.10
|
||||
Daniel Stenberg
|
||||
- 3.7 and 3.9 were simultaneously developed and merged into this version.
|
||||
- FTP upload did not work correctly since 3.2.
|
||||
|
||||
Version 3.9
|
||||
Rafael Sagula
|
||||
- Added the "-e <url> / --referer <url>" option where we can specify
|
||||
the referer page. Obviously, this is necessary only to fool the
|
||||
server, but...
|
||||
|
||||
Version 3.7
|
||||
Daniel Stenberg
|
||||
- Now checks the last error code sent from the ftp server after a file has
|
||||
been received or uploaded. Wasn't done previously.
|
||||
- When 'urlget <host>' is used without a 'protocol://' first in the host part,
|
||||
it now checks for host names starting with ftp or gopher and if it does,
|
||||
it uses that protocol by default instead of http.
|
||||
|
||||
Version 3.6
|
||||
Daniel Stenberg
|
||||
- Silly mistake made the POST bug. This has now also been tested to work with
|
||||
proxy.
|
||||
|
||||
Version 3.5
|
||||
Daniel Stenberg
|
||||
- Highly inspired by Rafael Sagula's changes to the 3.1 that added an almost
|
||||
functional POST, I applied his changes into this version and made them work.
|
||||
(It seems POST requires the Content-Type and Content-Length headers.) It is
|
||||
now usable with the -d switch.
|
||||
|
||||
Version 3.3 - 3.4
|
||||
Passed to avoid confusions
|
||||
|
||||
Version 3.2
|
||||
Daniel Stenberg
|
||||
- Major rewrite of two crucial parts of this code: upload and download.
|
||||
They are both now using a select() switch, that allows much better
|
||||
progress meter and time control.
|
||||
- alarm() usage removed completely
|
||||
- FTP get can now list directory contents if the path ends with a slash '/'.
|
||||
Urlget on a ftp-path that doesn't end with a slash means urlget will
|
||||
attempt getting it as a file name.
|
||||
- FTP directory view supports -l for "list-only" which lists the file names
|
||||
only.
|
||||
- All operations support -m for max time usage in seconds allowed.
|
||||
- FTP upload now allows the size of the uploaded file to be provided, and
|
||||
thus it can better check it actually uploaded the whole file. It also
|
||||
makes the progress meter for uploads much better!
|
||||
- Made the parameter parsing fail in cases like 'urlget -r 900' which
|
||||
previously tried to connect to the host named '900'.
|
||||
|
||||
Version 3.1
|
||||
Kjell Ericson
|
||||
- Pointed out how to correct the 3 warnings in win32-compiles.
|
||||
|
||||
Daniel Stenberg
|
||||
- Removed all calls to exit().
|
||||
- Made the short help text get written to stdout instead of stderr.
|
||||
- Made this file instead of keeping these comments in the source.
|
||||
- Made two callback hooks, that enable external programs to use urlget()
|
||||
easier and to grab the output/offer the input easier.
|
||||
- It is evident that Win32-compiles are painful. I watched the output from
|
||||
the Borland C++ v5 and it was awful. Just ignore all those warnings.
|
||||
|
||||
Version 3.0
|
||||
Daniel Stenberg
|
||||
- Added FTP upload capabilities. The name urlget gets a bit silly now
|
||||
when we can put too... =)
|
||||
- Restructured the source quite a lot.
|
||||
Changed the urlget() interface. This way, we will survive changes much
|
||||
better. New features can come and old can be removed without us needing
|
||||
to change the interface. I've written a small explanation in urlget.h
|
||||
that explains it.
|
||||
- New flags include -t, -T, -O and -h. The -h text is generated by the new
|
||||
mkhelp script.
|
||||
|
||||
Version 2.9
|
||||
Remco van Hooff
|
||||
- Added a fix to make it compile smoothly on Amiga using the SAS/C
|
||||
compiler.
|
||||
|
||||
Daniel Stenberg
|
||||
- Believe it or not, but the STUPID Novell web server seems to require
|
||||
that the Host: keyword is used, so well I use it and I (re-introduce) the
|
||||
urlget User-Agent:. I still have to check that this Host: usage works with
|
||||
proxies... 'Host:' is required for HTTP/1.1 GET according to RFC2068.
|
||||
|
||||
Version 2.8
|
||||
Rafael Sagula
|
||||
- some little modifications
|
||||
|
||||
Version 2.7
|
||||
Daniel Stenberg
|
||||
- Removed the -l option and introduced the -f option instead. Now I'll
|
||||
rewrite the former -l kludge in an external script that'll use urlget to
|
||||
fetch multipart files like that.
|
||||
- '-f' is introduced, it means Fail without output in case of HTTP server
|
||||
errors (return code >=300).
|
||||
- Added support for -r, ranges. Specify which part of a document you
|
||||
want, and only that part is returned. Only with HTTP/1.1-servers.
|
||||
- Split up the source in 3 parts. Now all pure URL functions are in
|
||||
urlget.c and stuff that deals with the stand-alone program is in main.c.
|
||||
- I took a few minutes and wrote an embryo of a README file to explain
|
||||
a few things.
|
||||
|
||||
Version 2.6
|
||||
Daniel Stenberg
|
||||
- Made the -l (loop) thing use the new CONF_FAILONERROR which makes
|
||||
urlget() return error code if non-successful. It also won't output anything
|
||||
then. Now finally removed the HTTP 1.0 and error 404 dependencies.
|
||||
- Added -I which uses the HEAD request to get the header only from a
|
||||
http-server.
|
||||
|
||||
Version 2.5
|
||||
Rafael Sagula
|
||||
- Made the progress meter use HHH:MM:SS instead of only seconds.
|
||||
|
||||
Version 2.4
|
||||
Daniel Stenberg
|
||||
- Added progress meter. It appears when downloading > BUFFER SIZE and
|
||||
mute is not selected. I found out that when downloading large files from
|
||||
really really slow sites, it is desirable to know the status of the
|
||||
download. Do note that some downloads are done unawaring of the size, which
|
||||
makes the progress meter less thrilling ;) If the output is sent to a tty,
|
||||
the progress meter is shut off.
|
||||
- Increased buffer size used for reading.
|
||||
- Added length checks in the user+passwd parsing.
|
||||
- Made it grok user+passwd for HTTP fetches. The trick is to base64
|
||||
encode the user+passwd and send an extra header line. Read chapter 11.1 in
|
||||
RFC2068 for details. I added it to be used just like the ftp one. To get a
|
||||
http document from a place that requires user and password, use an URL
|
||||
like:
|
||||
|
||||
http://user:passwd@www.site.to.leach/doc.html
|
||||
|
||||
I also added the -u flag, since WHEN USING A PROXY YOU CAN'T SPECIFY THE
|
||||
USER AND PASSWORD WITH HTTP LIKE THAT. The -u flag works for ftp too, but
|
||||
not if used with proxy. To do the same as the above one, you can invoke:
|
||||
|
||||
urlget -u user:passwd http://www.site.to.leach/doc.html
|
||||
|
||||
Version 2.3
|
||||
Rafael Sagula
|
||||
- Added "-o" option (output file)
|
||||
- Added URG_HTTP_NOT_FOUND return code.
|
||||
(Daniel's note:)
|
||||
Perhaps we should detect all kinds of errors and instead of writing that
|
||||
custom string for the particular 404-error, use the error text we actually
|
||||
get from the server. See further details in RFC2068 (HTTP 1.1
|
||||
definition). The current way also relies on a HTTP/1.0 reply, which newer
|
||||
servers might not do.
|
||||
- Looping mode ("-l" option). It's easier to get various split files.
|
||||
(Daniel's note:)
|
||||
Use it like 'urlget -l 1 http://from.this.site/file%d.html', which will
|
||||
make urlget to attempt to fetch all files named file1.html, file2.html etc
|
||||
until no more files are found. This is only a modification of the
|
||||
STAND_ALONE part, nothing in the urlget() function was modfified for this.
|
||||
Daniel Stenberg
|
||||
- Changed the -h to be -i instead. -h should be preserved to help use.
|
||||
- Bjorn Reese indicated that Borland _might_ use '_WIN32' instead of the
|
||||
VC++ WIN32 define and therefore I added a little fix for that.
|
||||
|
||||
Version 2.2
|
||||
Johan Andersson
|
||||
- The urlget function didn't set the path to url when using proxy.
|
||||
- Fixed bug with IMC proxy. Now using (almost) complete GET command.
|
||||
|
||||
Daniel Stenberg
|
||||
- Made it compile on Solaris. Had to reorganize the includes a bit.
|
||||
(so Win32, Linux, SunOS 4 and Solaris 2 compile fine.)
|
||||
- Made Johan's keepalive keyword optional with the -k flag (since it
|
||||
makes a lot of urlgets take a lot longer time).
|
||||
- Made a '-h' switch in case you want the HTTP-header in the output.
|
||||
|
||||
Version 2.1
|
||||
Daniel Stenberg and Kjell Ericson
|
||||
- Win32-compilable
|
||||
- No more global variables
|
||||
- Mute option (no output at all to stderr)
|
||||
- Full range of return codes from urlget(), which is now written to be a
|
||||
function for easy-to-use in [other] programs.
|
||||
- Define STAND_ALONE to compile the stand alone urlget program
|
||||
- Now compiles with gcc options -ansi -Wall -pedantic ;)
|
||||
|
||||
Version 2.0
|
||||
- Introducing ftp GET support. The FTP URL type is recognized and used.
|
||||
- Renamed the project to 'urlget'.
|
||||
- Supports the user+passwd in the FTP URL (otherwise it tries anonymous
|
||||
login with a weird email address as password).
|
||||
|
||||
Version 1.5
|
||||
Daniel Stenberg
|
||||
- The skip_header() crap messed it up big-time. By simply removing that
|
||||
one we can all of a sudden download anything ;)
|
||||
- No longer requires a trailing slash on the URLs.
|
||||
- If the given URL isn't prefixed with 'http://', HTTP is assumed and
|
||||
given a try!
|
||||
- 'void main()' is history.
|
||||
|
||||
Version 1.4
|
||||
Daniel Stenberg
|
||||
- The gopher source used the ppath variable instead of path which could
|
||||
lead to disaster.
|
||||
|
||||
Version 1.3
|
||||
Daniel Stenberg
|
||||
- Well, I added a lame text about the time it took to get the data. I also
|
||||
fought against Johan to prevent his -f option (to specify a file name
|
||||
that should be written instead of stdout)! =)
|
||||
- Made it write 'connection refused' for that particular connect()
|
||||
problem.
|
||||
- Renumbered the version. Let's not make silly 1.0.X versions, this is
|
||||
a plain 1.3 instead.
|
||||
|
||||
Version 1.2
|
||||
Johan Andersson
|
||||
- Discovered and fixed the problem with getting binary files. puts() is
|
||||
now replaced with fwrite(). (Daniel's note: this also fixed the buffer
|
||||
overwrite problem I found in the previous version.)
|
||||
|
||||
Rafael Sagula
|
||||
- Let "-p" before "-x".
|
||||
|
||||
Daniel Stenberg
|
||||
- Bugfixed the proxy usage. It should *NOT* use nor strip the port number
|
||||
from the URL but simply pass that information to the proxy. This also
|
||||
made the user/password fields possible to use in proxy [ftp-] URLs.
|
||||
(like in ftp://user:password@ftp.my.site:8021/README)
|
||||
|
||||
Johan Andersson
|
||||
- Implemented HTTP proxy support.
|
||||
- Receive byte counter added.
|
||||
|
||||
Bjorn Reese
|
||||
- Implemented URLs (and skipped the old syntax).
|
||||
- Output is written to stdout, so to achieve the above example, do:
|
||||
httpget http://143.54.10.6/info_logo.gif > test.gif
|
||||
|
||||
Version 1.1
|
||||
Daniel Stenberg
|
||||
- Adjusted it slightly to accept named hosts on the command line. We
|
||||
wouldn't wanna use IP numbers for the rest of our lifes, would we?
|
||||
|
||||
Version 1.0
|
||||
Rafael Sagula
|
||||
- Wrote the initial httpget, which started all this!
|
||||
835
CHANGES.1999
Normal file
835
CHANGES.1999
Normal file
@@ -0,0 +1,835 @@
|
||||
Daniel (28 December 1999):
|
||||
- Tim Verhoeven correctly identified that curl
|
||||
doesn't support URL formatted file names when getting ftp. Now, there's a
|
||||
problem with getting very weird file names off FTP servers. RFC 959 defines
|
||||
that the file name syntax to use should be the same as in the native OS of
|
||||
the server. Since we don't know the peer server system we currently just
|
||||
translate the URL syntax into plain letters. It is still better and with
|
||||
the solaris 2.6-supplied ftp server it works with spaces in the file names.
|
||||
|
||||
Daniel (27 December 1999):
|
||||
- When curl parsed cookies straight off a remote site, it corrupted the input
|
||||
data, which, if the downloaded headers were stored made very odd characters
|
||||
in the saved data. Correctly identified and reported by Paul Harrington.
|
||||
|
||||
Daniel (13 December 1999):
|
||||
- General cleanups in the library interface. There had been some bad kludges
|
||||
added during times of stress and I did my best to clean them off. It was
|
||||
both regarding the lib API as well as include file confusions.
|
||||
|
||||
Daniel (3 December 1999):
|
||||
- A small --stderr bug was reported by Eetu Ojanen...
|
||||
|
||||
- who also brought the suggestion of extending the -X flag to ftp list as
|
||||
well. So, now it is and the long option is now --request instead. It is
|
||||
only for ftp list for now (and the former http stuff too of course).
|
||||
|
||||
Lars J. Aas (24 November 1999):
|
||||
- Patched curl to compile and build under BeOS. Doesn't work yet though!
|
||||
|
||||
- Corrected the Makefile.am files to allow putting object files in
|
||||
different directories than the sources.
|
||||
|
||||
Version 6.3.1
|
||||
|
||||
Daniel (23 November 1999):
|
||||
- I've had this major disk crash. My good old trust-worthy source disk died
|
||||
along with the machine that hosted it. Thank goodness most of all the
|
||||
things I've done are either backed up elsewhere or stored in this CVS
|
||||
server!
|
||||
|
||||
- Michael S. Steuer pointed out a bug in the -F handling
|
||||
that made curl hang if you posted an empty variable such as '-F name='. It
|
||||
was one of those old bugs that never have worked properly...
|
||||
|
||||
- Jason Baietto pointed out a general flaw in the HTTP
|
||||
download. Curl didn't complain if it was prematurely aborted before the
|
||||
entire download was completed. It does now.
|
||||
|
||||
Daniel (19 November 1999):
|
||||
- Chris Maltby very accurately criticized the lack of
|
||||
return code checks on the fwrite() calls. I did a thorough check for all
|
||||
occurrences and corrected this.
|
||||
|
||||
Daniel (17 November 1999):
|
||||
- Paul Harrington pointed out that the -m/--max-time option
|
||||
doesn't work for the slow system calls like gethostbyname()... I don't have
|
||||
any good fix yet, just a slightly less bad one that makes curl exit hard
|
||||
when the timeout is reached.
|
||||
|
||||
- Bjorn Reese helped me point out a possible problem that might be the reason
|
||||
why Thomas Hurst experience problems in his Amiga version.
|
||||
|
||||
Daniel (12 November 1999):
|
||||
- I found a crash in the new cookie file parser. It crashed when you gave
|
||||
a plain http header file as input...
|
||||
|
||||
Version 6.3
|
||||
|
||||
Daniel (10 November 1999):
|
||||
- I kind of found out that the HTTP time-conditional GETs (-z) aren't always
|
||||
respected by the web server and the document is therefore sent in whole
|
||||
again, even though it doesn't match the requested condition. After reading
|
||||
section 13.3.4 of RFC 2616, I think I'm doing the right thing now when I do
|
||||
my own check as well. If curl thinks the condition isn't met, the transfer
|
||||
is aborted prematurely (after all the headers have been received).
|
||||
|
||||
- After comments from Robert Linden I also rewrote some parts of the man page
|
||||
to better describe how the -F works.
|
||||
|
||||
- Michael Anti put up a new curl download mirror in
|
||||
China: http://www.pshowing.com/curl/
|
||||
|
||||
- I added the list of download mirrors to the README file
|
||||
|
||||
- I did add more explanations to the man page
|
||||
|
||||
Daniel (8 November 1999):
|
||||
- I made the -b/--cookie option capable of reading netscape formatted cookie
|
||||
files as well as normal http-header files. It should be able to
|
||||
transparently figure out what kind of file it got as input.
|
||||
|
||||
Daniel (29 October 1999):
|
||||
- Another one of Sebastiaan van Erk's ideas (that has been requested before
|
||||
but I seem to have forgotten who it was), is to add support for ranges in
|
||||
FTP downloads. As usual, one request is just a request, when they're two
|
||||
it is a demand. I've added simple support for X-Y style fetches. X has to
|
||||
be the lower number, though you may omit one of the numbers. Use the -r/
|
||||
--range switch (previously HTTP-only).
|
||||
|
||||
- Sebastiaan van Erk suggested that curl should be
|
||||
able to show the file size of a specified file. I think this is a splendid
|
||||
idea and the -I flag is now working for FTP. It displays the file size in
|
||||
this manner:
|
||||
Content-Length: XXXX
|
||||
As it resembles normal headers, and leaves us the opportunity to add more
|
||||
info in that display if we can come up with more in the future! It also
|
||||
makes sense since if you access ftp through a HTTP proxy, you'd get the
|
||||
file size the same way.
|
||||
|
||||
I changed the order of the QUOTE command executions. They're now executed
|
||||
just after the login and before any other command. I made this to enable
|
||||
quote commands to run before the -I stuff is done too.
|
||||
|
||||
- I found out that -D/--dump-header and -V/--version weren't documented in
|
||||
the man page.
|
||||
|
||||
- Many HTTP/1.1 servers do not support ranges. Don't ask me why. I did add
|
||||
some text about this in the man page for the range option. The thread in
|
||||
the mailing list that started this was initiated by Michael Anti.
|
||||
|
||||
- I get reports about nroff crashes on solaris 2.6+ when displaying the curl
|
||||
man page. Switch to gnroff instead, it is reported to work(!). Adam Barclay
|
||||
reported and brought the suggestion.
|
||||
|
||||
- In a dialogue with Johannes G. Kristinsson we came
|
||||
up with the idea to let -H/--header specified headers replace the
|
||||
internally generated headers, if you happened to select to add a header
|
||||
that curl normally uses by itself. The advantage with this is not entirely
|
||||
obvious, but in Johannes' case it means that he can use another Host: than
|
||||
the one curl would set.
|
||||
|
||||
Daniel (27 October 1999):
|
||||
- Jongki Suwandi brought a nice patch for (yet another) crash when following
|
||||
a location:. This time you had to follow a https:// server's redirect to
|
||||
get the core.
|
||||
|
||||
Version 6.2
|
||||
|
||||
Daniel (21 October 1999):
|
||||
- I think I managed to remove the suspicious (nil) that has been seen just
|
||||
before the "Host:" in HTTP requests when -v was used.
|
||||
- I found out that if you followed a location: when using a proxy, without
|
||||
having specified http:// in the URL, the protocol part was added once again
|
||||
when moving to the next URL! (The protocol part has to be added to the
|
||||
URL when going through a proxy since it has no protocol-guessing system
|
||||
such as curl has.)
|
||||
- Benjamin Ritcey reported a core dump under solaris 2.6
|
||||
with OpenSSL 0.9.4. It turned out this was due to a bad free() in main.c
|
||||
that occurred after the download was done and completed.
|
||||
- Benjamin found ftp downloads to show the first line of the download meter
|
||||
to get written twice, and I removed that problem. It was introduced with
|
||||
the multiple URL support.
|
||||
- Dan Zitter correctly pointed out that curl 6.1 and earlier versions didn't
|
||||
honor RFC 2616 chapter 4 section 2, "Message Headers": "...Field names are
|
||||
case-insensitive..." HTTP header parsing assumed a certain casing. Dan
|
||||
also provided me with a patch that corrected this, which I took the liberty
|
||||
of editing slightly.
|
||||
- Dan Zitter also provided a nice patch for config.guess to better recognize
|
||||
the Mac OS X
|
||||
- Dan also corrected a minor problem in the lib/Makefile that caused linking
|
||||
to fail on OS X.
|
||||
|
||||
Daniel (19 October 1999):
|
||||
- Len Marinaccio came up with some problems with curl. Since Windows has a
|
||||
crippled shell, it can't redirect stderr and that causes trouble. I added
|
||||
--stderr today which allows the user to redirect the stderr stream to a
|
||||
file or stdout.
|
||||
|
||||
Daniel (18 October 1999):
|
||||
- The configure script now understands the '--without-ssl' flag, which now
|
||||
totally disable SSL/https support. Previously it wasn't possible to force
|
||||
the configure script to leave SSL alone. The previous functionality has
|
||||
been retained. Troy Engel helped test this new one.
|
||||
|
||||
Version 6.1
|
||||
|
||||
Daniel (17 October 1999):
|
||||
- I ifdef'ed or commented all the zlib stuff in the sources and configure
|
||||
script. It turned out we needed to mock more with zlib than I initially
|
||||
thought, to make it capable of downloading compressed HTTP documents and
|
||||
uncompress them on the fly. I didn't mean the zlib parts of curl to become
|
||||
more than minor so this means I halt the zlib expedition for now and wait
|
||||
until someone either writes the code or zlib gets updated and better
|
||||
adjusted for this kind of usage. I won't get into details here, but a
|
||||
short a summary is suitable:
|
||||
- zlib can't automatically detect whether to use zlib or gzip
|
||||
decompression methods.
|
||||
- zlib is very neat for reading gzipped files from a file descriptor,
|
||||
although not as nice for reading buffer-based data such as we would
|
||||
want it.
|
||||
- there are still some problems with the win32 version when reading from
|
||||
a file descriptor if that is a socket
|
||||
|
||||
Daniel (14 October 1999):
|
||||
- Moved the (external) include files for libcurl into a subdirectory named
|
||||
curl and adjusted all #include lines to use <curl/XXXX> to maintain a
|
||||
better name space and control of the headers. This has been requested.
|
||||
|
||||
Daniel (12 October 1999):
|
||||
- I modified the 'maketgz' script to perform a 'make' too before a release
|
||||
archive is put together in an attempt to make the time stamps better and
|
||||
hopefully avoid the double configure-running that use to occur.
|
||||
|
||||
Daniel (11 October 1999):
|
||||
- Applied J<>rn's patches that fixes zlib for mingw32 compiles as well as
|
||||
some other missing zlib #ifdef and more text on the multiple URL docs in
|
||||
the man page.
|
||||
|
||||
Version 6.1beta
|
||||
|
||||
Daniel (6 October 1999):
|
||||
- Douglas E. Wegscheid sent me a patch that made the exact same thing as I
|
||||
just made: the -d switch is now capable of reading post data from a named
|
||||
file or stdin. Use it similarly to the -F. To read the post data from a
|
||||
given file:
|
||||
|
||||
curl -d @path/to/filename www.postsite.com
|
||||
|
||||
or let curl read it out from stdin:
|
||||
|
||||
curl -d @- www.postit.com
|
||||
|
||||
J<>rn Hartroth (3 October 1999):
|
||||
- Brought some more patches for multiple URL functionality. The MIME
|
||||
separation ideas are almost scrapped now, and a custom separator is being
|
||||
used instead. This is still compile-time "flagged".
|
||||
|
||||
Daniel
|
||||
- Updated curl.1 with multiple URL info.
|
||||
|
||||
Daniel (30 September 1999):
|
||||
- Felix von Leitner brought openssl-check fixes for configure.in to work
|
||||
out-of-the-box when the openssl files are installed in the system default
|
||||
dirs.
|
||||
|
||||
Daniel (28 September 1999)
|
||||
- Added libz functionality. This should enable decompressing gzip, compress
|
||||
or deflate encoding HTTP documents. It also makes curl send an accept that
|
||||
it accepts that kind of encoding. Compressed contents usually shortens
|
||||
download time. I *need* someone to tell me a site that uses compressed HTTP
|
||||
documents so that I can test this out properly.
|
||||
|
||||
- As a result of the adding of zlib awareness, I changed the version string
|
||||
a little. I plan to add openldap version reporting in there too.
|
||||
|
||||
Daniel (17 September 1999)
|
||||
- Made the -F option allow stdin when specifying files. By using '-' instead
|
||||
of file name, the data will be read from stdin.
|
||||
|
||||
Version 6.0
|
||||
|
||||
Daniel (13 September 1999)
|
||||
- Added -X/--http-request <request> to enable any HTTP command to be sent.
|
||||
Do not that your server has to support the exact string you enter. This
|
||||
should possibly a string like DELETE or TRACE.
|
||||
|
||||
- Applied Douglas' mingw32-fixes for the makefiles.
|
||||
|
||||
Daniel (10 September 1999)
|
||||
- Douglas E. Wegscheid pointed out a problem. Curl didn't check the FTP
|
||||
servers return code properly after the --quote commands were issued. It
|
||||
took anything non 200 as an error, when all 2XX codes should be accepted as
|
||||
OK.
|
||||
|
||||
- Sending cookies to the same site in multiple lines like curl used to do
|
||||
turned out to be bad and breaking the cookie specs. Curl now sends all
|
||||
cookies on a single Cookie: line. Curl is not yet RFC 2109 compliant, but I
|
||||
doubt that many servers do use that syntax (yet).
|
||||
|
||||
Daniel (8 September 1999)
|
||||
- J<>rn helped me make sure it still compiles nicely with mingw32 under win32.
|
||||
|
||||
Daniel (7 September 1999)
|
||||
- FTP upload through proxy is now turned into a HTTP PUT. Requested by
|
||||
Stefan Kanthak.
|
||||
|
||||
- Added the ldap files to the .m32 makefile.
|
||||
|
||||
Daniel (3 September 1999)
|
||||
- Made cookie matching work while using HTTP proxy.
|
||||
|
||||
Bjorn Reese (31 August 1999)
|
||||
- Passed his ldap:// patch. Note that this requires the openldap shared
|
||||
library to be installed and that LD_LIBRARY_PATH points to the
|
||||
directory where the lib will be found when curl is run with a
|
||||
ldap:// URL.
|
||||
|
||||
J<>rn Hartroth (31 August 1999)
|
||||
- Made the Mingw32 makefiles into single files.
|
||||
- Made file:// work for Win32. The same code is now used for unix as well for
|
||||
performance reasons.
|
||||
|
||||
Douglas E. Wegscheid (30 August 1999)
|
||||
- Patched the Mingw32 makefiles for SSL builds.
|
||||
|
||||
Matthew Clarke (30 August 1999)
|
||||
- Made a cool patch for configure.in to allow --with-ssl to specify the
|
||||
root dir of the openssl installation, as in
|
||||
|
||||
./configure --with-ssl=/usr/ssl_here
|
||||
|
||||
- Corrected the 'reconf' script to work better with some shells.
|
||||
|
||||
J<>rn Hartroth (26 August 1999)
|
||||
- Fixed the Mingw32 makefiles in lib/ and corrected the file.c for win32
|
||||
compiles.
|
||||
|
||||
Version 5.11
|
||||
|
||||
Daniel (25 August 1999)
|
||||
- John Weismiller pointed out a bug in the header-line
|
||||
realloc() system in download.c.
|
||||
|
||||
- I added lib/file.[ch] to offer a first, simple, file:// support. It
|
||||
probably won't do much good on win32 system at this point, but I see it
|
||||
as a start.
|
||||
|
||||
- Made the release archives get a Makefile in the root dir, which can be
|
||||
used to start the compiling/building process easier. I haven't really
|
||||
changed any INSTALL text yet, I wanted to get some feed-back on this
|
||||
first.
|
||||
|
||||
Daniel (17 August 1999)
|
||||
- Another Location: bug. Curl didn't do proper relative locations if the
|
||||
original URL had cgi-parameters that contained a slash. Nusu's page
|
||||
again.
|
||||
|
||||
- Corrected the NO_PROXY usage. It is a list of substrings that if one of
|
||||
them matches the tail of the host name it should connect to, curl should
|
||||
not use a proxy to connect there. Pointed out to me by Douglas
|
||||
E. Wegscheid. I also changed the README text a little regarding this.
|
||||
|
||||
Daniel (16 August 1999)
|
||||
- Fixed a memory bug with http-servers that sent Location: to a Location:
|
||||
page. Nusu's page showed this too.
|
||||
|
||||
- Made cookies work a lot better. Setting the same cookie name several times
|
||||
used to add more cookies instead of replacing the former one which it
|
||||
should've. Nusu <nus at intergorj.ro> brought me an URL that made this
|
||||
painfully visible...
|
||||
|
||||
Troy (15 August 1999)
|
||||
- Brought new .spec files as well as a patch for configure.in that lets the
|
||||
configure script find the openssl files better, even when the include
|
||||
files are in /usr/include/openssl
|
||||
|
||||
Version 5.10
|
||||
|
||||
Daniel (13 August 1999)
|
||||
- SSL_CTX_set_default_passwd_cb() has been modified in the 0.9.4 version of
|
||||
OpenSSL. Now why couldn't they simply add a *new* function instead of
|
||||
modifying the parameters of an already existing function? This way, we get
|
||||
a compiler warning if compiling with 0.9.4 but not with earlier. So, I had
|
||||
to come up with a #if construction that deals with this...
|
||||
|
||||
- Made curl output the SSL version number get displayed properly with 0.9.4.
|
||||
|
||||
Troy (12 August 1999)
|
||||
- Added MingW32 (GCC-2.95) support under Win32. The INSTALL file was also
|
||||
a bit rearranged.
|
||||
|
||||
Daniel (12 August 1999)
|
||||
- I had to copy a good <arpa/telnet.h> include file into the curl source
|
||||
tree to enable the silly win32 systems to compile. The distribution rights
|
||||
allows us to do that as long as the file remains unmodified.
|
||||
|
||||
- I corrected a few minor things that made the compiler complain when
|
||||
-Wall -pedantic was used.
|
||||
|
||||
- I'm moving the official curl web page to http://curl.haxx.nu. I think it
|
||||
will make it easier to remember as it is a lot shorter and less cryptic.
|
||||
The old one still works and shows the same info.
|
||||
|
||||
Daniel (11 August 1999)
|
||||
- Albert Chin-A-Young mailed me another correction for NROFF in the
|
||||
configure.in that is supposed to be better for IRIX users.
|
||||
|
||||
Daniel (10 August 1999)
|
||||
- Albert Chin-A-Young helped me with some stupid Makefile things, as well as
|
||||
some fiddling with the getdate.c stuff that he had problems with under
|
||||
HP-UX v10. getdate.y will now be compiled into getdate.c if the appropriate
|
||||
yacc or bison is found by the configure script. Since this is slightly new,
|
||||
we need to test the output getdate.c with win32 systems to make sure it
|
||||
still compiles there.
|
||||
|
||||
Daniel (5 August 1999)
|
||||
- I've just setup a new mailing list with the intention to keep discussions
|
||||
around libcurl development in it. I mainly expect it to be for thoughts and
|
||||
brainstorming around a "next generation" library, rather than nitpicking
|
||||
about the current implementation or details in the current libcurl.
|
||||
|
||||
To join our happy bunch of future-looking geeks, enter 'subscribe
|
||||
<address>' in the body of a mail and send it to
|
||||
libcurl-request@listserv.fts.frontec.se. Curl bug reports, the usual curl
|
||||
talk and everything else should still be kept in this mailing list. I've
|
||||
started to archive this mailing list and have put the libcurl web page at
|
||||
www.fts.frontec.se/~dast/libcurl/.
|
||||
|
||||
- Stefan Kanthak contacted me regarding a few problems in the configure
|
||||
script which he discovered when trying to make curl compile and build under
|
||||
Siemens SINIX-Z V5.42B2004!
|
||||
|
||||
- Marcus Klein very accurately informed me that src/version.h was not present
|
||||
in the CVS repository. Oh, how silly...
|
||||
|
||||
- Linus Nielsen rewrote the telnet:// part and now curl offers limited telnet
|
||||
support. If you run curl like 'curl telnet://host' you'll get all output on
|
||||
the screen and curl will read input from stdin. You'll be able to login and
|
||||
run commands etc, but since the output is buffered, expect to get a little
|
||||
weird output.
|
||||
|
||||
This is still in its infancy and it might get changed. We need your
|
||||
feed-back and input in how this is best done.
|
||||
|
||||
WIN32 NOTE: I bet we'll get problems when trying to compile the current
|
||||
lib/telnet.c on win32, but I think we can sort them out in time.
|
||||
|
||||
- David Sanderson reported that FORCE_ALLOCA_H or HAVE_ALLOCA_H must be
|
||||
defined for getdate.c to compile properly on HP-UX 11.0. I updated the
|
||||
configure script to check for alloca.h which should make it.
|
||||
|
||||
Daniel (4 August 1999)
|
||||
- I finally got to understand Marcus Klein's ftp download resume problem,
|
||||
which turns out to be due to different outputs from different ftp
|
||||
servers. It makes ftp download resuming a little trickier, but I've made
|
||||
some modifications I really believe will work for most ftp servers and I do
|
||||
hope you report if you have problems with this!
|
||||
|
||||
- Added text about file transfer resuming to README.curl.
|
||||
|
||||
Daniel (2 August 1999)
|
||||
- Applied a progress-bar patch from Lars J. Aas. It offers
|
||||
a new styled progress bar enabled with -#/--progress-bar.
|
||||
|
||||
T. Yamada <tai at imasy.or.jp> (30 July 1999)
|
||||
- It breaks with segfault when 1) curl is using .netrc to obtain
|
||||
username/password (option '-n'), and 2) is automatically redirected to
|
||||
another location (option '-L').
|
||||
|
||||
There is a small bug in lib/url.c (block starting from line 641), which
|
||||
tries to take out username/password from user- supplied command-line
|
||||
argument ('-u' option). This block is never executed on first attempt since
|
||||
CONF_USERPWD bit isn't set at first, but curl later turns it on when it
|
||||
checks for CONF_NETRC bit. So when curl tries to redo everything due to
|
||||
redirection, it segfaults trying to access *data->userpwd.
|
||||
|
||||
Version 5.9.1
|
||||
|
||||
Daniel (30 July 1999)
|
||||
- Steve Walch pointed out that there is a memory leak in the formdata
|
||||
functions. I added a FormFree() function that is now used and supposed to
|
||||
correct this flaw.
|
||||
|
||||
- Mark Wotton reported:
|
||||
'curl -L https://www.cwa.com.au/' core dumps. I managed to cure this by
|
||||
correcting the cleanup procedure. The bug seems to be gone with my OpenSSL
|
||||
0.9.2b, although still occurs when I run the ~100 years old SSLeay 0.8.0. I
|
||||
don't know whether it is curl or SSLeay that is to blame for that.
|
||||
|
||||
- Marcus Klein:
|
||||
Reported an FTP upload resume bug that I really can't repeat nor understand.
|
||||
I leave it here so that it won't be forgotten.
|
||||
|
||||
Daniel (29 July 1999)
|
||||
- Costya Shulyupin suggested support for longer URLs when following Location:
|
||||
and I could only agree and fix it!
|
||||
|
||||
- Leigh Purdie found a problem in the upload/POST department. It turned out
|
||||
that http.c accidentaly cleared the pointer instead of the byte counter
|
||||
when supposed to.
|
||||
|
||||
- Costya Shulyupin pointed out a problem with port numbers and Location:. If
|
||||
you had a server at a non-standard port that redirected to an URL using a
|
||||
standard port number, curl still used that first port number.
|
||||
|
||||
- Ralph Beckmann pointed out a problem when using both CONF_FOLLOWLOCATION
|
||||
and CONF_FAILONERROR simultaneously. Since the CONF_FAILONERROR exits on
|
||||
the 302-code that the follow location header outputs it will never show any
|
||||
html on location: pages. I have now made it look for >=400 codes if
|
||||
CONF_FOLLOWLOCATION is set.
|
||||
|
||||
- 'struct slist' is now renamed to 'struct curl_slist' (as suggested by Ralph
|
||||
Beckmann).
|
||||
|
||||
- Joshua Swink and Rick Welykochy were the first to point out to me that the
|
||||
latest OpenSSL package now have moved the standard include path. It is now
|
||||
in /usr/local/ssl/include/openssl and I have now modified the --enable-ssl
|
||||
option for the configure script to use that as the primary path, and I
|
||||
leave the former path too to work with older packages of OpenSSL too.
|
||||
|
||||
Daniel (9 June 1999)
|
||||
- I finally understood the IRIX problem and now it seem to compile on it!
|
||||
I am gonna remove those #define strcasecmp() things once and for all now.
|
||||
|
||||
Daniel (4 June 1999)
|
||||
- I adjusted the FTP reply 227 parser to make the PASV command work better
|
||||
with more ftp servers. Appearantly the Roxen Challanger server replied
|
||||
something curl 5.9 could deal with! :-( Reported by Ashley Reid-Montanaro
|
||||
and Mark Butler brought a solution for it.
|
||||
|
||||
Daniel (26 May 1999)
|
||||
- Rearranged. README is new, the old one is now README.curl and I added a
|
||||
README.libcurl with text I got from Ralph Beckmann.
|
||||
|
||||
- I also updated the INSTALL text.
|
||||
|
||||
Daniel (25 May 1999)
|
||||
- David Jonathan Lowsky correctly pointed out that curl didn't properly deal
|
||||
with form posting where the variable shouldn't have any content, as in curl
|
||||
-F "form=" www.site.com. It was now fixed.
|
||||
|
||||
Version 5.9
|
||||
|
||||
Daniel (22 May 1999)
|
||||
- I've got a bug report from Aaron Scarisbrick in which he states he has some
|
||||
problems with -L under FreeBSD 3.0. I have previously got another bug
|
||||
report from Stefan Grether which points at an error with similar sympthoms
|
||||
when using win32. I made the allocation of the new url string a bit faster
|
||||
and different, don't know if it actually improves anything though...
|
||||
|
||||
Daniel (20 May 1999)
|
||||
- Made the cookie parser deal with CRLF newlines too.
|
||||
|
||||
Daniel (19 May 1999)
|
||||
- Download() didn't properly deal with failing return codes from the sread()
|
||||
function. Adam Coyne found the problem in the win32 version, and Troy Engel
|
||||
helped me out isolating it.
|
||||
|
||||
Daniel (16 May 1999)
|
||||
- Richard Adams pointed out a bug I introduced in 5.8. --dump-header doesn't
|
||||
work anymore! :-/ I fixed it now.
|
||||
|
||||
- After a suggestion by Joshua Swink I added -S / --show-error to force curl
|
||||
to display the error message in case of an error, even if -s/--silent was
|
||||
used.
|
||||
|
||||
Daniel (10 May 1999)
|
||||
- I moved the stuff concerning HTTP, DICT and TELNET it their own source
|
||||
files now. It is a beginning on my clean-up of the sources to make them
|
||||
layer all those protocols better to enable more to be added easier in the
|
||||
future!
|
||||
|
||||
- Leon Breedt sent me some files I've not put into the main curl
|
||||
archive. They're for creating the Debian package thingie. He also sent me a
|
||||
debian package that I've made available for download at the web page
|
||||
|
||||
Daniel (9 May 1999)
|
||||
- Made it compile on cygwin too.
|
||||
|
||||
Troy Engel (7 May 1999)
|
||||
- Brought a series of patches to allow curl to compile smoothly on MSVC++ 6
|
||||
again!
|
||||
|
||||
Daniel (6 May 1999)
|
||||
- I changed the #ifdef HAVE_STRFTIME placement for the -z code so that it
|
||||
will be easier to discover systems that don't have that function and thus
|
||||
can't use -z successfully. Made the strftime() get used if WIN32 is defined
|
||||
too.
|
||||
|
||||
Version 5.8
|
||||
|
||||
Daniel (5 May 1999)
|
||||
- I've had it with this autoconf/automake mess. It seems to work allright
|
||||
for most people who don't have automake installed, but for those who have
|
||||
there are problems all over.
|
||||
|
||||
I've got like five different bug reports on this only the last
|
||||
week... Claudio Neves and Federico Bianchi and root <duggerj001 at
|
||||
hawaii.rr.com> are some of them reporting this.
|
||||
|
||||
Currently, I have no really good fix since I want to use automake myself to
|
||||
generate the Makefile.in files. I've found out that the @SHELL@-problems
|
||||
can often be fixed by manually invoking 'automake' in the archive root
|
||||
before you run ./configure... I've hacked my maketgz script now to fiddle
|
||||
a bit with this and my tests seem to work better than before at least!
|
||||
|
||||
Daniel (4 May 1999)
|
||||
- mkhelp.pl has been doing badly lately. I corrected a case problem in
|
||||
the regexes.
|
||||
|
||||
- I've now remade the -o option to not touch the file unless it needs to.
|
||||
I had to do this to make -z option really fine, since now you can make a
|
||||
curl fetch and use a local copy's time when downloading to that file, as
|
||||
in:
|
||||
|
||||
curl -z dump -o dump remote.site.com/file.html
|
||||
|
||||
This will only get the file if the remote one is newer than the local.
|
||||
I'm aware that this alters previous behaviour a little. Some scripts out
|
||||
there may depend on that the file is always touched...
|
||||
|
||||
- Corrected a bug in the SSLv2/v3 selection.
|
||||
|
||||
- Felix von Leitner requested that curl should be able to send
|
||||
"If-Modified-Since" headers, which indeed is a fair idea. I implemented it
|
||||
right away! Try -z <expression> where expression is a full GNU date
|
||||
expression or a file name to get the date from!
|
||||
|
||||
Stephan Lagerholm (30 Apr 1999)
|
||||
- Pointed out a problem with the src/Makefile for FreeBSD. The RM variable
|
||||
isn't set and causes the make to fail.
|
||||
|
||||
Daniel (26 April 1999)
|
||||
- Am I silly or what? Irving Wolfe pointed out to me that the curl version
|
||||
number was not set properly. Hasn't been since 5.6. This was due to a bug
|
||||
in my maketgz script!
|
||||
|
||||
David Eriksson (25 Apr 1999)
|
||||
- Found a bug in cookies.c that made it crash at times.
|
||||
|
||||
Version 5.7.1
|
||||
|
||||
Doug Kaufman (23 Apr 1999)
|
||||
- Brought two sunos 4 fixes. One of them being the hostip.c fix mentioned
|
||||
below and the other one a correction in include/stdcheaders.h
|
||||
|
||||
- Added a paragraph about compiling with the US-version of openssl to the
|
||||
INSTALL file.
|
||||
|
||||
Daniel
|
||||
- New mailing list address. Info updated on the web page as well as in the
|
||||
README file
|
||||
|
||||
Greg Onufer (20 Apr 1999)
|
||||
- hostip.c didn't compile properly on SunOS 5.5.1.
|
||||
It needs an #include <sys/types.h>
|
||||
|
||||
Version 5.7
|
||||
|
||||
Daniel (Apr 20 1999)
|
||||
- Decided to upload a non-beta version right now!
|
||||
|
||||
- Made curl support any-length HTTP headers. The destination buffer is now
|
||||
simply enlarged every time it turns out to be too small!
|
||||
|
||||
- Added the FAQ file to the archive. Still a bit smallish, but it is a
|
||||
start.
|
||||
|
||||
Eric Thelin (15 Apr 1999)
|
||||
- Made -D accept '-' instead of filename to write to stdout.
|
||||
|
||||
Version 5.6.3beta
|
||||
|
||||
Daniel (Apr 12 1999)
|
||||
|
||||
- Changed two #ifdef WIN32 to better #ifdef <errorcode> when connect()ing
|
||||
in url.c and ftp.c. Makes cygwin32 deal with them better too. We should
|
||||
try to get some decent win32-replacement there. Anyone?
|
||||
|
||||
- The old -3/--crlf option is now ONLY --crlf!
|
||||
|
||||
- I changed the "SSL fix" to a more lame one, but that doesn't remove as
|
||||
much functionality. Now I've enabled the lib to select what SSL version it
|
||||
should try first. Appearantly some older SSL-servers don't like when you
|
||||
talk v3 with them so you need to be able to force curl to talk v2 from the
|
||||
start. The fix dated April 6 and posted on the mailing list forced curl to
|
||||
use v2 at all times using a modern OpenSSL version, but we don't really
|
||||
want such a crippled solution.
|
||||
|
||||
- Marc Boucher sent me a patch that corrected a math error for the
|
||||
"Curr.Speed" progress meter.
|
||||
|
||||
- Eric Thelin sent me a patch that enables '-K -' to read a config file from
|
||||
stdin.
|
||||
|
||||
- I found out we didn't close the file properly before so I added it!
|
||||
|
||||
Daniel (Apr 9 1999)
|
||||
- Yu Xin pointed out a problem with ftp download resume. It didn't work at
|
||||
all! ;-O
|
||||
|
||||
Daniel (Apr 6 1999)
|
||||
- Corrected the version string part generated for the SSL version.
|
||||
|
||||
- I found a way to make some other SSL page work with openssl 0.9.1+ that
|
||||
previously didn't (ssleay 0.8.0 works with it though!). Trying to get
|
||||
some real info from the OpenSSL guys to see how I should do to behave the
|
||||
best way. SSLeay 0.8.0 shouldn't be that much in use anyway these days!
|
||||
|
||||
Version 5.6.2beta
|
||||
|
||||
Daniel (Apr 4 1999)
|
||||
- Finally have curl more cookie "aware". Now read carefully. This is how
|
||||
it works.
|
||||
To make curl read cookies from an already existing file, in plain header-
|
||||
format (like from the headers of a previous fetch) invoke curl with the
|
||||
-b flag like:
|
||||
|
||||
curl -b file http://site/foo.html
|
||||
|
||||
Curl will then use all cookies it finds matching. The old style that sets
|
||||
a single cookie with -b is still supported and is used if the string
|
||||
following -b includes a '=' letter, as in "-b name=daniel".
|
||||
|
||||
To make curl read the cookies sent in combination with a location: (which
|
||||
sites often do) point curl to read a non-existing file at first (i.e
|
||||
to start with no existing cookies), like:
|
||||
|
||||
curl -b nowhere http://site/setcookieandrelocate.html
|
||||
|
||||
- Added a paragraph in the TODO file about the SSL problems recently
|
||||
reported. Evidently, some kind of SSL-problem curl may need to address.
|
||||
|
||||
- Better "Location:" following.
|
||||
|
||||
Douglas E. Wegscheid (Tue, 30 Mar 1999)
|
||||
- A subsecond display patch.
|
||||
|
||||
Daniel (Mar 14 1999)
|
||||
- I've separated the version number of libcurl and curl now. To make
|
||||
things a little easier, I decided to start the curl numbering from
|
||||
5.6 and the former version number known as "curl" is now the one
|
||||
set for libcurl.
|
||||
|
||||
- Removed the 'enable-no-pass' from configure, I doubt anyone wanted
|
||||
that.
|
||||
|
||||
- Made lots of tiny adjustments to compile smoothly with cygwin under
|
||||
win32. It's a killer for porting this to win32, bye bye VC++! ;-)
|
||||
Compiles and builds out-of-the-box now. See the new wordings in
|
||||
INSTALL for details.
|
||||
|
||||
- Beginning experiments with downloading multiple document from a http
|
||||
server while remaining connected.
|
||||
|
||||
Version 5.6beta
|
||||
|
||||
Daniel (Mar 13 1999)
|
||||
- Since I've changed so much, I thought I'd just go ahead and implement the
|
||||
suggestion from Douglas E. Wegscheid. -D or --dump-header is now storing
|
||||
HTTP headers separately in the specified file.
|
||||
|
||||
- Added new text to INSTALL on what to do to build this on win32 now.
|
||||
|
||||
- Aaargh. I had to take a step back and prefix the shared #include files
|
||||
in the sources with "../include/" to please VC++...
|
||||
|
||||
Daniel (Mar 12 1999)
|
||||
- Split the url.c source into many tiny sources for better readability
|
||||
and smaller size.
|
||||
|
||||
Daniel (Mar 11 1999)
|
||||
- Started to change stuff for a move to make libcurl and a more separate
|
||||
curl application that uses the libcurl. Made the libcurl sources into
|
||||
the new lib directory while the curl application will remain in src as
|
||||
before. New makefiles, adjusted configure script and so.
|
||||
|
||||
libcurl.a built quickly and easily. I better make a better interface to
|
||||
the lib functions though.
|
||||
|
||||
The new root dir include/ is supposed to contain the public information
|
||||
about the new libcurl. It is a little ugly so far :-)
|
||||
|
||||
|
||||
Daniel (Mar 1 1999)
|
||||
- Todd Kaufmann sent me a good link to Netscape's cookie spec as well as the
|
||||
info that RFC 2109 specifies how to use them. The link is now in the
|
||||
README and the RFC in the RESOURCES.
|
||||
|
||||
Daniel (Feb 23 1999)
|
||||
- Finally made configure accept --with-ssl to look for SSL libs and includes
|
||||
in the "standard" place /usr/local/ssl...
|
||||
|
||||
Daniel (Feb 22 1999)
|
||||
- Verified that curl linked fine with OpenSSL 0.9.1c which seems to be
|
||||
the most recent.
|
||||
|
||||
Henri Gomez (Fri Feb 5 1999)
|
||||
- Sent in an updated curl-ssl.spec. I still miss the script that builds an
|
||||
RPM automatically...
|
||||
|
||||
Version 5.5.1
|
||||
|
||||
Mark Butler (27 Jan 1999)
|
||||
- Corrected problems in Download().
|
||||
|
||||
Danitel Stenberg (25 Jan 1999)
|
||||
- Jeremie Petit pointed out a few flaws in the source that prevented it from
|
||||
compile warning free with the native compiler under Digital Unix v4.0d.
|
||||
|
||||
Version 5.5
|
||||
|
||||
Daniel Stenberg (15 Jan 1999)
|
||||
- Added Bjorns small text to the README about the DICT protocol.
|
||||
|
||||
Daniel Stenberg (11 Jan 1999)
|
||||
- <jswink at softcom.net> reported about the win32-versioin: "Doesn't use
|
||||
ALL_PROXY environment variable". Turned out to be because of the static-
|
||||
buffer nature of the win32 environment variable calls!
|
||||
|
||||
Bjorn Reese (10 Jan 1999)
|
||||
- I have attached a simple addition for the DICT protocol (RFC 2229).
|
||||
It performs dictionary lookups. The output still needs to be better
|
||||
formatted.
|
||||
|
||||
To test it try (the exact format, and more examples are described in
|
||||
the RFC)
|
||||
|
||||
dict://dict.org/m:hello
|
||||
dict://dict.org/m:hello::soundex
|
||||
|
||||
|
||||
Vicente Garcia (10 Jan 1999)
|
||||
- Corrected the progress meter for files larger than 20MB.
|
||||
|
||||
Daniel Stenberg (7 Jan 1999)
|
||||
- Corrected the -t and -T help texts. They claimed to be FTP only.
|
||||
|
||||
Version 5.4
|
||||
|
||||
Daniel Stenberg
|
||||
(7 Jan 1999)
|
||||
- Irving Wolfe reported that curl -s didn't always supress the progress
|
||||
reporting. It was the form post that autoamtically always switched it on
|
||||
again. This is now corrected!
|
||||
|
||||
(4 Jan 1999)
|
||||
- Andreas Kostyrka suggested I'd add PUT and he helped me out to test it. If
|
||||
you use -t or -T now on a http or https server, PUT will be used for file
|
||||
upload.
|
||||
|
||||
I removed the former use of -T with HTTP. I doubt anyone ever really used
|
||||
that.
|
||||
|
||||
(4 Jan 1999)
|
||||
- Erik Jacobsen found a width bug in the mprintf() function. I corrected it
|
||||
now.
|
||||
|
||||
(4 Jan 1999)
|
||||
- As John V. Chow pointed out to me, curl accepted very limited URL sizes. It
|
||||
should now accept path parts that are up to at least 4096 bytes.
|
||||
|
||||
- Somehow I screwed up when applying the AIX fix from Gilbert Ramirez, so
|
||||
I redid that now.
|
||||
|
||||
1381
CHANGES.2000
Normal file
1381
CHANGES.2000
Normal file
File diff suppressed because it is too large
Load Diff
1957
CHANGES.2001
Normal file
1957
CHANGES.2001
Normal file
File diff suppressed because it is too large
Load Diff
1504
CHANGES.2002
Normal file
1504
CHANGES.2002
Normal file
File diff suppressed because it is too large
Load Diff
74
CONTRIBUTE
74
CONTRIBUTE
@@ -1,74 +0,0 @@
|
||||
_ _ ____ _
|
||||
___| | | | _ \| |
|
||||
/ __| | | | |_) | |
|
||||
| (__| |_| | _ <| |___
|
||||
\___|\___/|_| \_\_____|
|
||||
|
||||
CONTRIBUTE
|
||||
|
||||
To Think About When Contributing Source Code
|
||||
|
||||
This document is intended to offer some guidelines that can be useful to
|
||||
keep in mind when you decide to write a contribution to the project. This
|
||||
concerns new features as well as corrections to existing flaws or bugs.
|
||||
|
||||
Naming
|
||||
|
||||
Try using a non-confusing naming scheme for your new functions and variable
|
||||
names. It doesn't necessarily have to mean that you should use the same as
|
||||
in other places of the code, just that the names should be logical,
|
||||
understandable and be named according to what they're used for.
|
||||
|
||||
Indenting
|
||||
|
||||
Please try using the same indenting levels and bracing method as all the
|
||||
other code already does. It makes the source code a lot easier to follow if
|
||||
all of it is written using the same style. I don't ask you to like it, I
|
||||
just ask you to follow the tradition! ;-)
|
||||
|
||||
Commenting
|
||||
|
||||
Comment your source code extensively. I don't see myself as a very good
|
||||
source commenter, but I try to become one. Commented code is quality code
|
||||
and enables future modifications much more. Uncommented code much more risk
|
||||
being completely replaced when someone wants to extend things, since other
|
||||
persons' source code can get quite hard to read.
|
||||
|
||||
General Style
|
||||
|
||||
Keep your functions small. If they're small you avoid a lot of mistakes and
|
||||
you don't accidentaly mix up variables.
|
||||
|
||||
Non-clobbering All Over
|
||||
|
||||
When you write new functionality or fix bugs, it is important that you
|
||||
don't fiddle all over the source files and functions. Remember that it is
|
||||
likely that other people have done changes in the same source files as you
|
||||
have and possibly even in the same functions. If you bring completely new
|
||||
functionality, try writing it in a new source file. If you fix bugs, try to
|
||||
fix one bug at a time and send them as separate patches.
|
||||
|
||||
Separate Patches Doing Different Things
|
||||
|
||||
It is annoying when you get a huge patch from someone that is said to fix 511
|
||||
odd problems, but discussions and opinions don't agree with 510 of them - or
|
||||
509 of them were already fixed in a different way. Then the patcher needs to
|
||||
extract the single interesting patch from somewhere within the huge pile of
|
||||
source, and that gives a lot of extra work. Preferably, all fixes that
|
||||
correct different problems should be in their own patch with an attached
|
||||
description exactly what they correct so that all patches can be selectively
|
||||
applied by the maintainer or other interested parties.
|
||||
|
||||
Document
|
||||
|
||||
Writing docs is dead boring and one of the big problems with many open
|
||||
source projects. Someone's gotta do it. It makes it a lot easier if you
|
||||
submit a small description of your fix or your new features with every
|
||||
contribution so that it can be swiftly added to the package documentation.
|
||||
|
||||
Write Access to CVS Repository
|
||||
|
||||
If you are a frequent contributor, or have another good reason, you can of
|
||||
course get write access to the CVS repository and then you'll be able to
|
||||
check-in all your changes straight into the CVS tree instead of sending all
|
||||
changes by mail as patches. Just ask if this is what you'd want.
|
||||
21
COPYING
Normal file
21
COPYING
Normal file
@@ -0,0 +1,21 @@
|
||||
COPYRIGHT AND PERMISSION NOTICE
|
||||
|
||||
Copyright (c) 1996 - 2003, Daniel Stenberg, <daniel@haxx.se>.
|
||||
|
||||
All rights reserved.
|
||||
|
||||
Permission to use, copy, modify, and distribute this software for any purpose
|
||||
with or without fee is hereby granted, provided that the above copyright
|
||||
notice and this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN
|
||||
NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
||||
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||
OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
|
||||
OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
Except as contained in this notice, the name of a copyright holder shall not
|
||||
be used in advertising or otherwise to promote the sale, use or other dealings
|
||||
in this Software without prior written authorization of the copyright holder.
|
||||
74
CVS-INFO
Normal file
74
CVS-INFO
Normal file
@@ -0,0 +1,74 @@
|
||||
_ _ ____ _
|
||||
___| | | | _ \| |
|
||||
/ __| | | | |_) | |
|
||||
| (__| |_| | _ <| |___
|
||||
\___|\___/|_| \_\_____|
|
||||
|
||||
CVS-INFO
|
||||
|
||||
This file is only present in the CVS - never in release archives. It contains
|
||||
information about other files and things that the CVS repository keeps in its
|
||||
inner sanctum.
|
||||
|
||||
Compile and build instructions follow below.
|
||||
|
||||
CHANGES.0 contains ancient changes.
|
||||
CHANGES.$year contains changes for the particular year.
|
||||
|
||||
tests/memanalyze.pl
|
||||
is for analyzing the output generated by curl if -DCURLDEBUG
|
||||
is used when compiling (run configure with --enable-debug)
|
||||
|
||||
buildconf builds the makefiles and configure stuff
|
||||
|
||||
Makefile.dist is included as the root Makefile in distribution archives
|
||||
|
||||
perl/ is a subdirectory with various perl scripts
|
||||
|
||||
To build after having extracted everything from CVS, do this:
|
||||
|
||||
./buildconf
|
||||
./configure
|
||||
make
|
||||
|
||||
Daniel uses a ./configure line similar to this for easier development:
|
||||
|
||||
./configure --disable-shared --enable-debug --enable-maintainer-mode
|
||||
|
||||
|
||||
REQUIREMENTS
|
||||
|
||||
You need the following software installed:
|
||||
|
||||
o autoconf 2.57 (or later)
|
||||
o automake 1.7 (or later)
|
||||
o libtool 1.4.2 (or later)
|
||||
o GNU m4 (required by autoconf)
|
||||
|
||||
o nroff + perl
|
||||
|
||||
If you don't have nroff and perl and you for some reason don't want to
|
||||
install them, you can rename the source file src/hugehelp.c.cvs to
|
||||
src/hugehelp.c and avoid having to generate this file. This will of course
|
||||
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.
|
||||
|
||||
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
|
||||
|
||||
With Mac OS X 10.2 and the associated Developer Tools, the installed versions
|
||||
of the build tools are adequate. For Mac OS X 10.1 users, Guido Neitzer
|
||||
wrote the following step-by-step guide:
|
||||
|
||||
1. Install fink (http://fink.sourceforge.net)
|
||||
2. Update fink to the newest version (with the installed fink)
|
||||
3. Install the latest version of autoconf, automake and m4 with fink
|
||||
4. Install version 1.4.1 of libtool - you find it in the "unstable" section
|
||||
(read the manual to see how to get unstable versions)
|
||||
5. Get cURL from the cvs
|
||||
6. Build cURL with "./buildconf", "./configure", "make", "sudo make install"
|
||||
59
FAQ
59
FAQ
@@ -1,59 +0,0 @@
|
||||
_ _ ____ _
|
||||
___| | | | _ \| |
|
||||
/ __| | | | |_) | |
|
||||
| (__| |_| | _ <| |___
|
||||
\___|\___/|_| \_\_____|
|
||||
|
||||
FAQ
|
||||
|
||||
Problems connecting to SSL servers.
|
||||
===================================
|
||||
|
||||
It took a very long time before I could sort out why curl had problems
|
||||
to connect to certain SSL servers when using SSLeay or OpenSSL v0.9+.
|
||||
The error sometimes showed up similar to:
|
||||
|
||||
16570:error:1407D071:SSL routines:SSL2_READ:bad mac decode:s2_pkt.c:233:
|
||||
|
||||
It turned out to be because many older SSL servers don't deal with SSLv3
|
||||
requests properly. To correct this problem, tell curl to select SSLv2 from
|
||||
the command line (-2/--sslv2).
|
||||
|
||||
I have also seen examples where the remote server didn't like the SSLv2
|
||||
request and instead you had to force curl to use SSLv3 with -3/--sslv3.
|
||||
|
||||
Does curl support resume?
|
||||
=========================
|
||||
|
||||
Yes. Both ways on FTP, download ways on HTTP.
|
||||
|
||||
Is libcurl thread safe?
|
||||
=======================
|
||||
|
||||
Yes, as far as curl's own code goes. It does use system calls that often
|
||||
aren't thread safe in most environments, such as gethostbyname().
|
||||
|
||||
I am very interested in once and for all getting some kind of report or
|
||||
README file from those who have used libcurl in a threaded environment,
|
||||
since I haven't and I get this question more and more frequently!
|
||||
|
||||
Why doesn't my posting using -F work?
|
||||
=====================================
|
||||
|
||||
You can't simply use -F or -d at your choice. The web server that will
|
||||
receive your post assumes one of the formats. If the form you're trying to
|
||||
"fake" sets the type to 'multipart/form-data', than and only then you must
|
||||
use the -F type. In all the most common cases, you should use -d which then
|
||||
causes a posting with the type 'application/x-www-form-urlencoded'.
|
||||
|
||||
Does curl support custom FTP commands?
|
||||
======================================
|
||||
|
||||
Yes it does, you can tell curl to perform optional commands both before
|
||||
and/or after a file transfer. Study the -Q/--quote option.
|
||||
|
||||
Since curl is used for file transfers, you don't use curl to just perform
|
||||
ftp commands without transfering anything. Therefore you must always specify
|
||||
a URL to transfer to/from even when doing custom FTP commands.
|
||||
|
||||
|
||||
82
FEATURES
82
FEATURES
@@ -1,82 +0,0 @@
|
||||
_ _ ____ _
|
||||
___| | | | _ \| |
|
||||
/ __| | | | |_) | |
|
||||
| (__| |_| | _ <| |___
|
||||
\___|\___/|_| \_\_____|
|
||||
|
||||
FEATURES
|
||||
|
||||
Misc
|
||||
- full URL syntax
|
||||
- custom maximum download time
|
||||
- custom least download speed acceptable
|
||||
- custom output result after completion
|
||||
- multiple URLs
|
||||
- guesses protocol from host name unless specified
|
||||
- uses .netrc
|
||||
- progress bar/time specs while downloading
|
||||
- PROXY environment variables support
|
||||
- config file support
|
||||
- compiles on win32
|
||||
|
||||
HTTP
|
||||
- GET
|
||||
- PUT
|
||||
- HEAD
|
||||
- POST
|
||||
- multipart POST
|
||||
- authentication
|
||||
- resume
|
||||
- follow redirects
|
||||
- custom HTTP request
|
||||
- cookie get/send
|
||||
- understands the netscape cookie file
|
||||
- custom headers (that can replace internally generated headers)
|
||||
- custom user-agent string
|
||||
- custom referer string
|
||||
- range
|
||||
- proxy authentication
|
||||
- time conditions
|
||||
- via http-proxy
|
||||
|
||||
HTTPS (*1)
|
||||
- (all the HTTP features)
|
||||
- using certificates
|
||||
- via http-proxy
|
||||
|
||||
FTP
|
||||
- download
|
||||
- authentication
|
||||
- PORT or PASV
|
||||
- single file size information (compare to HTTP HEAD)
|
||||
- 'type=' URL support
|
||||
- dir listing
|
||||
- dir listing names-only
|
||||
- upload
|
||||
- upload append
|
||||
- upload via http-proxy as HTTP PUT
|
||||
- download resume
|
||||
- upload resume
|
||||
- QUOT commands (before and/or after the transfer)
|
||||
- simple "range" support
|
||||
- via http-proxy
|
||||
|
||||
TELNET
|
||||
- connection negotiation
|
||||
- stdin/stdout I/O
|
||||
|
||||
LDAP (*2)
|
||||
- full LDAP URL support
|
||||
|
||||
DICT
|
||||
- extended DICT URL support
|
||||
|
||||
GOPHER
|
||||
- GET
|
||||
- via http-proxy
|
||||
|
||||
FILE
|
||||
- URL support
|
||||
|
||||
*1 = requires OpenSSL
|
||||
*2 = requires OpenLDAP
|
||||
47
FILES
47
FILES
@@ -1,47 +0,0 @@
|
||||
BUGS
|
||||
CHANGES
|
||||
CONTRIBUTE
|
||||
FEATURES
|
||||
FAQ
|
||||
FILES
|
||||
INSTALL
|
||||
LEGAL
|
||||
MPL-1.0.txt
|
||||
README
|
||||
README.curl
|
||||
README.libcurl
|
||||
curl.1
|
||||
*spec
|
||||
RESOURCES
|
||||
TODO
|
||||
maketgz
|
||||
Makefile.in
|
||||
Makefile.am
|
||||
acconfig.h
|
||||
aclocal.m4
|
||||
config.guess
|
||||
config.h.in
|
||||
config-win32.h
|
||||
config.sub
|
||||
configure
|
||||
configure.in
|
||||
install-sh
|
||||
missing
|
||||
mkinstalldirs
|
||||
reconf
|
||||
stamp-h.in
|
||||
src/*.[ch]
|
||||
src/*in
|
||||
src/*am
|
||||
src/mkhelp.pl
|
||||
src/Makefile.vc6
|
||||
src/*m32
|
||||
lib/getdate.y
|
||||
lib/*.[ch]
|
||||
lib/*in
|
||||
lib/*am
|
||||
lib/Makefile.vc6
|
||||
lib/*m32
|
||||
include/README
|
||||
include/curl/*.h
|
||||
|
||||
256
INSTALL
256
INSTALL
@@ -1,256 +0,0 @@
|
||||
_ _ ____ _
|
||||
___| | | | _ \| |
|
||||
/ __| | | | |_) | |
|
||||
| (__| |_| | _ <| |___
|
||||
\___|\___/|_| \_\_____|
|
||||
|
||||
How To Compile
|
||||
|
||||
Curl has been compiled and built on numerous different operating systems. The
|
||||
way to proceed is mainly devided in two different ways: the unix way or the
|
||||
windows way.
|
||||
|
||||
If you're using Windows (95, 98, NT) or OS/2, you should continue reading from
|
||||
the Win32 header below. All other systems should be capable of being installed
|
||||
as described un the the UNIX header.
|
||||
|
||||
PORTS
|
||||
=====
|
||||
Just to show off, this is a probably incomplete list of known hardware and
|
||||
operating systems that curl has been compiled for:
|
||||
|
||||
Sparc Solaris 2.4, 2.5, 2.5.1, 2.6, 7
|
||||
Sparc SunOS 4.1.*
|
||||
i386 Linux 1.3, 2.0, 2.2
|
||||
MIPS IRIX 6.2, 6.5
|
||||
HP-PA HP-UX
|
||||
Alpha DEC OSF 4
|
||||
i386 Solaris 2.7
|
||||
PowerPC Mac OS X
|
||||
Power AIX 4.3.1
|
||||
- Ultrix
|
||||
i386 FreeBSD
|
||||
i386 NetBSD
|
||||
i386 OpenBSD
|
||||
m68k OpenBSD
|
||||
i386 Windows 95, 98, NT
|
||||
i386 OS/2
|
||||
m68k AmigaOS 3
|
||||
|
||||
UNIX
|
||||
====
|
||||
|
||||
The configure script *always* tries to find a working SSL library unless
|
||||
explicitely told not to. If you have SSLeay or OpenSSL installed in the
|
||||
default search path for your compiler/linker, you don't need to do anything
|
||||
special.
|
||||
|
||||
If you have SSLeay or OpenSSL installed in /usr/local/ssl, you can
|
||||
run configure like so:
|
||||
|
||||
./configure --with-ssl
|
||||
|
||||
If you have SSLeay or OpenSSL installed somewhere else (for example,
|
||||
/opt/OpenSSL,) you can run configure like this:
|
||||
|
||||
./configure --with-ssl=/opt/OpenSSL
|
||||
|
||||
If you insist on forcing a build *without* SSL support, even though you may
|
||||
have it installed in your system, you can run configure like this:
|
||||
|
||||
./configure --without-ssl
|
||||
|
||||
If you have SSLeay or OpenSSL installed, but with the libraries in
|
||||
one place and the header files somewhere else, you'll have to set the
|
||||
LDFLAGS and CPPFLAGS environment variables prior to running configure.
|
||||
Something like this should work:
|
||||
|
||||
(with the Bourne shell and its clones):
|
||||
|
||||
CPPFLAGS="-I/path/to/ssl/include" LDFLAGS="-L/path/to/ssl/lib" \
|
||||
./configure
|
||||
|
||||
(with csh, tcsh and their clones):
|
||||
|
||||
env CPPFLAGS="-I/path/to/ssl/include" LDFLAGS="-L/path/to/ssl/lib" \
|
||||
./configure
|
||||
|
||||
If your SSL library was compiled with rsaref (usually for use in
|
||||
the United States), you may also need to set:
|
||||
|
||||
LIBS=-lRSAglue -lrsaref
|
||||
(from Doug Kaufman <dkaufman@rahul.net>)
|
||||
|
||||
Without SSL support, just run:
|
||||
|
||||
./configure
|
||||
|
||||
Then run:
|
||||
|
||||
make
|
||||
|
||||
Use the executable `curl` in src/ directory.
|
||||
|
||||
'make install' copies the curl file to /usr/local/bin/ (or $prefix/bin
|
||||
if you used the --prefix option to configure) and copies the curl.1
|
||||
man page to a suitable place too.
|
||||
|
||||
KNOWN PROBLEMS
|
||||
|
||||
If you happen to have autoconf installed, but a version older than
|
||||
2.12 you will get into trouble. Then you can still build curl by
|
||||
issuing these commands: (from Ralph Beckmann <rabe@uni-paderborn.de>)
|
||||
|
||||
./configure [...]
|
||||
cd lib; make; cd ..
|
||||
cd src; make; cd ..
|
||||
cp src/curl elsewhere/bin/
|
||||
|
||||
OPTIONS
|
||||
|
||||
Remember, to force configure to use the standard cc compiler if both
|
||||
cc and gcc are present, run configure like
|
||||
|
||||
CC=cc ./configure
|
||||
or
|
||||
env Cc=cc ./configure
|
||||
|
||||
|
||||
Win32
|
||||
=====
|
||||
|
||||
Without SSL:
|
||||
|
||||
MingW32 (GCC-2.95) style
|
||||
------------------------
|
||||
Run the 'mingw32.bat' file to get the proper environment variables
|
||||
set, then run 'make -f Makefile.m32' in the lib/ dir and then
|
||||
'make -f Makefile.m32' in the src/ dir.
|
||||
|
||||
If you have any problems linking libraries or finding header files,
|
||||
be sure to look at the provided "Makefile.m32" files for the proper
|
||||
paths, and adjust as necessary.
|
||||
|
||||
Cygwin style
|
||||
------------
|
||||
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'
|
||||
|
||||
Microsoft command line style
|
||||
----------------------------
|
||||
Run the 'vcvars32.bat' file to get the proper environment variables
|
||||
set, then run 'nmake -f Makefile.vc6' in the lib/ dir and then
|
||||
'nmake -f Makefile.vc6' in the src/ dir.
|
||||
|
||||
IDE-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).
|
||||
(you should name it libcurl or similar)
|
||||
|
||||
Make the sources in the src/ drawer be a "win32 console application"
|
||||
project. Name it curl.
|
||||
|
||||
With VC++, add 'wsock32.lib' to the link libs when you build curl!
|
||||
Borland seems to do that itself magically. Of course you have to
|
||||
make sure it links with the libcurl too!
|
||||
|
||||
For VC++ 6, there's an included Makefile.vc6 that should be possible
|
||||
to use out-of-the-box.
|
||||
|
||||
Microsoft note: add /Zm200 to the compiler options, as the hugehelp.c
|
||||
won't compile otherwise due to "too long puts string" or something
|
||||
like that!
|
||||
|
||||
|
||||
With SSL:
|
||||
|
||||
MingW32 (GCC-2.95) style
|
||||
------------------------
|
||||
Run the 'mingw32.bat' file to get the proper environment variables
|
||||
set, then run 'make -f Makefile.m32 SSL=1' in the lib/ dir and then
|
||||
'make -f Makefile.m32 SSL=1' in the src/ dir.
|
||||
|
||||
If you have any problems linking libraries or finding header files,
|
||||
be sure to look at the provided "Makefile.m32" files for the proper
|
||||
paths, and adjust as necessary.
|
||||
|
||||
Cygwin style
|
||||
------------
|
||||
|
||||
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 the proper environment variables
|
||||
set, then run 'nmake -f Makefile.vc6 release-ssl' in the lib/ dir and
|
||||
then 'nmake -f Makefile.vc6' in the src/ dir.
|
||||
|
||||
Microsoft / Borland style
|
||||
-------------------------
|
||||
If you have OpenSSL/SSLeay, 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.
|
||||
|
||||
|
||||
IBM OS/2
|
||||
========
|
||||
|
||||
Building under OS/2 is not much different from building under unix.
|
||||
You need:
|
||||
|
||||
- emx 0.9d
|
||||
- GNU make
|
||||
- GNU patch
|
||||
- ksh
|
||||
- GNU bison
|
||||
- GNU file utilities
|
||||
- GNU sed
|
||||
- autoconf 2.13
|
||||
|
||||
If you want to build with OpenSSL, SSLeay, or OpenLDAP support, you'll
|
||||
need to download those libraries, too. Dirk Ohme has done some work to
|
||||
port SSL libraries under OS/2, but it looks like he doesn't care about emx.
|
||||
You'll find his patches on: http://come.to/Dirk.Ohme
|
||||
|
||||
If during the linking you get an error about _errno being an undefined
|
||||
symbol referenced from the text segment, you need to add -D__ST_MT_ERRNO__
|
||||
in your definitions.
|
||||
|
||||
If everything seems to work fine but there's no curl.exe, you need to add
|
||||
-Zexe to your linker flags.
|
||||
|
||||
If you're getting huge binaries, probably your makefiles have the -g in
|
||||
CFLAGS.
|
||||
|
||||
OpenSSL/SSLeay
|
||||
==============
|
||||
|
||||
You'll find OpenSSL information at:
|
||||
|
||||
http://www.openssl.org
|
||||
|
||||
|
||||
MingW32/Cygwin
|
||||
==============
|
||||
|
||||
You'll find MingW32 and Cygwin information at:
|
||||
|
||||
http://www.xraylith.wisc.edu/~khan/software/gnu-win32/index.html
|
||||
|
||||
OpenLDAP
|
||||
========
|
||||
|
||||
You'll find OpenLDAP information at:
|
||||
|
||||
http://www.openldap.org
|
||||
|
||||
You need to install it with shared libraries, which is enabled when running
|
||||
the ldap configure script with "--enable-shared". With my linux 2.0.36
|
||||
kernel I also had to disable using threads (with --without-threads),
|
||||
because the configure script couldn't figure out my system.
|
||||
21
LEGAL
21
LEGAL
@@ -1,21 +0,0 @@
|
||||
Part of this software is distributed under the Mozilla Public License
|
||||
version 1.0, which is part of this distribution (MPL-1.0.txt) and
|
||||
available on-line at http://www.mozilla.org/MPL/
|
||||
|
||||
The terminology used here is described in the Mozilla Public License.
|
||||
|
||||
In accordance with section "4. Inability to Comply Due to Statute or
|
||||
Regulation" the following exemptions apply to this software:
|
||||
|
||||
* The Initial Developer has the right, regardless of the citizenship
|
||||
of any involved party, to choose the location for settling disputes
|
||||
as refered to under section "11. Miscellaneous" of the Mozilla Public
|
||||
License.
|
||||
|
||||
Initial Developers of this software are:
|
||||
|
||||
Daniel Stenberg <Daniel.Stenberg@sth.frontec.se>
|
||||
Rafael Linden Sagula <sagula@inf.ufrgs.br>
|
||||
|
||||
Curl is Copyright (C) 1996-1998 Daniel Stenberg and Rafael Linden Sagula
|
||||
|
||||
360
MPL-1.0.txt
360
MPL-1.0.txt
@@ -1,360 +0,0 @@
|
||||
MOZILLA PUBLIC LICENSE
|
||||
Version 1.0
|
||||
|
||||
----------------
|
||||
|
||||
1. Definitions.
|
||||
|
||||
1.1. ``Contributor'' means each entity that creates or contributes to
|
||||
the creation of Modifications.
|
||||
|
||||
1.2. ``Contributor Version'' means the combination of the Original
|
||||
Code, prior Modifications used by a Contributor, and the Modifications
|
||||
made by that particular Contributor.
|
||||
|
||||
1.3. ``Covered Code'' means the Original Code or Modifications or the
|
||||
combination of the Original Code and Modifications, in each case
|
||||
including portions thereof.
|
||||
|
||||
1.4. ``Electronic Distribution Mechanism'' means a mechanism generally
|
||||
accepted in the software development community for the electronic
|
||||
transfer of data.
|
||||
|
||||
1.5. ``Executable'' means Covered Code in any form other than Source
|
||||
Code.
|
||||
|
||||
1.6. ``Initial Developer'' means the individual or entity identified as
|
||||
the Initial Developer in the Source Code notice required by Exhibit A.
|
||||
|
||||
1.7. ``Larger Work'' means a work which combines Covered Code or
|
||||
portions thereof with code not governed by the terms of this License.
|
||||
|
||||
1.8. ``License'' means this document.
|
||||
|
||||
1.9. ``Modifications'' means any addition to or deletion from the
|
||||
substance or structure of either the Original Code or any previous
|
||||
Modifications. When Covered Code is released as a series of files, a
|
||||
Modification is:
|
||||
|
||||
A. Any addition to or deletion from the contents of a file
|
||||
containing Original Code or previous Modifications.
|
||||
|
||||
B. Any new file that contains any part of the Original Code or
|
||||
previous Modifications.
|
||||
|
||||
1.10. ``Original Code'' means Source Code of computer software code
|
||||
which is described in the Source Code notice required by Exhibit A as
|
||||
Original Code, and which, at the time of its release under this License
|
||||
is not already Covered Code governed by this License.
|
||||
|
||||
1.11. ``Source Code'' means the preferred form of the Covered Code for
|
||||
making modifications to it, including all modules it contains, plus any
|
||||
associated interface definition files, scripts used to control
|
||||
compilation and installation of an Executable, or a list of source code
|
||||
differential comparisons against either the Original Code or another
|
||||
well known, available Covered Code of the Contributor's choice. The
|
||||
Source Code can be in a compressed or archival form, provided the
|
||||
appropriate decompression or de-archiving software is widely available
|
||||
for no charge.
|
||||
|
||||
1.12. ``You'' means an individual or a legal entity exercising rights
|
||||
under, and complying with all of the terms of, this License or a future
|
||||
version of this License issued under Section 6.1. For legal entities,
|
||||
``You'' includes any entity which controls, is controlled by, or is
|
||||
under common control with You. For purposes of this definition,
|
||||
``control'' means (a) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (b) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares or beneficial ownership of such entity.
|
||||
|
||||
2. Source Code License.
|
||||
|
||||
2.1. The Initial Developer Grant.
|
||||
The Initial Developer hereby grants You a world-wide, royalty-free,
|
||||
non-exclusive license, subject to third party intellectual property
|
||||
claims:
|
||||
|
||||
(a) to use, reproduce, modify, display, perform, sublicense and
|
||||
distribute the Original Code (or portions thereof) with or without
|
||||
Modifications, or as part of a Larger Work; and
|
||||
|
||||
(b) under patents now or hereafter owned or controlled by Initial
|
||||
Developer, to make, have made, use and sell (``Utilize'') the
|
||||
Original Code (or portions thereof), but solely to the extent that
|
||||
any such patent is reasonably necessary to enable You to Utilize
|
||||
the Original Code (or portions thereof) and not to any greater
|
||||
extent that may be necessary to Utilize further Modifications or
|
||||
combinations.
|
||||
|
||||
2.2. Contributor Grant.
|
||||
Each Contributor hereby grants You a world-wide, royalty-free,
|
||||
non-exclusive license, subject to third party intellectual property
|
||||
claims:
|
||||
|
||||
(a) to use, reproduce, modify, display, perform, sublicense and
|
||||
distribute the Modifications created by such Contributor (or
|
||||
portions thereof) either on an unmodified basis, with other
|
||||
Modifications, as Covered Code or as part of a Larger Work; and
|
||||
|
||||
(b) under patents now or hereafter owned or controlled by
|
||||
Contributor, to Utilize the Contributor Version (or portions
|
||||
thereof), but solely to the extent that any such patent is
|
||||
reasonably necessary to enable You to Utilize the Contributor
|
||||
Version (or portions thereof), and not to any greater extent that
|
||||
may be necessary to Utilize further Modifications or combinations.
|
||||
|
||||
3. Distribution Obligations.
|
||||
|
||||
3.1. Application of License.
|
||||
The Modifications which You create or to which You contribute are
|
||||
governed by the terms of this License, including without limitation
|
||||
Section 2.2. The Source Code version of Covered Code may be distributed
|
||||
only under the terms of this License or a future version of this
|
||||
License released under Section 6.1, and You must include a copy of this
|
||||
License with every copy of the Source Code You distribute. You may not
|
||||
offer or impose any terms on any Source Code version that alters or
|
||||
restricts the applicable version of this License or the recipients'
|
||||
rights hereunder. However, You may include an additional document
|
||||
offering the additional rights described in Section 3.5.
|
||||
|
||||
3.2. Availability of Source Code.
|
||||
Any Modification which You create or to which You contribute must be
|
||||
made available in Source Code form under the terms of this License
|
||||
either on the same media as an Executable version or via an accepted
|
||||
Electronic Distribution Mechanism to anyone to whom you made an
|
||||
Executable version available; and if made available via Electronic
|
||||
Distribution Mechanism, must remain available for at least twelve (12)
|
||||
months after the date it initially became available, or at least six
|
||||
(6) months after a subsequent version of that particular Modification
|
||||
has been made available to such recipients. You are responsible for
|
||||
ensuring that the Source Code version remains available even if the
|
||||
Electronic Distribution Mechanism is maintained by a third party.
|
||||
|
||||
3.3. Description of Modifications.
|
||||
You must cause all Covered Code to which you contribute to contain a
|
||||
file documenting the changes You made to create that Covered Code and
|
||||
the date of any change. You must include a prominent statement that the
|
||||
Modification is derived, directly or indirectly, from Original Code
|
||||
provided by the Initial Developer and including the name of the Initial
|
||||
Developer in (a) the Source Code, and (b) in any notice in an
|
||||
Executable version or related documentation in which You describe the
|
||||
origin or ownership of the Covered Code.
|
||||
|
||||
3.4. Intellectual Property Matters
|
||||
|
||||
(a) Third Party Claims.
|
||||
If You have knowledge that a party claims an intellectual property
|
||||
right in particular functionality or code (or its utilization
|
||||
under this License), you must include a text file with the source
|
||||
code distribution titled ``LEGAL'' which describes the claim and
|
||||
the party making the claim in sufficient detail that a recipient
|
||||
will know whom to contact. If you obtain such knowledge after You
|
||||
make Your Modification available as described in Section 3.2, You
|
||||
shall promptly modify the LEGAL file in all copies You make
|
||||
available thereafter and shall take other steps (such as notifying
|
||||
appropriate mailing lists or newsgroups) reasonably calculated to
|
||||
inform those who received the Covered Code that new knowledge has
|
||||
been obtained.
|
||||
|
||||
(b) Contributor APIs.
|
||||
If Your Modification is an application programming interface and
|
||||
You own or control patents which are reasonably necessary to
|
||||
implement that API, you must also include this information in the
|
||||
LEGAL file.
|
||||
|
||||
3.5. Required Notices.
|
||||
You must duplicate the notice in Exhibit A in each file of the Source
|
||||
Code, and this License in any documentation for the Source Code, where
|
||||
You describe recipients' rights relating to Covered Code. If You
|
||||
created one or more Modification(s), You may add your name as a
|
||||
Contributor to the notice described in Exhibit A. If it is not possible
|
||||
to put such notice in a particular Source Code file due to its
|
||||
structure, then you must include such notice in a location (such as a
|
||||
relevant directory file) where a user would be likely to look for such
|
||||
a notice. You may choose to offer, and to charge a fee for, warranty,
|
||||
support, indemnity or liability obligations to one or more recipients
|
||||
of Covered Code. However, You may do so only on Your own behalf, and
|
||||
not on behalf of the Initial Developer or any Contributor. You must
|
||||
make it absolutely clear than any such warranty, support, indemnity or
|
||||
liability obligation is offered by You alone, and You hereby agree to
|
||||
indemnify the Initial Developer and every Contributor for any liability
|
||||
incurred by the Initial Developer or such Contributor as a result of
|
||||
warranty, support, indemnity or liability terms You offer.
|
||||
|
||||
3.6. Distribution of Executable Versions.
|
||||
You may distribute Covered Code in Executable form only if the
|
||||
requirements of Section 3.1-3.5 have been met for that Covered Code,
|
||||
and if You include a notice stating that the Source Code version of the
|
||||
Covered Code is available under the terms of this License, including a
|
||||
description of how and where You have fulfilled the obligations of
|
||||
Section 3.2. The notice must be conspicuously included in any notice in
|
||||
an Executable version, related documentation or collateral in which You
|
||||
describe recipients' rights relating to the Covered Code. You may
|
||||
distribute the Executable version of Covered Code under a license of
|
||||
Your choice, which may contain terms different from this License,
|
||||
provided that You are in compliance with the terms of this License and
|
||||
that the license for the Executable version does not attempt to limit
|
||||
or alter the recipient's rights in the Source Code version from the
|
||||
rights set forth in this License. If You distribute the Executable
|
||||
version under a different license You must make it absolutely clear
|
||||
that any terms which differ from this License are offered by You alone,
|
||||
not by the Initial Developer or any Contributor. You hereby agree to
|
||||
indemnify the Initial Developer and every Contributor for any liability
|
||||
incurred by the Initial Developer or such Contributor as a result of
|
||||
any such terms You offer.
|
||||
|
||||
3.7. Larger Works.
|
||||
You may create a Larger Work by combining Covered Code with other code
|
||||
not governed by the terms of this License and distribute the Larger
|
||||
Work as a single product. In such a case, You must make sure the
|
||||
requirements of this License are fulfilled for the Covered Code.
|
||||
|
||||
4. Inability to Comply Due to Statute or Regulation.
|
||||
|
||||
If it is impossible for You to comply with any of the terms of this
|
||||
License with respect to some or all of the Covered Code due to statute
|
||||
or regulation then You must: (a) comply with the terms of this License
|
||||
to the maximum extent possible; and (b) describe the limitations and
|
||||
the code they affect. Such description must be included in the LEGAL
|
||||
file described in Section 3.4 and must be included with all
|
||||
distributions of the Source Code. Except to the extent prohibited by
|
||||
statute or regulation, such description must be sufficiently detailed
|
||||
for a recipient of ordinary skill to be able to understand it.
|
||||
|
||||
5. Application of this License.
|
||||
|
||||
This License applies to code to which the Initial Developer has
|
||||
attached the notice in Exhibit A, and to related Covered Code.
|
||||
|
||||
6. Versions of the License.
|
||||
|
||||
6.1. New Versions.
|
||||
Netscape Communications Corporation (``Netscape'') may publish revised
|
||||
and/or new versions of the License from time to time. Each version will
|
||||
be given a distinguishing version number.
|
||||
|
||||
6.2. Effect of New Versions.
|
||||
Once Covered Code has been published under a particular version of the
|
||||
License, You may always continue to use it under the terms of that
|
||||
version. You may also choose to use such Covered Code under the terms
|
||||
of any subsequent version of the License published by Netscape. No one
|
||||
other than Netscape has the right to modify the terms applicable to
|
||||
Covered Code created under this License.
|
||||
|
||||
6.3. Derivative Works.
|
||||
If you create or use a modified version of this License (which you may
|
||||
only do in order to apply it to code which is not already Covered Code
|
||||
governed by this License), you must (a) rename Your license so that the
|
||||
phrases ``Mozilla'', ``MOZILLAPL'', ``MOZPL'', ``Netscape'', ``NPL'' or
|
||||
any confusingly similar phrase do not appear anywhere in your license
|
||||
and (b) otherwise make it clear that your version of the license
|
||||
contains terms which differ from the Mozilla Public License and
|
||||
Netscape Public License. (Filling in the name of the Initial Developer,
|
||||
Original Code or Contributor in the notice described in Exhibit A shall
|
||||
not of themselves be deemed to be modifications of this License.)
|
||||
|
||||
7. DISCLAIMER OF WARRANTY.
|
||||
|
||||
COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN ``AS IS'' BASIS,
|
||||
WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
|
||||
WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF
|
||||
DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING.
|
||||
THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE
|
||||
IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT,
|
||||
YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE
|
||||
COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER
|
||||
OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF
|
||||
ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
|
||||
|
||||
8. TERMINATION.
|
||||
|
||||
This License and the rights granted hereunder will terminate
|
||||
automatically if You fail to comply with terms herein and fail to cure
|
||||
such breach within 30 days of becoming aware of the breach. All
|
||||
sublicenses to the Covered Code which are properly granted shall
|
||||
survive any termination of this License. Provisions which, by their
|
||||
nature, must remain in effect beyond the termination of this License
|
||||
shall survive.
|
||||
|
||||
9. LIMITATION OF LIABILITY.
|
||||
|
||||
UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
|
||||
(INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL THE INITIAL
|
||||
DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE,
|
||||
OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO YOU OR ANY OTHER
|
||||
PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
|
||||
OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF
|
||||
GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND
|
||||
ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE
|
||||
BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF
|
||||
LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY
|
||||
RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW
|
||||
PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE
|
||||
EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THAT
|
||||
EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
|
||||
|
||||
10. U.S. GOVERNMENT END USERS.
|
||||
|
||||
The Covered Code is a ``commercial item,'' as that term is defined in
|
||||
48 C.F.R. 2.101 (Oct. 1995), consisting of ``commercial computer
|
||||
software'' and ``commercial computer software documentation,'' as such
|
||||
terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48
|
||||
C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995),
|
||||
all U.S. Government End Users acquire Covered Code with only those
|
||||
rights set forth herein.
|
||||
|
||||
11. MISCELLANEOUS.
|
||||
|
||||
This License represents the complete agreement concerning subject
|
||||
matter hereof. If any provision of this License is held to be
|
||||
unenforceable, such provision shall be reformed only to the extent
|
||||
necessary to make it enforceable. This License shall be governed by
|
||||
California law provisions (except to the extent applicable law, if any,
|
||||
provides otherwise), excluding its conflict-of-law provisions. With
|
||||
respect to disputes in which at least one party is a citizen of, or an
|
||||
entity chartered or registered to do business in, the United States of
|
||||
America: (a) unless otherwise agreed in writing, all disputes relating
|
||||
to this License (excepting any dispute relating to intellectual
|
||||
property rights) shall be subject to final and binding arbitration,
|
||||
with the losing party paying all costs of arbitration; (b) any
|
||||
arbitration relating to this Agreement shall be held in Santa Clara
|
||||
County, California, under the auspices of JAMS/EndDispute; and (c) any
|
||||
litigation relating to this Agreement shall be subject to the
|
||||
jurisdiction of the Federal Courts of the Northern District of
|
||||
California, with venue lying in Santa Clara County, California, with
|
||||
the losing party responsible for costs, including without limitation,
|
||||
court costs and reasonable attorneys fees and expenses. The application
|
||||
of the United Nations Convention on Contracts for the International
|
||||
Sale of Goods is expressly excluded. Any law or regulation which
|
||||
provides that the language of a contract shall be construed against the
|
||||
drafter shall not apply to this License.
|
||||
|
||||
12. RESPONSIBILITY FOR CLAIMS.
|
||||
|
||||
Except in cases where another Contributor has failed to comply with
|
||||
Section 3.4, You are responsible for damages arising, directly or
|
||||
indirectly, out of Your utilization of rights under this License, based
|
||||
on the number of copies of Covered Code you made available, the
|
||||
revenues you received from utilizing such rights, and other relevant
|
||||
factors. You agree to work with affected parties to distribute
|
||||
responsibility on an equitable basis.
|
||||
|
||||
EXHIBIT A.
|
||||
|
||||
``The contents of this file are subject to the Mozilla Public License
|
||||
Version 1.0 (the "License"); you may not use this file except in
|
||||
compliance with the License. You may obtain a copy of the License at
|
||||
http://www.mozilla.org/MPL/
|
||||
|
||||
Software distributed under the License is distributed on an "AS IS"
|
||||
basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
|
||||
License for the specific language governing rights and limitations
|
||||
under the License.
|
||||
|
||||
The Original Code is ______________________________________.
|
||||
|
||||
The Initial Developer of the Original Code is ________________________.
|
||||
Portions created by ______________________ are Copyright (C) ______
|
||||
_______________________. All Rights Reserved.
|
||||
|
||||
Contributor(s): ______________________________________.''
|
||||
78
Makefile.am
78
Makefile.am
@@ -2,12 +2,84 @@
|
||||
# $Id$
|
||||
#
|
||||
|
||||
AUTOMAKE_OPTIONS = foreign no-dependencies
|
||||
AUTOMAKE_OPTIONS = foreign
|
||||
|
||||
man_MANS = curl.1
|
||||
EXTRA_DIST = CHANGES COPYING maketgz reconf Makefile.dist \
|
||||
curl-config.in build_vms.com curl-style.el sample.emacs testcurl.sh
|
||||
|
||||
EXTRA_DIST = $(man_MANS)
|
||||
bin_SCRIPTS = curl-config
|
||||
|
||||
SUBDIRS = lib src
|
||||
DIST_SUBDIRS = $(SUBDIRS) tests include packages docs
|
||||
|
||||
# create a root makefile in the distribution:
|
||||
dist-hook:
|
||||
rm -rf $(top_builddir)/tests/log
|
||||
cp $(srcdir)/Makefile.dist $(distdir)/Makefile
|
||||
|
||||
html:
|
||||
cd docs; make html
|
||||
|
||||
pdf:
|
||||
cd docs; make pdf
|
||||
|
||||
check: test
|
||||
|
||||
test:
|
||||
@(cd tests; $(MAKE) all quiet-test)
|
||||
|
||||
test-full:
|
||||
@(cd tests; $(MAKE) all full-test)
|
||||
|
||||
#
|
||||
# Build source and binary rpms. For rpm-3.0 and above, the ~/.rpmmacros
|
||||
# must contain the following line:
|
||||
# %_topdir /home/loic/local/rpm
|
||||
# and that /home/loic/local/rpm contains the directory SOURCES, BUILD etc.
|
||||
#
|
||||
# cd /home/loic/local/rpm ; mkdir -p SOURCES BUILD RPMS/i386 SPECS SRPMS
|
||||
#
|
||||
# If additional configure flags are needed to build the package, add the
|
||||
# following in ~/.rpmmacros
|
||||
# %configure CFLAGS="%{optflags}" ./configure %{_target_platform} --prefix=%{_prefix} ${AM_CONFIGFLAGS}
|
||||
# and run make rpm in the following way:
|
||||
# AM_CONFIGFLAGS='--with-uri=/home/users/loic/local/RedHat-6.2' make rpm
|
||||
#
|
||||
|
||||
rpms:
|
||||
$(MAKE) RPMDIST=curl rpm
|
||||
$(MAKE) RPMDIST=curl-ssl rpm
|
||||
|
||||
rpm:
|
||||
RPM_TOPDIR=`rpm --showrc | $(PERL) -n -e 'print if(s/.*_topdir\s+(.*)/$$1/)'` ; \
|
||||
cp $(srcdir)/packages/Linux/RPM/$(RPMDIST).spec $$RPM_TOPDIR/SPECS ; \
|
||||
cp $(PACKAGE)-$(VERSION).tar.gz $$RPM_TOPDIR/SOURCES ; \
|
||||
rpm -ba --clean --rmsource $$RPM_TOPDIR/SPECS/$(RPMDIST).spec ; \
|
||||
mv $$RPM_TOPDIR/RPMS/i386/$(RPMDIST)-*.rpm . ; \
|
||||
mv $$RPM_TOPDIR/SRPMS/$(RPMDIST)-*.src.rpm .
|
||||
|
||||
#
|
||||
# Build a Solaris pkkgadd format file
|
||||
# run 'make pkgadd' once you've done './configure' and 'make' to make a Solaris pkgadd format
|
||||
# file (which ends up back in this directory).
|
||||
# The pkgadd file is in 'pkgtrans' format, so to install on Solaris, do
|
||||
# pkgadd -d ./HAXXcurl-*
|
||||
#
|
||||
|
||||
# gak - libtool requires an absoulte directory, hence the pwd below...
|
||||
pkgadd:
|
||||
umask 022 ; \
|
||||
make install DESTDIR=`/bin/pwd`/packages/Solaris/root ; \
|
||||
cat COPYING > $(srcdir)/packages/Solaris/copyright ; \
|
||||
cd $(srcdir)/packages/Solaris && $(MAKE) package
|
||||
|
||||
#
|
||||
# Build a cygwin binary tarball installation file
|
||||
# resulting .tar.bz2 file will end up at packages/Win32/cygwin
|
||||
cygwinbin:
|
||||
$(MAKE) -C packages/Win32/cygwin cygwinbin
|
||||
|
||||
# We extend the standard install with a custom hook:
|
||||
install-data-hook:
|
||||
cd include && $(MAKE) install
|
||||
cd docs && $(MAKE) install
|
||||
|
||||
@@ -1,45 +1,25 @@
|
||||
############################################################################
|
||||
#############################################################################
|
||||
# _ _ ____ _
|
||||
# Project ___| | | | _ \| |
|
||||
# / __| | | | |_) | |
|
||||
# | (__| |_| | _ <| |___
|
||||
# \___|\___/|_| \_\_____|
|
||||
#
|
||||
# The contents of this file are subject to the Mozilla Public License
|
||||
# Version 1.0 (the "License"); you may not use this file except in
|
||||
# compliance with the License. You may obtain a copy of the License at
|
||||
# http://www.mozilla.org/MPL/
|
||||
# Copyright (C) 2002, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
#
|
||||
# Software distributed under the License is distributed on an "AS IS"
|
||||
# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing rights and limitations
|
||||
# under the License.
|
||||
# In order to be useful for every potential user, curl and libcurl are
|
||||
# dual-licensed under the MPL and the MIT/X-derivate licenses.
|
||||
#
|
||||
# The Original Code is Curl.
|
||||
# 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 MPL or the MIT/X-derivate
|
||||
# licenses. You may pick one of these licenses.
|
||||
#
|
||||
# The Initial Developer of the Original Code is Daniel Stenberg.
|
||||
# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
# KIND, either express or implied.
|
||||
#
|
||||
# Portions created by the Initial Developer are Copyright (C) 1999.
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# ------------------------------------------------------------
|
||||
# Main author:
|
||||
# - Daniel Stenberg <Daniel.Stenberg@haxx.nu>
|
||||
#
|
||||
# http://curl.haxx.nu
|
||||
#
|
||||
# $Source$
|
||||
# $Revision$
|
||||
# $Date$
|
||||
# $Author$
|
||||
# $State$
|
||||
# $Locker$
|
||||
#
|
||||
# ------------------------------------------------------------
|
||||
#
|
||||
# In a normal unix-setup, this file will become overwritten.
|
||||
#
|
||||
############################################################################
|
||||
# $Id$
|
||||
#############################################################################
|
||||
|
||||
all:
|
||||
./configure
|
||||
@@ -49,17 +29,39 @@ ssl:
|
||||
./configure --with-ssl
|
||||
make
|
||||
|
||||
borland:
|
||||
cd lib & make -f Makefile.b32
|
||||
cd src & make -f Makefile.b32
|
||||
|
||||
mingw32:
|
||||
cd lib; make -f Makefile.m32
|
||||
cd src; make -f Makefile.m32
|
||||
cd lib & make -f Makefile.m32 ZLIB=1
|
||||
cd src & make -f Makefile.m32 ZLIB=1
|
||||
|
||||
mingw32-ssl:
|
||||
cd lib; make -f Makefile.m32 SSL=1
|
||||
cd src; make -f Makefile.m32 SSL=1
|
||||
cd lib & make -f Makefile.m32 SSL=1 ZLIB=1
|
||||
cd src & make -f Makefile.m32 SSL=1 ZLIB=1
|
||||
|
||||
vc:
|
||||
cd lib; nmake -f Makefile.vc6
|
||||
cd src; nmake -f Makefile.vc6
|
||||
cd lib
|
||||
nmake -f Makefile.vc6 cfg=release
|
||||
cd ..\src
|
||||
nmake -f Makefile.vc6
|
||||
|
||||
vc-ssl:
|
||||
cd lib
|
||||
nmake -f Makefile.vc6 cfg=release-ssl
|
||||
cd ..\src
|
||||
nmake -f Makefile.vc6 cfg=release-ssl
|
||||
|
||||
vc-ssl-dll:
|
||||
cd lib
|
||||
nmake -f Makefile.vc6 cfg=release-ssl-dll
|
||||
cd ..\src
|
||||
nmake -f Makefile.vc6
|
||||
|
||||
djgpp:
|
||||
make -C lib -f Makefile.dj
|
||||
make -C src -f Makefile.dj
|
||||
|
||||
cygwin:
|
||||
./configure
|
||||
|
||||
58
README
58
README
@@ -8,37 +8,61 @@ README
|
||||
|
||||
Curl is a command line tool for transfering data specified with URL
|
||||
syntax. Find out how to use Curl by reading the curl.1 man page or the
|
||||
README.curl document. Find out how to install Curl by reading the INSTALL
|
||||
MANUAL document. Find out how to install Curl by reading the INSTALL
|
||||
document.
|
||||
|
||||
libcurl is a link-library that Curl is using to do its job. It is readily
|
||||
available to be used by your software. Read the README.libcurl document to
|
||||
find out how!
|
||||
libcurl is the library curl is using to do its job. It is readily
|
||||
available to be used by your software. Read the libcurl.3 man page to
|
||||
learn how!
|
||||
|
||||
You find answers to the most frequent questions we get in the FAQ document.
|
||||
|
||||
Always try the Curl web site for the latest news:
|
||||
Study the COPYING file for distribution terms and similar.
|
||||
|
||||
http://curl.haxx.nu
|
||||
CONTACT
|
||||
|
||||
If you have problems, questions, ideas or suggestions, please contact us
|
||||
by posting to a suitable mailing list. See http://curl.haxx.se/mail/
|
||||
|
||||
Many major contributors to the project are listed in the THANKS document.
|
||||
|
||||
WEB SITE
|
||||
|
||||
Visit the curl web site or mirrors for the latest news:
|
||||
|
||||
Sweden -- http://curl.haxx.se/
|
||||
US -- http://curl.sf.net/
|
||||
Australia -- http://curl.planetmirror.com/
|
||||
|
||||
DOWNLOAD
|
||||
|
||||
The official download mirror sites are:
|
||||
|
||||
Sweden -- ftp://ftp.sunet.se/pub/www/utilities/curl/
|
||||
Germany -- ftp://ftp.fu-berlin.de/pub/unix/network/curl/
|
||||
China -- http://www.pshowing.com/curl/
|
||||
Sweden -- ftp://ftp.sunet.se/pub/www/utilities/curl/
|
||||
Sweden -- http://cool.haxx.se/curl/
|
||||
Germany -- ftp://ftp.fu-berlin.de/pub/unix/network/curl/
|
||||
Australia -- http://curl.planetmirror.com/download/
|
||||
US -- http://curl.sourceforge.net/download/
|
||||
Hongkong -- http://www.execve.net/curl/
|
||||
|
||||
CVS
|
||||
|
||||
To download the very latest source off the CVS server do this:
|
||||
|
||||
cvs -d :pserver:anonymous@cvs.curl.sourceforge.net:/cvsroot/curl login
|
||||
cvs -d :pserver:cvsread@cvs.php.net:/repository login
|
||||
|
||||
(just press enter when asked for password)
|
||||
(enter "phpfi" when asked for password)
|
||||
|
||||
cvs -d :pserver:anonymous@cvs.curl.sourceforge.net:/cvsroot/curl co .
|
||||
cvs -d :pserver:cvsread@cvs.php.net:/repository co curl
|
||||
|
||||
(now, you'll get all the latest sources downloaded into your current
|
||||
directory. Note that this does not create a directory named curl or
|
||||
anything)
|
||||
(you'll get a directory named curl created, filled with the source code)
|
||||
|
||||
cvs -d :pserver:anonymous@cvs.curl.sourceforge.net:/cvsroot/curl logout
|
||||
cvs -d :pserver:cvsread@cvs.php.net:/repository logout
|
||||
|
||||
(you're off the hook!)
|
||||
(you're off the hook!)
|
||||
|
||||
NOTICE
|
||||
|
||||
Curl contains pieces of source code that is Copyright (c) 1998, 1999
|
||||
Kungliga Tekniska H<>gskolan. This notice is included here to comply with the
|
||||
distribution terms.
|
||||
|
||||
108
README.libcurl
108
README.libcurl
@@ -1,108 +0,0 @@
|
||||
_ _ _ _
|
||||
| (_) |__ ___ _ _ _ __| |
|
||||
| | | '_ \ / __| | | | '__| |
|
||||
| | | |_) | (__| |_| | | | |
|
||||
|_|_|_.__/ \___|\__,_|_| |_|
|
||||
|
||||
|
||||
How To Use Libcurl In Your Program:
|
||||
(by Ralph Beckmann <rabe@uni-paderborn.de>)
|
||||
|
||||
NOTE: If you plan to use libcurl.a in Threads under Linux, do not use the old
|
||||
gcc-2.7.x because the function 'gethostbyname' seems not to be thread-safe,
|
||||
that is to say an unavoidable SEGMENTATION FAULT might occur.
|
||||
|
||||
|
||||
1. a) In a C-Program:
|
||||
#include "curl.h"
|
||||
|
||||
b) In a C++-Program:
|
||||
extern "C" {
|
||||
#include "curl.h"
|
||||
}
|
||||
|
||||
2. char *url="http://www.domain.com";
|
||||
curl_urlget (URGTAG_URL, url,
|
||||
URGTAG_FLAGS, CONF_NOPROGRESS,
|
||||
URGTAG_ERRORBUFFER, errorBuffer,
|
||||
URGTAG_WRITEFUNCTION, (size_t (*)(void *, int, int, FILE
|
||||
*))handle_data,
|
||||
URGTAG_TIMEOUT, 30, /* or anything You want */
|
||||
...
|
||||
URGTAG_DONE);
|
||||
|
||||
3. size_t handle_data (const void *ptr, size_t size, size_t nitems,
|
||||
FILE *stream)
|
||||
{
|
||||
(void)stream; /* stop complaining using g++ -Wall */
|
||||
if ((int)nitems <= 0) {
|
||||
return (size_t)0;
|
||||
}
|
||||
fprintf(stdout, (char *)ptr); /* or do anything else with it */
|
||||
return nitems;
|
||||
}
|
||||
|
||||
4. Compile Your Program with -I$(CURL_DIR)/include
|
||||
|
||||
5. Link Your Program together with $(CURL_DIR)/lib/libcurl.a
|
||||
|
||||
Small Example of How To Use libcurl
|
||||
|
||||
----------------------------------------------------------------------
|
||||
/* Full example that uses libcurl.a to fetch web pages. */
|
||||
/* curlthreads.c */
|
||||
/* - Test-Program by Ralph Beckmann for using curl in POSIX-Threads */
|
||||
/* Change *url1 and *url2 to textual long and slow non-FRAMESET websites! */
|
||||
/*
|
||||
1. Compile with gcc or g++ as $(CC):
|
||||
$(CC) -c -Wall -pedantic curlthreads.c -I$(CURL_DIR)/include
|
||||
|
||||
2. Link with:
|
||||
- Linux:
|
||||
$(CC) -o curlthreads curlthreads.o $(CURL_DIR)/lib/libcurl.a -lpthread
|
||||
-lm
|
||||
- Solaris:
|
||||
$(CC) -o curlthreads curlthreads.o $(CURL_DIR)/lib/libcurl.a -lpthread
|
||||
-lm -lsocket -lnsl
|
||||
*/
|
||||
|
||||
#include <pthread.h>
|
||||
#include <stdio.h>
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#include "curl.h"
|
||||
}
|
||||
#else
|
||||
#include "curl.h"
|
||||
#endif
|
||||
|
||||
size_t storedata (const void *ptr, size_t size, size_t nitems, FILE *stream) {
|
||||
(void)ptr; (void)stream; /* just to stop g++ -Wall complaining */
|
||||
fprintf(stdout, "Thread #%i reads %i Bytes.\n",
|
||||
(int)pthread_self(), (int)(nitems*size));
|
||||
return (nitems);
|
||||
}
|
||||
|
||||
void *urlfetcher(void *url) {
|
||||
curl_urlget (URGTAG_URL, url,
|
||||
URGTAG_FLAGS, CONF_NOPROGRESS | CONF_FAILONERROR,
|
||||
URGTAG_WRITEFUNCTION, (size_t (*)(void *, int, int, FILE
|
||||
*))storedata,
|
||||
URGTAG_DONE);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int main(void) {
|
||||
char *url1="www.sun.com";
|
||||
char *url2="www.microsoft.com";
|
||||
|
||||
pthread_t thread_id1, thread_id2;
|
||||
pthread_create(&thread_id1, NULL, urlfetcher, (void *)url1);
|
||||
pthread_create(&thread_id2, NULL, urlfetcher, (void *)url2);
|
||||
pthread_join(thread_id1, NULL);
|
||||
pthread_join(thread_id2, NULL);
|
||||
|
||||
fprintf(stdout, "Ready.\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
62
RESOURCES
62
RESOURCES
@@ -1,62 +0,0 @@
|
||||
_ _ ____ _
|
||||
Project ___| | | | _ \| |
|
||||
/ __| | | | |_) | |
|
||||
| (__| |_| | _ <| |___
|
||||
\___|\___/|_| \_\_____|
|
||||
|
||||
|
||||
This document has been introduced in order to let you find documents that
|
||||
specify standards used by curl, software that extends curl and web pages with
|
||||
"competing" utilities.
|
||||
|
||||
Standards
|
||||
|
||||
RFC 959 - Defines how FTP works
|
||||
RFC 1738 - Uniform Resource Locators
|
||||
RFC 1777 - defines the LDAP protocol
|
||||
RFC 1808 - Relative Uniform Resource Locators
|
||||
RFC 1867 - Form-based File Upload in HTML
|
||||
|
||||
RFC 1950 - ZLIB Compressed Data Format Specification
|
||||
RFC 1951 - DEFLATE Compressed Data Format Specification
|
||||
RFC 1952 - gzip compression format
|
||||
|
||||
RFC 1959 - LDAP URL syntax
|
||||
RFC 2045-2049 - Everything you need to know about MIME! (needed for form
|
||||
based upload)
|
||||
RFC 2068 - HTTP 1.1 (obsoleted by RFC 2616)
|
||||
RFC 2109 - HTTP State Management Mechanism (cookie stuff)
|
||||
- Also, read Netscape's specification at
|
||||
http://www.netscape.com/newsref/std/cookie_spec.html
|
||||
RFC 2183 - "The Content-Disposition Header Field"
|
||||
RFC 2229 - "A Dictionary Server Protocol"
|
||||
RFC 2231 - "MIME Parameter Value and Encoded Word Extensions:
|
||||
Character Sets, Languages, and Continuations"
|
||||
RFC 2388 - "Returning Values from Forms: multipart/form-data"
|
||||
Use this as an addition to the 1867
|
||||
RFC 2396 - "Uniform Resource Identifiers: Generic Syntax and Semantics"
|
||||
This one obsoletes 1738, but since 1738 is often mentioned I've left it
|
||||
in this list.
|
||||
RFC 2428 - "FTP Extensions for IPv6 and NATs"
|
||||
This should be considered when introducing IPv6 awareness.
|
||||
RFC 2616 - HTTP 1.1
|
||||
RFC 2617 - HTTP Authentication
|
||||
|
||||
Compilers
|
||||
|
||||
MingW32 - http://www.xraylith.wisc.edu/~khan/software/gnu-win32/index.html
|
||||
|
||||
Software
|
||||
|
||||
OpenSSL - http://www.openssl.org
|
||||
OpenLDAP - http://www.openldap.org
|
||||
zlib - http://www.cdrom.com/pub/infozip/zlib/
|
||||
|
||||
Competitors
|
||||
|
||||
wget - ftp://prep.ai.mit.edu/pub/gnu/
|
||||
snarf - http://www.xach.com/snarf/
|
||||
lynx - http://lynx.browser.org/ (well at least when -dump is used)
|
||||
swebget - http://www.uni-hildesheim.de/~smol0075/swebget/
|
||||
fetch - ?
|
||||
|
||||
93
TODO
93
TODO
@@ -1,93 +0,0 @@
|
||||
_ _ ____ _
|
||||
___| | | | _ \| |
|
||||
/ __| | | | |_) | |
|
||||
| (__| |_| | _ <| |___
|
||||
\___|\___/|_| \_\_____|
|
||||
|
||||
TODO
|
||||
|
||||
Ok, this is what I wanna do with Curl. Please tell me what you think, and
|
||||
please don't hesitate to contribute and send me patches that improve this
|
||||
product! (Yes, you may add things not mentioned here, these are just a
|
||||
few teasers...)
|
||||
|
||||
* rtsp:// support -- "Real Time Streaming Protocol"
|
||||
|
||||
RFC 2326
|
||||
|
||||
* "Content-Encoding: compress/gzip/zlib"
|
||||
|
||||
HTTP 1.1 clearly defines how to get and decode compressed documents. There
|
||||
is the zlib that is pretty good at decompressing stuff. This work was
|
||||
started in October 1999 but halted again since it proved more work than we
|
||||
thought. It is still a good idea to implement though.
|
||||
|
||||
* HTTP Pipelining/persistant connections
|
||||
|
||||
- We should introduce HTTP "pipelining". Curl could be able to request for
|
||||
several HTTP documents in one connect. It would be the beginning for
|
||||
supporing more advanced functions in the future, like web site
|
||||
mirroring. This will require that the urlget() function supports several
|
||||
documents from a single HTTP server, which it doesn't today.
|
||||
|
||||
- When curl supports fetching several documents from the same server using
|
||||
pipelining, I'd like to offer that function to the command line. Anyone has
|
||||
a good idea how? The current way of specifying one URL with the output sent
|
||||
to the stdout or a file gets in the way. Imagine a syntax that supports
|
||||
"additional documents from the same server" in a way similar to:
|
||||
|
||||
curl <main URL> --more-doc <path> --more-doc <path>
|
||||
|
||||
where --more-doc specifies another document on the same server. Where are
|
||||
the output files gonna be put and how should they be named? Should each
|
||||
"--more-doc" parameter require a local file name to store the result in?
|
||||
Like "--more-file" as in:
|
||||
|
||||
curl <URL> --more-doc <path> --more-file <file>
|
||||
|
||||
* RFC2617 compliance, "Digest Access Authentication"
|
||||
A valid test page seem to exist at:
|
||||
http://hopf.math.nwu.edu/testpage/digest/
|
||||
And some friendly person's server source code is available at
|
||||
http://hopf.math.nwu.edu/digestauth/index.html
|
||||
|
||||
Then there's the Apache mod_digest source code too of course. It seems as
|
||||
if Netscape doesn't support this, and not many servers do. Although this is
|
||||
a lot better authentication method than the more common "Basic". Basic
|
||||
sends the password in cleartext over the network, this "Digest" method uses
|
||||
a challange-response protocol which increases security quite a lot.
|
||||
|
||||
* Different FTP Upload Through Web Proxy
|
||||
I don't know any web proxies that allow CONNECT through on port 21, but
|
||||
that would be the best way to do ftp upload. All we would need to do would
|
||||
be to 'CONNECT <host>:<port> HTTP/1.0\r\n\r\n' and then do business as
|
||||
usual. I least I think so. It would be fun if someone tried this...
|
||||
|
||||
* Multiple Proxies?
|
||||
Is there anyone that actually uses serial-proxies? I mean, send CONNECT to
|
||||
the first proxy to connect to the second proxy to which you send CONNECT to
|
||||
connect to the remote host (or even more iterations). Is there anyone
|
||||
wanting curl to support it? (Not that it would be hard, just confusing...)
|
||||
|
||||
* Other proxies
|
||||
Ftp-kind proxy, Socks5, whatever kind of proxies are there?
|
||||
|
||||
* IPv6 Awareness
|
||||
Where ever it would fit. I am not that into v6 yet to fully grasp what we
|
||||
would need to do, but letting the autoconf search for v6-versions of a few
|
||||
functions and then use them instead is of course the first thing to do...
|
||||
RFC 2428 "FTP Extensions for IPv6 and NATs" will be interesting. PORT
|
||||
should be replaced with EPRT for IPv6, and EPSV instead of PASV.
|
||||
|
||||
* An automatic RPM package maker
|
||||
Please, write me a script that makes it. It'd make my day.
|
||||
|
||||
* SSL for more protocols, like SSL-FTP...
|
||||
(http://search.ietf.org/internet-drafts/draft-murray-auth-ftp-ssl-05.txt)
|
||||
|
||||
* HTTP POST resume using Range:
|
||||
|
||||
* Make curl capable of verifying the server's certificate when connecting
|
||||
with HTTPS://.
|
||||
|
||||
* Make the timeout work as expected!
|
||||
12
acconfig.h
12
acconfig.h
@@ -1,12 +0,0 @@
|
||||
/* Name of this package! */
|
||||
#undef PACKAGE
|
||||
|
||||
/* Version number of this archive. */
|
||||
#undef VERSION
|
||||
|
||||
/* Define if you have the getpass function. */
|
||||
#undef HAVE_GETPASS
|
||||
|
||||
/* Define cpu-machine-OS */
|
||||
#undef OS
|
||||
|
||||
445
acinclude.m4
Normal file
445
acinclude.m4
Normal file
@@ -0,0 +1,445 @@
|
||||
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 and XPG3, while the other different ways for different systems (old BSD,
|
||||
dnl Windows and Amiga).
|
||||
dnl
|
||||
dnl There are two known platforms (AIX 3.x and SunOS 4.1.x) where the
|
||||
dnl O_NONBLOCK define is found but does not work. This condition is attempted
|
||||
dnl to get caught in this script by using an excessive number of #ifdefs...
|
||||
dnl
|
||||
AC_DEFUN(CURL_CHECK_NONBLOCKING_SOCKET,
|
||||
[
|
||||
AC_MSG_CHECKING([non-blocking sockets style])
|
||||
|
||||
AC_TRY_COMPILE([
|
||||
/* headers for O_NONBLOCK test */
|
||||
#include <sys/types.h>
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
],[
|
||||
/* try to compile O_NONBLOCK */
|
||||
|
||||
#if defined(sun) || defined(__sun__) || defined(__SUNPRO_C) || defined(__SUNPRO_CC)
|
||||
# if defined(__SVR4) || defined(__srv4__)
|
||||
# define PLATFORM_SOLARIS
|
||||
# else
|
||||
# define PLATFORM_SUNOS4
|
||||
# endif
|
||||
#endif
|
||||
#if (defined(_AIX) || defined(__xlC__)) && !defined(_AIX4)
|
||||
# define PLATFORM_AIX_V3
|
||||
#endif
|
||||
|
||||
#if defined(PLATFORM_SUNOS4) || defined(PLATFORM_AIX_V3)
|
||||
#error "O_NONBLOCK does not work on this platform"
|
||||
#endif
|
||||
int socket;
|
||||
int flags = fcntl(socket, F_SETFL, flags | O_NONBLOCK);
|
||||
],[
|
||||
dnl the O_NONBLOCK test was fine
|
||||
nonblock="O_NONBLOCK"
|
||||
AC_DEFINE(HAVE_O_NONBLOCK, 1, [use O_NONBLOCK for non-blocking sockets])
|
||||
],[
|
||||
dnl the code was bad, try a different program now, test 2
|
||||
|
||||
AC_TRY_COMPILE([
|
||||
/* headers for FIONBIO test */
|
||||
#include <unistd.h>
|
||||
#include <stropts.h>
|
||||
],[
|
||||
/* FIONBIO source test */
|
||||
int flags = ioctl(socket, FIONBIO, &flags);
|
||||
],[
|
||||
dnl FIONBIO test was good
|
||||
nonblock="FIONBIO"
|
||||
AC_DEFINE(HAVE_FIONBIO, 1, [use FIONBIO for non-blocking sockets])
|
||||
],[
|
||||
dnl FIONBIO test was also bad
|
||||
dnl the code was bad, try a different program now, test 3
|
||||
|
||||
AC_TRY_COMPILE([
|
||||
/* headers for ioctlsocket test (cygwin?) */
|
||||
#include <windows.h>
|
||||
],[
|
||||
/* ioctlsocket source code */
|
||||
int flags = ioctlsocket(socket, FIONBIO, &flags);
|
||||
],[
|
||||
dnl ioctlsocket test was good
|
||||
nonblock="ioctlsocket"
|
||||
AC_DEFINE(HAVE_IOCTLSOCKET, 1, [use ioctlsocket() for non-blocking sockets])
|
||||
],[
|
||||
dnl ioctlsocket didnt compile!
|
||||
|
||||
AC_TRY_COMPILE([
|
||||
/* headers for IoctlSocket test (Amiga?) */
|
||||
#include <sys/ioctl.h>
|
||||
],[
|
||||
/* IoctlSocket source code */
|
||||
int flags = IoctlSocket(socket, FIONBIO, (long)1);
|
||||
],[
|
||||
dnl ioctlsocket test was good
|
||||
nonblock="IoctlSocket"
|
||||
AC_DEFINE(HAVE_IOCTLSOCKET_CASE, 1, [use Ioctlsocket() for non-blocking sockets])
|
||||
],[
|
||||
dnl ioctlsocket didnt compile!
|
||||
nonblock="nada"
|
||||
AC_DEFINE(HAVE_DISABLED_NONBLOCKING, 1, [disabled non-blocking sockets])
|
||||
])
|
||||
dnl end of forth test
|
||||
|
||||
])
|
||||
dnl end of third test
|
||||
|
||||
])
|
||||
dnl end of second test
|
||||
|
||||
])
|
||||
dnl end of non-blocking try-compile test
|
||||
AC_MSG_RESULT($nonblock)
|
||||
|
||||
if test "$nonblock" = "nada"; then
|
||||
AC_MSG_WARN([non-block sockets disabled])
|
||||
fi
|
||||
])
|
||||
|
||||
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([
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
|
||||
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 Check for in_addr_t: it is used to receive the return code of inet_addr()
|
||||
dnl and a few other things. If not found, we set it to unsigned int, as even
|
||||
dnl 64-bit implementations use to set it to a 32-bit type.
|
||||
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([
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
#include <arpa/inet.h>
|
||||
],[
|
||||
$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])],
|
||||
[#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
#include <arpa/inet.h>])
|
||||
])
|
||||
|
||||
dnl ************************************************************
|
||||
dnl check for "localhost", if it doesn't exist, we can't do the
|
||||
dnl gethostbyname_r tests!
|
||||
dnl
|
||||
|
||||
AC_DEFUN(CURL_CHECK_WORKING_RESOLVER,[
|
||||
AC_MSG_CHECKING([if "localhost" resolves])
|
||||
AC_TRY_RUN([
|
||||
#include <string.h>
|
||||
#include <sys/types.h>
|
||||
#include <netdb.h>
|
||||
|
||||
int
|
||||
main () {
|
||||
struct hostent *h;
|
||||
h = gethostbyname("localhost");
|
||||
exit (h == NULL ? 1 : 0); }],[
|
||||
AC_MSG_RESULT(yes)],[
|
||||
AC_MSG_RESULT(no)
|
||||
AC_MSG_ERROR([can't figure out gethostbyname_r() since localhost doesn't resolve])
|
||||
|
||||
]
|
||||
)
|
||||
])
|
||||
|
||||
dnl ************************************************************
|
||||
dnl check for working getaddrinfo()
|
||||
dnl
|
||||
AC_DEFUN(CURL_CHECK_WORKING_GETADDRINFO,[
|
||||
AC_CACHE_CHECK(for working getaddrinfo, ac_cv_working_getaddrinfo,[
|
||||
AC_TRY_RUN( [
|
||||
#include <netdb.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
|
||||
void main(void) {
|
||||
struct addrinfo hints, *ai;
|
||||
int error;
|
||||
|
||||
memset(&hints, 0, sizeof(hints));
|
||||
hints.ai_family = AF_UNSPEC;
|
||||
hints.ai_socktype = SOCK_STREAM;
|
||||
error = getaddrinfo("127.0.0.1", "8080", &hints, &ai);
|
||||
if (error) {
|
||||
exit(1);
|
||||
}
|
||||
else {
|
||||
exit(0);
|
||||
}
|
||||
}
|
||||
],[
|
||||
ac_cv_working_getaddrinfo="yes"
|
||||
],[
|
||||
ac_cv_working_getaddrinfo="no"
|
||||
],[
|
||||
ac_cv_working_getaddrinfo="yes"
|
||||
])])
|
||||
if test "$ac_cv_working_getaddrinfo" = "yes"; then
|
||||
AC_DEFINE(HAVE_GETADDRINFO, 1, [Define if getaddrinfo exists and works])
|
||||
AC_DEFINE(ENABLE_IPV6, 1, [Define if you want to enable IPv6 support])
|
||||
|
||||
IPV6_ENABLED=1
|
||||
AC_SUBST(IPV6_ENABLED)
|
||||
fi
|
||||
])
|
||||
|
||||
|
||||
AC_DEFUN(CURL_CHECK_LOCALTIME_R,
|
||||
[
|
||||
dnl check for a few thread-safe functions
|
||||
AC_CHECK_FUNCS(localtime_r,[
|
||||
AC_MSG_CHECKING(whether localtime_r is declared)
|
||||
AC_EGREP_CPP(localtime_r,[
|
||||
#include <time.h>],[
|
||||
AC_MSG_RESULT(yes)],[
|
||||
AC_MSG_RESULT(no)
|
||||
AC_MSG_CHECKING(whether localtime_r with -D_REENTRANT is declared)
|
||||
AC_EGREP_CPP(localtime_r,[
|
||||
#define _REENTRANT
|
||||
#include <time.h>],[
|
||||
AC_DEFINE(NEED_REENTRANT)
|
||||
AC_MSG_RESULT(yes)],
|
||||
AC_MSG_RESULT(no))])])
|
||||
])
|
||||
|
||||
AC_DEFUN(CURL_CHECK_INET_NTOA_R,
|
||||
[
|
||||
dnl determine if function definition for inet_ntoa_r exists.
|
||||
AC_CHECK_FUNCS(inet_ntoa_r,[
|
||||
AC_MSG_CHECKING(whether inet_ntoa_r is declared)
|
||||
AC_EGREP_CPP(inet_ntoa_r,[
|
||||
#include <arpa/inet.h>],[
|
||||
AC_DEFINE(HAVE_INET_NTOA_R_DECL, 1, [inet_ntoa_r() is declared])
|
||||
AC_MSG_RESULT(yes)],[
|
||||
AC_MSG_RESULT(no)
|
||||
AC_MSG_CHECKING(whether inet_ntoa_r with -D_REENTRANT is declared)
|
||||
AC_EGREP_CPP(inet_ntoa_r,[
|
||||
#define _REENTRANT
|
||||
#include <arpa/inet.h>],[
|
||||
AC_DEFINE(HAVE_INET_NTOA_R_DECL, 1, [inet_ntoa_r() is declared])
|
||||
AC_DEFINE(NEED_REENTRANT, 1, [need REENTRANT defined])
|
||||
AC_MSG_RESULT(yes)],
|
||||
AC_MSG_RESULT(no))])])
|
||||
])
|
||||
|
||||
AC_DEFUN(CURL_CHECK_GETHOSTBYADDR_R,
|
||||
[
|
||||
dnl check for number of arguments to gethostbyaddr_r. it might take
|
||||
dnl either 5, 7, or 8 arguments.
|
||||
AC_CHECK_FUNCS(gethostbyaddr_r,[
|
||||
AC_MSG_CHECKING(if gethostbyaddr_r takes 5 arguments)
|
||||
AC_TRY_COMPILE([
|
||||
#include <sys/types.h>
|
||||
#include <netdb.h>],[
|
||||
char * address;
|
||||
int length;
|
||||
int type;
|
||||
struct hostent h;
|
||||
struct hostent_data hdata;
|
||||
int rc;
|
||||
rc = gethostbyaddr_r(address, length, type, &h, &hdata);],[
|
||||
AC_MSG_RESULT(yes)
|
||||
AC_DEFINE(HAVE_GETHOSTBYADDR_R_5, 1, [gethostbyaddr_r() takes 5 args])
|
||||
ac_cv_gethostbyaddr_args=5],[
|
||||
AC_MSG_RESULT(no)
|
||||
AC_MSG_CHECKING(if gethostbyaddr_r with -D_REENTRANT takes 5 arguments)
|
||||
AC_TRY_COMPILE([
|
||||
#define _REENTRANT
|
||||
#include <sys/types.h>
|
||||
#include <netdb.h>],[
|
||||
char * address;
|
||||
int length;
|
||||
int type;
|
||||
struct hostent h;
|
||||
struct hostent_data hdata;
|
||||
int rc;
|
||||
rc = gethostbyaddr_r(address, length, type, &h, &hdata);],[
|
||||
AC_MSG_RESULT(yes)
|
||||
AC_DEFINE(HAVE_GETHOSTBYADDR_R_5, 1, [gethostbyaddr_r() takes 5 args])
|
||||
AC_DEFINE(NEED_REENTRANT, 1, [need REENTRANT])
|
||||
ac_cv_gethostbyaddr_args=5],[
|
||||
AC_MSG_RESULT(no)
|
||||
AC_MSG_CHECKING(if gethostbyaddr_r takes 7 arguments)
|
||||
AC_TRY_COMPILE([
|
||||
#include <sys/types.h>
|
||||
#include <netdb.h>],[
|
||||
char * address;
|
||||
int length;
|
||||
int type;
|
||||
struct hostent h;
|
||||
char buffer[8192];
|
||||
int h_errnop;
|
||||
struct hostent * hp;
|
||||
|
||||
hp = gethostbyaddr_r(address, length, type, &h,
|
||||
buffer, 8192, &h_errnop);],[
|
||||
AC_MSG_RESULT(yes)
|
||||
AC_DEFINE(HAVE_GETHOSTBYADDR_R_7, 1, [gethostbyaddr_r() takes 7 args] )
|
||||
ac_cv_gethostbyaddr_args=7],[
|
||||
AC_MSG_RESULT(no)
|
||||
AC_MSG_CHECKING(if gethostbyaddr_r takes 8 arguments)
|
||||
AC_TRY_COMPILE([
|
||||
#include <sys/types.h>
|
||||
#include <netdb.h>],[
|
||||
char * address;
|
||||
int length;
|
||||
int type;
|
||||
struct hostent h;
|
||||
char buffer[8192];
|
||||
int h_errnop;
|
||||
struct hostent * hp;
|
||||
int rc;
|
||||
|
||||
rc = gethostbyaddr_r(address, length, type, &h,
|
||||
buffer, 8192, &hp, &h_errnop);],[
|
||||
AC_MSG_RESULT(yes)
|
||||
AC_DEFINE(HAVE_GETHOSTBYADDR_R_8, 1, [gethostbyaddr_r() takes 8 args])
|
||||
ac_cv_gethostbyaddr_args=8],[
|
||||
AC_MSG_RESULT(no)
|
||||
have_missing_r_funcs="$have_missing_r_funcs gethostbyaddr_r"])])])])])
|
||||
])
|
||||
|
||||
AC_DEFUN(CURL_CHECK_GETHOSTBYNAME_R,
|
||||
[
|
||||
dnl check for number of arguments to gethostbyname_r. it might take
|
||||
dnl either 3, 5, or 6 arguments.
|
||||
AC_CHECK_FUNCS(gethostbyname_r,[
|
||||
AC_MSG_CHECKING([if gethostbyname_r takes 3 arguments])
|
||||
AC_TRY_COMPILE([
|
||||
#include <string.h>
|
||||
#include <sys/types.h>
|
||||
#include <netdb.h>
|
||||
#undef NULL
|
||||
#define NULL (void *)0
|
||||
|
||||
int
|
||||
gethostbyname_r(const char *, struct hostent *, struct hostent_data *);],[
|
||||
struct hostent_data data;
|
||||
gethostbyname_r(NULL, NULL, NULL);],[
|
||||
AC_MSG_RESULT(yes)
|
||||
AC_DEFINE(HAVE_GETHOSTBYNAME_R_3, 1, [gethostbyname_r() takes 3 args])
|
||||
ac_cv_gethostbyname_args=3],[
|
||||
AC_MSG_RESULT(no)
|
||||
AC_MSG_CHECKING([if gethostbyname_r with -D_REENTRANT takes 3 arguments])
|
||||
AC_TRY_COMPILE([
|
||||
#define _REENTRANT
|
||||
|
||||
#include <string.h>
|
||||
#include <sys/types.h>
|
||||
#include <netdb.h>
|
||||
#undef NULL
|
||||
#define NULL (void *)0
|
||||
|
||||
int
|
||||
gethostbyname_r(const char *,struct hostent *, struct hostent_data *);],[
|
||||
struct hostent_data data;
|
||||
gethostbyname_r(NULL, NULL, NULL);],[
|
||||
AC_MSG_RESULT(yes)
|
||||
AC_DEFINE(HAVE_GETHOSTBYNAME_R_3, 1, [gethostbyname_r() takes 3 args])
|
||||
AC_DEFINE(NEED_REENTRANT, 1, [needs REENTRANT])
|
||||
ac_cv_gethostbyname_args=3],[
|
||||
AC_MSG_RESULT(no)
|
||||
AC_MSG_CHECKING([if gethostbyname_r takes 5 arguments])
|
||||
AC_TRY_COMPILE([
|
||||
#include <sys/types.h>
|
||||
#include <netdb.h>
|
||||
#undef NULL
|
||||
#define NULL (void *)0
|
||||
|
||||
struct hostent *
|
||||
gethostbyname_r(const char *, struct hostent *, char *, int, int *);],[
|
||||
gethostbyname_r(NULL, NULL, NULL, 0, NULL);],[
|
||||
AC_MSG_RESULT(yes)
|
||||
AC_DEFINE(HAVE_GETHOSTBYNAME_R_5, 1, [gethostbyname_r() takes 5 args])
|
||||
ac_cv_gethostbyname_args=5],[
|
||||
AC_MSG_RESULT(no)
|
||||
AC_MSG_CHECKING([if gethostbyname_r takes 6 arguments])
|
||||
AC_TRY_COMPILE([
|
||||
#include <sys/types.h>
|
||||
#include <netdb.h>
|
||||
#undef NULL
|
||||
#define NULL (void *)0
|
||||
|
||||
int
|
||||
gethostbyname_r(const char *, struct hostent *, char *, size_t,
|
||||
struct hostent **, int *);],[
|
||||
gethostbyname_r(NULL, NULL, NULL, 0, NULL, NULL);],[
|
||||
AC_MSG_RESULT(yes)
|
||||
AC_DEFINE(HAVE_GETHOSTBYNAME_R_6, 1, [gethostbyname_r() takes 6 args])
|
||||
ac_cv_gethostbyname_args=6],[
|
||||
AC_MSG_RESULT(no)
|
||||
have_missing_r_funcs="$have_missing_r_funcs gethostbyname_r"],
|
||||
[ac_cv_gethostbyname_args=0])],
|
||||
[ac_cv_gethostbyname_args=0])],
|
||||
[ac_cv_gethostbyname_args=0])],
|
||||
[ac_cv_gethostbyname_args=0])])
|
||||
|
||||
if test "$ac_cv_func_gethostbyname_r" = "yes"; then
|
||||
if test "$ac_cv_gethostbyname_args" = "0"; then
|
||||
dnl there's a gethostbyname_r() function, but we don't know how
|
||||
dnl many arguments it wants!
|
||||
AC_MSG_ERROR([couldn't figure out how to use gethostbyname_r()])
|
||||
fi
|
||||
fi
|
||||
])
|
||||
127
aclocal.m4
vendored
127
aclocal.m4
vendored
@@ -1,127 +0,0 @@
|
||||
dnl aclocal.m4 generated automatically by aclocal 1.4
|
||||
|
||||
dnl Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
|
||||
dnl This file is free software; the Free Software Foundation
|
||||
dnl gives unlimited permission to copy and/or distribute it,
|
||||
dnl with or without modifications, as long as this notice is preserved.
|
||||
|
||||
dnl This program is distributed in the hope that it will be useful,
|
||||
dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
dnl PARTICULAR PURPOSE.
|
||||
|
||||
# Like AC_CONFIG_HEADER, but automatically create stamp file.
|
||||
|
||||
AC_DEFUN(AM_CONFIG_HEADER,
|
||||
[AC_PREREQ([2.12])
|
||||
AC_CONFIG_HEADER([$1])
|
||||
dnl When config.status generates a header, we must update the stamp-h file.
|
||||
dnl This file resides in the same directory as the config header
|
||||
dnl that is generated. We must strip everything past the first ":",
|
||||
dnl and everything past the last "/".
|
||||
AC_OUTPUT_COMMANDS(changequote(<<,>>)dnl
|
||||
ifelse(patsubst(<<$1>>, <<[^ ]>>, <<>>), <<>>,
|
||||
<<test -z "<<$>>CONFIG_HEADERS" || echo timestamp > patsubst(<<$1>>, <<^\([^:]*/\)?.*>>, <<\1>>)stamp-h<<>>dnl>>,
|
||||
<<am_indx=1
|
||||
for am_file in <<$1>>; do
|
||||
case " <<$>>CONFIG_HEADERS " in
|
||||
*" <<$>>am_file "*<<)>>
|
||||
echo timestamp > `echo <<$>>am_file | sed -e 's%:.*%%' -e 's%[^/]*$%%'`stamp-h$am_indx
|
||||
;;
|
||||
esac
|
||||
am_indx=`expr "<<$>>am_indx" + 1`
|
||||
done<<>>dnl>>)
|
||||
changequote([,]))])
|
||||
|
||||
# Do all the work for Automake. This macro actually does too much --
|
||||
# some checks are only needed if your package does certain things.
|
||||
# But this isn't really a big deal.
|
||||
|
||||
# serial 1
|
||||
|
||||
dnl Usage:
|
||||
dnl AM_INIT_AUTOMAKE(package,version, [no-define])
|
||||
|
||||
AC_DEFUN(AM_INIT_AUTOMAKE,
|
||||
[AC_REQUIRE([AC_PROG_INSTALL])
|
||||
PACKAGE=[$1]
|
||||
AC_SUBST(PACKAGE)
|
||||
VERSION=[$2]
|
||||
AC_SUBST(VERSION)
|
||||
dnl test to see if srcdir already configured
|
||||
if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
|
||||
AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
|
||||
fi
|
||||
ifelse([$3],,
|
||||
AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
|
||||
AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package]))
|
||||
AC_REQUIRE([AM_SANITY_CHECK])
|
||||
AC_REQUIRE([AC_ARG_PROGRAM])
|
||||
dnl FIXME This is truly gross.
|
||||
missing_dir=`cd $ac_aux_dir && pwd`
|
||||
AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
|
||||
AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
|
||||
AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir)
|
||||
AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
|
||||
AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)
|
||||
AC_REQUIRE([AC_PROG_MAKE_SET])])
|
||||
|
||||
#
|
||||
# Check to make sure that the build environment is sane.
|
||||
#
|
||||
|
||||
AC_DEFUN(AM_SANITY_CHECK,
|
||||
[AC_MSG_CHECKING([whether build environment is sane])
|
||||
# Just in case
|
||||
sleep 1
|
||||
echo timestamp > conftestfile
|
||||
# Do `set' in a subshell so we don't clobber the current shell's
|
||||
# arguments. Must try -L first in case configure is actually a
|
||||
# symlink; some systems play weird games with the mod time of symlinks
|
||||
# (eg FreeBSD returns the mod time of the symlink's containing
|
||||
# directory).
|
||||
if (
|
||||
set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null`
|
||||
if test "[$]*" = "X"; then
|
||||
# -L didn't work.
|
||||
set X `ls -t $srcdir/configure conftestfile`
|
||||
fi
|
||||
if test "[$]*" != "X $srcdir/configure conftestfile" \
|
||||
&& test "[$]*" != "X conftestfile $srcdir/configure"; then
|
||||
|
||||
# If neither matched, then we have a broken ls. This can happen
|
||||
# if, for instance, CONFIG_SHELL is bash and it inherits a
|
||||
# broken ls alias from the environment. This has actually
|
||||
# happened. Such a system could not be considered "sane".
|
||||
AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
|
||||
alias in your environment])
|
||||
fi
|
||||
|
||||
test "[$]2" = conftestfile
|
||||
)
|
||||
then
|
||||
# Ok.
|
||||
:
|
||||
else
|
||||
AC_MSG_ERROR([newly created file is older than distributed files!
|
||||
Check your system clock])
|
||||
fi
|
||||
rm -f conftest*
|
||||
AC_MSG_RESULT(yes)])
|
||||
|
||||
dnl AM_MISSING_PROG(NAME, PROGRAM, DIRECTORY)
|
||||
dnl The program must properly implement --version.
|
||||
AC_DEFUN(AM_MISSING_PROG,
|
||||
[AC_MSG_CHECKING(for working $2)
|
||||
# Run test in a subshell; some versions of sh will print an error if
|
||||
# an executable is not found, even if stderr is redirected.
|
||||
# Redirect stdin to placate older versions of autoconf. Sigh.
|
||||
if ($2 --version) < /dev/null > /dev/null 2>&1; then
|
||||
$1=$2
|
||||
AC_MSG_RESULT(found)
|
||||
else
|
||||
$1="$3/missing $2"
|
||||
AC_MSG_RESULT(missing)
|
||||
fi
|
||||
AC_SUBST($1)])
|
||||
|
||||
69
build_vms.com
Executable file
69
build_vms.com
Executable file
@@ -0,0 +1,69 @@
|
||||
$!
|
||||
$
|
||||
$ on control_y then goto Common_Exit!
|
||||
$ orig = f$environment("DEFAULT")
|
||||
$ loc = f$environment("PROCEDURE")
|
||||
$ def = f$parse("X.X;1",loc) - "X.X;1"
|
||||
$
|
||||
$ set def 'def'
|
||||
$ cc_qual = "/define=HAVE_CONFIG_H=1/include=(""../include/"",""../"",""../../openssl-0_9_7/include/"")"
|
||||
$ if p1 .eqs. "LISTING" then cc_qual = cc_qual + "/LIST/MACHINE"
|
||||
$ if p1 .eqs. "DEBUG" then cc_qual = cc_qual + "/LIST/MACHINE/DEBUG"
|
||||
$ msg_qual = ""
|
||||
$ call build "[.lib]" "*.c"
|
||||
$ call build "[.src]" "*.c"
|
||||
$ call build "[.src]" "*.msg"
|
||||
$ link /exe=curl.exe [.src]curl/lib/include=main,[.lib]curl/lib, -
|
||||
[-.openssl-0_9_7.axp.exe.ssl]libssl/lib, -
|
||||
[-.openssl-0_9_7.axp.exe.crypto]libcrypto/lib
|
||||
$
|
||||
$
|
||||
$ goto Common_Exit
|
||||
$build: subroutine
|
||||
$ set noon
|
||||
$ set default 'p1'
|
||||
$ search = p2
|
||||
$ reset = f$search("reset")
|
||||
$ if f$search("CURL.OLB") .eqs. ""
|
||||
$ then
|
||||
$ LIB/CREATE/OBJECT CURL.OLB
|
||||
$ endif
|
||||
$ reset = f$search("reset",1)
|
||||
$Loop:
|
||||
$ file = f$search(search,1)
|
||||
$ if file .eqs. "" then goto EndLoop
|
||||
$ obj = f$search(f$parse(".OBJ;",file),2)
|
||||
$ if (obj .nes. "")
|
||||
$ then
|
||||
$ if (f$cvtime(f$file(file,"rdt")) .gts. f$cvtime(f$file(obj,"rdt")))
|
||||
$ then
|
||||
$ call compile 'file'
|
||||
$ lib/object curl.OLB 'f$parse(".obj;",file)'
|
||||
$ else
|
||||
$! write sys$output "File: ''file' is up to date"
|
||||
$ endif
|
||||
$ else
|
||||
$! write sys$output "Object for file: ''file' does not exist"
|
||||
$ call compile 'file'
|
||||
$ lib/object curl.OLB 'f$parse(".obj;",file)'
|
||||
$ endif
|
||||
$ goto Loop
|
||||
$EndLoop:
|
||||
$ purge
|
||||
$ set def 'def'
|
||||
$ endsubroutine ! Build
|
||||
$
|
||||
$compile: subroutine
|
||||
$ set noon
|
||||
$ file = p1
|
||||
$ qual = p2+p3+p4+p5+p6+p7+p8
|
||||
$ typ = f$parse(file,,,"TYPE") - "."
|
||||
$ cmd_c = "CC "+cc_qual
|
||||
$ cmd_msg = "MESSAGE "+msg_qual
|
||||
$ x = cmd_'typ'
|
||||
$ 'x' 'file'
|
||||
$ ENDSUBROUTINE ! Compile
|
||||
$
|
||||
$Common_Exit:
|
||||
$ set default 'orig'
|
||||
$ exit
|
||||
129
buildconf
Executable file
129
buildconf
Executable file
@@ -0,0 +1,129 @@
|
||||
#!/bin/sh
|
||||
|
||||
die(){
|
||||
echo "$@"
|
||||
exit
|
||||
}
|
||||
|
||||
#--------------------------------------------------------------------------
|
||||
# autoconf 2.57 or newer
|
||||
#
|
||||
need_autoconf="2.57"
|
||||
ac_version=`${AUTOCONF:-autoconf} --version 2>/dev/null|head -1| sed -e 's/^[^0-9]*//' -e 's/[a-z]* *$//'`
|
||||
if test -z "$ac_version"; then
|
||||
echo "buildconf: autoconf not found."
|
||||
echo " You need autoconf version $need_autoconf or newer installed."
|
||||
exit 1
|
||||
fi
|
||||
IFS=.; set $ac_version; IFS=' '
|
||||
if test "$1" = "2" -a "$2" -lt "57" || test "$1" -lt "2"; then
|
||||
echo "buildconf: autoconf version $ac_version found."
|
||||
echo " You need autoconf version $need_autoconf or newer installed."
|
||||
echo " If you have a sufficient autoconf installed, but it"
|
||||
echo " is not named 'autoconf', then try setting the"
|
||||
echo " AUTOCONF environment variable."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "buildconf: autoconf version $ac_version (ok)"
|
||||
|
||||
#--------------------------------------------------------------------------
|
||||
# autoheader 2.50 or newer
|
||||
#
|
||||
ah_version=`${AUTOHEADER:-autoheader} --version 2>/dev/null|head -1| sed -e 's/^[^0-9]*//' -e 's/[a-z]* *$//'`
|
||||
if test -z "$ah_version"; then
|
||||
echo "buildconf: autoheader not found."
|
||||
echo " You need autoheader version 2.50 or newer installed."
|
||||
exit 1
|
||||
fi
|
||||
IFS=.; set $ah_version; IFS=' '
|
||||
if test "$1" = "2" -a "$2" -lt "50" || test "$1" -lt "2"; then
|
||||
echo "buildconf: autoheader version $ah_version found."
|
||||
echo " You need autoheader version 2.50 or newer installed."
|
||||
echo " If you have a sufficient autoheader installed, but it"
|
||||
echo " is not named 'autoheader', then try setting the"
|
||||
echo " AUTOHEADER environment variable."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "buildconf: autoheader version $ah_version (ok)"
|
||||
|
||||
#--------------------------------------------------------------------------
|
||||
# automake 1.7 or newer
|
||||
#
|
||||
need_automake="1.7"
|
||||
am_version=`${AUTOMAKE:-automake} --version 2>/dev/null|head -1| sed -e 's/^.* \([0-9]\)/\1/' -e 's/[a-z]* *$//'`
|
||||
if test -z "$am_version"; then
|
||||
echo "buildconf: automake not found."
|
||||
echo " You need automake version $need_automake or newer installed."
|
||||
exit 1
|
||||
fi
|
||||
IFS=.; set $am_version; IFS=' '
|
||||
if test "$1" = "1" -a "$2" -lt "7" || test "$1" -lt "1"; then
|
||||
echo "buildconf: automake version $am_version found."
|
||||
echo " You need automake version $need_automake or newer installed."
|
||||
echo " If you have a sufficient automake installed, but it"
|
||||
echo " is not named 'autommake', then try setting the"
|
||||
echo " AUTOMAKE environment variable."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "buildconf: automake version $am_version (ok)"
|
||||
|
||||
|
||||
#--------------------------------------------------------------------------
|
||||
# libtool check
|
||||
#
|
||||
LIBTOOL_WANTED_MAJOR=1
|
||||
LIBTOOL_WANTED_MINOR=4
|
||||
LIBTOOL_WANTED_PATCH=2
|
||||
LIBTOOL_WANTED_VERSION=1.4.2
|
||||
|
||||
libtool=`which glibtool 2>/dev/null`
|
||||
if test ! -x "$libtool"; then
|
||||
libtool=`which libtool`
|
||||
fi
|
||||
#lt_pversion=`${LIBTOOL:-$libtool} --version 2>/dev/null|head -1| sed -e 's/^.* \([0-9]\)/\1/' -e 's/[a-z]* *$//'`
|
||||
lt_pversion=`$libtool --version 2>/dev/null|head -1|sed -e 's/^[^0-9]*//g' -e 's/[- ].*//'`
|
||||
if test -z "$lt_pversion"; then
|
||||
echo "buildconf: libtool not found."
|
||||
echo " You need libtool version $LIBTOOL_WANTED_VERSION or newer installed"
|
||||
exit 1
|
||||
fi
|
||||
lt_version=`echo $lt_pversion` #|sed -e 's/\([a-z]*\)$/.\1/'`
|
||||
IFS=.; set $lt_version; IFS=' '
|
||||
lt_status="good"
|
||||
if test "$1" = "$LIBTOOL_WANTED_MAJOR"; then
|
||||
if test "$2" -lt "$LIBTOOL_WANTED_MINOR"; then
|
||||
lt_status="bad"
|
||||
elif test ! -z "$LIBTOOL_WANTED_PATCH"; then
|
||||
if test -n "$3"; then
|
||||
if test "$3" -lt "$LIBTOOL_WANTED_PATCH"; then
|
||||
lt_status="bad"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
if test $lt_status != "good"; then
|
||||
echo "buildconf: libtool version $lt_pversion found."
|
||||
echo " You need libtool version $LIBTOOL_WANTED_VERSION or newer installed"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "buildconf: libtool version $lt_version (ok)"
|
||||
|
||||
# ------------------------------------------------------------
|
||||
|
||||
# run the correct scripts now
|
||||
|
||||
echo "buildconf: running libtoolize"
|
||||
${LIBTOOLIZE:-libtoolize} --copy --automake || die "The command '${LIBTOOLIZE:-libtoolize} --copy --automake' failed"
|
||||
echo "buildconf: running aclocal"
|
||||
${ACLOCAL:-aclocal} || die "The command '${AUTOHEADER:-aclocal}' failed"
|
||||
echo "buildconf: running autoheader"
|
||||
${AUTOHEADER:-autoheader} || die "The command '${AUTOHEADER:-autoheader}' failed"
|
||||
echo "buildconf: running autoconf"
|
||||
${AUTOCONF:-autoconf} || die "The command '${AUTOCONF:-autoconf}' failed"
|
||||
echo "buildconf: running automake"
|
||||
${AUTOMAKE:-automake} -a || die "The command '${AUTOMAKE:-automake} -a' failed"
|
||||
exit 0
|
||||
997
config.guess
vendored
997
config.guess
vendored
@@ -1,997 +0,0 @@
|
||||
#! /bin/sh
|
||||
# Attempt to guess a canonical system name.
|
||||
# Copyright (C) 1992, 93, 94, 95, 96, 97, 1998 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
# General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
#
|
||||
# As a special exception to the GNU General Public License, if you
|
||||
# distribute this file as part of a program that contains a
|
||||
# configuration script generated by Autoconf, you may include it under
|
||||
# the same distribution terms that you use for the rest of that program.
|
||||
|
||||
# Written by Per Bothner <bothner@cygnus.com>.
|
||||
# The master version of this file is at the FSF in /home/gd/gnu/lib.
|
||||
# Please send patches to the Autoconf mailing list <autoconf@gnu.org>.
|
||||
#
|
||||
# This script attempts to guess a canonical system name similar to
|
||||
# config.sub. If it succeeds, it prints the system name on stdout, and
|
||||
# exits with 0. Otherwise, it exits with 1.
|
||||
#
|
||||
# The plan is that this can be called by configure scripts if you
|
||||
# don't specify an explicit system type (host/target name).
|
||||
#
|
||||
# Only a few systems have been added to this list; please add others
|
||||
# (but try to keep the structure clean).
|
||||
#
|
||||
|
||||
# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
|
||||
# (ghazi@noc.rutgers.edu 8/24/94.)
|
||||
if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
|
||||
PATH=$PATH:/.attbin ; export PATH
|
||||
fi
|
||||
|
||||
UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
|
||||
UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
|
||||
UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
|
||||
UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
|
||||
|
||||
dummy=dummy-$$
|
||||
trap 'rm -f $dummy.c $dummy.o $dummy; exit 1' 1 2 15
|
||||
|
||||
# Note: order is significant - the case branches are not exclusive.
|
||||
|
||||
case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
|
||||
alpha:OSF1:*:*)
|
||||
if test $UNAME_RELEASE = "V4.0"; then
|
||||
UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
|
||||
fi
|
||||
# A Vn.n version is a released version.
|
||||
# A Tn.n version is a released field test version.
|
||||
# A Xn.n version is an unreleased experimental baselevel.
|
||||
# 1.2 uses "1.2" for uname -r.
|
||||
cat <<EOF >$dummy.s
|
||||
.globl main
|
||||
.ent main
|
||||
main:
|
||||
.frame \$30,0,\$26,0
|
||||
.prologue 0
|
||||
.long 0x47e03d80 # implver $0
|
||||
lda \$2,259
|
||||
.long 0x47e20c21 # amask $2,$1
|
||||
srl \$1,8,\$2
|
||||
sll \$2,2,\$2
|
||||
sll \$0,3,\$0
|
||||
addl \$1,\$0,\$0
|
||||
addl \$2,\$0,\$0
|
||||
ret \$31,(\$26),1
|
||||
.end main
|
||||
EOF
|
||||
${CC-cc} $dummy.s -o $dummy 2>/dev/null
|
||||
if test "$?" = 0 ; then
|
||||
./$dummy
|
||||
case "$?" in
|
||||
7)
|
||||
UNAME_MACHINE="alpha"
|
||||
;;
|
||||
15)
|
||||
UNAME_MACHINE="alphaev5"
|
||||
;;
|
||||
14)
|
||||
UNAME_MACHINE="alphaev56"
|
||||
;;
|
||||
10)
|
||||
UNAME_MACHINE="alphapca56"
|
||||
;;
|
||||
16)
|
||||
UNAME_MACHINE="alphaev6"
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
rm -f $dummy.s $dummy
|
||||
echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr [[A-Z]] [[a-z]]`
|
||||
exit 0 ;;
|
||||
21064:Windows_NT:50:3)
|
||||
echo alpha-dec-winnt3.5
|
||||
exit 0 ;;
|
||||
Amiga*:UNIX_System_V:4.0:*)
|
||||
echo m68k-cbm-sysv4
|
||||
exit 0;;
|
||||
amiga:NetBSD:*:*)
|
||||
echo m68k-cbm-netbsd${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
amiga:OpenBSD:*:*)
|
||||
echo m68k-unknown-openbsd${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
*:[Aa]miga[Oo][Ss]:*:*)
|
||||
echo ${UNAME_MACHINE}-unknown-amigaos
|
||||
exit 0 ;;
|
||||
arc64:OpenBSD:*:*)
|
||||
echo mips64el-unknown-openbsd${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
arc:OpenBSD:*:*)
|
||||
echo mipsel-unknown-openbsd${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
hkmips:OpenBSD:*:*)
|
||||
echo mips-unknown-openbsd${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
pmax:OpenBSD:*:*)
|
||||
echo mipsel-unknown-openbsd${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
sgi:OpenBSD:*:*)
|
||||
echo mips-unknown-openbsd${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
wgrisc:OpenBSD:*:*)
|
||||
echo mipsel-unknown-openbsd${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
|
||||
echo arm-acorn-riscix${UNAME_RELEASE}
|
||||
exit 0;;
|
||||
arm32:NetBSD:*:*)
|
||||
echo arm-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
|
||||
exit 0 ;;
|
||||
SR2?01:HI-UX/MPP:*:*)
|
||||
echo hppa1.1-hitachi-hiuxmpp
|
||||
exit 0;;
|
||||
Pyramid*:OSx*:*:*|MIS*:OSx*:*:*|MIS*:SMP_DC-OSx*:*:*)
|
||||
# akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
|
||||
if test "`(/bin/universe) 2>/dev/null`" = att ; then
|
||||
echo pyramid-pyramid-sysv3
|
||||
else
|
||||
echo pyramid-pyramid-bsd
|
||||
fi
|
||||
exit 0 ;;
|
||||
NILE*:*:*:dcosx)
|
||||
echo pyramid-pyramid-svr4
|
||||
exit 0 ;;
|
||||
sun4H:SunOS:5.*:*)
|
||||
echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
|
||||
exit 0 ;;
|
||||
sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
|
||||
echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
|
||||
exit 0 ;;
|
||||
i86pc:SunOS:5.*:*)
|
||||
echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
|
||||
exit 0 ;;
|
||||
sun4*:SunOS:6*:*)
|
||||
# According to config.sub, this is the proper way to canonicalize
|
||||
# SunOS6. Hard to guess exactly what SunOS6 will be like, but
|
||||
# it's likely to be more like Solaris than SunOS4.
|
||||
echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
|
||||
exit 0 ;;
|
||||
sun4*:SunOS:*:*)
|
||||
case "`/usr/bin/arch -k`" in
|
||||
Series*|S4*)
|
||||
UNAME_RELEASE=`uname -v`
|
||||
;;
|
||||
esac
|
||||
# Japanese Language versions have a version number like `4.1.3-JL'.
|
||||
echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
|
||||
exit 0 ;;
|
||||
sun3*:SunOS:*:*)
|
||||
echo m68k-sun-sunos${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
sun*:*:4.2BSD:*)
|
||||
UNAME_RELEASE=`(head -1 /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
|
||||
test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
|
||||
case "`/bin/arch`" in
|
||||
sun3)
|
||||
echo m68k-sun-sunos${UNAME_RELEASE}
|
||||
;;
|
||||
sun4)
|
||||
echo sparc-sun-sunos${UNAME_RELEASE}
|
||||
;;
|
||||
esac
|
||||
exit 0 ;;
|
||||
aushp:SunOS:*:*)
|
||||
echo sparc-auspex-sunos${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
atari*:NetBSD:*:*)
|
||||
echo m68k-atari-netbsd${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
atari*:OpenBSD:*:*)
|
||||
echo m68k-unknown-openbsd${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
sun3*:NetBSD:*:*)
|
||||
echo m68k-sun-netbsd${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
sun3*:OpenBSD:*:*)
|
||||
echo m68k-unknown-openbsd${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
mac68k:NetBSD:*:*)
|
||||
echo m68k-apple-netbsd${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
mac68k:OpenBSD:*:*)
|
||||
echo m68k-unknown-openbsd${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
mvme68k:OpenBSD:*:*)
|
||||
echo m68k-unknown-openbsd${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
mvme88k:OpenBSD:*:*)
|
||||
echo m88k-unknown-openbsd${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
powerpc:machten:*:*)
|
||||
echo powerpc-apple-machten${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
macppc:NetBSD:*:*)
|
||||
echo powerpc-apple-netbsd${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
RISC*:Mach:*:*)
|
||||
echo mips-dec-mach_bsd4.3
|
||||
exit 0 ;;
|
||||
RISC*:ULTRIX:*:*)
|
||||
echo mips-dec-ultrix${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
VAX*:ULTRIX*:*:*)
|
||||
echo vax-dec-ultrix${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
2020:CLIX:*:*)
|
||||
echo clipper-intergraph-clix${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
mips:*:*:UMIPS | mips:*:*:RISCos)
|
||||
sed 's/^ //' << EOF >$dummy.c
|
||||
#ifdef __cplusplus
|
||||
int main (int argc, char *argv[]) {
|
||||
#else
|
||||
int main (argc, argv) int argc; char *argv[]; {
|
||||
#endif
|
||||
#if defined (host_mips) && defined (MIPSEB)
|
||||
#if defined (SYSTYPE_SYSV)
|
||||
printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
|
||||
#endif
|
||||
#if defined (SYSTYPE_SVR4)
|
||||
printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
|
||||
#endif
|
||||
#if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
|
||||
printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
|
||||
#endif
|
||||
#endif
|
||||
exit (-1);
|
||||
}
|
||||
EOF
|
||||
${CC-cc} $dummy.c -o $dummy \
|
||||
&& ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
|
||||
&& rm $dummy.c $dummy && exit 0
|
||||
rm -f $dummy.c $dummy
|
||||
echo mips-mips-riscos${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
Night_Hawk:Power_UNIX:*:*)
|
||||
echo powerpc-harris-powerunix
|
||||
exit 0 ;;
|
||||
m88k:CX/UX:7*:*)
|
||||
echo m88k-harris-cxux7
|
||||
exit 0 ;;
|
||||
m88k:*:4*:R4*)
|
||||
echo m88k-motorola-sysv4
|
||||
exit 0 ;;
|
||||
m88k:*:3*:R3*)
|
||||
echo m88k-motorola-sysv3
|
||||
exit 0 ;;
|
||||
AViiON:dgux:*:*)
|
||||
# DG/UX returns AViiON for all architectures
|
||||
UNAME_PROCESSOR=`/usr/bin/uname -p`
|
||||
if [ $UNAME_PROCESSOR = mc88100 -o $UNAME_PROCESSOR = mc88110 ] ; then
|
||||
if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx \
|
||||
-o ${TARGET_BINARY_INTERFACE}x = x ] ; then
|
||||
echo m88k-dg-dgux${UNAME_RELEASE}
|
||||
else
|
||||
echo m88k-dg-dguxbcs${UNAME_RELEASE}
|
||||
fi
|
||||
else echo i586-dg-dgux${UNAME_RELEASE}
|
||||
fi
|
||||
exit 0 ;;
|
||||
M88*:DolphinOS:*:*) # DolphinOS (SVR3)
|
||||
echo m88k-dolphin-sysv3
|
||||
exit 0 ;;
|
||||
M88*:*:R3*:*)
|
||||
# Delta 88k system running SVR3
|
||||
echo m88k-motorola-sysv3
|
||||
exit 0 ;;
|
||||
XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
|
||||
echo m88k-tektronix-sysv3
|
||||
exit 0 ;;
|
||||
Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
|
||||
echo m68k-tektronix-bsd
|
||||
exit 0 ;;
|
||||
*:IRIX*:*:*)
|
||||
echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
|
||||
exit 0 ;;
|
||||
????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
|
||||
echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
|
||||
exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX '
|
||||
i?86:AIX:*:*)
|
||||
echo i386-ibm-aix
|
||||
exit 0 ;;
|
||||
*:AIX:2:3)
|
||||
if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
|
||||
sed 's/^ //' << EOF >$dummy.c
|
||||
#include <sys/systemcfg.h>
|
||||
|
||||
main()
|
||||
{
|
||||
if (!__power_pc())
|
||||
exit(1);
|
||||
puts("powerpc-ibm-aix3.2.5");
|
||||
exit(0);
|
||||
}
|
||||
EOF
|
||||
${CC-cc} $dummy.c -o $dummy && ./$dummy && rm $dummy.c $dummy && exit 0
|
||||
rm -f $dummy.c $dummy
|
||||
echo rs6000-ibm-aix3.2.5
|
||||
elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
|
||||
echo rs6000-ibm-aix3.2.4
|
||||
else
|
||||
echo rs6000-ibm-aix3.2
|
||||
fi
|
||||
exit 0 ;;
|
||||
*:AIX:*:4)
|
||||
IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | head -1 | awk '{ print $1 }'`
|
||||
if /usr/sbin/lsattr -EHl ${IBM_CPU_ID} | grep POWER >/dev/null 2>&1; then
|
||||
IBM_ARCH=rs6000
|
||||
else
|
||||
IBM_ARCH=powerpc
|
||||
fi
|
||||
if [ -x /usr/bin/oslevel ] ; then
|
||||
IBM_REV=`/usr/bin/oslevel`
|
||||
else
|
||||
IBM_REV=4.${UNAME_RELEASE}
|
||||
fi
|
||||
echo ${IBM_ARCH}-ibm-aix${IBM_REV}
|
||||
exit 0 ;;
|
||||
*:AIX:*:*)
|
||||
echo rs6000-ibm-aix
|
||||
exit 0 ;;
|
||||
ibmrt:4.4BSD:*|romp-ibm:BSD:*)
|
||||
echo romp-ibm-bsd4.4
|
||||
exit 0 ;;
|
||||
ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC NetBSD and
|
||||
echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
|
||||
exit 0 ;; # report: romp-ibm BSD 4.3
|
||||
*:BOSX:*:*)
|
||||
echo rs6000-bull-bosx
|
||||
exit 0 ;;
|
||||
DPX/2?00:B.O.S.:*:*)
|
||||
echo m68k-bull-sysv3
|
||||
exit 0 ;;
|
||||
9000/[34]??:4.3bsd:1.*:*)
|
||||
echo m68k-hp-bsd
|
||||
exit 0 ;;
|
||||
hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
|
||||
echo m68k-hp-bsd4.4
|
||||
exit 0 ;;
|
||||
9000/[34678]??:HP-UX:*:*)
|
||||
case "${UNAME_MACHINE}" in
|
||||
9000/31? ) HP_ARCH=m68000 ;;
|
||||
9000/[34]?? ) HP_ARCH=m68k ;;
|
||||
9000/6?? | 9000/7?? | 9000/80[024] | 9000/8?[136790] | 9000/892 )
|
||||
sed 's/^ //' << EOF >$dummy.c
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
|
||||
int main ()
|
||||
{
|
||||
#if defined(_SC_KERNEL_BITS)
|
||||
long bits = sysconf(_SC_KERNEL_BITS);
|
||||
#endif
|
||||
long cpu = sysconf (_SC_CPU_VERSION);
|
||||
|
||||
switch (cpu)
|
||||
{
|
||||
case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
|
||||
case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
|
||||
case CPU_PA_RISC2_0:
|
||||
#if defined(_SC_KERNEL_BITS)
|
||||
switch (bits)
|
||||
{
|
||||
case 64: puts ("hppa2.0w"); break;
|
||||
case 32: puts ("hppa2.0n"); break;
|
||||
default: puts ("hppa2.0"); break;
|
||||
} break;
|
||||
#else /* !defined(_SC_KERNEL_BITS) */
|
||||
puts ("hppa2.0"); break;
|
||||
#endif
|
||||
default: puts ("hppa1.0"); break;
|
||||
}
|
||||
exit (0);
|
||||
}
|
||||
EOF
|
||||
(${CC-cc} $dummy.c -o $dummy 2>/dev/null ) && HP_ARCH=`./$dummy`
|
||||
rm -f $dummy.c $dummy
|
||||
esac
|
||||
HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
|
||||
echo ${HP_ARCH}-hp-hpux${HPUX_REV}
|
||||
exit 0 ;;
|
||||
3050*:HI-UX:*:*)
|
||||
sed 's/^ //' << EOF >$dummy.c
|
||||
#include <unistd.h>
|
||||
int
|
||||
main ()
|
||||
{
|
||||
long cpu = sysconf (_SC_CPU_VERSION);
|
||||
/* The order matters, because CPU_IS_HP_MC68K erroneously returns
|
||||
true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct
|
||||
results, however. */
|
||||
if (CPU_IS_PA_RISC (cpu))
|
||||
{
|
||||
switch (cpu)
|
||||
{
|
||||
case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
|
||||
case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
|
||||
case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
|
||||
default: puts ("hppa-hitachi-hiuxwe2"); break;
|
||||
}
|
||||
}
|
||||
else if (CPU_IS_HP_MC68K (cpu))
|
||||
puts ("m68k-hitachi-hiuxwe2");
|
||||
else puts ("unknown-hitachi-hiuxwe2");
|
||||
exit (0);
|
||||
}
|
||||
EOF
|
||||
${CC-cc} $dummy.c -o $dummy && ./$dummy && rm $dummy.c $dummy && exit 0
|
||||
rm -f $dummy.c $dummy
|
||||
echo unknown-hitachi-hiuxwe2
|
||||
exit 0 ;;
|
||||
9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
|
||||
echo hppa1.1-hp-bsd
|
||||
exit 0 ;;
|
||||
9000/8??:4.3bsd:*:*)
|
||||
echo hppa1.0-hp-bsd
|
||||
exit 0 ;;
|
||||
*9??*:MPE*:*:*)
|
||||
echo hppa1.0-hp-mpeix
|
||||
exit 0 ;;
|
||||
*9??*:MPE*:*:*)
|
||||
echo hppa1.0-hp-mpeix
|
||||
exit 0 ;;
|
||||
hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
|
||||
echo hppa1.1-hp-osf
|
||||
exit 0 ;;
|
||||
hp8??:OSF1:*:*)
|
||||
echo hppa1.0-hp-osf
|
||||
exit 0 ;;
|
||||
i?86:OSF1:*:*)
|
||||
if [ -x /usr/sbin/sysversion ] ; then
|
||||
echo ${UNAME_MACHINE}-unknown-osf1mk
|
||||
else
|
||||
echo ${UNAME_MACHINE}-unknown-osf1
|
||||
fi
|
||||
exit 0 ;;
|
||||
parisc*:Lites*:*:*)
|
||||
echo hppa1.1-hp-lites
|
||||
exit 0 ;;
|
||||
C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
|
||||
echo c1-convex-bsd
|
||||
exit 0 ;;
|
||||
C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
|
||||
if getsysinfo -f scalar_acc
|
||||
then echo c32-convex-bsd
|
||||
else echo c2-convex-bsd
|
||||
fi
|
||||
exit 0 ;;
|
||||
C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
|
||||
echo c34-convex-bsd
|
||||
exit 0 ;;
|
||||
C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
|
||||
echo c38-convex-bsd
|
||||
exit 0 ;;
|
||||
C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
|
||||
echo c4-convex-bsd
|
||||
exit 0 ;;
|
||||
CRAY*X-MP:*:*:*)
|
||||
echo xmp-cray-unicos
|
||||
exit 0 ;;
|
||||
CRAY*Y-MP:*:*:*)
|
||||
echo ymp-cray-unicos${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
CRAY*[A-Z]90:*:*:*)
|
||||
echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
|
||||
| sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
|
||||
-e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/
|
||||
exit 0 ;;
|
||||
CRAY*TS:*:*:*)
|
||||
echo t90-cray-unicos${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
CRAY*T3E:*:*:*)
|
||||
echo t3e-cray-unicosmk${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
CRAY-2:*:*:*)
|
||||
echo cray2-cray-unicos
|
||||
exit 0 ;;
|
||||
F300:UNIX_System_V:*:*)
|
||||
FUJITSU_SYS=`uname -p | tr [A-Z] [a-z] | sed -e 's/\///'`
|
||||
FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
|
||||
echo "f300-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
|
||||
exit 0 ;;
|
||||
F301:UNIX_System_V:*:*)
|
||||
echo f301-fujitsu-uxpv`echo $UNAME_RELEASE | sed 's/ .*//'`
|
||||
exit 0 ;;
|
||||
hp3[0-9][05]:NetBSD:*:*)
|
||||
echo m68k-hp-netbsd${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
hp300:OpenBSD:*:*)
|
||||
echo m68k-unknown-openbsd${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
sparc*:BSD/OS:*:*)
|
||||
echo sparc-unknown-bsdi${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
i?86:BSD/386:*:* | i?86:BSD/OS:*:*)
|
||||
echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
*:BSD/OS:*:*)
|
||||
echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
*:FreeBSD:*:*)
|
||||
if test -x /usr/bin/objformat; then
|
||||
if test "elf" = "`/usr/bin/objformat`"; then
|
||||
echo ${UNAME_MACHINE}-unknown-freebsdelf`echo ${UNAME_RELEASE}|sed -e 's/[-_].*//'`
|
||||
exit 0
|
||||
fi
|
||||
fi
|
||||
echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
|
||||
exit 0 ;;
|
||||
*:NetBSD:*:*)
|
||||
echo ${UNAME_MACHINE}-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
|
||||
exit 0 ;;
|
||||
*:OpenBSD:*:*)
|
||||
echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
|
||||
exit 0 ;;
|
||||
i*:CYGWIN*:*)
|
||||
echo ${UNAME_MACHINE}-pc-cygwin
|
||||
exit 0 ;;
|
||||
i*:MINGW*:*)
|
||||
echo ${UNAME_MACHINE}-pc-mingw32
|
||||
exit 0 ;;
|
||||
p*:CYGWIN*:*)
|
||||
echo powerpcle-unknown-cygwin
|
||||
exit 0 ;;
|
||||
prep*:SunOS:5.*:*)
|
||||
echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
|
||||
exit 0 ;;
|
||||
*:GNU:*:*)
|
||||
echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
|
||||
exit 0 ;;
|
||||
*:Linux:*:*)
|
||||
# # uname on the ARM produces all sorts of strangeness, and we need to
|
||||
# # filter it out.
|
||||
# case "$UNAME_MACHINE" in
|
||||
# armv*) UNAME_MACHINE=$UNAME_MACHINE ;;
|
||||
# arm* | sa110*) UNAME_MACHINE="arm" ;;
|
||||
# esac
|
||||
|
||||
# The BFD linker knows what the default object file format is, so
|
||||
# first see if it will tell us.
|
||||
ld_help_string=`ld --help 2>&1`
|
||||
ld_supported_emulations=`echo $ld_help_string \
|
||||
| sed -ne '/supported emulations:/!d
|
||||
s/[ ][ ]*/ /g
|
||||
s/.*supported emulations: *//
|
||||
s/ .*//
|
||||
p'`
|
||||
case "$ld_supported_emulations" in
|
||||
i?86linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" ; exit 0 ;;
|
||||
i?86coff) echo "${UNAME_MACHINE}-pc-linux-gnucoff" ; exit 0 ;;
|
||||
sparclinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;;
|
||||
armlinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;;
|
||||
m68klinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;;
|
||||
elf32arm) echo "${UNAME_MACHINE}-unknown-linux-gnu" ; exit 0 ;;
|
||||
elf32ppc) echo "powerpc-unknown-linux-gnu" ; exit 0 ;;
|
||||
esac
|
||||
|
||||
if test "${UNAME_MACHINE}" = "alpha" ; then
|
||||
sed 's/^ //' <<EOF >$dummy.s
|
||||
.globl main
|
||||
.ent main
|
||||
main:
|
||||
.frame \$30,0,\$26,0
|
||||
.prologue 0
|
||||
.long 0x47e03d80 # implver $0
|
||||
lda \$2,259
|
||||
.long 0x47e20c21 # amask $2,$1
|
||||
srl \$1,8,\$2
|
||||
sll \$2,2,\$2
|
||||
sll \$0,3,\$0
|
||||
addl \$1,\$0,\$0
|
||||
addl \$2,\$0,\$0
|
||||
ret \$31,(\$26),1
|
||||
.end main
|
||||
EOF
|
||||
LIBC=""
|
||||
${CC-cc} $dummy.s -o $dummy 2>/dev/null
|
||||
if test "$?" = 0 ; then
|
||||
./$dummy
|
||||
case "$?" in
|
||||
7)
|
||||
UNAME_MACHINE="alpha"
|
||||
;;
|
||||
15)
|
||||
UNAME_MACHINE="alphaev5"
|
||||
;;
|
||||
14)
|
||||
UNAME_MACHINE="alphaev56"
|
||||
;;
|
||||
10)
|
||||
UNAME_MACHINE="alphapca56"
|
||||
;;
|
||||
16)
|
||||
UNAME_MACHINE="alphaev6"
|
||||
;;
|
||||
esac
|
||||
|
||||
objdump --private-headers $dummy | \
|
||||
grep ld.so.1 > /dev/null
|
||||
if test "$?" = 0 ; then
|
||||
LIBC="libc1"
|
||||
fi
|
||||
fi
|
||||
rm -f $dummy.s $dummy
|
||||
echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} ; exit 0
|
||||
elif test "${UNAME_MACHINE}" = "mips" ; then
|
||||
cat >$dummy.c <<EOF
|
||||
#ifdef __cplusplus
|
||||
int main (int argc, char *argv[]) {
|
||||
#else
|
||||
int main (argc, argv) int argc; char *argv[]; {
|
||||
#endif
|
||||
#ifdef __MIPSEB__
|
||||
printf ("%s-unknown-linux-gnu\n", argv[1]);
|
||||
#endif
|
||||
#ifdef __MIPSEL__
|
||||
printf ("%sel-unknown-linux-gnu\n", argv[1]);
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
EOF
|
||||
${CC-cc} $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm $dummy.c $dummy && exit 0
|
||||
rm -f $dummy.c $dummy
|
||||
else
|
||||
# Either a pre-BFD a.out linker (linux-gnuoldld)
|
||||
# or one that does not give us useful --help.
|
||||
# GCC wants to distinguish between linux-gnuoldld and linux-gnuaout.
|
||||
# If ld does not provide *any* "supported emulations:"
|
||||
# that means it is gnuoldld.
|
||||
echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations:"
|
||||
test $? != 0 && echo "${UNAME_MACHINE}-pc-linux-gnuoldld" && exit 0
|
||||
|
||||
case "${UNAME_MACHINE}" in
|
||||
i?86)
|
||||
VENDOR=pc;
|
||||
;;
|
||||
*)
|
||||
VENDOR=unknown;
|
||||
;;
|
||||
esac
|
||||
# Determine whether the default compiler is a.out or elf
|
||||
cat >$dummy.c <<EOF
|
||||
#include <features.h>
|
||||
#ifdef __cplusplus
|
||||
int main (int argc, char *argv[]) {
|
||||
#else
|
||||
int main (argc, argv) int argc; char *argv[]; {
|
||||
#endif
|
||||
#ifdef __ELF__
|
||||
# ifdef __GLIBC__
|
||||
# if __GLIBC__ >= 2
|
||||
printf ("%s-${VENDOR}-linux-gnu\n", argv[1]);
|
||||
# else
|
||||
printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]);
|
||||
# endif
|
||||
# else
|
||||
printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]);
|
||||
# endif
|
||||
#else
|
||||
printf ("%s-${VENDOR}-linux-gnuaout\n", argv[1]);
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
EOF
|
||||
${CC-cc} $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm $dummy.c $dummy && exit 0
|
||||
rm -f $dummy.c $dummy
|
||||
fi ;;
|
||||
# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. earlier versions
|
||||
# are messed up and put the nodename in both sysname and nodename.
|
||||
i?86:DYNIX/ptx:4*:*)
|
||||
echo i386-sequent-sysv4
|
||||
exit 0 ;;
|
||||
i?86:UNIX_SV:4.2MP:2.*)
|
||||
# Unixware is an offshoot of SVR4, but it has its own version
|
||||
# number series starting with 2...
|
||||
# I am not positive that other SVR4 systems won't match this,
|
||||
# I just have to hope. -- rms.
|
||||
# Use sysv4.2uw... so that sysv4* matches it.
|
||||
echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
|
||||
exit 0 ;;
|
||||
i?86:*:4.*:* | i?86:SYSTEM_V:4.*:*)
|
||||
if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
|
||||
echo ${UNAME_MACHINE}-univel-sysv${UNAME_RELEASE}
|
||||
else
|
||||
echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE}
|
||||
fi
|
||||
exit 0 ;;
|
||||
i?86:*:3.2:*)
|
||||
if test -f /usr/options/cb.name; then
|
||||
UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
|
||||
echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
|
||||
elif /bin/uname -X 2>/dev/null >/dev/null ; then
|
||||
UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')`
|
||||
(/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486
|
||||
(/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \
|
||||
&& UNAME_MACHINE=i586
|
||||
echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
|
||||
else
|
||||
echo ${UNAME_MACHINE}-pc-sysv32
|
||||
fi
|
||||
exit 0 ;;
|
||||
i?86:UnixWare:*:*)
|
||||
if /bin/uname -X 2>/dev/null >/dev/null ; then
|
||||
(/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \
|
||||
&& UNAME_MACHINE=i586
|
||||
fi
|
||||
echo ${UNAME_MACHINE}-unixware-${UNAME_RELEASE}-${UNAME_VERSION}
|
||||
exit 0 ;;
|
||||
pc:*:*:*)
|
||||
# uname -m prints for DJGPP always 'pc', but it prints nothing about
|
||||
# the processor, so we play safe by assuming i386.
|
||||
echo i386-pc-msdosdjgpp
|
||||
exit 0 ;;
|
||||
Intel:Mach:3*:*)
|
||||
echo i386-pc-mach3
|
||||
exit 0 ;;
|
||||
paragon:*:*:*)
|
||||
echo i860-intel-osf1
|
||||
exit 0 ;;
|
||||
i860:*:4.*:*) # i860-SVR4
|
||||
if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
|
||||
echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
|
||||
else # Add other i860-SVR4 vendors below as they are discovered.
|
||||
echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4
|
||||
fi
|
||||
exit 0 ;;
|
||||
mini*:CTIX:SYS*5:*)
|
||||
# "miniframe"
|
||||
echo m68010-convergent-sysv
|
||||
exit 0 ;;
|
||||
M68*:*:R3V[567]*:*)
|
||||
test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
|
||||
3[34]??:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0)
|
||||
OS_REL=''
|
||||
test -r /etc/.relid \
|
||||
&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
|
||||
/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
|
||||
&& echo i486-ncr-sysv4.3${OS_REL} && exit 0
|
||||
/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
|
||||
&& echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;;
|
||||
3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
|
||||
/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
|
||||
&& echo i486-ncr-sysv4 && exit 0 ;;
|
||||
m68*:LynxOS:2.*:*)
|
||||
echo m68k-unknown-lynxos${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
mc68030:UNIX_System_V:4.*:*)
|
||||
echo m68k-atari-sysv4
|
||||
exit 0 ;;
|
||||
i?86:LynxOS:2.*:* | i?86:LynxOS:3.[01]*:*)
|
||||
echo i386-unknown-lynxos${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
TSUNAMI:LynxOS:2.*:*)
|
||||
echo sparc-unknown-lynxos${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
rs6000:LynxOS:2.*:* | PowerPC:LynxOS:2.*:*)
|
||||
echo rs6000-unknown-lynxos${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
SM[BE]S:UNIX_SV:*:*)
|
||||
echo mips-dde-sysv${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
RM*:ReliantUNIX-*:*:*)
|
||||
echo mips-sni-sysv4
|
||||
exit 0 ;;
|
||||
RM*:SINIX-*:*:*)
|
||||
echo mips-sni-sysv4
|
||||
exit 0 ;;
|
||||
*:SINIX-*:*:*)
|
||||
if uname -p 2>/dev/null >/dev/null ; then
|
||||
UNAME_MACHINE=`(uname -p) 2>/dev/null`
|
||||
echo ${UNAME_MACHINE}-sni-sysv4
|
||||
else
|
||||
echo ns32k-sni-sysv
|
||||
fi
|
||||
exit 0 ;;
|
||||
PENTIUM:CPunix:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
|
||||
# says <Richard.M.Bartel@ccMail.Census.GOV>
|
||||
echo i586-unisys-sysv4
|
||||
exit 0 ;;
|
||||
*:UNIX_System_V:4*:FTX*)
|
||||
# From Gerald Hewes <hewes@openmarket.com>.
|
||||
# How about differentiating between stratus architectures? -djm
|
||||
echo hppa1.1-stratus-sysv4
|
||||
exit 0 ;;
|
||||
*:*:*:FTX*)
|
||||
# From seanf@swdc.stratus.com.
|
||||
echo i860-stratus-sysv4
|
||||
exit 0 ;;
|
||||
mc68*:A/UX:*:*)
|
||||
echo m68k-apple-aux${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
news*:NEWS-OS:*:6*)
|
||||
echo mips-sony-newsos6
|
||||
exit 0 ;;
|
||||
R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R4000:UNIX_SV:*:*)
|
||||
if [ -d /usr/nec ]; then
|
||||
echo mips-nec-sysv${UNAME_RELEASE}
|
||||
else
|
||||
echo mips-unknown-sysv${UNAME_RELEASE}
|
||||
fi
|
||||
exit 0 ;;
|
||||
BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
|
||||
echo powerpc-be-beos
|
||||
exit 0 ;;
|
||||
BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only.
|
||||
echo powerpc-apple-beos
|
||||
exit 0 ;;
|
||||
BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
|
||||
echo i586-pc-beos
|
||||
exit 0 ;;
|
||||
SX-4:SUPER-UX:*:*)
|
||||
echo sx4-nec-superux${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
SX-5:SUPER-UX:*:*)
|
||||
echo sx5-nec-superux${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
Power*:Rhapsody:*:*)
|
||||
echo powerpc-apple-rhapsody${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
*:Rhapsody:*:*)
|
||||
echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
esac
|
||||
|
||||
#echo '(No uname command or uname output not recognized.)' 1>&2
|
||||
#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
|
||||
|
||||
cat >$dummy.c <<EOF
|
||||
#ifdef _SEQUENT_
|
||||
# include <sys/types.h>
|
||||
# include <sys/utsname.h>
|
||||
#endif
|
||||
main ()
|
||||
{
|
||||
#if defined (sony)
|
||||
#if defined (MIPSEB)
|
||||
/* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
|
||||
I don't know.... */
|
||||
printf ("mips-sony-bsd\n"); exit (0);
|
||||
#else
|
||||
#include <sys/param.h>
|
||||
printf ("m68k-sony-newsos%s\n",
|
||||
#ifdef NEWSOS4
|
||||
"4"
|
||||
#else
|
||||
""
|
||||
#endif
|
||||
); exit (0);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined (__arm) && defined (__acorn) && defined (__unix)
|
||||
printf ("arm-acorn-riscix"); exit (0);
|
||||
#endif
|
||||
|
||||
#if defined (hp300) && !defined (hpux)
|
||||
printf ("m68k-hp-bsd\n"); exit (0);
|
||||
#endif
|
||||
|
||||
#if defined (NeXT)
|
||||
#if !defined (__ARCHITECTURE__)
|
||||
#define __ARCHITECTURE__ "m68k"
|
||||
#endif
|
||||
int version;
|
||||
version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
|
||||
if (version < 4)
|
||||
printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
|
||||
else
|
||||
printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
|
||||
exit (0);
|
||||
#endif
|
||||
|
||||
#if defined (MULTIMAX) || defined (n16)
|
||||
#if defined (UMAXV)
|
||||
printf ("ns32k-encore-sysv\n"); exit (0);
|
||||
#else
|
||||
#if defined (CMU)
|
||||
printf ("ns32k-encore-mach\n"); exit (0);
|
||||
#else
|
||||
printf ("ns32k-encore-bsd\n"); exit (0);
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined (__386BSD__)
|
||||
printf ("i386-pc-bsd\n"); exit (0);
|
||||
#endif
|
||||
|
||||
#if defined (sequent)
|
||||
#if defined (i386)
|
||||
printf ("i386-sequent-dynix\n"); exit (0);
|
||||
#endif
|
||||
#if defined (ns32000)
|
||||
printf ("ns32k-sequent-dynix\n"); exit (0);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined (_SEQUENT_)
|
||||
struct utsname un;
|
||||
|
||||
uname(&un);
|
||||
|
||||
if (strncmp(un.version, "V2", 2) == 0) {
|
||||
printf ("i386-sequent-ptx2\n"); exit (0);
|
||||
}
|
||||
if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
|
||||
printf ("i386-sequent-ptx1\n"); exit (0);
|
||||
}
|
||||
printf ("i386-sequent-ptx\n"); exit (0);
|
||||
|
||||
#endif
|
||||
|
||||
#if defined (vax)
|
||||
#if !defined (ultrix)
|
||||
printf ("vax-dec-bsd\n"); exit (0);
|
||||
#else
|
||||
printf ("vax-dec-ultrix\n"); exit (0);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined (alliant) && defined (i860)
|
||||
printf ("i860-alliant-bsd\n"); exit (0);
|
||||
#endif
|
||||
|
||||
exit (1);
|
||||
}
|
||||
EOF
|
||||
|
||||
${CC-cc} $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm $dummy.c $dummy && exit 0
|
||||
rm -f $dummy.c $dummy
|
||||
|
||||
# Apollos put the system type in the environment.
|
||||
|
||||
test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; }
|
||||
|
||||
# Convex versions that predate uname can use getsysinfo(1)
|
||||
|
||||
if [ -x /usr/convex/getsysinfo ]
|
||||
then
|
||||
case `getsysinfo -f cpu_type` in
|
||||
c1*)
|
||||
echo c1-convex-bsd
|
||||
exit 0 ;;
|
||||
c2*)
|
||||
if getsysinfo -f scalar_acc
|
||||
then echo c32-convex-bsd
|
||||
else echo c2-convex-bsd
|
||||
fi
|
||||
exit 0 ;;
|
||||
c34*)
|
||||
echo c34-convex-bsd
|
||||
exit 0 ;;
|
||||
c38*)
|
||||
echo c38-convex-bsd
|
||||
exit 0 ;;
|
||||
c4*)
|
||||
echo c4-convex-bsd
|
||||
exit 0 ;;
|
||||
esac
|
||||
fi
|
||||
|
||||
#echo '(Unable to guess system type)' 1>&2
|
||||
|
||||
exit 1
|
||||
234
config.h.in
234
config.h.in
@@ -1,234 +0,0 @@
|
||||
/* config.h.in. Generated automatically from configure.in by autoheader. */
|
||||
|
||||
/* Define if on AIX 3.
|
||||
System headers sometimes define this.
|
||||
We just want to avoid a redefinition error message. */
|
||||
#ifndef _ALL_SOURCE
|
||||
#undef _ALL_SOURCE
|
||||
#endif
|
||||
|
||||
/* Define to empty if the keyword does not work. */
|
||||
#undef const
|
||||
|
||||
/* Define if you don't have vprintf but do have _doprnt. */
|
||||
#undef HAVE_DOPRNT
|
||||
|
||||
/* Define if you have the vprintf function. */
|
||||
#undef HAVE_VPRINTF
|
||||
|
||||
/* Define as the return type of signal handlers (int or void). */
|
||||
#undef RETSIGTYPE
|
||||
|
||||
/* Define to `unsigned' if <sys/types.h> doesn't define. */
|
||||
#undef size_t
|
||||
|
||||
/* Define if you have the ANSI C header files. */
|
||||
#undef STDC_HEADERS
|
||||
|
||||
/* Define if you can safely include both <sys/time.h> and <time.h>. */
|
||||
#undef TIME_WITH_SYS_TIME
|
||||
|
||||
/* Define cpu-machine-OS */
|
||||
#undef OS
|
||||
|
||||
/* The number of bytes in a long double. */
|
||||
#undef SIZEOF_LONG_DOUBLE
|
||||
|
||||
/* The number of bytes in a long long. */
|
||||
#undef SIZEOF_LONG_LONG
|
||||
|
||||
/* Define if you have the RAND_screen function. */
|
||||
#undef HAVE_RAND_SCREEN
|
||||
|
||||
/* Define if you have the RAND_status function. */
|
||||
#undef HAVE_RAND_STATUS
|
||||
|
||||
/* Define if you have the closesocket function. */
|
||||
#undef HAVE_CLOSESOCKET
|
||||
|
||||
/* Define if you have the gethostbyaddr function. */
|
||||
#undef HAVE_GETHOSTBYADDR
|
||||
|
||||
/* Define if you have the gethostname function. */
|
||||
#undef HAVE_GETHOSTNAME
|
||||
|
||||
/* Define if you have the getpass function. */
|
||||
#undef HAVE_GETPASS
|
||||
|
||||
/* Define if you have the getservbyname function. */
|
||||
#undef HAVE_GETSERVBYNAME
|
||||
|
||||
/* Define if you have the gettimeofday function. */
|
||||
#undef HAVE_GETTIMEOFDAY
|
||||
|
||||
/* Define if you have the inet_addr function. */
|
||||
#undef HAVE_INET_ADDR
|
||||
|
||||
/* Define if you have the inet_ntoa function. */
|
||||
#undef HAVE_INET_NTOA
|
||||
|
||||
/* Define if you have the perror function. */
|
||||
#undef HAVE_PERROR
|
||||
|
||||
/* Define if you have the select function. */
|
||||
#undef HAVE_SELECT
|
||||
|
||||
/* Define if you have the setvbuf function. */
|
||||
#undef HAVE_SETVBUF
|
||||
|
||||
/* Define if you have the socket function. */
|
||||
#undef HAVE_SOCKET
|
||||
|
||||
/* Define if you have the strcasecmp function. */
|
||||
#undef HAVE_STRCASECMP
|
||||
|
||||
/* Define if you have the strdup function. */
|
||||
#undef HAVE_STRDUP
|
||||
|
||||
/* Define if you have the strftime function. */
|
||||
#undef HAVE_STRFTIME
|
||||
|
||||
/* Define if you have the strstr function. */
|
||||
#undef HAVE_STRSTR
|
||||
|
||||
/* Define if you have the tcgetattr function. */
|
||||
#undef HAVE_TCGETATTR
|
||||
|
||||
/* Define if you have the tcsetattr function. */
|
||||
#undef HAVE_TCSETATTR
|
||||
|
||||
/* Define if you have the uname function. */
|
||||
#undef HAVE_UNAME
|
||||
|
||||
/* Define if you have the <alloca.h> header file. */
|
||||
#undef HAVE_ALLOCA_H
|
||||
|
||||
/* Define if you have the <arpa/inet.h> header file. */
|
||||
#undef HAVE_ARPA_INET_H
|
||||
|
||||
/* Define if you have the <crypto.h> header file. */
|
||||
#undef HAVE_CRYPTO_H
|
||||
|
||||
/* Define if you have the <dlfcn.h> header file. */
|
||||
#undef HAVE_DLFCN_H
|
||||
|
||||
/* Define if you have the <err.h> header file. */
|
||||
#undef HAVE_ERR_H
|
||||
|
||||
/* Define if you have the <fcntl.h> header file. */
|
||||
#undef HAVE_FCNTL_H
|
||||
|
||||
/* Define if you have the <getopt.h> header file. */
|
||||
#undef HAVE_GETOPT_H
|
||||
|
||||
/* Define if you have the <io.h> header file. */
|
||||
#undef HAVE_IO_H
|
||||
|
||||
/* Define if you have the <malloc.h> header file. */
|
||||
#undef HAVE_MALLOC_H
|
||||
|
||||
/* Define if you have the <net/if.h> header file. */
|
||||
#undef HAVE_NET_IF_H
|
||||
|
||||
/* Define if you have the <netdb.h> header file. */
|
||||
#undef HAVE_NETDB_H
|
||||
|
||||
/* Define if you have the <netinet/in.h> header file. */
|
||||
#undef HAVE_NETINET_IN_H
|
||||
|
||||
/* Define if you have the <openssl/crypto.h> header file. */
|
||||
#undef HAVE_OPENSSL_CRYPTO_H
|
||||
|
||||
/* Define if you have the <openssl/err.h> header file. */
|
||||
#undef HAVE_OPENSSL_ERR_H
|
||||
|
||||
/* Define if you have the <openssl/pem.h> header file. */
|
||||
#undef HAVE_OPENSSL_PEM_H
|
||||
|
||||
/* Define if you have the <openssl/rsa.h> header file. */
|
||||
#undef HAVE_OPENSSL_RSA_H
|
||||
|
||||
/* Define if you have the <openssl/ssl.h> header file. */
|
||||
#undef HAVE_OPENSSL_SSL_H
|
||||
|
||||
/* Define if you have the <openssl/x509.h> header file. */
|
||||
#undef HAVE_OPENSSL_X509_H
|
||||
|
||||
/* Define if you have the <pem.h> header file. */
|
||||
#undef HAVE_PEM_H
|
||||
|
||||
/* Define if you have the <rsa.h> header file. */
|
||||
#undef HAVE_RSA_H
|
||||
|
||||
/* Define if you have the <sgtty.h> header file. */
|
||||
#undef HAVE_SGTTY_H
|
||||
|
||||
/* Define if you have the <ssl.h> header file. */
|
||||
#undef HAVE_SSL_H
|
||||
|
||||
/* Define if you have the <stdlib.h> header file. */
|
||||
#undef HAVE_STDLIB_H
|
||||
|
||||
/* Define if you have the <sys/param.h> header file. */
|
||||
#undef HAVE_SYS_PARAM_H
|
||||
|
||||
/* Define if you have the <sys/select.h> header file. */
|
||||
#undef HAVE_SYS_SELECT_H
|
||||
|
||||
/* Define if you have the <sys/socket.h> header file. */
|
||||
#undef HAVE_SYS_SOCKET_H
|
||||
|
||||
/* Define if you have the <sys/sockio.h> header file. */
|
||||
#undef HAVE_SYS_SOCKIO_H
|
||||
|
||||
/* Define if you have the <sys/stat.h> header file. */
|
||||
#undef HAVE_SYS_STAT_H
|
||||
|
||||
/* Define if you have the <sys/types.h> header file. */
|
||||
#undef HAVE_SYS_TYPES_H
|
||||
|
||||
/* Define if you have the <termio.h> header file. */
|
||||
#undef HAVE_TERMIO_H
|
||||
|
||||
/* Define if you have the <termios.h> header file. */
|
||||
#undef HAVE_TERMIOS_H
|
||||
|
||||
/* Define if you have the <time.h> header file. */
|
||||
#undef HAVE_TIME_H
|
||||
|
||||
/* Define if you have the <unistd.h> header file. */
|
||||
#undef HAVE_UNISTD_H
|
||||
|
||||
/* Define if you have the <winsock.h> header file. */
|
||||
#undef HAVE_WINSOCK_H
|
||||
|
||||
/* Define if you have the <x509.h> header file. */
|
||||
#undef HAVE_X509_H
|
||||
|
||||
/* Define if you have the crypto library (-lcrypto). */
|
||||
#undef HAVE_LIBCRYPTO
|
||||
|
||||
/* Define if you have the dl library (-ldl). */
|
||||
#undef HAVE_LIBDL
|
||||
|
||||
/* Define if you have the nsl library (-lnsl). */
|
||||
#undef HAVE_LIBNSL
|
||||
|
||||
/* Define if you have the resolve library (-lresolve). */
|
||||
#undef HAVE_LIBRESOLVE
|
||||
|
||||
/* Define if you have the socket library (-lsocket). */
|
||||
#undef HAVE_LIBSOCKET
|
||||
|
||||
/* Define if you have the ssl library (-lssl). */
|
||||
#undef HAVE_LIBSSL
|
||||
|
||||
/* Define if you have the ucb library (-lucb). */
|
||||
#undef HAVE_LIBUCB
|
||||
|
||||
/* Name of package */
|
||||
#undef PACKAGE
|
||||
|
||||
/* Version number of package */
|
||||
#undef VERSION
|
||||
|
||||
979
config.sub
vendored
979
config.sub
vendored
@@ -1,979 +0,0 @@
|
||||
#! /bin/sh
|
||||
# Configuration validation subroutine script, version 1.1.
|
||||
# Copyright (C) 1991, 92-97, 1998 Free Software Foundation, Inc.
|
||||
# This file is (in principle) common to ALL GNU software.
|
||||
# The presence of a machine in this file suggests that SOME GNU software
|
||||
# can handle that machine. It does not imply ALL GNU software can.
|
||||
#
|
||||
# This file is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
# Boston, MA 02111-1307, USA.
|
||||
|
||||
# As a special exception to the GNU General Public License, if you
|
||||
# distribute this file as part of a program that contains a
|
||||
# configuration script generated by Autoconf, you may include it under
|
||||
# the same distribution terms that you use for the rest of that program.
|
||||
|
||||
# Configuration subroutine to validate and canonicalize a configuration type.
|
||||
# Supply the specified configuration type as an argument.
|
||||
# If it is invalid, we print an error message on stderr and exit with code 1.
|
||||
# Otherwise, we print the canonical config type on stdout and succeed.
|
||||
|
||||
# This file is supposed to be the same for all GNU packages
|
||||
# and recognize all the CPU types, system types and aliases
|
||||
# that are meaningful with *any* GNU software.
|
||||
# Each package is responsible for reporting which valid configurations
|
||||
# it does not support. The user should be able to distinguish
|
||||
# a failure to support a valid configuration from a meaningless
|
||||
# configuration.
|
||||
|
||||
# The goal of this file is to map all the various variations of a given
|
||||
# machine specification into a single specification in the form:
|
||||
# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
|
||||
# or in some cases, the newer four-part form:
|
||||
# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
|
||||
# It is wrong to echo any other type of specification.
|
||||
|
||||
if [ x$1 = x ]
|
||||
then
|
||||
echo Configuration name missing. 1>&2
|
||||
echo "Usage: $0 CPU-MFR-OPSYS" 1>&2
|
||||
echo "or $0 ALIAS" 1>&2
|
||||
echo where ALIAS is a recognized configuration type. 1>&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# First pass through any local machine types.
|
||||
case $1 in
|
||||
*local*)
|
||||
echo $1
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
;;
|
||||
esac
|
||||
|
||||
# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
|
||||
# Here we must recognize all the valid KERNEL-OS combinations.
|
||||
maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
|
||||
case $maybe_os in
|
||||
linux-gnu*)
|
||||
os=-$maybe_os
|
||||
basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
|
||||
;;
|
||||
*)
|
||||
basic_machine=`echo $1 | sed 's/-[^-]*$//'`
|
||||
if [ $basic_machine != $1 ]
|
||||
then os=`echo $1 | sed 's/.*-/-/'`
|
||||
else os=; fi
|
||||
;;
|
||||
esac
|
||||
|
||||
### Let's recognize common machines as not being operating systems so
|
||||
### that things like config.sub decstation-3100 work. We also
|
||||
### recognize some manufacturers as not being operating systems, so we
|
||||
### can provide default operating systems below.
|
||||
case $os in
|
||||
-sun*os*)
|
||||
# Prevent following clause from handling this invalid input.
|
||||
;;
|
||||
-dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
|
||||
-att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
|
||||
-unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
|
||||
-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
|
||||
-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
|
||||
-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
|
||||
-apple)
|
||||
os=
|
||||
basic_machine=$1
|
||||
;;
|
||||
-hiux*)
|
||||
os=-hiuxwe2
|
||||
;;
|
||||
-sco5)
|
||||
os=sco3.2v5
|
||||
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
||||
;;
|
||||
-sco4)
|
||||
os=-sco3.2v4
|
||||
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
||||
;;
|
||||
-sco3.2.[4-9]*)
|
||||
os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
|
||||
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
||||
;;
|
||||
-sco3.2v[4-9]*)
|
||||
# Don't forget version if it is 3.2v4 or newer.
|
||||
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
||||
;;
|
||||
-sco*)
|
||||
os=-sco3.2v2
|
||||
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
||||
;;
|
||||
-isc)
|
||||
os=-isc2.2
|
||||
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
||||
;;
|
||||
-clix*)
|
||||
basic_machine=clipper-intergraph
|
||||
;;
|
||||
-isc*)
|
||||
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
||||
;;
|
||||
-lynx*)
|
||||
os=-lynxos
|
||||
;;
|
||||
-ptx*)
|
||||
basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
|
||||
;;
|
||||
-windowsnt*)
|
||||
os=`echo $os | sed -e 's/windowsnt/winnt/'`
|
||||
;;
|
||||
-psos*)
|
||||
os=-psos
|
||||
;;
|
||||
esac
|
||||
|
||||
# Decode aliases for certain CPU-COMPANY combinations.
|
||||
case $basic_machine in
|
||||
# Recognize the basic CPU types without company name.
|
||||
# Some are omitted here because they have special meanings below.
|
||||
tahoe | i860 | m32r | m68k | m68000 | m88k | ns32k | arc | arm \
|
||||
| arme[lb] | pyramid | mn10200 | mn10300 | tron | a29k \
|
||||
| 580 | i960 | h8300 | hppa | hppa1.0 | hppa1.1 | hppa2.0 \
|
||||
| hppa2.0w \
|
||||
| alpha | alphaev5 | alphaev56 | we32k | ns16k | clipper \
|
||||
| i370 | sh | powerpc | powerpcle | 1750a | dsp16xx | pdp11 \
|
||||
| mips64 | mipsel | mips64el | mips64orion | mips64orionel \
|
||||
| mipstx39 | mipstx39el | armv[34][lb] \
|
||||
| sparc | sparclet | sparclite | sparc64 | v850)
|
||||
basic_machine=$basic_machine-unknown
|
||||
;;
|
||||
# We use `pc' rather than `unknown'
|
||||
# because (1) that's what they normally are, and
|
||||
# (2) the word "unknown" tends to confuse beginning users.
|
||||
i[34567]86)
|
||||
basic_machine=$basic_machine-pc
|
||||
;;
|
||||
# Object if more than one company name word.
|
||||
*-*-*)
|
||||
echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
|
||||
exit 1
|
||||
;;
|
||||
# Recognize the basic CPU types with company name.
|
||||
vax-* | tahoe-* | i[34567]86-* | i860-* | m32r-* | m68k-* | m68000-* \
|
||||
| m88k-* | sparc-* | ns32k-* | fx80-* | arc-* | arm-* | c[123]* \
|
||||
| mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \
|
||||
| power-* | none-* | 580-* | cray2-* | h8300-* | i960-* \
|
||||
| xmp-* | ymp-* | hppa-* | hppa1.0-* | hppa1.1-* | hppa2.0-* \
|
||||
| hppa2.0w-* \
|
||||
| alpha-* | alphaev5-* | alphaev56-* | we32k-* | cydra-* \
|
||||
| ns16k-* | pn-* | np1-* | xps100-* | clipper-* | orion-* \
|
||||
| sparclite-* | pdp11-* | sh-* | powerpc-* | powerpcle-* \
|
||||
| sparc64-* | mips64-* | mipsel-* | armv[34][lb]-*\
|
||||
| mips64el-* | mips64orion-* | mips64orionel-* \
|
||||
| mipstx39-* | mipstx39el-* \
|
||||
| f301-* | armv*-*)
|
||||
;;
|
||||
# Recognize the various machine names and aliases which stand
|
||||
# for a CPU type and a company and sometimes even an OS.
|
||||
3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
|
||||
basic_machine=m68000-att
|
||||
;;
|
||||
3b*)
|
||||
basic_machine=we32k-att
|
||||
;;
|
||||
alliant | fx80)
|
||||
basic_machine=fx80-alliant
|
||||
;;
|
||||
altos | altos3068)
|
||||
basic_machine=m68k-altos
|
||||
;;
|
||||
am29k)
|
||||
basic_machine=a29k-none
|
||||
os=-bsd
|
||||
;;
|
||||
amdahl)
|
||||
basic_machine=580-amdahl
|
||||
os=-sysv
|
||||
;;
|
||||
amiga | amiga-*)
|
||||
basic_machine=m68k-cbm
|
||||
;;
|
||||
amigaos | amigados)
|
||||
basic_machine=m68k-cbm
|
||||
os=-amigaos
|
||||
;;
|
||||
amigaunix | amix)
|
||||
basic_machine=m68k-cbm
|
||||
os=-sysv4
|
||||
;;
|
||||
apollo68)
|
||||
basic_machine=m68k-apollo
|
||||
os=-sysv
|
||||
;;
|
||||
aux)
|
||||
basic_machine=m68k-apple
|
||||
os=-aux
|
||||
;;
|
||||
balance)
|
||||
basic_machine=ns32k-sequent
|
||||
os=-dynix
|
||||
;;
|
||||
convex-c1)
|
||||
basic_machine=c1-convex
|
||||
os=-bsd
|
||||
;;
|
||||
convex-c2)
|
||||
basic_machine=c2-convex
|
||||
os=-bsd
|
||||
;;
|
||||
convex-c32)
|
||||
basic_machine=c32-convex
|
||||
os=-bsd
|
||||
;;
|
||||
convex-c34)
|
||||
basic_machine=c34-convex
|
||||
os=-bsd
|
||||
;;
|
||||
convex-c38)
|
||||
basic_machine=c38-convex
|
||||
os=-bsd
|
||||
;;
|
||||
cray | ymp)
|
||||
basic_machine=ymp-cray
|
||||
os=-unicos
|
||||
;;
|
||||
cray2)
|
||||
basic_machine=cray2-cray
|
||||
os=-unicos
|
||||
;;
|
||||
[ctj]90-cray)
|
||||
basic_machine=c90-cray
|
||||
os=-unicos
|
||||
;;
|
||||
crds | unos)
|
||||
basic_machine=m68k-crds
|
||||
;;
|
||||
da30 | da30-*)
|
||||
basic_machine=m68k-da30
|
||||
;;
|
||||
decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
|
||||
basic_machine=mips-dec
|
||||
;;
|
||||
delta | 3300 | motorola-3300 | motorola-delta \
|
||||
| 3300-motorola | delta-motorola)
|
||||
basic_machine=m68k-motorola
|
||||
;;
|
||||
delta88)
|
||||
basic_machine=m88k-motorola
|
||||
os=-sysv3
|
||||
;;
|
||||
dpx20 | dpx20-*)
|
||||
basic_machine=rs6000-bull
|
||||
os=-bosx
|
||||
;;
|
||||
dpx2* | dpx2*-bull)
|
||||
basic_machine=m68k-bull
|
||||
os=-sysv3
|
||||
;;
|
||||
ebmon29k)
|
||||
basic_machine=a29k-amd
|
||||
os=-ebmon
|
||||
;;
|
||||
elxsi)
|
||||
basic_machine=elxsi-elxsi
|
||||
os=-bsd
|
||||
;;
|
||||
encore | umax | mmax)
|
||||
basic_machine=ns32k-encore
|
||||
;;
|
||||
fx2800)
|
||||
basic_machine=i860-alliant
|
||||
;;
|
||||
genix)
|
||||
basic_machine=ns32k-ns
|
||||
;;
|
||||
gmicro)
|
||||
basic_machine=tron-gmicro
|
||||
os=-sysv
|
||||
;;
|
||||
h3050r* | hiux*)
|
||||
basic_machine=hppa1.1-hitachi
|
||||
os=-hiuxwe2
|
||||
;;
|
||||
h8300hms)
|
||||
basic_machine=h8300-hitachi
|
||||
os=-hms
|
||||
;;
|
||||
harris)
|
||||
basic_machine=m88k-harris
|
||||
os=-sysv3
|
||||
;;
|
||||
hp300-*)
|
||||
basic_machine=m68k-hp
|
||||
;;
|
||||
hp300bsd)
|
||||
basic_machine=m68k-hp
|
||||
os=-bsd
|
||||
;;
|
||||
hp300hpux)
|
||||
basic_machine=m68k-hp
|
||||
os=-hpux
|
||||
;;
|
||||
hp9k2[0-9][0-9] | hp9k31[0-9])
|
||||
basic_machine=m68000-hp
|
||||
;;
|
||||
hp9k3[2-9][0-9])
|
||||
basic_machine=m68k-hp
|
||||
;;
|
||||
hp9k7[0-9][0-9] | hp7[0-9][0-9] | hp9k8[0-9]7 | hp8[0-9]7)
|
||||
basic_machine=hppa1.1-hp
|
||||
;;
|
||||
hp9k8[0-9][0-9] | hp8[0-9][0-9])
|
||||
basic_machine=hppa1.0-hp
|
||||
;;
|
||||
hppa-next)
|
||||
os=-nextstep3
|
||||
;;
|
||||
hp3k9[0-9][0-9] | hp9[0-9][0-9])
|
||||
basic_machine=hppa1.0-hp
|
||||
os=-mpeix
|
||||
;;
|
||||
hp3k9[0-9][0-9] | hp9[0-9][0-9])
|
||||
basic_machine=hppa1.0-hp
|
||||
os=-mpeix
|
||||
;;
|
||||
i370-ibm* | ibm*)
|
||||
basic_machine=i370-ibm
|
||||
os=-mvs
|
||||
;;
|
||||
# I'm not sure what "Sysv32" means. Should this be sysv3.2?
|
||||
i[34567]86v32)
|
||||
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
|
||||
os=-sysv32
|
||||
;;
|
||||
i[34567]86v4*)
|
||||
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
|
||||
os=-sysv4
|
||||
;;
|
||||
i[34567]86v)
|
||||
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
|
||||
os=-sysv
|
||||
;;
|
||||
i[34567]86sol2)
|
||||
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
|
||||
os=-solaris2
|
||||
;;
|
||||
iris | iris4d)
|
||||
basic_machine=mips-sgi
|
||||
case $os in
|
||||
-irix*)
|
||||
;;
|
||||
*)
|
||||
os=-irix4
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
isi68 | isi)
|
||||
basic_machine=m68k-isi
|
||||
os=-sysv
|
||||
;;
|
||||
m88k-omron*)
|
||||
basic_machine=m88k-omron
|
||||
;;
|
||||
magnum | m3230)
|
||||
basic_machine=mips-mips
|
||||
os=-sysv
|
||||
;;
|
||||
merlin)
|
||||
basic_machine=ns32k-utek
|
||||
os=-sysv
|
||||
;;
|
||||
miniframe)
|
||||
basic_machine=m68000-convergent
|
||||
;;
|
||||
mipsel*-linux*)
|
||||
basic_machine=mipsel-unknown
|
||||
os=-linux-gnu
|
||||
;;
|
||||
mips*-linux*)
|
||||
basic_machine=mips-unknown
|
||||
os=-linux-gnu
|
||||
;;
|
||||
mips3*-*)
|
||||
basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
|
||||
;;
|
||||
mips3*)
|
||||
basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
|
||||
;;
|
||||
ncr3000)
|
||||
basic_machine=i486-ncr
|
||||
os=-sysv4
|
||||
;;
|
||||
netwinder)
|
||||
basic_machine=armv4l-corel
|
||||
os=-linux
|
||||
;;
|
||||
news | news700 | news800 | news900)
|
||||
basic_machine=m68k-sony
|
||||
os=-newsos
|
||||
;;
|
||||
news1000)
|
||||
basic_machine=m68030-sony
|
||||
os=-newsos
|
||||
;;
|
||||
news-3600 | risc-news)
|
||||
basic_machine=mips-sony
|
||||
os=-newsos
|
||||
;;
|
||||
next | m*-next )
|
||||
basic_machine=m68k-next
|
||||
case $os in
|
||||
-nextstep* )
|
||||
;;
|
||||
-ns2*)
|
||||
os=-nextstep2
|
||||
;;
|
||||
*)
|
||||
os=-nextstep3
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
nh3000)
|
||||
basic_machine=m68k-harris
|
||||
os=-cxux
|
||||
;;
|
||||
nh[45]000)
|
||||
basic_machine=m88k-harris
|
||||
os=-cxux
|
||||
;;
|
||||
nindy960)
|
||||
basic_machine=i960-intel
|
||||
os=-nindy
|
||||
;;
|
||||
np1)
|
||||
basic_machine=np1-gould
|
||||
;;
|
||||
pa-hitachi)
|
||||
basic_machine=hppa1.1-hitachi
|
||||
os=-hiuxwe2
|
||||
;;
|
||||
paragon)
|
||||
basic_machine=i860-intel
|
||||
os=-osf
|
||||
;;
|
||||
pbd)
|
||||
basic_machine=sparc-tti
|
||||
;;
|
||||
pbb)
|
||||
basic_machine=m68k-tti
|
||||
;;
|
||||
pc532 | pc532-*)
|
||||
basic_machine=ns32k-pc532
|
||||
;;
|
||||
pentium | p5 | k5 | nexen)
|
||||
basic_machine=i586-pc
|
||||
;;
|
||||
pentiumpro | p6 | k6 | 6x86)
|
||||
basic_machine=i686-pc
|
||||
;;
|
||||
pentiumii | pentium2)
|
||||
basic_machine=i786-pc
|
||||
;;
|
||||
pentium-* | p5-* | k5-* | nexen-*)
|
||||
basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||
;;
|
||||
pentiumpro-* | p6-* | k6-* | 6x86-*)
|
||||
basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||
;;
|
||||
pentiumii-* | pentium2-*)
|
||||
basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||
;;
|
||||
pn)
|
||||
basic_machine=pn-gould
|
||||
;;
|
||||
power) basic_machine=rs6000-ibm
|
||||
;;
|
||||
ppc) basic_machine=powerpc-unknown
|
||||
;;
|
||||
ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||
;;
|
||||
ppcle | powerpclittle | ppc-le | powerpc-little)
|
||||
basic_machine=powerpcle-unknown
|
||||
;;
|
||||
ppcle-* | powerpclittle-*)
|
||||
basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||
;;
|
||||
ps2)
|
||||
basic_machine=i386-ibm
|
||||
;;
|
||||
rm[46]00)
|
||||
basic_machine=mips-siemens
|
||||
;;
|
||||
rtpc | rtpc-*)
|
||||
basic_machine=romp-ibm
|
||||
;;
|
||||
sequent)
|
||||
basic_machine=i386-sequent
|
||||
;;
|
||||
sh)
|
||||
basic_machine=sh-hitachi
|
||||
os=-hms
|
||||
;;
|
||||
sps7)
|
||||
basic_machine=m68k-bull
|
||||
os=-sysv2
|
||||
;;
|
||||
spur)
|
||||
basic_machine=spur-unknown
|
||||
;;
|
||||
sun2)
|
||||
basic_machine=m68000-sun
|
||||
;;
|
||||
sun2os3)
|
||||
basic_machine=m68000-sun
|
||||
os=-sunos3
|
||||
;;
|
||||
sun2os4)
|
||||
basic_machine=m68000-sun
|
||||
os=-sunos4
|
||||
;;
|
||||
sun3os3)
|
||||
basic_machine=m68k-sun
|
||||
os=-sunos3
|
||||
;;
|
||||
sun3os4)
|
||||
basic_machine=m68k-sun
|
||||
os=-sunos4
|
||||
;;
|
||||
sun4os3)
|
||||
basic_machine=sparc-sun
|
||||
os=-sunos3
|
||||
;;
|
||||
sun4os4)
|
||||
basic_machine=sparc-sun
|
||||
os=-sunos4
|
||||
;;
|
||||
sun4sol2)
|
||||
basic_machine=sparc-sun
|
||||
os=-solaris2
|
||||
;;
|
||||
sun3 | sun3-*)
|
||||
basic_machine=m68k-sun
|
||||
;;
|
||||
sun4)
|
||||
basic_machine=sparc-sun
|
||||
;;
|
||||
sun386 | sun386i | roadrunner)
|
||||
basic_machine=i386-sun
|
||||
;;
|
||||
symmetry)
|
||||
basic_machine=i386-sequent
|
||||
os=-dynix
|
||||
;;
|
||||
tx39)
|
||||
basic_machine=mipstx39-unknown
|
||||
;;
|
||||
tx39el)
|
||||
basic_machine=mipstx39el-unknown
|
||||
;;
|
||||
tower | tower-32)
|
||||
basic_machine=m68k-ncr
|
||||
;;
|
||||
udi29k)
|
||||
basic_machine=a29k-amd
|
||||
os=-udi
|
||||
;;
|
||||
ultra3)
|
||||
basic_machine=a29k-nyu
|
||||
os=-sym1
|
||||
;;
|
||||
vaxv)
|
||||
basic_machine=vax-dec
|
||||
os=-sysv
|
||||
;;
|
||||
vms)
|
||||
basic_machine=vax-dec
|
||||
os=-vms
|
||||
;;
|
||||
vpp*|vx|vx-*)
|
||||
basic_machine=f301-fujitsu
|
||||
;;
|
||||
vxworks960)
|
||||
basic_machine=i960-wrs
|
||||
os=-vxworks
|
||||
;;
|
||||
vxworks68)
|
||||
basic_machine=m68k-wrs
|
||||
os=-vxworks
|
||||
;;
|
||||
vxworks29k)
|
||||
basic_machine=a29k-wrs
|
||||
os=-vxworks
|
||||
;;
|
||||
xmp)
|
||||
basic_machine=xmp-cray
|
||||
os=-unicos
|
||||
;;
|
||||
xps | xps100)
|
||||
basic_machine=xps100-honeywell
|
||||
;;
|
||||
none)
|
||||
basic_machine=none-none
|
||||
os=-none
|
||||
;;
|
||||
|
||||
# Here we handle the default manufacturer of certain CPU types. It is in
|
||||
# some cases the only manufacturer, in others, it is the most popular.
|
||||
mips)
|
||||
if [ x$os = x-linux-gnu ]; then
|
||||
basic_machine=mips-unknown
|
||||
else
|
||||
basic_machine=mips-mips
|
||||
fi
|
||||
;;
|
||||
romp)
|
||||
basic_machine=romp-ibm
|
||||
;;
|
||||
rs6000)
|
||||
basic_machine=rs6000-ibm
|
||||
;;
|
||||
vax)
|
||||
basic_machine=vax-dec
|
||||
;;
|
||||
pdp11)
|
||||
basic_machine=pdp11-dec
|
||||
;;
|
||||
we32k)
|
||||
basic_machine=we32k-att
|
||||
;;
|
||||
sparc)
|
||||
basic_machine=sparc-sun
|
||||
;;
|
||||
cydra)
|
||||
basic_machine=cydra-cydrome
|
||||
;;
|
||||
orion)
|
||||
basic_machine=orion-highlevel
|
||||
;;
|
||||
orion105)
|
||||
basic_machine=clipper-highlevel
|
||||
;;
|
||||
*)
|
||||
echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
# Here we canonicalize certain aliases for manufacturers.
|
||||
case $basic_machine in
|
||||
*-digital*)
|
||||
basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
|
||||
;;
|
||||
*-commodore*)
|
||||
basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
|
||||
;;
|
||||
*)
|
||||
;;
|
||||
esac
|
||||
|
||||
# Decode manufacturer-specific aliases for certain operating systems.
|
||||
|
||||
if [ x"$os" != x"" ]
|
||||
then
|
||||
case $os in
|
||||
# First match some system type aliases
|
||||
# that might get confused with valid system types.
|
||||
# -solaris* is a basic system type, with this one exception.
|
||||
-solaris1 | -solaris1.*)
|
||||
os=`echo $os | sed -e 's|solaris1|sunos4|'`
|
||||
;;
|
||||
-solaris)
|
||||
os=-solaris2
|
||||
;;
|
||||
-svr4*)
|
||||
os=-sysv4
|
||||
;;
|
||||
-unixware*)
|
||||
os=-sysv4.2uw
|
||||
;;
|
||||
-gnu/linux*)
|
||||
os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
|
||||
;;
|
||||
# First accept the basic system types.
|
||||
# The portable systems comes first.
|
||||
# Each alternative MUST END IN A *, to match a version number.
|
||||
# -sysv* is not here because it comes later, after sysvr4.
|
||||
-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
|
||||
| -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
|
||||
| -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
|
||||
| -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
|
||||
| -aos* \
|
||||
| -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
|
||||
| -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
|
||||
| -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \
|
||||
| -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* \
|
||||
| -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
|
||||
| -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
|
||||
| -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
|
||||
| -mingw32* | -linux-gnu* | -uxpv* | -beos* | -rhapsody* \
|
||||
| -openstep* | -mpeix* | -oskit*)
|
||||
# Remember, each alternative MUST END IN *, to match a version number.
|
||||
;;
|
||||
-linux*)
|
||||
os=`echo $os | sed -e 's|linux|linux-gnu|'`
|
||||
;;
|
||||
-sunos5*)
|
||||
os=`echo $os | sed -e 's|sunos5|solaris2|'`
|
||||
;;
|
||||
-sunos6*)
|
||||
os=`echo $os | sed -e 's|sunos6|solaris3|'`
|
||||
;;
|
||||
-osfrose*)
|
||||
os=-osfrose
|
||||
;;
|
||||
-osf*)
|
||||
os=-osf
|
||||
;;
|
||||
-utek*)
|
||||
os=-bsd
|
||||
;;
|
||||
-dynix*)
|
||||
os=-bsd
|
||||
;;
|
||||
-acis*)
|
||||
os=-aos
|
||||
;;
|
||||
-ctix* | -uts*)
|
||||
os=-sysv
|
||||
;;
|
||||
-ns2 )
|
||||
os=-nextstep2
|
||||
;;
|
||||
# Preserve the version number of sinix5.
|
||||
-sinix5.*)
|
||||
os=`echo $os | sed -e 's|sinix|sysv|'`
|
||||
;;
|
||||
-sinix*)
|
||||
os=-sysv4
|
||||
;;
|
||||
-triton*)
|
||||
os=-sysv3
|
||||
;;
|
||||
-oss*)
|
||||
os=-sysv3
|
||||
;;
|
||||
-svr4)
|
||||
os=-sysv4
|
||||
;;
|
||||
-svr3)
|
||||
os=-sysv3
|
||||
;;
|
||||
-sysvr4)
|
||||
os=-sysv4
|
||||
;;
|
||||
# This must come after -sysvr4.
|
||||
-sysv*)
|
||||
;;
|
||||
-xenix)
|
||||
os=-xenix
|
||||
;;
|
||||
-none)
|
||||
;;
|
||||
*)
|
||||
# Get rid of the `-' at the beginning of $os.
|
||||
os=`echo $os | sed 's/[^-]*-//'`
|
||||
echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
else
|
||||
|
||||
# Here we handle the default operating systems that come with various machines.
|
||||
# The value should be what the vendor currently ships out the door with their
|
||||
# machine or put another way, the most popular os provided with the machine.
|
||||
|
||||
# Note that if you're going to try to match "-MANUFACTURER" here (say,
|
||||
# "-sun"), then you have to tell the case statement up towards the top
|
||||
# that MANUFACTURER isn't an operating system. Otherwise, code above
|
||||
# will signal an error saying that MANUFACTURER isn't an operating
|
||||
# system, and we'll never get to this point.
|
||||
|
||||
case $basic_machine in
|
||||
*-acorn)
|
||||
os=-riscix1.2
|
||||
;;
|
||||
arm*-corel)
|
||||
os=-linux
|
||||
;;
|
||||
arm*-semi)
|
||||
os=-aout
|
||||
;;
|
||||
pdp11-*)
|
||||
os=-none
|
||||
;;
|
||||
*-dec | vax-*)
|
||||
os=-ultrix4.2
|
||||
;;
|
||||
m68*-apollo)
|
||||
os=-domain
|
||||
;;
|
||||
i386-sun)
|
||||
os=-sunos4.0.2
|
||||
;;
|
||||
m68000-sun)
|
||||
os=-sunos3
|
||||
# This also exists in the configure program, but was not the
|
||||
# default.
|
||||
# os=-sunos4
|
||||
;;
|
||||
*-tti) # must be before sparc entry or we get the wrong os.
|
||||
os=-sysv3
|
||||
;;
|
||||
sparc-* | *-sun)
|
||||
os=-sunos4.1.1
|
||||
;;
|
||||
*-be)
|
||||
os=-beos
|
||||
;;
|
||||
*-ibm)
|
||||
os=-aix
|
||||
;;
|
||||
*-hp)
|
||||
os=-hpux
|
||||
;;
|
||||
*-hitachi)
|
||||
os=-hiux
|
||||
;;
|
||||
i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
|
||||
os=-sysv
|
||||
;;
|
||||
*-cbm)
|
||||
os=-amigaos
|
||||
;;
|
||||
*-dg)
|
||||
os=-dgux
|
||||
;;
|
||||
*-dolphin)
|
||||
os=-sysv3
|
||||
;;
|
||||
m68k-ccur)
|
||||
os=-rtu
|
||||
;;
|
||||
m88k-omron*)
|
||||
os=-luna
|
||||
;;
|
||||
*-next )
|
||||
os=-nextstep
|
||||
;;
|
||||
*-sequent)
|
||||
os=-ptx
|
||||
;;
|
||||
*-crds)
|
||||
os=-unos
|
||||
;;
|
||||
*-ns)
|
||||
os=-genix
|
||||
;;
|
||||
i370-*)
|
||||
os=-mvs
|
||||
;;
|
||||
*-next)
|
||||
os=-nextstep3
|
||||
;;
|
||||
*-gould)
|
||||
os=-sysv
|
||||
;;
|
||||
*-highlevel)
|
||||
os=-bsd
|
||||
;;
|
||||
*-encore)
|
||||
os=-bsd
|
||||
;;
|
||||
*-sgi)
|
||||
os=-irix
|
||||
;;
|
||||
*-siemens)
|
||||
os=-sysv4
|
||||
;;
|
||||
*-masscomp)
|
||||
os=-rtu
|
||||
;;
|
||||
f301-fujitsu)
|
||||
os=-uxpv
|
||||
;;
|
||||
*)
|
||||
os=-none
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
# Here we handle the case where we know the os, and the CPU type, but not the
|
||||
# manufacturer. We pick the logical manufacturer.
|
||||
vendor=unknown
|
||||
case $basic_machine in
|
||||
*-unknown)
|
||||
case $os in
|
||||
-riscix*)
|
||||
vendor=acorn
|
||||
;;
|
||||
-sunos*)
|
||||
vendor=sun
|
||||
;;
|
||||
-aix*)
|
||||
vendor=ibm
|
||||
;;
|
||||
-hpux*)
|
||||
vendor=hp
|
||||
;;
|
||||
-mpeix*)
|
||||
vendor=hp
|
||||
;;
|
||||
-mpeix*)
|
||||
vendor=hp
|
||||
;;
|
||||
-hiux*)
|
||||
vendor=hitachi
|
||||
;;
|
||||
-unos*)
|
||||
vendor=crds
|
||||
;;
|
||||
-dgux*)
|
||||
vendor=dg
|
||||
;;
|
||||
-luna*)
|
||||
vendor=omron
|
||||
;;
|
||||
-genix*)
|
||||
vendor=ns
|
||||
;;
|
||||
-mvs*)
|
||||
vendor=ibm
|
||||
;;
|
||||
-ptx*)
|
||||
vendor=sequent
|
||||
;;
|
||||
-vxsim* | -vxworks*)
|
||||
vendor=wrs
|
||||
;;
|
||||
-aux*)
|
||||
vendor=apple
|
||||
;;
|
||||
esac
|
||||
basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
|
||||
;;
|
||||
esac
|
||||
|
||||
echo $basic_machine$os
|
||||
983
configure.ac
Normal file
983
configure.ac
Normal file
@@ -0,0 +1,983 @@
|
||||
dnl $Id$
|
||||
dnl Process this file with autoconf to produce a configure script.
|
||||
|
||||
dnl Ensure that this file is processed with autoconf 2.50 or newer
|
||||
dnl Don't even think about removing this check!
|
||||
AC_PREREQ(2.50)
|
||||
|
||||
dnl We don't know the version number "staticly" so we use a dash here
|
||||
AC_INIT(curl, [-], [curl-bug@haxx.se])
|
||||
|
||||
dnl configure script copyright
|
||||
AC_COPYRIGHT([Copyright (c) 1998 - 2003 Daniel Stenberg, <daniel@haxx.se>
|
||||
This configure script may be copied, distributed and modified under the
|
||||
terms of the curl license; see COPYING for more details])
|
||||
|
||||
AC_CONFIG_SRCDIR([lib/urldata.h])
|
||||
AM_CONFIG_HEADER(lib/config.h src/config.h tests/server/config.h )
|
||||
AM_MAINTAINER_MODE
|
||||
|
||||
dnl SED is needed by some of the tools
|
||||
AC_PATH_PROG( SED, sed, , $PATH:/usr/bin:/usr/local/bin)
|
||||
AC_SUBST(SED)
|
||||
|
||||
dnl AR is used by libtool, and try the odd Solaris path too
|
||||
AC_PATH_PROG( AR, ar, , $PATH:/usr/bin:/usr/local/bin:/usr/ccs/bin)
|
||||
AC_SUBST(AR)
|
||||
|
||||
dnl figure out the libcurl version
|
||||
VERSION=`$SED -ne 's/^#define LIBCURL_VERSION "\(.*\)"/\1/p' ${srcdir}/include/curl/curl.h`
|
||||
AM_INIT_AUTOMAKE(curl,$VERSION)
|
||||
AC_MSG_CHECKING([curl version])
|
||||
AC_MSG_RESULT($VERSION)
|
||||
|
||||
dnl
|
||||
dnl we extract the numerical version for curl-config only
|
||||
VERSIONNUM=`$SED -ne 's/^#define LIBCURL_VERSION_NUM 0x\(.*\)/\1/p' ${srcdir}/include/curl/curl.h`
|
||||
AC_SUBST(VERSIONNUM)
|
||||
|
||||
dnl Solaris pkgadd support definitions
|
||||
PKGADD_PKG="HAXXcurl"
|
||||
PKGADD_NAME="cURL - a client that groks URLs"
|
||||
PKGADD_VENDOR="curl.haxx.se"
|
||||
AC_SUBST(PKGADD_PKG)
|
||||
AC_SUBST(PKGADD_NAME)
|
||||
AC_SUBST(PKGADD_VENDOR)
|
||||
|
||||
|
||||
dnl
|
||||
dnl Detect the canonical host and target build environment
|
||||
dnl
|
||||
|
||||
AC_CANONICAL_HOST
|
||||
dnl Get system canonical name
|
||||
AC_DEFINE_UNQUOTED(OS, "${host}", [cpu-machine-OS])
|
||||
|
||||
dnl Check for AIX weirdos
|
||||
AC_AIX
|
||||
|
||||
dnl Checks for programs.
|
||||
AC_PROG_CC
|
||||
|
||||
dnl check for how to do large files
|
||||
AC_SYS_LARGEFILE
|
||||
|
||||
dnl check for cygwin stuff
|
||||
AC_LIBTOOL_WIN32_DLL
|
||||
|
||||
dnl libtool setup
|
||||
AM_PROG_LIBTOOL
|
||||
|
||||
case $host in
|
||||
*-*-cygwin | *-*-mingw* | *-*-pw32*)
|
||||
need_no_undefined=yes
|
||||
;;
|
||||
*)
|
||||
need_no_undefined=no
|
||||
;;
|
||||
esac
|
||||
|
||||
AM_CONDITIONAL(NO_UNDEFINED, test x$need_no_undefined = xyes)
|
||||
|
||||
dnl The install stuff has already been taken care of by the automake stuff
|
||||
dnl AC_PROG_INSTALL
|
||||
AC_PROG_MAKE_SET
|
||||
|
||||
dnl ************************************************************
|
||||
dnl switch off particular protocols
|
||||
dnl
|
||||
AC_MSG_CHECKING([whether to support http])
|
||||
AC_ARG_ENABLE(http,
|
||||
AC_HELP_STRING([--enable-http],[Enable HTTP support])
|
||||
AC_HELP_STRING([--disable-http],[Disable HTTP support]),
|
||||
[ case "$enableval" in
|
||||
no)
|
||||
AC_MSG_RESULT(no)
|
||||
AC_DEFINE(CURL_DISABLE_HTTP, 1, [to disable HTTP])
|
||||
AC_MSG_WARN([disable HTTP disables FTP over proxy and GOPHER too])
|
||||
AC_DEFINE(CURL_DISABLE_GOPHER, 1, [to disable GOPHER])
|
||||
AC_SUBST(CURL_DISABLE_HTTP)
|
||||
AC_SUBST(CURL_DISABLE_GOPHER)
|
||||
;;
|
||||
*) AC_MSG_RESULT(yes)
|
||||
;;
|
||||
esac ],
|
||||
AC_MSG_RESULT(yes)
|
||||
)
|
||||
AC_MSG_CHECKING([whether to support ftp])
|
||||
AC_ARG_ENABLE(ftp,
|
||||
AC_HELP_STRING([--enable-ftp],[Enable FTP support])
|
||||
AC_HELP_STRING([--disable-ftp],[Disable FTP support]),
|
||||
[ case "$enableval" in
|
||||
no)
|
||||
AC_MSG_RESULT(no)
|
||||
AC_DEFINE(CURL_DISABLE_FTP, 1, [to disable FTP])
|
||||
AC_SUBST(CURL_DISABLE_FTP)
|
||||
;;
|
||||
*) AC_MSG_RESULT(yes)
|
||||
;;
|
||||
esac ],
|
||||
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)
|
||||
;;
|
||||
*) AC_MSG_RESULT(yes)
|
||||
;;
|
||||
esac ],
|
||||
AC_MSG_RESULT(yes)
|
||||
)
|
||||
AC_MSG_CHECKING([whether to support file])
|
||||
AC_ARG_ENABLE(file,
|
||||
AC_HELP_STRING([--enable-file],[Enable FILE support])
|
||||
AC_HELP_STRING([--disable-file],[Disable FILE support]),
|
||||
[ case "$enableval" in
|
||||
no)
|
||||
AC_MSG_RESULT(no)
|
||||
AC_DEFINE(CURL_DISABLE_FILE, 1, [to disable FILE])
|
||||
AC_SUBST(CURL_DISABLE_FILE)
|
||||
;;
|
||||
*) AC_MSG_RESULT(yes)
|
||||
;;
|
||||
esac ],
|
||||
AC_MSG_RESULT(yes)
|
||||
)
|
||||
AC_MSG_CHECKING([whether to support ldap])
|
||||
AC_ARG_ENABLE(ldap,
|
||||
AC_HELP_STRING([--enable-ldap],[Enable LDAP support])
|
||||
AC_HELP_STRING([--disable-ldap],[Disable LDAP support]),
|
||||
[ case "$enableval" in
|
||||
no)
|
||||
AC_MSG_RESULT(no)
|
||||
AC_DEFINE(CURL_DISABLE_LDAP, 1, [to disable LDAP])
|
||||
AC_SUBST(CURL_DISABLE_LDAP)
|
||||
;;
|
||||
*) AC_MSG_RESULT(yes)
|
||||
;;
|
||||
esac ],
|
||||
AC_MSG_RESULT(yes)
|
||||
)
|
||||
AC_MSG_CHECKING([whether to support dict])
|
||||
AC_ARG_ENABLE(dict,
|
||||
AC_HELP_STRING([--enable-dict],[Enable DICT support])
|
||||
AC_HELP_STRING([--disable-dict],[Disable DICT support]),
|
||||
[ case "$enableval" in
|
||||
no)
|
||||
AC_MSG_RESULT(no)
|
||||
AC_DEFINE(CURL_DISABLE_DICT, 1, [to disable DICT])
|
||||
AC_SUBST(CURL_DISABLE_DICT)
|
||||
;;
|
||||
*) AC_MSG_RESULT(yes)
|
||||
;;
|
||||
esac ],
|
||||
AC_MSG_RESULT(yes)
|
||||
)
|
||||
AC_MSG_CHECKING([whether to support telnet])
|
||||
AC_ARG_ENABLE(telnet,
|
||||
AC_HELP_STRING([--enable-telnet],[Enable TELNET support])
|
||||
AC_HELP_STRING([--disable-telnet],[Disable TELNET support]),
|
||||
[ case "$enableval" in
|
||||
no)
|
||||
AC_MSG_RESULT(no)
|
||||
AC_DEFINE(CURL_DISABLE_TELNET, 1, [to disable TELNET])
|
||||
AC_SUBST(CURL_DISABLE_TELNET)
|
||||
;;
|
||||
*) AC_MSG_RESULT(yes)
|
||||
;;
|
||||
esac ],
|
||||
AC_MSG_RESULT(yes)
|
||||
)
|
||||
|
||||
|
||||
dnl **********************************************************************
|
||||
dnl Checks for IPv6
|
||||
dnl **********************************************************************
|
||||
|
||||
AC_MSG_CHECKING([whether to enable ipv6])
|
||||
AC_ARG_ENABLE(ipv6,
|
||||
AC_HELP_STRING([--enable-ipv6],[Enable ipv6 (with ipv4) support])
|
||||
AC_HELP_STRING([--disable-ipv6],[Disable ipv6 support]),
|
||||
[ case "$enableval" in
|
||||
no)
|
||||
AC_MSG_RESULT(no)
|
||||
ipv6=no
|
||||
;;
|
||||
*) AC_MSG_RESULT(yes)
|
||||
ipv6=yes
|
||||
;;
|
||||
esac ],
|
||||
|
||||
AC_TRY_RUN([ /* is AF_INET6 available? */
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
main()
|
||||
{
|
||||
if (socket(AF_INET6, SOCK_STREAM, 0) < 0)
|
||||
exit(1);
|
||||
else
|
||||
exit(0);
|
||||
}
|
||||
],
|
||||
AC_MSG_RESULT(yes)
|
||||
ipv6=yes,
|
||||
AC_MSG_RESULT(no)
|
||||
ipv6=no,
|
||||
AC_MSG_RESULT(no)
|
||||
ipv6=no
|
||||
))
|
||||
|
||||
if test "$ipv6" = "yes"; then
|
||||
CURL_CHECK_WORKING_GETADDRINFO
|
||||
fi
|
||||
|
||||
|
||||
dnl **********************************************************************
|
||||
dnl Checks for libraries.
|
||||
dnl **********************************************************************
|
||||
|
||||
dnl gethostbyname in the nsl lib?
|
||||
AC_CHECK_FUNC(gethostbyname, , [ AC_CHECK_LIB(nsl, gethostbyname) ])
|
||||
|
||||
if test "$ac_cv_lib_nsl_gethostbyname" != "yes" -a "$ac_cv_func_gethostbyname" != "yes"; then
|
||||
dnl gethostbyname in the socket lib?
|
||||
AC_CHECK_FUNC(gethostbyname, , [ AC_CHECK_LIB(socket, gethostbyname) ])
|
||||
fi
|
||||
|
||||
dnl At least one system has been identified to require BOTH nsl and
|
||||
dnl socket libs to link properly.
|
||||
if test "$ac_cv_lib_nsl_gethostbyname" = "$ac_cv_func_gethostbyname"; then
|
||||
AC_MSG_CHECKING([trying both nsl and socket libs])
|
||||
my_ac_save_LIBS=$LIBS
|
||||
LIBS="-lnsl -lsocket $LIBS"
|
||||
AC_TRY_LINK( ,
|
||||
[gethostbyname();],
|
||||
my_ac_link_result=success,
|
||||
my_ac_link_result=failure )
|
||||
|
||||
if test "$my_ac_link_result" = "failure"; then
|
||||
AC_MSG_RESULT([no])
|
||||
AC_MSG_ERROR([couldn't find libraries for gethostbyname()])
|
||||
dnl restore LIBS
|
||||
LIBS=$my_ac_save_LIBS
|
||||
else
|
||||
AC_MSG_RESULT([yes])
|
||||
fi
|
||||
fi
|
||||
|
||||
dnl resolve lib?
|
||||
AC_CHECK_FUNC(strcasecmp, , [ AC_CHECK_LIB(resolve, strcasecmp) ])
|
||||
|
||||
if test "$ac_cv_lib_resolve_strcasecmp" = "$ac_cv_func_strcasecmp"; then
|
||||
AC_CHECK_LIB(resolve, strcasecmp,
|
||||
[LIBS="-lresolve $LIBS"],
|
||||
,
|
||||
-lnsl)
|
||||
fi
|
||||
|
||||
dnl socket lib?
|
||||
AC_CHECK_FUNC(connect, , [ AC_CHECK_LIB(socket, connect) ])
|
||||
|
||||
dnl dl lib?
|
||||
AC_CHECK_FUNC(dlclose, , [ AC_CHECK_LIB(dl, dlopen) ])
|
||||
|
||||
AC_MSG_CHECKING([whether to use libgcc])
|
||||
AC_ARG_ENABLE(libgcc,
|
||||
AC_HELP_STRING([--enable-libgcc],[use libgcc when linking]),
|
||||
[ case "$enableval" in
|
||||
yes)
|
||||
LIBS="$LIBS -lgcc"
|
||||
AC_MSG_RESULT(yes)
|
||||
;;
|
||||
*) AC_MSG_RESULT(no)
|
||||
;;
|
||||
esac ],
|
||||
AC_MSG_RESULT(no)
|
||||
)
|
||||
|
||||
dnl **********************************************************************
|
||||
dnl Check how non-blocking sockets are set
|
||||
dnl **********************************************************************
|
||||
AC_ARG_ENABLE(nonblocking,
|
||||
AC_HELP_STRING([--enable-nonblocking],[Enable detecting how to do it])
|
||||
AC_HELP_STRING([--disable-nonblocking],[Disable non-blocking socket detection]),
|
||||
[
|
||||
if test "$enableval" = "no" ; then
|
||||
AC_MSG_WARN([non-blocking sockets disabled])
|
||||
AC_DEFINE(HAVE_DISABLED_NONBLOCKING, 1,
|
||||
[to disable NON-BLOCKING connections])
|
||||
else
|
||||
CURL_CHECK_NONBLOCKING_SOCKET
|
||||
fi
|
||||
],
|
||||
[
|
||||
CURL_CHECK_NONBLOCKING_SOCKET
|
||||
])
|
||||
|
||||
dnl **********************************************************************
|
||||
dnl Check for the random seed preferences
|
||||
dnl **********************************************************************
|
||||
|
||||
AC_ARG_WITH(egd-socket,
|
||||
AC_HELP_STRING([--with-egd-socket=FILE],
|
||||
[Entropy Gathering Daemon socket pathname]),
|
||||
[ EGD_SOCKET="$withval" ]
|
||||
)
|
||||
if test -n "$EGD_SOCKET" ; then
|
||||
AC_DEFINE_UNQUOTED(EGD_SOCKET, "$EGD_SOCKET",
|
||||
[your Entropy Gathering Daemon socket pathname] )
|
||||
fi
|
||||
|
||||
dnl Check for user-specified random device
|
||||
AC_ARG_WITH(random,
|
||||
AC_HELP_STRING([--with-random=FILE],[read randomness from FILE (default=/dev/urandom)]),
|
||||
[ RANDOM_FILE="$withval" ],
|
||||
[
|
||||
dnl Check for random device
|
||||
AC_CHECK_FILE("/dev/urandom", [ RANDOM_FILE="/dev/urandom"] )
|
||||
]
|
||||
)
|
||||
if test -n "$RANDOM_FILE" ; then
|
||||
AC_SUBST(RANDOM_FILE)
|
||||
AC_DEFINE_UNQUOTED(RANDOM_FILE, "$RANDOM_FILE",
|
||||
[a suitable file to read random data from])
|
||||
fi
|
||||
|
||||
dnl **********************************************************************
|
||||
dnl Check if the operating system allows programs to write to their own argv[]
|
||||
dnl **********************************************************************
|
||||
|
||||
AC_MSG_CHECKING([if argv can be written to])
|
||||
AC_RUN_IFELSE([[
|
||||
int main(int argc, char ** argv) {
|
||||
argv[0][0] = ' ';
|
||||
return (argv[0][0] == ' ')?0:1;
|
||||
}
|
||||
]],
|
||||
AC_DEFINE(HAVE_WRITABLE_ARGV, 1, [Define this symbol if your OS supports changing the contents of argv])
|
||||
AC_MSG_RESULT(yes),
|
||||
AC_MSG_RESULT(no),
|
||||
AC_MSG_RESULT(no)
|
||||
AC_MSG_WARN([the previous check could not be made default was used])
|
||||
)
|
||||
|
||||
dnl **********************************************************************
|
||||
dnl Check for the presence of Kerberos4 libraries and headers
|
||||
dnl **********************************************************************
|
||||
|
||||
AC_ARG_WITH(krb4-includes,
|
||||
AC_HELP_STRING([--with-krb4-includes=DIR],
|
||||
[Specify location of kerberos4 headers]),[
|
||||
CPPFLAGS="$CPPFLAGS -I$withval"
|
||||
KRB4INC="$withval"
|
||||
want_krb4=yes
|
||||
])
|
||||
|
||||
AC_ARG_WITH(krb4-libs,
|
||||
AC_HELP_STRING([--with-krb4-libs=DIR],[Specify location of kerberos4 libs]),[
|
||||
LDFLAGS="$LDFLAGS -L$withval"
|
||||
KRB4LIB="$withval"
|
||||
want_krb4=yes
|
||||
])
|
||||
|
||||
|
||||
OPT_KRB4=off
|
||||
AC_ARG_WITH(krb4,dnl
|
||||
AC_HELP_STRING([--with-krb4=DIR],[where to look for Kerberos4]),[
|
||||
OPT_KRB4="$withval"
|
||||
if test X"$OPT_KRB4" != Xyes
|
||||
then
|
||||
LDFLAGS="$LDFLAGS -L$OPT_KRB4/lib"
|
||||
KRB4LIB="$OPT_KRB4/lib"
|
||||
CPPFLAGS="$CPPFLAGS -I$OPT_KRB4/include"
|
||||
KRB4INC="$OPT_KRB4/include"
|
||||
fi
|
||||
want_krb4="yes"
|
||||
])
|
||||
|
||||
AC_MSG_CHECKING([if Kerberos4 support is requested])
|
||||
|
||||
if test "$want_krb4" = yes
|
||||
then
|
||||
if test "$ipv6" = "yes"; then
|
||||
echo krb4 is not compatible with IPv6
|
||||
exit 1
|
||||
fi
|
||||
AC_MSG_RESULT(yes)
|
||||
|
||||
dnl Check for & handle argument to --with-krb4
|
||||
|
||||
AC_MSG_CHECKING(where to look for Kerberos4)
|
||||
if test X"$OPT_KRB4" = Xyes
|
||||
then
|
||||
AC_MSG_RESULT([defaults])
|
||||
else
|
||||
AC_MSG_RESULT([libs in $KRB4LIB, headers in $KRB4INC])
|
||||
fi
|
||||
|
||||
dnl Check for DES library
|
||||
AC_CHECK_LIB(des, des_pcbc_encrypt,
|
||||
[
|
||||
AC_CHECK_HEADERS(des.h)
|
||||
|
||||
dnl resolv lib?
|
||||
AC_CHECK_FUNC(res_search, , [AC_CHECK_LIB(resolv, res_search)])
|
||||
|
||||
dnl Check for the Kerberos4 library
|
||||
AC_CHECK_LIB(krb, krb_net_read,
|
||||
[
|
||||
dnl Check for header files
|
||||
AC_CHECK_HEADERS(krb.h)
|
||||
|
||||
dnl we found the required libraries, add to LIBS
|
||||
LIBS="-lkrb -ldes $LIBS"
|
||||
|
||||
dnl Check for function krb_get_our_ip_for_realm
|
||||
dnl this is needed for NAT networks
|
||||
AC_CHECK_FUNCS(krb_get_our_ip_for_realm)
|
||||
|
||||
dnl add define KRB4
|
||||
AC_DEFINE(KRB4, 1,
|
||||
[if you have the Kerberos4 libraries (including -ldes)])
|
||||
|
||||
dnl substitute it too!
|
||||
KRB4_ENABLED=1
|
||||
AC_SUBST(KRB4_ENABLED)
|
||||
|
||||
dnl the krb4 stuff needs a strlcpy()
|
||||
AC_CHECK_FUNCS(strlcpy)
|
||||
|
||||
])
|
||||
])
|
||||
else
|
||||
AC_MSG_RESULT(no)
|
||||
fi
|
||||
|
||||
dnl **********************************************************************
|
||||
dnl Check for GSS-API libraries
|
||||
dnl **********************************************************************
|
||||
|
||||
AC_ARG_WITH(gssapi-includes,
|
||||
AC_HELP_STRING([--with-gssapi-includes=DIR],
|
||||
[Specify location of GSSAPI header]),
|
||||
[ GSSAPI_INCS="-I$withval"
|
||||
want_gss="yes" ]
|
||||
)
|
||||
|
||||
AC_ARG_WITH(gssapi-libs,
|
||||
AC_HELP_STRING([--with-gssapi-libs=DIR],
|
||||
[Specify location of GSSAPI libs]),
|
||||
[ GSSAPI_LIBS="-L$withval -lgssapi"
|
||||
want_gss="yes" ]
|
||||
)
|
||||
|
||||
AC_ARG_WITH(gssapi,
|
||||
AC_HELP_STRING([--with-gssapi=DIR],
|
||||
[Where to look for GSSAPI]),
|
||||
[ GSSAPI_ROOT="$withval"
|
||||
want_gss="yes" ]
|
||||
)
|
||||
|
||||
AC_MSG_CHECKING([if GSSAPI support is requested])
|
||||
if test x"$want_gss" = xyes; then
|
||||
if test -z "$GSSAPI_INCS"; then
|
||||
if test -f "$GSSAPI_ROOT/bin/krb5-config"; then
|
||||
gss_cppflags=`$GSSAPI_ROOT/bin/krb5-config --cflags gssapi`
|
||||
CPPFLAGS="$CPPFLAGS $gss_cppflags"
|
||||
else
|
||||
CPPFLAGS="$GSSAPI_ROOT/include"
|
||||
fi
|
||||
else
|
||||
CPPFLAGS="$CPPFLAGS $GSSAPI_INCS"
|
||||
fi
|
||||
|
||||
if test -z "$GSSAPI_LIB_DIR"; then
|
||||
if test -f "$GSSAPI_ROOT/bin/krb5-config"; then
|
||||
gss_ldflags=`$GSSAPI_ROOT/bin/krb5-config --libs gssapi`
|
||||
LDFLAGS="$LDFLAGS $gss_ldflags"
|
||||
else
|
||||
LDFLAGS="$LDFLAGS $GSSAPI_ROOT/lib -lgssapi"
|
||||
fi
|
||||
else
|
||||
LDFLAGS="$LDFLAGS $GSSAPI_LIB_DIR"
|
||||
fi
|
||||
|
||||
AC_MSG_RESULT(yes)
|
||||
AC_DEFINE(GSSAPI, 1, [if you have the gssapi libraries])
|
||||
|
||||
else
|
||||
AC_MSG_RESULT(no)
|
||||
fi
|
||||
|
||||
|
||||
dnl Detect the pkg-config tool, as it may have extra info about the
|
||||
dnl openssl installation we can use. I *believe* this is what we are
|
||||
dnl expected to do on really recent Redhat Linux hosts.
|
||||
AC_PATH_PROG( PKGCONFIG, pkg-config, no, $PATH:/usr/bin:/usr/local/bin)
|
||||
if test "$PKGCONFIG" != "no" ; then
|
||||
AC_MSG_CHECKING([for OpenSSL options using pkg-config])
|
||||
|
||||
$PKGCONFIG --exists openssl
|
||||
SSL_EXISTS=$?
|
||||
|
||||
if test "$SSL_EXISTS" -eq "0"; then
|
||||
SSL_LIBS=`$PKGCONFIG --libs-only-l openssl 2>/dev/null`
|
||||
SSL_LDFLAGS=`$PKGCONFIG --libs-only-L openssl 2>/dev/null`
|
||||
SSL_CPPFLAGS=`$PKGCONFIG --cflags-only-I openssl 2>/dev/null`
|
||||
|
||||
LIBS="$LIBS $SSL_LIBS"
|
||||
CPPFLAGS="$CPPFLAGS $SSL_CPPFLAGS"
|
||||
LDFLAGS="$LDFLAGS $SSL_LDFLAGS"
|
||||
|
||||
AC_MSG_RESULT([yes])
|
||||
else
|
||||
AC_MSG_RESULT([no])
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
dnl **********************************************************************
|
||||
dnl Check for the presence of SSL libraries and headers
|
||||
dnl **********************************************************************
|
||||
|
||||
dnl Default to compiler & linker defaults for SSL files & libraries.
|
||||
OPT_SSL=off
|
||||
dnl Default to no CA bundle
|
||||
ca="no"
|
||||
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([--without-ssl], [disable SSL]),
|
||||
OPT_SSL=$withval)
|
||||
|
||||
if test X"$OPT_SSL" = Xno
|
||||
then
|
||||
AC_MSG_WARN(SSL/https support disabled)
|
||||
else
|
||||
|
||||
dnl Check for and handle argument to --with-ssl.
|
||||
|
||||
dnl save the pre-ssl check flags for a while
|
||||
CLEANLDFLAGS="$LDFLAGS"
|
||||
CLEANCPPFLAGS="$CPPFLAGS"
|
||||
|
||||
case "$OPT_SSL" in
|
||||
yes)
|
||||
EXTRA_SSL=/usr/local/ssl ;;
|
||||
off)
|
||||
EXTRA_SSL= ;;
|
||||
*)
|
||||
dnl check the given spot right away!
|
||||
EXTRA_SSL=$OPT_SSL
|
||||
LDFLAGS="$LDFLAGS -L$EXTRA_SSL/lib"
|
||||
CPPFLAGS="$CPPFLAGS -I$EXTRA_SSL/include/openssl -I$EXTRA_SSL/include"
|
||||
;;
|
||||
esac
|
||||
|
||||
AC_CHECK_LIB(crypto, CRYPTO_lock,[
|
||||
HAVECRYPTO="yes"
|
||||
],[
|
||||
OLDLDFLAGS="$LDFLAGS"
|
||||
OLDCPPFLAGS="$CPPFLAGS"
|
||||
LDFLAGS="$CLEANLDFLAGS -L$EXTRA_SSL/lib"
|
||||
CPPFLAGS="$CLEANCPPFLAGS -I$EXTRA_SSL/include/openssl -I$EXTRA_SSL/include"
|
||||
AC_CHECK_LIB(crypto, CRYPTO_add_lock,[
|
||||
HAVECRYPTO="yes" ], [
|
||||
LDFLAGS="$OLDLDFLAGS"
|
||||
CPPFLAGS="$OLDCPPFLAGS"
|
||||
])
|
||||
])
|
||||
|
||||
|
||||
if test "$HAVECRYPTO" = "yes"; then
|
||||
dnl This is only reasonable to do if crypto actually is there: check for
|
||||
dnl SSL libs NOTE: it is important to do this AFTER the crypto lib
|
||||
|
||||
AC_CHECK_LIB(crypto, CRYPTO_add_lock)
|
||||
AC_CHECK_LIB(ssl, SSL_connect)
|
||||
|
||||
if test "$ac_cv_lib_ssl_SSL_connect" != yes; then
|
||||
dnl we didn't find the SSL lib, try the RSAglue/rsaref stuff
|
||||
AC_MSG_CHECKING(for ssl with RSAglue/rsaref libs in use);
|
||||
OLIBS=$LIBS
|
||||
LIBS="$LIBS -lRSAglue -lrsaref"
|
||||
AC_CHECK_LIB(ssl, SSL_connect)
|
||||
if test "$ac_cv_lib_ssl_SSL_connect" != yes; then
|
||||
dnl still no SSL_connect
|
||||
AC_MSG_RESULT(no)
|
||||
LIBS=$OLIBS
|
||||
else
|
||||
AC_MSG_RESULT(yes)
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
dnl Check for SSLeay headers
|
||||
AC_CHECK_HEADERS(openssl/x509.h openssl/rsa.h openssl/crypto.h \
|
||||
openssl/pem.h openssl/ssl.h openssl/err.h,
|
||||
OPENSSL_ENABLED=1)
|
||||
|
||||
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,
|
||||
OPENSSL_ENABLED=1)
|
||||
fi
|
||||
|
||||
dnl If the ENGINE library seems to be around, check for the OpenSSL engine
|
||||
dnl header, it is kind of "separated" from the main SSL check
|
||||
AC_CHECK_FUNC(ENGINE_init, [ AC_CHECK_HEADERS(openssl/engine.h) ])
|
||||
|
||||
AC_SUBST(OPENSSL_ENABLED)
|
||||
|
||||
AC_MSG_CHECKING([CA cert bundle install path])
|
||||
|
||||
AC_ARG_WITH(ca-bundle,
|
||||
AC_HELP_STRING([--with-ca-bundle=FILE], [File name to install the CA bundle as])
|
||||
AC_HELP_STRING([--without-ca-bundle], [Don't install the CA bundle]),
|
||||
[ ca="$withval" ],
|
||||
[
|
||||
if test "x$prefix" != xNONE; then
|
||||
ca="\${prefix}/share/curl/curl-ca-bundle.crt"
|
||||
else
|
||||
ca="$ac_default_prefix/share/curl/curl-ca-bundle.crt"
|
||||
fi
|
||||
] )
|
||||
|
||||
if test X"$OPT_SSL" = Xno; then
|
||||
ca="no"
|
||||
fi
|
||||
|
||||
if test "x$ca" != "xno"; then
|
||||
CURL_CA_BUNDLE='"'$ca'"'
|
||||
AC_SUBST(CURL_CA_BUNDLE)
|
||||
fi
|
||||
AC_MSG_RESULT([$ca])
|
||||
|
||||
dnl these can only exist if openssl exists
|
||||
|
||||
AC_CHECK_FUNCS( RAND_status \
|
||||
RAND_screen \
|
||||
RAND_egd )
|
||||
|
||||
fi
|
||||
|
||||
if test X"$OPT_SSL" != Xoff &&
|
||||
test "$OPENSSL_ENABLED" != "1"; then
|
||||
AC_MSG_ERROR([OpenSSL libs and/or directories were not found where specified!])
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
AM_CONDITIONAL(CABUNDLE, test x$ca != xno)
|
||||
|
||||
dnl **********************************************************************
|
||||
dnl Check for the presence of ZLIB libraries and headers
|
||||
dnl **********************************************************************
|
||||
|
||||
dnl Check for & handle argument to --with-zlib.
|
||||
|
||||
_cppflags=$CPPFLAGS
|
||||
_ldflags=$LDFLAGS
|
||||
OPT_ZLIB="/usr/local"
|
||||
AC_ARG_WITH(zlib,
|
||||
AC_HELP_STRING([--with-zlib=PATH],[search for zlib in PATH])
|
||||
AC_HELP_STRING([--without-zlib],[disable use of zlib]),
|
||||
[OPT_ZLIB="$withval"])
|
||||
|
||||
case "$OPT_ZLIB" in
|
||||
no)
|
||||
AC_MSG_WARN([zlib disabled]) ;;
|
||||
*)
|
||||
dnl check for the lib first without setting any new path, since many
|
||||
dnl people have it in the default path
|
||||
|
||||
AC_CHECK_LIB(z, inflateEnd, ,
|
||||
[if test -d "$OPT_ZLIB"; then
|
||||
CPPFLAGS="$CPPFLAGS -I$OPT_ZLIB/include"
|
||||
LDFLAGS="$LDFLAGS -L$OPT_ZLIB/lib"
|
||||
fi])
|
||||
|
||||
AC_CHECK_HEADER(zlib.h,[
|
||||
AC_CHECK_LIB(z, gzread,
|
||||
[HAVE_LIBZ="1"
|
||||
AC_SUBST(HAVE_LIBZ)
|
||||
LIBS="$LIBS -lz"
|
||||
AC_DEFINE(HAVE_ZLIB_H, 1, [if you have the zlib.h header file])
|
||||
AC_DEFINE(HAVE_LIBZ, 1, [If zlib is available])],
|
||||
[ CPPFLAGS=$_cppflags
|
||||
LDFLAGS=$_ldflags])],
|
||||
[ CPPFLAGS=$_cppflags
|
||||
LDFLAGS=$_ldflags]
|
||||
)
|
||||
;;
|
||||
esac
|
||||
|
||||
dnl set variable for use in automakefile(s)
|
||||
AM_CONDITIONAL(HAVE_LIBZ, test x"$HAVE_LIBZ" = x1)
|
||||
|
||||
dnl Default is to try the thread-safe versions of a few functions
|
||||
OPT_THREAD=on
|
||||
|
||||
dnl detect AIX 4.3 or later
|
||||
dnl see full docs on this reasoning in the lib/hostip.c source file
|
||||
AC_MSG_CHECKING([AIX 4.3 or later])
|
||||
AC_PREPROC_IFELSE([
|
||||
#if defined(_AIX) && defined(_AIX43)
|
||||
printf("just fine");
|
||||
#else
|
||||
#error "this is not AIX 4.3 or later"
|
||||
#endif
|
||||
],
|
||||
[ AC_MSG_RESULT([yes])
|
||||
OPT_THREAD=off ],
|
||||
[ AC_MSG_RESULT([no]) ]
|
||||
)
|
||||
|
||||
AC_ARG_ENABLE(thread,dnl
|
||||
AC_HELP_STRING([--disable-thread],[don't look for thread-safe functions]),
|
||||
OPT_THREAD=off
|
||||
AC_MSG_WARN(libcurl will not get built using thread-safe functions)
|
||||
)
|
||||
|
||||
if test X"$OPT_THREAD" = Xoff
|
||||
then
|
||||
AC_DEFINE(DISABLED_THREADSAFE, 1, \
|
||||
Set to explicitly specify we don't want to use thread-safe functions)
|
||||
else
|
||||
|
||||
dnl dig around for gethostbyname_r()
|
||||
CURL_CHECK_GETHOSTBYNAME_R()
|
||||
|
||||
dnl dig around for gethostbyaddr_r()
|
||||
CURL_CHECK_GETHOSTBYADDR_R()
|
||||
|
||||
dnl poke around for inet_ntoa_r()
|
||||
CURL_CHECK_INET_NTOA_R()
|
||||
|
||||
dnl is there a localtime_r()
|
||||
CURL_CHECK_LOCALTIME_R()
|
||||
|
||||
AC_CHECK_FUNCS( gmtime_r )
|
||||
|
||||
fi
|
||||
|
||||
dnl **********************************************************************
|
||||
dnl Back to "normal" configuring
|
||||
dnl **********************************************************************
|
||||
|
||||
dnl Checks for header files.
|
||||
AC_HEADER_STDC
|
||||
|
||||
dnl First check for the very most basic headers. Then we can use these
|
||||
dnl ones as default-headers when checking for the rest!
|
||||
AC_CHECK_HEADERS(
|
||||
sys/types.h \
|
||||
sys/time.h \
|
||||
sys/select.h \
|
||||
sys/socket.h \
|
||||
unistd.h \
|
||||
malloc.h \
|
||||
stdlib.h \
|
||||
arpa/inet.h \
|
||||
net/if.h \
|
||||
netinet/in.h \
|
||||
netdb.h \
|
||||
sys/sockio.h \
|
||||
sys/stat.h \
|
||||
sys/param.h \
|
||||
termios.h \
|
||||
termio.h \
|
||||
sgtty.h \
|
||||
fcntl.h \
|
||||
dlfcn.h \
|
||||
alloca.h \
|
||||
winsock.h \
|
||||
time.h \
|
||||
io.h \
|
||||
pwd.h \
|
||||
utime.h \
|
||||
sys/utime.h \
|
||||
sys/poll.h \
|
||||
setjmp.h,
|
||||
dnl to do if not found
|
||||
[],
|
||||
dnl to do if found
|
||||
[],
|
||||
dnl default includes
|
||||
[
|
||||
#ifdef HAVE_SYS_TYPES_H
|
||||
#include <sys/types.h>
|
||||
#endif
|
||||
#ifdef HAVE_SYS_TIME_H
|
||||
#include <sys/time.h>
|
||||
#endif
|
||||
#ifdef HAVE_SYS_SELECT_H
|
||||
#include <sys/select.h>
|
||||
#endif
|
||||
#ifdef HAVE_SYS_SOCKET_H
|
||||
#include <sys/socket.h>
|
||||
#endif
|
||||
]
|
||||
)
|
||||
|
||||
dnl Checks for typedefs, structures, and compiler characteristics.
|
||||
AC_C_CONST
|
||||
AC_TYPE_SIZE_T
|
||||
AC_HEADER_TIME
|
||||
|
||||
# mprintf() checks:
|
||||
|
||||
# check for 'long double'
|
||||
# AC_CHECK_SIZEOF(long double, 8)
|
||||
# check for 'long long'
|
||||
# AC_CHECK_SIZEOF(long long, 4)
|
||||
|
||||
# check for ssize_t
|
||||
AC_CHECK_TYPE(ssize_t, int)
|
||||
|
||||
TYPE_SOCKLEN_T
|
||||
TYPE_IN_ADDR_T
|
||||
|
||||
AC_FUNC_SELECT_ARGTYPES
|
||||
|
||||
dnl Checks for library functions.
|
||||
dnl AC_PROG_GCC_TRADITIONAL
|
||||
AC_TYPE_SIGNAL
|
||||
dnl AC_FUNC_VPRINTF
|
||||
AC_CHECK_FUNCS( socket \
|
||||
select \
|
||||
strdup \
|
||||
strstr \
|
||||
strtok_r \
|
||||
strftime \
|
||||
uname \
|
||||
strcasecmp \
|
||||
stricmp \
|
||||
strcmpi \
|
||||
gethostbyaddr \
|
||||
gettimeofday \
|
||||
inet_addr \
|
||||
inet_ntoa \
|
||||
tcsetattr \
|
||||
tcgetattr \
|
||||
perror \
|
||||
closesocket \
|
||||
sigaction \
|
||||
signal \
|
||||
getpass_r \
|
||||
strlcat \
|
||||
getpwuid \
|
||||
geteuid \
|
||||
dlopen \
|
||||
utime \
|
||||
sigsetjmp \
|
||||
poll,
|
||||
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 sigsetjmp() might be a macro and no function so if it isn't found already
|
||||
dnl we make an extra check here!
|
||||
if test "$ac_cv_func_sigsetjmp" != "yes"; then
|
||||
AC_MSG_CHECKING([for sigsetjmp defined as macro])
|
||||
AC_TRY_LINK( [#include <setjmp.h>],
|
||||
[sigjmp_buf jmpenv;
|
||||
sigsetjmp(jmpenv, 1);],
|
||||
AC_MSG_RESULT(yes)
|
||||
AC_DEFINE(HAVE_SIGSETJMP, 1, [If you have sigsetjmp]),
|
||||
AC_MSG_RESULT(no)
|
||||
)
|
||||
fi
|
||||
|
||||
AC_PATH_PROG( PERL, perl, ,
|
||||
$PATH:/usr/local/bin/perl:/usr/bin/:/usr/local/bin )
|
||||
AC_SUBST(PERL)
|
||||
|
||||
AC_PATH_PROGS( NROFF, gnroff nroff, ,
|
||||
$PATH:/usr/bin/:/usr/local/bin )
|
||||
AC_SUBST(NROFF)
|
||||
|
||||
AC_PROG_YACC
|
||||
|
||||
dnl AC_PATH_PROG( RANLIB, ranlib, /usr/bin/ranlib,
|
||||
dnl $PATH:/usr/bin/:/usr/local/bin )
|
||||
dnl AC_SUBST(RANLIB)
|
||||
|
||||
dnl ************************************************************
|
||||
dnl lame option to switch on debug options
|
||||
dnl
|
||||
AC_MSG_CHECKING([whether to enable debug options])
|
||||
AC_ARG_ENABLE(debug,
|
||||
AC_HELP_STRING([--enable-debug],[Enable pedantic debug options])
|
||||
AC_HELP_STRING([--disable-debug],[Disable debug options]),
|
||||
[ case "$enableval" in
|
||||
no)
|
||||
AC_MSG_RESULT(no)
|
||||
;;
|
||||
*) AC_MSG_RESULT(yes)
|
||||
|
||||
CPPFLAGS="$CPPFLAGS -DCURLDEBUG"
|
||||
CFLAGS="$CFLAGS -g"
|
||||
if test "$GCC" = "yes"; then
|
||||
CFLAGS="$CFLAGS -W -Wall -Wwrite-strings -pedantic -Wundef -Wpointer-arith -Wnested-externs"
|
||||
fi
|
||||
dnl strip off optimizer flags
|
||||
NEWFLAGS=""
|
||||
for flag in $CFLAGS; do
|
||||
case "$flag" in
|
||||
-O*)
|
||||
dnl echo "cut off $flag"
|
||||
;;
|
||||
*)
|
||||
NEWFLAGS="$NEWFLAGS $flag"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
CFLAGS=$NEWFLAGS
|
||||
;;
|
||||
esac ],
|
||||
AC_MSG_RESULT(no)
|
||||
)
|
||||
|
||||
AC_CONFIG_FILES([Makefile \
|
||||
docs/Makefile \
|
||||
docs/examples/Makefile \
|
||||
docs/libcurl/Makefile \
|
||||
include/Makefile \
|
||||
include/curl/Makefile \
|
||||
src/Makefile \
|
||||
lib/Makefile \
|
||||
tests/Makefile \
|
||||
tests/data/Makefile \
|
||||
tests/server/Makefile \
|
||||
tests/libtest/Makefile \
|
||||
packages/Makefile \
|
||||
packages/Win32/Makefile \
|
||||
packages/Win32/cygwin/Makefile \
|
||||
packages/Linux/Makefile \
|
||||
packages/Linux/RPM/Makefile \
|
||||
packages/Linux/RPM/curl.spec \
|
||||
packages/Linux/RPM/curl-ssl.spec \
|
||||
packages/Solaris/Makefile \
|
||||
packages/DOS/Makefile \
|
||||
packages/EPM/curl.list \
|
||||
packages/EPM/Makefile \
|
||||
curl-config
|
||||
])
|
||||
AC_OUTPUT
|
||||
215
configure.in
215
configure.in
@@ -1,215 +0,0 @@
|
||||
dnl $Id$
|
||||
dnl Process this file with autoconf to produce a configure script.
|
||||
AC_INIT(lib/urldata.h)
|
||||
AM_CONFIG_HEADER(config.h src/config.h)
|
||||
AM_INIT_AUTOMAKE(curl,"6.5.1")
|
||||
|
||||
dnl Checks for programs.
|
||||
AC_PROG_CC
|
||||
AC_PROG_INSTALL
|
||||
AC_PROG_MAKE_SET
|
||||
|
||||
dnl Check for AIX weirdos
|
||||
AC_AIX
|
||||
|
||||
dnl **********************************************************************
|
||||
dnl Checks for libraries.
|
||||
dnl **********************************************************************
|
||||
|
||||
dnl nsl lib?
|
||||
AC_CHECK_FUNC(gethostbyname, , AC_CHECK_LIB(nsl, gethostbyname))
|
||||
|
||||
dnl resolve lib?
|
||||
AC_CHECK_FUNC(strcasecmp, , AC_CHECK_LIB(resolve, strcasecmp))
|
||||
|
||||
dnl socket lib?
|
||||
AC_CHECK_FUNC(connect, , AC_CHECK_LIB(socket, connect))
|
||||
|
||||
dnl ucb lib?
|
||||
AC_CHECK_FUNC(gethostname, , AC_CHECK_LIB(ucb, gethostname))
|
||||
|
||||
dnl dl lib?
|
||||
AC_CHECK_FUNC(dlopen, , AC_CHECK_LIB(dl, dlopen))
|
||||
|
||||
dnl **********************************************************************
|
||||
dnl Check for the presence of SSL libraries and headers
|
||||
dnl **********************************************************************
|
||||
|
||||
dnl Default to compiler & linker defaults for SSL files & libraries.
|
||||
OPT_SSL=off
|
||||
AC_ARG_WITH(ssl,dnl
|
||||
[ --with-ssl[=DIR] where to look for SSL [compiler/linker default paths]
|
||||
DIR points to the SSL installation [/usr/local/ssl]],
|
||||
OPT_SSL=$withval
|
||||
)
|
||||
|
||||
if test X"$OPT_SSL" = Xno
|
||||
then
|
||||
AC_MSG_WARN(SSL/https support disabled)
|
||||
else
|
||||
|
||||
dnl Check for & handle argument to --with-ssl.
|
||||
|
||||
AC_MSG_CHECKING(where to look for SSL)
|
||||
if test X"$OPT_SSL" = Xoff
|
||||
then
|
||||
AC_MSG_RESULT([defaults (or given in environment)])
|
||||
else
|
||||
test X"$OPT_SSL" = Xyes && OPT_SSL=/usr/local/ssl
|
||||
LIBS="$LIBS -L$OPT_SSL/lib"
|
||||
CPPFLAGS="$CPPFLAGS -I$OPT_SSL/include/openssl -I$OPT_SSL/include"
|
||||
AC_MSG_RESULT([$OPT_SSL])
|
||||
fi
|
||||
|
||||
dnl check for crypto libs (part of SSLeay)
|
||||
AC_CHECK_LIB(crypto, CRYPTO_lock)
|
||||
|
||||
if test $ac_cv_lib_crypto_CRYPTO_lock = yes; then
|
||||
dnl This is only reasonable to do if crypto actually is there: check for
|
||||
dnl SSL libs NOTE: it is important to do this AFTER the crypto lib
|
||||
AC_CHECK_LIB(ssl, SSL_connect)
|
||||
|
||||
dnl Check for SSLeay headers
|
||||
AC_CHECK_HEADERS(openssl/x509.h openssl/rsa.h openssl/crypto.h openssl/pem.h openssl/ssl.h openssl/err.h)
|
||||
|
||||
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)
|
||||
fi
|
||||
|
||||
fi
|
||||
fi
|
||||
|
||||
dnl **********************************************************************
|
||||
dnl Check for the presence of ZLIB libraries and headers
|
||||
dnl **********************************************************************
|
||||
|
||||
dnl Default to compiler & linker defaults for files & libraries.
|
||||
dnl OPT_ZLIB=no
|
||||
dnl AC_ARG_WITH(zlib,dnl
|
||||
dnl [ --with-zlib[=DIR] where to look for ZLIB [compiler/linker default paths]
|
||||
dnl DIR points to the ZLIB installation prefix [/usr/local]],
|
||||
dnl OPT_ZLIB=$withval,
|
||||
dnl )
|
||||
|
||||
dnl Check for & handle argument to --with-zlib.
|
||||
dnl
|
||||
dnl NOTE: We *always* look for ZLIB headers & libraries, all this option
|
||||
dnl does is change where we look (by adjusting LIBS and CPPFLAGS.)
|
||||
dnl
|
||||
|
||||
dnl AC_MSG_CHECKING(where to look for ZLIB)
|
||||
dnl if test X"$OPT_ZLIB" = Xno
|
||||
dnl then
|
||||
dnl AC_MSG_RESULT([defaults (or given in environment)])
|
||||
dnl else
|
||||
dnl test X"$OPT_ZLIB" = Xyes && OPT_ZLIB=/usr/local
|
||||
dnl LIBS="$LIBS -L$OPT_ZLIB/lib"
|
||||
dnl CPPFLAGS="$CPPFLAGS -I$OPT_ZLIB/include"
|
||||
dnl AC_MSG_RESULT([$OPT_ZLIB])
|
||||
dnl fi
|
||||
|
||||
dnl z lib?
|
||||
dnl AC_CHECK_FUNC(gzread, , AC_CHECK_LIB(z, gzread))
|
||||
|
||||
dnl **********************************************************************
|
||||
dnl Back to "normal" configuring
|
||||
dnl **********************************************************************
|
||||
|
||||
dnl Checks for header files.
|
||||
AC_HEADER_STDC
|
||||
AC_CHECK_HEADERS( \
|
||||
unistd.h \
|
||||
malloc.h \
|
||||
stdlib.h \
|
||||
arpa/inet.h \
|
||||
net/if.h \
|
||||
netinet/in.h \
|
||||
netdb.h \
|
||||
sys/select.h \
|
||||
sys/socket.h \
|
||||
sys/sockio.h \
|
||||
sys/stat.h \
|
||||
sys/types.h \
|
||||
getopt.h \
|
||||
sys/param.h \
|
||||
termios.h \
|
||||
termio.h \
|
||||
sgtty.h \
|
||||
fcntl.h \
|
||||
dlfcn.h \
|
||||
alloca.h \
|
||||
winsock.h \
|
||||
time.h \
|
||||
io.h \
|
||||
)
|
||||
|
||||
dnl Check for libz header
|
||||
dnl AC_CHECK_HEADERS(zlib.h)
|
||||
|
||||
dnl Checks for typedefs, structures, and compiler characteristics.
|
||||
AC_C_CONST
|
||||
AC_TYPE_SIZE_T
|
||||
AC_HEADER_TIME
|
||||
|
||||
# mprintf() checks:
|
||||
|
||||
# check for 'long double'
|
||||
AC_CHECK_SIZEOF(long double, 8)
|
||||
# check for 'long long'
|
||||
AC_CHECK_SIZEOF(long long, 4)
|
||||
|
||||
dnl Get system canonical name
|
||||
AC_CANONICAL_HOST
|
||||
AC_DEFINE_UNQUOTED(OS, "${host}")
|
||||
|
||||
dnl Checks for library functions.
|
||||
dnl AC_PROG_GCC_TRADITIONAL
|
||||
AC_TYPE_SIGNAL
|
||||
AC_FUNC_VPRINTF
|
||||
AC_CHECK_FUNCS( socket \
|
||||
select \
|
||||
strdup \
|
||||
strstr \
|
||||
strftime \
|
||||
uname \
|
||||
strcasecmp \
|
||||
gethostname \
|
||||
gethostbyaddr \
|
||||
getservbyname \
|
||||
gettimeofday \
|
||||
inet_addr \
|
||||
inet_ntoa \
|
||||
tcsetattr \
|
||||
tcgetattr \
|
||||
perror \
|
||||
getpass \
|
||||
closesocket \
|
||||
setvbuf \
|
||||
RAND_status \
|
||||
RAND_screen
|
||||
)
|
||||
|
||||
|
||||
|
||||
AC_PATH_PROG( PERL, perl, ,
|
||||
$PATH:/usr/local/bin/perl:/usr/bin/:/usr/local/bin )
|
||||
AC_SUBST(PERL)
|
||||
|
||||
AC_PATH_PROGS( NROFF, gnroff nroff, ,
|
||||
$PATH:/usr/bin/:/usr/local/bin )
|
||||
AC_SUBST(NROFF)
|
||||
|
||||
AC_PROG_RANLIB
|
||||
AC_PROG_YACC
|
||||
|
||||
dnl AC_PATH_PROG( RANLIB, ranlib, /usr/bin/ranlib,
|
||||
dnl $PATH:/usr/bin/:/usr/local/bin )
|
||||
dnl AC_SUBST(RANLIB)
|
||||
|
||||
AC_OUTPUT( Makefile \
|
||||
src/Makefile \
|
||||
lib/Makefile )
|
||||
dnl perl/checklinks.pl \
|
||||
dnl perl/getlinks.pl \
|
||||
dnl perl/formfind.pl \
|
||||
dnl perl/recursiveftpget.pl )
|
||||
130
curl-config.in
Normal file
130
curl-config.in
Normal file
@@ -0,0 +1,130 @@
|
||||
#! /bin/sh
|
||||
#
|
||||
# The idea to this kind of setup info script was stolen from numerous
|
||||
# other packages, such as neon, libxml and gnome.
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
prefix=@prefix@
|
||||
exec_prefix=@exec_prefix@
|
||||
includedir=@includedir@
|
||||
|
||||
usage()
|
||||
{
|
||||
cat <<EOF
|
||||
Usage: curl-config [OPTION]
|
||||
|
||||
Available values for OPTION include:
|
||||
|
||||
--ca ca bundle install path
|
||||
--cc compiler
|
||||
--cflags pre-processor and compiler flags
|
||||
--feature newline separated list of enabled features
|
||||
--help display this help and exit
|
||||
--libs library linking information
|
||||
--prefix curl install prefix
|
||||
--version output version information
|
||||
--vernum output the version information as a number (hexadecimal)
|
||||
EOF
|
||||
|
||||
exit $1
|
||||
}
|
||||
|
||||
if test $# -eq 0; then
|
||||
usage 1
|
||||
fi
|
||||
|
||||
while test $# -gt 0; do
|
||||
case "$1" in
|
||||
# this deals with options in the style
|
||||
# --option=value and extracts the value part
|
||||
# [not currently used]
|
||||
-*=*) value=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
|
||||
*) value= ;;
|
||||
esac
|
||||
|
||||
case "$1" in
|
||||
--ca)
|
||||
echo @CURL_CA_BUNDLE@
|
||||
;;
|
||||
|
||||
--cc)
|
||||
echo @CC@
|
||||
;;
|
||||
|
||||
--prefix)
|
||||
echo $prefix
|
||||
;;
|
||||
|
||||
--feature)
|
||||
if test "@OPENSSL_ENABLED@" = "1"; then
|
||||
echo "SSL"
|
||||
fi
|
||||
if test "@KRB4_ENABLED@" = "1"; then
|
||||
echo "KRB4"
|
||||
fi
|
||||
if test "@IPV6_ENABLED@" = "1"; then
|
||||
echo "IPv6"
|
||||
fi
|
||||
if test "@HAVE_LIBZ@" = "1"; then
|
||||
echo "libz"
|
||||
fi
|
||||
if test "@CURL_DISABLE_HTTP@" = "1"; then
|
||||
echo "HTTP-disabled"
|
||||
fi
|
||||
if test "@CURL_DISABLE_FTP@" = "1"; then
|
||||
echo "FTP-disabled"
|
||||
fi
|
||||
if test "@CURL_DISABLE_GOPHER@" = "1"; then
|
||||
echo "GOPHER-disabled"
|
||||
fi
|
||||
if test "@CURL_DISABLE_FILE@" = "1"; then
|
||||
echo "FILE-disabled"
|
||||
fi
|
||||
if test "@CURL_DISABLE_TELNET@" = "1"; then
|
||||
echo "TELNET-disabled"
|
||||
fi
|
||||
if test "@CURL_DISABLE_LDAP@" = "1"; then
|
||||
echo "LDAP-disabled"
|
||||
fi
|
||||
if test "@CURL_DISABLE_DICT@" = "1"; then
|
||||
echo "DICT-disabled"
|
||||
fi
|
||||
;;
|
||||
|
||||
--version)
|
||||
echo libcurl @VERSION@
|
||||
exit 0
|
||||
;;
|
||||
|
||||
--vernum)
|
||||
echo @VERSIONNUM@
|
||||
exit 0
|
||||
;;
|
||||
|
||||
--help)
|
||||
usage 0
|
||||
;;
|
||||
|
||||
--cflags)
|
||||
if test "X@includedir@" = "X/usr/include"; then
|
||||
echo ""
|
||||
else
|
||||
echo "-I@includedir@"
|
||||
fi
|
||||
;;
|
||||
|
||||
--libs)
|
||||
echo -L@libdir@ -lcurl @LDFLAGS@ @LIBS@
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "unknown option: $1"
|
||||
usage
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
exit 0
|
||||
@@ -1,52 +0,0 @@
|
||||
%define name curl-ssl
|
||||
%define tarball curl
|
||||
%define version 6.0
|
||||
%define release 1
|
||||
%define prefix /usr/local
|
||||
|
||||
%define builddir $RPM_BUILD_DIR/%{tarball}-%{version}
|
||||
|
||||
Summary: get a file from a FTP, GOPHER or HTTP server.
|
||||
Name: %{name}
|
||||
Version: %{version}
|
||||
Release: %{release}
|
||||
Copyright: MPL
|
||||
Vendor: Daniel Stenberg <Daniel.Stenberg@haxx.nu>
|
||||
Packager: Troy Engel <tengel@sonic.net>
|
||||
Group: Utilities/Console
|
||||
Source: %{tarball}-%{version}.tar.gz
|
||||
URL: http://curl.haxx.nu/
|
||||
BuildRoot: /tmp/%{tarball}-%{version}-root
|
||||
|
||||
%description
|
||||
curl is a client to get documents/files from servers, using any of the
|
||||
supported protocols. The command is designed to work without user
|
||||
interaction or any kind of interactivity.
|
||||
|
||||
curl offers a busload of useful tricks like proxy support, user
|
||||
authentication, ftp upload, HTTP post, file transfer resume and more.
|
||||
|
||||
Note: this version is compiled with SSL (https:) support.
|
||||
|
||||
%prep
|
||||
rm -rf $RPM_BUILD_ROOT
|
||||
rm -rf %{builddir}
|
||||
|
||||
%setup -n %{tarball}-%{version}
|
||||
|
||||
%build
|
||||
CFLAGS=$RPM_OPT_FLAGS ./configure --prefix=$RPM_BUILD_ROOT%{prefix} --with-ssl
|
||||
make CFLAGS="-DUSE_SSLEAY -I/usr/include/openssl"
|
||||
|
||||
%install
|
||||
make install-strip
|
||||
|
||||
%clean
|
||||
rm -rf $RPM_BUILD_ROOT
|
||||
rm -rf %{builddir}
|
||||
|
||||
%files
|
||||
%defattr(-,root,root)
|
||||
%attr(0755,root,root) %{prefix}/bin/curl
|
||||
%doc curl.1 README* CHANGES CONTRIBUTE FAQ FILES INSTALL LEGAL MPL-1.0.txt RESOURCES TODO perl/
|
||||
|
||||
50
curl-style.el
Normal file
50
curl-style.el
Normal file
@@ -0,0 +1,50 @@
|
||||
;;;; Emacs Lisp help for writing curl code. ;;;;
|
||||
;;;; $Id$
|
||||
|
||||
;;; The curl hacker's C conventions.
|
||||
|
||||
;;; After loading this file and added the mode-hook you can in C
|
||||
;;; files, put something like this to use the curl style
|
||||
;;; automatically:
|
||||
;;
|
||||
;; /* -----------------------------------------------------------------
|
||||
;; * local variables:
|
||||
;; * eval: (set c-file-style "curl")
|
||||
;; * end:
|
||||
;; */
|
||||
;;
|
||||
|
||||
(defconst curl-c-style
|
||||
'((c-basic-offset . 2)
|
||||
(c-comment-only-line-offset . 0)
|
||||
(c-hanging-braces-alist . ((substatement-open before after)))
|
||||
(c-offsets-alist . ((topmost-intro . 0)
|
||||
(topmost-intro-cont . 0)
|
||||
(substatement . +)
|
||||
(substatement-open . 0)
|
||||
(statement-case-intro . +)
|
||||
(statement-case-open . 0)
|
||||
(case-label . 0)
|
||||
))
|
||||
)
|
||||
"Curl C Programming Style")
|
||||
|
||||
;; Customizations for all of c-mode, c++-mode, and objc-mode
|
||||
(defun curl-c-mode-common-hook ()
|
||||
"Curl C mode hook"
|
||||
;; add curl style and set it for the current buffer
|
||||
(c-add-style "curl" curl-c-style t)
|
||||
(setq tab-width 8
|
||||
indent-tabs-mode nil ; Use spaces. Not tabs.
|
||||
comment-column 40
|
||||
c-font-lock-extra-types (append '("bool" "CURL" "CURLcode" "ssize_t" "size_t" "socklen_t" "fd_set" "time_t"))
|
||||
)
|
||||
;; keybindings for C, C++, and Objective-C. We can put these in
|
||||
;; c-mode-base-map because of inheritance ...
|
||||
(define-key c-mode-base-map "\M-q" 'c-fill-paragraph)
|
||||
(setq c-recognize-knr-p nil)
|
||||
)
|
||||
|
||||
;; Set this is in your .emacs if you want to use the c-mode-hook as
|
||||
;; defined here right out of the box.
|
||||
; (add-hook 'c-mode-common-hook 'curl-c-mode-common-hook)
|
||||
598
curl.1
598
curl.1
@@ -1,598 +0,0 @@
|
||||
.\" You can view this file with:
|
||||
.\" nroff -man curl.1
|
||||
.\" Written by Daniel Stenberg
|
||||
.\"
|
||||
.TH curl 1 "13 March 2000" "Curl 6.5" "Curl Manual"
|
||||
.SH NAME
|
||||
curl \- get a URL with FTP, TELNET, LDAP, GOPHER, DICT, FILE, HTTP or
|
||||
HTTPS syntax.
|
||||
.SH SYNOPSIS
|
||||
.B curl [options]
|
||||
.I url
|
||||
.SH DESCRIPTION
|
||||
.B curl
|
||||
is a client to get documents/files from servers, using any of the
|
||||
supported protocols. The command is designed to work without user
|
||||
interaction or any kind of interactivity.
|
||||
|
||||
curl offers a busload of useful tricks like proxy support, user
|
||||
authentication, ftp upload, HTTP post, SSL (https:) connections, cookies, file
|
||||
transfer resume and more.
|
||||
.SH URL
|
||||
The URL syntax is protocol dependent. You'll find a detailed description in
|
||||
RFC 2396.
|
||||
|
||||
You can specify multiple URLs or parts of URLs by writing part sets within
|
||||
braces as in:
|
||||
|
||||
http://site.{one,two,three}.com
|
||||
|
||||
or you can get sequences of alphanumeric series by using [] as in:
|
||||
|
||||
ftp://ftp.numericals.com/file[1-100].txt
|
||||
ftp://ftp.numericals.com/file[001-100].txt (with leading zeros)
|
||||
ftp://ftp.letters.com/file[a-z].txt
|
||||
|
||||
It is possible to specify up to 9 sets or series for a URL, but no nesting is
|
||||
supported at the moment:
|
||||
|
||||
http://www.any.org/archive[1996-1999]/volume[1-4]part{a,b,c,index}.html
|
||||
.SH OPTIONS
|
||||
.IP "-a/--append"
|
||||
(FTP)
|
||||
When used in a ftp upload, this will tell curl to append to the target
|
||||
file instead of overwriting it. If the file doesn't exist, it will
|
||||
be created.
|
||||
.IP "-A/--user-agent <agent string>"
|
||||
(HTTP)
|
||||
Specify the User-Agent string to send to the HTTP server. Some badly done CGIs
|
||||
fail if its not set to "Mozilla/4.0". To encode blanks in the string,
|
||||
surround the string with single quote marks. This can also be set with the
|
||||
-H/--header flag of course.
|
||||
.IP "-b/--cookie <name=data>"
|
||||
(HTTP)
|
||||
Pass the data to the HTTP server as a cookie. It is supposedly the
|
||||
data previously received from the server in a "Set-Cookie:" line.
|
||||
The data should be in the format "NAME1=VALUE1; NAME2=VALUE2".
|
||||
|
||||
If no '=' letter is used in the line, it is treated as a filename to use to
|
||||
read previously stored cookie lines from, which should be used in this session
|
||||
if they match. Using this method also activates the "cookie parser" which
|
||||
will make curl record incoming cookies too, which may be handy if you're using
|
||||
this in combination with the -L/--location option. The file format of the file
|
||||
to read cookies from should be plain HTTP headers or the netscape cookie file
|
||||
format.
|
||||
|
||||
.B NOTE
|
||||
that the file specified with -b/--cookie is only used as input. No cookies
|
||||
will be stored in the file. To store cookies, save the HTTP headers to a file
|
||||
using -D/--dump-header!
|
||||
.IP "-B/--ftp-ascii"
|
||||
(FTP/LDAP)
|
||||
Use ASCII transfer when getting an FTP file or LDAP info. For FTP, this can
|
||||
also be enforced by using an URL that ends with ";type=A".
|
||||
.IP "-c/--continue"
|
||||
Continue/Resume a previous file transfer. This instructs curl to
|
||||
continue appending data on the file where it was previously left,
|
||||
possibly because of a broken connection to the server. There must be
|
||||
a named physical file to append to for this to work.
|
||||
Note: Upload resume is depening on a command named SIZE not always
|
||||
present in all ftp servers! Upload resume is for FTP only.
|
||||
HTTP resume is only possible with HTTP/1.1 or later servers.
|
||||
.IP "-C/--continue-at <offset>"
|
||||
Continue/Resume a previous file transfer at the given offset. The
|
||||
given offset is the exact number of bytes that will be skipped
|
||||
counted from the beginning of the source file before it is transfered
|
||||
to the destination.
|
||||
If used with uploads, the ftp server command SIZE will not be used by
|
||||
curl. Upload resume is for FTP only.
|
||||
HTTP resume is only possible with HTTP/1.1 or later servers.
|
||||
.IP "-d/--data <data>"
|
||||
(HTTP)
|
||||
Sends the specified data in a POST request to the HTTP server. Note
|
||||
that the data is sent exactly as specified with no extra processing.
|
||||
The data is expected to be "url-encoded". This will cause curl to
|
||||
pass the data to the server using the content-type
|
||||
application/x-www-form-urlencoded. Compare to -F.
|
||||
|
||||
If you start the data with the letter @, the rest should be a file name to
|
||||
read the data from, or - if you want curl to read the data from stdin.
|
||||
The contents of the file must already be url-encoded.
|
||||
.IP "-D/--dump-header <file>"
|
||||
(HTTP/FTP)
|
||||
Write the HTTP headers to this file. Write the FTP file info to this
|
||||
file if -I/--head is used.
|
||||
|
||||
This option is handy to use when you want to store the cookies that a HTTP
|
||||
site sends to you. The cookies could then be read in a second curl invoke by
|
||||
using the -b/--cookie option!
|
||||
.IP "-e/--referer <URL>"
|
||||
(HTTP)
|
||||
Sends the "Referer Page" information to the HTTP server. Some badly
|
||||
done CGIs fail if it's not set. This can also be set with the -H/--header
|
||||
flag of course.
|
||||
.IP "-E/--cert <certificate[:password]>"
|
||||
(HTTPS)
|
||||
Tells curl to use the specified certificate file when getting a file
|
||||
with HTTPS. The certificate must be in PEM format.
|
||||
If the optional password isn't specified, it will be queried for on
|
||||
the terminal. Note that this certificate is the private key and the private
|
||||
certificate concatenated!
|
||||
.IP "-f/--fail"
|
||||
(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 normal cases when a HTTP server fails to deliver a
|
||||
document, it returns a HTML document stating so (which often also
|
||||
describes why and more). This flag will prevent curl from
|
||||
outputting that and fail silently instead.
|
||||
.IP "-F/--form <name=content>"
|
||||
(HTTP)
|
||||
This lets curl emulate a filled in form in which a user has pressed
|
||||
the submit button. This causes curl to POST data using the
|
||||
content-type multipart/form-data according to RFC1867. This enables
|
||||
uploading of binary files etc. To force the 'content' part to be
|
||||
read from a file, prefix the file name with an @ sign. Example, to
|
||||
send your password file to the server, where 'password' is the
|
||||
name of the form-field to which /etc/passwd will be the input:
|
||||
|
||||
.B curl
|
||||
-F password=@/etc/passwd www.mypasswords.com
|
||||
|
||||
To read the file's content from stdin insted of a file, use - where the file
|
||||
name should've been.
|
||||
.IP "-h/--help"
|
||||
Usage help.
|
||||
.IP "-H/--header <header>"
|
||||
(HTTP)
|
||||
Extra header to use when getting a web page. You may specify any number of
|
||||
extra headers. Note that if you should add a custom header that has the same
|
||||
name as one of the internal ones curl would use, your externally set header
|
||||
will be used instead of the internal one. This allows you to make even
|
||||
trickier stuff than curl would normally do. You should not replace internally
|
||||
set headers without knowing perfectly well what you're doing.
|
||||
.IP "-i/--include"
|
||||
(HTTP)
|
||||
Include the HTTP-header in the output. The HTTP-header includes things
|
||||
like server-name, date of the document, HTTP-version and more...
|
||||
.IP "-I/--head"
|
||||
(HTTP/FTP)
|
||||
Fetch the HTTP-header only! HTTP-servers feature the command HEAD
|
||||
which this uses to get nothing but the header of a document. When used
|
||||
on a FTP file, curl displays the file size only.
|
||||
.IP "-K/--config <config file>"
|
||||
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 used as if they were written on the actual command
|
||||
line. If the first column of a config line is a '#' character, the
|
||||
rest of the line will be treated as a comment.
|
||||
|
||||
Specify the filename as '-' to make curl read the file from stdin.
|
||||
.IP "-l/--list-only"
|
||||
(FTP)
|
||||
When listing an FTP directory, this switch forces a name-only view.
|
||||
Especially useful if you want to machine-parse the contents of an FTP
|
||||
directory since the normal directory view doesn't use a standard look
|
||||
or format.
|
||||
.IP "-L/--location"
|
||||
(HTTP/HTTPS)
|
||||
If the server reports that the requested page has a different location
|
||||
(indicated with the header line Location:) this flag will let curl
|
||||
attempt to reattempt the get on the new place. If used together with
|
||||
-i or -I, headers from all requested pages will be shown.
|
||||
.IP "-m/--max-time <seconds>"
|
||||
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 networks or links going down.
|
||||
This doesn't work properly in win32 systems.
|
||||
.IP "-M/--manual"
|
||||
Manual. Display the huge help text.
|
||||
.IP "-n/--netrc"
|
||||
Makes curl scan the
|
||||
.I .netrc
|
||||
file in the user's home directory for login name and password. This is
|
||||
typically used for ftp on unix. If used with http, curl will enable user
|
||||
authentication. See
|
||||
.BR netrc(5)
|
||||
for details on the file format. Curl will not complain if that file
|
||||
hasn't the right permissions (it should not be world nor group
|
||||
readable). The environment variable "HOME" is used to find the home
|
||||
directory.
|
||||
|
||||
A quick and very simple example of how to setup a
|
||||
.I .netrc
|
||||
to allow curl to ftp to the machine host.domain.com with user name
|
||||
'myself' and password 'secret' should look similar to:
|
||||
|
||||
.B "machine host.domain.com user myself password secret"
|
||||
.IP "-N/--no-buffer"
|
||||
Disables the buffering of the output stream. In normal work situations, curl
|
||||
will use a standard buffered output stream that will have the effect that it
|
||||
will output the data in chunks, not necessarily exactly when the data arrives.
|
||||
Using this option will disable that buffering.
|
||||
.IP "-o/--output <file>"
|
||||
Write output to <file> instead of stdout. If you are using {} or [] to fetch
|
||||
multiple documents, you can use '#' followed by a number in the <file>
|
||||
specifier. That variable will be replaced with the current string for the URL
|
||||
being fetched. Like in:
|
||||
|
||||
curl http://{one,two}.site.com -o "file_#1.txt"
|
||||
|
||||
or use several variables like:
|
||||
|
||||
curl http://{site,host}.host[1-5].com -o "#1_#2"
|
||||
.IP "-O/--remote-name"
|
||||
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.)
|
||||
.IP "-P/--ftpport <address>"
|
||||
(FTP)
|
||||
Reverses the initiator/listener roles when connecting with ftp. This
|
||||
switch makes Curl use the PORT command instead of PASV. In
|
||||
practice, PORT tells the server to connect to the client's specified
|
||||
address and port, while PASV asks the server for an ip address and
|
||||
port to connect to. <address> should be one of:
|
||||
.RS
|
||||
.TP 12
|
||||
.B interface
|
||||
i.e "eth0" to specify which interface's IP address you want to use (Unix only)
|
||||
.TP
|
||||
.B "IP address"
|
||||
i.e "192.168.10.1" to specify exact IP number
|
||||
.TP
|
||||
.B "host name"
|
||||
i.e "my.host.domain" to specify machine
|
||||
.TP
|
||||
.B "-"
|
||||
(any single-letter string) to make it pick the machine's default
|
||||
.RE
|
||||
.IP "-q"
|
||||
If used as the first parameter on the command line, the
|
||||
.I $HOME/.curlrc
|
||||
file will not be read and used as a config file.
|
||||
.IP "-Q/--quote <comand>"
|
||||
(FTP) Send an arbitrary command to the remote FTP server, by using the QUOTE
|
||||
command of the server. Not all servers support this command, and the set of
|
||||
QUOTE commands are server specific! Quote commands are sent BEFORE the
|
||||
transfer is taking place. To make commands take place after a successful
|
||||
transfer, prefix them with a dash '-'. You may specify any amount of commands
|
||||
to be run before and after the transfer. If the server returns failure for one
|
||||
of the commands, the entire operation will be aborted.
|
||||
.IP "-r/--range <range>"
|
||||
(HTTP/FTP)
|
||||
Retrieve a byte range (i.e a partial document) from a HTTP/1.1 or FTP
|
||||
server. Ranges can be specified in a number of ways.
|
||||
.RS
|
||||
.TP 10
|
||||
.B 0-499
|
||||
specifies the first 500 bytes
|
||||
.TP
|
||||
.B 500-999
|
||||
specifies the second 500 bytes
|
||||
.TP
|
||||
.B -500
|
||||
specifies the last 500 bytes
|
||||
.TP
|
||||
.B 9500
|
||||
specifies the bytes from offset 9500 and forward
|
||||
.TP
|
||||
.B 0-0,-1
|
||||
specifies the first and last byte only(*)(H)
|
||||
.TP
|
||||
.B 500-700,600-799
|
||||
specifies 300 bytes from offset 500(H)
|
||||
.TP
|
||||
.B 100-199,500-599
|
||||
specifies two separate 100 bytes ranges(*)(H)
|
||||
.RE
|
||||
|
||||
(*) = NOTE that this will cause the server to reply with a multipart
|
||||
response!
|
||||
|
||||
You should also be aware that many HTTP/1.1 servers do not have this feature
|
||||
enabled, so that when you attempt to get a range, you'll instead get the whole
|
||||
document.
|
||||
|
||||
FTP range downloads only support the simple syntax 'start-stop' (optionally
|
||||
with one of the numbers omitted). It depends on the non-RFC command SIZE.
|
||||
.IP "-s/--silent"
|
||||
Silent mode. Don't show progress meter or error messages. Makes
|
||||
Curl mute.
|
||||
.IP "-S/--show-error"
|
||||
When used with -s it makes curl show error message if it fails.
|
||||
.IP "-t/--upload"
|
||||
Transfer the stdin data to the specified file. Curl will read
|
||||
everything from stdin until EOF and store with the supplied name. If
|
||||
this is used on a http(s) server, the PUT command will be used.
|
||||
.IP "-T/--upload-file <file>"
|
||||
Like -t, but this transfers the specified local file. If there is no
|
||||
file part in the specified URL, Curl will append the local file
|
||||
name. NOTE that you must use a trailing / on the last directory to
|
||||
really prove to Curl that there is no file name or curl will
|
||||
think that your last directory name is the remote file name to
|
||||
use. That will most likely cause the upload operation to fail. If
|
||||
this is used on a http(s) server, the PUT command will be used.
|
||||
.IP "-u/--user <user:password>"
|
||||
Specify user and password to use when fetching. See README.curl for detailed
|
||||
examples of how to use this. If no password is specified, curl will
|
||||
ask for it interactively.
|
||||
.IP "-U/--proxy-user <user:password>"
|
||||
Specify user and password to use for Proxy authentication. If no
|
||||
password is specified, curl will ask for it interactively.
|
||||
.IP "-v/--verbose"
|
||||
Makes the fetching more verbose/talkative. Mostly usable for
|
||||
debugging. Lines starting with '>' means data sent by curl, '<'
|
||||
means data received by curl that is hidden in normal cases and lines
|
||||
starting with '*' means additional info provided by curl.
|
||||
.IP "-V/--version"
|
||||
Displays the full version of curl, libcurl and other 3rd party libraries
|
||||
linked with the executable.
|
||||
.IP "-w/--write-out <format>"
|
||||
Defines what to display after a completed and successful operation. The format
|
||||
is a string that may contain plain text mixed with any number of variables. The
|
||||
string can be specified as "string", to get read from a particular file you
|
||||
specify it "@filename" and to tell curl to read the format from stdin you
|
||||
write "@-".
|
||||
|
||||
The variables present in the output format will be substituted by the value or
|
||||
text that curl thinks fit, as described below. All variables are specified
|
||||
like %{variable_name} and to output a normal % you just write them like
|
||||
%%. You can output a newline by using \\n, a carrige return with \\r and a tab
|
||||
space with \\t.
|
||||
|
||||
.B NOTE:
|
||||
The %-letter is a special letter in the win32-environment, where all
|
||||
occurrences of % must be doubled when using this option.
|
||||
|
||||
Available variables are at this point:
|
||||
.RS
|
||||
.TP 15
|
||||
.B url_effective
|
||||
The URL that was fetched last. This is mostly meaningful if you've told curl
|
||||
to follow location: headers.
|
||||
.TP
|
||||
.B http_code
|
||||
The numerical code that was found in the last retrieved HTTP(S) page.
|
||||
.TP
|
||||
.B time_total
|
||||
The total time, in seconds, that the full operation lasted. The time will be
|
||||
displayed with millisecond resolution.
|
||||
.TP
|
||||
.B time_namelookup
|
||||
The time, in seconds, it took from the start until the name resolving was
|
||||
completed.
|
||||
.TP
|
||||
.B time_connect
|
||||
The time, in seconds, it took from the start until the connect to the remote
|
||||
host (or proxy) was completed.
|
||||
.TP
|
||||
.B time_pretransfer
|
||||
The time, in seconds, it took from the start until the file transfer is just
|
||||
about to begin. This includes all pre-transfer commands and negotiations that
|
||||
are specific to the particular protocol(s) involved.
|
||||
.TP
|
||||
.B size_download
|
||||
The total amount of bytes that were downloaded.
|
||||
.TP
|
||||
.B size_upload
|
||||
The total amount of bytes that were uploaded.
|
||||
.TP
|
||||
.B speed_download
|
||||
The average download speed that curl measured for the complete download.
|
||||
.TP
|
||||
.B speed_upload
|
||||
The average upload speed that curl measured for the complete download.
|
||||
.RE
|
||||
.IP "-x/--proxy <proxyhost[:port]>"
|
||||
Use specified proxy. If the port number is not specified, it is assumed at
|
||||
port 1080.
|
||||
.IP "-X/--request <command>"
|
||||
(HTTP)
|
||||
Specifies a custom request to use when communicating with the HTTP server.
|
||||
The specified request will be used instead of the standard GET. Read the
|
||||
HTTP 1.1 specification for details and explanations.
|
||||
|
||||
(FTP)
|
||||
Specifies a custom FTP command to use instead of LIST when doing file lists
|
||||
with ftp.
|
||||
.IP "-y/--speed-time <time>"
|
||||
If a download is slower than speed-limit bytes per second during a speed-time
|
||||
period, the download gets aborted. If speed-time is used, the default
|
||||
speed-limit will be 1 unless set with -y.
|
||||
.IP "-Y/--speed-limit <speed>"
|
||||
If a download is slower than this given speed, in bytes per second, for
|
||||
speed-time seconds it gets aborted. speed-time is set with -Y and is 30 if
|
||||
not set.
|
||||
.IP "-z/--time-cond <date expression>"
|
||||
(HTTP)
|
||||
Request to get a file that has been modified later than the given time and
|
||||
date, or one that has been modified before that time. The date expression can
|
||||
be all sorts of date strings or if it doesn't match any internal ones, it
|
||||
tries to get the time from a given file name instead! See the
|
||||
.BR "GNU date(1)"
|
||||
man page for date expression details.
|
||||
|
||||
Start the date expression with a dash (-) to make it request for a document
|
||||
that is older than the given date/time, default is a document that is newer
|
||||
than the specified date/time.
|
||||
.IP "-3/--sslv3"
|
||||
(HTTPS)
|
||||
Forces curl to use SSL version 3 when negotiating with a remote SSL server.
|
||||
.IP "-2/--sslv2"
|
||||
(HTTPS)
|
||||
Forces curl to use SSL version 2 when negotiating with a remote SSL server.
|
||||
.IP "-#/--progress-bar"
|
||||
Make curl display progress information as a progress bar instead of the
|
||||
default statistics.
|
||||
.IP "--crlf"
|
||||
(FTP) Convert LF to CRLF in upload. Useful for MVS (OS/390).
|
||||
.IP "--stderr <file>"
|
||||
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
|
||||
you're using a shell with decent redirecting capabilities.
|
||||
.SH FILES
|
||||
.I ~/.curlrc
|
||||
.RS
|
||||
Default config file.
|
||||
|
||||
.SH ENVIRONMENT
|
||||
.IP "HTTP_PROXY [protocol://]<host>[:port]"
|
||||
Sets proxy server to use for HTTP.
|
||||
.IP "HTTPS_PROXY [protocol://]<host>[:port]"
|
||||
Sets proxy server to use for HTTPS.
|
||||
.IP "FTP_PROXY [protocol://]<host>[:port]"
|
||||
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]"
|
||||
Sets proxy server to use if no protocol-specific proxy is set.
|
||||
.IP "NO_PROXY <comma-separated list of hosts>"
|
||||
list of host names that shouldn't go through any proxy. If set to a
|
||||
asterisk '*' only, it matches all hosts.
|
||||
.IP "COLUMNS <integer>"
|
||||
The width of the terminal. This variable only affects curl when the
|
||||
--progress-bar option is used.
|
||||
.SH EXIT CODES
|
||||
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,
|
||||
the exit codes are:
|
||||
.IP 1
|
||||
Unsupported protocol. This build of curl has no support for this protocol.
|
||||
.IP 2
|
||||
Failed to initialize.
|
||||
.IP 3
|
||||
URL malformat. The syntax was not correct.
|
||||
.IP 4
|
||||
URL user malformatted. The user-part of the URL syntax was not correct.
|
||||
.IP 5
|
||||
Couldn't resolve proxy. The given proxy host could not be resolved.
|
||||
.IP 6
|
||||
Couldn't resolve host. The given remote host was not resolved.
|
||||
.IP 7
|
||||
Failed to connect to host.
|
||||
.IP 8
|
||||
FTP weird server reply. The server sent data curl couldn't parse.
|
||||
.IP 9
|
||||
FTP access denied. The server denied login.
|
||||
.IP 10
|
||||
FTP user/password incorrect. Either one or both were not accepted by the
|
||||
server.
|
||||
.IP 11
|
||||
FTP weird PASS reply. Curl couldn't parse the reply sent to the PASS request.
|
||||
.IP 12
|
||||
FTP weird USER reply. Curl couldn't parse the reply sent to the USER request.
|
||||
.IP 13
|
||||
FTP weird PASV reply, Curl couldn't parse the reply sent to the PASV request.
|
||||
.IP 14
|
||||
FTP weird 227 formay. Curl couldn't parse the 227-line the server sent.
|
||||
.IP 15
|
||||
FTP can't get host. Couldn't resolve the host IP we got in the 227-line.
|
||||
.IP 16
|
||||
FTP can't reconnect. Couldn't connect to the host we got in the 227-line.
|
||||
.IP 17
|
||||
FTP couldn't set binary. Couldn't change transfer method to binary.
|
||||
.IP 18
|
||||
Partial file. Only a part of the file was transfered.
|
||||
.IP 19
|
||||
FTP couldn't RETR file. The RETR command failed.
|
||||
.IP 20
|
||||
FTP write error. The transfer was reported bad by the server.
|
||||
.IP 21
|
||||
FTP quote error. A quote command returned error from the server.
|
||||
.IP 22
|
||||
HTTP not found. The requested page was not found. This return code only
|
||||
appears if --fail is used.
|
||||
.IP 23
|
||||
Write error. Curl couldn't write data to a local filesystem or similar.
|
||||
.IP 24
|
||||
Malformat user. User name badly specified.
|
||||
.IP 25
|
||||
FTP couldn't STOR file. The server denied the STOR operation.
|
||||
.IP 26
|
||||
Read error. Various reading problems.
|
||||
.IP 27
|
||||
Out of memory. A memory allocation request failed.
|
||||
.IP 28
|
||||
Operation timeout. The specified time-out period was reached according to the
|
||||
conditions.
|
||||
.IP 29
|
||||
FTP couldn't set ASCII. The server returned an unknown reply.
|
||||
.IP 30
|
||||
FTP PORT failed. The PORT command failed.
|
||||
.IP 31
|
||||
FTP couldn't use REST. The REST command failed.
|
||||
.IP 32
|
||||
FTP couldn't use SIZE. The SIZE command failed. The command is an extension
|
||||
to the original FTP spec RFC 959.
|
||||
.IP 33
|
||||
HTTP range error. The range "command" didn't work.
|
||||
.IP 34
|
||||
HTTP post error. Internal post-request generation error.
|
||||
.IP 35
|
||||
SSL connect error. The SSL handshaking failed.
|
||||
.IP 36
|
||||
FTP bad download resume. Couldn't continue an earlier aborted download.
|
||||
.IP 37
|
||||
FILE couldn't read file. Failed to open the file. Permissions?
|
||||
.IP 38
|
||||
LDAP cannot bind. LDAP bind operation failed.
|
||||
.IP 39
|
||||
LDAP search failed.
|
||||
.IP 40
|
||||
Library not found. The LDAP library was not found.
|
||||
.IP 41
|
||||
Function not found. A required LDAP function was not found.
|
||||
.IP XX
|
||||
There will appear more error codes here in future releases. The existing ones
|
||||
are meant to never change.
|
||||
.SH BUGS
|
||||
If you do find any (or have other suggestions), mail Daniel Stenberg
|
||||
<Daniel.Stenberg@haxx.nu>.
|
||||
.SH AUTHORS / CONTRIBUTORS
|
||||
- Daniel Stenberg <Daniel.Stenberg@haxx.nu>
|
||||
- Rafael Sagula <sagula@inf.ufrgs.br>
|
||||
- Sampo Kellomaki <sampo@iki.fi>
|
||||
- Linas Vepstas <linas@linas.org>
|
||||
- Bjorn Reese <breese@mail1.stofanet.dk>
|
||||
- Johan Anderson <johan@homemail.com>
|
||||
- Kjell Ericson <Kjell.Ericson@haxx,nu>
|
||||
- Troy Engel <tengel@sonic.net>
|
||||
- Ryan Nelson <ryan@inch.com>
|
||||
- Bjorn Stenberg <Bjorn.Stenberg@haxx.nu>
|
||||
- Angus Mackay <amackay@gus.ml.org>
|
||||
- Eric Young <eay@cryptsoft.com>
|
||||
- Simon Dick <simond@totally.irrelevant.org>
|
||||
- Oren Tirosh <oren@monty.hishome.net>
|
||||
- Steven G. Johnson <stevenj@alum.mit.edu>
|
||||
- Gilbert Ramirez Jr. <gram@verdict.uthscsa.edu>
|
||||
- Andr<64>s Garc<72>a <ornalux@redestb.es>
|
||||
- Douglas E. Wegscheid <wegscd@whirlpool.com>
|
||||
- Mark Butler <butlerm@xmission.com>
|
||||
- Eric Thelin <eric@generation-i.com>
|
||||
- Marc Boucher <marc@mbsi.ca>
|
||||
- Greg Onufer <Greg.Onufer@Eng.Sun.COM>
|
||||
- Doug Kaufman <dkaufman@rahul.net>
|
||||
- David Eriksson <david@2good.com>
|
||||
- Ralph Beckmann <rabe@uni-paderborn.de>
|
||||
- T. Yamada <tai@imasy.or.jp>
|
||||
- Lars J. Aas <larsa@sim.no>
|
||||
- J<>rn Hartroth <Joern.Hartroth@telekom.de>
|
||||
- Matthew Clarke <clamat@van.maves.ca>
|
||||
- Linus Nielsen <Linus.Nielsen@haxx.nu>
|
||||
- Felix von Leitner <felix@convergence.de>
|
||||
- Dan Zitter <dzitter@zitter.net>
|
||||
- Jongki Suwandi <Jongki.Suwandi@eng.sun.com>
|
||||
- Chris Maltby <chris@aurema.com>
|
||||
- Ron Zapp <rzapper@yahoo.com>
|
||||
- Paul Marquis <pmarquis@iname.com>
|
||||
- Ellis Pritchard <ellis@citria.com>
|
||||
- Damien Adant <dams@usa.net>
|
||||
- Chris <cbayliss@csc.come>
|
||||
- Marco G. Salvagno <mgs@whiz.cjb.net>
|
||||
.SH WWW
|
||||
http://curl.haxx.nu
|
||||
.SH FTP
|
||||
ftp://ftp.sunet.se/pub/www/utilities/curl/
|
||||
.SH "SEE ALSO"
|
||||
.BR ftp (1),
|
||||
.BR wget (1),
|
||||
.BR snarf (1)
|
||||
52
curl.spec
52
curl.spec
@@ -1,52 +0,0 @@
|
||||
%define name curl
|
||||
%define version 6.0
|
||||
%define release 1
|
||||
%define prefix /usr/local
|
||||
|
||||
%define builddir $RPM_BUILD_DIR/%{name}-%{version}
|
||||
|
||||
Summary: get a file from a FTP, GOPHER or HTTP server.
|
||||
Name: %{name}
|
||||
Version: %{version}
|
||||
Release: %{release}
|
||||
Copyright: MPL
|
||||
Vendor: Daniel Stenberg <Daniel.Stenberg@haxx.nu>
|
||||
Packager: Troy Engel <tengel@sonic.net>
|
||||
Group: Utilities/Console
|
||||
Source: %{name}-%{version}.tar.gz
|
||||
URL: http://curl.haxx.nu/
|
||||
BuildRoot: /tmp/%{name}-%{version}-root
|
||||
|
||||
%description
|
||||
curl is a client to get documents/files from servers, using any of the
|
||||
supported protocols. The command is designed to work without user
|
||||
interaction or any kind of interactivity.
|
||||
|
||||
curl offers a busload of useful tricks like proxy support, user
|
||||
authentication, ftp upload, HTTP post, file transfer resume and more.
|
||||
|
||||
Note: this version is compiled without SSL (https:) support.
|
||||
|
||||
%prep
|
||||
rm -rf $RPM_BUILD_ROOT
|
||||
rm -rf %{builddir}
|
||||
|
||||
%setup
|
||||
|
||||
%build
|
||||
export CFLAGS=$RPM_OPT_FLAGS
|
||||
./configure --prefix=$RPM_BUILD_ROOT%{prefix}
|
||||
make
|
||||
|
||||
%install
|
||||
make install-strip
|
||||
|
||||
%clean
|
||||
rm -rf $RPM_BUILD_ROOT
|
||||
rm -rf %{builddir}
|
||||
|
||||
%files
|
||||
%defattr(-,root,root)
|
||||
%attr(0755,root,root) %{prefix}/bin/curl
|
||||
%doc curl.1 README* CHANGES CONTRIBUTE FAQ FILES INSTALL LEGAL MPL-1.0.txt RESOURCES TODO perl/
|
||||
|
||||
5
docs/.cvsignore
Normal file
5
docs/.cvsignore
Normal file
@@ -0,0 +1,5 @@
|
||||
Makefile
|
||||
Makefile.in
|
||||
*html
|
||||
*ps
|
||||
*pdf
|
||||
96
docs/BINDINGS
Normal file
96
docs/BINDINGS
Normal file
@@ -0,0 +1,96 @@
|
||||
_ _ ____ _
|
||||
___| | | | _ \| |
|
||||
/ __| | | | |_) | |
|
||||
| (__| |_| | _ <| |___
|
||||
\___|\___/|_| \_\_____|
|
||||
|
||||
libcurl bindings
|
||||
|
||||
Creative people have written particular bindings or interfaces for various
|
||||
environments and programming languages. Using one of these allows you to take
|
||||
advantage of curl powers from within your favourite language or system.
|
||||
|
||||
This is a list of all known interfaces as of this writing.
|
||||
|
||||
The bindings listed below are not part of the curl/libcurl distribution
|
||||
archives, but must be downloaded and installed separately.
|
||||
|
||||
Basic
|
||||
|
||||
ScriptBasic bindings to libcurl. Writtten by Peter Verhas.
|
||||
http://scriptbasic.com/
|
||||
|
||||
C++
|
||||
|
||||
Maintained by Jean-Philippe Barrette-LaPierre.
|
||||
http://curl.haxx.se/libcurl/cplusplus/
|
||||
|
||||
Cocoa
|
||||
|
||||
Written by Dan Wood.
|
||||
http://curlhandle.sourceforge.net/
|
||||
|
||||
Dylan
|
||||
|
||||
Written by Chris Double.
|
||||
http://dylanlibs.sourceforge.net/
|
||||
|
||||
Java
|
||||
|
||||
Written by Daniel Stenberg.
|
||||
http://curl.haxx.se/libcurl/java/
|
||||
|
||||
Lua
|
||||
|
||||
Written by Steve Dekorte.
|
||||
http://curl.haxx.se/libcurl/lua/
|
||||
|
||||
Object-Pascal
|
||||
|
||||
Free Pascal, Delphi and Kylix binding written by Christophe Espern.
|
||||
http://www.tekool.com/opcurl
|
||||
|
||||
Pascal
|
||||
|
||||
Free Pascal, Delphi and Kylix binding written by Jeffrey Pohlmeyer.
|
||||
http://houston.quik.com/jkp/curlpas/
|
||||
|
||||
Perl
|
||||
|
||||
Maintained by Cris Bailiff.
|
||||
http://curl.haxx.se/libcurl/perl/
|
||||
|
||||
PHP
|
||||
|
||||
Written by Sterling Hughes.
|
||||
http://curl.haxx.se/libcurl/php/
|
||||
|
||||
PostgreSQL
|
||||
|
||||
Written by Gian Paolo Ciceri.
|
||||
http://gborg.postgresql.org/project/pgcurl/projdisplay.php
|
||||
|
||||
Python
|
||||
|
||||
Written by Kjetil Jacobsen.
|
||||
http://pycurl.sourceforge.net/
|
||||
|
||||
Rexx
|
||||
|
||||
Written Mark Hessling.
|
||||
http://rexxcurl.sourceforge.net/
|
||||
|
||||
Ruby
|
||||
|
||||
Written by Hirotaka Matsuyuki.
|
||||
http://www.d1.dion.ne.jp/~matuyuki/ruby.html
|
||||
|
||||
Scheme
|
||||
|
||||
Bigloo binding written by Kirill Lisovsky.
|
||||
http://curl.haxx.se/libcurl/scheme/
|
||||
|
||||
Tcl
|
||||
|
||||
Written by Andr<64>s Garc<72>a.
|
||||
http://personal1.iddeo.es/andresgarci/tclcurl/english/docs.html
|
||||
82
docs/BUGS
Normal file
82
docs/BUGS
Normal file
@@ -0,0 +1,82 @@
|
||||
$Id$
|
||||
_ _ ____ _
|
||||
___| | | | _ \| |
|
||||
/ __| | | | |_) | |
|
||||
| (__| |_| | _ <| |___
|
||||
\___|\___/|_| \_\_____|
|
||||
|
||||
BUGS
|
||||
|
||||
Curl and libcurl have grown substantially since the beginning. At the time
|
||||
of writing (end of March 2003), there are 35000 lines of source code, and by
|
||||
the time you read this it has probably grown even more.
|
||||
|
||||
Of course there are lots of bugs left. And lots of misfeatures.
|
||||
|
||||
To help us make curl the stable and solid product we want it to be, we need
|
||||
bug reports and bug fixes.
|
||||
|
||||
WHERE TO REPORT
|
||||
|
||||
If you can't fix a bug yourself and submit a fix for it, try to report an as
|
||||
detailed report as possible to a curl mailing list to allow one of us to
|
||||
have a go at a solution. You should also post your bug/problem at curl's bug
|
||||
tracking system over at
|
||||
|
||||
http://sourceforge.net/bugs/?group_id=976
|
||||
|
||||
(but please read the sections below first before doing that)
|
||||
|
||||
If you feel you need to ask around first, find a suitable mailing list and
|
||||
post there. The lists are available on http://curl.haxx.se/mail/
|
||||
|
||||
WHAT TO REPORT
|
||||
|
||||
When reporting a bug, you should include information that will help us
|
||||
understand what's wrong, what you expected to happen and how to repeat the
|
||||
bad behavior. You therefore need to tell us:
|
||||
|
||||
- your operating system's name and version number (uname -a under a unix
|
||||
is fine)
|
||||
- what version of curl you're using (curl -V is fine)
|
||||
- what URL you were working with (if possible), at least which protocol
|
||||
|
||||
and anything and everything else you think matters. Tell us what you
|
||||
expected to happen, tell use what did happen, tell us how you could make it
|
||||
work another way. Dig around, try out, test. Then include all the tiny bits
|
||||
and pieces in your report. You will benefit from this yourself, as it will
|
||||
enable us to help you quicker and more accurately.
|
||||
|
||||
Since curl deals with networks, it often helps us if you include a protocol
|
||||
debug dump with your bug report. The output you get by using the -v
|
||||
flag. Usually, you also get more info by using -i so that is likely to be
|
||||
useful when reporting bugs as well.
|
||||
|
||||
If curl crashed, causing a core dump (in unix), there is hardly any use to
|
||||
send that huge file to anyone of us. Unless we have an exact same system
|
||||
setup as you, we can't do much with it. What we instead ask of you is to get
|
||||
a stack trace and send that (much smaller) output to us instead!
|
||||
|
||||
The address and how to subscribe to the mailing list is detailed in the
|
||||
MANUAL file.
|
||||
|
||||
HOW TO GET A STACK TRACE
|
||||
|
||||
First, you must make sure that you compile all sources with -g and that you
|
||||
don't 'strip' the final executable. Try to avoid optimizing the code as
|
||||
well, remove -O, -O2 etc from the compiler options.
|
||||
|
||||
Run the program until it dumps core.
|
||||
|
||||
Run your debugger on the core file, like '<debugger> curl core'. <debugger>
|
||||
should be replaced with the name of your debugger, in most cases that will
|
||||
be 'gdb', but 'dbx' and others also occur.
|
||||
|
||||
When the debugger has finished loading the core file and presents you a
|
||||
prompt, enter 'where' (without the quotes) and press return.
|
||||
|
||||
The list that is presented is the stack trace. If everything worked, it is
|
||||
supposed to contain the chain of functions that were called when curl
|
||||
crashed. Include the stack trace with your detailed bug report. It'll help a
|
||||
lot.
|
||||
|
||||
159
docs/CONTRIBUTE
Normal file
159
docs/CONTRIBUTE
Normal file
@@ -0,0 +1,159 @@
|
||||
_ _ ____ _
|
||||
___| | | | _ \| |
|
||||
/ __| | | | |_) | |
|
||||
| (__| |_| | _ <| |___
|
||||
\___|\___/|_| \_\_____|
|
||||
|
||||
To Think About When Contributing Source Code
|
||||
|
||||
This document is intended to offer some simple guidelines that can be useful
|
||||
to keep in mind when you decide to contribute to the project. This concerns
|
||||
new features as well as corrections to existing flaws or bugs.
|
||||
|
||||
Join the Community
|
||||
|
||||
Skip over to http://curl.haxx.se/mail/ and join the appropriate mailing
|
||||
list(s). Read up on details before you post questions. Read this file before
|
||||
you start sending patches! We prefer patches and discussions being held on
|
||||
the mailing list(s), not sent to individuals.
|
||||
|
||||
The License Issue
|
||||
|
||||
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.
|
||||
|
||||
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
|
||||
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
|
||||
use "GPL compatible" licenses.
|
||||
|
||||
What To Read
|
||||
|
||||
Source code, the man pages, the INTERNALS document, the TODO, the most recent
|
||||
CHANGES. Just lurking on the libcurl mailing list is gonna give you a lot of
|
||||
insights on what's going on right now. Asking there is a good idea too.
|
||||
|
||||
Naming
|
||||
|
||||
Try using a non-confusing naming scheme for your new functions and variable
|
||||
names. It doesn't necessarily have to mean that you should use the same as in
|
||||
other places of the code, just that the names should be logical,
|
||||
understandable and be named according to what they're used for. File-local
|
||||
functions should be made static. We like lower case names.
|
||||
|
||||
See the INTERNALS document on how we name non-exported library-global
|
||||
symbols.
|
||||
|
||||
Indenting
|
||||
|
||||
Please try using the same indenting levels and bracing method as all the
|
||||
other code already does. It makes the source code a lot easier to follow if
|
||||
all of it is written using the same style. We don't ask you to like it, we
|
||||
just ask you to follow the tradition! ;-) This mainly means: 2-level indents,
|
||||
using spaces only (no tabs) and having the opening brace ({) on the same line
|
||||
as the if() or while().
|
||||
|
||||
Commenting
|
||||
|
||||
Comment your source code extensively using C comments (/* comment */), DO NOT
|
||||
use C++ comments (// this style). Commented code is quality code and enables
|
||||
future modifications much more. Uncommented code much more risk being
|
||||
completely replaced when someone wants to extend things, since other persons'
|
||||
source code can get quite hard to read.
|
||||
|
||||
General Style
|
||||
|
||||
Keep your functions small. If they're small you avoid a lot of mistakes and
|
||||
you don't accidentally mix up variables etc.
|
||||
|
||||
Non-clobbering All Over
|
||||
|
||||
When you write new functionality or fix bugs, it is important that you don't
|
||||
fiddle all over the source files and functions. Remember that it is likely
|
||||
that other people have done changes in the same source files as you have and
|
||||
possibly even in the same functions. If you bring completely new
|
||||
functionality, try writing it in a new source file. If you fix bugs, try to
|
||||
fix one bug at a time and send them as separate patches.
|
||||
|
||||
Platform Dependent Code
|
||||
|
||||
Use #ifdef HAVE_FEATURE to do conditional code. We avoid checking for
|
||||
particular operating systems or hardware in the #ifdef lines. The
|
||||
HAVE_FEATURE shall be generated by the configure script for unix-like systems
|
||||
and they are hard-coded in the config-[system].h files for the others.
|
||||
|
||||
Separate Patches
|
||||
|
||||
It is annoying when you get a huge patch from someone that is said to fix 511
|
||||
odd problems, but discussions and opinions don't agree with 510 of them - or
|
||||
509 of them were already fixed in a different way. Then the patcher needs to
|
||||
extract the single interesting patch from somewhere within the huge pile of
|
||||
source, and that gives a lot of extra work. Preferably, all fixes that
|
||||
correct different problems should be in their own patch with an attached
|
||||
description exactly what they correct so that all patches can be selectively
|
||||
applied by the maintainer or other interested parties.
|
||||
|
||||
Patch Against Recent Sources
|
||||
|
||||
Please try to get the latest available sources to make your patches
|
||||
against. It makes the life of the developers so much easier. The very best is
|
||||
if you get the most up-to-date sources from the CVS repository, but the
|
||||
latest release archive is quite OK as well!
|
||||
|
||||
Document
|
||||
|
||||
Writing docs is dead boring and one of the big problems with many open source
|
||||
projects. Someone's gotta do it. It makes it a lot easier if you submit a
|
||||
small description of your fix or your new features with every contribution so
|
||||
that it can be swiftly added to the package documentation.
|
||||
|
||||
The documentation is always made in man pages (nroff formatted) or plain
|
||||
ASCII files. All HTML files on the web site and in the release archives are
|
||||
generated from the nroff/ASCII versions.
|
||||
|
||||
Write Access to CVS Repository
|
||||
|
||||
If you are a frequent contributor, or have another good reason, you can of
|
||||
course get write access to the CVS repository and then you'll be able to
|
||||
check-in all your changes straight into the CVS tree instead of sending all
|
||||
changes by mail as patches. Just ask if this is what you'd want. You will be
|
||||
required to have posted a few quality patches first, before you can be
|
||||
granted write access.
|
||||
|
||||
Test Cases
|
||||
|
||||
Since the introduction of the test suite, we can quickly verify that the main
|
||||
features are working as they're supposed to. To maintain this situation and
|
||||
improve it, all new features and functions that are added need to be tested
|
||||
in the test suite. Every feature that is added should get at least one valid
|
||||
test case that verifies that it works as documented. If every submitter also
|
||||
post a few test cases, it won't end up as a heavy burden on a single person!
|
||||
|
||||
How To Make a Patch
|
||||
|
||||
Keep a copy of the unmodified curl sources. Make your changes in a separate
|
||||
source tree. When you think you have something that you want to offer the
|
||||
curl community, use GNU diff to generate patches.
|
||||
|
||||
If you have modified a single file, try something like:
|
||||
|
||||
diff -u undmodified-file.c my-changed-one.c > my-fixes.diff
|
||||
|
||||
If you have modified several files, possibly in different directories, you
|
||||
can use diff recursively:
|
||||
|
||||
diff -ur curl-original-dir curl-modfied-sources-dir > my-fixes.diff
|
||||
|
||||
The GNU diff and GNU patch tools exist for virtually all platforms, including
|
||||
all kinds of unixes and Windows:
|
||||
|
||||
For unix-like operating systems:
|
||||
|
||||
http://www.fsf.org/software/patch/patch.html
|
||||
http://www.gnu.org/directory/diffutils.html
|
||||
|
||||
For Windows:
|
||||
|
||||
http://gnuwin32.sourceforge.net/packages/patch.htm
|
||||
http://gnuwin32.sourceforge.net/packages/diffutils.htm
|
||||
782
docs/FAQ
Normal file
782
docs/FAQ
Normal file
@@ -0,0 +1,782 @@
|
||||
Updated: June 17, 2003 (http://curl.haxx.se/docs/faq.html)
|
||||
_ _ ____ _
|
||||
___| | | | _ \| |
|
||||
/ __| | | | |_) | |
|
||||
| (__| |_| | _ <| |___
|
||||
\___|\___/|_| \_\_____|
|
||||
|
||||
FAQ
|
||||
|
||||
1. Philosophy
|
||||
1.1 What is cURL?
|
||||
1.2 What is libcurl?
|
||||
1.3 What is cURL not?
|
||||
1.4 When will you make curl do XXXX ?
|
||||
1.5 Who makes cURL?
|
||||
1.6 What do you get for making cURL?
|
||||
1.7 What about CURL from curl.com?
|
||||
1.8 I have a problem who do I mail?
|
||||
|
||||
2. Install Related Problems
|
||||
2.1 configure doesn't find OpenSSL even when it is installed
|
||||
2.1.1. native linker doesn't find openssl
|
||||
2.1.2. only the libssl lib is missing
|
||||
2.2 Does curl work/build with other SSL libraries?
|
||||
2.3 Where can I find a copy of LIBEAY32.DLL?
|
||||
2.4 Does cURL support Socks (RFC 1928) ?
|
||||
|
||||
3. Usage Problems
|
||||
3.1 curl: (1) SSL is disabled, https: not supported
|
||||
3.2 How do I tell curl to resume a transfer?
|
||||
3.3 Why doesn't my posting using -F work?
|
||||
3.4 How do I tell curl to run custom FTP commands?
|
||||
3.5 How can I disable the Pragma: nocache header?
|
||||
3.6 Does curl support ASP, XML, XHTML or HTML version Y?
|
||||
3.7 Can I use curl to delete/rename a file through FTP?
|
||||
3.8 How do I tell curl to follow HTTP redirects?
|
||||
3.9 How do I use curl in my favorite programming language?
|
||||
3.10 What about SOAP, WebDAV, XML-RPC or similar protocols over HTTP?
|
||||
3.11 How do I POST with a different Content-Type?
|
||||
3.12 Why do FTP specific features over HTTP proxy fail?
|
||||
3.13 Why does my single/double quotes fail?
|
||||
3.14 Does curl support javascript or pac (automated proxy config)?
|
||||
|
||||
4. Running Problems
|
||||
4.1 Problems connecting to SSL servers.
|
||||
4.2 Why do I get problems when I use & or % in the URL?
|
||||
4.3 How can I use {, }, [ or ] to specify multiple URLs?
|
||||
4.4 Why do I get downloaded data even though the web page doesn't exist?
|
||||
4.5 Why do I get return code XXX from a HTTP server?
|
||||
4.5.1 "400 Bad Request"
|
||||
4.5.2 "401 Unauthorized"
|
||||
4.5.3 "403 Forbidden"
|
||||
4.5.4 "404 Not Found"
|
||||
4.5.5 "405 Method Not Allowed"
|
||||
4.5.6 "301 Moved Permanently"
|
||||
4.6 Can you tell me what error code 142 means?
|
||||
4.7 How do I keep user names and passwords secret in Curl command lines?
|
||||
4.8 I found a bug!
|
||||
4.9 Curl can't authenticate to the server that requires NTLM?
|
||||
4.10 My HTTP request using HEAD, PUT or DELETE doesn't work!
|
||||
4.11 Why does my HTTP range requests return the full document?
|
||||
4.12 Why do I get "certificate verify failed" ?
|
||||
|
||||
5. libcurl Issues
|
||||
5.1 Is libcurl thread-safe?
|
||||
5.2 How can I receive all data into a large memory chunk?
|
||||
5.3 How do I fetch multiple files with libcurl?
|
||||
5.4 Does libcurl do Winsock initing on win32 systems?
|
||||
5.5 Does CURLOPT_FILE and CURLOPT_INFILE work on win32 ?
|
||||
5.6 What about Keep-Alive or persistent connections?
|
||||
5.7 Link errors when building libcurl on Windows!
|
||||
|
||||
6. License Issues
|
||||
6.1 I have a GPL program, can I use the libcurl library?
|
||||
6.2 I have a closed-source program, can I use the libcurl library?
|
||||
6.3 I have a BSD licensed program, can I use the libcurl library?
|
||||
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.6 Can you please change the curl/libcurl license to XXXX?
|
||||
|
||||
==============================================================================
|
||||
|
||||
1. Philosophy
|
||||
|
||||
1.1 What is cURL?
|
||||
|
||||
cURL (or simply just 'curl') is a command line tool for getting or sending
|
||||
files using URL syntax. The name is a play on 'Client for URLs', originally
|
||||
with URL spelled in uppercase to make it obvious it deals with URLs. The
|
||||
fact it can also be pronounced 'see URL' also helped, it works as an
|
||||
abbrivation for "Client URL Request Library" or why not the recursive
|
||||
version: "Curl is a URL Request Library".
|
||||
|
||||
Curl supports a range of common Internet protocols, currently including
|
||||
HTTP, HTTPS, FTP, FTPS, GOPHER, LDAP, DICT, TELNET and FILE.
|
||||
|
||||
We spell it cURL or just curl. We pronounce it with an initial k sound:
|
||||
[kurl].
|
||||
|
||||
NOTE: there are numerous sub-projects and related projects that also use the
|
||||
word curl in the project names in various combinations, but you should take
|
||||
notice that this FAQ is directed at the command-line tool named curl (and
|
||||
libcurl the library), and may therefore not be valid for other curl
|
||||
projects.
|
||||
|
||||
1.2 What is libcurl?
|
||||
|
||||
libcurl is a reliable and portable library which provides you with an easy
|
||||
interface to a range of common Internet protocols.
|
||||
|
||||
You can use libcurl for free in your application even if it is commercial
|
||||
or closed-source.
|
||||
|
||||
1.3 What is cURL not?
|
||||
|
||||
Curl is *not* a wget clone even though that is a very common misconception.
|
||||
Never, during curl's development, have we intended curl to replace wget or
|
||||
compete on its market. Curl is targeted at single-shot file transfers.
|
||||
|
||||
Curl is not a web site mirroring program. If you wanna use curl to mirror
|
||||
something: fine, go ahead and write a script that wraps around curl to make
|
||||
it reality (like curlmirror.pl does).
|
||||
|
||||
Curl is not an FTP site mirroring program. Sure, get and send FTP with curl
|
||||
but if you want systematic and sequential behavior you should write a
|
||||
script (or write a new program that interfaces libcurl) and do it.
|
||||
|
||||
Curl is not a PHP tool, even though it works perfectly well when used from
|
||||
or with PHP.
|
||||
|
||||
Curl is not a single-OS program. Curl exists, compiles, builds and runs
|
||||
under a wide range of operating systems, including all modern Unixes (and a
|
||||
bunch of older ones too), Windows, Amiga, BeOS, OS/2, OS X, QNX etc.
|
||||
|
||||
1.4 When will you make curl do XXXX ?
|
||||
|
||||
We love suggestions of what to change in order to make curl and libcurl
|
||||
better. We do however believe in a few rules when it comes to the future of
|
||||
curl:
|
||||
|
||||
* Curl -- the command line tool -- is to remain a non-graphical command line
|
||||
tool. If you want GUIs or fancy scripting capabilities, you should look
|
||||
for another tool that uses libcurl.
|
||||
|
||||
* We do not add things to curl that other small and available tools already
|
||||
do very fine at the side. Curl's output is fine to pipe into another
|
||||
program or redirect to another file for the next program to interpret.
|
||||
|
||||
* We focus on protocol related issues and improvements. If you wanna do more
|
||||
magic with the supported protocols than curl currently does, chances are
|
||||
big we will agree. If you wanna add more protocols, we may very well
|
||||
agree.
|
||||
|
||||
* If you want someone else to make all the work while you wait for us to
|
||||
implement it for you, that is not a very friendly attitude. We spend a
|
||||
considerable time already on maintaining and developing curl. In order to
|
||||
get more out of us, you should consider trading in some of your time and
|
||||
efforts in return.
|
||||
|
||||
* If you write the code, chances are bigger that it will get into curl
|
||||
faster.
|
||||
|
||||
1.5 Who makes cURL?
|
||||
|
||||
cURL and libcurl are not made by any single individual. Sure, Daniel
|
||||
Stenberg writes the major parts, but other persons' submissions are
|
||||
important and crucial. Anyone can contribute and post their changes and
|
||||
improvements and have them inserted in the main sources (of course on the
|
||||
condition that developers agree on that the fixes are good).
|
||||
|
||||
The list of contributors in the docs/THANKS file is only a small part of all
|
||||
the people that every day provide us with bug reports, suggestions, ideas
|
||||
and source code.
|
||||
|
||||
curl is developed by a community, with Daniel at the wheel.
|
||||
|
||||
1.6 What do you get for making cURL?
|
||||
|
||||
Project cURL is entirely free and open. No person gets paid for developing
|
||||
curl. We do this voluntarily on our spare time.
|
||||
|
||||
We get some help from companies. Contactor Data hosts the curl web site,
|
||||
Haxx owns the curl web site's domain and sourceforge.net hosts several
|
||||
project services we take advantage from, like the bug tracker, mailing lists
|
||||
and more.
|
||||
|
||||
If you want to support our project with a donation or similar, one way of
|
||||
doing that would be to buy "gift certificates" at useful online shopping
|
||||
sites, such as amazon.com or thinkgeek.com. Another way would be to sponsor
|
||||
us through a banner-program or even better: by helping us coding,
|
||||
documenting, testing etc. You're welcome to send us a buck using paypal, as
|
||||
described here: http://curl.haxx.se/donation.html
|
||||
|
||||
1.7 What about CURL from curl.com?
|
||||
|
||||
During the summer 2001, curl.com was busy advertising their client-side
|
||||
programming language for the web, named CURL.
|
||||
|
||||
We are in no way associated with curl.com or their CURL programming
|
||||
language.
|
||||
|
||||
Our project name curl has been in effective use since 1998. We were not the
|
||||
first computer related project to use the name "curl" and do not claim any
|
||||
first-hand rights to the name.
|
||||
|
||||
We recognize that we will be living in parallel with curl.com and wish them
|
||||
every success.
|
||||
|
||||
1.8 I have a problem who do I mail?
|
||||
|
||||
Please do not mail any single individual unless you really need to. Keep
|
||||
curl-related questions on a suitable mailing list. All available mailing
|
||||
lists are listed in the MANUAL document and online at
|
||||
http://curl.haxx.se/mail/
|
||||
|
||||
Keeping curl-related questions and discussions on mailing lists allows
|
||||
others to join in and help, to share their ideas, contribute their
|
||||
suggestions and spread their wisdom. Keeping discussions on public mailing
|
||||
lists also allows for others to learn from this (both current and future
|
||||
users thanks to the web based archives of the mailing lists), thus saving us
|
||||
from having to repeat ourselves even more. Thanks for respecting this.
|
||||
|
||||
|
||||
2. Install Related Problems
|
||||
|
||||
2.1. configure doesn't find OpenSSL even when it is installed
|
||||
|
||||
This may be because of several reasons.
|
||||
|
||||
2.1.1. native linker doesn't find openssl
|
||||
|
||||
Affected platforms:
|
||||
Solaris (native cc compiler)
|
||||
HPUX (native cc compiler)
|
||||
SGI IRIX (native cc compiler)
|
||||
SCO UNIX (native cc compiler)
|
||||
|
||||
When configuring curl, I specify --with-ssl. OpenSSL is installed in
|
||||
/usr/local/ssl Configure reports SSL in /usr/local/ssl, but fails to find
|
||||
CRYPTO_lock in -lcrypto
|
||||
|
||||
Cause: The cc for this test places the -L/usr/local/ssl/lib AFTER
|
||||
-lcrypto, so ld can't find the library. This is due to a bug in the GNU
|
||||
autoconf tool.
|
||||
|
||||
Workaround: Specifying "LDFLAGS=-L/usr/local/ssl/lib" in front of
|
||||
./configure places the -L/usr/local/ssl/lib early enough in the command
|
||||
line to make things work
|
||||
|
||||
Solution submitted by: Bob Allison <allisonb@users.sourceforge.net>
|
||||
|
||||
2.1.2. only the libssl lib is missing
|
||||
|
||||
If all include files and the libcrypto lib is present, with only the
|
||||
libssl being missing according to configure, this is mostly likely because
|
||||
a few functions are left out from the libssl.
|
||||
|
||||
If the function names missing include RSA or RSAREF you can be certain
|
||||
that this is because libssl requires the RSA and RSAREF libs to build.
|
||||
|
||||
See the INSTALL file section that explains how to add those libs to
|
||||
configure. Make sure that you remove the config.cache file before you
|
||||
rerun configure with the new flags.
|
||||
|
||||
2.2. Does curl work/build with other SSL libraries?
|
||||
|
||||
Curl has been written to use OpenSSL, although there should not be much
|
||||
problems using a different library. If anyone does "port" curl to use a
|
||||
different SSL library, we are of course very interested in getting the
|
||||
patch!
|
||||
|
||||
2.3. Where can I find a copy of LIBEAY32.DLL?
|
||||
|
||||
That is an OpenSSL binary built for Windows.
|
||||
|
||||
Curl uses OpenSSL to do the SSL stuff. The LIBEAY32.DLL is what curl needs
|
||||
on a windows machine to do https://. Check out the curl web site to find
|
||||
accurate and up-to-date pointers to recent OpenSSL DLLs and other binary
|
||||
packages.
|
||||
|
||||
2.4. Does cURL support Socks (RFC 1928) ?
|
||||
|
||||
There is limited support for SOCKS5 for curl built with IPv6 support
|
||||
disabled.
|
||||
|
||||
|
||||
3. Usage problems
|
||||
|
||||
3.1. curl: (1) SSL is disabled, https: not supported
|
||||
|
||||
If you get this output when trying to get anything from a https:// server,
|
||||
it means that the configure script couldn't find all libs and include files
|
||||
it requires for SSL to work. If the configure script fails to find them,
|
||||
curl is simply built without SSL support.
|
||||
|
||||
To get the https:// support into a curl that was previously built but that
|
||||
reports that https:// is not supported, you should dig through the document
|
||||
and logs and check out why the configure script doesn't find the SSL libs
|
||||
and/or include files.
|
||||
|
||||
Also, check out the other paragraph in this FAQ labeled "configure doesn't
|
||||
find OpenSSL even when it is installed".
|
||||
|
||||
3.2. How do I tell curl to resume a transfer?
|
||||
|
||||
Curl supports resumed transfers both ways on both FTP and HTTP.
|
||||
|
||||
Try the -C option.
|
||||
|
||||
3.3. Why doesn't my posting using -F work?
|
||||
|
||||
You can't simply use -F or -d at your choice. The web server that will
|
||||
receive your post assumes one of the formats. If the form you're trying to
|
||||
"fake" sets the type to 'multipart/form-data', then and only then you must
|
||||
use the -F type. In all the most common cases, you should use -d which then
|
||||
causes a posting with the type 'application/x-www-form-urlencoded'.
|
||||
|
||||
This is described in some detail in the MANUAL and TheArtOfHttpScripting
|
||||
documents, and if you don't understand it the first time, read it again
|
||||
before you post questions about this to the mailing list. Also, try reading
|
||||
through the mailing list archives for old postings and questions regarding
|
||||
this.
|
||||
|
||||
3.4. How do I tell curl to run custom FTP commands?
|
||||
|
||||
You can tell curl to perform optional commands both before and/or after a
|
||||
file transfer. Study the -Q/--quote option.
|
||||
|
||||
Since curl is used for file transfers, you don't use curl to just perform
|
||||
FTP commands without transferring anything. Therefore you must always specify
|
||||
a URL to transfer to/from even when doing custom FTP commands.
|
||||
|
||||
3.5. How can I disable the Pragma: nocache header?
|
||||
|
||||
You can change all internally generated headers by adding a replacement with
|
||||
the -H/--header option. By adding a header with empty contents you safely
|
||||
disable that one. Use -H "Pragma:" to disable that specific header.
|
||||
|
||||
3.6. Does curl support ASP, XML, XHTML or HTML version Y?
|
||||
|
||||
To curl, all contents are alike. It doesn't matter how the page was
|
||||
generated. It may be ASP, PHP, Perl, shell-script, SSI or plain
|
||||
HTML-files. There's no difference to curl and it doesn't even know what kind
|
||||
of language that generated the page.
|
||||
|
||||
See also item 3.14 regarding javascript.
|
||||
|
||||
3.7. Can I use curl to delete/rename a file through FTP?
|
||||
|
||||
Yes. You specify custom FTP commands with -Q/--quote.
|
||||
|
||||
One example would be to delete a file after you have downloaded it:
|
||||
|
||||
curl -O ftp://download.com/coolfile -Q '-DELE coolfile'
|
||||
|
||||
3.8 How do I tell curl to follow HTTP redirects?
|
||||
|
||||
Curl does not follow so-called redirects by default. The Location: header
|
||||
that informs the client about this is only interpreted if you're using the
|
||||
-L/--location option. As in:
|
||||
|
||||
curl -L http://redirector.com
|
||||
|
||||
3.9 How do I use curl in my favorite programming language?
|
||||
|
||||
There exist many language interfaces/bindings for curl that integrates it
|
||||
better with various languages. If you are fluid in a script language, you
|
||||
may very well opt to use such an interface instead of using the command line
|
||||
tool.
|
||||
|
||||
Find out more about which languages that support curl directly, and how to
|
||||
install and use them, in the libcurl section of the curl web site:
|
||||
|
||||
http://curl.haxx.se/libcurl/
|
||||
|
||||
In February 2003, there are interfaces available for the following
|
||||
languages: Basic, C, C++, Cocoa, Dylan, Euphoria, Java, Lua, Object-Pascal,
|
||||
Pascal, Perl, PHP, PostgreSQL, Python, Rexx, Ruby, Scheme and Tcl. By the
|
||||
time you read this, additional ones may have appeared!
|
||||
|
||||
3.10 What about SOAP, WebDAV, XML-RPC or similar protocols over HTTP?
|
||||
|
||||
Curl adheres to the HTTP spec, which basically means you can play with *any*
|
||||
protocol that is built on top of HTTP. Protocols such as SOAP, WEBDAV and
|
||||
XML-RPC are all such ones. You can use -X to set custom requests and -H to
|
||||
set custom headers (or replace internally generated ones).
|
||||
|
||||
Using libcurl is of course just as fine and you'd just use the proper
|
||||
library options to do the same.
|
||||
|
||||
3.11 How do I POST with a different Content-Type?
|
||||
|
||||
You can always replace the internally generated headers with -H/--header.
|
||||
To make a simple HTTP POST with text/xml as content-type, do something like:
|
||||
|
||||
curl -d "datatopost" -H "Content-Type: text/xml" [URL]
|
||||
|
||||
3.12 Why do FTP specific features over HTTP proxy fail?
|
||||
|
||||
Because when you use a HTTP proxy, the protocol spoken on the network will
|
||||
be HTTP, even if you specify a FTP URL. This effectively means that you
|
||||
normally can't use FTP specific features such as FTP upload and FTP quote
|
||||
etc.
|
||||
|
||||
There is one exception to this rule, and that is if you can "tunnel through"
|
||||
the given HTTP proxy. Proxy tunneling is enabled with a special option (-p)
|
||||
and is generally not available as proxy admins usually disable tunneling to
|
||||
other ports than 443 (which is used for HTTPS access through proxies).
|
||||
|
||||
3.13 Why does my single/double quotes fail?
|
||||
|
||||
To specify a command line option that includes spaces, you might need to
|
||||
put the entire option within quotes. Like in:
|
||||
|
||||
curl -d " with spaces " url.com
|
||||
|
||||
or perhaps
|
||||
|
||||
curl -d ' with spaces ' url.com
|
||||
|
||||
Exactly what kind of quotes and how to do this is entirely up to the shell
|
||||
or command line interpreter that you are using. For most unix shells, you
|
||||
can more or less pick either single (') or double (") quotes. For
|
||||
Windows/DOS prompts I believe you're forced to use double (") quotes.
|
||||
|
||||
Please study the documentation for your particular environment. Examples in
|
||||
the curl docs will use a mix of both these ones as shown above. You must
|
||||
adjust them to work in your environment.
|
||||
|
||||
Remember that curl works and runs on more operating systems than most single
|
||||
individuals have ever tried.
|
||||
|
||||
3.14 Does curl support javascript or pac (automated proxy config)?
|
||||
|
||||
Many web pages do magic stuff using embedded javascript. Curl and libcurl
|
||||
have no built-in support for that, so it will be treated just like any other
|
||||
contents.
|
||||
|
||||
.pac files are a netscape invention and are sometimes used by organizations
|
||||
to allow them to differentiate which proxies to use. The .pac contents is
|
||||
just a javascript program that gets invoked by the browser and that returns
|
||||
the name of the proxy to connect to. Since curl doesn't support javascript,
|
||||
it can't support .pac proxy configuration either.
|
||||
|
||||
Some work-arounds usually suggested to overcome this javascript dependency:
|
||||
|
||||
- Depending on the javascript complexity, write up a script that
|
||||
translates it to another language and execute that.
|
||||
|
||||
- Read the javascript code and rewrite the same logic in another language.
|
||||
|
||||
- Implement a javascript interpreted, people have successfully used the
|
||||
Mozilla javascript engine in the past.
|
||||
|
||||
- Ask your admins to stop this, for a static proxy setup or similar.
|
||||
|
||||
|
||||
4. Running Problems
|
||||
|
||||
4.1. Problems connecting to SSL servers.
|
||||
|
||||
It took a very long time before we could sort out why curl had problems to
|
||||
connect to certain SSL servers when using SSLeay or OpenSSL v0.9+. The
|
||||
error sometimes showed up similar to:
|
||||
|
||||
16570:error:1407D071:SSL routines:SSL2_READ:bad mac decode:s2_pkt.c:233:
|
||||
|
||||
It turned out to be because many older SSL servers don't deal with SSLv3
|
||||
requests properly. To correct this problem, tell curl to select SSLv2 from
|
||||
the command line (-2/--sslv2).
|
||||
|
||||
There has also been examples where the remote server didn't like the SSLv2
|
||||
request and instead you had to force curl to use SSLv3 with -3/--sslv3.
|
||||
|
||||
4.2. Why do I get problems when I use & or % in the URL?
|
||||
|
||||
In general unix shells, the & letter is treated special and when used, it
|
||||
runs the specified command in the background. To safely send the & as a part
|
||||
of a URL, you should quote the entire URL by using single (') or double (")
|
||||
quotes around it.
|
||||
|
||||
An example that would invoke a remote CGI that uses &-letters could be:
|
||||
|
||||
curl 'http://www.altavista.com/cgi-bin/query?text=yes&q=curl'
|
||||
|
||||
In Windows, the standard DOS shell treats the %-letter specially and you
|
||||
need to use TWO %-letters for each single one you want to use in the URL.
|
||||
|
||||
Also note that if you want the literal %-letter to be part of the data you
|
||||
pass in a POST using -d/--data you must encode it as '%25' (which then also
|
||||
needs the %-letter doubled on Windows machines).
|
||||
|
||||
4.3. How can I use {, }, [ or ] to specify multiple URLs?
|
||||
|
||||
Because those letters have a special meaning to the shell, and to be used in
|
||||
a URL specified to curl you must quote them.
|
||||
|
||||
An example that downloads two URLs (sequentially) would do:
|
||||
|
||||
curl '{curl,www}.haxx.se'
|
||||
|
||||
To be able to use those letters as actual parts of the URL (without using
|
||||
them for the curl URL "globbing" system), use the -g/--globoff option:
|
||||
|
||||
curl -g 'www.site.com/weirdname[].html'
|
||||
|
||||
4.4. Why do I get downloaded data even though the web page doesn't exist?
|
||||
|
||||
Curl asks remote servers for the page you specify. If the page doesn't exist
|
||||
at the server, the HTTP protocol defines how the server should respond and
|
||||
that means that headers and a "page" will be returned. That's simply how
|
||||
HTTP works.
|
||||
|
||||
By using the --fail option you can tell curl explicitly to not get any data
|
||||
if the HTTP return code doesn't say success.
|
||||
|
||||
4.5 Why do I get return code XXX from a HTTP server?
|
||||
|
||||
RFC2616 clearly explains the return codes. This is a short transcript. Go
|
||||
read the RFC for exact details:
|
||||
|
||||
4.5.1 "400 Bad Request"
|
||||
|
||||
The request could not be understood by the server due to malformed
|
||||
syntax. The client SHOULD NOT repeat the request without modifications.
|
||||
|
||||
4.5.2 "401 Unauthorized"
|
||||
|
||||
The request requires user authentication.
|
||||
|
||||
4.5.3 "403 Forbidden"
|
||||
|
||||
The server understood the request, but is refusing to fulfill it.
|
||||
Authorization will not help and the request SHOULD NOT be repeated.
|
||||
|
||||
4.5.4 "404 Not Found"
|
||||
|
||||
The server has not found anything matching the Request-URI. No indication
|
||||
is given of whether the condition is temporary or permanent.
|
||||
|
||||
4.5.5 "405 Method Not Allowed"
|
||||
|
||||
The method specified in the Request-Line is not allowed for the resource
|
||||
identified by the Request-URI. The response MUST include an Allow header
|
||||
containing a list of valid methods for the requested resource.
|
||||
|
||||
4.5.6 "301 Moved Permanently"
|
||||
|
||||
If you get this return code and an HTML output similar to this:
|
||||
|
||||
<H1>Moved Permanently</H1> The document has moved <A
|
||||
HREF="http://same_url_now_with_a_trailing_slash/">here</A>.
|
||||
|
||||
it might be because you request a directory URL but without the trailing
|
||||
slash. Try the same operation again _with_ the trailing URL, or use the
|
||||
-L/--location option to follow the redirection.
|
||||
|
||||
4.6. Can you tell me what error code 142 means?
|
||||
|
||||
All error codes that are larger than the highest documented error code means
|
||||
that curl has exited due to a crash. This is a serious error, and we
|
||||
appreciate a detailed bug report from you that describes how we could go
|
||||
ahead and repeat this!
|
||||
|
||||
4.7. How do I keep user names and passwords secret in Curl command lines?
|
||||
|
||||
This problem has two sides:
|
||||
|
||||
The first part is to avoid having clear-text passwords in the command line
|
||||
so that they don't appear in 'ps' outputs and similar. That is easily
|
||||
avoided by using the "-K" option to tell curl to read parameters from a
|
||||
file or stdin to which you can pass the secret info.
|
||||
|
||||
To keep the passwords in your account secret from the rest of the world is
|
||||
not a task that curl addresses. You could of course encrypt them somehow to
|
||||
at least hide them from being read by human eyes, but that is not what
|
||||
anyone would call security.
|
||||
|
||||
Also note that regular HTTP and FTP passwords are sent in clear across the
|
||||
network. All it takes for anyone to fetch them is to listen on the network.
|
||||
Eavesdropping is very easy.
|
||||
|
||||
4.8 I found a bug!
|
||||
|
||||
It is not a bug if the behavior is documented. Read the docs first.
|
||||
|
||||
If it is a problem with a binary you've downloaded or a package for your
|
||||
particular platform, try contacting the person who built the package/archive
|
||||
you have.
|
||||
|
||||
If there is a bug, read the BUGS document first. Then report it as described
|
||||
in there.
|
||||
|
||||
4.9. Curl can't authenticate to the server that requires NTLM?
|
||||
|
||||
This is supported in curl 7.10.6 or later. No earlier curl version knows
|
||||
of this magic.
|
||||
|
||||
NTLM is a Microsoft proprietary protocol. Proprietary formats are evil. You
|
||||
should not use such ones.
|
||||
|
||||
4.10 My HTTP request using HEAD, PUT or DELETE doesn't work!
|
||||
|
||||
Many web servers allow or demand that the administrator configures the
|
||||
server properly for these requests to work on the web server.
|
||||
|
||||
Some servers seem to support HEAD only on certain kinds of URLs.
|
||||
|
||||
To fully grasp this, try the documentation for the particular server
|
||||
software you're trying to interact with. This is not anything curl can do
|
||||
anything about.
|
||||
|
||||
4.11 Why does my HTTP range requests return the full document?
|
||||
|
||||
Because the range may not be supported by the server, or the server may
|
||||
choose to ignore it and return the full document anyway.
|
||||
|
||||
4.12 Why do I get "certificate verify failed" ?
|
||||
|
||||
You invoke curl 7.10 or later to communicate on a https:// URL and get an
|
||||
error back looking something similar to this:
|
||||
|
||||
curl: (35) SSL: error:14090086:SSL routines:
|
||||
SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
|
||||
|
||||
Then it means that curl couldn't verify that the server's certificate was
|
||||
good. Curl verifies the certificate using the CA cert bundle that comes with
|
||||
the curl installation.
|
||||
|
||||
To disable the verification (which makes it act like curl did before 7.10),
|
||||
use -k. This does however enable man-in-the-middle attacks.
|
||||
|
||||
If you get this failure but are having a CA cert bundle installed and used,
|
||||
the server's certificate is not signed by one of the CA's in the bundle. It
|
||||
might for example be self-signed. You then correct this problem by obtaining
|
||||
a valid CA cert for the server. Or again, decrease the security by disabling
|
||||
this check.
|
||||
|
||||
Details are also in the SSLCERTS file in the release archives, found online
|
||||
here: http://curl.haxx.se/docs/sslcerts.html
|
||||
|
||||
5. libcurl Issues
|
||||
|
||||
5.1. Is libcurl thread-safe?
|
||||
|
||||
Yes.
|
||||
|
||||
We have written the libcurl code specificly adjusted for multi-threaded
|
||||
programs. libcurl will use thread-safe functions instead of non-safe ones if
|
||||
your system has such.
|
||||
|
||||
We would appreciate some kind of report or README file from those who have
|
||||
used libcurl in a threaded environment.
|
||||
|
||||
5.2 How can I receive all data into a large memory chunk?
|
||||
|
||||
[ See also the examples/getinmemory.c source ]
|
||||
|
||||
You are in full control of the callback function that gets called every time
|
||||
there is data received from the remote server. You can make that callback do
|
||||
whatever you want. You do not have to write the received data to a file.
|
||||
|
||||
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
|
||||
curl_easy_setopt(CURLOPT_FILE) function. Then that pointer will be passed to
|
||||
the callback instead of a FILE * to a file:
|
||||
|
||||
/* imaginary struct */
|
||||
struct MemoryStruct {
|
||||
char *memory;
|
||||
size_t size;
|
||||
};
|
||||
|
||||
/* imaginary callback function */
|
||||
size_t
|
||||
WriteMemoryCallback(void *ptr, size_t size, size_t nmemb, void *data)
|
||||
{
|
||||
register int realsize = size * nmemb;
|
||||
struct MemoryStruct *mem = (struct MemoryStruct *)data;
|
||||
|
||||
mem->memory = (char *)realloc(mem->memory, mem->size + realsize + 1);
|
||||
if (mem->memory) {
|
||||
memcpy(&(mem->memory[mem->size]), ptr, realsize);
|
||||
mem->size += realsize;
|
||||
mem->memory[mem->size] = 0;
|
||||
}
|
||||
return realsize;
|
||||
}
|
||||
|
||||
5.3 How do I fetch multiple files with libcurl?
|
||||
|
||||
libcurl has excellent support for transferring multiple files. You should
|
||||
just repeatedly set new URLs with curl_easy_setopt() and then transfer it
|
||||
with curl_easy_perform(). The handle you get from curl_easy_init() is not
|
||||
only reusable, but you're even encouraged to reuse it if you can, as that
|
||||
will enable libcurl to use persistent connections.
|
||||
|
||||
5.4 Does libcurl do Winsock initialization on win32 systems?
|
||||
|
||||
Yes, if told to in the curl_global_init() call.
|
||||
|
||||
5.5 Does CURLOPT_FILE and CURLOPT_INFILE work on win32 ?
|
||||
|
||||
Yes, but you cannot open a FILE * and pass the pointer to a DLL and have
|
||||
that DLL use the FILE *. If you set CURLOPT_FILE you must also use
|
||||
CURLOPT_WRITEFUNCTION as well to set a function that writes the file, even
|
||||
if that simply writes the data to the specified FILE*. Similarly, if you use
|
||||
CURLOPT_INFILE you must also specify CURLOPT_READFUNCTION.
|
||||
|
||||
(Provided by Joel DeYoung and Bob Schader)
|
||||
|
||||
5.6 What about Keep-Alive or persistent connections?
|
||||
|
||||
curl and libcurl have excellent support for persistent connections when
|
||||
transferring several files from the same server. Curl will attempt to reuse
|
||||
connections for all URLs specified on the same command line/config file, and
|
||||
libcurl will reuse connections for all transfers that are made using the
|
||||
same libcurl handle.
|
||||
|
||||
5.7 Link errors when building libcurl on Windows!
|
||||
|
||||
You need to make sure that your project, and all the libraries (both static
|
||||
and dynamic) that it links against, are compiled/linked against the same run
|
||||
time library.
|
||||
|
||||
This is determined by the /MD, /ML, /MT (and their corresponding /M?d)
|
||||
options to the command line compiler. /MD (linking against MSVCRT dll) seems
|
||||
to be the most commonly used option.
|
||||
|
||||
(Provided by Andrew Francis)
|
||||
|
||||
|
||||
6. License Issues
|
||||
|
||||
Curl and libcurl are released under a MIT/X derivate license. The license is
|
||||
very liberal and should not impose a problem for your project. This section
|
||||
is just a brief summary for the cases we get the most questions. (Parts of
|
||||
this section was much enhanced by Bjorn Reese.)
|
||||
|
||||
6.1. I have a GPL program, can I use the libcurl library?
|
||||
|
||||
Yes!
|
||||
|
||||
Since libcurl may be distributed under the MIT/X derivate license, it can be
|
||||
used together with GPL in any software.
|
||||
|
||||
6.2. I have a closed-source program, can I use the libcurl library?
|
||||
|
||||
Yes!
|
||||
|
||||
libcurl does not put any restrictions on the program that uses the library.
|
||||
|
||||
6.3. I have a BSD licensed program, can I use the libcurl library?
|
||||
|
||||
Yes!
|
||||
|
||||
libcurl does not put any restrictions on the program that uses the library.
|
||||
|
||||
6.4. I have a program that uses LGPL libraries, can I use libcurl?
|
||||
|
||||
Yes!
|
||||
|
||||
The LGPL license doesn't clash with other licenses.
|
||||
|
||||
6.5. Can I modify curl/libcurl for my program and keep the changes secret?
|
||||
|
||||
Yes!
|
||||
|
||||
The MIT/X derivate license practically allows you to do almost anything with
|
||||
the sources, on the condition that the copyright texts in the sources are
|
||||
left intact.
|
||||
|
||||
6.6. Can you please change the curl/libcurl license to XXXX?
|
||||
|
||||
No.
|
||||
|
||||
We have carefully picked this license after years of development and
|
||||
discussions and a large amount of people have contributed with source code
|
||||
knowing that this is the license we use. This license puts the restrictions
|
||||
we want on curl/libcurl and it does not spread to other programs 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.
|
||||
102
docs/FEATURES
Normal file
102
docs/FEATURES
Normal file
@@ -0,0 +1,102 @@
|
||||
_ _ ____ _
|
||||
___| | | | _ \| |
|
||||
/ __| | | | |_) | |
|
||||
| (__| |_| | _ <| |___
|
||||
\___|\___/|_| \_\_____|
|
||||
|
||||
FEATURES
|
||||
|
||||
Misc
|
||||
- full URL syntax
|
||||
- custom maximum download time
|
||||
- custom least download speed acceptable
|
||||
- custom output result after completion
|
||||
- multiple URLs
|
||||
- guesses protocol from host name unless specified
|
||||
- uses .netrc
|
||||
- progress bar/time specs while downloading
|
||||
- "standard" proxy environment variables support
|
||||
- config file support
|
||||
- compiles on win32 (reported builds on 40+ operating systems)
|
||||
- redirectable stderr
|
||||
- selectable network interface for outgoing traffic
|
||||
- IPv6 support
|
||||
- persistant connections
|
||||
- socks5 support
|
||||
- supports user name + password in proxy environment variables
|
||||
- operations through proxy "tunnel" (using CONNECT)
|
||||
|
||||
HTTP
|
||||
- HTTP/1.1 compliant (optionally uses 1.0)
|
||||
- GET
|
||||
- PUT
|
||||
- HEAD
|
||||
- POST
|
||||
- multipart formpost (RFC1867-style)
|
||||
- authentication (Basic, Digest, NTLM(*1), GSS-Negotiate(*3))
|
||||
- resume (both GET and PUT)
|
||||
- follow redirects
|
||||
- maximum amount of redirects to follow
|
||||
- custom HTTP request
|
||||
- cookie get/send fully parsed
|
||||
- reads/writes the netscape cookie file format
|
||||
- custom headers (replace/remove internally generated headers)
|
||||
- custom user-agent string
|
||||
- custom referer string
|
||||
- range
|
||||
- proxy authentication
|
||||
- time conditions
|
||||
- via http-proxy
|
||||
- retrieve file modification date
|
||||
- Content-Encoding support for deflate and gzip
|
||||
- "Transfer-Encoding: chunked" support for "uploads"
|
||||
|
||||
HTTPS (*1)
|
||||
- (all the HTTP features)
|
||||
- using certificates
|
||||
- verify server certificate
|
||||
- via http-proxy
|
||||
- select desired encryption
|
||||
- force usage of a specific SSL version (SSLv2, SSLv3 or TLSv1)
|
||||
|
||||
FTP
|
||||
- download
|
||||
- authentication
|
||||
- kerberos security
|
||||
- active/passive using PORT, EPRT, PASV or EPSV
|
||||
- single file size information (compare to HTTP HEAD)
|
||||
- 'type=' URL support
|
||||
- dir listing
|
||||
- dir listing names-only
|
||||
- upload
|
||||
- upload append
|
||||
- upload via http-proxy as HTTP PUT
|
||||
- download resume
|
||||
- upload resume
|
||||
- custom ftp commands (before and/or after the transfer)
|
||||
- simple "range" support
|
||||
- via http-proxy
|
||||
- all operations can be tunneled through a http-proxy
|
||||
- customizable to retrieve file modification date
|
||||
|
||||
TELNET
|
||||
- connection negotiation
|
||||
- custom telnet options
|
||||
- stdin/stdout I/O
|
||||
|
||||
LDAP (*2)
|
||||
- full LDAP URL support
|
||||
|
||||
DICT
|
||||
- extended DICT URL support
|
||||
|
||||
GOPHER
|
||||
- GET
|
||||
- via http-proxy
|
||||
|
||||
FILE
|
||||
- URL support
|
||||
|
||||
*1 = requires OpenSSL
|
||||
*2 = requires OpenLDAP
|
||||
*3 = requires a GSSAPI-compliant library, such as Heimdal or similar.
|
||||
116
docs/HISTORY
Normal file
116
docs/HISTORY
Normal file
@@ -0,0 +1,116 @@
|
||||
_ _ ____ _
|
||||
___| | | | _ \| |
|
||||
/ __| | | | |_) | |
|
||||
| (__| |_| | _ <| |___
|
||||
\___|\___/|_| \_\_____|
|
||||
|
||||
How cURL Became Like This
|
||||
|
||||
|
||||
In the second half of 1997, Daniel Stenberg came up with the idea to make
|
||||
currency-exchange calculations available to Internet Relay Chat (IRC)
|
||||
users. All the necessary data are published on the Web; he just needed to
|
||||
automate their retrieval.
|
||||
|
||||
Daniel simply adopted an existing command-line open-source tool, httpget, that
|
||||
Brazilian Rafael Sagula had written. After a few minor adjustments, it did
|
||||
just what he needed.
|
||||
|
||||
Soon, he found currencies on a GOPHER site, so support for that had to go in,
|
||||
and not before long FTP download support was added as well. The name of the
|
||||
project was changed to urlget to better fit what it actually did now, since
|
||||
the http-only days were already passed.
|
||||
|
||||
The project slowly grew bigger. When upload capabilities were added and the
|
||||
name once again was misleading, a second name change was made and on March 20,
|
||||
1998 curl 4 was released. (The version numbering from the previous names were
|
||||
kept.)
|
||||
|
||||
(Unrelated to this project a company called Curl Corporation filed a US
|
||||
trademark on the name "CURL" on May 18 1998. That company had then already
|
||||
registered the curl.com domain back in November of the previous year. All this
|
||||
was much later brought into the lights.)
|
||||
|
||||
SSL support was added, powered by the SSLeay library.
|
||||
|
||||
August 1998, added project curl to freshmeat.net.
|
||||
|
||||
October 1998, with the curl 4.9 release and the introduction of cookie
|
||||
support, curl was no longer released under the GPL license. Now we're at 4000
|
||||
lines of code, we switched over to the MPL license to restrict the effects of
|
||||
"copyleft".
|
||||
|
||||
November 1998, configure script and reported successful compiles on several
|
||||
major operating systems. The never-quite-understood -F option was added and
|
||||
curl could now simulate quite a lot of a browser.
|
||||
|
||||
Curl 5 was released in December 1998 and introduced the first ever curl man
|
||||
page. People started making Linux RPM packages out of it.
|
||||
|
||||
January 1999, DICT support added.
|
||||
|
||||
OpenSSL took over where SSLeay was abandoned.
|
||||
|
||||
May 1999, first Debian package.
|
||||
|
||||
August 1999, LDAP:// and FILE:// support added. The curl web site gets 1300
|
||||
visits weekly.
|
||||
|
||||
Released curl 6.0 in September. 15000 lines of code.
|
||||
|
||||
December 28 1999, added the project on Sourceforge and started using its
|
||||
services for managing the project.
|
||||
|
||||
Spring 2000, major internal overhaul to provide a suitable library interface.
|
||||
The first non-beta release was named 7.1 and arrived in August. This offered
|
||||
the easy interface and turned out to be the beginning of actually getting
|
||||
other software and programs to get based on and powered by libcurl. Almost
|
||||
20000 lines of code.
|
||||
|
||||
August 2000, the curl web site gets 4000 visits weekly.
|
||||
|
||||
The PHP guys adopted libcurl already the same month, when the first ever third
|
||||
party libcurl binding showed up. CURL has been a supported module in PHP since
|
||||
the release of PHP 4.0.2. This would soon get followers. More than 16
|
||||
different bindings exist at the time of this writing.
|
||||
|
||||
September 2000, kerberos4 support was added.
|
||||
|
||||
In November 2000 started the work on a test suite for curl. It was later
|
||||
re-written from scratch again.
|
||||
|
||||
January 2001, Daniel released curl 7.5.2 under a new license again: MIT (or
|
||||
MPL). The MIT license is extremely liberal and can be used combined with GPL
|
||||
in other projects. This would finally put an end to the "complaints" from
|
||||
people involved in GPLed projects that previously were prohibited from using
|
||||
libcurl while it was released under MPL only. (Due to the fact that MPL is
|
||||
deemed "GPL incompatible".)
|
||||
|
||||
curl supports HTTP 1.1 starting with the release of 7.7, March 22 2001. This
|
||||
also introduced libcurl's ability to do persistent connections. 24000 lines of
|
||||
code.
|
||||
|
||||
August 2001. curl is bundled in Mac OS X, 10.1. It was already becoming more
|
||||
and more of a standard utility of Linux distributions and a regular in the BSD
|
||||
ports collections. The curl web site gets 8000 visits weekly. Curl Corporation
|
||||
contacted Daniel to discuss "the name issue". After Daniel's reply, they have
|
||||
never since got in touch again.
|
||||
|
||||
September 2001, libcurl 7.9 introduces cookie jar and curl_formadd(). During
|
||||
the forthcoming 7.9.x releases, we introduced the multi interface slowly and
|
||||
without much whistles.
|
||||
|
||||
June 2002, the curl web site gets 13000 visits weekly. curl and libcurl is
|
||||
35000 lines of code. Reported successful compiles on more than 40 combinations
|
||||
of CPUs and operating systems.
|
||||
|
||||
To estimate number of users of the curl tool or libcurl library is next to
|
||||
impossible. Around 5000 downloaded packages each week from the main site gives
|
||||
a hint, but the packages are mirrored extensively, bundled with numerous OS
|
||||
distributions and otherwise retrieved as part of other software.
|
||||
|
||||
September 2002, with the release of curl 7.10 it is released under the MIT
|
||||
license only.
|
||||
|
||||
February 2003, the curl site averages at 20000 visits weekly. At any given
|
||||
moment, there's an average of 3 people browsing the curl.haxx.se site.
|
||||
25
docs/HOWTO-RELEASE
Normal file
25
docs/HOWTO-RELEASE
Normal file
@@ -0,0 +1,25 @@
|
||||
Steps To Perform When Building a Public Release
|
||||
|
||||
* "make distcheck"
|
||||
|
||||
* ./maketgz
|
||||
then upload the 3 curl packages maketgz created
|
||||
|
||||
* update these files:
|
||||
www/_download.html
|
||||
www/_changes.html
|
||||
www/_newslog.html
|
||||
www/Makefile
|
||||
|
||||
* commit the web changes
|
||||
|
||||
* 'cvs commit'
|
||||
|
||||
* 'cvs tag'
|
||||
|
||||
* write the release announcement, including:
|
||||
- changes / bugfixes
|
||||
- other curl-related news
|
||||
- contributors
|
||||
|
||||
* mail release-announcement to curl-announce and curl-users
|
||||
503
docs/INSTALL
Normal file
503
docs/INSTALL
Normal file
@@ -0,0 +1,503 @@
|
||||
_ _ ____ _
|
||||
___| | | | _ \| |
|
||||
/ __| | | | |_) | |
|
||||
| (__| |_| | _ <| |___
|
||||
\___|\___/|_| \_\_____|
|
||||
|
||||
How To Compile
|
||||
|
||||
Curl has been compiled and built on numerous different operating systems.
|
||||
|
||||
Most systems build curl the same way (unix-style). Continue reading below for
|
||||
more details if you're one of them.
|
||||
|
||||
If you're using Windows (95/98/NT/ME/2000/XP or similar), VMS, RISC OS or OS/2
|
||||
or cross-compile, you should continue reading from one the paragraphs further
|
||||
down.
|
||||
|
||||
UNIX
|
||||
====
|
||||
|
||||
A normal unix installation is made in three or four steps (after you've
|
||||
unpacked the source archive):
|
||||
|
||||
./configure
|
||||
make
|
||||
make test (optional)
|
||||
make install
|
||||
|
||||
You probably need to be root when doing the last command.
|
||||
|
||||
If you have checked out the sources from the CVS repository, read the
|
||||
CVS-INFO on how to proceed.
|
||||
|
||||
Get a full listing of all available configure options by invoking it like:
|
||||
|
||||
./configure --help
|
||||
|
||||
If you want to install curl in a different file hierarchy than /usr/local,
|
||||
you need to specify that already when running configure:
|
||||
|
||||
./configure --prefix=/path/to/curl/tree
|
||||
|
||||
If you happen to have write permission in that directory, you can do 'make
|
||||
install' without being root. An example of this would be to make a local
|
||||
install in your own home directory:
|
||||
|
||||
./configure --prefix=$HOME
|
||||
make
|
||||
make install
|
||||
|
||||
The configure script always tries to find a working SSL library unless
|
||||
explicitly told not to. If you have OpenSSL installed in the default search
|
||||
path for your compiler/linker, you don't need to do anything special. If
|
||||
you have OpenSSL installed in /usr/local/ssl, you can run configure like:
|
||||
|
||||
./configure --with-ssl
|
||||
|
||||
If you have OpenSSL installed somewhere else (for example, /opt/OpenSSL,)
|
||||
you can run configure like this:
|
||||
|
||||
./configure --with-ssl=/opt/OpenSSL
|
||||
|
||||
If you insist on forcing a build without SSL support, even though you may
|
||||
have OpenSSL installed in your system, you can run configure like this:
|
||||
|
||||
./configure --without-ssl
|
||||
|
||||
If you have OpenSSL installed, but with the libraries in one place and the
|
||||
header files somewhere else, you have to set the LDFLAGS and CPPFLAGS
|
||||
environment variables prior to running configure. Something like this
|
||||
should work:
|
||||
|
||||
(with the Bourne shell and its clones):
|
||||
|
||||
CPPFLAGS="-I/path/to/ssl/include" LDFLAGS="-L/path/to/ssl/lib" \
|
||||
./configure
|
||||
|
||||
(with csh, tcsh and their clones):
|
||||
|
||||
env CPPFLAGS="-I/path/to/ssl/include" LDFLAGS="-L/path/to/ssl/lib" \
|
||||
./configure
|
||||
|
||||
If your SSL library was compiled with rsaref (usually for use in the United
|
||||
States), you may also need to set:
|
||||
|
||||
LIBS=-lRSAglue -lrsaref
|
||||
(as suggested by Doug Kaufman)
|
||||
|
||||
MORE OPTIONS
|
||||
|
||||
To force configure to use the standard cc compiler if both cc and gcc are
|
||||
present, run configure like
|
||||
|
||||
CC=cc ./configure
|
||||
or
|
||||
env Cc=cc ./configure
|
||||
|
||||
To force a static library compile, disable the shared library creation
|
||||
by running configure like:
|
||||
|
||||
./configure --disable-shared
|
||||
|
||||
To tell the configure script to skip searching for thread-safe functions,
|
||||
add an option like:
|
||||
|
||||
./configure --disable-thread
|
||||
|
||||
To build curl with kerberos4 support enabled, curl requires the krb4 libs
|
||||
and headers installed. You can then use a set of options to tell
|
||||
configure where those are:
|
||||
|
||||
--with-krb4-includes[=DIR] Specify location of kerberos4 headers
|
||||
--with-krb4-libs[=DIR] Specify location of kerberos4 libs
|
||||
--with-krb4[=DIR] where to look for Kerberos4
|
||||
|
||||
In most cases, /usr/athena is the install prefix and then it works with
|
||||
|
||||
./configure --with-krb4=/usr/athena
|
||||
|
||||
If you're a curl developer and use gcc, you might want to enable more
|
||||
debug options with the --enable-debug option.
|
||||
|
||||
Win32
|
||||
=====
|
||||
|
||||
Without SSL:
|
||||
|
||||
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.
|
||||
|
||||
If you have any problems linking libraries or finding header files, be
|
||||
sure to verify that the provided "Makefile.m32" files use the proper
|
||||
paths, and adjust as necessary.
|
||||
|
||||
Cygwin style
|
||||
------------
|
||||
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'
|
||||
|
||||
Microsoft command line style
|
||||
----------------------------
|
||||
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
|
||||
environment.
|
||||
|
||||
IDE-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).
|
||||
(you should name it libcurl or similar)
|
||||
|
||||
Make the sources in the src/ drawer be a "win32 console application"
|
||||
project. Name it curl.
|
||||
|
||||
With VC++, add 'ws2_32.lib' to the link libs when you build curl!
|
||||
Borland seems to do that itself magically. Of course you have to make
|
||||
sure it links with the libcurl too!
|
||||
|
||||
For VC++ 6, there's an included Makefile.vc6 that should be possible
|
||||
to use out-of-the-box.
|
||||
|
||||
Microsoft note: add /Zm200 to the compiler options to increase the
|
||||
compiler's memory allocation limit, as the hugehelp.c won't compile
|
||||
due to "too long puts string".
|
||||
|
||||
|
||||
With SSL:
|
||||
|
||||
MingW32 (GCC-2.95) style
|
||||
------------------------
|
||||
Run the 'mingw32.bat' file to get the proper environment variables
|
||||
set, then run 'make mingw32-ssl' in the root dir.
|
||||
|
||||
If you have any problems linking libraries or finding header files, be
|
||||
sure to look at the provided "Makefile.m32" files for the proper
|
||||
paths, and adjust as necessary.
|
||||
|
||||
Cygwin style
|
||||
------------
|
||||
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
|
||||
----------------------------
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
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.7a
|
||||
|
||||
lib/Makefile.vc6 depends on 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.1.4
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
IBM OS/2
|
||||
========
|
||||
|
||||
Building under OS/2 is not much different from building under unix.
|
||||
You need:
|
||||
|
||||
- emx 0.9d
|
||||
- GNU make
|
||||
- GNU patch
|
||||
- ksh
|
||||
- GNU bison
|
||||
- GNU file utilities
|
||||
- GNU sed
|
||||
- autoconf 2.13
|
||||
|
||||
If you want to build with OpenSSL or OpenLDAP support, you'll need to
|
||||
download those libraries, too. Dirk Ohme has done some work to port SSL
|
||||
libraries under OS/2, but it looks like he doesn't care about emx. You'll
|
||||
find his patches on: http://come.to/Dirk_Ohme
|
||||
|
||||
If during the linking you get an error about _errno being an undefined
|
||||
symbol referenced from the text segment, you need to add -D__ST_MT_ERRNO__
|
||||
in your definitions.
|
||||
|
||||
If everything seems to work fine but there's no curl.exe, you need to add
|
||||
-Zexe to your linker flags.
|
||||
|
||||
If you're getting huge binaries, probably your makefiles have the -g in
|
||||
CFLAGS.
|
||||
|
||||
VMS
|
||||
===
|
||||
(The VMS section is in whole contributed by the friendly Nico Baggus)
|
||||
|
||||
This is the first attempt at porting cURL to VMS.
|
||||
|
||||
Curl seems to work with FTP & HTTP other protocols are not tested. (the
|
||||
perl http/ftp testing server supplied as testing too cannot work on VMS
|
||||
because vms has no concept of fork(). [ I tried to give it a whack, but
|
||||
thats of no use.
|
||||
|
||||
SSL stuff has not been ported.
|
||||
|
||||
Telnet has about the same issues as for Win32. When the changes for Win32
|
||||
are clear maybe they'l work for VMS too. The basic problem is that select
|
||||
ONLY works for sockets.
|
||||
|
||||
Marked instances of fopen/[f]stat that might become a problem, especially
|
||||
for non stream files. In this regard, the files opened for writing will be
|
||||
created stream/lf and will thus be safe. Just keep in mind that non-binary
|
||||
read/wring from/to files will have a records size limit of 32767 bytes
|
||||
imposed.
|
||||
|
||||
Stat to get the size of the files is again only safe for stream files &
|
||||
fixed record files without implied CC.
|
||||
|
||||
-- My guess is that only allowing access to stream files is the quickest
|
||||
way to get around the most issues. Therefore all files need to to be
|
||||
checked to be sure they will be stream/lf before processing them. This is
|
||||
the easiest way out, I know. The reason for this is that code that needs to
|
||||
report the filesize will become a pain in the ass otherwise.
|
||||
|
||||
Exit status.... Well we needed something done here,
|
||||
|
||||
VMS has a structured exist status:
|
||||
| 3 | 2 | 1 | 0|
|
||||
|1098|765432109876|5432109876543|210|
|
||||
+----+------------+-------------+---+
|
||||
|Ctrl| Facility | Error code |sev|
|
||||
+----+------------+-------------+---+
|
||||
|
||||
With the Ctrl-bits an application can tell if part or the whole message has
|
||||
allready been printed from the program, DCL doesn't need to print it again.
|
||||
|
||||
Facility - basicaly the program ID. A code assigned to the program
|
||||
the name can be fetched from external or internal message libraries
|
||||
Errorcode - the errodes assigned by the application
|
||||
Sev. - severity: Even = error, off = non error
|
||||
0 = Warning
|
||||
1 = Success
|
||||
2 = Error
|
||||
3 = Information
|
||||
4 = Fatal
|
||||
<5-7> reserved.
|
||||
|
||||
This all presents itself with:
|
||||
%<FACILITY>-<SeV>-<Errorname>, <Error message>
|
||||
|
||||
See also the src/curlmsg.msg file, it has the source for the messages In
|
||||
src/main.c a section is devoted to message status values, the globalvalues
|
||||
create symbols with certain values, referenced from a compiled message
|
||||
file. Have all exit function use a exit status derived from a translation
|
||||
table with the compiled message codes.
|
||||
|
||||
This was all compiled with:
|
||||
|
||||
Compaq C V6.2-003 on OpenVMS Alpha V7.1-1H2
|
||||
|
||||
So far for porting notes as of:
|
||||
13-jul-2001
|
||||
N. Baggus
|
||||
|
||||
QNX
|
||||
===
|
||||
(This section was graciously brought to us by David Bentham)
|
||||
|
||||
As QNX is targetted for resource constrained environments, the QNX headers
|
||||
set conservative limits. This includes the FD_SETSIZE macro, set by default
|
||||
to 32. Socket descriptors returned within the CURL library may exceed this,
|
||||
resulting in memory faults/SIGSEGV crashes when passed into select(..)
|
||||
calls using fd_set macros.
|
||||
|
||||
A good all-round solution to this is to override the default when building
|
||||
libcurl, by overriding CFLAGS during configure, example
|
||||
# configure CFLAGS='-DFD_SETSIZE=64 -g -O2'
|
||||
|
||||
CROSS COMPILE
|
||||
=============
|
||||
|
||||
(This section was graciously brought to us by Jim Duey, 23-oct-2001)
|
||||
|
||||
Download and unpack the cURL package. Version should be 7.9.1 or later.
|
||||
|
||||
'cd' to the new directory. (ie. curl-7.9.1-pre4)
|
||||
|
||||
Set environment variables to point to the cross-compile toolchain and call
|
||||
configure with any options you need. Be sure and specify the '--host' and
|
||||
'--build' parameters at configuration time. The following script is an
|
||||
example of cross-compiling for the IBM 405GP PowerPC processor using the
|
||||
toolchain from MonteVista for Hardhat Linux.
|
||||
|
||||
(begin script)
|
||||
|
||||
#! /bin/sh
|
||||
|
||||
export PATH=$PATH:/opt/hardhat/devkit/ppc/405/bin
|
||||
export CPPFLAGS="-I/opt/hardhat/devkit/ppc/405/target/usr/include"
|
||||
export AR=ppc_405-ar
|
||||
export AS=ppc_405-as
|
||||
export LD=ppc_405-ld
|
||||
export RANLIB=ppc_405-ranlib
|
||||
export CC=ppc_405-gcc
|
||||
export NM=ppc_405-nm
|
||||
|
||||
configure --target=powerpc-hardhat-linux \
|
||||
--host=powerpc-hardhat-linux \
|
||||
--build=i586-pc-linux-gnu \
|
||||
--prefix=/opt/hardhat/devkit/ppc/405/target/usr/local \
|
||||
--exec-prefix=/usr/local
|
||||
|
||||
(end script)
|
||||
|
||||
The '--prefix' parameter specifies where cURL will be installed. If
|
||||
'configure' completes successfully, do 'make' and 'make install' as usual.
|
||||
|
||||
RISC OS
|
||||
=======
|
||||
The library can be cross-compiled using gccsdk as follows:
|
||||
|
||||
CC=riscos-gcc AR=riscos-ar RANLIB='riscos-ar -s' ./configure \
|
||||
--host=arm-riscos-aof --without-random --disable-shared
|
||||
make
|
||||
|
||||
where riscos-gcc and riscos-ar are links to the gccsdk tools.
|
||||
You can then link your program with curl/lib/.libs/libcurl.a
|
||||
|
||||
PORTS
|
||||
=====
|
||||
This is a probably incomplete list of known hardware and operating systems
|
||||
that curl has been compiled for. If you know a system curl compiles and
|
||||
runs on, that isn't listed, please let us know!
|
||||
|
||||
- Alpha DEC OSF 4
|
||||
- Alpha Digital UNIX v3.2
|
||||
- Alpha FreeBSD 4.1, 4.5
|
||||
- Alpha Linux 2.2, 2.4
|
||||
- Alpha NetBSD 1.5.2
|
||||
- Alpha OpenBSD 3.0
|
||||
- Alpha OpenVMS V7.1-1H2
|
||||
- Alpha Tru64 v5.0 5.1
|
||||
- HP-PA HP-UX 9.X 10.X 11.X
|
||||
- HP-PA Linux
|
||||
- MIPS IRIX 6.2, 6.5
|
||||
- MIPS Linux
|
||||
- Pocket PC/Win CE 3.0
|
||||
- Power AIX 3.2.5, 4.2, 4.3.1, 4.3.2, 5.1
|
||||
- PowerPC Darwin 1.0
|
||||
- PowerPC Linux
|
||||
- PowerPC Mac OS 9
|
||||
- PowerPC Mac OS X
|
||||
- SINIX-Z v5
|
||||
- Sparc Linux
|
||||
- Sparc Solaris 2.4, 2.5, 2.5.1, 2.6, 7, 8
|
||||
- Sparc SunOS 4.1.X
|
||||
- StrongARM (and other ARM) RISC OS 3.1, 4.02
|
||||
- StrongARM Linux 2.4
|
||||
- StrongARM NetBSD 1.4.1
|
||||
- Ultrix 4.3a
|
||||
- i386 BeOS
|
||||
- i386 DOS
|
||||
- i386 FreeBSD
|
||||
- i386 HURD
|
||||
- i386 Linux 1.3, 2.0, 2.2, 2.3, 2.4
|
||||
- i386 NetBSD
|
||||
- i386 OS/2
|
||||
- i386 OpenBSD
|
||||
- i386 SCO unix
|
||||
- i386 Solaris 2.7
|
||||
- i386 Windows 95, 98, ME, NT, 2000
|
||||
- i386 QNX 6
|
||||
- i486 ncr-sysv4.3.03 (NCR MP-RAS)
|
||||
- ia64 Linux 2.3.99
|
||||
- m68k AmigaOS 3
|
||||
- m68k Linux
|
||||
- m68k OpenBSD
|
||||
- m88k dg-dgux5.4R3.00
|
||||
- s390 Linux
|
||||
- XScale/PXA250 Linux 2.4
|
||||
|
||||
OpenSSL
|
||||
=======
|
||||
|
||||
You'll find OpenSSL information at:
|
||||
|
||||
http://www.openssl.org
|
||||
|
||||
|
||||
MingW32/Cygwin
|
||||
==============
|
||||
|
||||
You'll find MingW32 and Cygwin information at:
|
||||
|
||||
http://www.mingw.org
|
||||
|
||||
OpenLDAP
|
||||
========
|
||||
|
||||
You'll find OpenLDAP information at:
|
||||
|
||||
http://www.openldap.org
|
||||
|
||||
You need to install it with shared libraries, which is enabled when running
|
||||
the ldap configure script with "--enable-shared". With my linux 2.0.36
|
||||
kernel I also had to disable using threads (with --without-threads),
|
||||
because the configure script couldn't figure out my system.
|
||||
381
docs/INTERNALS
Normal file
381
docs/INTERNALS
Normal file
@@ -0,0 +1,381 @@
|
||||
Updated for curl 7.9.1 on November 2, 2001
|
||||
_ _ ____ _
|
||||
___| | | | _ \| |
|
||||
/ __| | | | |_) | |
|
||||
| (__| |_| | _ <| |___
|
||||
\___|\___/|_| \_\_____|
|
||||
|
||||
INTERNALS
|
||||
|
||||
The project is split in two. The library and the client. The client part uses
|
||||
the library, but the library is designed to allow other applications to use
|
||||
it.
|
||||
|
||||
The largest amount of code and complexity is in the library part.
|
||||
|
||||
CVS
|
||||
===
|
||||
All changes to the sources are committed to the CVS repository as soon as
|
||||
they're somewhat verified to work. Changes shall be commited as independently
|
||||
as possible so that individual changes can be easier spotted and tracked
|
||||
afterwards.
|
||||
|
||||
Tagging shall be used extensively, and by the time we release new archives we
|
||||
should tag the sources with a name similar to the released version number.
|
||||
|
||||
Windows vs Unix
|
||||
===============
|
||||
|
||||
There are a few differences in how to program curl the unix way compared to
|
||||
the Windows way. The four perhaps most notable details are:
|
||||
|
||||
1. Different function names for socket operations.
|
||||
|
||||
In curl, this is solved with defines and macros, so that the source looks
|
||||
the same at all places except for the header file that defines them. The
|
||||
macros in use are sclose(), sread() and swrite().
|
||||
|
||||
2. Windows requires a couple of init calls for the socket stuff.
|
||||
|
||||
Those must be made by the application that uses libcurl, in curl that means
|
||||
src/main.c has some code #ifdef'ed to do just that.
|
||||
|
||||
3. The file descriptors for network communication and file operations are
|
||||
not easily interchangable as in unix.
|
||||
|
||||
We avoid this by not trying any funny tricks on file descriptors.
|
||||
|
||||
4. When writing data to stdout, Windows makes end-of-lines the DOS way, thus
|
||||
destroying binary data, although you do want that conversion if it is
|
||||
text coming through... (sigh)
|
||||
|
||||
We set stdout to binary under windows
|
||||
|
||||
Inside the source code, We make an effort to avoid '#ifdef [Your OS]'. All
|
||||
conditionals that deal with features *should* instead be in the format
|
||||
'#ifdef HAVE_THAT_WEIRD_FUNCTION'. Since Windows can't run configure scripts,
|
||||
we maintain two config-win32.h files (one in lib/ and one in src/) that are
|
||||
supposed to look exactly as a config.h file would have looked like on a
|
||||
Windows machine!
|
||||
|
||||
Generally speaking: always remember that this will be compiled on dozens of
|
||||
operating systems. Don't walk on the edge.
|
||||
|
||||
Library
|
||||
=======
|
||||
|
||||
There are plenty of entry points to the library, namely each publicly defined
|
||||
function that libcurl offers to applications. All of those functions are
|
||||
rather small and easy-to-follow. All the ones prefixed with 'curl_easy' are
|
||||
put in the lib/easy.c file.
|
||||
|
||||
curl_global_init_() and curl_global_cleanup() should be called by the
|
||||
application to initialize and clean up global stuff in the library. As of
|
||||
today, it can handle the global SSL initing if SSL is enabled and it can init
|
||||
the socket layer on windows machines. libcurl itself has no "global" scope.
|
||||
|
||||
All printf()-style functions use the supplied clones in lib/mprintf.c. This
|
||||
makes sure we stay absolutely platform independent.
|
||||
|
||||
curl_easy_init() allocates an internal struct and makes some initializations.
|
||||
The returned handle does not reveal internals. This is the 'SessionHandle'
|
||||
struct which works as an "anchor" struct for all curl_easy functions. All
|
||||
connections performed will get connect-specific data allocated that should be
|
||||
used for things related to particular connections/requests.
|
||||
|
||||
curl_easy_setopt() takes three arguments, where the option stuff must be
|
||||
passed in pairs: the parameter-ID and the parameter-value. The list of
|
||||
options is documented in the man page. This function mainly sets things in
|
||||
the 'SessionHandle' struct.
|
||||
|
||||
curl_easy_perform() does a whole lot of things:
|
||||
|
||||
It starts off in the lib/easy.c file by calling Curl_perform() and the main
|
||||
work then continues in lib/url.c. The flow continues with a call to
|
||||
Curl_connect() to connect to the remote site.
|
||||
|
||||
o Curl_connect()
|
||||
|
||||
... analyzes the URL, it separates the different components and connects to
|
||||
the remote host. This may involve using a proxy and/or using SSL. The
|
||||
Curl_gethost() function in lib/hostip.c is used for looking up host names.
|
||||
|
||||
When Curl_connect is done, we are connected to the remote site. Then it is
|
||||
time to tell the server to get a document/file. Curl_do() arranges this.
|
||||
|
||||
This function makes sure there's an allocated and initiated 'connectdata'
|
||||
struct that is used for this particular connection only (although there may
|
||||
be several requests performed on the same connect). A bunch of things are
|
||||
inited/inherited from the SessionHandle struct.
|
||||
|
||||
o Curl_do()
|
||||
|
||||
Curl_do() makes sure the proper protocol-specific function is called. The
|
||||
functions are named after the protocols they handle. Curl_ftp(),
|
||||
Curl_http(), Curl_dict(), etc. They all reside in their respective files
|
||||
(ftp.c, http.c and dict.c). HTTPS is handled by Curl_http() and FTPS by
|
||||
Curl_ftp().
|
||||
|
||||
The protocol-specific functions of course deal with protocol-specific
|
||||
negotiations and setup. They have access to the Curl_sendf() (from
|
||||
lib/sendf.c) function to send printf-style formatted data to the remote
|
||||
host and when they're ready to make the actual file transfer they call the
|
||||
Curl_Transfer() function (in lib/transfer.c) to setup the transfer and
|
||||
returns.
|
||||
|
||||
Starting in 7.9.1, if this DO function fails and the connection is being
|
||||
re-used, libcurl will then close this connection, setup a new connection
|
||||
and re-issue the DO request on that. This is because there is no way to be
|
||||
perfectly sure that we have discovered a dead connection before the DO
|
||||
function and thus we might wrongly be re-using a connection that was closed
|
||||
by the remote peer.
|
||||
|
||||
o Transfer()
|
||||
|
||||
Curl_perform() then calls Transfer() in lib/transfer.c that performs
|
||||
the entire file transfer.
|
||||
|
||||
During transfer, the progress functions in lib/progress.c are called at a
|
||||
frequent interval (or at the user's choice, a specified callback might get
|
||||
called). The speedcheck functions in lib/speedcheck.c are also used to
|
||||
verify that the transfer is as fast as required.
|
||||
|
||||
o Curl_done()
|
||||
|
||||
Called after a transfer is done. This function takes care of everything
|
||||
that has to be done after a transfer. This function attempts to leave
|
||||
matters in a state so that Curl_do() should be possible to call again on
|
||||
the same connection (in a persistent connection case). It might also soon
|
||||
be closed with Curl_disconnect().
|
||||
|
||||
o Curl_disconnect()
|
||||
|
||||
When doing normal connections and transfers, no one ever tries to close any
|
||||
connections so this is not normally called when curl_easy_perform() is
|
||||
used. This function is only used when we are certain that no more transfers
|
||||
is going to be made on the connection. It can be also closed by force, or
|
||||
it can be called to make sure that libcurl doesn't keep too many
|
||||
connections alive at the same time (there's a default amount of 5 but that
|
||||
can be changed with the CURLOPT_MAXCONNECTS option).
|
||||
|
||||
This function cleans up all resources that are associated with a single
|
||||
connection.
|
||||
|
||||
Curl_perform() is the function that does the main "connect - do - transfer -
|
||||
done" loop. It loops if there's a Location: to follow.
|
||||
|
||||
When completed, the curl_easy_cleanup() should be called to free up used
|
||||
resources. It runs Curl_disconnect() on all open connectons.
|
||||
|
||||
A quick roundup on internal function sequences (many of these call
|
||||
protocol-specific function-pointers):
|
||||
|
||||
curl_connect - connects to a remote site and does initial connect fluff
|
||||
This also checks for an existing connection to the requested site and uses
|
||||
that one if it is possible.
|
||||
|
||||
curl_do - starts a transfer
|
||||
curl_transfer() - transfers data
|
||||
curl_done - ends a transfer
|
||||
|
||||
curl_disconnect - disconnects from a remote site. This is called when the
|
||||
disconnect is really requested, which doesn't necessarily have to be
|
||||
exactly after curl_done in case we want to keep the connection open for
|
||||
a while.
|
||||
|
||||
HTTP(S)
|
||||
|
||||
HTTP offers a lot and is the protocol in curl that uses the most lines of
|
||||
code. There is a special file (lib/formdata.c) that offers all the multipart
|
||||
post functions.
|
||||
|
||||
base64-functions for user+password stuff (and more) is in (lib/base64.c) and
|
||||
all functions for parsing and sending cookies are found in (lib/cookie.c).
|
||||
|
||||
HTTPS uses in almost every means the same procedure as HTTP, with only two
|
||||
exceptions: the connect procedure is different and the function used to read
|
||||
or write from the socket is different, although the latter fact is hidden in
|
||||
the source by the use of curl_read() for reading and curl_write() for writing
|
||||
data to the remote server.
|
||||
|
||||
http_chunks.c contains functions that understands HTTP 1.1 chunked transfer
|
||||
encoding.
|
||||
|
||||
An interesting detail with the HTTP(S) request, is the add_buffer() series of
|
||||
functions we use. They append data to one single buffer, and when the
|
||||
building is done the entire request is sent off in one single write. This is
|
||||
done this way to overcome problems with flawed firewalls and lame servers.
|
||||
|
||||
FTP
|
||||
|
||||
The Curl_if2ip() function can be used for getting the IP number of a
|
||||
specified network interface, and it resides in lib/if2ip.c.
|
||||
|
||||
Curl_ftpsendf() is used for sending FTP commands to the remote server. It was
|
||||
made a separate function to prevent us programmers from forgetting that they
|
||||
must be CRLF terminated. They must also be sent in one single write() to make
|
||||
firewalls and similar happy.
|
||||
|
||||
Kerberos
|
||||
|
||||
The kerberos support is mainly in lib/krb4.c and lib/security.c.
|
||||
|
||||
TELNET
|
||||
|
||||
Telnet is implemented in lib/telnet.c.
|
||||
|
||||
FILE
|
||||
|
||||
The file:// protocol is dealt with in lib/file.c.
|
||||
|
||||
LDAP
|
||||
|
||||
Everything LDAP is in lib/ldap.c.
|
||||
|
||||
GENERAL
|
||||
|
||||
URL encoding and decoding, called escaping and unescaping in the source code,
|
||||
is found in lib/escape.c.
|
||||
|
||||
While transfering data in Transfer() a few functions might get
|
||||
used. curl_getdate() in lib/getdate.c is for HTTP date comparisons (and
|
||||
more).
|
||||
|
||||
lib/getenv.c offers curl_getenv() which is for reading environment variables
|
||||
in a neat platform independent way. That's used in the client, but also in
|
||||
lib/url.c when checking the proxy environment variables. Note that contrary
|
||||
to the normal unix getenv(), this returns an allocated buffer that must be
|
||||
free()ed after use.
|
||||
|
||||
lib/netrc.c holds the .netrc parser
|
||||
|
||||
lib/timeval.c features replacement functions for systems that don't have
|
||||
gettimeofday() and a few support functions for timeval convertions.
|
||||
|
||||
A function named curl_version() that returns the full curl version string is
|
||||
found in lib/version.c.
|
||||
|
||||
If authentication is requested but no password is given, a getpass_r() clone
|
||||
exists in lib/getpass.c. libcurl offers a custom callback that can be used
|
||||
instead of this, but it doesn't change much to us.
|
||||
|
||||
Persistent Connections
|
||||
======================
|
||||
|
||||
The persistent connection support in libcurl requires some considerations on
|
||||
how to do things inside of the library.
|
||||
|
||||
o The 'SessionHandle' struct returned in the curl_easy_init() call must never
|
||||
hold connection-oriented data. It is meant to hold the root data as well as
|
||||
all the options etc that the library-user may choose.
|
||||
o The 'SessionHandle' struct holds the "connection cache" (an array of
|
||||
pointers to 'connectdata' structs). There's one connectdata struct
|
||||
allocated for each connection that libcurl knows about.
|
||||
o This also enables the 'curl handle' to be reused on subsequent transfers,
|
||||
something that was illegal before libcurl 7.7.
|
||||
o When we are about to perform a transfer with curl_easy_perform(), we first
|
||||
check for an already existing connection in the cache that we can use,
|
||||
otherwise we create a new one and add to the cache. If the cache is full
|
||||
already when we add a new connection, we close one of the present ones. We
|
||||
select which one to close dependent on the close policy that may have been
|
||||
previously set.
|
||||
o When the transfer operation is complete, we try to leave the connection
|
||||
open. Particular options may tell us not to, and protocols may signal
|
||||
closure on connections and then we don't keep it open of course.
|
||||
o When curl_easy_cleanup() is called, we close all still opened connections.
|
||||
|
||||
You do realize that the curl handle must be re-used in order for the
|
||||
persistent connections to work.
|
||||
|
||||
Library Symbols
|
||||
===============
|
||||
|
||||
All symbols used internally in libcurl must use a 'Curl_' prefix if they're
|
||||
used in more than a single file. Single-file symbols must be made static.
|
||||
Public ("exported") symbols must use a 'curl_' prefix. (There are exceptions,
|
||||
but they are to be changed to follow this pattern in future versions.)
|
||||
|
||||
Return Codes and Informationals
|
||||
===============================
|
||||
|
||||
I've made things simple. Almost every function in libcurl returns a CURLcode,
|
||||
that must be CURLE_OK if everything is OK or otherwise a suitable error code
|
||||
as the curl/curl.h include file defines. The very spot that detects an error
|
||||
must use the Curl_failf() function to set the human-readable error
|
||||
description.
|
||||
|
||||
In aiding the user to understand what's happening and to debug curl usage, we
|
||||
must supply a fair amount of informational messages by using the Curl_infof()
|
||||
function. Those messages are only displayed when the user explicitly asks for
|
||||
them. They are best used when revealing information that isn't otherwise
|
||||
obvious.
|
||||
|
||||
Client
|
||||
======
|
||||
|
||||
main() resides in src/main.c together with most of the client code.
|
||||
|
||||
src/hugehelp.c is automatically generated by the mkhelp.pl perl script to
|
||||
display the complete "manual" and the src/urlglob.c file holds the functions
|
||||
used for the URL-"globbing" support. Globbing in the sense that the {} and []
|
||||
expansion stuff is there.
|
||||
|
||||
The client mostly messes around to setup its 'config' struct properly, then
|
||||
it calls the curl_easy_*() functions of the library and when it gets back
|
||||
control after the curl_easy_perform() it cleans up the library, checks status
|
||||
and exits.
|
||||
|
||||
When the operation is done, the ourWriteOut() function in src/writeout.c may
|
||||
be called to report about the operation. That function is using the
|
||||
curl_easy_getinfo() function to extract useful information from the curl
|
||||
session.
|
||||
|
||||
Recent versions may loop and do all this several times if many URLs were
|
||||
specified on the command line or config file.
|
||||
|
||||
Memory Debugging
|
||||
================
|
||||
|
||||
The file lib/memdebug.c contains debug-versions of a few functions. Functions
|
||||
such as malloc, free, fopen, fclose, etc that somehow deal with resources
|
||||
that might give us problems if we "leak" them. The functions in the memdebug
|
||||
system do nothing fancy, they do their normal function and then log
|
||||
information about what they just did. The logged data can then be analyzed
|
||||
after a complete session,
|
||||
|
||||
memanalyze.pl is the perl script present only present in CVS (not part of the
|
||||
release archives) that analyzes a log file generated by the memdebug
|
||||
system. It detects if resources are allocated but never freed and other kinds
|
||||
of errors related to resource management.
|
||||
|
||||
Use -DMALLOCDEBUG when compiling to enable memory debugging, this is also
|
||||
switched on by running configure with --enable-debug.
|
||||
|
||||
Test Suite
|
||||
==========
|
||||
|
||||
Since November 2000, a test suite has evolved. It is placed in its own
|
||||
subdirectory directly off the root in the curl archive tree, and it contains
|
||||
a bunch of scripts and a lot of test case data.
|
||||
|
||||
The main test script is runtests.pl that will invoke the two servers
|
||||
httpserver.pl and ftpserver.pl before all the test cases are performed. The
|
||||
test suite currently only runs on unix-like platforms.
|
||||
|
||||
You'll find a complete description of the test case data files in the
|
||||
tests/README file.
|
||||
|
||||
The test suite automatically detects if curl was built with the memory
|
||||
debugging enabled, and if it was it will detect memory leaks too.
|
||||
|
||||
Building Releases
|
||||
=================
|
||||
|
||||
There's no magic to this. When you consider everything stable enough to be
|
||||
released, run the 'maketgz' script (using 'make distcheck' will give you a
|
||||
pretty good view on the status of the current sources). maketgz prompts for
|
||||
version number of the client and the library before it creates a release
|
||||
archive. maketgz uses 'make dist' for the actual archive building, why you
|
||||
need to fill in the Makefile.am files properly for which files that should
|
||||
be included in the release archives.
|
||||
|
||||
100
docs/KNOWN_BUGS
Normal file
100
docs/KNOWN_BUGS
Normal file
@@ -0,0 +1,100 @@
|
||||
These are problems known to exist at the time of this release. Feel free to
|
||||
join in and help us correct one or more of these! Also be sure to check the
|
||||
changelog of the current development status, as one or more of these problems
|
||||
may have been fixed since this was written!
|
||||
|
||||
* Using CURLOPT_FAILONERROR (-f/--fail) will make authentication to stop
|
||||
working if you use anything but plain Basic auth.
|
||||
|
||||
* LDAP output is garbled. Hardly anyone seems to care about LDAP functionality
|
||||
in curl/libcurl why this report has been closed and set to be solved later.
|
||||
If you feel this is something you want fixed, get in touch and we'll start
|
||||
working.
|
||||
http://sourceforge.net/tracker/index.php?func=detail&aid=735752&group_id=976&atid=100976
|
||||
|
||||
* IPv6 support on AIX 4.3.3 doesn't work due to a missing sockaddr_storage
|
||||
struct. It has been reported to work on AIX 5.1 though.
|
||||
|
||||
* Running 'make test' on Mac OS X gives 4 errors. This seems to be related
|
||||
to some kind of libtool problem:
|
||||
http://curl.haxx.se/mail/archive-2002-03/0029.html and
|
||||
http://curl.haxx.se/mail/archive-2002-03/0033.html
|
||||
|
||||
* libcurl does not deal nicely with files larger than 2GB
|
||||
|
||||
* GOPHER transfers seem broken
|
||||
|
||||
* configure --disable-http is not fully supported. All other protocols seem
|
||||
to work to disable.
|
||||
|
||||
* The -m parameter does not work when using telnet with curl on Windows.
|
||||
|
||||
* If a HTTP server responds to a HEAD request and includes a body (thus
|
||||
violating the RFC2616), curl won't wait to read the response but just stop
|
||||
reading and return back. If a second request (let's assume a GET) is then
|
||||
immediately made to the same server again, the connection will be re-used
|
||||
fine of course, and the second request will be sent off but when the
|
||||
response is to get read, the previous response-body is what curl will read
|
||||
and havoc is what happens.
|
||||
More details on this is found in this libcurl mailing list thread:
|
||||
http://curl.haxx.se/mail/lib-2002-08/0000.html
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
|
||||
Q: My program blows up when I run lots of curl_easy_perform() calls on a
|
||||
single thread
|
||||
Q: My program dies when a single thread re-enters the win32 select() call
|
||||
via curl_easy_perform()
|
||||
Q: --- add your own flavour here ---
|
||||
|
||||
Single Threaded Re-Entracy
|
||||
--------------------------
|
||||
|
||||
There is a glitch / trick to using cURL on Win32 related to re-entrancy.
|
||||
This experience was gained on verion 7.9.4 using Windows NT SP3 in a banking
|
||||
environment (just in case you wanted to know).
|
||||
|
||||
If you have already called curl_easy_perform(), and *somehow* you cause your
|
||||
single thread of execution to make another call to curl_easy_perform() - the
|
||||
windows socket() call used to create a new socket for the second connection
|
||||
can return with 10044 / 10043 error codes.
|
||||
|
||||
The WSA errors we experienced are:
|
||||
WSAEPROTONOSUPPORT
|
||||
(10043)
|
||||
Protocol not supported.
|
||||
The requested protocol has not been configured into the system, or no
|
||||
implementation for it exists. For example, a socket call requests a
|
||||
SOCK_DGRAM socket, but specifies a stream protocol.
|
||||
|
||||
WSAESOCKTNOSUPPORT
|
||||
(10044)
|
||||
Socket type not supported.
|
||||
The support for the specified socket type does not exist in this address
|
||||
family. For example, the optional type SOCK_RAW might be selected in a
|
||||
socket call, and the implementation does not support SOCK_RAW sockets at
|
||||
all.
|
||||
|
||||
We have experienced this by creating a timer that ticks every 20ms, and on
|
||||
the tick making a curl_easy_perform() call. The call usually completed in
|
||||
about 300ms. And we expected (before this test) that the timer would NOT be
|
||||
fired during a call to curl_easy_perform(), howvever, while the first
|
||||
curl_easy_perform() is running a tick *is* fired by the windows API somehow,
|
||||
and we then call curl_easy_perform() again - thus single threaded
|
||||
re-entrancy is achieved.
|
||||
|
||||
Notes:
|
||||
* We made sure that a new CURL structure was being used for each
|
||||
curl_easy_perform() request, and that the curl_global_init() had been called
|
||||
beforehand.
|
||||
* I'm happy to answer any questions about this problem to try to track it
|
||||
down.
|
||||
* Once the socket() call started failing, there is no hope - it never works
|
||||
again.
|
||||
* Slowing the timer down to give each request enough time to complete solves
|
||||
this problem completely.
|
||||
|
||||
If anyone has the source code to the WinNT implementation of socket() and
|
||||
can figure out WHY this can occur, more tracing can be performed.
|
||||
|
||||
John Clayton <John.Clayton at barclayscapital.com>
|
||||
@@ -3,7 +3,7 @@ LATEST VERSION
|
||||
You always find news about what's going on as well as the latest versions
|
||||
from the curl web pages, located at:
|
||||
|
||||
http://curl.haxx.nu
|
||||
http://curl.haxx.se
|
||||
|
||||
SIMPLE USAGE
|
||||
|
||||
@@ -11,26 +11,30 @@ SIMPLE USAGE
|
||||
|
||||
curl http://www.netscape.com/
|
||||
|
||||
Get the root README file from funet's ftp-server:
|
||||
Get the README file the user's home directory at funet's ftp-server:
|
||||
|
||||
curl ftp://ftp.funet.fi/README
|
||||
|
||||
Get a gopher document from funet's gopher server:
|
||||
|
||||
curl gopher://gopher.funet.fi
|
||||
|
||||
Get a web page from a server using port 8000:
|
||||
|
||||
curl http://www.weirdserver.com:8000/
|
||||
|
||||
Get a list of the root directory of an FTP site:
|
||||
Get a list of a directory of an FTP site:
|
||||
|
||||
curl ftp://ftp.fts.frontec.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:
|
||||
|
||||
curl dict://dict.org/m:curl
|
||||
|
||||
Fetch two documents at once:
|
||||
|
||||
curl ftp://cool.haxx.se/ http://www.weirdserver.com:8000/
|
||||
|
||||
DOWNLOAD TO A FILE
|
||||
|
||||
Get a web page and store in a local file:
|
||||
@@ -43,6 +47,10 @@ DOWNLOAD TO A FILE
|
||||
|
||||
curl -O http://www.netscape.com/index.html
|
||||
|
||||
Fetch two files and store them with their remote names:
|
||||
|
||||
curl -O www.haxx.se/index.html -O curl.haxx.se/download.html
|
||||
|
||||
USING PASSWORDS
|
||||
|
||||
FTP
|
||||
@@ -124,7 +132,7 @@ UPLOADING
|
||||
|
||||
Upload all data on stdin to a specified ftp site:
|
||||
|
||||
curl -t ftp://ftp.upload.com/myfile
|
||||
curl -T - ftp://ftp.upload.com/myfile
|
||||
|
||||
Upload data from a specified file, login with user and password:
|
||||
|
||||
@@ -139,15 +147,17 @@ UPLOADING
|
||||
|
||||
curl -T localfile -a ftp://ftp.upload.com/remotefile
|
||||
|
||||
NOTE: Curl does not support ftp upload through a proxy! The reason for this
|
||||
is simply that proxies are seldomly configured to allow this and that no
|
||||
author has supplied code that makes it possible!
|
||||
Curl also supports ftp upload through a proxy, but only if the proxy is
|
||||
configured to allow that kind of tunneling. If it does, you can run curl in
|
||||
a fashion similar to:
|
||||
|
||||
curl --proxytunnel -x proxy:port -T localfile ftp.upload.com
|
||||
|
||||
HTTP
|
||||
|
||||
Upload all data on stdin to a specified http site:
|
||||
|
||||
curl -t http://www.upload.com/myfile
|
||||
curl -T - http://www.upload.com/myfile
|
||||
|
||||
Note that the http server must've been configured to accept PUT before this
|
||||
can be done successfully.
|
||||
@@ -156,13 +166,21 @@ UPLOADING
|
||||
|
||||
VERBOSE / DEBUG
|
||||
|
||||
If curl fails where it isn't supposed to, if the servers don't let you
|
||||
in, if you can't understand the responses: use the -v flag to get VERBOSE
|
||||
fetching. Curl will output lots of info and all data it sends and
|
||||
receives in order to let the user see all client-server interaction.
|
||||
If curl fails where it isn't supposed to, if the servers don't let you in,
|
||||
if you can't understand the responses: use the -v flag to get verbose
|
||||
fetching. Curl will output lots of info and what it sends and receives in
|
||||
order to let the user see all client-server interaction (but it won't show
|
||||
you the actual data).
|
||||
|
||||
curl -v ftp://ftp.upload.com/
|
||||
|
||||
To get even more details and information on what curl does, try using the
|
||||
--trace or --trace-ascii options with a given file name to log to, like
|
||||
this:
|
||||
|
||||
curl --trace trace.txt www.haxx.se
|
||||
|
||||
|
||||
DETAILED INFORMATION
|
||||
|
||||
Different protocols provide different ways of getting detailed information
|
||||
@@ -176,9 +194,9 @@ DETAILED INFORMATION
|
||||
-D/--dump-header option when getting files from both FTP and HTTP, and it
|
||||
will then store the headers in the specified file.
|
||||
|
||||
Store the HTTP headers in a separate file:
|
||||
Store the HTTP headers in a separate file (headers.txt in the example):
|
||||
|
||||
curl --dump-header headers.txt curl.haxx.nu
|
||||
curl --dump-header headers.txt curl.haxx.se
|
||||
|
||||
Note that headers stored in a separate file can be very useful at a later
|
||||
time if you want curl to use cookies sent by the server. More about that in
|
||||
@@ -194,38 +212,73 @@ POST (HTTP)
|
||||
curl -d "name=Rafael%20Sagula&phone=3320780" \
|
||||
http://www.where.com/guest.cgi
|
||||
|
||||
How to post a form with curl, lesson #1:
|
||||
|
||||
Dig out all the <input> tags in the form that you want to fill in. (There's
|
||||
a perl program called formfind.pl on the curl site that helps with this).
|
||||
|
||||
If there's a "normal" post, you use -d to post. -d takes a full "post
|
||||
string", which is in the format
|
||||
|
||||
<variable1>=<data1>&<variable2>=<data2>&...
|
||||
|
||||
The 'variable' names are the names set with "name=" in the <input> tags, and
|
||||
the data is the contents you want to fill in for the inputs. The data *must*
|
||||
be properly URL encoded. That means you replace space with + and that you
|
||||
write weird letters with %XX where XX is the hexadecimal representation of
|
||||
the letter's ASCII code.
|
||||
|
||||
Example:
|
||||
|
||||
(page located at http://www.formpost.com/getthis/
|
||||
|
||||
<form action="post.cgi" method="post">
|
||||
<input name=user size=10>
|
||||
<input name=pass type=password size=10>
|
||||
<input name=id type=hidden value="blablabla">
|
||||
<input name=ding value="submit">
|
||||
</form>
|
||||
|
||||
We want to enter user 'foobar' with password '12345'.
|
||||
|
||||
To post to this, you enter a curl command line like:
|
||||
|
||||
curl -d "user=foobar&pass=12345&id=blablabla&ding=submit" (continues)
|
||||
http://www.formpost.com/getthis/post.cgi
|
||||
|
||||
|
||||
While -d uses the application/x-www-form-urlencoded mime-type, generally
|
||||
understood by CGI's and similar, curl also supports the more capable
|
||||
multipart/form-data type. This latter type supports things like file upload.
|
||||
|
||||
-F accepts parameters like -F "name=contents". If you want the contents to
|
||||
be read from a file, use <@filename> as contents. When specifying a file,
|
||||
you can also specify which content type the file is, by appending
|
||||
';type=<mime type>' to the file name. You can also post contents of several
|
||||
files in one field. So that the field name 'coolfiles' can be sent three
|
||||
files with different content types in a manner similar to:
|
||||
you can also specify the file content type by appending ';type=<mime type>'
|
||||
to the file name. You can also post the contents of several files in one
|
||||
field. For example, the field name 'coolfiles' is used to send three files,
|
||||
with different content types using the following syntax:
|
||||
|
||||
curl -F "coolfiles=@fil1.gif;type=image/gif,fil2.txt,fil3.html" \
|
||||
http://www.post.com/postit.cgi
|
||||
|
||||
If content-type is not specified, curl will try to guess from the extension
|
||||
(it only knows a few), or use the previously specified type (from an earlier
|
||||
file if several files are specified in a list) or finally using the default
|
||||
type 'text/plain'.
|
||||
If the content-type is not specified, curl will try to guess from the file
|
||||
extension (it only knows a few), or use the previously specified type (from
|
||||
an earlier file if several files are specified in a list) or else it will
|
||||
using the default type 'text/plain'.
|
||||
|
||||
Emulate a fill-in form with -F. Let's say you fill in three fields in a
|
||||
form. One field is a file name which to post, one field is your name and one
|
||||
field is a file description. We want to post the file we have written named
|
||||
"cooltext.txt". To let curl do the posting of this data instead of your
|
||||
favourite browser, you have to check out the HTML of the form page to get to
|
||||
know the names of the input fields. In our example, the input field names are
|
||||
'file', 'yourname' and 'filedescription'.
|
||||
favourite browser, you have to read the HTML source of the form page and
|
||||
find the names of the input fields. In our example, the input field names
|
||||
are 'file', 'yourname' and 'filedescription'.
|
||||
|
||||
curl -F "file=@cooltext.txt" -F "yourname=Daniel" \
|
||||
-F "filedescription=Cool text file with cool text inside" \
|
||||
http://www.post.com/postit.cgi
|
||||
|
||||
So, to send two files in one post you can do it in two ways:
|
||||
To send two files in one post you can do it in two ways:
|
||||
|
||||
1. Send multiple files in a single "field" with a single field name:
|
||||
|
||||
@@ -235,16 +288,18 @@ POST (HTTP)
|
||||
|
||||
curl -F "docpicture=@dog.gif" -F "catpicture=@cat.gif"
|
||||
|
||||
REFERER
|
||||
REFERRER
|
||||
|
||||
A HTTP request has the option to include information about which address
|
||||
that referred to actual page, and curl allows the user to specify that
|
||||
referrer to get specified on the command line. It is especially useful to
|
||||
that referred to actual page. Curl allows you to specify the
|
||||
referrer to be used on the command line. It is especially useful to
|
||||
fool or trick stupid servers or CGI scripts that rely on that information
|
||||
being available or contain certain data.
|
||||
|
||||
curl -e www.coolsite.com http://www.showme.com/
|
||||
|
||||
NOTE: The referer field is defined in the HTTP spec to be a full URL.
|
||||
|
||||
USER AGENT
|
||||
|
||||
A HTTP request has the option to include information about the browser
|
||||
@@ -303,16 +358,31 @@ COOKIES
|
||||
|
||||
curl -b headers www.example.com
|
||||
|
||||
While saving headers to a file is a working way to store cookies, it is
|
||||
however error-prone and not the prefered way to do this. Instead, make curl
|
||||
save the incoming cookies using the well-known netscape cookie format like
|
||||
this:
|
||||
|
||||
curl -c cookies.txt www.example.com
|
||||
|
||||
Note that by specifying -b you enable the "cookie awareness" and with -L
|
||||
you can make curl follow a location: (which often is used in combination
|
||||
with cookies). So that if a site sends cookies and a location, you can
|
||||
use a non-existing file to trig the cookie awareness like:
|
||||
use a non-existing file to trigger the cookie awareness like:
|
||||
|
||||
curl -L -b empty-file www.example.com
|
||||
curl -L -b empty.txt www.example.com
|
||||
|
||||
The file to read cookies from must be formatted using plain HTTP headers OR
|
||||
as netscape's cookie file. Curl will determine what kind it is based on the
|
||||
file contents.
|
||||
file contents. In the above command, curl will parse the header and store
|
||||
the cookies received from www.example.com. curl will send to the server the
|
||||
stored cookies which match the request as it follows the location. The
|
||||
file "empty.txt" may be a non-existant file.
|
||||
|
||||
Alas, to both read and write cookies from a netscape cookie file, you can
|
||||
set both -b and -c to use the same file:
|
||||
|
||||
curl -b cookies.txt -c cookies.txt www.example.com
|
||||
|
||||
PROGRESS METER
|
||||
|
||||
@@ -345,35 +415,66 @@ PROGRESS METER
|
||||
|
||||
SPEED LIMIT
|
||||
|
||||
Curl offers the user to set conditions regarding transfer speed that must
|
||||
be met to let the transfer keep going. By using the switch -y and -Y you
|
||||
can make curl abort transfers if the transfer speed doesn't exceed your
|
||||
given lowest limit for a specified time.
|
||||
Curl allows the user to set the transfer speed conditions that must be met
|
||||
to let the transfer keep going. By using the switch -y and -Y you
|
||||
can make curl abort transfers if the transfer speed is below the specified
|
||||
lowest limit for a specified time.
|
||||
|
||||
To let curl abandon downloading this page if its slower than 3000 bytes per
|
||||
To have curl abort the download if the speed is slower than 3000 bytes per
|
||||
second for 1 minute, run:
|
||||
|
||||
curl -y 3000 -Y 60 www.far-away-site.com
|
||||
curl -Y 3000 -y 60 www.far-away-site.com
|
||||
|
||||
This can very well be used in combination with the overall time limit, so
|
||||
that the above operatioin must be completed in whole within 30 minutes:
|
||||
|
||||
curl -m 1800 -y 3000 -Y 60 www.far-away-site.com
|
||||
curl -m 1800 -Y 3000 -y 60 www.far-away-site.com
|
||||
|
||||
Forcing curl not to transfer data faster than a given rate is also possible,
|
||||
which might be useful if you're using a limited bandwidth connection and you
|
||||
don't want your transfer to use all of it (sometimes referred to as
|
||||
"bandwith throttle").
|
||||
|
||||
Make curl transfer data no faster than 10 kilobytes per second:
|
||||
|
||||
curl --limit-rate 10K www.far-away-site.com
|
||||
|
||||
or
|
||||
|
||||
curl --limit-rate 10240 www.far-away-site.com
|
||||
|
||||
Or prevent curl from uploading data faster than 1 megabyte per second:
|
||||
|
||||
curl -T upload --limit-rate 1M ftp://uploadshereplease.com
|
||||
|
||||
When using the --limit-rate option, the transfer rate is regulated on a
|
||||
per-second basis, which will cause the total transfer speed to become lower
|
||||
than the given number. Sometimes of course substantially lower, if your
|
||||
transfer stalls during periods.
|
||||
|
||||
CONFIG FILE
|
||||
|
||||
Curl automatically tries to read the .curlrc file (or _curlrc file on win32
|
||||
systems) from the user's home dir on startup. The config file should be
|
||||
made up with normal command line switches. Comments can be used within the
|
||||
file. If the first letter on a line is a '#'-letter the rest of the line
|
||||
is treated as a comment.
|
||||
systems) from the user's home dir on startup.
|
||||
|
||||
The config file could be made up with normal command line switches, but you
|
||||
can also specify the long options without the dashes to make it more
|
||||
readable. You can separate the options and the parameter with spaces, or
|
||||
with = or :. Comments can be used within the file. If the first letter on a
|
||||
line is a '#'-letter the rest of the line is treated as a comment.
|
||||
|
||||
If you want the parameter to contain spaces, you must inclose the entire
|
||||
parameter within double quotes ("). Within those quotes, you specify a
|
||||
quote as \".
|
||||
|
||||
NOTE: You must specify options and their arguments on the same line.
|
||||
|
||||
Example, set default time out and proxy in a config file:
|
||||
|
||||
# We want a 30 minute timeout:
|
||||
-m 1800
|
||||
# ... and we use a proxy for all accesses:
|
||||
-x proxy.our.domain.com:8080
|
||||
proxy = proxy.our.domain.com:8080
|
||||
|
||||
White spaces ARE significant at the end of lines, but all white spaces
|
||||
leading up to the first characters of each line are ignored.
|
||||
@@ -387,14 +488,14 @@ CONFIG FILE
|
||||
without URL by making a config file similar to:
|
||||
|
||||
# default url to get
|
||||
http://help.with.curl.com/curlhelp.html
|
||||
url = "http://help.with.curl.com/curlhelp.html"
|
||||
|
||||
You can specify another config file to be read by using the -K/--config
|
||||
flag. If you set config file name to "-" it'll read the config from stdin,
|
||||
which can be handy if you want to hide options from being visible in process
|
||||
tables etc:
|
||||
|
||||
echo "-u user:passwd" | curl -K - http://that.secret.site.com
|
||||
echo "user = user:passwd" | curl -K - http://that.secret.site.com
|
||||
|
||||
EXTRA HEADERS
|
||||
|
||||
@@ -407,9 +508,13 @@ EXTRA HEADERS
|
||||
|
||||
curl -H "X-you-and-me: yes" www.love.com
|
||||
|
||||
This can also be useful in case you want curl to send a different text in
|
||||
a header than it normally does. The -H header you specify then replaces the
|
||||
header curl would normally send.
|
||||
This can also be useful in case you want curl to send a different text in a
|
||||
header than it normally does. The -H header you specify then replaces the
|
||||
header curl would normally send. If you replace an internal header with an
|
||||
empty one, you prevent that header from being sent. To prevent the Host:
|
||||
header from being used:
|
||||
|
||||
curl -H "Host:" www.server.com
|
||||
|
||||
FTP and PATH NAMES
|
||||
|
||||
@@ -445,13 +550,14 @@ FTP and firewalls
|
||||
connect to the client on the given (as parameters to the PORT command) IP
|
||||
number and port.
|
||||
|
||||
The -P flag to curl allows for different options. Your machine may have
|
||||
The -P flag to curl supports a few different options. Your machine may have
|
||||
several IP-addresses and/or network interfaces and curl allows you to select
|
||||
which of them to use. Default address can also be used:
|
||||
|
||||
curl -P - ftp.download.com
|
||||
|
||||
Download with PORT but use the IP address of our 'le0' interface:
|
||||
Download with PORT but use the IP address of our 'le0' interface (this does
|
||||
not work on windows):
|
||||
|
||||
curl -P le0 ftp.download.com
|
||||
|
||||
@@ -459,6 +565,16 @@ FTP and firewalls
|
||||
|
||||
curl -P 192.168.0.10 ftp.download.com
|
||||
|
||||
NETWORK INTERFACE
|
||||
|
||||
Get a web page from a server using a specified port for the interface:
|
||||
|
||||
curl --interface eth0:1 http://www.netscape.com/
|
||||
|
||||
or
|
||||
|
||||
curl --interface 192.168.1.10 http://www.netscape.com/
|
||||
|
||||
HTTPS
|
||||
|
||||
Secure HTTP requires SSL libraries to be installed and used when curl is
|
||||
@@ -473,7 +589,7 @@ HTTPS
|
||||
from sites that require valid certificates. The only drawback is that the
|
||||
certificate needs to be in PEM-format. PEM is a standard and open format to
|
||||
store certificates with, but it is not used by the most commonly used
|
||||
browsers (Netscape and MSEI both use the so called PKCS#12 format). If you
|
||||
browsers (Netscape and MSIE both use the so called PKCS#12 format). If you
|
||||
want curl to use the certificates you use with your (favourite) browser, you
|
||||
may need to download/compile a converter that can convert your browser's
|
||||
formatted certificates to PEM formatted ones. This kind of converter is
|
||||
@@ -492,13 +608,33 @@ HTTPS
|
||||
|
||||
Many older SSL-servers have problems with SSLv3 or TLS, that newer versions
|
||||
of OpenSSL etc is using, therefore it is sometimes useful to specify what
|
||||
SSL-version curl should use. Use -3 or -2 to specify that exact SSL version
|
||||
to use:
|
||||
SSL-version curl should use. Use -3, -2 or -1 to specify that exact SSL
|
||||
version to use (for SSLv3, SSLv2 or TLSv1 respectively):
|
||||
|
||||
curl -2 https://secure.site.com/
|
||||
|
||||
Otherwise, curl will first attempt to use v3 and then v2.
|
||||
|
||||
To use OpenSSL to convert your favourite browser's certificate into a PEM
|
||||
formatted one that curl can use, do something like this (assuming netscape,
|
||||
but IE is likely to work similarly):
|
||||
|
||||
You start with hitting the 'security' menu button in netscape.
|
||||
|
||||
Select 'certificates->yours' and then pick a certificate in the list
|
||||
|
||||
Press the 'export' button
|
||||
|
||||
enter your PIN code for the certs
|
||||
|
||||
select a proper place to save it
|
||||
|
||||
Run the 'openssl' application to convert the certificate. If you cd to the
|
||||
openssl installation, you can do it like:
|
||||
|
||||
# ./apps/openssl pkcs12 -in [file you saved] -clcerts -out [PEMfile]
|
||||
|
||||
|
||||
RESUMING FILE TRANSFERS
|
||||
|
||||
To continue a file transfer where it was previously aborted, curl supports
|
||||
@@ -506,20 +642,20 @@ RESUMING FILE TRANSFERS
|
||||
|
||||
Continue downloading a document:
|
||||
|
||||
curl -c -o file ftp://ftp.server.com/path/file
|
||||
curl -C - -o file ftp://ftp.server.com/path/file
|
||||
|
||||
Continue uploading a document(*1):
|
||||
|
||||
curl -c -T file ftp://ftp.server.com/path/file
|
||||
curl -C - -T file ftp://ftp.server.com/path/file
|
||||
|
||||
Continue downloading a document from a web server(*2):
|
||||
|
||||
curl -c -o file http://www.server.com/
|
||||
curl -C - -o file http://www.server.com/
|
||||
|
||||
(*1) = This requires that the ftp server supports the non-standard command
|
||||
SIZE. If it doesn't, curl will say so.
|
||||
|
||||
(*2) = This requires that the wb server supports at least HTTP/1.1. If it
|
||||
(*2) = This requires that the web server supports at least HTTP/1.1. If it
|
||||
doesn't, curl will say so.
|
||||
|
||||
TIME CONDITIONS
|
||||
@@ -573,8 +709,14 @@ LDAP
|
||||
and offer ldap:// support.
|
||||
|
||||
LDAP is a complex thing and writing an LDAP query is not an easy task. I do
|
||||
advice you to dig up the syntax description for that elsewhere, RFC 1959 if
|
||||
no other place is better.
|
||||
advice you to dig up the syntax description for that elsewhere. Two places
|
||||
that might suit you are:
|
||||
|
||||
Netscape's "Netscape Directory SDK 3.0 for C Programmer's Guide Chapter 10:
|
||||
Working with LDAP URLs":
|
||||
http://developer.netscape.com/docs/manuals/dirsdk/csdk30/url.htm
|
||||
|
||||
RFC 2255, "The LDAP URL Format" http://www.rfc-editor.org/rfc/rfc2255.txt
|
||||
|
||||
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:
|
||||
@@ -588,7 +730,7 @@ ENVIRONMENT VARIABLES
|
||||
|
||||
Curl reads and understands the following environment variables:
|
||||
|
||||
HTTP_PROXY, HTTPS_PROXY, FTP_PROXY, GOPHER_PROXY
|
||||
http_proxy, HTTPS_PROXY, FTP_PROXY, GOPHER_PROXY
|
||||
|
||||
They should be set for protocol-specific proxies. General proxy should be
|
||||
set with
|
||||
@@ -615,13 +757,13 @@ NETRC
|
||||
passwords, so therefor most unix programs won't read this file unless it is
|
||||
only readable by yourself (curl doesn't care though).
|
||||
|
||||
Curl supports .netrc files if told so (using the -n/--netrc option). This is
|
||||
not restricted to only ftp, but curl can use it for all protocols where
|
||||
authentication is used.
|
||||
Curl supports .netrc files if told so (using the -n/--netrc and
|
||||
--netrc-optional options). This is not restricted to only ftp,
|
||||
but curl can use it for all protocols where authentication is used.
|
||||
|
||||
A very simple .netrc file could look something like:
|
||||
|
||||
machine curl.haxx.nu login iamdaniel password mysecret
|
||||
machine curl.haxx.se login iamdaniel password mysecret
|
||||
|
||||
CUSTOM OUTPUT
|
||||
|
||||
@@ -634,16 +776,104 @@ CUSTOM OUTPUT
|
||||
|
||||
curl -w 'We downloaded %{size_download} bytes\n' www.download.com
|
||||
|
||||
MAILING LIST
|
||||
KERBEROS4 FTP TRANSFER
|
||||
|
||||
We have an open mailing list to discuss curl, its development and things
|
||||
relevant to this.
|
||||
Curl supports kerberos4 for FTP transfers. You need the kerberos package
|
||||
installed and used at curl build time for it to be used.
|
||||
|
||||
To subscribe, mail curl-request@contactor.se with "subscribe <your email
|
||||
address>" in the body.
|
||||
First, get the krb-ticket the normal way, like with the kauth tool. Then use
|
||||
curl in way similar to:
|
||||
|
||||
To post to the list, mail curl@contactor.se.
|
||||
curl --krb4 private ftp://krb4site.com -u username:fakepwd
|
||||
|
||||
To unsubcribe, mail curl-request@contactor.se with "unsubscribe <your
|
||||
subscribed email address>" in the body.
|
||||
There's no use for a password on the -u switch, but a blank one will make
|
||||
curl ask for one and you already entered the real password to kauth.
|
||||
|
||||
TELNET
|
||||
|
||||
The curl telnet support is basic and very easy to use. Curl passes all data
|
||||
passed to it on stdin to the remote server. Connect to a remote telnet
|
||||
server using a command line similar to:
|
||||
|
||||
curl telnet://remote.server.com
|
||||
|
||||
And enter the data to pass to the server on stdin. The result will be sent
|
||||
to stdout or to the file you specify with -o.
|
||||
|
||||
You might want the -N/--no-buffer option to switch off the buffered output
|
||||
for slow connections or similar.
|
||||
|
||||
Pass options to the telnet protocol negotiation, by using the -t option. To
|
||||
tell the server we use a vt100 terminal, try something like:
|
||||
|
||||
curl -tTTYPE=vt100 telnet://remote.server.com
|
||||
|
||||
Other interesting options for it -t include:
|
||||
|
||||
- XDISPLOC=<X display> Sets the X display location.
|
||||
|
||||
- NEW_ENV=<var,val> Sets an environment variable.
|
||||
|
||||
NOTE: the telnet protocol does not specify any way to login with a specified
|
||||
user and password so curl can't do that automatically. To do that, you need
|
||||
to track when the login prompt is received and send the username and
|
||||
password accordingly.
|
||||
|
||||
PERSISTANT CONNECTIONS
|
||||
|
||||
Specifying multiple files on a single command line will make curl transfer
|
||||
all of them, one after the other in the specified order.
|
||||
|
||||
libcurl will attempt to use persistant connections for the transfers so that
|
||||
the second transfer to the same host can use the same connection that was
|
||||
already initiated and was left open in the previous transfer. This greatly
|
||||
decreases connection time for all but the first transfer and it makes a far
|
||||
better use of the network.
|
||||
|
||||
Note that curl cannot use persistant connections for transfers that are used
|
||||
in subsequence curl invokes. Try to stuff as many URLs as possible on the
|
||||
same command line if they are using the same host, as that'll make the
|
||||
transfers faster. If you use a http proxy for file transfers, practicly
|
||||
all transfers will be persistant.
|
||||
|
||||
Persistant connections were introduced in curl 7.7.
|
||||
|
||||
MAILING LISTS
|
||||
|
||||
For your convenience, we have several open mailing lists to discuss curl,
|
||||
its development and things relevant to this. Get all info at
|
||||
http://curl.haxx.se/mail/. The lists available are:
|
||||
|
||||
curl-users
|
||||
|
||||
Users of the command line tool. How to use it, what doesn't work, new
|
||||
features, related tools, questions, news, installations, compilations,
|
||||
running, porting etc.
|
||||
|
||||
curl-library
|
||||
|
||||
Developers using or developing libcurl. Bugs, extensions, improvements.
|
||||
|
||||
curl-announce
|
||||
|
||||
Low-traffic. Only announcements of new public versions.
|
||||
|
||||
curl-and-PHP
|
||||
|
||||
Using the curl functions in PHP. Everything curl with a PHP angle. Or PHP
|
||||
with a curl angle.
|
||||
|
||||
curl-commits
|
||||
|
||||
Receives notifications on all CVS commits done to the curl source module.
|
||||
This can become quite a large amount of mails during intense development,
|
||||
be aware. This is for us who like email...
|
||||
|
||||
curl-www-commits
|
||||
|
||||
Receives notifications on all CVS commits done to the curl www module
|
||||
(basicly the web site). This can become quite a large amount of mails
|
||||
during intense changing, be aware. This is for us who like email...
|
||||
|
||||
Please direct curl questions, feature requests and trouble reports to one of
|
||||
these mailing lists instead of mailing any individual.
|
||||
48
docs/Makefile.am
Normal file
48
docs/Makefile.am
Normal file
@@ -0,0 +1,48 @@
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
|
||||
AUTOMAKE_OPTIONS = foreign no-dependencies
|
||||
|
||||
man_MANS = \
|
||||
curl.1 \
|
||||
curl-config.1
|
||||
|
||||
HTMLPAGES = \
|
||||
curl.html \
|
||||
curl-config.html \
|
||||
index.html
|
||||
|
||||
PDFPAGES = \
|
||||
curl.pdf \
|
||||
curl-config.pdf
|
||||
|
||||
SUBDIRS = examples libcurl
|
||||
|
||||
EXTRA_DIST = MANUAL BUGS CONTRIBUTE FAQ FEATURES INTERNALS SSLCERTS \
|
||||
README.win32 RESOURCES TODO TheArtOfHttpScripting THANKS \
|
||||
VERSIONS KNOWN_BUGS BINDINGS $(man_MANS) $(HTMLPAGES) \
|
||||
HISTORY INSTALL libcurl-the-guide $(PDFPAGES)
|
||||
|
||||
MAN2HTML= gnroff -man $< | man2html >$@
|
||||
|
||||
SUFFIXES = .1 .3 .html .pdf
|
||||
|
||||
html: $(HTMLPAGES)
|
||||
cd libcurl; make html
|
||||
|
||||
.3.html:
|
||||
$(MAN2HTML)
|
||||
|
||||
.1.html:
|
||||
$(MAN2HTML)
|
||||
|
||||
MAN2PDF = groff -Tps -man curl.1 $< >$@
|
||||
|
||||
pdf:
|
||||
for file in $(man_MANS); do \
|
||||
foo=`echo $$file | sed -e 's/\.[0-9]$$//g'`; \
|
||||
groff -Tps -man $$file >$$foo.ps; \
|
||||
ps2pdf $$foo.ps $$foo.pdf; \
|
||||
done
|
||||
cd libcurl; make pdf
|
||||
22
docs/README.win32
Normal file
22
docs/README.win32
Normal file
@@ -0,0 +1,22 @@
|
||||
_ _ ____ _
|
||||
___| | | | _ \| |
|
||||
/ __| | | | |_) | |
|
||||
| (__| |_| | _ <| |___
|
||||
\___|\___/|_| \_\_____|
|
||||
|
||||
README.win32
|
||||
|
||||
Read the README file first.
|
||||
|
||||
Curl has been compiled, built and run on all sorts of Windows and win32
|
||||
systems. While not being the main develop target, a fair share of curl users
|
||||
are win32-based.
|
||||
|
||||
The unix-style man pages are tricky to read on windows, so therefore are all
|
||||
those pages converted to HTML as well as pdf, and included in the release
|
||||
archives.
|
||||
|
||||
The main curl.1 man page is also "built-in" in the command line tool. Use a
|
||||
command line similar to this in order to extract a separate text file:
|
||||
|
||||
curl -M >manual.txt
|
||||
124
docs/RESOURCES
Normal file
124
docs/RESOURCES
Normal file
@@ -0,0 +1,124 @@
|
||||
_ _ ____ _
|
||||
Project ___| | | | _ \| |
|
||||
/ __| | | | |_) | |
|
||||
| (__| |_| | _ <| |___
|
||||
\___|\___/|_| \_\_____|
|
||||
|
||||
|
||||
This document lists documents that specify standards used by curl, software
|
||||
that extends curl, web pages with similar utilities and information pages that
|
||||
describe some of the tools that we use to build/compile/develop curl.
|
||||
|
||||
Standards
|
||||
---------
|
||||
|
||||
RFC 959 - Defines how FTP works
|
||||
|
||||
RFC 1635 - How to Use Anonymous FTP
|
||||
|
||||
RFC 1738 - Uniform Resource Locators
|
||||
|
||||
RFC 1777 - defines the LDAP protocol
|
||||
|
||||
RFC 1808 - Relative Uniform Resource Locators
|
||||
|
||||
RFC 1867 - Form-based File Upload in HTML
|
||||
|
||||
RFC 1950 - ZLIB Compressed Data Format Specification
|
||||
|
||||
RFC 1951 - DEFLATE Compressed Data Format Specification
|
||||
|
||||
RFC 1952 - gzip compression format
|
||||
|
||||
RFC 1959 - LDAP URL syntax
|
||||
|
||||
RFC 2045-2049 - Everything you need to know about MIME! (needed for form
|
||||
based upload)
|
||||
|
||||
RFC 2068 - HTTP 1.1 (obsoleted by RFC 2616)
|
||||
|
||||
RFC 2109 - HTTP State Management Mechanism (cookie stuff)
|
||||
- Also, read Netscape's specification at
|
||||
http://curl.haxx.se/rfc/cookie_spec.html
|
||||
|
||||
RFC 2183 - The Content-Disposition Header Field
|
||||
|
||||
RFC 2229 - A Dictionary Server Protocol
|
||||
|
||||
RFC 2255 - Newer LDAP URL syntax document.
|
||||
|
||||
RFC 2231 - MIME Parameter Value and Encoded Word Extensions:
|
||||
Character Sets, Languages, and Continuations
|
||||
|
||||
RFC 2388 - "Returning Values from Forms: multipart/form-data"
|
||||
Use this as an addition to the RFC1867
|
||||
|
||||
RFC 2396 - "Uniform Resource Identifiers: Generic Syntax and Semantics" This
|
||||
one obsoletes RFC 1738, but since RFC 1738 is often mentioned
|
||||
I've left it in this list.
|
||||
|
||||
RFC 2428 - FTP Extensions for IPv6 and NATs
|
||||
|
||||
RFC 2577 - FTP Security Considerations
|
||||
|
||||
RFC 2616 - HTTP 1.1, the latest
|
||||
|
||||
RFC 2617 - HTTP Authentication
|
||||
|
||||
RFC 2718 - Guidelines for new URL Schemes
|
||||
|
||||
RFC 2732 - Format for Literal IPv6 Addresses in URL's
|
||||
|
||||
RFC 2818 - HTTP Over TLS (TLS is the successor to SSL)
|
||||
|
||||
RFC 2964 - Use of HTTP State Management
|
||||
|
||||
RFC 2965 - HTTP State Management Mechanism. Cookies. Obsoletes RFC2109
|
||||
|
||||
Compilers
|
||||
---------
|
||||
MingW32 - http://www.mingw.org/
|
||||
|
||||
gcc - http://www.gnu.org/software/gcc/gcc.html
|
||||
|
||||
Software
|
||||
--------
|
||||
OpenSSL - http://www.openssl.org/
|
||||
|
||||
OpenLDAP - http://www.openldap.org/
|
||||
|
||||
zlib - http://www.cdrom.com/pub/infozip/zlib/
|
||||
|
||||
Similar Tools
|
||||
-------------
|
||||
wget - http://sunsite.dk/wget/
|
||||
|
||||
snarf - http://www.xach.com/snarf/
|
||||
|
||||
lynx - http://lynx.browser.org/ (well at least when -dump is used)
|
||||
|
||||
swebget - http://www.uni-hildesheim.de/~smol0075/swebget/
|
||||
|
||||
Kermit - http://www.columbia.edu/kermit/ftpclient
|
||||
|
||||
Pavuk - http://www.idata.sk/~ondrej/pavuk/
|
||||
|
||||
httpr - http://zwolak.dhs.org/httpr/
|
||||
|
||||
puf - http://www.inf.tu-dresden.de/~ob6/sw/puf.html
|
||||
|
||||
Related Software
|
||||
----------------
|
||||
ftpparse - http://cr.yp.to/ftpparse.html parses FTP LIST responses
|
||||
|
||||
autoconf - http://www.gnu.org/software/autoconf/autoconf.html
|
||||
|
||||
automake - http://www.gnu.org/software/automake/automake.html
|
||||
|
||||
bison - http://www.gnu.org/software/bison/bison.html
|
||||
|
||||
gzip - http://www.gnu.org/software/gzip/gzip.html
|
||||
|
||||
tar - http://www.gnu.org/software/tar/tar.html
|
||||
|
||||
libtool - http://www.gnu.org/software/libtool/libtool.html
|
||||
39
docs/SSLCERTS
Normal file
39
docs/SSLCERTS
Normal file
@@ -0,0 +1,39 @@
|
||||
Peer SSL Certificate Verification
|
||||
=================================
|
||||
|
||||
Starting in 7.10, libcurl performs peer SSL certificate verification by
|
||||
default. This is done by installing a default CA cert bundle on 'make install'
|
||||
(or similar), that CA bundle package is used by default on operations against
|
||||
SSL servers.
|
||||
|
||||
Alas, if you communicate with HTTPS servers using certificates that are signed
|
||||
by CAs present in the bundle, you will not notice any changed behavior and you
|
||||
will seamlessly get a higher security level on your SSL connections since you
|
||||
can be sure that the remote server really is the one it claims to be.
|
||||
|
||||
If the remote server uses a self-signed certificate, or if you don't install
|
||||
curl's CA cert bundle or if it uses a certificate signed by a CA that isn't
|
||||
included in the bundle, then you need to do one of the following:
|
||||
|
||||
1. Tell libcurl to *not* verify the peer. With libcurl you disable with with
|
||||
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, FALSE);
|
||||
|
||||
With the curl command tool, you disable this with -k/--insecure.
|
||||
|
||||
2. Get a CA certificate that can verify the remote server and use the proper
|
||||
option to point out this CA cert for verification when connecting. For
|
||||
libcurl hackers: curl_easy_setopt(curl, CURLOPT_CAPATH, capath);
|
||||
|
||||
With the curl command tool: --cacert [file]
|
||||
|
||||
Neglecting to use one of the above menthods when dealing with a server using a
|
||||
certficate that isn't signed by one of the certficates in the installed CA
|
||||
cert bundle, will cause SSL to report an error ("certificate verify failed")
|
||||
during the handshake and SSL will then refuse further communication with that
|
||||
server.
|
||||
|
||||
This procedure has been deemed The Right Thing even though it adds this extra
|
||||
trouble for some users, since it adds security to a majority of the SSL
|
||||
connections that previously weren't really secure. It turned out many people
|
||||
were using previous versions of curl/libcurl without realizing the need for
|
||||
the CA cert options to get truly secure SSL connections.
|
||||
93
docs/THANKS
Normal file
93
docs/THANKS
Normal file
@@ -0,0 +1,93 @@
|
||||
This project has been alive for several years. Countless people have provided
|
||||
feedback that have improved curl. Here follows a (incomplete) list of people
|
||||
that have contributed with non-trivial parts:
|
||||
|
||||
- Daniel Stenberg <daniel@haxx.se>
|
||||
- Rafael Sagula <sagula@inf.ufrgs.br>
|
||||
- Sampo Kellomaki <sampo@iki.fi>
|
||||
- Linas Vepstas <linas@linas.org>
|
||||
- Bjorn Reese <breese@mail1.stofanet.dk>
|
||||
- Johan Anderson <johan@homemail.com>
|
||||
- Kjell Ericson <Kjell.Ericson@haxx.se>
|
||||
- Troy Engel <tengel@sonic.net>
|
||||
- Ryan Nelson <ryan@inch.com>
|
||||
- Bj<42>rn Stenberg <bjorn@haxx.se>
|
||||
- Angus Mackay <amackay@gus.ml.org>
|
||||
- Eric Young <eay@cryptsoft.com>
|
||||
- Simon Dick <simond@totally.irrelevant.org>
|
||||
- Oren Tirosh <oren@monty.hishome.net>
|
||||
- Steven G. Johnson <stevenj@alum.mit.edu>
|
||||
- Gilbert Ramirez Jr. <gram@verdict.uthscsa.edu>
|
||||
- Andr<64>s Garc<72>a <ornalux@redestb.es>
|
||||
- Douglas E. Wegscheid <wegscd@whirlpool.com>
|
||||
- Mark Butler <butlerm@xmission.com>
|
||||
- Eric Thelin <eric@generation-i.com>
|
||||
- Marc Boucher <marc@mbsi.ca>
|
||||
- Greg Onufer <Greg.Onufer@Eng.Sun.COM>
|
||||
- Doug Kaufman <dkaufman@rahul.net>
|
||||
- David Eriksson <david@2good.com>
|
||||
- Ralph Beckmann <rabe@uni-paderborn.de>
|
||||
- T. Yamada <tai@imasy.or.jp>
|
||||
- Lars J. Aas <larsa@sim.no>
|
||||
- J<>rn Hartroth <Joern.Hartroth@computer.org>
|
||||
- Matthew Clarke <clamat@van.maves.ca>
|
||||
- Linus Nielsen Feltzing <linus@haxx.se>
|
||||
- Felix von Leitner <felix@convergence.de>
|
||||
- Dan Zitter <dzitter@zitter.net>
|
||||
- Jongki Suwandi <Jongki.Suwandi@eng.sun.com>
|
||||
- Chris Maltby <chris@aurema.com>
|
||||
- Ron Zapp <rzapper@yahoo.com>
|
||||
- Paul Marquis <pmarquis@iname.com>
|
||||
- Ellis Pritchard <ellis@citria.com>
|
||||
- Damien Adant <dams@usa.net>
|
||||
- Chris <cbayliss@csc.come>
|
||||
- Marco G. Salvagno <mgs@whiz.cjb.net>
|
||||
- Paul Marquis <pmarquis@iname.com>
|
||||
- David LeBlanc <dleblanc@qnx.com>
|
||||
- Rich Gray at Plus Technologies
|
||||
- Luong Dinh Dung <u8luong@lhsystems.hu>
|
||||
- Torsten Foertsch <torsten.foertsch@gmx.net>
|
||||
- Kristian K<>hntopp <kris@koehntopp.de>
|
||||
- Fred Noz <FNoz@siac.com>
|
||||
- Caolan McNamara <caolan@csn.ul.ie>
|
||||
- Albert Chin-A-Young <china@thewrittenword.com>
|
||||
- Stephen Kick <skick@epicrealm.com>
|
||||
- Martin Hedenfalk <mhe@stacken.kth.se>
|
||||
- Richard Prescott <rip at step.polymtl.ca>
|
||||
- Jason S. Priebe <priebe@wral-tv.com>
|
||||
- T. Bharath <TBharath@responsenetworks.com>
|
||||
- Alexander Kourakos <awk@users.sourceforge.net>
|
||||
- James Griffiths <griffiths_james@yahoo.com>
|
||||
- Loic Dachary <loic@senga.org>
|
||||
- Robert Weaver <robert.weaver@sabre.com>
|
||||
- Ingo Ralf Blum <ingoralfblum@ingoralfblum.com>
|
||||
- Jun-ichiro itojun Hagino <itojun@iijlab.net>
|
||||
- Frederic Lepied <flepied@mandrakesoft.com>
|
||||
- Georg Horn <horn@koblenz-net.de>
|
||||
- Cris Bailiff <c.bailiff@awayweb.com>
|
||||
- Sterling Hughes <sterling@designmultimedia.com>
|
||||
- S. Moonesamy
|
||||
- Ingo Wilken <iw@WWW.Ecce-Terram.DE>
|
||||
- Pawel A. Gajda <mis@k2.net.pl>
|
||||
- Patrick Bihan-Faou
|
||||
- Nico Baggus <Nico.Baggus@mail.ing.nl>
|
||||
- Sergio Ballestrero
|
||||
- Andrew Francis <locust@familyhealth.com.au>
|
||||
- Tomasz Lacki <Tomasz.Lacki@primark.pl>
|
||||
- Georg Huettenegger <georg@ist.org>
|
||||
- John Lask <johnlask@hotmail.com>
|
||||
- Eric Lavigne <erlavigne@wanadoo.fr>
|
||||
- Marcus Webster <marcus.webster@phocis.com>
|
||||
- G<>tz Babin-Ebell <babin<69>ebell@trustcenter.de>
|
||||
- Andreas Damm <andreas-sourceforge@radab.org>
|
||||
- Jacky Lam <sylam@emsoftltd.com>
|
||||
- James Gallagher <jgallagher@gso.uri.edu>
|
||||
- Kjetil Jacobsen <kjetilja@cs.uit.no>
|
||||
- Markus F.X.J. Oberhumer <markus@oberhumer.com>
|
||||
- Miklos Nemeth <mnemeth@kfkisystems.com>
|
||||
- Kevin Roth <kproth@users.sourceforge.net>
|
||||
- Ralph Mitchell <rmitchell@eds.com>
|
||||
- Dan Fandrich <dan@coneharvesters.com>
|
||||
- Jean-Philippe Barrette-LaPierre <jpb@rrette.com>
|
||||
- Richard Bramante <RBramante@on.com>
|
||||
- Daniel Kouril <kouril@ics.muni.cz>
|
||||
194
docs/TODO
Normal file
194
docs/TODO
Normal file
@@ -0,0 +1,194 @@
|
||||
_ _ ____ _
|
||||
___| | | | _ \| |
|
||||
/ __| | | | |_) | |
|
||||
| (__| |_| | _ <| |___
|
||||
\___|\___/|_| \_\_____|
|
||||
|
||||
TODO
|
||||
|
||||
Things to do in project cURL. Please tell us what you think, contribute and
|
||||
send us patches that improve things! Also check the http://curl.haxx.se/dev
|
||||
web section for various technical development notes.
|
||||
|
||||
LIBCURL
|
||||
|
||||
* Introduce an interface to libcurl that allows applications to easier get to
|
||||
know what cookies that are received. Pushing interface that calls a
|
||||
callback on each received cookie? Querying interface that asks about
|
||||
existing cookies? We probably need both. Enable applications to modify
|
||||
existing cookies as well. http://curl.haxx.se/dev/COOKIES
|
||||
|
||||
* Make content encoding/decoding internally be made using a filter system.
|
||||
|
||||
* Introduce another callback interface for upload/download that makes one
|
||||
less copy of data and thus a faster operation.
|
||||
[http://curl.haxx.se/dev/no_copy_callbacks.txt]
|
||||
|
||||
* Add asynchronous name resolving (http://libdenise.sf.net/). This should be
|
||||
made to work on most of the supported platforms, or otherwise it isn't
|
||||
really interesting.
|
||||
|
||||
* Data sharing. Tell which easy handles within a multi handle that should
|
||||
share cookies, connection cache, dns cache, ssl session cache. Full
|
||||
suggestion found here: http://curl.haxx.se/dev/sharing.txt
|
||||
|
||||
* Mutexes. By adding mutex callback support, the 'data sharing' mentioned
|
||||
above can be made between several easy handles running in different threads
|
||||
too. The actual mutex implementations will be left for the application to
|
||||
implement, libcurl will merely call 'getmutex' and 'leavemutex' callbacks.
|
||||
Part of the sharing suggestion at: http://curl.haxx.se/dev/sharing.txt
|
||||
|
||||
* Set the SO_KEEPALIVE socket option to make libcurl notice and disconnect
|
||||
very long time idle connections.
|
||||
|
||||
* Go through the code and verify that libcurl deals with big files >2GB and
|
||||
>4GB all over. Bug reports (and source reviews) indicate that it doesn't
|
||||
currently work properly.
|
||||
|
||||
* CURLOPT_MAXFILESIZE. Prevent downloads that are larger than the specified
|
||||
size. CURLE_FILESIZE_EXCEEDED would then be returned. Gautam Mani
|
||||
requested. That is, the download should not even begin but be aborted
|
||||
immediately.
|
||||
|
||||
LIBCURL - multi interface
|
||||
|
||||
* Make sure we don't ever loop because of non-blocking sockets return
|
||||
EWOULDBLOCK or similar. This FTP command sending, the SSL connection etc.
|
||||
|
||||
* 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
|
||||
time the socket is writable and there is no way to say that we want to
|
||||
upload data soon just not right now, without that aborting the upload. The
|
||||
opposite situation should be possible as well, that we tell libcurl we're
|
||||
ready to accept read data. Today libcurl feeds the data as soon as it is
|
||||
available for reading, no matter what.
|
||||
|
||||
DOCUMENTATION
|
||||
|
||||
* More and better
|
||||
|
||||
FTP
|
||||
|
||||
* Support the most common FTP proxies, Philip Newton provided a list
|
||||
allegedly from ncftp:
|
||||
http://curl.haxx.se/mail/archive-2003-04/0126.html
|
||||
|
||||
* Make CURLOPT_FTPPORT support an additional port number on the IP/if/name,
|
||||
like "blabla:[port]" or possibly even "blabla:[portfirst]-[portsecond]".
|
||||
|
||||
* FTP ASCII transfers do not follow RFC959. They don't convert the data
|
||||
accordingly.
|
||||
|
||||
* Since USERPWD always override the user and password specified in URLs, we
|
||||
might need another way to specify user+password for anonymous ftp logins.
|
||||
|
||||
* Add FTPS support with SSL for the data connection too. This should be made
|
||||
according to the specs written in draft-murray-auth-ftp-ssl-11.txt,
|
||||
"Securing FTP with TLS", valid until September 27th 2003.
|
||||
http://curl.haxx.se/rfc/draft-murray-auth-ftp-ssl-11.txt
|
||||
|
||||
HTTP
|
||||
|
||||
* Digest, NTLM and GSS-Negotiate support for HTTP proxies. They all work
|
||||
on direct-connections to the server.
|
||||
|
||||
* Pipelining. Sending multiple requests before the previous one(s) are done.
|
||||
This could possibly be implemented using the multi interface to queue
|
||||
requests and the response data.
|
||||
|
||||
TELNET
|
||||
|
||||
* Make TELNET work on windows98!
|
||||
|
||||
* Reading input (to send to the remote server) on stdin is a crappy solution
|
||||
for library purposes. We need to invent a good way for the application to
|
||||
be able to provide the data to send.
|
||||
|
||||
* Move the telnet support's network select() loop go away and merge the code
|
||||
into the main transfer loop. Until this is done, the multi interface won't
|
||||
work for telnet.
|
||||
|
||||
SSL
|
||||
|
||||
* If you really want to improve the SSL situation, you should probably have a
|
||||
look at SSL cafile loading as well - quick traces look to me like these are
|
||||
done on every request as well, when they should only be necessary once per
|
||||
ssl context (or once per handle). Even better would be to support the SSL
|
||||
CAdir option - instead of loading all of the root CA certs for every
|
||||
request, this option allows you to only read the CA chain that is actually
|
||||
required (into the cache)...
|
||||
|
||||
* Add an interface to libcurl that enables "session IDs" to get
|
||||
exported/imported. Cris Bailiff said: "OpenSSL has functions which can
|
||||
serialise the current SSL state to a buffer of your choice, and
|
||||
recover/reset the state from such a buffer at a later date - this is used
|
||||
by mod_ssl for apache to implement and SSL session ID cache". This whole
|
||||
idea might become moot if we enable the 'data sharing' as mentioned in the
|
||||
LIBCURL label above.
|
||||
|
||||
* OpenSSL supports a callback for customised verification of the peer
|
||||
certificate, but this doesn't seem to be exposed in the libcurl APIs. Could
|
||||
it be? There's so much that could be done if it were! (brought by Chris
|
||||
Clark)
|
||||
|
||||
* Make curl's SSL layer option capable of using other free SSL libraries.
|
||||
Such as the Mozilla Security Services
|
||||
(http://www.mozilla.org/projects/security/pki/nss/) and GNUTLS
|
||||
(http://gnutls.hellug.gr/)
|
||||
|
||||
LDAP
|
||||
|
||||
* Look over the implementation. The looping will have to "go away" from the
|
||||
lib/ldap.c source file and get moved to the main network code so that the
|
||||
multi interface and friends will work for LDAP as well.
|
||||
|
||||
CLIENT
|
||||
|
||||
* Add an option that prevents cURL from overwiting existing local files. When
|
||||
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
|
||||
existing). So that index.html becomes first index.html.1 and then
|
||||
index.html.2 etc. Jeff Pohlmeyer suggested.
|
||||
|
||||
* "curl ftp://site.com/*.txt"
|
||||
|
||||
* Several URLs can be specified to get downloaded. We should be able to use
|
||||
the same syntax to specify several files to get uploaded (using the same
|
||||
persistant connection), using -T.
|
||||
|
||||
* When the multi interface has been implemented and proved to work, the
|
||||
client could be told to use maximum N simultaneous transfers and then just
|
||||
make sure that happens. It should of course not make more than one
|
||||
connection to the same remote host.
|
||||
|
||||
* Extending the capabilities of the multipart formposting. How about leaving
|
||||
the ';type=foo' syntax as it is and adding an extra tag (headers) which
|
||||
works like this: curl -F "coolfiles=@fil1.txt;headers=@fil1.hdr" where
|
||||
fil1.hdr contains extra headers like
|
||||
|
||||
Content-Type: text/plain; charset=KOI8-R"
|
||||
Content-Transfer-Encoding: base64
|
||||
X-User-Comment: Please don't use browser specific HTML code
|
||||
|
||||
which should overwrite the program reasonable defaults (plain/text,
|
||||
8bit...) (Idea brough to us by kromJx)
|
||||
|
||||
TEST SUITE
|
||||
|
||||
* If perl wasn't found by the configure script, don't attempt to run the
|
||||
tests but explain something nice why it doesn't.
|
||||
|
||||
* Extend the test suite to include more protocols. The telnet could just do
|
||||
ftp or http operations (for which we have test servers).
|
||||
|
||||
* Make the test suite work on more platforms. OpenBSD and Mac OS. Remove
|
||||
fork()s and it should become even more portable.
|
||||
|
||||
* Introduce a test suite that tests libcurl better and more explicitly.
|
||||
|
||||
NEXT MAJOR RELEASE
|
||||
|
||||
* curl_easy_cleanup() returns void, but curl_multi_cleanup() returns a
|
||||
CURLMcode. These should be changed to be the same.
|
||||
|
||||
* curl_formparse() should be removed
|
||||
378
docs/TheArtOfHttpScripting
Normal file
378
docs/TheArtOfHttpScripting
Normal file
@@ -0,0 +1,378 @@
|
||||
Online: http://curl.haxx.se/docs/httpscripting.shtml
|
||||
Author: Daniel Stenberg <daniel@haxx.se>
|
||||
Date: October 31, 2001
|
||||
Version: 0.5
|
||||
|
||||
The Art Of Scripting HTTP Requests Using Curl
|
||||
=============================================
|
||||
|
||||
This document will assume that you're familiar with HTML and general
|
||||
networking.
|
||||
|
||||
The possibility to write scripts is essential to make a good computer
|
||||
system. Unix' capability to be extended by shell scripts and various tools to
|
||||
run various automated commands and scripts is one reason why it has succeeded
|
||||
so well.
|
||||
|
||||
The increasing amount of applications moving to the web has made "HTTP
|
||||
Scripting" more frequently requested and wanted. To be able to automatically
|
||||
extract information from the web, to fake users, to post or upload data to
|
||||
web servers are all important tasks today.
|
||||
|
||||
Curl is a command line tool for doing all sorts of URL manipulations and
|
||||
transfers, but this particular document will focus on how to use it when
|
||||
doing HTTP requests for fun and profit. I'll assume that you know how to
|
||||
invoke 'curl --help' or 'curl --manual' to get basic information about it.
|
||||
|
||||
Curl is not written to do everything for you. It makes the requests, it gets
|
||||
the data, it sends data and it retrieves the information. You probably need
|
||||
to glue everything together using some kind of script language or repeated
|
||||
manual invokes.
|
||||
|
||||
1. The HTTP Protocol
|
||||
|
||||
HTTP is the protocol used to fetch data from web servers. It is a very simple
|
||||
protocol that is built upon TCP/IP. The protocol also allows information to
|
||||
get sent to the server from the client using a few different methods, as will
|
||||
be shown here.
|
||||
|
||||
HTTP is plain ASCII text lines being sent by the client to a server to
|
||||
request a particular action, and then the server replies a few text lines
|
||||
before the actual requested content is sent to the client.
|
||||
|
||||
Using curl's option -v will display what kind of commands curl sends to the
|
||||
server, as well as a few other informational texts. -v is the single most
|
||||
useful option when it comes to debug or even understand the curl<->server
|
||||
interaction.
|
||||
|
||||
2. URL
|
||||
|
||||
The Uniform Resource Locator format is how you specify the address of a
|
||||
particular resource on the Internet. You know these, you've seen URLs like
|
||||
http://curl.haxx.se or https://yourbank.com a million times.
|
||||
|
||||
3. GET a page
|
||||
|
||||
The simplest and most common request/operation made using HTTP is to get a
|
||||
URL. The URL could itself refer to a web page, an image or a file. The client
|
||||
issues a GET request to the server and receives the document it asked for.
|
||||
If you issue the command line
|
||||
|
||||
curl http://curl.haxx.se
|
||||
|
||||
you get a web page returned in your terminal window. The entire HTML document
|
||||
that that URL holds.
|
||||
|
||||
All HTTP replies contain a set of headers that are normally hidden, use
|
||||
curl's -i option to display them as well as the rest of the document. You can
|
||||
also ask the remote server for ONLY the headers by using the -I option.
|
||||
|
||||
4. Forms
|
||||
|
||||
Forms are the general way a web site can present a HTML page with fields for
|
||||
the user to enter data in, and then press some kind of 'OK' or 'submit'
|
||||
button to get that data sent to the server. The server then typically uses
|
||||
the posted data to decide how to act. Like using the entered words to search
|
||||
in a database, or to add the info in a bug track system, display the entered
|
||||
address on a map or using the info as a login-prompt verifying that the user
|
||||
is allowed to see what it is about to see.
|
||||
|
||||
Of course there has to be some kind of program in the server end to receive
|
||||
the data you send. You cannot just invent something out of the air.
|
||||
|
||||
4.1 GET
|
||||
|
||||
A GET-form uses the method GET, as specified in HTML like:
|
||||
|
||||
<form method="GET" action="junk.cgi">
|
||||
<input type=text name="birthyear">
|
||||
<input type=submit name=press value="OK">
|
||||
</form>
|
||||
|
||||
In your favorite browser, this form will appear with a text box to fill in
|
||||
and a press-button labeled "OK". If you fill in '1905' and press the OK
|
||||
button, your browser will then create a new URL to get for you. The URL will
|
||||
get "junk.cgi?birthyear=1905&press=OK" appended to the path part of the
|
||||
previous URL.
|
||||
|
||||
If the original form was seen on the page "www.hotmail.com/when/birth.html",
|
||||
the second page you'll get will become
|
||||
"www.hotmail.com/when/junk.cgi?birthyear=1905&press=OK".
|
||||
|
||||
Most search engines work this way.
|
||||
|
||||
To make curl do the GET form post for you, just enter the expected created
|
||||
URL:
|
||||
|
||||
curl "www.hotmail.com/when/junk.cgi?birthyear=1905&press=OK"
|
||||
|
||||
4.2 POST
|
||||
|
||||
The GET method makes all input field names get displayed in the URL field of
|
||||
your browser. That's generally a good thing when you want to be able to
|
||||
bookmark that page with your given data, but it is an obvious disadvantage
|
||||
if you entered secret information in one of the fields or if there are a
|
||||
large amount of fields creating a very long and unreadable URL.
|
||||
|
||||
The HTTP protocol then offers the POST method. This way the client sends the
|
||||
data separated from the URL and thus you won't see any of it in the URL
|
||||
address field.
|
||||
|
||||
The form would look very similar to the previous one:
|
||||
|
||||
<form method="POST" action="junk.cgi">
|
||||
<input type=text name="birthyear">
|
||||
<input type=submit name=press value="OK">
|
||||
</form>
|
||||
|
||||
And to use curl to post this form with the same data filled in as before, we
|
||||
could do it like:
|
||||
|
||||
curl -d "birthyear=1905&press=OK" www.hotmail.com/when/junk.cgi
|
||||
|
||||
This kind of POST will use the Content-Type
|
||||
application/x-www-form-urlencoded and is the most widely used POST kind.
|
||||
|
||||
4.3 FILE UPLOAD POST
|
||||
|
||||
Back in late 1995 they defined a new way to post data over HTTP. It was
|
||||
documented in the RFC 1867, why this method sometimes is referred to as
|
||||
a RFC1867-posting.
|
||||
|
||||
This method is mainly designed to better support file uploads. A form that
|
||||
allows a user to upload a file could be written like this in HTML:
|
||||
|
||||
<form method="POST" enctype='multipart/form-data' action="upload.cgi">
|
||||
<input type=file name=upload>
|
||||
<input type=submit name=press value="OK">
|
||||
</form>
|
||||
|
||||
This clearly shows that the Content-Type about to be sent is
|
||||
multipart/form-data.
|
||||
|
||||
To post to a form like this with curl, you enter a command line like:
|
||||
|
||||
curl -F upload=@localfilename -F press=OK [URL]
|
||||
|
||||
4.4 HIDDEN FIELDS
|
||||
|
||||
A very common way for HTML based application to pass state information
|
||||
between pages is to add hidden fields to the forms. Hidden fields are
|
||||
already filled in, they aren't displayed to the user and they get passed
|
||||
along just as all the other fields.
|
||||
|
||||
A similar example form with one visible field, one hidden field and one
|
||||
submit button could look like:
|
||||
|
||||
<form method="POST" action="foobar.cgi">
|
||||
<input type=text name="birthyear">
|
||||
<input type=hidden name="person" value="daniel">
|
||||
<input type=submit name="press" value="OK">
|
||||
</form>
|
||||
|
||||
To post this with curl, you won't have to think about if the fields are
|
||||
hidden or not. To curl they're all the same:
|
||||
|
||||
curl -d "birthyear=1905&press=OK&person=daniel" [URL]
|
||||
|
||||
4.5 FIGURE OUT WHAT A POST LOOKS LIKE
|
||||
|
||||
When you're about fill in a form and send to a server by using curl instead
|
||||
of a browser, you're of course very interested in sending a POST exactly the
|
||||
way your browser does.
|
||||
|
||||
An easy way to get to see this, is to save the HTML page with the form on
|
||||
your local disk, modify the 'method' to a GET, and press the submit button
|
||||
(you could also change the action URL if you want to).
|
||||
|
||||
You will then clearly see the data get appended to the URL, separated with a
|
||||
'?'-letter as GET forms are supposed to.
|
||||
|
||||
5. PUT
|
||||
|
||||
The perhaps best way to upload data to a HTTP server is to use PUT. Then
|
||||
again, this of course requires that someone put a program or script on the
|
||||
server end that knows how to receive a HTTP PUT stream.
|
||||
|
||||
Put a file to a HTTP server with curl:
|
||||
|
||||
curl -T uploadfile www.uploadhttp.com/receive.cgi
|
||||
|
||||
6. AUTHENTICATION
|
||||
|
||||
Authentication is the ability to tell the server your username and password
|
||||
so that it can verify that you're allowed to do the request you're doing. The
|
||||
basic authentication used in HTTP is *plain* *text* based, which means it
|
||||
sends username and password only slightly obfuscated, but still fully
|
||||
readable by anyone that sniffs on the network between you and the remote
|
||||
server.
|
||||
|
||||
To tell curl to use a user and password for authentication:
|
||||
|
||||
curl -u name:password www.secrets.com
|
||||
|
||||
Sometimes your HTTP access is only available through the use of a HTTP
|
||||
proxy. This seems to be especially common at various companies. A HTTP proxy
|
||||
may require its own user and password to allow the client to get through to
|
||||
the Internet. To specify those with curl, run something like:
|
||||
|
||||
curl -U proxyuser:proxypassword curl.haxx.se
|
||||
|
||||
If you use any one these user+password options but leave out the password
|
||||
part, curl will prompt for the password interactively.
|
||||
|
||||
Do note that when a program is run, its parameters are possible to see when
|
||||
listing the running processes of the system. Thus, other users may be able to
|
||||
watch your passwords if you pass them as plain command line options. There
|
||||
are ways to circumvent this.
|
||||
|
||||
7. REFERER
|
||||
|
||||
A HTTP request may include a 'referer' field, which can be used to tell from
|
||||
which URL the client got to this particular resource. Some programs/scripts
|
||||
check the referer field of requests to verify that this wasn't arriving from
|
||||
an external site or an unknown page. While this is a stupid way to check
|
||||
something so easily forged, many scripts still do it. Using curl, you can put
|
||||
anything you want in the referer-field and thus more easily be able to fool
|
||||
the server into serving your request.
|
||||
|
||||
Use curl to set the referer field with:
|
||||
|
||||
curl -e http://curl.haxx.se daniel.haxx.se
|
||||
|
||||
8. USER AGENT
|
||||
|
||||
Very similar to the referer field, all HTTP requests may set the User-Agent
|
||||
field. It names what user agent (client) that is being used. Many
|
||||
applications use this information to decide how to display pages. Silly web
|
||||
programmers try to make different pages for users of different browsers to
|
||||
make them look the best possible for their particular browsers. They usually
|
||||
also do different kinds of javascript, vbscript etc.
|
||||
|
||||
At times, you will see that getting a page with curl will not return the same
|
||||
page that you see when getting the page with your browser. Then you know it
|
||||
is time to set the User Agent field to fool the server into thinking you're
|
||||
one of those browsers.
|
||||
|
||||
To make curl look like Internet Explorer on a Windows 2000 box:
|
||||
|
||||
curl -A "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)" [URL]
|
||||
|
||||
Or why not look like you're using Netscape 4.73 on a Linux (PIII) box:
|
||||
|
||||
curl -A "Mozilla/4.73 [en] (X11; U; Linux 2.2.15 i686)" [URL]
|
||||
|
||||
9. REDIRECTS
|
||||
|
||||
When a resource is requested from a server, the reply from the server may
|
||||
include a hint about where the browser should go next to find this page, or a
|
||||
new page keeping newly generated output. The header that tells the browser
|
||||
to redirect is Location:.
|
||||
|
||||
Curl does not follow Location: headers by default, but will simply display
|
||||
such pages in the same manner it display all HTTP replies. It does however
|
||||
feature an option that will make it attempt to follow the Location: pointers.
|
||||
|
||||
To tell curl to follow a Location:
|
||||
|
||||
curl -L www.sitethatredirects.com
|
||||
|
||||
If you use curl to POST to a site that immediately redirects you to another
|
||||
page, you can safely use -L and -d/-F together. Curl will only use POST in
|
||||
the first request, and then revert to GET in the following operations.
|
||||
|
||||
10. COOKIES
|
||||
|
||||
The way the web browsers do "client side state control" is by using
|
||||
cookies. Cookies are just names with associated contents. The cookies are
|
||||
sent to the client by the server. The server tells the client for what path
|
||||
and host name it wants the cookie sent back, and it also sends an expiration
|
||||
date and a few more properties.
|
||||
|
||||
When a client communicates with a server with a name and path as previously
|
||||
specified in a received cookie, the client sends back the cookies and their
|
||||
contents to the server, unless of course they are expired.
|
||||
|
||||
Many applications and servers use this method to connect a series of requests
|
||||
into a single logical session. To be able to use curl in such occasions, we
|
||||
must be able to record and send back cookies the way the web application
|
||||
expects them. The same way browsers deal with them.
|
||||
|
||||
The simplest way to send a few cookies to the server when getting a page with
|
||||
curl is to add them on the command line like:
|
||||
|
||||
curl -b "name=Daniel" www.cookiesite.com
|
||||
|
||||
Cookies are sent as common HTTP headers. This is practical as it allows curl
|
||||
to record cookies simply by recording headers. Record cookies with curl by
|
||||
using the -D option like:
|
||||
|
||||
curl -D headers_and_cookies www.cookiesite.com
|
||||
|
||||
Curl has a full blown cookie parsing engine built-in that comes to use if you
|
||||
want to reconnect to a server and use cookies that were stored from a
|
||||
previous connection (or handicrafted manually to fool the server into
|
||||
believing you had a previous connection). To use previously stored cookies,
|
||||
you run curl like:
|
||||
|
||||
curl -b stored_cookies_in_file www.cookiesite.com
|
||||
|
||||
Curl's "cookie engine" gets enabled when you use the -b option. If you only
|
||||
want curl to understand received cookies, use -b with a file that doesn't
|
||||
exist. Example, if you want to let curl understand cookies from a page and
|
||||
follow a location (and thus possibly send back cookies it received), you can
|
||||
invoke it like:
|
||||
|
||||
curl -b nada -L www.cookiesite.com
|
||||
|
||||
Curl has the ability to read and write cookie files that use the same file
|
||||
format that Netscape and Mozilla do. It is a convenient way to share cookies
|
||||
between browsers and automatic scripts. The -b switch automatically detects
|
||||
if a given file is such a cookie file and parses it, and by using the
|
||||
-c/--cookie-jar option you'll make curl write a new cookie file at the end of
|
||||
an operation:
|
||||
|
||||
curl -b cookies.txt -c newcookies.txt www.cookiesite.com
|
||||
|
||||
11. HTTPS
|
||||
|
||||
There are a few ways to do secure HTTP transfers. The by far most common
|
||||
protocol for doing this is what is generally known as HTTPS, HTTP over
|
||||
SSL. SSL encrypts all the data that is sent and received over the network and
|
||||
thus makes it harder for attackers to spy on sensitive information.
|
||||
|
||||
SSL (or TLS as the latest version of the standard is called) offers a
|
||||
truckload of advanced features to allow all those encryptions and key
|
||||
infrastructure mechanisms encrypted HTTP requires.
|
||||
|
||||
Curl supports encrypted fetches thanks to the freely available OpenSSL
|
||||
libraries. To get a page from a HTTPS server, simply run curl like:
|
||||
|
||||
curl https://that.secure.server.com
|
||||
|
||||
11.1 CERTIFICATES
|
||||
|
||||
In the HTTPS world, you use certificates to validate that you are the one
|
||||
you you claim to be, as an addition to normal passwords. Curl supports
|
||||
client-side certificates. All certificates are locked with a PIN-code, why
|
||||
you need to enter the unlock-code before the certificate can be used by
|
||||
curl. The PIN-code can be specified on the command line or if not, entered
|
||||
interactively when curl queries for it. Use a certificate with curl on a
|
||||
HTTPS server like:
|
||||
|
||||
curl -E mycert.pem https://that.secure.server.com
|
||||
|
||||
12. REFERENCES
|
||||
|
||||
RFC 2616 is a must to read if you want in-depth understanding of the HTTP
|
||||
protocol.
|
||||
|
||||
RFC 2396 explains the URL syntax.
|
||||
|
||||
RFC 2109 defines how cookies are supposed to work.
|
||||
|
||||
RFC 1867 defines the HTTP post upload format.
|
||||
|
||||
http://www.openssl.org is the home of the OpenSSL project
|
||||
|
||||
http://curl.haxx.se is the home of the cURL project
|
||||
64
docs/VERSIONS
Normal file
64
docs/VERSIONS
Normal file
@@ -0,0 +1,64 @@
|
||||
_ _ ____ _
|
||||
___| | | | _ \| |
|
||||
/ __| | | | |_) | |
|
||||
| (__| |_| | _ <| |___
|
||||
\___|\___/|_| \_\_____|
|
||||
|
||||
Version Numbers and Releases
|
||||
|
||||
Curl is not only curl. Curl is also libcurl. They're actually individually
|
||||
versioned, but they mostly follow each other rather closely.
|
||||
|
||||
The version numbering is always built up using the same system:
|
||||
|
||||
X.Y[.Z][-preN]
|
||||
|
||||
Where
|
||||
X is main version number
|
||||
Y is release number
|
||||
Z is patch number
|
||||
N is pre-release number
|
||||
|
||||
One of these numbers will get bumped in each new release. The numbers to the
|
||||
right of a bumped number will be reset to zero. If Z is zero, it is not
|
||||
included in the version number. The pre release number is only included in
|
||||
pre releases (they're never used in public, official, releases).
|
||||
|
||||
The main version number will get bumped when *really* big, world colliding
|
||||
changes are made. The release number is bumped when big changes are
|
||||
performed. The patch number is bumped when the changes are mere bugfixes and
|
||||
only minor feature changes. The pre-release is a counter, to identify which
|
||||
pre-release a certain release is.
|
||||
|
||||
When reaching the end of a pre-release period, the version without the
|
||||
pre-release part will be released as a public release.
|
||||
|
||||
It means that after release 1.2.3, we can release 2.0 if something really big
|
||||
has been made, 1.3 if not that big changes were made or 1.2.4 if mostly bugs
|
||||
were fixed. Before 1.2.4 is released, we might release a 1.2.4-pre1 release
|
||||
for the brave people to try before the actual release.
|
||||
|
||||
Bumping, as in increasing the number with 1, is unconditionally only
|
||||
affecting one of the numbers (except the ones to the right of it, that may be
|
||||
set to zero). 1 becomes 2, 3 becomes 4, 9 becomes 10, 88 becomes 89 and 99
|
||||
becomes 100. So, after 1.2.9 comes 1.2.10. After 3.99.3, 3.100 might come.
|
||||
|
||||
All original curl source release archives are named according to the libcurl
|
||||
version (not according to the curl client version that, as said before, might
|
||||
differ).
|
||||
|
||||
As a service to any application that might want to support new libcurl
|
||||
features while still being able to build with older versions, all releases
|
||||
have the libcurl version stored in the curl/curl.h file using a static
|
||||
numbering scheme that can be used for comparison. The version number is
|
||||
defined as:
|
||||
|
||||
#define LIBCURL_VERSION_NUM 0xXXYYZZ
|
||||
|
||||
Where XX, YY and ZZ are the main version, release and patch numbers in
|
||||
hexadecimal. All three numbers are always represented using two digits. 1.2
|
||||
would appear as "0x010200" while version 9.11.7 appears as "0x090b07".
|
||||
|
||||
This 6-digit hexadecimal number does not show pre-release number, and it is
|
||||
always a greater number in a more recent release. It makes comparisons with
|
||||
greater than and less than work.
|
||||
64
docs/curl-config.1
Normal file
64
docs/curl-config.1
Normal file
@@ -0,0 +1,64 @@
|
||||
.\" You can view this file with:
|
||||
.\" nroff -man curl-config.1
|
||||
.\" Written by Daniel Stenberg
|
||||
.\"
|
||||
.TH curl-config 1 "8 Oct 2002" "Curl 7.10" "curl-config manual"
|
||||
.SH NAME
|
||||
curl-config \- Get information about a libcurl installation
|
||||
.SH SYNOPSIS
|
||||
.B curl-config [options]
|
||||
.SH DESCRIPTION
|
||||
.B curl-config
|
||||
displays information about a previous curl and libcurl installation.
|
||||
.SH OPTIONS
|
||||
.IP "--ca"
|
||||
Displays the built-in path to the CA cert bundle this libcurl uses.
|
||||
.IP "--cc"
|
||||
Displays the compiler used to build libcurl.
|
||||
.IP "--cflags"
|
||||
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.
|
||||
.IP "--feature"
|
||||
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
|
||||
any particular order. The keywords will be separated by newlines. There may be
|
||||
none, one or several keywords in the list.
|
||||
.IP "--help"
|
||||
Displays the available options.
|
||||
.IP "--libs"
|
||||
Shows the complete set of libs and other linker options you will need in order
|
||||
to link your application with libcurl.
|
||||
.IP "--prefix"
|
||||
This is the prefix used when libcurl was installed. Libcurl is then installed
|
||||
in $prefix/lib and its header files are installed in $prefix/include and so
|
||||
on. The prefix is set with "configure --prefix".
|
||||
.IP "--version"
|
||||
Outputs version information about the installed libcurl.
|
||||
.IP "--vernum"
|
||||
Outputs version information about the installed libcurl, in numerical mode.
|
||||
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
|
||||
12.13.14 would appear as 0c0d0e...
|
||||
.SH "EXAMPLES"
|
||||
What linker options do I need when I link with libcurl?
|
||||
|
||||
$ curl-config --libs
|
||||
|
||||
What compiler options do I need when I compile using libcurl functions?
|
||||
|
||||
$ curl-config --cflags
|
||||
|
||||
How do I know if libcurl was built with SSL support?
|
||||
|
||||
$ curl-config --feature | grep SSL
|
||||
|
||||
What's the installed libcurl version?
|
||||
|
||||
$ curl-config --version
|
||||
|
||||
How do I build a single file with a one-line command?
|
||||
|
||||
$ `curl-config --cc --cflags --libs` -o example example.c
|
||||
|
||||
.SH "SEE ALSO"
|
||||
.BR curl (1)
|
||||
1046
docs/curl.1
Normal file
1046
docs/curl.1
Normal file
File diff suppressed because it is too large
Load Diff
2
docs/examples/.cvsignore
Normal file
2
docs/examples/.cvsignore
Normal file
@@ -0,0 +1,2 @@
|
||||
Makefile
|
||||
Makefile.in
|
||||
15
docs/examples/Makefile.am
Normal file
15
docs/examples/Makefile.am
Normal file
@@ -0,0 +1,15 @@
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
|
||||
AUTOMAKE_OPTIONS = foreign no-dependencies
|
||||
|
||||
EXTRA_DIST = README curlgtk.c sepheaders.c simple.c postit2.c \
|
||||
persistant.c ftpget.c Makefile.example \
|
||||
multithread.c getinmemory.c ftpupload.c httpput.c \
|
||||
simplessl.c ftpgetresp.c http-post.c post-callback.c \
|
||||
multi-app.c multi-double.c multi-single.c multi-post.c \
|
||||
fopen.c simplepost.c makefile.dj
|
||||
|
||||
all:
|
||||
@echo "done"
|
||||
42
docs/examples/Makefile.example
Normal file
42
docs/examples/Makefile.example
Normal file
@@ -0,0 +1,42 @@
|
||||
#############################################################################
|
||||
# _ _ ____ _
|
||||
# Project ___| | | | _ \| |
|
||||
# / __| | | | |_) | |
|
||||
# | (__| |_| | _ <| |___
|
||||
# \___|\___/|_| \_\_____|
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
|
||||
# What to call the final executable
|
||||
TARGET = example
|
||||
|
||||
# Which object files that the executable consists of
|
||||
OBJS= ftpget.o
|
||||
|
||||
# What compiler to use
|
||||
CC = gcc
|
||||
|
||||
# Compiler flags, -g for debug, -c to make an object file
|
||||
CFLAGS = -c -g
|
||||
|
||||
# This should point to a directory that holds libcurl, if it isn't
|
||||
# in the system's standard lib dir
|
||||
# We also set a -L to include the directory where we have the openssl
|
||||
# libraries
|
||||
LDFLAGS = -L/home/dast/lib -L/usr/local/ssl/lib
|
||||
|
||||
# We need -lcurl for the curl stuff
|
||||
# We need -lsocket and -lnsl when on Solaris
|
||||
# We need -lssl and -lcrypto when using libcurl with SSL support
|
||||
# We need -ldl for dlopen() if that is in libdl
|
||||
# We need -lpthread for the pthread example
|
||||
LIBS = -lcurl -lsocket -lnsl -lssl -lcrypto -dl
|
||||
|
||||
# Link the target with all objects and libraries
|
||||
$(TARGET) : $(OBJS)
|
||||
$(CC) -o $(TARGET) $(OBJS) $(LDFLAGS) $(LIBS)
|
||||
|
||||
# Compile the source files into object files
|
||||
ftpget.o : ftpget.c
|
||||
$(CC) $(CFLAGS) $<
|
||||
25
docs/examples/README
Normal file
25
docs/examples/README
Normal file
@@ -0,0 +1,25 @@
|
||||
EXAMPLES
|
||||
|
||||
This directory is for libcurl programming examples. They are meant to show
|
||||
some simple steps on how you can build your own application to take full
|
||||
advantage of libcurl.
|
||||
|
||||
If you end up with other small but still useful example sources, please mail
|
||||
them for submission in future packages and on the web site.
|
||||
|
||||
The Makefile.example is an example makefile that could be used to build these
|
||||
examples. Just edit the file according to your system and requirements first.
|
||||
|
||||
Most examples should build fine using a command line like this:
|
||||
|
||||
$ `curl-config --cc --cflags --libs` -o example example.c
|
||||
|
||||
Some compilers don't like having the arguments in this order but instead
|
||||
want you do reorganize them like:
|
||||
|
||||
$ `curl-config --cc` -o example example.c `curl-config --cflags --libs`
|
||||
|
||||
*PLEASE* do not use the curl.haxx.se site as a test target for your libcurl
|
||||
applications/experiments. Even if the examples in this directory use that site
|
||||
as an example URL at some places, it doesn't mean that the URLs work or that
|
||||
we expect you to actually torture our web site with your tests! Thanks.
|
||||
100
docs/examples/curlgtk.c
Normal file
100
docs/examples/curlgtk.c
Normal file
@@ -0,0 +1,100 @@
|
||||
/*****************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
/* Copyright (c) 2000 David Odin (aka DindinX) for MandrakeSoft */
|
||||
/* an attempt to use the curl library in concert with a gtk-threaded application */
|
||||
|
||||
#include <stdio.h>
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
#include <curl/curl.h>
|
||||
#include <curl/types.h> /* new for v7 */
|
||||
#include <curl/easy.h> /* new for v7 */
|
||||
|
||||
#include <pthread.h>
|
||||
|
||||
GtkWidget *Bar;
|
||||
|
||||
size_t my_read_func(void *ptr, size_t size, size_t nmemb, FILE *stream)
|
||||
{
|
||||
return fread(ptr, size, nmemb, stream);
|
||||
}
|
||||
|
||||
int my_progress_func(GtkWidget *Bar,
|
||||
double t, /* dltotal */
|
||||
double d, /* dlnow */
|
||||
double ultotal,
|
||||
double ulnow)
|
||||
{
|
||||
/* printf("%d / %d (%g %%)\n", d, t, d*100.0/t);*/
|
||||
gdk_threads_enter();
|
||||
gtk_progress_set_value(GTK_PROGRESS(Bar), d*100.0/t);
|
||||
gdk_threads_leave();
|
||||
return 0;
|
||||
}
|
||||
|
||||
void *curl_thread(void *ptr)
|
||||
{
|
||||
CURL *curl;
|
||||
CURLcode res;
|
||||
FILE *outfile;
|
||||
gchar *url = ptr;
|
||||
|
||||
curl = curl_easy_init();
|
||||
if(curl)
|
||||
{
|
||||
outfile = fopen("/tmp/test.curl", "w");
|
||||
|
||||
curl_easy_setopt(curl, CURLOPT_URL, url);
|
||||
curl_easy_setopt(curl, CURLOPT_FILE, outfile);
|
||||
curl_easy_setopt(curl, CURLOPT_READFUNCTION, my_read_func);
|
||||
curl_easy_setopt(curl, CURLOPT_NOPROGRESS, FALSE);
|
||||
curl_easy_setopt(curl, CURLOPT_PROGRESSFUNCTION, my_progress_func);
|
||||
curl_easy_setopt(curl, CURLOPT_PROGRESSDATA, Bar);
|
||||
|
||||
res = curl_easy_perform(curl);
|
||||
|
||||
fclose(outfile);
|
||||
/* always cleanup */
|
||||
curl_easy_cleanup(curl);
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
GtkWidget *Window, *Frame, *Frame2;
|
||||
GtkAdjustment *adj;
|
||||
pthread_t curl_tid;
|
||||
|
||||
/* Init thread */
|
||||
g_thread_init(NULL);
|
||||
|
||||
gtk_init(&argc, &argv);
|
||||
Window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
|
||||
Frame = gtk_frame_new(NULL);
|
||||
gtk_frame_set_shadow_type(GTK_FRAME(Frame), GTK_SHADOW_OUT);
|
||||
gtk_container_add(GTK_CONTAINER(Window), Frame);
|
||||
Frame2 = gtk_frame_new(NULL);
|
||||
gtk_frame_set_shadow_type(GTK_FRAME(Frame2), GTK_SHADOW_IN);
|
||||
gtk_container_add(GTK_CONTAINER(Frame), Frame2);
|
||||
gtk_container_set_border_width(GTK_CONTAINER(Frame2), 5);
|
||||
adj = (GtkAdjustment*)gtk_adjustment_new(0, 0, 100, 0, 0, 0);
|
||||
Bar = gtk_progress_bar_new_with_adjustment(adj);
|
||||
gtk_container_add(GTK_CONTAINER(Frame2), Bar);
|
||||
gtk_widget_show_all(Window);
|
||||
|
||||
pthread_create(&curl_tid, NULL, curl_thread, argv[1]);
|
||||
|
||||
gdk_threads_enter();
|
||||
gtk_main();
|
||||
gdk_threads_leave();
|
||||
return 0;
|
||||
}
|
||||
|
||||
235
docs/examples/fopen.c
Normal file
235
docs/examples/fopen.c
Normal file
@@ -0,0 +1,235 @@
|
||||
/*****************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* $Id$
|
||||
*
|
||||
* This example source code introduces an fopen()/fread()/fclose() emulation
|
||||
* for URL reads. Using an approach similar to this, you could replace your
|
||||
* program's fopen() with this url_fopen() and fread() with url_fread() and
|
||||
* it should be possible to read remote streams instead of (only) local files.
|
||||
*
|
||||
* See the main() function at the bottom that shows a tiny app in action.
|
||||
*
|
||||
* This source code is a proof of concept. It will need further attention to
|
||||
* become production-use useful and solid.
|
||||
*
|
||||
* This example requires libcurl 7.9.7 or later.
|
||||
*/
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <sys/time.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <curl/curl.h>
|
||||
|
||||
#if (LIBCURL_VERSION_NUM < 0x070907)
|
||||
#error "too old libcurl version, get the latest!"
|
||||
#endif
|
||||
|
||||
struct data {
|
||||
int type;
|
||||
union {
|
||||
CURL *curl;
|
||||
FILE *file;
|
||||
} handle;
|
||||
|
||||
/* This is the documented biggest possible buffer chunk we can get from
|
||||
libcurl in one single callback! */
|
||||
char buffer[CURL_MAX_WRITE_SIZE];
|
||||
|
||||
char *readptr; /* read from here */
|
||||
int bytes; /* bytes available from read pointer */
|
||||
|
||||
CURLMcode m; /* stored from a previous url_fread() */
|
||||
};
|
||||
|
||||
typedef struct data URL_FILE;
|
||||
|
||||
/* we use a global one for convenience */
|
||||
CURLM *multi_handle;
|
||||
|
||||
static
|
||||
size_t write_callback(char *buffer,
|
||||
size_t size,
|
||||
size_t nitems,
|
||||
void *userp)
|
||||
{
|
||||
URL_FILE *url = (URL_FILE *)userp;
|
||||
size *= nitems;
|
||||
|
||||
memcpy(url->readptr, buffer, size);
|
||||
url->readptr += size;
|
||||
url->bytes += size;
|
||||
|
||||
fprintf(stderr, "callback %d size bytes\n", size);
|
||||
|
||||
return size;
|
||||
}
|
||||
|
||||
URL_FILE *url_fopen(char *url, char *operation)
|
||||
{
|
||||
/* this code could check for URLs or types in the 'url' and
|
||||
basicly use the real fopen() for standard files */
|
||||
|
||||
URL_FILE *file;
|
||||
int still_running;
|
||||
(void)operation;
|
||||
|
||||
file = (URL_FILE *)malloc(sizeof(URL_FILE));
|
||||
if(!file)
|
||||
return NULL;
|
||||
|
||||
memset(file, 0, sizeof(URL_FILE));
|
||||
|
||||
file->type = 1; /* marked as URL, use 0 for plain file */
|
||||
file->handle.curl = curl_easy_init();
|
||||
|
||||
curl_easy_setopt(file->handle.curl, CURLOPT_URL, url);
|
||||
curl_easy_setopt(file->handle.curl, CURLOPT_FILE, file);
|
||||
curl_easy_setopt(file->handle.curl, CURLOPT_VERBOSE, FALSE);
|
||||
curl_easy_setopt(file->handle.curl, CURLOPT_WRITEFUNCTION, write_callback);
|
||||
|
||||
if(!multi_handle)
|
||||
multi_handle = curl_multi_init();
|
||||
|
||||
curl_multi_add_handle(multi_handle, file->handle.curl);
|
||||
|
||||
while(CURLM_CALL_MULTI_PERFORM ==
|
||||
curl_multi_perform(multi_handle, &still_running));
|
||||
|
||||
/* if still_running would be 0 now, we should return NULL */
|
||||
|
||||
return file;
|
||||
}
|
||||
|
||||
void url_fclose(URL_FILE *file)
|
||||
{
|
||||
/* make sure the easy handle is not in the multi handle anymore */
|
||||
curl_multi_remove_handle(multi_handle, file->handle.curl);
|
||||
|
||||
/* cleanup */
|
||||
curl_easy_cleanup(file->handle.curl);
|
||||
}
|
||||
|
||||
|
||||
|
||||
size_t url_fread(void *ptr, size_t size, size_t nmemb, URL_FILE *file)
|
||||
{
|
||||
fd_set fdread;
|
||||
fd_set fdwrite;
|
||||
fd_set fdexcep;
|
||||
int maxfd;
|
||||
struct timeval timeout;
|
||||
int rc;
|
||||
int still_running = 0;
|
||||
|
||||
if(!file->bytes) { /* no data available at this point */
|
||||
|
||||
file->readptr = file->buffer; /* reset read pointer */
|
||||
|
||||
if(CURLM_CALL_MULTI_PERFORM == file->m) {
|
||||
while(CURLM_CALL_MULTI_PERFORM ==
|
||||
curl_multi_perform(multi_handle, &still_running)) {
|
||||
if(file->bytes) {
|
||||
printf("(fread) WOAH! THis happened!\n");
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(!still_running) {
|
||||
printf("DONE RUNNING AROUND!\n");
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
do {
|
||||
|
||||
FD_ZERO(&fdread);
|
||||
FD_ZERO(&fdwrite);
|
||||
FD_ZERO(&fdexcep);
|
||||
|
||||
/* set a suitable timeout to fail on */
|
||||
timeout.tv_sec = 500; /* 5 minutes */
|
||||
timeout.tv_usec = 0;
|
||||
|
||||
/* get file descriptors from the transfers */
|
||||
curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd);
|
||||
|
||||
rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout);
|
||||
|
||||
switch(rc) {
|
||||
case -1:
|
||||
/* select error */
|
||||
break;
|
||||
case 0:
|
||||
break;
|
||||
default:
|
||||
/* timeout or readable/writable sockets */
|
||||
printf("select() returned %d!\n", rc);
|
||||
do {
|
||||
file->m = curl_multi_perform(multi_handle, &still_running);
|
||||
|
||||
if(file->bytes)
|
||||
/* we have received data, return that now */
|
||||
break;
|
||||
|
||||
} while(CURLM_CALL_MULTI_PERFORM == file->m);
|
||||
|
||||
|
||||
if(!still_running)
|
||||
printf("DONE RUNNING AROUND!\n");
|
||||
|
||||
break;
|
||||
}
|
||||
} while(still_running && (file->bytes <= 0));
|
||||
}
|
||||
else
|
||||
printf("(fread) Skip network read\n");
|
||||
|
||||
if(file->bytes) {
|
||||
/* data already available, return that */
|
||||
int want = size * nmemb;
|
||||
|
||||
if(file->bytes < want)
|
||||
want = file->bytes;
|
||||
|
||||
memcpy(ptr, file->readptr, want);
|
||||
file->readptr += want;
|
||||
file->bytes -= want;
|
||||
|
||||
printf("(fread) return %d bytes\n", want);
|
||||
|
||||
return want;
|
||||
}
|
||||
return 0; /* no data available to return */
|
||||
}
|
||||
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
URL_FILE *handle;
|
||||
int nread;
|
||||
char buffer[256];
|
||||
|
||||
(void)argc;
|
||||
(void)argv;
|
||||
|
||||
handle = url_fopen("http://curl.haxx.se/", "r");
|
||||
|
||||
if(!handle) {
|
||||
printf("couldn't url_fopen()\n");
|
||||
}
|
||||
|
||||
do {
|
||||
nread = url_fread(buffer, sizeof(buffer), 1, handle);
|
||||
|
||||
printf("We got: %d bytes\n", nread);
|
||||
} while(nread);
|
||||
|
||||
url_fclose(handle);
|
||||
|
||||
return 0;
|
||||
}
|
||||
83
docs/examples/ftpget.c
Normal file
83
docs/examples/ftpget.c
Normal file
@@ -0,0 +1,83 @@
|
||||
/*****************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#include <curl/curl.h>
|
||||
#include <curl/types.h>
|
||||
#include <curl/easy.h>
|
||||
|
||||
/*
|
||||
* This is an example showing how to get a single file from an FTP server.
|
||||
* It delays the actual destination file creation until the first write
|
||||
* callback so that it won't create an empty file in case the remote file
|
||||
* doesn't exist or something else fails.
|
||||
*/
|
||||
|
||||
struct FtpFile {
|
||||
char *filename;
|
||||
FILE *stream;
|
||||
};
|
||||
|
||||
int my_fwrite(void *buffer, size_t size, size_t nmemb, void *stream)
|
||||
{
|
||||
struct FtpFile *out=(struct FtpFile *)stream;
|
||||
if(out && !out->stream) {
|
||||
/* open file for writing */
|
||||
out->stream=fopen(out->filename, "wb");
|
||||
if(!out->stream)
|
||||
return -1; /* failure, can't open file to write */
|
||||
}
|
||||
return fwrite(buffer, size, nmemb, out->stream);
|
||||
}
|
||||
|
||||
|
||||
int main(void)
|
||||
{
|
||||
CURL *curl;
|
||||
CURLcode res;
|
||||
struct FtpFile ftpfile={
|
||||
"curl.tar.gz", /* name to store the file as if succesful */
|
||||
NULL
|
||||
};
|
||||
|
||||
curl_global_init(CURL_GLOBAL_DEFAULT);
|
||||
|
||||
curl = curl_easy_init();
|
||||
if(curl) {
|
||||
/* Get curl 7.9.2 from sunet.se's FTP site: */
|
||||
curl_easy_setopt(curl, CURLOPT_URL,
|
||||
"ftp://ftp.sunet.se/pub/www/utilities/curl/curl-7.9.2.tar.gz");
|
||||
/* Define our callback to get called when there's data to be written */
|
||||
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, my_fwrite);
|
||||
/* Set a pointer to our struct to pass to the callback */
|
||||
curl_easy_setopt(curl, CURLOPT_FILE, &ftpfile);
|
||||
|
||||
/* Switch on full protocol/debug output */
|
||||
curl_easy_setopt(curl, CURLOPT_VERBOSE, TRUE);
|
||||
|
||||
res = curl_easy_perform(curl);
|
||||
|
||||
/* always cleanup */
|
||||
curl_easy_cleanup(curl);
|
||||
|
||||
if(CURLE_OK != res) {
|
||||
/* we failed */
|
||||
fprintf(stderr, "curl told us %d\n", res);
|
||||
}
|
||||
}
|
||||
|
||||
if(ftpfile.stream)
|
||||
fclose(ftpfile.stream); /* close the local file */
|
||||
|
||||
curl_global_cleanup();
|
||||
|
||||
return 0;
|
||||
}
|
||||
61
docs/examples/ftpgetresp.c
Normal file
61
docs/examples/ftpgetresp.c
Normal file
@@ -0,0 +1,61 @@
|
||||
/*****************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#include <curl/curl.h>
|
||||
#include <curl/types.h>
|
||||
#include <curl/easy.h>
|
||||
|
||||
/*
|
||||
* Similar to ftpget.c but this also stores the received response-lines
|
||||
* in a separate file using our own callback!
|
||||
*
|
||||
* This functionality was introduced in libcurl 7.9.3.
|
||||
*/
|
||||
|
||||
size_t
|
||||
write_response(void *ptr, size_t size, size_t nmemb, void *data)
|
||||
{
|
||||
FILE *writehere = (FILE *)data;
|
||||
return fwrite(ptr, size, nmemb, writehere);
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
CURL *curl;
|
||||
CURLcode res;
|
||||
FILE *ftpfile;
|
||||
FILE *respfile;
|
||||
|
||||
/* local file name to store the file as */
|
||||
ftpfile = fopen("ftp-list", "wb"); /* b is binary, needed on win32 */
|
||||
|
||||
/* local file name to store the FTP server's response lines in */
|
||||
respfile = fopen("ftp-responses", "wb"); /* b is binary, needed on win32 */
|
||||
|
||||
curl = curl_easy_init();
|
||||
if(curl) {
|
||||
/* Get a file listing from sunet */
|
||||
curl_easy_setopt(curl, CURLOPT_URL, "ftp://ftp.sunet.se/");
|
||||
curl_easy_setopt(curl, CURLOPT_FILE, ftpfile);
|
||||
curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, write_response);
|
||||
curl_easy_setopt(curl, CURLOPT_WRITEHEADER, respfile);
|
||||
res = curl_easy_perform(curl);
|
||||
|
||||
/* always cleanup */
|
||||
curl_easy_cleanup(curl);
|
||||
}
|
||||
|
||||
fclose(ftpfile); /* close the local file */
|
||||
fclose(respfile); /* close the response file */
|
||||
|
||||
return 0;
|
||||
}
|
||||
91
docs/examples/ftpupload.c
Normal file
91
docs/examples/ftpupload.c
Normal file
@@ -0,0 +1,91 @@
|
||||
/*****************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#include <curl/curl.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <fcntl.h>
|
||||
|
||||
/*
|
||||
* This example shows an FTP upload, with a rename of the file just after
|
||||
* a successful upload.
|
||||
*
|
||||
* Example based on source code provided by Erick Nuwendam. Thanks!
|
||||
*/
|
||||
|
||||
#define LOCAL_FILE "/tmp/uploadthis.txt"
|
||||
#define UPLOAD_FILE_AS "while-uploading.txt"
|
||||
#define REMOTE_URL "ftp://localhost/" UPLOAD_FILE_AS
|
||||
#define RENAME_FILE_TO "renamed-and-fine.txt"
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
CURL *curl;
|
||||
CURLcode res;
|
||||
FILE *ftpfile;
|
||||
FILE * hd_src ;
|
||||
int hd ;
|
||||
struct stat file_info;
|
||||
|
||||
struct curl_slist *headerlist=NULL;
|
||||
char buf_1 [] = "RNFR " UPLOAD_FILE_AS;
|
||||
char buf_2 [] = "RNTO " RENAME_FILE_TO;
|
||||
|
||||
/* get the file size of the local file */
|
||||
hd = open(LOCAL_FILE, O_RDONLY) ;
|
||||
fstat(hd, &file_info);
|
||||
close(hd) ;
|
||||
|
||||
/* get a FILE * of the same file, could also be made with
|
||||
fdopen() from the previous descriptor, but hey this is just
|
||||
an example! */
|
||||
hd_src = fopen(LOCAL_FILE, "rb");
|
||||
|
||||
/* In windows, this will init the winsock stuff */
|
||||
curl_global_init(CURL_GLOBAL_ALL);
|
||||
|
||||
/* get a curl handle */
|
||||
curl = curl_easy_init();
|
||||
if(curl) {
|
||||
/* build a list of commands to pass to libcurl */
|
||||
headerlist = curl_slist_append(headerlist, buf_1);
|
||||
headerlist = curl_slist_append(headerlist, buf_2);
|
||||
|
||||
/* enable uploading */
|
||||
curl_easy_setopt(curl, CURLOPT_UPLOAD, TRUE) ;
|
||||
|
||||
/* specify target */
|
||||
curl_easy_setopt(curl,CURLOPT_URL, REMOTE_URL);
|
||||
|
||||
/* pass in that last of FTP commands to run after the transfer */
|
||||
curl_easy_setopt(curl, CURLOPT_POSTQUOTE, headerlist);
|
||||
|
||||
/* now specify which file to upload */
|
||||
curl_easy_setopt(curl, CURLOPT_INFILE, hd_src);
|
||||
|
||||
/* and give the size of the upload (optional) */
|
||||
curl_easy_setopt(curl, CURLOPT_INFILESIZE, file_info.st_size);
|
||||
|
||||
/* Now run off and do what you've been told! */
|
||||
res = curl_easy_perform(curl);
|
||||
|
||||
/* clean up the FTP commands list */
|
||||
curl_slist_free_all (headerlist);
|
||||
|
||||
/* always cleanup */
|
||||
curl_easy_cleanup(curl);
|
||||
}
|
||||
fclose(hd_src); /* close the local file */
|
||||
|
||||
curl_global_cleanup();
|
||||
return 0;
|
||||
}
|
||||
84
docs/examples/getinmemory.c
Normal file
84
docs/examples/getinmemory.c
Normal file
@@ -0,0 +1,84 @@
|
||||
/*****************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* $Id$
|
||||
*
|
||||
* Example source code to show how the callback function can be used to
|
||||
* download data into a chunk of memory instead of storing it in a file.
|
||||
*
|
||||
* This exact source code has not been verified to work.
|
||||
*/
|
||||
|
||||
/* to make this work under windows, use the win32-functions from the
|
||||
win32socket.c file as well */
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#include <curl/curl.h>
|
||||
#include <curl/types.h>
|
||||
#include <curl/easy.h>
|
||||
|
||||
struct MemoryStruct {
|
||||
char *memory;
|
||||
size_t size;
|
||||
};
|
||||
|
||||
size_t
|
||||
WriteMemoryCallback(void *ptr, size_t size, size_t nmemb, void *data)
|
||||
{
|
||||
register int realsize = size * nmemb;
|
||||
struct MemoryStruct *mem = (struct MemoryStruct *)data;
|
||||
|
||||
mem->memory = (char *)realloc(mem->memory, mem->size + realsize + 1);
|
||||
if (mem->memory) {
|
||||
memcpy(&(mem->memory[mem->size]), ptr, realsize);
|
||||
mem->size += realsize;
|
||||
mem->memory[mem->size] = 0;
|
||||
}
|
||||
return realsize;
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
CURL *curl_handle;
|
||||
|
||||
struct MemoryStruct chunk;
|
||||
|
||||
chunk.memory=NULL; /* we expect realloc(NULL, size) to work */
|
||||
chunk.size = 0; /* no data at this point */
|
||||
|
||||
/* init the curl session */
|
||||
curl_handle = curl_easy_init();
|
||||
|
||||
/* specify URL to get */
|
||||
curl_easy_setopt(curl_handle, CURLOPT_URL, "http://cool.haxx.se/");
|
||||
|
||||
/* send all data to this function */
|
||||
curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, WriteMemoryCallback);
|
||||
|
||||
/* we pass our 'chunk' struct to the callback function */
|
||||
curl_easy_setopt(curl_handle, CURLOPT_FILE, (void *)&chunk);
|
||||
|
||||
/* get it! */
|
||||
curl_easy_perform(curl_handle);
|
||||
|
||||
/* cleanup curl stuff */
|
||||
curl_easy_cleanup(curl_handle);
|
||||
|
||||
/*
|
||||
* Now, our chunk.memory points to a memory block that is chunk.size
|
||||
* bytes big and contains the remote file.
|
||||
*
|
||||
* Do something nice with it!
|
||||
*
|
||||
* You should be aware of the fact that at this point we might have an
|
||||
* allocated data block, and nothing has yet deallocated that data. So when
|
||||
* you're done with it, you should free() it as a nice application.
|
||||
*/
|
||||
|
||||
return 0;
|
||||
}
|
||||
35
docs/examples/http-post.c
Normal file
35
docs/examples/http-post.c
Normal file
@@ -0,0 +1,35 @@
|
||||
/*****************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <curl/curl.h>
|
||||
|
||||
int main(void)
|
||||
{
|
||||
CURL *curl;
|
||||
CURLcode res;
|
||||
|
||||
curl = curl_easy_init();
|
||||
if(curl) {
|
||||
/* First set the URL that is about to receive our POST. This URL can
|
||||
just as well be a https:// URL if that is what should receive the
|
||||
data. */
|
||||
curl_easy_setopt(curl, CURLOPT_URL, "http://postit.example.com/moo.cgi");
|
||||
/* Now specify the POST data */
|
||||
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "name=daniel&project=curl");
|
||||
|
||||
/* Perform the request, res will get the return code */
|
||||
res = curl_easy_perform(curl);
|
||||
|
||||
/* always cleanup */
|
||||
curl_easy_cleanup(curl);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
100
docs/examples/httpput.c
Normal file
100
docs/examples/httpput.c
Normal file
@@ -0,0 +1,100 @@
|
||||
/*****************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <fcntl.h>
|
||||
#include <sys/stat.h>
|
||||
|
||||
#include <curl/curl.h>
|
||||
|
||||
/*
|
||||
* This example shows a HTTP PUT operation. PUTs a file given as a command
|
||||
* line argument to the URL also given on the command line.
|
||||
*
|
||||
* This example also uses its own read callback.
|
||||
*/
|
||||
|
||||
size_t read_callback(void *ptr, size_t size, size_t nmemb, void *stream)
|
||||
{
|
||||
size_t retcode;
|
||||
|
||||
/* in real-world cases, this would probably get this data differently
|
||||
as this fread() stuff is exactly what the library already would do
|
||||
by default internally */
|
||||
retcode = fread(ptr, size, nmemb, stream);
|
||||
|
||||
fprintf(stderr, "*** We read %d bytes from file\n", retcode);
|
||||
|
||||
return retcode;
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
CURL *curl;
|
||||
CURLcode res;
|
||||
FILE *ftpfile;
|
||||
FILE * hd_src ;
|
||||
int hd ;
|
||||
struct stat file_info;
|
||||
|
||||
char *file;
|
||||
char *url;
|
||||
|
||||
if(argc < 3)
|
||||
return 1;
|
||||
|
||||
file= argv[1];
|
||||
url = argv[2];
|
||||
|
||||
/* get the file size of the local file */
|
||||
hd = open(file, O_RDONLY) ;
|
||||
fstat(hd, &file_info);
|
||||
close(hd) ;
|
||||
|
||||
/* get a FILE * of the same file, could also be made with
|
||||
fdopen() from the previous descriptor, but hey this is just
|
||||
an example! */
|
||||
hd_src = fopen(file, "rb");
|
||||
|
||||
/* In windows, this will init the winsock stuff */
|
||||
curl_global_init(CURL_GLOBAL_ALL);
|
||||
|
||||
/* get a curl handle */
|
||||
curl = curl_easy_init();
|
||||
if(curl) {
|
||||
/* we want to use our own read function */
|
||||
curl_easy_setopt(curl, CURLOPT_READFUNCTION, read_callback);
|
||||
|
||||
/* enable uploading */
|
||||
curl_easy_setopt(curl, CURLOPT_UPLOAD, TRUE) ;
|
||||
|
||||
/* HTTP PUT please */
|
||||
curl_easy_setopt(curl, CURLOPT_PUT, TRUE);
|
||||
|
||||
/* specify target */
|
||||
curl_easy_setopt(curl,CURLOPT_URL, url);
|
||||
|
||||
/* now specify which file to upload */
|
||||
curl_easy_setopt(curl, CURLOPT_INFILE, hd_src);
|
||||
|
||||
/* and give the size of the upload (optional) */
|
||||
curl_easy_setopt(curl, CURLOPT_INFILESIZE, file_info.st_size);
|
||||
|
||||
/* Now run off and do what you've been told! */
|
||||
res = curl_easy_perform(curl);
|
||||
|
||||
/* always cleanup */
|
||||
curl_easy_cleanup(curl);
|
||||
}
|
||||
fclose(hd_src); /* close the local file */
|
||||
|
||||
curl_global_cleanup();
|
||||
return 0;
|
||||
}
|
||||
31
docs/examples/makefile.dj
Normal file
31
docs/examples/makefile.dj
Normal file
@@ -0,0 +1,31 @@
|
||||
#
|
||||
# Adapted for djgpp / Watt-32 / DOS by
|
||||
# Gisle Vanem <giva@bgnett.no>
|
||||
#
|
||||
|
||||
include ../../packages/DOS/common.dj
|
||||
|
||||
CFLAGS += -I../../include
|
||||
|
||||
LIBS = ../../lib/libcurl.a
|
||||
|
||||
ifeq ($(USE_SSL),1)
|
||||
LIBS += $(OPENSSL_ROOT)/lib/libssl.a $(OPENSSL_ROOT)/lib/libcrypt.a
|
||||
endif
|
||||
|
||||
LIBS += $(WATT32_ROOT)/lib/libwatt.a $(ZLIB_ROOT)/libz.a
|
||||
|
||||
PROGRAMS = fopen.exe ftpget.exe ftpgetre.exe ftpuploa.exe getinmem.exe \
|
||||
http-pos.exe httpput.exe multi-ap.exe multi-do.exe \
|
||||
multi-po.exe multi-si.exe persista.exe post-cal.exe \
|
||||
postit2.exe sepheade.exe simple.exe simpless.exe
|
||||
|
||||
all: $(PROGRAMS)
|
||||
|
||||
.c.exe:
|
||||
$(CC) $(CFLAGS) -o $@ $^ $(LIBS)
|
||||
@echo
|
||||
|
||||
clean:
|
||||
rm -f $(PROGRAMS)
|
||||
|
||||
99
docs/examples/multi-app.c
Normal file
99
docs/examples/multi-app.c
Normal file
@@ -0,0 +1,99 @@
|
||||
/*****************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* $Id$
|
||||
*
|
||||
* This is an example application source code using the multi interface.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
/* somewhat unix-specific */
|
||||
#include <sys/time.h>
|
||||
#include <unistd.h>
|
||||
|
||||
/* curl stuff */
|
||||
#include <curl/curl.h>
|
||||
|
||||
/*
|
||||
* Download a HTTP file and upload an FTP file simultaneously.
|
||||
*/
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
CURL *http_handle;
|
||||
CURL *ftp_handle;
|
||||
CURLM *multi_handle;
|
||||
|
||||
int still_running; /* keep number of running handles */
|
||||
|
||||
http_handle = curl_easy_init();
|
||||
ftp_handle = curl_easy_init();
|
||||
|
||||
/* set the options (I left out a few, you'll get the point anyway) */
|
||||
curl_easy_setopt(http_handle, CURLOPT_URL, "http://website.com");
|
||||
|
||||
curl_easy_setopt(ftp_handle, CURLOPT_URL, "ftp://ftpsite.com");
|
||||
curl_easy_setopt(ftp_handle, CURLOPT_UPLOAD, TRUE);
|
||||
|
||||
/* init a multi stack */
|
||||
multi_handle = curl_multi_init();
|
||||
|
||||
/* add the individual transfers */
|
||||
curl_multi_add_handle(multi_handle, http_handle);
|
||||
curl_multi_add_handle(multi_handle, ftp_handle);
|
||||
|
||||
/* we start some action by calling perform right away */
|
||||
while(CURLM_CALL_MULTI_PERFORM ==
|
||||
curl_multi_perform(multi_handle, &still_running));
|
||||
|
||||
while(still_running) {
|
||||
struct timeval timeout;
|
||||
int rc; /* select() return code */
|
||||
|
||||
fd_set fdread;
|
||||
fd_set fdwrite;
|
||||
fd_set fdexcep;
|
||||
int maxfd;
|
||||
|
||||
FD_ZERO(&fdread);
|
||||
FD_ZERO(&fdwrite);
|
||||
FD_ZERO(&fdexcep);
|
||||
|
||||
/* set a suitable timeout to play around with */
|
||||
timeout.tv_sec = 1;
|
||||
timeout.tv_usec = 0;
|
||||
|
||||
/* get file descriptors from the transfers */
|
||||
curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd);
|
||||
|
||||
rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout);
|
||||
|
||||
switch(rc) {
|
||||
case -1:
|
||||
/* select error */
|
||||
break;
|
||||
case 0:
|
||||
/* timeout, do something else */
|
||||
break;
|
||||
default:
|
||||
/* one or more of curl's file descriptors say there's data to read
|
||||
or write */
|
||||
while(CURLM_CALL_MULTI_PERFORM ==
|
||||
curl_multi_perform(multi_handle, &still_running));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
curl_multi_cleanup(multi_handle);
|
||||
|
||||
curl_easy_cleanup(http_handle);
|
||||
curl_easy_cleanup(ftp_handle);
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
95
docs/examples/multi-double.c
Normal file
95
docs/examples/multi-double.c
Normal file
@@ -0,0 +1,95 @@
|
||||
/*****************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* $Id$
|
||||
*
|
||||
* This is a very simple example using the multi interface.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
/* somewhat unix-specific */
|
||||
#include <sys/time.h>
|
||||
#include <unistd.h>
|
||||
|
||||
/* curl stuff */
|
||||
#include <curl/curl.h>
|
||||
|
||||
/*
|
||||
* Simply download two HTTP files!
|
||||
*/
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
CURL *http_handle;
|
||||
CURL *http_handle2;
|
||||
CURLM *multi_handle;
|
||||
|
||||
int still_running; /* keep number of running handles */
|
||||
|
||||
http_handle = curl_easy_init();
|
||||
http_handle2 = curl_easy_init();
|
||||
|
||||
/* set options */
|
||||
curl_easy_setopt(http_handle, CURLOPT_URL, "http://www.haxx.se/");
|
||||
|
||||
/* set options */
|
||||
curl_easy_setopt(http_handle2, CURLOPT_URL, "http://localhost/");
|
||||
|
||||
/* init a multi stack */
|
||||
multi_handle = curl_multi_init();
|
||||
|
||||
/* add the individual transfers */
|
||||
curl_multi_add_handle(multi_handle, http_handle);
|
||||
curl_multi_add_handle(multi_handle, http_handle2);
|
||||
|
||||
/* we start some action by calling perform right away */
|
||||
while(CURLM_CALL_MULTI_PERFORM ==
|
||||
curl_multi_perform(multi_handle, &still_running));
|
||||
|
||||
while(still_running) {
|
||||
struct timeval timeout;
|
||||
int rc; /* select() return code */
|
||||
|
||||
fd_set fdread;
|
||||
fd_set fdwrite;
|
||||
fd_set fdexcep;
|
||||
int maxfd;
|
||||
|
||||
FD_ZERO(&fdread);
|
||||
FD_ZERO(&fdwrite);
|
||||
FD_ZERO(&fdexcep);
|
||||
|
||||
/* set a suitable timeout to play around with */
|
||||
timeout.tv_sec = 1;
|
||||
timeout.tv_usec = 0;
|
||||
|
||||
/* get file descriptors from the transfers */
|
||||
curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd);
|
||||
|
||||
rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout);
|
||||
|
||||
switch(rc) {
|
||||
case -1:
|
||||
/* select error */
|
||||
break;
|
||||
case 0:
|
||||
default:
|
||||
/* timeout or readable/writable sockets */
|
||||
while(CURLM_CALL_MULTI_PERFORM ==
|
||||
curl_multi_perform(multi_handle, &still_running));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
curl_multi_cleanup(multi_handle);
|
||||
|
||||
curl_easy_cleanup(http_handle);
|
||||
curl_easy_cleanup(http_handle2);
|
||||
|
||||
return 0;
|
||||
}
|
||||
126
docs/examples/multi-post.c
Normal file
126
docs/examples/multi-post.c
Normal file
@@ -0,0 +1,126 @@
|
||||
/*****************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* $Id$
|
||||
*
|
||||
* This is an example application source code using the multi interface
|
||||
* to do a multipart formpost without "blocking".
|
||||
*/
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <sys/time.h>
|
||||
|
||||
#include <curl/curl.h>
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
CURL *curl;
|
||||
CURLcode res;
|
||||
|
||||
CURLM *multi_handle;
|
||||
int still_running;
|
||||
|
||||
struct HttpPost *formpost=NULL;
|
||||
struct HttpPost *lastptr=NULL;
|
||||
struct curl_slist *headerlist=NULL;
|
||||
char buf[] = "Expect:";
|
||||
|
||||
/* Fill in the file upload field */
|
||||
curl_formadd(&formpost,
|
||||
&lastptr,
|
||||
CURLFORM_COPYNAME, "sendfile",
|
||||
CURLFORM_FILE, "postit2.c",
|
||||
CURLFORM_END);
|
||||
|
||||
/* Fill in the filename field */
|
||||
curl_formadd(&formpost,
|
||||
&lastptr,
|
||||
CURLFORM_COPYNAME, "filename",
|
||||
CURLFORM_COPYCONTENTS, "postit2.c",
|
||||
CURLFORM_END);
|
||||
|
||||
|
||||
/* Fill in the submit field too, even if this is rarely needed */
|
||||
curl_formadd(&formpost,
|
||||
&lastptr,
|
||||
CURLFORM_COPYNAME, "submit",
|
||||
CURLFORM_COPYCONTENTS, "send",
|
||||
CURLFORM_END);
|
||||
|
||||
curl = curl_easy_init();
|
||||
multi_handle = curl_multi_init();
|
||||
|
||||
/* initalize custom header list (stating that Expect: 100-continue is not
|
||||
wanted */
|
||||
headerlist = curl_slist_append(headerlist, buf);
|
||||
if(curl && multi_handle) {
|
||||
int perform=0;
|
||||
|
||||
/* what URL that receives this POST */
|
||||
curl_easy_setopt(curl, CURLOPT_URL,
|
||||
"http://www.fillinyoururl.com/upload.cgi");
|
||||
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
|
||||
|
||||
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headerlist);
|
||||
curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost);
|
||||
|
||||
curl_multi_add_handle(multi_handle, curl);
|
||||
|
||||
while(CURLM_CALL_MULTI_PERFORM ==
|
||||
curl_multi_perform(multi_handle, &still_running));
|
||||
|
||||
while(still_running) {
|
||||
struct timeval timeout;
|
||||
int rc; /* select() return code */
|
||||
|
||||
fd_set fdread;
|
||||
fd_set fdwrite;
|
||||
fd_set fdexcep;
|
||||
int maxfd;
|
||||
|
||||
FD_ZERO(&fdread);
|
||||
FD_ZERO(&fdwrite);
|
||||
FD_ZERO(&fdexcep);
|
||||
|
||||
/* set a suitable timeout to play around with */
|
||||
timeout.tv_sec = 1;
|
||||
timeout.tv_usec = 0;
|
||||
|
||||
/* get file descriptors from the transfers */
|
||||
curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd);
|
||||
|
||||
rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout);
|
||||
|
||||
switch(rc) {
|
||||
case -1:
|
||||
/* select error */
|
||||
break;
|
||||
case 0:
|
||||
printf("timeout!\n");
|
||||
default:
|
||||
/* timeout or readable/writable sockets */
|
||||
printf("perform!\n");
|
||||
while(CURLM_CALL_MULTI_PERFORM ==
|
||||
curl_multi_perform(multi_handle, &still_running));
|
||||
printf("running: %d!\n", still_running);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
curl_multi_cleanup(multi_handle);
|
||||
|
||||
/* always cleanup */
|
||||
curl_easy_cleanup(curl);
|
||||
|
||||
/* then cleanup the formpost chain */
|
||||
curl_formfree(formpost);
|
||||
|
||||
/* free slist */
|
||||
curl_slist_free_all (headerlist);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
88
docs/examples/multi-single.c
Normal file
88
docs/examples/multi-single.c
Normal file
@@ -0,0 +1,88 @@
|
||||
/*****************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* $Id$
|
||||
*
|
||||
* This is a very simple example using the multi interface.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
/* somewhat unix-specific */
|
||||
#include <sys/time.h>
|
||||
#include <unistd.h>
|
||||
|
||||
/* curl stuff */
|
||||
#include <curl/curl.h>
|
||||
|
||||
/*
|
||||
* Simply download a HTTP file.
|
||||
*/
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
CURL *http_handle;
|
||||
CURLM *multi_handle;
|
||||
|
||||
int still_running; /* keep number of running handles */
|
||||
|
||||
http_handle = curl_easy_init();
|
||||
|
||||
/* set the options (I left out a few, you'll get the point anyway) */
|
||||
curl_easy_setopt(http_handle, CURLOPT_URL, "http://www.haxx.se/");
|
||||
|
||||
/* init a multi stack */
|
||||
multi_handle = curl_multi_init();
|
||||
|
||||
/* add the individual transfers */
|
||||
curl_multi_add_handle(multi_handle, http_handle);
|
||||
|
||||
/* we start some action by calling perform right away */
|
||||
while(CURLM_CALL_MULTI_PERFORM ==
|
||||
curl_multi_perform(multi_handle, &still_running));
|
||||
|
||||
while(still_running) {
|
||||
struct timeval timeout;
|
||||
int rc; /* select() return code */
|
||||
|
||||
fd_set fdread;
|
||||
fd_set fdwrite;
|
||||
fd_set fdexcep;
|
||||
int maxfd;
|
||||
|
||||
FD_ZERO(&fdread);
|
||||
FD_ZERO(&fdwrite);
|
||||
FD_ZERO(&fdexcep);
|
||||
|
||||
/* set a suitable timeout to play around with */
|
||||
timeout.tv_sec = 1;
|
||||
timeout.tv_usec = 0;
|
||||
|
||||
/* get file descriptors from the transfers */
|
||||
curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd);
|
||||
|
||||
rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout);
|
||||
|
||||
switch(rc) {
|
||||
case -1:
|
||||
/* select error */
|
||||
break;
|
||||
case 0:
|
||||
default:
|
||||
/* timeout or readable/writable sockets */
|
||||
while(CURLM_CALL_MULTI_PERFORM ==
|
||||
curl_multi_perform(multi_handle, &still_running));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
curl_multi_cleanup(multi_handle);
|
||||
|
||||
curl_easy_cleanup(http_handle);
|
||||
|
||||
return 0;
|
||||
}
|
||||
70
docs/examples/multithread.c
Normal file
70
docs/examples/multithread.c
Normal file
@@ -0,0 +1,70 @@
|
||||
/*****************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/* A multi-threaded example that uses pthreads extensively to fetch
|
||||
* X remote files at once */
|
||||
|
||||
#include <stdio.h>
|
||||
#include <pthread.h>
|
||||
#include <curl/curl.h>
|
||||
|
||||
/* silly list of test-URLs */
|
||||
char *urls[]= {
|
||||
"http://curl.haxx.se/",
|
||||
"ftp://cool.haxx.se/",
|
||||
"http://www.contactor.se/",
|
||||
"www.haxx.se"
|
||||
};
|
||||
|
||||
void *pull_one_url(void *url)
|
||||
{
|
||||
CURL *curl;
|
||||
|
||||
curl = curl_easy_init();
|
||||
|
||||
curl_easy_setopt(curl, CURLOPT_URL, url);
|
||||
curl_easy_perform(curl);
|
||||
|
||||
curl_easy_cleanup(curl);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
int pthread_create(pthread_t *new_thread_ID,
|
||||
const pthread_attr_t *attr,
|
||||
void * (*start_func)(void *), void *arg);
|
||||
*/
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
pthread_t tid[4];
|
||||
int i;
|
||||
int error;
|
||||
for(i=0; i< 4; i++) {
|
||||
error = pthread_create(&tid[i],
|
||||
NULL, /* default attributes please */
|
||||
pull_one_url,
|
||||
urls[i]);
|
||||
if(0 != error)
|
||||
fprintf(stderr, "Couldn't run thread number %d, errno %d\n", i, error);
|
||||
else
|
||||
fprintf(stderr, "Thread %d, gets %s\n", i, urls[i]);
|
||||
}
|
||||
|
||||
/* now wait for all threads to terminate */
|
||||
for(i=0; i< 4; i++) {
|
||||
error = pthread_join(tid[i], NULL);
|
||||
fprintf(stderr, "Thread %d terminated\n", i);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
53
docs/examples/persistant.c
Normal file
53
docs/examples/persistant.c
Normal file
@@ -0,0 +1,53 @@
|
||||
/*****************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include <curl/curl.h>
|
||||
|
||||
/* to make this work under windows, use the win32-functions from the
|
||||
docs/examples/win32socket.c file as well */
|
||||
|
||||
/* This example REQUIRES libcurl 7.7 or later */
|
||||
#if (LIBCURL_VERSION_NUM < 0x070700)
|
||||
#error Too old libcurl version, upgrade or stay away.
|
||||
#endif
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
CURL *curl;
|
||||
CURLcode res;
|
||||
|
||||
#ifdef MALLOCDEBUG
|
||||
/* this sends all memory debug messages to a specified logfile */
|
||||
curl_memdebug("memdump");
|
||||
#endif
|
||||
|
||||
curl = curl_easy_init();
|
||||
if(curl) {
|
||||
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
|
||||
curl_easy_setopt(curl, CURLOPT_HEADER, 1);
|
||||
|
||||
/* get the first document */
|
||||
curl_easy_setopt(curl, CURLOPT_URL, "http://curl.haxx.se/");
|
||||
res = curl_easy_perform(curl);
|
||||
|
||||
/* get another document from the same server using the same
|
||||
connection */
|
||||
curl_easy_setopt(curl, CURLOPT_URL, "http://curl.haxx.se/docs/");
|
||||
res = curl_easy_perform(curl);
|
||||
|
||||
/* always cleanup */
|
||||
curl_easy_cleanup(curl);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
89
docs/examples/post-callback.c
Normal file
89
docs/examples/post-callback.c
Normal file
@@ -0,0 +1,89 @@
|
||||
/*****************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* $Id$
|
||||
*
|
||||
* An example source code that issues a HTTP POST and we provide the actual
|
||||
* data through a read callback.
|
||||
*
|
||||
* Please be aware of the fact that the size of the posted data MUST be
|
||||
* specified before the transfer is being made (with CURLOPT_POSTFIELDSIZE).
|
||||
* This requirement will change when libcurl starts supporting chunked-encoded
|
||||
* sends.
|
||||
*
|
||||
* This example requires libcurl 7.9.6 or later.
|
||||
*/
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <curl/curl.h>
|
||||
|
||||
#if LIBCURL_VERSION_NUM < 0x070906
|
||||
#error this example source requires libcurl 7.9.6 or newer
|
||||
#endif
|
||||
|
||||
char data[]="this is what we post to the silly web server";
|
||||
|
||||
struct WriteThis {
|
||||
char *readptr;
|
||||
int sizeleft;
|
||||
};
|
||||
|
||||
size_t read_callback(void *ptr, size_t size, size_t nmemb, void *userp)
|
||||
{
|
||||
struct WriteThis *pooh = (struct WriteThis *)userp;
|
||||
|
||||
if(size*nmemb < 1)
|
||||
return 0;
|
||||
|
||||
if(pooh->sizeleft) {
|
||||
*(char *)ptr = pooh->readptr[0]; /* copy one single byte */
|
||||
pooh->readptr++; /* advance pointer */
|
||||
pooh->sizeleft--; /* less data left */
|
||||
return 1; /* we return 1 byte at a time! */
|
||||
}
|
||||
|
||||
return -1; /* no more data left to deliver */
|
||||
}
|
||||
|
||||
int main(void)
|
||||
{
|
||||
CURL *curl;
|
||||
CURLcode res;
|
||||
|
||||
struct WriteThis pooh;
|
||||
|
||||
pooh.readptr = data;
|
||||
pooh.sizeleft = strlen(data);
|
||||
|
||||
curl = curl_easy_init();
|
||||
if(curl) {
|
||||
/* First set the URL that is about to receive our POST. */
|
||||
curl_easy_setopt(curl, CURLOPT_URL,
|
||||
"http://receivingsite.com.pooh/index.cgi");
|
||||
/* Now specify we want to POST data */
|
||||
curl_easy_setopt(curl, CURLOPT_POST, TRUE);
|
||||
|
||||
/* Set the expected POST size */
|
||||
curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, pooh.sizeleft);
|
||||
|
||||
/* we want to use our own read function */
|
||||
curl_easy_setopt(curl, CURLOPT_READFUNCTION, read_callback);
|
||||
|
||||
/* pointer to pass to our read function */
|
||||
curl_easy_setopt(curl, CURLOPT_INFILE, &pooh);
|
||||
|
||||
/* get verbose debug output please */
|
||||
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
|
||||
|
||||
/* Perform the request, res will get the return code */
|
||||
res = curl_easy_perform(curl);
|
||||
|
||||
/* always cleanup */
|
||||
curl_easy_cleanup(curl);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
92
docs/examples/postit2.c
Normal file
92
docs/examples/postit2.c
Normal file
@@ -0,0 +1,92 @@
|
||||
/*****************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* $Id$
|
||||
*
|
||||
* Example code that uploads a file name 'foo' to a remote script that accepts
|
||||
* "HTML form based" (as described in RFC1738) uploads using HTTP POST.
|
||||
*
|
||||
* The imaginary form we'll fill in looks like:
|
||||
*
|
||||
* <form method="post" enctype="multipart/form-data" action="examplepost.cgi">
|
||||
* Enter file: <input type="file" name="sendfile" size="40">
|
||||
* Enter file name: <input type="text" name="filename" size="30">
|
||||
* <input type="submit" value="send" name="submit">
|
||||
* </form>
|
||||
*
|
||||
* This exact source code has not been verified to work.
|
||||
*/
|
||||
|
||||
/* to make this work under windows, use the win32-functions from the
|
||||
win32socket.c file as well */
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <curl/curl.h>
|
||||
#include <curl/types.h>
|
||||
#include <curl/easy.h>
|
||||
|
||||
#if LIBCURL_VERSION_NUM < 0x070900
|
||||
#error "curl_formadd() is not introduced until libcurl 7.9 and later"
|
||||
#endif
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
CURL *curl;
|
||||
CURLcode res;
|
||||
|
||||
struct HttpPost *formpost=NULL;
|
||||
struct HttpPost *lastptr=NULL;
|
||||
struct curl_slist *headerlist=NULL;
|
||||
char buf[] = "Expect:";
|
||||
|
||||
/* Fill in the file upload field */
|
||||
curl_formadd(&formpost,
|
||||
&lastptr,
|
||||
CURLFORM_COPYNAME, "sendfile",
|
||||
CURLFORM_FILE, "postit2.c",
|
||||
CURLFORM_END);
|
||||
|
||||
/* Fill in the filename field */
|
||||
curl_formadd(&formpost,
|
||||
&lastptr,
|
||||
CURLFORM_COPYNAME, "filename",
|
||||
CURLFORM_COPYCONTENTS, "postit2.c",
|
||||
CURLFORM_END);
|
||||
|
||||
|
||||
/* Fill in the submit field too, even if this is rarely needed */
|
||||
curl_formadd(&formpost,
|
||||
&lastptr,
|
||||
CURLFORM_COPYNAME, "submit",
|
||||
CURLFORM_COPYCONTENTS, "send",
|
||||
CURLFORM_END);
|
||||
|
||||
curl = curl_easy_init();
|
||||
/* initalize custom header list (stating that Expect: 100-continue is not
|
||||
wanted */
|
||||
headerlist = curl_slist_append(headerlist, buf);
|
||||
if(curl) {
|
||||
/* what URL that receives this POST */
|
||||
curl_easy_setopt(curl, CURLOPT_URL, "http://curl.haxx.se/examplepost.cgi");
|
||||
if ( (argc == 2) && (!strcmp(argv[1], "noexpectheader")) )
|
||||
/* only disable 100-continue header if explicitly requested */
|
||||
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headerlist);
|
||||
curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost);
|
||||
res = curl_easy_perform(curl);
|
||||
|
||||
/* always cleanup */
|
||||
curl_easy_cleanup(curl);
|
||||
|
||||
/* then cleanup the formpost chain */
|
||||
curl_formfree(formpost);
|
||||
/* free slist */
|
||||
curl_slist_free_all (headerlist);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
80
docs/examples/sepheaders.c
Normal file
80
docs/examples/sepheaders.c
Normal file
@@ -0,0 +1,80 @@
|
||||
/*****************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/* to make this work under windows, use the win32-functions from the
|
||||
win32socket.c file as well */
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include <curl/curl.h>
|
||||
#include <curl/types.h>
|
||||
#include <curl/easy.h>
|
||||
|
||||
size_t write_data(void *ptr, size_t size, size_t nmemb, void *stream)
|
||||
{
|
||||
int written = fwrite(ptr, size, nmemb, (FILE *)stream);
|
||||
return written;
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
CURL *curl_handle;
|
||||
char *headerfilename = "head.out";
|
||||
FILE *headerfile;
|
||||
char *bodyfilename = "body.out";
|
||||
FILE *bodyfile;
|
||||
|
||||
/* init the curl session */
|
||||
curl_handle = curl_easy_init();
|
||||
|
||||
/* set URL to get */
|
||||
curl_easy_setopt(curl_handle, CURLOPT_URL, "http://curl.haxx.se");
|
||||
|
||||
/* no progress meter please */
|
||||
curl_easy_setopt(curl_handle, CURLOPT_NOPROGRESS, 1);
|
||||
|
||||
/* shut up completely */
|
||||
curl_easy_setopt(curl_handle, CURLOPT_MUTE, 1);
|
||||
|
||||
/* send all data to this function */
|
||||
curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, write_data);
|
||||
|
||||
/* open the files */
|
||||
headerfile = fopen(headerfilename,"w");
|
||||
if (headerfile == NULL) {
|
||||
curl_easy_cleanup(curl_handle);
|
||||
return -1;
|
||||
}
|
||||
bodyfile = fopen(bodyfilename,"w");
|
||||
if (bodyfile == NULL) {
|
||||
curl_easy_cleanup(curl_handle);
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* we want the headers to this file handle */
|
||||
curl_easy_setopt(curl_handle, CURLOPT_WRITEHEADER ,headerfile);
|
||||
|
||||
/*
|
||||
* Notice here that if you want the actual data sent anywhere else but
|
||||
* stdout, you should consider using the CURLOPT_WRITEDATA option. */
|
||||
|
||||
/* get it! */
|
||||
curl_easy_perform(curl_handle);
|
||||
|
||||
/* close the header file */
|
||||
fclose(headerfile);
|
||||
|
||||
/* cleanup curl stuff */
|
||||
curl_easy_cleanup(curl_handle);
|
||||
|
||||
return 0;
|
||||
}
|
||||
28
docs/examples/simple.c
Normal file
28
docs/examples/simple.c
Normal file
@@ -0,0 +1,28 @@
|
||||
/*****************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <curl/curl.h>
|
||||
|
||||
int main(void)
|
||||
{
|
||||
CURL *curl;
|
||||
CURLcode res;
|
||||
|
||||
curl = curl_easy_init();
|
||||
if(curl) {
|
||||
curl_easy_setopt(curl, CURLOPT_URL, "curl.haxx.se");
|
||||
res = curl_easy_perform(curl);
|
||||
|
||||
/* always cleanup */
|
||||
curl_easy_cleanup(curl);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
36
docs/examples/simplepost.c
Normal file
36
docs/examples/simplepost.c
Normal file
@@ -0,0 +1,36 @@
|
||||
/*****************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <curl/curl.h>
|
||||
|
||||
int main(void)
|
||||
{
|
||||
CURL *curl;
|
||||
CURLcode res;
|
||||
|
||||
char *postthis="moo mooo moo moo";
|
||||
|
||||
curl = curl_easy_init();
|
||||
if(curl) {
|
||||
curl_easy_setopt(curl, CURLOPT_URL, "http://posthere.com");
|
||||
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postthis);
|
||||
|
||||
/* if we don't provide POSTFIELDSIZE, libcurl will strlen() by
|
||||
itself */
|
||||
curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, strlen(postthis));
|
||||
|
||||
res = curl_easy_perform(curl);
|
||||
|
||||
/* always cleanup */
|
||||
curl_easy_cleanup(curl);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
118
docs/examples/simplessl.c
Normal file
118
docs/examples/simplessl.c
Normal file
@@ -0,0 +1,118 @@
|
||||
/*****************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#include <curl/curl.h>
|
||||
#include <curl/types.h>
|
||||
#include <curl/easy.h>
|
||||
|
||||
|
||||
/* some requirements for this to work:
|
||||
1. set pCertFile to the file with the client certificate
|
||||
2. if the key is passphrase protected, set pPassphrase to the
|
||||
passphrase you use
|
||||
3. if you are using a crypto engine:
|
||||
3.1. set a #define USE_ENGINE
|
||||
3.2. set pEngine to the name of the crypto engine you use
|
||||
3.3. set pKeyName to the key identifier you want to use
|
||||
4. if you don't use a crypto engine:
|
||||
4.1. set pKeyName to the file name of your client key
|
||||
4.2. if the format of the key file is DER, set pKeyType to "DER"
|
||||
|
||||
!! verify of the server certificate is not implemented here !!
|
||||
|
||||
**** This example only works with libcurl 7.9.3 and later! ****
|
||||
|
||||
*/
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
CURL *curl;
|
||||
CURLcode res;
|
||||
FILE *headerfile;
|
||||
|
||||
const char *pCertFile = "testcert.pem";
|
||||
const char *pCACertFile="cacert.pem";
|
||||
|
||||
const char *pKeyName;
|
||||
const char *pKeyType;
|
||||
|
||||
const char *pEngine;
|
||||
|
||||
#if USE_ENGINE
|
||||
pKeyName = "rsa_test";
|
||||
pKeyType = "ENG";
|
||||
pEngine = "chil"; /* for nChiper HSM... */
|
||||
#else
|
||||
pKeyName = "testkey.pem";
|
||||
pKeyType = "PEM";
|
||||
pEngine = NULL;
|
||||
#endif
|
||||
|
||||
const char *pPassphrase = NULL;
|
||||
|
||||
headerfile = fopen("dumpit", "w");
|
||||
|
||||
curl_global_init(CURL_GLOBAL_DEFAULT);
|
||||
|
||||
curl = curl_easy_init();
|
||||
if(curl) {
|
||||
/* what call to write: */
|
||||
curl_easy_setopt(curl, CURLOPT_URL, "HTTPS://your.favourite.ssl.site");
|
||||
curl_easy_setopt(curl, CURLOPT_WRITEHEADER, headerfile);
|
||||
|
||||
while(1) /* do some ugly short cut... */
|
||||
{
|
||||
if (pEngine) /* use crypto engine */
|
||||
{
|
||||
if (curl_easy_setopt(curl, CURLOPT_SSLENGINE,pEngine) != CURLE_OK)
|
||||
{ /* load the crypto engine */
|
||||
fprintf(stderr,"can't set crypto engine\n");
|
||||
break;
|
||||
}
|
||||
if (curl_easy_setopt(curl, CURLOPT_SSLENGINE_DEFAULT,1) != CURLE_OK)
|
||||
{ /* set the crypto engine as default */
|
||||
/* only needed for the first time you load
|
||||
a engine in a curl object... */
|
||||
fprintf(stderr,"can't set crypto engine as default\n");
|
||||
break;
|
||||
}
|
||||
}
|
||||
/* cert is stored PEM coded in file... */
|
||||
/* since PEM is default, we needn't set it for PEM */
|
||||
curl_easy_setopt(curl,CURLOPT_SSLCERTTYPE,"PEM");
|
||||
/* set the cert for client authentication */
|
||||
curl_easy_setopt(curl,CURLOPT_SSLCERT,pCertFile);
|
||||
/* sorry, for engine we must set the passphrase
|
||||
(if the key has one...) */
|
||||
if (pPassphrase)
|
||||
curl_easy_setopt(curl,CURLOPT_SSLKEYPASSWD,pPassphrase);
|
||||
/* if we use a key stored in a crypto engine,
|
||||
we must set the key type to "ENG" */
|
||||
curl_easy_setopt(curl,CURLOPT_SSLKEYTYPE,pKeyType);
|
||||
/* set the private key (file or ID in engine) */
|
||||
curl_easy_setopt(curl,CURLOPT_SSLKEY,pKeyName);
|
||||
/* set the file with the certs vaildating the server */
|
||||
curl_easy_setopt(curl,CURLOPT_CAINFO,pCACertFile);
|
||||
/* disconnect if we can't validate server's cert */
|
||||
curl_easy_setopt(curl,CURLOPT_SSL_VERIFYPEER,1);
|
||||
|
||||
res = curl_easy_perform(curl);
|
||||
break; /* we are done... */
|
||||
}
|
||||
/* always cleanup */
|
||||
curl_easy_cleanup(curl);
|
||||
}
|
||||
|
||||
curl_global_cleanup();
|
||||
|
||||
return 0;
|
||||
}
|
||||
21
docs/index.html
Normal file
21
docs/index.html
Normal file
@@ -0,0 +1,21 @@
|
||||
<HTML>
|
||||
<HEAD>
|
||||
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
|
||||
<TITLE>Index to Curl documentation</TITLE>
|
||||
</HEAD>
|
||||
|
||||
<BODY>
|
||||
<H1 ALIGN="CENTER">Index to Curl documentation</H1>
|
||||
|
||||
<H2>Programs</H2>
|
||||
<a href="curl-config.html">curl-config</A>
|
||||
<br><a href="curl.html">curl</A>
|
||||
|
||||
<h2>Tutorial</h2>
|
||||
<a href="TheArtOfHttpScripting">The Art Of Scripting HTTP Requests Using Curl</a> (plain text)
|
||||
|
||||
<h2>libcurl</h2>
|
||||
See the <a href="libcurl/index.html">libcurl section</a>
|
||||
|
||||
</BODY>
|
||||
</HTML>
|
||||
1102
docs/libcurl-the-guide
Normal file
1102
docs/libcurl-the-guide
Normal file
File diff suppressed because it is too large
Load Diff
5
docs/libcurl/.cvsignore
Normal file
5
docs/libcurl/.cvsignore
Normal file
@@ -0,0 +1,5 @@
|
||||
Makefile
|
||||
Makefile.in
|
||||
*html
|
||||
*ps
|
||||
*pdf
|
||||
132
docs/libcurl/Makefile.am
Normal file
132
docs/libcurl/Makefile.am
Normal file
@@ -0,0 +1,132 @@
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
|
||||
AUTOMAKE_OPTIONS = foreign no-dependencies
|
||||
|
||||
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_formparse.3 \
|
||||
curl_formadd.3 \
|
||||
curl_formfree.3 \
|
||||
curl_getdate.3 \
|
||||
curl_getenv.3 \
|
||||
curl_slist_append.3 \
|
||||
curl_slist_free_all.3 \
|
||||
curl_version.3 \
|
||||
curl_version_info.3 \
|
||||
curl_escape.3 \
|
||||
curl_unescape.3 \
|
||||
curl_free.3 \
|
||||
curl_strequal.3 \
|
||||
curl_strnequal.3 \
|
||||
curl_mprintf.3 \
|
||||
curl_global_init.3 \
|
||||
curl_global_cleanup.3 \
|
||||
libcurl.3 \
|
||||
curl_multi_add_handle.3 \
|
||||
curl_multi_cleanup.3 \
|
||||
curl_multi_fdset.3 \
|
||||
curl_multi_info_read.3 \
|
||||
curl_multi_init.3 \
|
||||
curl_multi_perform.3 \
|
||||
curl_multi_remove_handle.3 \
|
||||
libcurl-multi.3 \
|
||||
libcurl-errors.3
|
||||
|
||||
HTMLPAGES = \
|
||||
curl_easy_cleanup.html \
|
||||
curl_easy_getinfo.html \
|
||||
curl_easy_init.html \
|
||||
curl_easy_perform.html \
|
||||
curl_easy_setopt.html \
|
||||
curl_easy_duphandle.html \
|
||||
curl_formadd.html \
|
||||
curl_formparse.html \
|
||||
curl_formfree.html \
|
||||
curl_getdate.html \
|
||||
curl_getenv.html \
|
||||
curl_slist_append.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_strnequal.html \
|
||||
curl_mprintf.html \
|
||||
curl_global_init.html \
|
||||
curl_global_cleanup.html \
|
||||
libcurl.html \
|
||||
curl_multi_add_handle.html \
|
||||
curl_multi_cleanup.html \
|
||||
curl_multi_fdset.html \
|
||||
curl_multi_info_read.html \
|
||||
curl_multi_init.html \
|
||||
curl_multi_perform.html \
|
||||
curl_multi_remove_handle.html \
|
||||
libcurl-multi.html \
|
||||
libcurl-errors.html \
|
||||
index.html
|
||||
|
||||
PDFPAGES = \
|
||||
curl_easy_cleanup.pdf \
|
||||
curl_easy_getinfo.pdf \
|
||||
curl_easy_init.pdf \
|
||||
curl_easy_perform.pdf \
|
||||
curl_easy_setopt.pdf \
|
||||
curl_easy_duphandle.pdf \
|
||||
curl_formadd.pdf \
|
||||
curl_formparse.pdf \
|
||||
curl_formfree.pdf \
|
||||
curl_getdate.pdf \
|
||||
curl_getenv.pdf \
|
||||
curl_slist_append.pdf \
|
||||
curl_slist_free_all.pdf \
|
||||
curl_version.pdf \
|
||||
curl_version_info.pdf \
|
||||
curl_escape.pdf \
|
||||
curl_unescape.pdf \
|
||||
curl_free.pdf \
|
||||
curl_strequal.pdf \
|
||||
curl_strnequal.pdf \
|
||||
curl_mprintf.pdf \
|
||||
curl_global_init.pdf \
|
||||
curl_global_cleanup.pdf \
|
||||
libcurl.pdf \
|
||||
curl_multi_add_handle.pdf \
|
||||
curl_multi_cleanup.pdf \
|
||||
curl_multi_fdset.pdf \
|
||||
curl_multi_info_read.pdf \
|
||||
curl_multi_init.pdf \
|
||||
curl_multi_perform.pdf \
|
||||
curl_multi_remove_handle.pdf \
|
||||
libcurl-multi.pdf \
|
||||
libcurl-errors.pdf
|
||||
|
||||
EXTRA_DIST = $(man_MANS) $(HTMLPAGES) $(PDFPAGES)
|
||||
|
||||
MAN2HTML= gnroff -man $< | man2html >$@
|
||||
|
||||
SUFFIXES = .1 .3 .html
|
||||
|
||||
html: $(HTMLPAGES)
|
||||
|
||||
.3.html:
|
||||
$(MAN2HTML)
|
||||
|
||||
.1.html:
|
||||
$(MAN2HTML)
|
||||
|
||||
pdf:
|
||||
for file in $(man_MANS); do \
|
||||
foo=`echo $$file | sed -e 's/\.[0-9]$$//g'`; \
|
||||
groff -Tps -man $$file >$$foo.ps; \
|
||||
ps2pdf $$foo.ps $$foo.pdf; \
|
||||
done
|
||||
28
docs/libcurl/curl_easy_cleanup.3
Normal file
28
docs/libcurl/curl_easy_cleanup.3
Normal file
@@ -0,0 +1,28 @@
|
||||
.\" You can view this file with:
|
||||
.\" nroff -man [file]
|
||||
.\" $Id$
|
||||
.\"
|
||||
.TH curl_easy_cleanup 3 "13 Nov 2002" "libcurl 7.7" "libcurl Manual"
|
||||
.SH NAME
|
||||
curl_easy_cleanup - End a libcurl easy session
|
||||
.SH SYNOPSIS
|
||||
.B #include <curl/curl.h>
|
||||
.sp
|
||||
.BI "void curl_easy_cleanup(CURL *" handle ");"
|
||||
.ad
|
||||
.SH DESCRIPTION
|
||||
This function must be the last function to call for an easy session. It is the
|
||||
opposite of the \fIcurl_easy_init\fP function and must be called with the same
|
||||
\fIhandle\fP as input that the curl_easy_init call returned.
|
||||
|
||||
This will effectively close all connections this handle has used and possibly
|
||||
has kept open until now. Don't call this function if you intend to transfer
|
||||
more files.
|
||||
|
||||
When you've called this, you can safely remove all the strings you've
|
||||
previously told libcurl to use, as it won't use them anymore now.
|
||||
.SH RETURN VALUE
|
||||
None
|
||||
.SH "SEE ALSO"
|
||||
.BR curl_easy_init "(3), "
|
||||
|
||||
37
docs/libcurl/curl_easy_duphandle.3
Normal file
37
docs/libcurl/curl_easy_duphandle.3
Normal file
@@ -0,0 +1,37 @@
|
||||
.\" You can view this file with:
|
||||
.\" nroff -man [file]
|
||||
.\" $Id$
|
||||
.\"
|
||||
.TH curl_easy_duphandle 3 "18 September 2001" "libcurl 7.9" "libcurl Manual"
|
||||
.SH NAME
|
||||
curl_easy_duphandle - Clone a libcurl session handle
|
||||
.SH SYNOPSIS
|
||||
.B #include <curl/curl.h>
|
||||
.sp
|
||||
.BI "CURL *curl_easy_duphandle(CURL *"handle ");"
|
||||
.ad
|
||||
.SH DESCRIPTION
|
||||
This function will return a new curl handle, a duplicate, using all the
|
||||
options previously set in the input curl \fIhandle\fP. Both handles can
|
||||
subsequently be used independently and they must both be freed with
|
||||
\fIcurl_easy_cleanup()\fP.
|
||||
|
||||
All strings that the input handle has been told to point to (as opposed to
|
||||
copy) with previous calls to \fIcurl_easy_setopt\fP using char * inputs, will
|
||||
be pointed to by the new handle as well. You must therefore make sure to keep
|
||||
the data around until both handles have been cleaned up.
|
||||
|
||||
The new handle will \fBnot\fP inherit any state information, no connections,
|
||||
no SSL sessions and no cookies.
|
||||
|
||||
\fBNote\fP that even in multi-threaded programs, this function must be called
|
||||
in a synchronous way, the input handle may not be in use when cloned.
|
||||
|
||||
This function was added in libcurl 7.9.
|
||||
.SH RETURN VALUE
|
||||
If this function returns NULL, something went wrong and no valid handle was
|
||||
returned.
|
||||
.SH "SEE ALSO"
|
||||
.BR curl_easy_init "(3)," curl_easy_cleanup "(3)," curl_global_init "(3)
|
||||
.SH BUGS
|
||||
Surely there are some, you tell me!
|
||||
131
docs/libcurl/curl_easy_getinfo.3
Normal file
131
docs/libcurl/curl_easy_getinfo.3
Normal file
@@ -0,0 +1,131 @@
|
||||
.\" You can view this file with:
|
||||
.\" nroff -man [file]
|
||||
.\" $Id$
|
||||
.\"
|
||||
.TH curl_easy_init 3 "25 Apr 2002" "libcurl 7.9.7" "libcurl Manual"
|
||||
.SH NAME
|
||||
curl_easy_getinfo - Extract information from a curl session (added in 7.4)
|
||||
.SH SYNOPSIS
|
||||
.B #include <curl/curl.h>
|
||||
.sp
|
||||
.BI "CURLcode curl_easy_getinfo(CURL *curl, CURLINFO info, ... );"
|
||||
.ad
|
||||
.SH DESCRIPTION
|
||||
Request internal information from the curl session with this function. The
|
||||
third argument
|
||||
.B MUST
|
||||
be a pointer to a long, a pointer to a char * or a pointer to a double (as
|
||||
this documentation describes further down). The data pointed-to will be
|
||||
filled in accordingly and can be relied upon only if the function returns
|
||||
CURLE_OK. This function is intended to get used *AFTER* a performed transfer,
|
||||
all results from this function are undefined until the transfer is completed.
|
||||
.SH AVAILABLE INFORMATION
|
||||
These are informations that can be extracted:
|
||||
.TP 0.8i
|
||||
.B CURLINFO_EFFECTIVE_URL
|
||||
Pass a pointer to a 'char *' to receive the last used effective URL.
|
||||
.TP
|
||||
.B CURLINFO_HTTP_CODE
|
||||
Pass a pointer to a long to receive the last received HTTP code.
|
||||
.TP
|
||||
.B CURLINFO_FILETIME
|
||||
Pass a pointer to a long to receive the remote time of the retrieved
|
||||
document. If you get -1, it can be because of many reasons (unknown, the
|
||||
server hides it or the server doesn't support the command that tells document
|
||||
time etc) and the time of the document is unknown. Note that you must tell the
|
||||
server to collect this information before the transfer is made, by using the
|
||||
CURLOPT_FILETIME option to \fIcurl_easy_setopt(3)\fP. (Added in 7.5)
|
||||
.TP
|
||||
.B CURLINFO_TOTAL_TIME
|
||||
Pass a pointer to a double to receive the total transaction time in seconds
|
||||
for the previous transfer. This time does not include the connect time, so if
|
||||
you want the complete operation time, you should add the
|
||||
CURLINFO_CONNECT_TIME.
|
||||
.TP
|
||||
.B CURLINFO_NAMELOOKUP_TIME
|
||||
Pass a pointer to a double to receive the time, in seconds, it took from the
|
||||
start until the name resolving was completed.
|
||||
.TP
|
||||
.B CURLINFO_CONNECT_TIME
|
||||
Pass a pointer to a double to receive the time, in seconds, it took from the
|
||||
start until the connect to the remote host (or proxy) was completed.
|
||||
.TP
|
||||
.B CURLINFO_PRETRANSFER_TIME
|
||||
Pass a pointer to a double to receive the time, in seconds, it took from the
|
||||
start until the file transfer is just about to begin. This includes all
|
||||
pre-transfer commands and negotiations that are specific to the particular
|
||||
protocol(s) involved.
|
||||
.TP
|
||||
.B CURLINFO_STARTTRANSFER_TIME
|
||||
Pass a pointer to a double to receive the time, in seconds, it took from the
|
||||
start until the first byte is just about to be transfered. This includes
|
||||
CURLINFO_PRETRANSFER_TIME and also the time the server needs to calculate
|
||||
the result.
|
||||
.TP
|
||||
.B CURLINFO_REDIRECT_TIME
|
||||
Pass a pointer to a double to receive the total time, in seconds, it took for
|
||||
all redirection steps include name lookup, connect, pretransfer and transfer
|
||||
before final transaction was started. CURLINFO_REDIRECT_TIME contains the
|
||||
complete execution time for multiple redirections. (Added in 7.9.7)
|
||||
.TP
|
||||
.B CURLINFO_REDIRECT_COUNT
|
||||
Pass a pointer to a long to receive the total number of redirections that were
|
||||
actually followed. (Added in 7.9.7)
|
||||
.TP
|
||||
.B CURLINFO_SIZE_UPLOAD
|
||||
Pass a pointer to a double to receive the total amount of bytes that were
|
||||
uploaded.
|
||||
.TP
|
||||
.B CURLINFO_SIZE_DOWNLOAD
|
||||
Pass a pointer to a double to receive the total amount of bytes that were
|
||||
downloaded. The amount is only for the latest transfer and will be reset again
|
||||
for each new transfer.
|
||||
.TP
|
||||
.B CURLINFO_SPEED_DOWNLOAD
|
||||
Pass a pointer to a double to receive the average download speed that curl
|
||||
measured for the complete download.
|
||||
.TP
|
||||
.B CURLINFO_SPEED_UPLOAD
|
||||
Pass a pointer to a double to receive the average upload speed that curl
|
||||
measured for the complete upload.
|
||||
.TP
|
||||
.B CURLINFO_HEADER_SIZE
|
||||
Pass a pointer to a long to receive the total size of all the headers
|
||||
received.
|
||||
.TP
|
||||
.B CURLINFO_REQUEST_SIZE
|
||||
Pass a pointer to a long to receive the total size of the issued
|
||||
requests. This is so far only for HTTP requests. Note that this may be more
|
||||
than one request if FOLLOWLOCATION is true.
|
||||
.TP
|
||||
.B CURLINFO_SSL_VERIFYRESULT
|
||||
Pass a pointer to a long to receive the result of the certification
|
||||
verification that was requested (using the CURLOPT_SSL_VERIFYPEER option to
|
||||
curl_easy_setopt). (Added in 7.4.2)
|
||||
.TP
|
||||
.B CURLINFO_CONTENT_LENGTH_DOWNLOAD
|
||||
Pass a pointer to a double to receive the content-length of the download. This
|
||||
is the value read from the Content-Length: field. (Added in 7.6.1)
|
||||
.TP
|
||||
.B CURLINFO_CONTENT_LENGTH_UPLOAD
|
||||
Pass a pointer to a double to receive the specified size of the upload.
|
||||
(Added in 7.6.1)
|
||||
.TP
|
||||
.B CURLINFO_CONTENT_TYPE
|
||||
Pass a pointer to a 'char *' to receive the content-type of the downloaded
|
||||
object. This is the value read from the Content-Type: field. If you get NULL,
|
||||
it means that the server didn't send a valid Content-Type header or that the
|
||||
protocol used doesn't support this. (Added in 7.9.4)
|
||||
.TP
|
||||
.B CURLINFO_PRIVATE
|
||||
Pass a pointer to a 'char *' to receive the pointer to the private data
|
||||
associated with the curl handle (set with the CURLOPT_PRIVATE option to curl_easy_setopt).
|
||||
(Added in 7.10.3)
|
||||
.PP
|
||||
.SH RETURN VALUE
|
||||
If the operation was successful, CURLE_OK is returned. Otherwise an
|
||||
appropriate error code will be returned.
|
||||
.SH "SEE ALSO"
|
||||
.BR curl_easy_setopt "(3)"
|
||||
.SH BUGS
|
||||
Surely there are some, you tell me!
|
||||
25
docs/libcurl/curl_easy_init.3
Normal file
25
docs/libcurl/curl_easy_init.3
Normal file
@@ -0,0 +1,25 @@
|
||||
.\" You can view this file with:
|
||||
.\" nroff -man [file]
|
||||
.\" $Id$
|
||||
.\"
|
||||
.TH curl_easy_init 3 "4 March 2002" "libcurl 7.8.1" "libcurl Manual"
|
||||
.SH NAME
|
||||
curl_easy_init - Start a libcurl easy session
|
||||
.SH SYNOPSIS
|
||||
.B #include <curl/curl.h>
|
||||
.sp
|
||||
.BI "CURL *curl_easy_init( );"
|
||||
.ad
|
||||
.SH DESCRIPTION
|
||||
This function must be the first function to call, and it returns a CURL easy
|
||||
handle that you must use as input to other easy-functions. curl_easy_init
|
||||
intializes curl and this call MUST have a corresponding call to
|
||||
\fIcurl_easy_cleanup\fP when the operation is complete.
|
||||
|
||||
.SH RETURN VALUE
|
||||
If this function returns NULL, something went wrong and you cannot use the
|
||||
other curl functions.
|
||||
.SH "SEE ALSO"
|
||||
.BR curl_easy_cleanup "(3), " curl_global_init "(3)
|
||||
.SH BUGS
|
||||
Surely there are some, you tell me!
|
||||
46
docs/libcurl/curl_easy_perform.3
Normal file
46
docs/libcurl/curl_easy_perform.3
Normal file
@@ -0,0 +1,46 @@
|
||||
.\" You can view this file with:
|
||||
.\" nroff -man [file]
|
||||
.\" $Id$
|
||||
.\"
|
||||
.TH curl_easy_perform 3 "5 Mar 2001" "libcurl 7.7" "libcurl Manual"
|
||||
.SH NAME
|
||||
curl_easy_perform - Perform a file transfer
|
||||
.SH SYNOPSIS
|
||||
.B #include <curl/curl.h>
|
||||
.sp
|
||||
.BI "CURLcode curl_easy_perform(CURL *" handle ");
|
||||
.ad
|
||||
.SH DESCRIPTION
|
||||
This function is called after the init and all the curl_easy_setopt() calls
|
||||
are made, and will perform the transfer as described in the options.
|
||||
It must be called with the same
|
||||
.I handle
|
||||
as input as the curl_easy_init call returned.
|
||||
|
||||
libcurl version 7.7 or later (for older versions see below): You can do any
|
||||
amount of calls to curl_easy_perform() while using the same handle. If you
|
||||
intend to transfer more than one file, you are even encouraged to do
|
||||
so. libcurl will then attempt to re-use the same connection for the following
|
||||
transfers, thus making the operations faster, less CPU intense and using less
|
||||
network resources. Just note that you will have to use
|
||||
.I curl_easy_setopt
|
||||
between the invokes to set options for the following curl_easy_perform.
|
||||
|
||||
You must never call this function simultaneously from two places using the
|
||||
same handle. Let the function return first before invoking it another time. If
|
||||
you want parallel transfers, you must use several curl handles.
|
||||
|
||||
Before libcurl version 7.7: You are only allowed to call this function once
|
||||
using the same handle. If you want to do repeated calls, you must call
|
||||
curl_easy_cleanup and curl_easy_init again first.
|
||||
.SH RETURN VALUE
|
||||
0 means everything was ok, non-zero means an error occurred as
|
||||
.I <curl/curl.h>
|
||||
defines. If the CURLOPT_ERRORBUFFER was set with
|
||||
.I curl_easy_setopt
|
||||
there will be a readable error message in the error buffer when non-zero is
|
||||
returned.
|
||||
.SH "SEE ALSO"
|
||||
.BR curl_easy_init "(3), " curl_easy_setopt "(3), "
|
||||
.SH BUGS
|
||||
Surely there are some, you tell me!
|
||||
911
docs/libcurl/curl_easy_setopt.3
Normal file
911
docs/libcurl/curl_easy_setopt.3
Normal file
@@ -0,0 +1,911 @@
|
||||
.\" nroff -man [file]
|
||||
.\" $Id$
|
||||
.\"
|
||||
.TH curl_easy_setopt 3 "10 Jun 2003" "libcurl 7.10.6" "libcurl Manual"
|
||||
.SH NAME
|
||||
curl_easy_setopt - set options for a curl easy handle
|
||||
.SH SYNOPSIS
|
||||
#include <curl/curl.h>
|
||||
|
||||
CURLcode curl_easy_setopt(CURL *handle, CURLoption option, parameter);
|
||||
.ad
|
||||
.SH DESCRIPTION
|
||||
curl_easy_setopt() is used to tell libcurl how to behave. By using the
|
||||
appropriate options to \fIcurl_easy_setopt\fP, you can change libcurl's
|
||||
behavior. All options are set with the \fIoption\fP followed by a
|
||||
\fIparameter\fP. That parameter can be a long, a function pointer or an object
|
||||
pointer, all 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. A typical application uses many
|
||||
curl_easy_setopt() calls in the setup phase.
|
||||
|
||||
\fBNOTE:\fP strings passed to libcurl as 'char *' arguments, will not be
|
||||
copied by the library. Instead you should keep them available until libcurl no
|
||||
longer needs them. Failing to do so will cause very odd behavior or even
|
||||
crashes. libcurl will need them until you call curl_easy_cleanup() or you set
|
||||
the same option again to use a different pointer.
|
||||
|
||||
\fBNOTE2:\fP options set with this function call are valid for the forthcoming
|
||||
data transfers that are performed when you invoke \fIcurl_easy_perform\fP.
|
||||
The options are not in any way reset between transfers, so if you want
|
||||
subsequent transfers with different options, you must change them between the
|
||||
transfers.
|
||||
|
||||
The \fIhandle\fP is the return code from a \fIcurl_easy_init(3)\fP or
|
||||
\fIcurl_easy_duphandle(3)\fP call.
|
||||
.SH BEHAVIOR OPTIONS
|
||||
.TP 0.4i
|
||||
.B CURLOPT_VERBOSE
|
||||
Set the parameter to non-zero to get the library to display a lot of verbose
|
||||
information about its operations. Very useful for libcurl and/or protocol
|
||||
debugging and understanding.
|
||||
|
||||
You hardly ever want this set in production use, you will almost always want
|
||||
this when you debug/report problems. Another neat option for debugging is the
|
||||
\fICURLOPT_DEBUGFUNCTION\fP.
|
||||
.TP
|
||||
.B CURLOPT_HEADER
|
||||
A non-zero parameter tells the library to include the header in the body
|
||||
output. This is only relevant for protocols that actually have headers
|
||||
preceding the data (like HTTP).
|
||||
.TP
|
||||
.B CURLOPT_NOPROGRESS
|
||||
A non-zero parameter tells the library to shut of the built-in progress meter
|
||||
completely.
|
||||
|
||||
\fBNOTE:\fP future versions of libcurl is likely to not have any built-in
|
||||
progress meter at all.
|
||||
.TP
|
||||
.B CURLOPT_NOSIGNAL
|
||||
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
|
||||
process. This option is mainly here to allow multi-threaded unix applications
|
||||
to still set/use all timeout options etc, without risking getting signals.
|
||||
(Added in 7.10)
|
||||
.PP
|
||||
.SH CALLBACK OPTIONS
|
||||
.TP 0.4i
|
||||
.B CURLOPT_WRITEFUNCTION
|
||||
Function pointer that should match the following prototype: \fBsize_t
|
||||
function( void *ptr, size_t size, size_t nmemb, void *stream);\fP This
|
||||
function gets called by libcurl as soon as there is data reveiced that needs
|
||||
to be saved. The size of the data pointed to by \fIptr\fP is \fIsize\fP
|
||||
multiplied with \fInmemb\fP, it will not be zero terminated. Return the number
|
||||
of bytes actually taken care of. If that amount differs from the amount passed
|
||||
to your function, it'll signal an error to the library and it will abort the
|
||||
transfer and return \fICURLE_WRITE_ERROR\fP.
|
||||
|
||||
Set the \fIstream\fP argument with the \fBCURLOPT_FILE\fP option.
|
||||
|
||||
\fBNOTE:\fP you will be passed as much data as possible in all invokes, 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
|
||||
is defined in the curl.h header file: CURL_MAX_WRITE_SIZE.
|
||||
.TP
|
||||
.B CURLOPT_WRITEDATA
|
||||
Data pointer to pass to the file write function. Note that if you specify the
|
||||
\fICURLOPT_WRITEFUNCTION\fP, this is the pointer you'll get as input. If you
|
||||
don't use a callback, you must pass a 'FILE *' as libcurl will pass this to
|
||||
fwrite() when writing data.
|
||||
|
||||
\fBNOTE:\fP If you're using libcurl as a win32 DLL, you MUST use the
|
||||
\fICURLOPT_WRITEFUNCTION\fP if you set this option or you will experience
|
||||
crashes.
|
||||
|
||||
This option is also known with the older name \fBCURLOPT_FILE\fP, the name
|
||||
CURLOPT_WRITEDATA was introduced in 7.9.7.
|
||||
.TP
|
||||
.B CURLOPT_READFUNCTION
|
||||
Function pointer that should match the following prototype: \fBsize_t
|
||||
function( void *ptr, size_t size, size_t nmemb, void *stream);\fP This
|
||||
function gets called by libcurl as soon as it needs to read data in order to
|
||||
send it to the peer. The data area pointed at by the pointer \fIptr\fP may be
|
||||
filled with at most \fIsize\fP multiplied with \fInmemb\fP number of
|
||||
bytes. Your function must return the actual number of bytes that you stored in
|
||||
that memory area. Returning 0 will signal end-of-file to the library and cause
|
||||
it to stop the current transfer.
|
||||
.TP
|
||||
.B 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
|
||||
\fICURLOPT_READFUNCTION\fP if you set this option.
|
||||
|
||||
This option is also known with the older name \fBCURLOPT_INFILE\fP, the name
|
||||
CURLOPT_READDATA was introduced in 7.9.7.
|
||||
.TP
|
||||
.B CURLOPT_PROGRESSFUNCTION
|
||||
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
|
||||
its internal equivalent with a frequent interval during data transfer.
|
||||
Unknown/unused argument values will be set to zero (like if you only download
|
||||
data, the upload size will remain 0). Returning a non-zero value from this
|
||||
callback will cause libcurl to abort the transfer and return
|
||||
\fICURLE_ABORTED_BY_CALLBACK\fP.
|
||||
|
||||
Also note that \fICURLOPT_NOPROGRESS\fP must be set to FALSE to make this
|
||||
function actually get called.
|
||||
.TP
|
||||
.B CURLOPT_PROGRESSDATA
|
||||
Pass a pointer that will be untouched by libcurl and passed as the first
|
||||
argument in the progress callback set with \fICURLOPT_PROGRESSFUNCTION\fP.
|
||||
.TP
|
||||
.B CURLOPT_PASSWDFUNCTION
|
||||
Pass a pointer to a \fIcurl_passwd_callback\fP function that will be called
|
||||
instead of the internal one if libcurl requests a password. The function must
|
||||
match this prototype: \fBint getpass(void *client, char *prompt, char* buffer,
|
||||
int buflen );\fP. If set to NULL, it sets back the function to the internal
|
||||
default one. If the function returns a non-zero value, it will abort the
|
||||
operation and an error (CURLE_BAD_PASSWORD_ENTERED) will be returned.
|
||||
\fIclient\fP is a generic pointer, see \fICURLOPT_PASSWDDATA\fP. \fIprompt\fP
|
||||
is a zero-terminated string that is text that prefixes the input request.
|
||||
\fIbuffer\fP is a pointer to data where the entered password should be stored
|
||||
and \fIbuflen\fP is the maximum number of bytes that may be written in the
|
||||
buffer. (Added in 7.4.2)
|
||||
.TP
|
||||
.B CURLOPT_PASSWDDATA
|
||||
Pass a void * to whatever data you want. The passed pointer will be the first
|
||||
argument sent to the specifed \fICURLOPT_PASSWDFUNCTION\fP function. (Added in
|
||||
7.4.2)
|
||||
.TP
|
||||
.B CURLOPT_HEADERFUNCTION
|
||||
Function pointer that should match the following prototype: \fIsize_t
|
||||
function( void *ptr, size_t size, size_t nmemb, void *stream);\fP. This
|
||||
function gets called by libcurl as soon as there is received header data that
|
||||
needs to be written down. The headers are guaranteed to be written one-by-one
|
||||
and only complete lines are written. Parsing headers should be easy enough
|
||||
using this. The size of the data pointed to by \fIptr\fP is \fIsize\fP
|
||||
multiplied with \fInmemb\fP. The pointer named \fIstream\fP will be the one
|
||||
you passed to libcurl with the \fICURLOPT_WRITEHEADER\fP option. Return the
|
||||
number of bytes actually written or return -1 to signal error to the library
|
||||
(it will cause it to abort the transfer with a \fICURLE_WRITE_ERROR\fP return
|
||||
code). (Added in 7.7.2)
|
||||
.TP
|
||||
.B CURLOPT_WRITEHEADER
|
||||
Pass a pointer to be used to write the header part of the received data to. If
|
||||
you don't use your own callback to take care of the writing, this must be a
|
||||
valid FILE *. See also the \fICURLOPT_HEADERFUNCTION\fP option above on how to
|
||||
set a custom get-all-headers callback.
|
||||
.TP
|
||||
.B CURLOPT_DEBUGFUNCTION
|
||||
Function pointer that should match the following prototype: \fIint
|
||||
curl_debug_callback (CURL *, curl_infotype, char *, size_t, void *);\fP
|
||||
This function will receive debug information if CURLOPT_VERBOSE is
|
||||
enabled. The curl_infotype argument specifies what kind of information it
|
||||
is. This funtion must return 0.
|
||||
|
||||
NOTE: the data pointed to by the char * passed to this function WILL NOT be
|
||||
zero terminated, but will be exactly of the size as told by the size_t
|
||||
argument.
|
||||
.TP
|
||||
.B CURLOPT_DEBUGDATA
|
||||
Pass a pointer to whatever you want passed in to your CURLOPT_DEBUGFUNCTION in
|
||||
the last void * argument. This pointer is not used by libcurl, it is only
|
||||
passed to the callback.
|
||||
.PP
|
||||
.SH ERROR OPTIONS
|
||||
.TP 0.4i
|
||||
.B CURLOPT_ERRORBUFFER
|
||||
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
|
||||
library. The buffer must be at least CURL_ERROR_SIZE big.
|
||||
|
||||
Use \fICURLOPT_VERBOSE\fP and \fICURLOPT_DEBUGFUNCTION\fP to better
|
||||
debug/trace why errors happen.
|
||||
|
||||
\fBNote:\fP if the library does not return an error, the buffer may not have
|
||||
been touched. Do not rely on the contents in those cases.
|
||||
.TP
|
||||
.B CURLOPT_STDERR
|
||||
Pass a FILE * as parameter. This is the stream to use instead of stderr
|
||||
internally when reporting errors.
|
||||
.TP
|
||||
.B CURLOPT_FAILONERROR
|
||||
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
|
||||
the page normally, ignoring that code.
|
||||
.PP
|
||||
.SH NETWORK OPTIONS
|
||||
.TP 0.4i
|
||||
.B CURLOPT_URL
|
||||
The actual URL to deal with. The parameter should be a char * to a zero
|
||||
terminated string. The string must remain present until curl no longer needs
|
||||
it, as it doesn't copy the string.
|
||||
|
||||
\fBNOTE:\fP this option is (the only one) required to be set before
|
||||
\fIcurl_easy_perform(3)\fP is called.
|
||||
.TP
|
||||
.B CURLOPT_PROXY
|
||||
Set HTTP proxy to use. The parameter should be a char * to a zero terminated
|
||||
string holding the host name or dotted IP address. To specify port number in
|
||||
this string, append :[port] to the end of the host name. The proxy string may
|
||||
be prefixed with [protocol]:// since any such prefix will be ignored. The
|
||||
proxy's port number may optionally be specified with the separate option
|
||||
\fICURLOPT_PROXYPORT\fP.
|
||||
|
||||
\fBNOTE:\fP when you tell the library to use a HTTP proxy, libcurl will
|
||||
transparently convert operations to HTTP even if you specify a FTP URL
|
||||
etc. This may have an impact on what other features of the library you can
|
||||
use, such as CURLOPT_QUOTE and similar FTP specifics that don't work unless
|
||||
you tunnel through the HTTP proxy. Such tunneling is activated with
|
||||
\fICURLOPT_HTTPPROXYTUNNEL\fP.
|
||||
|
||||
\fBNOTE2:\fP libcurl respects the environment variables \fBhttp_proxy\fP,
|
||||
\fBftp_proxy\fP, \fBall_proxy\fP etc, if any of those is set.
|
||||
.TP
|
||||
.B CURLOPT_PROXYPORT
|
||||
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.
|
||||
.TP
|
||||
.B CURLOPT_PROXYTYPE
|
||||
Pass a long with this option to set type of the proxy. Available options for
|
||||
this are CURLPROXY_HTTP and CURLPROXY_SOCKS5, with the HTTP one being
|
||||
default. (Added in 7.10)
|
||||
.TP
|
||||
.B CURLOPT_HTTPPROXYTUNNEL
|
||||
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
|
||||
a proxy and to tunnel through it. If you don't know what this means, you
|
||||
probably don't want this tunneling option. (Added in 7.3)
|
||||
.TP
|
||||
.B CURLOPT_INTERFACE
|
||||
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
|
||||
name. (Added in 7.3)
|
||||
.TP
|
||||
.B CURLOPT_DNS_CACHE_TIMEOUT
|
||||
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
|
||||
caching, or set to -1 to make the cached entries remain forever. By default,
|
||||
libcurl caches info for 60 seconds. (Added in 7.9.3)
|
||||
.TP
|
||||
.B CURLOPT_DNS_USE_GLOBAL_CACHE
|
||||
Pass a long. If the value is non-zero, it tells curl to use a global DNS cache
|
||||
that will survive between easy handle creations and deletions. This is not
|
||||
thread-safe and this will use a global varible. (Added in 7.9.3)
|
||||
.TP
|
||||
.B CURLOPT_BUFFERSIZE
|
||||
Pass a long specifying your prefered size for the receive buffer in libcurl.
|
||||
The main point of this would be that the write callback gets called more often
|
||||
and with smaller chunks. This is just treated as a request, not an order. You
|
||||
cannot be guaranteed to actually get the given size. (Added in 7.10)
|
||||
.PP
|
||||
.SH NAMES and PASSWORDS OPTIONS (Authentication)
|
||||
.TP 0.4i
|
||||
.B CURLOPT_NETRC
|
||||
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
|
||||
in the URL supplied with \fICURLOPT_URL\fP.
|
||||
|
||||
\fBNote:\fP libcurl uses a user name (and supplied or prompted password)
|
||||
supplied with \fICURLOPT_USERPWD\fP in preference to any of the options
|
||||
controlled by this parameter.
|
||||
|
||||
Pass a long, set to one of the values described below.
|
||||
.RS
|
||||
.TP 5
|
||||
.B CURL_NETRC_OPTIONAL
|
||||
The use of your \fI~/.netrc\fP file is optional,
|
||||
and information in the URL is to be preferred. The file will be scanned
|
||||
with the host and user name (to find the password only) or with the host only,
|
||||
to find the first user name and password after that \fImachine\fP,
|
||||
which ever information is not specified in the URL.
|
||||
|
||||
Undefined values of the option will have this effect.
|
||||
.TP
|
||||
.B CURL_NETRC_IGNORED
|
||||
The library will ignore the file and use only the information in the URL.
|
||||
|
||||
This is the default.
|
||||
.TP
|
||||
.B CURL_NETRC_REQUIRED
|
||||
This value tells the library that use of the file is required,
|
||||
to ignore the information in the URL,
|
||||
and to search the file with the host only.
|
||||
.RE
|
||||
.TP
|
||||
Only machine name, user name and password are taken into account
|
||||
(init macros and similar things aren't supported).
|
||||
|
||||
\fBNote:\fP libcurl does not verify that the file has the correct properties
|
||||
set (as the standard Unix ftp client does). It should only be readable by
|
||||
user.
|
||||
.TP
|
||||
.B CURLOPT_USERPWD
|
||||
Pass a char * as parameter, which should be [user name]:[password] to use for
|
||||
the connection. If both the colon and password is left out, you will be
|
||||
prompted for it while using a colon with no password will make libcurl use an
|
||||
empty password. \fICURLOPT_PASSWDFUNCTION\fP can be used to set your own
|
||||
prompt function.
|
||||
|
||||
When using HTTP and CURLOPT_FOLLOWLOCATION, libcurl might perform several
|
||||
requests to possibly different hosts. libcurl will only send this user and
|
||||
password information to hosts using the initial host name (unless
|
||||
CURLOPT_UNRESTRICTED_AUTH is set), so if libcurl follows locations to other
|
||||
hosts it will not send the user and password to those. This is enforced to
|
||||
prevent accidental information leakage.
|
||||
.TP
|
||||
.B CURLOPT_PROXYUSERPWD
|
||||
Pass a char * as parameter, which should be [user name]:[password] to use for
|
||||
the connection to the HTTP proxy. If the password is left out, you will be
|
||||
prompted for it. \fICURLOPT_PASSWDFUNCTION\fP can be used to set your own
|
||||
prompt function.
|
||||
.TP
|
||||
.B CURLOPT_HTTPAUTH
|
||||
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
|
||||
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
|
||||
it to use. Note that for some methods, this will induce an extra network
|
||||
round-trip. Set the actual name and password with the \fICURLOPT_USERPWD\fP
|
||||
option. (Added in 7.10.6)
|
||||
.RS
|
||||
.TP 5
|
||||
.B CURLAUTH_BASIC
|
||||
HTTP Basic authentication. This is the default choice, and the only method
|
||||
that is in wide-spread use and supported virtually everywhere. This is sending
|
||||
the user name and password over the network in plain text, easily captured by
|
||||
others.
|
||||
.TP
|
||||
.B CURLAUTH_DIGEST
|
||||
HTTP Digest authentication. Digest authentication is defined in RFC2617 and
|
||||
is a more secure way to do authentication over public networks than the
|
||||
regular old-fashioned Basic method.
|
||||
.TP
|
||||
.B CURLAUTH_GSSNEGOTIATE
|
||||
HTTP GSS-Negotiate authentication. The GSS-Negotiate method was designed by
|
||||
Microsoft and is used in their web aplications. It is primarily meant as a
|
||||
support for Kerberos5 authentication but may be also used along with another
|
||||
authentication methods. For more information see IETF draft
|
||||
draft-brezak-spnego-http-04.txt.
|
||||
.TP
|
||||
.B CURLAUTH_NTLM
|
||||
HTTP NTLM authentication. A proprietary protocol invented and used by
|
||||
Microsoft. It uses a challenge-response and hash concept similar to Digest to
|
||||
prevent the password from being evesdropped.
|
||||
.TP
|
||||
.B CURLAUTH_ANY
|
||||
This is a convenience macro that sets all bits and thus makes libcurl pick any
|
||||
it finds suitable. libcurl will automaticly select the one it finds most
|
||||
secure.
|
||||
.TP
|
||||
.B CURLAUTH_ANYSAFE
|
||||
This is a convenience macro that sets all bits except Basic and thus makes
|
||||
libcurl pick any it finds suitable. libcurl will automaticly select the one it
|
||||
finds most secure.
|
||||
.RE
|
||||
.PP
|
||||
.SH HTTP OPTIONS
|
||||
.TP 0.4i
|
||||
.B CURLOPT_ENCODING
|
||||
Sets the contents of the Accept-Encoding: header sent in an HTTP
|
||||
request, and enables decoding of a response when a Content-Encoding:
|
||||
header is received. Three encodings are supported: \fIidentity\fP,
|
||||
which does nothing, \fIdeflate\fP which requests the server to
|
||||
compress its response using the zlib algorithm, and \fIgzip\fP which
|
||||
requests the gzip algorithm. If a zero-length string is set, then an
|
||||
Accept-Encoding: header containing all supported encodings is sent.
|
||||
|
||||
This is a request, not an order; the server may or may not do it. This
|
||||
option must be set (to any non-NULL value) or else any unsolicited
|
||||
encoding done by the server is ignored. See the special file
|
||||
lib/README.encoding for details.
|
||||
.TP
|
||||
.B CURLOPT_FOLLOWLOCATION
|
||||
A non-zero parameter tells the library to follow any Location: header that the
|
||||
server sends as part of a HTTP header.
|
||||
|
||||
\fBNOTE:\fP this means that the library will re-send the same request on the
|
||||
new location and follow new Location: headers all the way until no more such
|
||||
headers are returned. \fICURLOPT_MAXREDIRS\fP can be used to limit the number
|
||||
of redirects libcurl will follow.
|
||||
.TP
|
||||
.B CURLOPT_UNRESTRICTED_AUTH
|
||||
A non-zero parameter tells the library it can continue to send authentication
|
||||
(user+password) when following locations, even when hostname changed. Note
|
||||
that this is meaningful only when setting \fICURLOPT_FOLLOWLOCATION\fP.
|
||||
.TP
|
||||
.B CURLOPT_MAXREDIRS
|
||||
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
|
||||
(\fICURLE_TOO_MANY_REDIRECTS\fP). This option only makes sense if the
|
||||
\fICURLOPT_FOLLOWLOCATION\fP is used at the same time. (Added in 7.5)
|
||||
.TP
|
||||
.B CURLOPT_PUT
|
||||
A non-zero parameter tells the library to use HTTP PUT to transfer data. The
|
||||
data should be set with CURLOPT_READDATA and CURLOPT_INFILESIZE.
|
||||
.TP
|
||||
.B CURLOPT_POST
|
||||
A non-zero parameter tells the library to do a regular HTTP post. This is a
|
||||
normal application/x-www-form-urlencoded kind, which is the most commonly used
|
||||
one by HTML forms. See the CURLOPT_POSTFIELDS option for how to specify the
|
||||
data to post and CURLOPT_POSTFIELDSIZE in how to set the data size. Starting
|
||||
with libcurl 7.8, this option is obsolete. Using the CURLOPT_POSTFIELDS option
|
||||
will imply this option.
|
||||
.TP
|
||||
.B CURLOPT_POSTFIELDS
|
||||
Pass a char * as parameter, which should be the full data to post in a HTTP
|
||||
post operation. You need to make sure that the data is formatted the way you
|
||||
want the server to receive it. libcurl will not convert or encode it for
|
||||
you. Most web servers will assume this data to be url-encoded. Take note.
|
||||
|
||||
This POST is a normal application/x-www-form-urlencoded kind (and libcurl will
|
||||
set that Content-Type by default when this option is used), which is the most
|
||||
commonly used one by HTML forms. See also the CURLOPT_POST. Using
|
||||
CURLOPT_POSTFIELDS implies CURLOPT_POST.
|
||||
|
||||
\fBNote:\fP to make multipart/formdata posts (aka rfc1867-posts), check out
|
||||
the \fICURLOPT_HTTPPOST\fP option.
|
||||
.TP
|
||||
.B CURLOPT_POSTFIELDSIZE
|
||||
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
|
||||
you can post fully binary data, which otherwise is likely to fail. If this
|
||||
size is set to zero, the library will use strlen() to get the size. (Added in
|
||||
libcurl 7.2)
|
||||
.TP
|
||||
.B CURLOPT_HTTPPOST
|
||||
Tells libcurl you want a multipart/formdata HTTP POST to be made and you
|
||||
instruct what data to pass on to the server. Pass a pointer to a linked list
|
||||
of HTTP post structs as parameter. The linked list should be a fully valid
|
||||
list of 'struct HttpPost' structs properly filled in. The best and most
|
||||
elegant way to do this, is to use \fIcurl_formadd(3)\fP as documented. The
|
||||
data in this list must remain intact until you close this curl handle again
|
||||
with \fIcurl_easy_cleanup(3)\fP.
|
||||
.TP
|
||||
.B CURLOPT_REFERER
|
||||
Pass a pointer to a zero terminated string as parameter. It will be used to
|
||||
set the Referer: header in the http request sent to the remote server. This
|
||||
can be used to fool servers or scripts. You can also set any custom header
|
||||
with \fICURLOPT_HTTPHEADER\fP.
|
||||
.TP
|
||||
.B CURLOPT_USERAGENT
|
||||
Pass a pointer to a zero terminated string as parameter. It will be used to
|
||||
set the User-Agent: header in the http request sent to the remote server. This
|
||||
can be used to fool servers or scripts. You can also set any custom header
|
||||
with \fICURLOPT_HTTPHEADER\fP.
|
||||
.TP
|
||||
.B CURLOPT_HTTPHEADER
|
||||
Pass a pointer to a linked list of HTTP headers to pass to the server in your
|
||||
HTTP request. The linked list should be a fully valid list of \fBstruct
|
||||
curl_slist\fP structs 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. 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
|
||||
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
|
||||
new headers, replace internal headers and remove internal headers. The
|
||||
headers included in the linked list must not be CRLF-terminated, because
|
||||
curl adds CRLF after each header item. Failure to comply with this will
|
||||
result in 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
|
||||
and cannot be replaced using this option. Only the lines following the
|
||||
request-line are headers.
|
||||
|
||||
\fBNOTE:\fPThe most commonly replaced headers have "shortcuts" in the options
|
||||
CURLOPT_COOKIE, CURLOPT_USERAGENT and CURLOPT_REFERER.
|
||||
.TP
|
||||
.B CURLOPT_HTTP200ALIASES
|
||||
Pass a pointer to a linked list of aliases to be treated as valid HTTP 200
|
||||
responses. Some servers respond with a custom header response line. For
|
||||
example, IceCast servers respond with "ICY 200 OK". By including this string
|
||||
in your list of aliases, the response will be treated as a valid HTTP header
|
||||
line such as "HTTP/1.0 200 OK". (Added in 7.10.3)
|
||||
|
||||
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
|
||||
\fIcurl_slist_free_all(3)\fP to clean up an entire list.
|
||||
|
||||
\fBNOTE:\fPThe alias itself is not parsed for any version strings. So if your
|
||||
alias is "MYHTTP/9.9", Libcurl will not treat the server as responding with
|
||||
HTTP version 9.9. Instead Libcurl will use the value set by option
|
||||
\fICURLOPT_HTTP_VERSION\fP.
|
||||
.TP
|
||||
.B CURLOPT_COOKIE
|
||||
Pass a pointer to a zero terminated string as parameter. It will be used to
|
||||
set a cookie in the http request. The format of the string should be
|
||||
NAME=CONTENTS, where NAME is the cookie name and CONTENTS is what the cookie
|
||||
should contain.
|
||||
|
||||
If you need to set mulitple cookies, you need to set them all using a single
|
||||
option and thus you need to concat them all in one single string. Set multiple
|
||||
cookies in one string like this: "name1=content1; name2=content2;" etc.
|
||||
|
||||
Using this option multiple times will only make the latest string override the
|
||||
previously ones.
|
||||
.TP
|
||||
.B CURLOPT_COOKIEFILE
|
||||
Pass a pointer to a zero terminated string as parameter. It should contain the
|
||||
name of your file holding cookie data to read. The cookie data may be in
|
||||
Netscape / Mozilla cookie data format or just regular HTTP-style headers
|
||||
dumped to a file.
|
||||
|
||||
Given an empty or non-existing file, this option will enable cookies for this
|
||||
curl handle, making it understand and parse received cookies and then use
|
||||
matching cookies in future request.
|
||||
.TP
|
||||
.B CURLOPT_COOKIEJAR
|
||||
Pass a file name as char *, zero terminated. This will make libcurl write all
|
||||
internally known cookies to the specified file when \fIcurl_easy_cleanup(3)\fP
|
||||
is called. If no cookies are known, no file will be created. Specify "-" to
|
||||
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
|
||||
matching cookies get sent accordingly. (Added in 7.9)
|
||||
|
||||
.B NOTE
|
||||
If the cookie jar file can't be created or written to (when the
|
||||
curl_easy_cleanup() is called), libcurl will not and cannot report an error
|
||||
for this. Using CURLOPT_VERBOSE or CURLOPT_DEBUGFUNCTION will get a warning to
|
||||
display, but that is the only visible feedback you get about this possibly
|
||||
lethal situation.
|
||||
.TP
|
||||
.B CURLOPT_TIMECONDITION
|
||||
Pass a long as parameter. This defines how the CURLOPT_TIMEVALUE time value is
|
||||
treated. You can set this parameter to TIMECOND_IFMODSINCE or
|
||||
TIMECOND_IFUNMODSINCE. This is a HTTP-only feature. (TBD)
|
||||
.TP
|
||||
.B CURLOPT_TIMEVALUE
|
||||
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
|
||||
CURLOPT_TIMECONDITION.
|
||||
.TP
|
||||
.B CURLOPT_HTTPGET
|
||||
Pass a long. If the long is non-zero, this forces the HTTP request to get back
|
||||
to GET. Only really usable if POST, PUT or a custom request have been used
|
||||
previously using the same curl handle. (Added in 7.8.1)
|
||||
.TP
|
||||
.B CURLOPT_HTTP_VERSION
|
||||
Pass a long, set to one of the values described below. They force libcurl to
|
||||
use the specific HTTP versions. This is not sensible to do unless you have a
|
||||
good reason.
|
||||
.RS
|
||||
.TP 5
|
||||
.B CURL_HTTP_VERSION_NONE
|
||||
We don't care about what version the library uses. libcurl will use whatever
|
||||
it thinks fit.
|
||||
.TP
|
||||
.B CURL_HTTP_VERSION_1_0
|
||||
Enforce HTTP 1.0 requests.
|
||||
.TP
|
||||
.B CURL_HTTP_VERSION_1_1
|
||||
Enforce HTTP 1.1 requests.
|
||||
.RE
|
||||
.PP
|
||||
.SH FTP OPTIONS
|
||||
.TP 0.4i
|
||||
.B CURLOPT_FTPPORT
|
||||
Pass a pointer to a zero terminated string as parameter. It will be used to
|
||||
get the IP address to use for the ftp PORT instruction. The PORT instruction
|
||||
tells the remote server to connect to our specified IP address. The string may
|
||||
be a plain IP address, a host name, an network interface name (under Unix) or
|
||||
just a '-' letter to let the library use your systems default IP
|
||||
address. Default FTP operations are passive, and thus won't use PORT.
|
||||
|
||||
You disable PORT again and go back to using the passive version by setting
|
||||
this option to NULL.
|
||||
.TP
|
||||
.B CURLOPT_QUOTE
|
||||
Pass a pointer to a linked list of FTP commands to pass to the server prior to
|
||||
your ftp request. This will be done before any other FTP commands are issued
|
||||
(even before the CWD command). The linked list should be a fully valid list of
|
||||
'struct curl_slist' structs properly filled in. Use \fIcurl_slist_append(3)\fP
|
||||
to append strings (commands) to the list, and clear the entire list afterwards
|
||||
with \fIcurl_slist_free_all(3)\fP. Disable this operation again by setting a
|
||||
NULL to this option.
|
||||
.TP
|
||||
.B CURLOPT_POSTQUOTE
|
||||
Pass a pointer to a linked list of FTP commands to pass to the server after
|
||||
your ftp transfer request. The linked list should be a fully valid list of
|
||||
struct curl_slist structs properly filled in as described for
|
||||
\fICURLOPT_QUOTE\fP. Disable this operation again by setting a NULL to this
|
||||
option.
|
||||
.TP
|
||||
.B CURLOPT_PREQUOTE
|
||||
Pass a pointer to a linked list of FTP commands to pass to the server after
|
||||
the transfer type is set. The linked list should be a fully valid list of
|
||||
struct curl_slist structs properly filled in as described for
|
||||
\fICURLOPT_QUOTE\fP. Disable this operation again by setting a NULL to this
|
||||
option.
|
||||
.TP
|
||||
.B CURLOPT_FTPLISTONLY
|
||||
A non-zero parameter tells the library to just list the names of an ftp
|
||||
directory, instead of doing a full directory listing that would include file
|
||||
sizes, dates etc.
|
||||
|
||||
This causes an FTP NLST command to be sent. Beware that some FTP servers list
|
||||
only files in their response to NLST; they might not include subdirectories
|
||||
and symbolic links.
|
||||
.TP
|
||||
.B CURLOPT_FTPAPPEND
|
||||
A non-zero parameter tells the library to append to the remote file instead of
|
||||
overwrite it. This is only useful when uploading to a ftp site.
|
||||
.TP
|
||||
.B CURLOPT_FTP_USE_EPRT
|
||||
Pass a long. If the value is non-zero, it tells curl to use the EPRT (and
|
||||
LPRT) command when doing active FTP downloads (which is enabled by
|
||||
CURLOPT_FTPPORT). Using EPRT means that it will first attempt to use EPRT and
|
||||
then LPRT before using PORT, but if you pass FALSE (zero) to this option, it
|
||||
will not try using EPRT or LPRT, only plain PORT. (Added in 7.10.5)
|
||||
.TP
|
||||
.B CURLOPT_FTP_USE_EPSV
|
||||
Pass a long. If the value is non-zero, it tells curl to use the EPSV command
|
||||
when doing passive FTP downloads (which it always does by default). Using EPSV
|
||||
means that it will first attempt to use EPSV before using PASV, but if you
|
||||
pass FALSE (zero) to this option, it will not try using EPSV, only plain PASV.
|
||||
.PP
|
||||
.SH PROTOCOL OPTIONS
|
||||
.TP 0.4i
|
||||
.B CURLOPT_TRANSFERTEXT
|
||||
A non-zero parameter tells the library to use ASCII mode for ftp transfers,
|
||||
instead of the default binary transfer. For LDAP transfers it gets the data in
|
||||
plain text instead of HTML and for win32 systems it does not set the stdout to
|
||||
binary mode. This option can be usable when transferring text data between
|
||||
systems with different views on certain characters, such as newlines or
|
||||
similar.
|
||||
.TP
|
||||
.B CURLOPT_CRLF
|
||||
Convert Unix newlines to CRLF newlines on transfers.
|
||||
.TP
|
||||
.B CURLOPT_RANGE
|
||||
Pass a char * as parameter, which should contain the specified range you
|
||||
want. It should be in the format "X-Y", where X or Y may be left out. HTTP
|
||||
transfers also support several intervals, separated with commas as in
|
||||
\fI"X-Y,N-M"\fP. Using this kind of multiple intervals will cause the HTTP
|
||||
server to send the response document in pieces (using standard MIME separation
|
||||
techniques).
|
||||
.TP
|
||||
.B CURLOPT_RESUME_FROM
|
||||
Pass a long as parameter. It contains the offset in number of bytes that you
|
||||
want the transfer to start from.
|
||||
.TP
|
||||
.B CURLOPT_CUSTOMREQUEST
|
||||
Pass a pointer to a zero terminated string as parameter. It will be user
|
||||
instead of GET or HEAD when doing a HTTP request, or instead of LIST or NLST
|
||||
when doing an ftp directory listing. This is useful for doing DELETE or other
|
||||
more or less obscure HTTP requests. Don't do this at will, make sure your
|
||||
server supports the command first.
|
||||
|
||||
NOTE: many people have wrongly used this option to replace the entire request
|
||||
with their own, including multiple headers and POST contents. While that might
|
||||
work in many cases, it will cause libcurl to send invalid requests and it
|
||||
could possibly confuse the remote server badly. Use \fICURLOPT_POST\fP and
|
||||
\fICURLOPT_POSTFIELDS\fP to set POST data. Use \fICURLOPT_HTTPHEADER\fP to
|
||||
replace or extend the set of headers sent by libcurl. Use
|
||||
\fICURLOPT_HTTP_VERSION\fP to change HTTP version.
|
||||
.TP
|
||||
.B CURLOPT_FILETIME
|
||||
Pass a long. If it is a non-zero value, libcurl will attempt to get the
|
||||
modification date of the remote document in this operation. This requires that
|
||||
the remote server sends the time or replies to a time querying command. The
|
||||
\fIcurl_easy_getinfo(3)\fP function with the \fICURLINFO_FILETIME\fP argument
|
||||
can be used after a transfer to extract the received time (if any). (Added in
|
||||
7.5)
|
||||
.TP
|
||||
.B CURLOPT_NOBODY
|
||||
A non-zero parameter tells the library to not include the body-part in the
|
||||
output. This is only relevant for protocols that have separate header and body
|
||||
parts.
|
||||
.TP
|
||||
.B CURLOPT_INFILESIZE
|
||||
When uploading a file to a remote site, this option should be used to tell
|
||||
libcurl what the expected size of the infile is.
|
||||
.TP
|
||||
.B CURLOPT_UPLOAD
|
||||
A non-zero parameter tells the library to prepare for an upload. The
|
||||
CURLOPT_READDATA and CURLOPT_INFILESIZE are also interesting for uploads.
|
||||
.PP
|
||||
.SH CONNECTION OPTIONS
|
||||
.TP 0.4i
|
||||
.B CURLOPT_TIMEOUT
|
||||
Pass a long as parameter containing the maximum time in seconds that you allow
|
||||
the libcurl transfer operation to take. Normally, name lookups can take a
|
||||
considerable time and limiting operations to less than a few minutes risk
|
||||
aborting perfectly normal operations. This option will cause curl to use the
|
||||
SIGALRM to enable time-outing system calls.
|
||||
|
||||
\fBNOTE:\fP this is not recommended to use in unix multi-threaded programs, as
|
||||
it uses signals unless CURLOPT_NOSIGNAL (see above) is set.
|
||||
.TP
|
||||
.B CURLOPT_LOW_SPEED_LIMIT
|
||||
Pass a long as parameter. It contains the transfer speed in bytes per second
|
||||
that the transfer should be below during CURLOPT_LOW_SPEED_TIME seconds for
|
||||
the library to consider it too slow and abort.
|
||||
.TP
|
||||
.B CURLOPT_LOW_SPEED_TIME
|
||||
Pass a long as parameter. It contains the time in seconds that the transfer
|
||||
should be below the CURLOPT_LOW_SPEED_LIMIT for the library to consider it too
|
||||
slow and abort.
|
||||
.TP
|
||||
.B CURLOPT_MAXCONNECTS
|
||||
Pass a long. The set number will be the persistent connection cache size. The
|
||||
set amount will be the maximum amount of simultaneously open connections that
|
||||
libcurl may cache. Default is 5, and there isn't much point in changing this
|
||||
value unless you are perfectly aware of how this work and changes libcurl's
|
||||
behaviour. This concerns connection using any of the protocols that support
|
||||
persistent connections.
|
||||
|
||||
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
|
||||
open connections to increase.
|
||||
|
||||
\fBNOTE:\fP if you already have performed transfers with this curl handle,
|
||||
setting a smaller MAXCONNECTS than before may cause open connections to get
|
||||
closed unnecessarily. (Added in 7.7)
|
||||
.TP
|
||||
.B CURLOPT_CLOSEPOLICY
|
||||
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
|
||||
make room for a new connection. This must be one of the CURLCLOSEPOLICY_*
|
||||
defines. Use \fICURLCLOSEPOLICY_LEAST_RECENTLY_USED\fP to make libcurl close
|
||||
the connection that was least recently used, that connection is also least
|
||||
likely to be capable of re-use. Use \fICURLCLOSEPOLICY_OLDEST\fP to make
|
||||
libcurl close the oldest connection, the one that was created first among the
|
||||
ones in the connection cache. The other close policies are not support
|
||||
yet. (Added in 7.7)
|
||||
.TP
|
||||
.B CURLOPT_FRESH_CONNECT
|
||||
Pass a long. Set to non-zero to make the next transfer use a new (fresh)
|
||||
connection by force. If the connection cache is full before this connection,
|
||||
one of the existing connections will be closed as according to the selected or
|
||||
default policy. This option should be used with caution and only if you
|
||||
understand what it does. Set this to 0 to have libcurl attempt re-using an
|
||||
existing connection (default behavior). (Added in 7.7)
|
||||
.TP
|
||||
.B CURLOPT_FORBID_REUSE
|
||||
Pass a long. Set to non-zero to make the next transfer explicitly close the
|
||||
connection when done. Normally, libcurl keep all connections alive when done
|
||||
with one transfer in case there comes a succeeding one that can re-use them.
|
||||
This option should be used with caution and only if you understand what it
|
||||
does. Set to 0 to have libcurl keep the connection open for possibly later
|
||||
re-use (default behavior). (Added in 7.7)
|
||||
.TP
|
||||
.B CURLOPT_CONNECTTIMEOUT
|
||||
Pass a long. It should contain the maximum time in seconds that you allow the
|
||||
connection to the server to take. This only limits the connection phase, once
|
||||
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
|
||||
timeouts). See also the \fICURLOPT_TIMEOUT\fP option.
|
||||
|
||||
\fBNOTE:\fP this is not recommended to use in unix multi-threaded programs, as
|
||||
it uses signals unless CURLOPT_NOSIGNAL (see above) is set.
|
||||
.PP
|
||||
.SH SSL and SECURITY OPTIONS
|
||||
.TP 0.4i
|
||||
.B CURLOPT_SSLCERT
|
||||
Pass a pointer to a zero terminated string as parameter. The string should be
|
||||
the file name of your certificate. The default format is "PEM" and can be
|
||||
changed with \fICURLOPT_SSLCERTTYPE\fP.
|
||||
.TP
|
||||
.B CURLOPT_SSLCERTTYPE
|
||||
Pass a pointer to a zero terminated string as parameter. The string should be
|
||||
the format of your certificate. Supported formats are "PEM" and "DER". (Added
|
||||
in 7.9.3)
|
||||
.TP
|
||||
.B CURLOPT_SSLCERTPASSWD
|
||||
Pass a pointer to a zero terminated string as parameter. It will be used as
|
||||
the password required to use the CURLOPT_SSLCERT certificate. If the password
|
||||
is not supplied, you will be prompted for it. \fICURLOPT_PASSWDFUNCTION\fP can
|
||||
be used to set your own prompt function.
|
||||
|
||||
\fBNOTE:\fPThis option is replaced by \fICURLOPT_SSLKEYPASSWD\fP and only
|
||||
cept for backward compatibility. You never needed a pass phrase to load
|
||||
a certificate but you need one to load your private key.
|
||||
.TP
|
||||
.B CURLOPT_SSLKEY
|
||||
Pass a pointer to a zero terminated string as parameter. The string should be
|
||||
the file name of your private key. The default format is "PEM" and can be
|
||||
changed with \fICURLOPT_SSLKEYTYPE\fP. (Added in 7.9.3)
|
||||
.TP
|
||||
.B CURLOPT_SSLKEYTYPE
|
||||
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".
|
||||
(Added in 7.9.3)
|
||||
|
||||
\fBNOTE:\fPThe format "ENG" enables you to load the private key from a crypto
|
||||
engine. in this case \fICURLOPT_SSLKEY\fP is used as an identifier passed to
|
||||
the engine. You have to set the crypto engine with \fICURLOPT_SSL_ENGINE\fP.
|
||||
.TP
|
||||
.B CURLOPT_SSLKEYPASSWD
|
||||
Pass a pointer to a zero terminated string as parameter. It will be used as
|
||||
the password required to use the \fICURLOPT_SSLKEY\fP private key. If the
|
||||
password is not supplied, you will be prompted for
|
||||
it. \fICURLOPT_PASSWDFUNCTION\fP can be used to set your own prompt function.
|
||||
(Added in 7.9.3)
|
||||
.TP
|
||||
.B CURLOPT_SSL_ENGINE
|
||||
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
|
||||
key. (Added in 7.9.3)
|
||||
|
||||
\fBNOTE:\fPIf the crypto device cannot be loaded,
|
||||
\fICURLE_SSL_ENGINE_NOTFOUND\fP is returned.
|
||||
.TP
|
||||
.B CURLOPT_SSL_ENGINEDEFAULT
|
||||
Sets the actual crypto engine as the default for (asymetric) crypto
|
||||
operations. (Added in 7.9.3)
|
||||
|
||||
\fBNOTE:\fPIf the crypto device cannot be set,
|
||||
\fICURLE_SSL_ENGINE_SETFAILED\fP is returned.
|
||||
.TP
|
||||
.B CURLOPT_SSLVERSION
|
||||
Pass a long as parameter. Set what version of SSL to attempt to use, 2 or
|
||||
3. By default, the SSL library will try to solve this by itself although some
|
||||
servers make this difficult why you at times may have to use this option.
|
||||
.TP
|
||||
.B CURLOPT_SSL_VERIFYPEER
|
||||
Pass a long that is set to a zero value to stop curl from verifying the peer's
|
||||
certificate (7.10 starting setting this option to TRUE by default). Alternate
|
||||
certificates to verify against can be specified with the CURLOPT_CAINFO option
|
||||
(Added in 7.4.2) or a certificate directory can be specified with the
|
||||
CURLOPT_CAPATH option (Added in 7.9.8). As of 7.10, curl installs a default
|
||||
bundle. CURLOPT_SSL_VERIFYHOST may also need to be set to 1 or 0 if
|
||||
CURLOPT_SSL_VERIFYPEER is disabled (it defaults to 2).
|
||||
.TP
|
||||
.B CURLOPT_CAINFO
|
||||
Pass a char * to a zero terminated string naming a file holding one or more
|
||||
certificates to verify the peer with. This only makes sense when used in
|
||||
combination with the CURLOPT_SSL_VERIFYPEER option. (Added in 7.4.2)
|
||||
.TP
|
||||
.B CURLOPT_CAPATH
|
||||
Pass a char * to a zero terminated string naming a directory holding multiple
|
||||
CA certificates to verify the peer with. The certificate directory must be
|
||||
prepared using the openssl c_rehash utility. This only makes sense when used
|
||||
in combination with the CURLOPT_SSL_VERIFYPEER option. The CAPATH function
|
||||
apparently does not work in Windows due to some limitation in openssl. (Added
|
||||
in 7.9.8)
|
||||
.TP
|
||||
.B CURLOPT_RANDOM_FILE
|
||||
Pass a char * to a zero terminated file name. The file will be used to read
|
||||
from to seed the random engine for SSL. The more random the specified file is,
|
||||
the more secure the SSL connection will become.
|
||||
.TP
|
||||
.B CURLOPT_EGDSOCKET
|
||||
Pass a char * to the zero terminated path name to the Entropy Gathering Daemon
|
||||
socket. It will be used to seed the random engine for SSL.
|
||||
.TP
|
||||
.B CURLOPT_SSL_VERIFYHOST
|
||||
Pass a long. Set if we should verify the Common name from the peer certificate
|
||||
in the SSL handshake, set 1 to check existence, 2 to ensure that it matches
|
||||
the provided hostname. This is by default set to 2. (Added in 7.8.1, default
|
||||
changed in 7.10)
|
||||
.TP
|
||||
.B CURLOPT_SSL_CIPHER_LIST
|
||||
Pass a char *, pointing to a zero terminated string holding the list of
|
||||
ciphers to use for the SSL connection. The list must be syntactly correct, it
|
||||
consists of one or more cipher strings separated by colons. Commas or spaces
|
||||
are also acceptable separators but colons are normally used, \!, \- and \+ can
|
||||
be used as operators. Valid examples of cipher lists include 'RC4-SHA',
|
||||
\'SHA1+DES\', 'TLSv1' and 'DEFAULT'. The default list is normally set when you
|
||||
compile OpenSSL.
|
||||
|
||||
You'll find more details about cipher lists on this URL:
|
||||
\fIhttp://www.openssl.org/docs/apps/ciphers.html\fP
|
||||
.TP
|
||||
.B CURLOPT_KRB4LEVEL
|
||||
Pass a char * as parameter. Set the krb4 security level, this also enables
|
||||
krb4 awareness. This is a string, 'clear', 'safe', 'confidential' or
|
||||
\&'private'. If the string is set but doesn't match one of these, 'private'
|
||||
will be used. Set the string to NULL to disable kerberos4. The kerberos
|
||||
support only works for FTP. (Added in 7.3)
|
||||
.PP
|
||||
.SH OTHER OPTIONS
|
||||
.TP 0.4i
|
||||
.B CURLOPT_PRIVATE
|
||||
Pass a char * as parameter, pointing to data that should be associated with
|
||||
the curl handle. The pointer can be subsequently retrieved using the
|
||||
CURLINFO_PRIVATE options to curl_easy_getinfo. (Added in 7.10.3)
|
||||
.PP
|
||||
.SH RETURN VALUE
|
||||
CURLE_OK (zero) means that the option was set properly, non-zero means an
|
||||
error occurred as \fI<curl/curl.h>\fP defines. See the \fIlibcurl-errors.3\fP
|
||||
man page for the full list with descriptions.
|
||||
.SH "SEE ALSO"
|
||||
.BR curl_easy_init "(3), " curl_easy_cleanup "(3), "
|
||||
.SH BUGS
|
||||
If you find any bugs, or just have questions, subscribe to one of the mailing
|
||||
lists and post. We won't bite.
|
||||
|
||||
26
docs/libcurl/curl_escape.3
Normal file
26
docs/libcurl/curl_escape.3
Normal file
@@ -0,0 +1,26 @@
|
||||
.\" You can view this file with:
|
||||
.\" nroff -man [file]
|
||||
.\" $Id$
|
||||
.\"
|
||||
.TH curl_escape 3 "6 March 2002" "libcurl 7.9" "libcurl Manual"
|
||||
.SH NAME
|
||||
curl_escape - URL encodes the given string
|
||||
.SH SYNOPSIS
|
||||
.B #include <curl/curl.h>
|
||||
.sp
|
||||
.BI "char *curl_escape( char *" url ", int "length " );"
|
||||
.ad
|
||||
.SH DESCRIPTION
|
||||
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,
|
||||
A-Z or 0-9 will be converted to their "URL escaped" version (%NN where NN is a
|
||||
two-digit hexadecimal number).
|
||||
|
||||
If the 'length' argument is set to 0, curl_escape() will use strlen() on the
|
||||
input 'url' string to find out the size.
|
||||
|
||||
You must curl_free() the returned string when you're done with it.
|
||||
.SH RETURN VALUE
|
||||
A pointer to a zero terminated string or NULL if it failed.
|
||||
.SH "SEE ALSO"
|
||||
.I curl_unescape(), curl_free(), RFC 2396
|
||||
212
docs/libcurl/curl_formadd.3
Normal file
212
docs/libcurl/curl_formadd.3
Normal file
@@ -0,0 +1,212 @@
|
||||
.\" You can view this file with:
|
||||
.\" nroff -man [file]
|
||||
.\" $Id$
|
||||
.\"
|
||||
.TH curl_formadd 3 "24 June 2002" "libcurl 7.9.8" "libcurl Manual"
|
||||
.SH NAME
|
||||
curl_formadd - add a section to a multipart/formdata HTTP POST
|
||||
.SH SYNOPSIS
|
||||
.B #include <curl/curl.h>
|
||||
.sp
|
||||
.BI "CURLFORMcode curl_formadd(struct HttpPost ** " firstitem,
|
||||
.BI "struct HttpPost ** " lastitem, " ...);"
|
||||
.ad
|
||||
.SH DESCRIPTION
|
||||
curl_formadd() is used to append sections when building a multipart/formdata
|
||||
HTTP POST (sometimes refered to as rfc1867-style posts). Append one section at
|
||||
a time until you've added all the sections you want included and then you pass
|
||||
the \fIfirstitem\fP pointer as parameter to \fBCURLOPT_HTTPPOST\fP.
|
||||
\fIlastitem\fP is set after each call and on repeated invokes it should be
|
||||
left as set to allow repeated invokes to find the end of the list faster.
|
||||
|
||||
After the \fIlastitem\fP pointer follow the real arguments.
|
||||
|
||||
The pointers \fI*firstitem\fP and \fI*lastitem\fP should both be pointing to
|
||||
NULL in the first call to this function. All list-data will be allocated by
|
||||
the function itself. You must call \fIcurl_formfree\fP after the form post has
|
||||
been done to free the resources again.
|
||||
|
||||
First, there are some basics you need to understand about multipart/formdata
|
||||
posts. Each part consists of at least a NAME and a CONTENTS part. If the part
|
||||
is made for file upload, there are also a stored CONTENT-TYPE and a
|
||||
FILENAME. Below here, we'll discuss on what options you use to set these
|
||||
properties in the parts you want to add to your post.
|
||||
.SH OPTIONS
|
||||
.B CURLFORM_COPYNAME
|
||||
followed by string is used to set the name of this part. libcurl copies the
|
||||
given data, so your application doesn't need to keep it around after this
|
||||
function call. If the name isn't zero terminated properly, or if you'd like it
|
||||
to contain zero bytes, you need to set the length of the name with
|
||||
\fBCURLFORM_NAMELENGTH\fP.
|
||||
|
||||
.B CURLFORM_PTRNAME
|
||||
followed by a string is used for the name of this part. libcurl will use the
|
||||
pointer and refer to the data in your application, you must make sure it
|
||||
remains until curl no longer needs it. If the name isn't zero terminated
|
||||
properly, or if you'd like it to contain zero bytes, you need to set the
|
||||
length of the name with \fBCURLFORM_NAMELENGTH\fP.
|
||||
|
||||
.B CURLFORM_COPYCONTENTS
|
||||
followed by a string is used for the contents of this part, the actual data to
|
||||
send away. libcurl copies the given data, so your application doesn't need to
|
||||
keep it around after this function call. If the data isn't zero terminated
|
||||
properly, or if you'd like it to contain zero bytes, you need to set the
|
||||
length of the name with \fBCURLFORM_CONTENTSLENGTH\fP.
|
||||
|
||||
.B CURLFORM_PTRCONTENTS
|
||||
followed by a string is used for the contents of this part, the actual data to
|
||||
send away. libcurl will use the pointer and refer to the data in your
|
||||
application, you must make sure it remains until curl no longer needs it. If
|
||||
the data isn't zero terminated properly, or if you'd like it to contain zero
|
||||
bytes, you need to set the length of the name with
|
||||
\fBCURLFORM_CONTENTSLENGTH\fP.
|
||||
|
||||
.B CURLFORM_FILECONTENT
|
||||
followed by a file name, makes that file read and the contents will be used in
|
||||
as data in this part.
|
||||
|
||||
.B CURLFORM_FILE
|
||||
followed by a file name, makes this part a file upload part. It sets the file
|
||||
name field to the actual file name used here, it gets the contents of the file
|
||||
and passes as data and sets the content-type if the given file match one of
|
||||
the new internally known file extension. For \fBCURLFORM_FILE\fP the user may
|
||||
send one or more files in one part by providing multiple \fBCURLFORM_FILE\fP
|
||||
arguments each followed by the filename (and each CURLFORM_FILE is allowed to
|
||||
have a CURLFORM_CONTENTTYPE).
|
||||
|
||||
.B CURLFORM_CONTENTTYPE
|
||||
followed by a pointer to a string with a content-type will make curl use this
|
||||
given content-type for this file upload part, possibly instead of an
|
||||
internally chosen one.
|
||||
|
||||
.B CURLFORM_FILENAME
|
||||
followed by a pointer to a string to a name, will make libcurl use the given
|
||||
name in the file upload part, intead of the actual file name given to
|
||||
\fICURLFORM_FILE\fP.
|
||||
|
||||
.B BCURLFORM_BUFFER
|
||||
followed by a string, tells libcurl that a buffer is to be used to upload data
|
||||
instead of using a file. The given string is used as the value of the file
|
||||
name field in the content header.
|
||||
|
||||
.B CURLFORM_BUFFERPTR
|
||||
followed by a pointer to a data area, tells libcurl the address of the buffer
|
||||
containing data to upload (as indicated with \fICURLFORM_BUFFER\fP). The
|
||||
buffer containing this data must not be freed until after curl_easy_cleanup is
|
||||
called.
|
||||
|
||||
.B CURLFORM_BUFFERLENGTH
|
||||
followed by a long with the size of the \fICURLFORM_BUFFERPTR\fP data area,
|
||||
tells libcurl the length of the buffer to upload.
|
||||
|
||||
.B CURLFORM_ARRAY
|
||||
Another possibility to send options to curl_formadd() is the
|
||||
\fBCURLFORM_ARRAY\fP option, that passes a struct curl_forms array pointer as
|
||||
its value. Each curl_forms structure element has a CURLformoption and a char
|
||||
pointer. The final element in the array must be a CURLFORM_END. All available
|
||||
options can be used in an array, except the CURLFORM_ARRAY option itself! The
|
||||
last argument in such an array must always be \fBCURLFORM_END\fP.
|
||||
|
||||
.B CURLFORM_CONTENTHEADER
|
||||
specifies extra headers for the form POST section. This takes a curl_slist
|
||||
prepared in the usual way using \fBcurl_slist_append\fP and appends the list
|
||||
of headers to those libcurl automatically generates. The list must exist while
|
||||
the POST occurs, if you free it before the post completes you may experience
|
||||
problems.
|
||||
|
||||
When you've passed the HttpPost pointer to \fIcurl_easy_setopt\fP (using the
|
||||
\fICURLOPT_HTTPPOST\fP option), you must not free the list until after you've
|
||||
called \fIcurl_easy_cleanup\fP for the curl handle.
|
||||
|
||||
See example below.
|
||||
.SH RETURN VALUE
|
||||
0 means everything was ok, non-zero means an error occurred as
|
||||
.I <curl/curl.h>
|
||||
defines.
|
||||
.SH EXAMPLE
|
||||
.nf
|
||||
|
||||
struct HttpPost* post = NULL;
|
||||
struct HttpPost* last = NULL;
|
||||
char namebuffer[] = "name buffer";
|
||||
long namelength = strlen(namebuffer);
|
||||
char buffer[] = "test buffer";
|
||||
char htmlbuffer[] = "<HTML>test buffer</HTML>";
|
||||
long htmlbufferlength = strlen(htmlbuffer);
|
||||
struct curl_forms forms[3];
|
||||
char file1[] = "my-face.jpg";
|
||||
char file2[] = "your-face.jpg";
|
||||
/* add null character into htmlbuffer, to demonstrate that
|
||||
transfers of buffers containing null characters actually work
|
||||
*/
|
||||
htmlbuffer[8] = '\\0';
|
||||
|
||||
/* Add simple name/content section */
|
||||
curl_formadd(&post, &last, CURLFORM_COPYNAME, "name",
|
||||
CURLFORM_COPYCONTENTS, "content", CURLFORM_END);
|
||||
|
||||
/* Add simple name/content/contenttype section */
|
||||
curl_formadd(&post, &last, CURLFORM_COPYNAME, "htmlcode",
|
||||
CURLFORM_COPYCONTENTS, "<HTML></HTML>",
|
||||
CURLFORM_CONTENTTYPE, "text/html", CURLFORM_END);
|
||||
|
||||
/* Add name/ptrcontent section */
|
||||
curl_formadd(&post, &last, CURLFORM_COPYNAME, "name_for_ptrcontent",
|
||||
CURLFORM_PTRCONTENTS, buffer, CURLFORM_END);
|
||||
|
||||
/* Add ptrname/ptrcontent section */
|
||||
curl_formadd(&post, &last, CURLFORM_PTRNAME, namebuffer,
|
||||
CURLFORM_PTRCONTENTS, buffer, CURLFORM_NAMELENGTH,
|
||||
namelength, CURLFORM_END);
|
||||
|
||||
/* Add name/ptrcontent/contenttype section */
|
||||
curl_formadd(&post, &last, CURLFORM_COPYNAME, "html_code_with_hole",
|
||||
CURLFORM_PTRCONTENTS, htmlbuffer,
|
||||
CURLFORM_CONTENTSLENGTH, htmlbufferlength,
|
||||
CURLFORM_CONTENTTYPE, "text/html", CURLFORM_END);
|
||||
|
||||
/* Add simple file section */
|
||||
curl_formadd(&post, &last, CURLFORM_COPYNAME, "picture",
|
||||
CURLFORM_FILE, "my-face.jpg", CURLFORM_END);
|
||||
|
||||
/* Add file/contenttype section */
|
||||
curl_formadd(&post, &last, CURLFORM_COPYNAME, "picture",
|
||||
CURLFORM_FILE, "my-face.jpg",
|
||||
CURLFORM_CONTENTTYPE, "image/jpeg", CURLFORM_END);
|
||||
|
||||
/* Add two file section */
|
||||
curl_formadd(&post, &last, CURLFORM_COPYNAME, "pictures",
|
||||
CURLFORM_FILE, "my-face.jpg",
|
||||
CURLFORM_FILE, "your-face.jpg", CURLFORM_END);
|
||||
|
||||
/* Add two file section using CURLFORM_ARRAY */
|
||||
forms[0].option = CURLFORM_FILE;
|
||||
forms[0].value = file1;
|
||||
forms[1].option = CURLFORM_FILE;
|
||||
forms[1].value = file2;
|
||||
forms[2].option = CURLFORM_END;
|
||||
|
||||
/* Add a buffer to upload */
|
||||
curl_formadd(&post, &last,
|
||||
CURLFORM_COPYNAME, "name",
|
||||
CURLFORM_BUFFER, "data",
|
||||
CURLFORM_BUFFERPTR, record,
|
||||
CURLFORM_BUFFERLENGTH, record_length,
|
||||
CURLFORM_END);
|
||||
|
||||
/* no option needed for the end marker */
|
||||
curl_formadd(&post, &last, CURLFORM_COPYNAME, "pictures",
|
||||
CURLFORM_ARRAY, forms, CURLFORM_END);
|
||||
/* Add the content of a file as a normal post text value */
|
||||
curl_formadd(&post, &last, CURLFORM_COPYNAME, "filecontent",
|
||||
CURLFORM_FILECONTENT, ".bashrc", CURLFORM_END);
|
||||
/* Set the form info */
|
||||
curl_easy_setopt(curl, CURLOPT_HTTPPOST, post);
|
||||
|
||||
.SH "SEE ALSO"
|
||||
.BR curl_easy_setopt "(3), "
|
||||
.BR curl_formparse "(3) [deprecated], "
|
||||
.BR curl_formfree "(3)"
|
||||
.SH BUGS
|
||||
Surely there are some, you tell me!
|
||||
|
||||
27
docs/libcurl/curl_formfree.3
Normal file
27
docs/libcurl/curl_formfree.3
Normal file
@@ -0,0 +1,27 @@
|
||||
.\" You can view this file with:
|
||||
.\" nroff -man [file]
|
||||
.\" $Id$
|
||||
.\"
|
||||
.TH curl_formfree 3 "6 April 2001" "libcurl 7.7.1" "libcurl Manual"
|
||||
.SH NAME
|
||||
curl_formfree - free a previously build multipart/formdata HTTP POST chain
|
||||
.SH SYNOPSIS
|
||||
.B #include <curl/curl.h>
|
||||
.sp
|
||||
.BI "void curl_formfree(struct HttpPost *" form);
|
||||
.ad
|
||||
.SH DESCRIPTION
|
||||
curl_formfree() is used to clean up data previously built/appended with
|
||||
curl_formadd()/curl_formparse(). This must be called when the data has
|
||||
been used, which typically means after the curl_easy_perform() has
|
||||
been called.
|
||||
.SH RETURN VALUE
|
||||
None
|
||||
.SH "SEE ALSO"
|
||||
.BR curl_formparse "(3) [deprecated], "
|
||||
.BR curl_formadd "(3) "
|
||||
.SH BUGS
|
||||
libcurl 7.7.1 and earlier versions does not allow a NULL pointer to be used as
|
||||
argument.
|
||||
|
||||
|
||||
18
docs/libcurl/curl_formparse.3
Normal file
18
docs/libcurl/curl_formparse.3
Normal file
@@ -0,0 +1,18 @@
|
||||
.\" You can view this file with:
|
||||
.\" nroff -man [file]
|
||||
.\" $Id$
|
||||
.\"
|
||||
.TH curl_formparse 3 "17 Dec 2001" "libcurl 7.9.2" "libcurl Manual"
|
||||
.SH NAME
|
||||
curl_formparse - add a section to a multipart/formdata HTTP POST:
|
||||
deprecated (use curl_formadd instead)
|
||||
.SH SYNOPSIS
|
||||
.B #include <curl/curl.h>
|
||||
.sp
|
||||
.BI "CURLcode curl_formparse(char * " string, " struct HttpPost ** " firstitem,
|
||||
.BI "struct HttpPost ** " lastitem ");"
|
||||
.ad
|
||||
.SH DESCRIPTION
|
||||
This has been removed deliberately. The \fBcurl_formadd\fP has been introduced
|
||||
to replace this function. Do not use this. Convert to the new function
|
||||
now. curl_formparse() will be removed from a future version of libcurl.
|
||||
17
docs/libcurl/curl_free.3
Normal file
17
docs/libcurl/curl_free.3
Normal file
@@ -0,0 +1,17 @@
|
||||
.\" You can view this file with:
|
||||
.\" nroff -man [file]
|
||||
.\" $Id:
|
||||
.\"
|
||||
.TH curl_free 3 "24 Sept 2002" "libcurl 7.10" "libcurl Manual"
|
||||
.SH NAME
|
||||
curl_free - reclaim memory that has been obtained through a libcurl call
|
||||
.SH SYNOPSIS
|
||||
.B #include <curl/curl.h>
|
||||
.sp
|
||||
.BI "void *curl_free( char *" ptr " );"
|
||||
.ad
|
||||
.SH DESCRIPTION
|
||||
curl_free reclaims memory that has been obtained through a libcurl call.
|
||||
Use curl_free() instead of free() to avoid anomalies that can result from differences in memory management between your application and libcurl.
|
||||
.SH "SEE ALSO"
|
||||
.I curl_unescape(), curl_free()
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user