Compare commits
2032 Commits
curl-7_6_1
...
curl-7_10_
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
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 |
11
.cvsignore
Normal file
11
.cvsignore
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
config.log
|
||||||
|
Makefile
|
||||||
|
libtool
|
||||||
|
Makefile.in
|
||||||
|
aclocal.m4
|
||||||
|
configure
|
||||||
|
config.h
|
||||||
|
config.status
|
||||||
|
curl-config
|
||||||
|
autom4te.cache
|
||||||
|
depcomp
|
||||||
835
CHANGES.0
835
CHANGES.0
@@ -1,838 +1,3 @@
|
|||||||
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.
|
|
||||||
|
|
||||||
Version 5.3a (win32 only)
|
Version 5.3a (win32 only)
|
||||||
|
|
||||||
Troy Engel
|
Troy Engel
|
||||||
|
|||||||
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
21
COPYING
Normal file
21
COPYING
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
COPYRIGHT AND PERMISSION NOTICE
|
||||||
|
|
||||||
|
Copyright (c) 1996 - 2002, 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.
|
||||||
61
CVS-INFO
61
CVS-INFO
@@ -1,22 +1,61 @@
|
|||||||
This file is only present in the CVS - never in release archives.
|
_ _ ____ _
|
||||||
|
___| | | | _ \| |
|
||||||
|
/ __| | | | |_) | |
|
||||||
|
| (__| |_| | _ <| |___
|
||||||
|
\___|\___/|_| \_\_____|
|
||||||
|
|
||||||
This contains information about other files and things that the CVS repository
|
CVS-INFO
|
||||||
keeps in its inner sanctum.
|
|
||||||
|
|
||||||
CHANGES.0 contains ancient changes.
|
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.
|
||||||
|
|
||||||
memanalyze.pl is for analyzing the output generated by curl if -DMALLOCDEBUG
|
Compile and build instructions follow below.
|
||||||
|
|
||||||
|
CHANGES.0 contains ancient changes.
|
||||||
|
CHANGES.$year contains changes for the particular year.
|
||||||
|
|
||||||
|
memanalyze.pl is for analyzing the output generated by curl if -DMALLOCDEBUG
|
||||||
is used when compiling
|
is used when compiling
|
||||||
|
|
||||||
Makefile.dist is included as the root Makefile in distribution archives
|
buildconf builds the makefiles and configure stuff
|
||||||
|
|
||||||
perl/ is a subdirectory with various perl scripts
|
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:
|
To build after having extracted everything from CVS, do this:
|
||||||
|
|
||||||
automake
|
./buildconf
|
||||||
aclocal
|
|
||||||
autoheader
|
|
||||||
autoconf
|
|
||||||
./configure
|
./configure
|
||||||
make
|
make
|
||||||
|
|
||||||
|
REQUIREMENTS
|
||||||
|
|
||||||
|
You need the following software installed:
|
||||||
|
|
||||||
|
o autoconf 2.50 (or later)
|
||||||
|
o automake 1.5 (or later)
|
||||||
|
o libtool 1.4 (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.)
|
||||||
|
|
||||||
|
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"
|
||||||
|
|||||||
2
LEGAL
2
LEGAL
@@ -1,4 +1,4 @@
|
|||||||
Copyright (C) 2000, Daniel Stenberg, <daniel@haxx.se>, et al.
|
Copyright (C) 1998-2002, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
|
|
||||||
Everyone is permitted to copy and distribute verbatim copies of this license
|
Everyone is permitted to copy and distribute verbatim copies of this license
|
||||||
document, but changing it is not allowed.
|
document, but changing it is not allowed.
|
||||||
|
|||||||
23
MITX.txt
23
MITX.txt
@@ -1,28 +1,21 @@
|
|||||||
COPYRIGHT AND PERMISSION NOTICE
|
COPYRIGHT AND PERMISSION NOTICE
|
||||||
|
|
||||||
Copyright (c) 2000, Daniel Stenberg, <daniel@haxx.se>.
|
Copyright (c) 1996 - 2002, Daniel Stenberg, <daniel@haxx.se>.
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission to use, copy, modify, and distribute this software for any purpose
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
with or without fee is hereby granted, provided that the above copyright
|
||||||
in the Software without restriction, including without limitation the rights
|
notice and this permission notice appear in all copies.
|
||||||
to use, copy, modify, merge, publish, distribute, and/or sell copies of the
|
|
||||||
Software, and to permit persons to whom the Software is furnished to do so,
|
|
||||||
provided that the above copyright notice(s) and this permission notice appear
|
|
||||||
in all copies of the Software and that both the above copyright notice(s) and
|
|
||||||
this permission notice appear in supporting documentation.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN
|
||||||
NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE
|
NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
||||||
LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY
|
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||||
DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
|
||||||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
|
OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
||||||
|
|
||||||
Except as contained in this notice, the name of a copyright holder shall not
|
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
|
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.
|
in this Software without prior written authorization of the copyright holder.
|
||||||
|
|
||||||
|
|||||||
38
Makefile.am
38
Makefile.am
@@ -2,11 +2,12 @@
|
|||||||
# $Id$
|
# $Id$
|
||||||
#
|
#
|
||||||
|
|
||||||
AUTOMAKE_OPTIONS = foreign no-dependencies
|
AUTOMAKE_OPTIONS = foreign
|
||||||
|
|
||||||
EXTRA_DIST = \
|
EXTRA_DIST = CHANGES COPYING maketgz SSLCERTS reconf Makefile.dist \
|
||||||
CHANGES LEGAL maketgz MITX.txt MPL-1.1.txt \
|
curl-config.in build_vms.com curl-mode.el
|
||||||
config-win32.h reconf packages/README Makefile.dist
|
|
||||||
|
bin_SCRIPTS = curl-config
|
||||||
|
|
||||||
SUBDIRS = docs lib src include tests packages
|
SUBDIRS = docs lib src include tests packages
|
||||||
|
|
||||||
@@ -14,10 +15,16 @@ SUBDIRS = docs lib src include tests packages
|
|||||||
dist-hook:
|
dist-hook:
|
||||||
cp $(srcdir)/Makefile.dist $(distdir)/Makefile
|
cp $(srcdir)/Makefile.dist $(distdir)/Makefile
|
||||||
|
|
||||||
|
html:
|
||||||
|
cd docs; make html
|
||||||
|
|
||||||
|
pdf:
|
||||||
|
cd docs; make pdf
|
||||||
|
|
||||||
check: test
|
check: test
|
||||||
|
|
||||||
test:
|
test:
|
||||||
@(cd tests; make quiet-test)
|
@(cd tests; $(MAKE) quiet-test)
|
||||||
|
|
||||||
#
|
#
|
||||||
# Build source and binary rpms. For rpm-3.0 and above, the ~/.rpmmacros
|
# Build source and binary rpms. For rpm-3.0 and above, the ~/.rpmmacros
|
||||||
@@ -45,3 +52,24 @@ rpm:
|
|||||||
rpm -ba --clean --rmsource $$RPM_TOPDIR/SPECS/$(RPMDIST).spec ; \
|
rpm -ba --clean --rmsource $$RPM_TOPDIR/SPECS/$(RPMDIST).spec ; \
|
||||||
mv $$RPM_TOPDIR/RPMS/i386/$(RPMDIST)-*.rpm . ; \
|
mv $$RPM_TOPDIR/RPMS/i386/$(RPMDIST)-*.rpm . ; \
|
||||||
mv $$RPM_TOPDIR/SRPMS/$(RPMDIST)-*.src.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
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
# | (__| |_| | _ <| |___
|
# | (__| |_| | _ <| |___
|
||||||
# \___|\___/|_| \_\_____|
|
# \___|\___/|_| \_\_____|
|
||||||
#
|
#
|
||||||
# Copyright (C) 2000, Daniel Stenberg, <daniel@haxx.se>, et al.
|
# Copyright (C) 2002, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
#
|
#
|
||||||
# In order to be useful for every potential user, curl and libcurl are
|
# In order to be useful for every potential user, curl and libcurl are
|
||||||
# dual-licensed under the MPL and the MIT/X-derivate licenses.
|
# dual-licensed under the MPL and the MIT/X-derivate licenses.
|
||||||
@@ -30,26 +30,32 @@ ssl:
|
|||||||
make
|
make
|
||||||
|
|
||||||
borland:
|
borland:
|
||||||
cd lib; make -f Makefile.b32
|
cd lib & make -f Makefile.b32
|
||||||
cd src; make -f Makefile.b32
|
cd src & make -f Makefile.b32
|
||||||
|
|
||||||
mingw32:
|
mingw32:
|
||||||
cd lib; make -f Makefile.m32
|
cd lib & make -f Makefile.m32 ZLIB=1
|
||||||
cd src; make -f Makefile.m32
|
cd src & make -f Makefile.m32 ZLIB=1
|
||||||
|
|
||||||
mingw32-ssl:
|
mingw32-ssl:
|
||||||
cd lib; make -f Makefile.m32 SSL=1
|
cd lib & make -f Makefile.m32 SSL=1 ZLIB=1
|
||||||
cd src; make -f Makefile.m32 SSL=1
|
cd src & make -f Makefile.m32 SSL=1 ZLIB=1
|
||||||
|
|
||||||
vc:
|
vc:
|
||||||
cd lib
|
cd lib
|
||||||
nmake -f Makefile.vc6
|
nmake -f Makefile.vc6 cfg=release
|
||||||
cd ..\src
|
cd ..\src
|
||||||
nmake -f Makefile.vc6
|
nmake -f Makefile.vc6
|
||||||
|
|
||||||
vc-ssl:
|
vc-ssl:
|
||||||
cd lib
|
cd lib
|
||||||
nmake -f Makefile.vc6 release-ssl
|
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
|
cd ..\src
|
||||||
nmake -f Makefile.vc6
|
nmake -f Makefile.vc6
|
||||||
|
|
||||||
|
|||||||
17
README
17
README
@@ -12,21 +12,26 @@ README
|
|||||||
document.
|
document.
|
||||||
|
|
||||||
libcurl is a library that Curl is using to do its job. It is readily
|
libcurl is a library that Curl is using to do its job. It is readily
|
||||||
available to be used by your software. Read the LIBCURL document to
|
available to be used by your software. Read the libcurl.3 man page to
|
||||||
find out how!
|
find out how!
|
||||||
|
|
||||||
You find answers to the most frequent questions we get in the FAQ document.
|
You find answers to the most frequent questions we get in the FAQ document.
|
||||||
|
|
||||||
Study the LEGAL file for distribution terms and similar.
|
Study the LEGAL file for distribution terms and similar.
|
||||||
|
|
||||||
Always try the Curl web site for the latest news:
|
Visit the curl web site or mirrors for the latest news:
|
||||||
|
|
||||||
http://curl.haxx.se
|
http://curl.haxx.se/
|
||||||
|
http://curl.sf.net/
|
||||||
|
http://curl.planetmirror.com/
|
||||||
|
|
||||||
The official download mirror sites are:
|
The official download mirror sites are:
|
||||||
|
|
||||||
Sweden -- ftp://ftp.sunet.se/pub/www/utilities/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/
|
Germany -- ftp://ftp.fu-berlin.de/pub/unix/network/curl/
|
||||||
|
Australia -- http://curl.planetmirror.com/pub/curl/
|
||||||
|
US -- http://curl.sourceforge.net/download.html
|
||||||
|
|
||||||
To download the very latest source off the CVS server do this:
|
To download the very latest source off the CVS server do this:
|
||||||
|
|
||||||
@@ -34,11 +39,9 @@ README
|
|||||||
|
|
||||||
(just press enter when asked for password)
|
(just press enter when asked for password)
|
||||||
|
|
||||||
cvs -d :pserver:anonymous@cvs.curl.sourceforge.net:/cvsroot/curl co .
|
cvs -d :pserver:anonymous@cvs.curl.sourceforge.net:/cvsroot/curl co curl
|
||||||
|
|
||||||
(now, you'll get all the latest sources downloaded into your current
|
(you'll get a directory named curl created, filled with the source code)
|
||||||
directory. Note that this does NOT create a directory named curl or
|
|
||||||
anything)
|
|
||||||
|
|
||||||
cvs -d :pserver:anonymous@cvs.curl.sourceforge.net:/cvsroot/curl logout
|
cvs -d :pserver:anonymous@cvs.curl.sourceforge.net:/cvsroot/curl logout
|
||||||
|
|
||||||
|
|||||||
35
SSLCERTS
Normal file
35
SSLCERTS
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
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 certifcates that are signed
|
||||||
|
by CAs present in the bundle, you will not notice any changed behavior and you
|
||||||
|
will seeminglessly get a higher security level on your SSL connections since
|
||||||
|
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]
|
||||||
|
|
||||||
|
This upgrade 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.
|
||||||
34
UPGRADE
Normal file
34
UPGRADE
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
Upgrading to curl/libcurl 7.10 from any previous version
|
||||||
|
========================================================
|
||||||
|
|
||||||
|
libcurl 7.10 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 certifcates that are signed
|
||||||
|
by CAs present in the bundle, you will not notice any changed behavior and you
|
||||||
|
will seeminglessly get a higher security level on your SSL connections since
|
||||||
|
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]
|
||||||
|
|
||||||
|
This upgrade 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.
|
||||||
49
acconfig.h
49
acconfig.h
@@ -39,3 +39,52 @@
|
|||||||
|
|
||||||
/* Define if you want to enable IPv6 support */
|
/* Define if you want to enable IPv6 support */
|
||||||
#undef ENABLE_IPV6
|
#undef ENABLE_IPV6
|
||||||
|
|
||||||
|
/* Define this to 'int' if ssize_t is not an available typedefed type */
|
||||||
|
#undef ssize_t
|
||||||
|
|
||||||
|
/* Define this to 'int' if socklen_t is not an available typedefed type */
|
||||||
|
#undef socklen_t
|
||||||
|
|
||||||
|
/* Define this as a suitable file to read random data from */
|
||||||
|
#undef RANDOM_FILE
|
||||||
|
|
||||||
|
/* Define this to your Entropy Gathering Daemon socket pathname */
|
||||||
|
#undef EGD_SOCKET
|
||||||
|
|
||||||
|
/* Define if you have a working OpenSSL installation */
|
||||||
|
#undef OPENSSL_ENABLED
|
||||||
|
|
||||||
|
/* Define the one correct non-blocking socket method below */
|
||||||
|
#undef HAVE_FIONBIO
|
||||||
|
#undef HAVE_IOCTLSOCKET
|
||||||
|
#undef HAVE_IOCTLSOCKET_CASE
|
||||||
|
#undef HAVE_O_NONBLOCK
|
||||||
|
#undef HAVE_DISABLED_NONBLOCKING
|
||||||
|
|
||||||
|
/* Define this to 'int' if in_addr_t is not an available typedefed type */
|
||||||
|
#undef in_addr_t
|
||||||
|
|
||||||
|
/* Define to disable DICT */
|
||||||
|
#undef CURL_DISABLE_DICT
|
||||||
|
|
||||||
|
/* Define to disable FILE */
|
||||||
|
#undef CURL_DISABLE_FILE
|
||||||
|
|
||||||
|
/* Define to disable FTP */
|
||||||
|
#undef CURL_DISABLE_FTP
|
||||||
|
|
||||||
|
/* Define to disable GOPHER */
|
||||||
|
#undef CURL_DISABLE_GOPHER
|
||||||
|
|
||||||
|
/* Define to disable HTTP */
|
||||||
|
#undef CURL_DISABLE_HTTP
|
||||||
|
|
||||||
|
/* Define to disable LDAP */
|
||||||
|
#undef CURL_DISABLE_LDAP
|
||||||
|
|
||||||
|
/* Define to disable TELNET */
|
||||||
|
#undef CURL_DISABLE_TELNET
|
||||||
|
|
||||||
|
/* Define if you have zlib present */
|
||||||
|
#undef HAVE_LIBZ
|
||||||
|
|||||||
502
acinclude.m4
502
acinclude.m4
@@ -1,75 +1,447 @@
|
|||||||
#serial 12
|
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])
|
||||||
|
|
||||||
dnl By default, many hosts won't let programs access large files;
|
AC_TRY_COMPILE([
|
||||||
dnl one must use special compiler options to get large-file access to work.
|
/* headers for O_NONBLOCK test */
|
||||||
dnl For more details about this brain damage please see:
|
#include <sys/types.h>
|
||||||
dnl http://www.sas.com/standards/large.file/x_open.20Mar96.html
|
#include <unistd.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
],[
|
||||||
|
/* try to compile O_NONBLOCK */
|
||||||
|
|
||||||
dnl Written by Paul Eggert <eggert@twinsun.com>.
|
#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
|
||||||
|
|
||||||
dnl Internal subroutine of AC_SYS_LARGEFILE.
|
#if defined(PLATFORM_SUNOS4) || defined(PLATFORM_AIX_V3)
|
||||||
dnl AC_SYS_LARGEFILE_TEST_INCLUDES
|
#error "O_NONBLOCK does not work on this platform"
|
||||||
AC_DEFUN(AC_SYS_LARGEFILE_TEST_INCLUDES,
|
#endif
|
||||||
[[#include <sys/types.h>
|
int socket;
|
||||||
int a[(off_t) 9223372036854775807 == 9223372036854775807 ? 1 : -1];
|
int flags = fcntl(socket, F_SETFL, flags | O_NONBLOCK);
|
||||||
]])
|
],[
|
||||||
|
dnl the O_NONBLOCK test was fine
|
||||||
|
nonblock="O_NONBLOCK"
|
||||||
|
AC_DEFINE(HAVE_O_NONBLOCK)
|
||||||
|
],[
|
||||||
|
dnl the code was bad, try a different program now, test 2
|
||||||
|
|
||||||
dnl Internal subroutine of AC_SYS_LARGEFILE.
|
AC_TRY_COMPILE([
|
||||||
dnl AC_SYS_LARGEFILE_MACRO_VALUE(C-MACRO, VALUE, CACHE-VAR, COMMENT, INCLUDES, FUNCTION-BODY)
|
/* headers for FIONBIO test */
|
||||||
AC_DEFUN(AC_SYS_LARGEFILE_MACRO_VALUE,
|
#include <unistd.h>
|
||||||
[AC_CACHE_CHECK([for $1 value needed for large files], $3,
|
#include <stropts.h>
|
||||||
[$3=no
|
],[
|
||||||
AC_TRY_COMPILE(AC_SYS_LARGEFILE_TEST_INCLUDES
|
/* FIONBIO source test */
|
||||||
$5
|
int flags = ioctl(socket, FIONBIO, &flags);
|
||||||
,
|
],[
|
||||||
[$6],
|
dnl FIONBIO test was good
|
||||||
,
|
nonblock="FIONBIO"
|
||||||
[AC_TRY_COMPILE([#define $1 $2]
|
AC_DEFINE(HAVE_FIONBIO)
|
||||||
AC_SYS_LARGEFILE_TEST_INCLUDES
|
],[
|
||||||
$5
|
dnl FIONBIO test was also bad
|
||||||
,
|
dnl the code was bad, try a different program now, test 3
|
||||||
[$6],
|
|
||||||
[$3=$2])])])
|
|
||||||
if test "[$]$3" != no; then
|
|
||||||
AC_DEFINE_UNQUOTED([$1], [$]$3, [$4])
|
|
||||||
fi])
|
|
||||||
|
|
||||||
AC_DEFUN(AC_SYS_LARGEFILE,
|
AC_TRY_COMPILE([
|
||||||
[AC_ARG_ENABLE(largefile,
|
/* headers for ioctlsocket test (cygwin?) */
|
||||||
[ --disable-largefile omit support for large files])
|
#include <windows.h>
|
||||||
if test "$enable_largefile" != no; then
|
],[
|
||||||
|
/* ioctlsocket source code */
|
||||||
|
int flags = ioctlsocket(socket, FIONBIO, &flags);
|
||||||
|
],[
|
||||||
|
dnl ioctlsocket test was good
|
||||||
|
nonblock="ioctlsocket"
|
||||||
|
AC_DEFINE(HAVE_IOCTLSOCKET)
|
||||||
|
],[
|
||||||
|
dnl ioctlsocket didnt compile!
|
||||||
|
|
||||||
AC_CACHE_CHECK([for special C compiler options needed for large files],
|
AC_TRY_COMPILE([
|
||||||
ac_cv_sys_largefile_CC,
|
/* headers for IoctlSocket test (Amiga?) */
|
||||||
[ac_cv_sys_largefile_CC=no
|
#include <sys/ioctl.h>
|
||||||
if test "$GCC" != yes; then
|
],[
|
||||||
# IRIX 6.2 and later do not support large files by default,
|
/* IoctlSocket source code */
|
||||||
# so use the C compiler's -n32 option if that helps.
|
int flags = IoctlSocket(socket, FIONBIO, (long)1);
|
||||||
AC_TRY_COMPILE(AC_SYS_LARGEFILE_TEST_INCLUDES, , ,
|
],[
|
||||||
[ac_save_CC="$CC"
|
dnl ioctlsocket test was good
|
||||||
CC="$CC -n32"
|
nonblock="IoctlSocket"
|
||||||
AC_TRY_COMPILE(AC_SYS_LARGEFILE_TEST_INCLUDES, ,
|
AC_DEFINE(HAVE_IOCTLSOCKET_CASE)
|
||||||
ac_cv_sys_largefile_CC=' -n32')
|
],[
|
||||||
CC="$ac_save_CC"])
|
dnl ioctlsocket didnt compile!
|
||||||
fi])
|
nonblock="nada"
|
||||||
if test "$ac_cv_sys_largefile_CC" != no; then
|
AC_DEFINE(HAVE_DISABLED_NONBLOCKING)
|
||||||
CC="$CC$ac_cv_sys_largefile_CC"
|
])
|
||||||
|
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
|
fi
|
||||||
|
])
|
||||||
|
|
||||||
AC_SYS_LARGEFILE_MACRO_VALUE(_FILE_OFFSET_BITS, 64,
|
dnl Check for socklen_t: historically on BSD it is an int, and in
|
||||||
ac_cv_sys_file_offset_bits,
|
dnl POSIX 1g it is a type of its own, but some platforms use different
|
||||||
[Number of bits in a file offset, on hosts where this is settable.])
|
dnl types for the argument to getsockopt, getpeername, etc. So we
|
||||||
AC_SYS_LARGEFILE_MACRO_VALUE(_LARGEFILE_SOURCE, 1,
|
dnl have to test to find something that will work.
|
||||||
ac_cv_sys_largefile_source,
|
AC_DEFUN([TYPE_SOCKLEN_T],
|
||||||
[Define to make ftello visible on some hosts (e.g. HP-UX 10.20).],
|
[
|
||||||
[#include <stdio.h>], [return !ftello;])
|
AC_CHECK_TYPE([socklen_t], ,[
|
||||||
AC_SYS_LARGEFILE_MACRO_VALUE(_LARGE_FILES, 1,
|
AC_MSG_CHECKING([for socklen_t equivalent])
|
||||||
ac_cv_sys_large_files,
|
AC_CACHE_VAL([curl_cv_socklen_t_equiv],
|
||||||
[Define for large files, on AIX-style hosts.])
|
[
|
||||||
dnl lftp does not need ftello, and _XOPEN_SOURCE=500 makes resolv.h fail.
|
# Systems have either "struct sockaddr *" or
|
||||||
dnl AC_SYS_LARGEFILE_MACRO_VALUE(_XOPEN_SOURCE, 500,
|
# "void *" as the second argument to getpeername
|
||||||
dnl ac_cv_sys_xopen_source,
|
curl_cv_socklen_t_equiv=
|
||||||
dnl [Define to make ftello visible on some hosts (e.g. glibc 2.1.3).],
|
for arg2 in "struct sockaddr" void; do
|
||||||
dnl [#include <stdio.h>], [return !ftello;])
|
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
|
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],
|
||||||
|
[
|
||||||
|
# Systems have either "struct sockaddr *" or
|
||||||
|
# "void *" as the second argument to getpeername
|
||||||
|
curl_cv_in_addr_t_equiv=
|
||||||
|
for t in int size_t unsigned long "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)
|
||||||
|
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)
|
||||||
|
AC_DEFINE(NEED_REENTRANT)
|
||||||
|
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)
|
||||||
|
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)
|
||||||
|
AC_DEFINE(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)
|
||||||
|
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)
|
||||||
|
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)
|
||||||
|
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)
|
||||||
|
AC_DEFINE(NEED_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)
|
||||||
|
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)
|
||||||
|
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
|
||||||
|
])
|
||||||
|
|||||||
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_6c/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_6c.axp.exe.ssl]libssl/lib, -
|
||||||
|
[-.openssl-0_9_6c.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
|
||||||
11
buildconf
Executable file
11
buildconf
Executable file
@@ -0,0 +1,11 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
die(){
|
||||||
|
echo "$@"
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
aclocal || die "The command 'aclocal' failed"
|
||||||
|
autoheader || die "The command 'autoheader' failed"
|
||||||
|
autoconf || die "The command 'autoconf' failed"
|
||||||
|
automake -a || die "The command 'automake $MAKEFILES' failed"
|
||||||
628
config.guess
vendored
628
config.guess
vendored
@@ -1,8 +1,10 @@
|
|||||||
#! /bin/sh
|
#! /bin/sh
|
||||||
# Attempt to guess a canonical system name.
|
# Attempt to guess a canonical system name.
|
||||||
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000
|
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
|
||||||
# Free Software Foundation, Inc.
|
# Free Software Foundation, Inc.
|
||||||
#
|
|
||||||
|
timestamp='2001-09-04'
|
||||||
|
|
||||||
# This file is free software; you can redistribute it and/or modify it
|
# 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
|
# under the terms of the GNU General Public License as published by
|
||||||
# the Free Software Foundation; either version 2 of the License, or
|
# the Free Software Foundation; either version 2 of the License, or
|
||||||
@@ -30,28 +32,88 @@
|
|||||||
# exits with 0. Otherwise, it exits with 1.
|
# exits with 0. Otherwise, it exits with 1.
|
||||||
#
|
#
|
||||||
# The plan is that this can be called by configure scripts if you
|
# The plan is that this can be called by configure scripts if you
|
||||||
# don't specify an explicit system type (host/target name).
|
# don't specify an explicit build system type.
|
||||||
#
|
|
||||||
# Only a few systems have been added to this list; please add others
|
|
||||||
# (but try to keep the structure clean).
|
|
||||||
#
|
|
||||||
|
|
||||||
# Use $HOST_CC if defined. $CC may point to a cross-compiler
|
me=`echo "$0" | sed -e 's,.*/,,'`
|
||||||
if test x"$CC_FOR_BUILD" = x; then
|
|
||||||
if test x"$HOST_CC" != x; then
|
usage="\
|
||||||
CC_FOR_BUILD="$HOST_CC"
|
Usage: $0 [OPTION]
|
||||||
else
|
|
||||||
if test x"$CC" != x; then
|
Output the configuration name of the system \`$me' is run on.
|
||||||
CC_FOR_BUILD="$CC"
|
|
||||||
else
|
Operation modes:
|
||||||
CC_FOR_BUILD=cc
|
-h, --help print this help, then exit
|
||||||
fi
|
-t, --time-stamp print date of last modification, then exit
|
||||||
fi
|
-v, --version print version number, then exit
|
||||||
|
|
||||||
|
Report bugs and patches to <config-patches@gnu.org>."
|
||||||
|
|
||||||
|
version="\
|
||||||
|
GNU config.guess ($timestamp)
|
||||||
|
|
||||||
|
Originally written by Per Bothner.
|
||||||
|
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
|
||||||
|
Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This is free software; see the source for copying conditions. There is NO
|
||||||
|
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
|
||||||
|
|
||||||
|
help="
|
||||||
|
Try \`$me --help' for more information."
|
||||||
|
|
||||||
|
# Parse command line
|
||||||
|
while test $# -gt 0 ; do
|
||||||
|
case $1 in
|
||||||
|
--time-stamp | --time* | -t )
|
||||||
|
echo "$timestamp" ; exit 0 ;;
|
||||||
|
--version | -v )
|
||||||
|
echo "$version" ; exit 0 ;;
|
||||||
|
--help | --h* | -h )
|
||||||
|
echo "$usage"; exit 0 ;;
|
||||||
|
-- ) # Stop option processing
|
||||||
|
shift; break ;;
|
||||||
|
- ) # Use stdin as input.
|
||||||
|
break ;;
|
||||||
|
-* )
|
||||||
|
echo "$me: invalid option $1$help" >&2
|
||||||
|
exit 1 ;;
|
||||||
|
* )
|
||||||
|
break ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
if test $# != 0; then
|
||||||
|
echo "$me: too many arguments$help" >&2
|
||||||
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
dummy=dummy-$$
|
||||||
|
trap 'rm -f $dummy.c $dummy.o $dummy.rel $dummy; exit 1' 1 2 15
|
||||||
|
|
||||||
|
# CC_FOR_BUILD -- compiler used by this script.
|
||||||
|
# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
|
||||||
|
# use `HOST_CC' if defined, but it is deprecated.
|
||||||
|
|
||||||
|
set_cc_for_build='case $CC_FOR_BUILD,$HOST_CC,$CC in
|
||||||
|
,,) echo "int dummy(){}" > $dummy.c ;
|
||||||
|
for c in cc gcc c89 ; do
|
||||||
|
($c $dummy.c -c -o $dummy.o) >/dev/null 2>&1 ;
|
||||||
|
if test $? = 0 ; then
|
||||||
|
CC_FOR_BUILD="$c"; break ;
|
||||||
|
fi ;
|
||||||
|
done ;
|
||||||
|
rm -f $dummy.c $dummy.o $dummy.rel ;
|
||||||
|
if test x"$CC_FOR_BUILD" = x ; then
|
||||||
|
CC_FOR_BUILD=no_compiler_found ;
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
,,*) CC_FOR_BUILD=$CC ;;
|
||||||
|
,*,*) CC_FOR_BUILD=$HOST_CC ;;
|
||||||
|
esac'
|
||||||
|
|
||||||
# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
|
# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
|
||||||
# (ghazi@noc.rutgers.edu 8/24/94.)
|
# (ghazi@noc.rutgers.edu 1994-08-24)
|
||||||
if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
|
if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
|
||||||
PATH=$PATH:/.attbin ; export PATH
|
PATH=$PATH:/.attbin ; export PATH
|
||||||
fi
|
fi
|
||||||
@@ -61,9 +123,6 @@ UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
|
|||||||
UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
|
UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
|
||||||
UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=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.
|
# Note: order is significant - the case branches are not exclusive.
|
||||||
|
|
||||||
case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
|
case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
|
||||||
@@ -77,7 +136,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
|
|||||||
# object file format.
|
# object file format.
|
||||||
# Determine the machine/vendor (is the vendor relevant).
|
# Determine the machine/vendor (is the vendor relevant).
|
||||||
case "${UNAME_MACHINE}" in
|
case "${UNAME_MACHINE}" in
|
||||||
amiga) machine=m68k-cbm ;;
|
amiga) machine=m68k-unknown ;;
|
||||||
arm32) machine=arm-unknown ;;
|
arm32) machine=arm-unknown ;;
|
||||||
atari*) machine=m68k-atari ;;
|
atari*) machine=m68k-atari ;;
|
||||||
sun3*) machine=m68k-sun ;;
|
sun3*) machine=m68k-sun ;;
|
||||||
@@ -87,7 +146,11 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
|
|||||||
ibmrt|romp-ibm) machine=romp-ibm ;;
|
ibmrt|romp-ibm) machine=romp-ibm ;;
|
||||||
*) machine=${UNAME_MACHINE}-unknown ;;
|
*) machine=${UNAME_MACHINE}-unknown ;;
|
||||||
esac
|
esac
|
||||||
# The Operating System including object format.
|
# The Operating System including object format, if it has switched
|
||||||
|
# to ELF recently, or will in the future.
|
||||||
|
case "${UNAME_MACHINE}" in
|
||||||
|
i386|sparc|amiga|arm*|hp300|mvme68k|vax|atari|luna68k|mac68k|news68k|next68k|pc532|sun3*|x68k)
|
||||||
|
eval $set_cc_for_build
|
||||||
if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
|
if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
|
||||||
| grep __ELF__ >/dev/null
|
| grep __ELF__ >/dev/null
|
||||||
then
|
then
|
||||||
@@ -97,6 +160,11 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
|
|||||||
else
|
else
|
||||||
os=netbsdelf
|
os=netbsdelf
|
||||||
fi
|
fi
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
os=netbsd
|
||||||
|
;;
|
||||||
|
esac
|
||||||
# The OS release
|
# The OS release
|
||||||
release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
|
release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
|
||||||
# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
|
# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
|
||||||
@@ -137,6 +205,7 @@ main:
|
|||||||
jsr \$26,exit
|
jsr \$26,exit
|
||||||
.end main
|
.end main
|
||||||
EOF
|
EOF
|
||||||
|
eval $set_cc_for_build
|
||||||
$CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null
|
$CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null
|
||||||
if test "$?" = 0 ; then
|
if test "$?" = 0 ; then
|
||||||
case `./$dummy` in
|
case `./$dummy` in
|
||||||
@@ -158,6 +227,9 @@ EOF
|
|||||||
2-307)
|
2-307)
|
||||||
UNAME_MACHINE="alphaev67"
|
UNAME_MACHINE="alphaev67"
|
||||||
;;
|
;;
|
||||||
|
2-1307)
|
||||||
|
UNAME_MACHINE="alphaev68"
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
fi
|
fi
|
||||||
rm -f $dummy.s $dummy
|
rm -f $dummy.s $dummy
|
||||||
@@ -173,7 +245,7 @@ EOF
|
|||||||
echo alpha-dec-winnt3.5
|
echo alpha-dec-winnt3.5
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
Amiga*:UNIX_System_V:4.0:*)
|
Amiga*:UNIX_System_V:4.0:*)
|
||||||
echo m68k-cbm-sysv4
|
echo m68k-unknown-sysv4
|
||||||
exit 0;;
|
exit 0;;
|
||||||
amiga:OpenBSD:*:*)
|
amiga:OpenBSD:*:*)
|
||||||
echo m68k-unknown-openbsd${UNAME_RELEASE}
|
echo m68k-unknown-openbsd${UNAME_RELEASE}
|
||||||
@@ -205,7 +277,7 @@ EOF
|
|||||||
arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
|
arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
|
||||||
echo arm-acorn-riscix${UNAME_RELEASE}
|
echo arm-acorn-riscix${UNAME_RELEASE}
|
||||||
exit 0;;
|
exit 0;;
|
||||||
SR2?01:HI-UX/MPP:*:*)
|
SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
|
||||||
echo hppa1.1-hitachi-hiuxmpp
|
echo hppa1.1-hitachi-hiuxmpp
|
||||||
exit 0;;
|
exit 0;;
|
||||||
Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
|
Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
|
||||||
@@ -261,6 +333,9 @@ EOF
|
|||||||
aushp:SunOS:*:*)
|
aushp:SunOS:*:*)
|
||||||
echo sparc-auspex-sunos${UNAME_RELEASE}
|
echo sparc-auspex-sunos${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
|
sparc*:NetBSD:*)
|
||||||
|
echo `uname -p`-unknown-netbsd${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
atari*:OpenBSD:*:*)
|
atari*:OpenBSD:*:*)
|
||||||
echo m68k-unknown-openbsd${UNAME_RELEASE}
|
echo m68k-unknown-openbsd${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
@@ -318,6 +393,7 @@ EOF
|
|||||||
echo clipper-intergraph-clix${UNAME_RELEASE}
|
echo clipper-intergraph-clix${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
mips:*:*:UMIPS | mips:*:*:RISCos)
|
mips:*:*:UMIPS | mips:*:*:RISCos)
|
||||||
|
eval $set_cc_for_build
|
||||||
sed 's/^ //' << EOF >$dummy.c
|
sed 's/^ //' << EOF >$dummy.c
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
#include <stdio.h> /* for printf() prototype */
|
#include <stdio.h> /* for printf() prototype */
|
||||||
@@ -341,10 +417,13 @@ EOF
|
|||||||
EOF
|
EOF
|
||||||
$CC_FOR_BUILD $dummy.c -o $dummy \
|
$CC_FOR_BUILD $dummy.c -o $dummy \
|
||||||
&& ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
|
&& ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
|
||||||
&& rm $dummy.c $dummy && exit 0
|
&& rm -f $dummy.c $dummy && exit 0
|
||||||
rm -f $dummy.c $dummy
|
rm -f $dummy.c $dummy
|
||||||
echo mips-mips-riscos${UNAME_RELEASE}
|
echo mips-mips-riscos${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
|
Motorola:PowerMAX_OS:*:*)
|
||||||
|
echo powerpc-motorola-powermax
|
||||||
|
exit 0 ;;
|
||||||
Night_Hawk:Power_UNIX:*:*)
|
Night_Hawk:Power_UNIX:*:*)
|
||||||
echo powerpc-harris-powerunix
|
echo powerpc-harris-powerunix
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
@@ -392,11 +471,20 @@ EOF
|
|||||||
????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
|
????????: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
|
echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
|
||||||
exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX '
|
exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX '
|
||||||
i?86:AIX:*:*)
|
i*86:AIX:*:*)
|
||||||
echo i386-ibm-aix
|
echo i386-ibm-aix
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
|
ia64:AIX:*:*)
|
||||||
|
if [ -x /usr/bin/oslevel ] ; then
|
||||||
|
IBM_REV=`/usr/bin/oslevel`
|
||||||
|
else
|
||||||
|
IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
|
||||||
|
fi
|
||||||
|
echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
|
||||||
|
exit 0 ;;
|
||||||
*:AIX:2:3)
|
*:AIX:2:3)
|
||||||
if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
|
if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
|
||||||
|
eval $set_cc_for_build
|
||||||
sed 's/^ //' << EOF >$dummy.c
|
sed 's/^ //' << EOF >$dummy.c
|
||||||
#include <sys/systemcfg.h>
|
#include <sys/systemcfg.h>
|
||||||
|
|
||||||
@@ -408,7 +496,7 @@ EOF
|
|||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
$CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm $dummy.c $dummy && exit 0
|
$CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0
|
||||||
rm -f $dummy.c $dummy
|
rm -f $dummy.c $dummy
|
||||||
echo rs6000-ibm-aix3.2.5
|
echo rs6000-ibm-aix3.2.5
|
||||||
elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
|
elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
|
||||||
@@ -417,9 +505,9 @@ EOF
|
|||||||
echo rs6000-ibm-aix3.2
|
echo rs6000-ibm-aix3.2
|
||||||
fi
|
fi
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
*:AIX:*:4)
|
*:AIX:*:[45])
|
||||||
IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | head -1 | awk '{ print $1 }'`
|
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
|
if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
|
||||||
IBM_ARCH=rs6000
|
IBM_ARCH=rs6000
|
||||||
else
|
else
|
||||||
IBM_ARCH=powerpc
|
IBM_ARCH=powerpc
|
||||||
@@ -427,7 +515,7 @@ EOF
|
|||||||
if [ -x /usr/bin/oslevel ] ; then
|
if [ -x /usr/bin/oslevel ] ; then
|
||||||
IBM_REV=`/usr/bin/oslevel`
|
IBM_REV=`/usr/bin/oslevel`
|
||||||
else
|
else
|
||||||
IBM_REV=4.${UNAME_RELEASE}
|
IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
|
||||||
fi
|
fi
|
||||||
echo ${IBM_ARCH}-ibm-aix${IBM_REV}
|
echo ${IBM_ARCH}-ibm-aix${IBM_REV}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
@@ -453,10 +541,29 @@ EOF
|
|||||||
echo m68k-hp-bsd4.4
|
echo m68k-hp-bsd4.4
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
9000/[34678]??:HP-UX:*:*)
|
9000/[34678]??:HP-UX:*:*)
|
||||||
|
HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
|
||||||
case "${UNAME_MACHINE}" in
|
case "${UNAME_MACHINE}" in
|
||||||
9000/31? ) HP_ARCH=m68000 ;;
|
9000/31? ) HP_ARCH=m68000 ;;
|
||||||
9000/[34]?? ) HP_ARCH=m68k ;;
|
9000/[34]?? ) HP_ARCH=m68k ;;
|
||||||
9000/[678][0-9][0-9])
|
9000/[678][0-9][0-9])
|
||||||
|
case "${HPUX_REV}" in
|
||||||
|
11.[0-9][0-9])
|
||||||
|
if [ -x /usr/bin/getconf ]; then
|
||||||
|
sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
|
||||||
|
sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
|
||||||
|
case "${sc_cpu_version}" in
|
||||||
|
523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
|
||||||
|
528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
|
||||||
|
532) # CPU_PA_RISC2_0
|
||||||
|
case "${sc_kernel_bits}" in
|
||||||
|
32) HP_ARCH="hppa2.0n" ;;
|
||||||
|
64) HP_ARCH="hppa2.0w" ;;
|
||||||
|
esac ;;
|
||||||
|
esac
|
||||||
|
fi ;;
|
||||||
|
esac
|
||||||
|
if [ "${HP_ARCH}" = "" ]; then
|
||||||
|
eval $set_cc_for_build
|
||||||
sed 's/^ //' << EOF >$dummy.c
|
sed 's/^ //' << EOF >$dummy.c
|
||||||
|
|
||||||
#define _HPUX_SOURCE
|
#define _HPUX_SOURCE
|
||||||
@@ -491,12 +598,18 @@ EOF
|
|||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
(CCOPTS= $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null ) && HP_ARCH=`./$dummy`
|
(CCOPTS= $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null ) && HP_ARCH=`./$dummy`
|
||||||
|
if test -z "$HP_ARCH"; then HP_ARCH=hppa; fi
|
||||||
rm -f $dummy.c $dummy
|
rm -f $dummy.c $dummy
|
||||||
|
fi ;;
|
||||||
esac
|
esac
|
||||||
HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
|
|
||||||
echo ${HP_ARCH}-hp-hpux${HPUX_REV}
|
echo ${HP_ARCH}-hp-hpux${HPUX_REV}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
|
ia64:HP-UX:*:*)
|
||||||
|
HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
|
||||||
|
echo ia64-hp-hpux${HPUX_REV}
|
||||||
|
exit 0 ;;
|
||||||
3050*:HI-UX:*:*)
|
3050*:HI-UX:*:*)
|
||||||
|
eval $set_cc_for_build
|
||||||
sed 's/^ //' << EOF >$dummy.c
|
sed 's/^ //' << EOF >$dummy.c
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
int
|
int
|
||||||
@@ -522,7 +635,7 @@ EOF
|
|||||||
exit (0);
|
exit (0);
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
$CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm $dummy.c $dummy && exit 0
|
$CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0
|
||||||
rm -f $dummy.c $dummy
|
rm -f $dummy.c $dummy
|
||||||
echo unknown-hitachi-hiuxwe2
|
echo unknown-hitachi-hiuxwe2
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
@@ -532,7 +645,7 @@ EOF
|
|||||||
9000/8??:4.3bsd:*:*)
|
9000/8??:4.3bsd:*:*)
|
||||||
echo hppa1.0-hp-bsd
|
echo hppa1.0-hp-bsd
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
*9??*:MPE/iX:*:*)
|
*9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
|
||||||
echo hppa1.0-hp-mpeix
|
echo hppa1.0-hp-mpeix
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
|
hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
|
||||||
@@ -541,7 +654,7 @@ EOF
|
|||||||
hp8??:OSF1:*:*)
|
hp8??:OSF1:*:*)
|
||||||
echo hppa1.0-hp-osf
|
echo hppa1.0-hp-osf
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
i?86:OSF1:*:*)
|
i*86:OSF1:*:*)
|
||||||
if [ -x /usr/sbin/sysversion ] ; then
|
if [ -x /usr/sbin/sysversion ] ; then
|
||||||
echo ${UNAME_MACHINE}-unknown-osf1mk
|
echo ${UNAME_MACHINE}-unknown-osf1mk
|
||||||
else
|
else
|
||||||
@@ -576,37 +689,39 @@ EOF
|
|||||||
echo xmp-cray-unicos
|
echo xmp-cray-unicos
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
CRAY*Y-MP:*:*:*)
|
CRAY*Y-MP:*:*:*)
|
||||||
echo ymp-cray-unicos${UNAME_RELEASE}
|
echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
CRAY*[A-Z]90:*:*:*)
|
CRAY*[A-Z]90:*:*:*)
|
||||||
echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
|
echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
|
||||||
| sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
|
| sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
|
||||||
-e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/
|
-e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
|
||||||
|
-e 's/\.[^.]*$/.X/'
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
CRAY*TS:*:*:*)
|
CRAY*TS:*:*:*)
|
||||||
echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
|
echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
CRAY*T3E:*:*:*)
|
CRAY*T3D:*:*:*)
|
||||||
echo alpha-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
|
echo alpha-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
|
CRAY*T3E:*:*:*)
|
||||||
|
echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
|
||||||
|
exit 0 ;;
|
||||||
CRAY*SV1:*:*:*)
|
CRAY*SV1:*:*:*)
|
||||||
echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
|
echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
CRAY-2:*:*:*)
|
CRAY-2:*:*:*)
|
||||||
echo cray2-cray-unicos
|
echo cray2-cray-unicos
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
F300:UNIX_System_V:*:*)
|
F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
|
||||||
|
FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
|
||||||
FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
|
FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
|
||||||
FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
|
FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
|
||||||
echo "f300-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
|
echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
|
||||||
exit 0 ;;
|
|
||||||
F301:UNIX_System_V:*:*)
|
|
||||||
echo f301-fujitsu-uxpv`echo $UNAME_RELEASE | sed 's/ .*//'`
|
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
hp300:OpenBSD:*:*)
|
hp300:OpenBSD:*:*)
|
||||||
echo m68k-unknown-openbsd${UNAME_RELEASE}
|
echo m68k-unknown-openbsd${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
i?86:BSD/386:*:* | i?86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
|
i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
|
||||||
echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
|
echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
sparc*:BSD/OS:*:*)
|
sparc*:BSD/OS:*:*)
|
||||||
@@ -627,6 +742,9 @@ EOF
|
|||||||
i*:MINGW*:*)
|
i*:MINGW*:*)
|
||||||
echo ${UNAME_MACHINE}-pc-mingw32
|
echo ${UNAME_MACHINE}-pc-mingw32
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
|
i*:PW*:*)
|
||||||
|
echo ${UNAME_MACHINE}-pc-pw32
|
||||||
|
exit 0 ;;
|
||||||
i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
|
i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
|
||||||
# How do we know it's Interix rather than the generic POSIX subsystem?
|
# How do we know it's Interix rather than the generic POSIX subsystem?
|
||||||
# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
|
# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
|
||||||
@@ -645,186 +763,95 @@ EOF
|
|||||||
*:GNU:*:*)
|
*:GNU:*:*)
|
||||||
echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
|
echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
*:Linux:*:*)
|
i*86:Minix:*:*)
|
||||||
|
echo ${UNAME_MACHINE}-pc-minix
|
||||||
|
exit 0 ;;
|
||||||
|
arm*:Linux:*:*)
|
||||||
|
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
||||||
|
exit 0 ;;
|
||||||
|
ia64:Linux:*:*)
|
||||||
|
echo ${UNAME_MACHINE}-unknown-linux
|
||||||
|
exit 0 ;;
|
||||||
|
m68*:Linux:*:*)
|
||||||
|
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
||||||
|
exit 0 ;;
|
||||||
|
mips:Linux:*:*)
|
||||||
|
case `sed -n '/^byte/s/^.*: \(.*\) endian/\1/p' < /proc/cpuinfo` in
|
||||||
|
big) echo mips-unknown-linux-gnu && exit 0 ;;
|
||||||
|
little) echo mipsel-unknown-linux-gnu && exit 0 ;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
ppc:Linux:*:*)
|
||||||
|
echo powerpc-unknown-linux-gnu
|
||||||
|
exit 0 ;;
|
||||||
|
ppc64:Linux:*:*)
|
||||||
|
echo powerpc64-unknown-linux-gnu
|
||||||
|
exit 0 ;;
|
||||||
|
alpha:Linux:*:*)
|
||||||
|
case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
|
||||||
|
EV5) UNAME_MACHINE=alphaev5 ;;
|
||||||
|
EV56) UNAME_MACHINE=alphaev56 ;;
|
||||||
|
PCA56) UNAME_MACHINE=alphapca56 ;;
|
||||||
|
PCA57) UNAME_MACHINE=alphapca56 ;;
|
||||||
|
EV6) UNAME_MACHINE=alphaev6 ;;
|
||||||
|
EV67) UNAME_MACHINE=alphaev67 ;;
|
||||||
|
EV68*) UNAME_MACHINE=alphaev68 ;;
|
||||||
|
esac
|
||||||
|
objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
|
||||||
|
if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
|
||||||
|
echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
|
||||||
|
exit 0 ;;
|
||||||
|
parisc:Linux:*:* | hppa:Linux:*:*)
|
||||||
|
# Look for CPU level
|
||||||
|
case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
|
||||||
|
PA7*) echo hppa1.1-unknown-linux-gnu ;;
|
||||||
|
PA8*) echo hppa2.0-unknown-linux-gnu ;;
|
||||||
|
*) echo hppa-unknown-linux-gnu ;;
|
||||||
|
esac
|
||||||
|
exit 0 ;;
|
||||||
|
parisc64:Linux:*:* | hppa64:Linux:*:*)
|
||||||
|
echo hppa64-unknown-linux-gnu
|
||||||
|
exit 0 ;;
|
||||||
|
s390:Linux:*:* | s390x:Linux:*:*)
|
||||||
|
echo ${UNAME_MACHINE}-ibm-linux
|
||||||
|
exit 0 ;;
|
||||||
|
sh*:Linux:*:*)
|
||||||
|
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
||||||
|
exit 0 ;;
|
||||||
|
sparc:Linux:*:* | sparc64:Linux:*:*)
|
||||||
|
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
||||||
|
exit 0 ;;
|
||||||
|
x86_64:Linux:*:*)
|
||||||
|
echo x86_64-unknown-linux-gnu
|
||||||
|
exit 0 ;;
|
||||||
|
i*86:Linux:*:*)
|
||||||
# The BFD linker knows what the default object file format is, so
|
# The BFD linker knows what the default object file format is, so
|
||||||
# first see if it will tell us. cd to the root directory to prevent
|
# first see if it will tell us. cd to the root directory to prevent
|
||||||
# problems with other programs or directories called `ld' in the path.
|
# problems with other programs or directories called `ld' in the path.
|
||||||
ld_help_string=`cd /; ld --help 2>&1`
|
ld_supported_targets=`cd /; ld --help 2>&1 \
|
||||||
ld_supported_emulations=`echo $ld_help_string \
|
| sed -ne '/supported targets:/!d
|
||||||
| sed -ne '/supported emulations:/!d
|
|
||||||
s/[ ][ ]*/ /g
|
s/[ ][ ]*/ /g
|
||||||
s/.*supported emulations: *//
|
s/.*supported targets: *//
|
||||||
s/ .*//
|
s/ .*//
|
||||||
p'`
|
p'`
|
||||||
case "$ld_supported_emulations" in
|
case "$ld_supported_targets" in
|
||||||
*ia64)
|
elf32-i386)
|
||||||
echo "${UNAME_MACHINE}-unknown-linux"
|
TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
|
||||||
exit 0
|
|
||||||
;;
|
;;
|
||||||
i?86linux)
|
a.out-i386-linux)
|
||||||
echo "${UNAME_MACHINE}-pc-linux-gnuaout"
|
echo "${UNAME_MACHINE}-pc-linux-gnuaout"
|
||||||
exit 0
|
exit 0 ;;
|
||||||
;;
|
coff-i386)
|
||||||
elf_i?86)
|
|
||||||
echo "${UNAME_MACHINE}-pc-linux"
|
|
||||||
exit 0
|
|
||||||
;;
|
|
||||||
i?86coff)
|
|
||||||
echo "${UNAME_MACHINE}-pc-linux-gnucoff"
|
echo "${UNAME_MACHINE}-pc-linux-gnucoff"
|
||||||
exit 0
|
exit 0 ;;
|
||||||
;;
|
"")
|
||||||
sparclinux)
|
# Either a pre-BFD a.out linker (linux-gnuoldld) or
|
||||||
echo "${UNAME_MACHINE}-unknown-linux-gnuaout"
|
# one that does not give us useful --help.
|
||||||
exit 0
|
echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
|
||||||
;;
|
exit 0 ;;
|
||||||
armlinux)
|
|
||||||
echo "${UNAME_MACHINE}-unknown-linux-gnuaout"
|
|
||||||
exit 0
|
|
||||||
;;
|
|
||||||
elf32arm*)
|
|
||||||
echo "${UNAME_MACHINE}-unknown-linux-gnuoldld"
|
|
||||||
exit 0
|
|
||||||
;;
|
|
||||||
armelf_linux*)
|
|
||||||
echo "${UNAME_MACHINE}-unknown-linux-gnu"
|
|
||||||
exit 0
|
|
||||||
;;
|
|
||||||
m68klinux)
|
|
||||||
echo "${UNAME_MACHINE}-unknown-linux-gnuaout"
|
|
||||||
exit 0
|
|
||||||
;;
|
|
||||||
elf32ppc | elf32ppclinux)
|
|
||||||
# Determine Lib Version
|
|
||||||
cat >$dummy.c <<EOF
|
|
||||||
#include <features.h>
|
|
||||||
#if defined(__GLIBC__)
|
|
||||||
extern char __libc_version[];
|
|
||||||
extern char __libc_release[];
|
|
||||||
#endif
|
|
||||||
main(argc, argv)
|
|
||||||
int argc;
|
|
||||||
char *argv[];
|
|
||||||
{
|
|
||||||
#if defined(__GLIBC__)
|
|
||||||
printf("%s %s\n", __libc_version, __libc_release);
|
|
||||||
#else
|
|
||||||
printf("unkown\n");
|
|
||||||
#endif
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
EOF
|
|
||||||
LIBC=""
|
|
||||||
$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null
|
|
||||||
if test "$?" = 0 ; then
|
|
||||||
./$dummy | grep 1\.99 > /dev/null
|
|
||||||
if test "$?" = 0 ; then
|
|
||||||
LIBC="libc1"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
rm -f $dummy.c $dummy
|
|
||||||
echo powerpc-unknown-linux-gnu${LIBC}
|
|
||||||
exit 0
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
if test "${UNAME_MACHINE}" = "alpha" ; then
|
|
||||||
cat <<EOF >$dummy.s
|
|
||||||
.data
|
|
||||||
\$Lformat:
|
|
||||||
.byte 37,100,45,37,120,10,0 # "%d-%x\n"
|
|
||||||
|
|
||||||
.text
|
|
||||||
.globl main
|
|
||||||
.align 4
|
|
||||||
.ent main
|
|
||||||
main:
|
|
||||||
.frame \$30,16,\$26,0
|
|
||||||
ldgp \$29,0(\$27)
|
|
||||||
.prologue 1
|
|
||||||
.long 0x47e03d80 # implver \$0
|
|
||||||
lda \$2,-1
|
|
||||||
.long 0x47e20c21 # amask \$2,\$1
|
|
||||||
lda \$16,\$Lformat
|
|
||||||
mov \$0,\$17
|
|
||||||
not \$1,\$18
|
|
||||||
jsr \$26,printf
|
|
||||||
ldgp \$29,0(\$26)
|
|
||||||
mov 0,\$16
|
|
||||||
jsr \$26,exit
|
|
||||||
.end main
|
|
||||||
EOF
|
|
||||||
LIBC=""
|
|
||||||
$CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null
|
|
||||||
if test "$?" = 0 ; then
|
|
||||||
case `./$dummy` in
|
|
||||||
0-0)
|
|
||||||
UNAME_MACHINE="alpha"
|
|
||||||
;;
|
|
||||||
1-0)
|
|
||||||
UNAME_MACHINE="alphaev5"
|
|
||||||
;;
|
|
||||||
1-1)
|
|
||||||
UNAME_MACHINE="alphaev56"
|
|
||||||
;;
|
|
||||||
1-101)
|
|
||||||
UNAME_MACHINE="alphapca56"
|
|
||||||
;;
|
|
||||||
2-303)
|
|
||||||
UNAME_MACHINE="alphaev6"
|
|
||||||
;;
|
|
||||||
2-307)
|
|
||||||
UNAME_MACHINE="alphaev67"
|
|
||||||
;;
|
|
||||||
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
|
|
||||||
#include <stdio.h> /* for printf() prototype */
|
|
||||||
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_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm $dummy.c $dummy && exit 0
|
|
||||||
rm -f $dummy.c $dummy
|
|
||||||
elif test "${UNAME_MACHINE}" = "s390"; then
|
|
||||||
echo s390-ibm-linux && exit 0
|
|
||||||
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
|
esac
|
||||||
# Determine whether the default compiler is a.out or elf
|
# Determine whether the default compiler is a.out or elf
|
||||||
|
eval $set_cc_for_build
|
||||||
cat >$dummy.c <<EOF
|
cat >$dummy.c <<EOF
|
||||||
#include <features.h>
|
#include <features.h>
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
@@ -836,28 +863,30 @@ EOF
|
|||||||
#ifdef __ELF__
|
#ifdef __ELF__
|
||||||
# ifdef __GLIBC__
|
# ifdef __GLIBC__
|
||||||
# if __GLIBC__ >= 2
|
# if __GLIBC__ >= 2
|
||||||
printf ("%s-${VENDOR}-linux-gnu\n", argv[1]);
|
printf ("%s-pc-linux-gnu\n", argv[1]);
|
||||||
# else
|
# else
|
||||||
printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]);
|
printf ("%s-pc-linux-gnulibc1\n", argv[1]);
|
||||||
# endif
|
# endif
|
||||||
# else
|
# else
|
||||||
printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]);
|
printf ("%s-pc-linux-gnulibc1\n", argv[1]);
|
||||||
# endif
|
# endif
|
||||||
#else
|
#else
|
||||||
printf ("%s-${VENDOR}-linux-gnuaout\n", argv[1]);
|
printf ("%s-pc-linux-gnuaout\n", argv[1]);
|
||||||
#endif
|
#endif
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm $dummy.c $dummy && exit 0
|
$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm -f $dummy.c $dummy && exit 0
|
||||||
rm -f $dummy.c $dummy
|
rm -f $dummy.c $dummy
|
||||||
fi ;;
|
test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0
|
||||||
# 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*:*)
|
||||||
i?86:DYNIX/ptx:4*:*)
|
# 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.
|
||||||
echo i386-sequent-sysv4
|
echo i386-sequent-sysv4
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
i?86:UNIX_SV:4.2MP:2.*)
|
i*86:UNIX_SV:4.2MP:2.*)
|
||||||
# Unixware is an offshoot of SVR4, but it has its own version
|
# Unixware is an offshoot of SVR4, but it has its own version
|
||||||
# number series starting with 2...
|
# number series starting with 2...
|
||||||
# I am not positive that other SVR4 systems won't match this,
|
# I am not positive that other SVR4 systems won't match this,
|
||||||
@@ -865,7 +894,7 @@ EOF
|
|||||||
# Use sysv4.2uw... so that sysv4* matches it.
|
# Use sysv4.2uw... so that sysv4* matches it.
|
||||||
echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
|
echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
i?86:*:4.*:* | i?86:SYSTEM_V:4.*:*)
|
i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
|
||||||
UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
|
UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
|
||||||
if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
|
if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
|
||||||
echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
|
echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
|
||||||
@@ -873,16 +902,15 @@ EOF
|
|||||||
echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
|
echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
|
||||||
fi
|
fi
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
i?86:*:5:7*)
|
i*86:*:5:[78]*)
|
||||||
# Fixed at (any) Pentium or better
|
case `/bin/uname -X | grep "^Machine"` in
|
||||||
UNAME_MACHINE=i586
|
*486*) UNAME_MACHINE=i486 ;;
|
||||||
if [ ${UNAME_SYSTEM} = "UnixWare" ] ; then
|
*Pentium) UNAME_MACHINE=i586 ;;
|
||||||
echo ${UNAME_MACHINE}-sco-sysv${UNAME_RELEASE}uw${UNAME_VERSION}
|
*Pent*|*Celeron) UNAME_MACHINE=i686 ;;
|
||||||
else
|
esac
|
||||||
echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE}
|
echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
|
||||||
fi
|
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
i?86:*:3.2:*)
|
i*86:*:3.2:*)
|
||||||
if test -f /usr/options/cb.name; then
|
if test -f /usr/options/cb.name; then
|
||||||
UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
|
UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
|
||||||
echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
|
echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
|
||||||
@@ -900,7 +928,7 @@ EOF
|
|||||||
echo ${UNAME_MACHINE}-pc-sysv32
|
echo ${UNAME_MACHINE}-pc-sysv32
|
||||||
fi
|
fi
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
i?86:*DOS:*:*)
|
i*86:*DOS:*:*)
|
||||||
echo ${UNAME_MACHINE}-pc-msdosdjgpp
|
echo ${UNAME_MACHINE}-pc-msdosdjgpp
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
pc:*:*:*)
|
pc:*:*:*)
|
||||||
@@ -928,7 +956,7 @@ EOF
|
|||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
M68*:*:R3V[567]*:*)
|
M68*:*:R3V[567]*:*)
|
||||||
test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
|
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)
|
3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0)
|
||||||
OS_REL=''
|
OS_REL=''
|
||||||
test -r /etc/.relid \
|
test -r /etc/.relid \
|
||||||
&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
|
&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
|
||||||
@@ -939,21 +967,24 @@ EOF
|
|||||||
3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
|
3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
|
||||||
/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
|
/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
|
||||||
&& echo i486-ncr-sysv4 && exit 0 ;;
|
&& echo i486-ncr-sysv4 && exit 0 ;;
|
||||||
m68*:LynxOS:2.*:*)
|
m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
|
||||||
echo m68k-unknown-lynxos${UNAME_RELEASE}
|
echo m68k-unknown-lynxos${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
mc68030:UNIX_System_V:4.*:*)
|
mc68030:UNIX_System_V:4.*:*)
|
||||||
echo m68k-atari-sysv4
|
echo m68k-atari-sysv4
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
i?86:LynxOS:2.*:* | i?86:LynxOS:3.[01]*:*)
|
i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
|
||||||
echo i386-unknown-lynxos${UNAME_RELEASE}
|
echo i386-unknown-lynxos${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
TSUNAMI:LynxOS:2.*:*)
|
TSUNAMI:LynxOS:2.*:*)
|
||||||
echo sparc-unknown-lynxos${UNAME_RELEASE}
|
echo sparc-unknown-lynxos${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
rs6000:LynxOS:2.*:* | PowerPC:LynxOS:2.*:*)
|
rs6000:LynxOS:2.*:*)
|
||||||
echo rs6000-unknown-lynxos${UNAME_RELEASE}
|
echo rs6000-unknown-lynxos${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
|
PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
|
||||||
|
echo powerpc-unknown-lynxos${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
SM[BE]S:UNIX_SV:*:*)
|
SM[BE]S:UNIX_SV:*:*)
|
||||||
echo mips-dde-sysv${UNAME_RELEASE}
|
echo mips-dde-sysv${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
@@ -971,7 +1002,7 @@ EOF
|
|||||||
echo ns32k-sni-sysv
|
echo ns32k-sni-sysv
|
||||||
fi
|
fi
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
PENTIUM:CPunix:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
|
PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
|
||||||
# says <Richard.M.Bartel@ccMail.Census.GOV>
|
# says <Richard.M.Bartel@ccMail.Census.GOV>
|
||||||
echo i586-unisys-sysv4
|
echo i586-unisys-sysv4
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
@@ -984,10 +1015,14 @@ EOF
|
|||||||
# From seanf@swdc.stratus.com.
|
# From seanf@swdc.stratus.com.
|
||||||
echo i860-stratus-sysv4
|
echo i860-stratus-sysv4
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
|
*:VOS:*:*)
|
||||||
|
# From Paul.Green@stratus.com.
|
||||||
|
echo hppa1.1-stratus-vos
|
||||||
|
exit 0 ;;
|
||||||
mc68*:A/UX:*:*)
|
mc68*:A/UX:*:*)
|
||||||
echo m68k-apple-aux${UNAME_RELEASE}
|
echo m68k-apple-aux${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
news*:NEWS-OS:*:6*)
|
news*:NEWS-OS:6*:*)
|
||||||
echo mips-sony-newsos6
|
echo mips-sony-newsos6
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
|
R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
|
||||||
@@ -1030,20 +1065,64 @@ EOF
|
|||||||
*:QNX:*:4*)
|
*:QNX:*:4*)
|
||||||
echo i386-pc-qnx
|
echo i386-pc-qnx
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
NSR-W:NONSTOP_KERNEL:*:*)
|
NSR-[KW]:NONSTOP_KERNEL:*:*)
|
||||||
echo nsr-tandem-nsk${UNAME_RELEASE}
|
echo nsr-tandem-nsk${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
|
*:NonStop-UX:*:*)
|
||||||
|
echo mips-compaq-nonstopux
|
||||||
|
exit 0 ;;
|
||||||
BS2000:POSIX*:*:*)
|
BS2000:POSIX*:*:*)
|
||||||
echo bs2000-siemens-sysv
|
echo bs2000-siemens-sysv
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
DS/*:UNIX_System_V:*:*)
|
DS/*:UNIX_System_V:*:*)
|
||||||
echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
|
echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
|
*:Plan9:*:*)
|
||||||
|
# "uname -m" is not consistent, so use $cputype instead. 386
|
||||||
|
# is converted to i386 for consistency with other x86
|
||||||
|
# operating systems.
|
||||||
|
if test "$cputype" = "386"; then
|
||||||
|
UNAME_MACHINE=i386
|
||||||
|
else
|
||||||
|
UNAME_MACHINE="$cputype"
|
||||||
|
fi
|
||||||
|
echo ${UNAME_MACHINE}-unknown-plan9
|
||||||
|
exit 0 ;;
|
||||||
|
i*86:OS/2:*:*)
|
||||||
|
# If we were able to find `uname', then EMX Unix compatibility
|
||||||
|
# is probably installed.
|
||||||
|
echo ${UNAME_MACHINE}-pc-os2-emx
|
||||||
|
exit 0 ;;
|
||||||
|
*:TOPS-10:*:*)
|
||||||
|
echo pdp10-unknown-tops10
|
||||||
|
exit 0 ;;
|
||||||
|
*:TENEX:*:*)
|
||||||
|
echo pdp10-unknown-tenex
|
||||||
|
exit 0 ;;
|
||||||
|
KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
|
||||||
|
echo pdp10-dec-tops20
|
||||||
|
exit 0 ;;
|
||||||
|
XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
|
||||||
|
echo pdp10-xkl-tops20
|
||||||
|
exit 0 ;;
|
||||||
|
*:TOPS-20:*:*)
|
||||||
|
echo pdp10-unknown-tops20
|
||||||
|
exit 0 ;;
|
||||||
|
*:ITS:*:*)
|
||||||
|
echo pdp10-unknown-its
|
||||||
|
exit 0 ;;
|
||||||
|
i*86:XTS-300:*:STOP)
|
||||||
|
echo ${UNAME_MACHINE}-unknown-stop
|
||||||
|
exit 0 ;;
|
||||||
|
i*86:atheos:*:*)
|
||||||
|
echo ${UNAME_MACHINE}-unknown-atheos
|
||||||
|
exit 0 ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
#echo '(No uname command or uname output not recognized.)' 1>&2
|
#echo '(No uname command or uname output not recognized.)' 1>&2
|
||||||
#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
|
#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
|
||||||
|
|
||||||
|
eval $set_cc_for_build
|
||||||
cat >$dummy.c <<EOF
|
cat >$dummy.c <<EOF
|
||||||
#ifdef _SEQUENT_
|
#ifdef _SEQUENT_
|
||||||
# include <sys/types.h>
|
# include <sys/types.h>
|
||||||
@@ -1130,11 +1209,24 @@ main ()
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined (vax)
|
#if defined (vax)
|
||||||
#if !defined (ultrix)
|
# if !defined (ultrix)
|
||||||
|
# include <sys/param.h>
|
||||||
|
# if defined (BSD)
|
||||||
|
# if BSD == 43
|
||||||
|
printf ("vax-dec-bsd4.3\n"); exit (0);
|
||||||
|
# else
|
||||||
|
# if BSD == 199006
|
||||||
|
printf ("vax-dec-bsd4.3reno\n"); exit (0);
|
||||||
|
# else
|
||||||
printf ("vax-dec-bsd\n"); exit (0);
|
printf ("vax-dec-bsd\n"); exit (0);
|
||||||
#else
|
# endif
|
||||||
|
# endif
|
||||||
|
# else
|
||||||
|
printf ("vax-dec-bsd\n"); exit (0);
|
||||||
|
# endif
|
||||||
|
# else
|
||||||
printf ("vax-dec-ultrix\n"); exit (0);
|
printf ("vax-dec-ultrix\n"); exit (0);
|
||||||
#endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined (alliant) && defined (i860)
|
#if defined (alliant) && defined (i860)
|
||||||
@@ -1145,7 +1237,7 @@ main ()
|
|||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm $dummy.c $dummy && exit 0
|
$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm -f $dummy.c $dummy && exit 0
|
||||||
rm -f $dummy.c $dummy
|
rm -f $dummy.c $dummy
|
||||||
|
|
||||||
# Apollos put the system type in the environment.
|
# Apollos put the system type in the environment.
|
||||||
@@ -1178,6 +1270,48 @@ then
|
|||||||
esac
|
esac
|
||||||
fi
|
fi
|
||||||
|
|
||||||
#echo '(Unable to guess system type)' 1>&2
|
cat >&2 <<EOF
|
||||||
|
$0: unable to guess system type
|
||||||
|
|
||||||
|
This script, last modified $timestamp, has failed to recognize
|
||||||
|
the operating system you are using. It is advised that you
|
||||||
|
download the most up to date version of the config scripts from
|
||||||
|
|
||||||
|
ftp://ftp.gnu.org/pub/gnu/config/
|
||||||
|
|
||||||
|
If the version you run ($0) is already up to date, please
|
||||||
|
send the following data and any information you think might be
|
||||||
|
pertinent to <config-patches@gnu.org> in order to provide the needed
|
||||||
|
information to handle your system.
|
||||||
|
|
||||||
|
config.guess timestamp = $timestamp
|
||||||
|
|
||||||
|
uname -m = `(uname -m) 2>/dev/null || echo unknown`
|
||||||
|
uname -r = `(uname -r) 2>/dev/null || echo unknown`
|
||||||
|
uname -s = `(uname -s) 2>/dev/null || echo unknown`
|
||||||
|
uname -v = `(uname -v) 2>/dev/null || echo unknown`
|
||||||
|
|
||||||
|
/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
|
||||||
|
/bin/uname -X = `(/bin/uname -X) 2>/dev/null`
|
||||||
|
|
||||||
|
hostinfo = `(hostinfo) 2>/dev/null`
|
||||||
|
/bin/universe = `(/bin/universe) 2>/dev/null`
|
||||||
|
/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null`
|
||||||
|
/bin/arch = `(/bin/arch) 2>/dev/null`
|
||||||
|
/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null`
|
||||||
|
/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
|
||||||
|
|
||||||
|
UNAME_MACHINE = ${UNAME_MACHINE}
|
||||||
|
UNAME_RELEASE = ${UNAME_RELEASE}
|
||||||
|
UNAME_SYSTEM = ${UNAME_SYSTEM}
|
||||||
|
UNAME_VERSION = ${UNAME_VERSION}
|
||||||
|
EOF
|
||||||
|
|
||||||
exit 1
|
exit 1
|
||||||
|
|
||||||
|
# Local variables:
|
||||||
|
# eval: (add-hook 'write-file-hooks 'time-stamp)
|
||||||
|
# time-stamp-start: "timestamp='"
|
||||||
|
# time-stamp-format: "%:y-%02m-%02d"
|
||||||
|
# time-stamp-end: "'"
|
||||||
|
# End:
|
||||||
|
|||||||
325
config.sub
vendored
325
config.sub
vendored
@@ -1,8 +1,10 @@
|
|||||||
#! /bin/sh
|
#! /bin/sh
|
||||||
# Configuration validation subroutine script, version 1.1.
|
# Configuration validation subroutine script.
|
||||||
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000
|
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
|
||||||
# Free Software Foundation, Inc.
|
# Free Software Foundation, Inc.
|
||||||
#
|
|
||||||
|
timestamp='2001-09-07'
|
||||||
|
|
||||||
# This file is (in principle) common to ALL GNU software.
|
# This file is (in principle) common to ALL GNU software.
|
||||||
# The presence of a machine in this file suggests that SOME 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.
|
# can handle that machine. It does not imply ALL GNU software can.
|
||||||
@@ -27,7 +29,6 @@
|
|||||||
# configuration script generated by Autoconf, you may include it under
|
# configuration script generated by Autoconf, you may include it under
|
||||||
# the same distribution terms that you use for the rest of that program.
|
# the same distribution terms that you use for the rest of that program.
|
||||||
|
|
||||||
# Written by Per Bothner <bothner@cygnus.com>.
|
|
||||||
# Please send patches to <config-patches@gnu.org>.
|
# Please send patches to <config-patches@gnu.org>.
|
||||||
#
|
#
|
||||||
# Configuration subroutine to validate and canonicalize a configuration type.
|
# Configuration subroutine to validate and canonicalize a configuration type.
|
||||||
@@ -50,30 +51,73 @@
|
|||||||
# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
|
# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
|
||||||
# It is wrong to echo any other type of specification.
|
# It is wrong to echo any other type of specification.
|
||||||
|
|
||||||
if [ x$1 = x ]
|
me=`echo "$0" | sed -e 's,.*/,,'`
|
||||||
then
|
|
||||||
echo Configuration name missing. 1>&2
|
usage="\
|
||||||
echo "Usage: $0 CPU-MFR-OPSYS" 1>&2
|
Usage: $0 [OPTION] CPU-MFR-OPSYS
|
||||||
echo "or $0 ALIAS" 1>&2
|
$0 [OPTION] ALIAS
|
||||||
echo where ALIAS is a recognized configuration type. 1>&2
|
|
||||||
exit 1
|
Canonicalize a configuration name.
|
||||||
fi
|
|
||||||
|
Operation modes:
|
||||||
|
-h, --help print this help, then exit
|
||||||
|
-t, --time-stamp print date of last modification, then exit
|
||||||
|
-v, --version print version number, then exit
|
||||||
|
|
||||||
|
Report bugs and patches to <config-patches@gnu.org>."
|
||||||
|
|
||||||
|
version="\
|
||||||
|
GNU config.sub ($timestamp)
|
||||||
|
|
||||||
|
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
|
||||||
|
Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This is free software; see the source for copying conditions. There is NO
|
||||||
|
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
|
||||||
|
|
||||||
|
help="
|
||||||
|
Try \`$me --help' for more information."
|
||||||
|
|
||||||
|
# Parse command line
|
||||||
|
while test $# -gt 0 ; do
|
||||||
|
case $1 in
|
||||||
|
--time-stamp | --time* | -t )
|
||||||
|
echo "$timestamp" ; exit 0 ;;
|
||||||
|
--version | -v )
|
||||||
|
echo "$version" ; exit 0 ;;
|
||||||
|
--help | --h* | -h )
|
||||||
|
echo "$usage"; exit 0 ;;
|
||||||
|
-- ) # Stop option processing
|
||||||
|
shift; break ;;
|
||||||
|
- ) # Use stdin as input.
|
||||||
|
break ;;
|
||||||
|
-* )
|
||||||
|
echo "$me: invalid option $1$help"
|
||||||
|
exit 1 ;;
|
||||||
|
|
||||||
# First pass through any local machine types.
|
|
||||||
case $1 in
|
|
||||||
*local*)
|
*local*)
|
||||||
|
# First pass through any local machine types.
|
||||||
echo $1
|
echo $1
|
||||||
exit 0
|
exit 0;;
|
||||||
;;
|
|
||||||
*)
|
* )
|
||||||
;;
|
break ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
case $# in
|
||||||
|
0) echo "$me: missing argument$help" >&2
|
||||||
|
exit 1;;
|
||||||
|
1) ;;
|
||||||
|
*) echo "$me: too many arguments$help" >&2
|
||||||
|
exit 1;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
|
# 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.
|
# Here we must recognize all the valid KERNEL-OS combinations.
|
||||||
maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
|
maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
|
||||||
case $maybe_os in
|
case $maybe_os in
|
||||||
nto-qnx* | linux-gnu*)
|
nto-qnx* | linux-gnu* | storm-chaos* | os2-emx* | windows32-*)
|
||||||
os=-$maybe_os
|
os=-$maybe_os
|
||||||
basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
|
basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
|
||||||
;;
|
;;
|
||||||
@@ -99,7 +143,7 @@ case $os in
|
|||||||
-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
|
-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
|
||||||
-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
|
-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
|
||||||
-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
|
-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
|
||||||
-apple)
|
-apple | -axis)
|
||||||
os=
|
os=
|
||||||
basic_machine=$1
|
basic_machine=$1
|
||||||
;;
|
;;
|
||||||
@@ -113,6 +157,14 @@ case $os in
|
|||||||
os=-vxworks
|
os=-vxworks
|
||||||
basic_machine=$1
|
basic_machine=$1
|
||||||
;;
|
;;
|
||||||
|
-chorusos*)
|
||||||
|
os=-chorusos
|
||||||
|
basic_machine=$1
|
||||||
|
;;
|
||||||
|
-chorusrdb)
|
||||||
|
os=-chorusrdb
|
||||||
|
basic_machine=$1
|
||||||
|
;;
|
||||||
-hiux*)
|
-hiux*)
|
||||||
os=-hiuxwe2
|
os=-hiuxwe2
|
||||||
;;
|
;;
|
||||||
@@ -171,30 +223,50 @@ esac
|
|||||||
case $basic_machine in
|
case $basic_machine in
|
||||||
# Recognize the basic CPU types without company name.
|
# Recognize the basic CPU types without company name.
|
||||||
# Some are omitted here because they have special meanings below.
|
# Some are omitted here because they have special meanings below.
|
||||||
tahoe | i860 | ia64 | m32r | m68k | m68000 | m88k | ns32k | arc | arm \
|
1750a | 580 \
|
||||||
| arme[lb] | pyramid | mn10200 | mn10300 | tron | a29k \
|
| a29k \
|
||||||
| 580 | i960 | h8300 \
|
| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
|
||||||
| x86 | ppcbe | mipsbe | mipsle | shbe | shle | armbe | armle \
|
| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
|
||||||
| hppa | hppa1.0 | hppa1.1 | hppa2.0 | hppa2.0w | hppa2.0n \
|
| c4x | clipper \
|
||||||
| hppa64 \
|
| d10v | d30v | dsp16xx \
|
||||||
| alpha | alphaev[4-8] | alphaev56 | alphapca5[67] \
|
| fr30 \
|
||||||
| alphaev6[78] \
|
| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
|
||||||
| we32k | ns16k | clipper | i370 | sh | powerpc | powerpcle \
|
| i370 | i860 | i960 | ia64 \
|
||||||
| 1750a | dsp16xx | pdp11 | mips16 | mips64 | mipsel | mips64el \
|
| m32r | m68000 | m68k | m88k | mcore \
|
||||||
| mips64orion | mips64orionel | mipstx39 | mipstx39el \
|
| mips16 | mips64 | mips64el | mips64orion | mips64orionel \
|
||||||
| mips64vr4300 | mips64vr4300el | mips64vr4100 | mips64vr4100el \
|
| mips64vr4100 | mips64vr4100el | mips64vr4300 \
|
||||||
| mips64vr5000 | miprs64vr5000el | mcore \
|
| mips64vr4300el | mips64vr5000 | mips64vr5000el \
|
||||||
| sparc | sparclet | sparclite | sparc64 | sparcv9 | v850 | c4x \
|
| mipsbe | mipseb | mipsel | mipsle | mipstx39 | mipstx39el \
|
||||||
| thumb | d10v | fr30 | avr)
|
| mipsisa32 \
|
||||||
|
| mn10200 | mn10300 \
|
||||||
|
| ns16k | ns32k \
|
||||||
|
| openrisc \
|
||||||
|
| pdp10 | pdp11 | pj | pjl \
|
||||||
|
| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
|
||||||
|
| pyramid \
|
||||||
|
| s390 | s390x \
|
||||||
|
| sh | sh[34] | sh[34]eb | shbe | shle \
|
||||||
|
| sparc | sparc64 | sparclet | sparclite | sparcv9 | sparcv9b \
|
||||||
|
| stormy16 | strongarm \
|
||||||
|
| tahoe | thumb | tic80 | tron \
|
||||||
|
| v850 \
|
||||||
|
| we32k \
|
||||||
|
| x86 | xscale \
|
||||||
|
| z8k)
|
||||||
basic_machine=$basic_machine-unknown
|
basic_machine=$basic_machine-unknown
|
||||||
;;
|
;;
|
||||||
m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | z8k | v70 | h8500 | w65 | pj | pjl)
|
m6811 | m68hc11 | m6812 | m68hc12)
|
||||||
|
# Motorola 68HC11/12.
|
||||||
|
basic_machine=$basic_machine-unknown
|
||||||
|
os=-none
|
||||||
|
;;
|
||||||
|
m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
|
||||||
;;
|
;;
|
||||||
|
|
||||||
# We use `pc' rather than `unknown'
|
# We use `pc' rather than `unknown'
|
||||||
# because (1) that's what they normally are, and
|
# because (1) that's what they normally are, and
|
||||||
# (2) the word "unknown" tends to confuse beginning users.
|
# (2) the word "unknown" tends to confuse beginning users.
|
||||||
i[34567]86)
|
i*86 | x86_64)
|
||||||
basic_machine=$basic_machine-pc
|
basic_machine=$basic_machine-pc
|
||||||
;;
|
;;
|
||||||
# Object if more than one company name word.
|
# Object if more than one company name word.
|
||||||
@@ -203,28 +275,43 @@ case $basic_machine in
|
|||||||
exit 1
|
exit 1
|
||||||
;;
|
;;
|
||||||
# Recognize the basic CPU types with company name.
|
# Recognize the basic CPU types with company name.
|
||||||
# FIXME: clean up the formatting here.
|
580-* \
|
||||||
vax-* | tahoe-* | i[34567]86-* | i860-* | ia64-* | m32r-* | m68k-* | m68000-* \
|
| a29k-* \
|
||||||
| m88k-* | sparc-* | ns32k-* | fx80-* | arc-* | arm-* | c[123]* \
|
| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
|
||||||
| mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \
|
| alphapca5[67]-* | arc-* \
|
||||||
| power-* | none-* | 580-* | cray2-* | h8300-* | h8500-* | i960-* \
|
| arm-* | armbe-* | armle-* | armv*-* \
|
||||||
| xmp-* | ymp-* \
|
| bs2000-* \
|
||||||
| x86-* | ppcbe-* | mipsbe-* | mipsle-* | shbe-* | shle-* | armbe-* | armle-* \
|
| c[123]* | c30-* | [cjt]90-* | c54x-* \
|
||||||
| hppa-* | hppa1.0-* | hppa1.1-* | hppa2.0-* | hppa2.0w-* \
|
| clipper-* | cray2-* | cydra-* \
|
||||||
| hppa2.0n-* | hppa64-* \
|
| d10v-* | d30v-* \
|
||||||
| alpha-* | alphaev[4-8]-* | alphaev56-* | alphapca5[67]-* \
|
| elxsi-* \
|
||||||
| alphaev6[78]-* \
|
| f30[01]-* | f700-* | fr30-* | fx80-* \
|
||||||
| we32k-* | cydra-* | ns16k-* | pn-* | np1-* | xps100-* \
|
| h8300-* | h8500-* \
|
||||||
| clipper-* | orion-* \
|
| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
|
||||||
| sparclite-* | pdp11-* | sh-* | powerpc-* | powerpcle-* \
|
| i*86-* | i860-* | i960-* | ia64-* \
|
||||||
| sparc64-* | sparcv9-* | sparc86x-* | mips16-* | mips64-* | mipsel-* \
|
| m32r-* \
|
||||||
| mips64el-* | mips64orion-* | mips64orionel-* \
|
| m68000-* | m680[01234]0-* | m68360-* | m683?2-* | m68k-* \
|
||||||
| mips64vr4100-* | mips64vr4100el-* | mips64vr4300-* | mips64vr4300el-* \
|
| m88110-* | m88k-* | mcore-* \
|
||||||
| mipstx39-* | mipstx39el-* | mcore-* \
|
| mips-* | mips16-* | mips64-* | mips64el-* | mips64orion-* \
|
||||||
| f301-* | armv*-* | s390-* | sv1-* | t3e-* \
|
| mips64orionel-* | mips64vr4100-* | mips64vr4100el-* \
|
||||||
| m88110-* | m680[01234]0-* | m683?2-* | m68360-* | z8k-* | d10v-* \
|
| mips64vr4300-* | mips64vr4300el-* | mipsbe-* | mipseb-* \
|
||||||
| thumb-* | v850-* | d30v-* | tic30-* | c30-* | fr30-* \
|
| mipsle-* | mipsel-* | mipstx39-* | mipstx39el-* \
|
||||||
| bs2000-*)
|
| none-* | np1-* | ns16k-* | ns32k-* \
|
||||||
|
| orion-* \
|
||||||
|
| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
|
||||||
|
| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
|
||||||
|
| pyramid-* \
|
||||||
|
| romp-* | rs6000-* \
|
||||||
|
| s390-* | s390x-* \
|
||||||
|
| sh-* | sh[34]-* | sh[34]eb-* | shbe-* | shle-* \
|
||||||
|
| sparc-* | sparc64-* | sparc86x-* | sparclite-* \
|
||||||
|
| sparcv9-* | sparcv9b-* | stormy16-* | strongarm-* | sv1-* \
|
||||||
|
| t3e-* | tahoe-* | thumb-* | tic30-* | tic54x-* | tic80-* | tron-* \
|
||||||
|
| v850-* | vax-* \
|
||||||
|
| we32k-* \
|
||||||
|
| x86-* | x86_64-* | xmp-* | xps100-* | xscale-* \
|
||||||
|
| ymp-* \
|
||||||
|
| z8k-*)
|
||||||
;;
|
;;
|
||||||
# Recognize the various machine names and aliases which stand
|
# Recognize the various machine names and aliases which stand
|
||||||
# for a CPU type and a company and sometimes even an OS.
|
# for a CPU type and a company and sometimes even an OS.
|
||||||
@@ -261,14 +348,14 @@ case $basic_machine in
|
|||||||
os=-sysv
|
os=-sysv
|
||||||
;;
|
;;
|
||||||
amiga | amiga-*)
|
amiga | amiga-*)
|
||||||
basic_machine=m68k-cbm
|
basic_machine=m68k-unknown
|
||||||
;;
|
;;
|
||||||
amigaos | amigados)
|
amigaos | amigados)
|
||||||
basic_machine=m68k-cbm
|
basic_machine=m68k-unknown
|
||||||
os=-amigaos
|
os=-amigaos
|
||||||
;;
|
;;
|
||||||
amigaunix | amix)
|
amigaunix | amix)
|
||||||
basic_machine=m68k-cbm
|
basic_machine=m68k-unknown
|
||||||
os=-sysv4
|
os=-sysv4
|
||||||
;;
|
;;
|
||||||
apollo68)
|
apollo68)
|
||||||
@@ -315,13 +402,16 @@ case $basic_machine in
|
|||||||
basic_machine=cray2-cray
|
basic_machine=cray2-cray
|
||||||
os=-unicos
|
os=-unicos
|
||||||
;;
|
;;
|
||||||
[ctj]90-cray)
|
[cjt]90)
|
||||||
basic_machine=c90-cray
|
basic_machine=${basic_machine}-cray
|
||||||
os=-unicos
|
os=-unicos
|
||||||
;;
|
;;
|
||||||
crds | unos)
|
crds | unos)
|
||||||
basic_machine=m68k-crds
|
basic_machine=m68k-crds
|
||||||
;;
|
;;
|
||||||
|
cris | cris-* | etrax*)
|
||||||
|
basic_machine=cris-axis
|
||||||
|
;;
|
||||||
da30 | da30-*)
|
da30 | da30-*)
|
||||||
basic_machine=m68k-da30
|
basic_machine=m68k-da30
|
||||||
;;
|
;;
|
||||||
@@ -369,6 +459,10 @@ case $basic_machine in
|
|||||||
basic_machine=tron-gmicro
|
basic_machine=tron-gmicro
|
||||||
os=-sysv
|
os=-sysv
|
||||||
;;
|
;;
|
||||||
|
go32)
|
||||||
|
basic_machine=i386-pc
|
||||||
|
os=-go32
|
||||||
|
;;
|
||||||
h3050r* | hiux*)
|
h3050r* | hiux*)
|
||||||
basic_machine=hppa1.1-hitachi
|
basic_machine=hppa1.1-hitachi
|
||||||
os=-hiuxwe2
|
os=-hiuxwe2
|
||||||
@@ -444,19 +538,19 @@ case $basic_machine in
|
|||||||
basic_machine=i370-ibm
|
basic_machine=i370-ibm
|
||||||
;;
|
;;
|
||||||
# I'm not sure what "Sysv32" means. Should this be sysv3.2?
|
# I'm not sure what "Sysv32" means. Should this be sysv3.2?
|
||||||
i[34567]86v32)
|
i*86v32)
|
||||||
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
|
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
|
||||||
os=-sysv32
|
os=-sysv32
|
||||||
;;
|
;;
|
||||||
i[34567]86v4*)
|
i*86v4*)
|
||||||
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
|
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
|
||||||
os=-sysv4
|
os=-sysv4
|
||||||
;;
|
;;
|
||||||
i[34567]86v)
|
i*86v)
|
||||||
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
|
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
|
||||||
os=-sysv
|
os=-sysv
|
||||||
;;
|
;;
|
||||||
i[34567]86sol2)
|
i*86sol2)
|
||||||
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
|
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
|
||||||
os=-solaris2
|
os=-solaris2
|
||||||
;;
|
;;
|
||||||
@@ -468,14 +562,6 @@ case $basic_machine in
|
|||||||
basic_machine=i386-unknown
|
basic_machine=i386-unknown
|
||||||
os=-vsta
|
os=-vsta
|
||||||
;;
|
;;
|
||||||
i386-go32 | go32)
|
|
||||||
basic_machine=i386-unknown
|
|
||||||
os=-go32
|
|
||||||
;;
|
|
||||||
i386-mingw32 | mingw32)
|
|
||||||
basic_machine=i386-unknown
|
|
||||||
os=-mingw32
|
|
||||||
;;
|
|
||||||
iris | iris4d)
|
iris | iris4d)
|
||||||
basic_machine=mips-sgi
|
basic_machine=mips-sgi
|
||||||
case $os in
|
case $os in
|
||||||
@@ -501,6 +587,10 @@ case $basic_machine in
|
|||||||
basic_machine=ns32k-utek
|
basic_machine=ns32k-utek
|
||||||
os=-sysv
|
os=-sysv
|
||||||
;;
|
;;
|
||||||
|
mingw32)
|
||||||
|
basic_machine=i386-pc
|
||||||
|
os=-mingw32
|
||||||
|
;;
|
||||||
miniframe)
|
miniframe)
|
||||||
basic_machine=m68000-convergent
|
basic_machine=m68000-convergent
|
||||||
;;
|
;;
|
||||||
@@ -531,7 +621,7 @@ case $basic_machine in
|
|||||||
os=-coff
|
os=-coff
|
||||||
;;
|
;;
|
||||||
msdos)
|
msdos)
|
||||||
basic_machine=i386-unknown
|
basic_machine=i386-pc
|
||||||
os=-msdos
|
os=-msdos
|
||||||
;;
|
;;
|
||||||
mvs)
|
mvs)
|
||||||
@@ -595,6 +685,10 @@ case $basic_machine in
|
|||||||
basic_machine=i960-intel
|
basic_machine=i960-intel
|
||||||
os=-mon960
|
os=-mon960
|
||||||
;;
|
;;
|
||||||
|
nonstopux)
|
||||||
|
basic_machine=mips-compaq
|
||||||
|
os=-nonstopux
|
||||||
|
;;
|
||||||
np1)
|
np1)
|
||||||
basic_machine=np1-gould
|
basic_machine=np1-gould
|
||||||
;;
|
;;
|
||||||
@@ -630,28 +724,28 @@ case $basic_machine in
|
|||||||
pc532 | pc532-*)
|
pc532 | pc532-*)
|
||||||
basic_machine=ns32k-pc532
|
basic_machine=ns32k-pc532
|
||||||
;;
|
;;
|
||||||
pentium | p5 | k5 | k6 | nexen)
|
pentium | p5 | k5 | k6 | nexgen)
|
||||||
basic_machine=i586-pc
|
basic_machine=i586-pc
|
||||||
;;
|
;;
|
||||||
pentiumpro | p6 | 6x86)
|
pentiumpro | p6 | 6x86 | athlon)
|
||||||
basic_machine=i686-pc
|
basic_machine=i686-pc
|
||||||
;;
|
;;
|
||||||
pentiumii | pentium2)
|
pentiumii | pentium2)
|
||||||
basic_machine=i786-pc
|
basic_machine=i686-pc
|
||||||
;;
|
;;
|
||||||
pentium-* | p5-* | k5-* | k6-* | nexen-*)
|
pentium-* | p5-* | k5-* | k6-* | nexgen-*)
|
||||||
basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
|
basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||||
;;
|
;;
|
||||||
pentiumpro-* | p6-* | 6x86-*)
|
pentiumpro-* | p6-* | 6x86-* | athlon-*)
|
||||||
basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
|
basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||||
;;
|
;;
|
||||||
pentiumii-* | pentium2-*)
|
pentiumii-* | pentium2-*)
|
||||||
basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
|
basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||||
;;
|
;;
|
||||||
pn)
|
pn)
|
||||||
basic_machine=pn-gould
|
basic_machine=pn-gould
|
||||||
;;
|
;;
|
||||||
power) basic_machine=rs6000-ibm
|
power) basic_machine=power-ibm
|
||||||
;;
|
;;
|
||||||
ppc) basic_machine=powerpc-unknown
|
ppc) basic_machine=powerpc-unknown
|
||||||
;;
|
;;
|
||||||
@@ -663,9 +757,23 @@ case $basic_machine in
|
|||||||
ppcle-* | powerpclittle-*)
|
ppcle-* | powerpclittle-*)
|
||||||
basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
|
basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||||
;;
|
;;
|
||||||
|
ppc64) basic_machine=powerpc64-unknown
|
||||||
|
;;
|
||||||
|
ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||||
|
;;
|
||||||
|
ppc64le | powerpc64little | ppc64-le | powerpc64-little)
|
||||||
|
basic_machine=powerpc64le-unknown
|
||||||
|
;;
|
||||||
|
ppc64le-* | powerpc64little-*)
|
||||||
|
basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||||
|
;;
|
||||||
ps2)
|
ps2)
|
||||||
basic_machine=i386-ibm
|
basic_machine=i386-ibm
|
||||||
;;
|
;;
|
||||||
|
pw32)
|
||||||
|
basic_machine=i586-unknown
|
||||||
|
os=-pw32
|
||||||
|
;;
|
||||||
rom68k)
|
rom68k)
|
||||||
basic_machine=m68k-rom68k
|
basic_machine=m68k-rom68k
|
||||||
os=-coff
|
os=-coff
|
||||||
@@ -757,6 +865,10 @@ case $basic_machine in
|
|||||||
basic_machine=t3e-cray
|
basic_machine=t3e-cray
|
||||||
os=-unicos
|
os=-unicos
|
||||||
;;
|
;;
|
||||||
|
tic54x | c54x*)
|
||||||
|
basic_machine=tic54x-unknown
|
||||||
|
os=-coff
|
||||||
|
;;
|
||||||
tx39)
|
tx39)
|
||||||
basic_machine=mipstx39-unknown
|
basic_machine=mipstx39-unknown
|
||||||
;;
|
;;
|
||||||
@@ -809,6 +921,10 @@ case $basic_machine in
|
|||||||
basic_machine=hppa1.1-winbond
|
basic_machine=hppa1.1-winbond
|
||||||
os=-proelf
|
os=-proelf
|
||||||
;;
|
;;
|
||||||
|
windows32)
|
||||||
|
basic_machine=i386-pc
|
||||||
|
os=-windows32-msvcrt
|
||||||
|
;;
|
||||||
xmp)
|
xmp)
|
||||||
basic_machine=xmp-cray
|
basic_machine=xmp-cray
|
||||||
os=-unicos
|
os=-unicos
|
||||||
@@ -852,13 +968,20 @@ case $basic_machine in
|
|||||||
vax)
|
vax)
|
||||||
basic_machine=vax-dec
|
basic_machine=vax-dec
|
||||||
;;
|
;;
|
||||||
|
pdp10)
|
||||||
|
# there are many clones, so DEC is not a safe bet
|
||||||
|
basic_machine=pdp10-unknown
|
||||||
|
;;
|
||||||
pdp11)
|
pdp11)
|
||||||
basic_machine=pdp11-dec
|
basic_machine=pdp11-dec
|
||||||
;;
|
;;
|
||||||
we32k)
|
we32k)
|
||||||
basic_machine=we32k-att
|
basic_machine=we32k-att
|
||||||
;;
|
;;
|
||||||
sparc | sparcv9)
|
sh3 | sh4 | sh3eb | sh4eb)
|
||||||
|
basic_machine=sh-unknown
|
||||||
|
;;
|
||||||
|
sparc | sparcv9 | sparcv9b)
|
||||||
basic_machine=sparc-sun
|
basic_machine=sparc-sun
|
||||||
;;
|
;;
|
||||||
cydra)
|
cydra)
|
||||||
@@ -880,6 +1003,9 @@ case $basic_machine in
|
|||||||
basic_machine=c4x-none
|
basic_machine=c4x-none
|
||||||
os=-coff
|
os=-coff
|
||||||
;;
|
;;
|
||||||
|
*-unknown)
|
||||||
|
# Make sure to match an already-canonicalized machine name.
|
||||||
|
;;
|
||||||
*)
|
*)
|
||||||
echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
|
echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
|
||||||
exit 1
|
exit 1
|
||||||
@@ -936,15 +1062,18 @@ case $os in
|
|||||||
| -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
|
| -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
|
||||||
| -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
|
| -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
|
||||||
| -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
|
| -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
|
||||||
|
| -chorusos* | -chorusrdb* \
|
||||||
| -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
|
| -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
|
||||||
| -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
|
| -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
|
||||||
| -interix* | -uwin* | -rhapsody* | -darwin* | -opened* \
|
| -interix* | -uwin* | -rhapsody* | -darwin* | -opened* \
|
||||||
| -openstep* | -oskit*)
|
| -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
|
||||||
|
| -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
|
||||||
|
| -os2* | -vos*)
|
||||||
# Remember, each alternative MUST END IN *, to match a version number.
|
# Remember, each alternative MUST END IN *, to match a version number.
|
||||||
;;
|
;;
|
||||||
-qnx*)
|
-qnx*)
|
||||||
case $basic_machine in
|
case $basic_machine in
|
||||||
x86-* | i[34567]86-*)
|
x86-* | i*86-*)
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
os=-nto$os
|
os=-nto$os
|
||||||
@@ -1000,7 +1129,7 @@ case $os in
|
|||||||
-ns2 )
|
-ns2 )
|
||||||
os=-nextstep2
|
os=-nextstep2
|
||||||
;;
|
;;
|
||||||
-nsk)
|
-nsk*)
|
||||||
os=-nsk
|
os=-nsk
|
||||||
;;
|
;;
|
||||||
# Preserve the version number of sinix5.
|
# Preserve the version number of sinix5.
|
||||||
@@ -1037,7 +1166,7 @@ case $os in
|
|||||||
-xenix)
|
-xenix)
|
||||||
os=-xenix
|
os=-xenix
|
||||||
;;
|
;;
|
||||||
-*mint | -*MiNT)
|
-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
|
||||||
os=-mint
|
os=-mint
|
||||||
;;
|
;;
|
||||||
-none)
|
-none)
|
||||||
@@ -1071,6 +1200,9 @@ case $basic_machine in
|
|||||||
arm*-semi)
|
arm*-semi)
|
||||||
os=-aout
|
os=-aout
|
||||||
;;
|
;;
|
||||||
|
pdp10-*)
|
||||||
|
os=-tops20
|
||||||
|
;;
|
||||||
pdp11-*)
|
pdp11-*)
|
||||||
os=-none
|
os=-none
|
||||||
;;
|
;;
|
||||||
@@ -1179,7 +1311,7 @@ case $basic_machine in
|
|||||||
*-masscomp)
|
*-masscomp)
|
||||||
os=-rtu
|
os=-rtu
|
||||||
;;
|
;;
|
||||||
f301-fujitsu)
|
f30[01]-fujitsu | f700-fujitsu)
|
||||||
os=-uxpv
|
os=-uxpv
|
||||||
;;
|
;;
|
||||||
*-rom68k)
|
*-rom68k)
|
||||||
@@ -1257,12 +1389,23 @@ case $basic_machine in
|
|||||||
-mpw* | -macos*)
|
-mpw* | -macos*)
|
||||||
vendor=apple
|
vendor=apple
|
||||||
;;
|
;;
|
||||||
-*mint | -*MiNT)
|
-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
|
||||||
vendor=atari
|
vendor=atari
|
||||||
;;
|
;;
|
||||||
|
-vos*)
|
||||||
|
vendor=stratus
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
|
basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
echo $basic_machine$os
|
echo $basic_machine$os
|
||||||
|
exit 0
|
||||||
|
|
||||||
|
# Local variables:
|
||||||
|
# eval: (add-hook 'write-file-hooks 'time-stamp)
|
||||||
|
# time-stamp-start: "timestamp='"
|
||||||
|
# time-stamp-format: "%:y-%02m-%02d"
|
||||||
|
# time-stamp-end: "'"
|
||||||
|
# End:
|
||||||
|
|||||||
677
configure.in
677
configure.in
@@ -1,241 +1,183 @@
|
|||||||
dnl $Id$
|
dnl $Id$
|
||||||
dnl Process this file with autoconf to produce a configure script.
|
dnl Process this file with autoconf to produce a configure script.
|
||||||
AC_INIT(lib/urldata.h)
|
|
||||||
AM_CONFIG_HEADER(config.h src/config.h)
|
|
||||||
|
|
||||||
|
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 First some basic init macros
|
||||||
|
AC_INIT
|
||||||
|
AC_CONFIG_SRCDIR([lib/urldata.h])
|
||||||
|
AM_CONFIG_HEADER(lib/config.h src/config.h tests/server/config.h lib/ca-bundle.h)
|
||||||
|
|
||||||
|
dnl figure out the libcurl version
|
||||||
VERSION=`sed -ne 's/^#define LIBCURL_VERSION "\(.*\)"/\1/p' ${srcdir}/include/curl/curl.h`
|
VERSION=`sed -ne 's/^#define LIBCURL_VERSION "\(.*\)"/\1/p' ${srcdir}/include/curl/curl.h`
|
||||||
AM_INIT_AUTOMAKE(curl,$VERSION)
|
AM_INIT_AUTOMAKE(curl,$VERSION)
|
||||||
AM_PROG_LIBTOOL
|
|
||||||
|
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
|
||||||
dnl Detect the canonical host and target build environment
|
dnl Detect the canonical host and target build environment
|
||||||
dnl
|
dnl
|
||||||
AC_CANONICAL_HOST
|
|
||||||
AC_CANONICAL_TARGET
|
|
||||||
|
|
||||||
dnl Checks for programs.
|
AC_CANONICAL_HOST
|
||||||
AC_PROG_CC
|
dnl Get system canonical name
|
||||||
|
AC_DEFINE_UNQUOTED(OS, "${host}", [cpu-machine-OS])
|
||||||
|
|
||||||
dnl Check for AIX weirdos
|
dnl Check for AIX weirdos
|
||||||
AC_AIX
|
AC_AIX
|
||||||
|
|
||||||
|
dnl Checks for programs.
|
||||||
|
AC_PROG_CC
|
||||||
|
|
||||||
dnl check for how to do large files
|
dnl check for how to do large files
|
||||||
AC_SYS_LARGEFILE
|
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 The install stuff has already been taken care of by the automake stuff
|
||||||
dnl AC_PROG_INSTALL
|
dnl AC_PROG_INSTALL
|
||||||
AC_PROG_MAKE_SET
|
AC_PROG_MAKE_SET
|
||||||
|
|
||||||
AC_DEFUN(CURL_CHECK_LOCALTIME_R,
|
dnl ************************************************************
|
||||||
[
|
dnl switch off particular protocols
|
||||||
dnl check for a few thread-safe functions
|
dnl
|
||||||
AC_CHECK_FUNCS(localtime_r,[
|
AC_MSG_CHECKING([whether to support http])
|
||||||
AC_MSG_CHECKING(whether localtime_r is declared)
|
AC_ARG_ENABLE(http,
|
||||||
AC_EGREP_CPP(localtime_r,[
|
[ --enable-http Enable HTTP support
|
||||||
#include <time.h>],[
|
--disable-http Disable HTTP support],
|
||||||
AC_MSG_RESULT(yes)],[
|
[ case "$enableval" in
|
||||||
|
no)
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
AC_MSG_CHECKING(whether localtime_r with -D_REENTRANT is declared)
|
AC_DEFINE(CURL_DISABLE_HTTP, 1, [to disable HTTP])
|
||||||
AC_EGREP_CPP(localtime_r,[
|
AC_MSG_WARN([disable HTTP disables FTP over proxy and GOPHER too])
|
||||||
#define _REENTRANT
|
AC_DEFINE(CURL_DISABLE_GOPHER, 1, [to disable GOPHER])
|
||||||
#include <time.h>],[
|
AC_SUBST(CURL_DISABLE_HTTP)
|
||||||
AC_DEFINE(NEED_REENTRANT)
|
AC_SUBST(CURL_DISABLE_GOPHER)
|
||||||
AC_MSG_RESULT(yes)],
|
;;
|
||||||
AC_MSG_RESULT(no))])])
|
*) AC_MSG_RESULT(yes)
|
||||||
])
|
;;
|
||||||
|
esac ],
|
||||||
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)
|
|
||||||
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)
|
|
||||||
AC_DEFINE(NEED_REENTRANT)
|
|
||||||
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_MSG_RESULT(yes)
|
||||||
AC_DEFINE(HAVE_GETHOSTBYADDR_R_5)
|
)
|
||||||
ac_cv_gethostbyaddr_args=5],[
|
AC_MSG_CHECKING([whether to support ftp])
|
||||||
|
AC_ARG_ENABLE(ftp,
|
||||||
|
[ --enable-ftp Enable FTP support
|
||||||
|
--disable-ftp Disable FTP support],
|
||||||
|
[ case "$enableval" in
|
||||||
|
no)
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
AC_MSG_CHECKING(if gethostbyaddr_r with -D_REENTRANT takes 5 arguments)
|
AC_DEFINE(CURL_DISABLE_FTP, 1, [to disable FTP])
|
||||||
AC_TRY_COMPILE([
|
AC_SUBST(CURL_DISABLE_FTP)
|
||||||
#define _REENTRANT
|
;;
|
||||||
#include <sys/types.h>
|
*) AC_MSG_RESULT(yes)
|
||||||
#include <netdb.h>],[
|
;;
|
||||||
char * address;
|
esac ],
|
||||||
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_MSG_RESULT(yes)
|
||||||
AC_DEFINE(HAVE_GETHOSTBYADDR_R_5)
|
)
|
||||||
AC_DEFINE(NEED_REENTRANT)
|
AC_MSG_CHECKING([whether to support gopher])
|
||||||
ac_cv_gethostbyaddr_args=5],[
|
AC_ARG_ENABLE(gopher,
|
||||||
|
[ --enable-gopher Enable GOPHER support
|
||||||
|
--disable-gopher Disable GOPHER support],
|
||||||
|
[ case "$enableval" in
|
||||||
|
no)
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
AC_MSG_CHECKING(if gethostbyaddr_r takes 7 arguments)
|
AC_DEFINE(CURL_DISABLE_GOPHER, 1, [to disable GOPHER])
|
||||||
AC_TRY_COMPILE([
|
AC_SUBST(CURL_DISABLE_GOPHER)
|
||||||
#include <sys/types.h>
|
;;
|
||||||
#include <netdb.h>],[
|
*) AC_MSG_RESULT(yes)
|
||||||
char * address;
|
;;
|
||||||
int length;
|
esac ],
|
||||||
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_MSG_RESULT(yes)
|
||||||
AC_DEFINE(HAVE_GETHOSTBYADDR_R_7)
|
)
|
||||||
ac_cv_gethostbyaddr_args=7],[
|
AC_MSG_CHECKING([whether to support file])
|
||||||
|
AC_ARG_ENABLE(file,
|
||||||
|
[ --enable-file Enable FILE support
|
||||||
|
--disable-file Disable FILE support],
|
||||||
|
[ case "$enableval" in
|
||||||
|
no)
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
AC_MSG_CHECKING(if gethostbyaddr_r takes 8 arguments)
|
AC_DEFINE(CURL_DISABLE_FILE, 1, [to disable FILE])
|
||||||
AC_TRY_COMPILE([
|
AC_SUBST(CURL_DISABLE_FILE)
|
||||||
#include <sys/types.h>
|
;;
|
||||||
#include <netdb.h>],[
|
*) AC_MSG_RESULT(yes)
|
||||||
char * address;
|
;;
|
||||||
int length;
|
esac ],
|
||||||
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_MSG_RESULT(yes)
|
||||||
AC_DEFINE(HAVE_GETHOSTBYADDR_R_8)
|
)
|
||||||
ac_cv_gethostbyaddr_args=8],[
|
AC_MSG_CHECKING([whether to support ldap])
|
||||||
|
AC_ARG_ENABLE(ldap,
|
||||||
|
[ --enable-ldap Enable LDAP support
|
||||||
|
--disable-ldap Disable LDAP support],
|
||||||
|
[ case "$enableval" in
|
||||||
|
no)
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
have_missing_r_funcs="$have_missing_r_funcs gethostbyaddr_r"])])])])])
|
AC_DEFINE(CURL_DISABLE_LDAP, 1, [to disable LDAP])
|
||||||
|
AC_SUBST(CURL_DISABLE_LDAP)
|
||||||
|
;;
|
||||||
])
|
*) AC_MSG_RESULT(yes)
|
||||||
|
;;
|
||||||
AC_DEFUN(CURL_CHECK_GETHOSTBYNAME_R,
|
esac ],
|
||||||
[
|
|
||||||
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_RUN([
|
|
||||||
#include <string.h>
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <netdb.h>
|
|
||||||
|
|
||||||
int
|
|
||||||
main () {
|
|
||||||
struct hostent h;
|
|
||||||
struct hostent_data hdata;
|
|
||||||
char *name = "localhost";
|
|
||||||
int rc;
|
|
||||||
memset(&h, 0, sizeof(struct hostent));
|
|
||||||
memset(&hdata, 0, sizeof(struct hostent_data));
|
|
||||||
rc = gethostbyname_r(name, &h, &hdata);
|
|
||||||
exit (rc != 0 ? 1 : 0); }],[
|
|
||||||
AC_MSG_RESULT(yes)
|
AC_MSG_RESULT(yes)
|
||||||
AC_DEFINE(HAVE_GETHOSTBYNAME_R_3)
|
)
|
||||||
ac_cv_gethostbyname_args=3],[
|
AC_MSG_CHECKING([whether to support dict])
|
||||||
|
AC_ARG_ENABLE(dict,
|
||||||
|
[ --enable-dict Enable DICT support
|
||||||
|
--disable-dict Disable DICT support],
|
||||||
|
[ case "$enableval" in
|
||||||
|
no)
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
AC_MSG_CHECKING(if gethostbyname_r with -D_REENTRANT takes 3 arguments)
|
AC_DEFINE(CURL_DISABLE_DICT, 1 [to disable DICT])
|
||||||
AC_TRY_RUN([
|
AC_SUBST(CURL_DISABLE_DICT)
|
||||||
#define _REENTRANT
|
;;
|
||||||
|
*) AC_MSG_RESULT(yes)
|
||||||
#include <string.h>
|
;;
|
||||||
#include <sys/types.h>
|
esac ],
|
||||||
#include <netdb.h>
|
|
||||||
|
|
||||||
int
|
|
||||||
main () {
|
|
||||||
struct hostent h;
|
|
||||||
struct hostent_data hdata;
|
|
||||||
char *name = "localhost";
|
|
||||||
int rc;
|
|
||||||
memset(&h, 0, sizeof(struct hostent));
|
|
||||||
memset(&hdata, 0, sizeof(struct hostent_data));
|
|
||||||
rc = gethostbyname_r(name, &h, &hdata);
|
|
||||||
exit (rc != 0 ? 1 : 0); }],[
|
|
||||||
AC_MSG_RESULT(yes)
|
AC_MSG_RESULT(yes)
|
||||||
AC_DEFINE(HAVE_GETHOSTBYNAME_R_3)
|
)
|
||||||
AC_DEFINE(NEED_REENTRANT)
|
AC_MSG_CHECKING([whether to support telnet])
|
||||||
ac_cv_gethostbyname_args=3],[
|
AC_ARG_ENABLE(telnet,
|
||||||
|
[ --enable-telnet Enable TELNET support
|
||||||
|
--disable-telnet Disable TELNET support],
|
||||||
|
[ case "$enableval" in
|
||||||
|
no)
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
AC_MSG_CHECKING(if gethostbyname_r takes 5 arguments)
|
AC_DEFINE(CURL_DISABLE_TELNET, 1, [to disable TELNET])
|
||||||
AC_TRY_RUN([
|
AC_SUBST(CURL_DISABLE_TELNET)
|
||||||
#include <sys/types.h>
|
;;
|
||||||
#include <netdb.h>
|
*) AC_MSG_RESULT(yes)
|
||||||
|
;;
|
||||||
int
|
esac ],
|
||||||
main () {
|
|
||||||
struct hostent *hp;
|
|
||||||
struct hostent h;
|
|
||||||
char *name = "localhost";
|
|
||||||
char buffer[8192];
|
|
||||||
int h_errno;
|
|
||||||
hp = gethostbyname_r(name, &h, buffer, 8192, &h_errno);
|
|
||||||
exit (hp == NULL ? 1 : 0); }],[
|
|
||||||
AC_MSG_RESULT(yes)
|
AC_MSG_RESULT(yes)
|
||||||
AC_DEFINE(HAVE_GETHOSTBYNAME_R_5)
|
)
|
||||||
ac_cv_gethostbyname_args=5],[
|
|
||||||
AC_MSG_RESULT(no)
|
|
||||||
AC_MSG_CHECKING(if gethostbyname_r takes 6 arguments)
|
|
||||||
AC_TRY_RUN([
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <netdb.h>
|
|
||||||
|
|
||||||
int
|
|
||||||
main () {
|
|
||||||
struct hostent h;
|
|
||||||
struct hostent *hp;
|
|
||||||
char *name = "localhost";
|
|
||||||
char buf[8192];
|
|
||||||
int rc;
|
|
||||||
int h_errno;
|
|
||||||
rc = gethostbyname_r(name, &h, buf, 8192, &hp, &h_errno);
|
|
||||||
exit (rc != 0 ? 1 : 0); }],[
|
|
||||||
AC_MSG_RESULT(yes)
|
|
||||||
AC_DEFINE(HAVE_GETHOSTBYNAME_R_6)
|
|
||||||
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])])
|
|
||||||
|
|
||||||
])
|
|
||||||
|
|
||||||
dnl **********************************************************************
|
dnl **********************************************************************
|
||||||
dnl Checks for IPv6
|
dnl Checks for IPv6
|
||||||
@@ -251,7 +193,6 @@ AC_ARG_ENABLE(ipv6,
|
|||||||
ipv6=no
|
ipv6=no
|
||||||
;;
|
;;
|
||||||
*) AC_MSG_RESULT(yes)
|
*) AC_MSG_RESULT(yes)
|
||||||
AC_DEFINE(ENABLE_IPV6)
|
|
||||||
ipv6=yes
|
ipv6=yes
|
||||||
;;
|
;;
|
||||||
esac ],
|
esac ],
|
||||||
@@ -268,7 +209,6 @@ main()
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
AC_MSG_RESULT(yes)
|
AC_MSG_RESULT(yes)
|
||||||
AC_DEFINE(ENABLE_IPV6)
|
|
||||||
ipv6=yes,
|
ipv6=yes,
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
ipv6=no,
|
ipv6=no,
|
||||||
@@ -276,16 +216,21 @@ main()
|
|||||||
ipv6=no
|
ipv6=no
|
||||||
))
|
))
|
||||||
|
|
||||||
|
if test "$ipv6" = "yes"; then
|
||||||
|
CURL_CHECK_WORKING_GETADDRINFO
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
dnl **********************************************************************
|
dnl **********************************************************************
|
||||||
dnl Checks for libraries.
|
dnl Checks for libraries.
|
||||||
dnl **********************************************************************
|
dnl **********************************************************************
|
||||||
|
|
||||||
dnl gethostbyname in the nsl lib?
|
dnl gethostbyname in the nsl lib?
|
||||||
AC_CHECK_FUNC(gethostbyname, , AC_CHECK_LIB(nsl, gethostbyname))
|
AC_CHECK_FUNC(gethostbyname, , [ AC_CHECK_LIB(nsl, gethostbyname) ])
|
||||||
|
|
||||||
if test "$ac_cv_lib_nsl_gethostbyname" != "yes" -a "$ac_cv_func_gethostbyname" != "yes"; then
|
if test "$ac_cv_lib_nsl_gethostbyname" != "yes" -a "$ac_cv_func_gethostbyname" != "yes"; then
|
||||||
dnl gethostbyname in the socket lib?
|
dnl gethostbyname in the socket lib?
|
||||||
AC_CHECK_FUNC(gethostbyname, , AC_CHECK_LIB(socket, gethostbyname))
|
AC_CHECK_FUNC(gethostbyname, , [ AC_CHECK_LIB(socket, gethostbyname) ])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
dnl At least one system has been identified to require BOTH nsl and
|
dnl At least one system has been identified to require BOTH nsl and
|
||||||
@@ -310,7 +255,7 @@ if test "$ac_cv_lib_nsl_gethostbyname" = "$ac_cv_func_gethostbyname"; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
dnl resolve lib?
|
dnl resolve lib?
|
||||||
AC_CHECK_FUNC(strcasecmp, , AC_CHECK_LIB(resolve, strcasecmp))
|
AC_CHECK_FUNC(strcasecmp, , [ AC_CHECK_LIB(resolve, strcasecmp) ])
|
||||||
|
|
||||||
if test "$ac_cv_lib_resolve_strcasecmp" = "$ac_cv_func_strcasecmp"; then
|
if test "$ac_cv_lib_resolve_strcasecmp" = "$ac_cv_func_strcasecmp"; then
|
||||||
AC_CHECK_LIB(resolve, strcasecmp,
|
AC_CHECK_LIB(resolve, strcasecmp,
|
||||||
@@ -320,13 +265,57 @@ if test "$ac_cv_lib_resolve_strcasecmp" = "$ac_cv_func_strcasecmp"; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
dnl socket lib?
|
dnl socket lib?
|
||||||
AC_CHECK_FUNC(connect, , AC_CHECK_LIB(socket, connect))
|
AC_CHECK_FUNC(connect, , [ AC_CHECK_LIB(socket, connect) ])
|
||||||
|
|
||||||
dnl ucb lib?
|
|
||||||
AC_CHECK_FUNC(gethostname, , AC_CHECK_LIB(ucb, gethostname))
|
|
||||||
|
|
||||||
dnl dl lib?
|
dnl dl lib?
|
||||||
AC_CHECK_FUNC(dlopen, , AC_CHECK_LIB(dl, dlopen))
|
AC_CHECK_FUNC(dlclose, , [ AC_CHECK_LIB(dl, dlopen) ])
|
||||||
|
|
||||||
|
dnl **********************************************************************
|
||||||
|
dnl Check how non-blocking sockets are set
|
||||||
|
dnl **********************************************************************
|
||||||
|
AC_ARG_ENABLE(nonblocking,
|
||||||
|
[ --enable-nonblocking Makes the script detect how to do it
|
||||||
|
--disable-nonblocking Makes the script disable non-blocking sockets],
|
||||||
|
[
|
||||||
|
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,
|
||||||
|
[ --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,
|
||||||
|
[ --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 **********************************************************************
|
||||||
dnl Check for the presence of Kerberos4 libraries and headers
|
dnl Check for the presence of Kerberos4 libraries and headers
|
||||||
@@ -365,6 +354,10 @@ AC_MSG_CHECKING([if Kerberos4 support is requested])
|
|||||||
|
|
||||||
if test "$want_krb4" = yes
|
if test "$want_krb4" = yes
|
||||||
then
|
then
|
||||||
|
if test "$ipv6" = "yes"; then
|
||||||
|
echo krb4 is not compatible with IPv6
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
AC_MSG_RESULT(yes)
|
AC_MSG_RESULT(yes)
|
||||||
|
|
||||||
dnl Check for & handle argument to --with-krb4
|
dnl Check for & handle argument to --with-krb4
|
||||||
@@ -383,7 +376,7 @@ then
|
|||||||
AC_CHECK_HEADERS(des.h)
|
AC_CHECK_HEADERS(des.h)
|
||||||
|
|
||||||
dnl resolv lib?
|
dnl resolv lib?
|
||||||
AC_CHECK_FUNC(res_search, , AC_CHECK_LIB(resolv, res_search))
|
AC_CHECK_FUNC(res_search, , [AC_CHECK_LIB(resolv, res_search)])
|
||||||
|
|
||||||
dnl Check for the Kerberos4 library
|
dnl Check for the Kerberos4 library
|
||||||
AC_CHECK_LIB(krb, krb_net_read,
|
AC_CHECK_LIB(krb, krb_net_read,
|
||||||
@@ -399,7 +392,12 @@ then
|
|||||||
AC_CHECK_FUNCS(krb_get_our_ip_for_realm)
|
AC_CHECK_FUNCS(krb_get_our_ip_for_realm)
|
||||||
|
|
||||||
dnl add define KRB4
|
dnl add define KRB4
|
||||||
AC_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()
|
dnl the krb4 stuff needs a strlcpy()
|
||||||
AC_CHECK_FUNCS(strlcpy)
|
AC_CHECK_FUNCS(strlcpy)
|
||||||
@@ -410,6 +408,7 @@ else
|
|||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
dnl **********************************************************************
|
dnl **********************************************************************
|
||||||
dnl Check for the presence of SSL libraries and headers
|
dnl Check for the presence of SSL libraries and headers
|
||||||
dnl **********************************************************************
|
dnl **********************************************************************
|
||||||
@@ -417,36 +416,54 @@ dnl **********************************************************************
|
|||||||
dnl Default to compiler & linker defaults for SSL files & libraries.
|
dnl Default to compiler & linker defaults for SSL files & libraries.
|
||||||
OPT_SSL=off
|
OPT_SSL=off
|
||||||
AC_ARG_WITH(ssl,dnl
|
AC_ARG_WITH(ssl,dnl
|
||||||
[ --with-ssl[=DIR] where to look for SSL [compiler/linker default paths]
|
AC_HELP_STRING([--with-ssl=PATH], [where to look for SSL, PATH points to the SSL installation (default: /usr/local/ssl)])
|
||||||
DIR points to the SSL installation [/usr/local/ssl]],
|
AC_HELP_STRING([--without-ssl], [disable SSL]),
|
||||||
OPT_SSL=$withval
|
OPT_SSL=$withval)
|
||||||
)
|
|
||||||
|
|
||||||
if test X"$OPT_SSL" = Xno
|
if test X"$OPT_SSL" = Xno
|
||||||
then
|
then
|
||||||
AC_MSG_WARN(SSL/https support disabled)
|
AC_MSG_WARN(SSL/https support disabled)
|
||||||
else
|
else
|
||||||
|
|
||||||
dnl Check for & handle argument to --with-ssl.
|
dnl Check for and handle argument to --with-ssl.
|
||||||
|
|
||||||
AC_MSG_CHECKING(where to look for SSL)
|
dnl save the pre-ssl check flags for a while
|
||||||
if test X"$OPT_SSL" = Xoff
|
CLEANLDFLAGS="$LDFLAGS"
|
||||||
then
|
CLEANCPPFLAGS="$CPPFLAGS"
|
||||||
AC_MSG_RESULT([defaults (or given in environment)])
|
|
||||||
else
|
|
||||||
test X"$OPT_SSL" = Xyes && OPT_SSL=/usr/local/ssl
|
|
||||||
dnl LIBS="$LIBS -L$OPT_SSL/lib"
|
|
||||||
LDFLAGS="$LDFLAGS -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)
|
case "$OPT_SSL" in
|
||||||
AC_CHECK_LIB(crypto, CRYPTO_lock)
|
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
|
||||||
|
|
||||||
if test $ac_cv_lib_crypto_CRYPTO_lock = yes; then
|
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 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
|
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)
|
AC_CHECK_LIB(ssl, SSL_connect)
|
||||||
|
|
||||||
if test "$ac_cv_lib_ssl_SSL_connect" != yes; then
|
if test "$ac_cv_lib_ssl_SSL_connect" != yes; then
|
||||||
@@ -465,20 +482,35 @@ else
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
dnl Check for SSLeay headers
|
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)
|
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
|
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)
|
AC_CHECK_HEADERS(x509.h rsa.h crypto.h pem.h ssl.h err.h,
|
||||||
|
OPENSSL_ENABLED=1)
|
||||||
fi
|
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)
|
||||||
|
|
||||||
fi
|
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
|
||||||
|
|
||||||
|
|
||||||
dnl these can only exist if openssl exists
|
dnl these can only exist if openssl exists
|
||||||
|
|
||||||
AC_CHECK_FUNCS( RAND_status \
|
AC_CHECK_FUNCS( RAND_status \
|
||||||
RAND_screen )
|
RAND_screen \
|
||||||
|
RAND_egd )
|
||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -486,34 +518,44 @@ dnl **********************************************************************
|
|||||||
dnl Check for the presence of ZLIB libraries and headers
|
dnl Check for the presence of ZLIB libraries and headers
|
||||||
dnl **********************************************************************
|
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 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)
|
_cppflags=$CPPFLAGS
|
||||||
dnl if test X"$OPT_ZLIB" = Xno
|
_ldflags=$LDFLAGS
|
||||||
dnl then
|
OPT_ZLIB="/usr/local"
|
||||||
dnl AC_MSG_RESULT([defaults (or given in environment)])
|
AC_ARG_WITH(zlib,
|
||||||
dnl else
|
AC_HELP_STRING([--with-zlib=PATH], [search for zlib in PATH])
|
||||||
dnl test X"$OPT_ZLIB" = Xyes && OPT_ZLIB=/usr/local
|
AC_HELP_STRING([--without-zlib], [disable use of zlib]),
|
||||||
dnl LIBS="$LIBS -L$OPT_ZLIB/lib"
|
[OPT_ZLIB="$withval"])
|
||||||
dnl CPPFLAGS="$CPPFLAGS -I$OPT_ZLIB/include"
|
|
||||||
dnl AC_MSG_RESULT([$OPT_ZLIB])
|
|
||||||
dnl fi
|
|
||||||
|
|
||||||
dnl z lib?
|
case "$OPT_ZLIB" in
|
||||||
dnl AC_CHECK_FUNC(gzread, , AC_CHECK_LIB(z, gzread))
|
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,
|
||||||
|
[AM_CONDITIONAL(CONTENT_ENCODING, true)
|
||||||
|
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 Default is to try the thread-safe versions of a few functions
|
dnl Default is to try the thread-safe versions of a few functions
|
||||||
OPT_THREAD=on
|
OPT_THREAD=on
|
||||||
@@ -541,6 +583,8 @@ else
|
|||||||
dnl is there a localtime_r()
|
dnl is there a localtime_r()
|
||||||
CURL_CHECK_LOCALTIME_R()
|
CURL_CHECK_LOCALTIME_R()
|
||||||
|
|
||||||
|
AC_CHECK_FUNCS( gmtime_r )
|
||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
dnl **********************************************************************
|
dnl **********************************************************************
|
||||||
@@ -564,7 +608,6 @@ AC_CHECK_HEADERS( \
|
|||||||
sys/stat.h \
|
sys/stat.h \
|
||||||
sys/types.h \
|
sys/types.h \
|
||||||
sys/time.h \
|
sys/time.h \
|
||||||
getopt.h \
|
|
||||||
sys/param.h \
|
sys/param.h \
|
||||||
termios.h \
|
termios.h \
|
||||||
termio.h \
|
termio.h \
|
||||||
@@ -575,11 +618,13 @@ AC_CHECK_HEADERS( \
|
|||||||
winsock.h \
|
winsock.h \
|
||||||
time.h \
|
time.h \
|
||||||
io.h \
|
io.h \
|
||||||
|
pwd.h \
|
||||||
|
utime.h \
|
||||||
|
sys/utime.h \
|
||||||
|
sys/poll.h \
|
||||||
|
setjmp.h
|
||||||
)
|
)
|
||||||
|
|
||||||
dnl Check for libz header
|
|
||||||
dnl AC_CHECK_HEADERS(zlib.h)
|
|
||||||
|
|
||||||
dnl Checks for typedefs, structures, and compiler characteristics.
|
dnl Checks for typedefs, structures, and compiler characteristics.
|
||||||
AC_C_CONST
|
AC_C_CONST
|
||||||
AC_TYPE_SIZE_T
|
AC_TYPE_SIZE_T
|
||||||
@@ -588,13 +633,15 @@ AC_HEADER_TIME
|
|||||||
# mprintf() checks:
|
# mprintf() checks:
|
||||||
|
|
||||||
# check for 'long double'
|
# check for 'long double'
|
||||||
AC_CHECK_SIZEOF(long double, 8)
|
# AC_CHECK_SIZEOF(long double, 8)
|
||||||
# check for 'long long'
|
# check for 'long long'
|
||||||
AC_CHECK_SIZEOF(long long, 4)
|
# AC_CHECK_SIZEOF(long long, 4)
|
||||||
|
|
||||||
dnl Get system canonical name
|
# check for ssize_t
|
||||||
AC_CANONICAL_HOST
|
AC_CHECK_TYPE(ssize_t, int)
|
||||||
AC_DEFINE_UNQUOTED(OS, "${host}")
|
|
||||||
|
TYPE_SOCKLEN_T
|
||||||
|
TYPE_IN_ADDR_T
|
||||||
|
|
||||||
dnl Checks for library functions.
|
dnl Checks for library functions.
|
||||||
dnl AC_PROG_GCC_TRADITIONAL
|
dnl AC_PROG_GCC_TRADITIONAL
|
||||||
@@ -604,14 +651,13 @@ AC_CHECK_FUNCS( socket \
|
|||||||
select \
|
select \
|
||||||
strdup \
|
strdup \
|
||||||
strstr \
|
strstr \
|
||||||
|
strtok_r \
|
||||||
strftime \
|
strftime \
|
||||||
uname \
|
uname \
|
||||||
strcasecmp \
|
strcasecmp \
|
||||||
stricmp \
|
stricmp \
|
||||||
strcmpi \
|
strcmpi \
|
||||||
gethostname \
|
|
||||||
gethostbyaddr \
|
gethostbyaddr \
|
||||||
getservbyname \
|
|
||||||
gettimeofday \
|
gettimeofday \
|
||||||
inet_addr \
|
inet_addr \
|
||||||
inet_ntoa \
|
inet_ntoa \
|
||||||
@@ -622,9 +668,29 @@ AC_CHECK_FUNCS( socket \
|
|||||||
setvbuf \
|
setvbuf \
|
||||||
sigaction \
|
sigaction \
|
||||||
signal \
|
signal \
|
||||||
getpass_r
|
getpass_r \
|
||||||
|
strlcat \
|
||||||
|
getpwuid \
|
||||||
|
geteuid \
|
||||||
|
dlopen \
|
||||||
|
utime \
|
||||||
|
sigsetjmp \
|
||||||
|
poll
|
||||||
)
|
)
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
dnl removed 'getpass' check on October 26, 2000
|
dnl removed 'getpass' check on October 26, 2000
|
||||||
|
|
||||||
if test "$ac_cv_func_select" != "yes"; then
|
if test "$ac_cv_func_select" != "yes"; then
|
||||||
@@ -642,25 +708,84 @@ AC_PATH_PROGS( NROFF, gnroff nroff, ,
|
|||||||
$PATH:/usr/bin/:/usr/local/bin )
|
$PATH:/usr/bin/:/usr/local/bin )
|
||||||
AC_SUBST(NROFF)
|
AC_SUBST(NROFF)
|
||||||
|
|
||||||
|
|
||||||
|
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$ca" = "xno"; then
|
||||||
|
dnl let's not keep "no" as path name, blank it instead
|
||||||
|
ca=""
|
||||||
|
else
|
||||||
|
AC_DEFINE_UNQUOTED(CURL_CA_BUNDLE, "$ca", [CA bundle full path name])
|
||||||
|
fi
|
||||||
|
|
||||||
|
CURL_CA_BUNDLE="$ca"
|
||||||
|
AC_SUBST(CURL_CA_BUNDLE)
|
||||||
|
AC_MSG_RESULT([$ca])
|
||||||
|
|
||||||
AC_PROG_YACC
|
AC_PROG_YACC
|
||||||
|
|
||||||
dnl AC_PATH_PROG( RANLIB, ranlib, /usr/bin/ranlib,
|
dnl AC_PATH_PROG( RANLIB, ranlib, /usr/bin/ranlib,
|
||||||
dnl $PATH:/usr/bin/:/usr/local/bin )
|
dnl $PATH:/usr/bin/:/usr/local/bin )
|
||||||
dnl AC_SUBST(RANLIB)
|
dnl AC_SUBST(RANLIB)
|
||||||
|
|
||||||
AC_OUTPUT( Makefile \
|
dnl ************************************************************
|
||||||
|
dnl lame option to switch on debug options
|
||||||
|
dnl
|
||||||
|
AC_MSG_CHECKING([whether to enable debug options])
|
||||||
|
AC_ARG_ENABLE(debug,
|
||||||
|
[ --enable-debug Enable pedantic debug options
|
||||||
|
--disable-debug Disable debug options],
|
||||||
|
[ case "$enableval" in
|
||||||
|
no)
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
;;
|
||||||
|
*) AC_MSG_RESULT(yes)
|
||||||
|
|
||||||
|
CPPFLAGS="$CPPFLAGS -DMALLOCDEBUG"
|
||||||
|
CFLAGS="$CFLAGS -g"
|
||||||
|
if test "$GCC" = "yes"; then
|
||||||
|
CFLAGS="$CFLAGS -W -Wall -Wwrite-strings -pedantic -Wundef -Wpointer-arith -Wcast-align -Wnested-externs"
|
||||||
|
fi
|
||||||
|
dnl strip off optimizer flags
|
||||||
|
CFLAGS=`echo $CFLAGS | sed -e 's/-O[0-9 ]//g'`
|
||||||
|
;;
|
||||||
|
esac ],
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
)
|
||||||
|
|
||||||
|
AC_CONFIG_FILES([Makefile \
|
||||||
docs/Makefile \
|
docs/Makefile \
|
||||||
docs/examples/Makefile \
|
docs/examples/Makefile \
|
||||||
|
docs/libcurl/Makefile \
|
||||||
include/Makefile \
|
include/Makefile \
|
||||||
include/curl/Makefile \
|
include/curl/Makefile \
|
||||||
src/Makefile \
|
src/Makefile \
|
||||||
lib/Makefile \
|
lib/Makefile \
|
||||||
tests/Makefile \
|
tests/Makefile \
|
||||||
tests/data/Makefile \
|
tests/data/Makefile \
|
||||||
|
tests/server/Makefile \
|
||||||
packages/Makefile \
|
packages/Makefile \
|
||||||
packages/Win32/Makefile \
|
packages/Win32/Makefile \
|
||||||
|
packages/Win32/cygwin/Makefile \
|
||||||
packages/Linux/Makefile \
|
packages/Linux/Makefile \
|
||||||
packages/Linux/RPM/Makefile \
|
packages/Linux/RPM/Makefile \
|
||||||
packages/Linux/RPM/curl.spec \
|
packages/Linux/RPM/curl.spec \
|
||||||
packages/Linux/RPM/curl-ssl.spec )
|
packages/Linux/RPM/curl-ssl.spec \
|
||||||
|
packages/Solaris/Makefile \
|
||||||
|
packages/EPM/curl.list \
|
||||||
|
packages/EPM/Makefile \
|
||||||
|
curl-config
|
||||||
|
])
|
||||||
|
AC_OUTPUT
|
||||||
|
|||||||
126
curl-config.in
Normal file
126
curl-config.in
Normal file
@@ -0,0 +1,126 @@
|
|||||||
|
#! /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)
|
||||||
|
echo -I@includedir@
|
||||||
|
;;
|
||||||
|
|
||||||
|
--libs)
|
||||||
|
echo -L@libdir@ -lcurl @LDFLAGS@ @LIBS@
|
||||||
|
;;
|
||||||
|
|
||||||
|
*)
|
||||||
|
echo "unknown option: $1"
|
||||||
|
usage
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
|
||||||
|
exit 0
|
||||||
21
curl-mode.el
Normal file
21
curl-mode.el
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
;;;; Emacs Lisp help for writing curl code. ;;;;
|
||||||
|
|
||||||
|
;;; In C files, put something like this to load this file automatically:
|
||||||
|
;;
|
||||||
|
;; /* -----------------------------------------------------------------
|
||||||
|
;; * local variables:
|
||||||
|
;; * eval: (load-file "../curl-mode.el")
|
||||||
|
;; * end:
|
||||||
|
;; */
|
||||||
|
;;
|
||||||
|
;; (note: make sure to get the path right in the argument to load-file).
|
||||||
|
|
||||||
|
|
||||||
|
;;; The curl hacker's C conventions
|
||||||
|
|
||||||
|
;;; we use intent-level 2
|
||||||
|
(setq c-basic-offset 2)
|
||||||
|
;;; never ever use tabs to indent!
|
||||||
|
(setq indent-tabs-mode nil)
|
||||||
|
;;; I like this, stolen from Subversion! ;-)
|
||||||
|
(setq angry-mob-with-torches-and-pitchforks t)
|
||||||
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
|
||||||
61
docs/BUGS
61
docs/BUGS
@@ -1,3 +1,4 @@
|
|||||||
|
$Id$
|
||||||
_ _ ____ _
|
_ _ ____ _
|
||||||
___| | | | _ \| |
|
___| | | | _ \| |
|
||||||
/ __| | | | |_) | |
|
/ __| | | | |_) | |
|
||||||
@@ -6,25 +7,47 @@
|
|||||||
|
|
||||||
BUGS
|
BUGS
|
||||||
|
|
||||||
Curl has grown substantially from that day, several years ago, when I
|
Curl and libcurl have grown substantially since the beginning. At the time
|
||||||
started fiddling with it. When I write this, there are 16500 lines of source
|
of writing (end of April 2002), there are 32000 lines of source code, and by
|
||||||
code, and by the time you read this it has probably grown even more.
|
the time you read this it has probably grown even more.
|
||||||
|
|
||||||
Of course there are lots of bugs left. And lots of misfeatures.
|
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
|
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
|
bug reports and bug fixes.
|
||||||
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
|
WHERE TO REPORT
|
||||||
your bug/problem at curl's bug tracking system over at
|
|
||||||
|
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
|
http://sourceforge.net/bugs/?group_id=976
|
||||||
|
|
||||||
|
(but please read the section below first before doing that)
|
||||||
|
|
||||||
|
WHAT TO REPORT
|
||||||
|
|
||||||
When reporting a bug, you should include information that will help us
|
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
|
understand what's wrong what you expected to happen and how to repeat the
|
||||||
need to supply your operating system's name and version number (uname -a
|
bad behavior. You therefore need to tell us:
|
||||||
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.
|
- 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
|
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
|
send that huge file to anyone of us. Unless we have an exact same system
|
||||||
@@ -32,25 +55,25 @@ BUGS
|
|||||||
a stack trace and send that (much smaller) output to us instead!
|
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
|
The address and how to subscribe to the mailing list is detailed in the
|
||||||
README.curl file.
|
MANUAL file.
|
||||||
|
|
||||||
HOW TO GET A STACK TRACE with a common unix debugger
|
HOW TO GET A STACK TRACE
|
||||||
====================================================
|
|
||||||
|
|
||||||
First, you must make sure that you compile all sources with -g and that you
|
First, you must make sure that you compile all sources with -g and that you
|
||||||
don't 'strip' the final executable.
|
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 bangs.
|
Run the program until it dumps core.
|
||||||
|
|
||||||
Run your debugger on the core file, like '<debugger> curl core'. <debugger>
|
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
|
should be replaced with the name of your debugger, in most cases that will
|
||||||
be 'gdb', but 'dbx' and others also occur.
|
be 'gdb', but 'dbx' and others also occur.
|
||||||
|
|
||||||
When the debugger has finished loading the core file and presents you a
|
When the debugger has finished loading the core file and presents you a
|
||||||
prompt, you can give the compiler instructions. Enter 'where' (without the
|
prompt, enter 'where' (without the quotes) and press return.
|
||||||
quotes) and press return.
|
|
||||||
|
|
||||||
The list that is presented is the stack trace. If everything worked, it is
|
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
|
supposed to contain the chain of functions that were called when curl
|
||||||
crashed.
|
crashed. Include the stack trace with your detailed bug report. It'll help a
|
||||||
|
lot.
|
||||||
|
|
||||||
|
|||||||
@@ -6,40 +6,58 @@
|
|||||||
|
|
||||||
To Think About When Contributing Source Code
|
To Think About When Contributing Source Code
|
||||||
|
|
||||||
This document is intended to offer some guidelines that can be useful to keep
|
This document is intended to offer some simple guidelines that can be useful
|
||||||
in mind when you decide to write a contribution to the project. This concerns
|
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.
|
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
|
The License Issue
|
||||||
|
|
||||||
When contributing with code, you agree to put your changes and new code under
|
When contributing with code, you agree to put your changes and new code under
|
||||||
the same license curl and libcurl is already using.
|
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
|
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 enfore any changes to
|
files to use a different license as long as they don't enforce any changes to
|
||||||
the rest of the package and they make sense. Such "separate parts" can not be
|
the rest of the package and they make sense. Such "separate parts" can not be
|
||||||
GPL (as we don't want the GPL virus to attack users of libcurl) but they must
|
GPL (as we don't want the GPL virus to attack users of libcurl) but they must
|
||||||
use "GPL compatible" licenses.
|
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
|
Naming
|
||||||
|
|
||||||
Try using a non-confusing naming scheme for your new functions and variable
|
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
|
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,
|
other places of the code, just that the names should be logical,
|
||||||
understandable and be named according to what they're used for.
|
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
|
Indenting
|
||||||
|
|
||||||
Please try using the same indenting levels and bracing method as all the
|
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
|
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
|
all of it is written using the same style. We don't ask you to like it, we
|
||||||
ask you to follow the tradition! ;-)
|
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
|
Commenting
|
||||||
|
|
||||||
Comment your source code extensively. I don't see myself as a very good
|
Comment your source code extensively using C comments (/* comment */), do not
|
||||||
source commenter, but I try to become one. Commented code is quality code and
|
use C++ comments (// this style). Commented code is quality code and enables
|
||||||
enables future modifications much more. Uncommented code much more risk being
|
future modifications much more. Uncommented code much more risk being
|
||||||
completely replaced when someone wants to extend things, since other persons'
|
completely replaced when someone wants to extend things, since other persons'
|
||||||
source code can get quite hard to read.
|
source code can get quite hard to read.
|
||||||
|
|
||||||
@@ -57,6 +75,13 @@ Non-clobbering All Over
|
|||||||
functionality, try writing it in a new source file. If you fix bugs, try to
|
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.
|
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 operting 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 Doing Different Things
|
Separate Patches Doing Different Things
|
||||||
|
|
||||||
It is annoying when you get a huge patch from someone that is said to fix 511
|
It is annoying when you get a huge patch from someone that is said to fix 511
|
||||||
@@ -71,9 +96,9 @@ Separate Patches Doing Different Things
|
|||||||
Patch Against Recent Sources
|
Patch Against Recent Sources
|
||||||
|
|
||||||
Please try to get the latest available sources to make your patches
|
Please try to get the latest available sources to make your patches
|
||||||
against. It makes my life so much easier. The very best is if you get the
|
against. It makes the life of the developers so much easier. The very best is
|
||||||
most up-to-date sources from the CVS repository, but the latest release
|
if you get the most up-to-date sources from the CVS repository, but the
|
||||||
archive is quite OK as well!
|
latest release archive is quite OK as well!
|
||||||
|
|
||||||
Document
|
Document
|
||||||
|
|
||||||
@@ -82,18 +107,24 @@ Document
|
|||||||
small description of your fix or your new features with every contribution so
|
small description of your fix or your new features with every contribution so
|
||||||
that it can be swiftly added to the package documentation.
|
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
|
Write Access to CVS Repository
|
||||||
|
|
||||||
If you are a frequent contributor, or have another good reason, you can of
|
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
|
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
|
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.
|
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
|
Test Cases
|
||||||
|
|
||||||
Since the introduction of the test suite, we will get the possibility to
|
Since the introduction of the test suite, we can quickly verify that the main
|
||||||
quickly verify that the main features are working as supposed to. To maintain
|
features are working as they're supposed to. To maintain this situation and
|
||||||
this situation and improve it, all new features and functions that are added
|
improve it, all new features and functions that are added need to be tested
|
||||||
need tro be tested. Every feature that is added should get at least one valid
|
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
|
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!
|
post a few test cases, it won't end up as a heavy burden on a single person!
|
||||||
|
|||||||
477
docs/FAQ
477
docs/FAQ
@@ -1,4 +1,4 @@
|
|||||||
Updated: January 29, 2001 (http://curl.haxx.se/docs/faq.shtml)
|
Updated: November 12, 2002 (http://curl.haxx.se/docs/faq.html)
|
||||||
_ _ ____ _
|
_ _ ____ _
|
||||||
___| | | | _ \| |
|
___| | | | _ \| |
|
||||||
/ __| | | | |_) | |
|
/ __| | | | |_) | |
|
||||||
@@ -12,6 +12,10 @@ FAQ
|
|||||||
1.2 What is libcurl?
|
1.2 What is libcurl?
|
||||||
1.3 What is cURL not?
|
1.3 What is cURL not?
|
||||||
1.4 When will you make curl do XXXX ?
|
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. Install Related Problems
|
||||||
2.1 configure doesn't find OpenSSL even when it is installed
|
2.1 configure doesn't find OpenSSL even when it is installed
|
||||||
@@ -27,10 +31,15 @@ FAQ
|
|||||||
3.3 Why doesn't my posting using -F work?
|
3.3 Why doesn't my posting using -F work?
|
||||||
3.4 How do I tell curl to run custom FTP commands?
|
3.4 How do I tell curl to run custom FTP commands?
|
||||||
3.5 How can I disable the Pragma: nocache header?
|
3.5 How can I disable the Pragma: nocache header?
|
||||||
3.6 Does curl support javascript, ASP, XML, XHTML or HTML version Y?
|
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.7 Can I use curl to delete/rename a file through FTP?
|
||||||
3.8 How do I tell curl to follow HTTP redirects?
|
3.8 How do I tell curl to follow HTTP redirects?
|
||||||
3.9 How do I use curl in PHP?
|
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. Running Problems
|
||||||
4.1 Problems connecting to SSL servers.
|
4.1 Problems connecting to SSL servers.
|
||||||
@@ -43,18 +52,22 @@ FAQ
|
|||||||
4.5.3 "403 Forbidden"
|
4.5.3 "403 Forbidden"
|
||||||
4.5.4 "404 Not Found"
|
4.5.4 "404 Not Found"
|
||||||
4.5.5 "405 Method Not Allowed"
|
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.6 Can you tell me what error code 142 means?
|
||||||
4.7 How do I keep usernames and passwords secret in Curl command lines?
|
4.7 How do I keep user names and passwords secret in Curl command lines?
|
||||||
4.8 I found a bug!
|
4.8 I found a bug!
|
||||||
4.9 Curl can't authenticate to the server that requires NTLM?
|
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?
|
||||||
|
|
||||||
5. libcurl Issues
|
5. libcurl Issues
|
||||||
5.1 Is libcurl thread-safe?
|
5.1 Is libcurl thread-safe?
|
||||||
5.2 How can I receive all data into a large memory chunk?
|
5.2 How can I receive all data into a large memory chunk?
|
||||||
5.3 How do I fetch multiple files with libcurl?
|
5.3 How do I fetch multiple files with libcurl?
|
||||||
5.4 Does libcurl do Winsock initing on win32 systems?
|
5.4 Does libcurl do Winsock initing on win32 systems?
|
||||||
5.5 Does CURLOPT_FILE work on win32 ?
|
5.5 Does CURLOPT_FILE and CURLOPT_INFILE work on win32 ?
|
||||||
5.6 What about Keep-Alive or persistant connections?
|
5.6 What about Keep-Alive or persistent connections?
|
||||||
|
5.7 Link errors when building libcurl on Windows!
|
||||||
|
|
||||||
6. License Issues
|
6. License Issues
|
||||||
6.1 I have a GPL program, can I use the libcurl library?
|
6.1 I have a GPL program, can I use the libcurl library?
|
||||||
@@ -73,71 +86,135 @@ FAQ
|
|||||||
cURL (or simply just 'curl') is a command line tool for getting or sending
|
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
|
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
|
with URL spelled in uppercase to make it obvious it deals with URLs. The
|
||||||
fact it can also be pronounced 'see URL' also helped.
|
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
|
Curl supports a range of common Internet protocols, currently including
|
||||||
HTTP, HTTPS, FTP, GOPHER, LDAP, DICT, TELNET and FILE.
|
HTTP, HTTPS, FTP, FTPS, GOPHER, LDAP, DICT, TELNET and FILE.
|
||||||
|
|
||||||
We spell it cURL or just curl.
|
We spell it cURL or just curl. We pronounce it with an initial k sound:
|
||||||
|
[kurl].
|
||||||
|
|
||||||
1.2 What is libcurl?
|
1.2 What is libcurl?
|
||||||
|
|
||||||
libcurl is a reliable, higly portable multiprotocol file transfer library.
|
libcurl is a reliable and portable library which provides you with an easy
|
||||||
|
interface to a range of common Internet protocols.
|
||||||
|
|
||||||
Any application is free to use libcurl, even commercial or closed-source
|
You can use libcurl for free in your application even if it is commercial
|
||||||
ones.
|
or closed-source.
|
||||||
|
|
||||||
1.3 What is cURL not?
|
1.3 What is cURL not?
|
||||||
|
|
||||||
Curl is *not*, I repeat, *not* a wget clone even though that is a very
|
Curl is *not* a wget clone even though that is a very common misconception.
|
||||||
common misconception. Never, during curl's development, have I intended curl
|
Never, during curl's development, have we intended curl to replace wget or
|
||||||
to replace wget or compete on its market. Curl is targeted at single-shot
|
compete on its market. Curl is targeted at single-shot file transfers.
|
||||||
file transfers.
|
|
||||||
|
|
||||||
Curl is not a web site mirroring program. If you wanna use curl to mirror
|
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
|
something: fine, go ahead and write a script that wraps around curl to make
|
||||||
it reality (like curlmirror.pl does).
|
it reality (like curlmirror.pl does).
|
||||||
|
|
||||||
Curl is not an ftp site mirroring program. Sure, get and send ftp with curl
|
Curl is not an FTP site mirroring program. Sure, get and send FTP with curl
|
||||||
but if you want systematic and sequential behaviour you should write a
|
but if you want systematic and sequential behavior you should write a
|
||||||
script (or write a new program that interfaces libcurl) and do it.
|
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
|
Curl is not a PHP tool, even though it works perfectly well when used from
|
||||||
or with PHP.
|
or with PHP.
|
||||||
|
|
||||||
Curl is not a single-OS program. Curl exists, compiles, builds and runs
|
Curl is not a single-OS program. Curl exists, compiles, builds and runs
|
||||||
under a wide range of operating systems, including all modern Unixes,
|
under a wide range of operating systems, including all modern Unixes (and a
|
||||||
Windows, Amiga, BeOS, OS/2, OS X, QNX etc.
|
bunch of older ones too), Windows, Amiga, BeOS, OS/2, OS X, QNX etc.
|
||||||
|
|
||||||
1.4 When will you make curl do XXXX ?
|
1.4 When will you make curl do XXXX ?
|
||||||
|
|
||||||
I love suggestions of what to change in order to make curl and libcurl
|
We love suggestions of what to change in order to make curl and libcurl
|
||||||
better. I do however believe in a few rules when it comes to the future of
|
better. We do however believe in a few rules when it comes to the future of
|
||||||
curl:
|
curl:
|
||||||
|
|
||||||
* It is to remain a command line tool. If you want GUIs or fancy scripting
|
* Curl is to remain a command line tool. If you want GUIs or fancy scripting
|
||||||
capabilities, you're free to write another tool that uses libcurl and that
|
capabilities, you're free to write another tool that uses libcurl and that
|
||||||
offers this. There's no point in having one single tool that does every
|
offers this. There's no point in having a single tool that does every
|
||||||
imaginable thing. That's also one of the great advantages of having the
|
imaginable thing. That's also one of the great advantages of having the
|
||||||
core of curl as a library: libcurl.
|
core of curl as a library.
|
||||||
|
|
||||||
* I do not add things to curl that other small and available tools already
|
* 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
|
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.
|
program or redirect to another file for the next program to interpret.
|
||||||
|
|
||||||
* I focus on protocol related issues and improvements. If you wanna do more
|
* We focus on protocol related issues and improvements. If you wanna do more
|
||||||
magic with the supported protocols than curl currently does, chances are
|
magic with the supported protocols than curl currently does, chances are
|
||||||
big I will agree. If you wanna add more protocols, I may very well
|
big we will agree. If you wanna add more protocols, we may very well
|
||||||
agree.
|
agree.
|
||||||
|
|
||||||
* If you want me to make all the work while you wait for me to implement it
|
* If you want someone else to make all the work while you wait for us to
|
||||||
for you, that is not a very friendly attitude. I spend a considerable time
|
implement it for you, that is not a very friendly attitude. We spend a
|
||||||
already on maintaining and developing curl. In order to get more out of
|
considerable time already on maintaining and developing curl. In order to
|
||||||
me, I trust you will offer some of your time and efforts in return.
|
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
|
* If you write the code, chances are bigger that it will get into curl
|
||||||
faster.
|
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 and
|
||||||
|
the main mailing list, Haxx owns the curl web site's domain and
|
||||||
|
sourceforge.net hosts several project tools 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.
|
||||||
|
|
||||||
|
1.7 What about CURL from curl.com?
|
||||||
|
|
||||||
|
During the summer 2001, curl.com has been 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 attempt to 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. Install Related Problems
|
||||||
|
|
||||||
2.1. configure doesn't find OpenSSL even when it is installed
|
2.1. configure doesn't find OpenSSL even when it is installed
|
||||||
@@ -173,7 +250,7 @@ FAQ
|
|||||||
a few functions are left out from the libssl.
|
a few functions are left out from the libssl.
|
||||||
|
|
||||||
If the function names missing include RSA or RSAREF you can be certain
|
If the function names missing include RSA or RSAREF you can be certain
|
||||||
that this is because libssl requires the RSA and RSASEF libs to build.
|
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
|
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
|
configure. Make sure that you remove the config.cache file before you
|
||||||
@@ -181,26 +258,24 @@ FAQ
|
|||||||
|
|
||||||
2.2. Does curl work/build with other SSL libraries?
|
2.2. Does curl work/build with other SSL libraries?
|
||||||
|
|
||||||
Curl has been written to use OpenSSL, although I doubt there would be much
|
Curl has been written to use OpenSSL, although there should not be much
|
||||||
problems using a different library. I just don't know any other free one and
|
problems using a different library. If anyone does "port" curl to use a
|
||||||
that has limited my possibilities to develop against anything else.
|
different SSL library, we are of course very interested in getting the
|
||||||
|
patch!
|
||||||
If anyone does "port" curl to use a commercial SSL library, I am of course
|
|
||||||
very interested in getting the patch!
|
|
||||||
|
|
||||||
2.3. Where can I find a copy of LIBEAY32.DLL?
|
2.3. Where can I find a copy of LIBEAY32.DLL?
|
||||||
|
|
||||||
That is an OpenSSL binary built for Windows.
|
That is an OpenSSL binary built for Windows.
|
||||||
|
|
||||||
Curl uses OpenSSL to do the SSL stuff. The LIBEAY32.DLL is what curl needs
|
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 page to find
|
on a windows machine to do https://. Check out the curl web site to find
|
||||||
accurate and up-to-date pointers to recent OpenSSL DDLs and other binary
|
accurate and up-to-date pointers to recent OpenSSL DLLs and other binary
|
||||||
packages.
|
packages.
|
||||||
|
|
||||||
2.4. Does cURL support Socks (RFC 1928) ?
|
2.4. Does cURL support Socks (RFC 1928) ?
|
||||||
|
|
||||||
No. Nobody has wanted it that badly yet. I would appriciate patches that
|
No. Nobody has wanted it that badly yet. We appreciate patches that bring
|
||||||
brings this functionality.
|
this functionality.
|
||||||
|
|
||||||
|
|
||||||
3. Usage problems
|
3. Usage problems
|
||||||
@@ -222,7 +297,7 @@ FAQ
|
|||||||
|
|
||||||
3.2. How do I tell curl to resume a transfer?
|
3.2. How do I tell curl to resume a transfer?
|
||||||
|
|
||||||
Curl supports resume both ways on FTP, download ways on HTTP.
|
Curl supports resumed transfers both ways on both FTP and HTTP.
|
||||||
|
|
||||||
Try the -C option.
|
Try the -C option.
|
||||||
|
|
||||||
@@ -230,14 +305,15 @@ FAQ
|
|||||||
|
|
||||||
You can't simply use -F or -d at your choice. The web server that will
|
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
|
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
|
"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
|
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'.
|
causes a posting with the type 'application/x-www-form-urlencoded'.
|
||||||
|
|
||||||
I have described this in some detail in the README.curl file, and if you
|
This is described in some detail in the MANUAL and TheArtOfHttpScripting
|
||||||
don't understand it the first time, read it again before you post questions
|
documents, and if you don't understand it the first time, read it again
|
||||||
about this to the mailing list. I would also suggest that you read through
|
before you post questions about this to the mailing list. Also, try reading
|
||||||
the mailing list archives for old postings and questions regarding this.
|
through the mailing list archives for old postings and questions regarding
|
||||||
|
this.
|
||||||
|
|
||||||
3.4. How do I tell curl to run custom FTP commands?
|
3.4. How do I tell curl to run custom FTP commands?
|
||||||
|
|
||||||
@@ -245,7 +321,7 @@ FAQ
|
|||||||
file transfer. Study the -Q/--quote option.
|
file transfer. Study the -Q/--quote option.
|
||||||
|
|
||||||
Since curl is used for file transfers, you don't use curl to just perform
|
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
|
FTP commands without transferring anything. Therefore you must always specify
|
||||||
a URL to transfer to/from even when doing custom FTP commands.
|
a URL to transfer to/from even when doing custom FTP commands.
|
||||||
|
|
||||||
3.5. How can I disable the Pragma: nocache header?
|
3.5. How can I disable the Pragma: nocache header?
|
||||||
@@ -254,20 +330,18 @@ FAQ
|
|||||||
the -H/--header option. By adding a header with empty contents you safely
|
the -H/--header option. By adding a header with empty contents you safely
|
||||||
disable that one. Use -H "Pragma:" to disable that specific header.
|
disable that one. Use -H "Pragma:" to disable that specific header.
|
||||||
|
|
||||||
3.6. Does curl support javascript, ASP, XML, XHTML or HTML version Y?
|
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
|
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
|
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
|
HTML-files. There's no difference to curl and it doesn't even know what kind
|
||||||
of language that generated the page.
|
of language that generated the page.
|
||||||
|
|
||||||
Javascript is slightly different since that is code embedded in the HTML
|
See also item 3.14 regarding javascript.
|
||||||
that is sent for the client to interpret and curl has no javascript
|
|
||||||
interpreter.
|
|
||||||
|
|
||||||
3.7. Can I use curl to delete/rename a file through FTP?
|
3.7. Can I use curl to delete/rename a file through FTP?
|
||||||
|
|
||||||
Yes. You specify custom ftp commands with -Q/--quote.
|
Yes. You specify custom FTP commands with -Q/--quote.
|
||||||
|
|
||||||
One example would be to delete a file after you have downloaded it:
|
One example would be to delete a file after you have downloaded it:
|
||||||
|
|
||||||
@@ -281,26 +355,106 @@ FAQ
|
|||||||
|
|
||||||
curl -L http://redirector.com
|
curl -L http://redirector.com
|
||||||
|
|
||||||
3.9 How do I use curl in PHP?
|
3.9 How do I use curl in my favorite programming language?
|
||||||
|
|
||||||
PHP4 has the ability to use libcurl as an internal module if built with that
|
There exist many language interfaces/bindings for curl that integrates it
|
||||||
option enabled. You then get a set of extra functions that can be used
|
better with various languages. If you are fluid in a script language, you
|
||||||
within your PHP programs. You find all details about those functions in the
|
may very well opt to use such an interface instead of using the command line
|
||||||
curl section in the PHP manual, see the online version at:
|
tool.
|
||||||
|
|
||||||
http://www.php.net/manual/ref.curl.php
|
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 December 2001, there are interfaces available for the following
|
||||||
|
languages: C/C++, Cocoa, Dylan, Java, Perl, PHP, 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 or PHP's curl modules is 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.
|
||||||
|
|
||||||
PHP also offers the option to run a command line, and then you can of course
|
|
||||||
invoke the curl tool using a command line. This is the way to use curl if
|
|
||||||
you're using PHP3 or PHP4 built without curl module support.
|
|
||||||
|
|
||||||
4. Running Problems
|
4. Running Problems
|
||||||
|
|
||||||
4.1. Problems connecting to SSL servers.
|
4.1. Problems connecting to SSL servers.
|
||||||
|
|
||||||
It took a very long time before I could sort out why curl had problems
|
It took a very long time before we could sort out why curl had problems to
|
||||||
to connect to certain SSL servers when using SSLeay or OpenSSL v0.9+.
|
connect to certain SSL servers when using SSLeay or OpenSSL v0.9+. The
|
||||||
The error sometimes showed up similar to:
|
error sometimes showed up similar to:
|
||||||
|
|
||||||
16570:error:1407D071:SSL routines:SSL2_READ:bad mac decode:s2_pkt.c:233:
|
16570:error:1407D071:SSL routines:SSL2_READ:bad mac decode:s2_pkt.c:233:
|
||||||
|
|
||||||
@@ -308,25 +462,26 @@ FAQ
|
|||||||
requests properly. To correct this problem, tell curl to select SSLv2 from
|
requests properly. To correct this problem, tell curl to select SSLv2 from
|
||||||
the command line (-2/--sslv2).
|
the command line (-2/--sslv2).
|
||||||
|
|
||||||
I have also seen examples where the remote server didn't like the 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.
|
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?
|
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
|
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
|
runs the specified command in the background. To safely send the & as a part
|
||||||
of a URL, you should qoute the entire URL by using single (') or double (")
|
of a URL, you should quote the entire URL by using single (') or double (")
|
||||||
quotes around it.
|
quotes around it.
|
||||||
|
|
||||||
An example that would invoke a remote CGI that uses &-letters could be:
|
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'
|
curl 'http://www.altavista.com/cgi-bin/query?text=yes&q=curl'
|
||||||
|
|
||||||
In win32, the standard DOS shell treats the %-letter specially and you may
|
In Windows, the standard DOS shell treats the %-letter specially and you
|
||||||
need to quote the string properly when % is used in it.
|
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
|
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'.
|
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?
|
4.3. How can I use {, }, [ or ] to specify multiple URLs?
|
||||||
|
|
||||||
@@ -338,8 +493,8 @@ FAQ
|
|||||||
curl '{curl,www}.haxx.se'
|
curl '{curl,www}.haxx.se'
|
||||||
|
|
||||||
To be able to use those letters as actual parts of the URL (without using
|
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
|
them for the curl URL "globbing" system), use the -g/--globoff option (curl
|
||||||
(included in curl 7.6 and later):
|
7.6 and later):
|
||||||
|
|
||||||
curl -g 'www.site.com/weirdname[].html'
|
curl -g 'www.site.com/weirdname[].html'
|
||||||
|
|
||||||
@@ -355,8 +510,8 @@ FAQ
|
|||||||
|
|
||||||
4.5 Why do I get return code XXX from a HTTP server?
|
4.5 Why do I get return code XXX from a HTTP server?
|
||||||
|
|
||||||
RFC2616 clearly explains the return codes. I'll make a short transcript
|
RFC2616 clearly explains the return codes. This is a short transcript. Go
|
||||||
here. Go read the RFC for exact details:
|
read the RFC for exact details:
|
||||||
|
|
||||||
4.5.1 "400 Bad Request"
|
4.5.1 "400 Bad Request"
|
||||||
|
|
||||||
@@ -383,20 +538,31 @@ FAQ
|
|||||||
identified by the Request-URI. The response MUST include an Allow header
|
identified by the Request-URI. The response MUST include an Allow header
|
||||||
containing a list of valid methods for the requested resource.
|
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?
|
4.6. Can you tell me what error code 142 means?
|
||||||
|
|
||||||
All error codes that are larger than the highest documented error code means
|
All error codes that are larger than the highest documented error code means
|
||||||
that curl has existed due to a timeout. There was no nice way for curl to
|
that curl has exited due to a crash. This is a serious error, and we
|
||||||
abort from such a condition and that's why it got this undocumented
|
appreciate a detailed bug report from you that describes how we could go
|
||||||
error. This should not occur in releases after 7.4.1.
|
ahead and repeat this!
|
||||||
|
|
||||||
4.7. How do I keep usernames and passwords secret in Curl command lines?
|
4.7. How do I keep user names and passwords secret in Curl command lines?
|
||||||
|
|
||||||
I see this problem as two parts:
|
This problem has two sides:
|
||||||
|
|
||||||
The first part is to avoid having clear-text passwords in the command line
|
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
|
so that they don't appear in 'ps' outputs and similar. That is easily
|
||||||
avoided by using the "-K" option tho tell curl to read parameters from a
|
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.
|
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
|
To keep the passwords in your account secret from the rest of the world is
|
||||||
@@ -406,27 +572,40 @@ FAQ
|
|||||||
|
|
||||||
Also note that regular HTTP and FTP passwords are sent in clear across the
|
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.
|
network. All it takes for anyone to fetch them is to listen on the network.
|
||||||
Evesdropping is very easy.
|
Eavesdropping is very easy.
|
||||||
|
|
||||||
4.8 I found a bug!
|
4.8 I found a bug!
|
||||||
|
|
||||||
It is not a bug if the behaviour is documented. Read the docs first.
|
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
|
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
|
particular platform, try contacting the person who built the package/archive
|
||||||
you have.
|
you have.
|
||||||
|
|
||||||
If there is a bug, post a bug report in the Curl Bug Track System over at
|
If there is a bug, read the BUGS document first. Then report it as described
|
||||||
http://sourceforge.net/bugs/?group_id=976
|
in there.
|
||||||
|
|
||||||
Always include as many details you can think of, including curl version,
|
|
||||||
operating system name and version and complete instructions how to repeat
|
|
||||||
the bug.
|
|
||||||
|
|
||||||
4.9. Curl can't authenticate to the server that requires NTLM?
|
4.9. Curl can't authenticate to the server that requires NTLM?
|
||||||
|
|
||||||
NTLM is a Microsoft proprietary protocol. Unfortunately, curl does not
|
NTLM is a Microsoft proprietary protocol. Unfortunately, curl does not
|
||||||
currently support that.
|
currently support that. 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.
|
||||||
|
|
||||||
5. libcurl Issues
|
5. libcurl Issues
|
||||||
|
|
||||||
@@ -438,15 +617,16 @@ FAQ
|
|||||||
programs. libcurl will use thread-safe functions instead of non-safe ones if
|
programs. libcurl will use thread-safe functions instead of non-safe ones if
|
||||||
your system has such.
|
your system has such.
|
||||||
|
|
||||||
I am very interested in once and for all getting some kind of report or
|
We would appreciate some kind of report or README file from those who have
|
||||||
README file from those who have used libcurl in a threaded environment,
|
used libcurl in a threaded environment.
|
||||||
since I haven't and I get this question more and more frequently!
|
|
||||||
|
|
||||||
5.2 How can I receive all data into a large memory chunk?
|
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
|
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
|
there is data received from the remote server. You can make that callback do
|
||||||
whatever you want. You do not have to write the receivied data to a file.
|
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
|
One solution to this problem could be to have a pointer to a struct that you
|
||||||
pass to the callback function. You set the pointer using the
|
pass to the callback function. You set the pointer using the
|
||||||
@@ -477,48 +657,60 @@ FAQ
|
|||||||
|
|
||||||
5.3 How do I fetch multiple files with libcurl?
|
5.3 How do I fetch multiple files with libcurl?
|
||||||
|
|
||||||
The easy interface of libcurl does not support multiple requests using the
|
Starting with version 7.7, curl and libcurl will have excellent support for
|
||||||
same connection. The only available way to do multiple requests is to
|
transferring multiple files. You should just repeatedly set new URLs with
|
||||||
init/perform/cleanup for each request.
|
curl_easy_setopt() and then transfer it with curl_easy_perform(). The handle
|
||||||
|
you get from curl_easy_init() is not only reusable starting with libcurl
|
||||||
|
7.7, but also you're encouraged to reuse it if you can, as that will enable
|
||||||
|
libcurl to use persistent connections.
|
||||||
|
|
||||||
5.4 Does libcurl do Winsock initing on win32 systems?
|
For libcurl prior to 7.7, there was no multiple file support. The only
|
||||||
|
available way to do multiple requests was to init/perform/cleanup for each
|
||||||
|
transfer.
|
||||||
|
|
||||||
No.
|
5.4 Does libcurl do Winsock initialization on win32 systems?
|
||||||
|
|
||||||
On win32 systems, you need to init the winsock stuff manually, libcurl will
|
Yes (since 7.8.1) if told to in the curl_global_init() call.
|
||||||
not do that for you. WSAStartup() and WSACleanup() should be used
|
|
||||||
accordingly. The reason for this is of course that a single application may
|
|
||||||
use several different libraries and parts, and there's no reason for every
|
|
||||||
single library to do this.
|
|
||||||
|
|
||||||
5.5 Does CURLOPT_FILE work on win32 ?
|
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
|
Yes, but you cannot open a FILE * and pass the pointer to a DLL and have
|
||||||
that DLL use the FILE *. You must use CURLOPT_WRITEFUNCTION as well to set a
|
that DLL use the FILE *. If you set CURLOPT_FILE you must also use
|
||||||
function that writes the file, even if that simply writes the data to the
|
CURLOPT_WRITEFUNCTION as well to set a function that writes the file, even
|
||||||
specified FILE*.
|
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)
|
(Provided by Joel DeYoung and Bob Schader)
|
||||||
|
|
||||||
5.6 What about Keep-Alive or persistant connections?
|
5.6 What about Keep-Alive or persistent connections?
|
||||||
|
|
||||||
This is closely related to issue 5.3. Since libcurl has no real support
|
Starting with version 7.7, curl and libcurl will have excellent support for
|
||||||
for doing multiple file transfers, there's no support for Keep-Alive or
|
persistent connections when transferring several files from the same server.
|
||||||
persistant connections either.
|
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.
|
||||||
|
|
||||||
|
Previous versions had no persistent connection support.
|
||||||
|
|
||||||
|
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)
|
||||||
|
|
||||||
This is of course subject to change as soon as libcurl gets support for
|
|
||||||
multiple files. Feel free to join in and make this change happen sooner!
|
|
||||||
|
|
||||||
6. License Issues
|
6. License Issues
|
||||||
|
|
||||||
NOTE: This section is now updated to concern curl 7.5.2 or later!
|
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
|
||||||
Curl and libcurl are released under a MIT/X derivate license *or* the MPL,
|
is just a brief summary for the cases we get the most questions. (Parts of
|
||||||
the Mozilla Public License. To get a really good answer to your license
|
this section was much enhanced by Bjorn Reese.)
|
||||||
conflict questions, you should study the MPL and MIT/X licenses and the
|
|
||||||
license you are about to use and check for clashes yourself. 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?
|
6.1. I have a GPL program, can I use the libcurl library?
|
||||||
|
|
||||||
@@ -529,27 +721,25 @@ FAQ
|
|||||||
|
|
||||||
6.2. I have a closed-source program, can I use the libcurl library?
|
6.2. I have a closed-source program, can I use the libcurl library?
|
||||||
|
|
||||||
Yes.
|
Yes!
|
||||||
|
|
||||||
libcurl does not put any restrictions on the program that uses the
|
libcurl does not put any restrictions on the program that uses the library.
|
||||||
library.
|
|
||||||
|
|
||||||
6.3. I have a BSD licensed program, can I use the libcurl library?
|
6.3. I have a BSD licensed program, can I use the libcurl library?
|
||||||
|
|
||||||
Yes.
|
Yes!
|
||||||
|
|
||||||
libcurl does not put any restrictions on the program that uses the
|
libcurl does not put any restrictions on the program that uses the library.
|
||||||
library.
|
|
||||||
|
|
||||||
6.4. I have a program that uses LGPL libraries, can I use libcurl?
|
6.4. I have a program that uses LGPL libraries, can I use libcurl?
|
||||||
|
|
||||||
Yes.
|
Yes!
|
||||||
|
|
||||||
The LGPL license don't clash with other licenses.
|
The LGPL license doesn't clash with other licenses.
|
||||||
|
|
||||||
6.5. Can I modify curl/libcurl for my program and keep the changes secret?
|
6.5. Can I modify curl/libcurl for my program and keep the changes secret?
|
||||||
|
|
||||||
Yes.
|
Yes!
|
||||||
|
|
||||||
The MIT/X derivate license practically allows you to do almost anything with
|
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
|
the sources, on the condition that the copyright texts in the sources are
|
||||||
@@ -557,9 +747,12 @@ FAQ
|
|||||||
|
|
||||||
6.6. Can you please change the curl/libcurl license to XXXX?
|
6.6. Can you please change the curl/libcurl license to XXXX?
|
||||||
|
|
||||||
No. We carefully picked this license years ago and a large amount of people
|
No.
|
||||||
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
|
We have carefully picked this license after years of development and
|
||||||
not spread to other programs or libraries that use it. The recent dual
|
discussions and a large amount of people have contributed with source code
|
||||||
license modification should make it possible for everyone to use libcurl or
|
knowing that this is the license we use. This license puts the restrictions
|
||||||
curl in their projects, no matter what license they already have in use.
|
we want on curl/libcurl and it does not spread to other programs or
|
||||||
|
libraries that use it. The recent dual license modification should make it
|
||||||
|
possible for everyone to use libcurl or curl in their projects, no matter
|
||||||
|
what license they already have in use.
|
||||||
|
|||||||
@@ -17,18 +17,21 @@ Misc
|
|||||||
- progress bar/time specs while downloading
|
- progress bar/time specs while downloading
|
||||||
- "standard" proxy environment variables support
|
- "standard" proxy environment variables support
|
||||||
- config file support
|
- config file support
|
||||||
- compiles on win32
|
- compiles on win32 (reported built on 29 operating systems)
|
||||||
- redirectable stderr
|
- redirectable stderr
|
||||||
- use selected network interface for outgoing traffic
|
- use selected network interface for outgoing traffic
|
||||||
|
- IPv6 support
|
||||||
|
- persistant connections
|
||||||
|
|
||||||
HTTP
|
HTTP
|
||||||
|
- HTTP/1.1 compliant
|
||||||
- GET
|
- GET
|
||||||
- PUT
|
- PUT
|
||||||
- HEAD
|
- HEAD
|
||||||
- POST
|
- POST
|
||||||
- multipart POST
|
- multipart POST
|
||||||
- authentication
|
- authentication
|
||||||
- resume
|
- resume (both GET and PUT)
|
||||||
- follow redirects
|
- follow redirects
|
||||||
- maximum amount of redirects to follow
|
- maximum amount of redirects to follow
|
||||||
- custom HTTP request
|
- custom HTTP request
|
||||||
@@ -53,7 +56,7 @@ FTP
|
|||||||
- download
|
- download
|
||||||
- authentication
|
- authentication
|
||||||
- kerberos security
|
- kerberos security
|
||||||
- PORT or PASV
|
- active/passive using PORT, EPRT, PASV or EPSV
|
||||||
- single file size information (compare to HTTP HEAD)
|
- single file size information (compare to HTTP HEAD)
|
||||||
- 'type=' URL support
|
- 'type=' URL support
|
||||||
- dir listing
|
- dir listing
|
||||||
@@ -71,6 +74,7 @@ FTP
|
|||||||
|
|
||||||
TELNET
|
TELNET
|
||||||
- connection negotiation
|
- connection negotiation
|
||||||
|
- custom telnet options
|
||||||
- stdin/stdout I/O
|
- stdin/stdout I/O
|
||||||
|
|
||||||
LDAP (*2)
|
LDAP (*2)
|
||||||
|
|||||||
113
docs/HISTORY
Normal file
113
docs/HISTORY
Normal file
@@ -0,0 +1,113 @@
|
|||||||
|
_ _ ____ _
|
||||||
|
___| | | | _ \| |
|
||||||
|
/ __| | | | |_) | |
|
||||||
|
| (__| |_| | _ <| |___
|
||||||
|
\___|\___/|_| \_\_____|
|
||||||
|
|
||||||
|
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 daily.
|
||||||
|
|
||||||
|
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 daily.
|
||||||
|
|
||||||
|
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 daily. 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 daily. 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.
|
||||||
339
docs/INSTALL
339
docs/INSTALL
@@ -6,26 +6,37 @@
|
|||||||
|
|
||||||
How To Compile
|
How To Compile
|
||||||
|
|
||||||
Curl has been compiled and built on numerous different operating systems. The
|
Curl has been compiled and built on numerous different operating systems.
|
||||||
way to proceed is mainly divided 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
|
Most systems build curl the same way (unix-style). Continue reading below for
|
||||||
the Win32 or OS/2 headers further down. All other systems should be capable of
|
more details if you're one of them.
|
||||||
being installed as described below.
|
|
||||||
|
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
|
UNIX
|
||||||
====
|
====
|
||||||
|
|
||||||
The configure script *always* tries to find a working SSL library unless
|
A normal unix installation is made in three or four steps (after you've
|
||||||
explicitly told not to. If you have OpenSSL installed in the default
|
unpacked the source archive):
|
||||||
search path for your compiler/linker, you don't need to do anything
|
|
||||||
special:
|
|
||||||
|
|
||||||
./configure
|
./configure
|
||||||
|
make
|
||||||
|
make test (optional)
|
||||||
|
make install
|
||||||
|
|
||||||
If you have OpenSSL installed in /usr/local/ssl, you can run configure
|
You probably need to be root when doing the last command.
|
||||||
like:
|
|
||||||
|
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
|
||||||
|
|
||||||
|
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
|
./configure --with-ssl
|
||||||
|
|
||||||
@@ -34,13 +45,13 @@ UNIX
|
|||||||
|
|
||||||
./configure --with-ssl=/opt/OpenSSL
|
./configure --with-ssl=/opt/OpenSSL
|
||||||
|
|
||||||
If you insist on forcing a build *without* SSL support, even though you may
|
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:
|
have OpenSSL installed in your system, you can run configure like this:
|
||||||
|
|
||||||
./configure --without-ssl
|
./configure --without-ssl
|
||||||
|
|
||||||
If you have OpenSSL installed, but with the libraries in one place and the
|
If you have OpenSSL installed, but with the libraries in one place and the
|
||||||
header files somewhere else, you'll have to set the LDFLAGS and CPPFLAGS
|
header files somewhere else, you have to set the LDFLAGS and CPPFLAGS
|
||||||
environment variables prior to running configure. Something like this
|
environment variables prior to running configure. Something like this
|
||||||
should work:
|
should work:
|
||||||
|
|
||||||
@@ -54,39 +65,18 @@ UNIX
|
|||||||
env CPPFLAGS="-I/path/to/ssl/include" LDFLAGS="-L/path/to/ssl/lib" \
|
env CPPFLAGS="-I/path/to/ssl/include" LDFLAGS="-L/path/to/ssl/lib" \
|
||||||
./configure
|
./configure
|
||||||
|
|
||||||
If your SSL library was compiled with rsaref (usually for use in
|
If your SSL library was compiled with rsaref (usually for use in the United
|
||||||
the United States), you may also need to set:
|
States), you may also need to set:
|
||||||
|
|
||||||
LIBS=-lRSAglue -lrsaref
|
LIBS=-lRSAglue -lrsaref
|
||||||
(from Doug Kaufman <dkaufman@rahul.net>)
|
(as suggested by Doug Kaufman)
|
||||||
|
|
||||||
Without SSL support, just run:
|
KNOWN PROBLEMS (these ones should not happen anymore)
|
||||||
|
|
||||||
./configure
|
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
|
||||||
Then run:
|
commands (note that this requires curl to be built staticly): (from Ralph
|
||||||
|
Beckmann)
|
||||||
make
|
|
||||||
|
|
||||||
Use the executable `curl` in src/ directory.
|
|
||||||
|
|
||||||
To install curl on your system, run
|
|
||||||
|
|
||||||
make install
|
|
||||||
|
|
||||||
This will copy curl to /usr/local/bin/ (or $prefix/bin if you used the
|
|
||||||
--prefix option to configure) and it copies the man pages, the lib and the
|
|
||||||
include files to suitable places.
|
|
||||||
|
|
||||||
To make sure everything runs as supposed, run the test suite:
|
|
||||||
|
|
||||||
make test
|
|
||||||
|
|
||||||
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)
|
|
||||||
|
|
||||||
./configure [...]
|
./configure [...]
|
||||||
cd lib; make; cd ..
|
cd lib; make; cd ..
|
||||||
@@ -108,10 +98,10 @@ UNIX
|
|||||||
they're executable and set to appear in the path *BEFORE* the actual (but
|
they're executable and set to appear in the path *BEFORE* the actual (but
|
||||||
obsolete) autoconf and autoheader scripts.
|
obsolete) autoconf and autoheader scripts.
|
||||||
|
|
||||||
OPTIONS
|
MORE OPTIONS
|
||||||
|
|
||||||
Remember, to force configure to use the standard cc compiler if both
|
To force configure to use the standard cc compiler if both cc and gcc are
|
||||||
cc and gcc are present, run configure like
|
present, run configure like
|
||||||
|
|
||||||
CC=cc ./configure
|
CC=cc ./configure
|
||||||
or
|
or
|
||||||
@@ -139,6 +129,9 @@ UNIX
|
|||||||
|
|
||||||
./configure --with-krb4=/usr/athena
|
./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
|
Win32
|
||||||
=====
|
=====
|
||||||
|
|
||||||
@@ -147,29 +140,27 @@ Win32
|
|||||||
MingW32 (GCC-2.95) style
|
MingW32 (GCC-2.95) style
|
||||||
------------------------
|
------------------------
|
||||||
Run the 'mingw32.bat' file to get the proper environment variables
|
Run the 'mingw32.bat' file to get the proper environment variables
|
||||||
set, then run 'make -f Makefile.m32' in the lib/ dir and then
|
set, then run 'make mingw32' in the root dir.
|
||||||
'make -f Makefile.m32' in the src/ dir.
|
|
||||||
|
|
||||||
If you have any problems linking libraries or finding header files,
|
If you have any problems linking libraries or finding header files, be
|
||||||
be sure to look at the provided "Makefile.m32" files for the proper
|
sure to verify that the provided "Makefile.m32" files use the proper
|
||||||
paths, and adjust as necessary.
|
paths, and adjust as necessary.
|
||||||
|
|
||||||
Cygwin style
|
Cygwin style
|
||||||
------------
|
------------
|
||||||
Almost identical to the unix installation. Run the configure script
|
Almost identical to the unix installation. Run the configure script in
|
||||||
in the curl root with 'sh configure'. Make sure you have the sh
|
the curl root with 'sh configure'. Make sure you have the sh
|
||||||
executable in /bin/ or you'll see the configure fail towards the
|
executable in /bin/ or you'll see the configure fail towards the end.
|
||||||
end.
|
|
||||||
|
|
||||||
Run 'make'
|
Run 'make'
|
||||||
|
|
||||||
Microsoft command line style
|
Microsoft command line style
|
||||||
----------------------------
|
----------------------------
|
||||||
Run the 'vcvars32.bat' file to get the proper environment variables
|
Run the 'vcvars32.bat' file to get the proper environment variables
|
||||||
set, then run 'nmake -f Makefile.vc6' in the lib/ dir and then
|
set, then run 'nmake vc' in the root dir.
|
||||||
'nmake -f Makefile.vc6' in the src/ dir.
|
|
||||||
|
|
||||||
The vcvars32.bat file is part of the Microsoft development environment.
|
The vcvars32.bat file is part of the Microsoft development
|
||||||
|
environment.
|
||||||
|
|
||||||
IDE-style
|
IDE-style
|
||||||
-------------------------
|
-------------------------
|
||||||
@@ -180,16 +171,16 @@ Win32
|
|||||||
Make the sources in the src/ drawer be a "win32 console application"
|
Make the sources in the src/ drawer be a "win32 console application"
|
||||||
project. Name it curl.
|
project. Name it curl.
|
||||||
|
|
||||||
With VC++, add 'wsock32.lib' to the link libs when you build 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
|
Borland seems to do that itself magically. Of course you have to make
|
||||||
make sure it links with the libcurl too!
|
sure it links with the libcurl too!
|
||||||
|
|
||||||
For VC++ 6, there's an included Makefile.vc6 that should be possible
|
For VC++ 6, there's an included Makefile.vc6 that should be possible
|
||||||
to use out-of-the-box.
|
to use out-of-the-box.
|
||||||
|
|
||||||
Microsoft note: add /Zm200 to the compiler options, as the hugehelp.c
|
Microsoft note: add /Zm200 to the compiler options to increase the
|
||||||
won't compile otherwise due to "too long puts string" or something
|
compiler's memory allocation limit, as the hugehelp.c won't compile
|
||||||
like that!
|
due to "too long puts string".
|
||||||
|
|
||||||
|
|
||||||
With SSL:
|
With SSL:
|
||||||
@@ -197,26 +188,47 @@ Win32
|
|||||||
MingW32 (GCC-2.95) style
|
MingW32 (GCC-2.95) style
|
||||||
------------------------
|
------------------------
|
||||||
Run the 'mingw32.bat' file to get the proper environment variables
|
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
|
set, then run 'make mingw32-ssl' in the root dir.
|
||||||
'make -f Makefile.m32 SSL=1' in the src/ dir.
|
|
||||||
|
|
||||||
If you have any problems linking libraries or finding header files,
|
If you have any problems linking libraries or finding header files, be
|
||||||
be sure to look at the provided "Makefile.m32" files for the proper
|
sure to look at the provided "Makefile.m32" files for the proper
|
||||||
paths, and adjust as necessary.
|
paths, and adjust as necessary.
|
||||||
|
|
||||||
Cygwin style
|
Cygwin style
|
||||||
------------
|
------------
|
||||||
|
|
||||||
Haven't done, nor got any reports on how to do. It should although be
|
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.
|
identical to the unix setup for the same purpose. See above.
|
||||||
|
|
||||||
Microsoft command line style
|
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.
|
|
||||||
|
|
||||||
The vcvars32.bat file is part of the Microsoft development environment.
|
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.6b
|
||||||
|
|
||||||
|
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
|
Microsoft / Borland style
|
||||||
-------------------------
|
-------------------------
|
||||||
@@ -224,6 +236,30 @@ Win32
|
|||||||
project properties to use the SSL include path, link with the SSL libs
|
project properties to use the SSL include path, link with the SSL libs
|
||||||
and define the USE_SSLEAY symbol.
|
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
|
IBM OS/2
|
||||||
========
|
========
|
||||||
@@ -243,7 +279,7 @@ IBM OS/2
|
|||||||
If you want to build with OpenSSL or OpenLDAP support, you'll need to
|
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
|
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
|
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
|
find his patches on: http://come.to/Dirk_Ohme
|
||||||
|
|
||||||
If during the linking you get an error about _errno being an undefined
|
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__
|
symbol referenced from the text segment, you need to add -D__ST_MT_ERRNO__
|
||||||
@@ -255,29 +291,166 @@ IBM OS/2
|
|||||||
If you're getting huge binaries, probably your makefiles have the -g in
|
If you're getting huge binaries, probably your makefiles have the -g in
|
||||||
CFLAGS.
|
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.
|
||||||
|
|
||||||
PORTS
|
PORTS
|
||||||
=====
|
=====
|
||||||
Just to show off, this is a probably incomplete list of known hardware and
|
This is a probably incomplete list of known hardware and operating systems
|
||||||
operating systems that curl has been compiled for:
|
that curl has been compiled for. If you know a system curl compiles and
|
||||||
|
runs on, that isn't listed, please let us know!
|
||||||
|
|
||||||
- Ultrix
|
|
||||||
- SINIX-Z v5
|
|
||||||
- Alpha DEC OSF 4
|
- Alpha DEC OSF 4
|
||||||
- Alpha Digital UNIX v3.2
|
- Alpha Digital UNIX v3.2
|
||||||
- Alpha FreeBSD 4.1
|
- Alpha FreeBSD 4.1, 4.5
|
||||||
- Alpha Linux 2.2.16
|
- 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
|
- Alpha Tru64 v5.0 5.1
|
||||||
- HP-PA HP-UX 9.X 10.X 11.X
|
- HP-PA HP-UX 9.X 10.X 11.X
|
||||||
|
- HP-PA Linux
|
||||||
- MIPS IRIX 6.2, 6.5
|
- MIPS IRIX 6.2, 6.5
|
||||||
- Power AIX 4.2, 4.3.1, 4.3.2
|
- MIPS Linux
|
||||||
|
- Pocket PC/Win CE 3.0
|
||||||
|
- Power AIX 4.2, 4.3.1, 4.3.2, 5.1
|
||||||
- PowerPC Darwin 1.0
|
- PowerPC Darwin 1.0
|
||||||
- PowerPC Linux
|
- PowerPC Linux
|
||||||
|
- PowerPC Mac OS 9
|
||||||
- PowerPC Mac OS X
|
- PowerPC Mac OS X
|
||||||
|
- SINIX-Z v5
|
||||||
- Sparc Linux
|
- Sparc Linux
|
||||||
- Sparc Solaris 2.4, 2.5, 2.5.1, 2.6, 7, 8
|
- Sparc Solaris 2.4, 2.5, 2.5.1, 2.6, 7, 8
|
||||||
- Sparc SunOS 4.1.X
|
- 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 BeOS
|
||||||
- i386 FreeBSD
|
- i386 FreeBSD
|
||||||
|
- i386 HURD
|
||||||
- i386 Linux 1.3, 2.0, 2.2, 2.3, 2.4
|
- i386 Linux 1.3, 2.0, 2.2, 2.3, 2.4
|
||||||
- i386 NetBSD
|
- i386 NetBSD
|
||||||
- i386 OS/2
|
- i386 OS/2
|
||||||
@@ -285,10 +458,12 @@ PORTS
|
|||||||
- i386 SCO unix
|
- i386 SCO unix
|
||||||
- i386 Solaris 2.7
|
- i386 Solaris 2.7
|
||||||
- i386 Windows 95, 98, ME, NT, 2000
|
- i386 Windows 95, 98, ME, NT, 2000
|
||||||
|
- i386 QNX 6
|
||||||
- ia64 Linux 2.3.99
|
- ia64 Linux 2.3.99
|
||||||
- m68k AmigaOS 3
|
- m68k AmigaOS 3
|
||||||
|
- m68k Linux
|
||||||
- m68k OpenBSD
|
- m68k OpenBSD
|
||||||
- StrongARM NetBSD 1.4.1
|
- s390 Linux
|
||||||
|
|
||||||
OpenSSL
|
OpenSSL
|
||||||
=======
|
=======
|
||||||
|
|||||||
219
docs/INTERNALS
219
docs/INTERNALS
@@ -1,4 +1,4 @@
|
|||||||
Updated for curl 7.6 on January 26, 2001
|
Updated for curl 7.9.1 on November 2, 2001
|
||||||
_ _ ____ _
|
_ _ ____ _
|
||||||
___| | | | _ \| |
|
___| | | | _ \| |
|
||||||
/ __| | | | |_) | |
|
/ __| | | | |_) | |
|
||||||
@@ -7,11 +7,11 @@
|
|||||||
|
|
||||||
INTERNALS
|
INTERNALS
|
||||||
|
|
||||||
The project is kind of split in two. The library and the client. The client
|
The project is split in two. The library and the client. The client part uses
|
||||||
part uses the library, but the library is meant to be designed to allow other
|
the library, but the library is designed to allow other applications to use
|
||||||
applications to use it.
|
it.
|
||||||
|
|
||||||
Thus, the largest amount of code and complexity is in the library part.
|
The largest amount of code and complexity is in the library part.
|
||||||
|
|
||||||
CVS
|
CVS
|
||||||
===
|
===
|
||||||
@@ -35,13 +35,13 @@ Windows vs Unix
|
|||||||
the same at all places except for the header file that defines them. The
|
the same at all places except for the header file that defines them. The
|
||||||
macros in use are sclose(), sread() and swrite().
|
macros in use are sclose(), sread() and swrite().
|
||||||
|
|
||||||
2. Windows requires a couple of init calls for the socket stuff
|
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
|
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.
|
src/main.c has some code #ifdef'ed to do just that.
|
||||||
|
|
||||||
3. The file descriptors for network communication and file operations are
|
3. The file descriptors for network communication and file operations are
|
||||||
not easily interchangable as in unix
|
not easily interchangable as in unix.
|
||||||
|
|
||||||
We avoid this by not trying any funny tricks on file descriptors.
|
We avoid this by not trying any funny tricks on file descriptors.
|
||||||
|
|
||||||
@@ -51,10 +51,10 @@ Windows vs Unix
|
|||||||
|
|
||||||
We set stdout to binary under windows
|
We set stdout to binary under windows
|
||||||
|
|
||||||
Inside the source code, I do make an effort to avoid '#ifdef WIN32'. All
|
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
|
conditionals that deal with features *should* instead be in the format
|
||||||
'#ifdef HAVE_THAT_WEIRD_FUNCTION'. Since Windows can't run configure scripts,
|
'#ifdef HAVE_THAT_WEIRD_FUNCTION'. Since Windows can't run configure scripts,
|
||||||
I maintain two config-win32.h files (one in / and one in src/) that are
|
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
|
supposed to look exactly as a config.h file would have looked like on a
|
||||||
Windows machine!
|
Windows machine!
|
||||||
|
|
||||||
@@ -64,55 +64,124 @@ Windows vs Unix
|
|||||||
Library
|
Library
|
||||||
=======
|
=======
|
||||||
|
|
||||||
As described elsewhere, libcurl is meant to get two different "layers" of
|
|
||||||
interfaces. At the present point only the high-level, the "easy", interface
|
|
||||||
has been fully implemented and documented. We assume the easy-interface in
|
|
||||||
this description, the low-level interface will be documented when fully
|
|
||||||
implemented.
|
|
||||||
|
|
||||||
There are plenty of entry points to the library, namely each publicly defined
|
There are plenty of entry points to the library, namely each publicly defined
|
||||||
function that libcurl offers to applications. All of those functions are
|
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
|
rather small and easy-to-follow. All the ones prefixed with 'curl_easy' are
|
||||||
put in the lib/easy.c file.
|
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
|
All printf()-style functions use the supplied clones in lib/mprintf.c. This
|
||||||
makes sure we stay absolutely platform independent.
|
makes sure we stay absolutely platform independent.
|
||||||
|
|
||||||
curl_easy_init() allocates an internal struct and makes some initializations.
|
curl_easy_init() allocates an internal struct and makes some initializations.
|
||||||
The returned handle does not revail internals.
|
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 a three arguments, where the option stuff must be
|
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
|
passed in pairs: the parameter-ID and the parameter-value. The list of
|
||||||
options is documented in the man page.
|
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:
|
curl_easy_perform() does a whole lot of things:
|
||||||
|
|
||||||
It starts off in the lib/easy.c file by calling curl_transfer(), but the main
|
It starts off in the lib/easy.c file by calling Curl_perform() and the main
|
||||||
work is lib/url.c. The function first analyzes the URL, it separates the
|
work then continues in lib/url.c. The flow continues with a call to
|
||||||
different components and connects to the remote host. This may involve using
|
Curl_connect() to connect to the remote site.
|
||||||
a proxy and/or using SSL. The Curl_gethost() function in lib/hostip.c is used
|
|
||||||
for looking up host names.
|
|
||||||
|
|
||||||
When connected, the proper protocol-specific function is called. The
|
o Curl_connect()
|
||||||
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
|
... analyzes the URL, it separates the different components and connects to
|
||||||
and dict.c).
|
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
|
The protocol-specific functions of course deal with protocol-specific
|
||||||
negotiations and setup. They have access to the Curl_sendf() (from
|
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
|
lib/sendf.c) function to send printf-style formatted data to the remote
|
||||||
and when they're ready to make the actual file transfer they call the
|
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
|
Curl_Transfer() function (in lib/transfer.c) to setup the transfer and
|
||||||
returns. curl_transfer() then calls _Tranfer() in lib/transfer.c that
|
returns.
|
||||||
performs the entire file transfer.
|
|
||||||
|
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
|
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
|
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
|
called). The speedcheck functions in lib/speedcheck.c are also used to
|
||||||
that the transfer is as fast as required.
|
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
|
When completed, the curl_easy_cleanup() should be called to free up used
|
||||||
resources.
|
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(S)
|
||||||
|
|
||||||
@@ -129,6 +198,14 @@ Library
|
|||||||
the source by the use of curl_read() for reading and curl_write() for writing
|
the source by the use of curl_read() for reading and curl_write() for writing
|
||||||
data to the remote server.
|
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
|
FTP
|
||||||
|
|
||||||
The Curl_if2ip() function can be used for getting the IP number of a
|
The Curl_if2ip() function can be used for getting the IP number of a
|
||||||
@@ -160,7 +237,7 @@ Library
|
|||||||
URL encoding and decoding, called escaping and unescaping in the source code,
|
URL encoding and decoding, called escaping and unescaping in the source code,
|
||||||
is found in lib/escape.c.
|
is found in lib/escape.c.
|
||||||
|
|
||||||
While transfering data in _Transfer() a few functions might get
|
While transfering data in Transfer() a few functions might get
|
||||||
used. curl_getdate() in lib/getdate.c is for HTTP date comparisons (and
|
used. curl_getdate() in lib/getdate.c is for HTTP date comparisons (and
|
||||||
more).
|
more).
|
||||||
|
|
||||||
@@ -182,14 +259,41 @@ Library
|
|||||||
exists in lib/getpass.c. libcurl offers a custom callback that can be used
|
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.
|
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
|
Library Symbols
|
||||||
===============
|
===============
|
||||||
|
|
||||||
All symbols used internally in libcurl must use a 'Curl_' prefix if they're
|
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
|
used in more than a single file. Single-file symbols must be made static.
|
||||||
static. Public (exported) symbols must use a 'curl_' prefix. (There are
|
Public ("exported") symbols must use a 'curl_' prefix. (There are exceptions,
|
||||||
exceptions, but they are destined to be changed to follow this pattern in the
|
but they are to be changed to follow this pattern in future versions.)
|
||||||
future.)
|
|
||||||
|
|
||||||
Return Codes and Informationals
|
Return Codes and Informationals
|
||||||
===============================
|
===============================
|
||||||
@@ -210,6 +314,7 @@ Client
|
|||||||
======
|
======
|
||||||
|
|
||||||
main() resides in src/main.c together with most of the client code.
|
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
|
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
|
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 []
|
used for the URL-"globbing" support. Globbing in the sense that the {} and []
|
||||||
@@ -225,25 +330,26 @@ Client
|
|||||||
curl_easy_getinfo() function to extract useful information from the curl
|
curl_easy_getinfo() function to extract useful information from the curl
|
||||||
session.
|
session.
|
||||||
|
|
||||||
Recent versions may loop and do all that several times if many URLs were
|
Recent versions may loop and do all this several times if many URLs were
|
||||||
specified on the command line or config file.
|
specified on the command line or config file.
|
||||||
|
|
||||||
Memory Debugging
|
Memory Debugging
|
||||||
================
|
================
|
||||||
|
|
||||||
The file named lib/memdebug.c contains debug-versions of a few
|
The file lib/memdebug.c contains debug-versions of a few functions. Functions
|
||||||
functions. Functions such as malloc, free, fopen, fclose, etc that somehow
|
such as malloc, free, fopen, fclose, etc that somehow deal with resources
|
||||||
deal with resources that might give us problems if we "leak" them. The
|
that might give us problems if we "leak" them. The functions in the memdebug
|
||||||
functions in the memdebug system do nothing fancy, they do their normal
|
system do nothing fancy, they do their normal function and then log
|
||||||
function and then log information about what they just did. The logged data
|
information about what they just did. The logged data can then be analyzed
|
||||||
is then analyzed after a complete session,
|
after a complete session,
|
||||||
|
|
||||||
memanalyze.pl is a perl script present only in CVS (not part of the release
|
memanalyze.pl is the perl script present only present in CVS (not part of the
|
||||||
archives) that analyzes a log file generated by the memdebug system. It
|
release archives) that analyzes a log file generated by the memdebug
|
||||||
detects if resources are allocated but never freed and other kinds of errors
|
system. It detects if resources are allocated but never freed and other kinds
|
||||||
related to resource management.
|
of errors related to resource management.
|
||||||
|
|
||||||
Use -DMALLOCDEBUG when compiling to enable memory debugging.
|
Use -DMALLOCDEBUG when compiling to enable memory debugging, this is also
|
||||||
|
switched on by running configure with --enable-debug.
|
||||||
|
|
||||||
Test Suite
|
Test Suite
|
||||||
==========
|
==========
|
||||||
@@ -256,8 +362,8 @@ Test Suite
|
|||||||
httpserver.pl and ftpserver.pl before all the test cases are performed. The
|
httpserver.pl and ftpserver.pl before all the test cases are performed. The
|
||||||
test suite currently only runs on unix-like platforms.
|
test suite currently only runs on unix-like platforms.
|
||||||
|
|
||||||
You'll find a complete description of the test case data files in the README
|
You'll find a complete description of the test case data files in the
|
||||||
file in the test directory.
|
tests/README file.
|
||||||
|
|
||||||
The test suite automatically detects if curl was built with the memory
|
The test suite automatically detects if curl was built with the memory
|
||||||
debugging enabled, and if it was it will detect memory leaks too.
|
debugging enabled, and if it was it will detect memory leaks too.
|
||||||
@@ -269,6 +375,7 @@ Building Releases
|
|||||||
released, run the 'maketgz' script (using 'make distcheck' will give you a
|
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
|
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
|
version number of the client and the library before it creates a release
|
||||||
archive.
|
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.
|
||||||
|
|
||||||
You must have autoconf installed to build release archives.
|
|
||||||
|
|||||||
86
docs/KNOWN_BUGS
Normal file
86
docs/KNOWN_BUGS
Normal file
@@ -0,0 +1,86 @@
|
|||||||
|
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!
|
||||||
|
|
||||||
|
* 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.
|
||||||
|
|
||||||
|
* 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>
|
||||||
61
docs/LIBCURL
61
docs/LIBCURL
@@ -1,61 +0,0 @@
|
|||||||
_ _ _ _
|
|
||||||
| (_) |__ ___ _ _ _ __| |
|
|
||||||
| | | '_ \ / __| | | | '__| |
|
|
||||||
| | | |_) | (__| |_| | | | |
|
|
||||||
|_|_|_.__/ \___|\__,_|_| |_|
|
|
||||||
|
|
||||||
|
|
||||||
How To Use Libcurl In Your Program
|
|
||||||
|
|
||||||
Interfaces
|
|
||||||
|
|
||||||
libcurl currently offers two different interfaces to the URL transfer
|
|
||||||
engine. They can be seen as one low-level and one high-level, in the sense
|
|
||||||
that the low-level one will allow you to deal with a lot more details but on
|
|
||||||
the other hand not offer as many fancy features (such as Location:
|
|
||||||
following). The high-level interface is supposed to be a built-in
|
|
||||||
implementation of the low-level interface. You will not be able to mix
|
|
||||||
function calls from the different layers.
|
|
||||||
|
|
||||||
As we currently ONLY support the high-level interface, the so called easy
|
|
||||||
interface, I will not attempt to describe any low-level functions at this
|
|
||||||
point.
|
|
||||||
|
|
||||||
Function descriptions
|
|
||||||
|
|
||||||
The interface is meant to be very simple for very simple
|
|
||||||
implementations. Thus, we have minimized the number of entries.
|
|
||||||
|
|
||||||
The Easy Interface
|
|
||||||
|
|
||||||
When using the easy interface, you init your easy-session and get a handle,
|
|
||||||
which you use as input to the following interface functions you use.
|
|
||||||
|
|
||||||
You continue by setting all the options you want in the upcoming transfer,
|
|
||||||
most important among them is the URL itself. You might want to set some
|
|
||||||
callbacks as well that will be called from the library when data is available
|
|
||||||
etc.
|
|
||||||
|
|
||||||
When all is setup, you tell libcurl to perform the transfer. It will then do
|
|
||||||
the entire operation and won't return until it is done or failed.
|
|
||||||
|
|
||||||
After the transfer has been made, you cleanup the easy-session's handle and
|
|
||||||
libcurl is entirely off the hook!
|
|
||||||
|
|
||||||
curl_easy_init()
|
|
||||||
curl_easy_setopt()
|
|
||||||
curl_easy_perform()
|
|
||||||
curl_easy_cleanup()
|
|
||||||
|
|
||||||
While the above four functions are the main functions to use in the easy
|
|
||||||
interface, there is a series of helpful functions to use. They are:
|
|
||||||
|
|
||||||
curl_version() - displays the libcurl version
|
|
||||||
curl_getdate() - converts a date string to time_t
|
|
||||||
curl_getenv() - portable environment variable reader
|
|
||||||
curl_formparse() - helps building a HTTP form POST
|
|
||||||
curl_slist_append() - builds a linked list
|
|
||||||
curl_slist_free_all() - frees a whole curl_slist
|
|
||||||
|
|
||||||
Read the separate man pages for these functions for details!
|
|
||||||
|
|
||||||
229
docs/MANUAL
229
docs/MANUAL
@@ -15,22 +15,26 @@ SIMPLE USAGE
|
|||||||
|
|
||||||
curl ftp://ftp.funet.fi/README
|
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:
|
Get a web page from a server using port 8000:
|
||||||
|
|
||||||
curl http://www.weirdserver.com:8000/
|
curl http://www.weirdserver.com:8000/
|
||||||
|
|
||||||
Get a list of the root directory of an FTP site:
|
Get a list of the root 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:
|
Get the definition of curl from a dictionary:
|
||||||
|
|
||||||
curl dict://dict.org/m:curl
|
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
|
DOWNLOAD TO A FILE
|
||||||
|
|
||||||
Get a web page and store in a local 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
|
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
|
USING PASSWORDS
|
||||||
|
|
||||||
FTP
|
FTP
|
||||||
@@ -124,7 +132,7 @@ UPLOADING
|
|||||||
|
|
||||||
Upload all data on stdin to a specified ftp site:
|
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:
|
Upload data from a specified file, login with user and password:
|
||||||
|
|
||||||
@@ -149,7 +157,7 @@ UPLOADING
|
|||||||
|
|
||||||
Upload all data on stdin to a specified http site:
|
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
|
Note that the http server must've been configured to accept PUT before this
|
||||||
can be done successfully.
|
can be done successfully.
|
||||||
@@ -178,7 +186,7 @@ DETAILED INFORMATION
|
|||||||
-D/--dump-header option when getting files from both FTP and HTTP, and it
|
-D/--dump-header option when getting files from both FTP and HTTP, and it
|
||||||
will then store the headers in the specified file.
|
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.se
|
curl --dump-header headers.txt curl.haxx.se
|
||||||
|
|
||||||
@@ -237,32 +245,32 @@ POST (HTTP)
|
|||||||
|
|
||||||
-F accepts parameters like -F "name=contents". If you want the contents to
|
-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,
|
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
|
you can also specify the file content type by appending ';type=<mime type>'
|
||||||
';type=<mime type>' to the file name. You can also post contents of several
|
to the file name. You can also post the contents of several files in one
|
||||||
files in one field. So that the field name 'coolfiles' can be sent three
|
field. For example, the field name 'coolfiles' is used to send three files,
|
||||||
files with different content types in a manner similar to:
|
with different content types using the following syntax:
|
||||||
|
|
||||||
curl -F "coolfiles=@fil1.gif;type=image/gif,fil2.txt,fil3.html" \
|
curl -F "coolfiles=@fil1.gif;type=image/gif,fil2.txt,fil3.html" \
|
||||||
http://www.post.com/postit.cgi
|
http://www.post.com/postit.cgi
|
||||||
|
|
||||||
If content-type is not specified, curl will try to guess from the extension
|
If the content-type is not specified, curl will try to guess from the file
|
||||||
(it only knows a few), or use the previously specified type (from an earlier
|
extension (it only knows a few), or use the previously specified type (from
|
||||||
file if several files are specified in a list) or finally using the default
|
an earlier file if several files are specified in a list) or else it will
|
||||||
type 'text/plain'.
|
using the default type 'text/plain'.
|
||||||
|
|
||||||
Emulate a fill-in form with -F. Let's say you fill in three fields in a
|
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
|
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
|
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
|
"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
|
favourite browser, you have to read the HTML source of the form page and
|
||||||
know the names of the input fields. In our example, the input field names are
|
find the names of the input fields. In our example, the input field names
|
||||||
'file', 'yourname' and 'filedescription'.
|
are 'file', 'yourname' and 'filedescription'.
|
||||||
|
|
||||||
curl -F "file=@cooltext.txt" -F "yourname=Daniel" \
|
curl -F "file=@cooltext.txt" -F "yourname=Daniel" \
|
||||||
-F "filedescription=Cool text file with cool text inside" \
|
-F "filedescription=Cool text file with cool text inside" \
|
||||||
http://www.post.com/postit.cgi
|
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:
|
1. Send multiple files in a single "field" with a single field name:
|
||||||
|
|
||||||
@@ -272,11 +280,11 @@ POST (HTTP)
|
|||||||
|
|
||||||
curl -F "docpicture=@dog.gif" -F "catpicture=@cat.gif"
|
curl -F "docpicture=@dog.gif" -F "catpicture=@cat.gif"
|
||||||
|
|
||||||
REFERER
|
REFERRER
|
||||||
|
|
||||||
A HTTP request has the option to include information about which address
|
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
|
that referred to actual page. Curl allows you to specify the
|
||||||
referrer to get specified on the command line. It is especially useful to
|
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
|
fool or trick stupid servers or CGI scripts that rely on that information
|
||||||
being available or contain certain data.
|
being available or contain certain data.
|
||||||
|
|
||||||
@@ -345,13 +353,17 @@ COOKIES
|
|||||||
Note that by specifying -b you enable the "cookie awareness" and with -L
|
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
|
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
|
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
|
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
|
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.
|
||||||
|
|
||||||
|
|
||||||
PROGRESS METER
|
PROGRESS METER
|
||||||
|
|
||||||
@@ -384,20 +396,36 @@ PROGRESS METER
|
|||||||
|
|
||||||
SPEED LIMIT
|
SPEED LIMIT
|
||||||
|
|
||||||
Curl offers the user to set conditions regarding transfer speed that must
|
Curl allows the user to set the transfer speed conditions that must be met
|
||||||
be met to let the transfer keep going. By using the switch -y and -Y you
|
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
|
can make curl abort transfers if the transfer speed is below the specified
|
||||||
given lowest limit for a specified time.
|
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:
|
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
|
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:
|
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.
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
CONFIG FILE
|
CONFIG FILE
|
||||||
|
|
||||||
@@ -455,9 +483,13 @@ EXTRA HEADERS
|
|||||||
|
|
||||||
curl -H "X-you-and-me: yes" www.love.com
|
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
|
This can also be useful in case you want curl to send a different text in a
|
||||||
a header than it normally does. The -H header you specify then replaces the
|
header than it normally does. The -H header you specify then replaces the
|
||||||
header curl would normally send.
|
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
|
FTP and PATH NAMES
|
||||||
|
|
||||||
@@ -532,7 +564,7 @@ HTTPS
|
|||||||
from sites that require valid certificates. The only drawback is that the
|
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
|
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
|
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
|
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
|
may need to download/compile a converter that can convert your browser's
|
||||||
formatted certificates to PEM formatted ones. This kind of converter is
|
formatted certificates to PEM formatted ones. This kind of converter is
|
||||||
@@ -551,8 +583,8 @@ HTTPS
|
|||||||
|
|
||||||
Many older SSL-servers have problems with SSLv3 or TLS, that newer versions
|
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
|
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
|
SSL-version curl should use. Use -3, -2 or -1 to specify that exact SSL
|
||||||
to use:
|
version to use (for SSLv3, SSLv2 or TLSv1 respectively):
|
||||||
|
|
||||||
curl -2 https://secure.site.com/
|
curl -2 https://secure.site.com/
|
||||||
|
|
||||||
@@ -575,7 +607,7 @@ HTTPS
|
|||||||
Run the 'openssl' application to convert the certificate. If you cd to the
|
Run the 'openssl' application to convert the certificate. If you cd to the
|
||||||
openssl installation, you can do it like:
|
openssl installation, you can do it like:
|
||||||
|
|
||||||
# ./apps/openssl pkcs12 -certfile [file you saved] -out [PEMfile]
|
# ./apps/openssl pkcs12 -in [file you saved] -clcerts -out [PEMfile]
|
||||||
|
|
||||||
|
|
||||||
RESUMING FILE TRANSFERS
|
RESUMING FILE TRANSFERS
|
||||||
@@ -585,20 +617,20 @@ RESUMING FILE TRANSFERS
|
|||||||
|
|
||||||
Continue downloading a document:
|
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):
|
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):
|
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
|
(*1) = This requires that the ftp server supports the non-standard command
|
||||||
SIZE. If it doesn't, curl will say so.
|
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.
|
doesn't, curl will say so.
|
||||||
|
|
||||||
TIME CONDITIONS
|
TIME CONDITIONS
|
||||||
@@ -652,8 +684,14 @@ LDAP
|
|||||||
and offer ldap:// support.
|
and offer ldap:// support.
|
||||||
|
|
||||||
LDAP is a complex thing and writing an LDAP query is not an easy task. I do
|
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
|
advice you to dig up the syntax description for that elsewhere. Two places
|
||||||
no other place is better.
|
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
|
To show you an example, this is now I can get all people from my local LDAP
|
||||||
server that has a certain sub-domain in their email address:
|
server that has a certain sub-domain in their email address:
|
||||||
@@ -667,7 +705,7 @@ ENVIRONMENT VARIABLES
|
|||||||
|
|
||||||
Curl reads and understands the following environment variables:
|
Curl reads and understands the following environment variables:
|
||||||
|
|
||||||
HTTP_PROXY, HTTPS_PROXY, FTP_PROXY, GOPHER_PROXY
|
http_proxy, HTTPS_PROXY, FTP_PROXY, GOPHER_PROXY
|
||||||
|
|
||||||
They should be set for protocol-specific proxies. General proxy should be
|
They should be set for protocol-specific proxies. General proxy should be
|
||||||
set with
|
set with
|
||||||
@@ -694,9 +732,9 @@ NETRC
|
|||||||
passwords, so therefor most unix programs won't read this file unless it is
|
passwords, so therefor most unix programs won't read this file unless it is
|
||||||
only readable by yourself (curl doesn't care though).
|
only readable by yourself (curl doesn't care though).
|
||||||
|
|
||||||
Curl supports .netrc files if told so (using the -n/--netrc option). This is
|
Curl supports .netrc files if told so (using the -n/--netrc and
|
||||||
not restricted to only ftp, but curl can use it for all protocols where
|
--netrc-optional options). This is not restricted to only ftp,
|
||||||
authentication is used.
|
but curl can use it for all protocols where authentication is used.
|
||||||
|
|
||||||
A very simple .netrc file could look something like:
|
A very simple .netrc file could look something like:
|
||||||
|
|
||||||
@@ -726,16 +764,91 @@ KERBEROS4 FTP TRANSFER
|
|||||||
There's no use for a password on the -u switch, but a blank one will make
|
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.
|
curl ask for one and you already entered the real password to kauth.
|
||||||
|
|
||||||
MAILING LIST
|
TELNET
|
||||||
|
|
||||||
We have an open mailing list to discuss curl, its development and things
|
The curl telnet support is basic and very easy to use. Curl passes all data
|
||||||
relevant to this.
|
passed to it on stdin to the remote server. Connect to a remote telnet
|
||||||
|
server using a command line similar to:
|
||||||
|
|
||||||
To subscribe, mail curl-request@contactor.se with "subscribe <fill in your
|
curl telnet://remote.server.com
|
||||||
email address>" in the body.
|
|
||||||
|
|
||||||
To post to the list, mail curl@contactor.se.
|
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.
|
||||||
|
|
||||||
To unsubcribe, mail curl-request@contactor.se with "unsubscribe <your
|
You might want the -N/--no-buffer option to switch off the buffered output
|
||||||
subscribed email address>" in the body.
|
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.
|
||||||
|
|||||||
@@ -6,21 +6,42 @@ AUTOMAKE_OPTIONS = foreign no-dependencies
|
|||||||
|
|
||||||
man_MANS = \
|
man_MANS = \
|
||||||
curl.1 \
|
curl.1 \
|
||||||
curl_easy_cleanup.3 \
|
curl-config.1
|
||||||
curl_easy_getinfo.3 \
|
|
||||||
curl_easy_init.3 \
|
|
||||||
curl_easy_perform.3 \
|
|
||||||
curl_easy_setopt.3 \
|
|
||||||
curl_formparse.3 \
|
|
||||||
curl_formfree.3 \
|
|
||||||
curl_getdate.3 \
|
|
||||||
curl_getenv.3 \
|
|
||||||
curl_slist_append.3 \
|
|
||||||
curl_slist_free_all.3 \
|
|
||||||
curl_version.3
|
|
||||||
|
|
||||||
EXTRA_DIST = $(man_MANS) \
|
HTMLPAGES = \
|
||||||
MANUAL BUGS CONTRIBUTE FAQ FEATURES INTERNALS \
|
curl.html \
|
||||||
LIBCURL README.win32 RESOURCES TODO TheArtOfHttpScripting
|
curl-config.html
|
||||||
|
|
||||||
SUBDIRS = examples
|
PDFPAGES = \
|
||||||
|
curl.pdf \
|
||||||
|
curl-config.pdf
|
||||||
|
|
||||||
|
SUBDIRS = examples libcurl
|
||||||
|
|
||||||
|
EXTRA_DIST = MANUAL BUGS CONTRIBUTE FAQ FEATURES INTERNALS \
|
||||||
|
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
|
||||||
|
|||||||
@@ -12,13 +12,11 @@ README.win32
|
|||||||
systems. While not being the main develop target, a fair share of curl users
|
systems. While not being the main develop target, a fair share of curl users
|
||||||
are win32-based.
|
are win32-based.
|
||||||
|
|
||||||
Some documentation in this archive will be tricky to read for Windows
|
The unix-style man pages are tricky to read on windows, so therefore are all
|
||||||
people, as they come in unix-style man pages. You can either download a
|
those pages also converted to HTML and those are also included in the
|
||||||
freely available nroff binary for win32 (*pointers appriciated*), convert
|
release archives.
|
||||||
the files into plain-text on your neighbor's unix machine or run over to the
|
|
||||||
curl web site and view them as plain HTML.
|
|
||||||
|
|
||||||
The main curl.1 man page is "built-in". Use a command line similar to this
|
The main curl.1 man page is also "built-in" in the command line tool. Use a
|
||||||
in order to extract a separate text file:
|
command line similar to this in order to extract a separate text file:
|
||||||
|
|
||||||
curl -M >manual.txt
|
curl -M >manual.txt
|
||||||
|
|||||||
@@ -5,10 +5,9 @@
|
|||||||
\___|\___/|_| \_\_____|
|
\___|\___/|_| \_\_____|
|
||||||
|
|
||||||
|
|
||||||
This document has been introduced in order to let you find documents that
|
This document lists documents that specify standards used by curl, software
|
||||||
specify standards used by curl, software that extends curl, web pages with
|
that extends curl, web pages with similar utilities and information pages that
|
||||||
"competing" utilities and information pages that describe some of the tools
|
describe some of the tools that we use to build/compile/develop curl.
|
||||||
that we use to build/compile/develop curl.
|
|
||||||
|
|
||||||
Standards
|
Standards
|
||||||
---------
|
---------
|
||||||
|
|||||||
84
docs/THANKS
Normal file
84
docs/THANKS
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
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>
|
||||||
251
docs/TODO
251
docs/TODO
@@ -6,95 +6,216 @@
|
|||||||
|
|
||||||
TODO
|
TODO
|
||||||
|
|
||||||
For the future
|
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.
|
||||||
|
|
||||||
Ok, this is what I wanna do with Curl. Please tell me what you think, and
|
LIBCURL
|
||||||
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...)
|
|
||||||
|
|
||||||
* Make SSL session ids get used if multiple HTTPS documents from the same
|
* Introduce an interface to libcurl that allows applications to easier get to
|
||||||
host is requested.
|
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.
|
||||||
|
|
||||||
* Make the curl tool support URLs that start with @ that would then mean that
|
* Make content encoding/decoding internally be made using a filter system.
|
||||||
the following is a plain list with URLs to download. Thus @filename.txt
|
|
||||||
reads a list of URLs from a local file. A fancy option would then be to
|
|
||||||
support @http://whatever.com that would first load a list and then get the
|
|
||||||
URLs mentioned in the list. I figure -O or something would have to be
|
|
||||||
implied by such an action.
|
|
||||||
|
|
||||||
* Improve the regular progress meter with --continue is used. It should be
|
* Introduce another callback interface for upload/download that makes one
|
||||||
noticable when there's a resume going on.
|
less copy of data and thus a faster operation.
|
||||||
|
[http://curl.haxx.se/dev/no_copy_callbacks.txt]
|
||||||
|
|
||||||
* Add a command line option that allows the output file to get the same time
|
* Run-time querying about library characterics. What protocols do this
|
||||||
stamp as the remote file. We already are capable of fetching the remote
|
running libcurl support? What is the version number of the running libcurl
|
||||||
file's date.
|
(returning the well-defined version-#define). This could possibly be made
|
||||||
|
by allowing curl_easy_getinfo() work with a NULL pointer for global info,
|
||||||
|
but perhaps better would be to introduce a new curl_getinfo() (or similar)
|
||||||
|
function for global info reading.
|
||||||
|
|
||||||
* Make the SSL layer option capable of using the Mozilla Security Services as
|
* Add asynchronous name resolving (http://daniel.haxx.se/resolver/). This
|
||||||
an alternative to OpenSSL:
|
should be made to work on most of the supported platforms, or otherwise it
|
||||||
http://www.mozilla.org/projects/security/pki/nss/
|
isn't really interesting.
|
||||||
|
|
||||||
* Make sure the low-level interface works. highlevel.c should basically be
|
* Data sharing. Tell which easy handles within a multi handle that should
|
||||||
possible to write using that interface. Document the low-level interface
|
share cookies, connection cache, dns cache, ssl session cache. Full
|
||||||
|
suggestion found here: http://curl.haxx.se/dev/sharing.txt
|
||||||
|
|
||||||
* Make the easy-interface support multiple file transfers. If they're done
|
* Mutexes. By adding mutex callback support, the 'data sharing' mentioned
|
||||||
to the same host, they should use persistant connections or similar.
|
above can be made between several easy handles running in different threads
|
||||||
Figure out a nice design for this.
|
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
|
||||||
|
|
||||||
* Add asynchronous name resolving, as this enables full timeout support for
|
* Set the SO_KEEPALIVE socket option to make libcurl notice and disconnect
|
||||||
fork() systems.
|
very long time idle connections.
|
||||||
|
|
||||||
* Move non-URL related functions that are used by both the lib and the curl
|
* Go through the code and verify that libcurl deals with big files >2GB and
|
||||||
application to a separate "portability lib".
|
>4GB all over. Bug reports (and source reviews) indicate that it doesn't
|
||||||
|
currently work properly.
|
||||||
|
|
||||||
* Add support for other languages than C. C++ (rumours have been heard about
|
* Make the built-in progress meter use its own dedicated output stream, and
|
||||||
something being worked on in this area) and perl (we have seen the first
|
make it possible to set it. Use stderr by default.
|
||||||
versions of this!) comes to mind. Python anyone?
|
|
||||||
|
|
||||||
* "Content-Encoding: compress/gzip/zlib"
|
* 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 even begin but be aborted
|
||||||
|
immediately.
|
||||||
|
|
||||||
HTTP 1.1 clearly defines how to get and decode compressed documents. There
|
* Allow the http_proxy (and other) environment variables to contain user and
|
||||||
is the zlib that is pretty good at decompressing stuff. This work was
|
password as well in the style: http://proxyuser:proxypasswd@proxy:port
|
||||||
started in October 1999 but halted again since it proved more work than we
|
Berend Reitsma suggested.
|
||||||
thought. It is still a good idea to implement though.
|
|
||||||
|
|
||||||
* Authentication: NTLM. It would be cool to support that MS crap called NTLM
|
LIBCURL - multi interface
|
||||||
|
|
||||||
|
* Make sure we don't ever loop because of non-blocking sockets return
|
||||||
|
EWOULDBLOCK or similar. This concerns the HTTP request sending (and
|
||||||
|
especially regular HTTP POST), the FTP command sending etc.
|
||||||
|
|
||||||
|
* Make uploads treated better. 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.
|
||||||
|
|
||||||
|
DOCUMENTATION
|
||||||
|
|
||||||
|
* More and better
|
||||||
|
|
||||||
|
FTP
|
||||||
|
|
||||||
|
* FTP ASCII upload does not follow RFC959 section 3.1.1.1: "The sender
|
||||||
|
converts the data from an internal character representation to the standard
|
||||||
|
8-bit NVT-ASCII representation (see the Telnet specification). The
|
||||||
|
receiver will convert the data from the standard form to his own internal
|
||||||
|
form."
|
||||||
|
|
||||||
|
* An option to only download remote FTP files if they're newer than the local
|
||||||
|
one is a good idea, and it would fit right into the same syntax as the
|
||||||
|
already working http dito works. It of course requires that 'MDTM' works,
|
||||||
|
and it isn't a standard FTP command.
|
||||||
|
|
||||||
|
* 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-08.txt,
|
||||||
|
"Securing FTP with TLS"
|
||||||
|
|
||||||
|
HTTP
|
||||||
|
|
||||||
|
* Pass a list of host name to libcurl to which we allow the user name and
|
||||||
|
password to get sent to. Currently, it only get sent to the host name that
|
||||||
|
the first URL uses (to prevent others from being able to read it), but this
|
||||||
|
also prevents the authentication info from getting sent when following
|
||||||
|
locations to legitimate other host names.
|
||||||
|
|
||||||
|
* "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. This requires the filter system mentioned above.
|
||||||
|
|
||||||
|
* Authentication: NTLM. Support for that MS crap called NTLM
|
||||||
authentication. MS proxies and servers sometime require that. Since that
|
authentication. MS proxies and servers sometime require that. Since that
|
||||||
protocol is a proprietary one, it involves reverse engineering and network
|
protocol is a proprietary one, it involves reverse engineering and network
|
||||||
sniffing. This should however be a library-based functionality. There are a
|
sniffing. This should however be a library-based functionality. There are a
|
||||||
few different efforts "out there" to make open source HTTP clients support
|
few different efforts "out there" to make open source HTTP clients support
|
||||||
this and it should be possible to take advantage of other people's hard
|
this and it should be possible to take advantage of other people's hard
|
||||||
work. http://modntlm.sourceforge.net/ is one.
|
work. http://modntlm.sourceforge.net/ is one. There's a web page at
|
||||||
|
http://www.innovation.ch/java/ntlm.html that contains detailed reverse-
|
||||||
|
engineered info.
|
||||||
|
|
||||||
* RFC2617 compliance, "Digest Access Authentication"
|
* RFC2617 compliance, "Digest Access Authentication" A valid test page seem
|
||||||
A valid test page seem to exist at:
|
to exist at: http://hopf.math.nwu.edu/testpage/digest/ And some friendly
|
||||||
http://hopf.math.nwu.edu/testpage/digest/
|
person's server source code is available at
|
||||||
And some friendly person's server source code is available at
|
http://hopf.math.nwu.edu/digestauth/index.html Then there's the Apache
|
||||||
http://hopf.math.nwu.edu/digestauth/index.html
|
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.
|
||||||
|
|
||||||
Then there's the Apache mod_digest source code too of course. It seems as
|
* Pipelining. Sending multiple requests before the previous one(s) are done.
|
||||||
if Netscape doesn't support this, and not many servers do. Although this is
|
This could possibly be implemented using the multi interface to queue
|
||||||
a lot better authentication method than the more common "Basic". Basic
|
requests and the response data.
|
||||||
sends the password in cleartext over the network, this "Digest" method uses
|
|
||||||
a challange-response protocol which increases security quite a lot.
|
|
||||||
|
|
||||||
* Multiple Proxies?
|
TELNET
|
||||||
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
|
* Make TELNET work on windows98!
|
||||||
Ftp-kind proxy, Socks5, whatever kind of proxies are there?
|
|
||||||
|
|
||||||
* IPv6 Awareness and support
|
* Reading input (to send to the remote server) on stdin is a crappy solution
|
||||||
Where ever it would fit. configure search for v6-versions of a few
|
for library purposes. We need to invent a good way for the application to
|
||||||
functions and then use them instead is of course the first thing to do...
|
be able to provide the data to send.
|
||||||
RFC 2428 "FTP Extensions for IPv6 and NATs" will be interesting. PORT
|
|
||||||
should be replaced with EPRT for IPv6, and EPSV instead of PASV.
|
|
||||||
|
|
||||||
* SSL for more protocols, like SSL-FTP...
|
* Move the telnet support's network select() loop go away and merge the code
|
||||||
(http://search.ietf.org/internet-drafts/draft-murray-auth-ftp-ssl-05.txt)
|
into the main transfer loop. Until this is done, the multi interface won't
|
||||||
|
work for telnet.
|
||||||
|
|
||||||
* HTTP POST resume using Range:
|
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
|
||||||
|
|
||||||
|
* 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.
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
|
Online: http://curl.haxx.se/docs/httpscripting.shtml
|
||||||
Author: Daniel Stenberg <daniel@haxx.se>
|
Author: Daniel Stenberg <daniel@haxx.se>
|
||||||
Date: September 15, 2000
|
Date: October 31, 2001
|
||||||
Version: 0.3
|
Version: 0.5
|
||||||
|
|
||||||
The Art Of Scripting HTTP Requests Using Curl
|
The Art Of Scripting HTTP Requests Using Curl
|
||||||
=============================================
|
=============================================
|
||||||
@@ -47,7 +48,7 @@ Version: 0.3
|
|||||||
2. URL
|
2. URL
|
||||||
|
|
||||||
The Uniform Resource Locator format is how you specify the address of a
|
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
|
particular resource on the Internet. You know these, you've seen URLs like
|
||||||
http://curl.haxx.se or https://yourbank.com a million times.
|
http://curl.haxx.se or https://yourbank.com a million times.
|
||||||
|
|
||||||
3. GET a page
|
3. GET a page
|
||||||
@@ -55,7 +56,7 @@ Version: 0.3
|
|||||||
The simplest and most common request/operation made using HTTP is to get a
|
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
|
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.
|
issues a GET request to the server and receives the document it asked for.
|
||||||
If you isse the command line
|
If you issue the command line
|
||||||
|
|
||||||
curl http://curl.haxx.se
|
curl http://curl.haxx.se
|
||||||
|
|
||||||
@@ -88,7 +89,7 @@ Version: 0.3
|
|||||||
<input type=submit name=press value="OK">
|
<input type=submit name=press value="OK">
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
In your favourite browser, this form will appear with a text box to fill in
|
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
|
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
|
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
|
get "junk.cgi?birthyear=1905&press=OK" appended to the path part of the
|
||||||
@@ -135,8 +136,8 @@ Version: 0.3
|
|||||||
4.3 FILE UPLOAD POST
|
4.3 FILE UPLOAD POST
|
||||||
|
|
||||||
Back in late 1995 they defined a new way to post data over HTTP. It was
|
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 refered to as
|
documented in the RFC 1867, why this method sometimes is referred to as
|
||||||
a rfc1867-posting.
|
a RFC1867-posting.
|
||||||
|
|
||||||
This method is mainly designed to better support file uploads. A form that
|
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:
|
allows a user to upload a file could be written like this in HTML:
|
||||||
@@ -174,6 +175,19 @@ Version: 0.3
|
|||||||
|
|
||||||
curl -d "birthyear=1905&press=OK&person=daniel" [URL]
|
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
|
5. PUT
|
||||||
|
|
||||||
The perhaps best way to upload data to a HTTP server is to use PUT. Then
|
The perhaps best way to upload data to a HTTP server is to use PUT. Then
|
||||||
@@ -182,7 +196,7 @@ Version: 0.3
|
|||||||
|
|
||||||
Put a file to a HTTP server with curl:
|
Put a file to a HTTP server with curl:
|
||||||
|
|
||||||
curl -t uploadfile www.uploadhttp.com/receive.cgi
|
curl -T uploadfile www.uploadhttp.com/receive.cgi
|
||||||
|
|
||||||
6. AUTHENTICATION
|
6. AUTHENTICATION
|
||||||
|
|
||||||
@@ -200,7 +214,7 @@ Version: 0.3
|
|||||||
Sometimes your HTTP access is only available through the use of a HTTP
|
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
|
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
|
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:
|
the Internet. To specify those with curl, run something like:
|
||||||
|
|
||||||
curl -U proxyuser:proxypassword curl.haxx.se
|
curl -U proxyuser:proxypassword curl.haxx.se
|
||||||
|
|
||||||
@@ -280,7 +294,7 @@ Version: 0.3
|
|||||||
contents to the server, unless of course they are expired.
|
contents to the server, unless of course they are expired.
|
||||||
|
|
||||||
Many applications and servers use this method to connect a series of requests
|
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 occations, we
|
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
|
must be able to record and send back cookies the way the web application
|
||||||
expects them. The same way browsers deal with them.
|
expects them. The same way browsers deal with them.
|
||||||
|
|
||||||
@@ -289,7 +303,6 @@ Version: 0.3
|
|||||||
|
|
||||||
curl -b "name=Daniel" www.cookiesite.com
|
curl -b "name=Daniel" www.cookiesite.com
|
||||||
|
|
||||||
|
|
||||||
Cookies are sent as common HTTP headers. This is practical as it allows curl
|
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
|
to record cookies simply by recording headers. Record cookies with curl by
|
||||||
using the -D option like:
|
using the -D option like:
|
||||||
@@ -304,6 +317,23 @@ Version: 0.3
|
|||||||
|
|
||||||
curl -b stored_cookies_in_file www.cookiesite.com
|
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
|
11. HTTPS
|
||||||
|
|
||||||
There are a few ways to do secure HTTP transfers. The by far most common
|
There are a few ways to do secure HTTP transfers. The by far most common
|
||||||
@@ -328,7 +358,7 @@ Version: 0.3
|
|||||||
you need to enter the unlock-code before the certificate can be used by
|
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
|
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
|
interactively when curl queries for it. Use a certificate with curl on a
|
||||||
https server like:
|
HTTPS server like:
|
||||||
|
|
||||||
curl -E mycert.pem https://that.secure.server.com
|
curl -E mycert.pem https://that.secure.server.com
|
||||||
|
|
||||||
@@ -337,10 +367,12 @@ Version: 0.3
|
|||||||
RFC 2616 is a must to read if you want in-depth understanding of the HTTP
|
RFC 2616 is a must to read if you want in-depth understanding of the HTTP
|
||||||
protocol.
|
protocol.
|
||||||
|
|
||||||
RFC 2396 explains the URL syntax
|
RFC 2396 explains the URL syntax.
|
||||||
|
|
||||||
RFC 2109 defines how cookies are supposed to work.
|
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://www.openssl.org is the home of the OpenSSL project
|
||||||
|
|
||||||
http://curl.haxx.se is the home of the cURL 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)
|
||||||
477
docs/curl.1
477
docs/curl.1
@@ -2,10 +2,9 @@
|
|||||||
.\" nroff -man curl.1
|
.\" nroff -man curl.1
|
||||||
.\" Written by Daniel Stenberg
|
.\" Written by Daniel Stenberg
|
||||||
.\"
|
.\"
|
||||||
.TH curl 1 "19 January 2001" "Curl 7.6" "Curl Manual"
|
.TH curl 1 "11 Sep 2002" "Curl 7.10" "Curl Manual"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
curl \- get a URL with FTP, TELNET, LDAP, GOPHER, DICT, FILE, HTTP or
|
curl \- transfer a URL
|
||||||
HTTPS syntax.
|
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
.B curl [options]
|
.B curl [options]
|
||||||
.I [URL...]
|
.I [URL...]
|
||||||
@@ -39,8 +38,14 @@ supported at the moment:
|
|||||||
|
|
||||||
http://www.any.org/archive[1996-1999]/volume[1-4]part{a,b,c,index}.html
|
http://www.any.org/archive[1996-1999]/volume[1-4]part{a,b,c,index}.html
|
||||||
|
|
||||||
Starting with curl 7.6, you can specify any amount of URLs on the command
|
You can specify any amount of URLs on the command line. They will be fetched
|
||||||
line. They will be fetched in a sequential manner in the specified order.
|
in a sequential manner in the specified order.
|
||||||
|
|
||||||
|
Curl will attempt to re-use connections for multiple file transfers, so that
|
||||||
|
getting many files from the same server will not do multiple connects /
|
||||||
|
handshakes. This improves speed. Of course this is only done on files
|
||||||
|
specified on a single command line and cannot be used between separate curl
|
||||||
|
invokes.
|
||||||
.SH OPTIONS
|
.SH OPTIONS
|
||||||
.IP "-a/--append"
|
.IP "-a/--append"
|
||||||
(FTP)
|
(FTP)
|
||||||
@@ -56,7 +61,7 @@ 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
|
surround the string with single quote marks. This can also be set with the
|
||||||
-H/--header flag of course.
|
-H/--header flag of course.
|
||||||
|
|
||||||
If this option is used more than once, the last one will be the one to be
|
If this option is set more than once, the last one will be the one that's
|
||||||
used.
|
used.
|
||||||
.IP "-b/--cookie <name=data>"
|
.IP "-b/--cookie <name=data>"
|
||||||
(HTTP)
|
(HTTP)
|
||||||
@@ -66,18 +71,18 @@ 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
|
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
|
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
|
if they match. Using this method also activates the "cookie parser" which will
|
||||||
will make curl record incoming cookies too, which may be handy if you're using
|
make curl record incoming cookies too, which may be handy if you're using this
|
||||||
this in combination with the -L/--location option. The file format of the file
|
in combination with the -L/--location option. The file format of the file to
|
||||||
to read cookies from should be plain HTTP headers or the netscape cookie file
|
read cookies from should be plain HTTP headers or the Netscape/Mozilla cookie
|
||||||
format.
|
file format.
|
||||||
|
|
||||||
.B NOTE
|
.B NOTE
|
||||||
that the file specified with -b/--cookie is only used as input. No cookies
|
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
|
will be stored in the file. To store cookies, save the HTTP headers to a file
|
||||||
using -D/--dump-header!
|
using -D/--dump-header!
|
||||||
|
|
||||||
If this option is used more than once, the last one will be the one to be
|
If this option is set more than once, the last one will be the one that's
|
||||||
used.
|
used.
|
||||||
.IP "-B/--use-ascii"
|
.IP "-B/--use-ascii"
|
||||||
Use ASCII transfer when getting an FTP file or LDAP info. For FTP, this can
|
Use ASCII transfer when getting an FTP file or LDAP info. For FTP, this can
|
||||||
@@ -85,51 +90,70 @@ also be enforced by using an URL that ends with ";type=A". This option causes
|
|||||||
data sent to stdout to be in text mode for win32 systems.
|
data sent to stdout to be in text mode for win32 systems.
|
||||||
|
|
||||||
If this option is used twice, the second one will disable ASCII usage.
|
If this option is used twice, the second one will disable ASCII usage.
|
||||||
.IP "-c/--continue"
|
.IP "--ciphers <list of ciphers>"
|
||||||
.B Deprecated. Use '-C -' instead.
|
(SSL) Specifies which ciphers to use in the connection. The list of ciphers
|
||||||
Continue/Resume a previous file transfer. This instructs curl to
|
must be using valid ciphers. Read up on SSL cipher list details on this URL:
|
||||||
continue appending data on the file where it was previously left,
|
.I http://www.openssl.org/docs/apps/ciphers.html (Option added in curl 7.9)
|
||||||
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.
|
|
||||||
|
|
||||||
If this option is used serveral times, the last one will be used.
|
If this option is used several times, the last one will override the others.
|
||||||
|
.IP "--connect-timeout <seconds>"
|
||||||
|
Maximum time in seconds that you allow the connection to the server to take.
|
||||||
|
This only limits the connection phase, once curl has connected this option is
|
||||||
|
of no more use. See also the \fI--max-time\fP option.
|
||||||
|
|
||||||
|
If this option is used several times, the last one will be used.
|
||||||
|
.IP "-c/--cookie-jar <file name>"
|
||||||
|
Specify to which file you want curl to write all cookies after a completed
|
||||||
|
operation. Curl writes all cookies previously read from a specified file as
|
||||||
|
well as all cookies received from remote server(s). If no cookies are known,
|
||||||
|
no file will be written. The file will be written using the Netscape cookie
|
||||||
|
file format. If you set the file name to a single dash, "-", the cookies will
|
||||||
|
be written to stdout. (Option added in curl 7.9)
|
||||||
|
|
||||||
|
If this option is used several times, the last specfied file name will be
|
||||||
|
used.
|
||||||
|
.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.
|
||||||
|
|
||||||
|
Use "-C -" to tell curl to automatically find out where/how to resume the
|
||||||
|
transfer. It then uses the given output/input files to figure that out.
|
||||||
|
|
||||||
|
If this option is used several times, the last one will be used.
|
||||||
|
.IP "--crlf"
|
||||||
|
(FTP) Convert LF to CRLF in upload. Useful for MVS (OS/390).
|
||||||
|
|
||||||
|
If this option is used twice, the second will again disable crlf converting.
|
||||||
.IP "-d/--data <data>"
|
.IP "-d/--data <data>"
|
||||||
(HTTP) Sends the specified data in a POST request to the HTTP server. Note
|
(HTTP) Sends the specified data in a POST request to the HTTP server, in a way
|
||||||
that the data is sent exactly as specified with no extra processing (with all
|
that can emulate as if a user has filled in a HTML form and pressed the submit
|
||||||
newlines cut off). The data is expected to be "url-encoded". This will cause
|
button. Note that the data is sent exactly as specified with no extra
|
||||||
curl to pass the data to the server using the content-type
|
processing (with all newlines cut off). The data is expected to be
|
||||||
application/x-www-form-urlencoded. Compare to -F. If more than one -d/--data
|
"url-encoded". This will cause curl to pass the data to the server using the
|
||||||
option is used on the same command line, the data pieces specified will be
|
content-type application/x-www-form-urlencoded. Compare to -F. If more than
|
||||||
merged together with a separating &-letter. Thus, using '-d name=daniel -d
|
one -d/--data option is used on the same command line, the data pieces
|
||||||
skill=lousy' would generate a post chunk that looks like
|
specified will be merged together with a separating &-letter. Thus, using '-d
|
||||||
'name=daniel&skill=lousy'.
|
name=daniel -d skill=lousy' would generate a post chunk that looks like
|
||||||
|
\&'name=daniel&skill=lousy'.
|
||||||
|
|
||||||
If you start the data with the letter @, the rest should be a file name to
|
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
|
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. Multiple files can also be
|
contents of the file must already be url-encoded. Multiple files can also be
|
||||||
specified.
|
specified. Posting data from a file named 'foobar' would thus be done with
|
||||||
|
"--data @foobar".
|
||||||
|
|
||||||
To post data purely binary, you should instead use the --data-binary option.
|
To post data purely binary, you should instead use the --data-binary option.
|
||||||
|
|
||||||
-d/--data is the same as --data-ascii.
|
-d/--data is the same as --data-ascii.
|
||||||
|
|
||||||
If this option is used serveral times, the ones following the first will
|
If this option is used several times, the ones following the first will
|
||||||
append data.
|
append data.
|
||||||
.IP "--data-ascii <data>"
|
.IP "--data-ascii <data>"
|
||||||
(HTTP) This is an alias for the -d/--data option.
|
(HTTP) This is an alias for the -d/--data option.
|
||||||
|
|
||||||
If this option is used serveral times, the ones following the first will
|
If this option is used several times, the ones following the first will
|
||||||
append data.
|
append data.
|
||||||
.IP "--data-binary <data>"
|
.IP "--data-binary <data>"
|
||||||
(HTTP) This posts data in a similar manner as --data-ascii does, although when
|
(HTTP) This posts data in a similar manner as --data-ascii does, although when
|
||||||
@@ -137,20 +161,25 @@ using this option the entire context of the posted data is kept as-is. If you
|
|||||||
want to post a binary file without the strip-newlines feature of the
|
want to post a binary file without the strip-newlines feature of the
|
||||||
--data-ascii option, this is for you.
|
--data-ascii option, this is for you.
|
||||||
|
|
||||||
If this option is used serveral times, the last one will be used.
|
If this option is used several times, the ones following the first will
|
||||||
|
|
||||||
If this option is used serveral times, the ones following the first will
|
|
||||||
append data.
|
append data.
|
||||||
|
.IP "--disable-epsv"
|
||||||
|
(FTP) Tell curl to disable the use of the EPSV command when doing passive FTP
|
||||||
|
downloads. Curl will normally always first attempt to use EPSV before PASV,
|
||||||
|
but with this option, it will not try using EPSV.
|
||||||
|
|
||||||
|
If this option is used several times, each occurrence will toggle this on/off.
|
||||||
.IP "-D/--dump-header <file>"
|
.IP "-D/--dump-header <file>"
|
||||||
(HTTP/FTP)
|
Write the protocol headers to the specified file.
|
||||||
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
|
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
|
site sends to you. The cookies could then be read in a second curl invoke by
|
||||||
using the -b/--cookie option!
|
using the -b/--cookie option!
|
||||||
|
|
||||||
If this option is used serveral times, the last one will be used.
|
When used on FTP, the ftp server response lines are considered being "headers"
|
||||||
|
and thus are saved there.
|
||||||
|
|
||||||
|
If this option is used several times, the last one will be used.
|
||||||
.IP "-e/--referer <URL>"
|
.IP "-e/--referer <URL>"
|
||||||
(HTTP) Sends the "Referer Page" information to the HTTP server. This can also
|
(HTTP) Sends the "Referer Page" information to the HTTP server. This can also
|
||||||
be set with the -H/--header flag of course. When used with
|
be set with the -H/--header flag of course. When used with
|
||||||
@@ -159,7 +188,18 @@ you can append ";auto" to the referer URL to make curl automatically set the
|
|||||||
previous URL when it follows a Location: header. The ";auto" string can be
|
previous URL when it follows a Location: header. The ";auto" string can be
|
||||||
used alone, even if you don't set an initial referer.
|
used alone, even if you don't set an initial referer.
|
||||||
|
|
||||||
If this option is used serveral times, the last one will be used.
|
If this option is used several times, the last one will be used.
|
||||||
|
.IP "--environment"
|
||||||
|
(RISC OS ONLY) Sets a range of environment variables, using the names the -w
|
||||||
|
option supports, to easier allow extraction of useful information after having
|
||||||
|
run curl.
|
||||||
|
|
||||||
|
If this option is used several times, each occurrence will toggle this on/off.
|
||||||
|
.IP "--egd-file <file>"
|
||||||
|
(HTTPS) Specify the path name to the Entropy Gathering Daemon socket. The
|
||||||
|
socket is used to seed the random engine for SSL connections. See also the
|
||||||
|
.I "--random-file"
|
||||||
|
option.
|
||||||
.IP "-E/--cert <certificate[:password]>"
|
.IP "-E/--cert <certificate[:password]>"
|
||||||
(HTTPS)
|
(HTTPS)
|
||||||
Tells curl to use the specified certificate file when getting a file
|
Tells curl to use the specified certificate file when getting a file
|
||||||
@@ -168,20 +208,28 @@ 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
|
the terminal. Note that this certificate is the private key and the private
|
||||||
certificate concatenated!
|
certificate concatenated!
|
||||||
|
|
||||||
If this option is used serveral times, the last one will be used.
|
If this option is used several times, the last one will be used.
|
||||||
.IP "--cacert <CA certificate>"
|
.IP "--cacert <CA certificate>"
|
||||||
(HTTPS) Tells curl to use the specified certificate file to verify the
|
(HTTPS) Tells curl to use the specified certificate file to verify the
|
||||||
peer. The certificate must be in PEM format.
|
peer. The file may contain multiple CA certificates. The certificate(s) must
|
||||||
|
be in PEM format.
|
||||||
|
|
||||||
If this option is used serveral times, the last one will be used.
|
If this option is used several times, the last one will be used.
|
||||||
|
.IP "--capath <CA certificate directory>"
|
||||||
|
(HTTPS) Tells curl to use the specified certificate directory to verify the
|
||||||
|
peer. The certificates must be in PEM format, and the directory must have been
|
||||||
|
processed using the c_rehash utility supplied with openssl. Certificate directories
|
||||||
|
are not supported under Windows (because c_rehash uses symbolink links to
|
||||||
|
create them). Using --capath can allow curl to make https connections much
|
||||||
|
more efficiently than using --cacert if the --cacert file contains many CA certificates.
|
||||||
|
|
||||||
|
If this option is used several times, the last one will be used.
|
||||||
.IP "-f/--fail"
|
.IP "-f/--fail"
|
||||||
(HTTP)
|
(HTTP) Fail silently (no output at all) on server errors. This is mostly done
|
||||||
Fail silently (no output at all) on server errors. This is mostly done
|
like this to better enable scripts etc to better deal with failed attempts. In
|
||||||
like this to better enable scripts etc to better deal with failed
|
normal cases when a HTTP server fails to deliver a document, it returns a HTML
|
||||||
attempts. In normal cases when a HTTP server fails to deliver a
|
document stating so (which often also describes why and more). This flag will
|
||||||
document, it returns a HTML document stating so (which often also
|
prevent curl from outputting that and fail silently instead.
|
||||||
describes why and more). This flag will prevent curl from
|
|
||||||
outputting that and fail silently instead.
|
|
||||||
|
|
||||||
If this option is used twice, the second will again disable silent failure.
|
If this option is used twice, the second will again disable silent failure.
|
||||||
.IP "-F/--form <name=content>"
|
.IP "-F/--form <name=content>"
|
||||||
@@ -195,7 +243,7 @@ get attached in the post as a file upload, while the < makes a text field and
|
|||||||
just get the contents for that text field from a file.
|
just get the contents for that text field from a file.
|
||||||
|
|
||||||
Example, to send your password file to the server, where
|
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
|
\&'password' is the name of the form-field to which /etc/passwd will be the
|
||||||
input:
|
input:
|
||||||
|
|
||||||
.B curl
|
.B curl
|
||||||
@@ -209,8 +257,17 @@ This option can be used multiple times.
|
|||||||
This option switches off the "URL globbing parser". When you set this option,
|
This option switches off the "URL globbing parser". When you set this option,
|
||||||
you can specify URLs that contain the letters {}[] without having them being
|
you can specify URLs that contain the letters {}[] without having them being
|
||||||
interpreted by curl itself. Note that these letters are not normal legal URL
|
interpreted by curl itself. Note that these letters are not normal legal URL
|
||||||
contents but they should be encoded according to the URI standard. (Option
|
contents but they should be encoded according to the URI standard.
|
||||||
added in curl 7.6)
|
.IP "-G/--get"
|
||||||
|
When used, this option will make all data specified with -d/--data or
|
||||||
|
--data-binary to be used in a HTTP GET request instead of the POST request
|
||||||
|
that otherwise would be used. The data will be appended to the URL with a '?'
|
||||||
|
separator. (Option added in curl 7.9)
|
||||||
|
|
||||||
|
If used in combination with -I, the POST data will instead be appended to the
|
||||||
|
URL with a HEAD request.
|
||||||
|
|
||||||
|
If used multiple times, nothing special happens.
|
||||||
.IP "-h/--help"
|
.IP "-h/--help"
|
||||||
Usage help.
|
Usage help.
|
||||||
.IP "-H/--header <header>"
|
.IP "-H/--header <header>"
|
||||||
@@ -223,7 +280,7 @@ set headers without knowing perfectly well what you're doing. Replacing an
|
|||||||
internal header with one without content on the right side of the colon will
|
internal header with one without content on the right side of the colon will
|
||||||
prevent that header from appearing.
|
prevent that header from appearing.
|
||||||
|
|
||||||
This option can be used multiple times.
|
This option can be used multiple times to add/replace/remove multiple headers.
|
||||||
.IP "-i/--include"
|
.IP "-i/--include"
|
||||||
(HTTP)
|
(HTTP)
|
||||||
Include the HTTP-header in the output. The HTTP-header includes things
|
Include the HTTP-header in the output. The HTTP-header includes things
|
||||||
@@ -236,7 +293,7 @@ name, IP address or host name. An example could look like:
|
|||||||
|
|
||||||
.B "curl --interface eth0:1 http://www.netscape.com/"
|
.B "curl --interface eth0:1 http://www.netscape.com/"
|
||||||
|
|
||||||
If this option is used serveral times, the last one will be used.
|
If this option is used several times, the last one will be used.
|
||||||
.IP "-I/--head"
|
.IP "-I/--head"
|
||||||
(HTTP/FTP)
|
(HTTP/FTP)
|
||||||
Fetch the HTTP-header only! HTTP-servers feature the command HEAD
|
Fetch the HTTP-header only! HTTP-servers feature the command HEAD
|
||||||
@@ -244,12 +301,27 @@ which this uses to get nothing but the header of a document. When used
|
|||||||
on a FTP file, curl displays the file size only.
|
on a FTP file, curl displays the file size only.
|
||||||
|
|
||||||
If this option is used twice, the second will again disable header only.
|
If this option is used twice, the second will again disable header only.
|
||||||
|
.IP "-j/--junk-session-cookies"
|
||||||
|
(HTTP) When curl is told to read cookies from a given file, this option will
|
||||||
|
make it discard all "session cookies". This will basicly have the same effect
|
||||||
|
as if a new session is started. Typical browsers always discard session
|
||||||
|
cookies when they're closed down. (Added in 7.9.7)
|
||||||
|
|
||||||
|
If this option is used several times, each occurrence will toggle this on/off.
|
||||||
|
.IP "-k/--insecure"
|
||||||
|
(SSL) This option explicitly allows curl to perform "insecure" SSL connections
|
||||||
|
and transfers. Starting with curl 7.10, all SSL connections will be attempted
|
||||||
|
to be made secure by using the CA certificate bundle installed by
|
||||||
|
default. This makes all connections considered "insecure" to fail unless
|
||||||
|
-k/--insecure is used.
|
||||||
|
|
||||||
|
If this option is used twice, the second time will again disable it.
|
||||||
.IP "--krb4 <level>"
|
.IP "--krb4 <level>"
|
||||||
(FTP) Enable kerberos4 authentication and use. The level must be entered and
|
(FTP) Enable kerberos4 authentication and use. The level must be entered and
|
||||||
should be one of 'clear', 'safe', 'confidential' or 'private'. Should you use
|
should be one of 'clear', 'safe', 'confidential' or 'private'. Should you use
|
||||||
a level that is not one of these, 'private' will instead be used.
|
a level that is not one of these, 'private' will instead be used.
|
||||||
|
|
||||||
If this option is used serveral times, the last one will be used.
|
If this option is used several times, the last one will be used.
|
||||||
.IP "-K/--config <config file>"
|
.IP "-K/--config <config file>"
|
||||||
Specify which config file to read curl arguments from. The config file is a
|
Specify which config file to read curl arguments from. The config file is a
|
||||||
text file in which command line arguments can be written which then will be
|
text file in which command line arguments can be written which then will be
|
||||||
@@ -261,7 +333,26 @@ treated as a comment.
|
|||||||
|
|
||||||
Specify the filename as '-' to make curl read the file from stdin.
|
Specify the filename as '-' to make curl read the file from stdin.
|
||||||
|
|
||||||
|
Note that to be able to specify a URL in the config file, you need to specify
|
||||||
|
it using the --url option, and not by simply writing the URL on its own
|
||||||
|
line. So, it could look similar to this:
|
||||||
|
|
||||||
|
url = "http://curl.haxx.se/docs/"
|
||||||
|
|
||||||
This option can be used multiple times.
|
This option can be used multiple times.
|
||||||
|
.IP "--limit-rate <speed>"
|
||||||
|
Specify the maximum transfer rate you want curl to use. This feature is useful
|
||||||
|
if you have a limited pipe and you'd prefer you have your transfer not use
|
||||||
|
your entire bandwidth.
|
||||||
|
|
||||||
|
The given speed is measured in bytes/second, unless a suffix is
|
||||||
|
appended. Appending 'k' or 'K' will count the number as kilobytes, 'm' or M'
|
||||||
|
makes it megabytes while 'g' or 'G' makes it gigabytes. Examples: 200K, 3m and
|
||||||
|
1G.
|
||||||
|
|
||||||
|
This option was introduced in curl 7.10.
|
||||||
|
|
||||||
|
If this option is used several times, the last one will be used.
|
||||||
.IP "-l/--list-only"
|
.IP "-l/--list-only"
|
||||||
(FTP)
|
(FTP)
|
||||||
When listing an FTP directory, this switch forces a name-only view.
|
When listing an FTP directory, this switch forces a name-only view.
|
||||||
@@ -269,6 +360,10 @@ 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
|
directory since the normal directory view doesn't use a standard look
|
||||||
or format.
|
or format.
|
||||||
|
|
||||||
|
This option causes an FTP NLST command to be sent. Some FTP servers
|
||||||
|
list only files in their response to NLST; they do not include
|
||||||
|
subdirectories and symbolic links.
|
||||||
|
|
||||||
If this option is used twice, the second will again disable list only.
|
If this option is used twice, the second will again disable list only.
|
||||||
.IP "-L/--location"
|
.IP "-L/--location"
|
||||||
(HTTP/HTTPS) If the server reports that the requested page has a different
|
(HTTP/HTTPS) If the server reports that the requested page has a different
|
||||||
@@ -282,9 +377,10 @@ If this option is used twice, the second will again disable location following.
|
|||||||
.IP "-m/--max-time <seconds>"
|
.IP "-m/--max-time <seconds>"
|
||||||
Maximum time in seconds that you allow the whole operation to take. This is
|
Maximum time in seconds that you allow the whole operation to take. This is
|
||||||
useful for preventing your batch jobs from hanging for hours due to slow
|
useful for preventing your batch jobs from hanging for hours due to slow
|
||||||
networks or links going down. This doesn't work fully in win32 systems.
|
networks or links going down. This doesn't work fully in win32 systems. See
|
||||||
|
also the \fI--connect-timeout\fP option.
|
||||||
|
|
||||||
If this option is used serveral times, the last one will be used.
|
If this option is used several times, the last one will be used.
|
||||||
.IP "-M/--manual"
|
.IP "-M/--manual"
|
||||||
Manual. Display the huge help text.
|
Manual. Display the huge help text.
|
||||||
.IP "-n/--netrc"
|
.IP "-n/--netrc"
|
||||||
@@ -294,6 +390,8 @@ 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
|
typically used for ftp on unix. If used with http, curl will enable user
|
||||||
authentication. See
|
authentication. See
|
||||||
.BR netrc(4)
|
.BR netrc(4)
|
||||||
|
or
|
||||||
|
.BR ftp(1)
|
||||||
for details on the file format. Curl will not complain if that file
|
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
|
hasn't the right permissions (it should not be world nor group
|
||||||
readable). The environment variable "HOME" is used to find the home
|
readable). The environment variable "HOME" is used to find the home
|
||||||
@@ -302,7 +400,7 @@ directory.
|
|||||||
A quick and very simple example of how to setup a
|
A quick and very simple example of how to setup a
|
||||||
.I .netrc
|
.I .netrc
|
||||||
to allow curl to ftp to the machine host.domain.com with user name
|
to allow curl to ftp to the machine host.domain.com with user name
|
||||||
'myself' and password 'secret' should look similar to:
|
\&'myself' and password 'secret' should look similar to:
|
||||||
|
|
||||||
.B "machine host.domain.com login myself password secret"
|
.B "machine host.domain.com login myself password secret"
|
||||||
|
|
||||||
@@ -362,7 +460,7 @@ i.e "my.host.domain" to specify machine
|
|||||||
(any single-letter string) to make it pick the machine's default
|
(any single-letter string) to make it pick the machine's default
|
||||||
.RE
|
.RE
|
||||||
|
|
||||||
If this option is used serveral times, the last one will be used.
|
If this option is used several times, the last one will be used.
|
||||||
.IP "-q"
|
.IP "-q"
|
||||||
If used as the first parameter on the command line, the
|
If used as the first parameter on the command line, the
|
||||||
.I $HOME/.curlrc
|
.I $HOME/.curlrc
|
||||||
@@ -377,6 +475,12 @@ to be run before and after the transfer. If the server returns failure for one
|
|||||||
of the commands, the entire operation will be aborted.
|
of the commands, the entire operation will be aborted.
|
||||||
|
|
||||||
This option can be used multiple times.
|
This option can be used multiple times.
|
||||||
|
.IP "--random-file <file>"
|
||||||
|
(HTTPS) Specify the path name to file containing what will be considered as
|
||||||
|
random data. The data is used to seed the random engine for SSL connections.
|
||||||
|
See also the
|
||||||
|
.I "--edg-file"
|
||||||
|
option.
|
||||||
.IP "-r/--range <range>"
|
.IP "-r/--range <range>"
|
||||||
(HTTP/FTP)
|
(HTTP/FTP)
|
||||||
Retrieve a byte range (i.e a partial document) from a HTTP/1.1 or FTP
|
Retrieve a byte range (i.e a partial document) from a HTTP/1.1 or FTP
|
||||||
@@ -415,7 +519,13 @@ document.
|
|||||||
FTP range downloads only support the simple syntax 'start-stop' (optionally
|
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.
|
with one of the numbers omitted). It depends on the non-RFC command SIZE.
|
||||||
|
|
||||||
If this option is used serveral times, the last one will be used.
|
If this option is used several times, the last one will be used.
|
||||||
|
.IP "-R/--remote-time"
|
||||||
|
When used, this will make libcurl attempt to figure out the timestamp of the
|
||||||
|
remote file, and if that is available make the local file get that same
|
||||||
|
timestamp.
|
||||||
|
|
||||||
|
If this option is used twice, the second time disables this again.
|
||||||
.IP "-s/--silent"
|
.IP "-s/--silent"
|
||||||
Silent mode. Don't show progress meter or error messages. Makes
|
Silent mode. Don't show progress meter or error messages. Makes
|
||||||
Curl mute.
|
Curl mute.
|
||||||
@@ -425,34 +535,62 @@ If this option is used twice, the second will again disable mute.
|
|||||||
When used with -s it makes curl show error message if it fails.
|
When used with -s it makes curl show error message if it fails.
|
||||||
|
|
||||||
If this option is used twice, the second will again disable show error.
|
If this option is used twice, the second will again disable show error.
|
||||||
.IP "-t/--upload"
|
.IP "--stderr <file>"
|
||||||
.B Deprecated. Use '-T -' instead.
|
Redirect all writes to stderr to the specified file instead. If the file name
|
||||||
Transfer the stdin data to the specified file. Curl will read
|
is a plain '-', it is instead written to stdout. This option has no point when
|
||||||
everything from stdin until EOF and store with the supplied name. If
|
you're using a shell with decent redirecting capabilities.
|
||||||
this is used on a http(s) server, the PUT command will be used.
|
|
||||||
|
If this option is used several times, the last one will be used.
|
||||||
|
.IP "-t/--telnet-option <OPT=val>"
|
||||||
|
Pass options to the telnet protocol. Supported options are:
|
||||||
|
|
||||||
|
TTYPE=<term> Sets the terminal type.
|
||||||
|
|
||||||
|
XDISPLOC=<X display> Sets the X display location.
|
||||||
|
|
||||||
|
NEW_ENV=<var,val> Sets an environment variable.
|
||||||
.IP "-T/--upload-file <file>"
|
.IP "-T/--upload-file <file>"
|
||||||
Like -t, but this transfers the specified local file. If there is no
|
This transfers the specified local file to the remote URL. If there is no file
|
||||||
file part in the specified URL, Curl will append the local file
|
part in the specified URL, Curl will append the local file name. NOTE that you
|
||||||
name. NOTE that you must use a trailing / on the last directory to
|
must use a trailing / on the last directory to really prove to Curl that there
|
||||||
really prove to Curl that there is no file name or curl will
|
is no file name or curl will think that your last directory name is the remote
|
||||||
think that your last directory name is the remote file name to
|
file name to use. That will most likely cause the upload operation to fail. If
|
||||||
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.
|
this is used on a http(s) server, the PUT command will be used.
|
||||||
|
|
||||||
If this option is used serveral times, the last one will be used.
|
Use the file name "-" (a single dash) to use stdin instead of a given file.
|
||||||
|
|
||||||
|
If this option is used several times, the last one will be used.
|
||||||
|
.IP "--trace <file>"
|
||||||
|
Enables a full trace dump of all incoming and outgoing data, including
|
||||||
|
descriptive information, to the given output file. Use "-" as filename to have
|
||||||
|
the output sent to stdout.
|
||||||
|
|
||||||
|
If this option is used several times, the last one will be used. (Added in
|
||||||
|
curl 7.9.7)
|
||||||
|
.IP "--trace-ascii <file>"
|
||||||
|
Enables a full trace dump of all incoming and outgoing data, including
|
||||||
|
descriptive information, to the given output file. Use "-" as filename to have
|
||||||
|
the output sent to stdout.
|
||||||
|
|
||||||
|
This is very similar to --trace, but leaves out the hex part and only shows
|
||||||
|
the ASCII part of the dump. It makes smaller output that might be easier to
|
||||||
|
read for untrained humans.
|
||||||
|
|
||||||
|
If this option is used several times, the last one will be used. (Added in
|
||||||
|
curl 7.9.7)
|
||||||
.IP "-u/--user <user:password>"
|
.IP "-u/--user <user:password>"
|
||||||
Specify user and password to use when fetching. See README.curl for detailed
|
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
|
examples of how to use this. If no password is specified, curl will
|
||||||
ask for it interactively.
|
ask for it interactively.
|
||||||
|
|
||||||
If this option is used serveral times, the last one will be used.
|
If this option is used several times, the last one will be used.
|
||||||
.IP "-U/--proxy-user <user:password>"
|
.IP "-U/--proxy-user <user:password>"
|
||||||
Specify user and password to use for Proxy authentication. If no
|
Specify user and password to use for Proxy authentication. If no
|
||||||
password is specified, curl will ask for it interactively.
|
password is specified, curl will ask for it interactively.
|
||||||
|
|
||||||
If this option is used serveral times, the last one will be used.
|
If this option is used several times, the last one will be used.
|
||||||
.IP "--url <URL>"
|
.IP "--url <URL>"
|
||||||
Specify a URL to fetch. This option is mostly handy when you wanna specify
|
Specify a URL to fetch. This option is mostly handy when you want to specify
|
||||||
URL(s) in a config file.
|
URL(s) in a config file.
|
||||||
|
|
||||||
This option may be used any number of times. To control where this URL is written, use the
|
This option may be used any number of times. To control where this URL is written, use the
|
||||||
@@ -461,10 +599,13 @@ or the
|
|||||||
.I -O
|
.I -O
|
||||||
options.
|
options.
|
||||||
.IP "-v/--verbose"
|
.IP "-v/--verbose"
|
||||||
Makes the fetching more verbose/talkative. Mostly usable for
|
Makes the fetching more verbose/talkative. Mostly usable for debugging. Lines
|
||||||
debugging. Lines starting with '>' means data sent by curl, '<'
|
starting with '>' means data sent by curl, '<' means data received by curl
|
||||||
means data received by curl that is hidden in normal cases and lines
|
that is hidden in normal cases and lines starting with '*' means additional
|
||||||
starting with '*' means additional info provided by curl.
|
info provided by curl.
|
||||||
|
|
||||||
|
Note that if you want to see HTTP headers in the output, \fI-i/--include\fP
|
||||||
|
might be option you're looking for.
|
||||||
|
|
||||||
If this option is used twice, the second will again disable verbose.
|
If this option is used twice, the second will again disable verbose.
|
||||||
.IP "-V/--version"
|
.IP "-V/--version"
|
||||||
@@ -480,7 +621,7 @@ write "@-".
|
|||||||
The variables present in the output format will be substituted by the value or
|
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
|
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
|
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
|
%%. You can output a newline by using \\n, a carriage return with \\r and a tab
|
||||||
space with \\t.
|
space with \\t.
|
||||||
|
|
||||||
.B NOTE:
|
.B NOTE:
|
||||||
@@ -514,6 +655,11 @@ 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
|
about to begin. This includes all pre-transfer commands and negotiations that
|
||||||
are specific to the particular protocol(s) involved.
|
are specific to the particular protocol(s) involved.
|
||||||
.TP
|
.TP
|
||||||
|
.B time_starttransfer
|
||||||
|
The time, in seconds, it took from the start until the first byte is just about
|
||||||
|
to be transfered. This includes time_pretransfer and also the time the
|
||||||
|
server needs to calculate the result.
|
||||||
|
.TP
|
||||||
.B size_download
|
.B size_download
|
||||||
The total amount of bytes that were downloaded.
|
The total amount of bytes that were downloaded.
|
||||||
.TP
|
.TP
|
||||||
@@ -531,14 +677,26 @@ The average download speed that curl measured for the complete download.
|
|||||||
.TP
|
.TP
|
||||||
.B speed_upload
|
.B speed_upload
|
||||||
The average upload speed that curl measured for the complete upload.
|
The average upload speed that curl measured for the complete upload.
|
||||||
|
.TP
|
||||||
|
.B content_type
|
||||||
|
The Content-Type of the requested document, if there was any. (Added in 7.9.5)
|
||||||
.RE
|
.RE
|
||||||
|
|
||||||
If this option is used serveral times, the last one will be used.
|
If this option is used several times, the last one will be used.
|
||||||
.IP "-x/--proxy <proxyhost[:port]>"
|
.IP "-x/--proxy <proxyhost[:port]>"
|
||||||
Use specified proxy. If the port number is not specified, it is assumed at
|
Use specified HTTP proxy. If the port number is not specified, it is assumed
|
||||||
port 1080.
|
at port 1080.
|
||||||
|
|
||||||
If this option is used serveral times, the last one will be used.
|
This option overrides existing environment variables that sets proxy to
|
||||||
|
use. If there's an environment variable setting a proxy, you can set proxy to
|
||||||
|
"" to override it.
|
||||||
|
|
||||||
|
\fBNote\fP that all operations that are performed over a HTTP proxy will
|
||||||
|
transparantly be converted to HTTP. It means that certain protocol specific
|
||||||
|
operations might not be available. This is not the case if you can tunnel
|
||||||
|
through the proxy, as done with the \fI-p/--proxytunnel\fP option.
|
||||||
|
|
||||||
|
If this option is used several times, the last one will be used.
|
||||||
.IP "-X/--request <command>"
|
.IP "-X/--request <command>"
|
||||||
(HTTP)
|
(HTTP)
|
||||||
Specifies a custom request to use when communicating with the HTTP server.
|
Specifies a custom request to use when communicating with the HTTP server.
|
||||||
@@ -549,19 +707,22 @@ HTTP 1.1 specification for details and explanations.
|
|||||||
Specifies a custom FTP command to use instead of LIST when doing file lists
|
Specifies a custom FTP command to use instead of LIST when doing file lists
|
||||||
with ftp.
|
with ftp.
|
||||||
|
|
||||||
If this option is used serveral times, the last one will be used.
|
If this option is used several times, the last one will be used.
|
||||||
.IP "-y/--speed-time <time>"
|
.IP "-y/--speed-time <time>"
|
||||||
If a download is slower than speed-limit bytes per second during a speed-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
|
period, the download gets aborted. If speed-time is used, the default
|
||||||
speed-limit will be 1 unless set with -y.
|
speed-limit will be 1 unless set with -y.
|
||||||
|
|
||||||
If this option is used serveral times, the last one will be used.
|
This option controls transfers and thus will not affect slow connects etc. If
|
||||||
|
this is a concern for you, try the \fI--connect-timeout\fP option.
|
||||||
|
|
||||||
|
If this option is used several times, the last one will be used.
|
||||||
.IP "-Y/--speed-limit <speed>"
|
.IP "-Y/--speed-limit <speed>"
|
||||||
If a download is slower than this given speed, in bytes per second, for
|
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
|
speed-time seconds it gets aborted. speed-time is set with -Y and is 30 if
|
||||||
not set.
|
not set.
|
||||||
|
|
||||||
If this option is used serveral times, the last one will be used.
|
If this option is used several times, the last one will be used.
|
||||||
.IP "-z/--time-cond <date expression>"
|
.IP "-z/--time-cond <date expression>"
|
||||||
(HTTP)
|
(HTTP)
|
||||||
Request to get a file that has been modified later than the given time and
|
Request to get a file that has been modified later than the given time and
|
||||||
@@ -577,35 +738,34 @@ 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
|
that is older than the given date/time, default is a document that is newer
|
||||||
than the specified date/time.
|
than the specified date/time.
|
||||||
|
|
||||||
If this option is used serveral times, the last one will be used.
|
If this option is used several times, the last one will be used.
|
||||||
|
.IP "-Z/--max-redirs <num>"
|
||||||
|
Set maximum number of redirection-followings allowed. If -L/--location is
|
||||||
|
used, this option can be used to prevent curl from following redirections "in
|
||||||
|
absurdum".
|
||||||
|
|
||||||
|
If this option is used several times, the last one will be used.
|
||||||
.IP "-3/--sslv3"
|
.IP "-3/--sslv3"
|
||||||
(HTTPS)
|
(HTTPS)
|
||||||
Forces curl to use SSL version 3 when negotiating with a remote SSL server.
|
Forces curl to use SSL version 3 when negotiating with a remote SSL server.
|
||||||
.IP "-2/--sslv2"
|
.IP "-2/--sslv2"
|
||||||
(HTTPS)
|
(HTTPS)
|
||||||
Forces curl to use SSL version 2 when negotiating with a remote SSL server.
|
Forces curl to use SSL version 2 when negotiating with a remote SSL server.
|
||||||
|
.IP "-0/--http1.0"
|
||||||
|
(HTTP) Forces curl to issue its requests using HTTP 1.0 instead of using its
|
||||||
|
internally preferred: HTTP 1.1.
|
||||||
.IP "-#/--progress-bar"
|
.IP "-#/--progress-bar"
|
||||||
Make curl display progress information as a progress bar instead of the
|
Make curl display progress information as a progress bar instead of the
|
||||||
default statistics.
|
default statistics.
|
||||||
|
|
||||||
If this option is used twice, the second will again disable the progress bar.
|
If this option is used twice, the second will again disable the progress bar.
|
||||||
.IP "--crlf"
|
|
||||||
(FTP) Convert LF to CRLF in upload. Useful for MVS (OS/390).
|
|
||||||
|
|
||||||
If this option is used twice, the second will again disable crlf converting.
|
|
||||||
.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.
|
|
||||||
|
|
||||||
If this option is used serveral times, the last one will be used.
|
|
||||||
.SH FILES
|
.SH FILES
|
||||||
.I ~/.curlrc
|
.I ~/.curlrc
|
||||||
.RS
|
.RS
|
||||||
Default config file.
|
Default config file.
|
||||||
|
|
||||||
.SH ENVIRONMENT
|
.SH ENVIRONMENT
|
||||||
.IP "HTTP_PROXY [protocol://]<host>[:port]"
|
.IP "http_proxy [protocol://]<host>[:port]"
|
||||||
Sets proxy server to use for HTTP.
|
Sets proxy server to use for HTTP.
|
||||||
.IP "HTTPS_PROXY [protocol://]<host>[:port]"
|
.IP "HTTPS_PROXY [protocol://]<host>[:port]"
|
||||||
Sets proxy server to use for HTTPS.
|
Sets proxy server to use for HTTPS.
|
||||||
@@ -616,11 +776,8 @@ Sets proxy server to use for GOPHER.
|
|||||||
.IP "ALL_PROXY [protocol://]<host>[:port]"
|
.IP "ALL_PROXY [protocol://]<host>[:port]"
|
||||||
Sets proxy server to use if no protocol-specific proxy is set.
|
Sets proxy server to use if no protocol-specific proxy is set.
|
||||||
.IP "NO_PROXY <comma-separated list of hosts>"
|
.IP "NO_PROXY <comma-separated list of hosts>"
|
||||||
list of host names that shouldn't go through any proxy. If set to a
|
list of host names that shouldn't go through any proxy. If set to a asterisk
|
||||||
asterisk '*' only, it matches all hosts.
|
'*' 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
|
.SH EXIT CODES
|
||||||
There exists a bunch of different error codes and their corresponding error
|
There exists a bunch of different error codes and their corresponding error
|
||||||
messages that may appear during bad conditions. At the time of this writing,
|
messages that may appear during bad conditions. At the time of this writing,
|
||||||
@@ -720,75 +877,43 @@ Internal error. A function was called in a bad order.
|
|||||||
.IP 45
|
.IP 45
|
||||||
Interface error. A specified outgoing interface could not be used.
|
Interface error. A specified outgoing interface could not be used.
|
||||||
.IP 46
|
.IP 46
|
||||||
Bad password entered. An error was signalled when the password was entered.
|
Bad password entered. An error was signaled when the password was entered.
|
||||||
.IP 47
|
.IP 47
|
||||||
Too many redirects. When following redirects, curl hit the maximum amount.
|
Too many redirects. When following redirects, curl hit the maximum amount.
|
||||||
|
.IP 48
|
||||||
|
Unknown TELNET option specified.
|
||||||
|
.IP 49
|
||||||
|
Malformed telnet option.
|
||||||
|
.IP 51
|
||||||
|
The remote peer's SSL certificate wasn't ok
|
||||||
|
.IP 52
|
||||||
|
The server didn't reply anything, which here is considered an error.
|
||||||
|
.IP 53
|
||||||
|
SSL crypto engine not found
|
||||||
|
.IP 54
|
||||||
|
Cannot set SSL crypto engine as default
|
||||||
|
.IP 55
|
||||||
|
Failed sending network data
|
||||||
|
.IP 56
|
||||||
|
Failure in receiving network data
|
||||||
|
.IP 57
|
||||||
|
Share is in use (internal error)
|
||||||
|
.IP 58
|
||||||
|
Problem with the local certificate
|
||||||
|
.IP 59
|
||||||
|
Couldn't use specified SSL cipher
|
||||||
|
.IP 60
|
||||||
|
Problem with the CA cert (path? permission?)
|
||||||
|
.IP 61
|
||||||
|
Unrecognized transfer encoding
|
||||||
.IP XX
|
.IP XX
|
||||||
There will appear more error codes here in future releases. The existing ones
|
There will appear more error codes here in future releases. The existing ones
|
||||||
are meant to never change.
|
are meant to never change.
|
||||||
.SH BUGS
|
.SH BUGS
|
||||||
If you do find bugs, mail them to curl-bug@haxx.se.
|
If you do find bugs, mail them to curl-bug@haxx.se.
|
||||||
.SH AUTHORS / CONTRIBUTORS
|
.SH AUTHORS / CONTRIBUTORS
|
||||||
- Daniel Stenberg <Daniel.Stenberg@haxx.se>
|
Daniel Stenberg is the main author, but the whole list of contributors is
|
||||||
- Rafael Sagula <sagula@inf.ufrgs.br>
|
found in the separate THANKS file.
|
||||||
- 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.Stenberg@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 <Linus.Nielsen@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
|
|
||||||
- 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>
|
|
||||||
|
|
||||||
.SH WWW
|
.SH WWW
|
||||||
http://curl.haxx.se
|
http://curl.haxx.se
|
||||||
.SH FTP
|
.SH FTP
|
||||||
|
|||||||
@@ -1,25 +0,0 @@
|
|||||||
.\" You can view this file with:
|
|
||||||
.\" nroff -man [file]
|
|
||||||
.\" Written by daniel@haxx.se
|
|
||||||
.\"
|
|
||||||
.TH curl_easy_cleanup 3 "22 May 2000" "Curl 7.0" "libcurl Manual"
|
|
||||||
.SH NAME
|
|
||||||
curl_easy_cleanup - End a libcurl "easy" session
|
|
||||||
.SH SYNOPSIS
|
|
||||||
.B #include <curl/easy.h>
|
|
||||||
.sp
|
|
||||||
.BI "curl_easy_cleanup(CURL *" handle ");
|
|
||||||
.ad
|
|
||||||
.SH DESCRIPTION
|
|
||||||
This function must be the last function to call for a curl session. It is the
|
|
||||||
opposite of the
|
|
||||||
.I curl_easy_init
|
|
||||||
function and must be called with the same
|
|
||||||
.I handle
|
|
||||||
as input as the curl_easy_init call returned.
|
|
||||||
.SH RETURN VALUE
|
|
||||||
None
|
|
||||||
.SH "SEE ALSO"
|
|
||||||
.BR curl_easy_init "(3), "
|
|
||||||
.SH BUGS
|
|
||||||
Surely there are some, you tell me!
|
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
.\" You can view this file with:
|
|
||||||
.\" nroff -man [file]
|
|
||||||
.\" Written by daniel@haxx.se
|
|
||||||
.\"
|
|
||||||
.TH curl_easy_init 3 "26 September 2000" "Curl 7.0" "libcurl Manual"
|
|
||||||
.SH NAME
|
|
||||||
curl_easy_init - Start a libcurl "easy" session
|
|
||||||
.SH SYNOPSIS
|
|
||||||
.B #include <curl/easy.h>
|
|
||||||
.sp
|
|
||||||
.BI "CURL *curl_easy_init( );"
|
|
||||||
.ad
|
|
||||||
.SH DESCRIPTION
|
|
||||||
This function must be the first function to call, and it returns a CURL handle
|
|
||||||
that you shall use as input to the other easy-functions. The init calls
|
|
||||||
intializes curl and this call MUST have a corresponding call to
|
|
||||||
.I curl_easy_cleanup
|
|
||||||
when the operation is complete.
|
|
||||||
|
|
||||||
On win32 systems, you need to init the winsock stuff manually, libcurl will
|
|
||||||
not do that for you. WSAStartup() and WSACleanup() should be used accordingly.
|
|
||||||
.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), "
|
|
||||||
.SH BUGS
|
|
||||||
Surely there are some, you tell me!
|
|
||||||
@@ -1,33 +0,0 @@
|
|||||||
.\" You can view this file with:
|
|
||||||
.\" nroff -man [file]
|
|
||||||
.\" Written by daniel@haxx.se
|
|
||||||
.\"
|
|
||||||
.TH curl_easy_perform 3 "25 Jan 2001" "Curl 7.0" "libcurl Manual"
|
|
||||||
.SH NAME
|
|
||||||
curl_easy_perform - Do the actual transfer in a "easy" session
|
|
||||||
.SH SYNOPSIS
|
|
||||||
.B #include <curl/easy.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.
|
|
||||||
|
|
||||||
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 willo 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!
|
|
||||||
@@ -1,409 +0,0 @@
|
|||||||
.\" You can view this file with:
|
|
||||||
.\" nroff -man [file]
|
|
||||||
.\" Written by daniel@haxx.se
|
|
||||||
.\"
|
|
||||||
.TH curl_easy_setopt 3 "28 November 2000" "Curl 7.5" "libcurl Manual"
|
|
||||||
.SH NAME
|
|
||||||
curl_easy_setopt - Set curl easy-session options
|
|
||||||
.SH SYNOPSIS
|
|
||||||
.B #include <curl/easy.h>
|
|
||||||
.sp
|
|
||||||
.BI "CURLcode curl_easy_setopt(CURL *" handle ", CURLoption "option ", ...);
|
|
||||||
.ad
|
|
||||||
.SH DESCRIPTION
|
|
||||||
curl_easy_setopt() is called to tell libcurl how to behave in a number of
|
|
||||||
ways. Most operations in libcurl have default actions, and by using the
|
|
||||||
appropriate options you can make them behave differently (as documented). All
|
|
||||||
options are set with the
|
|
||||||
.I option
|
|
||||||
followed by a parameter. That parameter can be a long, a function pointer or
|
|
||||||
an object pointer, all depending on what the option in question 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 calls in the setup phase.
|
|
||||||
|
|
||||||
The
|
|
||||||
.I "handle"
|
|
||||||
is the return code from the
|
|
||||||
.I "curl_easy_init"
|
|
||||||
call.
|
|
||||||
.SH OPTIONS
|
|
||||||
These options are in a bit of random order, but you'll figure it out!
|
|
||||||
.TP 0.8i
|
|
||||||
.B CURLOPT_FILE
|
|
||||||
Data pointer to pass instead of FILE * to the file write function. Note that
|
|
||||||
if you specify the
|
|
||||||
.I CURLOPT_WRITEFUNCTION
|
|
||||||
, this is the pointer you'll get as input.
|
|
||||||
.TP
|
|
||||||
.B CURLOPT_WRITEFUNCTION
|
|
||||||
Function pointer that should use match the following prototype:
|
|
||||||
.BI "size_t function( void *ptr, size_t size, size_t nmemb, FILE *stream);"
|
|
||||||
This function gets called by libcurl as soon as there is received data that
|
|
||||||
needs to be written down. The size of the data pointed to by
|
|
||||||
.I ptr
|
|
||||||
is
|
|
||||||
.I size
|
|
||||||
multiplied with
|
|
||||||
.I nmemb.
|
|
||||||
Return the number of bytes actually written or return -1 to signal error to the library (it will cause it to abort the transfer).
|
|
||||||
.TP
|
|
||||||
.B CURLOPT_INFILE
|
|
||||||
Data pointer to pass instead of FILE * to the file read function. Note that if
|
|
||||||
you specify the
|
|
||||||
.I CURLOPT_READFUNCTION
|
|
||||||
, this is the pointer you'll get as input.
|
|
||||||
.TP
|
|
||||||
.B CURLOPT_READFUNCTION
|
|
||||||
Function pointer that should use match the following prototype:
|
|
||||||
.BI "size_t function( void *ptr, size_t size, size_t nmemb, FILE *stream);"
|
|
||||||
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
|
|
||||||
.I ptr
|
|
||||||
may be filled with at most
|
|
||||||
.I size
|
|
||||||
multiplied with
|
|
||||||
.I nmemb
|
|
||||||
number of bytes. Your function must return the actual number of bytes that you
|
|
||||||
stored in that memory area. Returning -1 will signal an error to the library
|
|
||||||
and cause it to abort the current transfer immediately.
|
|
||||||
.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_URL
|
|
||||||
The actual URL to deal with. The parameter should be a char * to a zero
|
|
||||||
terminated string. NOTE: this option is currently required!
|
|
||||||
.TP
|
|
||||||
.B CURLOPT_PROXY
|
|
||||||
If you need libcurl to use a http proxy to access the outside world, set the
|
|
||||||
proxy string with this option. The parameter should be a char * to a zero
|
|
||||||
terminated string. 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.
|
|
||||||
.TP
|
|
||||||
.B CURLOPT_PROXYPORT
|
|
||||||
Set this long with this option to set the proxy port to use unless it is
|
|
||||||
specified in the proxy string CURLOPT_PROXY.
|
|
||||||
.TP
|
|
||||||
.B CURLOPT_HTTPPROXYTUNNEL
|
|
||||||
Set the parameter to non-zero to get the library to tunnel all non-HTTP
|
|
||||||
operations through the given HTTP proxy. Do note that there is a big
|
|
||||||
difference to use a proxy and to tunnel through it. If you don't know what
|
|
||||||
this means, you probably don't want this tunnel option. (Added in libcurl 7.3)
|
|
||||||
.TP
|
|
||||||
.B CURLOPT_VERBOSE
|
|
||||||
Set the parameter to non-zero to get the library to display a lot of verbose
|
|
||||||
information about its operations.
|
|
||||||
.TP
|
|
||||||
.B CURLOPT_HEADER
|
|
||||||
A non-zero parameter tells the library to include the header in the
|
|
||||||
output. This is only relevant for protocols that actually has a header
|
|
||||||
preceeding the data (like HTTP).
|
|
||||||
.TP
|
|
||||||
.B CURLOPT_NOPROGRESS
|
|
||||||
A non-zero parameter tells the library to shut of the built-in progress meter
|
|
||||||
completely. (NOTE: future versions of the lib is likely to not have any
|
|
||||||
built-in progress meter at all).
|
|
||||||
.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 a separate header and
|
|
||||||
body part.
|
|
||||||
.TP
|
|
||||||
.B CURLOPT_FAILONERROR
|
|
||||||
A non-zero parameter tells the library to fail silently if the HTTP code
|
|
||||||
returned is equal or larger than 300. The default action would be to return
|
|
||||||
the page normally, ignoring that code.
|
|
||||||
.TP
|
|
||||||
.B CURLOPT_UPLOAD
|
|
||||||
A non-zero parameter tells the library to prepare for an upload. The
|
|
||||||
CURLOPT_INFILE and CURLOPT_INFILESIZE are also interesting for uploads.
|
|
||||||
.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.
|
|
||||||
.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 listin that would include file
|
|
||||||
sizes, dates etc.
|
|
||||||
.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_NETRC
|
|
||||||
A non-zero parameter tells the library to scan your
|
|
||||||
.I ~/.netrc
|
|
||||||
file to find user name and password for the remote site you are about to
|
|
||||||
access. Do note that curl does not verify that the file has the correct
|
|
||||||
properties set (as the standard unix ftp client does), and that only machine
|
|
||||||
name, user name and password is taken into account (init macros and similar
|
|
||||||
things aren't supported).
|
|
||||||
.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. NOTE that this means that the library
|
|
||||||
will resend the same request on the new location and follow new Location:
|
|
||||||
headers all the way until no more such headers are returned.
|
|
||||||
.TP
|
|
||||||
.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 useable when transfering text data between
|
|
||||||
system with different views on certain characters, such as newlines or
|
|
||||||
similar.
|
|
||||||
.TP
|
|
||||||
.B CURLOPT_PUT
|
|
||||||
A non-zero parameter tells the library to use HTTP PUT a file. The file to put
|
|
||||||
must be set with CURLOPT_INFILE and CURLOPT_INFILESIZE.
|
|
||||||
.TP
|
|
||||||
.B CURLOPT_MUTE
|
|
||||||
A non-zero parameter tells the library to be completely quiet.
|
|
||||||
.TP
|
|
||||||
.B CURLOPT_USERPWD
|
|
||||||
Pass a char * as parameter, which should be [username]:[password] to use for
|
|
||||||
the connection. If the password is left out, you will be prompted for it.
|
|
||||||
.TP
|
|
||||||
.B CURLOPT_PROXYUSERPWD
|
|
||||||
Pass a char * as parameter, which should be [username]:[password] to use for
|
|
||||||
the connection to the HTTP proxy. If the password is left out, you will be
|
|
||||||
prompted for it.
|
|
||||||
.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. The HTTP
|
|
||||||
transfers also support several intervals, separated with commas as in
|
|
||||||
.I "X-Y,N-M".
|
|
||||||
.TP
|
|
||||||
.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.
|
|
||||||
.TP
|
|
||||||
.B CURLOPT_TIMEOUT
|
|
||||||
Pass a long as parameter containing the maximum time in seconds that you allow
|
|
||||||
the libcurl transfer operation to take. Do note that normally, name lookups
|
|
||||||
maky take a considerable time and that limiting the operation to less than a
|
|
||||||
few minutes risk aborting perfectly normal operations.
|
|
||||||
.TP
|
|
||||||
.B CURLOPT_POSTFIELDS
|
|
||||||
Pass a char * as parameter, which should be the full data to post in a HTTP
|
|
||||||
post operation. See also the CURLOPT_POST.
|
|
||||||
.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. Also, 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 data
|
|
||||||
size. (Added in libcurl 7.2)
|
|
||||||
.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.
|
|
||||||
.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.
|
|
||||||
.TP
|
|
||||||
.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.
|
|
||||||
.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_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_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.
|
|
||||||
.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 'struct
|
|
||||||
curl_slist' structs properly filled in. Use
|
|
||||||
.I curl_slist_append(3)
|
|
||||||
to create the list and
|
|
||||||
.I curl_slist_free_all(3)
|
|
||||||
to clean up an entire list.
|
|
||||||
.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
|
|
||||||
.I curl_formparse(3)
|
|
||||||
as documented.
|
|
||||||
.TP
|
|
||||||
.B CURLOPT_SSLCERT
|
|
||||||
Pass a pointer to a zero terminated string as parameter. The string should be
|
|
||||||
the file name of your certficicate in PEM format.
|
|
||||||
.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.
|
|
||||||
.TP
|
|
||||||
.B CURLOPT_CRLF
|
|
||||||
Convert unix newlines to CRLF newlines on FTP uploads.
|
|
||||||
.TP
|
|
||||||
.B CURLOPT_QUOTE
|
|
||||||
Pass a pointer to a linked list of FTP commands to pass to the server prior to
|
|
||||||
your ftp request. The linked list should be a fully valid list of 'struct
|
|
||||||
curl_slist' structs properly filled in. Use
|
|
||||||
.I curl_slist_append(3)
|
|
||||||
to append strings (commands) to the list, and clear the entire list afterwards
|
|
||||||
with
|
|
||||||
.I curl_slist_free_all(3)
|
|
||||||
.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
|
|
||||||
.I "CURLOPT_QUOTE"
|
|
||||||
.TP
|
|
||||||
.B CURLOPT_WRITEHEADER
|
|
||||||
Pass a FILE * to be used to write the header part of the received data to.
|
|
||||||
.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. The cookie data may be in netscape
|
|
||||||
cookie data format or just regular HTTP-style headers dumped to a file.
|
|
||||||
.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 will have to use this option.
|
|
||||||
.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 aa 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 as specified in CURLOPT_TIMECONDITION or if that
|
|
||||||
isn't used, it will be TIMECOND_IFMODSINCE by default.
|
|
||||||
.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 the HTTP request. This is useful for doing
|
|
||||||
DELETE or other more obscure HTTP requests. Don't do this at will, make sure
|
|
||||||
your server supports the command first.
|
|
||||||
.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_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 libcurl 7.3)
|
|
||||||
.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 libcurl 7.3)
|
|
||||||
.TP
|
|
||||||
.B CURLOPT_WRITEINFO
|
|
||||||
(NOT PRESENT IN 7.4 or later!)
|
|
||||||
Pass a pointer to a zero terminated string as parameter. It will be used to
|
|
||||||
report information after a successful request. This string may contain
|
|
||||||
variables that will be substituted by their contents when output. Described
|
|
||||||
elsewhere.
|
|
||||||
.TP
|
|
||||||
.B CURLOPT_PROGRESSFUNCTION
|
|
||||||
Function pointer that should match the
|
|
||||||
.BI curl_progress_callback
|
|
||||||
prototype found in
|
|
||||||
.I <curl/curl.h>
|
|
||||||
This function gets called by libcurl instead of its internal
|
|
||||||
equivalent. 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
|
|
||||||
CURLE_ABORTED_BY_CALLBACK.
|
|
||||||
.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
|
|
||||||
.I CURLOPT_PROGRESSFUNCTION
|
|
||||||
.
|
|
||||||
.TP
|
|
||||||
.B CURLOPT_SSL_VERIFYPEER
|
|
||||||
Pass a long that is set to a non-zero value to make curl verify the peer's
|
|
||||||
certificate. The certificate to verify against must be specified with the
|
|
||||||
CURLOPT_CAINFO option. (Added in 7.4.2)
|
|
||||||
.TP
|
|
||||||
.B CURLOPT_CAINFO
|
|
||||||
Pass a char * to a zero terminated file naming holding the certificate 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_PASSWDFUNCTION
|
|
||||||
Pass a pointer to a curl_passwd_callback function that will then be called
|
|
||||||
instead of the internal one if libcurl requests a password. The function must
|
|
||||||
match this prototype:
|
|
||||||
.BI "int my_getpass(void *client, char *prompt, char* buffer, int buflen );"
|
|
||||||
If set to NULL, it equals to making the function always fail. If the function
|
|
||||||
returns a non-zero value, it will abort the operation and an error
|
|
||||||
(CURLE_BAD_PASSWORD_ENTERED) will be returned.
|
|
||||||
.I client
|
|
||||||
is a generic pointer, see CURLOPT_PASSWDDATA.
|
|
||||||
.I prompt
|
|
||||||
is a zero-terminated string that is text that prefixes the input request.
|
|
||||||
.I buffer
|
|
||||||
is a pointer to data where the entered password should be stored and
|
|
||||||
.I buflen
|
|
||||||
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 CURLOPT_PASSWDFUNCTION function. (Added in
|
|
||||||
7.4.2)
|
|
||||||
.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
|
|
||||||
curl_easy_getinfo() function with the CURLINFO_FILETIME argument can be used
|
|
||||||
after a transfer to extract the received time (if any). (Added in 7.5)
|
|
||||||
.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. This
|
|
||||||
option only makes sense if the CURLOPT_FOLLOWLOCATION is used at the same
|
|
||||||
time. (Added in 7.5)
|
|
||||||
.PP
|
|
||||||
.SH RETURN VALUE
|
|
||||||
0 means the option was set properly, non-zero means an error as
|
|
||||||
.I <curl/curl.h>
|
|
||||||
defines
|
|
||||||
.SH "SEE ALSO"
|
|
||||||
.BR curl_easy_init "(3), " curl_easy_cleanup "(3), "
|
|
||||||
.SH BUGS
|
|
||||||
Surely there are some, you tell me!
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
.\" You can view this file with:
|
|
||||||
.\" nroff -man [file]
|
|
||||||
.\" Written by daniel@haxx.se
|
|
||||||
.\"
|
|
||||||
.TH curl_formfree 3 "17 November 2000" "Curl 7.5" "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_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) "
|
|
||||||
.SH BUGS
|
|
||||||
Surely there are some, you tell me!
|
|
||||||
|
|
||||||
@@ -1,62 +0,0 @@
|
|||||||
.\" You can view this file with:
|
|
||||||
.\" nroff -man [file]
|
|
||||||
.\" Written by daniel@haxx.se
|
|
||||||
.\"
|
|
||||||
.TH curl_formparse 3 "6 June 2000" "Curl 7.0" "libcurl Manual"
|
|
||||||
.SH NAME
|
|
||||||
curl_formparse - add a section to a multipart/formdata HTTP POST
|
|
||||||
.SH SYNOPSIS
|
|
||||||
.B #include <curl/curl.h>
|
|
||||||
.sp
|
|
||||||
.BI "CURLcode *curl_formparse(char *" string, "struct HttpPost **" firstitem,
|
|
||||||
.BI "struct HttpPost ** "lastitem ");"
|
|
||||||
.ad
|
|
||||||
.SH DESCRIPTION
|
|
||||||
curl_formparse() is used to append sections when building a multipart/formdata
|
|
||||||
HTTP POST. Append one section at a time until you've added all the sections
|
|
||||||
you want included and then you pass the
|
|
||||||
.I firstitem
|
|
||||||
pointer as parameter to CURLOPT_HTTPPOST.
|
|
||||||
.I lastitem
|
|
||||||
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 in a faster way.
|
|
||||||
.I string
|
|
||||||
must be a zero terminated string following the following syntax.
|
|
||||||
.SH "FORM PARSE STRINGS"
|
|
||||||
The
|
|
||||||
.I string
|
|
||||||
parameter must be using one of the following patterns. Note that the []
|
|
||||||
letters should not be included in the real-life string.
|
|
||||||
.TP 0.8i
|
|
||||||
.B [name]=[contents]
|
|
||||||
Add a form field named 'name' with the contents 'contents'. This is the
|
|
||||||
typcial contents of the HTML tag <input type=text>.
|
|
||||||
.TP
|
|
||||||
.B [name]=@[filename]
|
|
||||||
Add a form field named 'name' with the contents as read from the local file
|
|
||||||
named 'filename'. This is the typcial contents of the HTML tag <input
|
|
||||||
type=file>.
|
|
||||||
.TP
|
|
||||||
.B [name]=@[filename1,filename2,...]
|
|
||||||
Add a form field named 'name' with the contents as read from the local files
|
|
||||||
named 'filename1' and 'filename2'. This is identical to the upper, except that
|
|
||||||
you get the contents of several files in one section.
|
|
||||||
.TP
|
|
||||||
.B [name]=@[filename];[content-type]
|
|
||||||
Whenever you specify a file to read from, you can optionally specify the
|
|
||||||
content-type as well. The content-type is passed to the server together with
|
|
||||||
the contents of the file. curl_formparse() will guess content-type for a
|
|
||||||
number of well-known extensions and otherwise it will set it to binary. You
|
|
||||||
can override the internal decision by using this option.
|
|
||||||
.TP
|
|
||||||
.B [name]=@[filename1,filename2,...];[content-type]
|
|
||||||
When you specify several files to read the contents from, you can set the
|
|
||||||
content-type for all of them in the same way as with a single file.
|
|
||||||
.PP
|
|
||||||
.SH RETURN VALUE
|
|
||||||
Returns non-zero if an error occurs.
|
|
||||||
.SH "SEE ALSO"
|
|
||||||
.BR curl_easy_setopt "(3) "
|
|
||||||
.SH BUGS
|
|
||||||
Surely there are some, you tell me!
|
|
||||||
|
|
||||||
2
docs/examples/.cvsignore
Normal file
2
docs/examples/.cvsignore
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
Makefile
|
||||||
|
Makefile.in
|
||||||
@@ -4,8 +4,12 @@
|
|||||||
|
|
||||||
AUTOMAKE_OPTIONS = foreign no-dependencies
|
AUTOMAKE_OPTIONS = foreign no-dependencies
|
||||||
|
|
||||||
EXTRA_DIST =
|
EXTRA_DIST = README curlgtk.c sepheaders.c simple.c postit2.c \
|
||||||
README curlgtk.c sepheaders.c simple.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
|
||||||
|
|
||||||
all:
|
all:
|
||||||
@echo "done"
|
@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) $<
|
||||||
@@ -1,8 +1,25 @@
|
|||||||
EXAMPLES
|
EXAMPLES
|
||||||
|
|
||||||
This directory is for tiny libcurl programming examples. They are meant to
|
This directory is for libcurl programming examples. They are meant to show
|
||||||
show some simple steps on how you can build your own application to take full
|
some simple steps on how you can build your own application to take full
|
||||||
advantage of libcurl.
|
advantage of libcurl.
|
||||||
|
|
||||||
If you end up with other small but still useful example sources, please mail
|
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.
|
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.
|
||||||
|
|||||||
@@ -1,4 +1,12 @@
|
|||||||
/* curlgtk.c */
|
/*****************************************************************************
|
||||||
|
* _ _ ____ _
|
||||||
|
* Project ___| | | | _ \| |
|
||||||
|
* / __| | | | |_) | |
|
||||||
|
* | (__| |_| | _ <| |___
|
||||||
|
* \___|\___/|_| \_\_____|
|
||||||
|
*
|
||||||
|
* $Id$
|
||||||
|
*/
|
||||||
/* Copyright (c) 2000 David Odin (aka DindinX) for MandrakeSoft */
|
/* Copyright (c) 2000 David Odin (aka DindinX) for MandrakeSoft */
|
||||||
/* an attempt to use the curl library in concert with a gtk-threaded application */
|
/* an attempt to use the curl library in concert with a gtk-threaded application */
|
||||||
|
|
||||||
@@ -18,7 +26,11 @@ size_t my_read_func(void *ptr, size_t size, size_t nmemb, FILE *stream)
|
|||||||
return fread(ptr, size, nmemb, stream);
|
return fread(ptr, size, nmemb, stream);
|
||||||
}
|
}
|
||||||
|
|
||||||
int my_progress_func(GtkWidget *Bar, int t, int d)
|
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);*/
|
/* printf("%d / %d (%g %%)\n", d, t, d*100.0/t);*/
|
||||||
gdk_threads_enter();
|
gdk_threads_enter();
|
||||||
@@ -42,6 +54,7 @@ void *curl_thread(void *ptr)
|
|||||||
curl_easy_setopt(curl, CURLOPT_URL, url);
|
curl_easy_setopt(curl, CURLOPT_URL, url);
|
||||||
curl_easy_setopt(curl, CURLOPT_FILE, outfile);
|
curl_easy_setopt(curl, CURLOPT_FILE, outfile);
|
||||||
curl_easy_setopt(curl, CURLOPT_READFUNCTION, my_read_func);
|
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_PROGRESSFUNCTION, my_progress_func);
|
||||||
curl_easy_setopt(curl, CURLOPT_PROGRESSDATA, Bar);
|
curl_easy_setopt(curl, CURLOPT_PROGRESSDATA, Bar);
|
||||||
|
|
||||||
|
|||||||
222
docs/examples/fopen.c
Normal file
222
docs/examples/fopen.c
Normal file
@@ -0,0 +1,222 @@
|
|||||||
|
/*****************************************************************************
|
||||||
|
* _ _ ____ _
|
||||||
|
* 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 <curl/curl.h>
|
||||||
|
#include <curl/types.h>
|
||||||
|
#include <curl/easy.h>
|
||||||
|
|
||||||
|
struct data {
|
||||||
|
int type;
|
||||||
|
union {
|
||||||
|
CURL *curl;
|
||||||
|
FILE *file;
|
||||||
|
} handle;
|
||||||
|
|
||||||
|
/* TODO: We should perhaps document the 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;
|
||||||
|
|
||||||
|
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;
|
||||||
|
|
||||||
|
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("NO MORE RUNNING AROUND!\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
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 */
|
||||||
|
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("NO MORE RUNNING AROUND!\n");
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
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];
|
||||||
|
|
||||||
|
handle = url_fopen("http://www.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;
|
||||||
|
}
|
||||||
88
docs/examples/ftpupload.c
Normal file
88
docs/examples/ftpupload.c
Normal file
@@ -0,0 +1,88 @@
|
|||||||
|
/*****************************************************************************
|
||||||
|
* _ _ ____ _
|
||||||
|
* Project ___| | | | _ \| |
|
||||||
|
* / __| | | | |_) | |
|
||||||
|
* | (__| |_| | _ <| |___
|
||||||
|
* \___|\___/|_| \_\_____|
|
||||||
|
*
|
||||||
|
* $Id$
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#include <curl/curl.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;
|
||||||
|
}
|
||||||
80
docs/examples/getinmemory.c
Normal file
80
docs/examples/getinmemory.c
Normal file
@@ -0,0 +1,80 @@
|
|||||||
|
/*****************************************************************************
|
||||||
|
* _ _ ____ _
|
||||||
|
* 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!
|
||||||
|
*/
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
98
docs/examples/multi-app.c
Normal file
98
docs/examples/multi-app.c
Normal file
@@ -0,0 +1,98 @@
|
|||||||
|
/*****************************************************************************
|
||||||
|
* _ _ ____ _
|
||||||
|
* 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 */
|
||||||
|
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;
|
||||||
|
}
|
||||||
94
docs/examples/multi-double.c
Normal file
94
docs/examples/multi-double.c
Normal file
@@ -0,0 +1,94 @@
|
|||||||
|
/*****************************************************************************
|
||||||
|
* _ _ ____ _
|
||||||
|
* 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 */
|
||||||
|
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;
|
||||||
|
}
|
||||||
87
docs/examples/multi-single.c
Normal file
87
docs/examples/multi-single.c
Normal file
@@ -0,0 +1,87 @@
|
|||||||
|
/*****************************************************************************
|
||||||
|
* _ _ ____ _
|
||||||
|
* 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 */
|
||||||
|
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;
|
||||||
|
}
|
||||||
@@ -1,3 +1,16 @@
|
|||||||
|
/*****************************************************************************
|
||||||
|
* _ _ ____ _
|
||||||
|
* Project ___| | | | _ \| |
|
||||||
|
* / __| | | | |_) | |
|
||||||
|
* | (__| |_| | _ <| |___
|
||||||
|
* \___|\___/|_| \_\_____|
|
||||||
|
*
|
||||||
|
* $Id$
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* to make this work under windows, use the win32-functions from the
|
||||||
|
win32socket.c file as well */
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
@@ -6,9 +19,9 @@
|
|||||||
#include <curl/types.h>
|
#include <curl/types.h>
|
||||||
#include <curl/easy.h>
|
#include <curl/easy.h>
|
||||||
|
|
||||||
size_t write_data(void *ptr, size_t size, size_t nmemb, FILE *stream)
|
size_t write_data(void *ptr, size_t size, size_t nmemb, void *stream)
|
||||||
{
|
{
|
||||||
written = fwrite(ptr,size,nmemb,outfile);
|
written = fwrite(ptr, size, nmemb, (FILE *)stream);
|
||||||
return written;
|
return written;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -50,6 +63,10 @@ int main(int argc, char **argv)
|
|||||||
/* we want the headers to this file handle */
|
/* we want the headers to this file handle */
|
||||||
curl_easy_setopt(curl_handle, CURLOPT_WRITEHEADER ,headerfile);
|
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! */
|
/* get it! */
|
||||||
curl_easy_perform(curl_handle);
|
curl_easy_perform(curl_handle);
|
||||||
|
|
||||||
|
|||||||
@@ -1,22 +1,24 @@
|
|||||||
|
/*****************************************************************************
|
||||||
|
* _ _ ____ _
|
||||||
|
* Project ___| | | | _ \| |
|
||||||
|
* / __| | | | |_) | |
|
||||||
|
* | (__| |_| | _ <| |___
|
||||||
|
* \___|\___/|_| \_\_____|
|
||||||
|
*
|
||||||
|
* $Id$
|
||||||
|
*/
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
#include <curl/curl.h>
|
#include <curl/curl.h>
|
||||||
#include <curl/types.h>
|
|
||||||
#include <curl/easy.h>
|
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(void)
|
||||||
{
|
{
|
||||||
CURL *curl;
|
CURL *curl;
|
||||||
CURLcode res;
|
CURLcode res;
|
||||||
FILE *headerfile;
|
|
||||||
|
|
||||||
headerfile = fopen("dumpit", "w");
|
|
||||||
|
|
||||||
curl = curl_easy_init();
|
curl = curl_easy_init();
|
||||||
if(curl) {
|
if(curl) {
|
||||||
/* what call to write: */
|
|
||||||
curl_easy_setopt(curl, CURLOPT_URL, "curl.haxx.se");
|
curl_easy_setopt(curl, CURLOPT_URL, "curl.haxx.se");
|
||||||
curl_easy_setopt(curl, CURLOPT_WRITEHEADER, headerfile);
|
|
||||||
res = curl_easy_perform(curl);
|
res = curl_easy_perform(curl);
|
||||||
|
|
||||||
/* always cleanup */
|
/* always cleanup */
|
||||||
|
|||||||
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://curl.haxx.se");
|
||||||
|
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>
|
||||||
1030
docs/libcurl-the-guide
Normal file
1030
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!
|
||||||
@@ -1,12 +1,12 @@
|
|||||||
.\" You can view this file with:
|
.\" You can view this file with:
|
||||||
.\" nroff -man [file]
|
.\" nroff -man [file]
|
||||||
.\" Written by daniel@haxx.se
|
.\" $Id$
|
||||||
.\"
|
.\"
|
||||||
.TH curl_easy_init 3 "22 November 2000" "Curl 7.5" "libcurl Manual"
|
.TH curl_easy_init 3 "25 Apr 2002" "libcurl 7.9.7" "libcurl Manual"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
curl_easy_getinfo - Extract information from a curl session (added in 7.4)
|
curl_easy_getinfo - Extract information from a curl session (added in 7.4)
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
.B #include <curl/easy.h>
|
.B #include <curl/curl.h>
|
||||||
.sp
|
.sp
|
||||||
.BI "CURLcode curl_easy_getinfo(CURL *curl, CURLINFO info, ... );"
|
.BI "CURLcode curl_easy_getinfo(CURL *curl, CURLINFO info, ... );"
|
||||||
.ad
|
.ad
|
||||||
@@ -30,13 +30,17 @@ Pass a pointer to a long to receive the last received HTTP code.
|
|||||||
.TP
|
.TP
|
||||||
.B CURLINFO_FILETIME
|
.B CURLINFO_FILETIME
|
||||||
Pass a pointer to a long to receive the remote time of the retrieved
|
Pass a pointer to a long to receive the remote time of the retrieved
|
||||||
document. If you get 0, it can be because of many reasons (unknown, the server
|
document. If you get -1, it can be because of many reasons (unknown, the
|
||||||
hides it or the server doesn't support the command that tells document time
|
server hides it or the server doesn't support the command that tells document
|
||||||
etc) and the time of the document is unknown. (Added in 7.5)
|
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
|
.TP
|
||||||
.B CURLINFO_TOTAL_TIME
|
.B CURLINFO_TOTAL_TIME
|
||||||
Pass a pointer to a double to receive the total transaction time in seconds
|
Pass a pointer to a double to receive the total transaction time in seconds
|
||||||
for the previous transfer.
|
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
|
.TP
|
||||||
.B CURLINFO_NAMELOOKUP_TIME
|
.B CURLINFO_NAMELOOKUP_TIME
|
||||||
Pass a pointer to a double to receive the time, in seconds, it took from the
|
Pass a pointer to a double to receive the time, in seconds, it took from the
|
||||||
@@ -52,6 +56,22 @@ start until the file transfer is just about to begin. This includes all
|
|||||||
pre-transfer commands and negotiations that are specific to the particular
|
pre-transfer commands and negotiations that are specific to the particular
|
||||||
protocol(s) involved.
|
protocol(s) involved.
|
||||||
.TP
|
.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
|
.B CURLINFO_SIZE_UPLOAD
|
||||||
Pass a pointer to a double to receive the total amount of bytes that were
|
Pass a pointer to a double to receive the total amount of bytes that were
|
||||||
uploaded.
|
uploaded.
|
||||||
@@ -81,6 +101,20 @@ than one request if FOLLOWLOCATION is true.
|
|||||||
Pass a pointer to a long to receive the result of the certification
|
Pass a pointer to a long to receive the result of the certification
|
||||||
verification that was requested (using the CURLOPT_SSL_VERIFYPEER option to
|
verification that was requested (using the CURLOPT_SSL_VERIFYPEER option to
|
||||||
curl_easy_setopt). (Added in 7.4.2)
|
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)
|
||||||
.PP
|
.PP
|
||||||
|
|
||||||
.SH RETURN VALUE
|
.SH RETURN VALUE
|
||||||
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!
|
||||||
775
docs/libcurl/curl_easy_setopt.3
Normal file
775
docs/libcurl/curl_easy_setopt.3
Normal file
@@ -0,0 +1,775 @@
|
|||||||
|
.\" nroff -man [file]
|
||||||
|
.\" $Id$
|
||||||
|
.\"
|
||||||
|
.TH curl_easy_setopt 3 "13 Nov 2002" "libcurl 7.10" "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. 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.
|
||||||
|
.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
|
||||||
|
.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 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_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.
|
||||||
|
.PP
|
||||||
|
.SH HTTP OPTIONS
|
||||||
|
.TP 0.4i
|
||||||
|
.B CURLOPT_ENCODING
|
||||||
|
Two encodings are supported \fIdentity\fP, which does nothing, and
|
||||||
|
\fIdeflate\fP to request the server to compress its reponse using the
|
||||||
|
zlib algorithm. This is not an order, the server may or may not do it.
|
||||||
|
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_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. This is a normal application/x-www-form-urlencoded kind, which
|
||||||
|
is the most commonly used one by HTML forms. See also the CURLOPT_POST. Since
|
||||||
|
7.8, 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.
|
||||||
|
|
||||||
|
\fBNOTE:\fPThe most commonly replaced headers have "shortcuts" in the options
|
||||||
|
CURLOPT_COOKIE, CURLOPT_USERAGENT and CURLOPT_REFERER.
|
||||||
|
.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)
|
||||||
|
.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.
|
||||||
|
.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_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 the HTTP request. 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.
|
||||||
|
.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 non-zero value to make curl verify the peer's
|
||||||
|
certificate. The certificate to verify against must be specified with the
|
||||||
|
CURLOPT_CAINFO option (Added in 7.4.2) or a certificate directory must be specified
|
||||||
|
with the CURLOPT_CAPATH option (Added in 7.9.8).
|
||||||
|
.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. (Added in 7.8.1)
|
||||||
|
.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 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()
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
.\" You can view this file with:
|
.\" You can view this file with:
|
||||||
.\" nroff -man [file]
|
.\" nroff -man [file]
|
||||||
.\" Written by daniel@haxx.se
|
.\" $Id$
|
||||||
.\"
|
.\"
|
||||||
.TH curl_getdate 3 "2 June 2000" "Curl 7.0" "libcurl Manual"
|
.TH curl_getdate 3 "5 March 2001" "libcurl 7.0" "libcurl Manual"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
curl_getdate - Convert an date in a ASCII string to number of seconds since
|
curl_getdate - Convert an date in a ASCII string to number of seconds since
|
||||||
January 1, 1970
|
January 1, 1970
|
||||||
@@ -1,14 +1,14 @@
|
|||||||
.\" You can view this file with:
|
.\" You can view this file with:
|
||||||
.\" nroff -man [file]
|
.\" nroff -man [file]
|
||||||
.\" Written by daniel@haxx.se
|
.\" $Id$
|
||||||
.\"
|
.\"
|
||||||
.TH curl_getenv 3 "2 June 2000" "Curl 7.0" "libcurl Manual"
|
.TH curl_getenv 3 "15 August 2001" "libcurl 7.8.1" "libcurl Manual"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
curl_getenv - return value for environment name
|
curl_getenv - return value for environment name
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
.B #include <curl/curl.h>
|
.B #include <curl/curl.h>
|
||||||
.sp
|
.sp
|
||||||
.BI "char *curl_getenv(char *" name ");
|
.BI "char *curl_getenv(const char *" name ");
|
||||||
.ad
|
.ad
|
||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
||||||
curl_getenv() is a portable wrapper for the getenv() function, meant to
|
curl_getenv() is a portable wrapper for the getenv() function, meant to
|
||||||
27
docs/libcurl/curl_global_cleanup.3
Normal file
27
docs/libcurl/curl_global_cleanup.3
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
.\" You can view this file with:
|
||||||
|
.\" nroff -man [file]
|
||||||
|
.\" $Id$
|
||||||
|
.\"
|
||||||
|
.TH curl_global_cleanup 3 "28 May 2001" "libcurl 7.8" "libcurl Manual"
|
||||||
|
.SH NAME
|
||||||
|
curl_global_cleanup - Global libcurl cleanup
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.B #include <curl/curl.h>
|
||||||
|
.sp
|
||||||
|
.BI "void curl_global_cleanup(void);"
|
||||||
|
.ad
|
||||||
|
.SH DESCRIPTION
|
||||||
|
curl_global_cleanup must be called once (no matter how many threads or libcurl
|
||||||
|
sessions that'll be used) by every application that uses libcurl, after all
|
||||||
|
uses of libcurl is complete.
|
||||||
|
|
||||||
|
This is the opposite of \fIcurl_global_init\fP.
|
||||||
|
|
||||||
|
Not calling this function may result in memory leaks.
|
||||||
|
|
||||||
|
This function was added in libcurl 7.8.
|
||||||
|
.SH "SEE ALSO"
|
||||||
|
.BR curl_global_init "(3), "
|
||||||
|
.SH BUGS
|
||||||
|
None?
|
||||||
|
|
||||||
49
docs/libcurl/curl_global_init.3
Normal file
49
docs/libcurl/curl_global_init.3
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
.\" You can view this file with:
|
||||||
|
.\" nroff -man [file]
|
||||||
|
.\" $Id$
|
||||||
|
.\"
|
||||||
|
.TH curl_global_init 3 "13 Nov 2001" "libcurl 7.9.1" "libcurl Manual"
|
||||||
|
.SH NAME
|
||||||
|
curl_global_init - Global libcurl initialisation
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.B #include <curl/curl.h>
|
||||||
|
.sp
|
||||||
|
.BI "CURLcode curl_global_init(long " flags ");"
|
||||||
|
.ad
|
||||||
|
.SH DESCRIPTION
|
||||||
|
This function should only be called once (no matter how many threads or
|
||||||
|
libcurl sessions that'll be used) by every application that uses libcurl.
|
||||||
|
|
||||||
|
If this function hasn't been invoked when \fIcurl_easy_init\fP is called, it
|
||||||
|
will be done automatically by libcurl.
|
||||||
|
|
||||||
|
The flags option is a bit pattern that tells libcurl exact what features to
|
||||||
|
init, as described below. Set the desired bits by ORing the values together.
|
||||||
|
|
||||||
|
You must however \fBalways\fP use the \fIcurl_global_cleanup\fP function, as
|
||||||
|
that cannot be called automatically for you by libcurl.
|
||||||
|
|
||||||
|
Calling this function more than once will cause unpredictable results.
|
||||||
|
|
||||||
|
This function was added in libcurl 7.8.
|
||||||
|
.SH FLAGS
|
||||||
|
.TP 5
|
||||||
|
.B CURL_GLOBAL_ALL
|
||||||
|
Initialize everything possible. This sets all known bits.
|
||||||
|
.TP
|
||||||
|
.B CURL_GLOBAL_SSL
|
||||||
|
Initialize SSL
|
||||||
|
.TP
|
||||||
|
.B CURL_GLOBAL_WIN32
|
||||||
|
Initialize the Win32 socket libraries. (added in libcurl 7.8.1)
|
||||||
|
.TP
|
||||||
|
.B CURL_GLOBAL_NOTHING
|
||||||
|
Initialise nothing extra. This sets no bit.
|
||||||
|
.SH RETURN VALUE
|
||||||
|
If this function returns non-zero, something went wrong and you cannot use the
|
||||||
|
other curl functions.
|
||||||
|
.SH "SEE ALSO"
|
||||||
|
.BR curl_global_cleanup "(3), "
|
||||||
|
.SH BUGS
|
||||||
|
None.
|
||||||
|
|
||||||
88
docs/libcurl/curl_mprintf.3
Normal file
88
docs/libcurl/curl_mprintf.3
Normal file
@@ -0,0 +1,88 @@
|
|||||||
|
.\" You can view this file with:
|
||||||
|
.\" nroff -man [file]
|
||||||
|
.\" $Id$
|
||||||
|
.\"
|
||||||
|
.TH curl_printf 3 "20 April 2001" "libcurl 7.7.2" "libcurl Manual"
|
||||||
|
.SH NAME
|
||||||
|
curl_maprintf, curl_mfprintf, curl_mprintf, curl_msnprintf, curl_msprintf
|
||||||
|
curl_mvaprintf, curl_mvfprintf, curl_mvprintf, curl_mvsnprintf,
|
||||||
|
curl_mvsprintf - formatted output conversion
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.B #include <curl/mprintf.h>
|
||||||
|
.sp
|
||||||
|
.BI "int curl_mprintf(const char *" format ", ...);"
|
||||||
|
.br
|
||||||
|
.BI "int curl_mfprintf(FILE *" fd ", const char *" format ", ...);"
|
||||||
|
.br
|
||||||
|
.BI "int curl_msprintf(char *" buffer ", const char *" format ", ...);"
|
||||||
|
.br
|
||||||
|
.BI "int curl_msnprintf(char *" buffer ", size_t " maxlength ", const char *" format ", ...);"
|
||||||
|
.br
|
||||||
|
.BI "int curl_mvprintf(const char *" format ", va_list " args ");"
|
||||||
|
.br
|
||||||
|
.BI "int curl_mvfprintf(FILE *" fd ", const char *" format ", va_list " args ");"
|
||||||
|
.br
|
||||||
|
.BI "int curl_mvsprintf(char *" buffer ", const char *" format ", va_list " args ");"
|
||||||
|
.br
|
||||||
|
.BI "int curl_mvsnprintf(char *" buffer ", size_t " maxlength ", const char *" format ", va_list " args ");"
|
||||||
|
.br
|
||||||
|
.BI "char *curl_maprintf(const char *" format ", ...);"
|
||||||
|
.br
|
||||||
|
.BI "char *curl_mvaprintf(const char *" format ", va_list " args ");"
|
||||||
|
.SH DESCRIPTION
|
||||||
|
These are all functions that produces output according to a format string and
|
||||||
|
given arguments. These are mostly clones of the well-known C-style functions
|
||||||
|
and there will be no detailed explanation of all available formatting rules
|
||||||
|
and usage here.
|
||||||
|
|
||||||
|
See this table for notable exceptions.
|
||||||
|
.RS
|
||||||
|
.TP
|
||||||
|
.B curl_mprintf()
|
||||||
|
Normal printf() clone.
|
||||||
|
.TP
|
||||||
|
.B curl_mfprintf()
|
||||||
|
Normal fprinf() clone.
|
||||||
|
.TP
|
||||||
|
.B curl_msprintf()
|
||||||
|
Normal sprintf() clone.
|
||||||
|
.TP
|
||||||
|
.B curl_msnprintf()
|
||||||
|
snprintf() clone. Many systems don't have this. It is just like \fBsprintf\fP
|
||||||
|
but with an extra argument after the buffer that specifies the length of the
|
||||||
|
target buffer.
|
||||||
|
.TP
|
||||||
|
.B curl_mvprintf()
|
||||||
|
Normal vprintf() clone.
|
||||||
|
.TP
|
||||||
|
.B curl_mvfprintf()
|
||||||
|
Normal vfprintf() clone.
|
||||||
|
.TP
|
||||||
|
.B curl_mvsprintf()
|
||||||
|
Normal vsprintf() clone.
|
||||||
|
.TP
|
||||||
|
.B curl_mvsnprintf()
|
||||||
|
vsnprintf() clone. Many systems don't have this. It is just like
|
||||||
|
\fBvsprintf\fP but with an extra argument after the buffer that specifies the
|
||||||
|
length of the target buffer.
|
||||||
|
.TP
|
||||||
|
.B curl_maprintf()
|
||||||
|
Like printf() but returns the output string as a malloc()ed string. The
|
||||||
|
returned string must be free()ed by the receiver.
|
||||||
|
.TP
|
||||||
|
.B curl_mvaprintf()
|
||||||
|
Like curl_maprintf() but takes a va_list pointer argument instead of a
|
||||||
|
variable amount of arguments.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
To easily use all these cloned functions instead of the normal ones, #define
|
||||||
|
_MPRINTF_REPLACE before you include the <curl/mprintf.h> file. Then all the
|
||||||
|
normal names like printf, fprintf, sprintf etc will use the curl-functions
|
||||||
|
instead.
|
||||||
|
.SH RETURN VALUE
|
||||||
|
The \fBcurl_maprintf\fP and \fBcurl_mvaprintf\fP functions return a pointer to
|
||||||
|
a newly allocated string, or NULL it it failed.
|
||||||
|
|
||||||
|
All other functions return the number of character they actually outputed.
|
||||||
|
.SH "SEE ALSO"
|
||||||
|
.BR printf "(3), " sprintf "(3), " fprintf "(3), " vprintf "(3) "
|
||||||
20
docs/libcurl/curl_multi_add_handle.3
Normal file
20
docs/libcurl/curl_multi_add_handle.3
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
.\" $Id$
|
||||||
|
.\"
|
||||||
|
.TH curl_multi_add_handle 3 "4 March 2002" "libcurl 7.9.5" "libcurl Manual"
|
||||||
|
.SH NAME
|
||||||
|
curl_multi_add_handle - add an easy handle to a multi session
|
||||||
|
.SH SYNOPSIS
|
||||||
|
#include <curl/curl.h>
|
||||||
|
|
||||||
|
CURLMcode curl_multi_add_handle(CURLM *multi_handle, CURL *easy_handle);
|
||||||
|
.ad
|
||||||
|
.SH DESCRIPTION
|
||||||
|
Adds a standard easy handle to the multi stack. This will make this multi
|
||||||
|
handle control the specified easy handle.
|
||||||
|
|
||||||
|
When an easy handle has been added to a multi stack, you can not and you must
|
||||||
|
not use curl_easy_perform() on that handle!
|
||||||
|
.SH RETURN VALUE
|
||||||
|
CURLMcode type, general libcurl multi interface error code.
|
||||||
|
.SH "SEE ALSO"
|
||||||
|
.BR curl_multi_cleanup "(3)," curl_multi_init "(3)"
|
||||||
18
docs/libcurl/curl_multi_cleanup.3
Normal file
18
docs/libcurl/curl_multi_cleanup.3
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
.\" $Id$
|
||||||
|
.\"
|
||||||
|
.TH curl_multi_cleanup 3 "1 March 2002" "libcurl 7.9.5" "libcurl Manual"
|
||||||
|
.SH NAME
|
||||||
|
curl_multi_cleanup - close down a multi session
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.B #include <curl/curl.h>
|
||||||
|
.sp
|
||||||
|
.BI "CURLMcode curl_multi_cleanup( CURLM *multi_handle );"
|
||||||
|
.ad
|
||||||
|
.SH DESCRIPTION
|
||||||
|
Cleans up and removes a whole multi stack. It does not free or touch any
|
||||||
|
individual easy handles in any way - they still need to be closed
|
||||||
|
individually, using the usual curl_easy_cleanup() way.
|
||||||
|
.SH RETURN VALUE
|
||||||
|
CURLMcode type, general libcurl multi interface error code.
|
||||||
|
.SH "SEE ALSO"
|
||||||
|
.BR curl_multi_init "(3)," curl_easy_cleanup "(3)," curl_easy_init "(3)"
|
||||||
27
docs/libcurl/curl_multi_fdset.3
Normal file
27
docs/libcurl/curl_multi_fdset.3
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
.\" $Id$
|
||||||
|
.\"
|
||||||
|
.TH curl_multi_fdset 3 "3 May 2002" "libcurl 7.9.5" "libcurl Manual"
|
||||||
|
.SH NAME
|
||||||
|
curl_multi_fdset - extracts file descriptor information from a multi handle
|
||||||
|
.SH SYNOPSIS
|
||||||
|
#include <curl/curl.h>
|
||||||
|
|
||||||
|
CURLMcode curl_multi_fdset(CURLM *multi_handle,
|
||||||
|
fd_set *read_fd_set,
|
||||||
|
fd_set *write_fd_set,
|
||||||
|
fd_set *exc_fd_set,
|
||||||
|
int *max_fd);
|
||||||
|
.ad
|
||||||
|
.SH DESCRIPTION
|
||||||
|
This function extracts file descriptor information from a given multi_handle.
|
||||||
|
libcurl returns its fd_set sets. The application can use these to select() or
|
||||||
|
poll() on. The curl_multi_perform() function should be called as soon as one
|
||||||
|
of them are ready to be read from or written to.
|
||||||
|
|
||||||
|
NOTE that once this call is made, you must not remove the sets you point to,
|
||||||
|
as libcurl will need to be able to read them. It needs them after select()
|
||||||
|
calls, to know if certain sockets are readable or writable.
|
||||||
|
.SH RETURN VALUE
|
||||||
|
CURLMcode type, general libcurl multi interface error code.
|
||||||
|
.SH "SEE ALSO"
|
||||||
|
.BR curl_multi_cleanup "(3)," curl_multi_init "(3)"
|
||||||
35
docs/libcurl/curl_multi_info_read.3
Normal file
35
docs/libcurl/curl_multi_info_read.3
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
.\" $Id$
|
||||||
|
.\"
|
||||||
|
.TH curl_multi_info_read 3 "1 March 2002" "libcurl 7.9.5" "libcurl Manual"
|
||||||
|
.SH NAME
|
||||||
|
curl_multi_info_read - read multi stack informationals
|
||||||
|
.SH SYNOPSIS
|
||||||
|
#include <curl/curl.h>
|
||||||
|
|
||||||
|
CURLMsg *curl_multi_info_read( CURLM *multi_handle,
|
||||||
|
int *msgs_in_queue);
|
||||||
|
.ad
|
||||||
|
.SH DESCRIPTION
|
||||||
|
Ask the multi handle if there's any messages/informationals from the
|
||||||
|
individual transfers. Messages include informationals such as an error code
|
||||||
|
from the transfer or just the fact that a transfer is completed. More details
|
||||||
|
on these should be written down as well.
|
||||||
|
|
||||||
|
Repeated calls to this function will return a new struct each time, until a
|
||||||
|
special "end of msgs" struct is returned as a signal that there is no more to
|
||||||
|
get at this point. The integer pointed to with \fImsgs_in_queue\fP will
|
||||||
|
contain the number of remaining messages after this function was called.
|
||||||
|
|
||||||
|
The data the returned pointer points to will not survive calling
|
||||||
|
curl_multi_cleanup().
|
||||||
|
|
||||||
|
The 'CURLMsg' struct is very simple and only contain very basic informations.
|
||||||
|
If more involved information is wanted, the particular "easy handle" in
|
||||||
|
present in that struct and can thus be used in subsequent regular
|
||||||
|
curl_easy_getinfo() calls (or similar).
|
||||||
|
.SH "RETURN VALUE"
|
||||||
|
A pointer to a filled-in struct, or NULL if it failed or ran out of
|
||||||
|
structs. It also writes the number of messages left in the queue (after this
|
||||||
|
read) in the integer the second argument points to.
|
||||||
|
.SH "SEE ALSO"
|
||||||
|
.BR curl_multi_cleanup "(3)," curl_multi_init "(3)," curl_multi_perform "(3)"
|
||||||
22
docs/libcurl/curl_multi_init.3
Normal file
22
docs/libcurl/curl_multi_init.3
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
.\" $Id$
|
||||||
|
.\"
|
||||||
|
.TH curl_multi_init 3 "1 March 2002" "libcurl 7.9.5" "libcurl Manual"
|
||||||
|
.SH NAME
|
||||||
|
curl_multi_init - Start a multi session
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.B #include <curl/curl.h>
|
||||||
|
.sp
|
||||||
|
.BI "CURLM *curl_multi_init( );"
|
||||||
|
.ad
|
||||||
|
.SH DESCRIPTION
|
||||||
|
This function returns a CURLM handle to be used as input to all the other
|
||||||
|
multi-functions, sometimes refered to as a multi handle on some places in the
|
||||||
|
documentation. This init call MUST have a corresponding call to
|
||||||
|
\fIcurl_multi_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_multi_cleanup "(3)," curl_global_init "(3)," curl_easy_init "(3)"
|
||||||
|
.SH BUGS
|
||||||
|
Surely there are some, you tell me!
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user