Compare commits
1429 Commits
curl-7_7-b
...
curl-7_9_6
Author | SHA1 | Date | |
---|---|---|---|
![]() |
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 |
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)
|
||||
|
||||
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
61
CVS-INFO
61
CVS-INFO
@@ -1,22 +1,59 @@
|
||||
This file is only present in the CVS - never in release archives.
|
||||
_ _ ____ _
|
||||
___| | | | _ \| |
|
||||
/ __| | | | |_) | |
|
||||
| (__| |_| | _ <| |___
|
||||
\___|\___/|_| \_\_____|
|
||||
|
||||
This contains information about other files and things that the CVS repository
|
||||
keeps in its inner sanctum.
|
||||
CVS-INFO
|
||||
|
||||
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
|
||||
is used when compiling
|
||||
Compile and build instructions follow below.
|
||||
|
||||
Makefile.dist is included as the root Makefile in distribution archives
|
||||
CHANGES.0 contains ancient changes.
|
||||
CHANGES.$year contains changes for the particular year.
|
||||
|
||||
perl/ is a subdirectory with various perl scripts
|
||||
memanalyze.pl is for analyzing the output generated by curl if -DMALLOCDEBUG
|
||||
is used when compiling
|
||||
|
||||
buildconf builds the makefiles and configure stuff
|
||||
|
||||
Makefile.dist is included as the root Makefile in distribution archives
|
||||
|
||||
perl/ is a subdirectory with various perl scripts
|
||||
|
||||
To build after having extracted everything from CVS, do this:
|
||||
|
||||
automake
|
||||
aclocal
|
||||
autoheader
|
||||
autoconf
|
||||
./buildconf
|
||||
./configure
|
||||
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
|
||||
|
||||
For Mac OS X users, Guido Neitzer write down 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-2001, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
|
||||
Everyone is permitted to copy and distribute verbatim copies of this license
|
||||
document, but changing it is not allowed.
|
||||
|
5
MITX.txt
5
MITX.txt
@@ -1,6 +1,6 @@
|
||||
COPYRIGHT AND PERMISSION NOTICE
|
||||
|
||||
Copyright (c) 2000, Daniel Stenberg, <daniel@haxx.se>.
|
||||
Copyright (c) 1996 - 2001, Daniel Stenberg, <daniel@haxx.se>.
|
||||
|
||||
All rights reserved.
|
||||
|
||||
@@ -10,8 +10,7 @@ in the Software without restriction, including without limitation the rights
|
||||
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.
|
||||
in all copies of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
|
36
Makefile.am
36
Makefile.am
@@ -2,11 +2,13 @@
|
||||
# $Id$
|
||||
#
|
||||
|
||||
AUTOMAKE_OPTIONS = foreign no-dependencies
|
||||
AUTOMAKE_OPTIONS = foreign
|
||||
|
||||
EXTRA_DIST = \
|
||||
CHANGES LEGAL maketgz MITX.txt MPL-1.1.txt \
|
||||
config-win32.h reconf packages/README Makefile.dist
|
||||
EXTRA_DIST = \
|
||||
CHANGES LEGAL maketgz MITX.txt MPL-1.1.txt \
|
||||
reconf Makefile.dist curl-config.in build_vms.com curl-mode.el
|
||||
|
||||
bin_SCRIPTS = curl-config
|
||||
|
||||
SUBDIRS = docs lib src include tests packages
|
||||
|
||||
@@ -14,10 +16,13 @@ SUBDIRS = docs lib src include tests packages
|
||||
dist-hook:
|
||||
cp $(srcdir)/Makefile.dist $(distdir)/Makefile
|
||||
|
||||
html:
|
||||
cd docs; make html
|
||||
|
||||
check: 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
|
||||
@@ -45,3 +50,24 @@ rpm:
|
||||
rpm -ba --clean --rmsource $$RPM_TOPDIR/SPECS/$(RPMDIST).spec ; \
|
||||
mv $$RPM_TOPDIR/RPMS/i386/$(RPMDIST)-*.rpm . ; \
|
||||
mv $$RPM_TOPDIR/SRPMS/$(RPMDIST)-*.src.rpm .
|
||||
|
||||
#
|
||||
# Build a Solaris pkkgadd format file
|
||||
# run 'make pkgadd' once you've done './configure' and 'make' to make a Solaris pkgadd format
|
||||
# file (which ends up back in this directory).
|
||||
# The pkgadd file is in 'pkgtrans' format, so to install on Solaris, do
|
||||
# pkgadd -d ./HAXXcurl-*
|
||||
#
|
||||
|
||||
# gak - libtool requires an absoulte directory, hence the pwd below...
|
||||
pkgadd:
|
||||
umask 022 ; \
|
||||
make install DESTDIR=`/bin/pwd`/packages/Solaris/root ; \
|
||||
cat LEGAL MITX.txt MPL-1.1.txt > $(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
|
||||
# dual-licensed under the MPL and the MIT/X-derivate licenses.
|
||||
@@ -30,26 +30,32 @@ ssl:
|
||||
make
|
||||
|
||||
borland:
|
||||
cd lib; make -f Makefile.b32
|
||||
cd src; make -f Makefile.b32
|
||||
cd lib & make -f Makefile.b32
|
||||
cd src & make -f Makefile.b32
|
||||
|
||||
mingw32:
|
||||
cd lib; make -f Makefile.m32
|
||||
cd src; make -f Makefile.m32
|
||||
cd lib & make -f Makefile.m32
|
||||
cd src & make -f Makefile.m32
|
||||
|
||||
mingw32-ssl:
|
||||
cd lib; make -f Makefile.m32 SSL=1
|
||||
cd src; make -f Makefile.m32 SSL=1
|
||||
cd lib & make -f Makefile.m32 SSL=1
|
||||
cd src & make -f Makefile.m32 SSL=1
|
||||
|
||||
vc:
|
||||
cd lib
|
||||
nmake -f Makefile.vc6
|
||||
nmake -f Makefile.vc6 cfg=release
|
||||
cd ..\src
|
||||
nmake -f Makefile.vc6
|
||||
|
||||
vc-ssl:
|
||||
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
|
||||
nmake -f Makefile.vc6
|
||||
|
||||
|
22
README
22
README
@@ -12,37 +12,37 @@ README
|
||||
document.
|
||||
|
||||
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!
|
||||
|
||||
You find answers to the most frequent questions we get in the FAQ document.
|
||||
|
||||
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 mirror for the latest news:
|
||||
|
||||
http://curl.haxx.se
|
||||
http://curl.haxx.se/
|
||||
http://curl.sf.net/
|
||||
|
||||
The official download mirror sites are:
|
||||
|
||||
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/
|
||||
|
||||
To download the very latest source off the CVS server do this:
|
||||
|
||||
cvs -d :pserver:anonymous@cvs.curl.sourceforge.net:/cvsroot/curl login
|
||||
cvs -d :pserver:anonymous@cvs.curl.sourceforge.net:/cvsroot/curl login
|
||||
|
||||
(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
|
||||
directory. Note that this does NOT create a directory named curl or
|
||||
anything)
|
||||
(you'll get a directory named curl created, filled with the source code)
|
||||
|
||||
cvs -d :pserver:anonymous@cvs.curl.sourceforge.net:/cvsroot/curl logout
|
||||
cvs -d :pserver:anonymous@cvs.curl.sourceforge.net:/cvsroot/curl logout
|
||||
|
||||
(you're off the hook!)
|
||||
(you're off the hook!)
|
||||
|
||||
Curl contains pieces of source code that is Copyright (c) 1998, 1999
|
||||
Kungliga Tekniska H<>gskolan. This notice is included here to comply with the
|
||||
|
13
acconfig.h
13
acconfig.h
@@ -51,3 +51,16 @@
|
||||
|
||||
/* 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
|
||||
|
508
acinclude.m4
508
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;
|
||||
dnl one must use special compiler options to get large-file access to work.
|
||||
dnl For more details about this brain damage please see:
|
||||
dnl http://www.sas.com/standards/large.file/x_open.20Mar96.html
|
||||
AC_TRY_COMPILE([
|
||||
/* headers for O_NONBLOCK test */
|
||||
#include <sys/types.h>
|
||||
#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.
|
||||
dnl AC_SYS_LARGEFILE_TEST_INCLUDES
|
||||
AC_DEFUN(AC_SYS_LARGEFILE_TEST_INCLUDES,
|
||||
[[#include <sys/types.h>
|
||||
int a[(off_t) 9223372036854775807 == 9223372036854775807 ? 1 : -1];
|
||||
]])
|
||||
#if defined(PLATFORM_SUNOS4) || defined(PLATFORM_AIX_V3)
|
||||
#error "O_NONBLOCK does not work on this platform"
|
||||
#endif
|
||||
int socket;
|
||||
int flags = fcntl(socket, F_SETFL, flags | O_NONBLOCK);
|
||||
],[
|
||||
dnl the O_NONBLOCK test was fine
|
||||
nonblock="O_NONBLOCK"
|
||||
AC_DEFINE(HAVE_O_NONBLOCK)
|
||||
],[
|
||||
dnl the code was bad, try a different program now, test 2
|
||||
|
||||
dnl Internal subroutine of AC_SYS_LARGEFILE.
|
||||
dnl AC_SYS_LARGEFILE_MACRO_VALUE(C-MACRO, VALUE, CACHE-VAR, COMMENT, INCLUDES, FUNCTION-BODY)
|
||||
AC_DEFUN(AC_SYS_LARGEFILE_MACRO_VALUE,
|
||||
[AC_CACHE_CHECK([for $1 value needed for large files], $3,
|
||||
[$3=no
|
||||
AC_TRY_COMPILE(AC_SYS_LARGEFILE_TEST_INCLUDES
|
||||
$5
|
||||
,
|
||||
[$6],
|
||||
,
|
||||
[AC_TRY_COMPILE([#define $1 $2]
|
||||
AC_SYS_LARGEFILE_TEST_INCLUDES
|
||||
$5
|
||||
,
|
||||
[$6],
|
||||
[$3=$2])])])
|
||||
if test "[$]$3" != no; then
|
||||
AC_DEFINE_UNQUOTED([$1], [$]$3, [$4])
|
||||
fi])
|
||||
AC_TRY_COMPILE([
|
||||
/* headers for FIONBIO test */
|
||||
#include <unistd.h>
|
||||
#include <stropts.h>
|
||||
],[
|
||||
/* FIONBIO source test */
|
||||
int flags = ioctl(socket, FIONBIO, &flags);
|
||||
],[
|
||||
dnl FIONBIO test was good
|
||||
nonblock="FIONBIO"
|
||||
AC_DEFINE(HAVE_FIONBIO)
|
||||
],[
|
||||
dnl FIONBIO test was also bad
|
||||
dnl the code was bad, try a different program now, test 3
|
||||
|
||||
AC_DEFUN(AC_SYS_LARGEFILE,
|
||||
[AC_ARG_ENABLE(largefile,
|
||||
[ --disable-largefile omit support for large files])
|
||||
if test "$enable_largefile" != no; then
|
||||
AC_TRY_COMPILE([
|
||||
/* headers for ioctlsocket test (cygwin?) */
|
||||
#include <windows.h>
|
||||
],[
|
||||
/* ioctlsocket source code */
|
||||
int flags = ioctlsocket(socket, FIONBIO, &flags);
|
||||
],[
|
||||
dnl ioctlsocket test was good
|
||||
nonblock="ioctlsocket"
|
||||
AC_DEFINE(HAVE_IOCTLSOCKET)
|
||||
],[
|
||||
dnl ioctlsocket didnt compile!
|
||||
|
||||
AC_CACHE_CHECK([for special C compiler options needed for large files],
|
||||
ac_cv_sys_largefile_CC,
|
||||
[ac_cv_sys_largefile_CC=no
|
||||
if test "$GCC" != yes; then
|
||||
# IRIX 6.2 and later do not support large files by default,
|
||||
# so use the C compiler's -n32 option if that helps.
|
||||
AC_TRY_COMPILE(AC_SYS_LARGEFILE_TEST_INCLUDES, , ,
|
||||
[ac_save_CC="$CC"
|
||||
CC="$CC -n32"
|
||||
AC_TRY_COMPILE(AC_SYS_LARGEFILE_TEST_INCLUDES, ,
|
||||
ac_cv_sys_largefile_CC=' -n32')
|
||||
CC="$ac_save_CC"])
|
||||
fi])
|
||||
if test "$ac_cv_sys_largefile_CC" != no; then
|
||||
CC="$CC$ac_cv_sys_largefile_CC"
|
||||
fi
|
||||
AC_TRY_COMPILE([
|
||||
/* headers for IoctlSocket test (Amiga?) */
|
||||
#include <sys/ioctl.h>
|
||||
],[
|
||||
/* IoctlSocket source code */
|
||||
int flags = IoctlSocket(socket, FIONBIO, (long)1);
|
||||
],[
|
||||
dnl ioctlsocket test was good
|
||||
nonblock="IoctlSocket"
|
||||
AC_DEFINE(HAVE_IOCTLSOCKET_CASE)
|
||||
],[
|
||||
dnl ioctlsocket didnt compile!
|
||||
nonblock="nada"
|
||||
AC_DEFINE(HAVE_DISABLED_NONBLOCKING)
|
||||
])
|
||||
dnl end of forth test
|
||||
|
||||
AC_SYS_LARGEFILE_MACRO_VALUE(_FILE_OFFSET_BITS, 64,
|
||||
ac_cv_sys_file_offset_bits,
|
||||
[Number of bits in a file offset, on hosts where this is settable.])
|
||||
AC_SYS_LARGEFILE_MACRO_VALUE(_LARGEFILE_SOURCE, 1,
|
||||
ac_cv_sys_largefile_source,
|
||||
[Define to make ftello visible on some hosts (e.g. HP-UX 10.20).],
|
||||
[#include <stdio.h>], [return !ftello;])
|
||||
AC_SYS_LARGEFILE_MACRO_VALUE(_LARGE_FILES, 1,
|
||||
ac_cv_sys_large_files,
|
||||
[Define for large files, on AIX-style hosts.])
|
||||
dnl lftp does not need ftello, and _XOPEN_SOURCE=500 makes resolv.h fail.
|
||||
dnl AC_SYS_LARGEFILE_MACRO_VALUE(_XOPEN_SOURCE, 500,
|
||||
dnl ac_cv_sys_xopen_source,
|
||||
dnl [Define to make ftello visible on some hosts (e.g. glibc 2.1.3).],
|
||||
dnl [#include <stdio.h>], [return !ftello;])
|
||||
fi
|
||||
])
|
||||
])
|
||||
dnl end of third test
|
||||
|
||||
])
|
||||
dnl end of second test
|
||||
|
||||
])
|
||||
dnl end of non-blocking try-compile test
|
||||
AC_MSG_RESULT($nonblock)
|
||||
|
||||
if test "$nonblock" = "nada"; then
|
||||
AC_MSG_WARN([non-block sockets disabled])
|
||||
fi
|
||||
])
|
||||
|
||||
dnl Check for socklen_t: historically on BSD it is an int, and in
|
||||
dnl POSIX 1g it is a type of its own, but some platforms use different
|
||||
dnl types for the argument to getsockopt, getpeername, etc. So we
|
||||
dnl have to test to find something that will work.
|
||||
AC_DEFUN([TYPE_SOCKLEN_T],
|
||||
[
|
||||
AC_CHECK_TYPE([socklen_t], ,[
|
||||
AC_MSG_CHECKING([for socklen_t equivalent])
|
||||
AC_CACHE_VAL([curl_cv_socklen_t_equiv],
|
||||
[
|
||||
# Systems have either "struct sockaddr *" or
|
||||
# "void *" as the second argument to getpeername
|
||||
curl_cv_socklen_t_equiv=
|
||||
for arg2 in "struct sockaddr" void; do
|
||||
for t in int size_t unsigned long "unsigned long"; do
|
||||
AC_TRY_COMPILE([
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
|
||||
int getpeername (int, $arg2 *, $t *);
|
||||
],[
|
||||
$t len;
|
||||
getpeername(0,0,&len);
|
||||
],[
|
||||
curl_cv_socklen_t_equiv="$t"
|
||||
break
|
||||
])
|
||||
done
|
||||
done
|
||||
|
||||
if test "x$curl_cv_socklen_t_equiv" = x; then
|
||||
AC_MSG_ERROR([Cannot find a type to use in place of socklen_t])
|
||||
fi
|
||||
])
|
||||
AC_MSG_RESULT($curl_cv_socklen_t_equiv)
|
||||
AC_DEFINE_UNQUOTED(socklen_t, $curl_cv_socklen_t_equiv,
|
||||
[type to use in place of socklen_t if not defined])],
|
||||
[#include <sys/types.h>
|
||||
#include <sys/socket.h>])
|
||||
])
|
||||
|
||||
dnl Check for in_addr_t: it is used to receive the return code of inet_addr()
|
||||
dnl and a few other things. If not found, we set it to unsigned int, as even
|
||||
dnl 64-bit implementations use to set it to a 32-bit type.
|
||||
AC_DEFUN([TYPE_IN_ADDR_T],
|
||||
[
|
||||
AC_CHECK_TYPE([in_addr_t], ,[
|
||||
AC_MSG_CHECKING([for in_addr_t equivalent])
|
||||
AC_CACHE_VAL([curl_cv_in_addr_t_equiv],
|
||||
[
|
||||
# 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"
|
664
config.guess
vendored
664
config.guess
vendored
@@ -1,8 +1,10 @@
|
||||
#! /bin/sh
|
||||
# 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.
|
||||
#
|
||||
|
||||
timestamp='2001-09-04'
|
||||
|
||||
# This file is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
@@ -30,40 +32,97 @@
|
||||
# exits with 0. Otherwise, it exits with 1.
|
||||
#
|
||||
# The plan is that this can be called by configure scripts if you
|
||||
# don't specify an explicit system type (host/target name).
|
||||
#
|
||||
# Only a few systems have been added to this list; please add others
|
||||
# (but try to keep the structure clean).
|
||||
#
|
||||
# don't specify an explicit build system type.
|
||||
|
||||
# Use $HOST_CC if defined. $CC may point to a cross-compiler
|
||||
if test x"$CC_FOR_BUILD" = x; then
|
||||
if test x"$HOST_CC" != x; then
|
||||
CC_FOR_BUILD="$HOST_CC"
|
||||
else
|
||||
if test x"$CC" != x; then
|
||||
CC_FOR_BUILD="$CC"
|
||||
else
|
||||
CC_FOR_BUILD=cc
|
||||
fi
|
||||
fi
|
||||
me=`echo "$0" | sed -e 's,.*/,,'`
|
||||
|
||||
usage="\
|
||||
Usage: $0 [OPTION]
|
||||
|
||||
Output the configuration name of the system \`$me' is run on.
|
||||
|
||||
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.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
|
||||
|
||||
|
||||
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.
|
||||
# (ghazi@noc.rutgers.edu 8/24/94.)
|
||||
# (ghazi@noc.rutgers.edu 1994-08-24)
|
||||
if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
|
||||
PATH=$PATH:/.attbin ; export PATH
|
||||
fi
|
||||
|
||||
UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
|
||||
UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
|
||||
UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
|
||||
UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
|
||||
UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
|
||||
|
||||
dummy=dummy-$$
|
||||
trap 'rm -f $dummy.c $dummy.o $dummy; exit 1' 1 2 15
|
||||
|
||||
# Note: order is significant - the case branches are not exclusive.
|
||||
|
||||
case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
|
||||
@@ -77,7 +136,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
|
||||
# object file format.
|
||||
# Determine the machine/vendor (is the vendor relevant).
|
||||
case "${UNAME_MACHINE}" in
|
||||
amiga) machine=m68k-cbm ;;
|
||||
amiga) machine=m68k-unknown ;;
|
||||
arm32) machine=arm-unknown ;;
|
||||
atari*) machine=m68k-atari ;;
|
||||
sun3*) machine=m68k-sun ;;
|
||||
@@ -87,16 +146,25 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
|
||||
ibmrt|romp-ibm) machine=romp-ibm ;;
|
||||
*) machine=${UNAME_MACHINE}-unknown ;;
|
||||
esac
|
||||
# The Operating System including object format.
|
||||
if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
|
||||
| grep __ELF__ >/dev/null
|
||||
then
|
||||
# Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
|
||||
# Return netbsd for either. FIX?
|
||||
os=netbsd
|
||||
else
|
||||
os=netbsdelf
|
||||
fi
|
||||
# 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 \
|
||||
| grep __ELF__ >/dev/null
|
||||
then
|
||||
# Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
|
||||
# Return netbsd for either. FIX?
|
||||
os=netbsd
|
||||
else
|
||||
os=netbsdelf
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
os=netbsd
|
||||
;;
|
||||
esac
|
||||
# The OS release
|
||||
release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
|
||||
# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
|
||||
@@ -137,6 +205,7 @@ main:
|
||||
jsr \$26,exit
|
||||
.end main
|
||||
EOF
|
||||
eval $set_cc_for_build
|
||||
$CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null
|
||||
if test "$?" = 0 ; then
|
||||
case `./$dummy` in
|
||||
@@ -158,6 +227,9 @@ EOF
|
||||
2-307)
|
||||
UNAME_MACHINE="alphaev67"
|
||||
;;
|
||||
2-1307)
|
||||
UNAME_MACHINE="alphaev68"
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
rm -f $dummy.s $dummy
|
||||
@@ -173,7 +245,7 @@ EOF
|
||||
echo alpha-dec-winnt3.5
|
||||
exit 0 ;;
|
||||
Amiga*:UNIX_System_V:4.0:*)
|
||||
echo m68k-cbm-sysv4
|
||||
echo m68k-unknown-sysv4
|
||||
exit 0;;
|
||||
amiga:OpenBSD:*:*)
|
||||
echo m68k-unknown-openbsd${UNAME_RELEASE}
|
||||
@@ -205,7 +277,7 @@ EOF
|
||||
arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
|
||||
echo arm-acorn-riscix${UNAME_RELEASE}
|
||||
exit 0;;
|
||||
SR2?01:HI-UX/MPP:*:*)
|
||||
SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
|
||||
echo hppa1.1-hitachi-hiuxmpp
|
||||
exit 0;;
|
||||
Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
|
||||
@@ -261,6 +333,9 @@ EOF
|
||||
aushp:SunOS:*:*)
|
||||
echo sparc-auspex-sunos${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
sparc*:NetBSD:*)
|
||||
echo `uname -p`-unknown-netbsd${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
atari*:OpenBSD:*:*)
|
||||
echo m68k-unknown-openbsd${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
@@ -318,6 +393,7 @@ EOF
|
||||
echo clipper-intergraph-clix${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
mips:*:*:UMIPS | mips:*:*:RISCos)
|
||||
eval $set_cc_for_build
|
||||
sed 's/^ //' << EOF >$dummy.c
|
||||
#ifdef __cplusplus
|
||||
#include <stdio.h> /* for printf() prototype */
|
||||
@@ -341,10 +417,13 @@ EOF
|
||||
EOF
|
||||
$CC_FOR_BUILD $dummy.c -o $dummy \
|
||||
&& ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
|
||||
&& rm $dummy.c $dummy && exit 0
|
||||
&& rm -f $dummy.c $dummy && exit 0
|
||||
rm -f $dummy.c $dummy
|
||||
echo mips-mips-riscos${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
Motorola:PowerMAX_OS:*:*)
|
||||
echo powerpc-motorola-powermax
|
||||
exit 0 ;;
|
||||
Night_Hawk:Power_UNIX:*:*)
|
||||
echo powerpc-harris-powerunix
|
||||
exit 0 ;;
|
||||
@@ -392,11 +471,20 @@ EOF
|
||||
????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
|
||||
echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
|
||||
exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX '
|
||||
i?86:AIX:*:*)
|
||||
i*86:AIX:*:*)
|
||||
echo i386-ibm-aix
|
||||
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)
|
||||
if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
|
||||
eval $set_cc_for_build
|
||||
sed 's/^ //' << EOF >$dummy.c
|
||||
#include <sys/systemcfg.h>
|
||||
|
||||
@@ -408,7 +496,7 @@ EOF
|
||||
exit(0);
|
||||
}
|
||||
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
|
||||
echo rs6000-ibm-aix3.2.5
|
||||
elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
|
||||
@@ -417,9 +505,9 @@ EOF
|
||||
echo rs6000-ibm-aix3.2
|
||||
fi
|
||||
exit 0 ;;
|
||||
*:AIX:*:4)
|
||||
*:AIX:*:[45])
|
||||
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
|
||||
else
|
||||
IBM_ARCH=powerpc
|
||||
@@ -427,7 +515,7 @@ EOF
|
||||
if [ -x /usr/bin/oslevel ] ; then
|
||||
IBM_REV=`/usr/bin/oslevel`
|
||||
else
|
||||
IBM_REV=4.${UNAME_RELEASE}
|
||||
IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
|
||||
fi
|
||||
echo ${IBM_ARCH}-ibm-aix${IBM_REV}
|
||||
exit 0 ;;
|
||||
@@ -453,10 +541,29 @@ EOF
|
||||
echo m68k-hp-bsd4.4
|
||||
exit 0 ;;
|
||||
9000/[34678]??:HP-UX:*:*)
|
||||
HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
|
||||
case "${UNAME_MACHINE}" in
|
||||
9000/31? ) HP_ARCH=m68000 ;;
|
||||
9000/[34]?? ) HP_ARCH=m68k ;;
|
||||
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
|
||||
|
||||
#define _HPUX_SOURCE
|
||||
@@ -490,13 +597,19 @@ EOF
|
||||
exit (0);
|
||||
}
|
||||
EOF
|
||||
(CCOPTS= $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null ) && HP_ARCH=`./$dummy`
|
||||
rm -f $dummy.c $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
|
||||
fi ;;
|
||||
esac
|
||||
HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
|
||||
echo ${HP_ARCH}-hp-hpux${HPUX_REV}
|
||||
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:*:*)
|
||||
eval $set_cc_for_build
|
||||
sed 's/^ //' << EOF >$dummy.c
|
||||
#include <unistd.h>
|
||||
int
|
||||
@@ -522,7 +635,7 @@ EOF
|
||||
exit (0);
|
||||
}
|
||||
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
|
||||
echo unknown-hitachi-hiuxwe2
|
||||
exit 0 ;;
|
||||
@@ -532,7 +645,7 @@ EOF
|
||||
9000/8??:4.3bsd:*:*)
|
||||
echo hppa1.0-hp-bsd
|
||||
exit 0 ;;
|
||||
*9??*:MPE/iX:*:*)
|
||||
*9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
|
||||
echo hppa1.0-hp-mpeix
|
||||
exit 0 ;;
|
||||
hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
|
||||
@@ -541,7 +654,7 @@ EOF
|
||||
hp8??:OSF1:*:*)
|
||||
echo hppa1.0-hp-osf
|
||||
exit 0 ;;
|
||||
i?86:OSF1:*:*)
|
||||
i*86:OSF1:*:*)
|
||||
if [ -x /usr/sbin/sysversion ] ; then
|
||||
echo ${UNAME_MACHINE}-unknown-osf1mk
|
||||
else
|
||||
@@ -576,37 +689,39 @@ EOF
|
||||
echo xmp-cray-unicos
|
||||
exit 0 ;;
|
||||
CRAY*Y-MP:*:*:*)
|
||||
echo ymp-cray-unicos${UNAME_RELEASE}
|
||||
echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
|
||||
exit 0 ;;
|
||||
CRAY*[A-Z]90:*:*:*)
|
||||
echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
|
||||
| sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
|
||||
-e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/
|
||||
-e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
|
||||
-e 's/\.[^.]*$/.X/'
|
||||
exit 0 ;;
|
||||
CRAY*TS:*:*:*)
|
||||
echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
|
||||
exit 0 ;;
|
||||
CRAY*T3E:*:*:*)
|
||||
CRAY*T3D:*:*:*)
|
||||
echo alpha-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
|
||||
exit 0 ;;
|
||||
CRAY*T3E:*:*:*)
|
||||
echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
|
||||
exit 0 ;;
|
||||
CRAY*SV1:*:*:*)
|
||||
echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
|
||||
exit 0 ;;
|
||||
CRAY-2:*:*:*)
|
||||
echo cray2-cray-unicos
|
||||
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_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 ;;
|
||||
hp300:OpenBSD:*:*)
|
||||
echo m68k-unknown-openbsd${UNAME_RELEASE}
|
||||
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}
|
||||
exit 0 ;;
|
||||
sparc*:BSD/OS:*:*)
|
||||
@@ -627,6 +742,9 @@ EOF
|
||||
i*:MINGW*:*)
|
||||
echo ${UNAME_MACHINE}-pc-mingw32
|
||||
exit 0 ;;
|
||||
i*:PW*:*)
|
||||
echo ${UNAME_MACHINE}-pc-pw32
|
||||
exit 0 ;;
|
||||
i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
|
||||
# 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
|
||||
@@ -645,187 +763,96 @@ EOF
|
||||
*:GNU:*:*)
|
||||
echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
|
||||
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
|
||||
# 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.
|
||||
ld_help_string=`cd /; ld --help 2>&1`
|
||||
ld_supported_emulations=`echo $ld_help_string \
|
||||
| sed -ne '/supported emulations:/!d
|
||||
ld_supported_targets=`cd /; ld --help 2>&1 \
|
||||
| sed -ne '/supported targets:/!d
|
||||
s/[ ][ ]*/ /g
|
||||
s/.*supported emulations: *//
|
||||
s/.*supported targets: *//
|
||||
s/ .*//
|
||||
p'`
|
||||
case "$ld_supported_emulations" in
|
||||
*ia64)
|
||||
echo "${UNAME_MACHINE}-unknown-linux"
|
||||
exit 0
|
||||
case "$ld_supported_targets" in
|
||||
elf32-i386)
|
||||
TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
|
||||
;;
|
||||
i?86linux)
|
||||
a.out-i386-linux)
|
||||
echo "${UNAME_MACHINE}-pc-linux-gnuaout"
|
||||
exit 0
|
||||
;;
|
||||
elf_i?86)
|
||||
echo "${UNAME_MACHINE}-pc-linux"
|
||||
exit 0
|
||||
;;
|
||||
i?86coff)
|
||||
exit 0 ;;
|
||||
coff-i386)
|
||||
echo "${UNAME_MACHINE}-pc-linux-gnucoff"
|
||||
exit 0
|
||||
;;
|
||||
sparclinux)
|
||||
echo "${UNAME_MACHINE}-unknown-linux-gnuaout"
|
||||
exit 0
|
||||
;;
|
||||
armlinux)
|
||||
echo "${UNAME_MACHINE}-unknown-linux-gnuaout"
|
||||
exit 0
|
||||
;;
|
||||
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
|
||||
;;
|
||||
exit 0 ;;
|
||||
"")
|
||||
# Either a pre-BFD a.out linker (linux-gnuoldld) or
|
||||
# one that does not give us useful --help.
|
||||
echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
|
||||
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
|
||||
# Determine whether the default compiler is a.out or elf
|
||||
cat >$dummy.c <<EOF
|
||||
# Determine whether the default compiler is a.out or elf
|
||||
eval $set_cc_for_build
|
||||
cat >$dummy.c <<EOF
|
||||
#include <features.h>
|
||||
#ifdef __cplusplus
|
||||
#include <stdio.h> /* for printf() prototype */
|
||||
@@ -836,28 +863,30 @@ EOF
|
||||
#ifdef __ELF__
|
||||
# ifdef __GLIBC__
|
||||
# if __GLIBC__ >= 2
|
||||
printf ("%s-${VENDOR}-linux-gnu\n", argv[1]);
|
||||
printf ("%s-pc-linux-gnu\n", argv[1]);
|
||||
# else
|
||||
printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]);
|
||||
printf ("%s-pc-linux-gnulibc1\n", argv[1]);
|
||||
# endif
|
||||
# else
|
||||
printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]);
|
||||
printf ("%s-pc-linux-gnulibc1\n", argv[1]);
|
||||
# endif
|
||||
#else
|
||||
printf ("%s-${VENDOR}-linux-gnuaout\n", argv[1]);
|
||||
printf ("%s-pc-linux-gnuaout\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
|
||||
fi ;;
|
||||
# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. earlier versions
|
||||
# are messed up and put the nodename in both sysname and nodename.
|
||||
i?86:DYNIX/ptx:4*:*)
|
||||
$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
|
||||
test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0
|
||||
;;
|
||||
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
|
||||
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
|
||||
# number series starting with 2...
|
||||
# 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.
|
||||
echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
|
||||
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$//'`
|
||||
if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
|
||||
echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
|
||||
@@ -873,16 +902,15 @@ EOF
|
||||
echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
|
||||
fi
|
||||
exit 0 ;;
|
||||
i?86:*:5:7*)
|
||||
# Fixed at (any) Pentium or better
|
||||
UNAME_MACHINE=i586
|
||||
if [ ${UNAME_SYSTEM} = "UnixWare" ] ; then
|
||||
echo ${UNAME_MACHINE}-sco-sysv${UNAME_RELEASE}uw${UNAME_VERSION}
|
||||
else
|
||||
echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE}
|
||||
fi
|
||||
i*86:*:5:[78]*)
|
||||
case `/bin/uname -X | grep "^Machine"` in
|
||||
*486*) UNAME_MACHINE=i486 ;;
|
||||
*Pentium) UNAME_MACHINE=i586 ;;
|
||||
*Pent*|*Celeron) UNAME_MACHINE=i686 ;;
|
||||
esac
|
||||
echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
|
||||
exit 0 ;;
|
||||
i?86:*:3.2:*)
|
||||
i*86:*:3.2:*)
|
||||
if test -f /usr/options/cb.name; then
|
||||
UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
|
||||
echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
|
||||
@@ -900,7 +928,7 @@ EOF
|
||||
echo ${UNAME_MACHINE}-pc-sysv32
|
||||
fi
|
||||
exit 0 ;;
|
||||
i?86:*DOS:*:*)
|
||||
i*86:*DOS:*:*)
|
||||
echo ${UNAME_MACHINE}-pc-msdosdjgpp
|
||||
exit 0 ;;
|
||||
pc:*:*:*)
|
||||
@@ -928,7 +956,7 @@ EOF
|
||||
exit 0 ;;
|
||||
M68*:*:R3V[567]*:*)
|
||||
test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
|
||||
3[34]??:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0)
|
||||
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=''
|
||||
test -r /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:*)
|
||||
/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
|
||||
&& echo i486-ncr-sysv4 && exit 0 ;;
|
||||
m68*:LynxOS:2.*:*)
|
||||
m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
|
||||
echo m68k-unknown-lynxos${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
mc68030:UNIX_System_V:4.*:*)
|
||||
echo m68k-atari-sysv4
|
||||
exit 0 ;;
|
||||
i?86:LynxOS:2.*:* | i?86:LynxOS:3.[01]*:*)
|
||||
i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
|
||||
echo i386-unknown-lynxos${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
TSUNAMI:LynxOS:2.*:*)
|
||||
echo sparc-unknown-lynxos${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
rs6000:LynxOS:2.*:* | PowerPC:LynxOS:2.*:*)
|
||||
rs6000:LynxOS:2.*:*)
|
||||
echo rs6000-unknown-lynxos${UNAME_RELEASE}
|
||||
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:*:*)
|
||||
echo mips-dde-sysv${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
@@ -971,8 +1002,8 @@ EOF
|
||||
echo ns32k-sni-sysv
|
||||
fi
|
||||
exit 0 ;;
|
||||
PENTIUM:CPunix:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
|
||||
# says <Richard.M.Bartel@ccMail.Census.GOV>
|
||||
PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
|
||||
# says <Richard.M.Bartel@ccMail.Census.GOV>
|
||||
echo i586-unisys-sysv4
|
||||
exit 0 ;;
|
||||
*:UNIX_System_V:4*:FTX*)
|
||||
@@ -984,10 +1015,14 @@ EOF
|
||||
# From seanf@swdc.stratus.com.
|
||||
echo i860-stratus-sysv4
|
||||
exit 0 ;;
|
||||
*:VOS:*:*)
|
||||
# From Paul.Green@stratus.com.
|
||||
echo hppa1.1-stratus-vos
|
||||
exit 0 ;;
|
||||
mc68*:A/UX:*:*)
|
||||
echo m68k-apple-aux${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
news*:NEWS-OS:*:6*)
|
||||
news*:NEWS-OS:6*:*)
|
||||
echo mips-sony-newsos6
|
||||
exit 0 ;;
|
||||
R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
|
||||
@@ -1030,20 +1065,64 @@ EOF
|
||||
*:QNX:*:4*)
|
||||
echo i386-pc-qnx
|
||||
exit 0 ;;
|
||||
NSR-W:NONSTOP_KERNEL:*:*)
|
||||
NSR-[KW]:NONSTOP_KERNEL:*:*)
|
||||
echo nsr-tandem-nsk${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
*:NonStop-UX:*:*)
|
||||
echo mips-compaq-nonstopux
|
||||
exit 0 ;;
|
||||
BS2000:POSIX*:*:*)
|
||||
echo bs2000-siemens-sysv
|
||||
exit 0 ;;
|
||||
DS/*:UNIX_System_V:*:*)
|
||||
echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
|
||||
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
|
||||
|
||||
#echo '(No uname command or uname output not recognized.)' 1>&2
|
||||
#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
|
||||
|
||||
eval $set_cc_for_build
|
||||
cat >$dummy.c <<EOF
|
||||
#ifdef _SEQUENT_
|
||||
# include <sys/types.h>
|
||||
@@ -1130,11 +1209,24 @@ main ()
|
||||
#endif
|
||||
|
||||
#if defined (vax)
|
||||
#if !defined (ultrix)
|
||||
printf ("vax-dec-bsd\n"); exit (0);
|
||||
#else
|
||||
printf ("vax-dec-ultrix\n"); exit (0);
|
||||
#endif
|
||||
# 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);
|
||||
# endif
|
||||
# endif
|
||||
# else
|
||||
printf ("vax-dec-bsd\n"); exit (0);
|
||||
# endif
|
||||
# else
|
||||
printf ("vax-dec-ultrix\n"); exit (0);
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#if defined (alliant) && defined (i860)
|
||||
@@ -1145,7 +1237,7 @@ main ()
|
||||
}
|
||||
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
|
||||
|
||||
# Apollos put the system type in the environment.
|
||||
@@ -1178,6 +1270,48 @@ then
|
||||
esac
|
||||
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
|
||||
|
||||
# Local variables:
|
||||
# eval: (add-hook 'write-file-hooks 'time-stamp)
|
||||
# time-stamp-start: "timestamp='"
|
||||
# time-stamp-format: "%:y-%02m-%02d"
|
||||
# time-stamp-end: "'"
|
||||
# End:
|
||||
|
329
config.sub
vendored
329
config.sub
vendored
@@ -1,8 +1,10 @@
|
||||
#! /bin/sh
|
||||
# Configuration validation subroutine script, version 1.1.
|
||||
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000
|
||||
# Configuration validation subroutine script.
|
||||
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
|
||||
# Free Software Foundation, Inc.
|
||||
#
|
||||
|
||||
timestamp='2001-09-07'
|
||||
|
||||
# This file is (in principle) common to ALL GNU software.
|
||||
# The presence of a machine in this file suggests that SOME GNU software
|
||||
# can handle that machine. It does not imply ALL GNU software can.
|
||||
@@ -27,7 +29,6 @@
|
||||
# configuration script generated by Autoconf, you may include it under
|
||||
# the same distribution terms that you use for the rest of that program.
|
||||
|
||||
# Written by Per Bothner <bothner@cygnus.com>.
|
||||
# Please send patches to <config-patches@gnu.org>.
|
||||
#
|
||||
# Configuration subroutine to validate and canonicalize a configuration type.
|
||||
@@ -50,30 +51,73 @@
|
||||
# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
|
||||
# It is wrong to echo any other type of specification.
|
||||
|
||||
if [ x$1 = x ]
|
||||
then
|
||||
echo Configuration name missing. 1>&2
|
||||
echo "Usage: $0 CPU-MFR-OPSYS" 1>&2
|
||||
echo "or $0 ALIAS" 1>&2
|
||||
echo where ALIAS is a recognized configuration type. 1>&2
|
||||
exit 1
|
||||
fi
|
||||
me=`echo "$0" | sed -e 's,.*/,,'`
|
||||
|
||||
# First pass through any local machine types.
|
||||
case $1 in
|
||||
*local*)
|
||||
echo $1
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
;;
|
||||
usage="\
|
||||
Usage: $0 [OPTION] CPU-MFR-OPSYS
|
||||
$0 [OPTION] ALIAS
|
||||
|
||||
Canonicalize a configuration name.
|
||||
|
||||
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 ;;
|
||||
|
||||
*local*)
|
||||
# First pass through any local machine types.
|
||||
echo $1
|
||||
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
|
||||
|
||||
# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
|
||||
# Here we must recognize all the valid KERNEL-OS combinations.
|
||||
maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
|
||||
case $maybe_os in
|
||||
nto-qnx* | linux-gnu*)
|
||||
nto-qnx* | linux-gnu* | storm-chaos* | os2-emx* | windows32-*)
|
||||
os=-$maybe_os
|
||||
basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
|
||||
;;
|
||||
@@ -99,7 +143,7 @@ case $os in
|
||||
-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
|
||||
-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
|
||||
-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
|
||||
-apple)
|
||||
-apple | -axis)
|
||||
os=
|
||||
basic_machine=$1
|
||||
;;
|
||||
@@ -113,6 +157,14 @@ case $os in
|
||||
os=-vxworks
|
||||
basic_machine=$1
|
||||
;;
|
||||
-chorusos*)
|
||||
os=-chorusos
|
||||
basic_machine=$1
|
||||
;;
|
||||
-chorusrdb)
|
||||
os=-chorusrdb
|
||||
basic_machine=$1
|
||||
;;
|
||||
-hiux*)
|
||||
os=-hiuxwe2
|
||||
;;
|
||||
@@ -171,30 +223,50 @@ esac
|
||||
case $basic_machine in
|
||||
# Recognize the basic CPU types without company name.
|
||||
# Some are omitted here because they have special meanings below.
|
||||
tahoe | i860 | ia64 | m32r | m68k | m68000 | m88k | ns32k | arc | arm \
|
||||
| arme[lb] | pyramid | mn10200 | mn10300 | tron | a29k \
|
||||
| 580 | i960 | h8300 \
|
||||
| x86 | ppcbe | mipsbe | mipsle | shbe | shle | armbe | armle \
|
||||
| hppa | hppa1.0 | hppa1.1 | hppa2.0 | hppa2.0w | hppa2.0n \
|
||||
| hppa64 \
|
||||
| alpha | alphaev[4-8] | alphaev56 | alphapca5[67] \
|
||||
| alphaev6[78] \
|
||||
| we32k | ns16k | clipper | i370 | sh | powerpc | powerpcle \
|
||||
| 1750a | dsp16xx | pdp11 | mips16 | mips64 | mipsel | mips64el \
|
||||
| mips64orion | mips64orionel | mipstx39 | mipstx39el \
|
||||
| mips64vr4300 | mips64vr4300el | mips64vr4100 | mips64vr4100el \
|
||||
| mips64vr5000 | miprs64vr5000el | mcore \
|
||||
| sparc | sparclet | sparclite | sparc64 | sparcv9 | v850 | c4x \
|
||||
| thumb | d10v | fr30 | avr)
|
||||
1750a | 580 \
|
||||
| a29k \
|
||||
| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
|
||||
| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
|
||||
| c4x | clipper \
|
||||
| d10v | d30v | dsp16xx \
|
||||
| fr30 \
|
||||
| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
|
||||
| i370 | i860 | i960 | ia64 \
|
||||
| m32r | m68000 | m68k | m88k | mcore \
|
||||
| mips16 | mips64 | mips64el | mips64orion | mips64orionel \
|
||||
| mips64vr4100 | mips64vr4100el | mips64vr4300 \
|
||||
| mips64vr4300el | mips64vr5000 | mips64vr5000el \
|
||||
| mipsbe | mipseb | mipsel | mipsle | mipstx39 | mipstx39el \
|
||||
| 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
|
||||
;;
|
||||
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'
|
||||
# because (1) that's what they normally are, and
|
||||
# (2) the word "unknown" tends to confuse beginning users.
|
||||
i[34567]86)
|
||||
i*86 | x86_64)
|
||||
basic_machine=$basic_machine-pc
|
||||
;;
|
||||
# Object if more than one company name word.
|
||||
@@ -203,28 +275,43 @@ case $basic_machine in
|
||||
exit 1
|
||||
;;
|
||||
# Recognize the basic CPU types with company name.
|
||||
# FIXME: clean up the formatting here.
|
||||
vax-* | tahoe-* | i[34567]86-* | i860-* | ia64-* | m32r-* | m68k-* | m68000-* \
|
||||
| m88k-* | sparc-* | ns32k-* | fx80-* | arc-* | arm-* | c[123]* \
|
||||
| mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \
|
||||
| power-* | none-* | 580-* | cray2-* | h8300-* | h8500-* | i960-* \
|
||||
| xmp-* | ymp-* \
|
||||
| x86-* | ppcbe-* | mipsbe-* | mipsle-* | shbe-* | shle-* | armbe-* | armle-* \
|
||||
| hppa-* | hppa1.0-* | hppa1.1-* | hppa2.0-* | hppa2.0w-* \
|
||||
| hppa2.0n-* | hppa64-* \
|
||||
| alpha-* | alphaev[4-8]-* | alphaev56-* | alphapca5[67]-* \
|
||||
| alphaev6[78]-* \
|
||||
| we32k-* | cydra-* | ns16k-* | pn-* | np1-* | xps100-* \
|
||||
| clipper-* | orion-* \
|
||||
| sparclite-* | pdp11-* | sh-* | powerpc-* | powerpcle-* \
|
||||
| sparc64-* | sparcv9-* | sparc86x-* | mips16-* | mips64-* | mipsel-* \
|
||||
| mips64el-* | mips64orion-* | mips64orionel-* \
|
||||
| mips64vr4100-* | mips64vr4100el-* | mips64vr4300-* | mips64vr4300el-* \
|
||||
| mipstx39-* | mipstx39el-* | mcore-* \
|
||||
| f301-* | armv*-* | s390-* | sv1-* | t3e-* \
|
||||
| m88110-* | m680[01234]0-* | m683?2-* | m68360-* | z8k-* | d10v-* \
|
||||
| thumb-* | v850-* | d30v-* | tic30-* | c30-* | fr30-* \
|
||||
| bs2000-*)
|
||||
580-* \
|
||||
| a29k-* \
|
||||
| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
|
||||
| alphapca5[67]-* | arc-* \
|
||||
| arm-* | armbe-* | armle-* | armv*-* \
|
||||
| bs2000-* \
|
||||
| c[123]* | c30-* | [cjt]90-* | c54x-* \
|
||||
| clipper-* | cray2-* | cydra-* \
|
||||
| d10v-* | d30v-* \
|
||||
| elxsi-* \
|
||||
| f30[01]-* | f700-* | fr30-* | fx80-* \
|
||||
| h8300-* | h8500-* \
|
||||
| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
|
||||
| i*86-* | i860-* | i960-* | ia64-* \
|
||||
| m32r-* \
|
||||
| m68000-* | m680[01234]0-* | m68360-* | m683?2-* | m68k-* \
|
||||
| m88110-* | m88k-* | mcore-* \
|
||||
| mips-* | mips16-* | mips64-* | mips64el-* | mips64orion-* \
|
||||
| mips64orionel-* | mips64vr4100-* | mips64vr4100el-* \
|
||||
| mips64vr4300-* | mips64vr4300el-* | mipsbe-* | mipseb-* \
|
||||
| mipsle-* | mipsel-* | mipstx39-* | mipstx39el-* \
|
||||
| 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
|
||||
# for a CPU type and a company and sometimes even an OS.
|
||||
@@ -261,14 +348,14 @@ case $basic_machine in
|
||||
os=-sysv
|
||||
;;
|
||||
amiga | amiga-*)
|
||||
basic_machine=m68k-cbm
|
||||
basic_machine=m68k-unknown
|
||||
;;
|
||||
amigaos | amigados)
|
||||
basic_machine=m68k-cbm
|
||||
basic_machine=m68k-unknown
|
||||
os=-amigaos
|
||||
;;
|
||||
amigaunix | amix)
|
||||
basic_machine=m68k-cbm
|
||||
basic_machine=m68k-unknown
|
||||
os=-sysv4
|
||||
;;
|
||||
apollo68)
|
||||
@@ -315,13 +402,16 @@ case $basic_machine in
|
||||
basic_machine=cray2-cray
|
||||
os=-unicos
|
||||
;;
|
||||
[ctj]90-cray)
|
||||
basic_machine=c90-cray
|
||||
[cjt]90)
|
||||
basic_machine=${basic_machine}-cray
|
||||
os=-unicos
|
||||
;;
|
||||
crds | unos)
|
||||
basic_machine=m68k-crds
|
||||
;;
|
||||
cris | cris-* | etrax*)
|
||||
basic_machine=cris-axis
|
||||
;;
|
||||
da30 | da30-*)
|
||||
basic_machine=m68k-da30
|
||||
;;
|
||||
@@ -369,6 +459,10 @@ case $basic_machine in
|
||||
basic_machine=tron-gmicro
|
||||
os=-sysv
|
||||
;;
|
||||
go32)
|
||||
basic_machine=i386-pc
|
||||
os=-go32
|
||||
;;
|
||||
h3050r* | hiux*)
|
||||
basic_machine=hppa1.1-hitachi
|
||||
os=-hiuxwe2
|
||||
@@ -444,19 +538,19 @@ case $basic_machine in
|
||||
basic_machine=i370-ibm
|
||||
;;
|
||||
# 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/'`
|
||||
os=-sysv32
|
||||
;;
|
||||
i[34567]86v4*)
|
||||
i*86v4*)
|
||||
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
|
||||
os=-sysv4
|
||||
;;
|
||||
i[34567]86v)
|
||||
i*86v)
|
||||
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
|
||||
os=-sysv
|
||||
;;
|
||||
i[34567]86sol2)
|
||||
i*86sol2)
|
||||
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
|
||||
os=-solaris2
|
||||
;;
|
||||
@@ -468,14 +562,6 @@ case $basic_machine in
|
||||
basic_machine=i386-unknown
|
||||
os=-vsta
|
||||
;;
|
||||
i386-go32 | go32)
|
||||
basic_machine=i386-unknown
|
||||
os=-go32
|
||||
;;
|
||||
i386-mingw32 | mingw32)
|
||||
basic_machine=i386-unknown
|
||||
os=-mingw32
|
||||
;;
|
||||
iris | iris4d)
|
||||
basic_machine=mips-sgi
|
||||
case $os in
|
||||
@@ -501,6 +587,10 @@ case $basic_machine in
|
||||
basic_machine=ns32k-utek
|
||||
os=-sysv
|
||||
;;
|
||||
mingw32)
|
||||
basic_machine=i386-pc
|
||||
os=-mingw32
|
||||
;;
|
||||
miniframe)
|
||||
basic_machine=m68000-convergent
|
||||
;;
|
||||
@@ -531,7 +621,7 @@ case $basic_machine in
|
||||
os=-coff
|
||||
;;
|
||||
msdos)
|
||||
basic_machine=i386-unknown
|
||||
basic_machine=i386-pc
|
||||
os=-msdos
|
||||
;;
|
||||
mvs)
|
||||
@@ -595,6 +685,10 @@ case $basic_machine in
|
||||
basic_machine=i960-intel
|
||||
os=-mon960
|
||||
;;
|
||||
nonstopux)
|
||||
basic_machine=mips-compaq
|
||||
os=-nonstopux
|
||||
;;
|
||||
np1)
|
||||
basic_machine=np1-gould
|
||||
;;
|
||||
@@ -630,28 +724,28 @@ case $basic_machine in
|
||||
pc532 | pc532-*)
|
||||
basic_machine=ns32k-pc532
|
||||
;;
|
||||
pentium | p5 | k5 | k6 | nexen)
|
||||
pentium | p5 | k5 | k6 | nexgen)
|
||||
basic_machine=i586-pc
|
||||
;;
|
||||
pentiumpro | p6 | 6x86)
|
||||
pentiumpro | p6 | 6x86 | athlon)
|
||||
basic_machine=i686-pc
|
||||
;;
|
||||
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/^[^-]*-//'`
|
||||
;;
|
||||
pentiumpro-* | p6-* | 6x86-*)
|
||||
pentiumpro-* | p6-* | 6x86-* | athlon-*)
|
||||
basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||
;;
|
||||
pentiumii-* | pentium2-*)
|
||||
basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||
basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||
;;
|
||||
pn)
|
||||
basic_machine=pn-gould
|
||||
;;
|
||||
power) basic_machine=rs6000-ibm
|
||||
power) basic_machine=power-ibm
|
||||
;;
|
||||
ppc) basic_machine=powerpc-unknown
|
||||
;;
|
||||
@@ -663,9 +757,23 @@ case $basic_machine in
|
||||
ppcle-* | powerpclittle-*)
|
||||
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)
|
||||
basic_machine=i386-ibm
|
||||
;;
|
||||
pw32)
|
||||
basic_machine=i586-unknown
|
||||
os=-pw32
|
||||
;;
|
||||
rom68k)
|
||||
basic_machine=m68k-rom68k
|
||||
os=-coff
|
||||
@@ -757,6 +865,10 @@ case $basic_machine in
|
||||
basic_machine=t3e-cray
|
||||
os=-unicos
|
||||
;;
|
||||
tic54x | c54x*)
|
||||
basic_machine=tic54x-unknown
|
||||
os=-coff
|
||||
;;
|
||||
tx39)
|
||||
basic_machine=mipstx39-unknown
|
||||
;;
|
||||
@@ -809,6 +921,10 @@ case $basic_machine in
|
||||
basic_machine=hppa1.1-winbond
|
||||
os=-proelf
|
||||
;;
|
||||
windows32)
|
||||
basic_machine=i386-pc
|
||||
os=-windows32-msvcrt
|
||||
;;
|
||||
xmp)
|
||||
basic_machine=xmp-cray
|
||||
os=-unicos
|
||||
@@ -852,13 +968,20 @@ case $basic_machine in
|
||||
vax)
|
||||
basic_machine=vax-dec
|
||||
;;
|
||||
pdp10)
|
||||
# there are many clones, so DEC is not a safe bet
|
||||
basic_machine=pdp10-unknown
|
||||
;;
|
||||
pdp11)
|
||||
basic_machine=pdp11-dec
|
||||
;;
|
||||
we32k)
|
||||
basic_machine=we32k-att
|
||||
;;
|
||||
sparc | sparcv9)
|
||||
sh3 | sh4 | sh3eb | sh4eb)
|
||||
basic_machine=sh-unknown
|
||||
;;
|
||||
sparc | sparcv9 | sparcv9b)
|
||||
basic_machine=sparc-sun
|
||||
;;
|
||||
cydra)
|
||||
@@ -880,6 +1003,9 @@ case $basic_machine in
|
||||
basic_machine=c4x-none
|
||||
os=-coff
|
||||
;;
|
||||
*-unknown)
|
||||
# Make sure to match an already-canonicalized machine name.
|
||||
;;
|
||||
*)
|
||||
echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
|
||||
exit 1
|
||||
@@ -936,15 +1062,18 @@ case $os in
|
||||
| -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
|
||||
| -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
|
||||
| -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
|
||||
| -chorusos* | -chorusrdb* \
|
||||
| -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
|
||||
| -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
|
||||
| -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.
|
||||
;;
|
||||
-qnx*)
|
||||
case $basic_machine in
|
||||
x86-* | i[34567]86-*)
|
||||
x86-* | i*86-*)
|
||||
;;
|
||||
*)
|
||||
os=-nto$os
|
||||
@@ -1000,7 +1129,7 @@ case $os in
|
||||
-ns2 )
|
||||
os=-nextstep2
|
||||
;;
|
||||
-nsk)
|
||||
-nsk*)
|
||||
os=-nsk
|
||||
;;
|
||||
# Preserve the version number of sinix5.
|
||||
@@ -1037,7 +1166,7 @@ case $os in
|
||||
-xenix)
|
||||
os=-xenix
|
||||
;;
|
||||
-*mint | -*MiNT)
|
||||
-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
|
||||
os=-mint
|
||||
;;
|
||||
-none)
|
||||
@@ -1071,6 +1200,9 @@ case $basic_machine in
|
||||
arm*-semi)
|
||||
os=-aout
|
||||
;;
|
||||
pdp10-*)
|
||||
os=-tops20
|
||||
;;
|
||||
pdp11-*)
|
||||
os=-none
|
||||
;;
|
||||
@@ -1179,7 +1311,7 @@ case $basic_machine in
|
||||
*-masscomp)
|
||||
os=-rtu
|
||||
;;
|
||||
f301-fujitsu)
|
||||
f30[01]-fujitsu | f700-fujitsu)
|
||||
os=-uxpv
|
||||
;;
|
||||
*-rom68k)
|
||||
@@ -1257,12 +1389,23 @@ case $basic_machine in
|
||||
-mpw* | -macos*)
|
||||
vendor=apple
|
||||
;;
|
||||
-*mint | -*MiNT)
|
||||
-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
|
||||
vendor=atari
|
||||
;;
|
||||
-vos*)
|
||||
vendor=stratus
|
||||
;;
|
||||
esac
|
||||
basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
|
||||
;;
|
||||
esac
|
||||
|
||||
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:
|
||||
|
448
configure.in
448
configure.in
@@ -1,27 +1,56 @@
|
||||
dnl $Id$
|
||||
dnl Process this file with autoconf to produce a configure script.
|
||||
AC_INIT(lib/urldata.h)
|
||||
AM_CONFIG_HEADER(config.h src/config.h)
|
||||
|
||||
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)
|
||||
|
||||
dnl figure out the libcurl version
|
||||
VERSION=`sed -ne 's/^#define LIBCURL_VERSION "\(.*\)"/\1/p' ${srcdir}/include/curl/curl.h`
|
||||
AM_INIT_AUTOMAKE(curl,$VERSION)
|
||||
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 Detect the canonical host and target build environment
|
||||
dnl
|
||||
AC_CANONICAL_HOST
|
||||
AC_CANONICAL_TARGET
|
||||
|
||||
dnl Checks for programs.
|
||||
AC_PROG_CC
|
||||
AC_CANONICAL_HOST
|
||||
dnl Get system canonical name
|
||||
AC_DEFINE_UNQUOTED(OS, "${host}")
|
||||
|
||||
dnl Check for AIX weirdos
|
||||
AC_AIX
|
||||
|
||||
dnl Checks for programs.
|
||||
AC_PROG_CC
|
||||
|
||||
dnl check for how to do large files
|
||||
AC_SYS_LARGEFILE
|
||||
|
||||
dnl check for cygwin stuff
|
||||
AC_LIBTOOL_WIN32_DLL
|
||||
|
||||
dnl libtool setup
|
||||
AM_PROG_LIBTOOL
|
||||
|
||||
dnl The install stuff has already been taken care of by the automake stuff
|
||||
dnl AC_PROG_INSTALL
|
||||
AC_PROG_MAKE_SET
|
||||
@@ -40,263 +69,12 @@ AC_ARG_ENABLE(debug,
|
||||
*) AC_MSG_RESULT(yes)
|
||||
|
||||
CPPFLAGS="$CPPFLAGS -DMALLOCDEBUG"
|
||||
CFLAGS="-Wall -pedantic -g"
|
||||
CFLAGS="-W -Wall -Wwrite-strings -pedantic -Wundef -Wpointer-arith -Wcast-align -Wnested-externs -g"
|
||||
;;
|
||||
esac ],
|
||||
AC_MSG_RESULT(no)
|
||||
)
|
||||
|
||||
|
||||
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])
|
||||
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_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_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_RUN([
|
||||
#define _REENTRANT
|
||||
|
||||
#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_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_RUN([
|
||||
#include <sys/types.h>
|
||||
#include <netdb.h>
|
||||
|
||||
int
|
||||
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_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 Checks for IPv6
|
||||
dnl **********************************************************************
|
||||
@@ -389,7 +167,25 @@ dnl ucb lib?
|
||||
AC_CHECK_FUNC(gethostname, , AC_CHECK_LIB(ucb, gethostname))
|
||||
|
||||
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)
|
||||
else
|
||||
CURL_CHECK_NONBLOCKING_SOCKET
|
||||
fi
|
||||
],
|
||||
[
|
||||
CURL_CHECK_NONBLOCKING_SOCKET
|
||||
])
|
||||
|
||||
dnl **********************************************************************
|
||||
dnl Check for the random seed preferences
|
||||
@@ -498,6 +294,10 @@ then
|
||||
dnl add define KRB4
|
||||
AC_DEFINE(KRB4)
|
||||
|
||||
dnl substitute it too!
|
||||
KRB4_ENABLED=1
|
||||
AC_SUBST(KRB4_ENABLED)
|
||||
|
||||
dnl the krb4 stuff needs a strlcpy()
|
||||
AC_CHECK_FUNCS(strlcpy)
|
||||
|
||||
@@ -507,6 +307,7 @@ else
|
||||
AC_MSG_RESULT(no)
|
||||
fi
|
||||
|
||||
|
||||
dnl **********************************************************************
|
||||
dnl Check for the presence of SSL libraries and headers
|
||||
dnl **********************************************************************
|
||||
@@ -524,26 +325,45 @@ then
|
||||
AC_MSG_WARN(SSL/https support disabled)
|
||||
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)
|
||||
if test X"$OPT_SSL" = Xoff
|
||||
then
|
||||
AC_MSG_RESULT([defaults (or given in environment)])
|
||||
else
|
||||
test X"$OPT_SSL" = Xyes && OPT_SSL=/usr/local/ssl
|
||||
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 save the pre-ssl check flags for a while
|
||||
CLEANLDFLAGS="$LDFLAGS"
|
||||
CLEANCPPFLAGS="$CPPFLAGS"
|
||||
|
||||
dnl check for crypto libs (part of SSLeay)
|
||||
AC_CHECK_LIB(crypto, CRYPTO_lock)
|
||||
case "$OPT_SSL" in
|
||||
yes)
|
||||
EXTRA_SSL=/usr/local/ssl ;;
|
||||
off)
|
||||
EXTRA_SSL= ;;
|
||||
*)
|
||||
dnl check the given spot right away!
|
||||
EXTRA_SSL=$OPT_SSL
|
||||
LDFLAGS="$LDFLAGS -L$EXTRA_SSL/lib"
|
||||
CPPFLAGS="$CPPFLAGS -I$EXTRA_SSL/include/openssl -I$EXTRA_SSL/include"
|
||||
;;
|
||||
esac
|
||||
|
||||
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 SSL libs NOTE: it is important to do this AFTER the crypto lib
|
||||
|
||||
AC_CHECK_LIB(crypto, CRYPTO_add_lock)
|
||||
AC_CHECK_LIB(ssl, SSL_connect)
|
||||
|
||||
if test "$ac_cv_lib_ssl_SSL_connect" != yes; then
|
||||
@@ -562,16 +382,30 @@ else
|
||||
fi
|
||||
|
||||
|
||||
|
||||
dnl Check for SSLeay headers
|
||||
AC_CHECK_HEADERS(openssl/x509.h openssl/rsa.h openssl/crypto.h openssl/pem.h openssl/ssl.h openssl/err.h)
|
||||
AC_CHECK_HEADERS(openssl/x509.h openssl/rsa.h openssl/crypto.h \
|
||||
openssl/pem.h openssl/ssl.h openssl/err.h,
|
||||
OPENSSL_ENABLED=1)
|
||||
|
||||
if test $ac_cv_header_openssl_x509_h = no; then
|
||||
AC_CHECK_HEADERS(x509.h rsa.h crypto.h pem.h ssl.h err.h)
|
||||
AC_CHECK_HEADERS(x509.h rsa.h crypto.h pem.h ssl.h err.h,
|
||||
OPENSSL_ENABLED=1)
|
||||
fi
|
||||
|
||||
dnl Check for the OpenSSL engine header, it is kind of "separated"
|
||||
dnl from the main SSL check
|
||||
AC_CHECK_HEADERS(openssl/engine.h)
|
||||
|
||||
AC_SUBST(OPENSSL_ENABLED)
|
||||
|
||||
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
|
||||
|
||||
AC_CHECK_FUNCS( RAND_status \
|
||||
@@ -639,6 +473,8 @@ else
|
||||
dnl is there a localtime_r()
|
||||
CURL_CHECK_LOCALTIME_R()
|
||||
|
||||
AC_CHECK_FUNCS( gmtime_r )
|
||||
|
||||
fi
|
||||
|
||||
dnl **********************************************************************
|
||||
@@ -662,7 +498,6 @@ AC_CHECK_HEADERS( \
|
||||
sys/stat.h \
|
||||
sys/types.h \
|
||||
sys/time.h \
|
||||
getopt.h \
|
||||
sys/param.h \
|
||||
termios.h \
|
||||
termio.h \
|
||||
@@ -673,6 +508,9 @@ AC_CHECK_HEADERS( \
|
||||
winsock.h \
|
||||
time.h \
|
||||
io.h \
|
||||
pwd.h \
|
||||
utime.h \
|
||||
sys/utime.h
|
||||
)
|
||||
|
||||
dnl Check for libz header
|
||||
@@ -686,38 +524,15 @@ AC_HEADER_TIME
|
||||
# mprintf() checks:
|
||||
|
||||
# check for 'long double'
|
||||
AC_CHECK_SIZEOF(long double, 8)
|
||||
# AC_CHECK_SIZEOF(long double, 8)
|
||||
# check for 'long long'
|
||||
AC_CHECK_SIZEOF(long long, 4)
|
||||
# AC_CHECK_SIZEOF(long long, 4)
|
||||
|
||||
# check for ssize_t
|
||||
AC_CHECK_TYPE(ssize_t, int)
|
||||
|
||||
dnl
|
||||
dnl We can't just AC_CHECK_TYPE() for socklen_t since it doesn't appear
|
||||
dnl in the standard headers. We egrep for it in the socket headers and
|
||||
dnl if it is used there we assume we have the type defined, otherwise
|
||||
dnl we search for it with AC_CHECK_TYPE() the "normal" way
|
||||
dnl
|
||||
|
||||
if test "$ac_cv_header_sys_socket_h" = "yes"; then
|
||||
AC_MSG_CHECKING(for socklen_t in sys/socket.h)
|
||||
AC_EGREP_HEADER(socklen_t,
|
||||
sys/socket.h,
|
||||
socklen_t=yes
|
||||
AC_MSG_RESULT(yes),
|
||||
AC_MSG_RESULT(no))
|
||||
fi
|
||||
|
||||
if test "$socklen_t" != "yes"; then
|
||||
# check for socklen_t the standard way if it wasn't found before
|
||||
AC_CHECK_TYPE(socklen_t, int)
|
||||
fi
|
||||
|
||||
|
||||
dnl Get system canonical name
|
||||
AC_CANONICAL_HOST
|
||||
AC_DEFINE_UNQUOTED(OS, "${host}")
|
||||
TYPE_SOCKLEN_T
|
||||
TYPE_IN_ADDR_T
|
||||
|
||||
dnl Checks for library functions.
|
||||
dnl AC_PROG_GCC_TRADITIONAL
|
||||
@@ -727,6 +542,7 @@ AC_CHECK_FUNCS( socket \
|
||||
select \
|
||||
strdup \
|
||||
strstr \
|
||||
strtok_r \
|
||||
strftime \
|
||||
uname \
|
||||
strcasecmp \
|
||||
@@ -734,7 +550,6 @@ AC_CHECK_FUNCS( socket \
|
||||
strcmpi \
|
||||
gethostname \
|
||||
gethostbyaddr \
|
||||
getservbyname \
|
||||
gettimeofday \
|
||||
inet_addr \
|
||||
inet_ntoa \
|
||||
@@ -746,7 +561,11 @@ AC_CHECK_FUNCS( socket \
|
||||
sigaction \
|
||||
signal \
|
||||
getpass_r \
|
||||
strlcat
|
||||
strlcat \
|
||||
getpwuid \
|
||||
geteuid \
|
||||
dlopen \
|
||||
utime
|
||||
)
|
||||
|
||||
dnl removed 'getpass' check on October 26, 2000
|
||||
@@ -772,19 +591,28 @@ dnl AC_PATH_PROG( RANLIB, ranlib, /usr/bin/ranlib,
|
||||
dnl $PATH:/usr/bin/:/usr/local/bin )
|
||||
dnl AC_SUBST(RANLIB)
|
||||
|
||||
AC_OUTPUT( Makefile \
|
||||
AC_CONFIG_FILES([Makefile \
|
||||
docs/Makefile \
|
||||
docs/examples/Makefile \
|
||||
docs/libcurl/Makefile \
|
||||
include/Makefile \
|
||||
include/curl/Makefile \
|
||||
src/Makefile \
|
||||
lib/Makefile \
|
||||
tests/Makefile \
|
||||
tests/data/Makefile \
|
||||
tests/server/Makefile \
|
||||
packages/Makefile \
|
||||
packages/Win32/Makefile \
|
||||
packages/Win32/cygwin/Makefile \
|
||||
packages/Linux/Makefile \
|
||||
packages/Linux/RPM/Makefile \
|
||||
packages/Linux/RPM/curl.spec \
|
||||
packages/Linux/RPM/curl-ssl.spec )
|
||||
packages/Linux/RPM/curl-ssl.spec \
|
||||
packages/Solaris/Makefile \
|
||||
packages/EPM/curl.list \
|
||||
packages/EPM/Makefile \
|
||||
curl-config
|
||||
])
|
||||
AC_OUTPUT
|
||||
|
||||
|
97
curl-config.in
Normal file
97
curl-config.in
Normal file
@@ -0,0 +1,97 @@
|
||||
#! /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:
|
||||
|
||||
--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
|
||||
--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
|
||||
;;
|
||||
|
||||
--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)
|
22
docs/BUGS
22
docs/BUGS
@@ -1,3 +1,4 @@
|
||||
$Id$
|
||||
_ _ ____ _
|
||||
___| | | | _ \| |
|
||||
/ __| | | | |_) | |
|
||||
@@ -22,11 +23,16 @@ BUGS
|
||||
|
||||
When reporting a bug, you should include information that will help us
|
||||
understand what's wrong, what you expected to happen and how to repeat the
|
||||
bad behaviour. You therefore need to supply your operating system's name and
|
||||
bad behavior. You therefore need to supply your operating system's name and
|
||||
version number (uname -a under a unix is fine), what version of curl you're
|
||||
using (curl -V is fine), what URL you were working with and anything else
|
||||
you think matters.
|
||||
|
||||
Since curl deals with networks, it often helps us a lot if you include a
|
||||
protocol debug dump with your bug report. The output you get by using the -v
|
||||
flag. Usually, you also get more info by using -i so that is likely to be
|
||||
useful when reporting bugs as well.
|
||||
|
||||
If curl crashed, causing a core dump (in unix), there is hardly any use to
|
||||
send that huge file to anyone of us. Unless we have an exact same system
|
||||
setup as you, we can't do much with it. What we instead ask of you is to get
|
||||
@@ -35,23 +41,23 @@ BUGS
|
||||
The address and how to subscribe to the mailing list is detailed in the
|
||||
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
|
||||
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>
|
||||
should be replaced with the name of your debugger, in most cases that will
|
||||
be 'gdb', but 'dbx' and others also occur.
|
||||
|
||||
When the debugger has finished loading the core file and presents you a
|
||||
prompt, you can give the compiler instructions. Enter 'where' (without the
|
||||
quotes) and press return.
|
||||
prompt, enter 'where' (without the quotes) and press return.
|
||||
|
||||
The list that is presented is the stack trace. If everything worked, it is
|
||||
supposed to contain the chain of functions that were called when curl
|
||||
crashed.
|
||||
crashed. Include the stack trace with your detailed bug report. It'll help a
|
||||
lot.
|
||||
|
||||
|
@@ -10,17 +10,29 @@ To Think About When Contributing Source Code
|
||||
in mind when you decide to write a contribution to the project. This concerns
|
||||
new features as well as corrections to existing flaws or bugs.
|
||||
|
||||
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!
|
||||
|
||||
The License Issue
|
||||
|
||||
When contributing with code, you agree to put your changes and new code under
|
||||
the same license curl and libcurl is already using unless stated otherwise.
|
||||
|
||||
If you add a larger piece of code, you can opt to make that file or set of
|
||||
files to use a different license as long as they don't 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
|
||||
GPL (as we don't want the GPL virus to attack users of libcurl) but they must
|
||||
use "GPL compatible" licenses.
|
||||
|
||||
What To Read
|
||||
|
||||
Source code, the man pages, the INTERALS 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.
|
||||
|
||||
Naming
|
||||
|
||||
Try using a non-confusing naming scheme for your new functions and variable
|
||||
@@ -87,7 +99,9 @@ Write Access to CVS Repository
|
||||
If you are a frequent contributor, or have another good reason, you can of
|
||||
course get write access to the CVS repository and then you'll be able to
|
||||
check-in all your changes straight into the CVS tree instead of sending all
|
||||
changes by mail as patches. Just ask if this is what you'd want.
|
||||
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
|
||||
|
||||
|
225
docs/FAQ
225
docs/FAQ
@@ -1,4 +1,4 @@
|
||||
Updated: March 13, 2001 (http://curl.haxx.se/docs/faq.shtml)
|
||||
Updated: March 11, 2002 (http://curl.haxx.se/docs/faq.shtml)
|
||||
_ _ ____ _
|
||||
___| | | | _ \| |
|
||||
/ __| | | | |_) | |
|
||||
@@ -12,6 +12,9 @@ FAQ
|
||||
1.2 What is libcurl?
|
||||
1.3 What is cURL not?
|
||||
1.4 When will you make curl do XXXX ?
|
||||
1.5 Who makes cURL?
|
||||
1.6 What do you get for making cURL?
|
||||
1.7 What about CURL from curl.com?
|
||||
|
||||
2. Install Related Problems
|
||||
2.1 configure doesn't find OpenSSL even when it is installed
|
||||
@@ -30,8 +33,11 @@ FAQ
|
||||
3.6 Does curl support javascript, ASP, XML, XHTML or HTML version Y?
|
||||
3.7 Can I use curl to delete/rename a file through FTP?
|
||||
3.8 How do I tell curl to follow HTTP redirects?
|
||||
3.9 How do I use curl in PHP?
|
||||
3.9 How do I use curl in my favourite 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?
|
||||
|
||||
4. Running Problems
|
||||
4.1 Problems connecting to SSL servers.
|
||||
@@ -44,8 +50,9 @@ FAQ
|
||||
4.5.3 "403 Forbidden"
|
||||
4.5.4 "404 Not Found"
|
||||
4.5.5 "405 Method Not Allowed"
|
||||
4.5.6 "301 Moved Permanently"
|
||||
4.6 Can you tell me what error code 142 means?
|
||||
4.7 How do I keep 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.9 Curl can't authenticate to the server that requires NTLM?
|
||||
|
||||
@@ -55,7 +62,7 @@ FAQ
|
||||
5.3 How do I fetch multiple files with libcurl?
|
||||
5.4 Does libcurl do Winsock initing on win32 systems?
|
||||
5.5 Does CURLOPT_FILE and CURLOPT_INFILE work on win32 ?
|
||||
5.6 What about Keep-Alive or persistant connections?
|
||||
5.6 What about Keep-Alive or persistent connections?
|
||||
|
||||
6. License Issues
|
||||
6.1 I have a GPL program, can I use the libcurl library?
|
||||
@@ -76,31 +83,32 @@ FAQ
|
||||
with URL spelled in uppercase to make it obvious it deals with URLs. The
|
||||
fact it can also be pronounced 'see URL' also helped.
|
||||
|
||||
Curl supports a range of common internet protocols, currently including
|
||||
HTTP, HTTPS, FTP, GOPHER, LDAP, DICT, TELNET and FILE.
|
||||
Curl supports a range of common Internet protocols, currently including
|
||||
HTTP, HTTPS, FTP, FTPS, GOPHER, LDAP, DICT, TELNET and FILE.
|
||||
|
||||
We spell it cURL or just curl.
|
||||
We spell it cURL or just curl. We pronounce it with an initial k sound:
|
||||
[kurl].
|
||||
|
||||
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
|
||||
ones.
|
||||
You can use libcurl for free in your application even if it is commercial
|
||||
or closed-source.
|
||||
|
||||
1.3 What is cURL not?
|
||||
|
||||
Curl is *not*, I repeat, *not* a wget clone even though that is a very
|
||||
common misconception. Never, during curl's development, have I intended curl
|
||||
to replace wget or compete on its market. Curl is targeted at single-shot
|
||||
file transfers.
|
||||
Curl is *not* a wget clone even though that is a very common misconception.
|
||||
Never, during curl's development, have we intended curl to replace wget or
|
||||
compete on its market. Curl is targeted at single-shot file transfers.
|
||||
|
||||
Curl is not a web site mirroring program. If you wanna use curl to mirror
|
||||
something: fine, go ahead and write a script that wraps around curl to make
|
||||
it reality (like curlmirror.pl does).
|
||||
|
||||
Curl is not an ftp site mirroring program. Sure, get and send ftp with curl
|
||||
but if you want systematic and sequential behaviour you should write a
|
||||
Curl is not an FTP site mirroring program. Sure, get and send FTP with curl
|
||||
but if you want systematic and sequential behavior you should write a
|
||||
script (or write a new program that interfaces libcurl) and do it.
|
||||
|
||||
Curl is not a PHP tool, even though it works perfectly well when used from
|
||||
@@ -128,7 +136,7 @@ FAQ
|
||||
|
||||
* We focus on protocol related issues and improvements. If you wanna do more
|
||||
magic with the supported protocols than curl currently does, chances are
|
||||
big 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.
|
||||
|
||||
* If you want someone else to make all the work while you wait for us to
|
||||
@@ -140,6 +148,51 @@ FAQ
|
||||
* If you write the code, chances are bigger that it will get into curl
|
||||
faster.
|
||||
|
||||
1.5 Who makes cURL?
|
||||
|
||||
cURL and libcurl are not made by any single individual. Sure, Daniel
|
||||
Stenberg writes the major parts, but various people's submissions are
|
||||
important and crucial. Anyone can 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 in any way for
|
||||
developing curl. We all 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 by simply 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.
|
||||
|
||||
2. Install Related Problems
|
||||
|
||||
2.1. configure doesn't find OpenSSL even when it is installed
|
||||
@@ -175,7 +228,7 @@ FAQ
|
||||
a few functions are left out from the libssl.
|
||||
|
||||
If the function names missing include RSA or RSAREF you can be certain
|
||||
that this is because libssl requires the RSA and 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
|
||||
configure. Make sure that you remove the config.cache file before you
|
||||
@@ -194,12 +247,12 @@ FAQ
|
||||
|
||||
Curl uses OpenSSL to do the SSL stuff. The LIBEAY32.DLL is what curl needs
|
||||
on a windows machine to do https://. Check out the curl web site to find
|
||||
accurate and up-to-date pointers to recent OpenSSL DDLs and other binary
|
||||
accurate and up-to-date pointers to recent OpenSSL DLLs and other binary
|
||||
packages.
|
||||
|
||||
2.4. Does cURL support Socks (RFC 1928) ?
|
||||
|
||||
No. Nobody has wanted it that badly yet. We appriciate patches that bring
|
||||
No. Nobody has wanted it that badly yet. We appreciate patches that bring
|
||||
this functionality.
|
||||
|
||||
|
||||
@@ -234,10 +287,11 @@ FAQ
|
||||
use the -F type. In all the most common cases, you should use -d which then
|
||||
causes a posting with the type 'application/x-www-form-urlencoded'.
|
||||
|
||||
This is described in some detail in the README.curl file, and if you don't
|
||||
understand it the first time, read it again before you post questions about
|
||||
this to the mailing list. Also, try reading through the mailing list
|
||||
archives for old postings and questions regarding this.
|
||||
This is described in some detail in the MANUAL and TheArtOfHttpScripting
|
||||
documents, and if you don't understand it the first time, read it again
|
||||
before you post questions about this to the mailing list. Also, try reading
|
||||
through the mailing list archives for old postings and questions regarding
|
||||
this.
|
||||
|
||||
3.4. How do I tell curl to run custom FTP commands?
|
||||
|
||||
@@ -245,7 +299,7 @@ FAQ
|
||||
file transfer. Study the -Q/--quote option.
|
||||
|
||||
Since curl is used for file transfers, you don't use curl to just perform
|
||||
ftp commands without transfering anything. Therefore you must always specify
|
||||
FTP commands without transferring anything. Therefore you must always specify
|
||||
a URL to transfer to/from even when doing custom FTP commands.
|
||||
|
||||
3.5. How can I disable the Pragma: nocache header?
|
||||
@@ -257,7 +311,7 @@ FAQ
|
||||
3.6. Does curl support javascript, ASP, XML, XHTML or HTML version Y?
|
||||
|
||||
To curl, all contents are alike. It doesn't matter how the page was
|
||||
generated. It may be ASP, PHP, perl, shell-script, SSI or plain
|
||||
generated. It may be ASP, PHP, Perl, shell-script, SSI or plain
|
||||
HTML-files. There's no difference to curl and it doesn't even know what kind
|
||||
of language that generated the page.
|
||||
|
||||
@@ -267,7 +321,7 @@ FAQ
|
||||
|
||||
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:
|
||||
|
||||
@@ -281,29 +335,75 @@ FAQ
|
||||
|
||||
curl -L http://redirector.com
|
||||
|
||||
3.9 How do I use curl in PHP?
|
||||
3.9 How do I use curl in my favourite programming language?
|
||||
|
||||
PHP4 has the ability to use libcurl as an internal module if built with that
|
||||
option enabled. You then get a set of extra functions that can be used
|
||||
within your PHP programs. You find all details about those functions in the
|
||||
curl section in the PHP manual, see the online version at:
|
||||
There exist many language interfaces/bindings for curl that integrates it
|
||||
better with various languages. If you are fluid in a script language, you
|
||||
may very well opt to use such an interface instead of using the command line
|
||||
tool.
|
||||
|
||||
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:
|
||||
|
||||
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.
|
||||
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 ontop of HTTP. Protocols such as SOAP, WEBDAV and
|
||||
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 interepreter 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 documentaion 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.
|
||||
|
||||
|
||||
4. Running Problems
|
||||
|
||||
4.1. Problems connecting to SSL servers.
|
||||
@@ -325,7 +425,7 @@ FAQ
|
||||
|
||||
In general unix shells, the & letter is treated special and when used, it
|
||||
runs the specified command in the background. To safely send the & as a part
|
||||
of a URL, you should 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.
|
||||
|
||||
An example that would invoke a remote CGI that uses &-letters could be:
|
||||
@@ -393,20 +493,31 @@ FAQ
|
||||
identified by the Request-URI. The response MUST include an Allow header
|
||||
containing a list of valid methods for the requested resource.
|
||||
|
||||
4.5.6 "301 Moved Permanently"
|
||||
|
||||
If you get this return code and an HTML outpt similar to this:
|
||||
|
||||
<H1>Moved Permanently</H1> The document has moved <A
|
||||
HREF="http://same_url_now_with_a_trailing_slash/">here</A>.
|
||||
|
||||
it might be because you request a directory URL but without the trailing
|
||||
slash. Try the same operation again _with_ the trailing URL, or use the
|
||||
-L/--location option to follow the redirection.
|
||||
|
||||
4.6. Can you tell me what error code 142 means?
|
||||
|
||||
All error codes that are larger than the highest documented error code means
|
||||
that curl has existed due to a timeout. There was no nice way for curl to
|
||||
abort from such a condition and that's why it got this undocumented
|
||||
error. This should not occur in releases after 7.4.1.
|
||||
that curl has exited due to a crash. This is a serious error, and we
|
||||
appreciate a detailed bug report from you that describes how we could go
|
||||
ahead and repeat this!
|
||||
|
||||
4.7. How do I keep usernames and passwords secret in Curl command lines?
|
||||
4.7. How do I keep user names and passwords secret in Curl command lines?
|
||||
|
||||
This problem has two sides:
|
||||
|
||||
The first part is to avoid having clear-text passwords in the command line
|
||||
so that they don't appear in 'ps' outputs and similar. That is easily
|
||||
avoided by using the "-K" option 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.
|
||||
|
||||
To keep the passwords in your account secret from the rest of the world is
|
||||
@@ -416,11 +527,11 @@ FAQ
|
||||
|
||||
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.
|
||||
Evesdropping is very easy.
|
||||
Eavesdropping is very easy.
|
||||
|
||||
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
|
||||
particular platform, try contacting the person who built the package/archive
|
||||
@@ -449,14 +560,16 @@ FAQ
|
||||
programs. libcurl will use thread-safe functions instead of non-safe ones if
|
||||
your system has such.
|
||||
|
||||
We would appriciate some kind of report or README file from those who have
|
||||
We would appreciate some kind of report or README file from those who have
|
||||
used libcurl in a threaded environment.
|
||||
|
||||
5.2 How can I receive all data into a large memory chunk?
|
||||
|
||||
[ See also the examples/getinmemory.c source ]
|
||||
|
||||
You are in full control of the callback function that gets called every time
|
||||
there is data received from the remote server. You can make that callback do
|
||||
whatever you want. You do not have to write the 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
|
||||
pass to the callback function. You set the pointer using the
|
||||
@@ -492,21 +605,15 @@ FAQ
|
||||
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 persistant connections.
|
||||
libcurl to use persistent connections.
|
||||
|
||||
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.
|
||||
|
||||
5.4 Does libcurl do Winsock initing on win32 systems?
|
||||
5.4 Does libcurl do Winsock initialization on win32 systems?
|
||||
|
||||
No.
|
||||
|
||||
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. 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.
|
||||
Yes (since 7.8.1) if told to in the curl_global_init() call.
|
||||
|
||||
5.5 Does CURLOPT_FILE and CURLOPT_INFILE work on win32 ?
|
||||
|
||||
@@ -518,15 +625,15 @@ FAQ
|
||||
|
||||
(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?
|
||||
|
||||
Starting with version 7.7, curl and libcurl will have excellent support for
|
||||
persistant connections when transferring several files from the same server.
|
||||
persistent connections when transferring several files from the same server.
|
||||
Curl will attempt to reuse connections for all URLs specified on the same
|
||||
command line/config file, and libcurl will reuse connections for all
|
||||
transfers that are made using the same libcurl handle.
|
||||
|
||||
Previous versions had no persistant connection support.
|
||||
Previous versions had no persistent connection support.
|
||||
|
||||
6. License Issues
|
||||
|
||||
|
@@ -56,7 +56,7 @@ FTP
|
||||
- download
|
||||
- authentication
|
||||
- kerberos security
|
||||
- PORT or PASV
|
||||
- active/passive using PORT, EPRT, PASV or EPSV
|
||||
- single file size information (compare to HTTP HEAD)
|
||||
- 'type=' URL support
|
||||
- dir listing
|
||||
|
301
docs/INSTALL
301
docs/INSTALL
@@ -6,26 +6,37 @@
|
||||
|
||||
How To Compile
|
||||
|
||||
Curl has been compiled and built on numerous different operating systems. The
|
||||
way to proceed is mainly divided in two different ways: the unix way or the
|
||||
windows way.
|
||||
Curl has been compiled and built on numerous different operating systems.
|
||||
|
||||
If you're using Windows (95, 98, NT) or OS/2, you should continue reading from
|
||||
the Win32 or OS/2 headers further down. All other systems should be capable of
|
||||
being installed as described below.
|
||||
Most systems build curl the same way (unix-style). Continue reading below for
|
||||
more details if you're one of them.
|
||||
|
||||
If you're using Windows (95/98/NT/ME/2000/XP or similar), VMS, RISC OS or OS/2
|
||||
or cross-compile, you should continue reading from one the paragraphs further
|
||||
down.
|
||||
|
||||
UNIX
|
||||
====
|
||||
|
||||
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:
|
||||
A normal unix installation is made in three or four steps (after you've
|
||||
unpacked the source archive):
|
||||
|
||||
./configure
|
||||
make
|
||||
make test (optional)
|
||||
make install
|
||||
|
||||
If you have OpenSSL installed in /usr/local/ssl, you can run configure
|
||||
like:
|
||||
You probably need to be root when doing the last command.
|
||||
|
||||
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
|
||||
|
||||
@@ -34,13 +45,13 @@ UNIX
|
||||
|
||||
./configure --with-ssl=/opt/OpenSSL
|
||||
|
||||
If you insist on forcing a build *without* SSL support, even though you may
|
||||
have it installed in your system, you can run configure like this:
|
||||
If you insist on forcing a build without SSL support, even though you may
|
||||
have OpenSSL installed in your system, you can run configure like this:
|
||||
|
||||
./configure --without-ssl
|
||||
|
||||
If you have OpenSSL installed, but with the libraries in one place and the
|
||||
header files somewhere else, you'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
|
||||
should work:
|
||||
|
||||
@@ -54,35 +65,13 @@ UNIX
|
||||
env CPPFLAGS="-I/path/to/ssl/include" LDFLAGS="-L/path/to/ssl/lib" \
|
||||
./configure
|
||||
|
||||
If your SSL library was compiled with rsaref (usually for use in
|
||||
the United States), you may also need to set:
|
||||
If your SSL library was compiled with rsaref (usually for use in the United
|
||||
States), you may also need to set:
|
||||
|
||||
LIBS=-lRSAglue -lrsaref
|
||||
(from Doug Kaufman <dkaufman@rahul.net>)
|
||||
(as suggested by Doug Kaufman)
|
||||
|
||||
Without SSL support, just run:
|
||||
|
||||
./configure
|
||||
|
||||
Then run:
|
||||
|
||||
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
|
||||
KNOWN PROBLEMS (these ones should not happen anymore)
|
||||
|
||||
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
|
||||
@@ -109,10 +98,10 @@ UNIX
|
||||
they're executable and set to appear in the path *BEFORE* the actual (but
|
||||
obsolete) autoconf and autoheader scripts.
|
||||
|
||||
OPTIONS
|
||||
MORE OPTIONS
|
||||
|
||||
Remember, to force configure to use the standard cc compiler if both
|
||||
cc and gcc are present, run configure like
|
||||
To force configure to use the standard cc compiler if both cc and gcc are
|
||||
present, run configure like
|
||||
|
||||
CC=cc ./configure
|
||||
or
|
||||
@@ -140,11 +129,6 @@ UNIX
|
||||
|
||||
./configure --with-krb4=/usr/athena
|
||||
|
||||
If your system support shared libraries, but you want to built a static
|
||||
version only, you can disable building the shared version by using:
|
||||
|
||||
./configure --disable-shared
|
||||
|
||||
If you're a curl developer and use gcc, you might want to enable more
|
||||
debug options with the --enable-debug option.
|
||||
|
||||
@@ -156,29 +140,27 @@ Win32
|
||||
MingW32 (GCC-2.95) style
|
||||
------------------------
|
||||
Run the 'mingw32.bat' file to get the proper environment variables
|
||||
set, then run 'make -f Makefile.m32' in the lib/ dir and then
|
||||
'make -f Makefile.m32' in the src/ dir.
|
||||
set, then run 'make mingw32' in the root dir.
|
||||
|
||||
If you have any problems linking libraries or finding header files,
|
||||
be sure to look at the provided "Makefile.m32" files for the proper
|
||||
If you have any problems linking libraries or finding header files, be
|
||||
sure to verify that the provided "Makefile.m32" files use the proper
|
||||
paths, and adjust as necessary.
|
||||
|
||||
Cygwin style
|
||||
------------
|
||||
Almost identical to the unix installation. Run the configure script
|
||||
in the curl root with 'sh configure'. Make sure you have the sh
|
||||
executable in /bin/ or you'll see the configure fail towards the
|
||||
end.
|
||||
Almost identical to the unix installation. Run the configure script in
|
||||
the curl root with 'sh configure'. Make sure you have the sh
|
||||
executable in /bin/ or you'll see the configure fail towards the end.
|
||||
|
||||
Run 'make'
|
||||
|
||||
Microsoft command line style
|
||||
----------------------------
|
||||
Run the 'vcvars32.bat' file to get the proper environment variables
|
||||
set, then run 'nmake -f Makefile.vc6' in the lib/ dir and then
|
||||
'nmake -f Makefile.vc6' in the src/ dir.
|
||||
set, then run 'nmake vc' in the root 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
|
||||
-------------------------
|
||||
@@ -189,16 +171,16 @@ Win32
|
||||
Make the sources in the src/ drawer be a "win32 console application"
|
||||
project. Name it curl.
|
||||
|
||||
With VC++, add 'wsock32.lib' to the link libs when you build curl!
|
||||
Borland seems to do that itself magically. Of course you have to
|
||||
make sure it links with the libcurl too!
|
||||
With VC++, add 'ws2_32.lib' to the link libs when you build curl!
|
||||
Borland seems to do that itself magically. Of course you have to make
|
||||
sure it links with the libcurl too!
|
||||
|
||||
For VC++ 6, there's an included Makefile.vc6 that should be possible
|
||||
to use out-of-the-box.
|
||||
|
||||
Microsoft note: add /Zm200 to the compiler options, as the hugehelp.c
|
||||
won't compile otherwise due to "too long puts string" or something
|
||||
like that!
|
||||
Microsoft note: add /Zm200 to the compiler options to increase the
|
||||
compiler's memory allocation limit, as the hugehelp.c won't compile
|
||||
due to "too long puts string".
|
||||
|
||||
|
||||
With SSL:
|
||||
@@ -206,26 +188,47 @@ Win32
|
||||
MingW32 (GCC-2.95) style
|
||||
------------------------
|
||||
Run the 'mingw32.bat' file to get the proper environment variables
|
||||
set, then run 'make -f Makefile.m32 SSL=1' in the lib/ dir and then
|
||||
'make -f Makefile.m32 SSL=1' in the src/ dir.
|
||||
set, then run 'make mingw32-ssl' in the root dir.
|
||||
|
||||
If you have any problems linking libraries or finding header files,
|
||||
be sure to look at the provided "Makefile.m32" files for the proper
|
||||
If you have any problems linking libraries or finding header files, be
|
||||
sure to look at the provided "Makefile.m32" files for the proper
|
||||
paths, and adjust as necessary.
|
||||
|
||||
Cygwin style
|
||||
------------
|
||||
|
||||
Haven't done, nor got any reports on how to do. It should although be
|
||||
identical to the unix setup for the same purpose. See above.
|
||||
|
||||
Microsoft command line style
|
||||
----------------------------
|
||||
Run the 'vcvars32.bat' file to get the proper environment variables
|
||||
set, then run 'nmake -f Makefile.vc6 release-ssl' in the lib/ dir and
|
||||
then 'nmake -f Makefile.vc6' in the src/ dir.
|
||||
|
||||
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
|
||||
-------------------------
|
||||
@@ -252,7 +255,7 @@ IBM OS/2
|
||||
If you want to build with OpenSSL or OpenLDAP support, you'll need to
|
||||
download those libraries, too. Dirk Ohme has done some work to port SSL
|
||||
libraries under OS/2, but it looks like he doesn't care about emx. You'll
|
||||
find his patches on: http://come.to/Dirk.Ohme
|
||||
find his patches on: http://come.to/Dirk_Ohme
|
||||
|
||||
If during the linking you get an error about _errno being an undefined
|
||||
symbol referenced from the text segment, you need to add -D__ST_MT_ERRNO__
|
||||
@@ -264,29 +267,164 @@ IBM OS/2
|
||||
If you're getting huge binaries, probably your makefiles have the -g in
|
||||
CFLAGS.
|
||||
|
||||
VMS
|
||||
===
|
||||
(The VMS section is in whole contributed by the friendly Nico Baggus)
|
||||
|
||||
This is the first attempt at porting cURL to VMS.
|
||||
|
||||
Curl seems to work with FTP & HTTP other protocols are not tested. (the
|
||||
perl http/ftp testing server supplied as testing too cannot work on VMS
|
||||
because vms has no concept of fork(). [ I tried to give it a whack, but
|
||||
thats of no use.
|
||||
|
||||
SSL stuff has not been ported.
|
||||
|
||||
Telnet has about the same issues as for Win32. When the changes for Win32
|
||||
are clear maybe they'l work for VMS too. The basic problem is that select
|
||||
ONLY works for sockets.
|
||||
|
||||
Marked instances of fopen/[f]stat that might become a problem, especially
|
||||
for non stream files. In this regard, the files opened for writing will be
|
||||
created stream/lf and will thus be safe. Just keep in mind that non-binary
|
||||
read/wring from/to files will have a records size limit of 32767 bytes
|
||||
imposed.
|
||||
|
||||
Stat to get the size of the files is again only safe for stream files &
|
||||
fixed record files without implied CC.
|
||||
|
||||
-- My guess is that only allowing access to stream files is the quickest
|
||||
way to get around the most issues. Therefore all files need to to be
|
||||
checked to be sure they will be stream/lf before processing them. This is
|
||||
the easiest way out, I know. The reason for this is that code that needs to
|
||||
report the filesize will become a pain in the ass otherwise.
|
||||
|
||||
Exit status.... Well we needed something done here,
|
||||
|
||||
VMS has a structured exist status:
|
||||
| 3 | 2 | 1 | 0|
|
||||
|1098|765432109876|5432109876543|210|
|
||||
+----+------------+-------------+---+
|
||||
|Ctrl| Facility | Error code |sev|
|
||||
+----+------------+-------------+---+
|
||||
|
||||
With the Ctrl-bits an application can tell if part or the whole message has
|
||||
allready been printed from the program, DCL doesn't need to print it again.
|
||||
|
||||
Facility - basicaly the program ID. A code assigned to the program
|
||||
the name can be fetched from external or internal message libraries
|
||||
Errorcode - the errodes assigned by the application
|
||||
Sev. - severity: Even = error, off = non error
|
||||
0 = Warning
|
||||
1 = Success
|
||||
2 = Error
|
||||
3 = Information
|
||||
4 = Fatal
|
||||
<5-7> reserved.
|
||||
|
||||
This all presents itself with:
|
||||
%<FACILITY>-<SeV>-<Errorname>, <Error message>
|
||||
|
||||
See also the src/curlmsg.msg file, it has the source for the messages In
|
||||
src/main.c a section is devoted to message status values, the globalvalues
|
||||
create symbols with certain values, referenced from a compiled message
|
||||
file. Have all exit function use a exit status derived from a translation
|
||||
table with the compiled message codes.
|
||||
|
||||
This was all compiled with:
|
||||
|
||||
Compaq C V6.2-003 on OpenVMS Alpha V7.1-1H2
|
||||
|
||||
So far for porting notes as of:
|
||||
13-jul-2001
|
||||
N. Baggus
|
||||
|
||||
QNX
|
||||
===
|
||||
(This section was graciously brought to us by David Bentham)
|
||||
|
||||
As QNX is targetted for resource constrained environments, the QNX headers
|
||||
set conservative limits. This includes the FD_SETSIZE macro, set by default
|
||||
to 32. Socket descriptors returned within the CURL library may exceed this,
|
||||
resulting in memory faults/SIGSEGV crashes when passed into select(..)
|
||||
calls using fd_set macros.
|
||||
|
||||
A good all-round solution to this is to override the default when building
|
||||
libcurl, by overriding CFLAGS during configure, example
|
||||
# configure CFLAGS='-DFD_SETSIZE=64 -g -O2'
|
||||
|
||||
CROSS COMPILE
|
||||
=============
|
||||
|
||||
(This section was graciously brought to us by Jim Duey, 23-oct-2001)
|
||||
|
||||
Download and unpack the cURL package. Version should be 7.9.1 or later.
|
||||
|
||||
'cd' to the new directory. (ie. curl-7.9.1-pre4)
|
||||
|
||||
Set environment variables to point to the cross-compile toolchain and call
|
||||
configure with any options you need. Be sure and specify the '--host' and
|
||||
'--build' parameters at configuration time. The following script is an
|
||||
example of cross-compiling for the IBM 405GP PowerPC processor using the
|
||||
toolchain from MonteVista for Hardhat Linux.
|
||||
|
||||
(begin script)
|
||||
|
||||
#! /bin/sh
|
||||
|
||||
export PATH=$PATH:/opt/hardhat/devkit/ppc/405/bin
|
||||
export CPPFLAGS="-I/opt/hardhat/devkit/ppc/405/target/usr/include"
|
||||
export AR=ppc_405-ar
|
||||
export AS=ppc_405-as
|
||||
export LD=ppc_405-ld
|
||||
export RANLIB=ppc_405-ranlib
|
||||
export CC=ppc_405-gcc
|
||||
export NM=ppc_405-nm
|
||||
|
||||
configure --target=powerpc-hardhat-linux \
|
||||
--host=powerpc-hardhat-linux \
|
||||
--build=i586-pc-linux-gnu \
|
||||
--prefix=/opt/hardhat/devkit/ppc/405/target/usr/local \
|
||||
--exec-prefix=/usr/local
|
||||
|
||||
(end script)
|
||||
|
||||
The '--prefix' parameter specifies where cURL will be installed. If
|
||||
'configure' completes successfully, do 'make' and 'make install' as usual.
|
||||
|
||||
PORTS
|
||||
=====
|
||||
Just to show off, this is a probably incomplete list of known hardware and
|
||||
operating systems that curl has been compiled for:
|
||||
This is a probably incomplete list of known hardware and operating systems
|
||||
that curl has been compiled for. If you know one system curl compiles and
|
||||
runs on, that isn't listed, please let us know!
|
||||
|
||||
- Ultrix
|
||||
- SINIX-Z v5
|
||||
- Alpha DEC OSF 4
|
||||
- Alpha Digital UNIX v3.2
|
||||
- Alpha FreeBSD 4.1
|
||||
- Alpha Linux 2.2.16
|
||||
- Alpha OpenVMS V7.1-1H2
|
||||
- Alpha Tru64 v5.0 5.1
|
||||
- HP-PA HP-UX 9.X 10.X 11.X
|
||||
- HP-PA Linux
|
||||
- MIPS IRIX 6.2, 6.5
|
||||
- MIPS Linux
|
||||
- Pocket PC/Win CE 3.0
|
||||
- Power AIX 4.2, 4.3.1, 4.3.2
|
||||
- PowerPC Darwin 1.0
|
||||
- PowerPC Linux
|
||||
- PowerPC Mac OS 9
|
||||
- PowerPC Mac OS X
|
||||
- SINIX-Z v5
|
||||
- Sparc Linux
|
||||
- Sparc Solaris 2.4, 2.5, 2.5.1, 2.6, 7, 8
|
||||
- Sparc SunOS 4.1.X
|
||||
- StrongARM (and other ARM) RISC OS 3.1, 4.02
|
||||
- StrongARM Linux 2.4
|
||||
- StrongARM NetBSD 1.4.1
|
||||
- Ultrix 4.3a
|
||||
- i386 BeOS
|
||||
- i386 FreeBSD
|
||||
- i386 HURD
|
||||
- i386 Linux 1.3, 2.0, 2.2, 2.3, 2.4
|
||||
- i386 NetBSD
|
||||
- i386 OS/2
|
||||
@@ -296,8 +434,9 @@ PORTS
|
||||
- i386 Windows 95, 98, ME, NT, 2000
|
||||
- ia64 Linux 2.3.99
|
||||
- m68k AmigaOS 3
|
||||
- m68k Linux
|
||||
- m68k OpenBSD
|
||||
- StrongARM NetBSD 1.4.1
|
||||
- s390 Linux
|
||||
|
||||
OpenSSL
|
||||
=======
|
||||
|
169
docs/INTERNALS
169
docs/INTERNALS
@@ -1,4 +1,4 @@
|
||||
Updated for curl 7.7 on March 13, 2001
|
||||
Updated for curl 7.9.1 on November 2, 2001
|
||||
_ _ ____ _
|
||||
___| | | | _ \| |
|
||||
/ __| | | | |_) | |
|
||||
@@ -54,7 +54,7 @@ Windows vs Unix
|
||||
Inside the source code, We make an effort to avoid '#ifdef [Your OS]'. All
|
||||
conditionals that deal with features *should* instead be in the format
|
||||
'#ifdef HAVE_THAT_WEIRD_FUNCTION'. Since Windows can't run configure scripts,
|
||||
we maintain two config-win32.h files (one in / 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
|
||||
Windows machine!
|
||||
|
||||
@@ -69,45 +69,103 @@ Library
|
||||
rather small and easy-to-follow. All the ones prefixed with 'curl_easy' are
|
||||
put in the lib/easy.c file.
|
||||
|
||||
curl_global_init_() and curl_global_cleanup() should be called by the
|
||||
application to initialize and clean up global stuff in the library. As of
|
||||
today, it can handle the global SSL initing if SSL is enabled and it can init
|
||||
the socket layer on windows machines. libcurl itself has no "global" scope.
|
||||
|
||||
All printf()-style functions use the supplied clones in lib/mprintf.c. This
|
||||
makes sure we stay absolutely platform independent.
|
||||
|
||||
curl_easy_init() allocates an internal struct and makes some initializations.
|
||||
The returned handle does not 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
|
||||
passed in pairs, the parameter-ID and the parameter-value. The list of
|
||||
options is documented in the man page.
|
||||
curl_easy_setopt() takes three arguments, where the option stuff must be
|
||||
passed in pairs: the parameter-ID and the parameter-value. The list of
|
||||
options is documented in the man page. This function mainly sets things in
|
||||
the 'SessionHandle' struct.
|
||||
|
||||
curl_easy_perform() does a whole lot of things:
|
||||
|
||||
It starts off in the lib/easy.c file by calling curl_transfer(), but the main
|
||||
work is lib/url.c. The function first analyzes the URL, it separates the
|
||||
different components and connects to the remote host. This may involve using
|
||||
a proxy and/or using SSL. The Curl_gethost() function in lib/hostip.c is used
|
||||
for looking up host names.
|
||||
It starts off in the lib/easy.c file by calling Curl_perform() and the main
|
||||
work then continues in lib/url.c. The flow continues with a call to
|
||||
Curl_connect() to connect to the remote site.
|
||||
|
||||
When connected, 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).
|
||||
o Curl_connect()
|
||||
|
||||
The protocol-specific functions of course deal with protocol-specific
|
||||
negotiations and setup. They have access to the Curl_sendf() (from
|
||||
lib/sendf.c) function to send printf-style formatted data to the remote host
|
||||
and when they're ready to make the actual file transfer they call the
|
||||
Curl_Transfer() function (in lib/transfer.c) to setup the transfer and
|
||||
returns. Curl_perform() then calls Transfer() in lib/transfer.c that performs
|
||||
the entire file transfer. Curl_perform() is what does the main "connect - do
|
||||
- transfer - done" loop. It loops if there's a Location: to follow.
|
||||
... analyzes the URL, it separates the different components and connects to
|
||||
the remote host. This may involve using a proxy and/or using SSL. The
|
||||
Curl_gethost() function in lib/hostip.c is used for looking up host names.
|
||||
|
||||
During transfer, the progress functions in lib/progress.c are called at a
|
||||
frequent interval (or at the user's choice, a specified callback might get
|
||||
called). The speedcheck functions in lib/speedcheck.c are also used to verify
|
||||
that the transfer is as fast as required.
|
||||
When Curl_connect is done, we are connected to the remote site. Then it is
|
||||
time to tell the server to get a document/file. Curl_do() arranges this.
|
||||
|
||||
This function makes sure there's an allocated and initiated 'connectdata'
|
||||
struct that is used for this particular connection only (although there may
|
||||
be several requests performed on the same connect). A bunch of things are
|
||||
inited/inherited from the SessionHandle struct.
|
||||
|
||||
o Curl_do()
|
||||
|
||||
Curl_do() makes sure the proper protocol-specific function is called. The
|
||||
functions are named after the protocols they handle. Curl_ftp(),
|
||||
Curl_http(), Curl_dict(), etc. They all reside in their respective files
|
||||
(ftp.c, http.c and dict.c). HTTPS is handled by Curl_http() and FTPS by
|
||||
Curl_ftp().
|
||||
|
||||
The protocol-specific functions of course deal with protocol-specific
|
||||
negotiations and setup. They have access to the Curl_sendf() (from
|
||||
lib/sendf.c) function to send printf-style formatted data to the remote
|
||||
host and when they're ready to make the actual file transfer they call the
|
||||
Curl_Transfer() function (in lib/transfer.c) to setup the transfer and
|
||||
returns.
|
||||
|
||||
Starting in 7.9.1, if this DO function fails and the connection is being
|
||||
re-used, libcurl will then close this connection, setup a new connection
|
||||
and re-issue the DO request on that. This is because there is no way to be
|
||||
perfectly sure that we have discovered a dead connection before the DO
|
||||
function and thus we might wrongly be re-using a connection that was closed
|
||||
by the remote peer.
|
||||
|
||||
o Transfer()
|
||||
|
||||
Curl_perform() then calls Transfer() in lib/transfer.c that performs
|
||||
the entire file transfer.
|
||||
|
||||
During transfer, the progress functions in lib/progress.c are called at a
|
||||
frequent interval (or at the user's choice, a specified callback might get
|
||||
called). The speedcheck functions in lib/speedcheck.c are also used to
|
||||
verify that the transfer is as fast as required.
|
||||
|
||||
o Curl_done()
|
||||
|
||||
Called after a transfer is done. This function takes care of everything
|
||||
that has to be done after a transfer. This function attempts to leave
|
||||
matters in a state so that Curl_do() should be possible to call again on
|
||||
the same connection (in a persistent connection case). It might also soon
|
||||
be closed with Curl_disconnect().
|
||||
|
||||
o Curl_disconnect()
|
||||
|
||||
When doing normal connections and transfers, no one ever tries to close any
|
||||
connections so this is not normally called when curl_easy_perform() is
|
||||
used. This function is only used when we are certain that no more transfers
|
||||
is going to be made on the connection. It can be also closed by force, or
|
||||
it can be called to make sure that libcurl doesn't keep too many
|
||||
connections alive at the same time (there's a default amount of 5 but that
|
||||
can be changed with the CURLOPT_MAXCONNECTS option).
|
||||
|
||||
This function cleans up all resources that are associated with a single
|
||||
connection.
|
||||
|
||||
Curl_perform() is the function that does the main "connect - do - transfer -
|
||||
done" loop. It loops if there's a Location: to follow.
|
||||
|
||||
When completed, the curl_easy_cleanup() should be called to free up used
|
||||
resources.
|
||||
resources. It runs Curl_disconnect() on all open connectons.
|
||||
|
||||
A quick roundup on internal function sequences (many of these call
|
||||
protocol-specific function-pointers):
|
||||
@@ -201,42 +259,41 @@ Library
|
||||
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.
|
||||
|
||||
Persistant Connections
|
||||
Persistent Connections
|
||||
======================
|
||||
|
||||
With curl 7.7, we added persistant connection support to libcurl which has
|
||||
introduced a somewhat different treatmeant of things inside of libcurl.
|
||||
The persistent connection support in libcurl requires some considerations on
|
||||
how to do things inside of the library.
|
||||
|
||||
o The 'UrlData' 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 'UrlData' struct holds the cache array of pointers to 'connectdata'
|
||||
structs. There's one connectdata struct for each connection that libcurl
|
||||
knows about.
|
||||
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 in pre-7.7 versions.
|
||||
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 tranfer 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 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
|
||||
persistant connections to work.
|
||||
persistent connections to work.
|
||||
|
||||
Library Symbols
|
||||
===============
|
||||
|
||||
All symbols used internally in libcurl must use a 'Curl_' prefix if they're
|
||||
used in more than a single file. Single-file symbols must be made
|
||||
static. Public (exported) symbols must use a 'curl_' prefix. (There are
|
||||
exceptions, but they are destined to be changed to follow this pattern in the
|
||||
future.)
|
||||
used in more than a single file. Single-file symbols must be made static.
|
||||
Public ("exported") symbols must use a 'curl_' prefix. (There are exceptions,
|
||||
but they are to be changed to follow this pattern in future versions.)
|
||||
|
||||
Return Codes and Informationals
|
||||
===============================
|
||||
@@ -257,6 +314,7 @@ Client
|
||||
======
|
||||
|
||||
main() resides in src/main.c together with most of the client code.
|
||||
|
||||
src/hugehelp.c is automatically generated by the mkhelp.pl perl script to
|
||||
display the complete "manual" and the src/urlglob.c file holds the functions
|
||||
used for the URL-"globbing" support. Globbing in the sense that the {} and []
|
||||
@@ -272,25 +330,26 @@ Client
|
||||
curl_easy_getinfo() function to extract useful information from the curl
|
||||
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.
|
||||
|
||||
Memory Debugging
|
||||
================
|
||||
|
||||
The file named lib/memdebug.c contains debug-versions of a few
|
||||
functions. Functions such as malloc, free, fopen, fclose, etc that somehow
|
||||
deal with resources that might give us problems if we "leak" them. The
|
||||
functions in the memdebug system do nothing fancy, they do their normal
|
||||
function and then log information about what they just did. The logged data
|
||||
can then be analyzed after a complete session,
|
||||
The file lib/memdebug.c contains debug-versions of a few functions. Functions
|
||||
such as malloc, free, fopen, fclose, etc that somehow deal with resources
|
||||
that might give us problems if we "leak" them. The functions in the memdebug
|
||||
system do nothing fancy, they do their normal function and then log
|
||||
information about what they just did. The logged data can then be analyzed
|
||||
after a complete session,
|
||||
|
||||
memanalyze.pl is a perl script present only present in CVS (not part of the
|
||||
memanalyze.pl is the perl script present only present in CVS (not part of the
|
||||
release archives) that analyzes a log file generated by the memdebug
|
||||
system. It detects if resources are allocated but never freed and other kinds
|
||||
of errors related to resource management.
|
||||
|
||||
Use -DMALLOCDEBUG when compiling to enable memory debugging.
|
||||
Use -DMALLOCDEBUG when compiling to enable memory debugging, this is also
|
||||
switched on by running configure with --enable-debug.
|
||||
|
||||
Test Suite
|
||||
==========
|
||||
|
76
docs/KNOWN_BUGS
Normal file
76
docs/KNOWN_BUGS
Normal file
@@ -0,0 +1,76 @@
|
||||
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!
|
||||
|
||||
* curl_formadd() fails on OSF1. Why? Fix! Need help from OSF1 dudes.
|
||||
https://sourceforge.net/tracker/index.php?func=detail&aid=524433&group_id=976&atid=100976
|
||||
|
||||
* 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
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
|
||||
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>
|
94
docs/LIBCURL
94
docs/LIBCURL
@@ -1,94 +0,0 @@
|
||||
_ _ _ _
|
||||
| (_) |__ ___ _ _ _ __| |
|
||||
| | | '_ \ / __| | | | '__| |
|
||||
| | | |_) | (__| |_| | | | |
|
||||
|_|_|_.__/ \___|\__,_|_| |_|
|
||||
|
||||
How To Use Libcurl In Your C/C++ Program
|
||||
|
||||
[ libcurl can be used directly from within your PHP or Perl programs as well,
|
||||
look elsewhere for documentation on this ]
|
||||
|
||||
The interface is meant to be very simple for applictions/programmers, hence
|
||||
the name "easy". We have therefore minimized the number of entries.
|
||||
|
||||
The Easy Interface
|
||||
|
||||
When using the easy interface, you init your session and get a handle, which
|
||||
you use as input to the following interface functions you use. Use
|
||||
curl_easy_init() to get the handle.
|
||||
|
||||
You continue by setting all the options you want in the upcoming transfer,
|
||||
most important among them is the URL itself (you can't transfer anything
|
||||
without a specified URL as you may have figured out yourself). You might want
|
||||
to set some callbacks as well that will be called from the library when data
|
||||
is available etc. curl_easy_setopt() is there for this.
|
||||
|
||||
When all is setup, you tell libcurl to perform the transfer using
|
||||
curl_easy_perform(). 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 session with
|
||||
curl_easy_cleanup() and libcurl is entirely off the hook! If you want
|
||||
persistant connections, you don't cleanup immediately, but instead run ahead
|
||||
and perform other transfers. See the chapter below for Persistant
|
||||
Connections.
|
||||
|
||||
While the above mentioned four functions are the main functions to use in the
|
||||
easy interface, there is a series of other 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_easy_getinfo() - get information about a performed transfer
|
||||
curl_formparse() - helps building a HTTP form POST
|
||||
curl_formfree() - free a list built with curl_formparse()
|
||||
curl_slist_append() - builds a linked list
|
||||
curl_slist_free_all() - frees a whole curl_slist
|
||||
|
||||
For details on these, read the separate man pages.
|
||||
|
||||
Portability
|
||||
|
||||
libcurl works *exactly* the same, on any of the platforms it compiles and
|
||||
builds on.
|
||||
|
||||
There's only one caution, and that is the win32 platform that may(*) require
|
||||
you to init the winsock stuff before you use the libcurl functions. Details
|
||||
on this are noted on the curl_easy_init() man page.
|
||||
|
||||
(*) = it appears as if users of the cygwin environment get this done
|
||||
automatically.
|
||||
|
||||
Threads
|
||||
|
||||
Never *ever* call curl-functions simultaneously using the same handle from
|
||||
several threads. libcurl is thread-safe and can be used in any number of
|
||||
threads, but you must use separate curl handles if you want to use libcurl in
|
||||
more than one thread simultaneously.
|
||||
|
||||
Persistant Connections
|
||||
|
||||
With libcurl 7.7, persistant connections were added. Persistant connections
|
||||
means that libcurl can re-use the same connection for several transfers, if
|
||||
the conditions are right.
|
||||
|
||||
libcurl will *always* attempt to use persistant connections. Whenever you use
|
||||
curl_easy_perform(), libcurl will attempt to use an existing connection to do
|
||||
the transfer, and if none exists it'll open a new one that will be subject
|
||||
for re-use on a possible following call to curl_easy_perform().
|
||||
|
||||
To allow libcurl to take full advantage of persistant connections, you should
|
||||
do as many of your file transfers as possible using the same curl
|
||||
handle. When you call curl_easy_cleanup(), all the possibly open connections
|
||||
held by libcurl will be closed and forgotten.
|
||||
|
||||
Note that the options set with curl_easy_setopt() will be used in on every
|
||||
repeat curl_easy_perform() call
|
||||
|
||||
Compatibility with older libcurls
|
||||
|
||||
Repeated curl_easy_perform() calls on the same handle were not supported in
|
||||
pre-7.7 versions, and caused confusion and defined behaviour.
|
||||
|
135
docs/MANUAL
135
docs/MANUAL
@@ -15,10 +15,6 @@ SIMPLE USAGE
|
||||
|
||||
curl ftp://ftp.funet.fi/README
|
||||
|
||||
Get a gopher document from funet's gopher server:
|
||||
|
||||
curl gopher://gopher.funet.fi
|
||||
|
||||
Get a web page from a server using port 8000:
|
||||
|
||||
curl http://www.weirdserver.com:8000/
|
||||
@@ -27,6 +23,10 @@ SIMPLE USAGE
|
||||
|
||||
curl ftp://cool.haxx.se/
|
||||
|
||||
Get a gopher document from funet's gopher server:
|
||||
|
||||
curl gopher://gopher.funet.fi
|
||||
|
||||
Get the definition of curl from a dictionary:
|
||||
|
||||
curl dict://dict.org/m:curl
|
||||
@@ -132,7 +132,7 @@ UPLOADING
|
||||
|
||||
Upload all data on stdin to a specified ftp site:
|
||||
|
||||
curl -t ftp://ftp.upload.com/myfile
|
||||
curl -T - ftp://ftp.upload.com/myfile
|
||||
|
||||
Upload data from a specified file, login with user and password:
|
||||
|
||||
@@ -157,7 +157,7 @@ UPLOADING
|
||||
|
||||
Upload all data on stdin to a specified http site:
|
||||
|
||||
curl -t http://www.upload.com/myfile
|
||||
curl -T - http://www.upload.com/myfile
|
||||
|
||||
Note that the http server must've been configured to accept PUT before this
|
||||
can be done successfully.
|
||||
@@ -186,7 +186,7 @@ DETAILED INFORMATION
|
||||
-D/--dump-header option when getting files from both FTP and HTTP, and it
|
||||
will then store the headers in the specified file.
|
||||
|
||||
Store the HTTP headers in a separate file:
|
||||
Store the HTTP headers in a separate file (headers.txt in the example):
|
||||
|
||||
curl --dump-header headers.txt curl.haxx.se
|
||||
|
||||
@@ -245,32 +245,32 @@ POST (HTTP)
|
||||
|
||||
-F accepts parameters like -F "name=contents". If you want the contents to
|
||||
be read from a file, use <@filename> as contents. When specifying a file,
|
||||
you can also specify which content type the file is, by appending
|
||||
';type=<mime type>' to the file name. You can also post contents of several
|
||||
files in one field. So that the field name 'coolfiles' can be sent three
|
||||
files with different content types in a manner similar to:
|
||||
you can also specify the file content type by appending ';type=<mime type>'
|
||||
to the file name. You can also post the contents of several files in one
|
||||
field. For example, the field name 'coolfiles' is used to send three files,
|
||||
with different content types using the following syntax:
|
||||
|
||||
curl -F "coolfiles=@fil1.gif;type=image/gif,fil2.txt,fil3.html" \
|
||||
http://www.post.com/postit.cgi
|
||||
|
||||
If content-type is not specified, curl will try to guess from the extension
|
||||
(it only knows a few), or use the previously specified type (from an earlier
|
||||
file if several files are specified in a list) or finally using the default
|
||||
type 'text/plain'.
|
||||
If the content-type is not specified, curl will try to guess from the file
|
||||
extension (it only knows a few), or use the previously specified type (from
|
||||
an earlier file if several files are specified in a list) or else it will
|
||||
using the default type 'text/plain'.
|
||||
|
||||
Emulate a fill-in form with -F. Let's say you fill in three fields in a
|
||||
form. One field is a file name which to post, one field is your name and one
|
||||
field is a file description. We want to post the file we have written named
|
||||
"cooltext.txt". To let curl do the posting of this data instead of your
|
||||
favourite browser, you have to check out the HTML of the form page to get to
|
||||
know the names of the input fields. In our example, the input field names are
|
||||
'file', 'yourname' and 'filedescription'.
|
||||
favourite browser, you have to read the HTML source of the form page and
|
||||
find the names of the input fields. In our example, the input field names
|
||||
are 'file', 'yourname' and 'filedescription'.
|
||||
|
||||
curl -F "file=@cooltext.txt" -F "yourname=Daniel" \
|
||||
-F "filedescription=Cool text file with cool text inside" \
|
||||
http://www.post.com/postit.cgi
|
||||
|
||||
So, to send two files in one post you can do it in two ways:
|
||||
To send two files in one post you can do it in two ways:
|
||||
|
||||
1. Send multiple files in a single "field" with a single field name:
|
||||
|
||||
@@ -280,11 +280,11 @@ POST (HTTP)
|
||||
|
||||
curl -F "docpicture=@dog.gif" -F "catpicture=@cat.gif"
|
||||
|
||||
REFERER
|
||||
REFERRER
|
||||
|
||||
A HTTP request has the option to include information about which address
|
||||
that referred to actual page, and curl allows the user to specify that
|
||||
referrer to get specified on the command line. It is especially useful to
|
||||
that referred to actual page. Curl allows you to specify the
|
||||
referrer to be used on the command line. It is especially useful to
|
||||
fool or trick stupid servers or CGI scripts that rely on that information
|
||||
being available or contain certain data.
|
||||
|
||||
@@ -353,13 +353,17 @@ COOKIES
|
||||
Note that by specifying -b you enable the "cookie awareness" and with -L
|
||||
you can make curl follow a location: (which often is used in combination
|
||||
with cookies). So that if a site sends cookies and a location, you can
|
||||
use a non-existing file to trig the cookie awareness like:
|
||||
use a non-existing file to trigger the cookie awareness like:
|
||||
|
||||
curl -L -b empty-file www.example.com
|
||||
curl -L -b empty.txt www.example.com
|
||||
|
||||
The file to read cookies from must be formatted using plain HTTP headers OR
|
||||
as netscape's cookie file. Curl will determine what kind it is based on the
|
||||
file contents.
|
||||
file contents. In the above command, curl will parse the header and store
|
||||
the cookies received from www.example.com. curl will send to the server the
|
||||
stored cookies which match the request as it follows the location. The
|
||||
file "empty.txt" may be a non-existant file.
|
||||
|
||||
|
||||
PROGRESS METER
|
||||
|
||||
@@ -392,12 +396,12 @@ PROGRESS METER
|
||||
|
||||
SPEED LIMIT
|
||||
|
||||
Curl offers the user to set conditions regarding transfer speed that must
|
||||
be met to let the transfer keep going. By using the switch -y and -Y you
|
||||
can make curl abort transfers if the transfer speed doesn't exceed your
|
||||
given lowest limit for a specified time.
|
||||
Curl allows the user to set the transfer speed conditions that must be met
|
||||
to let the transfer keep going. By using the switch -y and -Y you
|
||||
can make curl abort transfers if the transfer speed is below the specified
|
||||
lowest limit for a specified time.
|
||||
|
||||
To let curl abandon downloading this page if its slower than 3000 bytes per
|
||||
To have curl abort the download if the speed is slower than 3000 bytes per
|
||||
second for 1 minute, run:
|
||||
|
||||
curl -y 3000 -Y 60 www.far-away-site.com
|
||||
@@ -587,7 +591,7 @@ HTTPS
|
||||
Run the 'openssl' application to convert the certificate. If you cd to the
|
||||
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
|
||||
@@ -597,20 +601,20 @@ RESUMING FILE TRANSFERS
|
||||
|
||||
Continue downloading a document:
|
||||
|
||||
curl -c -o file ftp://ftp.server.com/path/file
|
||||
curl -C - -o file ftp://ftp.server.com/path/file
|
||||
|
||||
Continue uploading a document(*1):
|
||||
|
||||
curl -c -T file ftp://ftp.server.com/path/file
|
||||
curl -C - -T file ftp://ftp.server.com/path/file
|
||||
|
||||
Continue downloading a document from a web server(*2):
|
||||
|
||||
curl -c -o file http://www.server.com/
|
||||
curl -C - -o file http://www.server.com/
|
||||
|
||||
(*1) = This requires that the ftp server supports the non-standard command
|
||||
SIZE. If it doesn't, curl will say so.
|
||||
|
||||
(*2) = This requires that the wb server supports at least HTTP/1.1. If it
|
||||
(*2) = This requires that the web server supports at least HTTP/1.1. If it
|
||||
doesn't, curl will say so.
|
||||
|
||||
TIME CONDITIONS
|
||||
@@ -664,8 +668,14 @@ LDAP
|
||||
and offer ldap:// support.
|
||||
|
||||
LDAP is a complex thing and writing an LDAP query is not an easy task. I do
|
||||
advice you to dig up the syntax description for that elsewhere, RFC 1959 if
|
||||
no other place is better.
|
||||
advice you to dig up the syntax description for that elsewhere. Two places
|
||||
that might suit you are:
|
||||
|
||||
Netscape's "Netscape Directory SDK 3.0 for C Programmer's Guide Chapter 10:
|
||||
Working with LDAP URLs":
|
||||
http://developer.netscape.com/docs/manuals/dirsdk/csdk30/url.htm
|
||||
|
||||
RFC 2255, "The LDAP URL Format" http://www.rfc-editor.org/rfc/rfc2255.txt
|
||||
|
||||
To show you an example, this is now I can get all people from my local LDAP
|
||||
server that has a certain sub-domain in their email address:
|
||||
@@ -679,7 +689,7 @@ ENVIRONMENT VARIABLES
|
||||
|
||||
Curl reads and understands the following environment variables:
|
||||
|
||||
HTTP_PROXY, HTTPS_PROXY, FTP_PROXY, GOPHER_PROXY
|
||||
http_proxy, HTTPS_PROXY, FTP_PROXY, GOPHER_PROXY
|
||||
|
||||
They should be set for protocol-specific proxies. General proxy should be
|
||||
set with
|
||||
@@ -752,6 +762,17 @@ TELNET
|
||||
You might want the -N/--no-buffer option to switch off the buffered output
|
||||
for slow connections or similar.
|
||||
|
||||
Pass options to the telnet protocol negotiation, by using the -t option. To
|
||||
tell the server we use a vt100 terminal, try something like:
|
||||
|
||||
curl -tTTYPE=vt100 telnet://remote.server.com
|
||||
|
||||
Other interesting options for it -t include:
|
||||
|
||||
- XDISPLOC=<X display> Sets the X display location.
|
||||
|
||||
- NEW_ENV=<var,val> Sets an environment variable.
|
||||
|
||||
NOTE: the telnet protocol does not specify any way to login with a specified
|
||||
user and password so curl can't do that automatically. To do that, you need
|
||||
to track when the login prompt is received and send the username and
|
||||
@@ -779,19 +800,39 @@ PERSISTANT CONNECTIONS
|
||||
MAILING LISTS
|
||||
|
||||
For your convenience, we have several open mailing lists to discuss curl,
|
||||
its development and things relevant to this.
|
||||
its development and things relevant to this. Get all info at
|
||||
http://curl.haxx.se/mail/. The lists available are:
|
||||
|
||||
To subscribe to the main curl list, mail curl-request@contactor.se with
|
||||
"subscribe <fill in your email address>" in the body.
|
||||
curl-users
|
||||
|
||||
To subscribe to the curl-library users/deverlopers list, follow the
|
||||
instructions at http://curl.haxx.se/mail/
|
||||
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.
|
||||
|
||||
To subscribe to the curl-announce list, to only get information about new
|
||||
releases, follow the instructions at http://curl.haxx.se/mail/
|
||||
curl-library
|
||||
|
||||
To subscribe to the curl-and-PHP list in which curl using with PHP is
|
||||
discussed, follow the instructions at http://curl.haxx.se/mail/
|
||||
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 liks 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 liks email...
|
||||
|
||||
Please direct curl questions, feature requests and trouble reports to one of
|
||||
these mailing lists instead of mailing any individual.
|
||||
|
@@ -6,21 +6,27 @@ AUTOMAKE_OPTIONS = foreign no-dependencies
|
||||
|
||||
man_MANS = \
|
||||
curl.1 \
|
||||
curl_easy_cleanup.3 \
|
||||
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
|
||||
curl-config.1
|
||||
|
||||
EXTRA_DIST = $(man_MANS) \
|
||||
MANUAL BUGS CONTRIBUTE FAQ FEATURES INTERNALS \
|
||||
LIBCURL README.win32 RESOURCES TODO TheArtOfHttpScripting
|
||||
HTMLPAGES = \
|
||||
curl.html \
|
||||
curl-config.html
|
||||
|
||||
SUBDIRS = examples
|
||||
SUBDIRS = examples libcurl
|
||||
|
||||
EXTRA_DIST = MANUAL BUGS CONTRIBUTE FAQ FEATURES INTERNALS \
|
||||
README.win32 RESOURCES TODO TheArtOfHttpScripting THANKS \
|
||||
VERSIONS KNOWN_BUGS $(man_MANS) $(HTMLPAGES)
|
||||
|
||||
MAN2HTML= gnroff -man $< | man2html >$@
|
||||
|
||||
SUFFIXES = .1 .3 .html
|
||||
|
||||
html: $(HTMLPAGES)
|
||||
cd libcurl; make html
|
||||
|
||||
.3.html:
|
||||
$(MAN2HTML)
|
||||
|
||||
.1.html:
|
||||
$(MAN2HTML)
|
||||
|
@@ -12,13 +12,11 @@ README.win32
|
||||
systems. While not being the main develop target, a fair share of curl users
|
||||
are win32-based.
|
||||
|
||||
Some documentation in this archive will be tricky to read for Windows
|
||||
people, as they come in unix-style man pages. You can either download a
|
||||
freely available nroff binary for win32 (*pointers appriciated*), convert
|
||||
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 unix-style man pages are tricky to read on windows, so therefore are all
|
||||
those pages also converted to HTML and those are also included in the
|
||||
release archives.
|
||||
|
||||
The main curl.1 man page is "built-in". Use a command line similar to this
|
||||
in order to extract a separate text file:
|
||||
The main curl.1 man page is also "built-in" in the command line tool. Use a
|
||||
command line similar to this in order to extract a separate text file:
|
||||
|
||||
curl -M >manual.txt
|
||||
|
83
docs/THANKS
Normal file
83
docs/THANKS
Normal file
@@ -0,0 +1,83 @@
|
||||
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>
|
208
docs/TODO
208
docs/TODO
@@ -7,57 +7,96 @@
|
||||
TODO
|
||||
|
||||
Things to do in project cURL. Please tell me what you think, contribute and
|
||||
send me patches that improve things!
|
||||
send me patches that improve things! Also check the http://curl.haxx.se/dev
|
||||
web section for various development notes.
|
||||
|
||||
To do for the 7.7 release:
|
||||
LIBCURL
|
||||
|
||||
* Fix the random seeding. Add --egd-socket and --random-file options to the
|
||||
curl client and libcurl curl_easy_setopt() interface.
|
||||
* Consider an interface to libcurl that allows applications to easier get to
|
||||
know what cookies that are sent back in the response headers.
|
||||
|
||||
* Support persistant connections (fully detailed elsewhere)
|
||||
* Make content encoding/decoding internally be made using a filter system.
|
||||
|
||||
* Add a special connection-timeout that only goes for the connection phase.
|
||||
* Test the 'multi' interface more.
|
||||
|
||||
To do for the 7.8 release:
|
||||
|
||||
* Make SSL session ids get used if multiple HTTPS documents from the same
|
||||
host is requested.
|
||||
|
||||
To do in a future release:
|
||||
* Introduce another callback interface for upload/download that makes one
|
||||
less copy of data and thus a faster operation.
|
||||
[http://curl.haxx.se/dev/no_copy_callbacks.txt]
|
||||
|
||||
* Add configure options that disables certain protocols in libcurl to
|
||||
decrease footprint. '--disable-[protocol]' where protocol is http, ftp,
|
||||
telnet, ldap, dict or file.
|
||||
|
||||
* Extend the test suite to include telnet and https. The telnet could just do
|
||||
ftp or http operations (for which we have test servers) and the https would
|
||||
probably work against/with some of the openssl tools.
|
||||
* Add asynchronous name resolving. http://curl.haxx.se/dev/async-resolver.txt
|
||||
This should be made to work on most of the supported platforms, or
|
||||
otherwise it isn't really interesting.
|
||||
|
||||
* Add a command line option that allows the output file to get the same time
|
||||
stamp as the remote file. libcurl already is capable of fetching the remote
|
||||
file's date.
|
||||
* Data sharing. Tell which easy handles within a multi handle that should
|
||||
share cookies, connection cache, dns cache, ssl session cache. Full
|
||||
suggestion found here: http://curl.haxx.se/dev/sharing.txt
|
||||
|
||||
* Make the SSL layer option capable of using the Mozilla Security Services as
|
||||
an alternative to OpenSSL:
|
||||
http://www.mozilla.org/projects/security/pki/nss/
|
||||
* Mutexes. By adding mutex callback support, the 'data sharing' mentioned
|
||||
above can be made between several easy handles running in different threads
|
||||
too. The actual mutex implementations will be left for the application to
|
||||
implement, libcurl will merely call 'getmutex' and 'leavemutex' callbacks.
|
||||
Part of the sharing suggestion at: http://curl.haxx.se/dev/sharing.txt
|
||||
|
||||
* Add asynchronous name resolving, as this enables full timeout support for
|
||||
fork() systems.
|
||||
* No-faster-then-this transfers. Many people have limited bandwidth and they
|
||||
want the ability to make sure their transfers never use more bandwith than
|
||||
they think is good.
|
||||
|
||||
* Non-blocking connect(), also to make timeouts work on windows.
|
||||
* Set the SO_KEEPALIVE socket option to make libcurl notice and disconnect
|
||||
very long time idle connections.
|
||||
|
||||
* Move non-URL related functions that are used by both the lib and the curl
|
||||
application to a separate "portability lib".
|
||||
* 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.
|
||||
|
||||
* Add support for other languages than C. C++ (rumours have been heard about
|
||||
something being worked on in this area) and perl (we have seen the first
|
||||
versions of this!) comes to mind. Python anyone?
|
||||
* Go through the code and verify that libcurl deals with big files >2GB and
|
||||
>4GB all over. Bug reports indicate that it doesn't currently work
|
||||
properly.
|
||||
|
||||
* Make the built-in progress meter use its own dedicated output stream, and
|
||||
make it possible to set it. Use stderr by default.
|
||||
|
||||
DOCUMENTATION
|
||||
|
||||
* Include documentation in the main archive about all the various libcurl
|
||||
bindings.
|
||||
|
||||
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.
|
||||
|
||||
HTTP
|
||||
|
||||
* HTTP PUT for files passed on stdin *OR* when the --crlf option is
|
||||
used. Requires libcurl to send the file with chunked content
|
||||
encoding. [http://curl.haxx.se/dev/HTTP-PUT-stdin.txt] When the filter
|
||||
system mentioned above gets real, it'll be a piece of cake to add.
|
||||
|
||||
* 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.
|
||||
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
|
||||
@@ -69,24 +108,97 @@ To do in a future release:
|
||||
http://www.innovation.ch/java/ntlm.html that contains detailed reverse-
|
||||
engineered info.
|
||||
|
||||
* RFC2617 compliance, "Digest Access Authentication"
|
||||
A valid test page seem to exist at:
|
||||
http://hopf.math.nwu.edu/testpage/digest/
|
||||
And some friendly person's server source code is available at
|
||||
http://hopf.math.nwu.edu/digestauth/index.html
|
||||
Then there's the Apache mod_digest source code too of course. It seems as
|
||||
if Netscape doesn't support this, and not many servers do. Although this is
|
||||
a lot better authentication method than the more common "Basic". Basic
|
||||
sends the password in cleartext over the network, this "Digest" method uses
|
||||
a challange-response protocol which increases security quite a lot.
|
||||
* RFC2617 compliance, "Digest Access Authentication" A valid test page seem
|
||||
to exist at: http://hopf.math.nwu.edu/testpage/digest/ And some friendly
|
||||
person's server source code is available at
|
||||
http://hopf.math.nwu.edu/digestauth/index.html Then there's the Apache
|
||||
mod_digest source code too of course. It seems as if Netscape doesn't
|
||||
support this, and not many servers do. Although this is a lot better
|
||||
authentication method than the more common "Basic". Basic sends the
|
||||
password in cleartext over the network, this "Digest" method uses a
|
||||
challange-response protocol which increases security quite a lot.
|
||||
|
||||
* Other proxies
|
||||
Ftp-kind proxy, Socks5, whatever kind of proxies are there?
|
||||
* Pipelining. Sending multiple requests before the previous one(s) are done.
|
||||
This could possibly be implemented using the multi interface to queue
|
||||
requests and the response data.
|
||||
|
||||
* IPv6 Awareness and support. (This is partly done.) RFC 2428 "FTP
|
||||
Extensions for IPv6 and NATs" is interesting. PORT should be replaced with
|
||||
EPRT for IPv6 (done), and EPSV instead of PASV. HTTP proxies are left to
|
||||
add support for.
|
||||
TELNET
|
||||
|
||||
* SSL for more protocols, like SSL-FTP...
|
||||
(http://search.ietf.org/internet-drafts/draft-murray-auth-ftp-ssl-05.txt)
|
||||
* Make TELNET work on windows98!
|
||||
|
||||
* Reading input (to send to the remote server) on stdin is a crappy solution
|
||||
for library purposes. We need to invent a good way for the application to
|
||||
be able to provide the data to send.
|
||||
|
||||
* Move the telnet support's network select() loop go away and merge the code
|
||||
into the main transfer loop. Until this is done, the multi interface won't
|
||||
work for telnet.
|
||||
|
||||
SSL
|
||||
|
||||
* If you really want to improve the SSL situation, you should probably have a
|
||||
look at SSL cafile loading as well - quick traces look to me like these are
|
||||
done on every request as well, when they should only be necessary once per
|
||||
ssl context (or once per handle). Even better would be to support the SSL
|
||||
CAdir option - instead of loading all of the root CA certs for every
|
||||
request, this option allows you to only read the CA chain that is actually
|
||||
required (into the cache)...
|
||||
|
||||
* Add an interface to libcurl that enables "session IDs" to get
|
||||
exported/imported. Cris Bailiff said: "OpenSSL has functions which can
|
||||
serialise the current SSL state to a buffer of your choice, and
|
||||
recover/reset the state from such a buffer at a later date - this is used
|
||||
by mod_ssl for apache to implement and SSL session ID cache". This whole
|
||||
idea might become moot if we enable the 'data sharing' as mentioned in the
|
||||
LIBCURL label above.
|
||||
|
||||
* OpenSSL supports a callback for customised verification of the peer
|
||||
certificate, but this doesn't seem to be exposed in the libcurl APIs. Could
|
||||
it be? There's so much that could be done if it were! (brought by Chris
|
||||
Clark)
|
||||
|
||||
* Make curl's SSL layer option capable of using other free SSL libraries.
|
||||
Such as the Mozilla Security Services
|
||||
(http://www.mozilla.org/projects/security/pki/nss/) and GNUTLS
|
||||
(http://gnutls.hellug.gr/)
|
||||
|
||||
LDAP
|
||||
|
||||
* Look over the implementation. The looping will have to "go away" from the
|
||||
lib/ldap.c source file and get moved to the main network code so that the
|
||||
multi interface and friends will work for LDAP as well.
|
||||
|
||||
CLIENT
|
||||
|
||||
* "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>
|
||||
Date: September 15, 2000
|
||||
Version: 0.3
|
||||
Date: October 31, 2001
|
||||
Version: 0.5
|
||||
|
||||
The Art Of Scripting HTTP Requests Using Curl
|
||||
=============================================
|
||||
@@ -47,7 +48,7 @@ Version: 0.3
|
||||
2. URL
|
||||
|
||||
The Uniform Resource Locator format is how you specify the address of a
|
||||
particular resource on the internet. You know these, you've seen URLs like
|
||||
particular resource on the Internet. You know these, you've seen URLs like
|
||||
http://curl.haxx.se or https://yourbank.com a million times.
|
||||
|
||||
3. GET a page
|
||||
@@ -55,7 +56,7 @@ Version: 0.3
|
||||
The simplest and most common request/operation made using HTTP is to get a
|
||||
URL. The URL could itself refer to a web page, an image or a file. The client
|
||||
issues a GET request to the server and receives the document it asked for.
|
||||
If you isse the command line
|
||||
If you issue the command line
|
||||
|
||||
curl http://curl.haxx.se
|
||||
|
||||
@@ -88,7 +89,7 @@ Version: 0.3
|
||||
<input type=submit name=press value="OK">
|
||||
</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
|
||||
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
|
||||
@@ -135,8 +136,8 @@ Version: 0.3
|
||||
4.3 FILE UPLOAD POST
|
||||
|
||||
Back in late 1995 they defined a new way to post data over HTTP. It was
|
||||
documented in the RFC 1867, why this method sometimes is refered to as
|
||||
a rfc1867-posting.
|
||||
documented in the RFC 1867, why this method sometimes is referred to as
|
||||
a RFC1867-posting.
|
||||
|
||||
This method is mainly designed to better support file uploads. A form that
|
||||
allows a user to upload a file could be written like this in HTML:
|
||||
@@ -174,6 +175,19 @@ Version: 0.3
|
||||
|
||||
curl -d "birthyear=1905&press=OK&person=daniel" [URL]
|
||||
|
||||
4.5 FIGURE OUT WHAT A POST LOOKS LIKE
|
||||
|
||||
When you're about fill in a form and send to a server by using curl instead
|
||||
of a browser, you're of course very interested in sending a POST exactly the
|
||||
way your browser does.
|
||||
|
||||
An easy way to get to see this, is to save the HTML page with the form on
|
||||
your local disk, modify the 'method' to a GET, and press the submit button
|
||||
(you could also change the action URL if you want to).
|
||||
|
||||
You will then clearly see the data get appended to the URL, separated with a
|
||||
'?'-letter as GET forms are supposed to.
|
||||
|
||||
5. PUT
|
||||
|
||||
The perhaps best way to upload data to a HTTP server is to use PUT. Then
|
||||
@@ -182,7 +196,7 @@ Version: 0.3
|
||||
|
||||
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
|
||||
|
||||
@@ -200,7 +214,7 @@ Version: 0.3
|
||||
Sometimes your HTTP access is only available through the use of a HTTP
|
||||
proxy. This seems to be especially common at various companies. A HTTP proxy
|
||||
may require its own user and password to allow the client to get through to
|
||||
the internet. To specify those with curl, run something like:
|
||||
the Internet. To specify those with curl, run something like:
|
||||
|
||||
curl -U proxyuser:proxypassword curl.haxx.se
|
||||
|
||||
@@ -280,7 +294,7 @@ Version: 0.3
|
||||
contents to the server, unless of course they are expired.
|
||||
|
||||
Many applications and servers use this method to connect a series of requests
|
||||
into a single logical session. To be able to use curl in such 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
|
||||
expects them. The same way browsers deal with them.
|
||||
|
||||
@@ -289,7 +303,6 @@ Version: 0.3
|
||||
|
||||
curl -b "name=Daniel" www.cookiesite.com
|
||||
|
||||
|
||||
Cookies are sent as common HTTP headers. This is practical as it allows curl
|
||||
to record cookies simply by recording headers. Record cookies with curl by
|
||||
using the -D option like:
|
||||
@@ -304,6 +317,23 @@ Version: 0.3
|
||||
|
||||
curl -b stored_cookies_in_file www.cookiesite.com
|
||||
|
||||
Curl's "cookie engine" gets enabled when you use the -b option. If you only
|
||||
want curl to understand received cookies, use -b with a file that doesn't
|
||||
exist. Example, if you want to let curl understand cookies from a page and
|
||||
follow a location (and thus possibly send back cookies it received), you can
|
||||
invoke it like:
|
||||
|
||||
curl -b nada -L www.cookiesite.com
|
||||
|
||||
Curl has the ability to read and write cookie files that use the same file
|
||||
format that Netscape and Mozilla do. It is a convenient way to share cookies
|
||||
between browsers and automatic scripts. The -b switch automatically detects
|
||||
if a given file is such a cookie file and parses it, and by using the
|
||||
-c/--cookie-jar option you'll make curl write a new cookie file at the end of
|
||||
an operation:
|
||||
|
||||
curl -b cookies.txt -c newcookies.txt www.cookiesite.com
|
||||
|
||||
11. HTTPS
|
||||
|
||||
There are a few ways to do secure HTTP transfers. The by far most common
|
||||
@@ -328,7 +358,7 @@ Version: 0.3
|
||||
you need to enter the unlock-code before the certificate can be used by
|
||||
curl. The PIN-code can be specified on the command line or if not, entered
|
||||
interactively when curl queries for it. Use a certificate with curl on a
|
||||
https server like:
|
||||
HTTPS server like:
|
||||
|
||||
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
|
||||
protocol.
|
||||
|
||||
RFC 2396 explains the URL syntax
|
||||
RFC 2396 explains the URL syntax.
|
||||
|
||||
RFC 2109 defines how cookies are supposed to work.
|
||||
|
||||
RFC 1867 defines the HTTP post upload format.
|
||||
|
||||
http://www.openssl.org is the home of the OpenSSL project
|
||||
|
||||
http://curl.haxx.se is the home of the cURL project
|
||||
|
64
docs/VERSIONS
Normal file
64
docs/VERSIONS
Normal file
@@ -0,0 +1,64 @@
|
||||
_ _ ____ _
|
||||
___| | | | _ \| |
|
||||
/ __| | | | |_) | |
|
||||
| (__| |_| | _ <| |___
|
||||
\___|\___/|_| \_\_____|
|
||||
|
||||
Version Numbers and Releases
|
||||
|
||||
Curl is not only curl. Curl is also libcurl. They're actually individually
|
||||
versioned, but they mostly follow each other rather closely.
|
||||
|
||||
The version numbering is always built up using the same system:
|
||||
|
||||
X.Y[.Z][-preN]
|
||||
|
||||
Where
|
||||
X is main version number
|
||||
Y is release number
|
||||
Z is patch number
|
||||
N is pre-release number
|
||||
|
||||
One of these numbers will get bumped in each new release. The numbers to the
|
||||
right of a bumped number will be reset to zero. If Z is zero, it is not
|
||||
included in the version number. The pre release number is only included in
|
||||
pre releases (they're never used in public, official, releases).
|
||||
|
||||
The main version number will get bumped when *really* big, world colliding
|
||||
changes are made. The release number is bumped when big changes are
|
||||
performed. The patch number is bumped when the changes are mere bugfixes and
|
||||
only minor feature changes. The pre-release is a counter, to identify which
|
||||
pre-release a certain release is.
|
||||
|
||||
When reaching the end of a pre-release period, the version without the
|
||||
pre-release part will be released as a public release.
|
||||
|
||||
It means that after release 1.2.3, we can release 2.0 if something really big
|
||||
has been made, 1.3 if not that big changes were made or 1.2.4 if mostly bugs
|
||||
were fixed. Before 1.2.4 is released, we might release a 1.2.4-pre1 release
|
||||
for the brave people to try before the actual release.
|
||||
|
||||
Bumping, as in increasing the number with 1, is unconditionally only
|
||||
affecting one of the numbers (except the ones to the right of it, that may be
|
||||
set to zero). 1 becomes 2, 3 becomes 4, 9 becomes 10, 88 becomes 89 and 99
|
||||
becomes 100. So, after 1.2.9 comes 1.2.10. After 3.99.3, 3.100 might come.
|
||||
|
||||
All original curl source release archives are named according to the libcurl
|
||||
version (not according to the curl client version that, as said before, might
|
||||
differ).
|
||||
|
||||
As a service to any application that might want to support new libcurl
|
||||
features while still being able to build with older versions, all releases
|
||||
have the libcurl version stored in the curl/curl.h file using a static
|
||||
numbering scheme that can be used for comparison. The version number is
|
||||
defined as:
|
||||
|
||||
#define LIBCURL_VERSION_NUM 0xXXYYZZ
|
||||
|
||||
Where XX, YY and ZZ are the main version, release and patch numbers in
|
||||
hexadecimal. All three numbers are always represented using two digits. 1.2
|
||||
would appear as "0x010200" while version 9.11.7 appears as "0x090b07".
|
||||
|
||||
This 6-digit hexadecimal number does not show pre-release number, and it is
|
||||
always a greater number in a more recent release. It makes comparisons with
|
||||
greater than and less than work.
|
62
docs/curl-config.1
Normal file
62
docs/curl-config.1
Normal file
@@ -0,0 +1,62 @@
|
||||
.\" You can view this file with:
|
||||
.\" nroff -man curl-config.1
|
||||
.\" Written by Daniel Stenberg
|
||||
.\"
|
||||
.TH curl-config 1 "21 January 2002" "Curl 7.9.3" "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 "--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)
|
315
docs/curl.1
315
docs/curl.1
@@ -2,10 +2,9 @@
|
||||
.\" nroff -man curl.1
|
||||
.\" Written by Daniel Stenberg
|
||||
.\"
|
||||
.TH curl 1 "12 March 2001" "Curl 7.7" "Curl Manual"
|
||||
.TH curl 1 "10 Apr 2002" "Curl 7.9.5" "Curl Manual"
|
||||
.SH NAME
|
||||
curl \- get a URL with FTP, TELNET, LDAP, GOPHER, DICT, FILE, HTTP or
|
||||
HTTPS syntax.
|
||||
curl \- transfer a URL
|
||||
.SH SYNOPSIS
|
||||
.B curl [options]
|
||||
.I [URL...]
|
||||
@@ -39,14 +38,14 @@ supported at the moment:
|
||||
|
||||
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
|
||||
line. They will be fetched in a sequential manner in the specified order.
|
||||
You can specify any amount of URLs on the command line. They will be fetched
|
||||
in a sequential manner in the specified order.
|
||||
|
||||
Starting with curl 7.7, 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.
|
||||
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
|
||||
.IP "-a/--append"
|
||||
(FTP)
|
||||
@@ -62,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
|
||||
-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.
|
||||
.IP "-b/--cookie <name=data>"
|
||||
(HTTP)
|
||||
@@ -72,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
|
||||
read previously stored cookie lines from, which should be used in this session
|
||||
if they match. Using this method also activates the "cookie parser" which
|
||||
will make curl record incoming cookies too, which may be handy if you're using
|
||||
this in combination with the -L/--location option. The file format of the file
|
||||
to read cookies from should be plain HTTP headers or the netscape cookie file
|
||||
format.
|
||||
if they match. Using this method also activates the "cookie parser" which will
|
||||
make curl record incoming cookies too, which may be handy if you're using this
|
||||
in combination with the -L/--location option. The file format of the file to
|
||||
read cookies from should be plain HTTP headers or the Netscape/Mozilla cookie
|
||||
file format.
|
||||
|
||||
.B NOTE
|
||||
that the file specified with -b/--cookie is only used as input. No cookies
|
||||
will be stored in the file. To store cookies, save the HTTP headers to a file
|
||||
using -D/--dump-header!
|
||||
|
||||
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.
|
||||
.IP "-B/--use-ascii"
|
||||
Use ASCII transfer when getting an FTP file or LDAP info. For FTP, this can
|
||||
@@ -91,51 +90,69 @@ 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.
|
||||
|
||||
If this option is used twice, the second one will disable ASCII usage.
|
||||
.IP "-c/--continue"
|
||||
.B Deprecated. Use '-C -' instead.
|
||||
Continue/Resume a previous file transfer. This instructs curl to
|
||||
continue appending data on the file where it was previously left,
|
||||
possibly because of a broken connection to the server. There must be
|
||||
a named physical file to append to for this to work.
|
||||
Note: Upload resume is depening on a command named SIZE not always
|
||||
present in all ftp servers! Upload resume is for FTP only.
|
||||
HTTP resume is only possible with HTTP/1.1 or later servers.
|
||||
.IP "-C/--continue-at <offset>"
|
||||
Continue/Resume a previous file transfer at the given offset. The
|
||||
given offset is the exact number of bytes that will be skipped
|
||||
counted from the beginning of the source file before it is transfered
|
||||
to the destination.
|
||||
If used with uploads, the ftp server command SIZE will not be used by
|
||||
curl. Upload resume is for FTP only.
|
||||
HTTP resume is only possible with HTTP/1.1 or later servers.
|
||||
.IP "--ciphers <list of ciphers>"
|
||||
(SSL) Specifies which ciphers to use in the connection. The list of ciphers
|
||||
must be using valid ciphers. Read up on SSL cipher list details on this URL:
|
||||
.I http://www.openssl.org/docs/apps/ciphers.html (Option added in curl 7.9)
|
||||
|
||||
If this option is used serveral times, the last one will be used.
|
||||
If this option is used severl 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. This option didn't work in win32 systems until 7.7.2. See
|
||||
also the
|
||||
.I "--max-time"
|
||||
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 "-d/--data <data>"
|
||||
(HTTP) Sends the specified data in a POST request to the HTTP server. Note
|
||||
that the data is sent exactly as specified with no extra processing (with all
|
||||
newlines cut off). The data is expected to be "url-encoded". This will cause
|
||||
curl to pass the data to the server using the content-type
|
||||
application/x-www-form-urlencoded. Compare to -F. If more than one -d/--data
|
||||
option is used on the same command line, the data pieces specified will be
|
||||
merged together with a separating &-letter. Thus, using '-d name=daniel -d
|
||||
skill=lousy' would generate a post chunk that looks like
|
||||
'name=daniel&skill=lousy'.
|
||||
(HTTP) Sends the specified data in a POST request to the HTTP server, in a way
|
||||
that can emulate as if a user has filled in a HTML form and pressed the submit
|
||||
button. Note that the data is sent exactly as specified with no extra
|
||||
processing (with all newlines cut off). The data is expected to be
|
||||
"url-encoded". This will cause curl to pass the data to the server using the
|
||||
content-type application/x-www-form-urlencoded. Compare to -F. If more than
|
||||
one -d/--data option is used on the same command line, the data pieces
|
||||
specified will be merged together with a separating &-letter. Thus, using '-d
|
||||
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
|
||||
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
|
||||
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.
|
||||
|
||||
-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.
|
||||
.IP "--data-ascii <data>"
|
||||
(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.
|
||||
.IP "--data-binary <data>"
|
||||
(HTTP) This posts data in a similar manner as --data-ascii does, although when
|
||||
@@ -143,10 +160,14 @@ 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
|
||||
--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 serveral times, the ones following the first will
|
||||
If this option is used several times, the ones following the first will
|
||||
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>"
|
||||
(HTTP/FTP)
|
||||
Write the HTTP headers to this file. Write the FTP file info to this
|
||||
@@ -156,7 +177,7 @@ This option is handy to use when you want to store the cookies that a HTTP
|
||||
site sends to you. The cookies could then be read in a second curl invoke by
|
||||
using the -b/--cookie option!
|
||||
|
||||
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 "-e/--referer <URL>"
|
||||
(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
|
||||
@@ -165,7 +186,12 @@ 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
|
||||
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 "--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]>"
|
||||
(HTTPS)
|
||||
Tells curl to use the specified certificate file when getting a file
|
||||
@@ -174,12 +200,12 @@ If the optional password isn't specified, it will be queried for on
|
||||
the terminal. Note that this certificate is the private key and the private
|
||||
certificate concatenated!
|
||||
|
||||
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>"
|
||||
(HTTPS) Tells curl to use the specified certificate file to verify the
|
||||
peer. The certificate 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 "-f/--fail"
|
||||
(HTTP)
|
||||
Fail silently (no output at all) on server errors. This is mostly done
|
||||
@@ -201,7 +227,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.
|
||||
|
||||
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:
|
||||
|
||||
.B curl
|
||||
@@ -217,6 +243,11 @@ 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
|
||||
contents but they should be encoded according to the URI standard. (Option
|
||||
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)
|
||||
.IP "-h/--help"
|
||||
Usage help.
|
||||
.IP "-H/--header <header>"
|
||||
@@ -242,7 +273,7 @@ name, IP address or host name. An example could look like:
|
||||
|
||||
.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"
|
||||
(HTTP/FTP)
|
||||
Fetch the HTTP-header only! HTTP-servers feature the command HEAD
|
||||
@@ -255,7 +286,7 @@ If this option is used twice, the second will again disable header only.
|
||||
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.
|
||||
|
||||
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>"
|
||||
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
|
||||
@@ -267,6 +298,12 @@ treated as a comment.
|
||||
|
||||
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.
|
||||
.IP "-l/--list-only"
|
||||
(FTP)
|
||||
@@ -289,8 +326,11 @@ If this option is used twice, the second will again disable location following.
|
||||
Maximum time in seconds that you allow the whole operation to take. This is
|
||||
useful for preventing your batch jobs from hanging for hours due to slow
|
||||
networks or links going down. This doesn't work fully in win32 systems.
|
||||
See also the
|
||||
.I "--connect-timeout"
|
||||
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"
|
||||
Manual. Display the huge help text.
|
||||
.IP "-n/--netrc"
|
||||
@@ -300,6 +340,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
|
||||
authentication. See
|
||||
.BR netrc(4)
|
||||
or
|
||||
.BR ftp(1)
|
||||
for details on the file format. Curl will not complain if that file
|
||||
hasn't the right permissions (it should not be world nor group
|
||||
readable). The environment variable "HOME" is used to find the home
|
||||
@@ -308,7 +350,7 @@ directory.
|
||||
A quick and very simple example of how to setup a
|
||||
.I .netrc
|
||||
to allow curl to ftp to the machine host.domain.com with user name
|
||||
'myself' and password 'secret' should look similar to:
|
||||
\&'myself' and password 'secret' should look similar to:
|
||||
|
||||
.B "machine host.domain.com login myself password secret"
|
||||
|
||||
@@ -368,7 +410,7 @@ i.e "my.host.domain" to specify machine
|
||||
(any single-letter string) to make it pick the machine's default
|
||||
.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"
|
||||
If used as the first parameter on the command line, the
|
||||
.I $HOME/.curlrc
|
||||
@@ -383,6 +425,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.
|
||||
|
||||
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>"
|
||||
(HTTP/FTP)
|
||||
Retrieve a byte range (i.e a partial document) from a HTTP/1.1 or FTP
|
||||
@@ -421,7 +469,13 @@ document.
|
||||
FTP range downloads only support the simple syntax 'start-stop' (optionally
|
||||
with one of the numbers omitted). It depends on the non-RFC command SIZE.
|
||||
|
||||
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"
|
||||
Silent mode. Don't show progress meter or error messages. Makes
|
||||
Curl mute.
|
||||
@@ -440,28 +494,29 @@ XDISPLOC=<X display> Sets the X display location.
|
||||
|
||||
NEW_ENV=<var,val> Sets an environment variable.
|
||||
.IP "-T/--upload-file <file>"
|
||||
Like -t, but this transfers the specified local file. If there is no
|
||||
file part in the specified URL, Curl will append the local file
|
||||
name. NOTE that you must use a trailing / on the last directory to
|
||||
really prove to Curl that there is no file name or curl will
|
||||
think that your last directory name is the remote file name to
|
||||
use. That will most likely cause the upload operation to fail. If
|
||||
This transfers the specified local file to the remote URL. If there is no file
|
||||
part in the specified URL, Curl will append the local file name. NOTE that you
|
||||
must use a trailing / on the last directory to really prove to Curl that there
|
||||
is no file name or curl will think that your last directory name is the remote
|
||||
file name to use. That will most likely cause the upload operation to fail. If
|
||||
this is used on a http(s) server, the PUT command will be used.
|
||||
|
||||
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 "-u/--user <user:password>"
|
||||
Specify user and password to use when fetching. See README.curl for detailed
|
||||
examples of how to use this. If no password is specified, curl will
|
||||
ask for it interactively.
|
||||
|
||||
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>"
|
||||
Specify user and password to use for Proxy authentication. If no
|
||||
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>"
|
||||
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.
|
||||
|
||||
This option may be used any number of times. To control where this URL is written, use the
|
||||
@@ -489,7 +544,7 @@ write "@-".
|
||||
The variables present in the output format will be substituted by the value or
|
||||
text that curl thinks fit, as described below. All variables are specified
|
||||
like %{variable_name} and to output a normal % you just write them like
|
||||
%%. You can output a newline by using \\n, a carrige return with \\r and a tab
|
||||
%%. You can output a newline by using \\n, a carriage return with \\r and a tab
|
||||
space with \\t.
|
||||
|
||||
.B NOTE:
|
||||
@@ -523,6 +578,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
|
||||
are specific to the particular protocol(s) involved.
|
||||
.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
|
||||
The total amount of bytes that were downloaded.
|
||||
.TP
|
||||
@@ -540,14 +600,22 @@ The average download speed that curl measured for the complete download.
|
||||
.TP
|
||||
.B speed_upload
|
||||
The average upload speed that curl measured for the complete upload.
|
||||
.TP
|
||||
.B content_type
|
||||
The Content-Type of the requested document, if there was any. (Added in 7.9.5)
|
||||
.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]>"
|
||||
Use specified proxy. If the port number is not specified, it is assumed at
|
||||
port 1080.
|
||||
Use specified HTTP proxy. If the port number is not specified, it is assumed
|
||||
at port 1080.
|
||||
|
||||
If this option is used serveral times, the last one will be used.
|
||||
\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>"
|
||||
(HTTP)
|
||||
Specifies a custom request to use when communicating with the HTTP server.
|
||||
@@ -558,19 +626,19 @@ HTTP 1.1 specification for details and explanations.
|
||||
Specifies a custom FTP command to use instead of LIST when doing file lists
|
||||
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>"
|
||||
If a download is slower than speed-limit bytes per second during a speed-time
|
||||
period, the download gets aborted. If speed-time is used, the default
|
||||
speed-limit will be 1 unless set with -y.
|
||||
|
||||
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-limit <speed>"
|
||||
If a download is slower than this given speed, in bytes per second, for
|
||||
speed-time seconds it gets aborted. speed-time is set with -Y and is 30 if
|
||||
not set.
|
||||
|
||||
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>"
|
||||
(HTTP)
|
||||
Request to get a file that has been modified later than the given time and
|
||||
@@ -586,13 +654,16 @@ Start the date expression with a dash (-) to make it request for a document
|
||||
that is older than the given date/time, default is a document that is newer
|
||||
than the specified date/time.
|
||||
|
||||
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 "-3/--sslv3"
|
||||
(HTTPS)
|
||||
Forces curl to use SSL version 3 when negotiating with a remote SSL server.
|
||||
.IP "-2/--sslv2"
|
||||
(HTTPS)
|
||||
Forces curl to use SSL version 2 when negotiating with a remote SSL server.
|
||||
.IP "-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"
|
||||
Make curl display progress information as a progress bar instead of the
|
||||
default statistics.
|
||||
@@ -607,14 +678,14 @@ 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.
|
||||
If this option is used several times, the last one will be used.
|
||||
.SH FILES
|
||||
.I ~/.curlrc
|
||||
.RS
|
||||
Default config file.
|
||||
|
||||
.SH ENVIRONMENT
|
||||
.IP "HTTP_PROXY [protocol://]<host>[:port]"
|
||||
.IP "http_proxy [protocol://]<host>[:port]"
|
||||
Sets proxy server to use for HTTP.
|
||||
.IP "HTTPS_PROXY [protocol://]<host>[:port]"
|
||||
Sets proxy server to use for HTTPS.
|
||||
@@ -625,11 +696,8 @@ Sets proxy server to use for GOPHER.
|
||||
.IP "ALL_PROXY [protocol://]<host>[:port]"
|
||||
Sets proxy server to use if no protocol-specific proxy is set.
|
||||
.IP "NO_PROXY <comma-separated list of hosts>"
|
||||
list of host names that shouldn't go through any proxy. If set to a
|
||||
asterisk '*' only, it matches all hosts.
|
||||
.IP "COLUMNS <integer>"
|
||||
The width of the terminal. This variable only affects curl when the
|
||||
--progress-bar option is used.
|
||||
list of host names that shouldn't go through any proxy. If set to a asterisk
|
||||
'*' only, it matches all hosts.
|
||||
.SH EXIT CODES
|
||||
There exists a bunch of different error codes and their corresponding error
|
||||
messages that may appear during bad conditions. At the time of this writing,
|
||||
@@ -729,76 +797,25 @@ Internal error. A function was called in a bad order.
|
||||
.IP 45
|
||||
Interface error. A specified outgoing interface could not be used.
|
||||
.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
|
||||
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 XX
|
||||
There will appear more error codes here in future releases. The existing ones
|
||||
are meant to never change.
|
||||
.SH BUGS
|
||||
If you do find bugs, mail them to curl-bug@haxx.se.
|
||||
.SH AUTHORS / CONTRIBUTORS
|
||||
- Daniel Stenberg <Daniel.Stenberg@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.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 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
|
||||
- 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>
|
||||
|
||||
Daniel Stenberg is the main author, but the whole list of contributors is
|
||||
found in the separate THANKS file.
|
||||
.SH WWW
|
||||
http://curl.haxx.se
|
||||
.SH FTP
|
||||
|
@@ -1,29 +0,0 @@
|
||||
.\" You can view this file with:
|
||||
.\" nroff -man [file]
|
||||
.\" Written by daniel@haxx.se
|
||||
.\"
|
||||
.TH curl_easy_cleanup 3 "5 March 2001" "libcurl 7.7" "libcurl Manual"
|
||||
.SH NAME
|
||||
curl_easy_cleanup - End a libcurl session
|
||||
.SH SYNOPSIS
|
||||
.B #include <curl/curl.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.
|
||||
|
||||
This will effectively close all connections libcurl has been used and possibly
|
||||
has kept open until now. Don't call this function if you intend to transfer
|
||||
more files (libcurl 7.7 or later).
|
||||
.SH RETURN VALUE
|
||||
None
|
||||
.SH "SEE ALSO"
|
||||
.BR curl_easy_init "(3), "
|
||||
.SH BUGS
|
||||
Surely there are some, you tell me!
|
@@ -1,32 +0,0 @@
|
||||
.\" You can view this file with:
|
||||
.\" nroff -man [file]
|
||||
.\" Written by daniel@haxx.se
|
||||
.\"
|
||||
.TH curl_easy_init 3 "5 March 2001" "libcurl 7.7" "libcurl Manual"
|
||||
.SH NAME
|
||||
curl_easy_init - Start a libcurl 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 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.
|
||||
|
||||
Using libcurl 7.7 and later, you should perform all your sequential file
|
||||
transfers using the same curl handle. This enables libcurl to use persistant
|
||||
connections where possible.
|
||||
.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,481 +0,0 @@
|
||||
.\" You can view this file with:
|
||||
.\" nroff -man [file]
|
||||
.\" Written by daniel@haxx.se
|
||||
.\"
|
||||
.TH curl_easy_setopt 3 "13 March 2001" "libcurl 7.7" "libcurl Manual"
|
||||
.SH NAME
|
||||
curl_easy_setopt - Set curl easy-session options
|
||||
.SH SYNOPSIS
|
||||
.B #include <curl/curl.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 curl_easy_setopt() calls in the setup phase.
|
||||
|
||||
NOTE: 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 behaviour or even crashes.
|
||||
|
||||
More note: the options set with this function call are valid for the
|
||||
forthcoming data transfers that are performed when you invoke
|
||||
.I curl_easy_perform .
|
||||
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
|
||||
.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.
|
||||
|
||||
NOTE: If you're using libcurl as a win32 .DLL, you MUST use a
|
||||
.I CURLOPT_WRITEFUNCTION
|
||||
if you set the
|
||||
.I CURLOPT_FILE
|
||||
option.
|
||||
.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.
|
||||
|
||||
NOTE: If you're using libcurl as a win32 .DLL, you MUST use a
|
||||
.I CURLOPT_READFUNCTION
|
||||
if you set the
|
||||
.I CURLOPT_INFILE
|
||||
option.
|
||||
.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. The string must remain present until curl no longer needs
|
||||
it, as it doesn't copy the string. NOTE: this option is required to be set
|
||||
before curl_easy_perform() is called.
|
||||
.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. HTTP
|
||||
transfers also support several intervals, separated with commas as in
|
||||
.I "X-Y,N-M"
|
||||
. Using this kind of multiple intervals will cause the HTTP server to send the
|
||||
response document in pieces.
|
||||
.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. This option will cause
|
||||
curl to use the SIGALRM to enable timeouting system calls.
|
||||
.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)
|
||||
.TP
|
||||
.B CURLOPT_MAXCONNECTS
|
||||
Pass a long. The set number will be the persistant connection cache size. The
|
||||
set amount will be the maximum amount of simultaneous connections that libcurl
|
||||
may cache between file transfers. 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. Note: if you have already performed transfers
|
||||
with this curl handle, setting a smaller MAXCONNECTS than before may cause
|
||||
open connections to unnecessarily get closed. (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 CURLCLOSEPOLICY_LEAST_RECENTLY_USED to make libcurl close the
|
||||
connection that was least recently used, that connection is also least likely
|
||||
to be capable of re-use. Use CURLCLOSEPOLICY_OLDEST 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 connection by
|
||||
force. If the connection cache is full before this connection, one of the
|
||||
existinf connections will be closed as according to the set policy. This
|
||||
option should be used with caution and only if you understand what it
|
||||
does. Set to 0 to have libcurl attempt re-use of an existing connection.
|
||||
(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. (Added in 7.7)
|
||||
.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 will the SSL connection become.
|
||||
.TP
|
||||
.B CURLOPT_FORBID_REUSE
|
||||
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.
|
||||
.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 "5 March 2001" "libcurl 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 "5 March 2001" "libcurl 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];[type=<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,...];[type=<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!
|
||||
|
@@ -4,10 +4,11 @@
|
||||
|
||||
AUTOMAKE_OPTIONS = foreign no-dependencies
|
||||
|
||||
EXTRA_DIST =
|
||||
README curlgtk.c sepheaders.c simple.c postit.c \
|
||||
win32sockets.c persistant.c \
|
||||
getpageinvar.php simpleget.php simplepost.php
|
||||
EXTRA_DIST = README curlgtk.c sepheaders.c simple.c postit2.c \
|
||||
win32sockets.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
|
||||
|
||||
all:
|
||||
@echo "done"
|
||||
|
42
docs/examples/Makefile.example
Normal file
42
docs/examples/Makefile.example
Normal file
@@ -0,0 +1,42 @@
|
||||
#############################################################################
|
||||
# _ _ ____ _
|
||||
# Project ___| | | | _ \| |
|
||||
# / __| | | | |_) | |
|
||||
# | (__| |_| | _ <| |___
|
||||
# \___|\___/|_| \_\_____|
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
|
||||
# What to call the final executable
|
||||
TARGET = example
|
||||
|
||||
# Which object files that the executable consists of
|
||||
OBJS= ftpget.o
|
||||
|
||||
# What compiler to use
|
||||
CC = gcc
|
||||
|
||||
# Compiler flags, -g for debug, -c to make an object file
|
||||
CFLAGS = -c -g
|
||||
|
||||
# This should point to a directory that holds libcurl, if it isn't
|
||||
# in the system's standard lib dir
|
||||
# We also set a -L to include the directory where we have the openssl
|
||||
# libraries
|
||||
LDFLAGS = -L/home/dast/lib -L/usr/local/ssl/lib
|
||||
|
||||
# We need -lcurl for the curl stuff
|
||||
# We need -lsocket and -lnsl when on Solaris
|
||||
# We need -lssl and -lcrypto when using libcurl with SSL support
|
||||
# We need -ldl for dlopen() if that is in libdl
|
||||
# We need -lpthread for the pthread example
|
||||
LIBS = -lcurl -lsocket -lnsl -lssl -lcrypto -dl
|
||||
|
||||
# Link the target with all objects and libraries
|
||||
$(TARGET) : $(OBJS)
|
||||
$(CC) $(LDFLAGS) $(LIBS) -o $(TARGET) $(OBJS)
|
||||
|
||||
# Compile the source files into object files
|
||||
ftpget.o : ftpget.c
|
||||
$(CC) $(CFLAGS) $<
|
@@ -7,5 +7,16 @@ advantage of libcurl.
|
||||
If you end up with other small but still useful example sources, please mail
|
||||
them for submission in future packages and on the web site.
|
||||
|
||||
There are examples for different languages and environments. Browse around to
|
||||
find those that fit you.
|
||||
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:
|
||||
|
||||
$ gcc `curl-config --cflags` `curl-config --libs` -o example example.c
|
||||
|
||||
Try the php/examples/ directory for PHP programming snippets!
|
||||
|
||||
*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.
|
||||
|
@@ -26,7 +26,11 @@ size_t my_read_func(void *ptr, size_t size, size_t nmemb, FILE *stream)
|
||||
return fread(ptr, size, nmemb, stream);
|
||||
}
|
||||
|
||||
int my_progress_func(GtkWidget *Bar, 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);*/
|
||||
gdk_threads_enter();
|
||||
@@ -50,6 +54,7 @@ void *curl_thread(void *ptr)
|
||||
curl_easy_setopt(curl, CURLOPT_URL, url);
|
||||
curl_easy_setopt(curl, CURLOPT_FILE, outfile);
|
||||
curl_easy_setopt(curl, CURLOPT_READFUNCTION, my_read_func);
|
||||
curl_easy_setopt(curl, CURLOPT_NOPROGRESS, FALSE);
|
||||
curl_easy_setopt(curl, CURLOPT_PROGRESSFUNCTION, my_progress_func);
|
||||
curl_easy_setopt(curl, CURLOPT_PROGRESSDATA, Bar);
|
||||
|
||||
|
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;
|
||||
}
|
@@ -1,10 +0,0 @@
|
||||
#
|
||||
# The PHP curl module supports the received page to be returned in a variable
|
||||
# if told.
|
||||
#
|
||||
$ch = curl_init();
|
||||
|
||||
curl_setopt($ch, CURLOPT_URL,"http://www.myurl.com/");
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
|
||||
$result=curl_exec ($ch);
|
||||
curl_close ($ch);
|
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;
|
||||
}
|
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;
|
||||
}
|
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;
|
||||
}
|
@@ -25,39 +25,58 @@
|
||||
win32socket.c file as well */
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <curl/curl.h>
|
||||
#include <curl/types.h>
|
||||
#include <curl/easy.h>
|
||||
|
||||
int main(int argc, char **argv)
|
||||
#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_formparse("sendfile=@foo",
|
||||
&formpost,
|
||||
&lastptr);
|
||||
curl_formadd(&formpost,
|
||||
&lastptr,
|
||||
CURLFORM_COPYNAME, "sendfile",
|
||||
CURLFORM_FILE, "postit2.c",
|
||||
CURLFORM_END);
|
||||
|
||||
/* Fill in the filename field */
|
||||
curl_formparse("filename=foo",
|
||||
&formpost,
|
||||
&lastptr);
|
||||
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_formparse("submit=send",
|
||||
&formpost,
|
||||
&lastptr);
|
||||
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);
|
||||
|
||||
@@ -66,6 +85,8 @@ int main(int argc, char **argv)
|
||||
|
||||
/* then cleanup the formpost chain */
|
||||
curl_formfree(formpost);
|
||||
/* free slist */
|
||||
curl_slist_free_all (headerlist);
|
||||
}
|
||||
return 0;
|
||||
}
|
@@ -19,9 +19,9 @@
|
||||
#include <curl/types.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;
|
||||
}
|
||||
|
||||
|
@@ -9,27 +9,16 @@
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#include <curl/curl.h>
|
||||
#include <curl/types.h>
|
||||
#include <curl/easy.h>
|
||||
|
||||
/* to make this work under windows, use the win32-functions from the
|
||||
win32socket.c file as well */
|
||||
|
||||
int main(int argc, char **argv)
|
||||
int main(void)
|
||||
{
|
||||
CURL *curl;
|
||||
CURLcode res;
|
||||
FILE *headerfile;
|
||||
|
||||
headerfile = fopen("dumpit", "w");
|
||||
|
||||
curl = curl_easy_init();
|
||||
if(curl) {
|
||||
/* what call to write: */
|
||||
curl_easy_setopt(curl, CURLOPT_URL, "curl.haxx.se");
|
||||
curl_easy_setopt(curl, CURLOPT_WRITEHEADER, headerfile);
|
||||
res = curl_easy_perform(curl);
|
||||
|
||||
/* always cleanup */
|
||||
|
@@ -1,13 +0,0 @@
|
||||
#
|
||||
# A very simple example that gets a HTTP page.
|
||||
#
|
||||
|
||||
$ch = curl_init();
|
||||
|
||||
curl_setopt ($ch, CURLOPT_URL, "http://www.zend.com/");
|
||||
curl_setopt ($ch, CURLOPT_HEADER, 0);
|
||||
|
||||
curl_exec ($ch);
|
||||
|
||||
curl_close ($ch);
|
||||
|
@@ -1,12 +0,0 @@
|
||||
#
|
||||
# A very simple PHP example that sends a HTTP POST to a remote site
|
||||
#
|
||||
|
||||
$ch = curl_init();
|
||||
|
||||
curl_setopt($ch, CURLOPT_URL,"http://www.mysite.com/tester.phtml");
|
||||
curl_setopt($ch, CURLOPT_POST, 1);
|
||||
curl_setopt($ch, CURLOPT_POSTFIELDS, "postvar1=value1&postvar2=value2&postvar3=value3");
|
||||
|
||||
curl_exec ($ch);
|
||||
curl_close ($ch);
|
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;
|
||||
}
|
@@ -1,14 +1,23 @@
|
||||
|
||||
/*
|
||||
* Note: This is only required if you use curl 7.8 or lower, later
|
||||
* versions provide an option to curl_global_init() that does the
|
||||
* win32 initialization for you.
|
||||
*/
|
||||
|
||||
/*
|
||||
* These are example functions doing socket init that Windows
|
||||
* require. If you don't use windows, you can safely ignore this crap.
|
||||
*/
|
||||
|
||||
static void win32_cleanup(void)
|
||||
#include <windows.h>
|
||||
|
||||
void win32_cleanup(void)
|
||||
{
|
||||
WSACleanup();
|
||||
}
|
||||
|
||||
static CURLcode win32_init(void)
|
||||
int win32_init(void)
|
||||
{
|
||||
WORD wVersionRequested;
|
||||
WSADATA wsaData;
|
||||
|
1012
docs/libcurl-the-guide
Normal file
1012
docs/libcurl-the-guide
Normal file
File diff suppressed because it is too large
Load Diff
86
docs/libcurl/Makefile.am
Normal file
86
docs/libcurl/Makefile.am
Normal file
@@ -0,0 +1,86 @@
|
||||
#
|
||||
# $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_escape.3 \
|
||||
curl_unescape.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_escape.html \
|
||||
curl_unescape.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
|
||||
|
||||
EXTRA_DIST = $(man_MANS) $(HTMLPAGES)
|
||||
|
||||
MAN2HTML= gnroff -man $< | man2html >$@
|
||||
|
||||
SUFFIXES = .1 .3 .html
|
||||
|
||||
html: $(HTMLPAGES)
|
||||
|
||||
.3.html:
|
||||
$(MAN2HTML)
|
||||
|
||||
.1.html:
|
||||
$(MAN2HTML)
|
25
docs/libcurl/curl_easy_cleanup.3
Normal file
25
docs/libcurl/curl_easy_cleanup.3
Normal file
@@ -0,0 +1,25 @@
|
||||
.\" You can view this file with:
|
||||
.\" nroff -man [file]
|
||||
.\" $Id$
|
||||
.\"
|
||||
.TH curl_easy_cleanup 3 "4 March 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.
|
||||
.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,8 +1,8 @@
|
||||
.\" You can view this file with:
|
||||
.\" nroff -man [file]
|
||||
.\" Written by daniel@haxx.se
|
||||
.\" $Id$
|
||||
.\"
|
||||
.TH curl_easy_init 3 "5 March 2001" "libcurl 7.6.1" "libcurl Manual"
|
||||
.TH curl_easy_init 3 "31 Jan 2001" "libcurl 7.9.4" "libcurl Manual"
|
||||
.SH NAME
|
||||
curl_easy_getinfo - Extract information from a curl session (added in 7.4)
|
||||
.SH SYNOPSIS
|
||||
@@ -30,9 +30,11 @@ Pass a pointer to a long to receive the last received HTTP code.
|
||||
.TP
|
||||
.B CURLINFO_FILETIME
|
||||
Pass a pointer to a long to receive the remote time of the retrieved
|
||||
document. If you get 0, it can be because of many reasons (unknown, the server
|
||||
hides it or the server doesn't support the command that tells document time
|
||||
etc) and the time of the document is unknown. (Added in 7.5)
|
||||
document. If you get -1, it can be because of many reasons (unknown, the
|
||||
server hides it or the server doesn't support the command that tells document
|
||||
time etc) and the time of the document is unknown. Note that you must tell the
|
||||
server to collect this information before the transfer is made, by using the
|
||||
CURLOPT_FILETIME option to \fIcurl_easy_setopt(3)\fP. (Added in 7.5)
|
||||
.TP
|
||||
.B CURLINFO_TOTAL_TIME
|
||||
Pass a pointer to a double to receive the total transaction time in seconds
|
||||
@@ -52,6 +54,12 @@ start until the file transfer is just about to begin. This includes all
|
||||
pre-transfer commands and negotiations that are specific to the particular
|
||||
protocol(s) involved.
|
||||
.TP
|
||||
.B CURLINFO_STARTTRANSFER_TIME
|
||||
Pass a pointer to a double to receive the time, in seconds, it took from the
|
||||
start until the first byte is just about to be transfered. This includes
|
||||
CURLINFO_PRETRANSFER_TIME and also the time the server needs to calculate
|
||||
the result.
|
||||
.TP
|
||||
.B CURLINFO_SIZE_UPLOAD
|
||||
Pass a pointer to a double to receive the total amount of bytes that were
|
||||
uploaded.
|
||||
@@ -89,6 +97,12 @@ is the value read from the Content-Length: field. (Added in 7.6.1)
|
||||
.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
|
||||
|
||||
.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!
|
@@ -1,6 +1,6 @@
|
||||
.\" You can view this file with:
|
||||
.\" nroff -man [file]
|
||||
.\" Written by daniel@haxx.se
|
||||
.\" $Id$
|
||||
.\"
|
||||
.TH curl_easy_perform 3 "5 Mar 2001" "libcurl 7.7" "libcurl Manual"
|
||||
.SH NAME
|
651
docs/libcurl/curl_easy_setopt.3
Normal file
651
docs/libcurl/curl_easy_setopt.3
Normal file
@@ -0,0 +1,651 @@
|
||||
.\" You can view this file with:
|
||||
.\" nroff -man [file]
|
||||
.\" $Id$
|
||||
.\"
|
||||
.TH curl_easy_setopt 3 "12 Apr 2002" "libcurl 7.9.6" "libcurl Manual"
|
||||
.SH NAME
|
||||
curl_easy_setopt - Set curl easy-session options
|
||||
.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. Most operations in
|
||||
libcurl have default actions, and by using the appropriate options to
|
||||
\fIcurl_easy_setopt\fP, you can change them. 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.
|
||||
|
||||
\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 OPTIONS
|
||||
The options are listed in a sort of random order, but you'll figure it out!
|
||||
.TP 0.4i
|
||||
.B CURLOPT_FILE
|
||||
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.
|
||||
.TP
|
||||
.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 available 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.
|
||||
.TP
|
||||
.B CURLOPT_INFILE
|
||||
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.
|
||||
.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_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. 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_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 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. 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.
|
||||
.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_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_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.
|
||||
.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. Starting
|
||||
with libcurl 7.8, this option is obsolete. Using the CURLOPT_POSTFIELDS option
|
||||
will imply 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.
|
||||
.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 \fI~/.netrc\fP file to
|
||||
find user name and password for the remote site you are about to access. Only
|
||||
machine name, user name and password is 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_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_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_PUT
|
||||
A non-zero parameter tells the library to use HTTP PUT to transfer data. The
|
||||
data should be set with CURLOPT_INFILE and CURLOPT_INFILESIZE.
|
||||
.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.
|
||||
.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_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.
|
||||
|
||||
\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_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 does not work in Unix multi-threaded programs, as it uses
|
||||
signals.
|
||||
.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_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_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_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 \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_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 remained intact until you close this curl handle again
|
||||
with \fIcurl_easy_cleanup(3)\fP.
|
||||
.TP
|
||||
.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_SSLKEYASSWD
|
||||
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_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 \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_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 below on how to set a
|
||||
custom get-all-headers callback.
|
||||
.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 libcurl 7.7.2)
|
||||
.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 /
|
||||
Mozilla 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 may 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 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 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 or less 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_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.
|
||||
.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_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 \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 my_getpass(void *client, char *prompt, char*
|
||||
buffer, int buflen );\fP. 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.
|
||||
\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_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_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_MAXCONNECTS
|
||||
Pass a long. The set number will be the persistant connection cache size. The
|
||||
set amount will be the maximum amount of simultaneous connections that libcurl
|
||||
may cache between file transfers. 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.
|
||||
|
||||
\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_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 will the SSL connection 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_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 does not work in unix multi-threaded programs, as it uses
|
||||
signals.
|
||||
.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_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_COOKIEJAR
|
||||
Pass a file name as char *, zero terminated. This will make libcurl dump 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.
|
||||
.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_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
|
||||
.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 is 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.
|
||||
.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 libcurl 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 handles creations and deletions. This is not
|
||||
thread-safe and this will use a global varible. (Added in libcurl 7.9.3)
|
||||
.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 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 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(), RFC 2396
|
165
docs/libcurl/curl_formadd.3
Normal file
165
docs/libcurl/curl_formadd.3
Normal file
@@ -0,0 +1,165 @@
|
||||
.\" You can view this file with:
|
||||
.\" nroff -man [file]
|
||||
.\" $Id$
|
||||
.\"
|
||||
.TH curl_formadd 3 "1 Match 2002" "libcurl 7.9.1" "libcurl Manual"
|
||||
.SH NAME
|
||||
curl_formadd - add a section to a multipart/formdata HTTP POST
|
||||
.SH SYNOPSIS
|
||||
.B #include <curl/curl.h>
|
||||
.sp
|
||||
.BI "int 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. (If the following
|
||||
description confuses you, jump directly to the examples):
|
||||
|
||||
\fBCURLFORM_COPYNAME\fP or \fBCURLFORM_PTRNAME\fP followed by a string is used
|
||||
for the name of the section. Optionally one may use \fBCURLFORM_NAMELENGTH\fP
|
||||
to specify the length of the name (allowing null characters within the
|
||||
name). All options that use the word COPY in their names copy the given
|
||||
contents, while the ones with PTR in their names simply points to the (static)
|
||||
data you must make sure remain until curl no longer needs it.
|
||||
|
||||
The four options for providing values are: \fBCURLFORM_COPYCONTENTS\fP,
|
||||
\fBCURLFORM_PTRCONTENTS\fP, \fBCURLFORM_FILE\fP, or \fBCURLFORM_FILECONTENT\fP
|
||||
followed by a char or void pointer (allowed for PTRCONTENTS).
|
||||
|
||||
\fBCURLFORM_FILECONTENT\fP does a normal post like \fBCURLFORM_COPYCONTENTS\fP
|
||||
but the actual value is read from the filename given as a string.
|
||||
|
||||
Other arguments may be \fBCURLFORM_CONTENTTYPE\fP if the user wishes to
|
||||
specify one (for FILE if no type is given the library tries to provide the
|
||||
correct one; for CONTENTS no Content-Type is sent in this case).
|
||||
|
||||
For \fBCURLFORM_PTRCONTENTS\fP or \fBCURLFORM_COPYNAME\fP the user may also
|
||||
add \fBCURLFORM_CONTENTSLENGTH\fP followed by the length as a long (if not
|
||||
given the library will use strlen to determine the length).
|
||||
|
||||
For \fBCURLFORM_FILE\fP the user may send multiple files in one section by
|
||||
providing multiple \fBCURLFORM_FILE\fP arguments each followed by the filename
|
||||
(and each FILE is allowed to have a CONTENTTYPE).
|
||||
|
||||
Another possibility to send single or multiple files in one section is to use
|
||||
\fBCURLFORM_ARRAY\fP that gets a struct curl_forms array pointer as its
|
||||
value. Each structure element has a CURLformoption and a char pointer. For the
|
||||
options only \fBCURLFORM_FILE\fP, \fBCURLFORM_CONTENTTYPE\fP, and
|
||||
\fBCURLFORM_END\fP (that is used to determine the end of the array and thus
|
||||
must be the option of the last and no other element of the curl_forms array)
|
||||
are allowed. The effect of this parameter is the same as giving multiple
|
||||
\fBCURLFORM_FILE\fP options possibly with \fBCURLFORM_CONTENTTYPE\fP after or
|
||||
before each \fBCURLFORM_FILE\fP option.
|
||||
|
||||
Should you need to specify extra headers for the form POST section, use
|
||||
\fBCURLFORM_CONTENTHEADER\fP. This takes a curl_slist prepared in the usual way
|
||||
using \fBcurl_slist_append\fP and appends the list of headers to those Curl
|
||||
automatically generates for \fBCURLFORM_CONTENTTYPE\fP and the content
|
||||
disposition. The list must exist while the POST occurs, if you free it before
|
||||
the post completes you may experience problems.
|
||||
|
||||
The last argument in such an array must always be \fBCURLFORM_END\fP.
|
||||
|
||||
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.
|
||||
|
||||
This function will copy all input data except the data pointed to by the
|
||||
arguments after \fBCURLFORM_PTRNAME\fP and \fBCURLFORM_PTRCONTENTS\fP and keep
|
||||
its own version of it allocated until you call \fIcurl_formfree\fP. When
|
||||
you've passed the pointer to \fIcurl_easy_setopt\fP, you must not free the
|
||||
list until after you've called \fIcurl_easy_cleanup\fP for the curl handle. If
|
||||
you provide a pointer as an arguments after \fBCURLFORM_PTRNAME\fP or
|
||||
\fBCURLFORM_PTRCONTENTS\fP you must ensure that the pointer stays valid until
|
||||
you call \fIcurl_form_free\fP and \fIcurl_easy_cleanup\fP.
|
||||
|
||||
See example below.
|
||||
.SH RETURN VALUE
|
||||
Returns non-zero if an error occurs.
|
||||
.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;
|
||||
|
||||
/* 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.
|
@@ -1,6 +1,6 @@
|
||||
.\" You can view this file with:
|
||||
.\" nroff -man [file]
|
||||
.\" Written by daniel@haxx.se
|
||||
.\" $Id$
|
||||
.\"
|
||||
.TH curl_getdate 3 "5 March 2001" "libcurl 7.0" "libcurl Manual"
|
||||
.SH NAME
|
@@ -1,14 +1,14 @@
|
||||
.\" You can view this file with:
|
||||
.\" nroff -man [file]
|
||||
.\" Written by daniel@haxx.se
|
||||
.\" $Id$
|
||||
.\"
|
||||
.TH curl_getenv 3 "5 March 2001" "libcurl 7.0" "libcurl Manual"
|
||||
.TH curl_getenv 3 "15 August 2001" "libcurl 7.8.1" "libcurl Manual"
|
||||
.SH NAME
|
||||
curl_getenv - return value for environment name
|
||||
.SH SYNOPSIS
|
||||
.B #include <curl/curl.h>
|
||||
.sp
|
||||
.BI "char *curl_getenv(char *" name ");
|
||||
.BI "char *curl_getenv(const char *" name ");
|
||||
.ad
|
||||
.SH DESCRIPTION
|
||||
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)"
|
23
docs/libcurl/curl_multi_fdset.3
Normal file
23
docs/libcurl/curl_multi_fdset.3
Normal file
@@ -0,0 +1,23 @@
|
||||
.\" $Id$
|
||||
.\"
|
||||
.TH curl_multi_fdset 3 "1 March 2002" "libcurl 7.9.5" "libcurl Manual"
|
||||
.SH NAME
|
||||
curl_multi_fdset - add an easy handle to a multi session
|
||||
.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.
|
||||
.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!
|
30
docs/libcurl/curl_multi_perform.3
Normal file
30
docs/libcurl/curl_multi_perform.3
Normal file
@@ -0,0 +1,30 @@
|
||||
.\" $Id$
|
||||
.\"
|
||||
.TH curl_multi_perform 3 "1 March 2002" "libcurl 7.9.5" "libcurl Manual"
|
||||
.SH NAME
|
||||
curl_multi_perform - add an easy handle to a multi session
|
||||
.SH SYNOPSIS
|
||||
#include <curl/curl.h>
|
||||
|
||||
CURLMcode curl_multi_perform(CURLM *multi_handle, int *running_handles);
|
||||
.ad
|
||||
.SH DESCRIPTION
|
||||
When the app thinks there's data available for the multi_handle, it should
|
||||
call this function to read/write whatever there is to read or write right
|
||||
now. curl_multi_perform() returns as soon as the reads/writes are done. This
|
||||
function does not require that there actually is any data available for
|
||||
reading or that data can be written, it can be called just in case. It will
|
||||
write the number of handles that still transfer data in the second argument's
|
||||
integer-pointer.
|
||||
.SH "RETURN VALUE"
|
||||
CURLMcode type, general libcurl multi interface error code.
|
||||
|
||||
NOTE that this only returns errors etc regarding the whole multi stack. There
|
||||
might still have occurred problems on invidual transfers even when this
|
||||
function returns OK.
|
||||
.SH "TYPICAL USAGE"
|
||||
Most application will use \fIcurl_multi_fdset\fP to get the multi_handle's
|
||||
file descriptors, then it'll wait for action on them using select() and as
|
||||
soon as one or more of them are ready, \fIcurl_multi_perform\fP gets called.
|
||||
.SH "SEE ALSO"
|
||||
.BR curl_multi_cleanup "(3)," curl_multi_init "(3)"
|
20
docs/libcurl/curl_multi_remove_handle.3
Normal file
20
docs/libcurl/curl_multi_remove_handle.3
Normal file
@@ -0,0 +1,20 @@
|
||||
.\" $Id$
|
||||
.\"
|
||||
.TH curl_multi_remove_handle 3 "6 March 2002" "libcurl 7.9.5" "libcurl Manual"
|
||||
.SH NAME
|
||||
curl_multi_remove_handle - add an easy handle to a multi session
|
||||
.SH SYNOPSIS
|
||||
#include <curl/curl.h>
|
||||
|
||||
CURLMcode curl_multi_remove_handle(CURLM *multi_handle, CURL *easy_handle);
|
||||
.ad
|
||||
.SH DESCRIPTION
|
||||
Removes a given easy_handle from the multi_handle. This will make the
|
||||
specified easy handle be removed from this multi handle's control.
|
||||
|
||||
When the easy handle has been removed from a multi stack, it is again
|
||||
perfectly legal to invoke \fIcurl_easy_perform()\fP on this easy handle.
|
||||
.SH RETURN VALUE
|
||||
CURLMcode type, general libcurl multi interface error code.
|
||||
.SH "SEE ALSO"
|
||||
.BR curl_multi_cleanup "(3)," curl_multi_init "(3)"
|
@@ -1,6 +1,6 @@
|
||||
.\" You can view this file with:
|
||||
.\" nroff -man [file]
|
||||
.\" Written by daniel@haxx.se
|
||||
.\" $Id$
|
||||
.\"
|
||||
.TH curl_slist_append 3 "5 March 2001" "libcurl 7.0" "libcurl Manual"
|
||||
.SH NAME
|
||||
@@ -8,7 +8,7 @@ curl_slist_append - add a string to an slist
|
||||
.SH SYNOPSIS
|
||||
.B #include <curl/curl.h>
|
||||
.sp
|
||||
.BI "struct curl_slist *curl_slist_append(struct curl_slit *" list,
|
||||
.BI "struct curl_slist *curl_slist_append(struct curl_slist *" list,
|
||||
.BI "const char * "string ");"
|
||||
.ad
|
||||
.SH DESCRIPTION
|
@@ -1,6 +1,6 @@
|
||||
.\" You can view this file with:
|
||||
.\" nroff -man [file]
|
||||
.\" Written by daniel@haxx.se
|
||||
.\" $Id$
|
||||
.\"
|
||||
.TH curl_slist_free_all 3 "5 March 2001" "libcurl 7.0" "libcurl Manual"
|
||||
.SH NAME
|
30
docs/libcurl/curl_strequal.3
Normal file
30
docs/libcurl/curl_strequal.3
Normal file
@@ -0,0 +1,30 @@
|
||||
.\" You can view this file with:
|
||||
.\" nroff -man [file]
|
||||
.\" $Id$
|
||||
.\"
|
||||
.TH curl_strequal 3 "20 April 2001" "libcurl 7.7.2" "libcurl Manual"
|
||||
.SH NAME
|
||||
curl_strequal, curl_strnequal - case insensitive string comparisons
|
||||
.SH SYNOPSIS
|
||||
.B #include <curl/curl.h>
|
||||
.sp
|
||||
.BI "int curl_strequal(char *" str1 ", char *" str2 ");"
|
||||
.sp
|
||||
.BI "int curl_strenqual(char *" str1 ", char *" str2 ", size_t " len ");"
|
||||
.SH DESCRIPTION
|
||||
The
|
||||
.B curl_strequal()
|
||||
function compares the two strings \fIstr1\fP and \fIstr2\fP, ignoring the case
|
||||
of the characters. It returns a non-zero (TRUE) integer if the strings are
|
||||
identical.
|
||||
.sp
|
||||
The \fBcurl_strnequal()\fP function is similar, except it only compares the
|
||||
first \fIlen\fP characters of \fIstr1\fP.
|
||||
.sp
|
||||
These functions are provided by libcurl to enable applications to compare
|
||||
strings in a truly portable manner. There are no standard portable case
|
||||
insensitive string comparison functions. These two works on all platforms.
|
||||
.SH RETURN VALUE
|
||||
Non-zero if the strings are identical. Zero if they're not.
|
||||
.SH "SEE ALSO"
|
||||
.BR strcmp "(3), " strcasecmp "(3)"
|
1
docs/libcurl/curl_strnequal.3
Normal file
1
docs/libcurl/curl_strnequal.3
Normal file
@@ -0,0 +1 @@
|
||||
.so curl_strequal.3
|
27
docs/libcurl/curl_unescape.3
Normal file
27
docs/libcurl/curl_unescape.3
Normal file
@@ -0,0 +1,27 @@
|
||||
.\" You can view this file with:
|
||||
.\" nroff -man [file]
|
||||
.\" $Id$
|
||||
.\"
|
||||
.TH curl_unescape 3 "22 March 2001" "libcurl 7.7" "libcurl Manual"
|
||||
.SH NAME
|
||||
curl_unescape - URL decodes the given string
|
||||
.SH SYNOPSIS
|
||||
.B #include <curl/curl.h>
|
||||
.sp
|
||||
.BI "char *curl_unescape( char *" url ", int "length " );"
|
||||
.ad
|
||||
.SH DESCRIPTION
|
||||
This function will convert the given URL encoded input string to a "plain
|
||||
string" and return that as a new allocated string. All input characters that
|
||||
are URL encoded (%XX where XX is a two-digit hexadecimal number, or +) will be
|
||||
converted to their plain text versions (up to a ? letter, no + letters to the
|
||||
right of a ? letter will be converted).
|
||||
|
||||
If the 'length' argument is set to 0, curl_unescape() will use strlen() on the
|
||||
input 'url' string to find out the size.
|
||||
|
||||
You must 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_escape(), RFC 2396
|
@@ -1,6 +1,6 @@
|
||||
.\" You can view this file with:
|
||||
.\" nroff -man [file]
|
||||
.\" Written by daniel@haxx.se
|
||||
.\" $Id$
|
||||
.\"
|
||||
.TH curl_version 3 "5 March 2001" "libcurl 7.0" "libcurl Manual"
|
||||
.SH NAME
|
48
docs/libcurl/index.html
Normal file
48
docs/libcurl/index.html
Normal file
@@ -0,0 +1,48 @@
|
||||
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>
|
||||
<P><A HREF="curl-config.html">curl-config.html</A>
|
||||
<P><A HREF="curl.html">curl.html</A>
|
||||
|
||||
<H2>Library routines</H2>
|
||||
<P><A HREF="libcurl.html">libcurl.html</A>
|
||||
<P><A HREF="curl_easy_cleanup.html">curl_easy_cleanup.html</A>
|
||||
<P><A HREF="curl_easy_duphandle.html">curl_easy_duphandle.html</A>
|
||||
<P><A HREF="curl_easy_getinfo.html">curl_easy_getinfo.html</A>
|
||||
<P><A HREF="curl_easy_init.html">curl_easy_init.html</A>
|
||||
<P><A HREF="curl_easy_perform.html">curl_easy_perform.html</A>
|
||||
<P><A HREF="curl_easy_setopt.html">curl_easy_setopt.html</A>
|
||||
<P><A HREF="curl_escape.html">curl_escape.html</A>
|
||||
<P><A HREF="curl_formadd.html">curl_formadd.html</A>
|
||||
<P><A HREF="curl_formfree.html">curl_formfree.html</A>
|
||||
<P><A HREF="curl_formparse.html">curl_formparse.html</A>
|
||||
<P><A HREF="curl_getdate.html">curl_getdate.html</A>
|
||||
<P><A HREF="curl_getenv.html">curl_getenv.html</A>
|
||||
<P><A HREF="curl_global_cleanup.html">curl_global_cleanup.html</A>
|
||||
<P><A HREF="curl_global_init.html">curl_global_init.html</A>
|
||||
<P><A HREF="curl_mprintf.html">curl_mprintf.html</A>
|
||||
<P><A HREF="curl_slist_append.html">curl_slist_append.html</A>
|
||||
<P><A HREF="curl_slist_free_all.html">curl_slist_free_all.html</A>
|
||||
<P><A HREF="curl_strequal.html">curl_strequal.html</A>
|
||||
<P><A HREF="curl_strnequal.html">curl_strnequal.html</A>
|
||||
<P><A HREF="curl_unescape.html">curl_unescape.html</A>
|
||||
<P><A HREF="curl_version.html">curl_version.html</A>
|
||||
<hr>
|
||||
<p><a href="curl_multi_add_handle.html">curl_multi_add_handle.html</a>
|
||||
<p><a href="curl_multi_cleanup.html">curl_multi_cleanup.html</a>
|
||||
<p><a href="curl_multi_fdset.html">curl_multi_fdset.html</a>
|
||||
<p><a href="curl_multi_info_read.html">curl_multi_info_read.html</a>
|
||||
<p><a href="curl_multi_init.html">curl_multi_init.html</a>
|
||||
<p><a href="curl_multi_perform.html">curl_multi_perform.html</a>
|
||||
<p><a href="curl_multi_remove_handle.html">curl_multi_remove_handle.html</a>
|
||||
<p><a href="libcurl-multi.html">libcurl-multi.html</a>
|
||||
|
||||
</BODY>
|
||||
</HTML>
|
240
docs/libcurl/libcurl-errors.3
Normal file
240
docs/libcurl/libcurl-errors.3
Normal file
@@ -0,0 +1,240 @@
|
||||
.\" You can view this file with:
|
||||
.\" nroff -man [file]
|
||||
.\" $Id$
|
||||
.\"
|
||||
.TH libcurl-errors 3 "10 April 2002" "libcurl 7.9.6" "libcurl errors"
|
||||
.SH NAME
|
||||
error codes in libcurl
|
||||
.SH DESCRIPTION
|
||||
This man page includes most, if not all, available error codes in libcurl.
|
||||
Why they occur and possibly what you can do to fix the problem.
|
||||
.SH "CURLcode"
|
||||
Almost all "easy" interface functions return a CURLcode error code. No matter
|
||||
what, using \fICURLOPT_ERRORBUFFER\fP is a good idea as it will give you a
|
||||
human readable error string that may offer more details about the error cause
|
||||
than just the error code does.
|
||||
|
||||
This man page is meant to describe libcurl 7.9.6 and later. Earlier versions
|
||||
might have had quirks not mentioned here.
|
||||
|
||||
CURLcode is one of the following:
|
||||
.RS 1
|
||||
.TP 5
|
||||
.B CURLE_OK (0)
|
||||
All fine. Proceed as usual.
|
||||
.TP
|
||||
.B CURLE_UNSUPPORTED_PROTOCOL (1)
|
||||
The URL you passed to libcurl used a protocol that this libcurl does not
|
||||
support. The support might be a compile-time option that you didn't use, it
|
||||
can be a misspelled protocol string or just a protocol libcurl has no code
|
||||
for.
|
||||
.TP
|
||||
.B CURLE_FAILED_INIT (2)
|
||||
Very early initialization code failed. This is likely to be an internal error
|
||||
or problem.
|
||||
.TP
|
||||
.B CURLE_URL_MALFORMAT (3)
|
||||
The URL was not properly formatted.
|
||||
.TP
|
||||
.B CURLE_URL_MALFORMAT_USER (4)
|
||||
URL user malformatted. The user-part of the URL syntax was not correct.
|
||||
.TP
|
||||
.B CURLE_COULDNT_RESOLVE_PROXY (5)
|
||||
Couldn't resolve proxy. The given proxy host could not be resolved.
|
||||
.TP
|
||||
.B CURLE_COULDNT_RESOLVE_HOST (6)
|
||||
Couldn't resolve host. The given remote host was not resolved.
|
||||
.TP
|
||||
.B CURLE_COULDNT_CONNECT (7)
|
||||
Failed to connect() to host or proxy.
|
||||
.TP
|
||||
.B CURLE_FTP_WEIRD_SERVER_REPLY (8)
|
||||
After connecting to a FTP server, libcurl expects to get a certain reply back.
|
||||
This error code implies that it god a strange or bad reply. The given remote
|
||||
server is probably not an OK FTP server.
|
||||
.TP
|
||||
.B CURLE_FTP_ACCESS_DENIED (9)
|
||||
We were denied access when trying to login to an FTP server or when trying to
|
||||
change working directory to the one given in the URL.
|
||||
.TP
|
||||
.B CURLE_FTP_USER_PASSWORD_INCORRECT (10)
|
||||
The username and/or the password were incorrect when trying to login to an FTP
|
||||
server.
|
||||
.TP
|
||||
.B CURLE_FTP_WEIRD_PASS_REPLY (11)
|
||||
After having sent the FTP password to the server, libcurl expects a proper
|
||||
reply. This error code indicates that an unexpected code was returned.
|
||||
.TP
|
||||
.B CURLE_FTP_WEIRD_USER_REPLY (12)
|
||||
After having sent user name to the FTP server, libcurl expects a proper
|
||||
reply. This error code indicates that an unexpected code was returned.
|
||||
.TP
|
||||
.B CURLE_FTP_WEIRD_PASV_REPLY (13)
|
||||
libcurl failed to get a sensible result back from the server as a response to
|
||||
either a PASV or a EPSV command. The server is flawed.
|
||||
.TP
|
||||
.B CURLE_FTP_WEIRD_227_FORMAT (14)
|
||||
FTP servers return a 227-line as a response to a PASV command. If libcurl
|
||||
fails to parse that line, this return code is passed back.
|
||||
.TP
|
||||
.B CURLE_FTP_CANT_GET_HOST (15)
|
||||
An internal failure to lookup the host used for the new connection.
|
||||
.TP
|
||||
.B CURLE_FTP_CANT_RECONNECT (16)
|
||||
A bad return code on either PASV or EPSV was sent by the FTP server,
|
||||
preventing libcurl from being able to continue.
|
||||
.TP
|
||||
.B CURLE_FTP_COULDNT_SET_BINARY (17)
|
||||
Received an error when trying to set the transfer mode to binary.
|
||||
.TP
|
||||
.B CURLE_PARTIAL_FILE (18)
|
||||
A file transfer was shorter or larger than expected. This happens when the
|
||||
server first reports an expected transfer size, and then delivers data that
|
||||
doesn't match the previously given size.
|
||||
.TP
|
||||
.B CURLE_FTP_COULDNT_RETR_FILE (19)
|
||||
This was either a weird reply to a 'RETR' command or a zero byte transfer
|
||||
complete.
|
||||
.TP
|
||||
.B CURLE_FTP_WRITE_ERROR (20)
|
||||
After a completed file transfer, the FTP server did not respond a proper
|
||||
\"transfer successful\" code.
|
||||
.TP
|
||||
.B CURLE_FTP_QUOTE_ERROR (21)
|
||||
When sending custom "QUOTE" commands to the remote server, one of the commands
|
||||
returned an error code that was 400 or higher.
|
||||
.TP
|
||||
.B CURLE_HTTP_NOT_FOUND (22)
|
||||
This is returned if CURLOPT_FAILONERROR is set TRUE and the HTTP server
|
||||
returns an error code that is >= 400.
|
||||
.TP
|
||||
.B CURLE_WRITE_ERROR (23)
|
||||
An error occurred when writing received data to a local file, or an error was
|
||||
returned to libcurl from a write callback.
|
||||
.TP
|
||||
.B CURLE_MALFORMAT_USER (24)
|
||||
Malformat user. User name badly specified. *Not currently used*
|
||||
.TP
|
||||
.B CURLE_FTP_COULDNT_STOR_FILE (25)
|
||||
FTP couldn't STOR file. The server denied the STOR operation. The error buffer
|
||||
usually contains the server's explanation to this.
|
||||
.TP
|
||||
.B CURLE_READ_ERROR (26)
|
||||
There was a problem reading a local file or an error returned by the read
|
||||
callback.
|
||||
.TP
|
||||
.B CURLE_OUT_OF_MEMORY (27)
|
||||
Out of memory. A memory allocation request failed. This is serious badness and
|
||||
things are severly screwed up if this ever occur.
|
||||
.TP
|
||||
.B CURLE_OPERATION_TIMEOUTED (28)
|
||||
Operation timeout. The specified time-out period was reached according to the
|
||||
conditions.
|
||||
.TP
|
||||
.B CURLE_FTP_COULDNT_SET_ASCII (29)
|
||||
libcurl failed to set ASCII transfer type (TYPE A).
|
||||
.TP
|
||||
.B CURLE_FTP_PORT_FAILED (30)
|
||||
The FTP PORT command returned error. This mostly happen when you haven't
|
||||
specified a good enough address for libcurl to use. See \fICURLOPT_FTPPORT\fP.
|
||||
.TP
|
||||
.B CURLE_FTP_COULDNT_USE_REST (31)
|
||||
The FTP REST command returned error. This should never happen if the server is
|
||||
sane.
|
||||
.TP
|
||||
.B CURLE_FTP_COULDNT_GET_SIZE (32)
|
||||
The FTP SIZE command returned errror. SIZE is not a kosher FTP command, it is
|
||||
an extension and not all servers support it. This is not a surprising error.
|
||||
.TP
|
||||
.B CURLE_HTTP_RANGE_ERROR (33)
|
||||
The HTTP server does not support or accept range requests.
|
||||
.TP
|
||||
.B CURLE_HTTP_POST_ERROR (34)
|
||||
This is an odd error that mainly occurs due to internal confusion.
|
||||
.TP
|
||||
.B CURLE_SSL_CONNECT_ERROR (35)
|
||||
A problem occured somewhere in the SSL/TLS handshake. You really want the
|
||||
error buffer and read the message there as it pinpoints the problem slightly
|
||||
more. Could be certificates (file formats, paths, permissions), passwords, and
|
||||
others.
|
||||
.TP
|
||||
.B CURLE_FTP_BAD_DOWNLOAD_RESUME (36)
|
||||
Attempting FTP resume beyond file size.
|
||||
.TP
|
||||
.B CURLE_FILE_COULDNT_READ_FILE (37)
|
||||
A file given with FILE:// couldn't be opened. Most likely because the file
|
||||
path doesn't identify an existing file. Did you check file permissions?
|
||||
.TP
|
||||
.B CURLE_LDAP_CANNOT_BIND (38)
|
||||
LDAP cannot bind. LDAP bind operation failed.
|
||||
.TP
|
||||
.B CURLE_LDAP_SEARCH_FAILED (39)
|
||||
LDAP search failed.
|
||||
.TP
|
||||
.B CURLE_LIBRARY_NOT_FOUND (40)
|
||||
Library not found. The LDAP library was not found.
|
||||
.TP
|
||||
.B CURLE_FUNCTION_NOT_FOUND (41)
|
||||
Function not found. A required LDAP function was not found.
|
||||
.TP
|
||||
.B CURLE_ABORTED_BY_CALLBACK (42)
|
||||
Aborted by callback. A callback returned "abort" to libcurl.
|
||||
.TP
|
||||
.B CURLE_BAD_FUNCTION_ARGUMENT (43)
|
||||
Internal error. A function was called with a bad parameter.
|
||||
.TP
|
||||
.B CURLE_BAD_CALLING_ORDER (44)
|
||||
Internal error. A function was called in a bad order.
|
||||
.TP
|
||||
.B CURLE_HTTP_PORT_FAILED (45)
|
||||
Interface error. A specified outgoing interface could not be used. Set which
|
||||
interface to use for outgoing connections' source IP address with
|
||||
CURLOPT_INTERFACE.
|
||||
.TP
|
||||
.B CURLE_BAD_PASSWORD_ENTERED (46)
|
||||
Bad password entered. An error was signaled when the password was
|
||||
entered. This can also be the result of a "bad password" returned from a
|
||||
specified password callback.
|
||||
.TP
|
||||
.B CURLE_TOO_MANY_REDIRECTS (47)
|
||||
Too many redirects. When following redirects, libcurl hit the maximum amount.
|
||||
Set your limit with CURLOPT_MAXREDIRS.
|
||||
.TP
|
||||
.B CURLE_UNKNOWN_TELNET_OPTION (48)
|
||||
An option set with CURLOPT_TELNETOPTIONS was not recognized/known. Refer to
|
||||
the appropriate documentation.
|
||||
.TP
|
||||
.B CURLE_TELNET_OPTION_SYNTAX (49)
|
||||
A telnet option string was Illegally formatted.
|
||||
.TP
|
||||
.B CURLE_OBSOLETE (50)
|
||||
This is not an error. This used to be another error code in an old libcurl
|
||||
version and is currently unused.
|
||||
.TP
|
||||
.B CURLE_SSL_PEER_CERTIFICATE (51)
|
||||
The remote server's SSL certificate was deemed not OK.
|
||||
.TP
|
||||
.B CURLE_GOT_NOTHING (52)
|
||||
Nothing was returned from the server, and under the circumstances, getting
|
||||
nothing is considered an error.
|
||||
.TP
|
||||
.B CURLE_SSL_ENGINE_NOTFOUND (53)
|
||||
The specified crypto engine wasn't found.
|
||||
.TP
|
||||
.B CURLE_SSL_ENGINE_SETFAILED (54)
|
||||
Failed setting the selected SSL crypto engine as default!
|
||||
.TP
|
||||
.B CURLE_SEND_ERROR (55)
|
||||
Failed sending network data.
|
||||
.TP
|
||||
.B CURLE_RECV_ERROR (56)
|
||||
Failure with receiving network data.
|
||||
.TP
|
||||
.B CURL_LAST
|
||||
This is not an error, but in the curl/curl.h file this can be used to know how
|
||||
many existing error codes there are.
|
||||
.RE
|
||||
|
||||
.SH "CURLMcode"
|
||||
This is the generic return code used by functions in the libcurl multi
|
||||
interface.
|
85
docs/libcurl/libcurl-multi.3
Normal file
85
docs/libcurl/libcurl-multi.3
Normal file
@@ -0,0 +1,85 @@
|
||||
.\" You can view this file with:
|
||||
.\" nroff -man [file]
|
||||
.\" $Id$
|
||||
.\"
|
||||
.TH libcurl-multi 5 "20 March 2001" "libcurl 7.9.5" "libcurl multi interface"
|
||||
.SH NAME
|
||||
libcurl-multi \- how to use the multi interface
|
||||
.SH DESCRIPTION
|
||||
This is an overview on how to use the libcurl multi interface in your C
|
||||
programs. There are specific man pages for each function mentioned in
|
||||
here. There's also the libcurl-the-guide document for a complete tutorial to
|
||||
programming with libcurl and the \fIlibcurl(3)\fP man page for an overview of
|
||||
the libcurl easy interface.
|
||||
|
||||
All functions in the multi interface are prefixed with curl_multi.
|
||||
.SH "PLEASE NOTICE"
|
||||
The multi interface is a rather new member of the libcurl family. It has not
|
||||
yet been very widely used. It may still be a few more bugs lurking in there
|
||||
than we are used to. That said, it might also just work in every aspect you
|
||||
try it. Please report all bugs and oddities you see.
|
||||
.SH "OBJECTIVES"
|
||||
The multi interface introduces several new abilities that the easy interface
|
||||
refuses to offer. They are mainly:
|
||||
|
||||
1. Enable a "pull" interface. The application that uses libcurl decides where
|
||||
and when to ask libcurl to get/send data.
|
||||
|
||||
2. Enable multiple simultaneous transfers in the same thread without making it
|
||||
complicated for the application.
|
||||
|
||||
3. Enable the application to select() on its own file descriptors and curl's
|
||||
file descriptors simultaneous easily.
|
||||
.SH "ONE MULTI HANDLE MANY EASY HANDLES"
|
||||
To use the multi interface, you must first create a 'multi handle' with
|
||||
\fIcurl_multi_init\fP. This handle is then used as input to all further
|
||||
curl_multi_* functions.
|
||||
|
||||
Each single transfer is built up with an easy handle. You must create them,
|
||||
and setup the appropriate options for each easy handle, as outlined in the
|
||||
\fIlibcurl(3)\fP man page.
|
||||
|
||||
When the easy handle is setup for a transfer, then instead of using
|
||||
\fIcurl_easy_perform\fP (as when using the easy interface for transfers), you
|
||||
should instead add the easy handle to the multi handle using
|
||||
\fIcurl_easy_add_handl\fP. The multi handle is sometimes referred to as a
|
||||
\'multi stack\' because of the fact that it may hold a large amount of easy
|
||||
handles.
|
||||
|
||||
Should you change your mind, the easy handle is again removed from the multi
|
||||
stack using \fIcurl_multi_remove_handle\fP. Once removed from the multi
|
||||
handle, you can again use other easy interface functions like
|
||||
curl_easy_perform or whatever you think is necessary.
|
||||
|
||||
Adding the easy handles to the multi handle does not start any
|
||||
transfer. Remember that one of the main ideas with this interface is to let
|
||||
your application drive. You drive the transfers by invoking
|
||||
\fIcurl_multi_perform\fP. libcurl will then transfer data if there is anything
|
||||
available to transfer. It'll use the callbacks and everything else you have
|
||||
setup in the individual easy handles. It'll transfer data on all current
|
||||
transfers in the multi stack that are ready to transfer anything. It may be
|
||||
all, it may be none.
|
||||
|
||||
Your application can acquire knowledge from libcurl when it would like to get
|
||||
invoked to transfer data, so that you don't have to busy-loop and call that
|
||||
\fIcurl_multi_perform\fP like a mad man! \fIcurl_multi_fdset\fP offers an
|
||||
interface using which you can extract fd_sets from libcurl to use in select()
|
||||
or poll() calls in order to get to know when the transfers in the multi stack
|
||||
might need attention. This also makes it very easy for your program to wait
|
||||
for input on your own private file descriptors at the same time or perhaps
|
||||
timeout every now and then, should you want that.
|
||||
|
||||
\fIcurl_multi_perform\fP stores the number of still running transfers in one
|
||||
of its input arguments, and by reading that you can figure out when all the
|
||||
transfers in the multi handles are done. 'done' does not mean successful. One
|
||||
or more of the transfers may have failed.
|
||||
|
||||
To get information about completed transfers, to figure out success or not and
|
||||
similar, \fIcurl_multi_info_read\fP should be called. It can return a message
|
||||
about a current or previous transfer. Repeated invokes of the function get
|
||||
more messages until the message queue is empty.
|
||||
|
||||
When all transfers in the multi stack are done, cleanup the multi handle with
|
||||
\fIcurl_multi_cleanup\fP. Be careful and please note that you \fBMUST\fP
|
||||
invoke separate \fIcurl_easy_cleanup\fP calls on every single easy handle to
|
||||
clean them up properly.
|
120
docs/libcurl/libcurl.3
Normal file
120
docs/libcurl/libcurl.3
Normal file
@@ -0,0 +1,120 @@
|
||||
.\" You can view this file with:
|
||||
.\" nroff -man [file]
|
||||
.\" $Id$
|
||||
.\"
|
||||
.TH libcurl 3 "19 March 2002" "libcurl 7.9.6" "libcurl overview"
|
||||
.SH NAME
|
||||
libcurl \- client-side URL transfers
|
||||
.SH DESCRIPTION
|
||||
This is an overview on how to use libcurl in your C programs. There are
|
||||
specific man pages for each function mentioned in here. There's also the
|
||||
libcurl-the-guide document for a complete tutorial to programming with
|
||||
libcurl.
|
||||
|
||||
There are a dozen custom bindings that bring libcurl access to your favourite
|
||||
language. Look elsewhere for documentation on those.
|
||||
|
||||
All applications that use libcurl should call \fIcurl_global_init()\fP exactly
|
||||
once before any libcurl function can be used. After all usage of libcurl is
|
||||
complete, it \fBmust\fP call \fIcurl_global_cleanup()\fP. In between those two
|
||||
calls, you can use libcurl as described below.
|
||||
|
||||
When using libcurl's "easy" interface you init your session and get a handle,
|
||||
which you use as input to the easy interface functions you use. Use
|
||||
\fIcurl_easy_init()\fP to get the handle. There is also the so called "multi"
|
||||
interface, try the \fIlibcurl-multi(3)\fP man page for an overview of that.
|
||||
|
||||
You continue by setting all the options you want in the upcoming transfer,
|
||||
most important among them is the URL itself (you can't transfer anything
|
||||
without a specified URL as you may have figured out yourself). You might want
|
||||
to set some callbacks as well that will be called from the library when data
|
||||
is available etc. \fIcurl_easy_setopt()\fP is there for this.
|
||||
|
||||
When all is setup, you tell libcurl to perform the transfer using
|
||||
\fIcurl_easy_perform()\fP. It will then do the entire operation and won't
|
||||
return until it is done (successfully or not).
|
||||
|
||||
After the transfer has been made, you can set new options and make another
|
||||
transfer, or if you're done, cleanup the session by calling
|
||||
\fIcurl_easy_cleanup()\fP. If you want persistant connections, you don't
|
||||
cleanup immediately, but instead run ahead and perform other transfers using
|
||||
the same handle. See the chapter below for Persistant Connections.
|
||||
|
||||
There is also a series of other helpful functions to use. They are:
|
||||
|
||||
.RS
|
||||
.TP 10
|
||||
.B curl_version()
|
||||
displays the libcurl version
|
||||
.TP
|
||||
.B curl_getdate()
|
||||
converts a date string to time_t
|
||||
.TP
|
||||
.B curl_getenv()
|
||||
portable environment variable reader
|
||||
.TP
|
||||
.B curl_easy_getinfo()
|
||||
get information about a performed transfer
|
||||
.TP
|
||||
.B curl_formadd()
|
||||
helps building a HTTP form POST
|
||||
.TP
|
||||
.B curl_formfree()
|
||||
free a list built with curl_formparse()/curl_formadd()
|
||||
.TP
|
||||
.B curl_slist_append()
|
||||
builds a linked list
|
||||
.TP
|
||||
.B curl_slist_free_all()
|
||||
frees a whole curl_slist
|
||||
.TP
|
||||
.B curl_mprintf()
|
||||
portable printf() functions
|
||||
.TP
|
||||
.B curl_strequal()
|
||||
portable case insensitive string comparisons
|
||||
.RE
|
||||
|
||||
.SH "LINKING WITH LIBCURL"
|
||||
On unix-like machines, there's a tool named curl-config that gets installed
|
||||
with the rest of the curl stuff when 'make install' is performed.
|
||||
|
||||
curl-config is added to make it easier for applications to link with libcurl
|
||||
and developers to learn about libcurl and how to use it.
|
||||
|
||||
Run 'curl-config --libs' to get the (additional) linker options you need to
|
||||
link with the particular version of libcurl you've installed.
|
||||
|
||||
For details, see the curl-config.1 man page.
|
||||
.SH "LIBCURL SYMBOL NAMES"
|
||||
All public functions in the libcurl interface are prefixed with 'curl_' (with
|
||||
a lowercase c). You can find other functions in the library source code, but
|
||||
other prefixes indicate the functions are private and may change without
|
||||
further notice in the next release.
|
||||
|
||||
Only use documented functions and functionality!
|
||||
.SH "PORTABILITY"
|
||||
libcurl works
|
||||
.B exactly
|
||||
the same, on any of the platforms it compiles and builds on.
|
||||
.SH "THREADS"
|
||||
Never ever call curl-functions simultaneously using the same handle from
|
||||
several threads. libcurl is thread-safe and can be used in any number of
|
||||
threads, but you must use separate curl handles if you want to use libcurl in
|
||||
more than one thread simultaneously.
|
||||
.SH "PERSISTANT CONNECTIONS"
|
||||
Persistent connections means that libcurl can re-use the same connection for
|
||||
several transfers, if the conditions are right.
|
||||
|
||||
libcurl will *always* attempt to use persistent connections. Whenever you use
|
||||
curl_easy_perform(), libcurl will attempt to use an existing connection to do
|
||||
the transfer, and if none exists it'll open a new one that will be subject for
|
||||
re-use on a possible following call to curl_easy_perform().
|
||||
|
||||
To allow libcurl to take full advantage of persistent connections, you should
|
||||
do as many of your file transfers as possible using the same curl handle. When
|
||||
you call curl_easy_cleanup(), all the possibly open connections held by
|
||||
libcurl will be closed and forgotten.
|
||||
|
||||
Note that the options set with curl_easy_setopt() will be used in on every
|
||||
repeat curl_easy_perform() call
|
@@ -3,5 +3,6 @@ pkginclude_HEADERS = \
|
||||
easy.h \
|
||||
mprintf.h \
|
||||
stdcheaders.h \
|
||||
types.h
|
||||
types.h \
|
||||
multi.h
|
||||
pkgincludedir= $(includedir)/curl
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user