Compare commits
792 Commits
curl-7_11_
...
curl-7_11_
Author | SHA1 | Date | |
---|---|---|---|
![]() |
c96f7f13da | ||
![]() |
1bdc4b2006 | ||
![]() |
3915fecf80 | ||
![]() |
f94f06825c | ||
![]() |
2ddbf8975a | ||
![]() |
68a3cbe384 | ||
![]() |
b9432d1296 | ||
![]() |
e202a29a9a | ||
![]() |
3755bffcc2 | ||
![]() |
2a0a305300 | ||
![]() |
70e2aadc18 | ||
![]() |
a1c8aaf666 | ||
![]() |
8ee470aaeb | ||
![]() |
37e4858cd0 | ||
![]() |
a27072bebb | ||
![]() |
47059f45fe | ||
![]() |
daced8041d | ||
![]() |
b053ae6a65 | ||
![]() |
42f60ecb36 | ||
![]() |
550862f41a | ||
![]() |
6838f74fe0 | ||
![]() |
2ff30d067c | ||
![]() |
84406b3e2c | ||
![]() |
c323969bdd | ||
![]() |
43cbbdbea0 | ||
![]() |
1d3f76df71 | ||
![]() |
33cb93ad0b | ||
![]() |
4dc9179f4b | ||
![]() |
26a5ec9aa0 | ||
![]() |
883ea3113c | ||
![]() |
62b7c08bb3 | ||
![]() |
a85fa66cc8 | ||
![]() |
9ba010c629 | ||
![]() |
3ef3f2b6f0 | ||
![]() |
1401d909e8 | ||
![]() |
3233322622 | ||
![]() |
e373f1fd73 | ||
![]() |
dc25cd6f3a | ||
![]() |
0e31d41d4e | ||
![]() |
b7a7600465 | ||
![]() |
111a2f3057 | ||
![]() |
760cecac8d | ||
![]() |
6f8b4395ec | ||
![]() |
5506f8767c | ||
![]() |
5887945828 | ||
![]() |
25e98179be | ||
![]() |
78ebe3fa5a | ||
![]() |
a8e8e51b14 | ||
![]() |
f97d194934 | ||
![]() |
4661cc7403 | ||
![]() |
bc11929395 | ||
![]() |
caf37bc92e | ||
![]() |
5de447b0cb | ||
![]() |
5dbaced4a2 | ||
![]() |
43f8a1f5de | ||
![]() |
f57efa1899 | ||
![]() |
592522ceaf | ||
![]() |
4f84e6d9e2 | ||
![]() |
6f08903f07 | ||
![]() |
220cd010bd | ||
![]() |
68e8a0f0d9 | ||
![]() |
b23dbf9f34 | ||
![]() |
1d0b5b507a | ||
![]() |
b83d8104cd | ||
![]() |
bf6e1053cf | ||
![]() |
c3dd928e29 | ||
![]() |
aba6c2b89d | ||
![]() |
9c0a386246 | ||
![]() |
bba3bb7556 | ||
![]() |
c1422864b5 | ||
![]() |
31a693b99a | ||
![]() |
804534fbc9 | ||
![]() |
1bc6532c16 | ||
![]() |
b48bf7470d | ||
![]() |
1ca9ce5ef4 | ||
![]() |
789f2ecbe7 | ||
![]() |
ee7d1d0701 | ||
![]() |
4e3aa250c4 | ||
![]() |
3647a6ddcd | ||
![]() |
79aaa85a51 | ||
![]() |
392a543eff | ||
![]() |
eb6345de60 | ||
![]() |
0fd3b7a00a | ||
![]() |
bd51b80fa5 | ||
![]() |
15c900839b | ||
![]() |
2fd463e979 | ||
![]() |
de8660a96a | ||
![]() |
1e9cb272f1 | ||
![]() |
72b1144b8c | ||
![]() |
348fe0e210 | ||
![]() |
cf1f46e1ca | ||
![]() |
f052cbee19 | ||
![]() |
1f5e8670e1 | ||
![]() |
3b491d0f73 | ||
![]() |
26a2b8d26d | ||
![]() |
a7fd6f9007 | ||
![]() |
8ed44e8dfb | ||
![]() |
f617c1131a | ||
![]() |
5ca47f19d7 | ||
![]() |
9044fcbb5f | ||
![]() |
7a82810b59 | ||
![]() |
0ccdf3d0e6 | ||
![]() |
ca7f0852df | ||
![]() |
780b962336 | ||
![]() |
bbeb840916 | ||
![]() |
f4ec465bfc | ||
![]() |
57c86a953d | ||
![]() |
0fff8656e9 | ||
![]() |
7b929636ee | ||
![]() |
76835a2e00 | ||
![]() |
1b171b02ac | ||
![]() |
a8dc362572 | ||
![]() |
7c72f8ee6c | ||
![]() |
c39a54609b | ||
![]() |
ce6b767b47 | ||
![]() |
7ba4d3464f | ||
![]() |
03def138fe | ||
![]() |
9d99af5329 | ||
![]() |
c8d850dbad | ||
![]() |
01ea357744 | ||
![]() |
ad9e83a90f | ||
![]() |
6c9d96e811 | ||
![]() |
f840e5192c | ||
![]() |
ba9272dd05 | ||
![]() |
675db3a211 | ||
![]() |
1fc7ff878e | ||
![]() |
b643d148b1 | ||
![]() |
5804c995e1 | ||
![]() |
13a6f85320 | ||
![]() |
8b4582f111 | ||
![]() |
cd3bf7c56f | ||
![]() |
ee1595dcd5 | ||
![]() |
310086deed | ||
![]() |
5d27f50f2f | ||
![]() |
9d0330d5bd | ||
![]() |
d5074f74bb | ||
![]() |
ea0cf7c87b | ||
![]() |
a56164c8e0 | ||
![]() |
cd95bb22ea | ||
![]() |
1745ecd8ac | ||
![]() |
75d66b9c62 | ||
![]() |
2ff9f55001 | ||
![]() |
ce446dbdc2 | ||
![]() |
dd2add82ee | ||
![]() |
40d9855df2 | ||
![]() |
ecf7adba15 | ||
![]() |
931c847e2b | ||
![]() |
8230d9bff8 | ||
![]() |
64cc14e9e6 | ||
![]() |
d5b8971ff3 | ||
![]() |
7ea837a18c | ||
![]() |
b8b8473b6d | ||
![]() |
894dbae455 | ||
![]() |
2c11425868 | ||
![]() |
a2ea0abf7f | ||
![]() |
be8f8e66a4 | ||
![]() |
9fadfffb9d | ||
![]() |
76f23acfa1 | ||
![]() |
6950aeafcc | ||
![]() |
cd160a66c9 | ||
![]() |
a7376968d2 | ||
![]() |
fd96a2af34 | ||
![]() |
a90cd1a45c | ||
![]() |
8e92600ddd | ||
![]() |
5e75c310ba | ||
![]() |
20cab07c29 | ||
![]() |
f466d7a6f1 | ||
![]() |
dc46f535ae | ||
![]() |
27fd5d6d6a | ||
![]() |
18a3c3302f | ||
![]() |
97959a00d7 | ||
![]() |
5e92b2906b | ||
![]() |
126ed14313 | ||
![]() |
712d0374f7 | ||
![]() |
4b49b2e3cf | ||
![]() |
d85c21994f | ||
![]() |
6b33a5f954 | ||
![]() |
ed22afe5fb | ||
![]() |
843391c745 | ||
![]() |
ad6699e0c4 | ||
![]() |
43137cf595 | ||
![]() |
db6dc49b0b | ||
![]() |
593170d1de | ||
![]() |
0eace2fefe | ||
![]() |
abd65e21c6 | ||
![]() |
e21104a865 | ||
![]() |
3ecf63fa66 | ||
![]() |
762dcf0780 | ||
![]() |
75ee9b5333 | ||
![]() |
e161bdc5be | ||
![]() |
bb3d6e8552 | ||
![]() |
189c2f4989 | ||
![]() |
f28389c87b | ||
![]() |
7461592a16 | ||
![]() |
50b0e72f7b | ||
![]() |
76e73cfec8 | ||
![]() |
5d8ec172a6 | ||
![]() |
0953140b53 | ||
![]() |
6c2825997a | ||
![]() |
accc6eb91a | ||
![]() |
eab8cdc640 | ||
![]() |
dc9d0f256d | ||
![]() |
b60d6404d8 | ||
![]() |
08fe4b3210 | ||
![]() |
0e60a118d0 | ||
![]() |
4b78b4124e | ||
![]() |
0d6d9af7ab | ||
![]() |
41cd36b830 | ||
![]() |
242be55771 | ||
![]() |
7cf47ea5b5 | ||
![]() |
6fb0012833 | ||
![]() |
9d1ce9c0df | ||
![]() |
5947e4e9fd | ||
![]() |
e992aa6a54 | ||
![]() |
2cf218610e | ||
![]() |
fe6f0aeb26 | ||
![]() |
bd04c6fb67 | ||
![]() |
c5637baa06 | ||
![]() |
f8426a2c44 | ||
![]() |
0c791d1e76 | ||
![]() |
c4a89d29f6 | ||
![]() |
306ff5649a | ||
![]() |
1c652dfc5d | ||
![]() |
1f61e7f8f4 | ||
![]() |
1a5f190e47 | ||
![]() |
570033448c | ||
![]() |
f44b655513 | ||
![]() |
0aa720fa26 | ||
![]() |
d44f3f84f8 | ||
![]() |
d426db3d27 | ||
![]() |
0fd88d7c8f | ||
![]() |
4e84ac4db8 | ||
![]() |
da5c8a121f | ||
![]() |
76c36688d0 | ||
![]() |
651c8d3bc4 | ||
![]() |
a8a946d71d | ||
![]() |
c5c005609e | ||
![]() |
97886f9353 | ||
![]() |
a784bd0797 | ||
![]() |
4aacf65678 | ||
![]() |
dd1ba7633e | ||
![]() |
a4ea5a4054 | ||
![]() |
69060b1382 | ||
![]() |
a6562ea77d | ||
![]() |
ad3563096a | ||
![]() |
c5f02c1986 | ||
![]() |
7ef5d20cad | ||
![]() |
98b619c3a7 | ||
![]() |
5b75919f95 | ||
![]() |
20b76e09e3 | ||
![]() |
67fca4cb01 | ||
![]() |
606715b2cd | ||
![]() |
ce04b35032 | ||
![]() |
ec7f244ee9 | ||
![]() |
a5b206f398 | ||
![]() |
306a05f9ff | ||
![]() |
81f8350616 | ||
![]() |
760ca6adc4 | ||
![]() |
ffb35ff5c3 | ||
![]() |
8eda06131b | ||
![]() |
5b55f9ecb3 | ||
![]() |
3417e0b0fc | ||
![]() |
79ed144b0f | ||
![]() |
8e5cf6589c | ||
![]() |
fc67cca882 | ||
![]() |
eea2287068 | ||
![]() |
5fe5de7511 | ||
![]() |
4a6b9972dd | ||
![]() |
256a16a8a3 | ||
![]() |
30e0891d3d | ||
![]() |
8147ccdf76 | ||
![]() |
26ab286630 | ||
![]() |
738807883e | ||
![]() |
03a0988ce8 | ||
![]() |
7de892eeb4 | ||
![]() |
8c4e91a653 | ||
![]() |
8f77030473 | ||
![]() |
546d0bd3d1 | ||
![]() |
5d53b544d3 | ||
![]() |
6dc8fac122 | ||
![]() |
8114f8562b | ||
![]() |
c79fa187b9 | ||
![]() |
237ec68b0e | ||
![]() |
4ebf4f6e55 | ||
![]() |
4d86593f3c | ||
![]() |
ec050ccbc4 | ||
![]() |
f19cade50f | ||
![]() |
a2f35aaf67 | ||
![]() |
e5c4b6b345 | ||
![]() |
bad978feb2 | ||
![]() |
bea9152aa8 | ||
![]() |
f788f988ea | ||
![]() |
d04ffd258b | ||
![]() |
24cfa7f1bb | ||
![]() |
94a1d09ac7 | ||
![]() |
230a75091b | ||
![]() |
4ad68ec305 | ||
![]() |
ef776ab893 | ||
![]() |
f8ff0f6bef | ||
![]() |
bc7122f6e2 | ||
![]() |
e5963dae48 | ||
![]() |
1ebda8fa0e | ||
![]() |
9af532e662 | ||
![]() |
9d064a3927 | ||
![]() |
d6edcfb486 | ||
![]() |
1d5a914c1c | ||
![]() |
666bc9ee4e | ||
![]() |
e545e33d5f | ||
![]() |
326e8b9fc1 | ||
![]() |
0d1fc73f21 | ||
![]() |
50a1853560 | ||
![]() |
35e158d80b | ||
![]() |
7225b14002 | ||
![]() |
85838a8966 | ||
![]() |
d29590f583 | ||
![]() |
467c3e3a1f | ||
![]() |
b484b3b696 | ||
![]() |
b45d50ccc2 | ||
![]() |
78e0ba82b0 | ||
![]() |
c39c55cb2d | ||
![]() |
cf004cbc7e | ||
![]() |
9948250723 | ||
![]() |
47afa058a8 | ||
![]() |
40e892bb36 | ||
![]() |
bc6f3beb9c | ||
![]() |
f9e1f32adb | ||
![]() |
93f96835f8 | ||
![]() |
22f4d81f3e | ||
![]() |
0d1f80ccb5 | ||
![]() |
4e87dd89bf | ||
![]() |
60e4b57ad8 | ||
![]() |
ce5805a955 | ||
![]() |
dad0715d79 | ||
![]() |
52d85341ae | ||
![]() |
7b2869338d | ||
![]() |
ab35b2837f | ||
![]() |
863473a856 | ||
![]() |
be6af69dc7 | ||
![]() |
3a80dc7f3e | ||
![]() |
bd42a2acb1 | ||
![]() |
7f0e708322 | ||
![]() |
8cbfe5d24a | ||
![]() |
bab9f532f2 | ||
![]() |
09cce943cb | ||
![]() |
702021e099 | ||
![]() |
e94c46c00c | ||
![]() |
9d311ff2c0 | ||
![]() |
108434b95c | ||
![]() |
c30cb73a5b | ||
![]() |
b7c56594b3 | ||
![]() |
2b700fae9d | ||
![]() |
ef783d8da7 | ||
![]() |
a4f1833629 | ||
![]() |
2c756fa1d7 | ||
![]() |
385086b460 | ||
![]() |
72a4715dff | ||
![]() |
7e6043f04f | ||
![]() |
576be36249 | ||
![]() |
c52c592f4c | ||
![]() |
d9ffd2f544 | ||
![]() |
a684c51c9b | ||
![]() |
3fa4ac080e | ||
![]() |
9c8b2a9958 | ||
![]() |
498666bdc3 | ||
![]() |
3d3612e252 | ||
![]() |
e9920d8a04 | ||
![]() |
acc5096eef | ||
![]() |
6717240650 | ||
![]() |
ef0a2c714b | ||
![]() |
2cd6403011 | ||
![]() |
75e1483e0d | ||
![]() |
8a4532ca2d | ||
![]() |
13f98c5c18 | ||
![]() |
30e71d54e0 | ||
![]() |
465753c2de | ||
![]() |
e40392ac03 | ||
![]() |
1eb9fd6c4d | ||
![]() |
78e47fbb5c | ||
![]() |
2b59e90c54 | ||
![]() |
59a30e6d9b | ||
![]() |
e0287fea20 | ||
![]() |
4fbf3f16e2 | ||
![]() |
de6433d5c2 | ||
![]() |
23ef66f33a | ||
![]() |
2479e06848 | ||
![]() |
f2abe03fcf | ||
![]() |
5e7f1a0eaf | ||
![]() |
eb9383d49b | ||
![]() |
817d17354e | ||
![]() |
88e226c686 | ||
![]() |
9116dd41bd | ||
![]() |
213d64fbd7 | ||
![]() |
a8419d68b6 | ||
![]() |
87a1c7033e | ||
![]() |
6e3fa90c9e | ||
![]() |
b2ef40731a | ||
![]() |
e2f7030202 | ||
![]() |
533519cc9c | ||
![]() |
7c85be9435 | ||
![]() |
89829093ca | ||
![]() |
7cb10a1853 | ||
![]() |
33d67c68de | ||
![]() |
e46b5719f2 | ||
![]() |
353f764119 | ||
![]() |
9f437269fb | ||
![]() |
45391178c9 | ||
![]() |
eddeb49fb6 | ||
![]() |
7ab3b5b3bb | ||
![]() |
00d5f886e3 | ||
![]() |
49daeaf805 | ||
![]() |
d03fbf5dfb | ||
![]() |
cb72a80fe0 | ||
![]() |
71d81f1f75 | ||
![]() |
b0c51d198c | ||
![]() |
71335e5b99 | ||
![]() |
c9b23ca055 | ||
![]() |
7983ec84a7 | ||
![]() |
8cb2a68694 | ||
![]() |
485122035c | ||
![]() |
5c4dba1418 | ||
![]() |
d6eb28400b | ||
![]() |
526c61c657 | ||
![]() |
fd6ec05916 | ||
![]() |
6789dfc5f5 | ||
![]() |
193a652e6a | ||
![]() |
4d12be9867 | ||
![]() |
87e7f4f688 | ||
![]() |
5eeaff8235 | ||
![]() |
7d2e872828 | ||
![]() |
097938e6c8 | ||
![]() |
d57b84e290 | ||
![]() |
fcc07bed90 | ||
![]() |
43bda5cd17 | ||
![]() |
45c7f064d4 | ||
![]() |
4dfc0a78e7 | ||
![]() |
82bd583251 | ||
![]() |
78f52c05a9 | ||
![]() |
d818cbe58c | ||
![]() |
4ae4336643 | ||
![]() |
25bcd45034 | ||
![]() |
f53d6e1c39 | ||
![]() |
17a3aa1ddc | ||
![]() |
6c78b4b7c0 | ||
![]() |
2b634be467 | ||
![]() |
c5b8e446f6 | ||
![]() |
7bd55dc17c | ||
![]() |
009cd96490 | ||
![]() |
d0242da304 | ||
![]() |
ab44763cb7 | ||
![]() |
3a80bb0a09 | ||
![]() |
77268e0649 | ||
![]() |
1ceb77b4dc | ||
![]() |
3430ce7907 | ||
![]() |
4ba7ef34d1 | ||
![]() |
4515d06465 | ||
![]() |
b6a4ca9bc8 | ||
![]() |
9b6350d0b0 | ||
![]() |
07de0ff0ff | ||
![]() |
7d8cd5906c | ||
![]() |
1056d2d22d | ||
![]() |
d571064b65 | ||
![]() |
33eaf2e18b | ||
![]() |
a054e5baf3 | ||
![]() |
85af357d81 | ||
![]() |
d687eed33e | ||
![]() |
38b6016dfa | ||
![]() |
be2cdf14f3 | ||
![]() |
0943f33438 | ||
![]() |
4427d91479 | ||
![]() |
0c03ed6013 | ||
![]() |
0c3c1b390a | ||
![]() |
9b09193cfd | ||
![]() |
b2cff76722 | ||
![]() |
37817667e2 | ||
![]() |
f9b2b7940e | ||
![]() |
5168b32f86 | ||
![]() |
0373758359 | ||
![]() |
df94c7aedc | ||
![]() |
6bd2de0c42 | ||
![]() |
82c31256e1 | ||
![]() |
403cbbe0c4 | ||
![]() |
9a7e3437ae | ||
![]() |
4fa58560bf | ||
![]() |
be62b27ce2 | ||
![]() |
3be66f3a03 | ||
![]() |
089bdaed00 | ||
![]() |
0d3674129f | ||
![]() |
fce6783be4 | ||
![]() |
48bc26e7e3 | ||
![]() |
f128fae705 | ||
![]() |
800fa31b65 | ||
![]() |
2ae4420869 | ||
![]() |
8ba042cf88 | ||
![]() |
7adf43c1c5 | ||
![]() |
d007e5615c | ||
![]() |
888eec833c | ||
![]() |
2911e63bc2 | ||
![]() |
34d247bc4e | ||
![]() |
99bc7e5fd3 | ||
![]() |
0b1f7995c5 | ||
![]() |
f35c28214e | ||
![]() |
35fd1365ae | ||
![]() |
f493081004 | ||
![]() |
e1b5e15431 | ||
![]() |
1aba4c519b | ||
![]() |
ae76a67566 | ||
![]() |
76241d0a02 | ||
![]() |
89227a9d75 | ||
![]() |
dfb5090e0f | ||
![]() |
c7fe8a7a11 | ||
![]() |
7174ca7a20 | ||
![]() |
2e61fde07f | ||
![]() |
41263f7d88 | ||
![]() |
02095ba0e1 | ||
![]() |
32a678eab3 | ||
![]() |
bd7ba3bde6 | ||
![]() |
0ffec4272a | ||
![]() |
ea4cd4d8aa | ||
![]() |
c7775c59bf | ||
![]() |
243bd5bbb4 | ||
![]() |
4bde770169 | ||
![]() |
9af7e46f72 | ||
![]() |
7d844c430c | ||
![]() |
4f953b6459 | ||
![]() |
44995d6877 | ||
![]() |
2ebc821558 | ||
![]() |
907bb78f3e | ||
![]() |
b2e1bf7e7d | ||
![]() |
7173a0f7b6 | ||
![]() |
a49bebc74e | ||
![]() |
8777ba7e42 | ||
![]() |
a39669198f | ||
![]() |
2c0c75e345 | ||
![]() |
236337ce86 | ||
![]() |
224ccc780a | ||
![]() |
ccde85d198 | ||
![]() |
9e7657d6ed | ||
![]() |
7ac455fca3 | ||
![]() |
e295cd759c | ||
![]() |
a472cd9310 | ||
![]() |
8794cb286b | ||
![]() |
455b1af214 | ||
![]() |
d765a00adb | ||
![]() |
de37308722 | ||
![]() |
7729c63be0 | ||
![]() |
eebcf90942 | ||
![]() |
fa8ecd3d53 | ||
![]() |
134cb66129 | ||
![]() |
349a15b089 | ||
![]() |
c14fa2c935 | ||
![]() |
6ca7af3419 | ||
![]() |
afa5924487 | ||
![]() |
bd63a557f3 | ||
![]() |
49aa798082 | ||
![]() |
c6e5b67197 | ||
![]() |
e7050f97c4 | ||
![]() |
b28f3d43bf | ||
![]() |
edd467a12c | ||
![]() |
0bf1bd51c4 | ||
![]() |
4cf70e3069 | ||
![]() |
9efddfedab | ||
![]() |
4b11e19f26 | ||
![]() |
de681d3b8f | ||
![]() |
f33be3c313 | ||
![]() |
62a12b7faf | ||
![]() |
e75ab79bdb | ||
![]() |
abd7e32c66 | ||
![]() |
e2b6a45cfa | ||
![]() |
e0c0b2ba7d | ||
![]() |
debbcf81bb | ||
![]() |
8300a880cc | ||
![]() |
420bbd2e08 | ||
![]() |
d87981e4c1 | ||
![]() |
59091fa860 | ||
![]() |
dc659ec736 | ||
![]() |
09aa165942 | ||
![]() |
f2fbb5f3d5 | ||
![]() |
29bedfcf7f | ||
![]() |
ccdaa0b51f | ||
![]() |
f516734941 | ||
![]() |
d53d33698c | ||
![]() |
39926181ea | ||
![]() |
8415b4a271 | ||
![]() |
e4916145ef | ||
![]() |
3ec605de67 | ||
![]() |
a7e04cac78 | ||
![]() |
8ddc18a4f9 | ||
![]() |
0d3aa8b7be | ||
![]() |
496bbceef1 | ||
![]() |
901edd32b5 | ||
![]() |
0612c275a7 | ||
![]() |
f3d91528a1 | ||
![]() |
f7fae23546 | ||
![]() |
2d41efb71e | ||
![]() |
7abf2f44ec | ||
![]() |
3a36d4fdea | ||
![]() |
12b71e422f | ||
![]() |
d25a0a1bc8 | ||
![]() |
4d17e77532 | ||
![]() |
6a921197e2 | ||
![]() |
fa57a8a78e | ||
![]() |
eb4d65d0ba | ||
![]() |
e7d9ea8919 | ||
![]() |
372b141d5b | ||
![]() |
115e74a8ad | ||
![]() |
1b26fe39f9 | ||
![]() |
4674f3f115 | ||
![]() |
d8a1415646 | ||
![]() |
773e7e871e | ||
![]() |
1d937d62c0 | ||
![]() |
f3663a9d0f | ||
![]() |
199b2f4602 | ||
![]() |
49ab1d914c | ||
![]() |
f9a6e7b68d | ||
![]() |
5d64d657de | ||
![]() |
52caba0417 | ||
![]() |
ad1a70205f | ||
![]() |
d57eed6f22 | ||
![]() |
a3d39efa3b | ||
![]() |
50efb8f33e | ||
![]() |
ad75360ec7 | ||
![]() |
7f29bf61e2 | ||
![]() |
9ca395fded | ||
![]() |
68e140b2eb | ||
![]() |
283f68f660 | ||
![]() |
e6947f99ed | ||
![]() |
93e32e6f62 | ||
![]() |
f8a5ec1380 | ||
![]() |
2d0b2f294f | ||
![]() |
08e286ed68 | ||
![]() |
220caed248 | ||
![]() |
6eb0b5b917 | ||
![]() |
3bdc883c93 | ||
![]() |
cc85f813d1 | ||
![]() |
e723d2eb7c | ||
![]() |
b440c6638f | ||
![]() |
648c5b05c0 | ||
![]() |
011929cf4d | ||
![]() |
7f679c3da3 | ||
![]() |
3e4cd0b422 | ||
![]() |
fc4f777b42 | ||
![]() |
208a31f549 | ||
![]() |
e565631afe | ||
![]() |
9f2780a2ee | ||
![]() |
1a6969a887 | ||
![]() |
f56d753507 | ||
![]() |
e5165af5a6 | ||
![]() |
83e878420a | ||
![]() |
58a5f485db | ||
![]() |
e8fb77fac3 | ||
![]() |
d292088a83 | ||
![]() |
de100f8b51 | ||
![]() |
1cb2306ae0 | ||
![]() |
cc90a235f4 | ||
![]() |
e97ce57d0b | ||
![]() |
dc753b8315 | ||
![]() |
a5c4442ebf | ||
![]() |
a271cfb697 | ||
![]() |
6dffe9702d | ||
![]() |
f71139750d | ||
![]() |
690b3e58b2 | ||
![]() |
0c7cb0c10f | ||
![]() |
4816294f52 | ||
![]() |
6587ff440a | ||
![]() |
791e49134b | ||
![]() |
9254c3a103 | ||
![]() |
9c95ebcbe7 | ||
![]() |
3a4ed71b88 | ||
![]() |
d6d312d550 | ||
![]() |
1fa163fdf7 | ||
![]() |
82b27d1b97 | ||
![]() |
f7dee3b846 | ||
![]() |
a7b5045598 | ||
![]() |
b7fda8ec73 | ||
![]() |
3d7f4c0d77 | ||
![]() |
01771e50a1 | ||
![]() |
c23cf6a058 | ||
![]() |
79f9914af8 | ||
![]() |
803fb123cb | ||
![]() |
97728f5b1c | ||
![]() |
36d5f30b8c | ||
![]() |
e82a575894 | ||
![]() |
773a8fe598 | ||
![]() |
fa1c0d4a56 | ||
![]() |
7e01548d46 | ||
![]() |
14b36a8cba | ||
![]() |
1089d91e77 | ||
![]() |
556b68f44e | ||
![]() |
3f37ae471d | ||
![]() |
9f4e682ca9 | ||
![]() |
5fc8d4da45 | ||
![]() |
4af66b70fc | ||
![]() |
95dd343244 | ||
![]() |
e449aab0af | ||
![]() |
3a0192bea6 | ||
![]() |
37685848d1 | ||
![]() |
0412a201a3 | ||
![]() |
ca522d4787 | ||
![]() |
c2967c3c39 | ||
![]() |
70d7a9e6a5 | ||
![]() |
462d1c5231 | ||
![]() |
886391d145 | ||
![]() |
1442fab4b6 | ||
![]() |
aa93e2e638 | ||
![]() |
e1d541086c | ||
![]() |
3b0f52205d | ||
![]() |
b84eaff1d5 | ||
![]() |
9eb6fc1fb6 | ||
![]() |
253f5f1a9a | ||
![]() |
dd1f495c2f | ||
![]() |
12fa877f00 | ||
![]() |
580a2fe72b | ||
![]() |
7f0ec86769 | ||
![]() |
5e69ca0ebd | ||
![]() |
b6592e29a4 | ||
![]() |
4cba2ea1ad | ||
![]() |
14cb9d296c | ||
![]() |
df750c236c | ||
![]() |
154c9bc3b8 | ||
![]() |
508ad2c92f | ||
![]() |
36a90aeaec | ||
![]() |
f385b1976e | ||
![]() |
3d99b566a6 | ||
![]() |
99a3e2d769 | ||
![]() |
aaa42735e6 | ||
![]() |
50c80a49cc | ||
![]() |
6b7f169b10 | ||
![]() |
01e3bb98b5 | ||
![]() |
7052598e59 | ||
![]() |
ab52e20832 | ||
![]() |
f50678eda7 | ||
![]() |
3ded81188b | ||
![]() |
a435151735 | ||
![]() |
bfe5568c85 | ||
![]() |
7e45a1ac53 | ||
![]() |
76a51ef4b3 | ||
![]() |
fc7c4d6157 | ||
![]() |
4d17d6876e | ||
![]() |
0d6236f7e1 | ||
![]() |
0e4e72f193 | ||
![]() |
107413c021 | ||
![]() |
d7579087f2 | ||
![]() |
3415ac3866 | ||
![]() |
d50b209a7a | ||
![]() |
62e0f10eba | ||
![]() |
0b2b7439fe | ||
![]() |
edcd1981ea | ||
![]() |
ada9a9f4a1 | ||
![]() |
1c0e4f1178 | ||
![]() |
663d2080d1 | ||
![]() |
e5641a33bb | ||
![]() |
9b24c9a754 | ||
![]() |
99b96d5446 | ||
![]() |
cf7817eb38 | ||
![]() |
9bca9681ba | ||
![]() |
958987c214 | ||
![]() |
ed75842df0 | ||
![]() |
f35398e414 | ||
![]() |
3b39cee785 | ||
![]() |
dc932f739a | ||
![]() |
7d15651115 | ||
![]() |
e096072745 | ||
![]() |
5d947e973e | ||
![]() |
2465ff991f | ||
![]() |
d10a941d29 | ||
![]() |
5a58d51993 | ||
![]() |
142f40582f | ||
![]() |
4227407438 | ||
![]() |
6e29f5d1df | ||
![]() |
334c3df09d | ||
![]() |
4120b7b0c0 | ||
![]() |
fac1c13895 | ||
![]() |
649caa1953 | ||
![]() |
d8ee927be2 | ||
![]() |
3efb90dd75 | ||
![]() |
e4c5653035 | ||
![]() |
ad7e26b140 | ||
![]() |
f39749cee4 | ||
![]() |
87eb26a33d | ||
![]() |
9a48ca69fc | ||
![]() |
a259f66fa4 | ||
![]() |
83d77dc013 | ||
![]() |
e36914a425 | ||
![]() |
5bd0471315 | ||
![]() |
b791e158f0 | ||
![]() |
6cd0a90b52 | ||
![]() |
d5bb877fba | ||
![]() |
0c4907afcc | ||
![]() |
e5cd0cc402 | ||
![]() |
252423a725 | ||
![]() |
eaddf3d198 | ||
![]() |
a37a79c2a9 |
1572
CHANGES.2003
Normal file
1572
CHANGES.2003
Normal file
File diff suppressed because it is too large
Load Diff
10
CVS-INFO
10
CVS-INFO
@@ -25,7 +25,8 @@ Compile and build instructions follow below.
|
|||||||
|
|
||||||
perl/ is a subdirectory with various perl scripts
|
perl/ is a subdirectory with various perl scripts
|
||||||
|
|
||||||
To build after having extracted everything from CVS, do this:
|
To build in environments that support configure, after having extracted
|
||||||
|
everything from CVS, do this:
|
||||||
|
|
||||||
./buildconf
|
./buildconf
|
||||||
./configure
|
./configure
|
||||||
@@ -35,10 +36,15 @@ make
|
|||||||
|
|
||||||
./configure --disable-shared --enable-debug --enable-maintainer-mode
|
./configure --disable-shared --enable-debug --enable-maintainer-mode
|
||||||
|
|
||||||
|
In environments that don't support configure (i.e. Microsoft), do this:
|
||||||
|
|
||||||
|
buildconf.bat
|
||||||
|
|
||||||
|
|
||||||
REQUIREMENTS
|
REQUIREMENTS
|
||||||
|
|
||||||
You need the following software installed:
|
For buildconf (not buildconf.bat) to work, you need the following software
|
||||||
|
installed:
|
||||||
|
|
||||||
o autoconf 2.57 (or later)
|
o autoconf 2.57 (or later)
|
||||||
o automake 1.7 (or later)
|
o automake 1.7 (or later)
|
||||||
|
@@ -24,8 +24,7 @@
|
|||||||
AUTOMAKE_OPTIONS = foreign
|
AUTOMAKE_OPTIONS = foreign
|
||||||
|
|
||||||
EXTRA_DIST = CHANGES COPYING maketgz reconf Makefile.dist \
|
EXTRA_DIST = CHANGES COPYING maketgz reconf Makefile.dist \
|
||||||
curl-config.in build_vms.com curl-style.el sample.emacs testcurl.sh \
|
curl-config.in curl-style.el sample.emacs testcurl.sh RELEASE-NOTES
|
||||||
RELEASE-NOTES
|
|
||||||
|
|
||||||
bin_SCRIPTS = curl-config
|
bin_SCRIPTS = curl-config
|
||||||
|
|
||||||
|
@@ -43,27 +43,27 @@ mingw32-ssl:
|
|||||||
|
|
||||||
vc:
|
vc:
|
||||||
cd lib
|
cd lib
|
||||||
nmake -f Makefile.vc6 cfg=release
|
nmake /f Makefile.vc6 cfg=release
|
||||||
cd ..\src
|
cd ..\src
|
||||||
nmake -f Makefile.vc6
|
nmake /f Makefile.vc6
|
||||||
|
|
||||||
vc-ssl:
|
vc-ssl:
|
||||||
cd lib
|
cd lib
|
||||||
nmake -f Makefile.vc6 cfg=release-ssl
|
nmake /f Makefile.vc6 cfg=release-ssl
|
||||||
cd ..\src
|
cd ..\src
|
||||||
nmake -f Makefile.vc6 cfg=release-ssl
|
nmake /f Makefile.vc6 cfg=release-ssl
|
||||||
|
|
||||||
vc-ssl-dll:
|
vc-ssl-dll:
|
||||||
cd lib
|
cd lib
|
||||||
nmake -f Makefile.vc6 cfg=release-ssl-dll
|
nmake /f Makefile.vc6 cfg=release-ssl-dll
|
||||||
cd ..\src
|
cd ..\src
|
||||||
nmake -f Makefile.vc6
|
nmake /f Makefile.vc6
|
||||||
|
|
||||||
vc-libcurl-ssl-dll:
|
vc-libcurl-ssl-dll:
|
||||||
cd lib
|
cd lib
|
||||||
nmake -f Makefile.vc6 cfg=release-libcurl-ssl-dll
|
nmake /f Makefile.vc6 cfg=release-libcurl-ssl-dll
|
||||||
cd ..\src
|
cd ..\src
|
||||||
nmake -f Makefile.vc6
|
nmake /f Makefile.vc6
|
||||||
|
|
||||||
djgpp:
|
djgpp:
|
||||||
make -C lib -f Makefile.dj
|
make -C lib -f Makefile.dj
|
||||||
@@ -81,7 +81,9 @@ amiga:
|
|||||||
cd ./lib && make -f makefile.amiga
|
cd ./lib && make -f makefile.amiga
|
||||||
cd ./src && make -f makefile.amiga
|
cd ./src && make -f makefile.amiga
|
||||||
|
|
||||||
|
netware:
|
||||||
|
cd lib && make -f Makefile.netware
|
||||||
|
cd src && make -f Makefile.netware
|
||||||
|
|
||||||
unix: all
|
unix: all
|
||||||
|
|
||||||
|
17
README
17
README
@@ -32,25 +32,30 @@ WEB SITE
|
|||||||
|
|
||||||
Sweden -- http://curl.haxx.se/
|
Sweden -- http://curl.haxx.se/
|
||||||
Australia -- http://curl.planetmirror.com/
|
Australia -- http://curl.planetmirror.com/
|
||||||
|
Denmark -- http://curl.cofman.dk/
|
||||||
|
Estonia -- http://curl.wildyou.net/
|
||||||
Germany -- http://curl.mirror.at.stealer.net/
|
Germany -- http://curl.mirror.at.stealer.net/
|
||||||
|
Germany -- http://curl.netmirror.org/
|
||||||
Russia -- http://curl.tsuren.net/
|
Russia -- http://curl.tsuren.net/
|
||||||
Thailand -- http://curl.siamu.ac.th/
|
Thailand -- http://curl.siamu.ac.th/
|
||||||
US (CA) -- http://curl.mirror.redwire.net/
|
US (CA) -- http://curl.mirror.redwire.net/
|
||||||
US (TX) -- http://curl.cyberservers.net/
|
US -- http://curl.signal42.com/
|
||||||
|
|
||||||
DOWNLOAD
|
DOWNLOAD
|
||||||
|
|
||||||
The official download mirror sites are:
|
The official download mirror sites are:
|
||||||
|
|
||||||
Australia -- http://curl.planetmirror.com/download/
|
Australia -- http://curl.planetmirror.com/download.html
|
||||||
|
Estonia -- http://curl.wildyou.net/download.html
|
||||||
Germany -- ftp://ftp.fu-berlin.de/pub/unix/network/curl/
|
Germany -- ftp://ftp.fu-berlin.de/pub/unix/network/curl/
|
||||||
|
Germany -- http://curl.mirror.at.stealer.net/download.html
|
||||||
|
Germany -- http://curl.netmirror.org/download.html
|
||||||
Hongkong -- http://www.execve.net/curl/
|
Hongkong -- http://www.execve.net/curl/
|
||||||
Russia -- http://curl.tsuren.net/download/
|
Russia -- http://curl.tsuren.net/download.html
|
||||||
Sweden -- ftp://ftp.sunet.se/pub/www/utilities/curl/
|
Sweden -- ftp://ftp.sunet.se/pub/www/utilities/curl/
|
||||||
Sweden -- http://cool.haxx.se/curl/
|
Sweden -- http://cool.haxx.se/curl/
|
||||||
Thailand -- http://curl.siamu.ac.th/download/
|
Thailand -- http://curl.siamu.ac.th/download.html
|
||||||
US (CA) -- http://curl.mirror.redwire.net/download/
|
US (CA) -- http://curl.mirror.redwire.net/download.html
|
||||||
US (TX) -- http://curl.cyberservers.net/download/
|
|
||||||
|
|
||||||
CVS
|
CVS
|
||||||
|
|
||||||
|
131
RELEASE-NOTES
131
RELEASE-NOTES
@@ -1,89 +1,74 @@
|
|||||||
Curl and libcurl 7.11.0. A minor-features-added release.
|
Curl and libcurl 7.11.2. A bugfix release.
|
||||||
|
|
||||||
The 78th public curl release. Release number 105 counted from the very
|
Public curl release number: 80
|
||||||
beginning.
|
Releases counted from the very beginning: 107
|
||||||
|
Available command line options: 94
|
||||||
|
Available curl_easy_setopt() options: 113
|
||||||
|
|
||||||
This release includes the following changes:
|
This release includes the following changes:
|
||||||
|
|
||||||
o allows the URL to be set by a callback when using the multi interface
|
o removed maximum user+password+hostname size limit
|
||||||
o large file support was added. Use one of the new options: INFILESIZE_LARGE,
|
o removed maximum dir depth limit for FTP
|
||||||
RESUME_FROM_LARGE and MAXFILESIZE_LARGE
|
o the ares build now requires c-ares 1.2.0 or later
|
||||||
o the new --ftp-pasv overrides a previous --ftpport
|
o --tcp-nodelay and CURLOPT_TCP_NODELAY were added
|
||||||
o CURLOPT_FTPSSL and ftps:// now do ssl over FTP "The Right Way" (the curl
|
o curl/curlver.h contains the libcurl version info now
|
||||||
tool now features the --ftp-ssl option)
|
|
||||||
o The Windows DLLs are built with an added "resource file"
|
|
||||||
o New LIBCURL_VERSION_* defines for easier checking version number
|
|
||||||
o Included Mac OS X 'framework' makefile in the release archive
|
|
||||||
o Removed the TRUE and FALSE #defines from the public curl header file
|
|
||||||
o Added CURLOPT_NETRC_FILE
|
|
||||||
|
|
||||||
This release includes the following bugfixes:
|
This release includes the following bugfixes:
|
||||||
|
|
||||||
o improved config file parsing for options with required parameters
|
o configure --disable-manual works better
|
||||||
o using --trace with a bad file name could crash
|
o removed a memory leak when doing a windows threaded resolve and it failed
|
||||||
o release archive contains compressed help text
|
o --proxy-ntlm now checks if libcurl supports NTLM before using it
|
||||||
o the win32 password prompting supports backspace
|
o minor --fail with authentication bugfix
|
||||||
o builds natively on AmigaOS (without unix emulation)
|
o CURLOPT_IPRESOLVE set to CURL_IPRESOLVE_V6 will now cause a returned error
|
||||||
o ftps:// now uses port 990 by default
|
if the host only can resolve ipv4 addresses
|
||||||
o the "configure --with-spnego" action was improved
|
o curl -4/-6 now actually sets the requested option in libcurl
|
||||||
o fixed a rare follow-redirect problem
|
o multi interface on Windows without ares works again
|
||||||
o curl-config --feature now outputs AsynchDNS if enabled
|
o improved resolution for the CURLINFO_*_TIME info variables
|
||||||
o occational re-use of freed-memory problem fixed
|
o getting only a 100 Continue response and nothing else, when talking HTTP,
|
||||||
o curl-config --libs now include the ares link directory
|
is now treated as an error by libcurl
|
||||||
o configure --enable-ares now accepts a given path
|
o fixed minor memory leak in libcurl for Windows when statically linked
|
||||||
o -lz no longer appear twice on the link line
|
o POST/PUT using Digest/NTLM/Negotiate (including anyauth) now work better
|
||||||
o more descriptive error message if the FTP response reader fails
|
o --limit-rate with high speed rates is a lot more accurate now, and supports
|
||||||
o curl-config --feature now shows 'AsynchDNS' when built with ares
|
limiting to speeds >2GB/sec on systems with Large File support.
|
||||||
o VMS build up-to-date and clarified source code
|
o curl_strnqual.3 "refer-to" man page fix
|
||||||
o resolve bug caused socks5 to fail
|
o fixed a minor very old progress meter final update bug
|
||||||
o Content-Length: is ignored when getting chunked Transfer-Encoding
|
o added checks for a working NI_WITHSCOPEID before that is used
|
||||||
o POST over proxy to https server failed
|
o fixed a flaw that prevented ares name resolve timeouts to occur
|
||||||
o improved how libcurl deals with persistant connections over FTP when a
|
o getting user name from http_proxy env variable works now
|
||||||
transfer fails
|
o fixed too early name resolve timeouts with ares
|
||||||
o accessing a proxy that requires Basic auth without password caused a hang
|
o HTTP Digest "re-negotiation" works now
|
||||||
o a free free-twice problem in the server certificate code
|
o CURLOPT_FAILONERROR (-f/--fail) works with all kinds of authentication
|
||||||
o minor memory leak when using ranges on persistant connections
|
o better thread-safety thanks to the internal strerror() replacement
|
||||||
o formpost parts sending files with .html extensions now use "Content-Type:
|
o better thread-safety on AIX thanks to better function detection
|
||||||
text/html"
|
o minor ipv6 build fix for windows
|
||||||
o formpost parts now default to "Content-Type: application/octet-stream"
|
o the test suite runs fine with mingw-built curl
|
||||||
o --progress-bar was slightly improved
|
o the postit2.c example works now
|
||||||
o Failing to connect to localhost, using the multi interface on Solaris
|
o better error message when --interface fails on windows
|
||||||
showed a connect problem now fixed.
|
o the progress meter now displays very long times better
|
||||||
o The generated ca-bundle.h file is now generated in the build dir, not the
|
o CURLINFO_CONTENT_LENGTH_DOWNLOAD with CURLOPT_NOBODY set TRUE now works
|
||||||
source dir
|
o passwords longer than 14 letters work with NTLM
|
||||||
o The FTP-EPSV response parser for the 229 code was fixed
|
o 'make netware' in the root dir works now
|
||||||
o curl finds the user's home dir slightly different and hopefully better on
|
o builds fine on VMS again and even nicer than before
|
||||||
Windows
|
|
||||||
o testcurl.sh can now be used to autotest daily tarballs
|
|
||||||
o a couple of command line options now check that the underlying library
|
|
||||||
actually supports the features before trying to enable them
|
|
||||||
o uninitialized variable fix
|
|
||||||
o better html versions of the man pages
|
|
||||||
|
|
||||||
Other curl-related news since the previous public release:
|
Other curl-related news since the previous public release:
|
||||||
|
|
||||||
o pycURL 7.10.8 was released: http://pycurl.sf.net/
|
o PycURL 7.11.1 was released: http://pycurl.sf.net/
|
||||||
o TclCurl 0.10.8 was released:
|
o CURLHandle 1.9 was released: http://curlhandle.sourceforge.net/
|
||||||
http://personal1.iddeo.es/andresgarci/tclcurl/english/
|
o A curl module for the Q language was announced:
|
||||||
o the Ferite curl binding was released: http://www.ferite.org/
|
http://q-lang.sourceforge.net/
|
||||||
o stopped the curl.sourceforge.net mirror, it now redirects to curl.haxx.se
|
o c-ares 1.2.0 was released: http://daniel.haxx.se/projects/c-ares/
|
||||||
o fresh new curl web mirrors:
|
o New curl web mirrors:
|
||||||
US Texas - http://curl.cyberservers.net
|
Germany http://curl.netmirror.org/
|
||||||
US California - http://curl.mirrors.redwire.net
|
USA http://curl.signal42.com/
|
||||||
Germany - http://curl.mirror.at.stealer.net
|
Denmark http://curl.cofman.dk/
|
||||||
Thailand - http://curl.siamu.ac.th
|
|
||||||
o Dan Fandrich stepped forward and helps maintaining the download web page
|
|
||||||
|
|
||||||
This release would not have looked like this without help, code, reports and
|
This release would not have looked like this without help, code, reports and
|
||||||
advice from friends like these:
|
advice from friends like these:
|
||||||
|
|
||||||
Kevin Roth, Troels Walsted Hansen, Matt Veenstra, Marty Kuhrt, Benjamin
|
Thomas Schwinge, Marty Kuhrt, G<>nter Knauf, Kevin Roth, Glen Nakamura, Gisle
|
||||||
Gerard, Gisle Vanem, Ralph Mitchell, S<>bastien Willemijns, Kang-Jin Lee,
|
Vanem, Greg Hewgill, Joe Halpin, Tor Arntsen, Dirk Manske, Roy Shan, Mitz
|
||||||
Peter Sylvester, Siddhartha Prakash Jain, Mathias Axelsson, Maciej
|
Wark, Andr<64>s Garc<72>a, Robin Kay, Alan Pinstein, David Byron, Nathan
|
||||||
W. Rozycki, Nicolas Croiset, Josh Kapell, Gaz Iqbal, Dave May, Markus
|
O'Sullivan, Erwin Authried
|
||||||
Moeller, James Clancy, Giuseppe Attardi, swalkaus at yahoo.com, Steve Green,
|
|
||||||
Marty Kuhrt, Dominick Meglio, Diego Casorran, David Byron, John McGowan,
|
|
||||||
David J Meyer, Dan Fandrich, Pierre, Brian R Duffy, Luke Call, Vincent
|
|
||||||
Bronner
|
|
||||||
|
|
||||||
|
|
||||||
Thanks! (and sorry if I forgot to mention someone)
|
Thanks! (and sorry if I forgot to mention someone)
|
||||||
|
69
TODO-RELEASE
69
TODO-RELEASE
@@ -1,54 +1,37 @@
|
|||||||
Issues not sorted in any particular order. #[num] refers to bug report
|
Issues not sorted in any particular order.
|
||||||
numbers. UNASSIGNED means that no person has publicly stated to work on the
|
#[num] refers to bug report numbers.
|
||||||
issue.
|
UNASSIGNED means that no person has publicly stated to work on the issue.
|
||||||
|
DELETE means the issue is subject for dismissal
|
||||||
|
|
||||||
Fix before releasing 7.11.0
|
To get fixed in 7.11.2 (planned release late April 2004)
|
||||||
===========================
|
|
||||||
|
|
||||||
|
|
||||||
To get fixed in 7.11.1
|
|
||||||
======================
|
======================
|
||||||
|
|
||||||
1. Introduce a new error code indicating authentication problems (for proxy
|
|
||||||
CONNECT error 407 for example). #845941 UNASSIGNED
|
|
||||||
|
|
||||||
2. Make the proxy CONNECT headers get passed to the callbacks just like other
|
To get fixed in 7.12.0 (no date)
|
||||||
headers are. #845941 UNASSIGNED
|
======================
|
||||||
|
|
||||||
4. Multi-threaded OpenSSL usage needs to be addressed (Dirk Manske has stepped
|
25. curl_easy_strerror() curl_multi_strerror() curl_share_strerror()
|
||||||
forward on this)
|
Code already in CVS. Messages need overview/improvements.
|
||||||
|
Medium prio.
|
||||||
|
|
||||||
6. REST fix for servers not behaving well on >2GB requests (some outstanding
|
26. i18n of error messages?
|
||||||
issues, Dave Meyer works on this)
|
Low prio. Nobody has volunteered. Subject for removal.
|
||||||
|
|
||||||
8. Resolve the occational test case 91 failure. This still has no
|
33. Add a function to replace the malloc-calls within libcurl.
|
||||||
resolution. Test case 96 has been added to CVS to try variations of this
|
Low prio. Seshubabu Pasam works on this.
|
||||||
test. (David Byron has done lots of research) UNASSIGNED
|
|
||||||
|
|
||||||
9. Modify ares to do 'files bind' order instead of 'bind files' by default
|
35. Rearrange lib/hostip.c to reduce the amount of #ifdefs and make it easier
|
||||||
(not actually part of libcurl) See details by Frank Ticheler posted here:
|
to understand and edit. Daniel works on this. See
|
||||||
http://curl.haxx.se/mail/archive-2003-11/0020.html UNASSIGNED
|
http://curl.haxx.se/beta/hostip-cleanup1.patch
|
||||||
|
Medium prio.
|
||||||
|
|
||||||
10. Anton Fedorov's "dumpcert" patch (only mailed to me privately) UNASSIGNED
|
36. Add support for a threaded getaddrinfo() on Windows and IPv6 enabled
|
||||||
|
libcurl.
|
||||||
|
|
||||||
12. The "PUT and (NTLM/Digest) auth" bug (confusion, awaits feedback) #862835
|
37. Configure option "--with-libidn" to support IDNA (Internationalising
|
||||||
|
Domain Names in Applications). Translate to/from ACE encoded domain
|
||||||
|
names as needed.
|
||||||
|
|
||||||
14. Evaluate/apply Gertjan van Wingerde's SSL patches, UNASSIGNED
|
38. Make the ldap protocol work with Windows' built-in LDAP-client.
|
||||||
|
I.e. dynamically link to WLDAP32.DLL and add ldap URL parsing
|
||||||
16. Tony Blakie's bug report about getting a 302 and Location: back from a
|
(WLDAP32.DLL doesn't have an UTF-8 ldap_url_parse).
|
||||||
proxy after a CONNECT request. (correct behavior on this is not certain)
|
|
||||||
UNASSIGNED, lack of feedback on this. Subject for dismissal.
|
|
||||||
|
|
||||||
18. Modified Accept: header in the default HTTP request (being discussed).
|
|
||||||
UNASSIGNED
|
|
||||||
|
|
||||||
19. Resolve Giuseppe Attardi's "elusive cache bug" (work required)
|
|
||||||
|
|
||||||
20. Directory listing support for file:///dir/ (patch by David Hull)
|
|
||||||
http://sourceforge.net/tracker/index.php?func=detail&aid=844036&group_id=976&atid=300976
|
|
||||||
This patch needs work to become portable. UNASSIGNED
|
|
||||||
|
|
||||||
21. Send QUIT before closing an FTP connection. Joe Halpin has provided an
|
|
||||||
initial patch. Some outstanding issues.
|
|
||||||
|
|
||||||
23. Peter Sylvester's "Most Significant Common Name" patch. Feedback welcome.
|
|
||||||
|
276
acinclude.m4
276
acinclude.m4
@@ -64,7 +64,7 @@ dnl the code was bad, try a different program now, test 3
|
|||||||
],[
|
],[
|
||||||
/* ioctlsocket source code */
|
/* ioctlsocket source code */
|
||||||
int socket;
|
int socket;
|
||||||
int flags = ioctlsocket(socket, FIONBIO, &flags);
|
unsigned long flags = ioctlsocket(socket, FIONBIO, &flags);
|
||||||
],[
|
],[
|
||||||
dnl ioctlsocket test was good
|
dnl ioctlsocket test was good
|
||||||
nonblock="ioctlsocket"
|
nonblock="ioctlsocket"
|
||||||
@@ -245,7 +245,8 @@ AC_DEFUN([CURL_CHECK_WORKING_GETADDRINFO],[
|
|||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
|
|
||||||
void main(void) {
|
int main(void)
|
||||||
|
{
|
||||||
struct addrinfo hints, *ai;
|
struct addrinfo hints, *ai;
|
||||||
int error;
|
int error;
|
||||||
|
|
||||||
@@ -254,11 +255,9 @@ void main(void) {
|
|||||||
hints.ai_socktype = SOCK_STREAM;
|
hints.ai_socktype = SOCK_STREAM;
|
||||||
error = getaddrinfo("127.0.0.1", "8080", &hints, &ai);
|
error = getaddrinfo("127.0.0.1", "8080", &hints, &ai);
|
||||||
if (error) {
|
if (error) {
|
||||||
exit(1);
|
return 1;
|
||||||
}
|
|
||||||
else {
|
|
||||||
exit(0);
|
|
||||||
}
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
],[
|
],[
|
||||||
ac_cv_working_getaddrinfo="yes"
|
ac_cv_working_getaddrinfo="yes"
|
||||||
@@ -276,10 +275,72 @@ if test "$ac_cv_working_getaddrinfo" = "yes"; then
|
|||||||
fi
|
fi
|
||||||
])
|
])
|
||||||
|
|
||||||
|
dnl ************************************************************
|
||||||
|
dnl check for working NI_WITHSCOPEID in getnameinfo()
|
||||||
|
dnl
|
||||||
|
AC_DEFUN([CURL_CHECK_NI_WITHSCOPEID],[
|
||||||
|
AC_CACHE_CHECK(for working NI_WITHSCOPEID, ac_cv_working_ni_withscopeid,[
|
||||||
|
|
||||||
|
AC_RUN_IFELSE([[
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <netdb.h>
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
#ifdef NI_WITHSCOPEID
|
||||||
|
struct sockaddr_storage ss;
|
||||||
|
int sslen = sizeof(ss);
|
||||||
|
int rc;
|
||||||
|
char hbuf[NI_MAXHOST];
|
||||||
|
int fd = socket(AF_INET6, SOCK_STREAM, 0);
|
||||||
|
if(fd < 0) {
|
||||||
|
perror("socket()");
|
||||||
|
return 1; /* couldn't create socket of either kind */
|
||||||
|
}
|
||||||
|
|
||||||
|
rc = getsockname(fd, (struct sockaddr *)&ss, &sslen);
|
||||||
|
if(rc) {
|
||||||
|
perror("getsockname()");
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
rc = getnameinfo((struct sockaddr *)&ss, sslen, hbuf, sizeof(hbuf),
|
||||||
|
NULL, 0,
|
||||||
|
NI_NUMERICHOST | NI_NUMERICSERV | NI_WITHSCOPEID);
|
||||||
|
|
||||||
|
if(rc) {
|
||||||
|
printf("rc = %s\n", gai_strerror(rc));
|
||||||
|
return 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0; /* everything works fine, use NI_WITHSCOPEID! */
|
||||||
|
#else
|
||||||
|
return 4; /* we don't seem to have the definition, don't use it */
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
]],
|
||||||
|
dnl program worked:
|
||||||
|
[ ac_cv_working_ni_withscopeid="yes" ],
|
||||||
|
dnl program failed:
|
||||||
|
[ ac_cv_working_ni_withscopeid="no" ],
|
||||||
|
dnl we cross-compile:
|
||||||
|
[ ac_cv_working_ni_withscopeid="yes" ]
|
||||||
|
) dnl end of AC_RUN_IFELSE
|
||||||
|
|
||||||
|
]) dnl end of AC_CACHE_CHECK
|
||||||
|
|
||||||
|
if test "$ac_cv_working_ni_withscopeid" = "yes"; then
|
||||||
|
AC_DEFINE(HAVE_NI_WITHSCOPEID, 1,
|
||||||
|
[Define if NI_WITHSCOPEID exists and works])
|
||||||
|
fi
|
||||||
|
|
||||||
|
]) dnl end of AC_DEFUN
|
||||||
|
|
||||||
|
|
||||||
AC_DEFUN([CURL_CHECK_LOCALTIME_R],
|
AC_DEFUN([CURL_CHECK_LOCALTIME_R],
|
||||||
[
|
[
|
||||||
dnl check for a few thread-safe functions
|
dnl check for localtime_r
|
||||||
AC_CHECK_FUNCS(localtime_r,[
|
AC_CHECK_FUNCS(localtime_r,[
|
||||||
AC_MSG_CHECKING(whether localtime_r is declared)
|
AC_MSG_CHECKING(whether localtime_r is declared)
|
||||||
AC_EGREP_CPP(localtime_r,[
|
AC_EGREP_CPP(localtime_r,[
|
||||||
@@ -295,6 +356,92 @@ AC_DEFUN([CURL_CHECK_LOCALTIME_R],
|
|||||||
AC_MSG_RESULT(no))])])
|
AC_MSG_RESULT(no))])])
|
||||||
])
|
])
|
||||||
|
|
||||||
|
dnl
|
||||||
|
dnl This function checks for strerror_r(). If it isn't found at first, it
|
||||||
|
dnl retries with _THREAD_SAFE defined, as that is what AIX seems to require
|
||||||
|
dnl in order to find this function.
|
||||||
|
dnl
|
||||||
|
dnl If the function is found, it will then proceed to check how the function
|
||||||
|
dnl actually works: glibc-style or POSIX-style.
|
||||||
|
dnl
|
||||||
|
dnl glibc:
|
||||||
|
dnl char *strerror_r(int errnum, char *buf, size_t n);
|
||||||
|
dnl
|
||||||
|
dnl What this one does is to return the error string (no surprises there),
|
||||||
|
dnl but it doesn't usually copy anything into buf! The 'buf' and 'n'
|
||||||
|
dnl parameters are only meant as an optional working area, in case strerror_r
|
||||||
|
dnl needs it. A quick test on a few systems shows that it's generally not
|
||||||
|
dnl touched at all.
|
||||||
|
dnl
|
||||||
|
dnl POSIX:
|
||||||
|
dnl int strerror_r(int errnum, char *buf, size_t n);
|
||||||
|
dnl
|
||||||
|
AC_DEFUN([CURL_CHECK_STRERROR_R],
|
||||||
|
[
|
||||||
|
dnl determine of strerror_r is present
|
||||||
|
AC_CHECK_FUNCS(strerror_r,[
|
||||||
|
AC_MSG_CHECKING(whether strerror_r is declared)
|
||||||
|
AC_EGREP_CPP(strerror_r,[
|
||||||
|
#include <string.h>],[
|
||||||
|
strerror_r="yes"
|
||||||
|
AC_MSG_RESULT(yes)],[
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
AC_MSG_CHECKING(whether strerror_r with -D_THREAD_SAFE is declared)
|
||||||
|
AC_EGREP_CPP(strerror_r,[
|
||||||
|
#define _THREAD_SAFE
|
||||||
|
#include <string.h>],[
|
||||||
|
strerror_r="yes"
|
||||||
|
CPPFLAGS="-D_THREAD_SAFE $CPPFLAGS"
|
||||||
|
AC_MSG_RESULT(yes)],
|
||||||
|
AC_MSG_RESULT(no))])])
|
||||||
|
|
||||||
|
if test "x$strerror_r" = "xyes"; then
|
||||||
|
dnl determine if this strerror_r() is glibc or POSIX
|
||||||
|
AC_MSG_CHECKING([for a glibc strerror_r API])
|
||||||
|
AC_TRY_RUN([
|
||||||
|
#include <string.h>
|
||||||
|
#include <errno.h>
|
||||||
|
int
|
||||||
|
main () {
|
||||||
|
char buffer[1024]; /* big enough to play with */
|
||||||
|
char *string =
|
||||||
|
strerror_r(EACCES, buffer, sizeof(buffer));
|
||||||
|
/* this should've returned a string */
|
||||||
|
if(!string || !string[0])
|
||||||
|
return 99;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
],
|
||||||
|
AC_DEFINE(HAVE_GLIBC_STRERROR_R, 1, [we have a glibc-style strerror_r()])
|
||||||
|
AC_MSG_RESULT([yes]),
|
||||||
|
AC_MSG_RESULT([no])
|
||||||
|
)
|
||||||
|
|
||||||
|
AC_MSG_CHECKING([for a POSIX strerror_r API])
|
||||||
|
AC_TRY_RUN([
|
||||||
|
#include <string.h>
|
||||||
|
#include <errno.h>
|
||||||
|
int
|
||||||
|
main () {
|
||||||
|
char buffer[1024]; /* big enough to play with */
|
||||||
|
int error =
|
||||||
|
strerror_r(EACCES, buffer, sizeof(buffer));
|
||||||
|
/* This should've returned zero, and written an error string in the
|
||||||
|
buffer.*/
|
||||||
|
if(!buffer[0] || error)
|
||||||
|
return 99;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
],
|
||||||
|
AC_DEFINE(HAVE_POSIX_STRERROR_R, 1, [we have a POSIX-style strerror_r()])
|
||||||
|
AC_MSG_RESULT([yes]),
|
||||||
|
AC_MSG_RESULT([no])
|
||||||
|
)
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
])
|
||||||
|
|
||||||
AC_DEFUN([CURL_CHECK_INET_NTOA_R],
|
AC_DEFUN([CURL_CHECK_INET_NTOA_R],
|
||||||
[
|
[
|
||||||
dnl determine if function definition for inet_ntoa_r exists.
|
dnl determine if function definition for inet_ntoa_r exists.
|
||||||
@@ -475,3 +622,118 @@ if test "$ac_cv_func_gethostbyname_r" = "yes"; then
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
])
|
])
|
||||||
|
|
||||||
|
dnl We create a function for detecting which compiler we use and then set as
|
||||||
|
dnl pendantic compiler options as possible for that particular compiler. The
|
||||||
|
dnl options are only used for debug-builds.
|
||||||
|
|
||||||
|
AC_DEFUN([CURL_CC_DEBUG_OPTS],
|
||||||
|
[
|
||||||
|
if test "$GCC" = "yes"; then
|
||||||
|
|
||||||
|
dnl figure out gcc version!
|
||||||
|
AC_MSG_CHECKING([gcc version])
|
||||||
|
gccver=`$CC -dumpversion`
|
||||||
|
num1=`echo $gccver | cut -d . -f1`
|
||||||
|
num2=`echo $gccver | cut -d . -f2`
|
||||||
|
gccnum=`(expr $num1 "*" 100 + $num2) 2>/dev/null`
|
||||||
|
AC_MSG_RESULT($gccver)
|
||||||
|
|
||||||
|
AC_MSG_CHECKING([if this is icc in disguise])
|
||||||
|
AC_EGREP_CPP([^__INTEL_COMPILER], [__INTEL_COMPILER],
|
||||||
|
dnl action if the text is found, this it has not been replaced by the
|
||||||
|
dnl cpp
|
||||||
|
ICC="no"
|
||||||
|
AC_MSG_RESULT([no]),
|
||||||
|
dnl the text was not found, it was replaced by the cpp
|
||||||
|
ICC="yes"
|
||||||
|
AC_MSG_RESULT([yes])
|
||||||
|
)
|
||||||
|
|
||||||
|
if test "$ICC" = "yes"; then
|
||||||
|
dnl this is icc, not gcc.
|
||||||
|
|
||||||
|
dnl ICC warnings we ignore:
|
||||||
|
dnl * 269 warns on our "%Od" printf formatters for curl_off_t output:
|
||||||
|
dnl "invalid format string conversion"
|
||||||
|
dnl * 279 warns on static conditions in while expressions
|
||||||
|
dnl * 981 warns on "operands are evaluated in unspecified order"
|
||||||
|
dnl * 1419 warns on "external declaration in primary source file"
|
||||||
|
dnl which we know and do on purpose.
|
||||||
|
|
||||||
|
WARN="-wd279,269,1419,981"
|
||||||
|
|
||||||
|
if test "$gccnum" -gt "600"; then
|
||||||
|
dnl icc 6.0 and older doesn't have the -Wall flag
|
||||||
|
WARN="-Wall $WARN"
|
||||||
|
fi
|
||||||
|
else dnl $ICC = yes
|
||||||
|
dnl this is a set of options we believe *ALL* gcc versions support:
|
||||||
|
WARN="-W -Wall -Wwrite-strings -pedantic -Wno-long-long -Wpointer-arith -Wnested-externs -Winline -Wmissing-declarations -Wmissing-prototypes -Wsign-compare"
|
||||||
|
|
||||||
|
dnl -Wcast-align is a bit too annoying on all gcc versions ;-)
|
||||||
|
|
||||||
|
if test "$gccnum" -gt "295"; then
|
||||||
|
dnl only if the compiler is newer than 2.95 since we got lots of
|
||||||
|
dnl "`_POSIX_C_SOURCE' is not defined" in system headers with
|
||||||
|
dnl gcc 2.95.4 on FreeBSD 4.9!
|
||||||
|
WARN="$WARN -Wundef"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test "$gccnum" -ge "296"; then
|
||||||
|
dnl gcc 2.96 or later
|
||||||
|
WARN="$WARN -Wfloat-equal"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test "$gccnum" -gt "296"; then
|
||||||
|
dnl this option does not exist in 2.96
|
||||||
|
WARN="$WARN -Wno-format-nonliteral"
|
||||||
|
fi
|
||||||
|
|
||||||
|
dnl -Wunreachable-code seems totally unreliable on my gcc 3.3.2 on
|
||||||
|
dnl on i686-Linux as it gives us heaps with false positives
|
||||||
|
if test "$gccnum" -ge "303"; then
|
||||||
|
dnl gcc 3.3 and later
|
||||||
|
WARN="$WARN -Wendif-labels -Wstrict-prototypes"
|
||||||
|
fi
|
||||||
|
|
||||||
|
for flag in $CPPFLAGS; do
|
||||||
|
case "$flag" in
|
||||||
|
-I*)
|
||||||
|
dnl Include path, provide a -isystem option for the same dir
|
||||||
|
dnl to prevent warnings in those dirs. The -isystem was not very
|
||||||
|
dnl reliable on earlier gcc versions.
|
||||||
|
add=`echo $flag | sed 's/^-I/-isystem /g'`
|
||||||
|
WARN="$WARN $add"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
fi dnl $ICC = no
|
||||||
|
|
||||||
|
CFLAGS="$CFLAGS $WARN"
|
||||||
|
|
||||||
|
AC_MSG_NOTICE([Added this set of compiler options: $WARN])
|
||||||
|
|
||||||
|
else dnl $GCC = yes
|
||||||
|
|
||||||
|
AC_MSG_NOTICE([Added no extra compiler options])
|
||||||
|
|
||||||
|
fi dnl $GCC = yes
|
||||||
|
|
||||||
|
dnl strip off optimizer flags
|
||||||
|
NEWFLAGS=""
|
||||||
|
for flag in $CFLAGS; do
|
||||||
|
case "$flag" in
|
||||||
|
-O*)
|
||||||
|
dnl echo "cut off $flag"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
NEWFLAGS="$NEWFLAGS $flag"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
CFLAGS=$NEWFLAGS
|
||||||
|
|
||||||
|
]) dnl end of AC_DEFUN()
|
||||||
|
|
||||||
|
@@ -5,3 +5,4 @@ adig
|
|||||||
ahost
|
ahost
|
||||||
config.log
|
config.log
|
||||||
config.status
|
config.status
|
||||||
|
aclocal.m4
|
||||||
|
88
ares/CHANGES
88
ares/CHANGES
@@ -1,17 +1,89 @@
|
|||||||
This package is built on ares 1.1.1 (written by Greg Hudson). I've decided to
|
Changelog for the c-ares project
|
||||||
put together and release my own ares archives since the ares maintainer
|
|
||||||
doesn't want these improvements.
|
|
||||||
|
|
||||||
The package is called 'c-ares' for now since I (Daniel Stenberg) want this for
|
Version 1.2.0 (April 13, 2004)
|
||||||
use within the curl project (hence the letter C) and it makes a nice pun.
|
|
||||||
|
|
||||||
* January 4, 2004:
|
* April 2, 2004
|
||||||
|
- Updated various man pages to look nicer when converted to HTML on the web
|
||||||
|
site.
|
||||||
|
|
||||||
|
* April 1, 2004
|
||||||
|
- Dirk Manske provided a new function that is now named ares_cancel(). It is
|
||||||
|
used to cancel/cleanup a resolve/request made using ares functions on the
|
||||||
|
given ares channel. It does not destroy/kill the ares channel itself.
|
||||||
|
|
||||||
|
- Dominick Meglio cleaned up the formatting in several man pages.
|
||||||
|
|
||||||
|
* March 30, 2004
|
||||||
|
- Dominick Meglio's new ares_expand_string. A helper function when decoding
|
||||||
|
incoming DNS packages.
|
||||||
|
|
||||||
|
- Daniel Stenberg modified the Makefile.in to use a for loop for the man page
|
||||||
|
installation to improve overview and make it easier to add man pages.
|
||||||
|
|
||||||
|
Version 1.1.0 (March 11, 2004)
|
||||||
|
|
||||||
|
* March 9, 2004
|
||||||
|
- Gisle Vanem improved build on Windows.
|
||||||
|
|
||||||
|
* February 25, 2004
|
||||||
|
- Dan Fandrich found a flaw in the Feb 22 fix.
|
||||||
|
|
||||||
|
- Added better configure --enable-debug logic (taken from the curl configure
|
||||||
|
script). Added acinclude.m4 to the tarball.
|
||||||
|
|
||||||
|
* February 23, 2004
|
||||||
|
- Removed ares_free_errmem(), the function, the file and the man page. It was
|
||||||
|
not used and it did nothing.
|
||||||
|
|
||||||
|
- Fixed a lot of code that wasn't "64bit clean" and thus caused a lot of
|
||||||
|
compiler warnings on picky compilers.
|
||||||
|
|
||||||
|
* February 22, 2004
|
||||||
|
- Dominick Meglio made ares init support multiple name servers in the
|
||||||
|
NameServer key on Windows.
|
||||||
|
|
||||||
|
* February 16, 2004
|
||||||
|
- Modified ares_private.h to include libcurl's memory debug header if
|
||||||
|
CURLDEBUG is set. This makes all the ares-functions supervised properly by
|
||||||
|
the curl test suite. This also forced me to add inclusion of the
|
||||||
|
ares_private.h header in a few more files that are using some kind of
|
||||||
|
memory-related resources.
|
||||||
|
|
||||||
|
- Made the makefile only build ahost and adig if 'make demos' is used.
|
||||||
|
|
||||||
|
* February 10, 2004
|
||||||
|
- Dirk Manske made ares_version.h installed with 'make install'
|
||||||
|
|
||||||
|
* February 4, 2004
|
||||||
|
- ares_free_errmem() is subject for removal, it is simply present for future
|
||||||
|
purposes, and since we removed the extra parameter in strerror() it won't
|
||||||
|
be used by c-ares!
|
||||||
|
- configure --enable-debug now enables picky compiler options if gcc is used
|
||||||
|
- fixed several compiler warnings --enable-debug showed and Joerg Mueller-Tolk
|
||||||
|
reported
|
||||||
|
|
||||||
|
Version 1.0.0 (February 3, 2004)
|
||||||
|
|
||||||
|
* February 3, 2004
|
||||||
|
- now we produce the libcares.a library instead of the previous libares.a
|
||||||
|
since we are no longer compatible
|
||||||
|
|
||||||
|
* February 2, 2004
|
||||||
|
|
||||||
|
- ares_strerror() has one argument less. This is the first official
|
||||||
|
modification of the existing provided ares API.
|
||||||
|
|
||||||
|
* January 29, 2004
|
||||||
|
|
||||||
|
- Dirk Manske fixed how the socket is set non-blocking.
|
||||||
|
|
||||||
|
* January 4, 2004
|
||||||
|
|
||||||
- Dominick Meglio made the private gettimeofday() become ares_gettimeofday()
|
- Dominick Meglio made the private gettimeofday() become ares_gettimeofday()
|
||||||
instead in order to not pollute the name space and risk colliding with
|
instead in order to not pollute the name space and risk colliding with
|
||||||
other libraries' versions of this function.
|
other libraries' versions of this function.
|
||||||
|
|
||||||
* October 24, 2003. Daniel Stenberg:
|
* October 24, 2003. Daniel Stenberg
|
||||||
|
|
||||||
Added ares_version().
|
Added ares_version().
|
||||||
|
|
||||||
@@ -26,3 +98,5 @@ Version 1.0-pre1 (8 October 2003)
|
|||||||
- Daniel Stenberg adjusted the windows port
|
- Daniel Stenberg adjusted the windows port
|
||||||
|
|
||||||
- liren at vivisimo.com made the initial windows port
|
- liren at vivisimo.com made the initial windows port
|
||||||
|
|
||||||
|
* Imported the sources from ares 1.1.1
|
||||||
|
@@ -3,15 +3,17 @@
|
|||||||
*.3
|
*.3
|
||||||
NEWS
|
NEWS
|
||||||
README
|
README
|
||||||
|
README.cares
|
||||||
CHANGES
|
CHANGES
|
||||||
FILES
|
FILES
|
||||||
maketgz
|
maketgz
|
||||||
aclocal.m4
|
aclocal.m4
|
||||||
|
acinclude.m4
|
||||||
Makefile.in
|
Makefile.in
|
||||||
install-sh
|
install-sh
|
||||||
mkinstalldirs
|
mkinstalldirs
|
||||||
configure
|
configure
|
||||||
configure.in
|
configure.ac
|
||||||
config.guess
|
config.guess
|
||||||
config.sub
|
config.sub
|
||||||
vc/adig/adig.dep
|
vc/adig/adig.dep
|
||||||
@@ -19,8 +21,6 @@ vc/adig/adig.dsp
|
|||||||
vc/adig/adig.mak
|
vc/adig/adig.mak
|
||||||
vc/adig/adig.plg
|
vc/adig/adig.plg
|
||||||
vc/vc.dsw
|
vc/vc.dsw
|
||||||
vc/vc.ncb
|
|
||||||
vc/vc.opt
|
|
||||||
vc/ahost/ahost.dep
|
vc/ahost/ahost.dep
|
||||||
vc/ahost/ahost.dsp
|
vc/ahost/ahost.dsp
|
||||||
vc/ahost/ahost.mak
|
vc/ahost/ahost.mak
|
||||||
|
@@ -12,6 +12,7 @@ libdir=@libdir@
|
|||||||
includedir=@includedir@
|
includedir=@includedir@
|
||||||
mandir=@mandir@
|
mandir=@mandir@
|
||||||
|
|
||||||
|
LIB=libcares.a
|
||||||
CC=@CC@
|
CC=@CC@
|
||||||
CPPFLAGS=@CPPFLAGS@
|
CPPFLAGS=@CPPFLAGS@
|
||||||
CFLAGS=@CFLAGS@ ${WARN_CFLAGS} ${ERROR_CFLAGS}
|
CFLAGS=@CFLAGS@ ${WARN_CFLAGS} ${ERROR_CFLAGS}
|
||||||
@@ -20,23 +21,36 @@ LDFLAGS=@LDFLAGS@
|
|||||||
LIBS=@LIBS@
|
LIBS=@LIBS@
|
||||||
ALL_CFLAGS=${CPPFLAGS} ${CFLAGS} ${DEFS}
|
ALL_CFLAGS=${CPPFLAGS} ${CFLAGS} ${DEFS}
|
||||||
OBJS= ares__close_sockets.o ares__get_hostent.o ares__read_line.o \
|
OBJS= ares__close_sockets.o ares__get_hostent.o ares__read_line.o \
|
||||||
ares_destroy.o ares_expand_name.o ares_fds.o ares_free_errmem.o \
|
ares_destroy.o ares_expand_name.o ares_fds.o \
|
||||||
ares_free_hostent.o ares_free_string.o ares_gethostbyaddr.o \
|
ares_free_hostent.o ares_free_string.o ares_gethostbyaddr.o \
|
||||||
ares_gethostbyname.o ares_init.o ares_mkquery.o ares_parse_a_reply.o \
|
ares_gethostbyname.o ares_init.o ares_mkquery.o ares_parse_a_reply.o \
|
||||||
ares_parse_ptr_reply.o ares_process.o ares_query.o ares_search.o \
|
ares_parse_ptr_reply.o ares_process.o ares_query.o ares_search.o \
|
||||||
ares_send.o ares_strerror.o ares_timeout.o ares_version.o
|
ares_send.o ares_strerror.o ares_timeout.o ares_version.o \
|
||||||
|
ares_expand_string.o ares_cancel.o
|
||||||
|
|
||||||
all: libares.a adig ahost
|
MANPAGES= ares_destroy.3 ares_expand_name.3 ares_expand_string.3 ares_fds.3 \
|
||||||
|
ares_free_hostent.3 ares_free_string.3 ares_gethostbyaddr.3 \
|
||||||
|
ares_gethostbyname.3 ares_init.3 ares_init_options.3 ares_mkquery.3 \
|
||||||
|
ares_parse_a_reply.3 ares_parse_ptr_reply.3 ares_process.3 \
|
||||||
|
ares_query.3 ares_search.3 ares_send.3 ares_strerror.3 ares_timeout.3 \
|
||||||
|
ares_version.3 ares_cancel.3
|
||||||
|
|
||||||
libares.a: ${OBJS}
|
$(LIB): ${OBJS}
|
||||||
ar cru $@ ${OBJS}
|
ar cru $@ ${OBJS}
|
||||||
${RANLIB} $@
|
${RANLIB} $@
|
||||||
|
|
||||||
adig: adig.o libares.a
|
all: $(LIB) demos
|
||||||
${CC} ${LDFLAGS} -o $@ adig.o libares.a ${LIBS}
|
|
||||||
|
|
||||||
ahost: ahost.o libares.a
|
demos: adig ahost
|
||||||
${CC} ${LDFLAGS} -o $@ ahost.o libares.a ${LIBS}
|
|
||||||
|
tags:
|
||||||
|
etags *.[ch]
|
||||||
|
|
||||||
|
adig: adig.o $(LIB)
|
||||||
|
${CC} ${LDFLAGS} -o $@ adig.o $(LIB) ${LIBS}
|
||||||
|
|
||||||
|
ahost: ahost.o $(LIB)
|
||||||
|
${CC} ${LDFLAGS} -o $@ ahost.o $(LIB) ${LIBS}
|
||||||
|
|
||||||
${OBJS}: ares.h ares_dns.h ares_private.h
|
${OBJS}: ares.h ares_dns.h ares_private.h
|
||||||
|
|
||||||
@@ -49,39 +63,17 @@ install:
|
|||||||
${top_srcdir}/mkinstalldirs ${DESTDIR}${libdir}
|
${top_srcdir}/mkinstalldirs ${DESTDIR}${libdir}
|
||||||
${top_srcdir}/mkinstalldirs ${DESTDIR}${includedir}
|
${top_srcdir}/mkinstalldirs ${DESTDIR}${includedir}
|
||||||
${top_srcdir}/mkinstalldirs ${DESTDIR}${mandir}/man3
|
${top_srcdir}/mkinstalldirs ${DESTDIR}${mandir}/man3
|
||||||
${INSTALL} -m 644 libares.a ${DESTDIR}${libdir}
|
${INSTALL} -m 644 $(LIB) ${DESTDIR}${libdir}
|
||||||
${RANLIB} ${DESTDIR}${libdir}/libares.a
|
${RANLIB} ${DESTDIR}${libdir}/$(LIB)
|
||||||
chmod u-w ${DESTDIR}${libdir}/libares.a
|
chmod u-w ${DESTDIR}${libdir}/$(LIB)
|
||||||
${INSTALL} -m 444 ${srcdir}/ares.h ${DESTDIR}${includedir}
|
${INSTALL} -m 444 ${srcdir}/ares.h ${DESTDIR}${includedir}
|
||||||
${INSTALL} -m 444 ${srcdir}/ares_destroy.3 ${DESTDIR}${mandir}/man3
|
${INSTALL} -m 444 ${srcdir}/ares_version.h ${DESTDIR}${includedir}
|
||||||
${INSTALL} -m 444 ${srcdir}/ares_expand_name.3 ${DESTDIR}${mandir}/man3
|
(for man in $(MANPAGES); do \
|
||||||
${INSTALL} -m 444 ${srcdir}/ares_fds.3 ${DESTDIR}${mandir}/man3
|
${INSTALL} -m 444 ${srcdir}/$${man} ${DESTDIR}${mandir}/man3; \
|
||||||
${INSTALL} -m 444 ${srcdir}/ares_free_errmem.3 ${DESTDIR}${mandir}/man3
|
done)
|
||||||
${INSTALL} -m 444 ${srcdir}/ares_free_hostent.3 \
|
|
||||||
${DESTDIR}${mandir}/man3
|
|
||||||
${INSTALL} -m 444 ${srcdir}/ares_free_string.3 \
|
|
||||||
${DESTDIR}${mandir}/man3
|
|
||||||
${INSTALL} -m 444 ${srcdir}/ares_gethostbyaddr.3 \
|
|
||||||
${DESTDIR}${mandir}/man3
|
|
||||||
${INSTALL} -m 444 ${srcdir}/ares_gethostbyname.3 \
|
|
||||||
${DESTDIR}${mandir}/man3
|
|
||||||
${INSTALL} -m 444 ${srcdir}/ares_init.3 ${DESTDIR}${mandir}/man3
|
|
||||||
${INSTALL} -m 444 ${srcdir}/ares_init_options.3 \
|
|
||||||
${DESTDIR}${mandir}/man3
|
|
||||||
${INSTALL} -m 444 ${srcdir}/ares_mkquery.3 ${DESTDIR}${mandir}/man3
|
|
||||||
${INSTALL} -m 444 ${srcdir}/ares_parse_a_reply.3 \
|
|
||||||
${DESTDIR}${mandir}/man3
|
|
||||||
${INSTALL} -m 444 ${srcdir}/ares_parse_ptr_reply.3 \
|
|
||||||
${DESTDIR}${mandir}/man3
|
|
||||||
${INSTALL} -m 444 ${srcdir}/ares_process.3 ${DESTDIR}${mandir}/man3
|
|
||||||
${INSTALL} -m 444 ${srcdir}/ares_query.3 ${DESTDIR}${mandir}/man3
|
|
||||||
${INSTALL} -m 444 ${srcdir}/ares_search.3 ${DESTDIR}${mandir}/man3
|
|
||||||
${INSTALL} -m 444 ${srcdir}/ares_send.3 ${DESTDIR}${mandir}/man3
|
|
||||||
${INSTALL} -m 444 ${srcdir}/ares_strerror.3 ${DESTDIR}${mandir}/man3
|
|
||||||
${INSTALL} -m 444 ${srcdir}/ares_timeout.3 ${DESTDIR}${mandir}/man3
|
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -f ${OBJS} libares.a adig.o adig ahost.o ahost
|
rm -f ${OBJS} $(LIB) adig.o adig ahost.o ahost
|
||||||
|
|
||||||
distclean: clean
|
distclean: clean
|
||||||
rm -f config.cache config.log config.status Makefile
|
rm -f config.cache config.log config.status Makefile
|
||||||
|
@@ -1,3 +1,8 @@
|
|||||||
|
This is c-ares, a forked version of the original ares. The original ares
|
||||||
|
README follows below, the c-ares specific details are in README.cares
|
||||||
|
|
||||||
|
====================================================================
|
||||||
|
|
||||||
This is ares, an asynchronous resolver library. It is intended for
|
This is ares, an asynchronous resolver library. It is intended for
|
||||||
applications which need to perform DNS queries without blocking, or
|
applications which need to perform DNS queries without blocking, or
|
||||||
need to perform multiple DNS queries in parallel. The primary
|
need to perform multiple DNS queries in parallel. The primary
|
||||||
|
25
ares/README.cares
Normal file
25
ares/README.cares
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
c-ares
|
||||||
|
======
|
||||||
|
|
||||||
|
This package is based on ares 1.1.1 (written by Greg Hudson). I decided to
|
||||||
|
fork and release a separate project since the ares author didn't want the
|
||||||
|
improvements that were vital for our use of it.
|
||||||
|
|
||||||
|
This package is dubbed 'c-ares' since I (Daniel Stenberg) wanted this for use
|
||||||
|
within the curl project (hence the letter C) and it makes a nice pun. Also,
|
||||||
|
c-ares is not API compatible with ares: a new name makes that more obvious to
|
||||||
|
the public.
|
||||||
|
|
||||||
|
The full source code is available in the 'c-ares' release archives, and in the
|
||||||
|
'ares' subdir of the curl CVS source repostitory.
|
||||||
|
|
||||||
|
If you find bugs, correct flaws, have questions or have comments in general in
|
||||||
|
regard to c-ares (or by all means the original ares too), get in touch with us
|
||||||
|
on the c-ares mailing list: http://cool.haxx.se/mailman/listinfo/c-ares
|
||||||
|
|
||||||
|
c-ares is of course distributed under the same MIT-style license as the
|
||||||
|
original ares.
|
||||||
|
|
||||||
|
You'll find all c-ares details and news here:
|
||||||
|
|
||||||
|
http://daniel.haxx.se/projects/c-ares
|
101
ares/acinclude.m4
Normal file
101
ares/acinclude.m4
Normal file
@@ -0,0 +1,101 @@
|
|||||||
|
|
||||||
|
dnl We create a function for detecting which compiler we use and then set as
|
||||||
|
dnl pendantic compiler options as possible for that particular compiler. The
|
||||||
|
dnl options are only used for debug-builds.
|
||||||
|
|
||||||
|
dnl This is a copy of the original found in curl's configure script. Don't
|
||||||
|
dnl modify this one, edit the one in curl and copy it back here when that one
|
||||||
|
dnl is changed.
|
||||||
|
|
||||||
|
AC_DEFUN([CURL_CC_DEBUG_OPTS],
|
||||||
|
[
|
||||||
|
if test "$GCC" = "yes"; then
|
||||||
|
|
||||||
|
dnl figure out gcc version!
|
||||||
|
AC_MSG_CHECKING([gcc version])
|
||||||
|
gccver=`$CC -dumpversion`
|
||||||
|
num1=`echo $gccver | cut -d . -f1`
|
||||||
|
num2=`echo $gccver | cut -d . -f2`
|
||||||
|
gccnum=`(expr $num1 "*" 100 + $num2) 2>/dev/null`
|
||||||
|
AC_MSG_RESULT($gccver)
|
||||||
|
|
||||||
|
AC_MSG_CHECKING([if this is icc in disguise])
|
||||||
|
AC_EGREP_CPP([^__INTEL_COMPILER], [__INTEL_COMPILER],
|
||||||
|
dnl action if the text is found, this it has not been replaced by the
|
||||||
|
dnl cpp
|
||||||
|
ICC="no"
|
||||||
|
AC_MSG_RESULT([no]),
|
||||||
|
dnl the text was not found, it was replaced by the cpp
|
||||||
|
ICC="yes"
|
||||||
|
AC_MSG_RESULT([yes])
|
||||||
|
)
|
||||||
|
|
||||||
|
if test "$ICC" = "yes"; then
|
||||||
|
dnl this is icc, not gcc.
|
||||||
|
|
||||||
|
dnl ICC warnings we ignore:
|
||||||
|
dnl * 279 warns on static conditions in while expressions
|
||||||
|
dnl * 269 warns on our "%Od" printf formatters for curl_off_t output:
|
||||||
|
dnl "invalid format string conversion"
|
||||||
|
|
||||||
|
WARN="-wd279,269"
|
||||||
|
|
||||||
|
if test "$gccnum" -gt "600"; then
|
||||||
|
dnl icc 6.0 and older doesn't have the -Wall flag
|
||||||
|
WARN="-Wall $WARN"
|
||||||
|
fi
|
||||||
|
else dnl $ICC = yes
|
||||||
|
dnl
|
||||||
|
WARN="-W -Wall -Wwrite-strings -pedantic -Wno-long-long -Wundef -Wpointer-arith -Wnested-externs -Winline -Wmissing-declarations -Wmissing-prototypes -Wsign-compare"
|
||||||
|
|
||||||
|
dnl -Wcast-align is a bit too annoying ;-)
|
||||||
|
|
||||||
|
if test "$gccnum" -ge "296"; then
|
||||||
|
dnl gcc 2.96 or later
|
||||||
|
WARN="$WARN -Wfloat-equal"
|
||||||
|
|
||||||
|
if test "$gccnum" -gt "296"; then
|
||||||
|
dnl this option does not exist in 2.96
|
||||||
|
WARN="$WARN -Wno-format-nonliteral"
|
||||||
|
fi
|
||||||
|
|
||||||
|
dnl -Wunreachable-code seems totally unreliable on my gcc 3.3.2 on
|
||||||
|
dnl on i686-Linux as it gives us heaps with false positives
|
||||||
|
if test "$gccnum" -ge "303"; then
|
||||||
|
dnl gcc 3.3 and later
|
||||||
|
WARN="$WARN -Wendif-labels -Wstrict-prototypes"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
for flag in $CPPFLAGS; do
|
||||||
|
case "$flag" in
|
||||||
|
-I*)
|
||||||
|
dnl include path
|
||||||
|
add=`echo $flag | sed 's/^-I/-isystem /g'`
|
||||||
|
WARN="$WARN $add"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
fi dnl $ICC = no
|
||||||
|
|
||||||
|
CFLAGS="$CFLAGS $WARN"
|
||||||
|
|
||||||
|
fi dnl $GCC = yes
|
||||||
|
|
||||||
|
dnl strip off optimizer flags
|
||||||
|
NEWFLAGS=""
|
||||||
|
for flag in $CFLAGS; do
|
||||||
|
case "$flag" in
|
||||||
|
-O*)
|
||||||
|
dnl echo "cut off $flag"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
NEWFLAGS="$NEWFLAGS $flag"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
CFLAGS=$NEWFLAGS
|
||||||
|
|
||||||
|
]) dnl end of AC_DEFUN()
|
||||||
|
|
358
ares/aclocal.m4
vendored
358
ares/aclocal.m4
vendored
@@ -1,358 +0,0 @@
|
|||||||
dnl $Id$
|
|
||||||
|
|
||||||
dnl Copyright 1996 by the Massachusetts Institute of Technology.
|
|
||||||
dnl
|
|
||||||
dnl Permission to use, copy, modify, and distribute this
|
|
||||||
dnl software and its documentation for any purpose and without
|
|
||||||
dnl fee is hereby granted, provided that the above copyright
|
|
||||||
dnl notice appear in all copies and that both that copyright
|
|
||||||
dnl notice and this permission notice appear in supporting
|
|
||||||
dnl documentation, and that the name of M.I.T. not be used in
|
|
||||||
dnl advertising or publicity pertaining to distribution of the
|
|
||||||
dnl software without specific, written prior permission.
|
|
||||||
dnl M.I.T. makes no representations about the suitability of
|
|
||||||
dnl this software for any purpose. It is provided "as is"
|
|
||||||
dnl without express or implied warranty.
|
|
||||||
|
|
||||||
dnl This file provides local macros for packages which use specific
|
|
||||||
dnl external libraries. The public macros are:
|
|
||||||
dnl
|
|
||||||
dnl ATHENA_UTIL_COM_ERR
|
|
||||||
dnl Generates error if com_err not found.
|
|
||||||
dnl ATHENA_UTIL_SS
|
|
||||||
dnl Generates error if ss not found.
|
|
||||||
dnl ATHENA_REGEXP
|
|
||||||
dnl Sets REGEX_LIBS if rx library used; ensures POSIX
|
|
||||||
dnl regexp support.
|
|
||||||
dnl ATHENA_MOTIF
|
|
||||||
dnl Sets MOTIF_LIBS and defines HAVE_MOTIF if Motif used.
|
|
||||||
dnl ATHENA_MOTIF_REQUIRED
|
|
||||||
dnl Generates error if Motif not found.
|
|
||||||
dnl ATHENA_AFS
|
|
||||||
dnl Sets AFS_LIBS and defines HAVE_AFS if AFS used. Pass
|
|
||||||
dnl in an argument giving the desired AFS libraries;
|
|
||||||
dnl AFS_LIBS will be set to that value if AFS is found.
|
|
||||||
dnl AFS_DIR will be set to the prefix given.
|
|
||||||
dnl ATHENA_AFS_REQUIRED
|
|
||||||
dnl Generates error if AFS libraries not found. AFS_DIR
|
|
||||||
dnl will be set to the prefix given.
|
|
||||||
dnl ATHENA_KRB4
|
|
||||||
dnl Sets KRB4_LIBS and defines HAVE_KRB4 if krb4 used.
|
|
||||||
dnl ATHENA_KRB4_REQUIRED
|
|
||||||
dnl Generates error if krb4 not found. Sets KRB4_LIBS
|
|
||||||
dnl otherwise. (Special behavior because krb4 libraries
|
|
||||||
dnl may be different if using krb4 compatibility libraries
|
|
||||||
dnl from krb5.)
|
|
||||||
dnl ATHENA_KRB5
|
|
||||||
dnl Sets KRB5_LIBS and defines HAVE_KRB5 if krb5 used.
|
|
||||||
dnl ATHENA_KRB5_REQUIRED
|
|
||||||
dnl Generates error if krb5 not found.
|
|
||||||
dnl ATHENA_HESIOD
|
|
||||||
dnl Sets HESIOD_LIBS and defines HAVE_HESIOD if Hesiod
|
|
||||||
dnl used.
|
|
||||||
dnl ATHENA_HESIOD_REQUIRED
|
|
||||||
dnl Generates error if Hesiod not found.
|
|
||||||
dnl ATHENA_ARES
|
|
||||||
dnl Sets ARES_LIBS and defines HAVE_ARES if libares
|
|
||||||
dnl used.
|
|
||||||
dnl ATHENA_ARES_REQUIRED
|
|
||||||
dnl Generates error if libares not found.
|
|
||||||
dnl ATHENA_ZEPHYR
|
|
||||||
dnl Sets ZEPHYR_LIBS and defines HAVE_ZEPHYR if zephyr
|
|
||||||
dnl used.
|
|
||||||
dnl ATHENA_ZEPHYR_REQUIRED
|
|
||||||
dnl Generates error if zephyr not found.
|
|
||||||
dnl
|
|
||||||
dnl All of the macros may extend CPPFLAGS and LDFLAGS to let the
|
|
||||||
dnl compiler find the requested libraries. Put ATHENA_UTIL_COM_ERR
|
|
||||||
dnl and ATHENA_UTIL_SS before ATHENA_AFS or ATHENA_AFS_REQUIRED; there
|
|
||||||
dnl is a com_err library in the AFS libraries which requires -lutil.
|
|
||||||
|
|
||||||
dnl ----- com_err -----
|
|
||||||
|
|
||||||
AC_DEFUN(ATHENA_UTIL_COM_ERR,
|
|
||||||
[AC_ARG_WITH(com_err,
|
|
||||||
[ --with-com_err=PREFIX Specify location of com_err],
|
|
||||||
[com_err="$withval"], [com_err=yes])
|
|
||||||
if test "$com_err" != no; then
|
|
||||||
if test "$com_err" != yes; then
|
|
||||||
CPPFLAGS="$CPPFLAGS -I$com_err/include"
|
|
||||||
LDFLAGS="$LDFLAGS -L$com_err/lib"
|
|
||||||
fi
|
|
||||||
AC_CHECK_LIB(com_err, com_err, :,
|
|
||||||
[AC_MSG_ERROR(com_err library not found)])
|
|
||||||
else
|
|
||||||
AC_MSG_ERROR(This package requires com_err.)
|
|
||||||
fi])
|
|
||||||
|
|
||||||
dnl ----- ss -----
|
|
||||||
|
|
||||||
AC_DEFUN(ATHENA_UTIL_SS,
|
|
||||||
[AC_ARG_WITH(ss,
|
|
||||||
[ --with-ss=PREFIX Specify location of ss (requires com_err)],
|
|
||||||
[ss="$withval"], [ss=yes])
|
|
||||||
if test "$ss" != no; then
|
|
||||||
if test "$ss" != yes; then
|
|
||||||
CPPFLAGS="$CPPFLAGS -I$ss/include"
|
|
||||||
LDFLAGS="$LDFLAGS -L$ss/lib"
|
|
||||||
fi
|
|
||||||
AC_CHECK_LIB(ss, ss_perror, :,
|
|
||||||
[AC_MSG_ERROR(ss library not found)], -lcom_err)
|
|
||||||
else
|
|
||||||
AC_MSG_ERROR(This package requires ss.)
|
|
||||||
fi])
|
|
||||||
|
|
||||||
dnl ----- Regular expressions -----
|
|
||||||
|
|
||||||
AC_DEFUN(ATHENA_REGEXP,
|
|
||||||
[AC_ARG_WITH(regex,
|
|
||||||
[ --with-regex=PREFIX Use installed regex library],
|
|
||||||
[regex="$withval"], [regex=no])
|
|
||||||
if test "$regex" != no; then
|
|
||||||
if test "$regex" != yes; then
|
|
||||||
CPPFLAGS="$CPPFLAGS -I$regex/include"
|
|
||||||
LDFLAGS="$LDFLAGS -L$regex/lib"
|
|
||||||
fi
|
|
||||||
AC_CHECK_LIB(regex, regcomp, REGEX_LIBS=-lregex,
|
|
||||||
[AC_MSG_ERROR(regex library not found)])
|
|
||||||
else
|
|
||||||
AC_CHECK_FUNC(regcomp, :,
|
|
||||||
[AC_MSG_ERROR(can't find POSIX regexp support)])
|
|
||||||
fi
|
|
||||||
AC_SUBST(REGEX_LIBS)])
|
|
||||||
|
|
||||||
dnl ----- Motif -----
|
|
||||||
|
|
||||||
AC_DEFUN(ATHENA_MOTIF_CHECK,
|
|
||||||
[if test "$motif" != yes; then
|
|
||||||
CPPFLAGS="$CPPFLAGS -I$motif/include"
|
|
||||||
LDFLAGS="$LDFLAGS -L$motif/lib"
|
|
||||||
fi
|
|
||||||
AC_CHECK_LIB(Xm, XmStringFree, :, [AC_MSG_ERROR(Motif library not found)])])
|
|
||||||
|
|
||||||
AC_DEFUN(ATHENA_MOTIF,
|
|
||||||
[AC_ARG_WITH(motif,
|
|
||||||
[ --with-motif=PREFIX Use Motif],
|
|
||||||
[motif="$withval"], [motif=no])
|
|
||||||
if test "$motif" != no; then
|
|
||||||
ATHENA_MOTIF_CHECK
|
|
||||||
MOTIF_LIBS=-lXm
|
|
||||||
AC_DEFINE(HAVE_MOTIF)
|
|
||||||
fi
|
|
||||||
AC_SUBST(MOTIF_LIBS)])
|
|
||||||
|
|
||||||
AC_DEFUN(ATHENA_MOTIF_REQUIRED,
|
|
||||||
[AC_ARG_WITH(motif,
|
|
||||||
[ --with-motif=PREFIX Specify location of Motif],
|
|
||||||
[motif="$withval"], [motif=yes])
|
|
||||||
if test "$motif" != no; then
|
|
||||||
ATHENA_MOTIF_CHECK
|
|
||||||
else
|
|
||||||
AC_MSG_ERROR(This package requires Motif.)
|
|
||||||
fi])
|
|
||||||
|
|
||||||
dnl ----- AFS -----
|
|
||||||
|
|
||||||
AC_DEFUN(ATHENA_AFS_CHECK,
|
|
||||||
[AC_CHECK_FUNC(insque, :, AC_CHECK_LIB(compat, insque))
|
|
||||||
AC_CHECK_FUNC(gethostbyname, :, AC_CHECK_LIB(nsl, gethostbyname))
|
|
||||||
AC_CHECK_FUNC(socket, :, AC_CHECK_LIB(socket, socket))
|
|
||||||
if test "$afs" != yes; then
|
|
||||||
CPPFLAGS="$CPPFLAGS -I$afs/include"
|
|
||||||
LDFLAGS="$LDFLAGS -L$afs/lib -L$afs/lib/afs"
|
|
||||||
fi
|
|
||||||
AC_CHECK_LIB(sys, pioctl, :, [AC_MSG_ERROR(AFS libraries not found)],
|
|
||||||
-lrx -llwp -lsys)
|
|
||||||
AFS_DIR=$afs
|
|
||||||
AC_SUBST(AFS_DIR)])
|
|
||||||
|
|
||||||
dnl Specify desired AFS libraries as a parameter.
|
|
||||||
AC_DEFUN(ATHENA_AFS,
|
|
||||||
[AC_ARG_WITH(afs,
|
|
||||||
[ --with-afs=PREFIX Use AFS libraries],
|
|
||||||
[afs="$withval"], [afs=no])
|
|
||||||
if test "$afs" != no; then
|
|
||||||
ATHENA_AFS_CHECK
|
|
||||||
AFS_LIBS=$1
|
|
||||||
AC_DEFINE(HAVE_AFS)
|
|
||||||
fi
|
|
||||||
AC_SUBST(AFS_LIBS)])
|
|
||||||
|
|
||||||
AC_DEFUN(ATHENA_AFS_REQUIRED,
|
|
||||||
[AC_ARG_WITH(afs,
|
|
||||||
[ --with-afs=PREFIX Specify location of AFS libraries],
|
|
||||||
[afs="$withval"], [afs=/usr/afsws])
|
|
||||||
if test "$afs" != no; then
|
|
||||||
ATHENA_AFS_CHECK
|
|
||||||
else
|
|
||||||
AC_MSG_ERROR(This package requires AFS libraries.)
|
|
||||||
fi])
|
|
||||||
|
|
||||||
dnl ----- Kerberos 4 -----
|
|
||||||
|
|
||||||
AC_DEFUN(ATHENA_KRB4_CHECK,
|
|
||||||
[AC_CHECK_FUNC(gethostbyname, :, AC_CHECK_LIB(nsl, gethostbyname))
|
|
||||||
AC_CHECK_FUNC(socket, :, AC_CHECK_LIB(socket, socket))
|
|
||||||
AC_CHECK_LIB(gen, compile)
|
|
||||||
if test "$krb4" != yes; then
|
|
||||||
CPPFLAGS="$CPPFLAGS -I$krb4/include"
|
|
||||||
if test -d "$krb4/include/kerberosIV"; then
|
|
||||||
CPPFLAGS="$CPPFLAGS -I$krb4/include/kerberosIV"
|
|
||||||
fi
|
|
||||||
LDFLAGS="$LDFLAGS -L$krb4/lib"
|
|
||||||
fi
|
|
||||||
AC_CHECK_LIB(krb4, krb_rd_req,
|
|
||||||
[KRB4_LIBS="-lkrb4 -ldes425 -lkrb5 -lk5crypto -lcom_err"],
|
|
||||||
[AC_CHECK_LIB(krb, krb_rd_req,
|
|
||||||
[KRB4_LIBS="-lkrb -ldes"],
|
|
||||||
[AC_MSG_ERROR(Kerberos 4 libraries not found)],
|
|
||||||
-ldes)],
|
|
||||||
-ldes425 -lkrb5 -lk5crypto -lcom_err)])
|
|
||||||
|
|
||||||
AC_DEFUN(ATHENA_KRB4,
|
|
||||||
[AC_ARG_WITH(krb4,
|
|
||||||
[ --with-krb4=PREFIX Use Kerberos 4],
|
|
||||||
[krb4="$withval"], [krb4=no])
|
|
||||||
if test "$krb4" != no; then
|
|
||||||
ATHENA_KRB4_CHECK
|
|
||||||
AC_DEFINE(HAVE_KRB4)
|
|
||||||
fi
|
|
||||||
AC_SUBST(KRB4_LIBS)])
|
|
||||||
|
|
||||||
AC_DEFUN(ATHENA_KRB4_REQUIRED,
|
|
||||||
[AC_ARG_WITH(krb4,
|
|
||||||
[ --with-krb4=PREFIX Specify location of Kerberos 4],
|
|
||||||
[krb4="$withval"], [krb4=yes])
|
|
||||||
if test "$krb4" != no; then
|
|
||||||
ATHENA_KRB4_CHECK
|
|
||||||
AC_SUBST(KRB4_LIBS)
|
|
||||||
else
|
|
||||||
AC_MSG_ERROR(This package requires Kerberos 4.)
|
|
||||||
fi])
|
|
||||||
|
|
||||||
dnl ----- Kerberos 5 -----
|
|
||||||
|
|
||||||
AC_DEFUN(ATHENA_KRB5_CHECK,
|
|
||||||
[AC_SEARCH_LIBS(gethostbyname, nsl)
|
|
||||||
AC_SEARCH_LIBS(socket, socket)
|
|
||||||
AC_CHECK_LIB(gen, compile)
|
|
||||||
if test "$krb5" != yes; then
|
|
||||||
CPPFLAGS="$CPPFLAGS -I$krb5/include"
|
|
||||||
LDFLAGS="$LDFLAGS -L$krb5/lib"
|
|
||||||
fi
|
|
||||||
AC_CHECK_LIB(krb5, krb5_init_context, :,
|
|
||||||
[AC_MSG_ERROR(Kerberos 5 libraries not found)],
|
|
||||||
-lk5crypto -lcom_err)])
|
|
||||||
|
|
||||||
AC_DEFUN(ATHENA_KRB5,
|
|
||||||
[AC_ARG_WITH(krb5,
|
|
||||||
[ --with-krb5=PREFIX Use Kerberos 5],
|
|
||||||
[krb5="$withval"], [krb5=no])
|
|
||||||
if test "$krb5" != no; then
|
|
||||||
ATHENA_KRB5_CHECK
|
|
||||||
KRB5_LIBS="-lkrb5 -lk5crypto -lcom_err"
|
|
||||||
AC_DEFINE(HAVE_KRB5)
|
|
||||||
fi
|
|
||||||
AC_SUBST(KRB5_LIBS)])
|
|
||||||
|
|
||||||
AC_DEFUN(ATHENA_KRB5_REQUIRED,
|
|
||||||
[AC_ARG_WITH(krb5,
|
|
||||||
[ --with-krb5=PREFIX Specify location of Kerberos 5],
|
|
||||||
[krb5="$withval"], [krb5=yes])
|
|
||||||
if test "$krb5" != no; then
|
|
||||||
ATHENA_KRB5_CHECK
|
|
||||||
else
|
|
||||||
AC_MSG_ERROR(This package requires Kerberos 5.)
|
|
||||||
fi])
|
|
||||||
|
|
||||||
dnl ----- Hesiod -----
|
|
||||||
|
|
||||||
AC_DEFUN(ATHENA_HESIOD_CHECK,
|
|
||||||
[AC_CHECK_FUNC(res_send, :, AC_CHECK_LIB(resolv, res_send))
|
|
||||||
if test "$hesiod" != yes; then
|
|
||||||
CPPFLAGS="$CPPFLAGS -I$hesiod/include"
|
|
||||||
LDFLAGS="$LDFLAGS -L$hesiod/lib"
|
|
||||||
fi
|
|
||||||
AC_CHECK_LIB(hesiod, hes_resolve, :,
|
|
||||||
[AC_MSG_ERROR(Hesiod library not found)])])
|
|
||||||
|
|
||||||
AC_DEFUN(ATHENA_HESIOD,
|
|
||||||
[AC_ARG_WITH(hesiod,
|
|
||||||
[ --with-hesiod=PREFIX Use Hesiod],
|
|
||||||
[hesiod="$withval"], [hesiod=no])
|
|
||||||
if test "$hesiod" != no; then
|
|
||||||
ATHENA_HESIOD_CHECK
|
|
||||||
HESIOD_LIBS="-lhesiod"
|
|
||||||
AC_DEFINE(HAVE_HESIOD)
|
|
||||||
fi
|
|
||||||
AC_SUBST(HESIOD_LIBS)])
|
|
||||||
|
|
||||||
AC_DEFUN(ATHENA_HESIOD_REQUIRED,
|
|
||||||
[AC_ARG_WITH(hesiod,
|
|
||||||
[ --with-hesiod=PREFIX Specify location of Hesiod],
|
|
||||||
[hesiod="$withval"], [hesiod=yes])
|
|
||||||
if test "$hesiod" != no; then
|
|
||||||
ATHENA_HESIOD_CHECK
|
|
||||||
else
|
|
||||||
AC_MSG_ERROR(This package requires Hesiod.)
|
|
||||||
fi])
|
|
||||||
|
|
||||||
dnl ----- libares -----
|
|
||||||
|
|
||||||
AC_DEFUN(ATHENA_ARES_CHECK,
|
|
||||||
[AC_CHECK_FUNC(res_send, :, AC_CHECK_LIB(resolv, res_send))
|
|
||||||
if test "$ares" != yes; then
|
|
||||||
CPPFLAGS="$CPPFLAGS -I$ares/include"
|
|
||||||
LDFLAGS="$LDFLAGS -L$ares/lib"
|
|
||||||
fi
|
|
||||||
AC_CHECK_LIB(ares, ares_init, :, [AC_MSG_ERROR(libares not found)])])
|
|
||||||
|
|
||||||
AC_DEFUN(ATHENA_ARES,
|
|
||||||
[AC_ARG_WITH(ares,
|
|
||||||
[ --with-ares=PREFIX Use libares],
|
|
||||||
[ares="$withval"], [ares=no])
|
|
||||||
if test "$ares" != no; then
|
|
||||||
ATHENA_ARES_CHECK
|
|
||||||
ARES_LIBS="-lares"
|
|
||||||
AC_DEFINE(HAVE_ARES)
|
|
||||||
fi
|
|
||||||
AC_SUBST(ARES_LIBS)])
|
|
||||||
|
|
||||||
AC_DEFUN(ATHENA_ARES_REQUIRED,
|
|
||||||
[AC_ARG_WITH(ares,
|
|
||||||
[ --with-ares=PREFIX Specify location of libares],
|
|
||||||
[ares="$withval"], [ares=yes])
|
|
||||||
if test "$ares" != no; then
|
|
||||||
ATHENA_ARES_CHECK
|
|
||||||
else
|
|
||||||
AC_MSG_ERROR(This package requires libares.)
|
|
||||||
fi])
|
|
||||||
dnl ----- zephyr -----
|
|
||||||
|
|
||||||
AC_DEFUN(ATHENA_ZEPHYR_CHECK,
|
|
||||||
[if test "$zephyr" != yes; then
|
|
||||||
CPPFLAGS="$CPPFLAGS -I$zephyr/include"
|
|
||||||
LDFLAGS="$LDFLAGS -L$zephyr/lib"
|
|
||||||
fi
|
|
||||||
AC_CHECK_LIB(zephyr, ZFreeNotice, :, [AC_MSG_ERROR(zephyr not found)])])
|
|
||||||
|
|
||||||
AC_DEFUN(ATHENA_ZEPHYR,
|
|
||||||
[AC_ARG_WITH(zephyr,
|
|
||||||
[ --with-zephyr=PREFIX Use zephyr],
|
|
||||||
[zephyr="$withval"], [zephyr=no])
|
|
||||||
if test "$zephyr" != no; then
|
|
||||||
ATHENA_ZEPHYR_CHECK
|
|
||||||
ZEPHYR_LIBS="-lzephyr"
|
|
||||||
AC_DEFINE(HAVE_ZEPHYR)
|
|
||||||
fi
|
|
||||||
AC_SUBST(ZEPHYR_LIBS)])
|
|
||||||
|
|
||||||
AC_DEFUN(ATHENA_ZEPHYR_REQUIRED,
|
|
||||||
[AC_ARG_WITH(zephyr,
|
|
||||||
[ --with-zephyr=PREFIX Specify location of zephyr],
|
|
||||||
[zephyr="$withval"], [zephyr=yes])
|
|
||||||
if test "$zephyr" != no; then
|
|
||||||
ATHENA_ZEPHYR_CHECK
|
|
||||||
else
|
|
||||||
AC_MSG_ERROR(This package requires zephyr.)
|
|
||||||
fi])
|
|
21
ares/adig.c
21
ares/adig.c
@@ -13,8 +13,6 @@
|
|||||||
* without express or implied warranty.
|
* without express or implied warranty.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static const char rcsid[] = "$Id$";
|
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
@@ -142,7 +140,6 @@ int main(int argc, char **argv)
|
|||||||
struct hostent *hostent;
|
struct hostent *hostent;
|
||||||
fd_set read_fds, write_fds;
|
fd_set read_fds, write_fds;
|
||||||
struct timeval *tvp, tv;
|
struct timeval *tvp, tv;
|
||||||
char *errmem;
|
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
WORD wVersionRequested = MAKEWORD(1,1);
|
WORD wVersionRequested = MAKEWORD(1,1);
|
||||||
@@ -241,8 +238,7 @@ int main(int argc, char **argv)
|
|||||||
if (status != ARES_SUCCESS)
|
if (status != ARES_SUCCESS)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "ares_init_options: %s\n",
|
fprintf(stderr, "ares_init_options: %s\n",
|
||||||
ares_strerror(status, &errmem));
|
ares_strerror(status));
|
||||||
ares_free_errmem(errmem);
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -283,9 +279,9 @@ int main(int argc, char **argv)
|
|||||||
|
|
||||||
static void callback(void *arg, int status, unsigned char *abuf, int alen)
|
static void callback(void *arg, int status, unsigned char *abuf, int alen)
|
||||||
{
|
{
|
||||||
char *name = (char *) arg, *errmem;
|
char *name = (char *) arg;
|
||||||
int id, qr, opcode, aa, tc, rd, ra, rcode, i;
|
int id, qr, opcode, aa, tc, rd, ra, rcode;
|
||||||
unsigned int qdcount, ancount, nscount, arcount;
|
unsigned int qdcount, ancount, nscount, arcount, i;
|
||||||
const unsigned char *aptr;
|
const unsigned char *aptr;
|
||||||
|
|
||||||
/* Display the query name if given. */
|
/* Display the query name if given. */
|
||||||
@@ -297,8 +293,7 @@ static void callback(void *arg, int status, unsigned char *abuf, int alen)
|
|||||||
*/
|
*/
|
||||||
if (status != ARES_SUCCESS)
|
if (status != ARES_SUCCESS)
|
||||||
{
|
{
|
||||||
printf("%s\n", ares_strerror(status, &errmem));
|
printf("%s\n", ares_strerror(status));
|
||||||
ares_free_errmem(errmem);
|
|
||||||
if (!abuf)
|
if (!abuf)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -375,7 +370,8 @@ static const unsigned char *display_question(const unsigned char *aptr,
|
|||||||
int alen)
|
int alen)
|
||||||
{
|
{
|
||||||
char *name;
|
char *name;
|
||||||
int type, dnsclass, status, len;
|
int type, dnsclass, status;
|
||||||
|
long len;
|
||||||
|
|
||||||
/* Parse the question name. */
|
/* Parse the question name. */
|
||||||
status = ares_expand_name(aptr, abuf, alen, &name, &len);
|
status = ares_expand_name(aptr, abuf, alen, &name, &len);
|
||||||
@@ -413,7 +409,8 @@ static const unsigned char *display_rr(const unsigned char *aptr,
|
|||||||
{
|
{
|
||||||
const unsigned char *p;
|
const unsigned char *p;
|
||||||
char *name;
|
char *name;
|
||||||
int type, dnsclass, ttl, dlen, status, len;
|
int type, dnsclass, ttl, dlen, status;
|
||||||
|
long len;
|
||||||
struct in_addr addr;
|
struct in_addr addr;
|
||||||
|
|
||||||
/* Parse the RR name. */
|
/* Parse the RR name. */
|
||||||
|
13
ares/ahost.c
13
ares/ahost.c
@@ -13,8 +13,6 @@
|
|||||||
* without express or implied warranty.
|
* without express or implied warranty.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static const char rcsid[] = "$Id$";
|
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
@@ -46,7 +44,6 @@ int main(int argc, char **argv)
|
|||||||
int status, nfds;
|
int status, nfds;
|
||||||
fd_set read_fds, write_fds;
|
fd_set read_fds, write_fds;
|
||||||
struct timeval *tvp, tv;
|
struct timeval *tvp, tv;
|
||||||
char *errmem;
|
|
||||||
struct in_addr addr;
|
struct in_addr addr;
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
@@ -55,14 +52,13 @@ int main(int argc, char **argv)
|
|||||||
WSAStartup(wVersionRequested, &wsaData);
|
WSAStartup(wVersionRequested, &wsaData);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (argc == 0)
|
if (argc <= 1)
|
||||||
usage();
|
usage();
|
||||||
|
|
||||||
status = ares_init(&channel);
|
status = ares_init(&channel);
|
||||||
if (status != ARES_SUCCESS)
|
if (status != ARES_SUCCESS)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "ares_init: %s\n", ares_strerror(status, &errmem));
|
fprintf(stderr, "ares_init: %s\n", ares_strerror(status));
|
||||||
ares_free_errmem(errmem);
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -99,12 +95,11 @@ int main(int argc, char **argv)
|
|||||||
static void callback(void *arg, int status, struct hostent *host)
|
static void callback(void *arg, int status, struct hostent *host)
|
||||||
{
|
{
|
||||||
struct in_addr addr;
|
struct in_addr addr;
|
||||||
char *mem, **p;
|
char **p;
|
||||||
|
|
||||||
if (status != ARES_SUCCESS)
|
if (status != ARES_SUCCESS)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "%s: %s\n", (char *) arg, ares_strerror(status, &mem));
|
fprintf(stderr, "%s: %s\n", (char *) arg, ares_strerror(status));
|
||||||
ares_free_errmem(mem);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
18
ares/ares.h
18
ares/ares.h
@@ -20,6 +20,13 @@
|
|||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
#ifdef _AIX
|
||||||
|
/* HP-UX systems version 9, 10 and 11 lack sys/select.h and so does oldish
|
||||||
|
libc5-based Linux systems. Only include it on system that are known to
|
||||||
|
require it! */
|
||||||
|
#include <sys/select.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
#include <winsock.h>
|
#include <winsock.h>
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
@@ -48,6 +55,7 @@
|
|||||||
#define ARES_EFILE 14
|
#define ARES_EFILE 14
|
||||||
#define ARES_ENOMEM 15
|
#define ARES_ENOMEM 15
|
||||||
#define ARES_EDESTRUCTION 16
|
#define ARES_EDESTRUCTION 16
|
||||||
|
#define ARES_EBADSTR 17
|
||||||
|
|
||||||
/* Flag values */
|
/* Flag values */
|
||||||
#define ARES_FLAG_USEVC (1 << 0)
|
#define ARES_FLAG_USEVC (1 << 0)
|
||||||
@@ -97,7 +105,7 @@ int ares_init(ares_channel *channelptr);
|
|||||||
int ares_init_options(ares_channel *channelptr, struct ares_options *options,
|
int ares_init_options(ares_channel *channelptr, struct ares_options *options,
|
||||||
int optmask);
|
int optmask);
|
||||||
void ares_destroy(ares_channel channel);
|
void ares_destroy(ares_channel channel);
|
||||||
|
void ares_cancel(ares_channel channel);
|
||||||
void ares_send(ares_channel channel, const unsigned char *qbuf, int qlen,
|
void ares_send(ares_channel channel, const unsigned char *qbuf, int qlen,
|
||||||
ares_callback callback, void *arg);
|
ares_callback callback, void *arg);
|
||||||
void ares_query(ares_channel channel, const char *name, int dnsclass,
|
void ares_query(ares_channel channel, const char *name, int dnsclass,
|
||||||
@@ -117,14 +125,16 @@ void ares_process(ares_channel channel, fd_set *read_fds, fd_set *write_fds);
|
|||||||
int ares_mkquery(const char *name, int dnsclass, int type, unsigned short id,
|
int ares_mkquery(const char *name, int dnsclass, int type, unsigned short id,
|
||||||
int rd, unsigned char **buf, int *buflen);
|
int rd, unsigned char **buf, int *buflen);
|
||||||
int ares_expand_name(const unsigned char *encoded, const unsigned char *abuf,
|
int ares_expand_name(const unsigned char *encoded, const unsigned char *abuf,
|
||||||
int alen, char **s, int *enclen);
|
int alen, char **s, long *enclen);
|
||||||
|
int ares_expand_string(const unsigned char *encoded, const unsigned char *abuf,
|
||||||
|
int alen, unsigned char **s, long *enclen);
|
||||||
int ares_parse_a_reply(const unsigned char *abuf, int alen,
|
int ares_parse_a_reply(const unsigned char *abuf, int alen,
|
||||||
struct hostent **host);
|
struct hostent **host);
|
||||||
int ares_parse_ptr_reply(const unsigned char *abuf, int alen, const void *addr,
|
int ares_parse_ptr_reply(const unsigned char *abuf, int alen, const void *addr,
|
||||||
int addrlen, int family, struct hostent **host);
|
int addrlen, int family, struct hostent **host);
|
||||||
void ares_free_string(char *str);
|
void ares_free_string(void *str);
|
||||||
void ares_free_hostent(struct hostent *host);
|
void ares_free_hostent(struct hostent *host);
|
||||||
const char *ares_strerror(int code, char **memptr);
|
const char *ares_strerror(int code);
|
||||||
void ares_free_errmem(char *mem);
|
void ares_free_errmem(char *mem);
|
||||||
|
|
||||||
#endif /* ARES__H */
|
#endif /* ARES__H */
|
||||||
|
@@ -13,8 +13,6 @@
|
|||||||
* without express or implied warranty.
|
* without express or implied warranty.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static const char rcsid[] = "$Id$";
|
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
#else
|
#else
|
||||||
|
@@ -13,8 +13,6 @@
|
|||||||
* without express or implied warranty.
|
* without express or implied warranty.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static const char rcsid[] = "$Id$";
|
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
|
@@ -13,8 +13,6 @@
|
|||||||
* without express or implied warranty.
|
* without express or implied warranty.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static const char rcsid[] = "$Id$";
|
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
@@ -32,7 +30,8 @@ static const char rcsid[] = "$Id$";
|
|||||||
int ares__read_line(FILE *fp, char **buf, int *bufsize)
|
int ares__read_line(FILE *fp, char **buf, int *bufsize)
|
||||||
{
|
{
|
||||||
char *newbuf;
|
char *newbuf;
|
||||||
int offset = 0, len;
|
size_t offset = 0;
|
||||||
|
size_t len;
|
||||||
|
|
||||||
if (*buf == NULL)
|
if (*buf == NULL)
|
||||||
{
|
{
|
||||||
@@ -44,7 +43,7 @@ int ares__read_line(FILE *fp, char **buf, int *bufsize)
|
|||||||
|
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
if (!fgets(*buf + offset, *bufsize - offset, fp))
|
if (!fgets(*buf + offset, *bufsize - (int)offset, fp))
|
||||||
return (offset != 0) ? 0 : (ferror(fp)) ? ARES_EFILE : ARES_EOF;
|
return (offset != 0) ? 0 : (ferror(fp)) ? ARES_EFILE : ARES_EOF;
|
||||||
len = offset + strlen(*buf + offset);
|
len = offset + strlen(*buf + offset);
|
||||||
if ((*buf)[len - 1] == '\n')
|
if ((*buf)[len - 1] == '\n')
|
||||||
|
@@ -14,29 +14,24 @@
|
|||||||
.\" this software for any purpose. It is provided "as is"
|
.\" this software for any purpose. It is provided "as is"
|
||||||
.\" without express or implied warranty.
|
.\" without express or implied warranty.
|
||||||
.\"
|
.\"
|
||||||
.TH ARES_FREE_ERRMEM 3 "23 July 1998"
|
.TH ARES_CANCEL 3 "31 March 2004"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
ares_free_errmem \- Free memory allocated by ares_strerror
|
ares_cancel \- Cancel a resolve
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
.nf
|
.nf
|
||||||
.B #include <ares.h>
|
.B #include <ares.h>
|
||||||
.PP
|
.PP
|
||||||
.B void ares_free_errmem(char *\fIerrmem\fP)
|
.B int ares_cancel(ares_channel \fIchannel\fP)
|
||||||
.fi
|
.fi
|
||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
||||||
The
|
The \fBares_cancel\fP function cancels all lookups/requests made on the the
|
||||||
.B ares_free_errmem
|
name service channel identified by \fIchannel\fP. \fBares_cancel\fP invokes
|
||||||
function frees any memory which might have been allocated by the
|
the callbacks for each pending query on the channel, passing a status of
|
||||||
.BR ares_strerror (3)
|
.BR ARES_ETIMEOUT .
|
||||||
function. The parameter
|
These calls give the callbacks a chance to clean up any state which
|
||||||
.I errmem
|
might have been stored in their arguments.
|
||||||
should be set to the variable pointed to by the
|
|
||||||
.I memptr
|
|
||||||
argument previously passed to
|
|
||||||
.IR ares_strerror .
|
|
||||||
.SH SEE ALSO
|
.SH SEE ALSO
|
||||||
.BR ares_strerror (3)
|
.BR ares_init (3)
|
||||||
|
.BR ares_destroy (3)
|
||||||
.SH AUTHOR
|
.SH AUTHOR
|
||||||
Greg Hudson, MIT Information Systems
|
Dirk Manske
|
||||||
.br
|
|
||||||
Copyright 1998 by the Massachusetts Institute of Technology.
|
|
@@ -13,14 +13,32 @@
|
|||||||
* without express or implied warranty.
|
* without express or implied warranty.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static const char rcsid[] = "$Id$";
|
#include <stdlib.h>
|
||||||
|
|
||||||
#include "ares.h"
|
#include "ares.h"
|
||||||
|
#include "ares_private.h"
|
||||||
|
|
||||||
/* Do nothing, for now. A future implementation may want to deal with
|
/*
|
||||||
* internationalization, in which case ares_strerror() might allocate
|
* ares_cancel() cancels a ongoing request/resolve that might be going on on
|
||||||
* memory which we would then have to free.
|
* the given channel. It does NOT kill the channel, use ares_destroy() for
|
||||||
|
* that.
|
||||||
*/
|
*/
|
||||||
void ares_free_errmem(char *mem)
|
void ares_cancel(ares_channel channel)
|
||||||
{
|
{
|
||||||
|
struct query *query, *next;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (query = channel->queries; query; query = next)
|
||||||
|
{
|
||||||
|
next = query->next;
|
||||||
|
query->callback(query->arg, ARES_ETIMEOUT, NULL, 0);
|
||||||
|
free(query->tcpbuf);
|
||||||
|
free(query->skip_server);
|
||||||
|
free(query);
|
||||||
|
}
|
||||||
|
channel->queries = NULL;
|
||||||
|
if (!(channel->flags & ARES_FLAG_STAYOPEN))
|
||||||
|
{
|
||||||
|
for (i = 0; i < channel->nservers; i++)
|
||||||
|
ares__close_sockets(&channel->servers[i]);
|
||||||
|
}
|
||||||
}
|
}
|
@@ -36,7 +36,8 @@ status of
|
|||||||
These calls give the callbacks a chance to clean up any state which
|
These calls give the callbacks a chance to clean up any state which
|
||||||
might have been stored in their arguments.
|
might have been stored in their arguments.
|
||||||
.SH SEE ALSO
|
.SH SEE ALSO
|
||||||
.BR ares_init (3)
|
.BR ares_init (3),
|
||||||
|
.BR ares_cancel (3)
|
||||||
.SH AUTHOR
|
.SH AUTHOR
|
||||||
Greg Hudson, MIT Information Systems
|
Greg Hudson, MIT Information Systems
|
||||||
.br
|
.br
|
||||||
|
@@ -13,8 +13,6 @@
|
|||||||
* without express or implied warranty.
|
* without express or implied warranty.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static const char rcsid[] = "$Id$";
|
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include "ares.h"
|
#include "ares.h"
|
||||||
#include "ares_private.h"
|
#include "ares_private.h"
|
||||||
@@ -30,7 +28,8 @@ void ares_destroy(ares_channel channel)
|
|||||||
for (i = 0; i < channel->ndomains; i++)
|
for (i = 0; i < channel->ndomains; i++)
|
||||||
free(channel->domains[i]);
|
free(channel->domains[i]);
|
||||||
free(channel->domains);
|
free(channel->domains);
|
||||||
free(channel->sortlist);
|
if(channel->sortlist)
|
||||||
|
free(channel->sortlist);
|
||||||
free(channel->lookups);
|
free(channel->lookups);
|
||||||
while (channel->queries)
|
while (channel->queries)
|
||||||
{
|
{
|
||||||
|
@@ -22,8 +22,7 @@ ares_expand_name \- Expand a DNS-encoded domain name
|
|||||||
.B #include <ares.h>
|
.B #include <ares.h>
|
||||||
.PP
|
.PP
|
||||||
.B int ares_expand_name(const unsigned char *\fIencoded\fP,
|
.B int ares_expand_name(const unsigned char *\fIencoded\fP,
|
||||||
.B
|
.B const unsigned char *\fIabuf\fP, int \fIalen\fP, char **\fIs\fP,
|
||||||
const unsigned char *\fIabuf\fP, int \fIalen\fP, char **\fIs\fP,
|
|
||||||
.B int *\fIenclen\fP)
|
.B int *\fIenclen\fP)
|
||||||
.fi
|
.fi
|
||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
||||||
|
@@ -13,8 +13,6 @@
|
|||||||
* without express or implied warranty.
|
* without express or implied warranty.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static const char rcsid[] = "$Id$";
|
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
@@ -26,6 +24,7 @@ static const char rcsid[] = "$Id$";
|
|||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include "ares.h"
|
#include "ares.h"
|
||||||
|
#include "ares_private.h" /* for the memdebug */
|
||||||
|
|
||||||
static int name_length(const unsigned char *encoded, const unsigned char *abuf,
|
static int name_length(const unsigned char *encoded, const unsigned char *abuf,
|
||||||
int alen);
|
int alen);
|
||||||
@@ -55,7 +54,7 @@ static int name_length(const unsigned char *encoded, const unsigned char *abuf,
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
int ares_expand_name(const unsigned char *encoded, const unsigned char *abuf,
|
int ares_expand_name(const unsigned char *encoded, const unsigned char *abuf,
|
||||||
int alen, char **s, int *enclen)
|
int alen, char **s, long *enclen)
|
||||||
{
|
{
|
||||||
int len, indir = 0;
|
int len, indir = 0;
|
||||||
char *q;
|
char *q;
|
||||||
|
62
ares/ares_expand_string.3
Normal file
62
ares/ares_expand_string.3
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
.\" $Id$
|
||||||
|
.\"
|
||||||
|
.\" Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
|
.\"
|
||||||
|
.\" Permission to use, copy, modify, and distribute this
|
||||||
|
.\" software and its documentation for any purpose and without
|
||||||
|
.\" fee is hereby granted, provided that the above copyright
|
||||||
|
.\" notice appear in all copies and that both that copyright
|
||||||
|
.\" notice and this permission notice appear in supporting
|
||||||
|
.\" documentation, and that the name of M.I.T. not be used in
|
||||||
|
.\" advertising or publicity pertaining to distribution of the
|
||||||
|
.\" software without specific, written prior permission.
|
||||||
|
.\" M.I.T. makes no representations about the suitability of
|
||||||
|
.\" this software for any purpose. It is provided "as is"
|
||||||
|
.\" without express or implied warranty.
|
||||||
|
.\"
|
||||||
|
.TH ARES_EXPAND_NAME 3 "23 July 1998"
|
||||||
|
.SH NAME
|
||||||
|
ares_expand_string \- Expand a length encoded string
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.nf
|
||||||
|
.B #include <ares.h>
|
||||||
|
.PP
|
||||||
|
.B int ares_expand_string(const unsigned char *\fIencoded\fP,
|
||||||
|
.B const unsigned char *\fIabuf\fP, int \fIalen\fP, unsigned char **\fIs\fP,
|
||||||
|
.B int *\fIenclen\fP)
|
||||||
|
.fi
|
||||||
|
.SH DESCRIPTION
|
||||||
|
The
|
||||||
|
.B ares_expand_string
|
||||||
|
function converts a length encoded string to a NULL terminated C
|
||||||
|
string. The argument
|
||||||
|
.I encoded
|
||||||
|
gives the beginning of the encoded string, and the arguments
|
||||||
|
.I abuf
|
||||||
|
and
|
||||||
|
.I alen
|
||||||
|
give the containing message buffer (necessary for the processing of
|
||||||
|
indirection pointers within the encoded domain name). The result is
|
||||||
|
placed in a NUL-terminated allocated buffer, a pointer to which is
|
||||||
|
stored in the variable pointed to by
|
||||||
|
.IR s .
|
||||||
|
The length of the encoded string is stored in the variable pointed to by
|
||||||
|
.I enclen
|
||||||
|
so that the caller can advance past the encoded string to read
|
||||||
|
further data in the message.
|
||||||
|
.SH RETURN VALUES
|
||||||
|
.B ares_expand_string
|
||||||
|
can return any of the following values:
|
||||||
|
.TP 15
|
||||||
|
.B ARES_SUCCESS
|
||||||
|
Expansion of the encoded string succeeded.
|
||||||
|
.TP 15
|
||||||
|
.B ARES_EBADSTR
|
||||||
|
The encoded string was malformed and could not be expanded.
|
||||||
|
.TP 15
|
||||||
|
.B ARES_ENOMEM
|
||||||
|
Memory was exhausted.
|
||||||
|
.SH SEE ALSO
|
||||||
|
.BR ares_free_string (3)
|
||||||
|
.SH AUTHOR
|
||||||
|
Dominick Meglio
|
65
ares/ares_expand_string.c
Normal file
65
ares/ares_expand_string.c
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and distribute this
|
||||||
|
* software and its documentation for any purpose and without
|
||||||
|
* fee is hereby granted, provided that the above copyright
|
||||||
|
* notice appear in all copies and that both that copyright
|
||||||
|
* notice and this permission notice appear in supporting
|
||||||
|
* documentation, and that the name of M.I.T. not be used in
|
||||||
|
* advertising or publicity pertaining to distribution of the
|
||||||
|
* software without specific, written prior permission.
|
||||||
|
* M.I.T. makes no representations about the suitability of
|
||||||
|
* this software for any purpose. It is provided "as is"
|
||||||
|
* without express or implied warranty.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
#include "nameser.h"
|
||||||
|
#else
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#include <arpa/nameser.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include "ares.h"
|
||||||
|
#include "ares_private.h" /* for the memdebug */
|
||||||
|
|
||||||
|
/* Simply decodes a length-encoded character string. The first byte of the
|
||||||
|
* input is the length of the string to be returned and the bytes thereafter
|
||||||
|
* are the characters of the string. The returned result will be NULL
|
||||||
|
* terminated.
|
||||||
|
*/
|
||||||
|
int ares_expand_string(const unsigned char *encoded,
|
||||||
|
const unsigned char *abuf,
|
||||||
|
int alen,
|
||||||
|
unsigned char **s,
|
||||||
|
long *enclen)
|
||||||
|
{
|
||||||
|
unsigned char *q;
|
||||||
|
long len;
|
||||||
|
if (encoded == abuf+alen)
|
||||||
|
return ARES_EBADSTR;
|
||||||
|
|
||||||
|
len = *encoded;
|
||||||
|
if (encoded+len+1 > abuf+alen)
|
||||||
|
return ARES_EBADSTR;
|
||||||
|
|
||||||
|
encoded++;
|
||||||
|
|
||||||
|
*s = malloc(len+1);
|
||||||
|
if (*s == NULL)
|
||||||
|
return ARES_ENOMEM;
|
||||||
|
q = *s;
|
||||||
|
strncpy((char *)q, (char *)encoded, len);
|
||||||
|
q[len] = '\0';
|
||||||
|
|
||||||
|
*s = q;
|
||||||
|
|
||||||
|
*enclen = len+1;
|
||||||
|
|
||||||
|
return ARES_SUCCESS;
|
||||||
|
}
|
||||||
|
|
@@ -13,8 +13,6 @@
|
|||||||
* without express or implied warranty.
|
* without express or implied warranty.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static const char rcsid[] = "$Id$";
|
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
|
@@ -28,21 +28,16 @@ The
|
|||||||
.I ares_free_hostent
|
.I ares_free_hostent
|
||||||
function frees a
|
function frees a
|
||||||
.B struct hostent
|
.B struct hostent
|
||||||
allocated by one of the functions
|
allocated by one of the functions \fIares_parse_a_reply(3)\fP or
|
||||||
.I ares_parse_a_reply
|
\fIares_parse_ptr_reply(3)\fP.
|
||||||
or
|
.SH NOTES
|
||||||
.IR ares_parse_ptr_reply .
|
It is not necessary (and is not correct) to free the host structure passed to
|
||||||
|
the callback functions for \fIares_gethostbyname(3)\fP or
|
||||||
|
\fIares_gethostbyaddr(3)\fP. The ares library will automatically free such
|
||||||
|
host structures when the callback returns.
|
||||||
.SH SEE ALSO
|
.SH SEE ALSO
|
||||||
.BR ares_parse_a_reply (3),
|
.BR ares_parse_a_reply (3),
|
||||||
.BR ares_parse_ptr_reply (3)
|
.BR ares_parse_ptr_reply (3)
|
||||||
.SH NOTES
|
|
||||||
It is not necessary (and is not correct) to free the host structure
|
|
||||||
passed to the callback functions for
|
|
||||||
.I ares_gethostbyname
|
|
||||||
or
|
|
||||||
.IR ares_gethostbyaddr .
|
|
||||||
The ares library will automatically free such host structures when the
|
|
||||||
callback returns.
|
|
||||||
.SH AUTHOR
|
.SH AUTHOR
|
||||||
Greg Hudson, MIT Information Systems
|
Greg Hudson, MIT Information Systems
|
||||||
.br
|
.br
|
||||||
|
@@ -13,8 +13,6 @@
|
|||||||
* without express or implied warranty.
|
* without express or implied warranty.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static const char rcsid[] = "$Id$";
|
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
@@ -24,6 +22,7 @@ static const char rcsid[] = "$Id$";
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "ares.h"
|
#include "ares.h"
|
||||||
|
#include "ares_private.h" /* for memdebug */
|
||||||
|
|
||||||
void ares_free_hostent(struct hostent *host)
|
void ares_free_hostent(struct hostent *host)
|
||||||
{
|
{
|
||||||
|
@@ -14,23 +14,22 @@
|
|||||||
.\" this software for any purpose. It is provided "as is"
|
.\" this software for any purpose. It is provided "as is"
|
||||||
.\" without express or implied warranty.
|
.\" without express or implied warranty.
|
||||||
.\"
|
.\"
|
||||||
.TH ARES_FREE_STRING 3 "4 January 2000"
|
.TH ARES_FREE_STRING 3 "4 February 2004"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
ares_free_string \- Free strings allocated by ares functions
|
ares_free_string \- Free strings allocated by ares functions
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
.nf
|
.nf
|
||||||
.B #include <ares.h>
|
.B #include <ares.h>
|
||||||
.PP
|
.PP
|
||||||
.B void ares_free_string(char *\fIstr\fP)
|
.B void ares_free_string(void *\fIstr\fP)
|
||||||
.fi
|
.fi
|
||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
||||||
The
|
The
|
||||||
.I ares_free_string
|
.I ares_free_string
|
||||||
function frees a string allocated by the
|
function frees a string allocated by an ares function.
|
||||||
.I ares_mkquery
|
|
||||||
function.
|
|
||||||
.SH SEE ALSO
|
.SH SEE ALSO
|
||||||
.BR ares_mkquery (3)
|
.BR ares_mkquery (3)
|
||||||
|
.BR ares_expand_string (3)
|
||||||
.SH AUTHOR
|
.SH AUTHOR
|
||||||
Greg Hudson, MIT Information Systems
|
Greg Hudson, MIT Information Systems
|
||||||
.br
|
.br
|
||||||
|
@@ -13,12 +13,10 @@
|
|||||||
* without express or implied warranty.
|
* without express or implied warranty.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static const char rcsid[] = "$Id$";
|
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include "ares.h"
|
#include "ares.h"
|
||||||
|
|
||||||
void ares_free_string(char *str)
|
void ares_free_string(void *str)
|
||||||
{
|
{
|
||||||
free(str);
|
free(str);
|
||||||
}
|
}
|
||||||
|
@@ -40,14 +40,10 @@ and
|
|||||||
.I addrlen
|
.I addrlen
|
||||||
give the address as a series of bytes, and
|
give the address as a series of bytes, and
|
||||||
.I family
|
.I family
|
||||||
gives the type of address. When the query is complete or has failed,
|
gives the type of address. When the query is complete or has failed, the ares
|
||||||
the ares library will invoke
|
library will invoke \fIcallback\fP. Completion or failure of the query may
|
||||||
.IR callback .
|
happen immediately, or may happen during a later call to
|
||||||
Completion or failure of the query may happen immediately, or may
|
\fIares_process(3)\fP, \fIares_destroy(3)\fP or \fIares_cancel(3)\fP.
|
||||||
happen during a later call to
|
|
||||||
.BR ares_process (3)
|
|
||||||
or
|
|
||||||
.BR ares_destroy (3).
|
|
||||||
.PP
|
.PP
|
||||||
The callback argument
|
The callback argument
|
||||||
.I arg
|
.I arg
|
||||||
@@ -93,7 +89,8 @@ did not complete successfully,
|
|||||||
will be
|
will be
|
||||||
.BR NULL .
|
.BR NULL .
|
||||||
.SH SEE ALSO
|
.SH SEE ALSO
|
||||||
.BR ares_process (3)
|
.BR ares_process (3),
|
||||||
|
.BR ares_gethostbyname (3)
|
||||||
.SH AUTHOR
|
.SH AUTHOR
|
||||||
Greg Hudson, MIT Information Systems
|
Greg Hudson, MIT Information Systems
|
||||||
.br
|
.br
|
||||||
|
@@ -13,8 +13,6 @@
|
|||||||
* without express or implied warranty.
|
* without express or implied warranty.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static const char rcsid[] = "$Id$";
|
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
@@ -89,10 +87,10 @@ static void next_lookup(struct addr_query *aquery)
|
|||||||
{
|
{
|
||||||
case 'b':
|
case 'b':
|
||||||
addr = ntohl(aquery->addr.s_addr);
|
addr = ntohl(aquery->addr.s_addr);
|
||||||
a1 = addr >> 24;
|
a1 = (int)((addr >> 24) & 0xff);
|
||||||
a2 = (addr >> 16) & 0xff;
|
a2 = (int)((addr >> 16) & 0xff);
|
||||||
a3 = (addr >> 8) & 0xff;
|
a3 = (int)((addr >> 8) & 0xff);
|
||||||
a4 = addr & 0xff;
|
a4 = (int)(addr & 0xff);
|
||||||
sprintf(name, "%d.%d.%d.%d.in-addr.arpa", a4, a3, a2, a1);
|
sprintf(name, "%d.%d.%d.%d.in-addr.arpa", a4, a3, a2, a1);
|
||||||
aquery->remaining_lookups = p + 1;
|
aquery->remaining_lookups = p + 1;
|
||||||
ares_query(aquery->channel, name, C_IN, T_PTR, addr_callback,
|
ares_query(aquery->channel, name, C_IN, T_PTR, addr_callback,
|
||||||
|
@@ -37,14 +37,11 @@ The parameter
|
|||||||
.I name
|
.I name
|
||||||
gives the hostname as a NUL-terminated C string, and
|
gives the hostname as a NUL-terminated C string, and
|
||||||
.I family
|
.I family
|
||||||
gives the desired type of address for the resulting host entry. When
|
gives the desired type of address for the resulting host entry. When the
|
||||||
the query is complete or has failed, the ares library will invoke
|
query is complete or has failed, the ares library will invoke \fIcallback\fP.
|
||||||
.IR callback .
|
Completion or failure of the query may happen immediately, or may happen
|
||||||
Completion or failure of the query may happen immediately, or may
|
during a later call to \fIares_process(3)\fP, \fIares_destroy(3)\fP or
|
||||||
happen during a later call to
|
\fIares_cancel(3)\fP.
|
||||||
.BR ares_process (3)
|
|
||||||
or
|
|
||||||
.BR ares_destroy (3).
|
|
||||||
.PP
|
.PP
|
||||||
The callback argument
|
The callback argument
|
||||||
.I arg
|
.I arg
|
||||||
@@ -96,7 +93,8 @@ did not complete successfully,
|
|||||||
will be
|
will be
|
||||||
.BR NULL .
|
.BR NULL .
|
||||||
.SH SEE ALSO
|
.SH SEE ALSO
|
||||||
.BR ares_process (3)
|
.BR ares_process (3),
|
||||||
|
.BR ares_gethostbyaddr (3)
|
||||||
.SH AUTHOR
|
.SH AUTHOR
|
||||||
Greg Hudson, MIT Information Systems
|
Greg Hudson, MIT Information Systems
|
||||||
.br
|
.br
|
||||||
|
@@ -13,8 +13,6 @@
|
|||||||
* without express or implied warranty.
|
* without express or implied warranty.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static const char rcsid[] = "$Id$";
|
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
|
306
ares/ares_init.c
306
ares/ares_init.c
@@ -13,8 +13,6 @@
|
|||||||
* without express or implied warranty.
|
* without express or implied warranty.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static const char rcsid[] = "$Id$";
|
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
@@ -46,12 +44,12 @@ static int init_by_defaults(ares_channel channel);
|
|||||||
static int config_domain(ares_channel channel, char *str);
|
static int config_domain(ares_channel channel, char *str);
|
||||||
static int config_lookup(ares_channel channel, const char *str);
|
static int config_lookup(ares_channel channel, const char *str);
|
||||||
static int config_nameserver(struct server_state **servers, int *nservers,
|
static int config_nameserver(struct server_state **servers, int *nservers,
|
||||||
const char *str);
|
char *str);
|
||||||
static int config_sortlist(struct apattern **sortlist, int *nsort,
|
static int config_sortlist(struct apattern **sortlist, int *nsort,
|
||||||
const char *str);
|
const char *str);
|
||||||
static int set_search(ares_channel channel, const char *str);
|
static int set_search(ares_channel channel, const char *str);
|
||||||
static int set_options(ares_channel channel, const char *str);
|
static int set_options(ares_channel channel, const char *str);
|
||||||
static char *try_config(char *s, char *opt);
|
static char *try_config(char *s, const char *opt);
|
||||||
static const char *try_option(const char *p, const char *q, const char *opt);
|
static const char *try_option(const char *p, const char *q, const char *opt);
|
||||||
static int ip_addr(const char *s, int len, struct in_addr *addr);
|
static int ip_addr(const char *s, int len, struct in_addr *addr);
|
||||||
static void natural_mask(struct apattern *pat);
|
static void natural_mask(struct apattern *pat);
|
||||||
@@ -138,7 +136,8 @@ int ares_init_options(ares_channel *channelptr, struct ares_options *options,
|
|||||||
* field, so there's not much to be done about that.
|
* field, so there's not much to be done about that.
|
||||||
*/
|
*/
|
||||||
gettimeofday(&tv, NULL);
|
gettimeofday(&tv, NULL);
|
||||||
channel->next_id = (tv.tv_sec ^ tv.tv_usec ^ getpid()) & 0xffff;
|
channel->next_id = (unsigned short)
|
||||||
|
(tv.tv_sec ^ tv.tv_usec ^ getpid()) & 0xffff;
|
||||||
|
|
||||||
channel->queries = NULL;
|
channel->queries = NULL;
|
||||||
|
|
||||||
@@ -232,7 +231,7 @@ static int init_by_environment(ares_channel channel)
|
|||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
static int get_res_size_nt(HKEY hKey, char *subkey, int *size)
|
static int get_res_size_nt(HKEY hKey, char *subkey, int *size)
|
||||||
{
|
{
|
||||||
return RegQueryValueEx(hKey, subkey, 0, NULL, NULL, size);
|
return RegQueryValueEx(hKey, subkey, 0, NULL, NULL, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Warning: returns a dynamically allocated buffer, the user MUST
|
/* Warning: returns a dynamically allocated buffer, the user MUST
|
||||||
@@ -240,55 +239,56 @@ static int get_res_size_nt(HKEY hKey, char *subkey, int *size)
|
|||||||
*/
|
*/
|
||||||
static int get_res_nt(HKEY hKey, char *subkey, char **obuf)
|
static int get_res_nt(HKEY hKey, char *subkey, char **obuf)
|
||||||
{
|
{
|
||||||
/* Test for the size we need */
|
/* Test for the size we need */
|
||||||
int size = 0;
|
int size = 0;
|
||||||
int result;
|
int result;
|
||||||
result = RegQueryValueEx(hKey, subkey, 0, NULL, NULL, &size);
|
result = RegQueryValueEx(hKey, subkey, 0, NULL, NULL, &size);
|
||||||
if ((result != ERROR_SUCCESS && result != ERROR_MORE_DATA) || !size)
|
if ((result != ERROR_SUCCESS && result != ERROR_MORE_DATA) || !size)
|
||||||
return 0;
|
return 0;
|
||||||
*obuf = malloc(size+1);
|
*obuf = malloc(size+1);
|
||||||
|
|
||||||
if (RegQueryValueEx(hKey, subkey, 0, NULL, *obuf, &size) != ERROR_SUCCESS)
|
if (RegQueryValueEx(hKey, subkey, 0, NULL, *obuf, &size) != ERROR_SUCCESS)
|
||||||
{
|
{
|
||||||
free(*obuf);
|
free(*obuf);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if (size == 1)
|
if (size == 1)
|
||||||
{
|
{
|
||||||
free(*obuf);
|
free(*obuf);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int get_res_interfaces_nt(HKEY hKey, char *subkey, char **obuf)
|
static int get_res_interfaces_nt(HKEY hKey, char *subkey, char **obuf)
|
||||||
{
|
{
|
||||||
char enumbuf[39]; /* GUIDs are 38 chars + 1 for NULL */
|
char enumbuf[39]; /* GUIDs are 38 chars + 1 for NULL */
|
||||||
int enum_size = 39;
|
int enum_size = 39;
|
||||||
int idx = 0;
|
int idx = 0;
|
||||||
HKEY hVal;
|
HKEY hVal;
|
||||||
while (RegEnumKeyEx(hKey, idx++, enumbuf, &enum_size, 0, NULL, NULL, NULL) != ERROR_NO_MORE_ITEMS)
|
while (RegEnumKeyEx(hKey, idx++, enumbuf, &enum_size, 0,
|
||||||
{
|
NULL, NULL, NULL) != ERROR_NO_MORE_ITEMS)
|
||||||
enum_size = 39;
|
{
|
||||||
if (RegOpenKeyEx(hKey, enumbuf, 0, KEY_QUERY_VALUE, &hVal) != ERROR_SUCCESS)
|
enum_size = 39;
|
||||||
continue;
|
if (RegOpenKeyEx(hKey, enumbuf, 0, KEY_QUERY_VALUE, &hVal) !=
|
||||||
if (!get_res_nt(hVal, subkey, obuf))
|
ERROR_SUCCESS)
|
||||||
RegCloseKey(hVal);
|
continue;
|
||||||
else
|
if (!get_res_nt(hVal, subkey, obuf))
|
||||||
{
|
RegCloseKey(hVal);
|
||||||
RegCloseKey(hVal);
|
else
|
||||||
return 1;
|
{
|
||||||
}
|
RegCloseKey(hVal);
|
||||||
}
|
return 1;
|
||||||
return 0;
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static int init_by_resolv_conf(ares_channel channel)
|
static int init_by_resolv_conf(ares_channel channel)
|
||||||
{
|
{
|
||||||
FILE *fp;
|
char *line = NULL;
|
||||||
char *line = NULL, *p;
|
int status, nservers = 0, nsort = 0;
|
||||||
int linesize, status, nservers = 0, nsort = 0;
|
|
||||||
struct server_state *servers = NULL;
|
struct server_state *servers = NULL;
|
||||||
struct apattern *sortlist = NULL;
|
struct apattern *sortlist = NULL;
|
||||||
|
|
||||||
@@ -317,8 +317,6 @@ DhcpNameServer
|
|||||||
DWORD data_type;
|
DWORD data_type;
|
||||||
DWORD bytes;
|
DWORD bytes;
|
||||||
DWORD result;
|
DWORD result;
|
||||||
DWORD index;
|
|
||||||
char name[MAX_PATH];
|
|
||||||
DWORD keysize = MAX_PATH;
|
DWORD keysize = MAX_PATH;
|
||||||
|
|
||||||
status = ARES_EFILE;
|
status = ARES_EFILE;
|
||||||
@@ -326,70 +324,75 @@ DhcpNameServer
|
|||||||
if (IsNT)
|
if (IsNT)
|
||||||
{
|
{
|
||||||
if (RegOpenKeyEx(
|
if (RegOpenKeyEx(
|
||||||
HKEY_LOCAL_MACHINE, WIN_NS_NT_KEY, 0,
|
HKEY_LOCAL_MACHINE, WIN_NS_NT_KEY, 0,
|
||||||
KEY_READ, &mykey
|
KEY_READ, &mykey
|
||||||
) == ERROR_SUCCESS)
|
|
||||||
{
|
|
||||||
RegOpenKeyEx(mykey, "Interfaces", 0, KEY_QUERY_VALUE|KEY_ENUMERATE_SUB_KEYS, &subkey);
|
|
||||||
if (get_res_nt(mykey, NAMESERVER, &line))
|
|
||||||
{
|
|
||||||
status = config_nameserver(&servers, &nservers, line);
|
|
||||||
free(line);
|
|
||||||
}
|
|
||||||
else if (get_res_nt(mykey, DHCPNAMESERVER, &line))
|
|
||||||
{
|
|
||||||
status = config_nameserver(&servers, &nservers, line);
|
|
||||||
free(line);
|
|
||||||
}
|
|
||||||
/* Try the interfaces */
|
|
||||||
else if (get_res_interfaces_nt(subkey, NAMESERVER, &line))
|
|
||||||
{
|
|
||||||
status = config_nameserver(&servers, &nservers, line);
|
|
||||||
free(line);
|
|
||||||
}
|
|
||||||
else if (get_res_interfaces_nt(subkey, DHCPNAMESERVER, &line))
|
|
||||||
{
|
|
||||||
status = config_nameserver(&servers, &nservers, line);
|
|
||||||
free(line);
|
|
||||||
}
|
|
||||||
RegCloseKey(subkey);
|
|
||||||
RegCloseKey(mykey);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (RegOpenKeyEx(
|
|
||||||
HKEY_LOCAL_MACHINE, WIN_NS_9X, 0,
|
|
||||||
KEY_READ, &mykey
|
|
||||||
) == ERROR_SUCCESS)
|
) == ERROR_SUCCESS)
|
||||||
|
{
|
||||||
|
RegOpenKeyEx(mykey, "Interfaces", 0,
|
||||||
|
KEY_QUERY_VALUE|KEY_ENUMERATE_SUB_KEYS, &subkey);
|
||||||
|
if (get_res_nt(mykey, NAMESERVER, &line))
|
||||||
{
|
{
|
||||||
if ((result = RegQueryValueEx(
|
status = config_nameserver(&servers, &nservers, line);
|
||||||
mykey, NAMESERVER, NULL, &data_type,
|
free(line);
|
||||||
NULL, &bytes
|
}
|
||||||
)
|
else if (get_res_nt(mykey, DHCPNAMESERVER, &line))
|
||||||
) == ERROR_SUCCESS ||
|
{
|
||||||
result == ERROR_MORE_DATA)
|
status = config_nameserver(&servers, &nservers, line);
|
||||||
{
|
free(line);
|
||||||
if (bytes) {
|
}
|
||||||
line = (char *)malloc(bytes+1);
|
/* Try the interfaces */
|
||||||
if (RegQueryValueEx(
|
else if (get_res_interfaces_nt(subkey, NAMESERVER, &line))
|
||||||
mykey, NAMESERVER, NULL, &data_type,
|
{
|
||||||
(unsigned char *)line, &bytes
|
status = config_nameserver(&servers, &nservers, line);
|
||||||
) == ERROR_SUCCESS) {
|
free(line);
|
||||||
status = config_nameserver(&servers, &nservers, line);
|
}
|
||||||
}
|
else if (get_res_interfaces_nt(subkey, DHCPNAMESERVER, &line))
|
||||||
free(line);
|
{
|
||||||
}
|
status = config_nameserver(&servers, &nservers, line);
|
||||||
}
|
free(line);
|
||||||
}
|
}
|
||||||
|
RegCloseKey(subkey);
|
||||||
RegCloseKey(mykey);
|
RegCloseKey(mykey);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (RegOpenKeyEx(
|
||||||
|
HKEY_LOCAL_MACHINE, WIN_NS_9X, 0,
|
||||||
|
KEY_READ, &mykey
|
||||||
|
) == ERROR_SUCCESS)
|
||||||
|
{
|
||||||
|
if ((result = RegQueryValueEx(
|
||||||
|
mykey, NAMESERVER, NULL, &data_type,
|
||||||
|
NULL, &bytes
|
||||||
|
)
|
||||||
|
) == ERROR_SUCCESS ||
|
||||||
|
result == ERROR_MORE_DATA)
|
||||||
|
{
|
||||||
|
if (bytes)
|
||||||
|
{
|
||||||
|
line = (char *)malloc(bytes+1);
|
||||||
|
if (RegQueryValueEx(mykey, NAMESERVER, NULL, &data_type,
|
||||||
|
(unsigned char *)line, &bytes) ==
|
||||||
|
ERROR_SUCCESS)
|
||||||
|
{
|
||||||
|
status = config_nameserver(&servers, &nservers, line);
|
||||||
|
}
|
||||||
|
free(line);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
RegCloseKey(mykey);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (status != ARES_EFILE) {
|
if (status != ARES_EFILE)
|
||||||
/*
|
{
|
||||||
|
/*
|
||||||
if (!channel->lookups) {
|
if (!channel->lookups) {
|
||||||
status = config_lookup(channel, "file bind");
|
status = config_lookup(channel, "file bind");
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
status = ARES_EOF;
|
status = ARES_EOF;
|
||||||
}
|
}
|
||||||
|
|
||||||
#elif defined(riscos)
|
#elif defined(riscos)
|
||||||
@@ -418,36 +421,41 @@ DhcpNameServer
|
|||||||
|
|
||||||
if (status == ARES_SUCCESS)
|
if (status == ARES_SUCCESS)
|
||||||
status = ARES_EOF;
|
status = ARES_EOF;
|
||||||
|
|
||||||
free(resolvers);
|
free(resolvers);
|
||||||
}
|
}
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
{
|
||||||
fp = fopen(PATH_RESOLV_CONF, "r");
|
char *p;
|
||||||
if (!fp)
|
FILE *fp;
|
||||||
return (errno == ENOENT) ? ARES_SUCCESS : ARES_EFILE;
|
int linesize;
|
||||||
while ((status = ares__read_line(fp, &line, &linesize)) == ARES_SUCCESS)
|
|
||||||
|
fp = fopen(PATH_RESOLV_CONF, "r");
|
||||||
|
if (!fp)
|
||||||
|
return (errno == ENOENT) ? ARES_SUCCESS : ARES_EFILE;
|
||||||
|
while ((status = ares__read_line(fp, &line, &linesize)) == ARES_SUCCESS)
|
||||||
{
|
{
|
||||||
if ((p = try_config(line, "domain")) && channel->ndomains == -1)
|
if ((p = try_config(line, "domain")) && channel->ndomains == -1)
|
||||||
status = config_domain(channel, p);
|
status = config_domain(channel, p);
|
||||||
else if ((p = try_config(line, "lookup")) && !channel->lookups)
|
else if ((p = try_config(line, "lookup")) && !channel->lookups)
|
||||||
status = config_lookup(channel, p);
|
status = config_lookup(channel, p);
|
||||||
else if ((p = try_config(line, "search")) && channel->ndomains == -1)
|
else if ((p = try_config(line, "search")) && channel->ndomains == -1)
|
||||||
status = set_search(channel, p);
|
status = set_search(channel, p);
|
||||||
else if ((p = try_config(line, "nameserver")) && channel->nservers == -1)
|
else if ((p = try_config(line, "nameserver")) && channel->nservers == -1)
|
||||||
status = config_nameserver(&servers, &nservers, p);
|
status = config_nameserver(&servers, &nservers, p);
|
||||||
else if ((p = try_config(line, "sortlist")) && channel->nsort == -1)
|
else if ((p = try_config(line, "sortlist")) && channel->nsort == -1)
|
||||||
status = config_sortlist(&sortlist, &nsort, p);
|
status = config_sortlist(&sortlist, &nsort, p);
|
||||||
else if ((p = try_config(line, "options")))
|
else if ((p = try_config(line, "options")))
|
||||||
status = set_options(channel, p);
|
status = set_options(channel, p);
|
||||||
else
|
else
|
||||||
status = ARES_SUCCESS;
|
status = ARES_SUCCESS;
|
||||||
if (status != ARES_SUCCESS)
|
if (status != ARES_SUCCESS)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
free(line);
|
free(line);
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -581,11 +589,52 @@ static int config_lookup(ares_channel channel, const char *str)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int config_nameserver(struct server_state **servers, int *nservers,
|
static int config_nameserver(struct server_state **servers, int *nservers,
|
||||||
const char *str)
|
char *str)
|
||||||
{
|
{
|
||||||
struct in_addr addr;
|
struct in_addr addr;
|
||||||
struct server_state *newserv;
|
struct server_state *newserv;
|
||||||
|
/* On Windows, there may be more than one nameserver specified in the same
|
||||||
|
* registry key, so we parse it as a space or comma seperated list.
|
||||||
|
*/
|
||||||
|
#ifdef WIN32
|
||||||
|
char *p = str;
|
||||||
|
char *begin = str;
|
||||||
|
int more = 1;
|
||||||
|
while (more)
|
||||||
|
{
|
||||||
|
more = 0;
|
||||||
|
while (*p && !isspace(*p) && *p != ',')
|
||||||
|
p++;
|
||||||
|
|
||||||
|
if (*p)
|
||||||
|
{
|
||||||
|
*p = 0;
|
||||||
|
more = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Skip multiple spaces or trailing spaces */
|
||||||
|
if (!*begin)
|
||||||
|
{
|
||||||
|
begin = ++p;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* This is the part that actually sets the nameserver */
|
||||||
|
addr.s_addr = inet_addr(begin);
|
||||||
|
if (addr.s_addr == INADDR_NONE)
|
||||||
|
continue;
|
||||||
|
newserv = realloc(*servers, (*nservers + 1) * sizeof(struct server_state));
|
||||||
|
if (!newserv)
|
||||||
|
return ARES_ENOMEM;
|
||||||
|
newserv[*nservers].addr = addr;
|
||||||
|
*servers = newserv;
|
||||||
|
(*nservers)++;
|
||||||
|
|
||||||
|
if (!more)
|
||||||
|
break;
|
||||||
|
begin = ++p;
|
||||||
|
}
|
||||||
|
#else
|
||||||
/* Add a nameserver entry, if this is a valid address. */
|
/* Add a nameserver entry, if this is a valid address. */
|
||||||
addr.s_addr = inet_addr(str);
|
addr.s_addr = inet_addr(str);
|
||||||
if (addr.s_addr == INADDR_NONE)
|
if (addr.s_addr == INADDR_NONE)
|
||||||
@@ -596,6 +645,7 @@ static int config_nameserver(struct server_state **servers, int *nservers,
|
|||||||
newserv[*nservers].addr = addr;
|
newserv[*nservers].addr = addr;
|
||||||
*servers = newserv;
|
*servers = newserv;
|
||||||
(*nservers)++;
|
(*nservers)++;
|
||||||
|
#endif
|
||||||
return ARES_SUCCESS;
|
return ARES_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -611,7 +661,7 @@ static int config_sortlist(struct apattern **sortlist, int *nsort,
|
|||||||
q = str;
|
q = str;
|
||||||
while (*q && *q != '/' && *q != ';' && !isspace((unsigned char)*q))
|
while (*q && *q != '/' && *q != ';' && !isspace((unsigned char)*q))
|
||||||
q++;
|
q++;
|
||||||
if (ip_addr(str, q - str, &pat.addr) == 0)
|
if (ip_addr(str, (int)(q - str), &pat.addr) == 0)
|
||||||
{
|
{
|
||||||
/* We have a pattern address; now determine the mask. */
|
/* We have a pattern address; now determine the mask. */
|
||||||
if (*q == '/')
|
if (*q == '/')
|
||||||
@@ -619,7 +669,7 @@ static int config_sortlist(struct apattern **sortlist, int *nsort,
|
|||||||
str = q + 1;
|
str = q + 1;
|
||||||
while (*q && *q != ';' && !isspace((unsigned char)*q))
|
while (*q && *q != ';' && !isspace((unsigned char)*q))
|
||||||
q++;
|
q++;
|
||||||
if (ip_addr(str, q - str, &pat.mask) != 0)
|
if (ip_addr(str, (int)(q - str), &pat.mask) != 0)
|
||||||
natural_mask(&pat);
|
natural_mask(&pat);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -718,9 +768,9 @@ static int set_options(ares_channel channel, const char *str)
|
|||||||
return ARES_SUCCESS;
|
return ARES_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static char *try_config(char *s, char *opt)
|
static char *try_config(char *s, const char *opt)
|
||||||
{
|
{
|
||||||
int len;
|
size_t len;
|
||||||
|
|
||||||
len = strlen(opt);
|
len = strlen(opt);
|
||||||
if (strncmp(s, opt, len) != 0 || !isspace((unsigned char)s[len]))
|
if (strncmp(s, opt, len) != 0 || !isspace((unsigned char)s[len]))
|
||||||
@@ -733,10 +783,8 @@ static char *try_config(char *s, char *opt)
|
|||||||
|
|
||||||
static const char *try_option(const char *p, const char *q, const char *opt)
|
static const char *try_option(const char *p, const char *q, const char *opt)
|
||||||
{
|
{
|
||||||
int len;
|
size_t len = strlen(opt);
|
||||||
|
return ((size_t)(q - p) > len && !strncmp(p, opt, len)) ? &p[len] : NULL;
|
||||||
len = strlen(opt);
|
|
||||||
return (q - p > len && strncmp(p, opt, len) == 0) ? p + len : NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ip_addr(const char *s, int len, struct in_addr *addr)
|
static int ip_addr(const char *s, int len, struct in_addr *addr)
|
||||||
|
@@ -21,11 +21,9 @@ ares_mkquery \- Compose a single-question DNS query buffer
|
|||||||
.nf
|
.nf
|
||||||
.B #include <ares.h>
|
.B #include <ares.h>
|
||||||
.PP
|
.PP
|
||||||
.B
|
.B int ares_mkquery(const char *\fIname\fP, int \fIdnsclass\fP, int \fItype\fP,
|
||||||
int ares_mkquery(const char *\fIname\fP, int \fIdnsclass\fP, int \fItype\fP,
|
.B unsigned short \fIid\fP, int \fIrd\fP, char **\fIbuf\fP,
|
||||||
.B
|
.B int *\fIbuflen\fP)
|
||||||
unsigned short \fIid\fP, int \fIrd\fP, char **\fIbuf\fP,
|
|
||||||
int *\fIbuflen\fP)
|
|
||||||
.fi
|
.fi
|
||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
||||||
The
|
The
|
||||||
@@ -52,8 +50,7 @@ stored in the variable pointed to by
|
|||||||
and the length of which will be stored in the variable pointed to by
|
and the length of which will be stored in the variable pointed to by
|
||||||
.IR buflen .
|
.IR buflen .
|
||||||
It is the caller's responsibility to free this buffer using
|
It is the caller's responsibility to free this buffer using
|
||||||
.B ares_free_string
|
\fIares_free_string(3)\fP when it is no longer needed.
|
||||||
when it is no longer needed.
|
|
||||||
.SH RETURN VALUES
|
.SH RETURN VALUES
|
||||||
.B ares_mkquery
|
.B ares_mkquery
|
||||||
can return any of the following values:
|
can return any of the following values:
|
||||||
|
@@ -13,8 +13,6 @@
|
|||||||
* without express or implied warranty.
|
* without express or implied warranty.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static const char rcsid[] = "$Id$";
|
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
|
@@ -21,9 +21,8 @@ ares_parse_a_reply \- Parse a reply to a DNS query of type A into a hostent
|
|||||||
.nf
|
.nf
|
||||||
.B #include <ares.h>
|
.B #include <ares.h>
|
||||||
.PP
|
.PP
|
||||||
.B
|
.B int ares_parse_a_reply(const unsigned char *\fIabuf\fP, int \fIalen\fP,
|
||||||
int ares_parse_a_reply(const unsigned char *\fIabuf\fB, int \fIalen\fB,
|
.B struct hostent **\fIhost\fP);
|
||||||
.B struct hostent **\fIhost\fB);
|
|
||||||
.fi
|
.fi
|
||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
||||||
The
|
The
|
||||||
|
@@ -13,8 +13,6 @@
|
|||||||
* without express or implied warranty.
|
* without express or implied warranty.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static const char rcsid[] = "$Id$";
|
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
@@ -37,8 +35,9 @@ int ares_parse_a_reply(const unsigned char *abuf, int alen,
|
|||||||
struct hostent **host)
|
struct hostent **host)
|
||||||
{
|
{
|
||||||
unsigned int qdcount, ancount;
|
unsigned int qdcount, ancount;
|
||||||
int status, i, len, rr_type, rr_class, rr_len, naddrs;
|
int status, i, rr_type, rr_class, rr_len, naddrs;
|
||||||
int naliases;
|
int naliases;
|
||||||
|
long len;
|
||||||
const unsigned char *aptr;
|
const unsigned char *aptr;
|
||||||
char *hostname, *rr_name, *rr_data, **aliases;
|
char *hostname, *rr_name, *rr_data, **aliases;
|
||||||
struct in_addr *addrs;
|
struct in_addr *addrs;
|
||||||
@@ -87,7 +86,7 @@ int ares_parse_a_reply(const unsigned char *abuf, int alen,
|
|||||||
naliases = 0;
|
naliases = 0;
|
||||||
|
|
||||||
/* Examine each answer resource record (RR) in turn. */
|
/* Examine each answer resource record (RR) in turn. */
|
||||||
for (i = 0; i < ancount; i++)
|
for (i = 0; i < (int)ancount; i++)
|
||||||
{
|
{
|
||||||
/* Decode the RR up to the data field. */
|
/* Decode the RR up to the data field. */
|
||||||
status = ares_expand_name(aptr, abuf, alen, &rr_name, &len);
|
status = ares_expand_name(aptr, abuf, alen, &rr_name, &len);
|
||||||
|
@@ -21,11 +21,9 @@ ares_parse_ptr_reply \- Parse a reply to a DNS query of type PTR into a hostent
|
|||||||
.nf
|
.nf
|
||||||
.B #include <ares.h>
|
.B #include <ares.h>
|
||||||
.PP
|
.PP
|
||||||
.B
|
.B int ares_parse_ptr_reply(const unsigned char *\fIabuf\fP, int \fIalen\fP,
|
||||||
int ares_parse_ptr_reply(const unsigned char *\fIabuf\fB, int \fIalen\fB,
|
.B const void *\fIaddr\fP, int \fIaddrlen\fP, int \fIfamily\fP,
|
||||||
.B
|
.B struct hostent **\fIhost\fP);
|
||||||
const void *\fIaddr\fP, int \fIaddrlen\fP, int \fIfamily\fP,
|
|
||||||
.B struct hostent **\fIhost\fB);
|
|
||||||
.fi
|
.fi
|
||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
||||||
The
|
The
|
||||||
|
@@ -13,8 +13,6 @@
|
|||||||
* without express or implied warranty.
|
* without express or implied warranty.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static const char rcsid[] = "$Id$";
|
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
@@ -36,7 +34,8 @@ int ares_parse_ptr_reply(const unsigned char *abuf, int alen, const void *addr,
|
|||||||
int addrlen, int family, struct hostent **host)
|
int addrlen, int family, struct hostent **host)
|
||||||
{
|
{
|
||||||
unsigned int qdcount, ancount;
|
unsigned int qdcount, ancount;
|
||||||
int status, i, len, rr_type, rr_class, rr_len;
|
int status, i, rr_type, rr_class, rr_len;
|
||||||
|
long len;
|
||||||
const unsigned char *aptr;
|
const unsigned char *aptr;
|
||||||
char *ptrname, *hostname, *rr_name, *rr_data;
|
char *ptrname, *hostname, *rr_name, *rr_data;
|
||||||
struct hostent *hostent;
|
struct hostent *hostent;
|
||||||
@@ -68,7 +67,7 @@ int ares_parse_ptr_reply(const unsigned char *abuf, int alen, const void *addr,
|
|||||||
|
|
||||||
/* Examine each answer resource record (RR) in turn. */
|
/* Examine each answer resource record (RR) in turn. */
|
||||||
hostname = NULL;
|
hostname = NULL;
|
||||||
for (i = 0; i < ancount; i++)
|
for (i = 0; i < (int)ancount; i++)
|
||||||
{
|
{
|
||||||
/* Decode the RR up to the data field. */
|
/* Decode the RR up to the data field. */
|
||||||
status = ares_expand_name(aptr, abuf, alen, &rr_name, &len);
|
status = ares_expand_name(aptr, abuf, alen, &rr_name, &len);
|
||||||
|
@@ -56,8 +56,8 @@
|
|||||||
|
|
||||||
struct send_request {
|
struct send_request {
|
||||||
/* Remaining data to send */
|
/* Remaining data to send */
|
||||||
const char *data;
|
const unsigned char *data;
|
||||||
int len;
|
size_t len;
|
||||||
|
|
||||||
/* Next request in queue */
|
/* Next request in queue */
|
||||||
struct send_request *next;
|
struct send_request *next;
|
||||||
@@ -88,11 +88,11 @@ struct query {
|
|||||||
time_t timeout;
|
time_t timeout;
|
||||||
|
|
||||||
/* Query buf with length at beginning, for TCP transmission */
|
/* Query buf with length at beginning, for TCP transmission */
|
||||||
char *tcpbuf;
|
unsigned char *tcpbuf;
|
||||||
int tcplen;
|
int tcplen;
|
||||||
|
|
||||||
/* Arguments passed to ares_send() (qbuf points into tcpbuf) */
|
/* Arguments passed to ares_send() (qbuf points into tcpbuf) */
|
||||||
const char *qbuf;
|
const unsigned char *qbuf;
|
||||||
int qlen;
|
int qlen;
|
||||||
ares_callback callback;
|
ares_callback callback;
|
||||||
void *arg;
|
void *arg;
|
||||||
@@ -143,3 +143,11 @@ void ares__send_query(ares_channel channel, struct query *query, time_t now);
|
|||||||
void ares__close_sockets(struct server_state *server);
|
void ares__close_sockets(struct server_state *server);
|
||||||
int ares__get_hostent(FILE *fp, struct hostent **host);
|
int ares__get_hostent(FILE *fp, struct hostent **host);
|
||||||
int ares__read_line(FILE *fp, char **buf, int *bufsize);
|
int ares__read_line(FILE *fp, char **buf, int *bufsize);
|
||||||
|
|
||||||
|
#ifdef CURLDEBUG
|
||||||
|
/* This is low-level hard-hacking memory leak tracking and similar. Using the
|
||||||
|
libcurl lowlevel code from within library is ugly and only works when
|
||||||
|
c-ares is built and linked with a similarly debug-build libcurl, but we do
|
||||||
|
this anyway for convenience. */
|
||||||
|
#include "../lib/memdebug.h"
|
||||||
|
#endif
|
||||||
|
@@ -35,13 +35,10 @@ The file descriptor sets pointed to by
|
|||||||
and
|
and
|
||||||
.I write_fds
|
.I write_fds
|
||||||
should have file descriptors set in them according to whether the file
|
should have file descriptors set in them according to whether the file
|
||||||
descriptors specified by
|
descriptors specified by \fIares_fds(3)\fP are ready for reading and writing.
|
||||||
.BR ares_fds (3)
|
(The easiest way to determine this information is to invoke
|
||||||
are ready for reading and writing. (The easiest way to determine this
|
|
||||||
information is to invoke
|
|
||||||
.B select
|
.B select
|
||||||
with a timeout no greater than the timeout given by
|
with a timeout no greater than the timeout given by \fIares_timeout(3)\fP ).
|
||||||
.BR ares_timeout (3)).
|
|
||||||
.PP
|
.PP
|
||||||
The
|
The
|
||||||
.B ares_process
|
.B ares_process
|
||||||
|
@@ -13,8 +13,6 @@
|
|||||||
* without express or implied warranty.
|
* without express or implied warranty.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static const char rcsid[] = "$Id$";
|
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
@@ -121,7 +119,7 @@ static void write_tcp_data(ares_channel channel, fd_set *write_fds, time_t now)
|
|||||||
while (count)
|
while (count)
|
||||||
{
|
{
|
||||||
sendreq = server->qhead;
|
sendreq = server->qhead;
|
||||||
if (count >= sendreq->len)
|
if ((size_t)count >= sendreq->len)
|
||||||
{
|
{
|
||||||
count -= sendreq->len;
|
count -= sendreq->len;
|
||||||
server->qhead = sendreq->next;
|
server->qhead = sendreq->next;
|
||||||
@@ -152,7 +150,7 @@ static void write_tcp_data(ares_channel channel, fd_set *write_fds, time_t now)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Advance the send queue by as many bytes as we sent. */
|
/* Advance the send queue by as many bytes as we sent. */
|
||||||
if (count == sendreq->len)
|
if ((size_t)count == sendreq->len)
|
||||||
{
|
{
|
||||||
server->qhead = sendreq->next;
|
server->qhead = sendreq->next;
|
||||||
if (server->qhead == NULL)
|
if (server->qhead == NULL)
|
||||||
@@ -451,7 +449,7 @@ void ares__send_query(ares_channel channel, struct query *query, time_t now)
|
|||||||
static int open_tcp_socket(ares_channel channel, struct server_state *server)
|
static int open_tcp_socket(ares_channel channel, struct server_state *server)
|
||||||
{
|
{
|
||||||
int s, flags;
|
int s, flags;
|
||||||
struct sockaddr_in sin;
|
struct sockaddr_in sockin;
|
||||||
|
|
||||||
/* Acquire a socket. */
|
/* Acquire a socket. */
|
||||||
s = socket(AF_INET, SOCK_STREAM, 0);
|
s = socket(AF_INET, SOCK_STREAM, 0);
|
||||||
@@ -464,12 +462,14 @@ static int open_tcp_socket(ares_channel channel, struct server_state *server)
|
|||||||
flags = 1;
|
flags = 1;
|
||||||
ioctlsocket(s, FIONBIO, &flags);
|
ioctlsocket(s, FIONBIO, &flags);
|
||||||
#else
|
#else
|
||||||
if (fcntl(s, F_GETFL, &flags) == -1)
|
flags = fcntl(s, F_GETFL, 0);
|
||||||
|
|
||||||
|
if (flags == -1)
|
||||||
{
|
{
|
||||||
close(s);
|
close(s);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
flags &= O_NONBLOCK;
|
flags |= O_NONBLOCK;
|
||||||
if (fcntl(s, F_SETFL, flags) == -1)
|
if (fcntl(s, F_SETFL, flags) == -1)
|
||||||
{
|
{
|
||||||
close(s);
|
close(s);
|
||||||
@@ -478,11 +478,11 @@ static int open_tcp_socket(ares_channel channel, struct server_state *server)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Connect to the server. */
|
/* Connect to the server. */
|
||||||
memset(&sin, 0, sizeof(sin));
|
memset(&sockin, 0, sizeof(sockin));
|
||||||
sin.sin_family = AF_INET;
|
sockin.sin_family = AF_INET;
|
||||||
sin.sin_addr = server->addr;
|
sockin.sin_addr = server->addr;
|
||||||
sin.sin_port = channel->tcp_port;
|
sockin.sin_port = channel->tcp_port;
|
||||||
if (connect(s, (struct sockaddr *) &sin, sizeof(sin)) == -1
|
if (connect(s, (struct sockaddr *) &sockin, sizeof(sockin)) == -1
|
||||||
&& errno != EINPROGRESS)
|
&& errno != EINPROGRESS)
|
||||||
{
|
{
|
||||||
closesocket(s);
|
closesocket(s);
|
||||||
@@ -496,7 +496,7 @@ static int open_tcp_socket(ares_channel channel, struct server_state *server)
|
|||||||
static int open_udp_socket(ares_channel channel, struct server_state *server)
|
static int open_udp_socket(ares_channel channel, struct server_state *server)
|
||||||
{
|
{
|
||||||
int s;
|
int s;
|
||||||
struct sockaddr_in sin;
|
struct sockaddr_in sockin;
|
||||||
|
|
||||||
/* Acquire a socket. */
|
/* Acquire a socket. */
|
||||||
s = socket(AF_INET, SOCK_DGRAM, 0);
|
s = socket(AF_INET, SOCK_DGRAM, 0);
|
||||||
@@ -504,11 +504,11 @@ static int open_udp_socket(ares_channel channel, struct server_state *server)
|
|||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
/* Connect to the server. */
|
/* Connect to the server. */
|
||||||
memset(&sin, 0, sizeof(sin));
|
memset(&sockin, 0, sizeof(sockin));
|
||||||
sin.sin_family = AF_INET;
|
sockin.sin_family = AF_INET;
|
||||||
sin.sin_addr = server->addr;
|
sockin.sin_addr = server->addr;
|
||||||
sin.sin_port = channel->udp_port;
|
sockin.sin_port = channel->udp_port;
|
||||||
if (connect(s, (struct sockaddr *) &sin, sizeof(sin)) == -1)
|
if (connect(s, (struct sockaddr *) &sockin, sizeof(sockin)) == -1)
|
||||||
{
|
{
|
||||||
closesocket(s);
|
closesocket(s);
|
||||||
return -1;
|
return -1;
|
||||||
@@ -525,7 +525,7 @@ static int same_questions(const unsigned char *qbuf, int qlen,
|
|||||||
const unsigned char *p;
|
const unsigned char *p;
|
||||||
int qdcount;
|
int qdcount;
|
||||||
char *name;
|
char *name;
|
||||||
int namelen;
|
long namelen;
|
||||||
int type;
|
int type;
|
||||||
int dnsclass;
|
int dnsclass;
|
||||||
} q, a;
|
} q, a;
|
||||||
|
@@ -13,8 +13,6 @@
|
|||||||
* without express or implied warranty.
|
* without express or implied warranty.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static const char rcsid[] = "$Id$";
|
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
|
@@ -13,8 +13,6 @@
|
|||||||
* without express or implied warranty.
|
* without express or implied warranty.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static const char rcsid[] = "$Id$";
|
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
@@ -185,7 +183,8 @@ static void end_squery(struct search_query *squery, int status,
|
|||||||
/* Concatenate two domains. */
|
/* Concatenate two domains. */
|
||||||
static int cat_domain(const char *name, const char *domain, char **s)
|
static int cat_domain(const char *name, const char *domain, char **s)
|
||||||
{
|
{
|
||||||
int nlen = strlen(name), dlen = strlen(domain);
|
size_t nlen = strlen(name);
|
||||||
|
size_t dlen = strlen(domain);
|
||||||
|
|
||||||
*s = malloc(nlen + 1 + dlen + 1);
|
*s = malloc(nlen + 1 + dlen + 1);
|
||||||
if (!*s)
|
if (!*s)
|
||||||
@@ -203,7 +202,7 @@ static int cat_domain(const char *name, const char *domain, char **s)
|
|||||||
*/
|
*/
|
||||||
static int single_domain(ares_channel channel, const char *name, char **s)
|
static int single_domain(ares_channel channel, const char *name, char **s)
|
||||||
{
|
{
|
||||||
int len = strlen(name);
|
size_t len = strlen(name);
|
||||||
const char *hostaliases;
|
const char *hostaliases;
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
char *line = NULL;
|
char *line = NULL;
|
||||||
|
@@ -24,8 +24,7 @@ ares_send \- Initiate a DNS query
|
|||||||
.B typedef void (*ares_callback)(void *\fIarg\fP, int \fIstatus\fP,
|
.B typedef void (*ares_callback)(void *\fIarg\fP, int \fIstatus\fP,
|
||||||
.B unsigned char *\fIabuf\fP, int \fIalen\fP)
|
.B unsigned char *\fIabuf\fP, int \fIalen\fP)
|
||||||
.PP
|
.PP
|
||||||
.B
|
.B void ares_send(ares_channel \fIchannel\fP, const unsigned char *\fIqbuf\fP,
|
||||||
void ares_send(ares_channel \fIchannel\fP, const unsigned char *\fIqbuf\fP,
|
|
||||||
.B int \fIqlen\fP, ares_callback \fIcallback\fP, void *\fIarg\fP)
|
.B int \fIqlen\fP, ares_callback \fIcallback\fP, void *\fIarg\fP)
|
||||||
.fi
|
.fi
|
||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
||||||
|
@@ -13,8 +13,6 @@
|
|||||||
* without express or implied warranty.
|
* without express or implied warranty.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static const char rcsid[] = "$Id$";
|
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
|
@@ -21,23 +21,16 @@ ares_strerror \- Get the description of an ares library error code
|
|||||||
.nf
|
.nf
|
||||||
.B #include <ares.h>
|
.B #include <ares.h>
|
||||||
.PP
|
.PP
|
||||||
.B const char *ares_strerror(int \fIcode\fP, char **\fImemptr\fP)
|
.B const char *ares_strerror(int \fIcode\fP)
|
||||||
.fi
|
.fi
|
||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
||||||
The
|
The
|
||||||
.B ares_strerror
|
.B ares_strerror
|
||||||
function gets the description of the ares library error code
|
function gets the description of the ares library error code
|
||||||
.IR code ,
|
.IR code ,
|
||||||
returning the result as a NUL-terminated C string. A pointer to
|
returning the result as a NUL-terminated C string.
|
||||||
allocated data necessary to compose the error description may be
|
.SH NOTES
|
||||||
stored in the variable pointed to by
|
This function is not compatible with ares.
|
||||||
.IR memptr .
|
|
||||||
It is the caller's responsibility to invoke
|
|
||||||
.BR ares_free_errmem (3)
|
|
||||||
with the value of that variable when the error description is no
|
|
||||||
longer needed.
|
|
||||||
.SH SEE ALSO
|
|
||||||
.BR ares_free_errmem (3)
|
|
||||||
.SH AUTHOR
|
.SH AUTHOR
|
||||||
Greg Hudson, MIT Information Systems
|
Greg Hudson, MIT Information Systems
|
||||||
.br
|
.br
|
||||||
|
@@ -13,16 +13,12 @@
|
|||||||
* without express or implied warranty.
|
* without express or implied warranty.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static const char rcsid[] = "$Id$";
|
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include "ares.h"
|
#include "ares.h"
|
||||||
|
|
||||||
const char *ares_strerror(int code, char **memptr)
|
const char *ares_strerror(int code)
|
||||||
{
|
{
|
||||||
/* A future implementation may want to handle internationalization.
|
/* Return a string literal from a table. */
|
||||||
* For now, just return a string literal from a table.
|
|
||||||
*/
|
|
||||||
const char *errtext[] = {
|
const char *errtext[] = {
|
||||||
"Successful completion",
|
"Successful completion",
|
||||||
"DNS server returned answer with no data",
|
"DNS server returned answer with no data",
|
||||||
@@ -39,9 +35,11 @@ const char *ares_strerror(int code, char **memptr)
|
|||||||
"Timeout while contacting DNS servers",
|
"Timeout while contacting DNS servers",
|
||||||
"End of file",
|
"End of file",
|
||||||
"Error reading file",
|
"Error reading file",
|
||||||
"Out of memory"
|
"Out of memory",
|
||||||
|
"Channel is being destroyed",
|
||||||
|
"Misformatted string"
|
||||||
};
|
};
|
||||||
|
|
||||||
assert(code >= 0 && code < (sizeof(errtext) / sizeof(*errtext)));
|
assert(code >= 0 && code < (int)(sizeof(errtext) / sizeof(*errtext)));
|
||||||
return errtext[code];
|
return errtext[code];
|
||||||
}
|
}
|
||||||
|
@@ -27,10 +27,8 @@ ares_fds \- Get file descriptors to select on for name service
|
|||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
||||||
The
|
The
|
||||||
.B ares_timeout
|
.B ares_timeout
|
||||||
function determines the maximum time for which the caller should wait
|
function determines the maximum time for which the caller should wait before
|
||||||
before invoking
|
invoking \fIares_process(3)\fP to process timeouts. The parameter
|
||||||
.BR ares_process (3)
|
|
||||||
to process timeouts. The parameter
|
|
||||||
.I maxtv
|
.I maxtv
|
||||||
specifies a existing maximum timeout, or
|
specifies a existing maximum timeout, or
|
||||||
.B NULL
|
.B NULL
|
||||||
|
@@ -13,8 +13,6 @@
|
|||||||
* without express or implied warranty.
|
* without express or implied warranty.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static const char rcsid[] = "$Id$";
|
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
|
41
ares/ares_version.3
Normal file
41
ares/ares_version.3
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
.\" $Id$
|
||||||
|
.\"
|
||||||
|
.\" Copyright 2004 by Daniel Stenberg
|
||||||
|
.\"
|
||||||
|
.\" Permission to use, copy, modify, and distribute this
|
||||||
|
.\" software and its documentation for any purpose and without
|
||||||
|
.\" fee is hereby granted, provided that the above copyright
|
||||||
|
.\" notice appear in all copies and that both that copyright
|
||||||
|
.\" notice and this permission notice appear in supporting
|
||||||
|
.\" documentation, and that the name of M.I.T. not be used in
|
||||||
|
.\" advertising or publicity pertaining to distribution of the
|
||||||
|
.\" software without specific, written prior permission.
|
||||||
|
.\" M.I.T. makes no representations about the suitability of
|
||||||
|
.\" this software for any purpose. It is provided "as is"
|
||||||
|
.\" without express or implied warranty.
|
||||||
|
.\"
|
||||||
|
.TH ARES_VERSION 3 "29 January 2004"
|
||||||
|
.SH NAME
|
||||||
|
ares_version \- Get the version number of the library
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.nf
|
||||||
|
.B #include <ares.h>
|
||||||
|
.PP
|
||||||
|
.B const char *ares_version(int *\fIversion\fP)
|
||||||
|
.fi
|
||||||
|
.SH DESCRIPTION
|
||||||
|
The
|
||||||
|
.B ares_version
|
||||||
|
function gets the library version as a string and optionally as an integer
|
||||||
|
stored in the
|
||||||
|
.IR version ,
|
||||||
|
argument. If you pass a NULL, no integer is attempted to be returned.
|
||||||
|
|
||||||
|
The integer is built up as 24bit number, with 8 separate bits used for major
|
||||||
|
number, minor number and patch number. This makes a version string such as
|
||||||
|
1.2.3 will be returned as the hexadecimal number 0x010203 (decimal 66051).
|
||||||
|
.SH NOTES
|
||||||
|
This function is not compatible with ares.
|
||||||
|
.SH AUTHOR
|
||||||
|
Daniel Stenberg
|
||||||
|
|
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
#include "ares_version.h"
|
#include "ares_version.h"
|
||||||
|
|
||||||
char *ares_version(int *version)
|
const char *ares_version(int *version)
|
||||||
{
|
{
|
||||||
if(version)
|
if(version)
|
||||||
*version = ARES_VERSION;
|
*version = ARES_VERSION;
|
||||||
|
@@ -4,14 +4,14 @@
|
|||||||
#define ARES__VERSION_H
|
#define ARES__VERSION_H
|
||||||
|
|
||||||
#define ARES_VERSION_MAJOR 1
|
#define ARES_VERSION_MAJOR 1
|
||||||
#define ARES_VERSION_MINOR 0
|
#define ARES_VERSION_MINOR 2
|
||||||
#define ARES_VERSION_PATCH 0
|
#define ARES_VERSION_PATCH 0
|
||||||
#define ARES_VERSION ((ARES_VERSION_MAJOR<<16)|\
|
#define ARES_VERSION ((ARES_VERSION_MAJOR<<16)|\
|
||||||
(ARES_VERSION_MINOR<<8)|\
|
(ARES_VERSION_MINOR<<8)|\
|
||||||
(ARES_VERSION_PATCH))
|
(ARES_VERSION_PATCH))
|
||||||
#define ARES_VERSION_STR "1.0.0"
|
#define ARES_VERSION_STR "1.2.0"
|
||||||
|
|
||||||
char *ares_version(int *version);
|
const char *ares_version(int *version);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
4
ares/buildconf
Executable file
4
ares/buildconf
Executable file
@@ -0,0 +1,4 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
aclocal
|
||||||
|
autoconf
|
56
ares/configure.ac
Normal file
56
ares/configure.ac
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
dnl Process this file with autoconf to produce a configure script.
|
||||||
|
AC_INIT(ares_init.c)
|
||||||
|
|
||||||
|
AC_PROG_CC
|
||||||
|
AC_PROG_INSTALL
|
||||||
|
AC_PROG_RANLIB
|
||||||
|
|
||||||
|
AC_CANONICAL_HOST
|
||||||
|
case $host_os in
|
||||||
|
solaris*)
|
||||||
|
AC_DEFINE(ETC_INET)
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
AC_SEARCH_LIBS(gethostbyname, nsl)
|
||||||
|
AC_SEARCH_LIBS(socket, socket)
|
||||||
|
|
||||||
|
dnl ************************************************************
|
||||||
|
dnl Option to switch on debug options. This makes an assumption that
|
||||||
|
dnl this is built as an 'ares' subdir in the curl source tree. Subject for
|
||||||
|
dnl improval in the future!
|
||||||
|
dnl
|
||||||
|
AC_MSG_CHECKING([whether to enable debug options])
|
||||||
|
AC_ARG_ENABLE(debug,
|
||||||
|
AC_HELP_STRING([--enable-debug],[Enable pedantic debug options])
|
||||||
|
AC_HELP_STRING([--disable-debug],[Disable debug options]),
|
||||||
|
[ case "$enableval" in
|
||||||
|
no)
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
;;
|
||||||
|
*) AC_MSG_RESULT(yes)
|
||||||
|
|
||||||
|
dnl Checks for standard header files, to make memdebug.h inclusions bettter
|
||||||
|
AC_HEADER_STDC
|
||||||
|
|
||||||
|
CPPFLAGS="$CPPFLAGS -DCURLDEBUG -I../include"
|
||||||
|
CFLAGS="$CFLAGS -g"
|
||||||
|
|
||||||
|
dnl set compiler "debug" options to become more picky, and remove
|
||||||
|
dnl optimize options from CFLAGS
|
||||||
|
CURL_CC_DEBUG_OPTS
|
||||||
|
|
||||||
|
;;
|
||||||
|
esac ],
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
)
|
||||||
|
|
||||||
|
dnl check for a few basic system headers we need
|
||||||
|
dnl AC_CHECK_HEADERS(
|
||||||
|
dnl sys/types.h \
|
||||||
|
dnl sys/time.h \
|
||||||
|
dnl sys/select.h \
|
||||||
|
dnl sys/socket.h \
|
||||||
|
dnl )
|
||||||
|
|
||||||
|
AC_OUTPUT(Makefile)
|
@@ -1,18 +0,0 @@
|
|||||||
dnl Process this file with autoconf to produce a configure script.
|
|
||||||
AC_INIT(ares_init.c)
|
|
||||||
|
|
||||||
AC_PROG_CC
|
|
||||||
AC_PROG_INSTALL
|
|
||||||
AC_PROG_RANLIB
|
|
||||||
|
|
||||||
AC_CANONICAL_HOST
|
|
||||||
case $host_os in
|
|
||||||
solaris*)
|
|
||||||
AC_DEFINE(ETC_INET)
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
AC_SEARCH_LIBS(gethostbyname, nsl)
|
|
||||||
AC_SEARCH_LIBS(socket, socket)
|
|
||||||
|
|
||||||
AC_OUTPUT(Makefile)
|
|
15
ares/maketgz
15
ares/maketgz
@@ -2,6 +2,8 @@
|
|||||||
|
|
||||||
$version = $ARGV[0];
|
$version = $ARGV[0];
|
||||||
|
|
||||||
|
$name="c-ares";
|
||||||
|
|
||||||
if($version eq "") {
|
if($version eq "") {
|
||||||
print "Enter version number!\n";
|
print "Enter version number!\n";
|
||||||
exit;
|
exit;
|
||||||
@@ -81,13 +83,18 @@ sub mkalldir {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for(@entries) {
|
for(@entries) {
|
||||||
my $dir = dirpart("arescurl-$version/$_");
|
my $dir = dirpart("$name-$version/$_");
|
||||||
# print "Create $dir\n";
|
# print "Create $dir\n";
|
||||||
mkalldir($dir);
|
mkalldir($dir);
|
||||||
# print "Copy $_ to $dir\n";
|
# print "Copy $_ to $dir\n";
|
||||||
`cp -p $_ $dir`;
|
`cp -p $_ $dir`;
|
||||||
}
|
}
|
||||||
|
|
||||||
`tar -cf arescurl-$version.tar arescurl-$version`;
|
# make a tarball
|
||||||
`gzip -9 arescurl-$version.tar`;
|
`tar -cf $name-$version.tar $name-$version`;
|
||||||
`rm -rf arescurl-$version`;
|
# gzip the tarball
|
||||||
|
`gzip -9 $name-$version.tar`;
|
||||||
|
# remove the dir
|
||||||
|
`rm -rf $name-$version`;
|
||||||
|
|
||||||
|
print "NOTE: now cvs tag this release!\n";
|
||||||
|
@@ -1,7 +1,11 @@
|
|||||||
|
#ifndef ARES_NAMESER_H
|
||||||
|
#define ARES_NAMESER_H
|
||||||
|
|
||||||
/* Windows-only header file provided by liren@vivisimo.com to make his Windows
|
/* Windows-only header file provided by liren@vivisimo.com to make his Windows
|
||||||
port build */
|
port build */
|
||||||
|
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
#include <process.h> /* for the _getpid() proto */
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
#define MAXHOSTNAMELEN 256
|
#define MAXHOSTNAMELEN 256
|
||||||
@@ -17,7 +21,8 @@ struct iovec
|
|||||||
|
|
||||||
#define getpid() _getpid()
|
#define getpid() _getpid()
|
||||||
|
|
||||||
int strcasecmp(const char *a, const char *b);
|
struct timezone { int dummy; };
|
||||||
|
|
||||||
int ares_gettimeofday(struct timeval *tv, struct timezone *tz);
|
int ares_gettimeofday(struct timeval *tv, struct timezone *tz);
|
||||||
#define gettimeofday(tv,tz) ares_gettimeofday(tv,tz)
|
#define gettimeofday(tv,tz) ares_gettimeofday(tv,tz)
|
||||||
|
|
||||||
@@ -154,6 +159,7 @@ typedef enum __ns_rcode {
|
|||||||
#define SERVFAIL ns_r_servfail
|
#define SERVFAIL ns_r_servfail
|
||||||
#define NOTIMP ns_r_notimpl
|
#define NOTIMP ns_r_notimpl
|
||||||
#define REFUSED ns_r_refused
|
#define REFUSED ns_r_refused
|
||||||
|
#undef NOERROR /* it seems this is already defined in winerror.h */
|
||||||
#define NOERROR ns_r_noerror
|
#define NOERROR ns_r_noerror
|
||||||
#define FORMERR ns_r_formerr
|
#define FORMERR ns_r_formerr
|
||||||
#define NXDOMAIN ns_r_nxdomain
|
#define NXDOMAIN ns_r_nxdomain
|
||||||
@@ -204,3 +210,17 @@ typedef enum __ns_rcode {
|
|||||||
#define T_MAILB ns_t_mailb
|
#define T_MAILB ns_t_mailb
|
||||||
#define T_MAILA ns_t_maila
|
#define T_MAILA ns_t_maila
|
||||||
#define T_ANY ns_t_any
|
#define T_ANY ns_t_any
|
||||||
|
|
||||||
|
#ifndef __MINGW32__
|
||||||
|
/* protos for the functions we provide in windows_port.c */
|
||||||
|
int ares_strncasecmp(const char *s1, const char *s2, size_t n);
|
||||||
|
int ares_strcasecmp(const char *s1, const char *s2);
|
||||||
|
|
||||||
|
/* use this define magic to prevent us from adding symbol names to the library
|
||||||
|
that is a high-risk to collide with another libraries' attempts to do the
|
||||||
|
same */
|
||||||
|
#define strncasecmp(a,b,c) ares_strncasecmp(a,b,c)
|
||||||
|
#define strcasecmp(a,b) ares_strcasecmp(a,b)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* ARES_NAMESER_H */
|
||||||
|
BIN
ares/vc/vc.ncb
BIN
ares/vc/vc.ncb
Binary file not shown.
BIN
ares/vc/vc.opt
BIN
ares/vc/vc.opt
Binary file not shown.
@@ -5,8 +5,9 @@
|
|||||||
|
|
||||||
#include "nameser.h"
|
#include "nameser.h"
|
||||||
|
|
||||||
|
#ifndef __MINGW32__
|
||||||
int
|
int
|
||||||
strncasecmp(const char *a, const char *b, size_t n)
|
ares_strncasecmp(const char *a, const char *b, size_t n)
|
||||||
{
|
{
|
||||||
size_t i;
|
size_t i;
|
||||||
|
|
||||||
@@ -19,10 +20,11 @@ strncasecmp(const char *a, const char *b, size_t n)
|
|||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
strcasecmp(const char *a, const char *b)
|
ares_strcasecmp(const char *a, const char *b)
|
||||||
{
|
{
|
||||||
return strncasecmp(a, b, strlen(a)+1);
|
return strncasecmp(a, b, strlen(a)+1);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
int
|
int
|
||||||
ares_gettimeofday(struct timeval *tv, struct timezone *tz)
|
ares_gettimeofday(struct timeval *tv, struct timezone *tz)
|
||||||
|
@@ -1,69 +0,0 @@
|
|||||||
$!
|
|
||||||
$
|
|
||||||
$ on control_y then goto Common_Exit!
|
|
||||||
$ orig = f$environment("DEFAULT")
|
|
||||||
$ loc = f$environment("PROCEDURE")
|
|
||||||
$ def = f$parse("X.X;1",loc) - "X.X;1"
|
|
||||||
$
|
|
||||||
$ set def 'def'
|
|
||||||
$ cc_qual = "/define=HAVE_CONFIG_H=1/include=(""../include/"",""../"",""../../openssl-0_9_7/include/"")"
|
|
||||||
$ if p1 .eqs. "LISTING" then cc_qual = cc_qual + "/LIST/MACHINE"
|
|
||||||
$ if p1 .eqs. "DEBUG" then cc_qual = cc_qual + "/LIST/MACHINE/DEBUG"
|
|
||||||
$ msg_qual = ""
|
|
||||||
$ call build "[.lib]" "*.c"
|
|
||||||
$ call build "[.src]" "*.c"
|
|
||||||
$ call build "[.src]" "*.msg"
|
|
||||||
$ link /exe=curl.exe [.src]curl/lib/include=main,[.lib]curl/lib, -
|
|
||||||
[-.openssl-0_9_7.axp.exe.ssl]libssl/lib, -
|
|
||||||
[-.openssl-0_9_7.axp.exe.crypto]libcrypto/lib
|
|
||||||
$
|
|
||||||
$
|
|
||||||
$ goto Common_Exit
|
|
||||||
$build: subroutine
|
|
||||||
$ set noon
|
|
||||||
$ set default 'p1'
|
|
||||||
$ search = p2
|
|
||||||
$ reset = f$search("reset")
|
|
||||||
$ if f$search("CURL.OLB") .eqs. ""
|
|
||||||
$ then
|
|
||||||
$ LIB/CREATE/OBJECT CURL.OLB
|
|
||||||
$ endif
|
|
||||||
$ reset = f$search("reset",1)
|
|
||||||
$Loop:
|
|
||||||
$ file = f$search(search,1)
|
|
||||||
$ if file .eqs. "" then goto EndLoop
|
|
||||||
$ obj = f$search(f$parse(".OBJ;",file),2)
|
|
||||||
$ if (obj .nes. "")
|
|
||||||
$ then
|
|
||||||
$ if (f$cvtime(f$file(file,"rdt")) .gts. f$cvtime(f$file(obj,"rdt")))
|
|
||||||
$ then
|
|
||||||
$ call compile 'file'
|
|
||||||
$ lib/object curl.OLB 'f$parse(".obj;",file)'
|
|
||||||
$ else
|
|
||||||
$! write sys$output "File: ''file' is up to date"
|
|
||||||
$ endif
|
|
||||||
$ else
|
|
||||||
$! write sys$output "Object for file: ''file' does not exist"
|
|
||||||
$ call compile 'file'
|
|
||||||
$ lib/object curl.OLB 'f$parse(".obj;",file)'
|
|
||||||
$ endif
|
|
||||||
$ goto Loop
|
|
||||||
$EndLoop:
|
|
||||||
$ purge
|
|
||||||
$ set def 'def'
|
|
||||||
$ endsubroutine ! Build
|
|
||||||
$
|
|
||||||
$compile: subroutine
|
|
||||||
$ set noon
|
|
||||||
$ file = p1
|
|
||||||
$ qual = p2+p3+p4+p5+p6+p7+p8
|
|
||||||
$ typ = f$parse(file,,,"TYPE") - "."
|
|
||||||
$ cmd_c = "CC "+cc_qual
|
|
||||||
$ cmd_msg = "MESSAGE "+msg_qual
|
|
||||||
$ x = cmd_'typ'
|
|
||||||
$ 'x' 'file'
|
|
||||||
$ ENDSUBROUTINE ! Compile
|
|
||||||
$
|
|
||||||
$Common_Exit:
|
|
||||||
$ set default 'orig'
|
|
||||||
$ exit
|
|
51
buildconf
51
buildconf
@@ -5,6 +5,21 @@ die(){
|
|||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# this works as 'which' but we use a different name to make it more obvious we
|
||||||
|
# aren't using 'which'! ;-)
|
||||||
|
findtool(){
|
||||||
|
file="$1"
|
||||||
|
|
||||||
|
IFS=":"
|
||||||
|
for path in $PATH
|
||||||
|
do
|
||||||
|
if test -r "$path/$file"; then
|
||||||
|
echo "$path/$file"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
#--------------------------------------------------------------------------
|
#--------------------------------------------------------------------------
|
||||||
# autoconf 2.57 or newer
|
# autoconf 2.57 or newer
|
||||||
#
|
#
|
||||||
@@ -52,7 +67,7 @@ echo "buildconf: autoheader version $ah_version (ok)"
|
|||||||
# automake 1.7 or newer
|
# automake 1.7 or newer
|
||||||
#
|
#
|
||||||
need_automake="1.7"
|
need_automake="1.7"
|
||||||
am_version=`${AUTOMAKE:-automake} --version 2>/dev/null|head -1| sed -e 's/^.* \([0-9]\)/\1/' -e 's/[a-z]* *$//'`
|
am_version=`${AUTOMAKE:-automake} --version 2>/dev/null|head -1| sed -e 's/^.* \([0-9]\)/\1/' -e 's/[a-z]* *$//' -e 's/\(.*\)\(-p.*\)/\1/'`
|
||||||
if test -z "$am_version"; then
|
if test -z "$am_version"; then
|
||||||
echo "buildconf: automake not found."
|
echo "buildconf: automake not found."
|
||||||
echo " You need automake version $need_automake or newer installed."
|
echo " You need automake version $need_automake or newer installed."
|
||||||
@@ -79,11 +94,13 @@ LIBTOOL_WANTED_MINOR=4
|
|||||||
LIBTOOL_WANTED_PATCH=2
|
LIBTOOL_WANTED_PATCH=2
|
||||||
LIBTOOL_WANTED_VERSION=1.4.2
|
LIBTOOL_WANTED_VERSION=1.4.2
|
||||||
|
|
||||||
libtool=`which glibtool 2>/dev/null`
|
# this approach that tries 'glibtool' first is some kind of work-around for
|
||||||
|
# some BSD-systems I believe that use to provide the GNU libtool named
|
||||||
|
# glibtool, with 'libtool' being something completely different.
|
||||||
|
libtool=`findtool glibtool 2>/dev/null`
|
||||||
if test ! -x "$libtool"; then
|
if test ! -x "$libtool"; then
|
||||||
libtool=`which libtool`
|
libtool=`findtool libtool`
|
||||||
fi
|
fi
|
||||||
#lt_pversion=`${LIBTOOL:-$libtool} --version 2>/dev/null|head -1| sed -e 's/^.* \([0-9]\)/\1/' -e 's/[a-z]* *$//'`
|
|
||||||
lt_pversion=`$libtool --version 2>/dev/null|head -1|sed -e 's/^[^0-9]*//g' -e 's/[- ].*//'`
|
lt_pversion=`$libtool --version 2>/dev/null|head -1|sed -e 's/^[^0-9]*//g' -e 's/[- ].*//'`
|
||||||
if test -z "$lt_pversion"; then
|
if test -z "$lt_pversion"; then
|
||||||
echo "buildconf: libtool not found."
|
echo "buildconf: libtool not found."
|
||||||
@@ -121,26 +138,46 @@ fi
|
|||||||
|
|
||||||
echo "buildconf: libtool version $lt_version (ok)"
|
echo "buildconf: libtool version $lt_version (ok)"
|
||||||
|
|
||||||
|
#--------------------------------------------------------------------------
|
||||||
|
# m4 check
|
||||||
|
#
|
||||||
|
m4=`${M4:-m4} --version 2>/dev/null|head -1`;
|
||||||
|
m4_version=`echo $m4 | sed -e 's/^.* \([0-9]\)/\1/' -e 's/[a-z]* *$//'`
|
||||||
|
|
||||||
|
if { echo $m4 | grep "GNU" >/dev/null 2>&1; } then
|
||||||
|
echo "buildconf: GNU m4 version $m4_version (ok)"
|
||||||
|
else
|
||||||
|
echo "buildconf: m4 version $m4 found. You need a GNU m4 installed!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
# ------------------------------------------------------------
|
# ------------------------------------------------------------
|
||||||
|
|
||||||
# run the correct scripts now
|
# run the correct scripts now
|
||||||
|
|
||||||
echo "buildconf: running libtoolize"
|
echo "buildconf: running libtoolize"
|
||||||
${LIBTOOLIZE:-libtoolize} --copy --automake || die "The command '${LIBTOOLIZE:-libtoolize} --copy --automake' failed"
|
${LIBTOOLIZE:-libtoolize} --copy --automake --force || die "The command '${LIBTOOLIZE:-libtoolize} --copy --automake --force' failed"
|
||||||
echo "buildconf: running aclocal"
|
echo "buildconf: running aclocal"
|
||||||
${ACLOCAL:-aclocal} || die "The command '${AUTOHEADER:-aclocal}' failed"
|
${ACLOCAL:-aclocal} $ACLOCAL_FLAGS || die "The command '${ACLOCAL:-aclocal}${ACLOCAL_FLAGS:+" $ACLOCAL_FLAGS"}' failed"
|
||||||
|
echo "buildconf: running aclocal hack to convert all mv to mv -f"
|
||||||
|
perl -i.bak -pe 's/\bmv +([^-\s])/mv -f $1/g' aclocal.m4
|
||||||
echo "buildconf: running autoheader"
|
echo "buildconf: running autoheader"
|
||||||
${AUTOHEADER:-autoheader} || die "The command '${AUTOHEADER:-autoheader}' failed"
|
${AUTOHEADER:-autoheader} || die "The command '${AUTOHEADER:-autoheader}' failed"
|
||||||
echo "buildconf: running autoconf"
|
echo "buildconf: running autoconf"
|
||||||
${AUTOCONF:-autoconf} || die "The command '${AUTOCONF:-autoconf}' failed"
|
${AUTOCONF:-autoconf} || die "The command '${AUTOCONF:-autoconf}' failed"
|
||||||
|
|
||||||
if test -d ares; then
|
if test -d ares; then
|
||||||
echo "buildconf: running autoconf in the ares directory"
|
|
||||||
cd ares
|
cd ares
|
||||||
|
echo "buildconf: running aclocal in the ares directory"
|
||||||
|
${ACLOCAL:-aclocal} $ACLOCAL_FLAGS || die "The command '${ACLOCAL:-aclocal}${ACLOCAL_FLAGS:+" $ACLOCAL_FLAGS"}' failed"
|
||||||
|
echo "buildconf: running autoconf in the ares directory"
|
||||||
${AUTOCONF:-autoconf} || die "The command '${AUTOCONF:-autoconf}' failed"
|
${AUTOCONF:-autoconf} || die "The command '${AUTOCONF:-autoconf}' failed"
|
||||||
cd ..
|
cd ..
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "buildconf: running automake"
|
echo "buildconf: running automake"
|
||||||
${AUTOMAKE:-automake} -a || die "The command '${AUTOMAKE:-automake} -a' failed"
|
${AUTOMAKE:-automake} -a || die "The command '${AUTOMAKE:-automake} -a' failed"
|
||||||
|
|
||||||
|
echo "buildconf: OK"
|
||||||
exit 0
|
exit 0
|
||||||
|
17
buildconf.bat
Normal file
17
buildconf.bat
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
@echo off
|
||||||
|
REM set up a CVS tree to build when there's no autotools
|
||||||
|
REM $Revision$
|
||||||
|
REM $Date$
|
||||||
|
|
||||||
|
REM create ca-bundle.h
|
||||||
|
echo /* This file is generated automatically */ >lib\ca-bundle.h
|
||||||
|
echo #define CURL_CA_BUNDLE getenv("CURL_CA_BUNDLE") >>lib\ca-bundle.h
|
||||||
|
|
||||||
|
REM create getdate.c
|
||||||
|
copy lib\getdate.c.cvs lib\getdate.c
|
||||||
|
|
||||||
|
REM create hugehelp.c
|
||||||
|
copy src\hugehelp.c.cvs src\hugehelp.c
|
||||||
|
|
||||||
|
REM create Makefile
|
||||||
|
copy Makefile.dist Makefile
|
359
configure.ac
359
configure.ac
@@ -24,14 +24,14 @@ AC_PATH_PROG( AR, ar, , $PATH:/usr/bin:/usr/local/bin:/usr/ccs/bin)
|
|||||||
AC_SUBST(AR)
|
AC_SUBST(AR)
|
||||||
|
|
||||||
dnl figure out the libcurl version
|
dnl figure out the libcurl version
|
||||||
VERSION=`$SED -ne 's/^#define LIBCURL_VERSION "\(.*\)"/\1/p' ${srcdir}/include/curl/curl.h`
|
VERSION=`$SED -ne 's/^#define LIBCURL_VERSION "\(.*\)"/\1/p' ${srcdir}/include/curl/curlver.h`
|
||||||
AM_INIT_AUTOMAKE(curl,$VERSION)
|
AM_INIT_AUTOMAKE(curl,$VERSION)
|
||||||
AC_MSG_CHECKING([curl version])
|
AC_MSG_CHECKING([curl version])
|
||||||
AC_MSG_RESULT($VERSION)
|
AC_MSG_RESULT($VERSION)
|
||||||
|
|
||||||
dnl
|
dnl
|
||||||
dnl we extract the numerical version for curl-config only
|
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`
|
VERSIONNUM=`$SED -ne 's/^#define LIBCURL_VERSION_NUM 0x\(.*\)/\1/p' ${srcdir}/include/curl/curlver.h`
|
||||||
AC_SUBST(VERSIONNUM)
|
AC_SUBST(VERSIONNUM)
|
||||||
|
|
||||||
dnl Solaris pkgadd support definitions
|
dnl Solaris pkgadd support definitions
|
||||||
@@ -208,37 +208,92 @@ AC_HELP_STRING([--disable-telnet],[Disable TELNET support]),
|
|||||||
AC_MSG_RESULT(yes)
|
AC_MSG_RESULT(yes)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
dnl **********************************************************************
|
||||||
|
dnl Check for built-in manual
|
||||||
|
dnl **********************************************************************
|
||||||
|
|
||||||
|
AC_MSG_CHECKING([whether to provide built-in manual])
|
||||||
|
AC_ARG_ENABLE(manual,
|
||||||
|
AC_HELP_STRING([--enable-manual],[Enable built-in manual])
|
||||||
|
AC_HELP_STRING([--disable-manual],[Disable built-in manual]),
|
||||||
|
[ case "$enableval" in
|
||||||
|
no)
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
;;
|
||||||
|
*) AC_MSG_RESULT(yes)
|
||||||
|
USE_MANUAL="1"
|
||||||
|
;;
|
||||||
|
esac ],
|
||||||
|
AC_MSG_RESULT(yes)
|
||||||
|
USE_MANUAL="1"
|
||||||
|
)
|
||||||
|
dnl The actual use of the USE_MANUAL variable is done much later in this
|
||||||
|
dnl script to allow other actions to disable it as well.
|
||||||
|
|
||||||
|
|
||||||
dnl **********************************************************************
|
dnl **********************************************************************
|
||||||
dnl Checks for libraries.
|
dnl Checks for libraries.
|
||||||
dnl **********************************************************************
|
dnl **********************************************************************
|
||||||
|
|
||||||
dnl gethostbyname in the nsl lib?
|
dnl gethostbyname without lib or in the nsl lib?
|
||||||
AC_CHECK_FUNC(gethostbyname, , [ AC_CHECK_LIB(nsl, gethostbyname) ])
|
AC_CHECK_FUNC(gethostbyname,
|
||||||
|
[HAVE_GETHOSTBYNAME="1"
|
||||||
|
],
|
||||||
|
[ AC_CHECK_LIB(nsl, gethostbyname,
|
||||||
|
[HAVE_GETHOSTBYNAME="1"
|
||||||
|
LIBS="$LIBS -lnsl"
|
||||||
|
])
|
||||||
|
])
|
||||||
|
|
||||||
if test "$ac_cv_lib_nsl_gethostbyname" != "yes" -a "$ac_cv_func_gethostbyname" != "yes"; then
|
if test "$HAVE_GETHOSTBYNAME" != "1"
|
||||||
|
then
|
||||||
dnl gethostbyname in the socket lib?
|
dnl gethostbyname in the socket lib?
|
||||||
AC_CHECK_FUNC(gethostbyname, , [ AC_CHECK_LIB(socket, gethostbyname) ])
|
AC_CHECK_LIB(socket, gethostbyname,
|
||||||
|
[HAVE_GETHOSTBYNAME="1"
|
||||||
|
LIBS="$LIBS -lsocket"
|
||||||
|
])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
dnl At least one system has been identified to require BOTH nsl and
|
dnl At least one system has been identified to require BOTH nsl and socket
|
||||||
dnl socket libs to link properly.
|
dnl libs at the same time to link properly.
|
||||||
if test "$ac_cv_lib_nsl_gethostbyname" != "yes" -a "$ac_cv_lib_socket_gethostbyname" != "yes" -a "$ac_cv_func_gethostbyname" != "yes"; then
|
if test "$HAVE_GETHOSTBYNAME" != "1"
|
||||||
AC_MSG_CHECKING([trying both nsl and socket libs])
|
then
|
||||||
|
AC_MSG_CHECKING([trying gethostbyname with both nsl and socket libs])
|
||||||
my_ac_save_LIBS=$LIBS
|
my_ac_save_LIBS=$LIBS
|
||||||
LIBS="-lnsl -lsocket $LIBS"
|
LIBS="-lnsl -lsocket $LIBS"
|
||||||
AC_TRY_LINK( ,
|
AC_TRY_LINK( ,
|
||||||
[gethostbyname();],
|
[gethostbyname();],
|
||||||
my_ac_link_result=success,
|
[ dnl found it!
|
||||||
my_ac_link_result=failure )
|
HAVE_GETHOSTBYNAME="1",
|
||||||
|
AC_MSG_RESULT([yes])],
|
||||||
|
[ dnl failed!
|
||||||
|
AC_MSG_RESULT([no])
|
||||||
|
dnl restore LIBS
|
||||||
|
LIBS=$my_ac_save_LIBS]
|
||||||
|
)
|
||||||
|
fi
|
||||||
|
|
||||||
if test "$my_ac_link_result" = "failure"; then
|
if test "$HAVE_GETHOSTBYNAME" != "1"
|
||||||
AC_MSG_RESULT([no])
|
then
|
||||||
AC_MSG_ERROR([couldn't find libraries for gethostbyname()])
|
dnl This is for Msys/Mingw
|
||||||
dnl restore LIBS
|
AC_MSG_CHECKING([for gethostbyname in ws2_32])
|
||||||
LIBS=$my_ac_save_LIBS
|
my_ac_save_LIBS=$LIBS
|
||||||
else
|
LIBS="-lws2_32 $LIBS"
|
||||||
AC_MSG_RESULT([yes])
|
AC_TRY_LINK([#include <winsock2.h>],
|
||||||
fi
|
[gethostbyname("www.dummysite.com");],
|
||||||
|
[ dnl worked!
|
||||||
|
AC_MSG_RESULT([yes])
|
||||||
|
HAVE_GETHOSTBYNAME="1"],
|
||||||
|
[ dnl failed, restore LIBS
|
||||||
|
LIBS=$my_ac_save_LIBS
|
||||||
|
AC_MSG_RESULT(no)]
|
||||||
|
)
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test "$HAVE_GETHOSTBYNAME" = "1"; then
|
||||||
|
AC_DEFINE(HAVE_GETHOSTBYNAME, 1, [If you have gethostbyname])
|
||||||
|
else
|
||||||
|
AC_MSG_ERROR([couldn't find libraries for gethostbyname()])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
dnl resolve lib?
|
dnl resolve lib?
|
||||||
@@ -271,6 +326,25 @@ AC_HELP_STRING([--enable-libgcc],[use libgcc when linking]),
|
|||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
dnl **********************************************************************
|
||||||
|
dnl Check for the presence of the winmm library.
|
||||||
|
dnl **********************************************************************
|
||||||
|
|
||||||
|
AC_MSG_CHECKING([for timeGetTime in winmm])
|
||||||
|
my_ac_save_LIBS=$LIBS
|
||||||
|
LIBS="-lwinmm $LIBS"
|
||||||
|
AC_TRY_LINK([#include <windef.h>
|
||||||
|
#include <mmsystem.h>
|
||||||
|
],
|
||||||
|
[timeGetTime();],
|
||||||
|
[ dnl worked!
|
||||||
|
AC_MSG_RESULT([yes])
|
||||||
|
],
|
||||||
|
[ dnl failed, restore LIBS
|
||||||
|
LIBS=$my_ac_save_LIBS
|
||||||
|
AC_MSG_RESULT(no)]
|
||||||
|
)
|
||||||
|
|
||||||
dnl **********************************************************************
|
dnl **********************************************************************
|
||||||
dnl Checks for IPv6
|
dnl Checks for IPv6
|
||||||
dnl **********************************************************************
|
dnl **********************************************************************
|
||||||
@@ -310,6 +384,8 @@ main()
|
|||||||
|
|
||||||
if test "$ipv6" = "yes"; then
|
if test "$ipv6" = "yes"; then
|
||||||
CURL_CHECK_WORKING_GETADDRINFO
|
CURL_CHECK_WORKING_GETADDRINFO
|
||||||
|
|
||||||
|
CURL_CHECK_NI_WITHSCOPEID
|
||||||
fi
|
fi
|
||||||
|
|
||||||
dnl **********************************************************************
|
dnl **********************************************************************
|
||||||
@@ -416,8 +492,8 @@ AC_HELP_STRING([--with-krb4=DIR],[where to look for Kerberos4]),[
|
|||||||
OPT_KRB4="$withval"
|
OPT_KRB4="$withval"
|
||||||
if test X"$OPT_KRB4" != Xyes
|
if test X"$OPT_KRB4" != Xyes
|
||||||
then
|
then
|
||||||
LDFLAGS="$LDFLAGS -L$OPT_KRB4/lib"
|
LDFLAGS="$LDFLAGS -L$OPT_KRB4/lib$libsuff"
|
||||||
KRB4LIB="$OPT_KRB4/lib"
|
KRB4LIB="$OPT_KRB4/lib$libsuff"
|
||||||
CPPFLAGS="$CPPFLAGS -I$OPT_KRB4/include"
|
CPPFLAGS="$CPPFLAGS -I$OPT_KRB4/include"
|
||||||
KRB4INC="$OPT_KRB4/include"
|
KRB4INC="$OPT_KRB4/include"
|
||||||
fi
|
fi
|
||||||
@@ -543,7 +619,7 @@ if test x"$want_gss" = xyes; then
|
|||||||
if test -f "$GSSAPI_ROOT/bin/krb5-config"; then
|
if test -f "$GSSAPI_ROOT/bin/krb5-config"; then
|
||||||
GSSAPI_INCS=`$GSSAPI_ROOT/bin/krb5-config --cflags gssapi`
|
GSSAPI_INCS=`$GSSAPI_ROOT/bin/krb5-config --cflags gssapi`
|
||||||
else
|
else
|
||||||
GSSAPI_INCS=="-I$GSSAPI_ROOT/include"
|
GSSAPI_INCS="-I$GSSAPI_ROOT/include"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
CPPFLAGS="$CPPFLAGS $GSSAPI_INCS"
|
CPPFLAGS="$CPPFLAGS $GSSAPI_INCS"
|
||||||
@@ -553,7 +629,7 @@ if test x"$want_gss" = xyes; then
|
|||||||
gss_ldflags=`$GSSAPI_ROOT/bin/krb5-config --libs gssapi`
|
gss_ldflags=`$GSSAPI_ROOT/bin/krb5-config --libs gssapi`
|
||||||
LDFLAGS="$LDFLAGS $gss_ldflags"
|
LDFLAGS="$LDFLAGS $gss_ldflags"
|
||||||
else
|
else
|
||||||
LDFLAGS="$LDFLAGS $GSSAPI_ROOT/lib -lgssapi"
|
LDFLAGS="$LDFLAGS -L$GSSAPI_ROOT/lib$libsuff -lgssapi"
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
LDFLAGS="$LDFLAGS $GSSAPI_LIB_DIR"
|
LDFLAGS="$LDFLAGS $GSSAPI_LIB_DIR"
|
||||||
@@ -619,7 +695,7 @@ AC_HELP_STRING([--without-ssl], [disable SSL]),
|
|||||||
|
|
||||||
if test X"$OPT_SSL" = Xno
|
if test X"$OPT_SSL" = Xno
|
||||||
then
|
then
|
||||||
AC_MSG_WARN(SSL/https support disabled)
|
AC_MSG_WARN([SSL disabled, you will not be able to use HTTPS, FTPS, NTLM and more])
|
||||||
else
|
else
|
||||||
|
|
||||||
dnl Check for and handle argument to --with-ssl.
|
dnl Check for and handle argument to --with-ssl.
|
||||||
@@ -636,7 +712,7 @@ else
|
|||||||
*)
|
*)
|
||||||
dnl check the given spot right away!
|
dnl check the given spot right away!
|
||||||
EXTRA_SSL=$OPT_SSL
|
EXTRA_SSL=$OPT_SSL
|
||||||
LDFLAGS="$LDFLAGS -L$EXTRA_SSL/lib"
|
LDFLAGS="$LDFLAGS -L$EXTRA_SSL/lib$libsuff"
|
||||||
CPPFLAGS="$CPPFLAGS -I$EXTRA_SSL/include/openssl -I$EXTRA_SSL/include"
|
CPPFLAGS="$CPPFLAGS -I$EXTRA_SSL/include/openssl -I$EXTRA_SSL/include"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
@@ -646,7 +722,7 @@ else
|
|||||||
],[
|
],[
|
||||||
OLDLDFLAGS="$LDFLAGS"
|
OLDLDFLAGS="$LDFLAGS"
|
||||||
OLDCPPFLAGS="$CPPFLAGS"
|
OLDCPPFLAGS="$CPPFLAGS"
|
||||||
LDFLAGS="$CLEANLDFLAGS -L$EXTRA_SSL/lib"
|
LDFLAGS="$CLEANLDFLAGS -L$EXTRA_SSL/lib$libsuff"
|
||||||
CPPFLAGS="$CLEANCPPFLAGS -I$EXTRA_SSL/include/openssl -I$EXTRA_SSL/include"
|
CPPFLAGS="$CLEANCPPFLAGS -I$EXTRA_SSL/include/openssl -I$EXTRA_SSL/include"
|
||||||
AC_CHECK_LIB(crypto, CRYPTO_add_lock,[
|
AC_CHECK_LIB(crypto, CRYPTO_add_lock,[
|
||||||
HAVECRYPTO="yes" ], [
|
HAVECRYPTO="yes" ], [
|
||||||
@@ -660,6 +736,20 @@ else
|
|||||||
dnl This is only reasonable to do if crypto actually is there: check for
|
dnl This is only reasonable to do if crypto actually is there: check for
|
||||||
dnl SSL libs NOTE: it is important to do this AFTER the crypto lib
|
dnl SSL libs NOTE: it is important to do this AFTER the crypto lib
|
||||||
|
|
||||||
|
dnl This is for Msys/Mingw
|
||||||
|
AC_MSG_CHECKING([for gdi32])
|
||||||
|
my_ac_save_LIBS=$LIBS
|
||||||
|
LIBS="-lgdi32 $LIBS"
|
||||||
|
AC_TRY_LINK([#include <windef.h>
|
||||||
|
#include <wingdi.h>],
|
||||||
|
[GdiFlush();],
|
||||||
|
[ dnl worked!
|
||||||
|
AC_MSG_RESULT([yes])],
|
||||||
|
[ dnl failed, restore LIBS
|
||||||
|
LIBS=$my_ac_save_LIBS
|
||||||
|
AC_MSG_RESULT(no)]
|
||||||
|
)
|
||||||
|
|
||||||
AC_CHECK_LIB(crypto, CRYPTO_add_lock)
|
AC_CHECK_LIB(crypto, CRYPTO_add_lock)
|
||||||
AC_CHECK_LIB(ssl, SSL_connect)
|
AC_CHECK_LIB(ssl, SSL_connect)
|
||||||
|
|
||||||
@@ -758,28 +848,60 @@ case "$OPT_ZLIB" in
|
|||||||
dnl check for the lib first without setting any new path, since many
|
dnl check for the lib first without setting any new path, since many
|
||||||
dnl people have it in the default path
|
dnl people have it in the default path
|
||||||
|
|
||||||
AC_CHECK_LIB(z, inflateEnd, ,
|
AC_CHECK_LIB(z, inflateEnd,
|
||||||
|
dnl libz found, set the variable
|
||||||
|
[HAVE_LIBZ="1"],
|
||||||
|
dnl if no lib found, try to add the given library
|
||||||
[if test -d "$OPT_ZLIB"; then
|
[if test -d "$OPT_ZLIB"; then
|
||||||
CPPFLAGS="$CPPFLAGS -I$OPT_ZLIB/include"
|
CPPFLAGS="$CPPFLAGS -I$OPT_ZLIB/include"
|
||||||
LDFLAGS="$LDFLAGS -L$OPT_ZLIB/lib"
|
LDFLAGS="$LDFLAGS -L$OPT_ZLIB/lib$libsuff"
|
||||||
fi])
|
fi])
|
||||||
|
|
||||||
AC_CHECK_HEADER(zlib.h,[
|
AC_CHECK_HEADER(zlib.h,
|
||||||
AC_CHECK_LIB(z, gzread,
|
[
|
||||||
[HAVE_LIBZ="1"
|
dnl zlib.h was found
|
||||||
AC_SUBST(HAVE_LIBZ)
|
HAVE_ZLIB_H="1"
|
||||||
AC_DEFINE(HAVE_ZLIB_H, 1, [if you have the zlib.h header file])
|
dnl if the lib wasn't found already, try again with the new paths
|
||||||
AC_DEFINE(HAVE_LIBZ, 1, [If zlib is available])],
|
if test "$HAVE_LIBZ" != "1"; then
|
||||||
[ CPPFLAGS=$_cppflags
|
AC_CHECK_LIB(z, gzread,
|
||||||
LDFLAGS=$_ldflags])],
|
[
|
||||||
[ CPPFLAGS=$_cppflags
|
dnl the lib was found!
|
||||||
LDFLAGS=$_ldflags]
|
HAVE_LIBZ="1"
|
||||||
)
|
],
|
||||||
|
[ CPPFLAGS=$_cppflags
|
||||||
|
LDFLAGS=$_ldflags])
|
||||||
|
fi
|
||||||
|
],
|
||||||
|
[
|
||||||
|
dnl zlib.h was not found, restore the flags
|
||||||
|
CPPFLAGS=$_cppflags
|
||||||
|
LDFLAGS=$_ldflags]
|
||||||
|
)
|
||||||
|
|
||||||
|
if test "$HAVE_LIBZ" = "1" && test "$HAVE_ZLIB_H" != "1"
|
||||||
|
then
|
||||||
|
AC_MSG_WARN([configure found only the libz lib, not the header file!])
|
||||||
|
elif test "$HAVE_LIBZ" != "1" && test "$HAVE_ZLIB_H" = "1"
|
||||||
|
then
|
||||||
|
AC_MSG_WARN([configure found only the libz header file, not the lib!])
|
||||||
|
elif test "$HAVE_LIBZ" = "1" && test "$HAVE_ZLIB_H" = "1"
|
||||||
|
then
|
||||||
|
dnl both header and lib were found!
|
||||||
|
AC_SUBST(HAVE_LIBZ)
|
||||||
|
AC_DEFINE(HAVE_ZLIB_H, 1, [if you have the zlib.h header file])
|
||||||
|
AC_DEFINE(HAVE_LIBZ, 1, [if zlib is available])
|
||||||
|
|
||||||
|
LIBS="$LIBS -lz"
|
||||||
|
|
||||||
|
dnl replace 'HAVE_LIBZ' in the automake makefile.ams
|
||||||
|
AMFIXLIB="1"
|
||||||
|
AC_MSG_NOTICE([found both libz and libz.h header])
|
||||||
|
fi
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
dnl set variable for use in automakefile(s)
|
dnl set variable for use in automakefile(s)
|
||||||
AM_CONDITIONAL(HAVE_LIBZ, test x"$HAVE_LIBZ" = x1)
|
AM_CONDITIONAL(HAVE_LIBZ, test x"$AMFIXLIB" = x1)
|
||||||
|
|
||||||
dnl Default is to try the thread-safe versions of a few functions
|
dnl Default is to try the thread-safe versions of a few functions
|
||||||
OPT_THREAD=on
|
OPT_THREAD=on
|
||||||
@@ -795,6 +917,7 @@ printf("just fine");
|
|||||||
#endif
|
#endif
|
||||||
],
|
],
|
||||||
[ AC_MSG_RESULT([yes])
|
[ AC_MSG_RESULT([yes])
|
||||||
|
RECENTAIX=yes
|
||||||
OPT_THREAD=off ],
|
OPT_THREAD=off ],
|
||||||
[ AC_MSG_RESULT([no]) ]
|
[ AC_MSG_RESULT([no]) ]
|
||||||
)
|
)
|
||||||
@@ -818,12 +941,13 @@ then
|
|||||||
AC_DEFINE(DISABLED_THREADSAFE, 1, \
|
AC_DEFINE(DISABLED_THREADSAFE, 1, \
|
||||||
Set to explicitly specify we don't want to use thread-safe functions)
|
Set to explicitly specify we don't want to use thread-safe functions)
|
||||||
else
|
else
|
||||||
|
if test "$ipv6" != "yes"; then
|
||||||
|
dnl dig around for gethostbyname_r()
|
||||||
|
CURL_CHECK_GETHOSTBYNAME_R()
|
||||||
|
|
||||||
dnl dig around for gethostbyname_r()
|
dnl dig around for gethostbyaddr_r()
|
||||||
CURL_CHECK_GETHOSTBYNAME_R()
|
CURL_CHECK_GETHOSTBYADDR_R()
|
||||||
|
fi
|
||||||
dnl dig around for gethostbyaddr_r()
|
|
||||||
CURL_CHECK_GETHOSTBYADDR_R()
|
|
||||||
|
|
||||||
dnl poke around for inet_ntoa_r()
|
dnl poke around for inet_ntoa_r()
|
||||||
CURL_CHECK_INET_NTOA_R()
|
CURL_CHECK_INET_NTOA_R()
|
||||||
@@ -831,10 +955,31 @@ else
|
|||||||
dnl is there a localtime_r()
|
dnl is there a localtime_r()
|
||||||
CURL_CHECK_LOCALTIME_R()
|
CURL_CHECK_LOCALTIME_R()
|
||||||
|
|
||||||
AC_CHECK_FUNCS( gmtime_r )
|
dnl is there a strerror_r()
|
||||||
|
CURL_CHECK_STRERROR_R()
|
||||||
|
|
||||||
|
AC_CHECK_FUNCS( gmtime_r )
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
dnl for recent AIX versions, we skip all the thread-safe checks above since
|
||||||
|
dnl they claim a thread-safe libc using the standard API. But there are
|
||||||
|
dnl some functions still not thread-safe. Check for these!
|
||||||
|
|
||||||
|
dnl Let's hope this split URL remains working:
|
||||||
|
dnl http://publibn.boulder.ibm.com/doc_link/en_US/a_doc_lib/aixprggd/ \
|
||||||
|
dnl genprogc/thread_quick_ref.htm
|
||||||
|
|
||||||
|
if test "x$RECENTAIX" = "xyes"; then
|
||||||
|
dnl is there a localtime_r()
|
||||||
|
CURL_CHECK_LOCALTIME_R()
|
||||||
|
|
||||||
|
dnl is there a strerror_r()
|
||||||
|
CURL_CHECK_STRERROR_R()
|
||||||
|
|
||||||
|
AC_CHECK_FUNCS( gmtime_r )
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
dnl **********************************************************************
|
dnl **********************************************************************
|
||||||
dnl Back to "normal" configuring
|
dnl Back to "normal" configuring
|
||||||
dnl **********************************************************************
|
dnl **********************************************************************
|
||||||
@@ -849,6 +994,7 @@ AC_CHECK_HEADERS(
|
|||||||
sys/time.h \
|
sys/time.h \
|
||||||
sys/select.h \
|
sys/select.h \
|
||||||
sys/socket.h \
|
sys/socket.h \
|
||||||
|
sys/ioctl.h \
|
||||||
assert.h \
|
assert.h \
|
||||||
unistd.h \
|
unistd.h \
|
||||||
malloc.h \
|
malloc.h \
|
||||||
@@ -857,6 +1003,7 @@ AC_CHECK_HEADERS(
|
|||||||
arpa/inet.h \
|
arpa/inet.h \
|
||||||
net/if.h \
|
net/if.h \
|
||||||
netinet/in.h \
|
netinet/in.h \
|
||||||
|
netinet/tcp.h \
|
||||||
netdb.h \
|
netdb.h \
|
||||||
sys/sockio.h \
|
sys/sockio.h \
|
||||||
sys/stat.h \
|
sys/stat.h \
|
||||||
@@ -893,6 +1040,9 @@ dnl default includes
|
|||||||
#ifdef HAVE_SYS_SOCKET_H
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef HAVE_NETINET_IN_H
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#endif
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -901,7 +1051,10 @@ AC_C_CONST
|
|||||||
AC_TYPE_SIZE_T
|
AC_TYPE_SIZE_T
|
||||||
AC_HEADER_TIME
|
AC_HEADER_TIME
|
||||||
|
|
||||||
AC_CHECK_SIZEOF(off_t)
|
AC_CHECK_SIZEOF(curl_off_t, ,[
|
||||||
|
#include <stdio.h>
|
||||||
|
#include "$srcdir/include/curl/curl.h"
|
||||||
|
])
|
||||||
|
|
||||||
AC_CHECK_TYPE(long long,
|
AC_CHECK_TYPE(long long,
|
||||||
[AC_DEFINE(HAVE_LONGLONG, 1, [if your compiler supports 'long long'])])
|
[AC_DEFINE(HAVE_LONGLONG, 1, [if your compiler supports 'long long'])])
|
||||||
@@ -987,8 +1140,64 @@ AC_PATH_PROGS( NROFF, gnroff nroff, ,
|
|||||||
$PATH:/usr/bin/:/usr/local/bin )
|
$PATH:/usr/bin/:/usr/local/bin )
|
||||||
AC_SUBST(NROFF)
|
AC_SUBST(NROFF)
|
||||||
|
|
||||||
|
if test -n "$NROFF"; then
|
||||||
|
dnl only check for nroff options if an nroff command was found
|
||||||
|
|
||||||
|
AC_MSG_CHECKING([how to use *nroff to get plain text from man pages])
|
||||||
|
MANOPT="-man"
|
||||||
|
mancheck=`echo foo | $NROFF $MANOPT 2>/dev/null`
|
||||||
|
if test -z "$mancheck"; then
|
||||||
|
MANOPT="-mandoc"
|
||||||
|
mancheck=`echo foo | $NROFF $MANOPT 2>/dev/null`
|
||||||
|
if test -z "$mancheck"; then
|
||||||
|
MANOPT=""
|
||||||
|
AC_MSG_RESULT([failed])
|
||||||
|
AC_MSG_WARN([found no *nroff option to get plaintext from man pages])
|
||||||
|
else
|
||||||
|
AC_MSG_RESULT([$MANOPT])
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
AC_MSG_RESULT([$MANOPT])
|
||||||
|
fi
|
||||||
|
AC_SUBST(MANOPT)
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test -z "$MANOPT"
|
||||||
|
then
|
||||||
|
dnl if no nroff tool was found, or no option that could convert man pages
|
||||||
|
dnl was found, then disable the built-in manual stuff
|
||||||
|
AC_MSG_WARN([disabling built-in manual])
|
||||||
|
USE_MANUAL="no";
|
||||||
|
fi
|
||||||
|
|
||||||
AC_PROG_YACC
|
AC_PROG_YACC
|
||||||
|
|
||||||
|
if test -z "$YACC"
|
||||||
|
then
|
||||||
|
AC_MSG_CHECKING([if OK to build without bison/yacc])
|
||||||
|
dnl no yacc is a big deal if we have no pre-fixed getdate.y
|
||||||
|
if test -r "$srcdir/lib/getdate.c"
|
||||||
|
then
|
||||||
|
dnl all is well, we don't have to generate it!
|
||||||
|
AC_MSG_RESULT(yes)
|
||||||
|
else
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
AC_MSG_ERROR([no yacc or bison found, can't build libcurl!])
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
dnl *************************************************************************
|
||||||
|
dnl If the manual variable still is set, then we go with providing a built-in
|
||||||
|
dnl manual
|
||||||
|
|
||||||
|
if test "$USE_MANUAL" = "1"; then
|
||||||
|
AC_DEFINE(USE_MANUAL, 1, [If you want to build curl with the built-in manual])
|
||||||
|
fi
|
||||||
|
|
||||||
|
dnl set variable for use in automakefile(s)
|
||||||
|
AM_CONDITIONAL(USE_MANUAL, test x"$USE_MANUAL" = x1)
|
||||||
|
|
||||||
|
|
||||||
dnl AC_PATH_PROG( RANLIB, ranlib, /usr/bin/ranlib,
|
dnl AC_PATH_PROG( RANLIB, ranlib, /usr/bin/ranlib,
|
||||||
dnl $PATH:/usr/bin/:/usr/local/bin )
|
dnl $PATH:/usr/bin/:/usr/local/bin )
|
||||||
dnl AC_SUBST(RANLIB)
|
dnl AC_SUBST(RANLIB)
|
||||||
@@ -1007,25 +1216,14 @@ AC_HELP_STRING([--disable-debug],[Disable debug options]),
|
|||||||
*) AC_MSG_RESULT(yes)
|
*) AC_MSG_RESULT(yes)
|
||||||
|
|
||||||
CPPFLAGS="$CPPFLAGS -DCURLDEBUG"
|
CPPFLAGS="$CPPFLAGS -DCURLDEBUG"
|
||||||
CFLAGS="$CFLAGS -g"
|
CFLAGS="$CFLAGS -g"
|
||||||
if test "$GCC" = "yes"; then
|
|
||||||
CFLAGS="$CFLAGS -W -Wall -Wwrite-strings -pedantic -Wno-long-long -Wundef -Wpointer-arith -Wnested-externs"
|
dnl set compiler "debug" options to become more picky, and remove
|
||||||
fi
|
dnl optimize options from CFLAGS
|
||||||
dnl strip off optimizer flags
|
CURL_CC_DEBUG_OPTS
|
||||||
NEWFLAGS=""
|
|
||||||
for flag in $CFLAGS; do
|
|
||||||
case "$flag" in
|
|
||||||
-O*)
|
|
||||||
dnl echo "cut off $flag"
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
NEWFLAGS="$NEWFLAGS $flag"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
CFLAGS=$NEWFLAGS
|
|
||||||
;;
|
;;
|
||||||
esac ],
|
esac
|
||||||
|
],
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -1048,7 +1246,7 @@ AC_HELP_STRING([--disable-ares],[Disable ares for name lookups]),
|
|||||||
HAVE_ARES="1"
|
HAVE_ARES="1"
|
||||||
AC_SUBST(HAVE_ARES)
|
AC_SUBST(HAVE_ARES)
|
||||||
|
|
||||||
LIBS="$LIBS -lares"
|
LIBS="$LIBS -lcares"
|
||||||
|
|
||||||
dnl For backwards compatibility default to includes/lib in srcdir/ares
|
dnl For backwards compatibility default to includes/lib in srcdir/ares
|
||||||
dnl If a value is specified it is assumed that the libs are in $val/lib
|
dnl If a value is specified it is assumed that the libs are in $val/lib
|
||||||
@@ -1056,6 +1254,7 @@ AC_HELP_STRING([--disable-ares],[Disable ares for name lookups]),
|
|||||||
dnl ares so it should not be a problem.
|
dnl ares so it should not be a problem.
|
||||||
if test "x$enableval" = "xyes" ; then
|
if test "x$enableval" = "xyes" ; then
|
||||||
if test -d "$srcdir/ares"; then
|
if test -d "$srcdir/ares"; then
|
||||||
|
aresembedded="yes"
|
||||||
AC_CONFIG_SUBDIRS(ares)
|
AC_CONFIG_SUBDIRS(ares)
|
||||||
aresinc=`cd $srcdir/ares && pwd`
|
aresinc=`cd $srcdir/ares && pwd`
|
||||||
CPPFLAGS="$CPPFLAGS -I$aresinc"
|
CPPFLAGS="$CPPFLAGS -I$aresinc"
|
||||||
@@ -1070,6 +1269,31 @@ AC_HELP_STRING([--disable-ares],[Disable ares for name lookups]),
|
|||||||
CPPFLAGS="$CPPFLAGS -I$enableval/include"
|
CPPFLAGS="$CPPFLAGS -I$enableval/include"
|
||||||
LDFLAGS="$LDFLAGS -L$enableval/lib"
|
LDFLAGS="$LDFLAGS -L$enableval/lib"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if test -z "$aresembedded"; then
|
||||||
|
dnl verify that a sufficient c-ares is here if we have pointed one
|
||||||
|
dnl out and don't use the "embedded" ares dir (in which case we don't
|
||||||
|
dnl check it because it might not have been built yet)
|
||||||
|
AC_MSG_CHECKING([that c-ares is good and recent enough])
|
||||||
|
AC_LINK_IFELSE( [
|
||||||
|
#include <ares.h>
|
||||||
|
/* provide a set of dummy functions in case c-ares was built with debug */
|
||||||
|
void curl_dofree() { }
|
||||||
|
void curl_sclose() { }
|
||||||
|
void curl_domalloc() { }
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
ares_channel channel;
|
||||||
|
ares_cancel(channel);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
],
|
||||||
|
AC_MSG_RESULT(yes),
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
AC_MSG_ERROR([c-ares library defective or too old])
|
||||||
|
)
|
||||||
|
fi
|
||||||
;;
|
;;
|
||||||
esac ],
|
esac ],
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
@@ -1098,6 +1322,7 @@ AC_CONFIG_FILES([Makefile \
|
|||||||
packages/DOS/Makefile \
|
packages/DOS/Makefile \
|
||||||
packages/EPM/curl.list \
|
packages/EPM/curl.list \
|
||||||
packages/EPM/Makefile \
|
packages/EPM/Makefile \
|
||||||
|
packages/vms/Makefile \
|
||||||
curl-config
|
curl-config
|
||||||
])
|
])
|
||||||
AC_OUTPUT
|
AC_OUTPUT
|
||||||
|
@@ -2,17 +2,8 @@
|
|||||||
;;;; $Id$
|
;;;; $Id$
|
||||||
|
|
||||||
;;; The curl hacker's C conventions.
|
;;; The curl hacker's C conventions.
|
||||||
|
;;; See the sample.emacs file on how this file can be made to take
|
||||||
;;; After loading this file and added the mode-hook you can in C
|
;;; effect automatically when editing curl source files.
|
||||||
;;; files, put something like this to use the curl style
|
|
||||||
;;; automatically:
|
|
||||||
;;
|
|
||||||
;; /* -----------------------------------------------------------------
|
|
||||||
;; * local variables:
|
|
||||||
;; * eval: (set c-file-style "curl")
|
|
||||||
;; * end:
|
|
||||||
;; */
|
|
||||||
;;
|
|
||||||
|
|
||||||
(defconst curl-c-style
|
(defconst curl-c-style
|
||||||
'((c-basic-offset . 2)
|
'((c-basic-offset . 2)
|
||||||
@@ -37,7 +28,7 @@
|
|||||||
(setq tab-width 8
|
(setq tab-width 8
|
||||||
indent-tabs-mode nil ; Use spaces. Not tabs.
|
indent-tabs-mode nil ; Use spaces. Not tabs.
|
||||||
comment-column 40
|
comment-column 40
|
||||||
c-font-lock-extra-types (append '("bool" "CURL" "CURLcode" "ssize_t" "size_t" "socklen_t" "fd_set" "time_t" "off_t"))
|
c-font-lock-extra-types (append '("bool" "CURL" "CURLcode" "ssize_t" "size_t" "socklen_t" "fd_set" "time_t" "curl_off_t" "curl_socket_t" "in_addr_t" "CURLSHcode" "CURLMcode"))
|
||||||
)
|
)
|
||||||
;; keybindings for C, C++, and Objective-C. We can put these in
|
;; keybindings for C, C++, and Objective-C. We can put these in
|
||||||
;; c-mode-base-map because of inheritance ...
|
;; c-mode-base-map because of inheritance ...
|
||||||
|
@@ -35,6 +35,11 @@ Cocoa
|
|||||||
Written by Dan Wood.
|
Written by Dan Wood.
|
||||||
http://curlhandle.sourceforge.net/
|
http://curlhandle.sourceforge.net/
|
||||||
|
|
||||||
|
D
|
||||||
|
|
||||||
|
Written by Charles Sanders and James Wavro
|
||||||
|
http://www.atari-soldiers.com/libcurl.html
|
||||||
|
|
||||||
Dylan
|
Dylan
|
||||||
|
|
||||||
Written by Chris Double.
|
Written by Chris Double.
|
||||||
|
67
docs/FAQ
67
docs/FAQ
@@ -1,8 +1,8 @@
|
|||||||
Updated: December 22, 2003 (http://curl.haxx.se/docs/faq.html)
|
Updated: March 16, 2004 (http://curl.haxx.se/docs/faq.html)
|
||||||
_ _ ____ _
|
_ _ ____ _
|
||||||
___| | | | _ \| |
|
___| | | | _ \| |
|
||||||
/ __| | | | |_) | |
|
/ __| | | | |_) | |
|
||||||
| (__| |_| | _ <| |___
|
| (__| |_| | _ <| |___
|
||||||
\___|\___/|_| \_\_____|
|
\___|\___/|_| \_\_____|
|
||||||
|
|
||||||
FAQ
|
FAQ
|
||||||
@@ -19,7 +19,7 @@ FAQ
|
|||||||
|
|
||||||
2. Install Related Problems
|
2. Install Related Problems
|
||||||
2.1 configure doesn't find OpenSSL even when it is installed
|
2.1 configure doesn't find OpenSSL even when it is installed
|
||||||
2.1.1. native linker doesn't find openssl
|
2.1.1. native linker doesn't find OpenSSL
|
||||||
2.1.2. only the libssl lib is missing
|
2.1.2. only the libssl lib is missing
|
||||||
2.2 Does curl work/build with other SSL libraries?
|
2.2 Does curl work/build with other SSL libraries?
|
||||||
2.3 Where can I find a copy of LIBEAY32.DLL?
|
2.3 Where can I find a copy of LIBEAY32.DLL?
|
||||||
@@ -90,7 +90,7 @@ FAQ
|
|||||||
with URL spelled in uppercase to make it obvious it deals with URLs. The
|
with URL spelled in uppercase to make it obvious it deals with URLs. The
|
||||||
fact it can also be pronounced 'see URL' also helped, it works as an
|
fact it can also be pronounced 'see URL' also helped, it works as an
|
||||||
abbrivation for "Client URL Request Library" or why not the recursive
|
abbrivation for "Client URL Request Library" or why not the recursive
|
||||||
version: "Curl is a URL Request Library".
|
version: "Curl URL Request Library".
|
||||||
|
|
||||||
Curl supports a range of common Internet protocols, currently including
|
Curl supports a range of common Internet protocols, currently including
|
||||||
HTTP, HTTPS, FTP, FTPS, GOPHER, LDAP, DICT, TELNET and FILE.
|
HTTP, HTTPS, FTP, FTPS, GOPHER, LDAP, DICT, TELNET and FILE.
|
||||||
@@ -101,7 +101,7 @@ FAQ
|
|||||||
NOTE: there are numerous sub-projects and related projects that also use the
|
NOTE: there are numerous sub-projects and related projects that also use the
|
||||||
word curl in the project names in various combinations, but you should take
|
word curl in the project names in various combinations, but you should take
|
||||||
notice that this FAQ is directed at the command-line tool named curl (and
|
notice that this FAQ is directed at the command-line tool named curl (and
|
||||||
libcurl the library), and may therefore not be valid for other curl
|
libcurl the library), and may therefore not be valid for other curl-related
|
||||||
projects.
|
projects.
|
||||||
|
|
||||||
1.2 What is libcurl?
|
1.2 What is libcurl?
|
||||||
@@ -109,16 +109,16 @@ FAQ
|
|||||||
libcurl is a reliable and portable library which provides you with an easy
|
libcurl is a reliable and portable library which provides you with an easy
|
||||||
interface to a range of common Internet protocols.
|
interface to a range of common Internet protocols.
|
||||||
|
|
||||||
You can use libcurl for free in your application even if it is commercial
|
You can use libcurl for free in your application, be it open source,
|
||||||
or closed-source.
|
commercial or closed-source.
|
||||||
|
|
||||||
1.3 What is cURL not?
|
1.3 What is cURL not?
|
||||||
|
|
||||||
Curl is *not* a wget clone even though that is a very common misconception.
|
|
||||||
Never, during curl's development, have we intended curl to replace wget or
|
|
||||||
compete on its market. Curl is targeted at single-shot file transfers.
|
|
||||||
|
|
||||||
Curl is not a web site mirroring program. If you wanna use curl to mirror
|
Curl is *not* a wget clone. That is a 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 want to use curl to mirror
|
||||||
something: fine, go ahead and write a script that wraps around curl to make
|
something: fine, go ahead and write a script that wraps around curl to make
|
||||||
it reality (like curlmirror.pl does).
|
it reality (like curlmirror.pl does).
|
||||||
|
|
||||||
@@ -181,9 +181,8 @@ FAQ
|
|||||||
curl. We do this voluntarily on our spare time.
|
curl. We do this voluntarily on our spare time.
|
||||||
|
|
||||||
We get some help from companies. Contactor Data hosts the curl web site,
|
We get some help from companies. Contactor Data hosts the curl web site,
|
||||||
Haxx owns the curl web site's domain and sourceforge.net hosts several
|
Haxx owns the curl web site's domain and sourceforge.net hosts project
|
||||||
project services we take advantage from, like the bug tracker, mailing lists
|
services we take advantage from, like the bug tracker.
|
||||||
and more.
|
|
||||||
|
|
||||||
If you want to support our project with a donation or similar, one way of
|
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
|
doing that would be to buy "gift certificates" at useful online shopping
|
||||||
@@ -198,7 +197,7 @@ FAQ
|
|||||||
programming language for the web, named CURL.
|
programming language for the web, named CURL.
|
||||||
|
|
||||||
We are in no way associated with curl.com or their CURL programming
|
We are in no way associated with curl.com or their CURL programming
|
||||||
language.
|
language.
|
||||||
|
|
||||||
Our project name curl has been in effective use since 1998. We were not the
|
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 computer related project to use the name "curl" and do not claim any
|
||||||
@@ -281,8 +280,7 @@ FAQ
|
|||||||
|
|
||||||
2.4. Does cURL support Socks (RFC 1928) ?
|
2.4. Does cURL support Socks (RFC 1928) ?
|
||||||
|
|
||||||
There is limited support for SOCKS5 for curl built with IPv6 support
|
Yes, SOCKS5 is supported when curl is built with IPv6 support disabled.
|
||||||
disabled.
|
|
||||||
|
|
||||||
|
|
||||||
3. Usage problems
|
3. Usage problems
|
||||||
@@ -414,7 +412,7 @@ FAQ
|
|||||||
put the entire option within quotes. Like in:
|
put the entire option within quotes. Like in:
|
||||||
|
|
||||||
curl -d " with spaces " url.com
|
curl -d " with spaces " url.com
|
||||||
|
|
||||||
or perhaps
|
or perhaps
|
||||||
|
|
||||||
curl -d ' with spaces ' url.com
|
curl -d ' with spaces ' url.com
|
||||||
@@ -450,7 +448,7 @@ FAQ
|
|||||||
|
|
||||||
- Read the javascript code and rewrite the same logic in another language.
|
- Read the javascript code and rewrite the same logic in another language.
|
||||||
|
|
||||||
- Implement a javascript interpreted, people have successfully used the
|
- Implement a javascript interpreter, people have successfully used the
|
||||||
Mozilla javascript engine in the past.
|
Mozilla javascript engine in the past.
|
||||||
|
|
||||||
- Ask your admins to stop this, for a static proxy setup or similar.
|
- Ask your admins to stop this, for a static proxy setup or similar.
|
||||||
@@ -478,7 +476,7 @@ FAQ
|
|||||||
requests properly. To correct this problem, tell curl to select SSLv2 from
|
requests properly. To correct this problem, tell curl to select SSLv2 from
|
||||||
the command line (-2/--sslv2).
|
the command line (-2/--sslv2).
|
||||||
|
|
||||||
There has also been examples where the remote server didn't like the SSLv2
|
There have also been examples where the remote server didn't like the SSLv2
|
||||||
request and instead you had to force curl to use SSLv3 with -3/--sslv3.
|
request and instead you had to force curl to use SSLv3 with -3/--sslv3.
|
||||||
|
|
||||||
4.2. Why do I get problems when I use & or % in the URL?
|
4.2. Why do I get problems when I use & or % in the URL?
|
||||||
@@ -554,7 +552,7 @@ FAQ
|
|||||||
containing a list of valid methods for the requested resource.
|
containing a list of valid methods for the requested resource.
|
||||||
|
|
||||||
4.5.6 "301 Moved Permanently"
|
4.5.6 "301 Moved Permanently"
|
||||||
|
|
||||||
If you get this return code and an HTML output similar to this:
|
If you get this return code and an HTML output similar to this:
|
||||||
|
|
||||||
<H1>Moved Permanently</H1> The document has moved <A
|
<H1>Moved Permanently</H1> The document has moved <A
|
||||||
@@ -577,21 +575,26 @@ FAQ
|
|||||||
|
|
||||||
The first part is to avoid having clear-text passwords in the command line
|
The first part is to avoid having clear-text passwords in the command line
|
||||||
so that they don't appear in 'ps' outputs and similar. That is easily
|
so that they don't appear in 'ps' outputs and similar. That is easily
|
||||||
avoided by using the "-K" option to tell curl to read parameters from a
|
avoided by using the "-K" option to tell curl to read parameters from a file
|
||||||
file or stdin to which you can pass the secret info.
|
or stdin to which you can pass the secret info. curl itself will also
|
||||||
|
attempt to "hide" the given password by blanking out the option - this
|
||||||
|
doesn't work on all platforms.
|
||||||
|
|
||||||
To keep the passwords in your account secret from the rest of the world is
|
To keep the passwords in your account secret from the rest of the world is
|
||||||
not a task that curl addresses. You could of course encrypt them somehow to
|
not a task that curl addresses. You could of course encrypt them somehow to
|
||||||
at least hide them from being read by human eyes, but that is not what
|
at least hide them from being read by human eyes, but that is not what
|
||||||
anyone would call security.
|
anyone would call security.
|
||||||
|
|
||||||
Also note that regular HTTP and FTP passwords are sent in clear across the
|
Also note that regular HTTP (using Basic authentication) and FTP passwords
|
||||||
network. All it takes for anyone to fetch them is to listen on the network.
|
are sent in clear across the network. All it takes for anyone to fetch them
|
||||||
Eavesdropping is very easy.
|
is to listen on the network. Eavesdropping is very easy. Use more secure
|
||||||
|
authentication methods (like Digest, Negotiate or even NTLM) or consider the
|
||||||
|
SSL-based alternatives HTTPS and FTPS.
|
||||||
|
|
||||||
4.8 I found a bug!
|
4.8 I found a bug!
|
||||||
|
|
||||||
It is not a bug if the behavior is documented. Read the docs first.
|
It is not a bug if the behavior is documented. Read the docs first.
|
||||||
|
Especially check out the KNOWN_BUGS file, it may be a documented bug!
|
||||||
|
|
||||||
If it is a problem with a binary you've downloaded or a package for your
|
If it is a problem with a binary you've downloaded or a package for your
|
||||||
particular platform, try contacting the person who built the package/archive
|
particular platform, try contacting the person who built the package/archive
|
||||||
@@ -629,7 +632,7 @@ FAQ
|
|||||||
You invoke curl 7.10 or later to communicate on a https:// URL and get an
|
You invoke curl 7.10 or later to communicate on a https:// URL and get an
|
||||||
error back looking something similar to this:
|
error back looking something similar to this:
|
||||||
|
|
||||||
curl: (35) SSL: error:14090086:SSL routines:
|
curl: (35) SSL: error:14090086:SSL routines:
|
||||||
SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
|
SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
|
||||||
|
|
||||||
Then it means that curl couldn't verify that the server's certificate was
|
Then it means that curl couldn't verify that the server's certificate was
|
||||||
@@ -686,7 +689,7 @@ FAQ
|
|||||||
{
|
{
|
||||||
register int realsize = size * nmemb;
|
register int realsize = size * nmemb;
|
||||||
struct MemoryStruct *mem = (struct MemoryStruct *)data;
|
struct MemoryStruct *mem = (struct MemoryStruct *)data;
|
||||||
|
|
||||||
mem->memory = (char *)realloc(mem->memory, mem->size + realsize + 1);
|
mem->memory = (char *)realloc(mem->memory, mem->size + realsize + 1);
|
||||||
if (mem->memory) {
|
if (mem->memory) {
|
||||||
memcpy(&(mem->memory[mem->size]), ptr, realsize);
|
memcpy(&(mem->memory[mem->size]), ptr, realsize);
|
||||||
|
@@ -124,3 +124,5 @@ November 2003: curl 7.10.8 is released. 45000 lines of code. ~55000 unique
|
|||||||
visitors to the curl.haxx.se site. Five official web mirrors.
|
visitors to the curl.haxx.se site. Five official web mirrors.
|
||||||
|
|
||||||
December 2003, full-fledged SSL for FTP is supported.
|
December 2003, full-fledged SSL for FTP is supported.
|
||||||
|
|
||||||
|
January 2004: curl 7.11.0 introduced large file support.
|
||||||
|
@@ -488,6 +488,7 @@ PORTS
|
|||||||
- Alpha Tru64 v5.0 5.1
|
- Alpha Tru64 v5.0 5.1
|
||||||
- HP-PA HP-UX 9.X 10.X 11.X
|
- HP-PA HP-UX 9.X 10.X 11.X
|
||||||
- HP-PA Linux
|
- HP-PA Linux
|
||||||
|
- HP3000 MPE/iX
|
||||||
- MIPS IRIX 6.2, 6.5
|
- MIPS IRIX 6.2, 6.5
|
||||||
- MIPS Linux
|
- MIPS Linux
|
||||||
- Pocket PC/Win CE 3.0
|
- Pocket PC/Win CE 3.0
|
||||||
@@ -510,6 +511,7 @@ PORTS
|
|||||||
- i386 HURD
|
- i386 HURD
|
||||||
- i386 Linux 1.3, 2.0, 2.2, 2.3, 2.4
|
- i386 Linux 1.3, 2.0, 2.2, 2.3, 2.4
|
||||||
- i386 NetBSD
|
- i386 NetBSD
|
||||||
|
- i386 Novell NetWare
|
||||||
- i386 OS/2
|
- i386 OS/2
|
||||||
- i386 OpenBSD
|
- i386 OpenBSD
|
||||||
- i386 SCO unix
|
- i386 SCO unix
|
||||||
|
@@ -3,6 +3,10 @@ join in and help us correct one or more of these! Also be sure to check the
|
|||||||
changelog of the current development status, as one or more of these problems
|
changelog of the current development status, as one or more of these problems
|
||||||
may have been fixed since this was written!
|
may have been fixed since this was written!
|
||||||
|
|
||||||
|
* --limit-rate using -d or -F does not work. This is because the limit logic
|
||||||
|
is provided by the curl app in its read/write callbacks, and when doing
|
||||||
|
-d/-F the callbacks aren't used!
|
||||||
|
|
||||||
* Doing resumed upload over HTTP does not work with '-C -', because curl
|
* Doing resumed upload over HTTP does not work with '-C -', because curl
|
||||||
doesn't do a HEAD first to get the initial size. This needs to be done
|
doesn't do a HEAD first to get the initial size. This needs to be done
|
||||||
manually for HTTP PUT resume to work, and then '-C [index]'.
|
manually for HTTP PUT resume to work, and then '-C [index]'.
|
||||||
@@ -19,13 +23,6 @@ may have been fixed since this was written!
|
|||||||
indicate that the user wants to reach the root dir (this exception SHALL
|
indicate that the user wants to reach the root dir (this exception SHALL
|
||||||
remain even when this bug is fixed).
|
remain even when this bug is fixed).
|
||||||
|
|
||||||
* 1) libcurl does a POST
|
|
||||||
2) receives a 100-continue
|
|
||||||
3) sends away the POST
|
|
||||||
Now, if nothing else is returned from the server, libcurl MUST return
|
|
||||||
CURLE_GOT_NOTHING, but it seems it returns CURLE_OK as it seems to count
|
|
||||||
the 100-continue reply as a good enough reply.
|
|
||||||
|
|
||||||
* libcurl doesn't treat the content-length of compressed data properly, as
|
* libcurl doesn't treat the content-length of compressed data properly, as
|
||||||
it seems HTTP servers send the *uncompressed* length in that header and
|
it seems HTTP servers send the *uncompressed* length in that header and
|
||||||
libcurl thinks of it as the *compressed* lenght. Some explanations are here:
|
libcurl thinks of it as the *compressed* lenght. Some explanations are here:
|
||||||
@@ -35,26 +32,14 @@ may have been fixed since this was written!
|
|||||||
locally, which is because libcurl doesn't call the write callback with zero
|
locally, which is because libcurl doesn't call the write callback with zero
|
||||||
bytes. Explained here: http://curl.haxx.se/mail/archive-2003-04/0143.html
|
bytes. Explained here: http://curl.haxx.se/mail/archive-2003-04/0143.html
|
||||||
|
|
||||||
* Using CURLOPT_FAILONERROR (-f/--fail) will make authentication to stop
|
|
||||||
working if you use anything but plain Basic auth.
|
|
||||||
|
|
||||||
* IPv6 support on AIX 4.3.3 doesn't work due to a missing sockaddr_storage
|
* IPv6 support on AIX 4.3.3 doesn't work due to a missing sockaddr_storage
|
||||||
struct. It has been reported to work on AIX 5.1 though.
|
struct. It has been reported to work on AIX 5.1 though.
|
||||||
|
|
||||||
* Running 'make test' on Mac OS X gives 4 errors. This seems to be related
|
|
||||||
to some kind of libtool problem:
|
|
||||||
http://curl.haxx.se/mail/archive-2002-03/0029.html and
|
|
||||||
http://curl.haxx.se/mail/archive-2002-03/0033.html
|
|
||||||
|
|
||||||
* libcurl does not deal nicely with files larger than 2GB
|
|
||||||
|
|
||||||
* GOPHER transfers seem broken
|
* GOPHER transfers seem broken
|
||||||
|
|
||||||
* configure --disable-http is not fully supported. All other protocols seem
|
* configure --disable-http is not fully supported. All other protocols seem
|
||||||
to work to disable.
|
to work to disable.
|
||||||
|
|
||||||
* The -m parameter does not work when using telnet with curl on Windows.
|
|
||||||
|
|
||||||
* If a HTTP server responds to a HEAD request and includes a body (thus
|
* If a HTTP server responds to a HEAD request and includes a body (thus
|
||||||
violating the RFC2616), curl won't wait to read the response but just stop
|
violating the RFC2616), curl won't wait to read the response but just stop
|
||||||
reading and return back. If a second request (let's assume a GET) is then
|
reading and return back. If a second request (let's assume a GET) is then
|
||||||
@@ -64,63 +49,3 @@ may have been fixed since this was written!
|
|||||||
and havoc is what happens.
|
and havoc is what happens.
|
||||||
More details on this is found in this libcurl mailing list thread:
|
More details on this is found in this libcurl mailing list thread:
|
||||||
http://curl.haxx.se/mail/lib-2002-08/0000.html
|
http://curl.haxx.se/mail/lib-2002-08/0000.html
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
Q: My program blows up when I run lots of curl_easy_perform() calls on a
|
|
||||||
single thread
|
|
||||||
Q: My program dies when a single thread re-enters the win32 select() call
|
|
||||||
via curl_easy_perform()
|
|
||||||
Q: --- add your own flavour here ---
|
|
||||||
|
|
||||||
Single Threaded Re-Entracy
|
|
||||||
--------------------------
|
|
||||||
|
|
||||||
There is a glitch / trick to using cURL on Win32 related to re-entrancy.
|
|
||||||
This experience was gained on verion 7.9.4 using Windows NT SP3 in a banking
|
|
||||||
environment (just in case you wanted to know).
|
|
||||||
|
|
||||||
If you have already called curl_easy_perform(), and *somehow* you cause your
|
|
||||||
single thread of execution to make another call to curl_easy_perform() - the
|
|
||||||
windows socket() call used to create a new socket for the second connection
|
|
||||||
can return with 10044 / 10043 error codes.
|
|
||||||
|
|
||||||
The WSA errors we experienced are:
|
|
||||||
WSAEPROTONOSUPPORT
|
|
||||||
(10043)
|
|
||||||
Protocol not supported.
|
|
||||||
The requested protocol has not been configured into the system, or no
|
|
||||||
implementation for it exists. For example, a socket call requests a
|
|
||||||
SOCK_DGRAM socket, but specifies a stream protocol.
|
|
||||||
|
|
||||||
WSAESOCKTNOSUPPORT
|
|
||||||
(10044)
|
|
||||||
Socket type not supported.
|
|
||||||
The support for the specified socket type does not exist in this address
|
|
||||||
family. For example, the optional type SOCK_RAW might be selected in a
|
|
||||||
socket call, and the implementation does not support SOCK_RAW sockets at
|
|
||||||
all.
|
|
||||||
|
|
||||||
We have experienced this by creating a timer that ticks every 20ms, and on
|
|
||||||
the tick making a curl_easy_perform() call. The call usually completed in
|
|
||||||
about 300ms. And we expected (before this test) that the timer would NOT be
|
|
||||||
fired during a call to curl_easy_perform(), howvever, while the first
|
|
||||||
curl_easy_perform() is running a tick *is* fired by the windows API somehow,
|
|
||||||
and we then call curl_easy_perform() again - thus single threaded
|
|
||||||
re-entrancy is achieved.
|
|
||||||
|
|
||||||
Notes:
|
|
||||||
* We made sure that a new CURL structure was being used for each
|
|
||||||
curl_easy_perform() request, and that the curl_global_init() had been called
|
|
||||||
beforehand.
|
|
||||||
* I'm happy to answer any questions about this problem to try to track it
|
|
||||||
down.
|
|
||||||
* Once the socket() call started failing, there is no hope - it never works
|
|
||||||
again.
|
|
||||||
* Slowing the timer down to give each request enough time to complete solves
|
|
||||||
this problem completely.
|
|
||||||
|
|
||||||
If anyone has the source code to the WinNT implementation of socket() and
|
|
||||||
can figure out WHY this can occur, more tracing can be performed.
|
|
||||||
|
|
||||||
John Clayton <John.Clayton at barclayscapital.com>
|
|
||||||
|
13
docs/MANUAL
13
docs/MANUAL
@@ -63,6 +63,11 @@ USING PASSWORDS
|
|||||||
|
|
||||||
curl -u name:passwd ftp://machine.domain:port/full/path/to/file
|
curl -u name:passwd ftp://machine.domain:port/full/path/to/file
|
||||||
|
|
||||||
|
FTPS
|
||||||
|
|
||||||
|
It is just like for FTP, but you may also want to specify and use
|
||||||
|
SSL-specific options for certificates etc.
|
||||||
|
|
||||||
HTTP
|
HTTP
|
||||||
|
|
||||||
The HTTP URL doesn't support user and password in the URL string. Curl
|
The HTTP URL doesn't support user and password in the URL string. Curl
|
||||||
@@ -75,6 +80,12 @@ USING PASSWORDS
|
|||||||
|
|
||||||
curl -u name:passwd http://machine.domain/full/path/to/file
|
curl -u name:passwd http://machine.domain/full/path/to/file
|
||||||
|
|
||||||
|
HTTP offers many different methods of authentication and curl supports
|
||||||
|
several: Basic, Digest, NTLM and Negotiate. Without telling which method to
|
||||||
|
use, curl defaults to Basic. You can also ask curl to pick the most secure
|
||||||
|
ones out of the ones that the server accepts for the given URL, by using
|
||||||
|
--anyauth.
|
||||||
|
|
||||||
NOTE! Since HTTP URLs don't support user and password, you can't use that
|
NOTE! Since HTTP URLs don't support user and password, you can't use that
|
||||||
style when using Curl via a proxy. You _must_ use the -u style fetch
|
style when using Curl via a proxy. You _must_ use the -u style fetch
|
||||||
during such circumstances.
|
during such circumstances.
|
||||||
@@ -836,8 +847,6 @@ PERSISTANT CONNECTIONS
|
|||||||
transfers faster. If you use a http proxy for file transfers, practicly
|
transfers faster. If you use a http proxy for file transfers, practicly
|
||||||
all transfers will be persistant.
|
all transfers will be persistant.
|
||||||
|
|
||||||
Persistant connections were introduced in curl 7.7.
|
|
||||||
|
|
||||||
MAILING LISTS
|
MAILING LISTS
|
||||||
|
|
||||||
For your convenience, we have several open mailing lists to discuss curl,
|
For your convenience, we have several open mailing lists to discuss curl,
|
||||||
|
@@ -8,10 +8,11 @@ man_MANS = \
|
|||||||
curl.1 \
|
curl.1 \
|
||||||
curl-config.1
|
curl-config.1
|
||||||
|
|
||||||
HTMLPAGES = \
|
GENHTMLPAGES = \
|
||||||
curl.html \
|
curl.html \
|
||||||
curl-config.html \
|
curl-config.html
|
||||||
index.html
|
|
||||||
|
HTMLPAGES = $(GENHTMLPAGES) index.html
|
||||||
|
|
||||||
PDFPAGES = \
|
PDFPAGES = \
|
||||||
curl.pdf \
|
curl.pdf \
|
||||||
@@ -19,6 +20,8 @@ PDFPAGES = \
|
|||||||
|
|
||||||
SUBDIRS = examples libcurl
|
SUBDIRS = examples libcurl
|
||||||
|
|
||||||
|
CLEANFILES = $(GENHTMLPAGES) $(PDFPAGES)
|
||||||
|
|
||||||
EXTRA_DIST = MANUAL BUGS CONTRIBUTE FAQ FEATURES INTERNALS SSLCERTS \
|
EXTRA_DIST = MANUAL BUGS CONTRIBUTE FAQ FEATURES INTERNALS SSLCERTS \
|
||||||
README.win32 RESOURCES TODO TheArtOfHttpScripting THANKS \
|
README.win32 RESOURCES TODO TheArtOfHttpScripting THANKS \
|
||||||
VERSIONS KNOWN_BUGS BINDINGS $(man_MANS) $(HTMLPAGES) \
|
VERSIONS KNOWN_BUGS BINDINGS $(man_MANS) $(HTMLPAGES) \
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
Peer SSL Certificate Verification
|
Peer SSL Certificate Verification
|
||||||
=================================
|
=================================
|
||||||
|
|
||||||
Starting in 7.10, libcurl performs peer SSL certificate verification by
|
Since version 7.10, libcurl performs peer SSL certificate verification by
|
||||||
default. This is done by installing a default CA cert bundle on 'make install'
|
default. This is done by installing a default CA cert bundle on 'make install'
|
||||||
(or similar), that CA bundle package is used by default on operations against
|
(or similar), that CA bundle package is used by default on operations against
|
||||||
SSL servers.
|
SSL servers.
|
||||||
@@ -11,9 +11,11 @@ by CAs present in the bundle, you will not notice any changed behavior and you
|
|||||||
will seamlessly get a higher security level on your SSL connections since you
|
will seamlessly get a higher security level on your SSL connections since you
|
||||||
can be sure that the remote server really is the one it claims to be.
|
can be sure that the remote server really is the one it claims to be.
|
||||||
|
|
||||||
If the remote server uses a self-signed certificate, or if you don't install
|
If the remote server uses a self-signed certificate, if you don't install
|
||||||
curl's CA cert bundle or if it uses a certificate signed by a CA that isn't
|
curl's CA cert bundle, if the server uses a certificate signed by a CA that
|
||||||
included in the bundle, then you need to do one of the following:
|
isn't included in the bundle or if the remoste host is an imposter
|
||||||
|
impersonating your favourite site, and you want to transfer files from this
|
||||||
|
server, do one of the following:
|
||||||
|
|
||||||
1. Tell libcurl to *not* verify the peer. With libcurl you disable with with
|
1. Tell libcurl to *not* verify the peer. With libcurl you disable with with
|
||||||
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, FALSE);
|
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, FALSE);
|
||||||
@@ -26,6 +28,12 @@ included in the bundle, then you need to do one of the following:
|
|||||||
|
|
||||||
With the curl command tool: --cacert [file]
|
With the curl command tool: --cacert [file]
|
||||||
|
|
||||||
|
3. Add the CA cert for your server to the existing default CA cert bundle.
|
||||||
|
The default path of the CA bundle installed with the curl package is:
|
||||||
|
/usr/local/share/curl/curl-ca-bundle.crt, which can be changed by running
|
||||||
|
configure with the --with-ca-bundle option pointing out the path of your
|
||||||
|
choice.
|
||||||
|
|
||||||
Neglecting to use one of the above menthods when dealing with a server using a
|
Neglecting to use one of the above menthods when dealing with a server using a
|
||||||
certficate that isn't signed by one of the certficates in the installed CA
|
certficate that isn't signed by one of the certficates in the installed CA
|
||||||
cert bundle, will cause SSL to report an error ("certificate verify failed")
|
cert bundle, will cause SSL to report an error ("certificate verify failed")
|
||||||
@@ -37,3 +45,4 @@ trouble for some users, since it adds security to a majority of the SSL
|
|||||||
connections that previously weren't really secure. It turned out many people
|
connections that previously weren't really secure. It turned out many people
|
||||||
were using previous versions of curl/libcurl without realizing the need for
|
were using previous versions of curl/libcurl without realizing the need for
|
||||||
the CA cert options to get truly secure SSL connections.
|
the CA cert options to get truly secure SSL connections.
|
||||||
|
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
This project has been alive for several years. Countless people have provided
|
This project has been alive for several years. Countless people have provided
|
||||||
feedback that have improved curl. Here follows a (incomplete) list of people
|
feedback that have improved curl. Here follows a (incomplete) list of people
|
||||||
that have contributed with non-trivial parts:
|
that have contributed with non-trivial parts:
|
||||||
|
|
||||||
Daniel Stenberg <daniel@haxx.se>
|
Daniel Stenberg <daniel@haxx.se>
|
||||||
Rafael Sagula <sagula@inf.ufrgs.br>
|
Rafael Sagula <sagula@inf.ufrgs.br>
|
||||||
@@ -96,4 +96,5 @@ David Meyer <meyer@paracel.com>
|
|||||||
Dominick Meglio <codemstr@ptd.net>
|
Dominick Meglio <codemstr@ptd.net>
|
||||||
Gisle Vanem <gvanem@broadpark.no>
|
Gisle Vanem <gvanem@broadpark.no>
|
||||||
Giuseppe Attardi <attardi@di.unipi.it>
|
Giuseppe Attardi <attardi@di.unipi.it>
|
||||||
|
Tor Arntsen <tor@spacetec.no>
|
||||||
|
David Byron <DByron@everdreamcorp.com>
|
||||||
|
56
docs/TODO
56
docs/TODO
@@ -25,14 +25,16 @@ TODO
|
|||||||
[http://curl.haxx.se/dev/no_copy_callbacks.txt]
|
[http://curl.haxx.se/dev/no_copy_callbacks.txt]
|
||||||
|
|
||||||
* More data sharing. curl_share_* functions already exist and work, and they
|
* More data sharing. curl_share_* functions already exist and work, and they
|
||||||
can be extended to share more.
|
can be extended to share more. For example, enable sharing of the ares
|
||||||
|
channel.
|
||||||
|
|
||||||
* Set the SO_KEEPALIVE socket option to make libcurl notice and disconnect
|
* Introduce a new error code indicating authentication problems (for proxy
|
||||||
very long time idle connections.
|
CONNECT error 407 for example). This cannot be an error code, we must not
|
||||||
|
return informational stuff as errors, consider a new info returned by
|
||||||
|
curl_easy_getinfo() #845941
|
||||||
|
|
||||||
* Go through the code and verify that libcurl deals with big files >2GB and
|
* Option to set the SO_KEEPALIVE socket option to make libcurl notice and
|
||||||
>4GB all over. Bug reports (and source reviews) show that it doesn't
|
disconnect very long time idle connections.
|
||||||
currently work.
|
|
||||||
|
|
||||||
LIBCURL - multi interface
|
LIBCURL - multi interface
|
||||||
|
|
||||||
@@ -55,6 +57,13 @@ TODO
|
|||||||
|
|
||||||
FTP
|
FTP
|
||||||
|
|
||||||
|
* Optimize the way libcurl uses CWD on each new request over a persistent
|
||||||
|
connection (on FTP) even if it doesn't have to.
|
||||||
|
|
||||||
|
* REST fix for servers not behaving well on >2GB requests. This should fail
|
||||||
|
if the server doesn't set the pointer to the requested index. The tricky
|
||||||
|
part is to figure out if the server did the right thing or not.
|
||||||
|
|
||||||
* Support the most common FTP proxies, Philip Newton provided a list
|
* Support the most common FTP proxies, Philip Newton provided a list
|
||||||
allegedly from ncftp:
|
allegedly from ncftp:
|
||||||
http://curl.haxx.se/mail/archive-2003-04/0126.html
|
http://curl.haxx.se/mail/archive-2003-04/0126.html
|
||||||
@@ -89,6 +98,15 @@ TODO
|
|||||||
|
|
||||||
SSL
|
SSL
|
||||||
|
|
||||||
|
* Anton Fedorov's "dumpcert" patch:
|
||||||
|
http://curl.haxx.se/mail/lib-2004-03/0088.html
|
||||||
|
|
||||||
|
* Evaluate/apply Gertjan van Wingerde's SSL patches:
|
||||||
|
http://curl.haxx.se/mail/lib-2004-03/0087.html
|
||||||
|
|
||||||
|
* Peter Sylvester's "Most Significant Common Name" change. Feedback welcome.
|
||||||
|
At least the UTF8 conversion and comparison should be done. Patch?
|
||||||
|
|
||||||
* If you really want to improve the SSL situation, you should probably have a
|
* 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
|
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
|
done on every request as well, when they should only be necessary once per
|
||||||
@@ -156,8 +174,19 @@ TODO
|
|||||||
* --data-encode that URL encodes the data before posting
|
* --data-encode that URL encodes the data before posting
|
||||||
http://curl.haxx.se/mail/archive-2003-11/0091.html (Kevin Roth suggested)
|
http://curl.haxx.se/mail/archive-2003-11/0091.html (Kevin Roth suggested)
|
||||||
|
|
||||||
|
BUILD
|
||||||
|
|
||||||
|
* Consider extending 'roffit' to produce decent ASCII output, and use that
|
||||||
|
instead of (g)nroff when building src/hugehelp.c
|
||||||
|
|
||||||
TEST SUITE
|
TEST SUITE
|
||||||
|
|
||||||
|
* Make the test servers able to serve multiple running test suites. Like if
|
||||||
|
two users run 'make test' at once.
|
||||||
|
|
||||||
|
* Make runtests.pl capable of changing port numbers for the servers. This was
|
||||||
|
the intention from the start, but in practise it is now hard.
|
||||||
|
|
||||||
* If perl wasn't found by the configure script, don't attempt to run the
|
* If perl wasn't found by the configure script, don't attempt to run the
|
||||||
tests but explain something nice why it doesn't.
|
tests but explain something nice why it doesn't.
|
||||||
|
|
||||||
@@ -167,11 +196,20 @@ TODO
|
|||||||
* Make the test suite work on more platforms. OpenBSD and Mac OS. Remove
|
* Make the test suite work on more platforms. OpenBSD and Mac OS. Remove
|
||||||
fork()s and it should become even more portable.
|
fork()s and it should become even more portable.
|
||||||
|
|
||||||
* Introduce a test suite that tests libcurl better and more explicitly.
|
NEXT MAJOR RELEASE
|
||||||
|
|
||||||
NEXT MAJOR RELEASE
|
|
||||||
|
|
||||||
* curl_easy_cleanup() returns void, but curl_multi_cleanup() returns a
|
* curl_easy_cleanup() returns void, but curl_multi_cleanup() returns a
|
||||||
CURLMcode. These should be changed to be the same.
|
CURLMcode. These should be changed to be the same.
|
||||||
|
|
||||||
* curl_formparse() should be removed
|
* curl_formparse() should be removed
|
||||||
|
|
||||||
|
* remove obsolete defines from curl/curl.h
|
||||||
|
|
||||||
|
* remove the following functions from the public API:
|
||||||
|
curl_getenv
|
||||||
|
curl_mprintf (and variations)
|
||||||
|
curl_strequal
|
||||||
|
curl_strnequal
|
||||||
|
|
||||||
|
They will instead become curlx_ - alternatives. That makes the curl app
|
||||||
|
still capable of building with them from source.
|
||||||
|
149
docs/curl.1
149
docs/curl.1
@@ -2,7 +2,7 @@
|
|||||||
.\" nroff -man curl.1
|
.\" nroff -man curl.1
|
||||||
.\" Written by Daniel Stenberg
|
.\" Written by Daniel Stenberg
|
||||||
.\"
|
.\"
|
||||||
.TH curl 1 "2 Dec 2003" "Curl 7.11.0" "Curl Manual"
|
.TH curl 1 "25 Mar 2004" "Curl 7.11.2" "Curl Manual"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
curl \- transfer a URL
|
curl \- transfer a URL
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
@@ -165,9 +165,9 @@ 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
|
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
|
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
|
\&"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 this option
|
content-type application/x-www-form-urlencoded. Compare to \fI-F/--form\fP. If
|
||||||
is used more than once on the same command line, the data pieces specified
|
this option is used more than once on the same command line, the data pieces
|
||||||
will be merged together with a separating &-letter. Thus, using '-d
|
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 -d skill=lousy' would generate a post chunk that looks like
|
||||||
\&'name=daniel&skill=lousy'.
|
\&'name=daniel&skill=lousy'.
|
||||||
|
|
||||||
@@ -259,6 +259,11 @@ If the optional password isn't specified, it will be queried for on
|
|||||||
the terminal. Note that this certificate is the private key and the private
|
the terminal. Note that this certificate is the private key and the private
|
||||||
certificate concatenated!
|
certificate concatenated!
|
||||||
|
|
||||||
|
If this option is used several times, the last one will be used.
|
||||||
|
.IP "--cert-type <type>"
|
||||||
|
(SSL) Tells curl what certificate type the provided certificate is in. PEM,
|
||||||
|
DER and ENG are recognized types.
|
||||||
|
|
||||||
If this option is used several times, the last one will be used.
|
If this option is used several times, the last one will be used.
|
||||||
.IP "--cacert <CA certificate>"
|
.IP "--cacert <CA certificate>"
|
||||||
(HTTPS) Tells curl to use the specified certificate file to verify the
|
(HTTPS) Tells curl to use the specified certificate file to verify the
|
||||||
@@ -400,13 +405,23 @@ default. This makes all connections considered "insecure" to fail unless
|
|||||||
\fI-k/--insecure\fP is used.
|
\fI-k/--insecure\fP is used.
|
||||||
|
|
||||||
If this option is used twice, the second time will again disable it.
|
If this option is used twice, the second time will again disable it.
|
||||||
|
.IP "--key <key>"
|
||||||
|
(SSL) Private key file name. Allows you to provide your private key in this
|
||||||
|
separate file.
|
||||||
|
|
||||||
|
If this option is used several times, the last one will be used.
|
||||||
|
.IP "--key-type <type>"
|
||||||
|
(SSL) Private key file type. Specify which type your \fI--key\fP provided
|
||||||
|
private key is. DER, PEM and ENG are supported.
|
||||||
|
|
||||||
|
If this option is used several times, the last one will be used.
|
||||||
.IP "--krb4 <level>"
|
.IP "--krb4 <level>"
|
||||||
(FTP) Enable kerberos4 authentication and use. The level must be entered and
|
(FTP) Enable kerberos4 authentication and use. The level must be entered and
|
||||||
should be one of 'clear', 'safe', 'confidential' or 'private'. Should you use
|
should be one of 'clear', 'safe', 'confidential' or 'private'. Should you use
|
||||||
a level that is not one of these, 'private' will instead be used.
|
a level that is not one of these, 'private' will instead be used.
|
||||||
|
|
||||||
This option requiures that the library was built with kerberos4 support. This
|
This option requiures that the library was built with kerberos4 support. This
|
||||||
is not very common. Use \fI--version\fP to see if your version supports it.
|
is not very common. Use \fI-V/--version\fP to see if your curl supports it.
|
||||||
|
|
||||||
If this option is used several times, the last one will be used.
|
If this option is used several times, the last one will be used.
|
||||||
.IP "-K/--config <config file>"
|
.IP "-K/--config <config file>"
|
||||||
@@ -432,10 +447,13 @@ Specify the maximum transfer rate you want curl to use. This feature is useful
|
|||||||
if you have a limited pipe and you'd like your transfer not use your entire
|
if you have a limited pipe and you'd like your transfer not use your entire
|
||||||
bandwidth.
|
bandwidth.
|
||||||
|
|
||||||
The given speed is measured in bytes/second, unless a suffix is
|
The given speed is measured in bytes/second, unless a suffix is appended.
|
||||||
appended. Appending 'k' or 'K' will count the number as kilobytes, 'm' or M'
|
Appending 'k' or 'K' will count the number as kilobytes, 'm' or M' makes it
|
||||||
makes it megabytes while 'g' or 'G' makes it gigabytes. Examples: 200K, 3m and
|
megabytes while 'g' or 'G' makes it gigabytes. Examples: 200K, 3m and 1G.
|
||||||
1G.
|
|
||||||
|
If you are also using the \fI-Y/--speed-limit\fP option, that option will take
|
||||||
|
precedence and might cripple the rate-limiting slightly, to help keeping the
|
||||||
|
speed-limit logic working.
|
||||||
|
|
||||||
This option was introduced in curl 7.10.
|
This option was introduced in curl 7.10.
|
||||||
|
|
||||||
@@ -455,11 +473,12 @@ If this option is used twice, the second will again disable list only.
|
|||||||
.IP "-L/--location"
|
.IP "-L/--location"
|
||||||
(HTTP/HTTPS) If the server reports that the requested page has a different
|
(HTTP/HTTPS) If the server reports that the requested page has a different
|
||||||
location (indicated with the header line Location:) this flag will let curl
|
location (indicated with the header line Location:) this flag will let curl
|
||||||
attempt to reattempt the get on the new place. If used together with -i or -I,
|
attempt to reattempt the get on the new place. If used together with
|
||||||
headers from all requested pages will be shown. If authentication is used,
|
\fI-i/--include\fP or \fI-I/--head\fP, headers from all requested pages will
|
||||||
curl will only send its credentials to the initial host, so if a redirect
|
be shown. If authentication is used, curl will only send its credentials to
|
||||||
takes curl to a different host, it won't intercept the user+password. See also
|
the initial host, so if a redirect takes curl to a different host, it won't
|
||||||
\fI--location-trusted\fP on how to change this.
|
intercept the user+password. See also \fI--location-trusted\fP on how to
|
||||||
|
change this.
|
||||||
|
|
||||||
If this option is used twice, the second will again disable location following.
|
If this option is used twice, the second will again disable location following.
|
||||||
.IP "--location-trusted"
|
.IP "--location-trusted"
|
||||||
@@ -506,6 +525,9 @@ to ftp to the machine host.domain.com with user name \&'myself' and password
|
|||||||
.B "machine host.domain.com login myself password secret"
|
.B "machine host.domain.com login myself password secret"
|
||||||
|
|
||||||
If this option is used twice, the second will again disable netrc usage.
|
If this option is used twice, the second will again disable netrc usage.
|
||||||
|
.IP "--netrc-optional"
|
||||||
|
Very similar to \fI--netrc\fP, but this option makes the .netrc usage
|
||||||
|
\fBoptional\fP and not mandatory as the \fI--netrc\fP does.
|
||||||
.IP "--negotiate"
|
.IP "--negotiate"
|
||||||
(HTTP) Enables GSS-Negotiate authentication. The GSS-Negotiate method was
|
(HTTP) Enables GSS-Negotiate authentication. The GSS-Negotiate method was
|
||||||
designed by Microsoft and is used in their web aplications. It is primarily
|
designed by Microsoft and is used in their web aplications. It is primarily
|
||||||
@@ -514,7 +536,7 @@ with another authentication methods. For more information see IETF draft
|
|||||||
draft-brezak-spnego-http-04.txt. (Added in 7.10.6)
|
draft-brezak-spnego-http-04.txt. (Added in 7.10.6)
|
||||||
|
|
||||||
This option requiures that the library was built with GSSAPI support. This is
|
This option requiures that the library was built with GSSAPI support. This is
|
||||||
not very common. Use \fI--version\fP to see if your version supports
|
not very common. Use \fI-V/--version\fP to see if your version supports
|
||||||
GSS-Negotiate.
|
GSS-Negotiate.
|
||||||
|
|
||||||
If this option is used several times, the following occurrences make no
|
If this option is used several times, the following occurrences make no
|
||||||
@@ -534,8 +556,11 @@ on their efforts. This kind of behavior should not be endorsed, you should
|
|||||||
encourage everyone who uses NTLM to switch to a public and documented
|
encourage everyone who uses NTLM to switch to a public and documented
|
||||||
authentication method instead. Such as Digest. (Added in 7.10.6)
|
authentication method instead. Such as Digest. (Added in 7.10.6)
|
||||||
|
|
||||||
This option requiures that the library was built with SSL support. Use \fIcurl
|
If you want to enable NTLM for your proxy authentication, then use
|
||||||
--version\fP to see if your version supports NTLM.
|
\fI--proxy-ntlm\fP.
|
||||||
|
|
||||||
|
This option requiures that the library was built with SSL support. Use
|
||||||
|
\fI-V/--version\fP to see if your curl supports NTLM.
|
||||||
|
|
||||||
If this option is used several times, the following occurrences make no
|
If this option is used several times, the following occurrences make no
|
||||||
difference.
|
difference.
|
||||||
@@ -553,18 +578,28 @@ or use several variables like:
|
|||||||
|
|
||||||
You may use this option as many times as you have number of URLs.
|
You may use this option as many times as you have number of URLs.
|
||||||
|
|
||||||
See also the --create-dirs option to create the local directories dynamically.
|
See also the \fI--create-dirs\fP option to create the local directories
|
||||||
|
dynamically.
|
||||||
.IP "-O/--remote-name"
|
.IP "-O/--remote-name"
|
||||||
Write output to a local file named like the remote file we get. (Only the file
|
Write output to a local file named like the remote file we get. (Only the file
|
||||||
part of the remote file is used, the path is cut off.)
|
part of the remote file is used, the path is cut off.)
|
||||||
|
|
||||||
You may use this option as many times as you have number of URLs.
|
You may use this option as many times as you have number of URLs.
|
||||||
|
.IP "--pass <phrase>"
|
||||||
|
(SSL) Pass phrase for the private key
|
||||||
|
|
||||||
|
If this option is used several times, the last one will be used.
|
||||||
|
.IP "--proxy-ntlm"
|
||||||
|
Tells curl to use NTLM authentication when communicating with the given
|
||||||
|
proxy. Use \fI--ntlm\fP for enabling NTLM with a remote host.
|
||||||
|
|
||||||
|
If this option is used twice, the second will again disable proxy NTLM.
|
||||||
.IP "-p/--proxytunnel"
|
.IP "-p/--proxytunnel"
|
||||||
When an HTTP proxy is used, this option will cause non-HTTP protocols to
|
When an HTTP proxy is used (\fI-x/--proxy\fP), this option will cause non-HTTP
|
||||||
attempt to tunnel through the proxy instead of merely using it to do HTTP-like
|
protocols to attempt to tunnel through the proxy instead of merely using it to
|
||||||
operations. The tunnel approach is made with the HTTP proxy CONNECT request
|
do HTTP-like operations. The tunnel approach is made with the HTTP proxy
|
||||||
and requires that the proxy allows direct connect to the remote port number
|
CONNECT request and requires that the proxy allows direct connect to the
|
||||||
curl wants to tunnel through to.
|
remote port number curl wants to tunnel through to.
|
||||||
|
|
||||||
If this option is used twice, the second will again disable proxy tunnel.
|
If this option is used twice, the second will again disable proxy tunnel.
|
||||||
.IP "-P/--ftp-port <address>"
|
.IP "-P/--ftp-port <address>"
|
||||||
@@ -585,7 +620,8 @@ i.e "my.host.domain" to specify machine
|
|||||||
.RE
|
.RE
|
||||||
|
|
||||||
If this option is used several times, the last one will be used. Disable the
|
If this option is used several times, the last one will be used. Disable the
|
||||||
use of PORT with \fI--ftp-pasv\fP.
|
use of PORT with \fI--ftp-pasv\fP. Disable the attempt to use the EPRT command
|
||||||
|
instead of PORT by using \fI--disable-eprt\fP. EPRT is really PORT++.
|
||||||
.IP "-q"
|
.IP "-q"
|
||||||
If used as the first parameter on the command line, the \fI$HOME/.curlrc\fP
|
If used as the first parameter on the command line, the \fI$HOME/.curlrc\fP
|
||||||
file will not be read and used as a config file.
|
file will not be read and used as a config file.
|
||||||
@@ -657,12 +693,25 @@ If this option is used twice, the second will again disable mute.
|
|||||||
When used with -s it makes curl show error message if it fails.
|
When used with -s it makes curl show error message if it fails.
|
||||||
|
|
||||||
If this option is used twice, the second will again disable show error.
|
If this option is used twice, the second will again disable show error.
|
||||||
|
.IP "--socks <host[:port]>"
|
||||||
|
Use the specified SOCKS5 proxy. If the port number is not specified, it is
|
||||||
|
assumed at port 1080. (Option added in 7.11.1)
|
||||||
|
|
||||||
|
This option overrides any previous use of \fI-x/--proxy\fP, as they are
|
||||||
|
mutually exclusive.
|
||||||
|
|
||||||
|
If this option is used several times, the last one will be used.
|
||||||
.IP "--stderr <file>"
|
.IP "--stderr <file>"
|
||||||
Redirect all writes to stderr to the specified file instead. If the file name
|
Redirect all writes to stderr to the specified file instead. If the file name
|
||||||
is a plain '-', it is instead written to stdout. This option has no point when
|
is a plain '-', it is instead written to stdout. This option has no point when
|
||||||
you're using a shell with decent redirecting capabilities.
|
you're using a shell with decent redirecting capabilities.
|
||||||
|
|
||||||
If this option is used several times, the last one will be used.
|
If this option is used several times, the last one will be used.
|
||||||
|
.IP "--tcp-nodelay"
|
||||||
|
Turn on the TCP_NODELAY option. See the \fIcurl_easy_setopt(3)\fP man page for
|
||||||
|
details about this option. (Added in 7.11.2)
|
||||||
|
|
||||||
|
If this option is used several times, each occurance toggles this on/off.
|
||||||
.IP "-t/--telnet-option <OPT=val>"
|
.IP "-t/--telnet-option <OPT=val>"
|
||||||
Pass options to the telnet protocol. Supported options are:
|
Pass options to the telnet protocol. Supported options are:
|
||||||
|
|
||||||
@@ -706,24 +755,18 @@ Enables a full trace dump of all incoming and outgoing data, including
|
|||||||
descriptive information, to the given output file. Use "-" as filename to have
|
descriptive information, to the given output file. Use "-" as filename to have
|
||||||
the output sent to stdout.
|
the output sent to stdout.
|
||||||
|
|
||||||
This is very similar to --trace, but leaves out the hex part and only shows
|
This is very similar to \fI--trace\fP, but leaves out the hex part and only
|
||||||
the ASCII part of the dump. It makes smaller output that might be easier to
|
shows the ASCII part of the dump. It makes smaller output that might be easier
|
||||||
read for untrained humans.
|
to read for untrained humans.
|
||||||
|
|
||||||
If this option is used several times, the last one will be used. (Added in
|
If this option is used several times, the last one will be used. (Added in
|
||||||
7.9.7)
|
7.9.7)
|
||||||
.IP "-u/--user <user:password>"
|
.IP "-u/--user <user:password>"
|
||||||
Specify user and password to use when fetching. Read the MANUAL for detailed
|
Specify user and password to use for server authentication.
|
||||||
examples of how to use this. If no password is specified, curl will ask for it
|
|
||||||
interactively.
|
|
||||||
|
|
||||||
You can also use the --digest option to enable Digest authentication when
|
|
||||||
communicating with HTTP 1.1 servers.
|
|
||||||
|
|
||||||
If this option is used several times, the last one will be used.
|
If this option is used several times, the last one will be used.
|
||||||
.IP "-U/--proxy-user <user:password>"
|
.IP "-U/--proxy-user <user:password>"
|
||||||
Specify user and password to use for Proxy authentication. If no
|
Specify user and password to use for proxy authentication.
|
||||||
password is specified, curl will ask for it interactively.
|
|
||||||
|
|
||||||
If this option is used several times, the last one will be used.
|
If this option is used several times, the last one will be used.
|
||||||
.IP "--url <URL>"
|
.IP "--url <URL>"
|
||||||
@@ -731,7 +774,7 @@ Specify a URL to fetch. This option is mostly handy when you want to specify
|
|||||||
URL(s) in a config file.
|
URL(s) in a config file.
|
||||||
|
|
||||||
This option may be used any number of times. To control where this URL is
|
This option may be used any number of times. To control where this URL is
|
||||||
written, use the \fI-o\fP or the \fI-O\fP options.
|
written, use the \fI-o/--output\fP or the \fI-O/--remote-name\fP options.
|
||||||
.IP "-v/--verbose"
|
.IP "-v/--verbose"
|
||||||
Makes the fetching more verbose/talkative. Mostly usable for debugging. Lines
|
Makes the fetching more verbose/talkative. Mostly usable for debugging. Lines
|
||||||
starting with '>' means data sent by curl, '<' means data received by curl
|
starting with '>' means data sent by curl, '<' means data received by curl
|
||||||
@@ -755,8 +798,30 @@ The second line (starts with "Protocols:") shows all protocols that libcurl
|
|||||||
reports to support.
|
reports to support.
|
||||||
|
|
||||||
The third line (starts with "Features:") shows specific features libcurl
|
The third line (starts with "Features:") shows specific features libcurl
|
||||||
reports to offer.
|
reports to offer. Available features include:
|
||||||
|
.RS
|
||||||
|
.IP "IPv6"
|
||||||
|
You can use IPv6 with this.
|
||||||
|
.IP "krb4"
|
||||||
|
Krb4 for ftp is supported.
|
||||||
|
.IP "SSL"
|
||||||
|
HTTPS and FTPS are supported.
|
||||||
|
.IP "libz"
|
||||||
|
Automatic decompression of compressed files over HTTP is supported.
|
||||||
|
.IP "NTLM"
|
||||||
|
NTLM authenticaion is supported.
|
||||||
|
.IP "GSS-Negotiate"
|
||||||
|
Negotiate authenticaion is supported.
|
||||||
|
.IP "Debug"
|
||||||
|
This curl uses a libcurl built with Debug. This enables more error-tracking
|
||||||
|
and memory debugging etc. For curl-developers only!
|
||||||
|
.IP "AsynchDNS"
|
||||||
|
This curl uses asynchronous name resolves.
|
||||||
|
.IP "SPNEGO"
|
||||||
|
SPNEGO Negotiate authenticaion is supported.
|
||||||
|
.IP "Largefile"
|
||||||
|
This curl supports transfers of large files, files larger than 2GB.
|
||||||
|
.RE
|
||||||
.IP "-w/--write-out <format>"
|
.IP "-w/--write-out <format>"
|
||||||
Defines what to display after a completed and successful operation. The format
|
Defines what to display after a completed and successful operation. The format
|
||||||
is a string that may contain plain text mixed with any number of variables. The
|
is a string that may contain plain text mixed with any number of variables. The
|
||||||
@@ -886,9 +951,9 @@ than the specified date/time.
|
|||||||
|
|
||||||
If this option is used several times, the last one will be used.
|
If this option is used several times, the last one will be used.
|
||||||
.IP "-Z/--max-redirs <num>"
|
.IP "-Z/--max-redirs <num>"
|
||||||
Set maximum number of redirection-followings allowed. If -L/--location is
|
Set maximum number of redirection-followings allowed. If \fI-L/--location\fP
|
||||||
used, this option can be used to prevent curl from following redirections "in
|
is used, this option can be used to prevent curl from following redirections
|
||||||
absurdum".
|
\&"in absurdum".
|
||||||
|
|
||||||
If this option is used several times, the last one will be used.
|
If this option is used several times, the last one will be used.
|
||||||
.IP "-0/--http1.0"
|
.IP "-0/--http1.0"
|
||||||
@@ -986,7 +1051,7 @@ FTP quote error. A quote command returned error from the server.
|
|||||||
.IP 22
|
.IP 22
|
||||||
HTTP page not retrieved. The requested url was not found or returned another
|
HTTP page not retrieved. The requested url was not found or returned another
|
||||||
error with the HTTP error code being 400 or above. This return code only
|
error with the HTTP error code being 400 or above. This return code only
|
||||||
appears if --fail is used.
|
appears if \fI-f/--fail\fP is used.
|
||||||
.IP 23
|
.IP 23
|
||||||
Write error. Curl couldn't write data to a local filesystem or similar.
|
Write error. Curl couldn't write data to a local filesystem or similar.
|
||||||
.IP 24
|
.IP 24
|
||||||
|
@@ -1,8 +1,8 @@
|
|||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
* _ _ ____ _
|
* _ _ ____ _
|
||||||
* Project ___| | | | _ \| |
|
* Project ___| | | | _ \| |
|
||||||
* / __| | | | |_) | |
|
* / __| | | | |_) | |
|
||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* $Id$
|
* $Id$
|
||||||
@@ -17,10 +17,13 @@
|
|||||||
#include <curl/types.h> /* new for v7 */
|
#include <curl/types.h> /* new for v7 */
|
||||||
#include <curl/easy.h> /* new for v7 */
|
#include <curl/easy.h> /* new for v7 */
|
||||||
|
|
||||||
#include <pthread.h>
|
|
||||||
|
|
||||||
GtkWidget *Bar;
|
GtkWidget *Bar;
|
||||||
|
|
||||||
|
size_t my_write_func(void *ptr, size_t size, size_t nmemb, FILE *stream)
|
||||||
|
{
|
||||||
|
return fwrite(ptr, size, nmemb, stream);
|
||||||
|
}
|
||||||
|
|
||||||
size_t my_read_func(void *ptr, size_t size, size_t nmemb, FILE *stream)
|
size_t my_read_func(void *ptr, size_t size, size_t nmemb, FILE *stream)
|
||||||
{
|
{
|
||||||
return fread(ptr, size, nmemb, stream);
|
return fread(ptr, size, nmemb, stream);
|
||||||
@@ -45,25 +48,27 @@ void *curl_thread(void *ptr)
|
|||||||
CURLcode res;
|
CURLcode res;
|
||||||
FILE *outfile;
|
FILE *outfile;
|
||||||
gchar *url = ptr;
|
gchar *url = ptr;
|
||||||
|
|
||||||
curl = curl_easy_init();
|
curl = curl_easy_init();
|
||||||
if(curl)
|
if(curl)
|
||||||
{
|
{
|
||||||
outfile = fopen("/tmp/test.curl", "w");
|
outfile = fopen("test.curl", "w");
|
||||||
|
|
||||||
curl_easy_setopt(curl, CURLOPT_URL, url);
|
curl_easy_setopt(curl, CURLOPT_URL, url);
|
||||||
curl_easy_setopt(curl, CURLOPT_FILE, outfile);
|
curl_easy_setopt(curl, CURLOPT_WRITEDATA, outfile);
|
||||||
|
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, my_write_func);
|
||||||
curl_easy_setopt(curl, CURLOPT_READFUNCTION, my_read_func);
|
curl_easy_setopt(curl, CURLOPT_READFUNCTION, my_read_func);
|
||||||
curl_easy_setopt(curl, CURLOPT_NOPROGRESS, FALSE);
|
curl_easy_setopt(curl, CURLOPT_NOPROGRESS, FALSE);
|
||||||
curl_easy_setopt(curl, CURLOPT_PROGRESSFUNCTION, my_progress_func);
|
curl_easy_setopt(curl, CURLOPT_PROGRESSFUNCTION, my_progress_func);
|
||||||
curl_easy_setopt(curl, CURLOPT_PROGRESSDATA, Bar);
|
curl_easy_setopt(curl, CURLOPT_PROGRESSDATA, Bar);
|
||||||
|
|
||||||
res = curl_easy_perform(curl);
|
res = curl_easy_perform(curl);
|
||||||
|
|
||||||
fclose(outfile);
|
fclose(outfile);
|
||||||
/* always cleanup */
|
/* always cleanup */
|
||||||
curl_easy_cleanup(curl);
|
curl_easy_cleanup(curl);
|
||||||
}
|
}
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -71,11 +76,10 @@ int main(int argc, char **argv)
|
|||||||
{
|
{
|
||||||
GtkWidget *Window, *Frame, *Frame2;
|
GtkWidget *Window, *Frame, *Frame2;
|
||||||
GtkAdjustment *adj;
|
GtkAdjustment *adj;
|
||||||
pthread_t curl_tid;
|
|
||||||
|
|
||||||
/* Init thread */
|
/* Init thread */
|
||||||
g_thread_init(NULL);
|
g_thread_init(NULL);
|
||||||
|
|
||||||
gtk_init(&argc, &argv);
|
gtk_init(&argc, &argv);
|
||||||
Window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
|
Window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
|
||||||
Frame = gtk_frame_new(NULL);
|
Frame = gtk_frame_new(NULL);
|
||||||
@@ -90,8 +94,10 @@ int main(int argc, char **argv)
|
|||||||
gtk_container_add(GTK_CONTAINER(Frame2), Bar);
|
gtk_container_add(GTK_CONTAINER(Frame2), Bar);
|
||||||
gtk_widget_show_all(Window);
|
gtk_widget_show_all(Window);
|
||||||
|
|
||||||
pthread_create(&curl_tid, NULL, curl_thread, argv[1]);
|
if (!g_thread_create(&curl_thread, argv[1], FALSE, NULL) != 0)
|
||||||
|
g_warning("can't create the thread");
|
||||||
|
|
||||||
|
|
||||||
gdk_threads_enter();
|
gdk_threads_enter();
|
||||||
gtk_main();
|
gtk_main();
|
||||||
gdk_threads_leave();
|
gdk_threads_leave();
|
||||||
|
@@ -70,6 +70,8 @@ int main(int argc, char **argv)
|
|||||||
switch(rc) {
|
switch(rc) {
|
||||||
case -1:
|
case -1:
|
||||||
/* select error */
|
/* select error */
|
||||||
|
still_running = 0;
|
||||||
|
printf("select() returns error, this is badness\n");
|
||||||
break;
|
break;
|
||||||
case 0:
|
case 0:
|
||||||
default:
|
default:
|
||||||
|
@@ -33,8 +33,8 @@ int main(int argc, char *argv[])
|
|||||||
CURL *curl;
|
CURL *curl;
|
||||||
CURLcode res;
|
CURLcode res;
|
||||||
|
|
||||||
struct HttpPost *formpost=NULL;
|
struct curl_httppost *formpost=NULL;
|
||||||
struct HttpPost *lastptr=NULL;
|
struct curl_httppost *lastptr=NULL;
|
||||||
struct curl_slist *headerlist=NULL;
|
struct curl_slist *headerlist=NULL;
|
||||||
char buf[] = "Expect:";
|
char buf[] = "Expect:";
|
||||||
|
|
||||||
|
@@ -222,7 +222,14 @@ Multi-threading issues
|
|||||||
handlers. Signals are needed for a SIGPIPE handler, and the alarm() syscall
|
handlers. Signals are needed for a SIGPIPE handler, and the alarm() syscall
|
||||||
is used to catch timeouts (mostly during DNS lookup).
|
is used to catch timeouts (mostly during DNS lookup).
|
||||||
|
|
||||||
So when using multiple threads you should first ignore SIGPIPE in your main
|
If you are accessing HTTPS or FTPS URLs in a multi-threaded manner, you are
|
||||||
|
then of course using OpenSSL multi-threaded and it has itself a few
|
||||||
|
requirements on this. Basicly, you need to provide one or two functions to
|
||||||
|
allow it to function properly. For all details, see this:
|
||||||
|
|
||||||
|
http://www.openssl.org/docs/crypto/threads.html#DESCRIPTION
|
||||||
|
|
||||||
|
When using multiple threads you should first ignore SIGPIPE in your main
|
||||||
thread and set the CURLOPT_NOSIGNAL option to TRUE for all handles.
|
thread and set the CURLOPT_NOSIGNAL option to TRUE for all handles.
|
||||||
|
|
||||||
Everything will work fine except that timeouts are not honored during the DNS
|
Everything will work fine except that timeouts are not honored during the DNS
|
||||||
|
@@ -122,7 +122,7 @@ CLEANFILES = $(HTMLPAGES) $(PDFPAGES)
|
|||||||
|
|
||||||
EXTRA_DIST = $(man_MANS) $(HTMLPAGES) index.html $(PDFPAGES)
|
EXTRA_DIST = $(man_MANS) $(HTMLPAGES) index.html $(PDFPAGES)
|
||||||
|
|
||||||
MAN2HTML= roffit < $< >$@
|
MAN2HTML= roffit --mandir=. < $< >$@
|
||||||
|
|
||||||
SUFFIXES = .3 .html
|
SUFFIXES = .3 .html
|
||||||
|
|
||||||
|
@@ -12,8 +12,8 @@ curl_easy_cleanup - End a libcurl easy session
|
|||||||
|
|
||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
||||||
This function must be the last function to call for an easy session. It is the
|
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
|
opposite of the \fIcurl_easy_init(3)\fP function and must be called with the
|
||||||
\fIhandle\fP as input that the curl_easy_init call returned.
|
same \fIhandle\fP as input that the curl_easy_init call returned.
|
||||||
|
|
||||||
This will effectively close all connections this handle has used and possibly
|
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
|
has kept open until now. Don't call this function if you intend to transfer
|
||||||
|
@@ -14,24 +14,21 @@ curl_easy_duphandle - Clone a libcurl session handle
|
|||||||
This function will return a new curl handle, a duplicate, using all the
|
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
|
options previously set in the input curl \fIhandle\fP. Both handles can
|
||||||
subsequently be used independently and they must both be freed with
|
subsequently be used independently and they must both be freed with
|
||||||
\fIcurl_easy_cleanup()\fP.
|
\fIcurl_easy_cleanup(3)\fP.
|
||||||
|
|
||||||
All strings that the input handle has been told to point to (as opposed to
|
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
|
copy) with previous calls to \fIcurl_easy_setopt(3)\fP using char * inputs,
|
||||||
be pointed to by the new handle as well. You must therefore make sure to keep
|
will be pointed to by the new handle as well. You must therefore make sure to
|
||||||
the data around until both handles have been cleaned up.
|
keep the data around until both handles have been cleaned up.
|
||||||
|
|
||||||
The new handle will \fBnot\fP inherit any state information, no connections,
|
The new handle will \fBnot\fP inherit any state information, no connections,
|
||||||
no SSL sessions and no cookies.
|
no SSL sessions and no cookies.
|
||||||
|
|
||||||
\fBNote\fP that even in multi-threaded programs, this function must be called
|
\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.
|
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
|
.SH RETURN VALUE
|
||||||
If this function returns NULL, something went wrong and no valid handle was
|
If this function returns NULL, something went wrong and no valid handle was
|
||||||
returned.
|
returned.
|
||||||
.SH "SEE ALSO"
|
.SH "SEE ALSO"
|
||||||
.BR curl_easy_init "(3)," curl_easy_cleanup "(3)," curl_global_init "(3)
|
.BR curl_easy_init "(3)," curl_easy_cleanup "(3)," curl_global_init "(3)
|
||||||
.SH BUGS
|
|
||||||
Surely there are some, you tell me!
|
|
||||||
|
@@ -20,7 +20,7 @@ filled in accordingly and can be relied upon only if the function returns
|
|||||||
CURLE_OK. This function is intended to get used *AFTER* a performed transfer,
|
CURLE_OK. This function is intended to get used *AFTER* a performed transfer,
|
||||||
all results from this function are undefined until the transfer is completed.
|
all results from this function are undefined until the transfer is completed.
|
||||||
.SH AVAILABLE INFORMATION
|
.SH AVAILABLE INFORMATION
|
||||||
These are informations that can be extracted:
|
The following information can be extracted:
|
||||||
.IP CURLINFO_EFFECTIVE_URL
|
.IP CURLINFO_EFFECTIVE_URL
|
||||||
Pass a pointer to a 'char *' to receive the last used effective URL.
|
Pass a pointer to a 'char *' to receive the last used effective URL.
|
||||||
.IP CURLINFO_RESPONSE_CODE
|
.IP CURLINFO_RESPONSE_CODE
|
||||||
@@ -51,7 +51,7 @@ pre-transfer commands and negotiations that are specific to the particular
|
|||||||
protocol(s) involved.
|
protocol(s) involved.
|
||||||
.IP CURLINFO_STARTTRANSFER_TIME
|
.IP CURLINFO_STARTTRANSFER_TIME
|
||||||
Pass a pointer to a double to receive the time, in seconds, it took from the
|
Pass a pointer to a double to receive the time, in seconds, it took from the
|
||||||
start until the first byte is just about to be transfered. This includes
|
start until the first byte is just about to be transferred. This includes
|
||||||
CURLINFO_PRETRANSFER_TIME and also the time the server needs to calculate
|
CURLINFO_PRETRANSFER_TIME and also the time the server needs to calculate
|
||||||
the result.
|
the result.
|
||||||
.IP CURLINFO_REDIRECT_TIME
|
.IP CURLINFO_REDIRECT_TIME
|
||||||
@@ -85,32 +85,30 @@ than one request if FOLLOWLOCATION is true.
|
|||||||
.IP CURLINFO_SSL_VERIFYRESULT
|
.IP CURLINFO_SSL_VERIFYRESULT
|
||||||
Pass a pointer to a long to receive the result of the certification
|
Pass a pointer to a long to receive the result of the certification
|
||||||
verification that was requested (using the CURLOPT_SSL_VERIFYPEER option to
|
verification that was requested (using the CURLOPT_SSL_VERIFYPEER option to
|
||||||
curl_easy_setopt). (Added in 7.4.2)
|
\fIcurl_easy_setopt(3)\fP).
|
||||||
.IP CURLINFO_CONTENT_LENGTH_DOWNLOAD
|
.IP CURLINFO_CONTENT_LENGTH_DOWNLOAD
|
||||||
Pass a pointer to a double to receive the content-length of the download. This
|
Pass a pointer to a double to receive the content-length of the download. This
|
||||||
is the value read from the Content-Length: field. (Added in 7.6.1)
|
is the value read from the Content-Length: field.
|
||||||
.IP CURLINFO_CONTENT_LENGTH_UPLOAD
|
.IP CURLINFO_CONTENT_LENGTH_UPLOAD
|
||||||
Pass a pointer to a double to receive the specified size of the upload.
|
Pass a pointer to a double to receive the specified size of the upload.
|
||||||
.IP CURLINFO_CONTENT_TYPE
|
.IP CURLINFO_CONTENT_TYPE
|
||||||
Pass a pointer to a 'char *' to receive the content-type of the downloaded
|
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,
|
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
|
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)
|
protocol used doesn't support this.
|
||||||
.IP CURLINFO_PRIVATE
|
.IP CURLINFO_PRIVATE
|
||||||
Pass a pointer to a 'char *' to receive the pointer to the private data
|
Pass a pointer to a 'char *' to receive the pointer to the private data
|
||||||
associated with the curl handle (set with the CURLOPT_PRIVATE option to
|
associated with the curl handle (set with the CURLOPT_PRIVATE option to
|
||||||
curl_easy_setopt). (Added in 7.10.3)
|
\fIcurl_easy_setopt(3)\fP). (Added in 7.10.3)
|
||||||
.IP CURLINFO_HTTPAUTH_AVAIL
|
.IP CURLINFO_HTTPAUTH_AVAIL
|
||||||
Pass a pointer to a long to receive a bitmask indicating the authentication
|
Pass a pointer to a long to receive a bitmask indicating the authentication
|
||||||
method(s) available. The meaning of the bits is explained in the
|
method(s) available. The meaning of the bits is explained in the
|
||||||
CURLOPT_HTTPAUTH option for curl_easy_setopt. (Added in 7.10.8)
|
CURLOPT_HTTPAUTH option for \fIcurl_easy_setopt(3)\fP. (Added in 7.10.8)
|
||||||
.IP CURLINFO_PROXYAUTH_AVAIL
|
.IP CURLINFO_PROXYAUTH_AVAIL
|
||||||
Pass a pointer to a long to receive a bitmask indicating the authentication
|
Pass a pointer to a long to receive a bitmask indicating the authentication
|
||||||
method(s) available for your proxy athentication. (Added in 7.10.8)
|
method(s) available for your proxy authentication. (Added in 7.10.8)
|
||||||
.SH RETURN VALUE
|
.SH RETURN VALUE
|
||||||
If the operation was successful, CURLE_OK is returned. Otherwise an
|
If the operation was successful, CURLE_OK is returned. Otherwise an
|
||||||
appropriate error code will be returned.
|
appropriate error code will be returned.
|
||||||
.SH "SEE ALSO"
|
.SH "SEE ALSO"
|
||||||
.BR curl_easy_setopt "(3)"
|
.BR curl_easy_setopt "(3)"
|
||||||
.SH BUGS
|
|
||||||
Surely there are some, you tell me!
|
|
||||||
|
@@ -13,13 +13,11 @@ curl_easy_init - Start a libcurl easy session
|
|||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
||||||
This function must be the first function to call, and it returns a CURL easy
|
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
|
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
|
initializes curl and this call \fBMUST\fP have a corresponding call to
|
||||||
\fIcurl_easy_cleanup\fP when the operation is complete.
|
\fIcurl_easy_cleanup(3)\fP when the operation is complete.
|
||||||
|
|
||||||
.SH RETURN VALUE
|
.SH RETURN VALUE
|
||||||
If this function returns NULL, something went wrong and you cannot use the
|
If this function returns NULL, something went wrong and you cannot use the
|
||||||
other curl functions.
|
other curl functions.
|
||||||
.SH "SEE ALSO"
|
.SH "SEE ALSO"
|
||||||
.BR curl_easy_cleanup "(3), " curl_global_init "(3)
|
.BR curl_easy_cleanup "(3), " curl_global_init "(3)
|
||||||
.SH BUGS
|
|
||||||
Surely there are some, you tell me!
|
|
||||||
|
@@ -8,31 +8,26 @@ curl_easy_perform - Perform a file transfer
|
|||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
.B #include <curl/curl.h>
|
.B #include <curl/curl.h>
|
||||||
.sp
|
.sp
|
||||||
.BI "CURLcode curl_easy_perform(CURL *" handle ");
|
.BI "CURLcode curl_easy_perform(CURL *" handle ");"
|
||||||
.ad
|
.ad
|
||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
||||||
This function is called after the init and all the curl_easy_setopt() calls
|
This function is called after the init and all the \fIcurl_easy_setopt(3)\fP
|
||||||
are made, and will perform the transfer as described in the options.
|
calls are made, and will perform the transfer as described in the options. It
|
||||||
It must be called with the same
|
must be called with the same
|
||||||
.I handle
|
.I handle
|
||||||
as input as the curl_easy_init call returned.
|
as input as the curl_easy_init call returned.
|
||||||
|
|
||||||
libcurl version 7.7 or later (for older versions see below): You can do any
|
You can do any amount of calls to \fIcurl_easy_perform(3)\fP while using the
|
||||||
amount of calls to curl_easy_perform() while using the same handle. If you
|
same handle. If you intend to transfer more than one file, you are even
|
||||||
intend to transfer more than one file, you are even encouraged to do
|
encouraged to do so. libcurl will then attempt to re-use the same connection
|
||||||
so. libcurl will then attempt to re-use the same connection for the following
|
for the following transfers, thus making the operations faster, less CPU
|
||||||
transfers, thus making the operations faster, less CPU intense and using less
|
intense and using less network resources. Just note that you will have to use
|
||||||
network resources. Just note that you will have to use
|
\fIcurl_easy_setopt(3)\fP between the invokes to set options for the following
|
||||||
.I curl_easy_setopt
|
curl_easy_perform.
|
||||||
between the invokes to set options for the following curl_easy_perform.
|
|
||||||
|
|
||||||
You must never call this function simultaneously from two places using the
|
You must never call this function simultaneously from two places using the
|
||||||
same handle. Let the function return first before invoking it another time. If
|
same handle. Let the function return first before invoking it another time. If
|
||||||
you want parallel transfers, you must use several curl handles.
|
you want parallel transfers, you must use several curl handles.
|
||||||
|
|
||||||
Before libcurl version 7.7: You are only allowed to call this function once
|
|
||||||
using the same handle. If you want to do repeated calls, you must call
|
|
||||||
curl_easy_cleanup and curl_easy_init again first.
|
|
||||||
.SH RETURN VALUE
|
.SH RETURN VALUE
|
||||||
0 means everything was ok, non-zero means an error occurred as
|
0 means everything was ok, non-zero means an error occurred as
|
||||||
.I <curl/curl.h>
|
.I <curl/curl.h>
|
||||||
@@ -42,5 +37,4 @@ there will be a readable error message in the error buffer when non-zero is
|
|||||||
returned.
|
returned.
|
||||||
.SH "SEE ALSO"
|
.SH "SEE ALSO"
|
||||||
.BR curl_easy_init "(3), " curl_easy_setopt "(3), "
|
.BR curl_easy_init "(3), " curl_easy_setopt "(3), "
|
||||||
.SH BUGS
|
|
||||||
Surely there are some, you tell me!
|
|
||||||
|
@@ -21,7 +21,7 @@
|
|||||||
.\" * $Id$
|
.\" * $Id$
|
||||||
.\" **************************************************************************
|
.\" **************************************************************************
|
||||||
.\"
|
.\"
|
||||||
.TH curl_easy_setopt 3 "22 Jan 2004" "libcurl 7.11.0" "libcurl Manual"
|
.TH curl_easy_setopt 3 "12 Mar 2004" "libcurl 7.11.1" "libcurl Manual"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
curl_easy_setopt - set options for a curl easy handle
|
curl_easy_setopt - set options for a curl easy handle
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
@@ -46,8 +46,8 @@ you must change them between the transfers.
|
|||||||
\fBNOTE:\fP strings passed to libcurl as 'char *' arguments, will not be
|
\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
|
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
|
longer needs them. Failing to do so will cause very odd behavior or even
|
||||||
crashes. libcurl will need them until you call curl_easy_cleanup() or you set
|
crashes. libcurl will need them until you call \fIcurl_easy_cleanup(3)\fP or
|
||||||
the same option again to use a different pointer.
|
you set the same option again to use a different pointer.
|
||||||
|
|
||||||
The \fIhandle\fP is the return code from a \fIcurl_easy_init(3)\fP or
|
The \fIhandle\fP is the return code from a \fIcurl_easy_init(3)\fP or
|
||||||
\fIcurl_easy_duphandle(3)\fP call.
|
\fIcurl_easy_duphandle(3)\fP call.
|
||||||
@@ -56,7 +56,7 @@ The \fIhandle\fP is the return code from a \fIcurl_easy_init(3)\fP or
|
|||||||
Set the parameter to non-zero to get the library to display a lot of 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
|
information about its operations. Very useful for libcurl and/or protocol
|
||||||
debugging and understanding. The verbose information will be sent to stderr,
|
debugging and understanding. The verbose information will be sent to stderr,
|
||||||
or the stream set with CURLOPT_STDERR.
|
or the stream set with \fICURLOPT_STDERR\fP.
|
||||||
|
|
||||||
You hardly ever want this set in production use, you will almost always want
|
You hardly ever want this set in production use, you will almost always want
|
||||||
this when you debug/report problems. Another neat option for debugging is the
|
this when you debug/report problems. Another neat option for debugging is the
|
||||||
@@ -85,7 +85,7 @@ lookups. It enables nice timeouts for name resolves without signals.
|
|||||||
.IP CURLOPT_WRITEFUNCTION
|
.IP CURLOPT_WRITEFUNCTION
|
||||||
Function pointer that should match the following prototype: \fBsize_t
|
Function pointer that should match the following prototype: \fBsize_t
|
||||||
function( void *ptr, size_t size, size_t nmemb, void *stream);\fP This
|
function( void *ptr, size_t size, size_t nmemb, void *stream);\fP This
|
||||||
function gets called by libcurl as soon as there is data reveiced that needs
|
function gets called by libcurl as soon as there is data received that needs
|
||||||
to be saved. The size of the data pointed to by \fIptr\fP is \fIsize\fP
|
to be saved. The size of the data pointed to by \fIptr\fP is \fIsize\fP
|
||||||
multiplied with \fInmemb\fP, it will not be zero terminated. Return the number
|
multiplied with \fInmemb\fP, it will not be zero terminated. Return the number
|
||||||
of bytes actually taken care of. If that amount differs from the amount passed
|
of bytes actually taken care of. If that amount differs from the amount passed
|
||||||
@@ -165,7 +165,7 @@ Function pointer that should match the following prototype: \fIint
|
|||||||
curl_debug_callback (CURL *, curl_infotype, char *, size_t, void *);\fP
|
curl_debug_callback (CURL *, curl_infotype, char *, size_t, void *);\fP
|
||||||
\fICURLOPT_DEBUGFUNCTION\fP replaces the standard debug function used when
|
\fICURLOPT_DEBUGFUNCTION\fP replaces the standard debug function used when
|
||||||
\fICURLOPT_VERBOSE \fP is in effect. This callback receives debug information,
|
\fICURLOPT_VERBOSE \fP is in effect. This callback receives debug information,
|
||||||
as specified with the \fBcurl_infotype\fP argument. This funtion must return
|
as specified with the \fBcurl_infotype\fP argument. This function must return
|
||||||
0. The data pointed to by the char * passed to this function WILL NOT be zero
|
0. The data pointed to by the char * passed to this function WILL NOT be zero
|
||||||
terminated, but will be exactly of the size as told by the size_t argument.
|
terminated, but will be exactly of the size as told by the size_t argument.
|
||||||
|
|
||||||
@@ -191,7 +191,7 @@ Function pointer that should match the following prototype: \fBCURLcode
|
|||||||
sslctxfun(CURL *curl, void *sslctx, void *parm);\fP This function gets called
|
sslctxfun(CURL *curl, void *sslctx, void *parm);\fP This function gets called
|
||||||
by libcurl just before the initialization of an SSL connection after having
|
by libcurl just before the initialization of an SSL connection after having
|
||||||
processed all other SSL related options to give a last chance to an
|
processed all other SSL related options to give a last chance to an
|
||||||
application to modify the behaviour of openssl's ssl initilaization. The
|
application to modify the behaviour of openssl's ssl initialization. The
|
||||||
\fIsslctx\fP parameter is actually a pointer to an openssl \fISSL_CTX\fP. If
|
\fIsslctx\fP parameter is actually a pointer to an openssl \fISSL_CTX\fP. If
|
||||||
an error is returned no attempt to establish a connection is made and the
|
an error is returned no attempt to establish a connection is made and the
|
||||||
perform operation will return the error code from this callback function. Set
|
perform operation will return the error code from this callback function. Set
|
||||||
@@ -232,7 +232,14 @@ 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
|
terminated string. The string must remain present until curl no longer needs
|
||||||
it, as it doesn't copy the string.
|
it, as it doesn't copy the string.
|
||||||
|
|
||||||
\fBNOTE:\fP this option is (the only one) required to be set before
|
If the given URL lacks the protocol part ("http://" or "ftp://" etc), it will
|
||||||
|
attempt to guess which protocol to use based on the given host name. If the
|
||||||
|
given protocol of the set URL is not supported, libcurl will return on error
|
||||||
|
(\fICURLE_UNSUPPORTED_PROTOCOL\fP) when you call \fIcurl_easy_perform(3)\fP or
|
||||||
|
\fIcurl_multi_perform(3)\fP. Use \fIcurl_version_info(3)\fP for detailed info
|
||||||
|
on which protocols that are supported.
|
||||||
|
|
||||||
|
\fBNOTE:\fP \fICURLOPT_URL\fP is the only option that must be set before
|
||||||
\fIcurl_easy_perform(3)\fP is called.
|
\fIcurl_easy_perform(3)\fP is called.
|
||||||
.IP CURLOPT_PROXY
|
.IP CURLOPT_PROXY
|
||||||
Set HTTP proxy to use. The parameter should be a char * to a zero terminated
|
Set HTTP proxy to use. The parameter should be a char * to a zero terminated
|
||||||
@@ -242,8 +249,8 @@ be prefixed with [protocol]:// since any such prefix will be ignored. The
|
|||||||
proxy's port number may optionally be specified with the separate option
|
proxy's port number may optionally be specified with the separate option
|
||||||
\fICURLOPT_PROXYPORT\fP.
|
\fICURLOPT_PROXYPORT\fP.
|
||||||
|
|
||||||
\fBNOTE:\fP when you tell the library to use a HTTP proxy, libcurl will
|
\fBNOTE:\fP when you tell the library to use an HTTP proxy, libcurl will
|
||||||
transparently convert operations to HTTP even if you specify a FTP URL
|
transparently convert operations to HTTP even if you specify an FTP URL
|
||||||
etc. This may have an impact on what other features of the library you can
|
etc. This may have an impact on what other features of the library you can
|
||||||
use, such as \fICURLOPT_QUOTE\fP and similar FTP specifics that don't work
|
use, such as \fICURLOPT_QUOTE\fP and similar FTP specifics that don't work
|
||||||
unless you tunnel through the HTTP proxy. Such tunneling is activated with
|
unless you tunnel through the HTTP proxy. Such tunneling is activated with
|
||||||
@@ -271,16 +278,39 @@ name.
|
|||||||
Pass a long, this sets the timeout in seconds. Name resolves will be kept in
|
Pass a long, this sets the timeout in seconds. Name resolves will be kept in
|
||||||
memory for this number of seconds. Set to zero (0) to completely disable
|
memory for this number of seconds. Set to zero (0) to completely disable
|
||||||
caching, or set to -1 to make the cached entries remain forever. By default,
|
caching, or set to -1 to make the cached entries remain forever. By default,
|
||||||
libcurl caches info for 60 seconds.
|
libcurl caches this info for 60 seconds.
|
||||||
.IP CURLOPT_DNS_USE_GLOBAL_CACHE
|
.IP CURLOPT_DNS_USE_GLOBAL_CACHE
|
||||||
Pass a long. If the value is non-zero, it tells curl to use a global DNS cache
|
Pass a long. If the value is non-zero, it tells curl to use a global DNS cache
|
||||||
that will survive between easy handle creations and deletions. This is not
|
that will survive between easy handle creations and deletions. This is not
|
||||||
thread-safe and this will use a global varible.
|
thread-safe and this will use a global variable.
|
||||||
|
|
||||||
|
\fBWARNING:\fP this option is considered obsolete. Stop using it. Switch over
|
||||||
|
to using the share interface instead! See \fICURLOPT_SHARE\fP and
|
||||||
|
\fIcurl_share_init(3)\fP.
|
||||||
.IP CURLOPT_BUFFERSIZE
|
.IP CURLOPT_BUFFERSIZE
|
||||||
Pass a long specifying your prefered size for the receive buffer in libcurl.
|
Pass a long specifying your preferred size for the receive buffer in libcurl.
|
||||||
The main point of this would be that the write callback gets called more often
|
The main point of this would be that the write callback gets called more often
|
||||||
and with smaller chunks. This is just treated as a request, not an order. You
|
and with smaller chunks. This is just treated as a request, not an order. You
|
||||||
cannot be guaranteed to actually get the given size. (Added in 7.10)
|
cannot be guaranteed to actually get the given size. (Added in 7.10)
|
||||||
|
.IP CURLOPT_PORT
|
||||||
|
Pass a long specifying what remote port number to connect to, instead of the
|
||||||
|
one specified in the URL or the default port for the used protocol.
|
||||||
|
.IP CURLOPT_TCP_NODELAY
|
||||||
|
Pass a long specifying whether the TCP_NODELAY option should be set or
|
||||||
|
cleared (1 = set, 0 = clear). The option is cleared by default. This
|
||||||
|
will have no effect after the connection has been established.
|
||||||
|
|
||||||
|
Setting this option will disable TCP's Nagle algorithm. The purpose of
|
||||||
|
this algorithm is to try to minimize the number of small packets on
|
||||||
|
the network (where "small packets" means TCP segments less than the
|
||||||
|
Maximum Segment Size (MSS) for the network).
|
||||||
|
|
||||||
|
Maximizing the amount of data sent per TCP segment is good because it
|
||||||
|
amortizes the overhead of the send. However, in some cases (most
|
||||||
|
notably telnet or rlogin) small segments may need to be sent
|
||||||
|
without delay. This is less efficient than sending larger amounts of
|
||||||
|
data at a time, and can contribute to congestion on the network if
|
||||||
|
overdone.
|
||||||
.SH NAMES and PASSWORDS OPTIONS (Authentication)
|
.SH NAMES and PASSWORDS OPTIONS (Authentication)
|
||||||
.IP CURLOPT_NETRC
|
.IP CURLOPT_NETRC
|
||||||
This parameter controls the preference of libcurl between using user names and
|
This parameter controls the preference of libcurl between using user names and
|
||||||
@@ -319,8 +349,8 @@ user.
|
|||||||
.IP CURLOPT_NETRC_FILE
|
.IP CURLOPT_NETRC_FILE
|
||||||
Pass a char * as parameter, pointing to a zero terminated string containing
|
Pass a char * as parameter, pointing to a zero terminated string containing
|
||||||
the full path name to the file you want libcurl to use as .netrc file. If this
|
the full path name to the file you want libcurl to use as .netrc file. If this
|
||||||
option is omitted, and CURLOPT_NETRC is set, libcurl will attempt to find the
|
option is omitted, and \fICURLOPT_NETRC\fP is set, libcurl will attempt to
|
||||||
a .netrc file in the current user's home directory. (Added in 7.10.9)
|
find the a .netrc file in the current user's home directory. (Added in 7.10.9)
|
||||||
.IP CURLOPT_USERPWD
|
.IP CURLOPT_USERPWD
|
||||||
Pass a char * as parameter, which should be [user name]:[password] to use for
|
Pass a char * as parameter, which should be [user name]:[password] to use for
|
||||||
the connection. Use \fICURLOPT_HTTPAUTH\fP to decide authentication method.
|
the connection. Use \fICURLOPT_HTTPAUTH\fP to decide authentication method.
|
||||||
@@ -356,7 +386,7 @@ regular old-fashioned Basic method.
|
|||||||
.IP CURLAUTH_GSSNEGOTIATE
|
.IP CURLAUTH_GSSNEGOTIATE
|
||||||
HTTP GSS-Negotiate authentication. The GSS-Negotiate (also known as plain
|
HTTP GSS-Negotiate authentication. The GSS-Negotiate (also known as plain
|
||||||
"Negotiate") method was designed by Microsoft and is used in their web
|
"Negotiate") method was designed by Microsoft and is used in their web
|
||||||
aplications. It is primarily meant as a support for Kerberos5 authentication
|
applications. It is primarily meant as a support for Kerberos5 authentication
|
||||||
but may be also used along with another authentication methods. For more
|
but may be also used along with another authentication methods. For more
|
||||||
information see IETF draft draft-brezak-spnego-http-04.txt.
|
information see IETF draft draft-brezak-spnego-http-04.txt.
|
||||||
|
|
||||||
@@ -365,17 +395,17 @@ this to work.
|
|||||||
.IP CURLAUTH_NTLM
|
.IP CURLAUTH_NTLM
|
||||||
HTTP NTLM authentication. A proprietary protocol invented and used by
|
HTTP NTLM authentication. A proprietary protocol invented and used by
|
||||||
Microsoft. It uses a challenge-response and hash concept similar to Digest, to
|
Microsoft. It uses a challenge-response and hash concept similar to Digest, to
|
||||||
prevent the password from being evesdropped.
|
prevent the password from being eavesdropped.
|
||||||
|
|
||||||
\fBNOTE\fP that you need to build libcurl with SSL support for this option to
|
\fBNOTE\fP that you need to build libcurl with SSL support for this option to
|
||||||
work.
|
work.
|
||||||
.IP CURLAUTH_ANY
|
.IP CURLAUTH_ANY
|
||||||
This is a convenience macro that sets all bits and thus makes libcurl pick any
|
This is a convenience macro that sets all bits and thus makes libcurl pick any
|
||||||
it finds suitable. libcurl will automaticly select the one it finds most
|
it finds suitable. libcurl will automatically select the one it finds most
|
||||||
secure.
|
secure.
|
||||||
.IP CURLAUTH_ANYSAFE
|
.IP CURLAUTH_ANYSAFE
|
||||||
This is a convenience macro that sets all bits except Basic and thus makes
|
This is a convenience macro that sets all bits except Basic and thus makes
|
||||||
libcurl pick any it finds suitable. libcurl will automaticly select the one it
|
libcurl pick any it finds suitable. libcurl will automatically select the one it
|
||||||
finds most secure.
|
finds most secure.
|
||||||
.RE
|
.RE
|
||||||
.IP CURLOPT_PROXYAUTH
|
.IP CURLOPT_PROXYAUTH
|
||||||
@@ -389,6 +419,10 @@ round-trip. Set the actual name and password with the
|
|||||||
together the bits listed above for the \fICURLOPT_HTTPAUTH\fP option. As of
|
together the bits listed above for the \fICURLOPT_HTTPAUTH\fP option. As of
|
||||||
this writing, only Basic and NTLM work. (Added in 7.10.7)
|
this writing, only Basic and NTLM work. (Added in 7.10.7)
|
||||||
.SH HTTP OPTIONS
|
.SH HTTP OPTIONS
|
||||||
|
.IP CURLOPT_AUTOREFERER
|
||||||
|
Pass a non-zero parameter to enable this. When enabled, libcurl will
|
||||||
|
automatically set the Referer: field in requests where it follows a Location:
|
||||||
|
redirect.
|
||||||
.IP CURLOPT_ENCODING
|
.IP CURLOPT_ENCODING
|
||||||
Sets the contents of the Accept-Encoding: header sent in an HTTP
|
Sets the contents of the Accept-Encoding: header sent in an HTTP
|
||||||
request, and enables decoding of a response when a Content-Encoding:
|
request, and enables decoding of a response when a Content-Encoding:
|
||||||
@@ -404,7 +438,7 @@ encoding done by the server is ignored. See the special file
|
|||||||
lib/README.encoding for details.
|
lib/README.encoding for details.
|
||||||
.IP CURLOPT_FOLLOWLOCATION
|
.IP CURLOPT_FOLLOWLOCATION
|
||||||
A non-zero parameter tells the library to follow any Location: header that the
|
A non-zero parameter tells the library to follow any Location: header that the
|
||||||
server sends as part of a HTTP header.
|
server sends as part of an HTTP header.
|
||||||
|
|
||||||
\fBNOTE:\fP this means that the library will re-send the same request on the
|
\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
|
new location and follow new Location: headers all the way until no more such
|
||||||
@@ -429,7 +463,7 @@ one by HTML forms. See the \fICURLOPT_POSTFIELDS\fP option for how to specify
|
|||||||
the data to post and \fICURLOPT_POSTFIELDSIZE\fP in how to set the data
|
the data to post and \fICURLOPT_POSTFIELDSIZE\fP in how to set the data
|
||||||
size. Using the \fICURLOPT_POSTFIELDS\fP option implies this option.
|
size. Using the \fICURLOPT_POSTFIELDS\fP option implies this option.
|
||||||
.IP CURLOPT_POSTFIELDS
|
.IP CURLOPT_POSTFIELDS
|
||||||
Pass a char * as parameter, which should be the full data to post in a HTTP
|
Pass a char * as parameter, which should be the full data to post in an HTTP
|
||||||
post operation. You need to make sure that the data is formatted the way you
|
post operation. You need to make sure that the data is formatted the way you
|
||||||
want the server to receive it. libcurl will not convert or encode it for
|
want the server to receive it. libcurl will not convert or encode it for
|
||||||
you. Most web servers will assume this data to be url-encoded. Take note.
|
you. Most web servers will assume this data to be url-encoded. Take note.
|
||||||
@@ -446,6 +480,11 @@ If you want to post data to the server without letting libcurl do a strlen()
|
|||||||
to measure the data size, this option must be used. When this option is used
|
to measure the data size, this option must be used. When this option is used
|
||||||
you can post fully binary data, which otherwise is likely to fail. If this
|
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.
|
size is set to zero, the library will use strlen() to get the size.
|
||||||
|
.IP CURLOPT_POSTFIELDSIZE_LARGE
|
||||||
|
Pass a curl_off_t as parameter. Use this to set the size of the
|
||||||
|
\fICURLOPT_POSTFIELDS\fP data to prevent libcurl from doing strlen() on the
|
||||||
|
data to figure out the size. This is the large file version of the
|
||||||
|
\fICURLOPT_POSTFIELDSIZE\fP option. (Added in 7.11.1)
|
||||||
.IP CURLOPT_HTTPPOST
|
.IP CURLOPT_HTTPPOST
|
||||||
Tells libcurl you want a multipart/formdata HTTP POST to be made and you
|
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
|
instruct what data to pass on to the server. Pass a pointer to a linked list
|
||||||
@@ -506,9 +545,10 @@ set a cookie in the http request. The format of the string should be
|
|||||||
NAME=CONTENTS, where NAME is the cookie name and CONTENTS is what the cookie
|
NAME=CONTENTS, where NAME is the cookie name and CONTENTS is what the cookie
|
||||||
should contain.
|
should contain.
|
||||||
|
|
||||||
If you need to set mulitple cookies, you need to set them all using a single
|
If you need to set multiple cookies, you need to set them all using a single
|
||||||
option and thus you need to concat them all in one single string. Set multiple
|
option and thus you need to concatenate them all in one single string. Set
|
||||||
cookies in one string like this: "name1=content1; name2=content2;" etc.
|
multiple cookies in one string like this: "name1=content1; name2=content2;"
|
||||||
|
etc.
|
||||||
|
|
||||||
Using this option multiple times will only make the latest string override the
|
Using this option multiple times will only make the latest string override the
|
||||||
previously ones.
|
previously ones.
|
||||||
@@ -530,18 +570,17 @@ cookies for this session, so if you for example follow a location it will make
|
|||||||
matching cookies get sent accordingly.
|
matching cookies get sent accordingly.
|
||||||
|
|
||||||
\fBNOTE:\fP If the cookie jar file can't be created or written to (when the
|
\fBNOTE:\fP If the cookie jar file can't be created or written to (when the
|
||||||
curl_easy_cleanup() is called), libcurl will not and cannot report an error
|
\fIcurl_easy_cleanup(3)\fP is called), libcurl will not and cannot report an
|
||||||
for this. Using \fICURLOPT_VERBOSE\fP or \fICURLOPT_DEBUGFUNCTION\fP will get
|
error for this. Using \fICURLOPT_VERBOSE\fP or \fICURLOPT_DEBUGFUNCTION\fP
|
||||||
a warning to display, but that is the only visible feedback you get about this
|
will get a warning to display, but that is the only visible feedback you get
|
||||||
possibly lethal situation.
|
about this possibly lethal situation.
|
||||||
.IP CURLOPT_TIMECONDITION
|
.IP CURLOPT_COOKIESESSION
|
||||||
Pass a long as parameter. This defines how the \fICURLOPT_TIMEVALUE\fP time
|
Pass a long set to non-zero to mark this as a new cookie "session". It will
|
||||||
value is treated. You can set this parameter to \fICURL_TIMECOND_IFMODSINCE\fP
|
force libcurl to ignore all cookies it is about to load that are "session
|
||||||
or \fICURL_TIMECOND_IFUNMODSINCE\fP. This is a HTTP-only feature.
|
cookies" from the previous session. By default, libcurl always stores and
|
||||||
.IP CURLOPT_TIMEVALUE
|
loads all cookies, independent if they are session cookies are not. Session
|
||||||
Pass a long as parameter. This should be the time in seconds since 1 jan 1970,
|
cookies are cookies without expiry date and they are meant to be alive and
|
||||||
and the time will be used in a condition as specified with
|
existing for this "session" only.
|
||||||
\fICURLOPT_TIMECONDITION\fP.
|
|
||||||
.IP CURLOPT_HTTPGET
|
.IP CURLOPT_HTTPGET
|
||||||
Pass a long. If the long is non-zero, this forces the HTTP request to get back
|
Pass a long. If the long is non-zero, this forces the HTTP request to get back
|
||||||
to GET. Only really usable if POST, PUT or a custom request have been used
|
to GET. Only really usable if POST, PUT or a custom request have been used
|
||||||
@@ -600,7 +639,7 @@ only files in their response to NLST; they might not include subdirectories
|
|||||||
and symbolic links.
|
and symbolic links.
|
||||||
.IP CURLOPT_FTPAPPEND
|
.IP CURLOPT_FTPAPPEND
|
||||||
A non-zero parameter tells the library to append to the remote file instead of
|
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.
|
overwrite it. This is only useful when uploading to an ftp site.
|
||||||
.IP CURLOPT_FTP_USE_EPRT
|
.IP CURLOPT_FTP_USE_EPRT
|
||||||
Pass a long. If the value is non-zero, it tells curl to use the EPRT (and
|
Pass a long. If the value is non-zero, it tells curl to use the EPRT (and
|
||||||
LPRT) command when doing active FTP downloads (which is enabled by
|
LPRT) command when doing active FTP downloads (which is enabled by
|
||||||
@@ -624,6 +663,19 @@ curl is waiting for a response, this value overrides \fICURLOPT_TIMEOUT\fP. It
|
|||||||
is recommended that if used in conjunction with \fICURLOPT_TIMEOUT\fP, you set
|
is recommended that if used in conjunction with \fICURLOPT_TIMEOUT\fP, you set
|
||||||
\fICURLOPT_FTP_RESPONSE_TIMEOUT\fP to a value smaller than
|
\fICURLOPT_FTP_RESPONSE_TIMEOUT\fP to a value smaller than
|
||||||
\fICURLOPT_TIMEOUT\fP. (Added in 7.10.8)
|
\fICURLOPT_TIMEOUT\fP. (Added in 7.10.8)
|
||||||
|
.IP CURLOPT_FTP_SSL
|
||||||
|
Pass a long using one of the values from below, to make libcurl use your
|
||||||
|
desired level of SSL for the ftp transfer. (Added in 7.11.0)
|
||||||
|
.RS
|
||||||
|
.IP CURLFTPSSL_NONE
|
||||||
|
Don't attempt to use SSL.
|
||||||
|
.IP CURLFTPSSL_TRY
|
||||||
|
Try using SSL, proceed as normal otherwise.
|
||||||
|
.IP CURLFTPSSL_CONTROL
|
||||||
|
Require SSL for the control connection or fail with \fICURLE_FTP_SSL_FAILED\fP.
|
||||||
|
.IP CURLFTPSSL_ALL
|
||||||
|
Require SSL for all communication or fail with \fICURLE_FTP_SSL_FAILED\fP.
|
||||||
|
.RE
|
||||||
.SH PROTOCOL OPTIONS
|
.SH PROTOCOL OPTIONS
|
||||||
.IP CURLOPT_TRANSFERTEXT
|
.IP CURLOPT_TRANSFERTEXT
|
||||||
A non-zero parameter tells the library to use ASCII mode for ftp transfers,
|
A non-zero parameter tells the library to use ASCII mode for ftp transfers,
|
||||||
@@ -645,12 +697,11 @@ techniques).
|
|||||||
Pass a long as parameter. It contains the offset in number of bytes that you
|
Pass a long as parameter. It contains the offset in number of bytes that you
|
||||||
want the transfer to start from.
|
want the transfer to start from.
|
||||||
.IP CURLOPT_RESUME_FROM_LARGE
|
.IP CURLOPT_RESUME_FROM_LARGE
|
||||||
Pass an off_t as parameter. It contains the offset in number of bytes that you
|
Pass an curl_off_t as parameter. It contains the offset in number of bytes
|
||||||
want the transfer to start from. This does not yet support large files on
|
that you want the transfer to start from. (Added in 7.11.0)
|
||||||
Windows. (Added in 7.11.0)
|
|
||||||
.IP CURLOPT_CUSTOMREQUEST
|
.IP CURLOPT_CUSTOMREQUEST
|
||||||
Pass a pointer to a zero terminated string as parameter. It will be user
|
Pass a pointer to a zero terminated string as parameter. It will be user
|
||||||
instead of GET or HEAD when doing a HTTP request, or instead of LIST or NLST
|
instead of GET or HEAD when doing an HTTP request, or instead of LIST or NLST
|
||||||
when doing an ftp directory listing. This is useful for doing DELETE or other
|
when doing an ftp directory listing. This is useful for doing DELETE or other
|
||||||
more or less obscure HTTP requests. Don't do this at will, make sure your
|
more or less obscure HTTP requests. Don't do this at will, make sure your
|
||||||
server supports the command first.
|
server supports the command first.
|
||||||
@@ -679,8 +730,7 @@ as a long. See also \fICURLOPT_INFILESIZE_LARGE\fP.
|
|||||||
.IP CURLOPT_INFILESIZE_LARGE
|
.IP CURLOPT_INFILESIZE_LARGE
|
||||||
When uploading a file to a remote site, this option should be used to tell
|
When uploading a file to a remote site, this option should be used to tell
|
||||||
libcurl what the expected size of the infile is. This value should be passed
|
libcurl what the expected size of the infile is. This value should be passed
|
||||||
as an off_t. This does not yet support large files on Windows. (Added in
|
as a curl_off_t. (Added in 7.11.0)
|
||||||
7.11.0)
|
|
||||||
.IP CURLOPT_UPLOAD
|
.IP CURLOPT_UPLOAD
|
||||||
A non-zero parameter tells the library to prepare for an upload. The
|
A non-zero parameter tells the library to prepare for an upload. The
|
||||||
\fICURLOPT_READDATA\fP and \fICURLOPT_INFILESIZE_LARGE\fP are also interesting
|
\fICURLOPT_READDATA\fP and \fICURLOPT_INFILESIZE_LARGE\fP are also interesting
|
||||||
@@ -694,14 +744,26 @@ NOTE: The file size is not always known prior to download, and for such files
|
|||||||
this option has no effect even if the file transfer ends up being larger than
|
this option has no effect even if the file transfer ends up being larger than
|
||||||
this given limit. This concerns both FTP and HTTP transfers.
|
this given limit. This concerns both FTP and HTTP transfers.
|
||||||
.IP CURLOPT_MAXFILESIZE_LARGE
|
.IP CURLOPT_MAXFILESIZE_LARGE
|
||||||
Pass an off_t as parameter. This allows you to specify the maximum size (in
|
Pass a curl_off_t as parameter. This allows you to specify the maximum size
|
||||||
bytes) of a file to download. If the file requested is larger than this value,
|
(in bytes) of a file to download. If the file requested is larger than this
|
||||||
the transfer will not start and CURLE_FILESIZE_EXCEEDED will be returned.
|
value, the transfer will not start and \fICURLE_FILESIZE_EXCEEDED\fP will be
|
||||||
This does not yet support large files on Windows. (Added in 7.11.0)
|
returned. (Added in 7.11.0)
|
||||||
|
|
||||||
NOTE: The file size is not always known prior to download, and for such files
|
NOTE: The file size is not always known prior to download, and for such files
|
||||||
this option has no effect even if the file transfer ends up being larger than
|
this option has no effect even if the file transfer ends up being larger than
|
||||||
this given limit. This concerns both FTP and HTTP transfers.
|
this given limit. This concerns both FTP and HTTP transfers.
|
||||||
|
.IP CURLOPT_TIMECONDITION
|
||||||
|
Pass a long as parameter. This defines how the \fICURLOPT_TIMEVALUE\fP time
|
||||||
|
value is treated. You can set this parameter to \fICURL_TIMECOND_IFMODSINCE\fP
|
||||||
|
or \fICURL_TIMECOND_IFUNMODSINCE\fP. This feature applies to HTTP and FTP.
|
||||||
|
|
||||||
|
NOTE: The last modification time of a file is not always known and in such
|
||||||
|
instances this feature will have no effect even if the given time condition
|
||||||
|
would have not been met.
|
||||||
|
.IP CURLOPT_TIMEVALUE
|
||||||
|
Pass a long as parameter. This should be the time in seconds since 1 jan 1970,
|
||||||
|
and the time will be used in a condition as specified with
|
||||||
|
\fICURLOPT_TIMECONDITION\fP.
|
||||||
.SH CONNECTION OPTIONS
|
.SH CONNECTION OPTIONS
|
||||||
.IP CURLOPT_TIMEOUT
|
.IP CURLOPT_TIMEOUT
|
||||||
Pass a long as parameter containing the maximum time in seconds that you allow
|
Pass a long as parameter containing the maximum time in seconds that you allow
|
||||||
@@ -806,19 +868,19 @@ the format of your private key. Supported formats are "PEM", "DER" and "ENG".
|
|||||||
|
|
||||||
\fBNOTE:\fPThe format "ENG" enables you to load the private key from a crypto
|
\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
|
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.
|
the engine. You have to set the crypto engine with \fICURLOPT_SSLENGINE\fP.
|
||||||
.IP CURLOPT_SSLKEYPASSWD
|
.IP CURLOPT_SSLKEYPASSWD
|
||||||
Pass a pointer to a zero terminated string as parameter. It will be used as
|
Pass a pointer to a zero terminated string as parameter. It will be used as
|
||||||
the password required to use the \fICURLOPT_SSLKEY\fP private key.
|
the password required to use the \fICURLOPT_SSLKEY\fP private key.
|
||||||
.IP CURLOPT_SSL_ENGINE
|
.IP CURLOPT_SSLENGINE
|
||||||
Pass a pointer to a zero terminated string as parameter. It will be used as
|
Pass a pointer to a zero terminated string as parameter. It will be used as
|
||||||
the identifier for the crypto engine you want to use for your private
|
the identifier for the crypto engine you want to use for your private
|
||||||
key.
|
key.
|
||||||
|
|
||||||
\fBNOTE:\fPIf the crypto device cannot be loaded,
|
\fBNOTE:\fPIf the crypto device cannot be loaded,
|
||||||
\fICURLE_SSL_ENGINE_NOTFOUND\fP is returned.
|
\fICURLE_SSL_ENGINE_NOTFOUND\fP is returned.
|
||||||
.IP CURLOPT_SSL_ENGINEDEFAULT
|
.IP CURLOPT_SSLENGINE_DEFAULT
|
||||||
Sets the actual crypto engine as the default for (asymetric) crypto
|
Sets the actual crypto engine as the default for (asymmetric) crypto
|
||||||
operations.
|
operations.
|
||||||
|
|
||||||
\fBNOTE:\fPIf the crypto device cannot be set,
|
\fBNOTE:\fPIf the crypto device cannot be set,
|
||||||
@@ -859,8 +921,8 @@ in the SSL handshake, set 1 to check existence, 2 to ensure that it matches
|
|||||||
the provided hostname. This is by default set to 2. (default changed in 7.10)
|
the provided hostname. This is by default set to 2. (default changed in 7.10)
|
||||||
.IP CURLOPT_SSL_CIPHER_LIST
|
.IP CURLOPT_SSL_CIPHER_LIST
|
||||||
Pass a char *, pointing to a zero terminated string holding the list of
|
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
|
ciphers to use for the SSL connection. The list must be syntactically correct,
|
||||||
consists of one or more cipher strings separated by colons. Commas or spaces
|
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
|
are also acceptable separators but colons are normally used, \!, \- and \+ can
|
||||||
be used as operators. Valid examples of cipher lists include 'RC4-SHA',
|
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
|
\'SHA1+DES\', 'TLSv1' and 'DEFAULT'. The default list is normally set when you
|
||||||
@@ -878,11 +940,24 @@ support only works for FTP.
|
|||||||
.IP CURLOPT_PRIVATE
|
.IP CURLOPT_PRIVATE
|
||||||
Pass a char * as parameter, pointing to data that should be associated with
|
Pass a char * as parameter, pointing to data that should be associated with
|
||||||
this curl handle. The pointer can subsequently be retrieved using
|
this curl handle. The pointer can subsequently be retrieved using
|
||||||
\fIcurl_easy_getinfo\fP with the CURLINFO_PRIVATE option. libcurl itself does
|
\fIcurl_easy_getinfo(3)\fP with the CURLINFO_PRIVATE option. libcurl itself
|
||||||
nothing with this data. (Added in 7.10.3)
|
does nothing with this data. (Added in 7.10.3)
|
||||||
|
.IP CURLOPT_SHARE
|
||||||
|
Pass a share handle as a parameter. The share handle must have been created by
|
||||||
|
a previous call to \fIcurl_share_init(3)\fP. Setting this option, will make
|
||||||
|
this curl handle use the data from the shared handle instead of keeping the
|
||||||
|
data to itself. This enables several curl handles to share data. If the curl
|
||||||
|
handles are used simultaneously, you \fBMUST\fP use the locking methods in the
|
||||||
|
share handle. See \fIcurl_share_setopt(3)\fP for details.
|
||||||
|
.SH TELNET OPTIONS
|
||||||
|
.IP CURLOPT_TELNETOPTIONS
|
||||||
|
Provide a pointer to a curl_slist with variables to pass to the telnet
|
||||||
|
negotiations. The variables should be in the format <option=value>. libcurl
|
||||||
|
supports the options 'TTYPE', 'XDISPLOC' and 'NEW_ENV'. See the TELNET
|
||||||
|
standard for details.
|
||||||
.SH RETURN VALUE
|
.SH RETURN VALUE
|
||||||
CURLE_OK (zero) means that the option was set properly, non-zero means an
|
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
|
error occurred as \fI<curl/curl.h>\fP defines. See the \fIlibcurl-errors(3)\fP
|
||||||
man page for the full list with descriptions.
|
man page for the full list with descriptions.
|
||||||
.SH "SEE ALSO"
|
.SH "SEE ALSO"
|
||||||
.BR curl_easy_init "(3), " curl_easy_cleanup "(3), "
|
.BR curl_easy_init "(3), " curl_easy_cleanup "(3), "
|
||||||
|
@@ -23,4 +23,4 @@ You must curl_free() the returned string when you're done with it.
|
|||||||
.SH RETURN VALUE
|
.SH RETURN VALUE
|
||||||
A pointer to a zero terminated string or NULL if it failed.
|
A pointer to a zero terminated string or NULL if it failed.
|
||||||
.SH "SEE ALSO"
|
.SH "SEE ALSO"
|
||||||
.BR curl_unescape(), curl_free(), RFC 2396
|
.BR curl_unescape(3), curl_free(3), RFC 2396
|
||||||
|
@@ -8,12 +8,12 @@ curl_formadd - add a section to a multipart/formdata HTTP POST
|
|||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
.B #include <curl/curl.h>
|
.B #include <curl/curl.h>
|
||||||
.sp
|
.sp
|
||||||
.BI "CURLFORMcode curl_formadd(struct HttpPost ** " firstitem,
|
.BI "CURLFORMcode curl_formadd(struct curl_httppost ** " firstitem,
|
||||||
.BI "struct HttpPost ** " lastitem, " ...);"
|
.BI "struct curl_httppost ** " lastitem, " ...);"
|
||||||
.ad
|
.ad
|
||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
||||||
curl_formadd() is used to append sections when building a multipart/formdata
|
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
|
HTTP POST (sometimes referred 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
|
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.
|
the \fIfirstitem\fP pointer as parameter to \fBCURLOPT_HTTPPOST\fP.
|
||||||
\fIlastitem\fP is set after each call and on repeated invokes it should be
|
\fIlastitem\fP is set after each call and on repeated invokes it should be
|
||||||
@@ -81,7 +81,7 @@ internally chosen one.
|
|||||||
|
|
||||||
.B CURLFORM_FILENAME
|
.B CURLFORM_FILENAME
|
||||||
followed by a pointer to a string to a name, will make libcurl use the given
|
followed by a pointer to a string to a name, will make libcurl use the given
|
||||||
name in the file upload part, intead of the actual file name given to
|
name in the file upload part, instead of the actual file name given to
|
||||||
\fICURLFORM_FILE\fP.
|
\fICURLFORM_FILE\fP.
|
||||||
|
|
||||||
.B BCURLFORM_BUFFER
|
.B BCURLFORM_BUFFER
|
||||||
@@ -92,8 +92,8 @@ name field in the content header.
|
|||||||
.B CURLFORM_BUFFERPTR
|
.B CURLFORM_BUFFERPTR
|
||||||
followed by a pointer to a data area, tells libcurl the address of the buffer
|
followed by a pointer to a data area, tells libcurl the address of the buffer
|
||||||
containing data to upload (as indicated with \fICURLFORM_BUFFER\fP). The
|
containing data to upload (as indicated with \fICURLFORM_BUFFER\fP). The
|
||||||
buffer containing this data must not be freed until after curl_easy_cleanup is
|
buffer containing this data must not be freed until after
|
||||||
called.
|
\fIcurl_easy_cleanup(3)\fP is called.
|
||||||
|
|
||||||
.B CURLFORM_BUFFERLENGTH
|
.B CURLFORM_BUFFERLENGTH
|
||||||
followed by a long with the size of the \fICURLFORM_BUFFERPTR\fP data area,
|
followed by a long with the size of the \fICURLFORM_BUFFERPTR\fP data area,
|
||||||
@@ -114,9 +114,9 @@ of headers to those libcurl automatically generates. The list must exist while
|
|||||||
the POST occurs, if you free it before the post completes you may experience
|
the POST occurs, if you free it before the post completes you may experience
|
||||||
problems.
|
problems.
|
||||||
|
|
||||||
When you've passed the HttpPost pointer to \fIcurl_easy_setopt\fP (using the
|
When you've passed the HttpPost pointer to \fIcurl_easy_setopt(3)\fP (using
|
||||||
\fICURLOPT_HTTPPOST\fP option), you must not free the list until after you've
|
the \fICURLOPT_HTTPPOST\fP option), you must not free the list until after
|
||||||
called \fIcurl_easy_cleanup\fP for the curl handle.
|
you've called \fIcurl_easy_cleanup(3)\fP for the curl handle.
|
||||||
|
|
||||||
See example below.
|
See example below.
|
||||||
.SH RETURN VALUE
|
.SH RETURN VALUE
|
||||||
@@ -207,6 +207,3 @@ defines.
|
|||||||
.BR curl_easy_setopt "(3), "
|
.BR curl_easy_setopt "(3), "
|
||||||
.BR curl_formparse "(3) [deprecated], "
|
.BR curl_formparse "(3) [deprecated], "
|
||||||
.BR curl_formfree "(3)"
|
.BR curl_formfree "(3)"
|
||||||
.SH BUGS
|
|
||||||
Surely there are some, you tell me!
|
|
||||||
|
|
||||||
|
@@ -8,20 +8,13 @@ curl_formfree - free a previously build multipart/formdata HTTP POST chain
|
|||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
.B #include <curl/curl.h>
|
.B #include <curl/curl.h>
|
||||||
.sp
|
.sp
|
||||||
.BI "void curl_formfree(struct HttpPost *" form);
|
.BI "void curl_formfree(struct curl_httppost *" form);
|
||||||
.ad
|
.ad
|
||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
||||||
curl_formfree() is used to clean up data previously built/appended with
|
curl_formfree() is used to clean up data previously built/appended with
|
||||||
curl_formadd()/curl_formparse(). This must be called when the data has
|
\fIcurl_formadd(3)\fP. This must be called when the data has been used, which
|
||||||
been used, which typically means after the curl_easy_perform() has
|
typically means after the \fIcurl_easy_perform(3)\fP has been called.
|
||||||
been called.
|
|
||||||
.SH RETURN VALUE
|
.SH RETURN VALUE
|
||||||
None
|
None
|
||||||
.SH "SEE ALSO"
|
.SH "SEE ALSO"
|
||||||
.BR curl_formparse "(3) [deprecated], "
|
|
||||||
.BR curl_formadd "(3) "
|
.BR curl_formadd "(3) "
|
||||||
.SH BUGS
|
|
||||||
libcurl 7.7.1 and earlier versions does not allow a NULL pointer to be used as
|
|
||||||
argument.
|
|
||||||
|
|
||||||
|
|
||||||
|
@@ -11,7 +11,8 @@ curl_free - reclaim memory that has been obtained through a libcurl call
|
|||||||
.BI "void curl_free( char *" ptr " );"
|
.BI "void curl_free( char *" ptr " );"
|
||||||
.ad
|
.ad
|
||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
||||||
curl_free reclaims memory that has been obtained through a libcurl call.
|
curl_free reclaims memory that has been obtained through a libcurl call. Use
|
||||||
Use curl_free() instead of free() to avoid anomalies that can result from differences in memory management between your application and libcurl.
|
curl_free() instead of free() to avoid anomalies that can result from
|
||||||
|
differences in memory management between your application and libcurl.
|
||||||
.SH "SEE ALSO"
|
.SH "SEE ALSO"
|
||||||
.I curl_unescape()
|
.I curl_unescape(3)
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user