Compare commits
1630 Commits
curl-7_15_
...
curl-7_16_
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b122959c8b | ||
|
|
84c5e846b3 | ||
|
|
47f044265e | ||
|
|
d46d995766 | ||
|
|
1a0cc60741 | ||
|
|
7cbbd1b56b | ||
|
|
5daa6b9367 | ||
|
|
a7aca2e8af | ||
|
|
d8d3dc9302 | ||
|
|
5be7b543d8 | ||
|
|
910ee13b20 | ||
|
|
35935d71d2 | ||
|
|
de17f4436e | ||
|
|
be5ade5c7a | ||
|
|
0e05a6329a | ||
|
|
c518c52aba | ||
|
|
e4c28abdc1 | ||
|
|
a11374d994 | ||
|
|
d9e89e170f | ||
|
|
47594be5c0 | ||
|
|
0d635a1119 | ||
|
|
e9ffa9a3b8 | ||
|
|
248a5381d4 | ||
|
|
c1ab3e2d59 | ||
|
|
c895dc8a19 | ||
|
|
a0a79ce853 | ||
|
|
70f9a13ecb | ||
|
|
c321b9f704 | ||
|
|
7e74349b86 | ||
|
|
fd016fb3ee | ||
|
|
09dd2d3856 | ||
|
|
5625e5d5b8 | ||
|
|
8a529bd987 | ||
|
|
8fe9376d54 | ||
|
|
a1f72943e9 | ||
|
|
0969a96732 | ||
|
|
ec8019b2a8 | ||
|
|
27d2d78059 | ||
|
|
7d48d851a2 | ||
|
|
6a2cecf153 | ||
|
|
990b15e402 | ||
|
|
584f3639e3 | ||
|
|
2886ce96b0 | ||
|
|
3344142b87 | ||
|
|
f1b4f5e2ae | ||
|
|
bcf0af9ddb | ||
|
|
70550a0572 | ||
|
|
d7088d1032 | ||
|
|
d07a874899 | ||
|
|
c420113795 | ||
|
|
5c850b825b | ||
|
|
7bbad0b534 | ||
|
|
305e03905f | ||
|
|
161be66c89 | ||
|
|
4095c9de37 | ||
|
|
20d33ad7e5 | ||
|
|
b8c12fe658 | ||
|
|
e4d4ee8db5 | ||
|
|
8a7d58378b | ||
|
|
bdbaedc452 | ||
|
|
0839621f47 | ||
|
|
bf2c1e099c | ||
|
|
6c6e4710b5 | ||
|
|
5e7164f87a | ||
|
|
ef10eaeb29 | ||
|
|
fce4dcccd8 | ||
|
|
f2beee209b | ||
|
|
9d8b22d3de | ||
|
|
5796c7b132 | ||
|
|
dc2ea33e32 | ||
|
|
c1f117700a | ||
|
|
7ea90c46eb | ||
|
|
4d9e24d1e4 | ||
|
|
1f236ba108 | ||
|
|
d27813c2dd | ||
|
|
453e9b0dce | ||
|
|
b8626c3df8 | ||
|
|
f8d78d57a7 | ||
|
|
371a25eee9 | ||
|
|
e535a71c71 | ||
|
|
b9e5fecf5f | ||
|
|
3af08472ad | ||
|
|
fdc1b61507 | ||
|
|
7fd154f094 | ||
|
|
a209c32bf3 | ||
|
|
75db459f0a | ||
|
|
74e54c5a49 | ||
|
|
6fc151577e | ||
|
|
3dcc7202d5 | ||
|
|
40981286ea | ||
|
|
f55a1c3a6c | ||
|
|
c5586a65c2 | ||
|
|
ffb11ad5c6 | ||
|
|
fbb1e49215 | ||
|
|
c26320d94f | ||
|
|
f6e892b1b6 | ||
|
|
59302d4ba0 | ||
|
|
c563a53c16 | ||
|
|
7763bb9172 | ||
|
|
e37a49086e | ||
|
|
a1e5c621c0 | ||
|
|
f776c1d2eb | ||
|
|
3d5a8515a6 | ||
|
|
42a7905205 | ||
|
|
bfa0f8c6c2 | ||
|
|
869d192ffc | ||
|
|
60bc103a78 | ||
|
|
8a0a7ce3a8 | ||
|
|
31b1e988f4 | ||
|
|
25c064c888 | ||
|
|
884171aecf | ||
|
|
45b2577974 | ||
|
|
d58c7a8bdd | ||
|
|
eed47311f8 | ||
|
|
59eaae42b8 | ||
|
|
59c620bfa5 | ||
|
|
4294cac701 | ||
|
|
282127fbff | ||
|
|
d49e9fad19 | ||
|
|
fba4cd0e62 | ||
|
|
2166645ce4 | ||
|
|
844f5b6b45 | ||
|
|
424063235b | ||
|
|
8272abef28 | ||
|
|
5fbc93c3eb | ||
|
|
8851df41c5 | ||
|
|
a6f4612154 | ||
|
|
52e5e869e6 | ||
|
|
12ef1035bb | ||
|
|
6c56b5301f | ||
|
|
07b6625573 | ||
|
|
fa0780bb91 | ||
|
|
f08ac86834 | ||
|
|
d6eca89229 | ||
|
|
2bd1d7e996 | ||
|
|
3b355421ec | ||
|
|
0dd1219668 | ||
|
|
b7131009fb | ||
|
|
3d528e1b15 | ||
|
|
f9a339a225 | ||
|
|
0043e87014 | ||
|
|
0f634a0c89 | ||
|
|
047cd1a533 | ||
|
|
f9eb61e90a | ||
|
|
34afb0b257 | ||
|
|
6bb9bd8b69 | ||
|
|
72175c738f | ||
|
|
2288094b26 | ||
|
|
273b2b230b | ||
|
|
3229a80c9f | ||
|
|
5eba84eed3 | ||
|
|
4fb483012c | ||
|
|
f1a8fd843f | ||
|
|
8920606b8b | ||
|
|
90ce18019c | ||
|
|
fe10cb2ef5 | ||
|
|
842be6c52f | ||
|
|
e4b754f64e | ||
|
|
34ed4642ec | ||
|
|
248f057137 | ||
|
|
2b6a0c0a7c | ||
|
|
072a8b2955 | ||
|
|
0c817b6614 | ||
|
|
e9cbd0c366 | ||
|
|
ff314d7600 | ||
|
|
d052e545af | ||
|
|
da2b75a026 | ||
|
|
0e2d3b7b6c | ||
|
|
46a50aa001 | ||
|
|
605a391178 | ||
|
|
de6f82d094 | ||
|
|
c1f3edbdd1 | ||
|
|
a20a6f67c5 | ||
|
|
75931492c3 | ||
|
|
800b55c702 | ||
|
|
a53411c0dd | ||
|
|
b169aa2992 | ||
|
|
9189ac1141 | ||
|
|
5c7c79bd08 | ||
|
|
8605321d06 | ||
|
|
d314453037 | ||
|
|
9cb69f77f1 | ||
|
|
ee332e0c8e | ||
|
|
0188493d54 | ||
|
|
ae07fd2ba8 | ||
|
|
d76a734043 | ||
|
|
b66def2b4c | ||
|
|
20b9ab49a7 | ||
|
|
c8cd13337e | ||
|
|
40e9e40cb4 | ||
|
|
09c70dec08 | ||
|
|
0dc570862a | ||
|
|
dbaf4f9361 | ||
|
|
433575068c | ||
|
|
40087ce7c0 | ||
|
|
e12d46ac50 | ||
|
|
1e55ed5c7d | ||
|
|
6dd4fe0740 | ||
|
|
3789e2e6ce | ||
|
|
1962ebf8e7 | ||
|
|
7c144d5a7e | ||
|
|
0f0540d00b | ||
|
|
3f29ed6d44 | ||
|
|
1bfa7dfe39 | ||
|
|
85daec253c | ||
|
|
389a15a867 | ||
|
|
74befdfbe0 | ||
|
|
d31feb8ff9 | ||
|
|
4c3568bfd6 | ||
|
|
b4ef5e22e0 | ||
|
|
23786eae32 | ||
|
|
c84f84c70d | ||
|
|
e5f8e5e57a | ||
|
|
53a3abc76b | ||
|
|
bfd6474f6b | ||
|
|
d3b89e114a | ||
|
|
aeddea2b71 | ||
|
|
cef5b14baa | ||
|
|
82d310d0d9 | ||
|
|
4fdb42377b | ||
|
|
be8a5d0aef | ||
|
|
dd433679e6 | ||
|
|
99dcd33f04 | ||
|
|
e817eb6cec | ||
|
|
060f7ca2d2 | ||
|
|
638c715a51 | ||
|
|
af9a63287e | ||
|
|
00f36c5f45 | ||
|
|
e69d82a5fb | ||
|
|
d165da07fe | ||
|
|
15363cd6dc | ||
|
|
b3272fd799 | ||
|
|
fa31335926 | ||
|
|
acc4cf87cd | ||
|
|
7444342675 | ||
|
|
ee1235a7cd | ||
|
|
c514a2a89a | ||
|
|
e2f0580dfe | ||
|
|
d165bed2d6 | ||
|
|
802a5b618e | ||
|
|
1ca763d1d1 | ||
|
|
8b26c93a59 | ||
|
|
b819c72700 | ||
|
|
d2cfb7fd13 | ||
|
|
e37973913d | ||
|
|
8b5295d003 | ||
|
|
fe0afb211e | ||
|
|
141b3d0c2f | ||
|
|
2a6a22a3b0 | ||
|
|
4937281ddc | ||
|
|
8e27ed2fdd | ||
|
|
9bf9617ad6 | ||
|
|
69565afab0 | ||
|
|
39aac63521 | ||
|
|
f19d333ef6 | ||
|
|
3a634a273a | ||
|
|
06d1b029f6 | ||
|
|
45bf417301 | ||
|
|
48029d7e74 | ||
|
|
83e078256c | ||
|
|
2f5e99ca02 | ||
|
|
6014c21bc9 | ||
|
|
8c0b1dc3c5 | ||
|
|
be3c5f0b94 | ||
|
|
e268e8559e | ||
|
|
29bb6f65f1 | ||
|
|
37f07a54bd | ||
|
|
da8c666e4f | ||
|
|
c11681becd | ||
|
|
78a1e5d1a6 | ||
|
|
116f60e063 | ||
|
|
7725853446 | ||
|
|
9993e2121d | ||
|
|
9a70ce4245 | ||
|
|
7ba53a4f41 | ||
|
|
1297c54b26 | ||
|
|
1045b8d382 | ||
|
|
d2bdad5945 | ||
|
|
17e8d60c01 | ||
|
|
ec1b351317 | ||
|
|
75fca27f8e | ||
|
|
f2cd2882a0 | ||
|
|
07d8a14ec0 | ||
|
|
31e598d2f3 | ||
|
|
cbf58d88d0 | ||
|
|
300cbc2e21 | ||
|
|
ec9e399668 | ||
|
|
2691f1efc8 | ||
|
|
d9bf55570b | ||
|
|
b54a8531a9 | ||
|
|
789fd0b74a | ||
|
|
8103915797 | ||
|
|
c461254dea | ||
|
|
3f140a6008 | ||
|
|
a0a47f2767 | ||
|
|
213017e9cf | ||
|
|
69f2f5cb6f | ||
|
|
d46cab4a94 | ||
|
|
4dc453c087 | ||
|
|
a1d5983991 | ||
|
|
4894ce16fc | ||
|
|
aa4435c23b | ||
|
|
dca8f962e0 | ||
|
|
059b57677c | ||
|
|
9896421586 | ||
|
|
6663608d15 | ||
|
|
d21e4eb8ae | ||
|
|
d381dd68cf | ||
|
|
7a97e66fb3 | ||
|
|
d86e6d3ed2 | ||
|
|
f99ca90540 | ||
|
|
e24cb6cb90 | ||
|
|
b05f408348 | ||
|
|
c5e7d839d5 | ||
|
|
e3ade3ccb5 | ||
|
|
71afe05b9f | ||
|
|
5a267c4312 | ||
|
|
fbcf86b83e | ||
|
|
5c3f36b4b4 | ||
|
|
9de4e5ebe4 | ||
|
|
7033a1c072 | ||
|
|
4efa0d9f68 | ||
|
|
e021fe9444 | ||
|
|
23d1041bd8 | ||
|
|
be71ccbce3 | ||
|
|
0db485a448 | ||
|
|
6d05a33ed9 | ||
|
|
569c169559 | ||
|
|
ecbc7f89c0 | ||
|
|
5649b738be | ||
|
|
0f9f6cf180 | ||
|
|
7f70dbcad5 | ||
|
|
28b932fb4e | ||
|
|
a631741141 | ||
|
|
c7d0966201 | ||
|
|
cf491357b6 | ||
|
|
02c17651bf | ||
|
|
890b34d22e | ||
|
|
e89fb10736 | ||
|
|
48e8b52fbb | ||
|
|
61f19c6ca3 | ||
|
|
8c9233f6b2 | ||
|
|
6fcf98f617 | ||
|
|
2f4fe0175b | ||
|
|
9f62ff5df6 | ||
|
|
4e3f3e751e | ||
|
|
04e6568a7e | ||
|
|
7a39b98471 | ||
|
|
4ab91a93e8 | ||
|
|
6647ca6ec5 | ||
|
|
529e01736c | ||
|
|
078fc4186b | ||
|
|
fabbb3fc34 | ||
|
|
1db063e705 | ||
|
|
1fa9ef246a | ||
|
|
e12220cc4c | ||
|
|
77fcad041f | ||
|
|
e213555c98 | ||
|
|
3a813b3c3b | ||
|
|
028a9d6785 | ||
|
|
d0aca8017f | ||
|
|
91386937ff | ||
|
|
0fc51ac5a6 | ||
|
|
bc2183b440 | ||
|
|
01c4fba15c | ||
|
|
9b6474378a | ||
|
|
5446ed4733 | ||
|
|
a50414f594 | ||
|
|
fe7fa8e794 | ||
|
|
6a175b42db | ||
|
|
a7748c2024 | ||
|
|
8f87c15bda | ||
|
|
82f52e5a6f | ||
|
|
67d2dd62f9 | ||
|
|
138b4f27b4 | ||
|
|
c26ec47e90 | ||
|
|
8337a375dd | ||
|
|
8260243be1 | ||
|
|
ef6f24a7ce | ||
|
|
abe90019d3 | ||
|
|
c185cdf2b4 | ||
|
|
f71c8c7d84 | ||
|
|
d32f1390b3 | ||
|
|
68f3c2adca | ||
|
|
2a8e2edf83 | ||
|
|
401598c2fe | ||
|
|
d60848d04b | ||
|
|
d2dd3d7e16 | ||
|
|
1c63ceb317 | ||
|
|
c25283185a | ||
|
|
54db98c220 | ||
|
|
5565f45f5e | ||
|
|
49c4d9c9cd | ||
|
|
c2639e0738 | ||
|
|
e485a23a3e | ||
|
|
d7d5baa0e2 | ||
|
|
e1e55e4d04 | ||
|
|
1eb530d8dc | ||
|
|
bad67830b3 | ||
|
|
db22c83031 | ||
|
|
a4b39c6ab8 | ||
|
|
d10e174fd1 | ||
|
|
e994c6af75 | ||
|
|
ef442d5803 | ||
|
|
8680e010c2 | ||
|
|
4d8dcf7b77 | ||
|
|
abdbd3100f | ||
|
|
ddace02efe | ||
|
|
1f4c8c4f09 | ||
|
|
8162b32bad | ||
|
|
daf527b276 | ||
|
|
ee51c07be6 | ||
|
|
856ba4c6c6 | ||
|
|
b3e23373bd | ||
|
|
e5adab39b1 | ||
|
|
d31153584e | ||
|
|
823d296e12 | ||
|
|
e09450103b | ||
|
|
fbc4407583 | ||
|
|
a79e5d7925 | ||
|
|
82491d5c06 | ||
|
|
b6f889085d | ||
|
|
cdbbb7d900 | ||
|
|
2bf4d9a22c | ||
|
|
f1918aa343 | ||
|
|
56580fc6f8 | ||
|
|
2e6600425e | ||
|
|
cc021fc200 | ||
|
|
e6aed92742 | ||
|
|
02fb4d96d1 | ||
|
|
43e3c5e5fa | ||
|
|
4f496f2f70 | ||
|
|
d681bc7520 | ||
|
|
f21a2b3270 | ||
|
|
5f5a28d20e | ||
|
|
89f9cb4041 | ||
|
|
2b280bcc69 | ||
|
|
1c0224be42 | ||
|
|
dbdb7fa55a | ||
|
|
83a43bea8a | ||
|
|
abb4cdafe9 | ||
|
|
2b7bcf2505 | ||
|
|
5aefdd93cb | ||
|
|
4b27fae069 | ||
|
|
10a13eba72 | ||
|
|
44ac2776ae | ||
|
|
36e3e6ed16 | ||
|
|
5f9cbc4209 | ||
|
|
3239f059b8 | ||
|
|
45bac25d90 | ||
|
|
354c8dcd82 | ||
|
|
b1e4cc370d | ||
|
|
2293474b90 | ||
|
|
9e1aef7183 | ||
|
|
f68323da7d | ||
|
|
a61aafa325 | ||
|
|
33bea767eb | ||
|
|
9ab7cda010 | ||
|
|
6da70628c6 | ||
|
|
3bae748256 | ||
|
|
521c4b303d | ||
|
|
a2effd123a | ||
|
|
7b704e173c | ||
|
|
6045d051d7 | ||
|
|
cfe00ed4ad | ||
|
|
0b4bdcf18f | ||
|
|
8cade952bf | ||
|
|
385e612fa5 | ||
|
|
1886388791 | ||
|
|
32fe5b14ec | ||
|
|
bbdc483671 | ||
|
|
f11d3c329c | ||
|
|
b0d13fa4cb | ||
|
|
0fb5a65a58 | ||
|
|
c8afb02b4c | ||
|
|
869d65337e | ||
|
|
277df1c6b1 | ||
|
|
5ec5b95f54 | ||
|
|
9e61c904ac | ||
|
|
7efb955fd0 | ||
|
|
75899741b9 | ||
|
|
d465199411 | ||
|
|
55123424c8 | ||
|
|
f5e4a78b59 | ||
|
|
7515a75206 | ||
|
|
4750e6f3c5 | ||
|
|
b7aaa4d907 | ||
|
|
e61e09f658 | ||
|
|
058e993acb | ||
|
|
359d500908 | ||
|
|
cb42855445 | ||
|
|
d8ff0336a5 | ||
|
|
0682d25da5 | ||
|
|
d86d14074d | ||
|
|
8500397cf1 | ||
|
|
bd600fbebe | ||
|
|
064bbb999f | ||
|
|
bedc61ac45 | ||
|
|
61a6992559 | ||
|
|
ebee2e323d | ||
|
|
b2f8de571f | ||
|
|
cb4a5f5a2b | ||
|
|
1beb7de7e0 | ||
|
|
89ab5f4380 | ||
|
|
439b84c782 | ||
|
|
0e899d7728 | ||
|
|
1a85fb2bd0 | ||
|
|
8d11767048 | ||
|
|
fcccf9aa0d | ||
|
|
72bd027537 | ||
|
|
1d44c9ccc1 | ||
|
|
33831759b5 | ||
|
|
6fe932b255 | ||
|
|
8da02df8e0 | ||
|
|
587c99351d | ||
|
|
88c8d72a21 | ||
|
|
cf99fed17a | ||
|
|
ca48b6bf35 | ||
|
|
4dcd606b47 | ||
|
|
393ddd6e1f | ||
|
|
840e796aa9 | ||
|
|
5fd096da8d | ||
|
|
eb29c5c285 | ||
|
|
1eb286e43e | ||
|
|
ae76ebe2d1 | ||
|
|
e4505aefd9 | ||
|
|
d6b0612882 | ||
|
|
4c65eb0af8 | ||
|
|
318a8258fd | ||
|
|
17ae28e0fe | ||
|
|
3c4f622479 | ||
|
|
3ce43764be | ||
|
|
b555c60e49 | ||
|
|
2336d010ef | ||
|
|
b9af0d89d5 | ||
|
|
6f2afe0c30 | ||
|
|
d8c61d459e | ||
|
|
7ae5ebbeb2 | ||
|
|
7335b71dfb | ||
|
|
9583b03074 | ||
|
|
3c81d5f125 | ||
|
|
688699a046 | ||
|
|
090f5a9a45 | ||
|
|
da58d03ff7 | ||
|
|
9ea3831c08 | ||
|
|
a46f55b9de | ||
|
|
a634f64400 | ||
|
|
bcd8a3b240 | ||
|
|
04d5d1895c | ||
|
|
abd2775a70 | ||
|
|
73226415fc | ||
|
|
ab160ef445 | ||
|
|
268fe09322 | ||
|
|
7a557e984a | ||
|
|
f1a55cbe6d | ||
|
|
1e35d95df8 | ||
|
|
d8387b418d | ||
|
|
adea16a294 | ||
|
|
7f2d5cab2d | ||
|
|
c6ff612f6e | ||
|
|
8db353e1d7 | ||
|
|
e6978117a7 | ||
|
|
5dcb055077 | ||
|
|
0b5e1a9b2f | ||
|
|
2e17a97474 | ||
|
|
74ddbd8a3b | ||
|
|
b8039a821b | ||
|
|
438312f00e | ||
|
|
381ccaa391 | ||
|
|
3204494883 | ||
|
|
e264f699d4 | ||
|
|
68d4b77d44 | ||
|
|
e1ac99af1f | ||
|
|
be0d17e812 | ||
|
|
4eb35406f4 | ||
|
|
624745ab20 | ||
|
|
9354822e09 | ||
|
|
17d4f9513e | ||
|
|
f830d77307 | ||
|
|
a03c76b228 | ||
|
|
35ad61429d | ||
|
|
b5b3d9e5c7 | ||
|
|
6e682c2b01 | ||
|
|
7e2ea2ece0 | ||
|
|
01926d66d7 | ||
|
|
69f7d0a0ce | ||
|
|
d1c84705ec | ||
|
|
3274908551 | ||
|
|
c730934498 | ||
|
|
471a8b223b | ||
|
|
47ee9202c3 | ||
|
|
1bcbe89802 | ||
|
|
bf57e9bb12 | ||
|
|
318a7584f3 | ||
|
|
961ec228d4 | ||
|
|
a777eb3d81 | ||
|
|
7f79b52dae | ||
|
|
db680edc26 | ||
|
|
e6ce80458f | ||
|
|
cdcb123aa8 | ||
|
|
78081a1652 | ||
|
|
7408976b15 | ||
|
|
763bb73cc3 | ||
|
|
1dee2cd55e | ||
|
|
426ecfd136 | ||
|
|
4913baed16 | ||
|
|
675f6a8901 | ||
|
|
2147284cad | ||
|
|
7f1870da5f | ||
|
|
2149a095f7 | ||
|
|
e8d21adbaa | ||
|
|
fa28531322 | ||
|
|
deef85ca9a | ||
|
|
4f4427ff41 | ||
|
|
0ed285e84d | ||
|
|
905ca77c9e | ||
|
|
61043c7e74 | ||
|
|
4545c9f22f | ||
|
|
ad772d7b48 | ||
|
|
a56ef92729 | ||
|
|
561d01c450 | ||
|
|
c6c8a30da1 | ||
|
|
914dbeb12c | ||
|
|
56dc90eaab | ||
|
|
f51c567de3 | ||
|
|
9b2acca63e | ||
|
|
afcd9f1b1c | ||
|
|
755ccbc468 | ||
|
|
0af7aec211 | ||
|
|
ee085ad6bd | ||
|
|
719bec2606 | ||
|
|
b1db9dbb16 | ||
|
|
609044aea2 | ||
|
|
ba481718a4 | ||
|
|
1be60dde7f | ||
|
|
e92e811a61 | ||
|
|
5aa0db8681 | ||
|
|
d5691211dd | ||
|
|
a93695a70e | ||
|
|
ce935a2697 | ||
|
|
812ce0d93f | ||
|
|
bbae5b49f9 | ||
|
|
772a985dc3 | ||
|
|
8a7514de8a | ||
|
|
32ad212ac9 | ||
|
|
8a8d5c784c | ||
|
|
125830ab4b | ||
|
|
5b75b423e6 | ||
|
|
012d7e2878 | ||
|
|
cd3029f36f | ||
|
|
6adaac7e18 | ||
|
|
cde5e35d9b | ||
|
|
ee17fba72e | ||
|
|
6296b89319 | ||
|
|
5450db9151 | ||
|
|
b4700f026b | ||
|
|
d771fa7c48 | ||
|
|
b2c378267b | ||
|
|
384c8f3560 | ||
|
|
f44ef427a2 | ||
|
|
c54a4301ee | ||
|
|
36a3514225 | ||
|
|
e1edd41e1b | ||
|
|
13e60c55a1 | ||
|
|
9b8b1a68f0 | ||
|
|
4ec9316155 | ||
|
|
ef769500d4 | ||
|
|
23692574a2 | ||
|
|
5f6fd682a5 | ||
|
|
db24518a30 | ||
|
|
90933ac660 | ||
|
|
087579a6f4 | ||
|
|
de59cde155 | ||
|
|
3cd95eacdf | ||
|
|
deb81b2ad4 | ||
|
|
4e717cdb30 | ||
|
|
33acd6f041 | ||
|
|
7575e6afc4 | ||
|
|
316a9f6480 | ||
|
|
c6de584cad | ||
|
|
d997ff6aa8 | ||
|
|
b9ccecf86e | ||
|
|
bd5d21aaf2 | ||
|
|
19e07771d1 | ||
|
|
ef267ab449 | ||
|
|
4f6ed683e8 | ||
|
|
c818e7064f | ||
|
|
ead6ab2ef7 | ||
|
|
5c3dc49f44 | ||
|
|
83884180ac | ||
|
|
4cac96c33a | ||
|
|
5df4be1165 | ||
|
|
96445f1b7d | ||
|
|
4bdd7596d3 | ||
|
|
18aae32015 | ||
|
|
a8996b9e52 | ||
|
|
94095c61d8 | ||
|
|
1cddd744ad | ||
|
|
786738dd00 | ||
|
|
5b8d5fdf2f | ||
|
|
694f31ca37 | ||
|
|
9c1ad0f9f7 | ||
|
|
71c6335293 | ||
|
|
8c38ea4ebc | ||
|
|
44d84ac164 | ||
|
|
930f9bd534 | ||
|
|
b61fbbde46 | ||
|
|
ec956b0334 | ||
|
|
44ffe0dc79 | ||
|
|
e3a61fba52 | ||
|
|
65794f60ec | ||
|
|
7a710b4970 | ||
|
|
0bb20cc611 | ||
|
|
433c0c895e | ||
|
|
67e8d22958 | ||
|
|
10d1fc0e73 | ||
|
|
2260c8aa11 | ||
|
|
97eb62aff8 | ||
|
|
1855fc35f2 | ||
|
|
dc3ed35313 | ||
|
|
6b868df554 | ||
|
|
5ccbbe40c2 | ||
|
|
86f93a53d6 | ||
|
|
f53347631e | ||
|
|
efe3cb6e1a | ||
|
|
32ac4edeed | ||
|
|
4c04c09138 | ||
|
|
47ea80baee | ||
|
|
95c3fa836b | ||
|
|
ab60a12465 | ||
|
|
2d38e51867 | ||
|
|
a5dda669e3 | ||
|
|
3c4f3a680a | ||
|
|
b61c06384a | ||
|
|
e7742bfb7c | ||
|
|
22307ae0ee | ||
|
|
e150150d9f | ||
|
|
943f0733bb | ||
|
|
8274447dd9 | ||
|
|
083a84e5d0 | ||
|
|
d5eb386d00 | ||
|
|
1ce7b48057 | ||
|
|
cbcdd337aa | ||
|
|
c144adf77c | ||
|
|
d390039873 | ||
|
|
7d0c58a285 | ||
|
|
9263001b21 | ||
|
|
66ee6d07f8 | ||
|
|
a40dcca794 | ||
|
|
15e3dfe1d3 | ||
|
|
a1de9367ec | ||
|
|
eceb37bde2 | ||
|
|
56fcf85ab6 | ||
|
|
77db81d661 | ||
|
|
2ad7fcbc2f | ||
|
|
2c62dfd124 | ||
|
|
ef66497a0d | ||
|
|
1128029599 | ||
|
|
befc30bc55 | ||
|
|
ca5846cde9 | ||
|
|
8547ab1663 | ||
|
|
9c0e6ac365 | ||
|
|
552b963e6d | ||
|
|
e2b48366d3 | ||
|
|
5e0d9aea32 | ||
|
|
ae13c93b7d | ||
|
|
b9f8a4a477 | ||
|
|
68e9f75708 | ||
|
|
d569693f24 | ||
|
|
15d8bb2105 | ||
|
|
b2ca777a08 | ||
|
|
ba01198e6c | ||
|
|
6ebd5e1761 | ||
|
|
2723eda1e4 | ||
|
|
1fa3a5cce9 | ||
|
|
fe8aee6b08 | ||
|
|
0639e2a6e2 | ||
|
|
f1d707705e | ||
|
|
296a7db960 | ||
|
|
4c0936e72f | ||
|
|
0992e391ba | ||
|
|
b22aaeef6a | ||
|
|
8090ee0e5d | ||
|
|
f7d31bb3e3 | ||
|
|
9cd928674f | ||
|
|
3ea8a4d220 | ||
|
|
b0d3ba76a0 | ||
|
|
ab798fe5ba | ||
|
|
e7d90e08b9 | ||
|
|
c2404f77e9 | ||
|
|
ec4a16f2e0 | ||
|
|
ca5de26f50 | ||
|
|
71920d61e6 | ||
|
|
5de75eee56 | ||
|
|
2d5fc39d35 | ||
|
|
c001ed53fa | ||
|
|
39e01e9349 | ||
|
|
9e54d4c7d2 | ||
|
|
56bf97ffc9 | ||
|
|
7d3e719a2c | ||
|
|
e55d4fd5c1 | ||
|
|
5ee231415f | ||
|
|
c866771cd2 | ||
|
|
4a24219a1a | ||
|
|
733a184ce0 | ||
|
|
eee09e79e8 | ||
|
|
6df85adf3e | ||
|
|
3ee6036551 | ||
|
|
fb65080548 | ||
|
|
3a5f21b0d1 | ||
|
|
13a5598dc3 | ||
|
|
5a6c89661a | ||
|
|
7c5745720a | ||
|
|
00ae13f966 | ||
|
|
29dc39fce1 | ||
|
|
5c184cfc0d | ||
|
|
055022a55f | ||
|
|
c30e908034 | ||
|
|
8d24c0212e | ||
|
|
8240cea628 | ||
|
|
f2a33eb372 | ||
|
|
e134a40208 | ||
|
|
690888cfc1 | ||
|
|
fb8d9b6645 | ||
|
|
f7ddb39ee1 | ||
|
|
145084b699 | ||
|
|
f1ba12607a | ||
|
|
bb87b65f08 | ||
|
|
b0f6e7cee4 | ||
|
|
ed72d4e104 | ||
|
|
8ec1bfe897 | ||
|
|
1dec17562f | ||
|
|
9cc3795f1a | ||
|
|
be1306a6c2 | ||
|
|
e9160a31e0 | ||
|
|
0a670c578f | ||
|
|
e3c15fc4b9 | ||
|
|
dc7c915553 | ||
|
|
b7eeb6e67f | ||
|
|
7e4193b538 | ||
|
|
a932803eac | ||
|
|
52560142bf | ||
|
|
874a4ef8c7 | ||
|
|
0bb3ac7c31 | ||
|
|
1e9f5845ab | ||
|
|
c41dfc2501 | ||
|
|
30ac7eced1 | ||
|
|
466d093a92 | ||
|
|
1e9be353c2 | ||
|
|
4f4277d9c7 | ||
|
|
6728bda5c5 | ||
|
|
dc9f154823 | ||
|
|
d7168a82e2 | ||
|
|
c9c8ee3796 | ||
|
|
c7aae10300 | ||
|
|
909941405f | ||
|
|
4031eb1d91 | ||
|
|
59cf6fd4f0 | ||
|
|
6de9732a88 | ||
|
|
1f7f500922 | ||
|
|
4b1462ec65 | ||
|
|
6ed47f0aad | ||
|
|
2d8c7ba9fc | ||
|
|
3b342d18bc | ||
|
|
f24ad3800c | ||
|
|
e2ff369eba | ||
|
|
9691a78f6b | ||
|
|
7ff6b6fafd | ||
|
|
7c621cfbdf | ||
|
|
5acadc9cd7 | ||
|
|
2ff609dd43 | ||
|
|
da48a6ba87 | ||
|
|
cd6c58216a | ||
|
|
bdbd0cf27a | ||
|
|
d792937686 | ||
|
|
bac66ec26b | ||
|
|
77516822f6 | ||
|
|
37d8c67530 | ||
|
|
cfdcae4bc7 | ||
|
|
74a6921bc4 | ||
|
|
490cccba3c | ||
|
|
839441e236 | ||
|
|
ba9ea943e2 | ||
|
|
455087faae | ||
|
|
31def9e217 | ||
|
|
ee3514ccdc | ||
|
|
cf606d7da0 | ||
|
|
eb26a581f9 | ||
|
|
b04cbebf86 | ||
|
|
4272af801f | ||
|
|
0b633027cb | ||
|
|
93943ef949 | ||
|
|
b184b87714 | ||
|
|
a11473f85d | ||
|
|
1eedad27a2 | ||
|
|
ac02d379ba | ||
|
|
a4ebf5b507 | ||
|
|
c410769588 | ||
|
|
997a987943 | ||
|
|
6201dc083a | ||
|
|
b33f47804d | ||
|
|
7ba5e098a3 | ||
|
|
824b78021c | ||
|
|
31657c85e5 | ||
|
|
7010e5ea84 | ||
|
|
2cba6b246d | ||
|
|
52cc2a7a0c | ||
|
|
c012e2b408 | ||
|
|
646a6b604f | ||
|
|
cca00a6378 | ||
|
|
10b7fc7e51 | ||
|
|
43e4544d51 | ||
|
|
21aa8f0b45 | ||
|
|
b708fa51ad | ||
|
|
8709f6c4b3 | ||
|
|
2ac560e58b | ||
|
|
8f8ba9486d | ||
|
|
f55924b3e0 | ||
|
|
7240acdebc | ||
|
|
b9b06b00bf | ||
|
|
51f258d103 | ||
|
|
4c75f1c7b7 | ||
|
|
ed7bff1fec | ||
|
|
01a79be2c9 | ||
|
|
d211fcd34f | ||
|
|
159834171e | ||
|
|
8a38c72c48 | ||
|
|
fbcdc192d5 | ||
|
|
ee642859ef | ||
|
|
9f579f12fc | ||
|
|
825a526789 | ||
|
|
ae8a01ead6 | ||
|
|
9dde0b54a3 | ||
|
|
f1343b2f55 | ||
|
|
962b7985e6 | ||
|
|
5a1c64d316 | ||
|
|
01b2cf82ec | ||
|
|
c033c4c71c | ||
|
|
aa791ee5cf | ||
|
|
305671e2ab | ||
|
|
d654736834 | ||
|
|
2c81bfead5 | ||
|
|
77b3bc239d | ||
|
|
c10d15aa0f | ||
|
|
a88deadd6f | ||
|
|
e6ea8f1199 | ||
|
|
4d4151f6c1 | ||
|
|
518becfe2e | ||
|
|
6f6b93da02 | ||
|
|
45b1843dc9 | ||
|
|
cb86a302d8 | ||
|
|
d15ed439ae | ||
|
|
b765e1f3b7 | ||
|
|
2527b53019 | ||
|
|
78a47826b2 | ||
|
|
ecfaa4f869 | ||
|
|
f36adcdb73 | ||
|
|
13616f8f96 | ||
|
|
ab486d1e27 | ||
|
|
9111909c1d | ||
|
|
4a1a1a75fb | ||
|
|
e4d6ade4b3 | ||
|
|
c82e880f5b | ||
|
|
f2aa3b21e0 | ||
|
|
385db0e97d | ||
|
|
4e58da5222 | ||
|
|
1c6ebb0782 | ||
|
|
7e8b84c3e7 | ||
|
|
132067b081 | ||
|
|
8c36fc8f31 | ||
|
|
93858efe73 | ||
|
|
ba7f27a3f6 | ||
|
|
2f70fb7015 | ||
|
|
655ec6bf8e | ||
|
|
c4ad533300 | ||
|
|
5cdbd0cf4a | ||
|
|
a55c70d4ae | ||
|
|
02938a010d | ||
|
|
e40641bf7c | ||
|
|
27c0b43897 | ||
|
|
d46de5ab8b | ||
|
|
73ebb0edde | ||
|
|
684245d6ce | ||
|
|
d157c29269 | ||
|
|
4d2e81661b | ||
|
|
483a586d55 | ||
|
|
4ac54f8c2c | ||
|
|
840aacf7dd | ||
|
|
ab4256d53a | ||
|
|
46c5e562bf | ||
|
|
42f5a90d09 | ||
|
|
ef82da93fb | ||
|
|
06d05b18b2 | ||
|
|
431c4bd6e3 | ||
|
|
f72c4e82fd | ||
|
|
9c83a20a27 | ||
|
|
773bec5ae5 | ||
|
|
f3c508f6e8 | ||
|
|
2aa4710745 | ||
|
|
3b0a920fad | ||
|
|
daef1cf34d | ||
|
|
bd8d4637a3 | ||
|
|
d2cefc140a | ||
|
|
ccfce89423 | ||
|
|
700cd5805c | ||
|
|
498aad8587 | ||
|
|
73f407b7ae | ||
|
|
4be7dcba48 | ||
|
|
f0694c582e | ||
|
|
f90f0c98d9 | ||
|
|
95aecc5dbb | ||
|
|
f975fd03a1 | ||
|
|
8272874704 | ||
|
|
86f4cead16 | ||
|
|
88a1a10e6f | ||
|
|
624e657210 | ||
|
|
2278e8f1ba | ||
|
|
58176d1484 | ||
|
|
10489879f7 | ||
|
|
fe22872d14 | ||
|
|
4d95d23d99 | ||
|
|
c6fc5a1a26 | ||
|
|
012d75442a | ||
|
|
dcc7900e7c | ||
|
|
34f5e8ad0e | ||
|
|
c2fee9894a | ||
|
|
abd983e851 | ||
|
|
28611704d9 | ||
|
|
305dddeab0 | ||
|
|
ee8112b42f | ||
|
|
ca319f63ad | ||
|
|
a09a8164db | ||
|
|
e5cf6a20a7 | ||
|
|
af5e6e7e6d | ||
|
|
70f2b5e877 | ||
|
|
8ef454dcbe | ||
|
|
551a041283 | ||
|
|
03288943af | ||
|
|
725f734bae | ||
|
|
0f32460656 | ||
|
|
25180cc850 | ||
|
|
2a0e41cab9 | ||
|
|
05edd48ad0 | ||
|
|
266ab95557 | ||
|
|
0a4bba565c | ||
|
|
2ddb9d57aa | ||
|
|
4f012ad703 | ||
|
|
a1cd180082 | ||
|
|
bc2f0c7dcb | ||
|
|
c6ae0ebcbf | ||
|
|
c6ec576cbb | ||
|
|
55329b56cb | ||
|
|
7e43d06b60 | ||
|
|
89f54f3739 | ||
|
|
01fa02d0b5 | ||
|
|
8bed45340a | ||
|
|
55138753c6 | ||
|
|
43369b8096 | ||
|
|
bec1977137 | ||
|
|
4c08eb4b11 | ||
|
|
0163730437 | ||
|
|
39745ac38e | ||
|
|
cacf8bbb58 | ||
|
|
a1c6d5861a | ||
|
|
589c4596d8 | ||
|
|
7a6d7fca42 | ||
|
|
5305c9f1e8 | ||
|
|
b1022ea4c1 | ||
|
|
380a74a4ed | ||
|
|
ff709848a6 | ||
|
|
279dd6d878 | ||
|
|
2e0ad842d0 | ||
|
|
a3949c7786 | ||
|
|
2320606262 | ||
|
|
b01286d280 | ||
|
|
64f72c22b9 | ||
|
|
856114d05c | ||
|
|
98b8c4b0c9 | ||
|
|
01f5f0be5a | ||
|
|
eb6d404753 | ||
|
|
c508ab1aef | ||
|
|
0793dc922c | ||
|
|
00a41ab296 | ||
|
|
37f4877e56 | ||
|
|
a6fc45c02f | ||
|
|
25411e01db | ||
|
|
a8ac6f1dc1 | ||
|
|
dfe1884c25 | ||
|
|
3e5dcc8bcd | ||
|
|
ff81900784 | ||
|
|
4cb30a3057 | ||
|
|
72f80b88f7 | ||
|
|
3008d8133c | ||
|
|
4524618bf2 | ||
|
|
55d22ba10c | ||
|
|
76cf020750 | ||
|
|
f13ac35edf | ||
|
|
59582a9d9d | ||
|
|
6246bbc656 | ||
|
|
1b028b419b | ||
|
|
4c6c768422 | ||
|
|
1d3969b215 | ||
|
|
94116d9ebc | ||
|
|
cc5174a89a | ||
|
|
31552100c5 | ||
|
|
8df5dcb193 | ||
|
|
7929600798 | ||
|
|
a05ea124b9 | ||
|
|
6a03ab3ad4 | ||
|
|
6a151c1312 | ||
|
|
990e56fb13 | ||
|
|
2bd3033f68 | ||
|
|
fe105a07e3 | ||
|
|
a5782defd3 | ||
|
|
bcccd2fe74 | ||
|
|
404e23734b | ||
|
|
973d63f4f2 | ||
|
|
405d98ee63 | ||
|
|
f81724969d | ||
|
|
edb5444fa3 | ||
|
|
e877cb7bd7 | ||
|
|
482b3ba702 | ||
|
|
752acedc0b | ||
|
|
fb88723afc | ||
|
|
3718737091 | ||
|
|
3d3f056f7e | ||
|
|
c60621c367 | ||
|
|
606562aa7e | ||
|
|
f689d06ca9 | ||
|
|
7cfd7f3fb1 | ||
|
|
4a8dfb3461 | ||
|
|
3752b3aead | ||
|
|
b81d41df22 | ||
|
|
dadf3f06ee | ||
|
|
8ed0d5675f | ||
|
|
d5e9041344 | ||
|
|
d99c20f628 | ||
|
|
973ed24dc8 | ||
|
|
5d5f5e3be8 | ||
|
|
d9e14408f0 | ||
|
|
c9c5ce2365 | ||
|
|
975534370f | ||
|
|
28605f6bd3 | ||
|
|
3c6d3b69c2 | ||
|
|
00312e95fe | ||
|
|
4223130bb0 | ||
|
|
c811e1ce70 | ||
|
|
77475f2ad0 | ||
|
|
3680a2f6f5 | ||
|
|
1946058e7b | ||
|
|
73daf8ce33 | ||
|
|
094ceeba14 | ||
|
|
3b7359a27a | ||
|
|
df9108e19b | ||
|
|
6307e783d8 | ||
|
|
b9cd73c76d | ||
|
|
b62c230ca2 | ||
|
|
800193da9b | ||
|
|
577ba5783c | ||
|
|
9bece2b313 | ||
|
|
e85e30546c | ||
|
|
758f6eed51 | ||
|
|
80ee5d3bd8 | ||
|
|
dd06c60ada | ||
|
|
6ca627ae74 | ||
|
|
80a0b81c2a | ||
|
|
06a7b0561b | ||
|
|
12db20be4e | ||
|
|
3cbb1b2b64 | ||
|
|
d75e587613 | ||
|
|
414c57d138 | ||
|
|
c14a84e6f2 | ||
|
|
def0db30e7 | ||
|
|
6ef7a81a3b | ||
|
|
95152aec68 | ||
|
|
8ed6762363 | ||
|
|
87c5ed8bec | ||
|
|
ecc6c1f501 | ||
|
|
3d8338b0d4 | ||
|
|
c91e25518f | ||
|
|
a8dddeab61 | ||
|
|
8f0a5ab660 | ||
|
|
db03d4bdd0 | ||
|
|
0ec96e4279 | ||
|
|
6e520c4cdc | ||
|
|
1e8683d72d | ||
|
|
2df622fd14 | ||
|
|
fede784fa2 | ||
|
|
f191b143e9 | ||
|
|
59212553b5 | ||
|
|
e532b196cc | ||
|
|
0f5232280c | ||
|
|
38898ba4af | ||
|
|
48f56d9600 | ||
|
|
17bf5ac2fc | ||
|
|
343b882d80 | ||
|
|
db06d21339 | ||
|
|
19240f08bb | ||
|
|
d774730f83 | ||
|
|
c2edf42567 | ||
|
|
08f0e55b4f | ||
|
|
deeb74b7e4 | ||
|
|
0542002d7a | ||
|
|
c1e307f585 | ||
|
|
7b4ba43dcf | ||
|
|
b0e4debaab | ||
|
|
676597e961 | ||
|
|
686d90745b | ||
|
|
5dc02d53c3 | ||
|
|
0598547b58 | ||
|
|
67c7745f5d | ||
|
|
a2c289646d | ||
|
|
e6efecd054 | ||
|
|
778b6a86c0 | ||
|
|
e5babd086d | ||
|
|
c212ebbdda | ||
|
|
83b8de3d43 | ||
|
|
e174d374f2 | ||
|
|
4edb93508d | ||
|
|
38c994b83b | ||
|
|
1b8643d4c9 | ||
|
|
d3c796f5b0 | ||
|
|
83d8a6a450 | ||
|
|
a21a77d230 | ||
|
|
260b88c197 | ||
|
|
655331a91b | ||
|
|
09e569f83d | ||
|
|
e4a4b562c4 | ||
|
|
35b4a755f9 | ||
|
|
5a4b43848a | ||
|
|
d98869a088 | ||
|
|
4d33cf739d | ||
|
|
34e7daf989 | ||
|
|
b0adcd6a46 | ||
|
|
be285cde3f | ||
|
|
0ff1faf7f2 | ||
|
|
bcc62cc9e3 | ||
|
|
97b466d409 | ||
|
|
f17d9bba14 | ||
|
|
d74725ce67 | ||
|
|
3dad55d7a8 | ||
|
|
598ffeea89 | ||
|
|
83367f67de | ||
|
|
15f2647d71 | ||
|
|
6421d69bff | ||
|
|
18081e30e1 | ||
|
|
97181b5c0d | ||
|
|
a63f9887b9 | ||
|
|
1282aad4a5 | ||
|
|
b8fad99f09 | ||
|
|
c7e9e60b05 | ||
|
|
47f2e1da73 | ||
|
|
5975229919 | ||
|
|
38295e8a75 | ||
|
|
f9612b5eaf | ||
|
|
5cf2ef2ef7 | ||
|
|
938b5c886e | ||
|
|
0618e68200 | ||
|
|
bac52f3969 | ||
|
|
d494d62953 | ||
|
|
7206181385 | ||
|
|
3f22901a43 | ||
|
|
f70f11fc70 | ||
|
|
cffebd7fd6 | ||
|
|
b8c8e7349f | ||
|
|
8bba99ae56 | ||
|
|
b5c5f57613 | ||
|
|
33df856925 | ||
|
|
ce09cedd2e | ||
|
|
7d68101f83 | ||
|
|
aa50a00898 | ||
|
|
26f112ba55 | ||
|
|
159b9162f8 | ||
|
|
d7999f9fcb | ||
|
|
f13eba4c78 | ||
|
|
050e82e088 | ||
|
|
88377e5b61 | ||
|
|
241af465fd | ||
|
|
59510a554d | ||
|
|
b10aa95d28 | ||
|
|
097bee681a | ||
|
|
8548c2fc61 | ||
|
|
dc4fbd2e97 | ||
|
|
60b029869f | ||
|
|
f592ea6c30 | ||
|
|
a39ac3d94a | ||
|
|
4b23ddc002 | ||
|
|
4486d336a6 | ||
|
|
45e4b811b0 | ||
|
|
0e6a1a4420 | ||
|
|
b8bf708db9 | ||
|
|
6fdbb01194 | ||
|
|
d29147565c | ||
|
|
75c9430559 | ||
|
|
9ac99a80c3 | ||
|
|
a15d107dde | ||
|
|
09897b8146 | ||
|
|
29e446e508 | ||
|
|
10beb36b1c | ||
|
|
a65a888866 | ||
|
|
98180b5cc7 | ||
|
|
92009181af | ||
|
|
831bdb9f63 | ||
|
|
50a4dbbb5e | ||
|
|
ad6511c313 | ||
|
|
7a37fa4aef | ||
|
|
dcee24191f | ||
|
|
87bcb6f377 | ||
|
|
b0bc2f00d2 | ||
|
|
3b19c7d0d9 | ||
|
|
12f5c67bf5 | ||
|
|
d7a83d8995 | ||
|
|
7725729d90 | ||
|
|
e96445bd02 | ||
|
|
da2c124675 | ||
|
|
8cb695a963 | ||
|
|
54cbd7e154 | ||
|
|
5994b62930 | ||
|
|
2fbf94b0f3 | ||
|
|
32bc30e210 | ||
|
|
f3bc8e6ce1 | ||
|
|
16f3a32bec | ||
|
|
c44d2498e3 | ||
|
|
2aed209efa | ||
|
|
b55b780d7b | ||
|
|
8d4eb2bc1f | ||
|
|
67bf4f28ff | ||
|
|
803582f8ac | ||
|
|
03603f392a | ||
|
|
fcfd6d9504 | ||
|
|
c31451cf13 | ||
|
|
5deff1a179 | ||
|
|
e236a1c99b | ||
|
|
a2f3094eb0 | ||
|
|
65afc576ea | ||
|
|
8971f656b4 | ||
|
|
394ce9ee39 | ||
|
|
67a83c1b34 | ||
|
|
1e8d094274 | ||
|
|
4c35a40858 | ||
|
|
802b2aaf6a | ||
|
|
0e79a8944b | ||
|
|
bebf70667d | ||
|
|
d9bd5de0b1 | ||
|
|
31c7aa0ba4 | ||
|
|
fc2388189f | ||
|
|
4431338691 | ||
|
|
bda1e9aeab | ||
|
|
4969ca768d | ||
|
|
2acd1c1642 | ||
|
|
e1e753179a | ||
|
|
f4cc8153ae | ||
|
|
e4d8cb4ee0 | ||
|
|
723a78ae3f | ||
|
|
cd9d0d7dec | ||
|
|
665d4f08c8 | ||
|
|
00c7780fcb | ||
|
|
15ab13dc42 | ||
|
|
8a0ca3066e | ||
|
|
ea01755bb4 | ||
|
|
69c2084a18 | ||
|
|
99c0a1a7d0 | ||
|
|
5acf997e69 | ||
|
|
dd87e4ed39 | ||
|
|
2f8c26ba8a | ||
|
|
81b9793807 | ||
|
|
7278f17e8f | ||
|
|
66c7427df0 | ||
|
|
c1a06d858d | ||
|
|
53b5fdbe9e | ||
|
|
687cf0235e | ||
|
|
b6e9229cf0 | ||
|
|
089e4848d8 | ||
|
|
58d2e7c6d1 | ||
|
|
fa18d6fb76 | ||
|
|
4dcb930247 | ||
|
|
74a299fd08 | ||
|
|
532a560d87 | ||
|
|
0040a60559 | ||
|
|
cc34342790 | ||
|
|
bdbf6e9d19 | ||
|
|
db86f765eb | ||
|
|
b11dec5dd5 | ||
|
|
86becc7591 | ||
|
|
8922bc038b | ||
|
|
009f5790a4 | ||
|
|
0536b6c459 | ||
|
|
0e3ebd9841 | ||
|
|
598965a606 | ||
|
|
d7a2938849 | ||
|
|
a683658675 | ||
|
|
25169f68b7 | ||
|
|
e5247ae65d | ||
|
|
a718cb05ff | ||
|
|
b466ef2581 | ||
|
|
c7a634641f | ||
|
|
e4388643f1 | ||
|
|
bc4208201c | ||
|
|
a0d69d52a1 | ||
|
|
c23a1be139 | ||
|
|
9799f7afb0 | ||
|
|
6358b24fac | ||
|
|
b58634316f | ||
|
|
e3657644d6 | ||
|
|
7d1e3ebeed | ||
|
|
9e61dfe85e | ||
|
|
7b51aafa86 | ||
|
|
5f487123df | ||
|
|
f1f32477e3 | ||
|
|
df2b1251a0 | ||
|
|
02c7cf6fa5 | ||
|
|
60006ff993 | ||
|
|
f3af5d7b8e | ||
|
|
d551412a32 | ||
|
|
6de67a134e | ||
|
|
8ec31398e0 | ||
|
|
fd0d560b47 | ||
|
|
cc542269a1 | ||
|
|
7b488a3bef | ||
|
|
f448168501 | ||
|
|
80a8fb98db | ||
|
|
898bb397b1 | ||
|
|
74ed5b5ebd | ||
|
|
178afd81a9 | ||
|
|
d6eb1a7b98 | ||
|
|
4ff56b15e9 | ||
|
|
e6b98d3152 | ||
|
|
5fd8dd2dce | ||
|
|
0ad3e046a4 | ||
|
|
d6c5d24af3 | ||
|
|
8a3280a2de | ||
|
|
450a0a647a | ||
|
|
676c0cf123 | ||
|
|
a731319321 | ||
|
|
81b06a09b7 | ||
|
|
23b34744d9 | ||
|
|
bc8590aa12 | ||
|
|
939d368d5f | ||
|
|
336e3b8baf | ||
|
|
47c06fa308 | ||
|
|
b7f447f8d8 | ||
|
|
03af76b631 | ||
|
|
e105d5c28f | ||
|
|
d6ffb4c177 | ||
|
|
6dbfce1031 | ||
|
|
fea5ddf585 | ||
|
|
b9f39c2711 | ||
|
|
5acac0309a | ||
|
|
78febad718 | ||
|
|
a6a5bba0a9 | ||
|
|
51581c034d | ||
|
|
8f25a95b47 | ||
|
|
7f5d092223 | ||
|
|
2e5cccd1b6 | ||
|
|
2645782f89 | ||
|
|
9533092511 | ||
|
|
6005a461bb | ||
|
|
e2df946eee | ||
|
|
d14588120f | ||
|
|
ab31cfa664 | ||
|
|
af1c397969 | ||
|
|
947f9deed5 | ||
|
|
ce95eee903 | ||
|
|
b15f3bb969 | ||
|
|
998e8cba19 | ||
|
|
e3f523ab2a | ||
|
|
36485e56ed | ||
|
|
b4113360f6 | ||
|
|
2d71e22f08 | ||
|
|
2ae67c431c | ||
|
|
4b1a91b64f | ||
|
|
4f69318e12 | ||
|
|
1cc98ab50f | ||
|
|
a6494602fd | ||
|
|
50ec78b488 | ||
|
|
7d044d14f9 | ||
|
|
df03d5a8b2 | ||
|
|
6a0ed81e67 | ||
|
|
c94f3e8188 | ||
|
|
1e5f6cc1dc | ||
|
|
b1fece74e3 | ||
|
|
fdbe0df6e7 | ||
|
|
93d59520e4 | ||
|
|
b68d3a073b | ||
|
|
2100311f41 | ||
|
|
e1269e3156 | ||
|
|
c88d61b044 | ||
|
|
f49df54a36 | ||
|
|
952bbc4410 | ||
|
|
1eb4b85d72 | ||
|
|
59b6cb9e91 | ||
|
|
e06afaeb7a | ||
|
|
8c6f654b26 | ||
|
|
1d8212e53a | ||
|
|
083c5e17e1 | ||
|
|
272231fb09 | ||
|
|
67b4d9b232 | ||
|
|
21709e1557 | ||
|
|
9c312637d1 | ||
|
|
feacad7f68 | ||
|
|
6513303498 | ||
|
|
3e2a52b034 | ||
|
|
176d4e85e9 | ||
|
|
84d30dffb6 | ||
|
|
0fd282b078 | ||
|
|
cdf4afbe50 | ||
|
|
b222b2304e | ||
|
|
fdf9900114 | ||
|
|
5867eb2dd2 | ||
|
|
61f145e3de | ||
|
|
b97e7fc730 | ||
|
|
01cbf08064 | ||
|
|
fec632e948 | ||
|
|
6aab5b57e1 | ||
|
|
d2a27e02ce | ||
|
|
b55506a76d | ||
|
|
afc2aa2b3f | ||
|
|
d055b269ed | ||
|
|
8a246a4a9f | ||
|
|
2f684351bf | ||
|
|
74e5beab9d | ||
|
|
b41765f441 | ||
|
|
05a6013f42 | ||
|
|
cfff544d67 | ||
|
|
599d9642ca | ||
|
|
0264faaa4e | ||
|
|
4022a60ea7 | ||
|
|
39e366fc11 | ||
|
|
096675824f | ||
|
|
80bfa76ac9 | ||
|
|
b2e553a82e | ||
|
|
772b64d9d3 | ||
|
|
92c0de518e | ||
|
|
ff96456513 | ||
|
|
e89adbef51 | ||
|
|
22a6a6cf81 | ||
|
|
fd870e4e8a | ||
|
|
d52ed3fff2 | ||
|
|
bac17ab7d8 | ||
|
|
9ace303528 | ||
|
|
7e81c35cdc | ||
|
|
0f125d9bcf | ||
|
|
d4714517c0 | ||
|
|
280e4bf4c3 | ||
|
|
adf462fe05 | ||
|
|
c2862742ab | ||
|
|
8a712eb5af | ||
|
|
d58790af17 | ||
|
|
9ef7a13403 | ||
|
|
a5da1219bb | ||
|
|
be524fed38 | ||
|
|
042016b85e | ||
|
|
f6da574324 | ||
|
|
b09d5c3135 | ||
|
|
ec65c3fd53 | ||
|
|
7ca2f31c8d | ||
|
|
2275737a5d | ||
|
|
5e3836055f | ||
|
|
37a6a0bb3e | ||
|
|
6bcca3eca9 | ||
|
|
ce40b8d531 | ||
|
|
9f109b94b8 | ||
|
|
89024febde | ||
|
|
b7a673c6e2 | ||
|
|
7f68be770d | ||
|
|
4f173f35db | ||
|
|
ae9fbe573e | ||
|
|
29676f473d | ||
|
|
a5fcb26ab1 | ||
|
|
d68b1a1e8c | ||
|
|
bd8baed138 | ||
|
|
00a7dda273 | ||
|
|
4dba07c384 | ||
|
|
4d39c6b7cc | ||
|
|
7d6f6158c9 | ||
|
|
6863dbbc0c | ||
|
|
28b96efd8b | ||
|
|
0f82af0f49 | ||
|
|
f0d839436f | ||
|
|
f1aa4b4127 | ||
|
|
ccdb43f7f1 | ||
|
|
72900f0f90 | ||
|
|
3ad958ddb1 | ||
|
|
2c77cc90f4 | ||
|
|
db4c33b4fb | ||
|
|
3fb04115fc | ||
|
|
4faaa32aef | ||
|
|
cab59b4c32 | ||
|
|
931eff89f5 | ||
|
|
175335808b | ||
|
|
e00216581e | ||
|
|
23951ec00c | ||
|
|
a8fc5d0f9f | ||
|
|
f5e85bab1c | ||
|
|
9a44fa83dc | ||
|
|
6b1e54da62 | ||
|
|
b91421b107 | ||
|
|
43b3954fa5 | ||
|
|
80f2e3f263 | ||
|
|
9ea423b4c1 | ||
|
|
b259c9c535 | ||
|
|
80f481a5f7 | ||
|
|
115fe1b577 | ||
|
|
06d6ea651e | ||
|
|
966fa848a0 | ||
|
|
6f8fe67ace | ||
|
|
d49edc8e09 | ||
|
|
3b9c20fe31 | ||
|
|
bd72c5eacf | ||
|
|
9d152a77fd | ||
|
|
33dc28b905 | ||
|
|
43ce64dcca | ||
|
|
9e0882ba98 | ||
|
|
c890149c8c | ||
|
|
1a1ab2e2e8 | ||
|
|
715b706caa | ||
|
|
bfa9c42c25 | ||
|
|
9d98f97e1b | ||
|
|
5eb5ce6ff3 | ||
|
|
be9c873a6e | ||
|
|
034d80f6cd | ||
|
|
021e786c71 | ||
|
|
0c6bb8cb66 | ||
|
|
4d7f08a99e | ||
|
|
fdef584681 | ||
|
|
f335bac8a3 | ||
|
|
51369753bb | ||
|
|
82a4c2bce3 | ||
|
|
e73c6e039e | ||
|
|
19bad0844f |
@@ -1,3 +1,4 @@
|
|||||||
|
compile
|
||||||
config.log
|
config.log
|
||||||
Makefile
|
Makefile
|
||||||
libtool
|
libtool
|
||||||
@@ -12,3 +13,4 @@ depcomp
|
|||||||
config.guess
|
config.guess
|
||||||
config.sub
|
config.sub
|
||||||
ltmain.sh
|
ltmain.sh
|
||||||
|
libcurl.pc
|
||||||
|
|||||||
1183
CHANGES.2005
Normal file
1183
CHANGES.2005
Normal file
File diff suppressed because it is too large
Load Diff
2
COPYING
2
COPYING
@@ -1,6 +1,6 @@
|
|||||||
COPYRIGHT AND PERMISSION NOTICE
|
COPYRIGHT AND PERMISSION NOTICE
|
||||||
|
|
||||||
Copyright (c) 1996 - 2005, Daniel Stenberg, <daniel@haxx.se>.
|
Copyright (c) 1996 - 2007, Daniel Stenberg, <daniel@haxx.se>.
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
|
|||||||
6
CVS-INFO
6
CVS-INFO
@@ -53,12 +53,6 @@ installed:
|
|||||||
give you an older version of the file that isn't up-to-date. That file was
|
give you an older version of the file that isn't up-to-date. That file was
|
||||||
checked in once and won't be updated very regularly.
|
checked in once and won't be updated very regularly.
|
||||||
|
|
||||||
o yacc/bison
|
|
||||||
|
|
||||||
If you don't have yacc or bison, you must rename the lib/getdate.c.cvs file
|
|
||||||
to lib/getdate.c to be able to build libcurl. yacc/bison is normally used
|
|
||||||
to generate the lib/getdate.c file from the lib/getdate.y source file.
|
|
||||||
|
|
||||||
MAC OS X
|
MAC OS X
|
||||||
|
|
||||||
With Mac OS X 10.2 and the associated Developer Tools, the installed versions
|
With Mac OS X 10.2 and the associated Developer Tools, the installed versions
|
||||||
|
|||||||
@@ -31,6 +31,9 @@ bin_SCRIPTS = curl-config
|
|||||||
SUBDIRS = lib src
|
SUBDIRS = lib src
|
||||||
DIST_SUBDIRS = $(SUBDIRS) tests include packages docs
|
DIST_SUBDIRS = $(SUBDIRS) tests include packages docs
|
||||||
|
|
||||||
|
pkgconfigdir = $(libdir)/pkgconfig
|
||||||
|
pkgconfig_DATA = libcurl.pc
|
||||||
|
|
||||||
dist-hook:
|
dist-hook:
|
||||||
rm -rf $(top_builddir)/tests/log
|
rm -rf $(top_builddir)/tests/log
|
||||||
find $(distdir) -name "*.dist" -exec rm {} \;
|
find $(distdir) -name "*.dist" -exec rm {} \;
|
||||||
|
|||||||
112
Makefile.dist
112
Makefile.dist
@@ -5,7 +5,7 @@
|
|||||||
# | (__| |_| | _ <| |___
|
# | (__| |_| | _ <| |___
|
||||||
# \___|\___/|_| \_\_____|
|
# \___|\___/|_| \_\_____|
|
||||||
#
|
#
|
||||||
# Copyright (C) 1998 - 2005, Daniel Stenberg, <daniel@haxx.se>, et al.
|
# Copyright (C) 1998 - 2007, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
#
|
#
|
||||||
# This software is licensed as described in the file COPYING, which
|
# This software is licensed as described in the file COPYING, which
|
||||||
# you should have received as part of this distribution. The terms
|
# you should have received as part of this distribution. The terms
|
||||||
@@ -21,6 +21,8 @@
|
|||||||
# $Id$
|
# $Id$
|
||||||
###########################################################################
|
###########################################################################
|
||||||
|
|
||||||
|
VC=vc6
|
||||||
|
|
||||||
all:
|
all:
|
||||||
./configure
|
./configure
|
||||||
make
|
make
|
||||||
@@ -73,112 +75,120 @@ mingw32-ssl:
|
|||||||
$(MAKE) -C lib -f Makefile.m32 SSL=1 ZLIB=1
|
$(MAKE) -C lib -f Makefile.m32 SSL=1 ZLIB=1
|
||||||
$(MAKE) -C src -f Makefile.m32 SSL=1 ZLIB=1
|
$(MAKE) -C src -f Makefile.m32 SSL=1 ZLIB=1
|
||||||
|
|
||||||
|
mingw32-ssh2-ssl:
|
||||||
|
$(MAKE) -C lib -f Makefile.m32 SSH2=1 SSL=1 ZLIB=1
|
||||||
|
$(MAKE) -C src -f Makefile.m32 SSH2=1 SSL=1 ZLIB=1
|
||||||
|
|
||||||
|
mingw32-ssh2-ssl-sspi:
|
||||||
|
$(MAKE) -C lib -f Makefile.m32 SSH2=1 SSL=1 SSPI=1 ZLIB=1
|
||||||
|
$(MAKE) -C src -f Makefile.m32 SSH2=1 SSL=1 SSPI=1 ZLIB=1
|
||||||
|
|
||||||
mingw32-clean:
|
mingw32-clean:
|
||||||
$(MAKE) -C lib -f Makefile.m32 clean
|
$(MAKE) -C lib -f Makefile.m32 clean
|
||||||
$(MAKE) -C src -f Makefile.m32 clean
|
$(MAKE) -C src -f Makefile.m32 clean
|
||||||
|
|
||||||
vc-clean:
|
vc-clean:
|
||||||
cd lib
|
cd lib
|
||||||
nmake -f Makefile.vc6 clean
|
nmake -f Makefile.$(VC) clean
|
||||||
cd ..\src
|
cd ..\src
|
||||||
nmake -f Makefile.vc6 clean
|
nmake -f Makefile.$(VC) clean
|
||||||
|
|
||||||
vc-all:
|
vc-all:
|
||||||
cd lib
|
cd lib
|
||||||
nmake -f Makefile.vc6 cfg=release
|
nmake -f Makefile.$(VC) cfg=release
|
||||||
nmake -f Makefile.vc6 cfg=release-ssl
|
nmake -f Makefile.$(VC) cfg=release-ssl
|
||||||
nmake -f Makefile.vc6 cfg=release-zlib
|
nmake -f Makefile.$(VC) cfg=release-zlib
|
||||||
nmake -f Makefile.vc6 cfg=release-ssl-zlib
|
nmake -f Makefile.$(VC) cfg=release-ssl-zlib
|
||||||
nmake -f Makefile.vc6 cfg=release-ssl-dll
|
nmake -f Makefile.$(VC) cfg=release-ssl-dll
|
||||||
nmake -f Makefile.vc6 cfg=release-zlib-dll
|
nmake -f Makefile.$(VC) cfg=release-zlib-dll
|
||||||
nmake -f Makefile.vc6 cfg=release-ssl-dll-zlib-dll
|
nmake -f Makefile.$(VC) cfg=release-ssl-dll-zlib-dll
|
||||||
nmake -f Makefile.vc6 cfg=release-dll
|
nmake -f Makefile.$(VC) cfg=release-dll
|
||||||
nmake -f Makefile.vc6 cfg=release-dll-ssl-dll
|
nmake -f Makefile.$(VC) cfg=release-dll-ssl-dll
|
||||||
nmake -f Makefile.vc6 cfg=release-dll-zlib-dll
|
nmake -f Makefile.$(VC) cfg=release-dll-zlib-dll
|
||||||
nmake -f Makefile.vc6 cfg=release-dll-ssl-dll-zlib-dll
|
nmake -f Makefile.$(VC) cfg=release-dll-ssl-dll-zlib-dll
|
||||||
nmake -f Makefile.vc6 cfg=debug
|
nmake -f Makefile.$(VC) cfg=debug
|
||||||
nmake -f Makefile.vc6 cfg=debug-ssl
|
nmake -f Makefile.$(VC) cfg=debug-ssl
|
||||||
nmake -f Makefile.vc6 cfg=debug-zlib
|
nmake -f Makefile.$(VC) cfg=debug-zlib
|
||||||
nmake -f Makefile.vc6 cfg=debug-ssl-zlib
|
nmake -f Makefile.$(VC) cfg=debug-ssl-zlib
|
||||||
nmake -f Makefile.vc6 cfg=debug-ssl-dll
|
nmake -f Makefile.$(VC) cfg=debug-ssl-dll
|
||||||
nmake -f Makefile.vc6 cfg=debug-zlib-dll
|
nmake -f Makefile.$(VC) cfg=debug-zlib-dll
|
||||||
nmake -f Makefile.vc6 cfg=debug-ssl-dll-zlib-dll
|
nmake -f Makefile.$(VC) cfg=debug-ssl-dll-zlib-dll
|
||||||
nmake -f Makefile.vc6 cfg=debug-dll
|
nmake -f Makefile.$(VC) cfg=debug-dll
|
||||||
nmake -f Makefile.vc6 cfg=debug-dll-ssl-dll
|
nmake -f Makefile.$(VC) cfg=debug-dll-ssl-dll
|
||||||
nmake -f Makefile.vc6 cfg=debug-dll-zlib-dll
|
nmake -f Makefile.$(VC) cfg=debug-dll-zlib-dll
|
||||||
nmake -f Makefile.vc6 cfg=debug-dll-ssl-dll-zlib-dll
|
nmake -f Makefile.$(VC) cfg=debug-dll-ssl-dll-zlib-dll
|
||||||
|
|
||||||
vc:
|
vc:
|
||||||
cd lib
|
cd lib
|
||||||
nmake /f Makefile.vc6 cfg=release
|
nmake /f Makefile.$(VC) cfg=release
|
||||||
cd ..\src
|
cd ..\src
|
||||||
nmake /f Makefile.vc6
|
nmake /f Makefile.$(VC)
|
||||||
|
|
||||||
vc-zlib:
|
vc-zlib:
|
||||||
cd lib
|
cd lib
|
||||||
nmake /f Makefile.vc6 cfg=release-zlib
|
nmake /f Makefile.$(VC) cfg=release-zlib
|
||||||
cd ..\src
|
cd ..\src
|
||||||
nmake /f Makefile.vc6 cfg=release-zlib
|
nmake /f Makefile.$(VC) cfg=release-zlib
|
||||||
|
|
||||||
vc-ssl:
|
vc-ssl:
|
||||||
cd lib
|
cd lib
|
||||||
nmake /f Makefile.vc6 cfg=release-ssl
|
nmake /f Makefile.$(VC) cfg=release-ssl
|
||||||
cd ..\src
|
cd ..\src
|
||||||
nmake /f Makefile.vc6 cfg=release-ssl
|
nmake /f Makefile.$(VC) cfg=release-ssl
|
||||||
|
|
||||||
vc-ssl-zlib:
|
vc-ssl-zlib:
|
||||||
cd lib
|
cd lib
|
||||||
nmake /f Makefile.vc6 cfg=release-ssl-zlib
|
nmake /f Makefile.$(VC) cfg=release-ssl-zlib
|
||||||
cd ..\src
|
cd ..\src
|
||||||
nmake /f Makefile.vc6 cfg=release-ssl-zlib
|
nmake /f Makefile.$(VC) cfg=release-ssl-zlib
|
||||||
|
|
||||||
vc-ssl-dll:
|
vc-ssl-dll:
|
||||||
cd lib
|
cd lib
|
||||||
nmake /f Makefile.vc6 cfg=release-ssl-dll
|
nmake /f Makefile.$(VC) cfg=release-ssl-dll
|
||||||
cd ..\src
|
cd ..\src
|
||||||
nmake /f Makefile.vc6 cfg=release-ssl-dll
|
nmake /f Makefile.$(VC) cfg=release-ssl-dll
|
||||||
|
|
||||||
vc-dll-ssl-dll:
|
vc-dll-ssl-dll:
|
||||||
cd lib
|
cd lib
|
||||||
nmake /f Makefile.vc6 cfg=release-dll-ssl-dll
|
nmake /f Makefile.$(VC) cfg=release-dll-ssl-dll
|
||||||
cd ..\src
|
cd ..\src
|
||||||
nmake /f Makefile.vc6 cfg=release-dll-ssl-dll
|
nmake /f Makefile.$(VC) cfg=release-dll-ssl-dll
|
||||||
|
|
||||||
vc-dll:
|
vc-dll:
|
||||||
cd lib
|
cd lib
|
||||||
nmake /f Makefile.vc6 cfg=release-dll
|
nmake /f Makefile.$(VC) cfg=release-dll
|
||||||
cd ..\src
|
cd ..\src
|
||||||
nmake /f Makefile.vc6 cfg=release-dll
|
nmake /f Makefile.$(VC) cfg=release-dll
|
||||||
|
|
||||||
vc-dll-zlib-dll:
|
vc-dll-zlib-dll:
|
||||||
cd lib
|
cd lib
|
||||||
nmake /f Makefile.vc6 cfg=release-dll-zlib-dll
|
nmake /f Makefile.$(VC) cfg=release-dll-zlib-dll
|
||||||
cd ..\src
|
cd ..\src
|
||||||
nmake /f Makefile.vc6 cfg=release-dll-zlib-dll
|
nmake /f Makefile.$(VC) cfg=release-dll-zlib-dll
|
||||||
|
|
||||||
vc-dll-ssl-dll-zlib-dll:
|
vc-dll-ssl-dll-zlib-dll:
|
||||||
cd lib
|
cd lib
|
||||||
nmake /f Makefile.vc6 cfg=release-dll-ssl-dll-zlib-dll
|
nmake /f Makefile.$(VC) cfg=release-dll-ssl-dll-zlib-dll
|
||||||
cd ..\src
|
cd ..\src
|
||||||
nmake /f Makefile.vc6 cfg=release-dll-ssl-dll-zlib-dll
|
nmake /f Makefile.$(VC) cfg=release-dll-ssl-dll-zlib-dll
|
||||||
|
|
||||||
vc-ssl-dll-zlib-dll:
|
vc-ssl-dll-zlib-dll:
|
||||||
cd lib
|
cd lib
|
||||||
nmake /f Makefile.vc6 cfg=release-ssl-dll-zlib-dll
|
nmake /f Makefile.$(VC) cfg=release-ssl-dll-zlib-dll
|
||||||
cd ..\src
|
cd ..\src
|
||||||
nmake /f Makefile.vc6 cfg=release-ssl-dll-zlib-dll
|
nmake /f Makefile.$(VC) cfg=release-ssl-dll-zlib-dll
|
||||||
|
|
||||||
vc-zlib-dll:
|
vc-zlib-dll:
|
||||||
cd lib
|
cd lib
|
||||||
nmake /f Makefile.vc6 cfg=release-zlib-dll
|
nmake /f Makefile.$(VC) cfg=release-zlib-dll
|
||||||
cd ..\src
|
cd ..\src
|
||||||
nmake /f Makefile.vc6 cfg=release-zlib-dll
|
nmake /f Makefile.$(VC) cfg=release-zlib-dll
|
||||||
|
|
||||||
vc-sspi:
|
vc-sspi:
|
||||||
cd lib
|
cd lib
|
||||||
nmake /f Makefile.vc6 cfg=release WINDOWS_SSPI=1
|
nmake /f Makefile.$(VC) cfg=release WINDOWS_SSPI=1
|
||||||
cd ..\src
|
cd ..\src
|
||||||
nmake /f Makefile.vc6 cfg=release WINDOWS_SSPI=1
|
nmake /f Makefile.$(VC) cfg=release WINDOWS_SSPI=1
|
||||||
|
|
||||||
djgpp:
|
djgpp:
|
||||||
$(MAKE) -C lib -f Makefile.dj
|
$(MAKE) -C lib -f Makefile.dj
|
||||||
@@ -212,6 +222,10 @@ netware-ssl-zlib:
|
|||||||
$(MAKE) -C lib -f Makefile.netware WITH_SSL=1 WITH_ZLIB=1
|
$(MAKE) -C lib -f Makefile.netware WITH_SSL=1 WITH_ZLIB=1
|
||||||
$(MAKE) -C src -f Makefile.netware WITH_SSL=1 WITH_ZLIB=1
|
$(MAKE) -C src -f Makefile.netware WITH_SSL=1 WITH_ZLIB=1
|
||||||
|
|
||||||
|
netware-ssh2-ssl-zlib:
|
||||||
|
$(MAKE) -C lib -f Makefile.netware WITH_SSH2=1 WITH_SSL=1 WITH_ZLIB=1
|
||||||
|
$(MAKE) -C src -f Makefile.netware WITH_SSH2=1 WITH_SSL=1 WITH_ZLIB=1
|
||||||
|
|
||||||
netware-zlib:
|
netware-zlib:
|
||||||
$(MAKE) -C lib -f Makefile.netware WITH_ZLIB=1
|
$(MAKE) -C lib -f Makefile.netware WITH_ZLIB=1
|
||||||
$(MAKE) -C src -f Makefile.netware WITH_ZLIB=1
|
$(MAKE) -C src -f Makefile.netware WITH_ZLIB=1
|
||||||
|
|||||||
29
README
29
README
@@ -7,7 +7,7 @@
|
|||||||
README
|
README
|
||||||
|
|
||||||
Curl is a command line tool for transferring data specified with URL
|
Curl is a command line tool for transferring data specified with URL
|
||||||
syntax. Find out how to use Curl by reading the curl.1 man page or the
|
syntax. Find out how to use curl by reading the curl.1 man page or the
|
||||||
MANUAL document. Find out how to install Curl by reading the INSTALL
|
MANUAL document. Find out how to install Curl by reading the INSTALL
|
||||||
document.
|
document.
|
||||||
|
|
||||||
@@ -32,31 +32,8 @@ WEB SITE
|
|||||||
|
|
||||||
Visit the curl web site or mirrors for the latest news and downloads:
|
Visit the curl web site or mirrors for the latest news and downloads:
|
||||||
|
|
||||||
Sweden -- http://curl.haxx.se/
|
Sweden http://curl.haxx.se/
|
||||||
Australia -- http://curl.planetmirror.com/
|
Mirrors http://curlm.haxx.se/
|
||||||
Austria -- http://curl.gds.tuwien.ac.at/
|
|
||||||
Canada -- http://curl.meulie.net/
|
|
||||||
Denmark -- http://curl.cofman.dk/
|
|
||||||
Estonia -- http://curl.wildyou.net/
|
|
||||||
France -- http://curl.mirror.internet.tp/
|
|
||||||
Germany -- http://curl.miscellaneousmirror.org/
|
|
||||||
Germany -- http://curl.mirror.at.stealer.net/
|
|
||||||
Germany -- http://curl.mirroring.de/
|
|
||||||
Germany -- http://curl.mons-new-media.de/
|
|
||||||
Germany -- http://curl.netmirror.org/
|
|
||||||
Russia -- http://curl.tsuren.net/
|
|
||||||
Taiwan -- http://curl.cs.pu.edu.tw/
|
|
||||||
Thailand -- http://curl.siamu.ac.th/
|
|
||||||
US (AZ) -- http://curl.islandofpoker.com/
|
|
||||||
US (CA) -- http://curl.mirror.redwire.net/
|
|
||||||
US (CA) -- http://curl.mirrormonster.com/
|
|
||||||
US (CA) -- http://curl.signal42.com/
|
|
||||||
US (CA) -- http://curl.tolix.org/
|
|
||||||
US (CA) -- http://curl.webhosting76.com/
|
|
||||||
US (TX) -- http://curl.109k.com/
|
|
||||||
US (TX) -- http://curl.mirrors.cyberservers.net/
|
|
||||||
US (TX) -- http://curl.seekmeup.com/
|
|
||||||
US (TX) -- http://curl.hostingzero.com/
|
|
||||||
|
|
||||||
CVS
|
CVS
|
||||||
|
|
||||||
|
|||||||
@@ -1,46 +1,78 @@
|
|||||||
Curl and libcurl 7.15.0
|
Curl and libcurl 7.16.2
|
||||||
|
|
||||||
Public curl release number: 90
|
Public curl release number: 98
|
||||||
Releases counted from the very beginning: 117
|
Releases counted from the very beginning: 125
|
||||||
Available command line options: 109
|
Available command line options: 118
|
||||||
Available curl_easy_setopt() options: 124
|
Available curl_easy_setopt() options: 141
|
||||||
Number of public functions in libcurl: 46
|
Number of public functions in libcurl: 54
|
||||||
Amount of public web site mirrors: 24
|
Amount of public web site mirrors: 38
|
||||||
Number of known libcurl bindings: 32
|
Number of known libcurl bindings: 35
|
||||||
Number of contributors: 451
|
Number of contributors: 539
|
||||||
|
|
||||||
This release includes the following changes:
|
This release includes the following changes:
|
||||||
|
|
||||||
o --ftp-skip-pasv-ip / CURLOPT_FTP_SKIP_PASV_IP (sponsored by CU*Answers)
|
o added CURLOPT_TIMEOUT_MS and CURLOPT_CONNECTTIMEOUT_MS
|
||||||
o TFTP support added
|
o added CURLOPT_HTTP_CONTENT_DECODING, CURLOPT_HTTP_TRANSFER_DECODING and
|
||||||
|
--raw
|
||||||
|
o added support for using the NSS library for TLS/SSL
|
||||||
|
o changed default anonymous FTP password
|
||||||
|
o changed the CURLOPT_FTP_SSL_CCC option to handle active and passive
|
||||||
|
CCC shutdown
|
||||||
|
o added the --ftp-ssl-ccc-mode command line option
|
||||||
|
o includes VC8 Makefiles in the release archive
|
||||||
|
o --ftp-ssl-control is now honoured on ftps:// URLs
|
||||||
|
o added experimental CURL_ACKNOWLEDGE_EINTR symbol definition check
|
||||||
|
o --key and new --pubkey options for SSH public key file logins
|
||||||
|
o --pass now works for a SSH public key file, too
|
||||||
|
o select (2) support no longer needed to build the library if poll() used
|
||||||
|
o CURLOPT_POSTQUOTE works for SFTP
|
||||||
|
|
||||||
This release includes the following bugfixes:
|
This release includes the following bugfixes:
|
||||||
|
|
||||||
o user+domain name buffer overflow in the NTLM code (security flaw)
|
o in testsuite, update test cookies expiration from 2007-Feb-1 to year 2035
|
||||||
o -z over FTP now considers equal timestamps "not modified since"
|
o socks5 works
|
||||||
o Weird characters removed from the configure script
|
o builds fine with VC2005
|
||||||
o Fixed time zone offsets for MEST and CEST for the time parser
|
o CURLOPT_RANGE set to NULL resets the range for FTP
|
||||||
o HTTP Content-Range header parser crash
|
o curl_multi_remove_handle() rare crash
|
||||||
o FTPS negotiation timeouts/errors
|
o passive FTP transfers work with SOCKS
|
||||||
o SSPI works even for Windows 9x
|
o multi interface HTTPS connection re-use memory leak
|
||||||
o crash in --dump-header on FTP
|
o libcurl.m4's --with-libcurl is improved
|
||||||
o test 56 runs better
|
o curl-config --libs and libcurl.pc no longer list unnecessary dependencies
|
||||||
|
o fixed an issue with CCC not working on some servers
|
||||||
|
o several HTTP pipelining problems
|
||||||
|
o HTTP CONNECT thru a proxy is now less blocking when the multi interface is
|
||||||
|
used
|
||||||
|
o HTTP Digest header parsing fix for unquoted last word ending with CRLF
|
||||||
|
o CURLOPT_PORT, HTTP proxy, re-using connections and non-HTTP protocols
|
||||||
|
o CURLOPT_INTERFACE for ipv6
|
||||||
|
o use-after-free issue with HTTP transfers with the multi interface
|
||||||
|
o the progress callback can get called more frequently
|
||||||
|
o timeout would restart when signal caught while awaiting socket events
|
||||||
|
o curl -f with user+password embedded in the URL
|
||||||
|
o 26 flaws identified by coverity.com
|
||||||
|
o builds on QNX 6 again
|
||||||
|
|
||||||
Other curl-related news since the previous public release:
|
This release includes the following known bugs:
|
||||||
|
|
||||||
o http://curl.freemirror.de/ is a new German mirror
|
o see docs/KNOWN_BUGS (http://curl.haxx.se/docs/knownbugs.html)
|
||||||
o All curl relatd mailing list information and subscribers on cool.haxx.se
|
|
||||||
were lost due to a malicious user exploiting a security hole on the
|
Other curl-related news:
|
||||||
server. Attempts have been made to put back susbcribers on the lists, but
|
|
||||||
many have been lost: http://curl.haxx.se/mail/lost.html
|
o pycurl 7.16.1 was released: http://pycurl.sf.net/
|
||||||
o New S-Lang binding: http://curl.haxx.se/libcurl/slang/
|
|
||||||
o TclCurl 0.14.1: http://personal1.iddeo.es/andresgarci/tclcurl/english/
|
New curl mirrors:
|
||||||
o pycurl 7.14.1: http://pycurl.sf.net/
|
|
||||||
|
o http://curl.basemirror.de is a new mirror in Germany
|
||||||
|
o http://curl.xxtracker.org is a new mirror in The Netherlands
|
||||||
|
|
||||||
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:
|
||||||
|
|
||||||
o John Kelly, Nicolas Fran<61>ois, Scott Davis, Ben Madsen, Dmitry Bartsevich,
|
Yang Tse, Manfred Schwarb, Michael Wallner, Jeff Pohlmeyer, Shmulik Regev,
|
||||||
David Yan, Michael Wallner, Domenico Andreoli, Darryl House
|
Rob Crittenden, Robert A. Monat, Dan Fandrich, Duncan Mac-Vicar Prett,
|
||||||
|
Michal Marek, Robson Braga Araujo, Ian Turner, Linus Nielsen Feltzing,
|
||||||
|
Ravi Pratap, Adam D. Moss, Jose Kahan, Hang Kin Lau, Justin Fletcher,
|
||||||
|
Robert Iakobashvili, Bryan Henderson, Eygene Ryabinkin, Daniel Johnson,
|
||||||
|
Matt Kraai, Nick Zitzmann, Rob Jones
|
||||||
|
|
||||||
Thanks! (and sorry if I forgot to mention someone)
|
Thanks! (and sorry if I forgot to mention someone)
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
To get fixed in 7.15.0 (planned release: November 2005)
|
To be addressed before 7.16.3 (planned release: June 2007)
|
||||||
======================
|
=============================
|
||||||
|
|
||||||
60 - CONNECT 407 responses that kills the connection (not very likely though)
|
93 -
|
||||||
|
|
||||||
63 -
|
|
||||||
|
|
||||||
|
|||||||
1517
acinclude.m4
1517
acinclude.m4
File diff suppressed because it is too large
Load Diff
@@ -11,3 +11,12 @@ Dan Fandrich
|
|||||||
Gisle Vanem
|
Gisle Vanem
|
||||||
Gunter Knauf
|
Gunter Knauf
|
||||||
Henrik Stoerner
|
Henrik Stoerner
|
||||||
|
Yang Tse
|
||||||
|
Nick Mathewson
|
||||||
|
Alexander Lazic
|
||||||
|
Andreas Rieke
|
||||||
|
Guilherme Balena Versiani
|
||||||
|
Brad Spencer
|
||||||
|
Ravi Pratap
|
||||||
|
William Ahern
|
||||||
|
Bram Matthys
|
||||||
|
|||||||
121
ares/CHANGES
121
ares/CHANGES
@@ -1,18 +1,133 @@
|
|||||||
Changelog for the c-ares project
|
Changelog for the c-ares project
|
||||||
|
|
||||||
|
* February 19
|
||||||
|
|
||||||
|
- Vlad Dinulescu added ares_parse_ns_reply().
|
||||||
|
|
||||||
|
* February 13
|
||||||
|
|
||||||
|
- Yang Tse: Fix failure to get the search sequence of /etc/hosts and
|
||||||
|
DNS from /etc/nsswitch.conf, /etc/host.conf or /etc/svc.conf when
|
||||||
|
/etc/resolv.conf did not exist or was unable to read it.
|
||||||
|
|
||||||
|
* November 22
|
||||||
|
|
||||||
|
- Install ares_dns.h too
|
||||||
|
|
||||||
|
- Michael Wallner fixed this problem: When I set domains in the options
|
||||||
|
struct, and there are domain/search entries in /etc/resolv.conf, the domains
|
||||||
|
of the options struct will be overridden.
|
||||||
|
|
||||||
|
* November 6
|
||||||
|
|
||||||
|
- Yang Tse removed a couple of potential zero size memory allocations.
|
||||||
|
|
||||||
|
- Andreas Rieke fixed the line endings in the areslib.dsp file that I (Daniel)
|
||||||
|
broke in the 1.3.2 release. We should switch to a system where that file is
|
||||||
|
auto-generated. We could rip some code for that from curl...
|
||||||
|
|
||||||
|
Version 1.3.2 (November 3, 2006)
|
||||||
|
|
||||||
|
* October 12 2006
|
||||||
|
|
||||||
|
- Prevent ares_getsock() to overflow if more than 16 sockets are used.
|
||||||
|
|
||||||
|
* September 11 2006
|
||||||
|
|
||||||
|
- Guilherme Balena Versiani: I noted a strange BUG in Win32 port
|
||||||
|
(ares_init.c/get_iphlpapi_dns_info() function): when I disable the network
|
||||||
|
by hand or disconnect the network cable in Windows 2000 or Windows XP, my
|
||||||
|
application gets 127.0.0.1 as the only name server. The problem comes from
|
||||||
|
'GetNetworkParams' function, that returns the empty string "" as the only
|
||||||
|
name server in that case. Moreover, the Windows implementation of
|
||||||
|
inet_addr() returns INADDR_LOOPBACK instead of INADDR_NONE.
|
||||||
|
|
||||||
|
* August 29 2006
|
||||||
|
|
||||||
|
- Brad Spencer did
|
||||||
|
|
||||||
|
o made ares_version.h use extern "C" for c++ compilers
|
||||||
|
o fixed compiler warnings in ares_getnameinfo.c
|
||||||
|
o fixed a buffer position init for TCP reads
|
||||||
|
|
||||||
|
* August 3 2006
|
||||||
|
|
||||||
|
- Ravi Pratap fixed ares_getsock() to actually return the proper bitmap and
|
||||||
|
not always zero!
|
||||||
|
|
||||||
|
Version 1.3.1 (June 24, 2006)
|
||||||
|
|
||||||
|
* July 23, 2006
|
||||||
|
|
||||||
|
- Gisle Vanem added getopt() to the ahost program. Currently accepts
|
||||||
|
only [-t {a|aaaa}] to specify address family in ares_gethostbyname().
|
||||||
|
|
||||||
|
* June 19, 2006
|
||||||
|
|
||||||
|
- (wahern) Removed "big endian" DNS section and RR data integer parser
|
||||||
|
macros from ares_dns.h, which break c-ares on my Sparc64. Bit-wise
|
||||||
|
operations in C operate on logical values. And in any event the octets are
|
||||||
|
already in big-endian (aka network) byte order so they're being reversed
|
||||||
|
(thus the source of the breakage).
|
||||||
|
|
||||||
|
* June 18, 2006
|
||||||
|
|
||||||
|
- William Ahern handles EAGAIN/EWOULDBLOCK errors in most of the I/O calls
|
||||||
|
from area_process.c.
|
||||||
|
|
||||||
|
TODO: Handle one last EAGAIN for a UDP socket send(2) in
|
||||||
|
ares__send_query().
|
||||||
|
|
||||||
|
* May 10, 2006
|
||||||
|
|
||||||
|
- Bram Matthys brought my attention to a libtool peculiarity where detecting
|
||||||
|
things such as C++ compiler actually is a bad thing and since we don't need
|
||||||
|
that detection I added a work-around, much inspired by a previous patch by
|
||||||
|
Paolo Bonzini. This also shortens the configure script quite a lot.
|
||||||
|
|
||||||
|
* May 3, 2006
|
||||||
|
|
||||||
|
- Nick Mathewson added the ARES_OPT_SOCK_STATE_CB option that when set makes
|
||||||
|
c-ares call a callback on socket state changes. A better way than the
|
||||||
|
ares_getsock() to get full control over the socket state.
|
||||||
|
|
||||||
|
* January 9, 2006
|
||||||
|
|
||||||
|
- Alexander Lazic improved the getservbyport_r() configure check.
|
||||||
|
|
||||||
|
* January 6, 2006
|
||||||
|
|
||||||
|
- Alexander Lazic pointed out that the buildconf should use the ACLOCAL_FLAGS
|
||||||
|
variable for easier controlling what it does and how it runs.
|
||||||
|
|
||||||
|
* January 5, 2006
|
||||||
|
|
||||||
|
- James Bursa fixed c-ares to find the hosts file on RISC OS, and made it
|
||||||
|
build with newer gcc versions that no longer defines "riscos".
|
||||||
|
|
||||||
|
* December 22
|
||||||
|
|
||||||
|
- Daniel Stenberg added ares_getsock() that extracts the set of sockets to
|
||||||
|
wait for action on. Similar to ares_fds() but not restricted to using
|
||||||
|
select() for the waiting.
|
||||||
|
|
||||||
|
* November 25
|
||||||
|
|
||||||
|
- Yang Tse fixed some send() / recv() compiler warnings
|
||||||
|
|
||||||
* September 18
|
* September 18
|
||||||
|
|
||||||
- Added constants that will be used by ares_getaddrinfo
|
- Added constants that will be used by ares_getaddrinfo
|
||||||
|
|
||||||
- Made ares_getnameinfo use the reentrant getservbyport (getservbyport_r) if it is
|
- Made ares_getnameinfo use the reentrant getservbyport (getservbyport_r) if it
|
||||||
available to ensure it works properly in a threaded environment.
|
is available to ensure it works properly in a threaded environment.
|
||||||
|
|
||||||
* September 10
|
* September 10
|
||||||
|
|
||||||
- configure fix for detecting a member in the sockaddr_in6 struct which failed
|
- configure fix for detecting a member in the sockaddr_in6 struct which failed
|
||||||
on ipv6-enabled HP-UX 11.00
|
on ipv6-enabled HP-UX 11.00
|
||||||
|
|
||||||
Version 1.3.0 (August 29, 2004)
|
Version 1.3.0 (August 29, 2005)
|
||||||
|
|
||||||
* August 21
|
* August 21
|
||||||
|
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ Makefile.in
|
|||||||
Makefile.dj
|
Makefile.dj
|
||||||
Makefile.m32
|
Makefile.m32
|
||||||
Makefile.netware
|
Makefile.netware
|
||||||
|
Makefile.vc6
|
||||||
install-sh
|
install-sh
|
||||||
mkinstalldirs
|
mkinstalldirs
|
||||||
configure
|
configure
|
||||||
|
|||||||
@@ -4,15 +4,14 @@ lib_LTLIBRARIES = libcares.la
|
|||||||
|
|
||||||
man_MANS = $(MANPAGES)
|
man_MANS = $(MANPAGES)
|
||||||
|
|
||||||
MSVCFILES = vc/adig/adig.dep vc/adig/adig.dsp vc/adig/adig.mak \
|
MSVCFILES = vc/adig/adig.dep vc/adig/adig.dsp vc/vc.dsw vc/ahost/ahost.dep \
|
||||||
vc/adig/adig.plg vc/vc.dsw vc/ahost/ahost.dep vc/ahost/ahost.dsp \
|
vc/ahost/ahost.dsp vc/areslib/areslib.dep vc/areslib/areslib.dsp \
|
||||||
vc/ahost/ahost.mak vc/ahost/ahost.plg vc/areslib/areslib.dep \
|
vc/areslib/areslib.dsw
|
||||||
vc/areslib/areslib.dsp vc/areslib/areslib.mak vc/areslib/areslib.plg
|
|
||||||
|
|
||||||
# adig and ahost are just sample programs and thus not mentioned with the
|
# adig and ahost are just sample programs and thus not mentioned with the
|
||||||
# regular sources and headers
|
# regular sources and headers
|
||||||
EXTRA_DIST = CHANGES README.cares Makefile.inc adig.c ahost.c $(man_MANS) \
|
EXTRA_DIST = CHANGES README.cares Makefile.inc adig.c ahost.c $(man_MANS) \
|
||||||
$(MSVCFILES) AUTHORS
|
$(MSVCFILES) AUTHORS config-win32.h
|
||||||
|
|
||||||
|
|
||||||
VER=-version-info 1:0:0
|
VER=-version-info 1:0:0
|
||||||
@@ -44,7 +43,13 @@ VER=-version-info 1:0:0
|
|||||||
# set age to 0. (c:r:a=0)
|
# set age to 0. (c:r:a=0)
|
||||||
#
|
#
|
||||||
|
|
||||||
libcares_la_LDFLAGS = $(VER)
|
if NO_UNDEFINED
|
||||||
|
# The -no-undefined flag is crucial for this to build fine on some platforms
|
||||||
|
UNDEF = -no-undefined
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
libcares_la_LDFLAGS = $(UNDEF) $(VER)
|
||||||
|
|
||||||
# Makefile.inc provides the CSOURCES and HHEADERS defines
|
# Makefile.inc provides the CSOURCES and HHEADERS defines
|
||||||
include Makefile.inc
|
include Makefile.inc
|
||||||
@@ -54,7 +59,7 @@ libcares_la_SOURCES = $(CSOURCES) $(HHEADERS)
|
|||||||
# where to install the c-ares headers
|
# where to install the c-ares headers
|
||||||
libcares_ladir = $(includedir)
|
libcares_ladir = $(includedir)
|
||||||
# what headers to install on 'make install':
|
# what headers to install on 'make install':
|
||||||
libcares_la_HEADERS = ares.h ares_version.h
|
libcares_la_HEADERS = ares.h ares_version.h ares_dns.h
|
||||||
|
|
||||||
# Make files named *.dist replace the file without .dist extension
|
# Make files named *.dist replace the file without .dist extension
|
||||||
dist-hook:
|
dist-hook:
|
||||||
|
|||||||
@@ -2,34 +2,63 @@
|
|||||||
# c-ares Makefile for djgpp/gcc/Watt-32.
|
# c-ares Makefile for djgpp/gcc/Watt-32.
|
||||||
# By Gisle Vanem <giva@bgnett.no> 2004.
|
# By Gisle Vanem <giva@bgnett.no> 2004.
|
||||||
#
|
#
|
||||||
.SUFFIXES: .exe
|
# $Id$
|
||||||
|
|
||||||
|
TOPDIR = ..
|
||||||
|
|
||||||
|
include ../packages/DOS/common.dj
|
||||||
|
|
||||||
include Makefile.inc
|
include Makefile.inc
|
||||||
|
|
||||||
WATT32_ROOT = $(subst \,/,$(WATT_ROOT))
|
CFLAGS += -DWATT32 -DHAVE_AF_INET6 -DHAVE_PF_INET6 -DHAVE_FIONBIO \
|
||||||
|
-DHAVE_STRUCT_IN6_ADDR -DHAVE_SOCKADDR_IN6_SIN6_SCOPE_ID \
|
||||||
|
-DHAVE_SYS_TIME_H -DHAVE_STRUCT_SOCKADDR_IN6 -DHAVE_STRUCT_ADDRINFO \
|
||||||
|
-DHAVE_SIGNAL_H -DHAVE_SIG_ATOMIC_T -DRETSIGTYPE='void' -DHAVE_PROCESS_H \
|
||||||
|
-DHAVE_ARPA_NAMESER_H -DNS_INADDRSZ=4 -DHAVE_RECV -DHAVE_SEND \
|
||||||
|
-DSEND_TYPE_ARG1='int' -DSEND_QUAL_ARG2='const' \
|
||||||
|
-DSEND_TYPE_ARG2='void*' -DSEND_TYPE_ARG3='int' \
|
||||||
|
-DSEND_TYPE_ARG4='int' -DSEND_TYPE_RETV='int' \
|
||||||
|
-DRECV_TYPE_ARG1='int' -DRECV_TYPE_ARG2='void*' \
|
||||||
|
-DRECV_TYPE_ARG3='int' -DRECV_TYPE_ARG4='int' \
|
||||||
|
-DRECV_TYPE_RETV='int' -DHAVE_STRUCT_TIMEVAL \
|
||||||
|
-UHAVE_CONFIG_H
|
||||||
|
|
||||||
CC = gcc
|
|
||||||
CFLAGS = -O2 -Wall -DWATT32 -Dselect=select_s -I$(WATT32_ROOT)/inc
|
|
||||||
LDFLAGS = -s
|
LDFLAGS = -s
|
||||||
EX_LIBS = $(WATT32_ROOT)/lib/libwatt.a
|
|
||||||
|
|
||||||
OBJ_DIR = djgpp
|
ifeq ($(USE_DEBUG),1)
|
||||||
|
EX_LIBS = ../lib/libcurl.a
|
||||||
|
OBJ_HACK = $(OBJECTS)
|
||||||
|
else
|
||||||
|
OBJ_HACK = libcares.a
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(USE_SSL),1)
|
||||||
|
EX_LIBS += $(OPENSSL_ROOT)/lib/libssl.a $(OPENSSL_ROOT)/lib/libcrypt.a
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(USE_ZLIB),1)
|
||||||
|
EX_LIBS += $(ZLIB_ROOT)/libz.a
|
||||||
|
CFLAGS += -DUSE_MANUAL
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(USE_IDNA),1)
|
||||||
|
EX_LIBS += $(LIBIDN_ROOT)/lib/dj_obj/libidn.a -liconv
|
||||||
|
endif
|
||||||
|
|
||||||
|
EX_LIBS += $(WATT32_ROOT)/lib/libwatt.a
|
||||||
|
|
||||||
OBJECTS = $(addprefix $(OBJ_DIR)/, $(CSOURCES:.c=.o))
|
OBJECTS = $(addprefix $(OBJ_DIR)/, $(CSOURCES:.c=.o))
|
||||||
|
|
||||||
all: $(OBJ_DIR) libcares.a ahost.exe adig.exe
|
all: $(OBJ_DIR) libcares.a ahost.exe adig.exe
|
||||||
@echo Welcome to c-ares.
|
@echo Welcome to c-ares.
|
||||||
|
|
||||||
$(OBJ_DIR):
|
|
||||||
- mkdir $(OBJ_DIR)
|
|
||||||
|
|
||||||
libcares.a: $(OBJECTS)
|
libcares.a: $(OBJECTS)
|
||||||
ar rs $@ $?
|
ar rs $@ $?
|
||||||
|
|
||||||
ahost.exe: ahost.c libcares.a
|
ahost.exe: ahost.c $(OBJ_HACK)
|
||||||
$(CC) $(LDFLAGS) $(CFLAGS) -o $@ $^ $(EX_LIBS)
|
$(CC) $(LDFLAGS) $(CFLAGS) -o $@ $^ $(EX_LIBS)
|
||||||
|
|
||||||
adig.exe: adig.c libcares.a
|
adig.exe: adig.c $(OBJ_HACK)
|
||||||
$(CC) $(LDFLAGS) $(CFLAGS) -o $@ $^ $(EX_LIBS)
|
$(CC) $(LDFLAGS) $(CFLAGS) -o $@ $^ $(EX_LIBS)
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
@@ -39,12 +68,5 @@ vclean realclean: clean
|
|||||||
rm -f ahost.exe adig.exe depend.dj
|
rm -f ahost.exe adig.exe depend.dj
|
||||||
- rmdir $(OBJ_DIR)
|
- rmdir $(OBJ_DIR)
|
||||||
|
|
||||||
$(OBJ_DIR)/%.o: %.c
|
|
||||||
$(CC) $(CFLAGS) -o $@ -c $<
|
|
||||||
@echo
|
|
||||||
|
|
||||||
depend:
|
|
||||||
$(CC) -MM $(CFLAGS) $(CSOURCES) | \
|
|
||||||
sed -e 's/^\([a-zA-Z0-9_-]*\.o:\)/$$(OBJ_DIR)\/\1/' > depend.dj
|
|
||||||
|
|
||||||
-include depend.dj
|
-include depend.dj
|
||||||
|
|
||||||
|
|||||||
@@ -1,18 +1,22 @@
|
|||||||
CSOURCES = ares_fds.c ares_process.c ares_free_hostent.c ares_query.c \
|
CSOURCES = ares_fds.c ares_getsock.c ares_process.c ares_free_hostent.c \
|
||||||
ares__close_sockets.c ares_free_string.c ares_search.c ares__get_hostent.c \
|
ares_query.c ares__close_sockets.c ares_free_string.c ares_search.c \
|
||||||
ares_gethostbyaddr.c ares_send.c ares__read_line.c ares_gethostbyname.c \
|
ares__get_hostent.c ares_gethostbyaddr.c ares_send.c ares__read_line.c \
|
||||||
ares_strerror.c ares_cancel.c ares_init.c ares_timeout.c ares_destroy.c \
|
ares_gethostbyname.c ares_strerror.c ares_cancel.c ares_init.c \
|
||||||
ares_mkquery.c ares_version.c ares_expand_name.c ares_parse_a_reply.c \
|
ares_timeout.c ares_destroy.c ares_mkquery.c ares_version.c \
|
||||||
windows_port.c ares_expand_string.c ares_parse_ptr_reply.c \
|
ares_expand_name.c ares_parse_a_reply.c windows_port.c \
|
||||||
ares_parse_aaaa_reply.c ares_getnameinfo.c inet_net_pton.c bitncmp.c \
|
ares_expand_string.c ares_parse_ptr_reply.c ares_parse_aaaa_reply.c \
|
||||||
inet_ntop.c
|
ares_getnameinfo.c inet_net_pton.c bitncmp.c inet_ntop.c \
|
||||||
|
ares_parse_ns_reply.c
|
||||||
|
|
||||||
HHEADERS = ares.h ares_private.h setup.h ares_dns.h ares_version.h \
|
HHEADERS = ares.h ares_private.h setup.h ares_dns.h ares_version.h \
|
||||||
nameser.h inet_net_pton.h inet_ntop.h ares_ipv6.h bitncmp.h
|
nameser.h inet_net_pton.h inet_ntop.h ares_ipv6.h bitncmp.h \
|
||||||
|
setup_once.h
|
||||||
|
|
||||||
MANPAGES= ares_destroy.3 ares_expand_name.3 ares_expand_string.3 ares_fds.3 \
|
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_free_hostent.3 ares_free_string.3 ares_gethostbyaddr.3 \
|
||||||
ares_gethostbyname.3 ares_init.3 ares_init_options.3 ares_mkquery.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_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_query.3 ares_search.3 ares_send.3 ares_strerror.3 ares_timeout.3 \
|
||||||
ares_version.3 ares_cancel.3 ares_parse_aaaa_reply.3 ares_getnameinfo.3
|
ares_version.3 ares_cancel.3 ares_parse_aaaa_reply.3 ares_getnameinfo.3 \
|
||||||
|
ares_getsock.3 ares_parse_ns_reply.3
|
||||||
|
|
||||||
|
|||||||
@@ -7,29 +7,21 @@
|
|||||||
## Quick hack by Guenter; comments to: /dev/nul
|
## Quick hack by Guenter; comments to: /dev/nul
|
||||||
|
|
||||||
CC = gcc
|
CC = gcc
|
||||||
AR = ar
|
|
||||||
RANLIB = ranlib
|
RANLIB = ranlib
|
||||||
STRIP = strip -g
|
|
||||||
#RM = rm -f
|
|
||||||
|
|
||||||
########################################################
|
########################################################
|
||||||
## Nothing more to do below this line!
|
## Nothing more to do below this line!
|
||||||
|
|
||||||
LIB=libcares.a
|
LIB=libcares.a
|
||||||
CC=gcc
|
CC=gcc
|
||||||
#CPPFLAGS=@CPPFLAGS@
|
CFLAGS=-O2 -Wall
|
||||||
WARN_FLAGS=-Wall
|
|
||||||
CFLAGS=-O2
|
|
||||||
CFLAGS+=${WARN_CFLAGS} ${ERROR_CFLAGS}
|
|
||||||
DEFS=-DMINGW32
|
|
||||||
LDFLAGS=-s
|
LDFLAGS=-s
|
||||||
LIBS=-lwsock32
|
LIBS=-lwsock32
|
||||||
ALL_CFLAGS=${CPPFLAGS} ${CFLAGS} ${DEFS}
|
|
||||||
|
|
||||||
MANPAGES := $(patsubst %.c,%.o,$(wildcard ares_*.3))
|
MANPAGES := $(patsubst %.c,%.o,$(wildcard ares_*.3))
|
||||||
|
|
||||||
OBJS := $(patsubst %.c,%.o,$(wildcard ares_*.c))
|
OBJS := $(patsubst %.c,%.o,$(wildcard ares_*.c))
|
||||||
OBJS += windows_port.o
|
OBJS += windows_port.o inet_ntop.o inet_net_pton.o bitncmp.o
|
||||||
|
|
||||||
$(LIB): ${OBJS}
|
$(LIB): ${OBJS}
|
||||||
ar cru $@ ${OBJS}
|
ar cru $@ ${OBJS}
|
||||||
@@ -51,7 +43,7 @@ ahost.exe: ahost.o $(LIB)
|
|||||||
${OBJS}: ares.h ares_dns.h ares_private.h
|
${OBJS}: ares.h ares_dns.h ares_private.h
|
||||||
|
|
||||||
.c.o:
|
.c.o:
|
||||||
${CC} -c ${ALL_CFLAGS} $<
|
${CC} -c ${CFLAGS} $<
|
||||||
|
|
||||||
check:
|
check:
|
||||||
|
|
||||||
@@ -73,3 +65,4 @@ clean:
|
|||||||
|
|
||||||
distclean: clean
|
distclean: clean
|
||||||
rm -f config.cache config.log config.status Makefile
|
rm -f config.cache config.log config.status Makefile
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
#################################################################
|
#################################################################
|
||||||
|
# $Id$
|
||||||
#
|
#
|
||||||
## Makefile for building libares.lib (NetWare version - gnu make)
|
## Makefile for building libares (NetWare version - gnu make)
|
||||||
## Use: make -f Makefile.netware
|
## Use: make -f Makefile.netware
|
||||||
##
|
##
|
||||||
## Comments to: Guenter Knauf <eflash@gmx.net>
|
## Comments to: Guenter Knauf http://www.gknw.de/phpbb
|
||||||
#
|
#
|
||||||
#################################################################
|
#################################################################
|
||||||
|
|
||||||
@@ -18,9 +19,9 @@ endif
|
|||||||
|
|
||||||
# Edit the vars below to change NLM target settings.
|
# Edit the vars below to change NLM target settings.
|
||||||
TARGETS = adig.nlm ahost.nlm
|
TARGETS = adig.nlm ahost.nlm
|
||||||
LTARGET = libcares.lib
|
LTARGET = libcares.$(LIBEXT)
|
||||||
VERSION = $(LIBCARES_VERSION)
|
VERSION = $(LIBCARES_VERSION)
|
||||||
COPYR = Copyright (C) 1996 - 2005, Daniel Stenberg, <daniel@haxx.se>
|
COPYR = Copyright (C) 1996 - 2007, Daniel Stenberg, <daniel@haxx.se>
|
||||||
DESCR = cURL $(subst .def,,$(notdir $@)) $(LIBCARES_VERSION_STR) - http://curl.haxx.se
|
DESCR = cURL $(subst .def,,$(notdir $@)) $(LIBCARES_VERSION_STR) - http://curl.haxx.se
|
||||||
MTSAFE = YES
|
MTSAFE = YES
|
||||||
STACK = 64000
|
STACK = 64000
|
||||||
@@ -72,6 +73,7 @@ LD = mwldnlm
|
|||||||
LDFLAGS = -nostdlib $(PRELUDE) $(OBJS) $(<:.def=.o) -o $@ -commandfile
|
LDFLAGS = -nostdlib $(PRELUDE) $(OBJS) $(<:.def=.o) -o $@ -commandfile
|
||||||
AR = mwldnlm
|
AR = mwldnlm
|
||||||
ARFLAGS = -type library -w nocmdline $(OBJDIR)/*.o -o
|
ARFLAGS = -type library -w nocmdline $(OBJDIR)/*.o -o
|
||||||
|
LIBEXT = lib
|
||||||
CFLAGS += -msgstyle gcc -gccinc -inline off -opt nointrinsics -proc 586
|
CFLAGS += -msgstyle gcc -gccinc -inline off -opt nointrinsics -proc 586
|
||||||
CFLAGS += -relax_pointers
|
CFLAGS += -relax_pointers
|
||||||
#CFLAGS += -w on
|
#CFLAGS += -w on
|
||||||
@@ -88,7 +90,8 @@ LD = nlmconv
|
|||||||
LDFLAGS = -T
|
LDFLAGS = -T
|
||||||
AR = ar
|
AR = ar
|
||||||
ARFLAGS = -cq
|
ARFLAGS = -cq
|
||||||
CFLAGS += -fno-builtin -fpack-struct -fpcc-struct-return -fno-strict-aliasing
|
LIBEXT = a
|
||||||
|
CFLAGS += -fno-builtin -fpcc-struct-return -fno-strict-aliasing
|
||||||
CFLAGS += -Wall -Wno-format -Wno-uninitialized # -pedantic
|
CFLAGS += -Wall -Wno-format -Wno-uninitialized # -pedantic
|
||||||
ifeq ($(LIBARCH),LIBC)
|
ifeq ($(LIBARCH),LIBC)
|
||||||
PRELUDE = $(SDK_LIBC)/imports/libcpre.gcc.o
|
PRELUDE = $(SDK_LIBC)/imports/libcpre.gcc.o
|
||||||
@@ -155,7 +158,7 @@ clean:
|
|||||||
-$(RM) -r $(OBJDIR)
|
-$(RM) -r $(OBJDIR)
|
||||||
-$(RM) -r arpa
|
-$(RM) -r arpa
|
||||||
|
|
||||||
%.lib: $(OBJS)
|
%.$(LIBEXT): $(OBJS)
|
||||||
@echo Creating $@
|
@echo Creating $@
|
||||||
@-$(RM) $@
|
@-$(RM) $@
|
||||||
@$(AR) $(ARFLAGS) $@ $^
|
@$(AR) $(ARFLAGS) $@ $^
|
||||||
@@ -255,9 +258,12 @@ config.h: Makefile.netware
|
|||||||
@echo $(DL)** Do not edit this file - it is created by make!$(DL) >> $@
|
@echo $(DL)** Do not edit this file - it is created by make!$(DL) >> $@
|
||||||
@echo $(DL)** All your changes will be lost!!$(DL) >> $@
|
@echo $(DL)** All your changes will be lost!!$(DL) >> $@
|
||||||
@echo $(DL)*/$(DL) >> $@
|
@echo $(DL)*/$(DL) >> $@
|
||||||
|
@echo $(DL)#ifndef NETWARE$(DL) >> $@
|
||||||
|
@echo $(DL)#error This $(notdir $@) is created for NetWare platform!$(DL) >> $@
|
||||||
|
@echo $(DL)#endif$(DL) >> $@
|
||||||
@echo $(DL)#define OS "i586-pc-NetWare"$(DL) >> $@
|
@echo $(DL)#define OS "i586-pc-NetWare"$(DL) >> $@
|
||||||
@echo $(DL)#define VERSION "$(LIBCURL_VERSION_STR)"$(DL) >> $@
|
@echo $(DL)#define VERSION "$(LIBCARES_VERSION_STR)"$(DL) >> $@
|
||||||
@echo $(DL)#define PACKAGE_BUGREPORT "curl-bug@haxx.se"$(DL) >> $@
|
@echo $(DL)#define PACKAGE_BUGREPORT "a suitable curl mailing list => http://curl.haxx.se/mail/"$(DL) >> $@
|
||||||
@echo $(DL)#define HAVE_ARPA_INET_H 1$(DL) >> $@
|
@echo $(DL)#define HAVE_ARPA_INET_H 1$(DL) >> $@
|
||||||
@echo $(DL)#define HAVE_ARPA_NAMESER_H 1$(DL) >> $@
|
@echo $(DL)#define HAVE_ARPA_NAMESER_H 1$(DL) >> $@
|
||||||
@echo $(DL)#define HAVE_ASSERT_H 1$(DL) >> $@
|
@echo $(DL)#define HAVE_ASSERT_H 1$(DL) >> $@
|
||||||
@@ -276,9 +282,13 @@ config.h: Makefile.netware
|
|||||||
@echo $(DL)#define HAVE_LONGLONG 1$(DL) >> $@
|
@echo $(DL)#define HAVE_LONGLONG 1$(DL) >> $@
|
||||||
@echo $(DL)#define HAVE_MALLOC_H 1$(DL) >> $@
|
@echo $(DL)#define HAVE_MALLOC_H 1$(DL) >> $@
|
||||||
@echo $(DL)#define HAVE_NETINET_IN_H 1$(DL) >> $@
|
@echo $(DL)#define HAVE_NETINET_IN_H 1$(DL) >> $@
|
||||||
|
@echo $(DL)#define HAVE_RECV 1$(DL) >> $@
|
||||||
@echo $(DL)#define HAVE_SELECT 1$(DL) >> $@
|
@echo $(DL)#define HAVE_SELECT 1$(DL) >> $@
|
||||||
|
@echo $(DL)#define HAVE_SEND 1$(DL) >> $@
|
||||||
@echo $(DL)#define HAVE_SETJMP_H 1$(DL) >> $@
|
@echo $(DL)#define HAVE_SETJMP_H 1$(DL) >> $@
|
||||||
@echo $(DL)#define HAVE_SIGNAL 1$(DL) >> $@
|
@echo $(DL)#define HAVE_SIGNAL 1$(DL) >> $@
|
||||||
|
@echo $(DL)#define HAVE_SIGNAL_H 1$(DL) >> $@
|
||||||
|
@echo $(DL)#define HAVE_SIG_ATOMIC_T 1$(DL) >> $@
|
||||||
@echo $(DL)#define HAVE_SOCKET 1$(DL) >> $@
|
@echo $(DL)#define HAVE_SOCKET 1$(DL) >> $@
|
||||||
@echo $(DL)#define HAVE_STDINT_H 1$(DL) >> $@
|
@echo $(DL)#define HAVE_STDINT_H 1$(DL) >> $@
|
||||||
@echo $(DL)#define HAVE_STDLIB_H 1$(DL) >> $@
|
@echo $(DL)#define HAVE_STDLIB_H 1$(DL) >> $@
|
||||||
@@ -297,15 +307,27 @@ config.h: Makefile.netware
|
|||||||
@echo $(DL)#define HAVE_TIME_H 1$(DL) >> $@
|
@echo $(DL)#define HAVE_TIME_H 1$(DL) >> $@
|
||||||
@echo $(DL)#define HAVE_UNAME 1$(DL) >> $@
|
@echo $(DL)#define HAVE_UNAME 1$(DL) >> $@
|
||||||
@echo $(DL)#define HAVE_UNISTD_H 1$(DL) >> $@
|
@echo $(DL)#define HAVE_UNISTD_H 1$(DL) >> $@
|
||||||
|
@echo $(DL)#define RECV_TYPE_ARG1 int$(DL) >> $@
|
||||||
|
@echo $(DL)#define RECV_TYPE_ARG2 char *$(DL) >> $@
|
||||||
|
@echo $(DL)#define RECV_TYPE_ARG3 int$(DL) >> $@
|
||||||
|
@echo $(DL)#define RECV_TYPE_ARG4 int$(DL) >> $@
|
||||||
|
@echo $(DL)#define RECV_TYPE_RETV int$(DL) >> $@
|
||||||
@echo $(DL)#define RETSIGTYPE void$(DL) >> $@
|
@echo $(DL)#define RETSIGTYPE void$(DL) >> $@
|
||||||
|
@echo $(DL)#define SEND_QUAL_ARG2$(DL) >> $@
|
||||||
|
@echo $(DL)#define SEND_TYPE_ARG1 int$(DL) >> $@
|
||||||
|
@echo $(DL)#define SEND_TYPE_ARG2 char *$(DL) >> $@
|
||||||
|
@echo $(DL)#define SEND_TYPE_ARG3 int$(DL) >> $@
|
||||||
|
@echo $(DL)#define SEND_TYPE_ARG4 int$(DL) >> $@
|
||||||
|
@echo $(DL)#define SEND_TYPE_RETV int$(DL) >> $@
|
||||||
@echo $(DL)#define SIZEOF_CURL_OFF_T 4$(DL) >> $@
|
@echo $(DL)#define SIZEOF_CURL_OFF_T 4$(DL) >> $@
|
||||||
@echo $(DL)#define STDC_HEADERS 1$(DL) >> $@
|
@echo $(DL)#define STDC_HEADERS 1$(DL) >> $@
|
||||||
@echo $(DL)#define TIME_WITH_SYS_TIME 1$(DL) >> $@
|
@echo $(DL)#define TIME_WITH_SYS_TIME 1$(DL) >> $@
|
||||||
@echo $(DL)#define HAVE_AF_INET6 1$(DL) >> $@
|
@echo $(DL)#define HAVE_AF_INET6 1$(DL) >> $@
|
||||||
@echo $(DL)#define HAVE_PF_INET6 1$(DL) >> $@
|
@echo $(DL)#define HAVE_PF_INET6 1$(DL) >> $@
|
||||||
|
@echo $(DL)#define HAVE_STRUCT_ADDRINFO 1$(DL) >> $@
|
||||||
@echo $(DL)#define HAVE_STRUCT_IN6_ADDR 1$(DL) >> $@
|
@echo $(DL)#define HAVE_STRUCT_IN6_ADDR 1$(DL) >> $@
|
||||||
@echo $(DL)#define HAVE_STRUCT_SOCKADDR_IN6 1$(DL) >> $@
|
@echo $(DL)#define HAVE_STRUCT_SOCKADDR_IN6 1$(DL) >> $@
|
||||||
@echo $(DL)#define HAVE_STRUCT_ADDRINFO 1$(DL) >> $@
|
@echo $(DL)#define HAVE_STRUCT_TIMEVAL 1$(DL) >> $@
|
||||||
@echo $(DL)#define SIZEOF_STRUCT_IN6_ADDR 16$(DL) >> $@
|
@echo $(DL)#define SIZEOF_STRUCT_IN6_ADDR 16$(DL) >> $@
|
||||||
@echo $(DL)#define SIZEOF_STRUCT_IN_ADDR 4$(DL) >> $@
|
@echo $(DL)#define SIZEOF_STRUCT_IN_ADDR 4$(DL) >> $@
|
||||||
ifdef NW_WINSOCK
|
ifdef NW_WINSOCK
|
||||||
@@ -316,6 +338,11 @@ else
|
|||||||
@echo $(DL)#define HAVE_SYS_SOCKIO_H 1$(DL) >> $@
|
@echo $(DL)#define HAVE_SYS_SOCKIO_H 1$(DL) >> $@
|
||||||
@echo $(DL)#define HAVE_NETDB_H 1$(DL) >> $@
|
@echo $(DL)#define HAVE_NETDB_H 1$(DL) >> $@
|
||||||
endif
|
endif
|
||||||
|
@echo $(DL)#ifdef __GNUC__$(DL) >> $@
|
||||||
|
@echo $(DL)#define HAVE_VARIADIC_MACROS_GCC 1$(DL) >> $@
|
||||||
|
@echo $(DL)#else$(DL) >> $@
|
||||||
|
@echo $(DL)#define HAVE_VARIADIC_MACROS_C99 1$(DL) >> $@
|
||||||
|
@echo $(DL)#endif$(DL) >> $@
|
||||||
ifdef OLD_NOVELLSDK
|
ifdef OLD_NOVELLSDK
|
||||||
@echo $(DL)#define socklen_t int$(DL) >> $@
|
@echo $(DL)#define socklen_t int$(DL) >> $@
|
||||||
endif
|
endif
|
||||||
|
|||||||
231
ares/Makefile.vc6
Normal file
231
ares/Makefile.vc6
Normal file
@@ -0,0 +1,231 @@
|
|||||||
|
# $Id$
|
||||||
|
#
|
||||||
|
# C-ares makefile for MSVC6+
|
||||||
|
# G. Vanem <giva@bgnett.no>.
|
||||||
|
#
|
||||||
|
|
||||||
|
CFG_MODEL = MD
|
||||||
|
DEBUG_MODEL = d
|
||||||
|
USE_WATT32 = 0
|
||||||
|
|
||||||
|
#
|
||||||
|
# Configurations:
|
||||||
|
# -MD - msvcrt.dll, threads, release (normal)
|
||||||
|
# -MDd - msvcrtd.dll, threads, debug
|
||||||
|
# -ML - libc, no threads, release
|
||||||
|
# -MLd - libc, no threads, debug
|
||||||
|
# -MT - libc, threads, release
|
||||||
|
# -MTd - libc, threads, debug
|
||||||
|
|
||||||
|
CC = cl
|
||||||
|
|
||||||
|
CFLAGS = -nologo -$(CFG_MODEL)$(DEBUG_MODEL) -W3 -Yd -Zi
|
||||||
|
LDFLAGS = -machine:i386 -map
|
||||||
|
|
||||||
|
OBJ_DIR = VC6_obj
|
||||||
|
DEF_FILE = cares.def
|
||||||
|
|
||||||
|
!if "$(USE_WATT32)" == "1"
|
||||||
|
CFLAGS = $(CFLAGS) -UWIN32 -DWATT32 -I$(WATT_ROOT)\inc
|
||||||
|
EX_LIBS = $(WATT_ROOT)\lib\wattcpvc_imp.lib
|
||||||
|
|
||||||
|
!else
|
||||||
|
CFLAGS = $(CFLAGS) -DWIN32 -DWIN32_LEAN_AND_MEAN
|
||||||
|
EX_LIBS = advapi32.lib ws2_32.lib
|
||||||
|
!endif
|
||||||
|
|
||||||
|
!if "$(DEBUG_MODEL)" == "d"
|
||||||
|
CFLAGS = $(CFLAGS) -D_DEBUG -GZ
|
||||||
|
LDFLAGS = $(LDFLAGS) -debug -fixed:no
|
||||||
|
|
||||||
|
!else
|
||||||
|
CFLAGS = $(CFLAGS) -O2 -Og
|
||||||
|
LDFLAGS = $(LDFLAGS) -release
|
||||||
|
!endif
|
||||||
|
|
||||||
|
OBJECTS = $(OBJ_DIR)\ares_fds.obj \
|
||||||
|
$(OBJ_DIR)\ares_process.obj \
|
||||||
|
$(OBJ_DIR)\ares_free_hostent.obj \
|
||||||
|
$(OBJ_DIR)\ares_query.obj \
|
||||||
|
$(OBJ_DIR)\ares__close_sockets.obj \
|
||||||
|
$(OBJ_DIR)\ares_free_string.obj \
|
||||||
|
$(OBJ_DIR)\ares_search.obj \
|
||||||
|
$(OBJ_DIR)\ares__get_hostent.obj \
|
||||||
|
$(OBJ_DIR)\ares_gethostbyaddr.obj \
|
||||||
|
$(OBJ_DIR)\ares_getsock.obj \
|
||||||
|
$(OBJ_DIR)\ares_send.obj \
|
||||||
|
$(OBJ_DIR)\ares__read_line.obj \
|
||||||
|
$(OBJ_DIR)\ares_gethostbyname.obj \
|
||||||
|
$(OBJ_DIR)\ares_getnameinfo.obj \
|
||||||
|
$(OBJ_DIR)\ares_strerror.obj \
|
||||||
|
$(OBJ_DIR)\ares_cancel.obj \
|
||||||
|
$(OBJ_DIR)\ares_init.obj \
|
||||||
|
$(OBJ_DIR)\ares_timeout.obj \
|
||||||
|
$(OBJ_DIR)\ares_destroy.obj \
|
||||||
|
$(OBJ_DIR)\ares_mkquery.obj \
|
||||||
|
$(OBJ_DIR)\ares_version.obj \
|
||||||
|
$(OBJ_DIR)\ares_expand_name.obj \
|
||||||
|
$(OBJ_DIR)\ares_parse_a_reply.obj \
|
||||||
|
$(OBJ_DIR)\ares_parse_aaaa_reply.obj \
|
||||||
|
$(OBJ_DIR)\ares_parse_ns_reply.obj \
|
||||||
|
$(OBJ_DIR)\windows_port.obj \
|
||||||
|
$(OBJ_DIR)\ares_expand_string.obj \
|
||||||
|
$(OBJ_DIR)\ares_parse_ptr_reply.obj \
|
||||||
|
$(OBJ_DIR)\bitncmp.obj \
|
||||||
|
$(OBJ_DIR)\inet_net_pton.obj \
|
||||||
|
$(OBJ_DIR)\inet_ntop.obj
|
||||||
|
|
||||||
|
all: $(OBJ_DIR) cares.lib cares.dll cares_imp.lib ahost.exe adig.exe
|
||||||
|
@echo Welcome to c-ares library and examples
|
||||||
|
|
||||||
|
$(OBJ_DIR):
|
||||||
|
mkdir $(OBJ_DIR)
|
||||||
|
|
||||||
|
cares.lib: $(OBJ_DIR) $(OBJECTS)
|
||||||
|
lib -nologo -out:$@ $(OBJECTS)
|
||||||
|
|
||||||
|
cares_imp.lib cares.dll: $(OBJ_DIR) $(DEF_FILE) $(OBJECTS)
|
||||||
|
link $(LDFLAGS) -dll -implib:cares_imp.lib -out:cares.dll \
|
||||||
|
-def:$(DEF_FILE) $(OBJECTS) $(EX_LIBS)
|
||||||
|
|
||||||
|
$(DEF_FILE): $(OBJECTS) Makefile.VC6
|
||||||
|
@echo ; Generated. DO NOT EDIT > $@
|
||||||
|
@echo LIBRARY cares.dll >> $@
|
||||||
|
@echo EXPORTS >> $@
|
||||||
|
@echo ares_cancel >> $@
|
||||||
|
@echo ares_destroy >> $@
|
||||||
|
@echo ares_expand_name >> $@
|
||||||
|
@echo ares_expand_string >> $@
|
||||||
|
@echo ares_fds >> $@
|
||||||
|
@echo ares_free_hostent >> $@
|
||||||
|
@echo ares_free_string >> $@
|
||||||
|
@echo ares_gethostbyaddr >> $@
|
||||||
|
@echo ares_gethostbyname >> $@
|
||||||
|
@echo ares_getsock >> $@
|
||||||
|
@echo ares_init >> $@
|
||||||
|
@echo ares_init_options >> $@
|
||||||
|
@echo ares_mkquery >> $@
|
||||||
|
@echo ares_parse_a_reply >> $@
|
||||||
|
@echo ares_parse_ptr_reply >> $@
|
||||||
|
@echo ares_parse_ns_reply >> $@
|
||||||
|
@echo ares_process >> $@
|
||||||
|
@echo ares_query >> $@
|
||||||
|
@echo ares_search >> $@
|
||||||
|
@echo ares_strerror >> $@
|
||||||
|
@echo ares_strncasecmp >> $@
|
||||||
|
@echo ares_strcasecmp >> $@
|
||||||
|
@echo ares_timeout >> $@
|
||||||
|
@echo ares_version >> $@
|
||||||
|
@echo ares_inet_net_pton >> $@
|
||||||
|
@echo ares_inet_ntop >> $@
|
||||||
|
@echo ares_inet_pton >> $@
|
||||||
|
@echo ares_writev >> $@
|
||||||
|
@echo ares_getnameinfo >> $@
|
||||||
|
@echo ares_gettimeofday >> $@
|
||||||
|
@echo ares_parse_aaaa_reply >> $@
|
||||||
|
|
||||||
|
ahost.exe: $(OBJ_DIR) $(OBJ_DIR)\ahost.obj $(OBJ_DIR)\getopt.obj cares_imp.lib
|
||||||
|
link $(LDFLAGS) -out:$@ $(OBJ_DIR)\ahost.obj $(OBJ_DIR)\getopt.obj cares_imp.lib $(EX_LIBS)
|
||||||
|
|
||||||
|
adig.exe: $(OBJ_DIR) $(OBJ_DIR)\adig.obj $(OBJ_DIR)\getopt.obj cares_imp.lib
|
||||||
|
link $(LDFLAGS) -out:$@ $(OBJ_DIR)\adig.obj $(OBJ_DIR)\getopt.obj cares_imp.lib $(EX_LIBS)
|
||||||
|
|
||||||
|
clean:
|
||||||
|
- del $(OBJ_DIR)\*.obj *.ilk *.pdb *.pbt *.pbi *.pbo *._xe *.map
|
||||||
|
|
||||||
|
vclean realclean: clean
|
||||||
|
- del $(DEF_FILE) cares.lib cares_imp.* cares.dll ahost.exe adig.exe
|
||||||
|
- rd $(OBJ_DIR)
|
||||||
|
|
||||||
|
.c{$(OBJ_DIR)}.obj:
|
||||||
|
$(CC) $(CFLAGS) -Fo$*.obj -c $<
|
||||||
|
|
||||||
|
#
|
||||||
|
# Copyright "gcc -MM .."
|
||||||
|
#
|
||||||
|
$(OBJ_DIR)\ares_fds.obj: ares_fds.c setup.h setup_once.h ares.h ares_private.h \
|
||||||
|
ares_ipv6.h
|
||||||
|
|
||||||
|
$(OBJ_DIR)\ares_process.obj: ares_process.c setup.h setup_once.h nameser.h \
|
||||||
|
ares.h ares_dns.h ares_private.h ares_ipv6.h
|
||||||
|
|
||||||
|
$(OBJ_DIR)\ares_free_hostent.obj: ares_free_hostent.c setup.h setup_once.h \
|
||||||
|
ares.h ares_private.h ares_ipv6.h
|
||||||
|
|
||||||
|
$(OBJ_DIR)\ares_query.obj: ares_query.c setup.h setup_once.h nameser.h \
|
||||||
|
ares.h ares_dns.h ares_private.h ares_ipv6.h
|
||||||
|
|
||||||
|
$(OBJ_DIR)\ares__close_sockets.obj: ares__close_sockets.c setup.h setup_once.h \
|
||||||
|
ares.h ares_private.h ares_ipv6.h
|
||||||
|
|
||||||
|
$(OBJ_DIR)\ares_free_string.obj: ares_free_string.c setup.h setup_once.h ares.h
|
||||||
|
|
||||||
|
$(OBJ_DIR)\ares_search.obj: ares_search.c setup.h setup_once.h nameser.h \
|
||||||
|
ares.h ares_private.h ares_ipv6.h
|
||||||
|
|
||||||
|
$(OBJ_DIR)\ares__get_hostent.obj: ares__get_hostent.c setup.h setup_once.h \
|
||||||
|
ares.h ares_private.h ares_ipv6.h inet_net_pton.h
|
||||||
|
|
||||||
|
$(OBJ_DIR)\ares_gethostbyaddr.obj: ares_gethostbyaddr.c setup.h setup_once.h \
|
||||||
|
nameser.h ares.h ares_private.h ares_ipv6.h inet_net_pton.h
|
||||||
|
|
||||||
|
$(OBJ_DIR)\ares_send.obj: ares_send.c setup.h setup_once.h nameser.h ares.h \
|
||||||
|
ares_dns.h ares_private.h ares_ipv6.h
|
||||||
|
|
||||||
|
$(OBJ_DIR)\ares__read_line.obj: ares__read_line.c setup.h setup_once.h ares.h \
|
||||||
|
ares_private.h ares_ipv6.h
|
||||||
|
|
||||||
|
$(OBJ_DIR)\ares_gethostbyname.obj: ares_gethostbyname.c setup.h setup_once.h \
|
||||||
|
nameser.h ares.h ares_private.h ares_ipv6.h inet_net_pton.h bitncmp.h
|
||||||
|
|
||||||
|
$(OBJ_DIR)\ares_strerror.obj: ares_strerror.c setup.h setup_once.h ares.h
|
||||||
|
|
||||||
|
$(OBJ_DIR)\ares_cancel.obj: ares_cancel.c setup.h setup_once.h ares.h \
|
||||||
|
ares_private.h ares_ipv6.h
|
||||||
|
|
||||||
|
$(OBJ_DIR)\ares_init.obj: ares_init.c setup.h setup_once.h nameser.h ares.h \
|
||||||
|
ares_private.h ares_ipv6.h inet_net_pton.h
|
||||||
|
|
||||||
|
$(OBJ_DIR)\ares_timeout.obj: ares_timeout.c setup.h setup_once.h ares.h \
|
||||||
|
ares_private.h ares_ipv6.h
|
||||||
|
|
||||||
|
$(OBJ_DIR)\ares_destroy.obj: ares_destroy.c setup.h setup_once.h ares.h \
|
||||||
|
ares_private.h ares_ipv6.h
|
||||||
|
|
||||||
|
$(OBJ_DIR)\ares_mkquery.obj: ares_mkquery.c setup.h setup_once.h nameser.h \
|
||||||
|
ares.h ares_dns.h
|
||||||
|
|
||||||
|
$(OBJ_DIR)\ares_version.obj: ares_version.c setup.h setup_once.h ares_version.h
|
||||||
|
|
||||||
|
$(OBJ_DIR)\ares_expand_name.obj: ares_expand_name.c setup.h setup_once.h \
|
||||||
|
nameser.h ares.h ares_private.h ares_ipv6.h
|
||||||
|
|
||||||
|
$(OBJ_DIR)\ares_parse_a_reply.obj: ares_parse_a_reply.c setup.h setup_once.h \
|
||||||
|
nameser.h ares.h ares_dns.h ares_private.h ares_ipv6.h
|
||||||
|
|
||||||
|
$(OBJ_DIR)\windows_port.obj: windows_port.c setup.h setup_once.h nameser.h \
|
||||||
|
ares.h ares_private.h ares_ipv6.h
|
||||||
|
|
||||||
|
$(OBJ_DIR)\ares_expand_string.obj: ares_expand_string.c setup.h setup_once.h \
|
||||||
|
nameser.h ares.h ares_private.h ares_ipv6.h
|
||||||
|
|
||||||
|
$(OBJ_DIR)\ares_parse_ptr_reply.obj: ares_parse_ptr_reply.c setup.h \
|
||||||
|
setup_once.h nameser.h ares.h ares_dns.h ares_private.h ares_ipv6.h
|
||||||
|
|
||||||
|
$(OBJ_DIR)\ares_parse_aaaa_reply.obj: ares_parse_aaaa_reply.c setup.h \
|
||||||
|
setup_once.h nameser.h ares.h ares_dns.h inet_net_pton.h ares_private.h \
|
||||||
|
ares_ipv6.h
|
||||||
|
|
||||||
|
$(OBJ_DIR)\ares_parse_ns_reply.obj: ares_parse_ns_reply.c setup.h \
|
||||||
|
setup_once.h nameser.h ares.h ares_dns.h ares_private.h ares_ipv6.h
|
||||||
|
|
||||||
|
$(OBJ_DIR)\ares_getnameinfo.obj: ares_getnameinfo.c setup.h setup_once.h \
|
||||||
|
nameser.h ares.h ares_private.h ares_ipv6.h inet_ntop.h
|
||||||
|
|
||||||
|
$(OBJ_DIR)\inet_net_pton.obj: inet_net_pton.c setup.h setup_once.h nameser.h \
|
||||||
|
ares_ipv6.h inet_net_pton.h
|
||||||
|
|
||||||
|
$(OBJ_DIR)\bitncmp.obj: bitncmp.c bitncmp.h
|
||||||
|
|
||||||
|
$(OBJ_DIR)\inet_ntop.obj: inet_ntop.c setup.h setup_once.h nameser.h \
|
||||||
|
ares_ipv6.h inet_ntop.h
|
||||||
1281
ares/acinclude.m4
1281
ares/acinclude.m4
File diff suppressed because it is too large
Load Diff
102
ares/adig.c
102
ares/adig.c
@@ -1,4 +1,6 @@
|
|||||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
|
*
|
||||||
|
* $Id$
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this
|
* Permission to use, copy, modify, and distribute this
|
||||||
* software and its documentation for any purpose and without
|
* software and its documentation for any purpose and without
|
||||||
@@ -14,30 +16,38 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "setup.h"
|
#include "setup.h"
|
||||||
#include <sys/types.h>
|
|
||||||
|
|
||||||
#ifdef WIN32
|
#if defined(WIN32) && !defined(WATT32)
|
||||||
#include "nameser.h"
|
#include "nameser.h"
|
||||||
#else
|
#else
|
||||||
|
#ifdef HAVE_SYS_TIME_H
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
|
#endif
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
#include <arpa/inet.h>
|
#include <arpa/inet.h>
|
||||||
#include <arpa/nameser.h>
|
#include <arpa/nameser.h>
|
||||||
|
#ifdef HAVE_UNISTD_H
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
#endif
|
||||||
#include <netdb.h>
|
#include <netdb.h>
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef HAVE_GETOPT_H
|
||||||
|
#include <getopt.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
|
||||||
#include "ares.h"
|
#include "ares.h"
|
||||||
#include "ares_dns.h"
|
#include "ares_dns.h"
|
||||||
|
#include "inet_ntop.h"
|
||||||
|
|
||||||
#ifndef INADDR_NONE
|
#ifdef WATT32
|
||||||
#define INADDR_NONE 0xffffffff
|
#undef WIN32 /* Redefined in MingW headers */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Mac OS X portability check */
|
/* Mac OS X portability check */
|
||||||
@@ -45,8 +55,10 @@
|
|||||||
#define T_SRV 33 /* server selection */
|
#define T_SRV 33 /* server selection */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef optind
|
||||||
extern int optind;
|
extern int optind;
|
||||||
extern char *optarg;
|
extern char *optarg;
|
||||||
|
#endif
|
||||||
|
|
||||||
struct nv {
|
struct nv {
|
||||||
const char *name;
|
const char *name;
|
||||||
@@ -142,8 +154,8 @@ int main(int argc, char **argv)
|
|||||||
fd_set read_fds, write_fds;
|
fd_set read_fds, write_fds;
|
||||||
struct timeval *tvp, tv;
|
struct timeval *tvp, tv;
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef USE_WINSOCK
|
||||||
WORD wVersionRequested = MAKEWORD(1,1);
|
WORD wVersionRequested = MAKEWORD(USE_WINSOCK,USE_WINSOCK);
|
||||||
WSADATA wsaData;
|
WSADATA wsaData;
|
||||||
WSAStartup(wVersionRequested, &wsaData);
|
WSAStartup(wVersionRequested, &wsaData);
|
||||||
#endif
|
#endif
|
||||||
@@ -151,10 +163,16 @@ int main(int argc, char **argv)
|
|||||||
options.flags = ARES_FLAG_NOCHECKRESP;
|
options.flags = ARES_FLAG_NOCHECKRESP;
|
||||||
options.servers = NULL;
|
options.servers = NULL;
|
||||||
options.nservers = 0;
|
options.nservers = 0;
|
||||||
while ((c = getopt(argc, argv, "f:s:c:t:T:U:")) != -1)
|
while ((c = getopt(argc, argv, "df:s:c:t:T:U:")) != -1)
|
||||||
{
|
{
|
||||||
switch (c)
|
switch (c)
|
||||||
{
|
{
|
||||||
|
case 'd':
|
||||||
|
#ifdef WATT32
|
||||||
|
dbug_init();
|
||||||
|
#endif
|
||||||
|
break;
|
||||||
|
|
||||||
case 'f':
|
case 'f':
|
||||||
/* Add a flag. */
|
/* Add a flag. */
|
||||||
for (i = 0; i < nflags; i++)
|
for (i = 0; i < nflags; i++)
|
||||||
@@ -214,17 +232,17 @@ int main(int argc, char **argv)
|
|||||||
|
|
||||||
case 'T':
|
case 'T':
|
||||||
/* Set the TCP port number. */
|
/* Set the TCP port number. */
|
||||||
if (!isdigit((unsigned char)*optarg))
|
if (!ISDIGIT(*optarg))
|
||||||
usage();
|
usage();
|
||||||
options.tcp_port = strtol(optarg, NULL, 0);
|
options.tcp_port = (unsigned short)strtol(optarg, NULL, 0);
|
||||||
optmask |= ARES_OPT_TCP_PORT;
|
optmask |= ARES_OPT_TCP_PORT;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'U':
|
case 'U':
|
||||||
/* Set the UDP port number. */
|
/* Set the UDP port number. */
|
||||||
if (!isdigit((unsigned char)*optarg))
|
if (!ISDIGIT(*optarg))
|
||||||
usage();
|
usage();
|
||||||
options.udp_port = strtol(optarg, NULL, 0);
|
options.udp_port = (unsigned short)strtol(optarg, NULL, 0);
|
||||||
optmask |= ARES_OPT_UDP_PORT;
|
optmask |= ARES_OPT_UDP_PORT;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -266,7 +284,7 @@ int main(int argc, char **argv)
|
|||||||
break;
|
break;
|
||||||
tvp = ares_timeout(channel, NULL, &tv);
|
tvp = ares_timeout(channel, NULL, &tv);
|
||||||
count = select(nfds, &read_fds, &write_fds, NULL, tvp);
|
count = select(nfds, &read_fds, &write_fds, NULL, tvp);
|
||||||
if (count < 0 && errno != EINVAL)
|
if (count < 0 && SOCKERRNO != EINVAL)
|
||||||
{
|
{
|
||||||
perror("select");
|
perror("select");
|
||||||
return 1;
|
return 1;
|
||||||
@@ -275,6 +293,11 @@ int main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
ares_destroy(channel);
|
ares_destroy(channel);
|
||||||
|
|
||||||
|
#ifdef USE_WINSOCK
|
||||||
|
WSACleanup();
|
||||||
|
#endif
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -385,7 +408,7 @@ static const unsigned char *display_question(const unsigned char *aptr,
|
|||||||
*/
|
*/
|
||||||
if (aptr + QFIXEDSZ > abuf + alen)
|
if (aptr + QFIXEDSZ > abuf + alen)
|
||||||
{
|
{
|
||||||
free(name);
|
ares_free_string(name);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -401,7 +424,7 @@ static const unsigned char *display_question(const unsigned char *aptr,
|
|||||||
if (dnsclass != C_IN)
|
if (dnsclass != C_IN)
|
||||||
printf("\t%s", class_name(dnsclass));
|
printf("\t%s", class_name(dnsclass));
|
||||||
printf("\t%s\n", type_name(type));
|
printf("\t%s\n", type_name(type));
|
||||||
free(name);
|
ares_free_string(name);
|
||||||
return aptr;
|
return aptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -412,7 +435,7 @@ static const unsigned char *display_rr(const unsigned char *aptr,
|
|||||||
char *name;
|
char *name;
|
||||||
int type, dnsclass, ttl, dlen, status;
|
int type, dnsclass, ttl, dlen, status;
|
||||||
long len;
|
long len;
|
||||||
struct in_addr addr;
|
char addr[46];
|
||||||
|
|
||||||
/* Parse the RR name. */
|
/* Parse the RR name. */
|
||||||
status = ares_expand_name(aptr, abuf, alen, &name, &len);
|
status = ares_expand_name(aptr, abuf, alen, &name, &len);
|
||||||
@@ -425,7 +448,7 @@ static const unsigned char *display_rr(const unsigned char *aptr,
|
|||||||
*/
|
*/
|
||||||
if (aptr + RRFIXEDSZ > abuf + alen)
|
if (aptr + RRFIXEDSZ > abuf + alen)
|
||||||
{
|
{
|
||||||
free(name);
|
ares_free_string(name);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -438,7 +461,7 @@ static const unsigned char *display_rr(const unsigned char *aptr,
|
|||||||
aptr += RRFIXEDSZ;
|
aptr += RRFIXEDSZ;
|
||||||
if (aptr + dlen > abuf + alen)
|
if (aptr + dlen > abuf + alen)
|
||||||
{
|
{
|
||||||
free(name);
|
ares_free_string(name);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -447,7 +470,7 @@ static const unsigned char *display_rr(const unsigned char *aptr,
|
|||||||
if (dnsclass != C_IN)
|
if (dnsclass != C_IN)
|
||||||
printf("\t%s", class_name(dnsclass));
|
printf("\t%s", class_name(dnsclass));
|
||||||
printf("\t%s", type_name(type));
|
printf("\t%s", type_name(type));
|
||||||
free(name);
|
ares_free_string(name);
|
||||||
|
|
||||||
/* Display the RR data. Don't touch aptr. */
|
/* Display the RR data. Don't touch aptr. */
|
||||||
switch (type)
|
switch (type)
|
||||||
@@ -465,7 +488,7 @@ static const unsigned char *display_rr(const unsigned char *aptr,
|
|||||||
if (status != ARES_SUCCESS)
|
if (status != ARES_SUCCESS)
|
||||||
return NULL;
|
return NULL;
|
||||||
printf("\t%s.", name);
|
printf("\t%s.", name);
|
||||||
free(name);
|
ares_free_string(name);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case T_HINFO:
|
case T_HINFO:
|
||||||
@@ -474,12 +497,12 @@ static const unsigned char *display_rr(const unsigned char *aptr,
|
|||||||
len = *p;
|
len = *p;
|
||||||
if (p + len + 1 > aptr + dlen)
|
if (p + len + 1 > aptr + dlen)
|
||||||
return NULL;
|
return NULL;
|
||||||
printf("\t%.*s", len, p + 1);
|
printf("\t%.*s", (int)len, p + 1);
|
||||||
p += len + 1;
|
p += len + 1;
|
||||||
len = *p;
|
len = *p;
|
||||||
if (p + len + 1 > aptr + dlen)
|
if (p + len + 1 > aptr + dlen)
|
||||||
return NULL;
|
return NULL;
|
||||||
printf("\t%.*s", len, p + 1);
|
printf("\t%.*s", (int)len, p + 1);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case T_MINFO:
|
case T_MINFO:
|
||||||
@@ -489,13 +512,13 @@ static const unsigned char *display_rr(const unsigned char *aptr,
|
|||||||
if (status != ARES_SUCCESS)
|
if (status != ARES_SUCCESS)
|
||||||
return NULL;
|
return NULL;
|
||||||
printf("\t%s.", name);
|
printf("\t%s.", name);
|
||||||
free(name);
|
ares_free_string(name);
|
||||||
p += len;
|
p += len;
|
||||||
status = ares_expand_name(p, abuf, alen, &name, &len);
|
status = ares_expand_name(p, abuf, alen, &name, &len);
|
||||||
if (status != ARES_SUCCESS)
|
if (status != ARES_SUCCESS)
|
||||||
return NULL;
|
return NULL;
|
||||||
printf("\t%s.", name);
|
printf("\t%s.", name);
|
||||||
free(name);
|
ares_free_string(name);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case T_MX:
|
case T_MX:
|
||||||
@@ -504,12 +527,12 @@ static const unsigned char *display_rr(const unsigned char *aptr,
|
|||||||
*/
|
*/
|
||||||
if (dlen < 2)
|
if (dlen < 2)
|
||||||
return NULL;
|
return NULL;
|
||||||
printf("\t%d", (aptr[0] << 8) | aptr[1]);
|
printf("\t%d", DNS__16BIT(aptr));
|
||||||
status = ares_expand_name(aptr + 2, abuf, alen, &name, &len);
|
status = ares_expand_name(aptr + 2, abuf, alen, &name, &len);
|
||||||
if (status != ARES_SUCCESS)
|
if (status != ARES_SUCCESS)
|
||||||
return NULL;
|
return NULL;
|
||||||
printf("\t%s.", name);
|
printf("\t%s.", name);
|
||||||
free(name);
|
ares_free_string(name);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case T_SOA:
|
case T_SOA:
|
||||||
@@ -521,22 +544,20 @@ static const unsigned char *display_rr(const unsigned char *aptr,
|
|||||||
if (status != ARES_SUCCESS)
|
if (status != ARES_SUCCESS)
|
||||||
return NULL;
|
return NULL;
|
||||||
printf("\t%s.\n", name);
|
printf("\t%s.\n", name);
|
||||||
free(name);
|
ares_free_string(name);
|
||||||
p += len;
|
p += len;
|
||||||
status = ares_expand_name(p, abuf, alen, &name, &len);
|
status = ares_expand_name(p, abuf, alen, &name, &len);
|
||||||
if (status != ARES_SUCCESS)
|
if (status != ARES_SUCCESS)
|
||||||
return NULL;
|
return NULL;
|
||||||
printf("\t\t\t\t\t\t%s.\n", name);
|
printf("\t\t\t\t\t\t%s.\n", name);
|
||||||
free(name);
|
ares_free_string(name);
|
||||||
p += len;
|
p += len;
|
||||||
if (p + 20 > aptr + dlen)
|
if (p + 20 > aptr + dlen)
|
||||||
return NULL;
|
return NULL;
|
||||||
printf("\t\t\t\t\t\t( %d %d %d %d %d )",
|
printf("\t\t\t\t\t\t( %lu %lu %lu %lu %lu )",
|
||||||
(p[0] << 24) | (p[1] << 16) | (p[2] << 8) | p[3],
|
(unsigned long)DNS__32BIT(p), (unsigned long)DNS__32BIT(p+4),
|
||||||
(p[4] << 24) | (p[5] << 16) | (p[6] << 8) | p[7],
|
(unsigned long)DNS__32BIT(p+8), (unsigned long)DNS__32BIT(p+12),
|
||||||
(p[8] << 24) | (p[9] << 16) | (p[10] << 8) | p[11],
|
(unsigned long)DNS__32BIT(p+16));
|
||||||
(p[12] << 24) | (p[13] << 16) | (p[14] << 8) | p[15],
|
|
||||||
(p[16] << 24) | (p[17] << 16) | (p[18] << 8) | p[19]);
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case T_TXT:
|
case T_TXT:
|
||||||
@@ -548,7 +569,7 @@ static const unsigned char *display_rr(const unsigned char *aptr,
|
|||||||
len = *p;
|
len = *p;
|
||||||
if (p + len + 1 > aptr + dlen)
|
if (p + len + 1 > aptr + dlen)
|
||||||
return NULL;
|
return NULL;
|
||||||
printf("\t%.*s", len, p + 1);
|
printf("\t%.*s", (int)len, p + 1);
|
||||||
p += len + 1;
|
p += len + 1;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -557,8 +578,14 @@ static const unsigned char *display_rr(const unsigned char *aptr,
|
|||||||
/* The RR data is a four-byte Internet address. */
|
/* The RR data is a four-byte Internet address. */
|
||||||
if (dlen != 4)
|
if (dlen != 4)
|
||||||
return NULL;
|
return NULL;
|
||||||
memcpy(&addr, aptr, sizeof(struct in_addr));
|
printf("\t%s", ares_inet_ntop(AF_INET,aptr,addr,sizeof(addr)));
|
||||||
printf("\t%s", inet_ntoa(addr));
|
break;
|
||||||
|
|
||||||
|
case T_AAAA:
|
||||||
|
/* The RR data is a 16-byte IPv6 address. */
|
||||||
|
if (dlen != 16)
|
||||||
|
return NULL;
|
||||||
|
printf("\t%s", ares_inet_ntop(AF_INET6,aptr,addr,sizeof(addr)));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case T_WKS:
|
case T_WKS:
|
||||||
@@ -578,11 +605,12 @@ static const unsigned char *display_rr(const unsigned char *aptr,
|
|||||||
if (status != ARES_SUCCESS)
|
if (status != ARES_SUCCESS)
|
||||||
return NULL;
|
return NULL;
|
||||||
printf("\t%s.", name);
|
printf("\t%s.", name);
|
||||||
free(name);
|
ares_free_string(name);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
printf("\t[Unknown RR; cannot parse]");
|
printf("\t[Unknown RR; cannot parse]");
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
printf("\n");
|
printf("\n");
|
||||||
|
|
||||||
|
|||||||
109
ares/ahost.c
109
ares/ahost.c
@@ -1,4 +1,6 @@
|
|||||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
|
*
|
||||||
|
* $Id$
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this
|
* Permission to use, copy, modify, and distribute this
|
||||||
* software and its documentation for any purpose and without
|
* software and its documentation for any purpose and without
|
||||||
@@ -14,26 +16,43 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "setup.h"
|
#include "setup.h"
|
||||||
#include <sys/types.h>
|
|
||||||
|
|
||||||
#ifdef WIN32
|
#if !defined(WIN32) || defined(WATT32)
|
||||||
#else
|
#ifdef HAVE_SYS_TIME_H
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
|
#endif
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
#include <arpa/inet.h>
|
#include <arpa/inet.h>
|
||||||
#include <netdb.h>
|
#include <netdb.h>
|
||||||
|
#ifdef HAVE_UNISTD_H
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
#ifdef HAVE_GETOPT_H
|
||||||
|
#include <getopt.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "ares.h"
|
#include "ares.h"
|
||||||
#include "ares_dns.h"
|
#include "ares_dns.h"
|
||||||
|
#include "inet_ntop.h"
|
||||||
|
#include "inet_net_pton.h"
|
||||||
|
|
||||||
#ifndef INADDR_NONE
|
#ifndef optind
|
||||||
#define INADDR_NONE 0xffffffff
|
extern int optind;
|
||||||
|
extern char *optarg;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef HAVE_STRUCT_IN6_ADDR
|
||||||
|
struct in6_addr
|
||||||
|
{
|
||||||
|
unsigned char s6_addr[16];
|
||||||
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static void callback(void *arg, int status, struct hostent *host);
|
static void callback(void *arg, int status, struct hostent *host);
|
||||||
@@ -42,18 +61,45 @@ static void usage(void);
|
|||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
ares_channel channel;
|
ares_channel channel;
|
||||||
int status, nfds;
|
int status, nfds, c, addr_family = AF_INET;
|
||||||
fd_set read_fds, write_fds;
|
fd_set read_fds, write_fds;
|
||||||
struct timeval *tvp, tv;
|
struct timeval *tvp, tv;
|
||||||
struct in_addr addr;
|
struct in_addr addr4;
|
||||||
|
struct in6_addr addr6;
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef USE_WINSOCK
|
||||||
WORD wVersionRequested = MAKEWORD(1,1);
|
WORD wVersionRequested = MAKEWORD(USE_WINSOCK,USE_WINSOCK);
|
||||||
WSADATA wsaData;
|
WSADATA wsaData;
|
||||||
WSAStartup(wVersionRequested, &wsaData);
|
WSAStartup(wVersionRequested, &wsaData);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (argc <= 1)
|
while ((c = getopt(argc,argv,"dt:h")) != -1)
|
||||||
|
{
|
||||||
|
switch (c)
|
||||||
|
{
|
||||||
|
case 'd':
|
||||||
|
#ifdef WATT32
|
||||||
|
dbug_init();
|
||||||
|
#endif
|
||||||
|
break;
|
||||||
|
case 't':
|
||||||
|
if (!strcasecmp(optarg,"a"))
|
||||||
|
addr_family = AF_INET;
|
||||||
|
else if (!strcasecmp(optarg,"aaaa"))
|
||||||
|
addr_family = AF_INET6;
|
||||||
|
else
|
||||||
|
usage();
|
||||||
|
break;
|
||||||
|
case 'h':
|
||||||
|
default:
|
||||||
|
usage();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
argc -= optind;
|
||||||
|
argv += optind;
|
||||||
|
if (argc < 1)
|
||||||
usage();
|
usage();
|
||||||
|
|
||||||
status = ares_init(&channel);
|
status = ares_init(&channel);
|
||||||
@@ -64,15 +110,21 @@ int main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Initiate the queries, one per command-line argument. */
|
/* Initiate the queries, one per command-line argument. */
|
||||||
for (argv++; *argv; argv++)
|
for ( ; *argv; argv++)
|
||||||
{
|
{
|
||||||
addr.s_addr = inet_addr(*argv);
|
if (ares_inet_pton(AF_INET, *argv, &addr4) == 1)
|
||||||
if (addr.s_addr == INADDR_NONE)
|
{
|
||||||
ares_gethostbyname(channel, *argv, AF_INET, callback, *argv);
|
ares_gethostbyaddr(channel, &addr4, sizeof(addr4), AF_INET, callback,
|
||||||
|
*argv);
|
||||||
|
}
|
||||||
|
else if (ares_inet_pton(AF_INET6, *argv, &addr6) == 1)
|
||||||
|
{
|
||||||
|
ares_gethostbyaddr(channel, &addr6, sizeof(addr6), AF_INET6, callback,
|
||||||
|
*argv);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ares_gethostbyaddr(channel, &addr, sizeof(addr), AF_INET, callback,
|
ares_gethostbyname(channel, *argv, addr_family, callback, *argv);
|
||||||
*argv);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -90,12 +142,16 @@ int main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
ares_destroy(channel);
|
ares_destroy(channel);
|
||||||
|
|
||||||
|
#ifdef USE_WINSOCK
|
||||||
|
WSACleanup();
|
||||||
|
#endif
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void callback(void *arg, int status, struct hostent *host)
|
static void callback(void *arg, int status, struct hostent *host)
|
||||||
{
|
{
|
||||||
struct in_addr addr;
|
|
||||||
char **p;
|
char **p;
|
||||||
|
|
||||||
if (status != ARES_SUCCESS)
|
if (status != ARES_SUCCESS)
|
||||||
@@ -106,13 +162,26 @@ static void callback(void *arg, int status, struct hostent *host)
|
|||||||
|
|
||||||
for (p = host->h_addr_list; *p; p++)
|
for (p = host->h_addr_list; *p; p++)
|
||||||
{
|
{
|
||||||
memcpy(&addr, *p, sizeof(struct in_addr));
|
char addr_buf[46] = "??";
|
||||||
printf("%-32s\t%s\n", host->h_name, inet_ntoa(addr));
|
|
||||||
|
ares_inet_ntop(host->h_addrtype, *p, addr_buf, sizeof(addr_buf));
|
||||||
|
printf("%-32s\t%s", host->h_name, addr_buf);
|
||||||
|
#if 0
|
||||||
|
if (host->h_aliases[0])
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
printf (", Aliases: ");
|
||||||
|
for (i = 0; host->h_aliases[i]; i++)
|
||||||
|
printf("%s ", host->h_aliases[i]);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
puts("");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void usage(void)
|
static void usage(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "usage: ahost {host|addr} ...\n");
|
fprintf(stderr, "usage: ahost [-t {a|aaaa}] {host|addr} ...\n");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|||||||
62
ares/ares.h
62
ares/ares.h
@@ -32,7 +32,7 @@
|
|||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#include <tcp.h>
|
#include <tcp.h>
|
||||||
#elif defined(WIN32)
|
#elif defined(WIN32)
|
||||||
#include <winsock.h>
|
#include <winsock2.h>
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#else
|
#else
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
@@ -70,8 +70,8 @@ extern "C" {
|
|||||||
#define ARES_EBADFLAGS 18
|
#define ARES_EBADFLAGS 18
|
||||||
|
|
||||||
/* ares_getaddrinfo error codes */
|
/* ares_getaddrinfo error codes */
|
||||||
#define ARES_ENONAME 19
|
#define ARES_ENONAME 19
|
||||||
#define ARES_EBADHINTS 20
|
#define ARES_EBADHINTS 20
|
||||||
|
|
||||||
/* Flag values */
|
/* Flag values */
|
||||||
#define ARES_FLAG_USEVC (1 << 0)
|
#define ARES_FLAG_USEVC (1 << 0)
|
||||||
@@ -93,6 +93,7 @@ extern "C" {
|
|||||||
#define ARES_OPT_SERVERS (1 << 6)
|
#define ARES_OPT_SERVERS (1 << 6)
|
||||||
#define ARES_OPT_DOMAINS (1 << 7)
|
#define ARES_OPT_DOMAINS (1 << 7)
|
||||||
#define ARES_OPT_LOOKUPS (1 << 8)
|
#define ARES_OPT_LOOKUPS (1 << 8)
|
||||||
|
#define ARES_OPT_SOCK_STATE_CB (1 << 9)
|
||||||
|
|
||||||
/* Nameinfo flag values */
|
/* Nameinfo flag values */
|
||||||
#define ARES_NI_NOFQDN (1 << 0)
|
#define ARES_NI_NOFQDN (1 << 0)
|
||||||
@@ -108,27 +109,44 @@ extern "C" {
|
|||||||
#define ARES_NI_LOOKUPHOST (1 << 8)
|
#define ARES_NI_LOOKUPHOST (1 << 8)
|
||||||
#define ARES_NI_LOOKUPSERVICE (1 << 9)
|
#define ARES_NI_LOOKUPSERVICE (1 << 9)
|
||||||
/* Reserved for future use */
|
/* Reserved for future use */
|
||||||
#define ARES_NI_IDN (1 << 10)
|
#define ARES_NI_IDN (1 << 10)
|
||||||
#define ARES_NI_IDN_ALLOW_UNASSIGNED (1 << 11)
|
#define ARES_NI_IDN_ALLOW_UNASSIGNED (1 << 11)
|
||||||
#define ARES_NI_IDN_USE_STD3_ASCII_RULES (1 << 12)
|
#define ARES_NI_IDN_USE_STD3_ASCII_RULES (1 << 12)
|
||||||
|
|
||||||
/* Addrinfo flag values */
|
/* Addrinfo flag values */
|
||||||
#define ARES_AI_CANONNAME (1 << 0)
|
#define ARES_AI_CANONNAME (1 << 0)
|
||||||
#define ARES_AI_NUMERICHOST (1 << 1)
|
#define ARES_AI_NUMERICHOST (1 << 1)
|
||||||
#define ARES_AI_PASSIVE (1 << 2)
|
#define ARES_AI_PASSIVE (1 << 2)
|
||||||
#define ARES_AI_NUMERICSERV (1 << 3)
|
#define ARES_AI_NUMERICSERV (1 << 3)
|
||||||
#define ARES_AI_V4MAPPED (1 << 4)
|
#define ARES_AI_V4MAPPED (1 << 4)
|
||||||
#define ARES_AI_ALL (1 << 5)
|
#define ARES_AI_ALL (1 << 5)
|
||||||
#define ARES_AI_ADDRCONFIG (1 << 6)
|
#define ARES_AI_ADDRCONFIG (1 << 6)
|
||||||
/* Reserved for future use */
|
/* Reserved for future use */
|
||||||
#define ARES_AI_IDN (1 << 10)
|
#define ARES_AI_IDN (1 << 10)
|
||||||
#define ARES_AI_IDN_ALLOW_UNASSIGNED (1 << 11)
|
#define ARES_AI_IDN_ALLOW_UNASSIGNED (1 << 11)
|
||||||
#define ARES_AI_IDN_USE_STD3_ASCII_RULES (1 << 12)
|
#define ARES_AI_IDN_USE_STD3_ASCII_RULES (1 << 12)
|
||||||
#define ARES_AI_CANONIDN (1 << 13)
|
#define ARES_AI_CANONIDN (1 << 13)
|
||||||
|
|
||||||
#define ARES_AI_MASK (ARES_AI_CANONNAME|ARES_AI_NUMERICHOST|ARES_AI_PASSIVE| \
|
#define ARES_AI_MASK (ARES_AI_CANONNAME|ARES_AI_NUMERICHOST|ARES_AI_PASSIVE| \
|
||||||
ARES_AI_NUMERICSERV|ARES_AI_V4MAPPED|ARES_AI_ALL| \
|
ARES_AI_NUMERICSERV|ARES_AI_V4MAPPED|ARES_AI_ALL| \
|
||||||
ARES_AI_ADDRCONFIG)
|
ARES_AI_ADDRCONFIG)
|
||||||
|
#define ARES_GETSOCK_MAXNUM 16 /* ares_getsock() can return info about this
|
||||||
|
many sockets */
|
||||||
|
#define ARES_GETSOCK_READABLE(bits,num) (bits & (1<< (num)))
|
||||||
|
#define ARES_GETSOCK_WRITABLE(bits,num) (bits & (1 << ((num) + \
|
||||||
|
ARES_GETSOCK_MAXNUM)))
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
typedef void (*ares_sock_state_cb)(void *data,
|
||||||
|
SOCKET socket,
|
||||||
|
int readable,
|
||||||
|
int writable);
|
||||||
|
#else
|
||||||
|
typedef void (*ares_sock_state_cb)(void *data,
|
||||||
|
int socket,
|
||||||
|
int readable,
|
||||||
|
int writable);
|
||||||
|
#endif
|
||||||
|
|
||||||
struct ares_options {
|
struct ares_options {
|
||||||
int flags;
|
int flags;
|
||||||
@@ -142,6 +160,8 @@ struct ares_options {
|
|||||||
char **domains;
|
char **domains;
|
||||||
int ndomains;
|
int ndomains;
|
||||||
char *lookups;
|
char *lookups;
|
||||||
|
ares_sock_state_cb sock_state_cb;
|
||||||
|
void *sock_state_cb_data;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct hostent;
|
struct hostent;
|
||||||
@@ -172,9 +192,11 @@ void ares_gethostbyname(ares_channel channel, const char *name, int family,
|
|||||||
void ares_gethostbyaddr(ares_channel channel, const void *addr, int addrlen,
|
void ares_gethostbyaddr(ares_channel channel, const void *addr, int addrlen,
|
||||||
int family, ares_host_callback callback, void *arg);
|
int family, ares_host_callback callback, void *arg);
|
||||||
void ares_getnameinfo(ares_channel channel, const struct sockaddr *sa,
|
void ares_getnameinfo(ares_channel channel, const struct sockaddr *sa,
|
||||||
socklen_t salen, int flags, ares_nameinfo_callback callback,
|
socklen_t salen, int flags,
|
||||||
|
ares_nameinfo_callback callback,
|
||||||
void *arg);
|
void *arg);
|
||||||
int ares_fds(ares_channel channel, fd_set *read_fds, fd_set *write_fds);
|
int ares_fds(ares_channel channel, fd_set *read_fds, fd_set *write_fds);
|
||||||
|
int ares_getsock(ares_channel channel, int *socks, int numsocks);
|
||||||
struct timeval *ares_timeout(ares_channel channel, struct timeval *maxtv,
|
struct timeval *ares_timeout(ares_channel channel, struct timeval *maxtv,
|
||||||
struct timeval *tv);
|
struct timeval *tv);
|
||||||
void ares_process(ares_channel channel, fd_set *read_fds, fd_set *write_fds);
|
void ares_process(ares_channel channel, fd_set *read_fds, fd_set *write_fds);
|
||||||
@@ -191,6 +213,8 @@ int ares_parse_aaaa_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);
|
||||||
|
int ares_parse_ns_reply(const unsigned char *abuf, int alen,
|
||||||
|
struct hostent **host);
|
||||||
void ares_free_string(void *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);
|
const char *ares_strerror(int code);
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this
|
* Permission to use, copy, modify, and distribute this
|
||||||
@@ -23,7 +25,7 @@
|
|||||||
#include "ares.h"
|
#include "ares.h"
|
||||||
#include "ares_private.h"
|
#include "ares_private.h"
|
||||||
|
|
||||||
void ares__close_sockets(struct server_state *server)
|
void ares__close_sockets(ares_channel channel, struct server_state *server)
|
||||||
{
|
{
|
||||||
struct send_request *sendreq;
|
struct send_request *sendreq;
|
||||||
|
|
||||||
@@ -46,11 +48,13 @@ void ares__close_sockets(struct server_state *server)
|
|||||||
/* Close the TCP and UDP sockets. */
|
/* Close the TCP and UDP sockets. */
|
||||||
if (server->tcp_socket != ARES_SOCKET_BAD)
|
if (server->tcp_socket != ARES_SOCKET_BAD)
|
||||||
{
|
{
|
||||||
|
SOCK_STATE_CALLBACK(channel, server->tcp_socket, 0, 0);
|
||||||
closesocket(server->tcp_socket);
|
closesocket(server->tcp_socket);
|
||||||
server->tcp_socket = ARES_SOCKET_BAD;
|
server->tcp_socket = ARES_SOCKET_BAD;
|
||||||
}
|
}
|
||||||
if (server->udp_socket != ARES_SOCKET_BAD)
|
if (server->udp_socket != ARES_SOCKET_BAD)
|
||||||
{
|
{
|
||||||
|
SOCK_STATE_CALLBACK(channel, server->udp_socket, 0, 0);
|
||||||
closesocket(server->udp_socket);
|
closesocket(server->udp_socket);
|
||||||
server->udp_socket = ARES_SOCKET_BAD;
|
server->udp_socket = ARES_SOCKET_BAD;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this
|
* Permission to use, copy, modify, and distribute this
|
||||||
@@ -14,7 +16,6 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "setup.h"
|
#include "setup.h"
|
||||||
#include <sys/types.h>
|
|
||||||
|
|
||||||
#if !defined(WIN32) || defined(WATT32)
|
#if !defined(WIN32) || defined(WATT32)
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
@@ -52,7 +53,7 @@ int ares__get_hostent(FILE *fp, int family, struct hostent **host)
|
|||||||
|
|
||||||
/* Get the address part. */
|
/* Get the address part. */
|
||||||
p = line;
|
p = line;
|
||||||
while (*p && !isspace((unsigned char)*p))
|
while (*p && !ISSPACE(*p))
|
||||||
p++;
|
p++;
|
||||||
if (!*p)
|
if (!*p)
|
||||||
continue;
|
continue;
|
||||||
@@ -74,12 +75,12 @@ int ares__get_hostent(FILE *fp, int family, struct hostent **host)
|
|||||||
|
|
||||||
/* Get the canonical hostname. */
|
/* Get the canonical hostname. */
|
||||||
p++;
|
p++;
|
||||||
while (isspace((unsigned char)*p))
|
while (ISSPACE(*p))
|
||||||
p++;
|
p++;
|
||||||
if (!*p)
|
if (!*p)
|
||||||
continue;
|
continue;
|
||||||
q = p;
|
q = p;
|
||||||
while (*q && !isspace((unsigned char)*q))
|
while (*q && !ISSPACE(*q))
|
||||||
q++;
|
q++;
|
||||||
end_at_hostname = (*q == 0);
|
end_at_hostname = (*q == 0);
|
||||||
*q = 0;
|
*q = 0;
|
||||||
@@ -90,13 +91,13 @@ int ares__get_hostent(FILE *fp, int family, struct hostent **host)
|
|||||||
{
|
{
|
||||||
/* Count the aliases. */
|
/* Count the aliases. */
|
||||||
p = q + 1;
|
p = q + 1;
|
||||||
while (isspace((unsigned char)*p))
|
while (ISSPACE(*p))
|
||||||
p++;
|
p++;
|
||||||
while (*p)
|
while (*p)
|
||||||
{
|
{
|
||||||
while (*p && !isspace((unsigned char)*p))
|
while (*p && !ISSPACE(*p))
|
||||||
p++;
|
p++;
|
||||||
while (isspace((unsigned char)*p))
|
while (ISSPACE(*p))
|
||||||
p++;
|
p++;
|
||||||
naliases++;
|
naliases++;
|
||||||
}
|
}
|
||||||
@@ -126,12 +127,12 @@ int ares__get_hostent(FILE *fp, int family, struct hostent **host)
|
|||||||
if (!end_at_hostname)
|
if (!end_at_hostname)
|
||||||
{
|
{
|
||||||
p = canonical + strlen(canonical) + 1;
|
p = canonical + strlen(canonical) + 1;
|
||||||
while (isspace((unsigned char)*p))
|
while (ISSPACE(*p))
|
||||||
p++;
|
p++;
|
||||||
while (*p)
|
while (*p)
|
||||||
{
|
{
|
||||||
q = p;
|
q = p;
|
||||||
while (*q && !isspace((unsigned char)*q))
|
while (*q && !ISSPACE(*q))
|
||||||
q++;
|
q++;
|
||||||
hostent->h_aliases[naliases] = malloc(q - p + 1);
|
hostent->h_aliases[naliases] = malloc(q - p + 1);
|
||||||
if (hostent->h_aliases[naliases] == NULL)
|
if (hostent->h_aliases[naliases] == NULL)
|
||||||
@@ -139,7 +140,7 @@ int ares__get_hostent(FILE *fp, int family, struct hostent **host)
|
|||||||
memcpy(hostent->h_aliases[naliases], p, q - p);
|
memcpy(hostent->h_aliases[naliases], p, q - p);
|
||||||
hostent->h_aliases[naliases][q - p] = 0;
|
hostent->h_aliases[naliases][q - p] = 0;
|
||||||
p = q;
|
p = q;
|
||||||
while (isspace((unsigned char)*p))
|
while (ISSPACE(*p))
|
||||||
p++;
|
p++;
|
||||||
naliases++;
|
naliases++;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this
|
* Permission to use, copy, modify, and distribute this
|
||||||
@@ -50,7 +52,7 @@ int ares__read_line(FILE *fp, char **buf, int *bufsize)
|
|||||||
if ((*buf)[len - 1] == '\n')
|
if ((*buf)[len - 1] == '\n')
|
||||||
{
|
{
|
||||||
(*buf)[len - 1] = 0;
|
(*buf)[len - 1] = 0;
|
||||||
return ARES_SUCCESS;
|
break;
|
||||||
}
|
}
|
||||||
offset = len;
|
offset = len;
|
||||||
|
|
||||||
@@ -61,4 +63,5 @@ int ares__read_line(FILE *fp, char **buf, int *bufsize)
|
|||||||
*buf = newbuf;
|
*buf = newbuf;
|
||||||
*bufsize *= 2;
|
*bufsize *= 2;
|
||||||
}
|
}
|
||||||
|
return ARES_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,6 +34,6 @@ might have been stored in their arguments.
|
|||||||
.BR ares_init (3)
|
.BR ares_init (3)
|
||||||
.BR ares_destroy (3)
|
.BR ares_destroy (3)
|
||||||
.SH NOTES
|
.SH NOTES
|
||||||
This function is not compatible with ares.
|
This function was added in c-ares 1.2.0
|
||||||
.SH AUTHOR
|
.SH AUTHOR
|
||||||
Dirk Manske
|
Dirk Manske
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
/* Copyright (C) 2004 by Daniel Stenberg et al
|
/* Copyright (C) 2004 by Daniel Stenberg et al
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this software and its
|
* Permission to use, copy, modify, and distribute this software and its
|
||||||
@@ -37,7 +39,10 @@ void ares_cancel(ares_channel channel)
|
|||||||
channel->queries = NULL;
|
channel->queries = NULL;
|
||||||
if (!(channel->flags & ARES_FLAG_STAYOPEN))
|
if (!(channel->flags & ARES_FLAG_STAYOPEN))
|
||||||
{
|
{
|
||||||
for (i = 0; i < channel->nservers; i++)
|
if (channel->servers)
|
||||||
ares__close_sockets(&channel->servers[i]);
|
{
|
||||||
|
for (i = 0; i < channel->nservers; i++)
|
||||||
|
ares__close_sockets(channel, &channel->servers[i]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this
|
* Permission to use, copy, modify, and distribute this
|
||||||
@@ -23,23 +25,37 @@ void ares_destroy(ares_channel channel)
|
|||||||
int i;
|
int i;
|
||||||
struct query *query;
|
struct query *query;
|
||||||
|
|
||||||
for (i = 0; i < channel->nservers; i++)
|
if (!channel)
|
||||||
ares__close_sockets(&channel->servers[i]);
|
return;
|
||||||
free(channel->servers);
|
|
||||||
for (i = 0; i < channel->ndomains; i++)
|
if (channel->servers) {
|
||||||
free(channel->domains[i]);
|
for (i = 0; i < channel->nservers; i++)
|
||||||
free(channel->domains);
|
ares__close_sockets(channel, &channel->servers[i]);
|
||||||
|
free(channel->servers);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (channel->domains) {
|
||||||
|
for (i = 0; i < channel->ndomains; i++)
|
||||||
|
free(channel->domains[i]);
|
||||||
|
free(channel->domains);
|
||||||
|
}
|
||||||
|
|
||||||
if(channel->sortlist)
|
if(channel->sortlist)
|
||||||
free(channel->sortlist);
|
free(channel->sortlist);
|
||||||
free(channel->lookups);
|
|
||||||
while (channel->queries)
|
if (channel->lookups)
|
||||||
{
|
free(channel->lookups);
|
||||||
query = channel->queries;
|
|
||||||
channel->queries = query->next;
|
while (channel->queries) {
|
||||||
query->callback(query->arg, ARES_EDESTRUCTION, NULL, 0);
|
query = channel->queries;
|
||||||
|
channel->queries = query->next;
|
||||||
|
query->callback(query->arg, ARES_EDESTRUCTION, NULL, 0);
|
||||||
|
if (query->tcpbuf)
|
||||||
free(query->tcpbuf);
|
free(query->tcpbuf);
|
||||||
|
if (query->skip_server)
|
||||||
free(query->skip_server);
|
free(query->skip_server);
|
||||||
free(query);
|
free(query);
|
||||||
}
|
}
|
||||||
|
|
||||||
free(channel);
|
free(channel);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,12 +21,22 @@
|
|||||||
#define DNS__16BIT(p) (((p)[0] << 8) | (p)[1])
|
#define DNS__16BIT(p) (((p)[0] << 8) | (p)[1])
|
||||||
#define DNS__32BIT(p) (((p)[0] << 24) | ((p)[1] << 16) | \
|
#define DNS__32BIT(p) (((p)[0] << 24) | ((p)[1] << 16) | \
|
||||||
((p)[2] << 8) | (p)[3])
|
((p)[2] << 8) | (p)[3])
|
||||||
#define DNS__SET16BIT(p, v) (((p)[0] = ((v) >> 8) & 0xff), \
|
|
||||||
((p)[1] = (v) & 0xff))
|
#define DNS__SET16BIT(p, v) (((p)[0] = (unsigned char)(((v) >> 8) & 0xff)), \
|
||||||
#define DNS__SET32BIT(p, v) (((p)[0] = ((v) >> 24) & 0xff), \
|
((p)[1] = (unsigned char)((v) & 0xff)))
|
||||||
((p)[1] = ((v) >> 16) & 0xff), \
|
#define DNS__SET32BIT(p, v) (((p)[0] = (unsigned char)(((v) >> 24) & 0xff)), \
|
||||||
((p)[2] = ((v) >> 8) & 0xff), \
|
((p)[1] = (unsigned char)(((v) >> 16) & 0xff)), \
|
||||||
((p)[3] = (v) & 0xff))
|
((p)[2] = (unsigned char)(((v) >> 8) & 0xff)), \
|
||||||
|
((p)[3] = (unsigned char)((v) & 0xff)))
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
/* we cannot use this approach on systems where we can't access 16/32 bit
|
||||||
|
data on un-aligned addresses */
|
||||||
|
#define DNS__16BIT(p) ntohs(*(unsigned short*)(p))
|
||||||
|
#define DNS__32BIT(p) ntohl(*(unsigned long*)(p))
|
||||||
|
#define DNS__SET16BIT(p, v) *(unsigned short*)(p) = htons(v)
|
||||||
|
#define DNS__SET32BIT(p, v) *(unsigned long*)(p) = htonl(v)
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Macros for parsing a DNS header */
|
/* Macros for parsing a DNS header */
|
||||||
#define DNS_HEADER_QID(h) DNS__16BIT(h)
|
#define DNS_HEADER_QID(h) DNS__16BIT(h)
|
||||||
@@ -44,19 +54,19 @@
|
|||||||
#define DNS_HEADER_ARCOUNT(h) DNS__16BIT((h) + 10)
|
#define DNS_HEADER_ARCOUNT(h) DNS__16BIT((h) + 10)
|
||||||
|
|
||||||
/* Macros for constructing a DNS header */
|
/* Macros for constructing a DNS header */
|
||||||
#define DNS_HEADER_SET_QID(h, v) DNS__SET16BIT(h, v)
|
#define DNS_HEADER_SET_QID(h, v) DNS__SET16BIT(h, v)
|
||||||
#define DNS_HEADER_SET_QR(h, v) ((h)[2] |= (((v) & 0x1) << 7))
|
#define DNS_HEADER_SET_QR(h, v) ((h)[2] |= (unsigned char)(((v) & 0x1) << 7))
|
||||||
#define DNS_HEADER_SET_OPCODE(h, v) ((h)[2] |= (((v) & 0xf) << 3))
|
#define DNS_HEADER_SET_OPCODE(h, v) ((h)[2] |= (unsigned char)(((v) & 0xf) << 3))
|
||||||
#define DNS_HEADER_SET_AA(h, v) ((h)[2] |= (((v) & 0x1) << 2))
|
#define DNS_HEADER_SET_AA(h, v) ((h)[2] |= (unsigned char)(((v) & 0x1) << 2))
|
||||||
#define DNS_HEADER_SET_TC(h, v) ((h)[2] |= (((v) & 0x1) << 1))
|
#define DNS_HEADER_SET_TC(h, v) ((h)[2] |= (unsigned char)(((v) & 0x1) << 1))
|
||||||
#define DNS_HEADER_SET_RD(h, v) ((h)[2] |= (((v) & 0x1)))
|
#define DNS_HEADER_SET_RD(h, v) ((h)[2] |= (unsigned char)((v) & 0x1))
|
||||||
#define DNS_HEADER_SET_RA(h, v) ((h)[3] |= (((v) & 0x1) << 7))
|
#define DNS_HEADER_SET_RA(h, v) ((h)[3] |= (unsigned char)(((v) & 0x1) << 7))
|
||||||
#define DNS_HEADER_SET_Z(h, v) ((h)[3] |= (((v) & 0x7) << 4))
|
#define DNS_HEADER_SET_Z(h, v) ((h)[3] |= (unsigned char)(((v) & 0x7) << 4))
|
||||||
#define DNS_HEADER_SET_RCODE(h, v) ((h)[3] |= (((v) & 0xf)))
|
#define DNS_HEADER_SET_RCODE(h, v) ((h)[3] |= (unsigned char)((v) & 0xf))
|
||||||
#define DNS_HEADER_SET_QDCOUNT(h, v) DNS__SET16BIT((h) + 4, v)
|
#define DNS_HEADER_SET_QDCOUNT(h, v) DNS__SET16BIT((h) + 4, v)
|
||||||
#define DNS_HEADER_SET_ANCOUNT(h, v) DNS__SET16BIT((h) + 6, v)
|
#define DNS_HEADER_SET_ANCOUNT(h, v) DNS__SET16BIT((h) + 6, v)
|
||||||
#define DNS_HEADER_SET_NSCOUNT(h, v) DNS__SET16BIT((h) + 8, v)
|
#define DNS_HEADER_SET_NSCOUNT(h, v) DNS__SET16BIT((h) + 8, v)
|
||||||
#define DNS_HEADER_SET_ARCOUNT(h, v) DNS__SET16BIT((h) + 10, v)
|
#define DNS_HEADER_SET_ARCOUNT(h, v) DNS__SET16BIT((h) + 10, v)
|
||||||
|
|
||||||
/* Macros for parsing the fixed part of a DNS question */
|
/* Macros for parsing the fixed part of a DNS question */
|
||||||
#define DNS_QUESTION_TYPE(q) DNS__16BIT(q)
|
#define DNS_QUESTION_TYPE(q) DNS__16BIT(q)
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this
|
* Permission to use, copy, modify, and distribute this
|
||||||
@@ -14,7 +16,6 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "setup.h"
|
#include "setup.h"
|
||||||
#include <sys/types.h>
|
|
||||||
|
|
||||||
#if defined(WIN32) && !defined(WATT32)
|
#if defined(WIN32) && !defined(WATT32)
|
||||||
#include "nameser.h"
|
#include "nameser.h"
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this
|
* Permission to use, copy, modify, and distribute this
|
||||||
@@ -14,7 +16,6 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "setup.h"
|
#include "setup.h"
|
||||||
#include <sys/types.h>
|
|
||||||
|
|
||||||
#if defined(WIN32) && !defined(WATT32)
|
#if defined(WIN32) && !defined(WATT32)
|
||||||
#include "nameser.h"
|
#include "nameser.h"
|
||||||
@@ -53,13 +54,13 @@ int ares_expand_string(const unsigned char *encoded,
|
|||||||
*s = malloc(len+1);
|
*s = malloc(len+1);
|
||||||
if (*s == NULL)
|
if (*s == NULL)
|
||||||
return ARES_ENOMEM;
|
return ARES_ENOMEM;
|
||||||
q = *s;
|
q = *s;
|
||||||
strncpy((char *)q, (char *)encoded, len);
|
strncpy((char *)q, (char *)encoded, len);
|
||||||
q[len] = '\0';
|
q[len] = '\0';
|
||||||
|
|
||||||
*s = q;
|
*s = q;
|
||||||
|
|
||||||
*enclen = len+1;
|
*enclen = len+1;
|
||||||
|
|
||||||
return ARES_SUCCESS;
|
return ARES_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this
|
* Permission to use, copy, modify, and distribute this
|
||||||
@@ -14,7 +16,6 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "setup.h"
|
#include "setup.h"
|
||||||
#include <sys/types.h>
|
|
||||||
|
|
||||||
#ifdef HAVE_SYS_TIME_H
|
#ifdef HAVE_SYS_TIME_H
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
@@ -44,13 +45,13 @@ int ares_fds(ares_channel channel, fd_set *read_fds, fd_set *write_fds)
|
|||||||
nfds = server->udp_socket + 1;
|
nfds = server->udp_socket + 1;
|
||||||
}
|
}
|
||||||
if (server->tcp_socket != ARES_SOCKET_BAD)
|
if (server->tcp_socket != ARES_SOCKET_BAD)
|
||||||
{
|
{
|
||||||
FD_SET(server->tcp_socket, read_fds);
|
FD_SET(server->tcp_socket, read_fds);
|
||||||
if (server->qhead)
|
if (server->qhead)
|
||||||
FD_SET(server->tcp_socket, write_fds);
|
FD_SET(server->tcp_socket, write_fds);
|
||||||
if (server->tcp_socket >= nfds)
|
if (server->tcp_socket >= nfds)
|
||||||
nfds = server->tcp_socket + 1;
|
nfds = server->tcp_socket + 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return (int)nfds;
|
return (int)nfds;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this
|
* Permission to use, copy, modify, and distribute this
|
||||||
@@ -27,7 +29,7 @@ void ares_free_hostent(struct hostent *host)
|
|||||||
{
|
{
|
||||||
char **p;
|
char **p;
|
||||||
|
|
||||||
free(host->h_name);
|
free((char *)(host->h_name));
|
||||||
for (p = host->h_aliases; *p; p++)
|
for (p = host->h_aliases; *p; p++)
|
||||||
free(*p);
|
free(*p);
|
||||||
free(host->h_aliases);
|
free(host->h_aliases);
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
/* Copyright 2000 by the Massachusetts Institute of Technology.
|
/* Copyright 2000 by the Massachusetts Institute of Technology.
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this
|
* Permission to use, copy, modify, and distribute this
|
||||||
@@ -16,6 +18,7 @@
|
|||||||
#include "setup.h"
|
#include "setup.h"
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include "ares.h"
|
#include "ares.h"
|
||||||
|
#include "ares_private.h"
|
||||||
|
|
||||||
void ares_free_string(void *str)
|
void ares_free_string(void *str)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this
|
* Permission to use, copy, modify, and distribute this
|
||||||
@@ -13,7 +15,6 @@
|
|||||||
* without express or implied warranty.
|
* without express or implied warranty.
|
||||||
*/
|
*/
|
||||||
#include "setup.h"
|
#include "setup.h"
|
||||||
#include <sys/types.h>
|
|
||||||
|
|
||||||
#if defined(WIN32) && !defined(WATT32)
|
#if defined(WIN32) && !defined(WATT32)
|
||||||
#include "nameser.h"
|
#include "nameser.h"
|
||||||
@@ -184,6 +185,7 @@ static int file_lookup(union ares_addr *addr, int family, struct hostent **host)
|
|||||||
{
|
{
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
int status;
|
int status;
|
||||||
|
int error;
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
char PATH_HOSTS[MAX_PATH];
|
char PATH_HOSTS[MAX_PATH];
|
||||||
@@ -216,7 +218,22 @@ static int file_lookup(union ares_addr *addr, int family, struct hostent **host)
|
|||||||
|
|
||||||
fp = fopen(PATH_HOSTS, "r");
|
fp = fopen(PATH_HOSTS, "r");
|
||||||
if (!fp)
|
if (!fp)
|
||||||
return ARES_ENOTFOUND;
|
{
|
||||||
|
error = ERRNO;
|
||||||
|
switch(error)
|
||||||
|
{
|
||||||
|
case ENOENT:
|
||||||
|
case ESRCH:
|
||||||
|
return ARES_ENOTFOUND;
|
||||||
|
default:
|
||||||
|
DEBUGF(fprintf(stderr, "fopen() failed with error: %d %s\n",
|
||||||
|
error, strerror(error)));
|
||||||
|
DEBUGF(fprintf(stderr, "Error opening file: %s\n",
|
||||||
|
PATH_HOSTS));
|
||||||
|
*host = NULL;
|
||||||
|
return ARES_EFILE;
|
||||||
|
}
|
||||||
|
}
|
||||||
while ((status = ares__get_hostent(fp, family, host)) == ARES_SUCCESS)
|
while ((status = ares__get_hostent(fp, family, host)) == ARES_SUCCESS)
|
||||||
{
|
{
|
||||||
if (family != (*host)->h_addrtype)
|
if (family != (*host)->h_addrtype)
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this
|
* Permission to use, copy, modify, and distribute this
|
||||||
@@ -14,7 +16,6 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "setup.h"
|
#include "setup.h"
|
||||||
#include <sys/types.h>
|
|
||||||
|
|
||||||
#if defined(WIN32) && !defined(WATT32)
|
#if defined(WIN32) && !defined(WATT32)
|
||||||
#include "nameser.h"
|
#include "nameser.h"
|
||||||
@@ -170,7 +171,7 @@ static void host_callback(void *arg, int status, unsigned char *abuf, int alen)
|
|||||||
}
|
}
|
||||||
else if (status == ARES_ENODATA && hquery->family == AF_INET6)
|
else if (status == ARES_ENODATA && hquery->family == AF_INET6)
|
||||||
{
|
{
|
||||||
/* There was no AAAA now lookup an A */
|
/* There was no AAAA. Now lookup an A */
|
||||||
hquery->family = AF_INET;
|
hquery->family = AF_INET;
|
||||||
ares_search(hquery->channel, hquery->name, C_IN, T_A, host_callback,
|
ares_search(hquery->channel, hquery->name, C_IN, T_A, host_callback,
|
||||||
hquery);
|
hquery);
|
||||||
@@ -237,7 +238,7 @@ static int fake_hostent(const char *name, int family, ares_host_callback callbac
|
|||||||
hostent.h_addr_list = addrs;
|
hostent.h_addr_list = addrs;
|
||||||
callback(arg, ARES_SUCCESS, &hostent);
|
callback(arg, ARES_SUCCESS, &hostent);
|
||||||
|
|
||||||
free(hostent.h_name);
|
free((char *)(hostent.h_name));
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -246,6 +247,7 @@ static int file_lookup(const char *name, int family, struct hostent **host)
|
|||||||
FILE *fp;
|
FILE *fp;
|
||||||
char **alias;
|
char **alias;
|
||||||
int status;
|
int status;
|
||||||
|
int error;
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
char PATH_HOSTS[MAX_PATH];
|
char PATH_HOSTS[MAX_PATH];
|
||||||
@@ -278,8 +280,22 @@ static int file_lookup(const char *name, int family, struct hostent **host)
|
|||||||
|
|
||||||
fp = fopen(PATH_HOSTS, "r");
|
fp = fopen(PATH_HOSTS, "r");
|
||||||
if (!fp)
|
if (!fp)
|
||||||
return ARES_ENOTFOUND;
|
{
|
||||||
|
error = ERRNO;
|
||||||
|
switch(error)
|
||||||
|
{
|
||||||
|
case ENOENT:
|
||||||
|
case ESRCH:
|
||||||
|
return ARES_ENOTFOUND;
|
||||||
|
default:
|
||||||
|
DEBUGF(fprintf(stderr, "fopen() failed with error: %d %s\n",
|
||||||
|
error, strerror(error)));
|
||||||
|
DEBUGF(fprintf(stderr, "Error opening file: %s\n",
|
||||||
|
PATH_HOSTS));
|
||||||
|
*host = NULL;
|
||||||
|
return ARES_EFILE;
|
||||||
|
}
|
||||||
|
}
|
||||||
while ((status = ares__get_hostent(fp, family, host)) == ARES_SUCCESS)
|
while ((status = ares__get_hostent(fp, family, host)) == ARES_SUCCESS)
|
||||||
{
|
{
|
||||||
if (strcasecmp((*host)->h_name, name) == 0)
|
if (strcasecmp((*host)->h_name, name) == 0)
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
/* Copyright 2005 by Dominick Meglio
|
/* Copyright 2005 by Dominick Meglio
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this
|
* Permission to use, copy, modify, and distribute this
|
||||||
@@ -13,8 +15,6 @@
|
|||||||
* without express or implied warranty.
|
* without express or implied warranty.
|
||||||
*/
|
*/
|
||||||
#include "setup.h"
|
#include "setup.h"
|
||||||
#include <sys/types.h>
|
|
||||||
#include <ctype.h>
|
|
||||||
|
|
||||||
#if defined(WIN32) && !defined(WATT32)
|
#if defined(WIN32) && !defined(WATT32)
|
||||||
#include "nameser.h"
|
#include "nameser.h"
|
||||||
@@ -68,17 +68,19 @@ struct nameinfo_query {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
static void nameinfo_callback(void *arg, int status, struct hostent *host);
|
static void nameinfo_callback(void *arg, int status, struct hostent *host);
|
||||||
static char *lookup_service(unsigned short port, int flags, char *buf);
|
static char *lookup_service(unsigned short port, int flags,
|
||||||
|
char *buf, size_t buflen);
|
||||||
#ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID
|
#ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID
|
||||||
static char *append_scopeid(struct sockaddr_in6 *addr6, unsigned int scopeid, char *buf);
|
static void append_scopeid(struct sockaddr_in6 *addr6, unsigned int scopeid,
|
||||||
|
char *buf, size_t buflen);
|
||||||
#endif
|
#endif
|
||||||
static char *ares_striendstr(const char *s1, const char *s2);
|
static char *ares_striendstr(const char *s1, const char *s2);
|
||||||
|
|
||||||
void ares_getnameinfo(ares_channel channel, const struct sockaddr *sa, socklen_t salen,
|
void ares_getnameinfo(ares_channel channel, const struct sockaddr *sa, socklen_t salen,
|
||||||
int flags, ares_nameinfo_callback callback, void *arg)
|
int flags, ares_nameinfo_callback callback, void *arg)
|
||||||
{
|
{
|
||||||
struct sockaddr_in *addr;
|
struct sockaddr_in *addr = NULL;
|
||||||
struct sockaddr_in6 *addr6;
|
struct sockaddr_in6 *addr6 = NULL;
|
||||||
struct nameinfo_query *niquery;
|
struct nameinfo_query *niquery;
|
||||||
|
|
||||||
/* Verify the buffer size */
|
/* Verify the buffer size */
|
||||||
@@ -106,7 +108,8 @@ void ares_getnameinfo(ares_channel channel, const struct sockaddr *sa, socklen_t
|
|||||||
port = addr->sin_port;
|
port = addr->sin_port;
|
||||||
else
|
else
|
||||||
port = addr6->sin6_port;
|
port = addr6->sin6_port;
|
||||||
service = lookup_service(port, flags, buf);
|
service = lookup_service((unsigned short)(port & 0xffff),
|
||||||
|
flags, buf, sizeof(buf));
|
||||||
callback(arg, ARES_SUCCESS, NULL, service);
|
callback(arg, ARES_SUCCESS, NULL, service);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -119,7 +122,7 @@ void ares_getnameinfo(ares_channel channel, const struct sockaddr *sa, socklen_t
|
|||||||
{
|
{
|
||||||
unsigned int port = 0;
|
unsigned int port = 0;
|
||||||
char ipbuf[IPBUFSIZ];
|
char ipbuf[IPBUFSIZ];
|
||||||
char srvbuf[32];
|
char srvbuf[33];
|
||||||
char *service = NULL;
|
char *service = NULL;
|
||||||
ipbuf[0] = 0;
|
ipbuf[0] = 0;
|
||||||
|
|
||||||
@@ -137,7 +140,7 @@ void ares_getnameinfo(ares_channel channel, const struct sockaddr *sa, socklen_t
|
|||||||
port = addr6->sin6_port;
|
port = addr6->sin6_port;
|
||||||
/* If the system supports scope IDs, use it */
|
/* If the system supports scope IDs, use it */
|
||||||
#ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID
|
#ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID
|
||||||
append_scopeid(addr6, flags, ipbuf);
|
append_scopeid(addr6, flags, ipbuf, sizeof(ipbuf));
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -147,7 +150,8 @@ void ares_getnameinfo(ares_channel channel, const struct sockaddr *sa, socklen_t
|
|||||||
}
|
}
|
||||||
/* They also want a service */
|
/* They also want a service */
|
||||||
if (flags & ARES_NI_LOOKUPSERVICE)
|
if (flags & ARES_NI_LOOKUPSERVICE)
|
||||||
service = lookup_service(port, flags, srvbuf);
|
service = lookup_service((unsigned short)(port & 0xffff),
|
||||||
|
flags, srvbuf, sizeof(srvbuf));
|
||||||
callback(arg, ARES_SUCCESS, ipbuf, service);
|
callback(arg, ARES_SUCCESS, ipbuf, service);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -195,10 +199,10 @@ static void nameinfo_callback(void *arg, int status, struct hostent *host)
|
|||||||
{
|
{
|
||||||
if (niquery->family == AF_INET)
|
if (niquery->family == AF_INET)
|
||||||
service = lookup_service(niquery->addr.addr4.sin_port,
|
service = lookup_service(niquery->addr.addr4.sin_port,
|
||||||
niquery->flags, srvbuf);
|
niquery->flags, srvbuf, sizeof(srvbuf));
|
||||||
else
|
else
|
||||||
service = lookup_service(niquery->addr.addr6.sin6_port,
|
service = lookup_service(niquery->addr.addr6.sin6_port,
|
||||||
niquery->flags, srvbuf);
|
niquery->flags, srvbuf, sizeof(srvbuf));
|
||||||
}
|
}
|
||||||
/* NOFQDN means we have to strip off the domain name portion.
|
/* NOFQDN means we have to strip off the domain name portion.
|
||||||
We do this by determining our own domain name, then searching the string
|
We do this by determining our own domain name, then searching the string
|
||||||
@@ -216,7 +220,8 @@ static void nameinfo_callback(void *arg, int status, struct hostent *host)
|
|||||||
*end = 0;
|
*end = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
niquery->callback(niquery->arg, ARES_SUCCESS, host->h_name, service);
|
niquery->callback(niquery->arg, ARES_SUCCESS, (char *)(host->h_name),
|
||||||
|
service);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
/* We couldn't find the host, but it's OK, we can use the IP */
|
/* We couldn't find the host, but it's OK, we can use the IP */
|
||||||
@@ -229,7 +234,7 @@ static void nameinfo_callback(void *arg, int status, struct hostent *host)
|
|||||||
{
|
{
|
||||||
ares_inet_ntop(AF_INET6, &niquery->addr.addr6.sin6_addr, ipbuf, IPBUFSIZ);
|
ares_inet_ntop(AF_INET6, &niquery->addr.addr6.sin6_addr, ipbuf, IPBUFSIZ);
|
||||||
#ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID
|
#ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID
|
||||||
append_scopeid(&niquery->addr.addr6, niquery->flags, ipbuf);
|
append_scopeid(&niquery->addr.addr6, niquery->flags, ipbuf, sizeof(ipbuf));
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
/* They want a service too */
|
/* They want a service too */
|
||||||
@@ -237,10 +242,10 @@ static void nameinfo_callback(void *arg, int status, struct hostent *host)
|
|||||||
{
|
{
|
||||||
if (niquery->family == AF_INET)
|
if (niquery->family == AF_INET)
|
||||||
service = lookup_service(niquery->addr.addr4.sin_port,
|
service = lookup_service(niquery->addr.addr4.sin_port,
|
||||||
niquery->flags, srvbuf);
|
niquery->flags, srvbuf, sizeof(srvbuf));
|
||||||
else
|
else
|
||||||
service = lookup_service(niquery->addr.addr6.sin6_port,
|
service = lookup_service(niquery->addr.addr6.sin6_port,
|
||||||
niquery->flags, srvbuf);
|
niquery->flags, srvbuf, sizeof(srvbuf));
|
||||||
}
|
}
|
||||||
niquery->callback(niquery->arg, ARES_SUCCESS, ipbuf, service);
|
niquery->callback(niquery->arg, ARES_SUCCESS, ipbuf, service);
|
||||||
return;
|
return;
|
||||||
@@ -250,28 +255,21 @@ static void nameinfo_callback(void *arg, int status, struct hostent *host)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static char *lookup_service(unsigned short port, int flags,
|
static char *lookup_service(unsigned short port, int flags,
|
||||||
char *buf) /* 33 bytes buffer */
|
char *buf, size_t buflen)
|
||||||
{
|
{
|
||||||
|
const char *proto;
|
||||||
|
struct servent *sep;
|
||||||
|
#ifdef HAVE_GETSERVBYPORT_R
|
||||||
|
struct servent se;
|
||||||
|
#endif
|
||||||
|
char tmpbuf[4096];
|
||||||
|
|
||||||
if (port)
|
if (port)
|
||||||
{
|
{
|
||||||
/* Just return the port as a string */
|
|
||||||
if (flags & ARES_NI_NUMERICSERV)
|
if (flags & ARES_NI_NUMERICSERV)
|
||||||
sprintf(buf, "%u", ntohs(port));
|
sep = NULL;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
struct servent *se;
|
|
||||||
const char *proto;
|
|
||||||
#if GETSERVBYPORT_R_ARGS == 6
|
|
||||||
struct servent ret;
|
|
||||||
char buf[4096];
|
|
||||||
int len = 4096;
|
|
||||||
#elif GETSERVBYPORT_R_ARGS == 5
|
|
||||||
char buf[4096];
|
|
||||||
int len = 4096;
|
|
||||||
#elif GETSERVBYPORT_R_ARGS == 4
|
|
||||||
struct servent ret;
|
|
||||||
struct servent_data sed;
|
|
||||||
#endif
|
|
||||||
if (flags & ARES_NI_UDP)
|
if (flags & ARES_NI_UDP)
|
||||||
proto = "udp";
|
proto = "udp";
|
||||||
else if (flags & ARES_NI_SCTP)
|
else if (flags & ARES_NI_SCTP)
|
||||||
@@ -281,65 +279,81 @@ static char *lookup_service(unsigned short port, int flags,
|
|||||||
else
|
else
|
||||||
proto = "tcp";
|
proto = "tcp";
|
||||||
#ifdef HAVE_GETSERVBYPORT_R
|
#ifdef HAVE_GETSERVBYPORT_R
|
||||||
|
sep = &se;
|
||||||
|
memset(tmpbuf, 0, sizeof(tmpbuf));
|
||||||
#if GETSERVBYPORT_R_ARGS == 6
|
#if GETSERVBYPORT_R_ARGS == 6
|
||||||
se = &ret;
|
if (getservbyport_r(port, proto, &se, (void *)tmpbuf, sizeof(tmpbuf), &sep) != 0)
|
||||||
if (getservbyport_r(port, proto, se, buf, len, &ret))
|
sep = NULL;
|
||||||
se = NULL;
|
|
||||||
#elif GETSERVBYPORT_R_ARGS == 5
|
#elif GETSERVBYPORT_R_ARGS == 5
|
||||||
se = getservbyport_r(port, proto, se, buf, len);
|
sep = getservbyport_r(port, proto, &se, (void *)tmpbuf, sizeof(tmpbuf));
|
||||||
#elif GETSERVBYPORT_R_ARGS == 4
|
#elif GETSERVBYPORT_R_ARGS == 4
|
||||||
se = &ret;
|
if (getservbyport_r(port, proto, &se, (void *)tmpbuf) != 0)
|
||||||
if (getservbyport_r(port, proto, se, &sed) == -1)
|
sep = NULL;
|
||||||
se = NULL;
|
|
||||||
#else
|
#else
|
||||||
/* Lets just hope the OS uses TLS! */
|
/* Lets just hope the OS uses TLS! */
|
||||||
se = getservbyport(port, proto);
|
sep = getservbyport(port, proto);
|
||||||
#endif
|
#endif
|
||||||
#else
|
#else
|
||||||
/* Lets just hope the OS uses TLS! */
|
/* Lets just hope the OS uses TLS! */
|
||||||
se = getservbyport(port, proto);
|
sep = getservbyport(port, proto);
|
||||||
#endif
|
#endif
|
||||||
if (se && se->s_name) {
|
|
||||||
size_t len = strlen(se->s_name);
|
|
||||||
if(len < 33) {
|
|
||||||
strcpy(buf, se->s_name);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
/* too big name to fit the buffer */
|
|
||||||
buf[0]=0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
sprintf(buf, "%u", ntohs(port));
|
|
||||||
}
|
}
|
||||||
|
if (sep && sep->s_name)
|
||||||
|
/* get service name */
|
||||||
|
strcpy(tmpbuf, sep->s_name);
|
||||||
|
else
|
||||||
|
/* get port as a string */
|
||||||
|
sprintf(tmpbuf, "%u", (unsigned int)ntohs(port));
|
||||||
|
if (strlen(tmpbuf) < buflen)
|
||||||
|
/* return it if buffer big enough */
|
||||||
|
strcpy(buf, tmpbuf);
|
||||||
|
else
|
||||||
|
/* avoid reusing previous one */
|
||||||
|
buf[0] = '\0';
|
||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
buf[0] = '\0';
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID
|
#ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID
|
||||||
static char *append_scopeid(struct sockaddr_in6 *addr6, unsigned int flags,
|
static void append_scopeid(struct sockaddr_in6 *addr6, unsigned int flags,
|
||||||
char *buf)
|
char *buf, size_t buflen)
|
||||||
{
|
{
|
||||||
char tmpbuf[IF_NAMESIZE + 1];
|
#ifdef HAVE_IF_INDEXTONAME
|
||||||
|
int is_ll, is_mcll;
|
||||||
|
#endif
|
||||||
|
char fmt_u[] = "%u";
|
||||||
|
char fmt_lu[] = "%lu";
|
||||||
|
char tmpbuf[IF_NAMESIZE + 2];
|
||||||
|
size_t bufl;
|
||||||
|
char *fmt = (sizeof(addr6->sin6_scope_id) > sizeof(unsigned int))?fmt_lu:fmt_u;
|
||||||
|
|
||||||
tmpbuf[0] = '%';
|
tmpbuf[0] = '%';
|
||||||
|
|
||||||
#ifdef HAVE_IF_INDEXTONAME
|
#ifdef HAVE_IF_INDEXTONAME
|
||||||
|
is_ll = IN6_IS_ADDR_LINKLOCAL(&addr6->sin6_addr);
|
||||||
|
is_mcll = IN6_IS_ADDR_MC_LINKLOCAL(&addr6->sin6_addr);
|
||||||
if ((flags & ARES_NI_NUMERICSCOPE) ||
|
if ((flags & ARES_NI_NUMERICSCOPE) ||
|
||||||
(!IN6_IS_ADDR_LINKLOCAL(&addr6->sin6_addr)
|
(!is_ll && !is_mcll))
|
||||||
&& !IN6_IS_ADDR_MC_LINKLOCAL(&addr6->sin6_addr)))
|
|
||||||
{
|
{
|
||||||
sprintf(&tmpbuf[1], "%u", addr6->sin6_scope_id);
|
sprintf(&tmpbuf[1], fmt, addr6->sin6_scope_id);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (if_indextoname(addr6->sin6_scope_id, &tmpbuf[1]) == NULL)
|
if (if_indextoname(addr6->sin6_scope_id, &tmpbuf[1]) == NULL)
|
||||||
sprintf(&tmpbuf[1], "%u", addr6->sin6_scope_id);
|
sprintf(&tmpbuf[1], fmt, addr6->sin6_scope_id);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
sprintf(&tmpbuf[1], "%u", addr6->sin6_scope_id);
|
sprintf(&tmpbuf[1], fmt, addr6->sin6_scope_id);
|
||||||
|
(void) flags;
|
||||||
#endif
|
#endif
|
||||||
strcat(buf, tmpbuf);
|
tmpbuf[IF_NAMESIZE + 1] = '\0';
|
||||||
return buf;
|
bufl = strlen(buf);
|
||||||
|
|
||||||
|
if(bufl + strlen(tmpbuf) < buflen)
|
||||||
|
/* only append the scopeid string if it fits in the target buffer */
|
||||||
|
strcpy(&buf[bufl], tmpbuf);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -347,6 +361,7 @@ static char *append_scopeid(struct sockaddr_in6 *addr6, unsigned int flags,
|
|||||||
static char *ares_striendstr(const char *s1, const char *s2)
|
static char *ares_striendstr(const char *s1, const char *s2)
|
||||||
{
|
{
|
||||||
const char *c1, *c2, *c1_begin;
|
const char *c1, *c2, *c1_begin;
|
||||||
|
int lo1, lo2;
|
||||||
size_t s1_len = strlen(s1), s2_len = strlen(s2);
|
size_t s1_len = strlen(s1), s2_len = strlen(s2);
|
||||||
|
|
||||||
/* If the substr is longer than the full str, it can't match */
|
/* If the substr is longer than the full str, it can't match */
|
||||||
@@ -359,7 +374,9 @@ static char *ares_striendstr(const char *s1, const char *s2)
|
|||||||
c2 = s2;
|
c2 = s2;
|
||||||
while (c2 < s2+s2_len)
|
while (c2 < s2+s2_len)
|
||||||
{
|
{
|
||||||
if (tolower(*c1) != tolower(*c2))
|
lo1 = tolower(*c1);
|
||||||
|
lo2 = tolower(*c2);
|
||||||
|
if (lo1 != lo2)
|
||||||
return NULL;
|
return NULL;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
58
ares/ares_getsock.3
Normal file
58
ares/ares_getsock.3
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
.\" $Id$
|
||||||
|
.\"
|
||||||
|
.\" Copyright 1998 by Daniel Stenberg
|
||||||
|
.\"
|
||||||
|
.\" Permission to use, copy, modify, and distribute this
|
||||||
|
.\" software and its documentation for any purpose and without
|
||||||
|
.\" fee is hereby granted, provided that the above copyright
|
||||||
|
.\" notice appear in all copies and that both that copyright
|
||||||
|
.\" notice and this permission notice appear in supporting
|
||||||
|
.\" documentation, and that the name of M.I.T. not be used in
|
||||||
|
.\" advertising or publicity pertaining to distribution of the
|
||||||
|
.\" software without specific, written prior permission.
|
||||||
|
.\" M.I.T. makes no representations about the suitability of
|
||||||
|
.\" this software for any purpose. It is provided "as is"
|
||||||
|
.\" without express or implied warranty.
|
||||||
|
.\"
|
||||||
|
.TH ARES_GETSOCK 3 "22 December 2005"
|
||||||
|
.SH NAME
|
||||||
|
ares_getsock \- get file descriptors to wait on
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.nf
|
||||||
|
.B #include <ares.h>
|
||||||
|
.PP
|
||||||
|
.B int ares_getsock(ares_channel \fIchannel\fP, int *\fIsocks\fP,
|
||||||
|
.B int \fInumsocks\fP);
|
||||||
|
.fi
|
||||||
|
.SH DESCRIPTION
|
||||||
|
The
|
||||||
|
.B ares_getsock
|
||||||
|
function retrieves the set of file descriptors which the calling
|
||||||
|
application should wait on for reading and/or writing for the
|
||||||
|
processing of name service queries pending on the name service channel
|
||||||
|
identified by
|
||||||
|
.IR channel .
|
||||||
|
File descriptors will be set in the integer array pointed to by
|
||||||
|
\fIsocks\fP.
|
||||||
|
\fInumsocks\fP is the size of the given array in number of ints.
|
||||||
|
|
||||||
|
This function can only return information about up to 16 sockets. If more are
|
||||||
|
in use (however unlikely that is), they are simply not reported back.
|
||||||
|
.SH RETURN VALUES
|
||||||
|
\fBares_getsock\fP returns a bitmask for what actions to wait for on the
|
||||||
|
different sockets. The ares.h header file provides these convenience macros to
|
||||||
|
extract the information appropriately:
|
||||||
|
|
||||||
|
.nf
|
||||||
|
#define ARES_GETSOCK_MAXNUM 16 /* ares_getsock() can return info about
|
||||||
|
this many sockets */
|
||||||
|
#define ARES_GETSOCK_READABLE(bits,num) (bits & (1<< (num)))
|
||||||
|
#define ARES_GETSOCK_WRITABLE(bits,num) (bits & (1 << ((num) + \
|
||||||
|
ARES_GETSOCK_MAXNUM)))
|
||||||
|
.fi
|
||||||
|
.SH NOTES
|
||||||
|
This function was added in c-ares 1.3.1
|
||||||
|
.SH SEE ALSO
|
||||||
|
.BR ares_timeout (3),
|
||||||
|
.BR ares_fds (3),
|
||||||
|
.BR ares_process (3)
|
||||||
69
ares/ares_getsock.c
Normal file
69
ares/ares_getsock.c
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
|
/* Copyright (C) 2005 - 2007, Daniel Stenberg
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and distribute this software and its
|
||||||
|
* documentation for any purpose and without fee is hereby granted, provided
|
||||||
|
* that the above copyright notice appear in all copies and that both that
|
||||||
|
* copyright notice and this permission notice appear in supporting
|
||||||
|
* documentation, and that the name of M.I.T. not be used in advertising or
|
||||||
|
* publicity pertaining to distribution of the software without specific,
|
||||||
|
* written prior permission. M.I.T. makes no representations about the
|
||||||
|
* suitability of this software for any purpose. It is provided "as is"
|
||||||
|
* without express or implied warranty.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "setup.h"
|
||||||
|
|
||||||
|
#ifdef HAVE_SYS_TIME_H
|
||||||
|
#include <sys/time.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "ares.h"
|
||||||
|
#include "ares_private.h"
|
||||||
|
|
||||||
|
int ares_getsock(ares_channel channel,
|
||||||
|
int *s,
|
||||||
|
int numsocks) /* size of the 'socks' array */
|
||||||
|
{
|
||||||
|
struct server_state *server;
|
||||||
|
int i;
|
||||||
|
int sockindex=0;
|
||||||
|
int bitmap = 0;
|
||||||
|
unsigned int setbits = 0xffffffff;
|
||||||
|
|
||||||
|
ares_socket_t *socks = (ares_socket_t *)s;
|
||||||
|
|
||||||
|
/* No queries, no file descriptors. */
|
||||||
|
if (!channel->queries)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
for (i = 0;
|
||||||
|
(i < channel->nservers) && (sockindex < ARES_GETSOCK_MAXNUM);
|
||||||
|
i++)
|
||||||
|
{
|
||||||
|
server = &channel->servers[i];
|
||||||
|
if (server->udp_socket != ARES_SOCKET_BAD)
|
||||||
|
{
|
||||||
|
if(sockindex >= numsocks)
|
||||||
|
break;
|
||||||
|
socks[sockindex] = server->udp_socket;
|
||||||
|
bitmap |= ARES_GETSOCK_READABLE(setbits, sockindex);
|
||||||
|
sockindex++;
|
||||||
|
}
|
||||||
|
if (server->tcp_socket != ARES_SOCKET_BAD)
|
||||||
|
{
|
||||||
|
if(sockindex >= numsocks)
|
||||||
|
break;
|
||||||
|
socks[sockindex] = server->tcp_socket;
|
||||||
|
bitmap |= ARES_GETSOCK_READABLE(setbits, sockindex);
|
||||||
|
|
||||||
|
if (server->qhead)
|
||||||
|
/* then the tcp socket is also writable! */
|
||||||
|
bitmap |= ARES_GETSOCK_WRITABLE(setbits, sockindex);
|
||||||
|
|
||||||
|
sockindex++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return bitmap;
|
||||||
|
}
|
||||||
@@ -98,6 +98,24 @@ The lookups to perform for host queries.
|
|||||||
.I lookups
|
.I lookups
|
||||||
should be set to a string of the characters "b" or "f", where "b"
|
should be set to a string of the characters "b" or "f", where "b"
|
||||||
indicates a DNS lookup and "f" indicates a lookup in the hosts file.
|
indicates a DNS lookup and "f" indicates a lookup in the hosts file.
|
||||||
|
.TP 18
|
||||||
|
.B ARES_OPT_SOCK_STATE_CB
|
||||||
|
.B void (*\fIsock_state_cb\fP)(void *data, int s, int read, int write);
|
||||||
|
.br
|
||||||
|
.B void *\fIsock_state_cb_data\fP;
|
||||||
|
.br
|
||||||
|
A callback function to be invoked when a socket changes state.
|
||||||
|
.I s
|
||||||
|
will be passed the socket whose state has changed;
|
||||||
|
.I read
|
||||||
|
will be set to true if the socket should listen for read events, and
|
||||||
|
.I write
|
||||||
|
will be set to true if the socket should listen for write events.
|
||||||
|
The value of
|
||||||
|
.I sock_state_cb_data
|
||||||
|
will be passed as the
|
||||||
|
.I data
|
||||||
|
argument.
|
||||||
.PP
|
.PP
|
||||||
The
|
The
|
||||||
.I flags
|
.I flags
|
||||||
|
|||||||
271
ares/ares_init.c
271
ares/ares_init.c
@@ -1,3 +1,5 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this
|
* Permission to use, copy, modify, and distribute this
|
||||||
@@ -14,7 +16,6 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "setup.h"
|
#include "setup.h"
|
||||||
#include <sys/types.h>
|
|
||||||
|
|
||||||
#if defined(WIN32) && !defined(WATT32)
|
#if defined(WIN32) && !defined(WATT32)
|
||||||
#include "nameser.h"
|
#include "nameser.h"
|
||||||
@@ -41,6 +42,9 @@
|
|||||||
#ifdef HAVE_UNISTD_H
|
#ifdef HAVE_UNISTD_H
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef HAVE_PROCESS_H
|
||||||
|
#include <process.h> /* Some have getpid() here */
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
@@ -89,13 +93,26 @@ int ares_init_options(ares_channel *channelptr, struct ares_options *options,
|
|||||||
int optmask)
|
int optmask)
|
||||||
{
|
{
|
||||||
ares_channel channel;
|
ares_channel channel;
|
||||||
int i, status;
|
int i;
|
||||||
|
int status = ARES_SUCCESS;
|
||||||
struct server_state *server;
|
struct server_state *server;
|
||||||
struct timeval tv;
|
struct timeval tv;
|
||||||
|
|
||||||
|
#ifdef CURLDEBUG
|
||||||
|
const char *env = getenv("CARES_MEMDEBUG");
|
||||||
|
|
||||||
|
if (env)
|
||||||
|
curl_memdebug(env);
|
||||||
|
env = getenv("CARES_MEMLIMIT");
|
||||||
|
if (env)
|
||||||
|
curl_memlimit(atoi(env));
|
||||||
|
#endif
|
||||||
|
|
||||||
channel = malloc(sizeof(struct ares_channeldata));
|
channel = malloc(sizeof(struct ares_channeldata));
|
||||||
if (!channel)
|
if (!channel) {
|
||||||
|
*channelptr = NULL;
|
||||||
return ARES_ENOMEM;
|
return ARES_ENOMEM;
|
||||||
|
}
|
||||||
|
|
||||||
/* Set everything to distinguished values so we know they haven't
|
/* Set everything to distinguished values so we know they haven't
|
||||||
* been set yet.
|
* been set yet.
|
||||||
@@ -113,21 +130,42 @@ int ares_init_options(ares_channel *channelptr, struct ares_options *options,
|
|||||||
channel->queries = NULL;
|
channel->queries = NULL;
|
||||||
channel->domains = NULL;
|
channel->domains = NULL;
|
||||||
channel->sortlist = NULL;
|
channel->sortlist = NULL;
|
||||||
|
channel->servers = NULL;
|
||||||
|
channel->sock_state_cb = NULL;
|
||||||
|
channel->sock_state_cb_data = NULL;
|
||||||
|
|
||||||
/* Initialize configuration by each of the four sources, from highest
|
/* Initialize configuration by each of the four sources, from highest
|
||||||
* precedence to lowest.
|
* precedence to lowest.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
if (status == ARES_SUCCESS) {
|
||||||
status = init_by_options(channel, options, optmask);
|
status = init_by_options(channel, options, optmask);
|
||||||
if (status == ARES_SUCCESS)
|
if (status != ARES_SUCCESS)
|
||||||
|
DEBUGF(fprintf(stderr, "Error: init_by_options failed: %s\n",
|
||||||
|
ares_strerror(status)));
|
||||||
|
}
|
||||||
|
if (status == ARES_SUCCESS) {
|
||||||
status = init_by_environment(channel);
|
status = init_by_environment(channel);
|
||||||
if (status == ARES_SUCCESS)
|
if (status != ARES_SUCCESS)
|
||||||
|
DEBUGF(fprintf(stderr, "Error: init_by_environment failed: %s\n",
|
||||||
|
ares_strerror(status)));
|
||||||
|
}
|
||||||
|
if (status == ARES_SUCCESS) {
|
||||||
status = init_by_resolv_conf(channel);
|
status = init_by_resolv_conf(channel);
|
||||||
if (status == ARES_SUCCESS)
|
if (status != ARES_SUCCESS)
|
||||||
|
DEBUGF(fprintf(stderr, "Error: init_by_resolv_conf failed: %s\n",
|
||||||
|
ares_strerror(status)));
|
||||||
|
}
|
||||||
|
if (status == ARES_SUCCESS) {
|
||||||
status = init_by_defaults(channel);
|
status = init_by_defaults(channel);
|
||||||
|
if (status != ARES_SUCCESS)
|
||||||
|
DEBUGF(fprintf(stderr, "Error: init_by_defaults failed: %s\n",
|
||||||
|
ares_strerror(status)));
|
||||||
|
}
|
||||||
if (status != ARES_SUCCESS)
|
if (status != ARES_SUCCESS)
|
||||||
{
|
{
|
||||||
/* Something failed; clean up memory we may have allocated. */
|
/* Something failed; clean up memory we may have allocated. */
|
||||||
if (channel->nservers != -1)
|
if (channel->servers)
|
||||||
free(channel->servers);
|
free(channel->servers);
|
||||||
if (channel->domains)
|
if (channel->domains)
|
||||||
{
|
{
|
||||||
@@ -166,7 +204,7 @@ int ares_init_options(ares_channel *channelptr, struct ares_options *options,
|
|||||||
*/
|
*/
|
||||||
gettimeofday(&tv, NULL);
|
gettimeofday(&tv, NULL);
|
||||||
channel->next_id = (unsigned short)
|
channel->next_id = (unsigned short)
|
||||||
(tv.tv_sec ^ tv.tv_usec ^ getpid()) & 0xffff;
|
((tv.tv_sec ^ tv.tv_usec ^ getpid()) & 0xffff);
|
||||||
|
|
||||||
channel->queries = NULL;
|
channel->queries = NULL;
|
||||||
|
|
||||||
@@ -192,16 +230,25 @@ static int init_by_options(ares_channel channel, struct ares_options *options,
|
|||||||
channel->udp_port = options->udp_port;
|
channel->udp_port = options->udp_port;
|
||||||
if ((optmask & ARES_OPT_TCP_PORT) && channel->tcp_port == -1)
|
if ((optmask & ARES_OPT_TCP_PORT) && channel->tcp_port == -1)
|
||||||
channel->tcp_port = options->tcp_port;
|
channel->tcp_port = options->tcp_port;
|
||||||
|
if ((optmask & ARES_OPT_SOCK_STATE_CB) && channel->sock_state_cb == NULL)
|
||||||
|
{
|
||||||
|
channel->sock_state_cb = options->sock_state_cb;
|
||||||
|
channel->sock_state_cb_data = options->sock_state_cb_data;
|
||||||
|
}
|
||||||
|
|
||||||
/* Copy the servers, if given. */
|
/* Copy the servers, if given. */
|
||||||
if ((optmask & ARES_OPT_SERVERS) && channel->nservers == -1)
|
if ((optmask & ARES_OPT_SERVERS) && channel->nservers == -1)
|
||||||
{
|
{
|
||||||
channel->servers =
|
/* Avoid zero size allocations at any cost */
|
||||||
malloc(options->nservers * sizeof(struct server_state));
|
if (options->nservers > 0)
|
||||||
if (!channel->servers && options->nservers != 0)
|
{
|
||||||
return ARES_ENOMEM;
|
channel->servers =
|
||||||
for (i = 0; i < options->nservers; i++)
|
malloc(options->nservers * sizeof(struct server_state));
|
||||||
channel->servers[i].addr = options->servers[i];
|
if (!channel->servers)
|
||||||
|
return ARES_ENOMEM;
|
||||||
|
for (i = 0; i < options->nservers; i++)
|
||||||
|
channel->servers[i].addr = options->servers[i];
|
||||||
|
}
|
||||||
channel->nservers = options->nservers;
|
channel->nservers = options->nservers;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -210,16 +257,20 @@ static int init_by_options(ares_channel channel, struct ares_options *options,
|
|||||||
*/
|
*/
|
||||||
if ((optmask & ARES_OPT_DOMAINS) && channel->ndomains == -1)
|
if ((optmask & ARES_OPT_DOMAINS) && channel->ndomains == -1)
|
||||||
{
|
{
|
||||||
channel->domains = malloc(options->ndomains * sizeof(char *));
|
/* Avoid zero size allocations at any cost */
|
||||||
if (!channel->domains && options->ndomains != 0)
|
if (options->ndomains > 0)
|
||||||
return ARES_ENOMEM;
|
{
|
||||||
for (i = 0; i < options->ndomains; i++)
|
channel->domains = malloc(options->ndomains * sizeof(char *));
|
||||||
{
|
if (!channel->domains)
|
||||||
channel->ndomains = i;
|
return ARES_ENOMEM;
|
||||||
channel->domains[i] = strdup(options->domains[i]);
|
for (i = 0; i < options->ndomains; i++)
|
||||||
if (!channel->domains[i])
|
{
|
||||||
return ARES_ENOMEM;
|
channel->ndomains = i;
|
||||||
}
|
channel->domains[i] = strdup(options->domains[i]);
|
||||||
|
if (!channel->domains[i])
|
||||||
|
return ARES_ENOMEM;
|
||||||
|
}
|
||||||
|
}
|
||||||
channel->ndomains = options->ndomains;
|
channel->ndomains = options->ndomains;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -355,7 +406,8 @@ static int get_iphlpapi_dns_info (char *ret_buf, size_t ret_size)
|
|||||||
printf ("DNS Servers:\n"
|
printf ("DNS Servers:\n"
|
||||||
" %s (primary)\n", fi->DnsServerList.IpAddress.String);
|
" %s (primary)\n", fi->DnsServerList.IpAddress.String);
|
||||||
}
|
}
|
||||||
if (inet_addr(fi->DnsServerList.IpAddress.String) != INADDR_NONE &&
|
if (strlen(fi->DnsServerList.IpAddress.String) > 0 &&
|
||||||
|
inet_addr(fi->DnsServerList.IpAddress.String) != INADDR_NONE &&
|
||||||
left > ip_size)
|
left > ip_size)
|
||||||
{
|
{
|
||||||
ret += sprintf (ret, "%s,", fi->DnsServerList.IpAddress.String);
|
ret += sprintf (ret, "%s,", fi->DnsServerList.IpAddress.String);
|
||||||
@@ -504,7 +556,7 @@ DhcpNameServer
|
|||||||
if (status == ARES_SUCCESS)
|
if (status == ARES_SUCCESS)
|
||||||
status = ARES_EOF;
|
status = ARES_EOF;
|
||||||
|
|
||||||
#elif defined(riscos)
|
#elif defined(__riscos__)
|
||||||
|
|
||||||
/* Under RISC OS, name servers are listed in the
|
/* Under RISC OS, name servers are listed in the
|
||||||
system variable Inet$Resolvers, space separated. */
|
system variable Inet$Resolvers, space separated. */
|
||||||
@@ -521,7 +573,7 @@ DhcpNameServer
|
|||||||
do {
|
do {
|
||||||
space = strchr(pos, ' ');
|
space = strchr(pos, ' ');
|
||||||
if (space)
|
if (space)
|
||||||
*space = 0;
|
*space = '\0';
|
||||||
status = config_nameserver(&servers, &nservers, pos);
|
status = config_nameserver(&servers, &nservers, pos);
|
||||||
if (status != ARES_SUCCESS)
|
if (status != ARES_SUCCESS)
|
||||||
break;
|
break;
|
||||||
@@ -557,32 +609,47 @@ DhcpNameServer
|
|||||||
char *p;
|
char *p;
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
int linesize;
|
int linesize;
|
||||||
|
int error;
|
||||||
|
|
||||||
fp = fopen(PATH_RESOLV_CONF, "r");
|
fp = fopen(PATH_RESOLV_CONF, "r");
|
||||||
if (!fp)
|
if (fp) {
|
||||||
return (errno == ENOENT) ? ARES_SUCCESS : ARES_EFILE;
|
while ((status = ares__read_line(fp, &line, &linesize)) == ARES_SUCCESS)
|
||||||
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")))
|
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, "bind", "file");
|
||||||
status = config_lookup(channel, p, "bind", "file");
|
else if ((p = try_config(line, "search")) && channel->ndomains == -1)
|
||||||
else if ((p = try_config(line, "search")))
|
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;
|
}
|
||||||
|
fclose(fp);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
error = ERRNO;
|
||||||
|
switch(error) {
|
||||||
|
case ENOENT:
|
||||||
|
case ESRCH:
|
||||||
|
status = ARES_EOF;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
DEBUGF(fprintf(stderr, "fopen() failed with error: %d %s\n",
|
||||||
|
error, strerror(error)));
|
||||||
|
DEBUGF(fprintf(stderr, "Error opening file: %s\n", PATH_RESOLV_CONF));
|
||||||
|
status = ARES_EFILE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
fclose(fp);
|
|
||||||
|
|
||||||
if (!channel->lookups) {
|
if ((status == ARES_EOF) && (!channel->lookups)) {
|
||||||
/* Many systems (Solaris, Linux, BSD's) use nsswitch.conf */
|
/* Many systems (Solaris, Linux, BSD's) use nsswitch.conf */
|
||||||
fp = fopen("/etc/nsswitch.conf", "r");
|
fp = fopen("/etc/nsswitch.conf", "r");
|
||||||
if (fp) {
|
if (fp) {
|
||||||
@@ -593,9 +660,23 @@ DhcpNameServer
|
|||||||
}
|
}
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
error = ERRNO;
|
||||||
|
switch(error) {
|
||||||
|
case ENOENT:
|
||||||
|
case ESRCH:
|
||||||
|
status = ARES_EOF;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
DEBUGF(fprintf(stderr, "fopen() failed with error: %d %s\n",
|
||||||
|
error, strerror(error)));
|
||||||
|
DEBUGF(fprintf(stderr, "Error opening file: %s\n", "/etc/nsswitch.conf"));
|
||||||
|
status = ARES_EFILE;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!channel->lookups) {
|
if ((status == ARES_EOF) && (!channel->lookups)) {
|
||||||
/* Linux / GNU libc 2.x and possibly others have host.conf */
|
/* Linux / GNU libc 2.x and possibly others have host.conf */
|
||||||
fp = fopen("/etc/host.conf", "r");
|
fp = fopen("/etc/host.conf", "r");
|
||||||
if (fp) {
|
if (fp) {
|
||||||
@@ -606,9 +687,23 @@ DhcpNameServer
|
|||||||
}
|
}
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
error = ERRNO;
|
||||||
|
switch(error) {
|
||||||
|
case ENOENT:
|
||||||
|
case ESRCH:
|
||||||
|
status = ARES_EOF;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
DEBUGF(fprintf(stderr, "fopen() failed with error: %d %s\n",
|
||||||
|
error, strerror(error)));
|
||||||
|
DEBUGF(fprintf(stderr, "Error opening file: %s\n", "/etc/host.conf"));
|
||||||
|
status = ARES_EFILE;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!channel->lookups) {
|
if ((status == ARES_EOF) && (!channel->lookups)) {
|
||||||
/* Tru64 uses /etc/svc.conf */
|
/* Tru64 uses /etc/svc.conf */
|
||||||
fp = fopen("/etc/svc.conf", "r");
|
fp = fopen("/etc/svc.conf", "r");
|
||||||
if (fp) {
|
if (fp) {
|
||||||
@@ -619,6 +714,20 @@ DhcpNameServer
|
|||||||
}
|
}
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
error = ERRNO;
|
||||||
|
switch(error) {
|
||||||
|
case ENOENT:
|
||||||
|
case ESRCH:
|
||||||
|
status = ARES_EOF;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
DEBUGF(fprintf(stderr, "fopen() failed with error: %d %s\n",
|
||||||
|
error, strerror(error)));
|
||||||
|
DEBUGF(fprintf(stderr, "Error opening file: %s\n", "/etc/svc.conf"));
|
||||||
|
status = ARES_EFILE;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(line)
|
if(line)
|
||||||
@@ -692,7 +801,6 @@ static int init_by_defaults(ares_channel channel)
|
|||||||
if (gethostname(hostname, sizeof(hostname)) == -1
|
if (gethostname(hostname, sizeof(hostname)) == -1
|
||||||
|| !strchr(hostname, '.'))
|
|| !strchr(hostname, '.'))
|
||||||
{
|
{
|
||||||
channel->domains = malloc(0);
|
|
||||||
channel->ndomains = 0;
|
channel->ndomains = 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -731,9 +839,9 @@ static int config_domain(ares_channel channel, char *str)
|
|||||||
|
|
||||||
/* Set a single search domain. */
|
/* Set a single search domain. */
|
||||||
q = str;
|
q = str;
|
||||||
while (*q && !isspace((unsigned char)*q))
|
while (*q && !ISSPACE(*q))
|
||||||
q++;
|
q++;
|
||||||
*q = 0;
|
*q = '\0';
|
||||||
return set_search(channel, str);
|
return set_search(channel, str);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -755,12 +863,12 @@ static int config_lookup(ares_channel channel, const char *str,
|
|||||||
if (*p == *bindch) *l++ = 'b';
|
if (*p == *bindch) *l++ = 'b';
|
||||||
else *l++ = 'f';
|
else *l++ = 'f';
|
||||||
}
|
}
|
||||||
while (*p && !isspace((unsigned char)*p) && (*p != ','))
|
while (*p && !ISSPACE(*p) && (*p != ','))
|
||||||
p++;
|
p++;
|
||||||
while (*p && (isspace((unsigned char)*p) || (*p == ',')))
|
while (*p && (ISSPACE(*p) || (*p == ',')))
|
||||||
p++;
|
p++;
|
||||||
}
|
}
|
||||||
*l = 0;
|
*l = '\0';
|
||||||
channel->lookups = strdup(lookups);
|
channel->lookups = strdup(lookups);
|
||||||
return (channel->lookups) ? ARES_SUCCESS : ARES_ENOMEM;
|
return (channel->lookups) ? ARES_SUCCESS : ARES_ENOMEM;
|
||||||
}
|
}
|
||||||
@@ -782,12 +890,12 @@ static int config_nameserver(struct server_state **servers, int *nservers,
|
|||||||
while (more)
|
while (more)
|
||||||
{
|
{
|
||||||
more = 0;
|
more = 0;
|
||||||
while (*p && !isspace(*p) && *p != ',')
|
while (*p && !ISSPACE(*p) && *p != ',')
|
||||||
p++;
|
p++;
|
||||||
|
|
||||||
if (*p)
|
if (*p)
|
||||||
{
|
{
|
||||||
*p = 0;
|
*p = '\0';
|
||||||
more = 1;
|
more = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -842,22 +950,22 @@ static int config_sortlist(struct apattern **sortlist, int *nsort,
|
|||||||
char ipbuf[16], ipbufpfx[32];
|
char ipbuf[16], ipbufpfx[32];
|
||||||
/* Find just the IP */
|
/* Find just the IP */
|
||||||
q = str;
|
q = str;
|
||||||
while (*q && *q != '/' && *q != ';' && !isspace((unsigned char)*q))
|
while (*q && *q != '/' && *q != ';' && !ISSPACE(*q))
|
||||||
q++;
|
q++;
|
||||||
memcpy(ipbuf, str, (int)(q-str));
|
memcpy(ipbuf, str, (int)(q-str));
|
||||||
ipbuf[(int)(q-str)] = 0;
|
ipbuf[(int)(q-str)] = '\0';
|
||||||
/* Find the prefix */
|
/* Find the prefix */
|
||||||
if (*q == '/')
|
if (*q == '/')
|
||||||
{
|
{
|
||||||
const char *str2 = q+1;
|
const char *str2 = q+1;
|
||||||
while (*q && *q != ';' && !isspace((unsigned char)*q))
|
while (*q && *q != ';' && !ISSPACE(*q))
|
||||||
q++;
|
q++;
|
||||||
memcpy(ipbufpfx, str, (int)(q-str));
|
memcpy(ipbufpfx, str, (int)(q-str));
|
||||||
ipbufpfx[(int)(q-str)] = 0;
|
ipbufpfx[(int)(q-str)] = '\0';
|
||||||
str = str2;
|
str = str2;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
ipbufpfx[0] = 0;
|
ipbufpfx[0] = '\0';
|
||||||
/* Lets see if it is CIDR */
|
/* Lets see if it is CIDR */
|
||||||
/* First we'll try IPv6 */
|
/* First we'll try IPv6 */
|
||||||
if ((bits = ares_inet_net_pton(AF_INET6, ipbufpfx ? ipbufpfx : ipbuf,
|
if ((bits = ares_inet_net_pton(AF_INET6, ipbufpfx ? ipbufpfx : ipbuf,
|
||||||
@@ -865,7 +973,7 @@ static int config_sortlist(struct apattern **sortlist, int *nsort,
|
|||||||
sizeof(pat.addr.addr6))) > 0)
|
sizeof(pat.addr.addr6))) > 0)
|
||||||
{
|
{
|
||||||
pat.type = PATTERN_CIDR;
|
pat.type = PATTERN_CIDR;
|
||||||
pat.mask.bits = bits;
|
pat.mask.bits = (unsigned short)bits;
|
||||||
pat.family = AF_INET6;
|
pat.family = AF_INET6;
|
||||||
if (!sortlist_alloc(sortlist, nsort, &pat))
|
if (!sortlist_alloc(sortlist, nsort, &pat))
|
||||||
return ARES_ENOMEM;
|
return ARES_ENOMEM;
|
||||||
@@ -875,7 +983,7 @@ static int config_sortlist(struct apattern **sortlist, int *nsort,
|
|||||||
sizeof(pat.addr.addr4))) > 0)
|
sizeof(pat.addr.addr4))) > 0)
|
||||||
{
|
{
|
||||||
pat.type = PATTERN_CIDR;
|
pat.type = PATTERN_CIDR;
|
||||||
pat.mask.bits = bits;
|
pat.mask.bits = (unsigned short)bits;
|
||||||
pat.family = AF_INET;
|
pat.family = AF_INET;
|
||||||
if (!sortlist_alloc(sortlist, nsort, &pat))
|
if (!sortlist_alloc(sortlist, nsort, &pat))
|
||||||
return ARES_ENOMEM;
|
return ARES_ENOMEM;
|
||||||
@@ -886,7 +994,7 @@ static int config_sortlist(struct apattern **sortlist, int *nsort,
|
|||||||
if (ipbufpfx)
|
if (ipbufpfx)
|
||||||
{
|
{
|
||||||
memcpy(ipbuf, str, (int)(q-str));
|
memcpy(ipbuf, str, (int)(q-str));
|
||||||
ipbuf[(int)(q-str)] = 0;
|
ipbuf[(int)(q-str)] = '\0';
|
||||||
if (ip_addr(ipbuf, (int)(q - str), &pat.mask.addr.addr4) != 0)
|
if (ip_addr(ipbuf, (int)(q - str), &pat.mask.addr.addr4) != 0)
|
||||||
natural_mask(&pat);
|
natural_mask(&pat);
|
||||||
}
|
}
|
||||||
@@ -899,11 +1007,11 @@ static int config_sortlist(struct apattern **sortlist, int *nsort,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
while (*q && *q != ';' && !isspace((unsigned char)*q))
|
while (*q && *q != ';' && !ISSPACE(*q))
|
||||||
q++;
|
q++;
|
||||||
}
|
}
|
||||||
str = q;
|
str = q;
|
||||||
while (isspace((unsigned char)*str))
|
while (ISSPACE(*str))
|
||||||
str++;
|
str++;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -921,6 +1029,7 @@ static int set_search(ares_channel channel, const char *str)
|
|||||||
for(n=0; n < channel->ndomains; n++)
|
for(n=0; n < channel->ndomains; n++)
|
||||||
free(channel->domains[n]);
|
free(channel->domains[n]);
|
||||||
free(channel->domains);
|
free(channel->domains);
|
||||||
|
channel->domains = NULL;
|
||||||
channel->ndomains = -1;
|
channel->ndomains = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -929,15 +1038,21 @@ static int set_search(ares_channel channel, const char *str)
|
|||||||
p = str;
|
p = str;
|
||||||
while (*p)
|
while (*p)
|
||||||
{
|
{
|
||||||
while (*p && !isspace((unsigned char)*p))
|
while (*p && !ISSPACE(*p))
|
||||||
p++;
|
p++;
|
||||||
while (isspace((unsigned char)*p))
|
while (ISSPACE(*p))
|
||||||
p++;
|
p++;
|
||||||
n++;
|
n++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!n)
|
||||||
|
{
|
||||||
|
channel->ndomains = 0;
|
||||||
|
return ARES_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
channel->domains = malloc(n * sizeof(char *));
|
channel->domains = malloc(n * sizeof(char *));
|
||||||
if (!channel->domains && n)
|
if (!channel->domains)
|
||||||
return ARES_ENOMEM;
|
return ARES_ENOMEM;
|
||||||
|
|
||||||
/* Now copy the domains. */
|
/* Now copy the domains. */
|
||||||
@@ -947,7 +1062,7 @@ static int set_search(ares_channel channel, const char *str)
|
|||||||
{
|
{
|
||||||
channel->ndomains = n;
|
channel->ndomains = n;
|
||||||
q = p;
|
q = p;
|
||||||
while (*q && !isspace((unsigned char)*q))
|
while (*q && !ISSPACE(*q))
|
||||||
q++;
|
q++;
|
||||||
channel->domains[n] = malloc(q - p + 1);
|
channel->domains[n] = malloc(q - p + 1);
|
||||||
if (!channel->domains[n])
|
if (!channel->domains[n])
|
||||||
@@ -955,7 +1070,7 @@ static int set_search(ares_channel channel, const char *str)
|
|||||||
memcpy(channel->domains[n], p, q - p);
|
memcpy(channel->domains[n], p, q - p);
|
||||||
channel->domains[n][q - p] = 0;
|
channel->domains[n][q - p] = 0;
|
||||||
p = q;
|
p = q;
|
||||||
while (isspace((unsigned char)*p))
|
while (ISSPACE(*p))
|
||||||
p++;
|
p++;
|
||||||
n++;
|
n++;
|
||||||
}
|
}
|
||||||
@@ -972,7 +1087,7 @@ static int set_options(ares_channel channel, const char *str)
|
|||||||
while (*p)
|
while (*p)
|
||||||
{
|
{
|
||||||
q = p;
|
q = p;
|
||||||
while (*q && !isspace((unsigned char)*q))
|
while (*q && !ISSPACE(*q))
|
||||||
q++;
|
q++;
|
||||||
val = try_option(p, q, "ndots:");
|
val = try_option(p, q, "ndots:");
|
||||||
if (val && channel->ndots == -1)
|
if (val && channel->ndots == -1)
|
||||||
@@ -984,7 +1099,7 @@ static int set_options(ares_channel channel, const char *str)
|
|||||||
if (val && channel->tries == -1)
|
if (val && channel->tries == -1)
|
||||||
channel->tries = atoi(val);
|
channel->tries = atoi(val);
|
||||||
p = q;
|
p = q;
|
||||||
while (isspace((unsigned char)*p))
|
while (ISSPACE(*p))
|
||||||
p++;
|
p++;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -997,10 +1112,10 @@ static char *try_config(char *s, const char *opt)
|
|||||||
size_t 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(s[len]))
|
||||||
return NULL;
|
return NULL;
|
||||||
s += len;
|
s += len;
|
||||||
while (isspace((unsigned char)*s))
|
while (ISSPACE(*s))
|
||||||
s++;
|
s++;
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -40,14 +40,14 @@ struct sockaddr_in6
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef HAVE_STRUCT_ADDRINFO
|
#ifndef HAVE_STRUCT_ADDRINFO
|
||||||
struct addrinfo
|
struct addrinfo
|
||||||
{
|
{
|
||||||
int ai_flags;
|
int ai_flags;
|
||||||
int ai_family;
|
int ai_family;
|
||||||
int ai_socktype;
|
int ai_socktype;
|
||||||
int ai_protocol;
|
int ai_protocol;
|
||||||
size_t ai_addrlen;
|
socklen_t ai_addrlen; /* Follow rfc3493 struct addrinfo */
|
||||||
char *ai_cannonname;
|
char *ai_canonname;
|
||||||
struct sockaddr *ai_addr;
|
struct sockaddr *ai_addr;
|
||||||
struct addrinfo *ai_next;
|
struct addrinfo *ai_next;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this
|
* Permission to use, copy, modify, and distribute this
|
||||||
@@ -14,7 +16,6 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "setup.h"
|
#include "setup.h"
|
||||||
#include <sys/types.h>
|
|
||||||
|
|
||||||
#if defined(WIN32) && !defined(WATT32)
|
#if defined(WIN32) && !defined(WATT32)
|
||||||
#include "nameser.h"
|
#include "nameser.h"
|
||||||
@@ -30,6 +31,7 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include "ares.h"
|
#include "ares.h"
|
||||||
#include "ares_dns.h"
|
#include "ares_dns.h"
|
||||||
|
#include "ares_private.h"
|
||||||
|
|
||||||
/* Header format, from RFC 1035:
|
/* Header format, from RFC 1035:
|
||||||
* 1 1 1 1 1 1
|
* 1 1 1 1 1 1
|
||||||
@@ -112,7 +114,12 @@ int ares_mkquery(const char *name, int dnsclass, int type, unsigned short id,
|
|||||||
memset(q, 0, HFIXEDSZ);
|
memset(q, 0, HFIXEDSZ);
|
||||||
DNS_HEADER_SET_QID(q, id);
|
DNS_HEADER_SET_QID(q, id);
|
||||||
DNS_HEADER_SET_OPCODE(q, QUERY);
|
DNS_HEADER_SET_OPCODE(q, QUERY);
|
||||||
DNS_HEADER_SET_RD(q, (rd) ? 1 : 0);
|
if (rd) {
|
||||||
|
DNS_HEADER_SET_RD(q, 1);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
DNS_HEADER_SET_RD(q, 0);
|
||||||
|
}
|
||||||
DNS_HEADER_SET_QDCOUNT(q, 1);
|
DNS_HEADER_SET_QDCOUNT(q, 1);
|
||||||
|
|
||||||
/* A name of "." is a screw case for the loop below, so adjust it. */
|
/* A name of "." is a screw case for the loop below, so adjust it. */
|
||||||
@@ -138,7 +145,7 @@ int ares_mkquery(const char *name, int dnsclass, int type, unsigned short id,
|
|||||||
return ARES_EBADNAME;
|
return ARES_EBADNAME;
|
||||||
|
|
||||||
/* Encode the length and copy the data. */
|
/* Encode the length and copy the data. */
|
||||||
*q++ = len;
|
*q++ = (unsigned char)len;
|
||||||
for (p = name; *p && *p != '.'; p++)
|
for (p = name; *p && *p != '.'; p++)
|
||||||
{
|
{
|
||||||
if (*p == '\\' && *(p + 1) != 0)
|
if (*p == '\\' && *(p + 1) != 0)
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this
|
* Permission to use, copy, modify, and distribute this
|
||||||
@@ -14,7 +16,6 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "setup.h"
|
#include "setup.h"
|
||||||
#include <sys/types.h>
|
|
||||||
|
|
||||||
#if defined(WIN32) && !defined(WATT32)
|
#if defined(WIN32) && !defined(WATT32)
|
||||||
#include "nameser.h"
|
#include "nameser.h"
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
/* Copyright 2005 Dominick Meglio
|
/* Copyright 2005 Dominick Meglio
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this
|
* Permission to use, copy, modify, and distribute this
|
||||||
@@ -14,7 +16,6 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "setup.h"
|
#include "setup.h"
|
||||||
#include <sys/types.h>
|
|
||||||
|
|
||||||
#if defined(WIN32) && !defined(WATT32)
|
#if defined(WIN32) && !defined(WATT32)
|
||||||
#include "nameser.h"
|
#include "nameser.h"
|
||||||
|
|||||||
66
ares/ares_parse_ns_reply.3
Normal file
66
ares/ares_parse_ns_reply.3
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
.\"
|
||||||
|
.\" 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_PARSE_NS_REPLY 3 "10 February 2007"
|
||||||
|
.SH NAME
|
||||||
|
ares_parse_ns_reply \- Parse a reply to a DNS query of type NS into a hostent
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.nf
|
||||||
|
.B #include <ares.h>
|
||||||
|
.PP
|
||||||
|
.B int ares_parse_ns_reply(const unsigned char *\fIabuf\fP, int \fIalen\fP,
|
||||||
|
.B struct hostent **\fIhost\fP);
|
||||||
|
.fi
|
||||||
|
.SH DESCRIPTION
|
||||||
|
The
|
||||||
|
.B ares_parse_ns_reply
|
||||||
|
function parses the response to a query of type NS into a
|
||||||
|
.BR "struct hostent" .
|
||||||
|
The parameters
|
||||||
|
.I abuf
|
||||||
|
and
|
||||||
|
.I alen
|
||||||
|
give the contents of the response. The result is stored in allocated
|
||||||
|
memory and a pointer to it stored into the variable pointed to by
|
||||||
|
.IR host .
|
||||||
|
The nameservers are stored into the
|
||||||
|
.BR aliases
|
||||||
|
field of the
|
||||||
|
.IR host
|
||||||
|
structure.
|
||||||
|
It is the caller's responsibility to free the resulting host structure
|
||||||
|
using
|
||||||
|
.BR ares_free_hostent (3)
|
||||||
|
when it is no longer needed.
|
||||||
|
.SH RETURN VALUES
|
||||||
|
.B ares_parse_ns_reply
|
||||||
|
can return any of the following values:
|
||||||
|
.TP 15
|
||||||
|
.B ARES_SUCCESS
|
||||||
|
The response was successfully parsed.
|
||||||
|
.TP 15
|
||||||
|
.B ARES_EBADRESP
|
||||||
|
The response was malformatted.
|
||||||
|
.TP 15
|
||||||
|
.B ARES_ENODATA
|
||||||
|
The response did not contain an answer to the query.
|
||||||
|
.TP 15
|
||||||
|
.B ARES_ENOMEM
|
||||||
|
Memory was exhausted.
|
||||||
|
.SH SEE ALSO
|
||||||
|
.BR ares_query (3),
|
||||||
|
.BR ares_free_hostent (3)
|
||||||
|
.SH AUTHOR
|
||||||
|
Written by Vlad Dinulescu <vlad.dinulescu@avira.com>, on behalf of AVIRA Gmbh http://www.avira.com
|
||||||
171
ares/ares_parse_ns_reply.c
Normal file
171
ares/ares_parse_ns_reply.c
Normal file
@@ -0,0 +1,171 @@
|
|||||||
|
/* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* ares_parse_ns_reply created by Vlad Dinulescu <vlad.dinulescu@avira.com>
|
||||||
|
* on behalf of AVIRA Gmbh - http://www.avira.com
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "setup.h"
|
||||||
|
|
||||||
|
#if defined(WIN32) && !defined(WATT32)
|
||||||
|
#include "nameser.h"
|
||||||
|
#else
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#include <arpa/inet.h>
|
||||||
|
#include <netdb.h>
|
||||||
|
#include <arpa/nameser.h>
|
||||||
|
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
|
||||||
|
#include <arpa/nameser_compat.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include "ares.h"
|
||||||
|
#include "ares_dns.h"
|
||||||
|
#include "ares_private.h"
|
||||||
|
|
||||||
|
int ares_parse_ns_reply( const unsigned char* abuf, int alen,
|
||||||
|
struct hostent** host )
|
||||||
|
{
|
||||||
|
unsigned int qdcount, ancount;
|
||||||
|
int status, i, rr_type, rr_class, rr_len;
|
||||||
|
int nameservers_num;
|
||||||
|
long len;
|
||||||
|
const unsigned char *aptr;
|
||||||
|
char* hostname, *rr_name, *rr_data, **nameservers;
|
||||||
|
struct hostent *hostent;
|
||||||
|
|
||||||
|
/* Set *host to NULL for all failure cases. */
|
||||||
|
*host = NULL;
|
||||||
|
|
||||||
|
/* Give up if abuf doesn't have room for a header. */
|
||||||
|
if ( alen < HFIXEDSZ )
|
||||||
|
return ARES_EBADRESP;
|
||||||
|
|
||||||
|
/* Fetch the question and answer count from the header. */
|
||||||
|
qdcount = DNS_HEADER_QDCOUNT( abuf );
|
||||||
|
ancount = DNS_HEADER_ANCOUNT( abuf );
|
||||||
|
if ( qdcount != 1 )
|
||||||
|
return ARES_EBADRESP;
|
||||||
|
|
||||||
|
/* Expand the name from the question, and skip past the question. */
|
||||||
|
aptr = abuf + HFIXEDSZ;
|
||||||
|
status = ares_expand_name( aptr, abuf, alen, &hostname, &len );
|
||||||
|
if ( status != ARES_SUCCESS )
|
||||||
|
return status;
|
||||||
|
if ( aptr + len + QFIXEDSZ > abuf + alen )
|
||||||
|
{
|
||||||
|
free( hostname );
|
||||||
|
return ARES_EBADRESP;
|
||||||
|
}
|
||||||
|
aptr += len + QFIXEDSZ;
|
||||||
|
|
||||||
|
/* Allocate nameservers array; ancount gives an upper bound */
|
||||||
|
nameservers = malloc( ( ancount + 1 ) * sizeof( char * ) );
|
||||||
|
if ( !nameservers )
|
||||||
|
{
|
||||||
|
free( hostname );
|
||||||
|
return ARES_ENOMEM;
|
||||||
|
}
|
||||||
|
nameservers_num = 0;
|
||||||
|
|
||||||
|
/* Examine each answer resource record (RR) in turn. */
|
||||||
|
for ( i = 0; i < ( int ) ancount; i++ )
|
||||||
|
{
|
||||||
|
/* Decode the RR up to the data field. */
|
||||||
|
status = ares_expand_name( aptr, abuf, alen, &rr_name, &len );
|
||||||
|
if ( status != ARES_SUCCESS )
|
||||||
|
break;
|
||||||
|
aptr += len;
|
||||||
|
if ( aptr + RRFIXEDSZ > abuf + alen )
|
||||||
|
{
|
||||||
|
status = ARES_EBADRESP;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
rr_type = DNS_RR_TYPE( aptr );
|
||||||
|
rr_class = DNS_RR_CLASS( aptr );
|
||||||
|
rr_len = DNS_RR_LEN( aptr );
|
||||||
|
aptr += RRFIXEDSZ;
|
||||||
|
|
||||||
|
if ( rr_class == C_IN && rr_type == T_NS )
|
||||||
|
{
|
||||||
|
/* Decode the RR data and add it to the nameservers list */
|
||||||
|
status = ares_expand_name( aptr, abuf, alen, &rr_data, &len );
|
||||||
|
if ( status != ARES_SUCCESS )
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
nameservers[nameservers_num] = malloc(strlen(rr_data)+1);
|
||||||
|
|
||||||
|
if (nameservers[nameservers_num]==NULL)
|
||||||
|
{
|
||||||
|
free(rr_name);
|
||||||
|
free(rr_data);
|
||||||
|
status=ARES_ENOMEM;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
strcpy(nameservers[nameservers_num],rr_data);
|
||||||
|
free(rr_data);
|
||||||
|
|
||||||
|
nameservers_num++;
|
||||||
|
}
|
||||||
|
|
||||||
|
free( rr_name );
|
||||||
|
|
||||||
|
aptr += rr_len;
|
||||||
|
if ( aptr > abuf + alen )
|
||||||
|
{
|
||||||
|
status = ARES_EBADRESP;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( status == ARES_SUCCESS && nameservers_num == 0 )
|
||||||
|
{
|
||||||
|
status = ARES_ENODATA;
|
||||||
|
}
|
||||||
|
if ( status == ARES_SUCCESS )
|
||||||
|
{
|
||||||
|
/* We got our answer. Allocate memory to build the host entry. */
|
||||||
|
nameservers[nameservers_num] = NULL;
|
||||||
|
hostent = malloc( sizeof( struct hostent ) );
|
||||||
|
if ( hostent )
|
||||||
|
{
|
||||||
|
hostent->h_addr_list = malloc( 1 * sizeof( char * ) );
|
||||||
|
if ( hostent->h_addr_list )
|
||||||
|
{
|
||||||
|
/* Fill in the hostent and return successfully. */
|
||||||
|
hostent->h_name = hostname;
|
||||||
|
hostent->h_aliases = nameservers;
|
||||||
|
hostent->h_addrtype = AF_INET;
|
||||||
|
hostent->h_length = sizeof( struct in_addr );
|
||||||
|
hostent->h_addr_list[0] = NULL;
|
||||||
|
*host = hostent;
|
||||||
|
return ARES_SUCCESS;
|
||||||
|
}
|
||||||
|
free( hostent );
|
||||||
|
}
|
||||||
|
status = ARES_ENOMEM;
|
||||||
|
}
|
||||||
|
for ( i = 0; i < nameservers_num; i++ )
|
||||||
|
free( nameservers[i] );
|
||||||
|
free( nameservers );
|
||||||
|
free( hostname );
|
||||||
|
return status;
|
||||||
|
}
|
||||||
@@ -1,3 +1,5 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this
|
* Permission to use, copy, modify, and distribute this
|
||||||
@@ -14,7 +16,6 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "setup.h"
|
#include "setup.h"
|
||||||
#include <sys/types.h>
|
|
||||||
|
|
||||||
#if defined(WIN32) && !defined(WATT32)
|
#if defined(WIN32) && !defined(WATT32)
|
||||||
#include "nameser.h"
|
#include "nameser.h"
|
||||||
|
|||||||
@@ -1,3 +1,6 @@
|
|||||||
|
#ifndef __ARES_PRIVATE_H
|
||||||
|
#define __ARES_PRIVATE_H
|
||||||
|
|
||||||
/* $Id$ */
|
/* $Id$ */
|
||||||
|
|
||||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
@@ -62,6 +65,10 @@
|
|||||||
#define PATH_RESOLV_CONF "sys:/etc/resolv.cfg"
|
#define PATH_RESOLV_CONF "sys:/etc/resolv.cfg"
|
||||||
#define PATH_HOSTS "sys:/etc/hosts"
|
#define PATH_HOSTS "sys:/etc/hosts"
|
||||||
|
|
||||||
|
#elif defined(__riscos__)
|
||||||
|
|
||||||
|
#define PATH_HOSTS "InetDBase:Hosts"
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
#define PATH_RESOLV_CONF "/etc/resolv.conf"
|
#define PATH_RESOLV_CONF "/etc/resolv.conf"
|
||||||
@@ -172,13 +179,22 @@ struct ares_channeldata {
|
|||||||
|
|
||||||
/* Active queries */
|
/* Active queries */
|
||||||
struct query *queries;
|
struct query *queries;
|
||||||
|
|
||||||
|
ares_sock_state_cb sock_state_cb;
|
||||||
|
void *sock_state_cb_data;
|
||||||
};
|
};
|
||||||
|
|
||||||
void ares__send_query(ares_channel channel, struct query *query, time_t now);
|
void ares__send_query(ares_channel channel, struct query *query, time_t now);
|
||||||
void ares__close_sockets(struct server_state *server);
|
void ares__close_sockets(ares_channel channel, struct server_state *server);
|
||||||
int ares__get_hostent(FILE *fp, int family, struct hostent **host);
|
int ares__get_hostent(FILE *fp, int family, struct hostent **host);
|
||||||
int ares__read_line(FILE *fp, char **buf, int *bufsize);
|
int ares__read_line(FILE *fp, char **buf, int *bufsize);
|
||||||
|
|
||||||
|
#define SOCK_STATE_CALLBACK(c, s, r, w) \
|
||||||
|
do { \
|
||||||
|
if ((c)->sock_state_cb) \
|
||||||
|
(c)->sock_state_cb((c)->sock_state_cb_data, (s), (r), (w)); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
#ifdef CURLDEBUG
|
#ifdef CURLDEBUG
|
||||||
/* This is low-level hard-hacking memory leak tracking and similar. Using the
|
/* This is low-level hard-hacking memory leak tracking and similar. Using the
|
||||||
libcurl lowlevel code from within library is ugly and only works when
|
libcurl lowlevel code from within library is ugly and only works when
|
||||||
@@ -186,3 +202,6 @@ int ares__read_line(FILE *fp, char **buf, int *bufsize);
|
|||||||
this anyway for convenience. */
|
this anyway for convenience. */
|
||||||
#include "../lib/memdebug.h"
|
#include "../lib/memdebug.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#endif /* __ARES_PRIVATE_H */
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this
|
* Permission to use, copy, modify, and distribute this
|
||||||
@@ -14,7 +16,6 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "setup.h"
|
#include "setup.h"
|
||||||
#include <sys/types.h>
|
|
||||||
|
|
||||||
#if defined(WIN32) && !defined(WATT32)
|
#if defined(WIN32) && !defined(WATT32)
|
||||||
#include "nameser.h"
|
#include "nameser.h"
|
||||||
@@ -30,6 +31,8 @@
|
|||||||
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
|
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
|
||||||
#include <arpa/nameser_compat.h>
|
#include <arpa/nameser_compat.h>
|
||||||
#endif
|
#endif
|
||||||
|
#endif /* WIN32 && !WATT32 */
|
||||||
|
|
||||||
#ifdef HAVE_UNISTD_H
|
#ifdef HAVE_UNISTD_H
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#endif
|
#endif
|
||||||
@@ -39,7 +42,6 @@
|
|||||||
#ifdef NETWARE
|
#ifdef NETWARE
|
||||||
#include <sys/filio.h>
|
#include <sys/filio.h>
|
||||||
#endif
|
#endif
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@@ -51,17 +53,8 @@
|
|||||||
#include "ares_dns.h"
|
#include "ares_dns.h"
|
||||||
#include "ares_private.h"
|
#include "ares_private.h"
|
||||||
|
|
||||||
#ifndef TRUE
|
|
||||||
/* at least Solaris 7 does not have TRUE at this point */
|
|
||||||
#define TRUE 1
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if (defined(WIN32) || defined(WATT32)) && !defined(MSDOS)
|
|
||||||
#define GET_ERRNO() WSAGetLastError()
|
|
||||||
#else
|
|
||||||
#define GET_ERRNO() errno
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
static int try_again(int errnum);
|
||||||
static void write_tcp_data(ares_channel channel, fd_set *write_fds,
|
static void write_tcp_data(ares_channel channel, fd_set *write_fds,
|
||||||
time_t now);
|
time_t now);
|
||||||
static void read_tcp_data(ares_channel channel, fd_set *read_fds, time_t now);
|
static void read_tcp_data(ares_channel channel, fd_set *read_fds, time_t now);
|
||||||
@@ -93,6 +86,31 @@ void ares_process(ares_channel channel, fd_set *read_fds, fd_set *write_fds)
|
|||||||
process_timeouts(channel, now);
|
process_timeouts(channel, now);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Return 1 if the specified error number describes a readiness error, or 0
|
||||||
|
* otherwise. This is mostly for HP-UX, which could return EAGAIN or
|
||||||
|
* EWOULDBLOCK. See this man page
|
||||||
|
*
|
||||||
|
* http://devrsrc1.external.hp.com/STKS/cgi-bin/man2html?manpage=/usr/share/man/man2.Z/send.2
|
||||||
|
*/
|
||||||
|
static int try_again(int errnum)
|
||||||
|
{
|
||||||
|
#if !defined EWOULDBLOCK && !defined EAGAIN
|
||||||
|
#error "Neither EWOULDBLOCK nor EAGAIN defined"
|
||||||
|
#endif
|
||||||
|
switch (errnum)
|
||||||
|
{
|
||||||
|
#ifdef EWOULDBLOCK
|
||||||
|
case EWOULDBLOCK:
|
||||||
|
return 1;
|
||||||
|
#endif
|
||||||
|
#if defined EAGAIN && EAGAIN != EWOULDBLOCK
|
||||||
|
case EAGAIN:
|
||||||
|
return 1;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* If any TCP sockets select true for writing, write out queued data
|
/* If any TCP sockets select true for writing, write out queued data
|
||||||
* we have for them.
|
* we have for them.
|
||||||
*/
|
*/
|
||||||
@@ -103,7 +121,7 @@ static void write_tcp_data(ares_channel channel, fd_set *write_fds, time_t now)
|
|||||||
struct iovec *vec;
|
struct iovec *vec;
|
||||||
int i;
|
int i;
|
||||||
ssize_t scount;
|
ssize_t scount;
|
||||||
int wcount;
|
ssize_t wcount;
|
||||||
size_t n;
|
size_t n;
|
||||||
|
|
||||||
for (i = 0; i < channel->nservers; i++)
|
for (i = 0; i < channel->nservers; i++)
|
||||||
@@ -131,11 +149,12 @@ static void write_tcp_data(ares_channel channel, fd_set *write_fds, time_t now)
|
|||||||
vec[n].iov_len = sendreq->len;
|
vec[n].iov_len = sendreq->len;
|
||||||
n++;
|
n++;
|
||||||
}
|
}
|
||||||
wcount = writev(server->tcp_socket, vec, n);
|
wcount = (ssize_t)writev(server->tcp_socket, vec, (int)n);
|
||||||
free(vec);
|
free(vec);
|
||||||
if (wcount < 0)
|
if (wcount < 0)
|
||||||
{
|
{
|
||||||
handle_error(channel, i, now);
|
if (!try_again(SOCKERRNO))
|
||||||
|
handle_error(channel, i, now);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -148,7 +167,10 @@ static void write_tcp_data(ares_channel channel, fd_set *write_fds, time_t now)
|
|||||||
wcount -= sendreq->len;
|
wcount -= sendreq->len;
|
||||||
server->qhead = sendreq->next;
|
server->qhead = sendreq->next;
|
||||||
if (server->qhead == NULL)
|
if (server->qhead == NULL)
|
||||||
server->qtail = NULL;
|
{
|
||||||
|
SOCK_STATE_CALLBACK(channel, server->tcp_socket, 1, 0);
|
||||||
|
server->qtail = NULL;
|
||||||
|
}
|
||||||
free(sendreq);
|
free(sendreq);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -164,11 +186,11 @@ static void write_tcp_data(ares_channel channel, fd_set *write_fds, time_t now)
|
|||||||
/* Can't allocate iovecs; just send the first request. */
|
/* Can't allocate iovecs; just send the first request. */
|
||||||
sendreq = server->qhead;
|
sendreq = server->qhead;
|
||||||
|
|
||||||
scount = send(server->tcp_socket, sendreq->data, sendreq->len, 0);
|
scount = swrite(server->tcp_socket, sendreq->data, sendreq->len);
|
||||||
|
|
||||||
if (scount < 0)
|
if (scount < 0)
|
||||||
{
|
{
|
||||||
handle_error(channel, i, now);
|
if (!try_again(SOCKERRNO))
|
||||||
|
handle_error(channel, i, now);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -177,7 +199,10 @@ static void write_tcp_data(ares_channel channel, fd_set *write_fds, time_t now)
|
|||||||
{
|
{
|
||||||
server->qhead = sendreq->next;
|
server->qhead = sendreq->next;
|
||||||
if (server->qhead == NULL)
|
if (server->qhead == NULL)
|
||||||
server->qtail = NULL;
|
{
|
||||||
|
SOCK_STATE_CALLBACK(channel, server->tcp_socket, 1, 0);
|
||||||
|
server->qtail = NULL;
|
||||||
|
}
|
||||||
free(sendreq);
|
free(sendreq);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -196,7 +221,8 @@ static void write_tcp_data(ares_channel channel, fd_set *write_fds, time_t now)
|
|||||||
static void read_tcp_data(ares_channel channel, fd_set *read_fds, time_t now)
|
static void read_tcp_data(ares_channel channel, fd_set *read_fds, time_t now)
|
||||||
{
|
{
|
||||||
struct server_state *server;
|
struct server_state *server;
|
||||||
int i, count;
|
int i;
|
||||||
|
ssize_t count;
|
||||||
|
|
||||||
for (i = 0; i < channel->nservers; i++)
|
for (i = 0; i < channel->nservers; i++)
|
||||||
{
|
{
|
||||||
@@ -211,16 +237,17 @@ static void read_tcp_data(ares_channel channel, fd_set *read_fds, time_t now)
|
|||||||
/* We haven't yet read a length word, so read that (or
|
/* We haven't yet read a length word, so read that (or
|
||||||
* what's left to read of it).
|
* what's left to read of it).
|
||||||
*/
|
*/
|
||||||
count = recv(server->tcp_socket,
|
count = sread(server->tcp_socket,
|
||||||
server->tcp_lenbuf + server->tcp_buffer_pos,
|
server->tcp_lenbuf + server->tcp_lenbuf_pos,
|
||||||
2 - server->tcp_buffer_pos, 0);
|
2 - server->tcp_lenbuf_pos);
|
||||||
if (count <= 0)
|
if (count <= 0)
|
||||||
{
|
{
|
||||||
handle_error(channel, i, now);
|
if (!(count == -1 && try_again(SOCKERRNO)))
|
||||||
|
handle_error(channel, i, now);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
server->tcp_lenbuf_pos += count;
|
server->tcp_lenbuf_pos += (int)count;
|
||||||
if (server->tcp_lenbuf_pos == 2)
|
if (server->tcp_lenbuf_pos == 2)
|
||||||
{
|
{
|
||||||
/* We finished reading the length word. Decode the
|
/* We finished reading the length word. Decode the
|
||||||
@@ -237,16 +264,17 @@ static void read_tcp_data(ares_channel channel, fd_set *read_fds, time_t now)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* Read data into the allocated buffer. */
|
/* Read data into the allocated buffer. */
|
||||||
count = recv(server->tcp_socket,
|
count = sread(server->tcp_socket,
|
||||||
server->tcp_buffer + server->tcp_buffer_pos,
|
server->tcp_buffer + server->tcp_buffer_pos,
|
||||||
server->tcp_length - server->tcp_buffer_pos, 0);
|
server->tcp_length - server->tcp_buffer_pos);
|
||||||
if (count <= 0)
|
if (count <= 0)
|
||||||
{
|
{
|
||||||
handle_error(channel, i, now);
|
if (!(count == -1 && try_again(SOCKERRNO)))
|
||||||
|
handle_error(channel, i, now);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
server->tcp_buffer_pos += count;
|
server->tcp_buffer_pos += (int)count;
|
||||||
if (server->tcp_buffer_pos == server->tcp_length)
|
if (server->tcp_buffer_pos == server->tcp_length)
|
||||||
{
|
{
|
||||||
/* We finished reading this answer; process it and
|
/* We finished reading this answer; process it and
|
||||||
@@ -258,6 +286,7 @@ static void read_tcp_data(ares_channel channel, fd_set *read_fds, time_t now)
|
|||||||
free(server->tcp_buffer);
|
free(server->tcp_buffer);
|
||||||
server->tcp_buffer = NULL;
|
server->tcp_buffer = NULL;
|
||||||
server->tcp_lenbuf_pos = 0;
|
server->tcp_lenbuf_pos = 0;
|
||||||
|
server->tcp_buffer_pos = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -268,7 +297,8 @@ static void read_udp_packets(ares_channel channel, fd_set *read_fds,
|
|||||||
time_t now)
|
time_t now)
|
||||||
{
|
{
|
||||||
struct server_state *server;
|
struct server_state *server;
|
||||||
int i, count;
|
int i;
|
||||||
|
ssize_t count;
|
||||||
unsigned char buf[PACKETSZ + 1];
|
unsigned char buf[PACKETSZ + 1];
|
||||||
|
|
||||||
for (i = 0; i < channel->nservers; i++)
|
for (i = 0; i < channel->nservers; i++)
|
||||||
@@ -280,11 +310,13 @@ static void read_udp_packets(ares_channel channel, fd_set *read_fds,
|
|||||||
!FD_ISSET(server->udp_socket, read_fds))
|
!FD_ISSET(server->udp_socket, read_fds))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
count = recv(server->udp_socket, buf, sizeof(buf), 0);
|
count = sread(server->udp_socket, buf, sizeof(buf));
|
||||||
if (count <= 0)
|
if (count == -1 && try_again(SOCKERRNO))
|
||||||
|
continue;
|
||||||
|
else if (count <= 0)
|
||||||
handle_error(channel, i, now);
|
handle_error(channel, i, now);
|
||||||
|
|
||||||
process_answer(channel, buf, count, i, 0, now);
|
process_answer(channel, buf, (int)count, i, 0, now);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -378,7 +410,7 @@ static void handle_error(ares_channel channel, int whichserver, time_t now)
|
|||||||
struct query *query, *next;
|
struct query *query, *next;
|
||||||
|
|
||||||
/* Reset communications with this server. */
|
/* Reset communications with this server. */
|
||||||
ares__close_sockets(&channel->servers[whichserver]);
|
ares__close_sockets(channel, &channel->servers[whichserver]);
|
||||||
|
|
||||||
/* Tell all queries talking to this server to move on and not try
|
/* Tell all queries talking to this server to move on and not try
|
||||||
* this server again.
|
* this server again.
|
||||||
@@ -450,7 +482,10 @@ void ares__send_query(ares_channel channel, struct query *query, time_t now)
|
|||||||
if (server->qtail)
|
if (server->qtail)
|
||||||
server->qtail->next = sendreq;
|
server->qtail->next = sendreq;
|
||||||
else
|
else
|
||||||
server->qhead = sendreq;
|
{
|
||||||
|
SOCK_STATE_CALLBACK(channel, server->tcp_socket, 1, 1);
|
||||||
|
server->qhead = sendreq;
|
||||||
|
}
|
||||||
server->qtail = sendreq;
|
server->qtail = sendreq;
|
||||||
query->timeout = 0;
|
query->timeout = 0;
|
||||||
}
|
}
|
||||||
@@ -465,8 +500,9 @@ void ares__send_query(ares_channel channel, struct query *query, time_t now)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (send(server->udp_socket, query->qbuf, query->qlen, 0) == -1)
|
if (swrite(server->udp_socket, query->qbuf, query->qlen) == -1)
|
||||||
{
|
{
|
||||||
|
/* FIXME: Handle EAGAIN here since it likely can happen. */
|
||||||
query->skip_server[query->server] = 1;
|
query->skip_server[query->server] = 1;
|
||||||
next_server(channel, query, now);
|
next_server(channel, query, now);
|
||||||
return;
|
return;
|
||||||
@@ -491,7 +527,7 @@ static int nonblock(ares_socket_t sockfd, /* operate on this */
|
|||||||
int flags;
|
int flags;
|
||||||
|
|
||||||
flags = fcntl(sockfd, F_GETFL, 0);
|
flags = fcntl(sockfd, F_GETFL, 0);
|
||||||
if (TRUE == nonblock)
|
if (FALSE != nonblock)
|
||||||
return fcntl(sockfd, F_SETFL, flags | O_NONBLOCK);
|
return fcntl(sockfd, F_SETFL, flags | O_NONBLOCK);
|
||||||
else
|
else
|
||||||
return fcntl(sockfd, F_SETFL, flags & (~O_NONBLOCK));
|
return fcntl(sockfd, F_SETFL, flags & (~O_NONBLOCK));
|
||||||
@@ -510,8 +546,12 @@ static int nonblock(ares_socket_t sockfd, /* operate on this */
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(HAVE_IOCTLSOCKET) && (SETBLOCK == 0)
|
#if defined(HAVE_IOCTLSOCKET) && (SETBLOCK == 0)
|
||||||
|
#ifdef WATT32
|
||||||
|
char flags;
|
||||||
|
#else
|
||||||
/* Windows? */
|
/* Windows? */
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
#endif
|
||||||
flags = nonblock;
|
flags = nonblock;
|
||||||
|
|
||||||
return ioctlsocket(sockfd, FIONBIO, &flags);
|
return ioctlsocket(sockfd, FIONBIO, &flags);
|
||||||
@@ -562,9 +602,9 @@ static int open_tcp_socket(ares_channel channel, struct server_state *server)
|
|||||||
memset(&sockin, 0, sizeof(sockin));
|
memset(&sockin, 0, sizeof(sockin));
|
||||||
sockin.sin_family = AF_INET;
|
sockin.sin_family = AF_INET;
|
||||||
sockin.sin_addr = server->addr;
|
sockin.sin_addr = server->addr;
|
||||||
sockin.sin_port = channel->tcp_port;
|
sockin.sin_port = (unsigned short)(channel->tcp_port & 0xffff);
|
||||||
if (connect(s, (struct sockaddr *) &sockin, sizeof(sockin)) == -1) {
|
if (connect(s, (struct sockaddr *) &sockin, sizeof(sockin)) == -1) {
|
||||||
int err = GET_ERRNO();
|
int err = SOCKERRNO;
|
||||||
|
|
||||||
if (err != EINPROGRESS && err != EWOULDBLOCK) {
|
if (err != EINPROGRESS && err != EWOULDBLOCK) {
|
||||||
closesocket(s);
|
closesocket(s);
|
||||||
@@ -572,6 +612,7 @@ static int open_tcp_socket(ares_channel channel, struct server_state *server)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SOCK_STATE_CALLBACK(channel, s, 1, 0);
|
||||||
server->tcp_buffer_pos = 0;
|
server->tcp_buffer_pos = 0;
|
||||||
server->tcp_socket = s;
|
server->tcp_socket = s;
|
||||||
return 0;
|
return 0;
|
||||||
@@ -594,13 +635,15 @@ static int open_udp_socket(ares_channel channel, struct server_state *server)
|
|||||||
memset(&sockin, 0, sizeof(sockin));
|
memset(&sockin, 0, sizeof(sockin));
|
||||||
sockin.sin_family = AF_INET;
|
sockin.sin_family = AF_INET;
|
||||||
sockin.sin_addr = server->addr;
|
sockin.sin_addr = server->addr;
|
||||||
sockin.sin_port = channel->udp_port;
|
sockin.sin_port = (unsigned short)(channel->udp_port & 0xffff);
|
||||||
if (connect(s, (struct sockaddr *) &sockin, sizeof(sockin)) == -1)
|
if (connect(s, (struct sockaddr *) &sockin, sizeof(sockin)) == -1)
|
||||||
{
|
{
|
||||||
closesocket(s);
|
closesocket(s);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SOCK_STATE_CALLBACK(channel, s, 1, 0);
|
||||||
|
|
||||||
server->udp_socket = s;
|
server->udp_socket = s;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -711,7 +754,7 @@ static struct query *end_query (ares_channel channel, struct query *query, int s
|
|||||||
if (!channel->queries && !(channel->flags & ARES_FLAG_STAYOPEN))
|
if (!channel->queries && !(channel->flags & ARES_FLAG_STAYOPEN))
|
||||||
{
|
{
|
||||||
for (i = 0; i < channel->nservers; i++)
|
for (i = 0; i < channel->nservers; i++)
|
||||||
ares__close_sockets(&channel->servers[i]);
|
ares__close_sockets(channel, &channel->servers[i]);
|
||||||
}
|
}
|
||||||
return (next);
|
return (next);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this
|
* Permission to use, copy, modify, and distribute this
|
||||||
@@ -14,7 +16,6 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "setup.h"
|
#include "setup.h"
|
||||||
#include <sys/types.h>
|
|
||||||
|
|
||||||
#if defined(WIN32) && !defined(WATT32)
|
#if defined(WIN32) && !defined(WATT32)
|
||||||
#include "nameser.h"
|
#include "nameser.h"
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this
|
* Permission to use, copy, modify, and distribute this
|
||||||
@@ -18,6 +20,7 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
|
#include <errno.h>
|
||||||
|
|
||||||
#if defined(WIN32) && !defined(WATT32)
|
#if defined(WIN32) && !defined(WATT32)
|
||||||
#include "nameser.h"
|
#include "nameser.h"
|
||||||
@@ -214,6 +217,7 @@ static int single_domain(ares_channel channel, const char *name, char **s)
|
|||||||
char *line = NULL;
|
char *line = NULL;
|
||||||
int linesize, status;
|
int linesize, status;
|
||||||
const char *p, *q;
|
const char *p, *q;
|
||||||
|
int error;
|
||||||
|
|
||||||
/* If the name contains a trailing dot, then the single query is the name
|
/* If the name contains a trailing dot, then the single query is the name
|
||||||
* sans the trailing dot.
|
* sans the trailing dot.
|
||||||
@@ -237,15 +241,15 @@ static int single_domain(ares_channel channel, const char *name, char **s)
|
|||||||
== ARES_SUCCESS)
|
== ARES_SUCCESS)
|
||||||
{
|
{
|
||||||
if (strncasecmp(line, name, len) != 0 ||
|
if (strncasecmp(line, name, len) != 0 ||
|
||||||
!isspace((unsigned char)line[len]))
|
!ISSPACE(line[len]))
|
||||||
continue;
|
continue;
|
||||||
p = line + len;
|
p = line + len;
|
||||||
while (isspace((unsigned char)*p))
|
while (ISSPACE(*p))
|
||||||
p++;
|
p++;
|
||||||
if (*p)
|
if (*p)
|
||||||
{
|
{
|
||||||
q = p + 1;
|
q = p + 1;
|
||||||
while (*q && !isspace((unsigned char)*q))
|
while (*q && !ISSPACE(*q))
|
||||||
q++;
|
q++;
|
||||||
*s = malloc(q - p + 1);
|
*s = malloc(q - p + 1);
|
||||||
if (*s)
|
if (*s)
|
||||||
@@ -263,6 +267,23 @@ static int single_domain(ares_channel channel, const char *name, char **s)
|
|||||||
if (status != ARES_SUCCESS)
|
if (status != ARES_SUCCESS)
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
error = ERRNO;
|
||||||
|
switch(error)
|
||||||
|
{
|
||||||
|
case ENOENT:
|
||||||
|
case ESRCH:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
DEBUGF(fprintf(stderr, "fopen() failed with error: %d %s\n",
|
||||||
|
error, strerror(error)));
|
||||||
|
DEBUGF(fprintf(stderr, "Error opening file: %s\n",
|
||||||
|
hostaliases));
|
||||||
|
*s = NULL;
|
||||||
|
return ARES_EFILE;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this
|
* Permission to use, copy, modify, and distribute this
|
||||||
@@ -14,7 +16,6 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "setup.h"
|
#include "setup.h"
|
||||||
#include <sys/types.h>
|
|
||||||
|
|
||||||
#if defined(WIN32) && !defined(WATT32)
|
#if defined(WIN32) && !defined(WATT32)
|
||||||
#include "nameser.h"
|
#include "nameser.h"
|
||||||
@@ -71,14 +72,14 @@ void ares_send(ares_channel channel, const unsigned char *qbuf, int qlen,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Compute the query ID. Start with no timeout. */
|
/* Compute the query ID. Start with no timeout. */
|
||||||
query->qid = DNS_HEADER_QID(qbuf);
|
query->qid = (unsigned short)DNS_HEADER_QID(qbuf);
|
||||||
query->timeout = 0;
|
query->timeout = 0;
|
||||||
|
|
||||||
/* Form the TCP query buffer by prepending qlen (as two
|
/* Form the TCP query buffer by prepending qlen (as two
|
||||||
* network-order bytes) to qbuf.
|
* network-order bytes) to qbuf.
|
||||||
*/
|
*/
|
||||||
query->tcpbuf[0] = (qlen >> 8) & 0xff;
|
query->tcpbuf[0] = (unsigned char)((qlen >> 8) & 0xff);
|
||||||
query->tcpbuf[1] = qlen & 0xff;
|
query->tcpbuf[1] = (unsigned char)(qlen & 0xff);
|
||||||
memcpy(query->tcpbuf + 2, qbuf, qlen);
|
memcpy(query->tcpbuf + 2, qbuf, qlen);
|
||||||
query->tcplen = qlen + 2;
|
query->tcplen = qlen + 2;
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this
|
* Permission to use, copy, modify, and distribute this
|
||||||
@@ -39,9 +41,11 @@ const char *ares_strerror(int code)
|
|||||||
"Out of memory",
|
"Out of memory",
|
||||||
"Channel is being destroyed",
|
"Channel is being destroyed",
|
||||||
"Misformatted string",
|
"Misformatted string",
|
||||||
"Illegal flags specified"
|
"Illegal flags specified",
|
||||||
|
"Given hostname is not numeric",
|
||||||
|
"Illegal hints flags specified"
|
||||||
};
|
};
|
||||||
|
|
||||||
assert(code >= 0 && code < (int)(sizeof(errtext) / sizeof(*errtext)));
|
DEBUGASSERT(code >= 0 && code < (int)(sizeof(errtext) / sizeof(*errtext)));
|
||||||
return errtext[code];
|
return errtext[code];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this
|
* Permission to use, copy, modify, and distribute this
|
||||||
@@ -14,7 +16,6 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "setup.h"
|
#include "setup.h"
|
||||||
#include <sys/types.h>
|
|
||||||
|
|
||||||
#ifdef HAVE_SYS_TIME_H
|
#ifdef HAVE_SYS_TIME_H
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
|
|||||||
@@ -5,13 +5,21 @@
|
|||||||
|
|
||||||
#define ARES_VERSION_MAJOR 1
|
#define ARES_VERSION_MAJOR 1
|
||||||
#define ARES_VERSION_MINOR 3
|
#define ARES_VERSION_MINOR 3
|
||||||
#define ARES_VERSION_PATCH 0
|
#define ARES_VERSION_PATCH 3
|
||||||
#define ARES_VERSION ((ARES_VERSION_MAJOR<<16)|\
|
#define ARES_VERSION ((ARES_VERSION_MAJOR<<16)|\
|
||||||
(ARES_VERSION_MINOR<<8)|\
|
(ARES_VERSION_MINOR<<8)|\
|
||||||
(ARES_VERSION_PATCH))
|
(ARES_VERSION_PATCH))
|
||||||
#define ARES_VERSION_STR "1.3.0"
|
#define ARES_VERSION_STR "1.3.3-CVS"
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
const char *ares_version(int *version);
|
const char *ares_version(int *version);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
|
* Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
|
||||||
* Copyright (c) 1996,1999 by Internet Software Consortium.
|
* Copyright (c) 1996,1999 by Internet Software Consortium.
|
||||||
@@ -17,9 +19,7 @@
|
|||||||
|
|
||||||
#ifndef HAVE_BITNCMP
|
#ifndef HAVE_BITNCMP
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include "setup.h"
|
||||||
#include <string.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include "bitncmp.h"
|
#include "bitncmp.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -1,3 +1,6 @@
|
|||||||
|
#ifndef __ARES_BITNCMP_H
|
||||||
|
#define __ARES_BITNCMP_H
|
||||||
|
|
||||||
/* $Id$ */
|
/* $Id$ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -14,13 +17,10 @@
|
|||||||
* without express or implied warranty.
|
* without express or implied warranty.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef BITNCMP_H
|
|
||||||
#define BITNCMP_H
|
|
||||||
|
|
||||||
#ifndef HAVE_BITNCMP
|
#ifndef HAVE_BITNCMP
|
||||||
int ares_bitncmp(const void *l, const void *r, int n);
|
int ares_bitncmp(const void *l, const void *r, int n);
|
||||||
#else
|
#else
|
||||||
#define ares_bitncmp(x,y,z) bitncmp(x,y,z)
|
#define ares_bitncmp(x,y,z) bitncmp(x,y,z)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* BITNCMP_H */
|
#endif /* __ARES_BITNCMP_H */
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
${LIBTOOLIZE:-libtoolize} --copy --automake --force
|
${LIBTOOLIZE:-libtoolize} --copy --automake --force
|
||||||
${ACLOCAL:-aclocal}
|
${ACLOCAL:-aclocal} $ACLOCAL_FLAGS
|
||||||
${AUTOHEADER:-autoheader}
|
${AUTOHEADER:-autoheader}
|
||||||
${AUTOCONF:-autoconf}
|
${AUTOCONF:-autoconf}
|
||||||
${AUTOMAKE:-automake} --add-missing
|
${AUTOMAKE:-automake} --add-missing
|
||||||
|
|||||||
187
ares/config-win32.h
Normal file
187
ares/config-win32.h
Normal file
@@ -0,0 +1,187 @@
|
|||||||
|
#ifndef __ARES_CONFIG_WIN32_H
|
||||||
|
#define __ARES_CONFIG_WIN32_H
|
||||||
|
|
||||||
|
/* $Id$ */
|
||||||
|
|
||||||
|
/* Copyright (C) 2004 - 2006 by Daniel Stenberg et al
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and distribute this software and its
|
||||||
|
* documentation for any purpose and without fee is hereby granted, provided
|
||||||
|
* that the above copyright notice appear in all copies and that both that
|
||||||
|
* copyright notice and this permission notice appear in supporting
|
||||||
|
* documentation, and that the name of M.I.T. not be used in advertising or
|
||||||
|
* publicity pertaining to distribution of the software without specific,
|
||||||
|
* written prior permission. M.I.T. makes no representations about the
|
||||||
|
* suitability of this software for any purpose. It is provided "as is"
|
||||||
|
* without express or implied warranty.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* ================================================================ */
|
||||||
|
/* ares/config-win32.h - Hand crafted config file for Windows */
|
||||||
|
/* ================================================================ */
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------- */
|
||||||
|
/* HEADER FILES */
|
||||||
|
/* ---------------------------------------------------------------- */
|
||||||
|
|
||||||
|
/* Define if you have the <getopt.h> header file. */
|
||||||
|
#if defined(__MINGW32__)
|
||||||
|
#define HAVE_GETOPT_H 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Define if you have the <signal.h> header file. */
|
||||||
|
#define HAVE_SIGNAL_H 1
|
||||||
|
|
||||||
|
/* Define if you have the <sys/time.h> header file */
|
||||||
|
/* #define HAVE_SYS_TIME_H 1 */
|
||||||
|
|
||||||
|
/* Define if you have the <time.h> header file. */
|
||||||
|
#define HAVE_TIME_H 1
|
||||||
|
|
||||||
|
/* Define if you have the <process.h> header file. */
|
||||||
|
#define HAVE_PROCESS_H 1
|
||||||
|
|
||||||
|
/* Define if you have the <unistd.h> header file. */
|
||||||
|
#if defined(__MINGW32__) || defined(__WATCOMC__) || defined(__LCC__) || \
|
||||||
|
defined(__POCC__)
|
||||||
|
#define HAVE_UNISTD_H 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Define if you have the <windows.h> header file. */
|
||||||
|
#define HAVE_WINDOWS_H 1
|
||||||
|
|
||||||
|
/* Define if you have the <winsock.h> header file. */
|
||||||
|
#define HAVE_WINSOCK_H 1
|
||||||
|
|
||||||
|
/* Define if you have the <winsock2.h> header file. */
|
||||||
|
#define HAVE_WINSOCK2_H 1
|
||||||
|
|
||||||
|
/* Define if you have the <ws2tcpip.h> header file. */
|
||||||
|
#define HAVE_WS2TCPIP_H 1
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------- */
|
||||||
|
/* OTHER HEADER INFO */
|
||||||
|
/* ---------------------------------------------------------------- */
|
||||||
|
|
||||||
|
/* Define if sig_atomic_t is an available typedef. */
|
||||||
|
#define HAVE_SIG_ATOMIC_T 1
|
||||||
|
|
||||||
|
/* Define if you have the ANSI C header files. */
|
||||||
|
#define STDC_HEADERS 1
|
||||||
|
|
||||||
|
/* Define if you can safely include both <sys/time.h> and <time.h>. */
|
||||||
|
/* #define TIME_WITH_SYS_TIME 1 */
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------- */
|
||||||
|
/* FUNCTIONS */
|
||||||
|
/* ---------------------------------------------------------------- */
|
||||||
|
|
||||||
|
/* Define if you have the ioctlsocket function. */
|
||||||
|
#define HAVE_IOCTLSOCKET 1
|
||||||
|
|
||||||
|
/* Define if you have the recv function. */
|
||||||
|
#define HAVE_RECV 1
|
||||||
|
|
||||||
|
/* Define to the type of arg 1 for recv. */
|
||||||
|
#define RECV_TYPE_ARG1 SOCKET
|
||||||
|
|
||||||
|
/* Define to the type of arg 2 for recv. */
|
||||||
|
#define RECV_TYPE_ARG2 char *
|
||||||
|
|
||||||
|
/* Define to the type of arg 3 for recv. */
|
||||||
|
#define RECV_TYPE_ARG3 int
|
||||||
|
|
||||||
|
/* Define to the type of arg 4 for recv. */
|
||||||
|
#define RECV_TYPE_ARG4 int
|
||||||
|
|
||||||
|
/* Define to the function return type for recv. */
|
||||||
|
#define RECV_TYPE_RETV int
|
||||||
|
|
||||||
|
/* Define if you have the send function. */
|
||||||
|
#define HAVE_SEND 1
|
||||||
|
|
||||||
|
/* Define to the type of arg 1 for send. */
|
||||||
|
#define SEND_TYPE_ARG1 SOCKET
|
||||||
|
|
||||||
|
/* Define to the type qualifier of arg 2 for send. */
|
||||||
|
#define SEND_QUAL_ARG2 const
|
||||||
|
|
||||||
|
/* Define to the type of arg 2 for send. */
|
||||||
|
#define SEND_TYPE_ARG2 char *
|
||||||
|
|
||||||
|
/* Define to the type of arg 3 for send. */
|
||||||
|
#define SEND_TYPE_ARG3 int
|
||||||
|
|
||||||
|
/* Define to the type of arg 4 for send. */
|
||||||
|
#define SEND_TYPE_ARG4 int
|
||||||
|
|
||||||
|
/* Define to the function return type for send. */
|
||||||
|
#define SEND_TYPE_RETV int
|
||||||
|
|
||||||
|
/* Specifics for the Watt-32 tcp/ip stack */
|
||||||
|
#ifdef WATT32
|
||||||
|
#define SOCKET int
|
||||||
|
#define NS_INADDRSZ 4
|
||||||
|
#define HAVE_ARPA_NAMESER_H 1
|
||||||
|
#undef HAVE_WINSOCK_H
|
||||||
|
#undef HAVE_WINSOCK2_H
|
||||||
|
#undef HAVE_WS2TCPIP_H
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------- */
|
||||||
|
/* TYPEDEF REPLACEMENTS */
|
||||||
|
/* ---------------------------------------------------------------- */
|
||||||
|
|
||||||
|
/* Define this if in_addr_t is not an available 'typedefed' type */
|
||||||
|
#define in_addr_t unsigned long
|
||||||
|
|
||||||
|
/* Define as the return type of signal handlers (int or void). */
|
||||||
|
#define RETSIGTYPE void
|
||||||
|
|
||||||
|
/* Define ssize_t if it is not an available 'typedefed' type */
|
||||||
|
#if (defined(__WATCOMC__) && (__WATCOMC__ >= 1240)) || defined(__POCC__)
|
||||||
|
#elif defined(_WIN64)
|
||||||
|
#define ssize_t __int64
|
||||||
|
#else
|
||||||
|
#define ssize_t int
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Define to 'int' if socklen_t is not an available 'typedefed' type */
|
||||||
|
#ifndef HAVE_WS2TCPIP_H
|
||||||
|
#define socklen_t int
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------- */
|
||||||
|
/* STRUCT RELATED */
|
||||||
|
/* ---------------------------------------------------------------- */
|
||||||
|
|
||||||
|
/* Define this if you have struct addrinfo */
|
||||||
|
#define HAVE_STRUCT_ADDRINFO 1
|
||||||
|
|
||||||
|
/* Define this if you have struct sockaddr_storage */
|
||||||
|
#define HAVE_STRUCT_SOCKADDR_STORAGE 1
|
||||||
|
|
||||||
|
/* Define this if you have struct timeval */
|
||||||
|
#define HAVE_STRUCT_TIMEVAL 1
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------- */
|
||||||
|
/* IPV6 COMPATIBILITY */
|
||||||
|
/* ---------------------------------------------------------------- */
|
||||||
|
|
||||||
|
/* Define this if you have address family AF_INET6 */
|
||||||
|
#define HAVE_AF_INET6 1
|
||||||
|
|
||||||
|
/* Define this if you have protocol family PF_INET6 */
|
||||||
|
#define HAVE_PF_INET6 1
|
||||||
|
|
||||||
|
/* Define this if you have struct in6_addr */
|
||||||
|
#define HAVE_STRUCT_IN6_ADDR 1
|
||||||
|
|
||||||
|
/* Define this if you have struct sockaddr_in6 */
|
||||||
|
#define HAVE_STRUCT_SOCKADDR_IN6 1
|
||||||
|
|
||||||
|
/* Define this if you have sockaddr_in6 with scopeid */
|
||||||
|
#define HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID 1
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* __ARES_CONFIG_WIN32_H */
|
||||||
@@ -1,9 +1,21 @@
|
|||||||
|
|
||||||
dnl Process this file with autoconf to produce a configure script.
|
dnl Process this file with autoconf to produce a configure script.
|
||||||
|
AC_PREREQ(2.57)
|
||||||
AC_INIT(ares_init.c)
|
AC_INIT(ares_init.c)
|
||||||
|
AC_CONFIG_SRCDIR([ares_ipv6.h])
|
||||||
AM_CONFIG_HEADER(config.h)
|
AM_CONFIG_HEADER(config.h)
|
||||||
AM_MAINTAINER_MODE
|
AM_MAINTAINER_MODE
|
||||||
AM_INIT_AUTOMAKE(c-ares, CVS)
|
AM_INIT_AUTOMAKE(c-ares, CVS)
|
||||||
|
|
||||||
|
dnl
|
||||||
|
dnl Detect the canonical host and target build environment
|
||||||
|
dnl
|
||||||
|
|
||||||
|
AC_CANONICAL_HOST
|
||||||
|
dnl Get system canonical name
|
||||||
|
AC_DEFINE_UNQUOTED(OS, "${host}", [cpu-machine-OS])
|
||||||
|
|
||||||
|
AC_AIX
|
||||||
AC_PROG_CC
|
AC_PROG_CC
|
||||||
AC_PROG_INSTALL
|
AC_PROG_INSTALL
|
||||||
|
|
||||||
@@ -13,12 +25,8 @@ solaris*)
|
|||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
# check for ssize_t
|
dnl support building of Windows DLLs
|
||||||
AC_CHECK_TYPE(ssize_t, ,
|
AC_LIBTOOL_WIN32_DLL
|
||||||
AC_DEFINE(ssize_t, int, [the signed version of size_t]))
|
|
||||||
|
|
||||||
AC_SEARCH_LIBS(gethostbyname, nsl)
|
|
||||||
AC_SEARCH_LIBS(socket, socket)
|
|
||||||
|
|
||||||
dnl ************************************************************
|
dnl ************************************************************
|
||||||
dnl Option to switch on debug options. This makes an assumption that
|
dnl Option to switch on debug options. This makes an assumption that
|
||||||
@@ -38,9 +46,6 @@ AC_HELP_STRING([--disable-debug],[Disable debug options]),
|
|||||||
dnl when doing the debug stuff, use static library only
|
dnl when doing the debug stuff, use static library only
|
||||||
AC_DISABLE_SHARED
|
AC_DISABLE_SHARED
|
||||||
|
|
||||||
dnl Checks for standard header files, to make memdebug.h inclusions bettter
|
|
||||||
AC_HEADER_STDC
|
|
||||||
|
|
||||||
dnl the entire --enable-debug is a hack that lives and runs on top of
|
dnl the entire --enable-debug is a hack that lives and runs on top of
|
||||||
dnl libcurl stuff so this BUILDING_LIBCURL is not THAT much uglier
|
dnl libcurl stuff so this BUILDING_LIBCURL is not THAT much uglier
|
||||||
AC_DEFINE(BUILDING_LIBCURL, 1, [when building as static part of libcurl])
|
AC_DEFINE(BUILDING_LIBCURL, 1, [when building as static part of libcurl])
|
||||||
@@ -48,6 +53,15 @@ AC_HELP_STRING([--disable-debug],[Disable debug options]),
|
|||||||
CPPFLAGS="$CPPFLAGS -DCURLDEBUG -I$srcdir/../include"
|
CPPFLAGS="$CPPFLAGS -DCURLDEBUG -I$srcdir/../include"
|
||||||
CFLAGS="$CFLAGS -g"
|
CFLAGS="$CFLAGS -g"
|
||||||
|
|
||||||
|
dnl check for how to do large files, needed to get the curl_off_t check
|
||||||
|
dnl done right
|
||||||
|
AC_SYS_LARGEFILE
|
||||||
|
|
||||||
|
AC_CHECK_SIZEOF(curl_off_t, ,[
|
||||||
|
#include <stdio.h>
|
||||||
|
#include "$srcdir/../include/curl/curl.h"
|
||||||
|
])
|
||||||
|
|
||||||
dnl set compiler "debug" options to become more picky, and remove
|
dnl set compiler "debug" options to become more picky, and remove
|
||||||
dnl optimize options from CFLAGS
|
dnl optimize options from CFLAGS
|
||||||
CURL_CC_DEBUG_OPTS
|
CURL_CC_DEBUG_OPTS
|
||||||
@@ -57,8 +71,265 @@ AC_HELP_STRING([--disable-debug],[Disable debug options]),
|
|||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
dnl skip libtool C++ and Fortran compiler checks
|
||||||
|
m4_ifdef([AC_PROG_CXX], [m4_undefine([AC_PROG_CXX])])
|
||||||
|
m4_defun([AC_PROG_CXX],[])
|
||||||
|
m4_ifdef([AC_PROG_F77], [m4_undefine([AC_PROG_F77])])
|
||||||
|
m4_defun([AC_PROG_F77],[])
|
||||||
|
|
||||||
|
dnl skip libtool C++ and Fortran linker checks
|
||||||
|
m4_ifdef([AC_LIBTOOL_CXX], [m4_undefine([AC_LIBTOOL_CXX])])
|
||||||
|
m4_defun([AC_LIBTOOL_CXX],[])
|
||||||
|
m4_ifdef([AC_LIBTOOL_F77], [m4_undefine([AC_LIBTOOL_F77])])
|
||||||
|
m4_defun([AC_LIBTOOL_F77],[])
|
||||||
|
|
||||||
|
dnl force libtool to build static libraries with PIC on AMD64-linux
|
||||||
|
AC_MSG_CHECKING([if arch-OS host is AMD64-linux (to build static libraries with PIC)])
|
||||||
|
case $host in
|
||||||
|
x86_64*linux*)
|
||||||
|
AC_MSG_RESULT([yes])
|
||||||
|
with_pic=yes
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
AC_MSG_RESULT([no])
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
dnl libtool setup
|
||||||
AC_PROG_LIBTOOL
|
AC_PROG_LIBTOOL
|
||||||
|
|
||||||
|
AC_MSG_CHECKING([if we need -no-undefined])
|
||||||
|
case $host in
|
||||||
|
*-*-cygwin | *-*-mingw* | *-*-pw32*)
|
||||||
|
need_no_undefined=yes
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
need_no_undefined=no
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
AC_MSG_RESULT($need_no_undefined)
|
||||||
|
AM_CONDITIONAL(NO_UNDEFINED, test x$need_no_undefined = xyes)
|
||||||
|
|
||||||
|
dnl **********************************************************************
|
||||||
|
dnl check if this is the Intel ICC compiler, and if so make it stricter
|
||||||
|
dnl (convert warning 147 into an error) so that it properly can detect the
|
||||||
|
dnl gethostbyname_r() version
|
||||||
|
dnl **********************************************************************
|
||||||
|
CURL_DETECT_ICC([CFLAGS="$CFLAGS -we 147"])
|
||||||
|
|
||||||
|
dnl **********************************************************************
|
||||||
|
dnl Checks for libraries.
|
||||||
|
dnl **********************************************************************
|
||||||
|
|
||||||
|
dnl gethostbyname without lib or in the nsl lib?
|
||||||
|
AC_CHECK_FUNC(gethostbyname,
|
||||||
|
[HAVE_GETHOSTBYNAME="1"
|
||||||
|
],
|
||||||
|
[ AC_CHECK_LIB(nsl, gethostbyname,
|
||||||
|
[HAVE_GETHOSTBYNAME="1"
|
||||||
|
LIBS="$LIBS -lnsl"
|
||||||
|
])
|
||||||
|
])
|
||||||
|
|
||||||
|
if test "$HAVE_GETHOSTBYNAME" != "1"
|
||||||
|
then
|
||||||
|
dnl gethostbyname in the socket lib?
|
||||||
|
AC_CHECK_LIB(socket, gethostbyname,
|
||||||
|
[HAVE_GETHOSTBYNAME="1"
|
||||||
|
LIBS="$LIBS -lsocket"
|
||||||
|
])
|
||||||
|
fi
|
||||||
|
|
||||||
|
dnl At least one system has been identified to require BOTH nsl and socket
|
||||||
|
dnl libs at the same time to link properly.
|
||||||
|
if test "$HAVE_GETHOSTBYNAME" != "1"
|
||||||
|
then
|
||||||
|
AC_MSG_CHECKING([for gethostbyname with both nsl and socket libs])
|
||||||
|
my_ac_save_LIBS=$LIBS
|
||||||
|
LIBS="-lnsl -lsocket $LIBS"
|
||||||
|
AC_TRY_LINK( ,
|
||||||
|
[gethostbyname();],
|
||||||
|
[ dnl found it!
|
||||||
|
HAVE_GETHOSTBYNAME="1"
|
||||||
|
AC_MSG_RESULT([yes])],
|
||||||
|
[ dnl failed!
|
||||||
|
AC_MSG_RESULT([no])
|
||||||
|
dnl restore LIBS
|
||||||
|
LIBS=$my_ac_save_LIBS]
|
||||||
|
)
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test "$HAVE_GETHOSTBYNAME" != "1"
|
||||||
|
then
|
||||||
|
dnl This is for Msys/Mingw
|
||||||
|
AC_MSG_CHECKING([for gethostbyname in ws2_32])
|
||||||
|
my_ac_save_LIBS=$LIBS
|
||||||
|
LIBS="-lws2_32 $LIBS"
|
||||||
|
AC_TRY_LINK([#include <winsock2.h>],
|
||||||
|
[gethostbyname("www.dummysite.com");],
|
||||||
|
[ dnl worked!
|
||||||
|
ws2="yes"
|
||||||
|
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
|
||||||
|
dnl This is for eCos with a stubbed DNS implementation
|
||||||
|
AC_MSG_CHECKING([for gethostbyname for eCos])
|
||||||
|
AC_TRY_LINK([
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <netdb.h>],
|
||||||
|
[gethostbyname("www.dummysite.com");],
|
||||||
|
[ dnl worked!
|
||||||
|
AC_MSG_RESULT([yes])
|
||||||
|
HAVE_GETHOSTBYNAME="1"],
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
)
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test "$HAVE_GETHOSTBYNAME" != "1"
|
||||||
|
then
|
||||||
|
dnl gethostbyname in the net lib - for BeOS
|
||||||
|
AC_CHECK_LIB(net, gethostbyname,
|
||||||
|
[HAVE_GETHOSTBYNAME="1"
|
||||||
|
LIBS="$LIBS -lnet"
|
||||||
|
])
|
||||||
|
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
|
||||||
|
|
||||||
|
dnl resolve lib?
|
||||||
|
AC_CHECK_FUNC(strcasecmp, , [ AC_CHECK_LIB(resolve, strcasecmp) ])
|
||||||
|
|
||||||
|
if test "$ac_cv_lib_resolve_strcasecmp" = "$ac_cv_func_strcasecmp"; then
|
||||||
|
AC_CHECK_LIB(resolve, strcasecmp,
|
||||||
|
[LIBS="-lresolve $LIBS"],
|
||||||
|
,
|
||||||
|
-lnsl)
|
||||||
|
fi
|
||||||
|
|
||||||
|
dnl socket lib?
|
||||||
|
AC_CHECK_FUNC(connect, , [ AC_CHECK_LIB(socket, connect) ])
|
||||||
|
|
||||||
|
dnl dl lib?
|
||||||
|
AC_CHECK_FUNC(dlclose, , [ AC_CHECK_LIB(dl, dlopen) ])
|
||||||
|
|
||||||
|
AC_MSG_CHECKING([whether to use libgcc])
|
||||||
|
AC_ARG_ENABLE(libgcc,
|
||||||
|
AC_HELP_STRING([--enable-libgcc],[use libgcc when linking]),
|
||||||
|
[ case "$enableval" in
|
||||||
|
yes)
|
||||||
|
LIBS="$LIBS -lgcc"
|
||||||
|
AC_MSG_RESULT(yes)
|
||||||
|
;;
|
||||||
|
*) AC_MSG_RESULT(no)
|
||||||
|
;;
|
||||||
|
esac ],
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
dnl Default is to try the thread-safe versions of a few functions
|
||||||
|
OPT_THREAD=on
|
||||||
|
|
||||||
|
dnl detect AIX 4.3 or later
|
||||||
|
AC_MSG_CHECKING([AIX 4.3 or later])
|
||||||
|
AC_PREPROC_IFELSE([
|
||||||
|
#if defined(_AIX) && defined(_AIX43)
|
||||||
|
printf("just fine");
|
||||||
|
#else
|
||||||
|
#error "this is not AIX 4.3 or later"
|
||||||
|
#endif
|
||||||
|
],
|
||||||
|
[ AC_MSG_RESULT([yes])
|
||||||
|
RECENTAIX=yes
|
||||||
|
OPT_THREAD=off ],
|
||||||
|
[ AC_MSG_RESULT([no]) ]
|
||||||
|
)
|
||||||
|
|
||||||
|
AC_ARG_ENABLE(thread,dnl
|
||||||
|
AC_HELP_STRING([--disable-thread],[don't look for thread-safe functions])
|
||||||
|
AC_HELP_STRING([--enable-thread],[look for thread-safe functions]),
|
||||||
|
[ case "$enableval" in
|
||||||
|
no)
|
||||||
|
OPT_THREAD=off
|
||||||
|
AC_MSG_WARN(c-ares will not get built using thread-safe functions)
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
if test X"$OPT_THREAD" = Xoff
|
||||||
|
then
|
||||||
|
AC_DEFINE(DISABLED_THREADSAFE, 1,
|
||||||
|
[Set to explicitly specify we don't want to use thread-safe functions])
|
||||||
|
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
|
||||||
|
|
||||||
|
AC_DEFINE(_THREAD_SAFE, 1, [define this if you need it to compile thread-safe code])
|
||||||
|
|
||||||
|
dnl check if this is the IBM xlc compiler
|
||||||
|
dnl Details thanks to => http://predef.sourceforge.net/
|
||||||
|
AC_MSG_CHECKING([if this is the xlc compiler])
|
||||||
|
AC_EGREP_CPP([^__xlC__], [__xlC__],
|
||||||
|
dnl action if the text is found, this it has not been replaced by the
|
||||||
|
dnl cpp
|
||||||
|
XLC="no"
|
||||||
|
AC_MSG_RESULT([no]),
|
||||||
|
dnl the text was not found, it was replaced by the cpp
|
||||||
|
XLC="yes"
|
||||||
|
AC_MSG_RESULT([yes])
|
||||||
|
CFLAGS="$CFLAGS -qthreaded"
|
||||||
|
dnl AIX xlc has to have strict aliasing turned off. If not,
|
||||||
|
dnl the optimizer assumes that pointers can only point to
|
||||||
|
dnl an object of the same type.
|
||||||
|
CFLAGS="$CFLAGS -qnoansialias"
|
||||||
|
)
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
dnl **********************************************************************
|
||||||
|
dnl Back to "normal" configuring
|
||||||
|
dnl **********************************************************************
|
||||||
|
|
||||||
|
dnl Checks for header files.
|
||||||
|
AC_HEADER_STDC
|
||||||
|
|
||||||
|
dnl **********************************************************************
|
||||||
|
dnl Make sure that our checks for headers windows.h winsock.h winsock2.h
|
||||||
|
dnl and ws2tcpip.h take precedence over any other further checks which
|
||||||
|
dnl could be done later using AC_CHECK_HEADER or AC_CHECK_HEADERS for
|
||||||
|
dnl this specific header files. And do them before its results are used.
|
||||||
|
dnl **********************************************************************
|
||||||
|
|
||||||
|
CURL_CHECK_HEADER_WINDOWS
|
||||||
|
CURL_CHECK_HEADER_WINSOCK
|
||||||
|
CURL_CHECK_HEADER_WINSOCK2
|
||||||
|
CURL_CHECK_HEADER_WS2TCPIP
|
||||||
|
|
||||||
|
CURL_CHECK_HEADER_MALLOC
|
||||||
|
|
||||||
dnl check for a few basic system headers we need
|
dnl check for a few basic system headers we need
|
||||||
AC_CHECK_HEADERS(
|
AC_CHECK_HEADERS(
|
||||||
sys/types.h \
|
sys/types.h \
|
||||||
@@ -67,16 +338,25 @@ AC_CHECK_HEADERS(
|
|||||||
sys/socket.h \
|
sys/socket.h \
|
||||||
sys/ioctl.h \
|
sys/ioctl.h \
|
||||||
netdb.h \
|
netdb.h \
|
||||||
winsock.h \
|
|
||||||
netinet/in.h \
|
netinet/in.h \
|
||||||
net/if.h \
|
net/if.h \
|
||||||
|
errno.h \
|
||||||
|
stdbool.h \
|
||||||
arpa/nameser.h \
|
arpa/nameser.h \
|
||||||
arpa/nameser_compat.h \
|
arpa/nameser_compat.h \
|
||||||
arpa/inet.h, , ,
|
arpa/inet.h,
|
||||||
|
dnl to do if not found
|
||||||
|
[],
|
||||||
|
dnl to do if found
|
||||||
|
[],
|
||||||
|
dnl default includes
|
||||||
[
|
[
|
||||||
#ifdef HAVE_SYS_TYPES_H
|
#ifdef HAVE_SYS_TYPES_H
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef HAVE_SYS_TIME_H
|
||||||
|
#include <sys/time.h>
|
||||||
|
#endif
|
||||||
dnl We do this default-include simply to make sure that the nameser_compat.h
|
dnl We do this default-include simply to make sure that the nameser_compat.h
|
||||||
dnl header *REALLY* can be include after the new nameser.h. It seems AIX 5.1
|
dnl header *REALLY* can be include after the new nameser.h. It seems AIX 5.1
|
||||||
dnl (and others?) is not designed to allow this.
|
dnl (and others?) is not designed to allow this.
|
||||||
@@ -88,39 +368,91 @@ dnl *Sigh* these are needed in order for net/if.h to get properly detected.
|
|||||||
#ifdef HAVE_SYS_SOCKET_H
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_WINSOCK_H
|
#ifdef HAVE_NETINET_IN_H
|
||||||
#include <winsock.h>
|
#include <netinet/in.h>
|
||||||
#endif
|
#endif
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
AC_CHECK_TYPE(socklen_t, ,
|
dnl Checks for typedefs, structures, and compiler characteristics.
|
||||||
AC_DEFINE(socklen_t, int, [the length of a socket address]),
|
AC_C_CONST
|
||||||
[
|
AC_TYPE_SIZE_T
|
||||||
|
AC_HEADER_TIME
|
||||||
|
CURL_CHECK_STRUCT_TIMEVAL
|
||||||
|
|
||||||
|
AC_CHECK_SIZEOF(size_t)
|
||||||
|
AC_CHECK_SIZEOF(long)
|
||||||
|
AC_CHECK_SIZEOF(time_t)
|
||||||
|
|
||||||
|
AC_CHECK_TYPE(long long,
|
||||||
|
[AC_DEFINE(HAVE_LONGLONG, 1, [if your compiler supports long long])]
|
||||||
|
longlong="yes"
|
||||||
|
)
|
||||||
|
|
||||||
|
if test "xyes" = "x$longlong"; then
|
||||||
|
AC_MSG_CHECKING([if numberLL works])
|
||||||
|
AC_COMPILE_IFELSE([long long val = 1000LL;],
|
||||||
|
[AC_DEFINE(HAVE_LL, 1, [if your compiler supports LL])]
|
||||||
|
AC_MSG_RESULT(yes),
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
)
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
# check for ssize_t
|
||||||
|
AC_CHECK_TYPE(ssize_t, ,
|
||||||
|
AC_DEFINE(ssize_t, int, [the signed version of size_t]))
|
||||||
|
|
||||||
|
# check for bool type
|
||||||
|
AC_CHECK_TYPE([bool],[
|
||||||
|
AC_DEFINE(HAVE_BOOL_T, 1,
|
||||||
|
[Define to 1 if bool is an available type.])
|
||||||
|
], ,[
|
||||||
#ifdef HAVE_SYS_TYPES_H
|
#ifdef HAVE_SYS_TYPES_H
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_SYS_SOCKET_H
|
#ifdef HAVE_STDBOOL_H
|
||||||
#include <sys/socket.h>
|
#include <stdbool.h>
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_WINSOCK_H
|
])
|
||||||
#include <winsock.h>
|
|
||||||
#endif
|
# Check for socklen_t or equivalent
|
||||||
])
|
CURL_CHECK_TYPE_SOCKLEN_T
|
||||||
|
|
||||||
|
TYPE_IN_ADDR_T
|
||||||
|
|
||||||
|
TYPE_SOCKADDR_STORAGE
|
||||||
|
|
||||||
|
TYPE_SIG_ATOMIC_T
|
||||||
|
|
||||||
|
AC_TYPE_SIGNAL
|
||||||
|
|
||||||
|
CURL_CHECK_FUNC_RECV
|
||||||
|
|
||||||
|
CURL_CHECK_FUNC_SEND
|
||||||
|
|
||||||
|
CURL_CHECK_MSG_NOSIGNAL
|
||||||
|
|
||||||
dnl check for AF_INET6
|
dnl check for AF_INET6
|
||||||
CARES_CHECK_CONSTANT(
|
CARES_CHECK_CONSTANT(
|
||||||
[
|
[
|
||||||
|
#undef inline
|
||||||
|
#ifdef HAVE_WINDOWS_H
|
||||||
|
#ifndef WIN32_LEAN_AND_MEAN
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#endif
|
||||||
|
#include <windows.h>
|
||||||
|
#ifdef HAVE_WINSOCK2_H
|
||||||
|
#include <winsock2.h>
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
#ifdef HAVE_SYS_TYPES_H
|
#ifdef HAVE_SYS_TYPES_H
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_SYS_SOCKET_H
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_WINSOCK_H
|
|
||||||
#include <winsock.h>
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
], [PF_INET6],
|
], [PF_INET6],
|
||||||
AC_DEFINE_UNQUOTED(HAVE_PF_INET6,1,[Define to 1 if you have PF_INET6.])
|
AC_DEFINE_UNQUOTED(HAVE_PF_INET6,1,[Define to 1 if you have PF_INET6.])
|
||||||
)
|
)
|
||||||
@@ -128,16 +460,23 @@ CARES_CHECK_CONSTANT(
|
|||||||
dnl check for PF_INET6
|
dnl check for PF_INET6
|
||||||
CARES_CHECK_CONSTANT(
|
CARES_CHECK_CONSTANT(
|
||||||
[
|
[
|
||||||
|
#undef inline
|
||||||
|
#ifdef HAVE_WINDOWS_H
|
||||||
|
#ifndef WIN32_LEAN_AND_MEAN
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#endif
|
||||||
|
#include <windows.h>
|
||||||
|
#ifdef HAVE_WINSOCK2_H
|
||||||
|
#include <winsock2.h>
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
#ifdef HAVE_SYS_TYPES_H
|
#ifdef HAVE_SYS_TYPES_H
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_SYS_SOCKET_H
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_WINSOCK_H
|
|
||||||
#include <winsock.h>
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
], [AF_INET6],
|
], [AF_INET6],
|
||||||
AC_DEFINE_UNQUOTED(HAVE_AF_INET6,1,[Define to 1 if you have AF_INET6.])
|
AC_DEFINE_UNQUOTED(HAVE_AF_INET6,1,[Define to 1 if you have AF_INET6.])
|
||||||
)
|
)
|
||||||
@@ -146,14 +485,25 @@ CARES_CHECK_CONSTANT(
|
|||||||
dnl check for the in6_addr structure
|
dnl check for the in6_addr structure
|
||||||
CARES_CHECK_STRUCT(
|
CARES_CHECK_STRUCT(
|
||||||
[
|
[
|
||||||
|
#undef inline
|
||||||
|
#ifdef HAVE_WINDOWS_H
|
||||||
|
#ifndef WIN32_LEAN_AND_MEAN
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#endif
|
||||||
|
#include <windows.h>
|
||||||
|
#ifdef HAVE_WINSOCK2_H
|
||||||
|
#include <winsock2.h>
|
||||||
|
#ifdef HAVE_WS2TCPIP_H
|
||||||
|
#include <ws2tcpip.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
#ifdef HAVE_SYS_TYPES_H
|
#ifdef HAVE_SYS_TYPES_H
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_WINSOCK_H
|
|
||||||
#include <winsock.h>
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_NETINET_IN_H
|
#ifdef HAVE_NETINET_IN_H
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
], [in6_addr],
|
], [in6_addr],
|
||||||
AC_DEFINE_UNQUOTED(HAVE_STRUCT_IN6_ADDR,1,[Define to 1 if you have struct in6_addr.])
|
AC_DEFINE_UNQUOTED(HAVE_STRUCT_IN6_ADDR,1,[Define to 1 if you have struct in6_addr.])
|
||||||
@@ -162,14 +512,25 @@ CARES_CHECK_STRUCT(
|
|||||||
dnl check for the sockaddr_in6 structure
|
dnl check for the sockaddr_in6 structure
|
||||||
CARES_CHECK_STRUCT(
|
CARES_CHECK_STRUCT(
|
||||||
[
|
[
|
||||||
|
#undef inline
|
||||||
|
#ifdef HAVE_WINDOWS_H
|
||||||
|
#ifndef WIN32_LEAN_AND_MEAN
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#endif
|
||||||
|
#include <windows.h>
|
||||||
|
#ifdef HAVE_WINSOCK2_H
|
||||||
|
#include <winsock2.h>
|
||||||
|
#ifdef HAVE_WS2TCPIP_H
|
||||||
|
#include <ws2tcpip.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
#ifdef HAVE_SYS_TYPES_H
|
#ifdef HAVE_SYS_TYPES_H
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_WINSOCK_H
|
|
||||||
#include <winsock.h>
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_NETINET_IN_H
|
#ifdef HAVE_NETINET_IN_H
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
], [sockaddr_in6],
|
], [sockaddr_in6],
|
||||||
AC_DEFINE_UNQUOTED(HAVE_STRUCT_SOCKADDR_IN6,1,
|
AC_DEFINE_UNQUOTED(HAVE_STRUCT_SOCKADDR_IN6,1,
|
||||||
@@ -181,14 +542,25 @@ AC_CHECK_MEMBER(struct sockaddr_in6.sin6_scope_id,
|
|||||||
[Define to 1 if your struct sockaddr_in6 has sin6_scope_id.])
|
[Define to 1 if your struct sockaddr_in6 has sin6_scope_id.])
|
||||||
, ,
|
, ,
|
||||||
[
|
[
|
||||||
|
#undef inline
|
||||||
|
#ifdef HAVE_WINDOWS_H
|
||||||
|
#ifndef WIN32_LEAN_AND_MEAN
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#endif
|
||||||
|
#include <windows.h>
|
||||||
|
#ifdef HAVE_WINSOCK2_H
|
||||||
|
#include <winsock2.h>
|
||||||
|
#ifdef HAVE_WS2TCPIP_H
|
||||||
|
#include <ws2tcpip.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
#ifdef HAVE_SYS_TYPES_H
|
#ifdef HAVE_SYS_TYPES_H
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_WINSOCK_H
|
|
||||||
#include <winsock.h>
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_NETINET_IN_H
|
#ifdef HAVE_NETINET_IN_H
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
])
|
])
|
||||||
|
|
||||||
@@ -197,12 +569,22 @@ AC_CHECK_MEMBER(struct addrinfo.ai_flags,
|
|||||||
AC_DEFINE_UNQUOTED(HAVE_STRUCT_ADDRINFO,1,
|
AC_DEFINE_UNQUOTED(HAVE_STRUCT_ADDRINFO,1,
|
||||||
[Define to 1 if you have struct addrinfo.]),,
|
[Define to 1 if you have struct addrinfo.]),,
|
||||||
[
|
[
|
||||||
|
#undef inline
|
||||||
|
#ifdef HAVE_WINDOWS_H
|
||||||
|
#ifndef WIN32_LEAN_AND_MEAN
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#endif
|
||||||
|
#include <windows.h>
|
||||||
|
#ifdef HAVE_WINSOCK2_H
|
||||||
|
#include <winsock2.h>
|
||||||
|
#ifdef HAVE_WS2TCPIP_H
|
||||||
|
#include <ws2tcpip.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
#ifdef HAVE_SYS_TYPES_H
|
#ifdef HAVE_SYS_TYPES_H
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_WINSOCK_H
|
|
||||||
#include <winsock.h>
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_NETINET_IN_H
|
#ifdef HAVE_NETINET_IN_H
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
#endif
|
#endif
|
||||||
@@ -211,10 +593,30 @@ AC_CHECK_MEMBER(struct addrinfo.ai_flags,
|
|||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_NETDB_H
|
#ifdef HAVE_NETDB_H
|
||||||
#include <netdb.h>
|
#include <netdb.h>
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
AC_CHECK_FUNCS( bitncmp \
|
||||||
|
if_indextoname,
|
||||||
|
dnl if found
|
||||||
|
[],
|
||||||
|
dnl if not found, $ac_func is the name we check for
|
||||||
|
func="$ac_func"
|
||||||
|
AC_MSG_CHECKING([deeper for $func])
|
||||||
|
AC_TRY_LINK( [],
|
||||||
|
[ $func ();],
|
||||||
|
AC_MSG_RESULT(yes!)
|
||||||
|
eval "ac_cv_func_$func=yes"
|
||||||
|
def=`echo "HAVE_$func" | tr 'a-z' 'A-Z'`
|
||||||
|
AC_DEFINE_UNQUOTED($def, 1, [If you have $func]),
|
||||||
|
AC_MSG_RESULT(but still no)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
dnl check for inet_pton
|
dnl check for inet_pton
|
||||||
AC_CHECK_FUNCS(inet_pton)
|
AC_CHECK_FUNCS(inet_pton)
|
||||||
dnl Some systems have it, but not IPv6
|
dnl Some systems have it, but not IPv6
|
||||||
@@ -228,9 +630,6 @@ AC_TRY_RUN(
|
|||||||
#ifdef HAVE_SYS_SOCKET_H
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_WINSOCK_H
|
|
||||||
#include <winsock.h>
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_NETINET_IN_H
|
#ifdef HAVE_NETINET_IN_H
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
#endif
|
#endif
|
||||||
@@ -260,9 +659,6 @@ AC_TRY_RUN(
|
|||||||
#ifdef HAVE_SYS_SOCKET_H
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_WINSOCK_H
|
|
||||||
#include <winsock.h>
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_NETINET_IN_H
|
#ifdef HAVE_NETINET_IN_H
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
#endif
|
#endif
|
||||||
@@ -294,9 +690,6 @@ AC_TRY_RUN(
|
|||||||
#ifdef HAVE_SYS_SOCKET_H
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_WINSOCK_H
|
|
||||||
#include <winsock.h>
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_NETINET_IN_H
|
#ifdef HAVE_NETINET_IN_H
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
#endif
|
#endif
|
||||||
@@ -312,48 +705,84 @@ int main()
|
|||||||
}
|
}
|
||||||
], [
|
], [
|
||||||
AC_MSG_RESULT(yes)
|
AC_MSG_RESULT(yes)
|
||||||
AC_DEFINE_UNQUOTED(HAVE_INET_NTOP_IPV6,1,[Define to 1 if inet_ntop supports IPv6.])
|
AC_DEFINE_UNQUOTED(HAVE_INET_NTOP_IPV6,1,
|
||||||
|
[Define to 1 if inet_ntop supports IPv6.])
|
||||||
], AC_MSG_RESULT(no),AC_MSG_RESULT(no))
|
], AC_MSG_RESULT(no),AC_MSG_RESULT(no))
|
||||||
fi
|
fi
|
||||||
|
|
||||||
AC_CHECK_SIZEOF(struct in6_addr, ,
|
AC_CHECK_SIZEOF(struct in6_addr, ,
|
||||||
[
|
[
|
||||||
|
#undef inline
|
||||||
|
#ifdef HAVE_WINDOWS_H
|
||||||
|
#ifndef WIN32_LEAN_AND_MEAN
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#endif
|
||||||
|
#include <windows.h>
|
||||||
|
#ifdef HAVE_WINSOCK2_H
|
||||||
|
#include <winsock2.h>
|
||||||
|
#ifdef HAVE_WS2TCPIP_H
|
||||||
|
#include <ws2tcpip.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
#ifdef HAVE_SYS_TYPES_H
|
#ifdef HAVE_SYS_TYPES_H
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_SYS_SOCKET_H
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_WINSOCK_H
|
|
||||||
#include <winsock.h>
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_NETINET_IN_H
|
#ifdef HAVE_NETINET_IN_H
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
AC_CHECK_SIZEOF(struct in_addr, ,
|
AC_CHECK_SIZEOF(struct in_addr, ,
|
||||||
[
|
[
|
||||||
|
#undef inline
|
||||||
|
#ifdef HAVE_WINDOWS_H
|
||||||
|
#ifndef WIN32_LEAN_AND_MEAN
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#endif
|
||||||
|
#include <windows.h>
|
||||||
|
#ifdef HAVE_WINSOCK2_H
|
||||||
|
#include <winsock2.h>
|
||||||
|
#ifdef HAVE_WS2TCPIP_H
|
||||||
|
#include <ws2tcpip.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
#ifdef HAVE_SYS_TYPES_H
|
#ifdef HAVE_SYS_TYPES_H
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_SYS_SOCKET_H
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_WINSOCK_H
|
|
||||||
#include <winsock.h>
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_NETINET_IN_H
|
#ifdef HAVE_NETINET_IN_H
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
AC_CHECK_FUNCS([bitncmp if_indextoname])
|
|
||||||
|
|
||||||
dnl God bless non-standardized functions! We need to see which getservbyport_r variant is available
|
dnl Check if the getnameinfo function is available
|
||||||
|
dnl and get the types of five of its arguments.
|
||||||
|
CURL_CHECK_FUNC_GETNAMEINFO
|
||||||
|
|
||||||
|
|
||||||
|
dnl God bless non-standardized functions! We need to see which getservbyport_r
|
||||||
|
dnl variant is available
|
||||||
CARES_CHECK_GETSERVBYPORT_R
|
CARES_CHECK_GETSERVBYPORT_R
|
||||||
|
|
||||||
CURL_CHECK_NONBLOCKING_SOCKET
|
CURL_CHECK_NONBLOCKING_SOCKET
|
||||||
|
|
||||||
|
AC_C_BIGENDIAN(
|
||||||
|
[AC_DEFINE(ARES_BIG_ENDIAN, 1,
|
||||||
|
[define this if ares is built for a big endian system])],
|
||||||
|
,
|
||||||
|
[AC_MSG_WARN([couldn't figure out endianess, assuming little endian!])]
|
||||||
|
)
|
||||||
|
|
||||||
AC_OUTPUT(Makefile)
|
AC_OUTPUT(Makefile)
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
|
* Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
|
||||||
* Copyright (c) 1996,1999 by Internet Software Consortium.
|
* Copyright (c) 1996,1999 by Internet Software Consortium.
|
||||||
@@ -17,9 +19,6 @@
|
|||||||
|
|
||||||
#include "setup.h"
|
#include "setup.h"
|
||||||
|
|
||||||
|
|
||||||
#include <sys/types.h>
|
|
||||||
|
|
||||||
#if defined(WIN32) && !defined(WATT32)
|
#if defined(WIN32) && !defined(WATT32)
|
||||||
#include "nameser.h"
|
#include "nameser.h"
|
||||||
#else
|
#else
|
||||||
@@ -64,6 +63,11 @@
|
|||||||
* note:
|
* note:
|
||||||
* network byte order assumed. this means 192.5.5.240/28 has
|
* network byte order assumed. this means 192.5.5.240/28 has
|
||||||
* 0b11110000 in its fourth octet.
|
* 0b11110000 in its fourth octet.
|
||||||
|
* note:
|
||||||
|
* On Windows we store the error in the thread errno, not
|
||||||
|
* in the winsock error code. This is to avoid loosing the
|
||||||
|
* actual last winsock error. So use macro ERRNO to fetch the
|
||||||
|
* errno this funtion sets when returning (-1), not SOCKERRNO.
|
||||||
* author:
|
* author:
|
||||||
* Paul Vixie (ISC), June 1996
|
* Paul Vixie (ISC), June 1996
|
||||||
*/
|
*/
|
||||||
@@ -77,15 +81,14 @@ inet_net_pton_ipv4(const char *src, unsigned char *dst, size_t size)
|
|||||||
|
|
||||||
ch = *src++;
|
ch = *src++;
|
||||||
if (ch == '0' && (src[0] == 'x' || src[0] == 'X')
|
if (ch == '0' && (src[0] == 'x' || src[0] == 'X')
|
||||||
&& isascii((unsigned char)(src[1]))
|
&& ISXDIGIT(src[1])) {
|
||||||
&& isxdigit((unsigned char)(src[1]))) {
|
|
||||||
/* Hexadecimal: Eat nybble string. */
|
/* Hexadecimal: Eat nybble string. */
|
||||||
if (size <= 0U)
|
if (size <= 0U)
|
||||||
goto emsgsize;
|
goto emsgsize;
|
||||||
dirty = 0;
|
dirty = 0;
|
||||||
src++; /* skip x or X. */
|
src++; /* skip x or X. */
|
||||||
while ((ch = *src++) != '\0' && isascii(ch) && isxdigit(ch)) {
|
while ((ch = *src++) != '\0' && ISXDIGIT(ch)) {
|
||||||
if (isupper(ch))
|
if (ISUPPER(ch))
|
||||||
ch = tolower(ch);
|
ch = tolower(ch);
|
||||||
n = (int)(strchr(xdigits, ch) - xdigits);
|
n = (int)(strchr(xdigits, ch) - xdigits);
|
||||||
if (dirty == 0)
|
if (dirty == 0)
|
||||||
@@ -104,7 +107,7 @@ inet_net_pton_ipv4(const char *src, unsigned char *dst, size_t size)
|
|||||||
goto emsgsize;
|
goto emsgsize;
|
||||||
*dst++ = (unsigned char) (tmp << 4);
|
*dst++ = (unsigned char) (tmp << 4);
|
||||||
}
|
}
|
||||||
} else if (isascii(ch) && isdigit(ch)) {
|
} else if (ISDIGIT(ch)) {
|
||||||
/* Decimal: eat dotted digit string. */
|
/* Decimal: eat dotted digit string. */
|
||||||
for (;;) {
|
for (;;) {
|
||||||
tmp = 0;
|
tmp = 0;
|
||||||
@@ -115,7 +118,7 @@ inet_net_pton_ipv4(const char *src, unsigned char *dst, size_t size)
|
|||||||
if (tmp > 255)
|
if (tmp > 255)
|
||||||
goto enoent;
|
goto enoent;
|
||||||
} while ((ch = *src++) != '\0' &&
|
} while ((ch = *src++) != '\0' &&
|
||||||
isascii(ch) && isdigit(ch));
|
ISDIGIT(ch));
|
||||||
if (size-- <= 0U)
|
if (size-- <= 0U)
|
||||||
goto emsgsize;
|
goto emsgsize;
|
||||||
*dst++ = (unsigned char) tmp;
|
*dst++ = (unsigned char) tmp;
|
||||||
@@ -124,15 +127,15 @@ inet_net_pton_ipv4(const char *src, unsigned char *dst, size_t size)
|
|||||||
if (ch != '.')
|
if (ch != '.')
|
||||||
goto enoent;
|
goto enoent;
|
||||||
ch = *src++;
|
ch = *src++;
|
||||||
if (!isascii(ch) || !isdigit(ch))
|
if (!ISDIGIT(ch))
|
||||||
goto enoent;
|
goto enoent;
|
||||||
}
|
}
|
||||||
} else
|
} else
|
||||||
goto enoent;
|
goto enoent;
|
||||||
|
|
||||||
bits = -1;
|
bits = -1;
|
||||||
if (ch == '/' && isascii((unsigned char)(src[0])) &&
|
if (ch == '/' &&
|
||||||
isdigit((unsigned char)(src[0])) && dst > odst) {
|
ISDIGIT(src[0]) && dst > odst) {
|
||||||
/* CIDR width specifier. Nothing can follow it. */
|
/* CIDR width specifier. Nothing can follow it. */
|
||||||
ch = *src++; /* Skip over the /. */
|
ch = *src++; /* Skip over the /. */
|
||||||
bits = 0;
|
bits = 0;
|
||||||
@@ -140,7 +143,7 @@ inet_net_pton_ipv4(const char *src, unsigned char *dst, size_t size)
|
|||||||
n = (int)(strchr(digits, ch) - digits);
|
n = (int)(strchr(digits, ch) - digits);
|
||||||
bits *= 10;
|
bits *= 10;
|
||||||
bits += n;
|
bits += n;
|
||||||
} while ((ch = *src++) != '\0' && isascii(ch) && isdigit(ch));
|
} while ((ch = *src++) != '\0' && ISDIGIT(ch));
|
||||||
if (ch != '\0')
|
if (ch != '\0')
|
||||||
goto enoent;
|
goto enoent;
|
||||||
if (bits > 32)
|
if (bits > 32)
|
||||||
@@ -185,11 +188,11 @@ inet_net_pton_ipv4(const char *src, unsigned char *dst, size_t size)
|
|||||||
return (bits);
|
return (bits);
|
||||||
|
|
||||||
enoent:
|
enoent:
|
||||||
errno = ENOENT;
|
SET_ERRNO(ENOENT);
|
||||||
return (-1);
|
return (-1);
|
||||||
|
|
||||||
emsgsize:
|
emsgsize:
|
||||||
errno = EMSGSIZE;
|
SET_ERRNO(EMSGSIZE);
|
||||||
return (-1);
|
return (-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -251,7 +254,7 @@ getv4(const char *src, unsigned char *dst, int *bitsp)
|
|||||||
if (ch == '.' || ch == '/') {
|
if (ch == '.' || ch == '/') {
|
||||||
if (dst - odst > 3) /* too many octets? */
|
if (dst - odst > 3) /* too many octets? */
|
||||||
return (0);
|
return (0);
|
||||||
*dst++ = val;
|
*dst++ = (unsigned char)val;
|
||||||
if (ch == '/')
|
if (ch == '/')
|
||||||
return (getbits(src, bitsp));
|
return (getbits(src, bitsp));
|
||||||
val = 0;
|
val = 0;
|
||||||
@@ -264,7 +267,7 @@ getv4(const char *src, unsigned char *dst, int *bitsp)
|
|||||||
return (0);
|
return (0);
|
||||||
if (dst - odst > 3) /* too many octets? */
|
if (dst - odst > 3) /* too many octets? */
|
||||||
return (0);
|
return (0);
|
||||||
*dst++ = val;
|
*dst++ = (unsigned char)val;
|
||||||
return (1);
|
return (1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -320,8 +323,8 @@ inet_net_pton_ipv6(const char *src, unsigned char *dst, size_t size)
|
|||||||
goto enoent;
|
goto enoent;
|
||||||
if (tp + NS_INT16SZ > endp)
|
if (tp + NS_INT16SZ > endp)
|
||||||
return (0);
|
return (0);
|
||||||
*tp++ = (unsigned char) (val >> 8) & 0xff;
|
*tp++ = (unsigned char)((val >> 8) & 0xff);
|
||||||
*tp++ = (unsigned char) val & 0xff;
|
*tp++ = (unsigned char)(val & 0xff);
|
||||||
saw_xdigit = 0;
|
saw_xdigit = 0;
|
||||||
digits = 0;
|
digits = 0;
|
||||||
val = 0;
|
val = 0;
|
||||||
@@ -341,8 +344,8 @@ inet_net_pton_ipv6(const char *src, unsigned char *dst, size_t size)
|
|||||||
if (saw_xdigit) {
|
if (saw_xdigit) {
|
||||||
if (tp + NS_INT16SZ > endp)
|
if (tp + NS_INT16SZ > endp)
|
||||||
goto enoent;
|
goto enoent;
|
||||||
*tp++ = (unsigned char) (val >> 8) & 0xff;
|
*tp++ = (unsigned char)((val >> 8) & 0xff);
|
||||||
*tp++ = (unsigned char) val & 0xff;
|
*tp++ = (unsigned char)(val & 0xff);
|
||||||
}
|
}
|
||||||
if (bits == -1)
|
if (bits == -1)
|
||||||
bits = 128;
|
bits = 128;
|
||||||
@@ -380,11 +383,11 @@ inet_net_pton_ipv6(const char *src, unsigned char *dst, size_t size)
|
|||||||
return (bits);
|
return (bits);
|
||||||
|
|
||||||
enoent:
|
enoent:
|
||||||
errno = ENOENT;
|
SET_ERRNO(ENOENT);
|
||||||
return (-1);
|
return (-1);
|
||||||
|
|
||||||
emsgsize:
|
emsgsize:
|
||||||
errno = EMSGSIZE;
|
SET_ERRNO(EMSGSIZE);
|
||||||
return (-1);
|
return (-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -398,6 +401,11 @@ inet_net_pton_ipv6(const char *src, unsigned char *dst, size_t size)
|
|||||||
* number of bits, either imputed classfully or specified with /CIDR,
|
* number of bits, either imputed classfully or specified with /CIDR,
|
||||||
* or -1 if some failure occurred (check errno). ENOENT means it was
|
* or -1 if some failure occurred (check errno). ENOENT means it was
|
||||||
* not a valid network specification.
|
* not a valid network specification.
|
||||||
|
* note:
|
||||||
|
* On Windows we store the error in the thread errno, not
|
||||||
|
* in the winsock error code. This is to avoid loosing the
|
||||||
|
* actual last winsock error. So use macro ERRNO to fetch the
|
||||||
|
* errno this funtion sets when returning (-1), not SOCKERRNO.
|
||||||
* author:
|
* author:
|
||||||
* Paul Vixie (ISC), June 1996
|
* Paul Vixie (ISC), June 1996
|
||||||
*/
|
*/
|
||||||
@@ -410,7 +418,7 @@ ares_inet_net_pton(int af, const char *src, void *dst, size_t size)
|
|||||||
case AF_INET6:
|
case AF_INET6:
|
||||||
return (inet_net_pton_ipv6(src, dst, size));
|
return (inet_net_pton_ipv6(src, dst, size));
|
||||||
default:
|
default:
|
||||||
errno = EAFNOSUPPORT;
|
SET_ERRNO(EAFNOSUPPORT);
|
||||||
return (-1);
|
return (-1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -428,11 +436,11 @@ int ares_inet_pton(int af, const char *src, void *dst)
|
|||||||
size = sizeof(struct in6_addr);
|
size = sizeof(struct in6_addr);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
errno = EAFNOSUPPORT;
|
SET_ERRNO(EAFNOSUPPORT);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
result = ares_inet_net_pton(af, src, dst, size);
|
result = ares_inet_net_pton(af, src, dst, size);
|
||||||
if (result == -1 && errno == ENOENT)
|
if (result == -1 && ERRNO == ENOENT)
|
||||||
return 0;
|
return 0;
|
||||||
return (result > -1 ? 1 : -1);
|
return (result > -1 ? 1 : -1);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,6 @@
|
|||||||
|
#ifndef __ARES_INET_NET_PTON_H
|
||||||
|
#define __ARES_INET_NET_PTON_H
|
||||||
|
|
||||||
/* $Id$ */
|
/* $Id$ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -14,9 +17,6 @@
|
|||||||
* without express or implied warranty.
|
* without express or implied warranty.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef INET_NET_PTON_H
|
|
||||||
#define INET_NET_PTON_H
|
|
||||||
|
|
||||||
#if defined(HAVE_INET_PTON) && defined(HAVE_INET_PTON_IPV6)
|
#if defined(HAVE_INET_PTON) && defined(HAVE_INET_PTON_IPV6)
|
||||||
#define ares_inet_pton(x,y,z) inet_pton(x,y,z)
|
#define ares_inet_pton(x,y,z) inet_pton(x,y,z)
|
||||||
#else
|
#else
|
||||||
@@ -28,4 +28,4 @@ int ares_inet_pton(int af, const char *src, void *dst);
|
|||||||
int ares_inet_net_pton(int af, const char *src, void *dst, size_t size);
|
int ares_inet_net_pton(int af, const char *src, void *dst, size_t size);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* INET_NET_PTON_H */
|
#endif /* __ARES_INET_NET_PTON_H */
|
||||||
|
|||||||
247
ares/inet_ntop.c
247
ares/inet_ntop.c
@@ -1,3 +1,5 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
/* Copyright (c) 1996 by Internet Software Consortium.
|
/* Copyright (c) 1996 by Internet Software Consortium.
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this software for any
|
* Permission to use, copy, modify, and distribute this software for any
|
||||||
@@ -16,8 +18,6 @@
|
|||||||
|
|
||||||
#include "setup.h"
|
#include "setup.h"
|
||||||
|
|
||||||
#include <sys/types.h>
|
|
||||||
|
|
||||||
#if defined(WIN32) && !defined(WATT32)
|
#if defined(WIN32) && !defined(WATT32)
|
||||||
#include "nameser.h"
|
#include "nameser.h"
|
||||||
#else
|
#else
|
||||||
@@ -63,144 +63,169 @@ static const char *inet_ntop6(const unsigned char *src, char *dst, size_t size);
|
|||||||
|
|
||||||
/* char *
|
/* char *
|
||||||
* inet_ntop(af, src, dst, size)
|
* inet_ntop(af, src, dst, size)
|
||||||
* convert a network format address to presentation format.
|
* convert a network format address to presentation format.
|
||||||
* return:
|
* return:
|
||||||
* pointer to presentation format address (`dst'), or NULL (see errno).
|
* pointer to presentation format address (`dst'), or NULL (see errno).
|
||||||
|
* note:
|
||||||
|
* On Windows we store the error in the thread errno, not
|
||||||
|
* in the winsock error code. This is to avoid loosing the
|
||||||
|
* actual last winsock error. So use macro ERRNO to fetch the
|
||||||
|
* errno this funtion sets when returning NULL, not SOCKERRNO.
|
||||||
* author:
|
* author:
|
||||||
* Paul Vixie, 1996.
|
* Paul Vixie, 1996.
|
||||||
*/
|
*/
|
||||||
const char *
|
const char *
|
||||||
ares_inet_ntop(int af, const void *src, char *dst, size_t size)
|
ares_inet_ntop(int af, const void *src, char *dst, size_t size)
|
||||||
{
|
{
|
||||||
|
switch (af)
|
||||||
switch (af) {
|
{
|
||||||
case AF_INET:
|
case AF_INET:
|
||||||
return (inet_ntop4(src, dst, size));
|
return (inet_ntop4(src, dst, size));
|
||||||
case AF_INET6:
|
case AF_INET6:
|
||||||
return (inet_ntop6(src, dst, size));
|
return (inet_ntop6(src, dst, size));
|
||||||
default:
|
default:
|
||||||
errno = EAFNOSUPPORT;
|
SET_ERRNO(EAFNOSUPPORT);
|
||||||
return (NULL);
|
return (NULL);
|
||||||
}
|
}
|
||||||
/* NOTREACHED */
|
/* NOTREACHED */
|
||||||
}
|
}
|
||||||
|
|
||||||
/* const char *
|
/* const char *
|
||||||
* inet_ntop4(src, dst, size)
|
* inet_ntop4(src, dst, size)
|
||||||
* format an IPv4 address, more or less like inet_ntoa()
|
* format an IPv4 address, more or less like inet_ntoa()
|
||||||
* return:
|
* return:
|
||||||
* `dst' (as a const)
|
* `dst' (as a const)
|
||||||
* notes:
|
* notes:
|
||||||
* (1) uses no statics
|
* (1) uses no statics
|
||||||
* (2) takes a unsigned char* not an in_addr as input
|
* (2) takes a unsigned char* not an in_addr as input
|
||||||
* author:
|
* author:
|
||||||
* Paul Vixie, 1996.
|
* Paul Vixie, 1996.
|
||||||
*/
|
*/
|
||||||
static const char *
|
static const char *
|
||||||
inet_ntop4(const unsigned char *src, char *dst, size_t size)
|
inet_ntop4(const unsigned char *src, char *dst, size_t size)
|
||||||
{
|
{
|
||||||
static const char fmt[] = "%u.%u.%u.%u";
|
static const char fmt[] = "%u.%u.%u.%u";
|
||||||
char tmp[sizeof "255.255.255.255"];
|
char tmp[sizeof "255.255.255.255"];
|
||||||
|
|
||||||
if (SPRINTF((tmp, fmt, src[0], src[1], src[2], src[3])) > size) {
|
if (SPRINTF((tmp, fmt, src[0], src[1], src[2], src[3])) > size)
|
||||||
errno = ENOSPC;
|
{
|
||||||
return (NULL);
|
SET_ERRNO(ENOSPC);
|
||||||
}
|
return (NULL);
|
||||||
strcpy(dst, tmp);
|
}
|
||||||
return (dst);
|
strcpy(dst, tmp);
|
||||||
|
return (dst);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* const char *
|
/* const char *
|
||||||
* inet_ntop6(src, dst, size)
|
* inet_ntop6(src, dst, size)
|
||||||
* convert IPv6 binary address into presentation (printable) format
|
* convert IPv6 binary address into presentation (printable) format
|
||||||
* author:
|
* author:
|
||||||
* Paul Vixie, 1996.
|
* Paul Vixie, 1996.
|
||||||
*/
|
*/
|
||||||
static const char *
|
static const char *
|
||||||
inet_ntop6(const unsigned char *src, char *dst, size_t size)
|
inet_ntop6(const unsigned char *src, char *dst, size_t size)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* Note that int32_t and int16_t need only be "at least" large enough
|
* Note that int32_t and int16_t need only be "at least" large enough
|
||||||
* to contain a value of the specified size. On some systems, like
|
* to contain a value of the specified size. On some systems, like
|
||||||
* Crays, there is no such thing as an integer variable with 16 bits.
|
* Crays, there is no such thing as an integer variable with 16 bits.
|
||||||
* Keep this in mind if you think this function should have been coded
|
* Keep this in mind if you think this function should have been coded
|
||||||
* to use pointer overlays. All the world's not a VAX.
|
* to use pointer overlays. All the world's not a VAX.
|
||||||
*/
|
*/
|
||||||
char tmp[sizeof "ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255"], *tp;
|
char tmp[sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255")];
|
||||||
struct { int base, len; } best, cur;
|
char *tp;
|
||||||
unsigned int words[NS_IN6ADDRSZ / NS_INT16SZ];
|
struct {
|
||||||
int i;
|
long base;
|
||||||
|
long len;
|
||||||
|
} best, cur;
|
||||||
|
unsigned long words[NS_IN6ADDRSZ / NS_INT16SZ];
|
||||||
|
int i;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Preprocess:
|
* Preprocess:
|
||||||
* Copy the input (bytewise) array into a wordwise array.
|
* Copy the input (bytewise) array into a wordwise array.
|
||||||
* Find the longest run of 0x00's in src[] for :: shorthanding.
|
* Find the longest run of 0x00's in src[] for :: shorthanding.
|
||||||
*/
|
*/
|
||||||
memset(words, '\0', sizeof words);
|
memset(words, '\0', sizeof(words));
|
||||||
for (i = 0; i < NS_IN6ADDRSZ; i++)
|
for (i = 0; i < NS_IN6ADDRSZ; i++)
|
||||||
words[i / 2] |= (src[i] << ((1 - (i % 2)) << 3));
|
words[i / 2] |= (src[i] << ((1 - (i % 2)) << 3));
|
||||||
best.base = -1;
|
|
||||||
cur.base = -1;
|
|
||||||
for (i = 0; i < (NS_IN6ADDRSZ / NS_INT16SZ); i++) {
|
|
||||||
if (words[i] == 0) {
|
|
||||||
if (cur.base == -1)
|
|
||||||
cur.base = i, cur.len = 1;
|
|
||||||
else
|
|
||||||
cur.len++;
|
|
||||||
} else {
|
|
||||||
if (cur.base != -1) {
|
|
||||||
if (best.base == -1 || cur.len > best.len)
|
|
||||||
best = cur;
|
|
||||||
cur.base = -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (cur.base != -1) {
|
|
||||||
if (best.base == -1 || cur.len > best.len)
|
|
||||||
best = cur;
|
|
||||||
}
|
|
||||||
if (best.base != -1 && best.len < 2)
|
|
||||||
best.base = -1;
|
|
||||||
|
|
||||||
/*
|
best.base = -1;
|
||||||
* Format the result.
|
cur.base = -1;
|
||||||
*/
|
best.len = 0;
|
||||||
tp = tmp;
|
cur.len = 0;
|
||||||
for (i = 0; i < (NS_IN6ADDRSZ / NS_INT16SZ); i++) {
|
|
||||||
/* Are we inside the best run of 0x00's? */
|
|
||||||
if (best.base != -1 && i >= best.base &&
|
|
||||||
i < (best.base + best.len)) {
|
|
||||||
if (i == best.base)
|
|
||||||
*tp++ = ':';
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
/* Are we following an initial run of 0x00s or any real hex? */
|
|
||||||
if (i != 0)
|
|
||||||
*tp++ = ':';
|
|
||||||
/* Is this address an encapsulated IPv4? */
|
|
||||||
if (i == 6 && best.base == 0 &&
|
|
||||||
(best.len == 6 || (best.len == 5 && words[5] == 0xffff))) {
|
|
||||||
if (!inet_ntop4(src+12, tp, sizeof tmp - (tp - tmp)))
|
|
||||||
return (NULL);
|
|
||||||
tp += strlen(tp);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
tp += SPRINTF((tp, "%x", words[i]));
|
|
||||||
}
|
|
||||||
/* Was it a trailing run of 0x00's? */
|
|
||||||
if (best.base != -1 && (best.base + best.len) == (NS_IN6ADDRSZ / NS_INT16SZ))
|
|
||||||
*tp++ = ':';
|
|
||||||
*tp++ = '\0';
|
|
||||||
|
|
||||||
/*
|
for (i = 0; i < (NS_IN6ADDRSZ / NS_INT16SZ); i++)
|
||||||
* Check for overflow, copy, and we're done.
|
{
|
||||||
*/
|
if (words[i] == 0)
|
||||||
if ((size_t)(tp - tmp) > size) {
|
{
|
||||||
errno = ENOSPC;
|
if (cur.base == -1)
|
||||||
return (NULL);
|
cur.base = i, cur.len = 1;
|
||||||
}
|
else
|
||||||
strcpy(dst, tmp);
|
cur.len++;
|
||||||
return (dst);
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (cur.base != -1)
|
||||||
|
{
|
||||||
|
if (best.base == -1 || cur.len > best.len)
|
||||||
|
best = cur;
|
||||||
|
cur.base = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (cur.base != -1)
|
||||||
|
{
|
||||||
|
if (best.base == -1 || cur.len > best.len)
|
||||||
|
best = cur;
|
||||||
|
}
|
||||||
|
if (best.base != -1 && best.len < 2)
|
||||||
|
best.base = -1;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Format the result.
|
||||||
|
*/
|
||||||
|
tp = tmp;
|
||||||
|
for (i = 0; i < (NS_IN6ADDRSZ / NS_INT16SZ); i++)
|
||||||
|
{
|
||||||
|
/* Are we inside the best run of 0x00's? */
|
||||||
|
if (best.base != -1 && i >= best.base &&
|
||||||
|
i < (best.base + best.len))
|
||||||
|
{
|
||||||
|
if (i == best.base)
|
||||||
|
*tp++ = ':';
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
/* Are we following an initial run of 0x00s or any real hex? */
|
||||||
|
if (i != 0)
|
||||||
|
*tp++ = ':';
|
||||||
|
/* Is this address an encapsulated IPv4? */
|
||||||
|
if (i == 6 && best.base == 0 &&
|
||||||
|
(best.len == 6 || (best.len == 5 && words[5] == 0xffff)))
|
||||||
|
{
|
||||||
|
if (!inet_ntop4(src+12, tp, sizeof(tmp) - (tp - tmp)))
|
||||||
|
return (NULL);
|
||||||
|
tp += strlen(tp);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
tp += SPRINTF((tp, "%lx", words[i]));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Was it a trailing run of 0x00's? */
|
||||||
|
if (best.base != -1 && (best.base + best.len) == (NS_IN6ADDRSZ / NS_INT16SZ))
|
||||||
|
*tp++ = ':';
|
||||||
|
*tp++ = '\0';
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Check for overflow, copy, and we're done.
|
||||||
|
*/
|
||||||
|
if ((size_t)(tp - tmp) > size)
|
||||||
|
{
|
||||||
|
SET_ERRNO(ENOSPC);
|
||||||
|
return (NULL);
|
||||||
|
}
|
||||||
|
strcpy(dst, tmp);
|
||||||
|
return (dst);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,6 @@
|
|||||||
|
#ifndef __ARES_INET_NTOP_H
|
||||||
|
#define __ARES_INET_NTOP_H
|
||||||
|
|
||||||
/* $Id$ */
|
/* $Id$ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -14,13 +17,10 @@
|
|||||||
* without express or implied warranty.
|
* without express or implied warranty.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef INET_NTOP_H
|
#if defined(HAVE_INET_NTOP) && defined(HAVE_INET_NTOP_IPV6)
|
||||||
#define INET_NTOP_H
|
|
||||||
|
|
||||||
#ifdef HAVE_INET_NTOP
|
|
||||||
#define ares_inet_ntop(w,x,y,z) inet_ntop(w,x,y,z)
|
#define ares_inet_ntop(w,x,y,z) inet_ntop(w,x,y,z)
|
||||||
#else
|
#else
|
||||||
const char *ares_inet_ntop(int af, const void *src, char *dst, size_t size);
|
const char *ares_inet_ntop(int af, const void *src, char *dst, size_t size);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* INET_NET_NTOP_H */
|
#endif /* __ARES_INET_NTOP_H */
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
#ifndef ARES_NAMESER_H
|
#ifndef ARES_NAMESER_H
|
||||||
#define ARES_NAMESER_H
|
#define ARES_NAMESER_H
|
||||||
|
|
||||||
@@ -5,7 +7,9 @@
|
|||||||
port build */
|
port build */
|
||||||
|
|
||||||
#ifndef NETWARE
|
#ifndef NETWARE
|
||||||
|
#ifndef __CYGWIN__
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
#endif
|
||||||
#include <process.h> /* for the _getpid() proto */
|
#include <process.h> /* for the _getpid() proto */
|
||||||
#endif /* !NETWARE */
|
#endif /* !NETWARE */
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
@@ -14,11 +18,6 @@
|
|||||||
|
|
||||||
#define MAXHOSTNAMELEN 256
|
#define MAXHOSTNAMELEN 256
|
||||||
|
|
||||||
#define EINPROGRESS WSAEINPROGRESS
|
|
||||||
#define EWOULDBLOCK WSAEWOULDBLOCK
|
|
||||||
#define EMSGSIZE WSAEMSGSIZE
|
|
||||||
#define EAFNOSUPPORT WSAEAFNOSUPPORT
|
|
||||||
|
|
||||||
/* Structure for scatter/gather I/O. */
|
/* Structure for scatter/gather I/O. */
|
||||||
struct iovec
|
struct iovec
|
||||||
{
|
{
|
||||||
@@ -26,7 +25,9 @@ struct iovec
|
|||||||
size_t iov_len; /* Length of data. */
|
size_t iov_len; /* Length of data. */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#ifndef __WATCOMC__
|
||||||
#define getpid() _getpid()
|
#define getpid() _getpid()
|
||||||
|
#endif
|
||||||
|
|
||||||
int ares_writev (SOCKET s, const struct iovec *vector, size_t count);
|
int ares_writev (SOCKET s, const struct iovec *vector, size_t count);
|
||||||
#define writev(s,vect,count) ares_writev(s,vect,count)
|
#define writev(s,vect,count) ares_writev(s,vect,count)
|
||||||
|
|||||||
122
ares/setup.h
122
ares/setup.h
@@ -1,5 +1,7 @@
|
|||||||
#ifndef ARES_SETUP_H
|
#ifndef __ARES_SETUP_H
|
||||||
#define ARES_SETUP_H
|
#define __ARES_SETUP_H
|
||||||
|
|
||||||
|
/* $Id$ */
|
||||||
|
|
||||||
/* Copyright (C) 2004 - 2005 by Daniel Stenberg et al
|
/* Copyright (C) 2004 - 2005 by Daniel Stenberg et al
|
||||||
*
|
*
|
||||||
@@ -14,17 +16,99 @@
|
|||||||
* without express or implied warranty.
|
* without express or implied warranty.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#if !defined(WIN32) && defined(__WIN32__)
|
||||||
|
/* Borland fix */
|
||||||
|
#define WIN32
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(WIN32) && defined(_WIN32)
|
||||||
|
/* VS2005 on x64 fix */
|
||||||
|
#define WIN32
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Include configuration script results or hand-crafted
|
||||||
|
* configuration file for platforms which lack config tool.
|
||||||
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#else
|
#else
|
||||||
/* simple work-around for now, for systems without configure support */
|
|
||||||
|
#ifdef WIN32
|
||||||
|
#include "config-win32.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* HAVE_CONFIG_H */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Include header files for windows builds before redefining anything.
|
||||||
|
* Use this preproessor block only to include or exclude windows.h,
|
||||||
|
* winsock2.h, ws2tcpip.h or winsock.h. Any other windows thing belongs
|
||||||
|
* to any other further and independant block. Under Cygwin things work
|
||||||
|
* just as under linux (e.g. <sys/socket.h>) and the winsock headers should
|
||||||
|
* never be included when __CYGWIN__ is defined. configure script takes
|
||||||
|
* care of this, not defining HAVE_WINDOWS_H, HAVE_WINSOCK_H, HAVE_WINSOCK2_H,
|
||||||
|
* neither HAVE_WS2TCPIP_H when __CYGWIN__ is defined.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef HAVE_WINDOWS_H
|
||||||
|
# ifndef WIN32_LEAN_AND_MEAN
|
||||||
|
# define WIN32_LEAN_AND_MEAN
|
||||||
|
# endif
|
||||||
|
# include <windows.h>
|
||||||
|
# ifdef HAVE_WINSOCK2_H
|
||||||
|
# include <winsock2.h>
|
||||||
|
# ifdef HAVE_WS2TCPIP_H
|
||||||
|
# include <ws2tcpip.h>
|
||||||
|
# endif
|
||||||
|
# else
|
||||||
|
# ifdef HAVE_WINSOCK_H
|
||||||
|
# include <winsock.h>
|
||||||
|
# endif
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Define USE_WINSOCK to 2 if we have and use WINSOCK2 API, else
|
||||||
|
* define USE_WINSOCK to 1 if we have and use WINSOCK API, else
|
||||||
|
* undefine USE_WINSOCK.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#undef USE_WINSOCK
|
||||||
|
|
||||||
|
#ifdef HAVE_WINSOCK2_H
|
||||||
|
# define USE_WINSOCK 2
|
||||||
|
#else
|
||||||
|
# ifdef HAVE_WINSOCK_H
|
||||||
|
# define USE_WINSOCK 1
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Work-arounds for systems without configure support
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef HAVE_CONFIG_H
|
||||||
|
|
||||||
|
#if defined(__DJGPP__) || (defined(__WATCOMC__) && (__WATCOMC__ >= 1240)) || \
|
||||||
|
defined(__POCC__)
|
||||||
|
#else
|
||||||
#define ssize_t int
|
#define ssize_t int
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef HAVE_WS2TCPIP_H
|
||||||
#define socklen_t int
|
#define socklen_t int
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Recent autoconf versions define these symbols in config.h. We don't want
|
#endif /* HAVE_CONFIG_H */
|
||||||
them (since they collide with the libcurl ones when we build
|
|
||||||
--enable-debug) so we undef them again here. */
|
/*
|
||||||
|
* Recent autoconf versions define these symbols in config.h. We don't
|
||||||
|
* want them (since they collide with the libcurl ones when we build
|
||||||
|
* --enable-debug) so we undef them again here.
|
||||||
|
*/
|
||||||
|
|
||||||
#undef PACKAGE_STRING
|
#undef PACKAGE_STRING
|
||||||
#undef PACKAGE_TARNAME
|
#undef PACKAGE_TARNAME
|
||||||
#undef PACKAGE_VERSION
|
#undef PACKAGE_VERSION
|
||||||
@@ -33,9 +117,11 @@
|
|||||||
#undef VERSION
|
#undef VERSION
|
||||||
#undef PACKAGE
|
#undef PACKAGE
|
||||||
|
|
||||||
/* now typedef our socket type */
|
/*
|
||||||
#if defined(WIN32) && !defined(WATT32)
|
* Typedef our socket type
|
||||||
#include <winsock.h>
|
*/
|
||||||
|
|
||||||
|
#ifdef USE_WINSOCK
|
||||||
typedef SOCKET ares_socket_t;
|
typedef SOCKET ares_socket_t;
|
||||||
#define ARES_SOCKET_BAD INVALID_SOCKET
|
#define ARES_SOCKET_BAD INVALID_SOCKET
|
||||||
#else
|
#else
|
||||||
@@ -43,9 +129,11 @@ typedef int ares_socket_t;
|
|||||||
#define ARES_SOCKET_BAD -1
|
#define ARES_SOCKET_BAD -1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Assume a few thing unless they're set by configure
|
/*
|
||||||
|
* Assume a few thing unless they're set by configure
|
||||||
*/
|
*/
|
||||||
#if !defined(HAVE_SYS_TIME_H) && !defined(_MSC_VER)
|
|
||||||
|
#if !defined(HAVE_SYS_TIME_H) && !defined(_MSC_VER) && !defined(__WATCOMC__)
|
||||||
#define HAVE_SYS_TIME_H
|
#define HAVE_SYS_TIME_H
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -58,7 +146,7 @@ typedef int ares_socket_t;
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if (defined(WIN32) || defined(WATT32)) && \
|
#if (defined(WIN32) || defined(WATT32)) && \
|
||||||
!(defined(__MINGW32__) || defined(NETWARE))
|
!(defined(__MINGW32__) || defined(NETWARE) || defined(__DJGPP__))
|
||||||
/* protos for the functions we provide in windows_port.c */
|
/* protos for the functions we provide in windows_port.c */
|
||||||
int ares_strncasecmp(const char *s1, const char *s2, int n);
|
int ares_strncasecmp(const char *s1, const char *s2, int n);
|
||||||
int ares_strcasecmp(const char *s1, const char *s2);
|
int ares_strcasecmp(const char *s1, const char *s2);
|
||||||
@@ -79,4 +167,12 @@ int ares_strcasecmp(const char *s1, const char *s2);
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* ARES_SETUP_H */
|
/*
|
||||||
|
* Include macros and defines that should only be processed once.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __SETUP_ONCE_H
|
||||||
|
#include "setup_once.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* __ARES_SETUP_H */
|
||||||
|
|||||||
341
ares/setup_once.h
Normal file
341
ares/setup_once.h
Normal file
@@ -0,0 +1,341 @@
|
|||||||
|
#ifndef __SETUP_ONCE_H
|
||||||
|
#define __SETUP_ONCE_H
|
||||||
|
|
||||||
|
/* $Id$ */
|
||||||
|
|
||||||
|
/* Copyright (C) 2004 - 2007 by Daniel Stenberg et al
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and distribute this software and its
|
||||||
|
* documentation for any purpose and without fee is hereby granted, provided
|
||||||
|
* that the above copyright notice appear in all copies and that both that
|
||||||
|
* copyright notice and this permission notice appear in supporting
|
||||||
|
* documentation, and that the name of M.I.T. not be used in advertising or
|
||||||
|
* publicity pertaining to distribution of the software without specific,
|
||||||
|
* written prior permission. M.I.T. makes no representations about the
|
||||||
|
* suitability of this software for any purpose. It is provided "as is"
|
||||||
|
* without express or implied warranty.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/********************************************************************
|
||||||
|
* NOTICE *
|
||||||
|
* ======== *
|
||||||
|
* *
|
||||||
|
* Content of header files lib/setup_once.h and ares/setup_once.h *
|
||||||
|
* must be kept in sync. Modify the other one if you change this. *
|
||||||
|
* *
|
||||||
|
********************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Inclusion of common header files.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdarg.h>
|
||||||
|
#include <ctype.h>
|
||||||
|
#include <errno.h>
|
||||||
|
|
||||||
|
#ifdef HAVE_SYS_TYPES_H
|
||||||
|
#include <sys/types.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_SYS_STAT_H
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_SYS_TIME_H
|
||||||
|
#include <sys/time.h>
|
||||||
|
#ifdef TIME_WITH_SYS_TIME
|
||||||
|
#include <time.h>
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#ifdef HAVE_TIME_H
|
||||||
|
#include <time.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
#include <io.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_STDBOOL_H
|
||||||
|
#include <stdbool.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Definition of timeval struct for platforms that don't have it.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef HAVE_STRUCT_TIMEVAL
|
||||||
|
struct timeval {
|
||||||
|
long tv_sec;
|
||||||
|
long tv_usec;
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If we have the MSG_NOSIGNAL define, make sure we use
|
||||||
|
* it as the fourth argument of function send()
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef HAVE_MSG_NOSIGNAL
|
||||||
|
#define SEND_4TH_ARG MSG_NOSIGNAL
|
||||||
|
#else
|
||||||
|
#define SEND_4TH_ARG 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The definitions for the return type and arguments types
|
||||||
|
* of functions recv() and send() belong and come from the
|
||||||
|
* configuration file. Do not define them in any other place.
|
||||||
|
*
|
||||||
|
* HAVE_RECV is defined if you have a function named recv()
|
||||||
|
* which is used to read incoming data from sockets. If your
|
||||||
|
* function has another name then don't define HAVE_RECV.
|
||||||
|
*
|
||||||
|
* If HAVE_RECV is defined then RECV_TYPE_ARG1, RECV_TYPE_ARG2,
|
||||||
|
* RECV_TYPE_ARG3, RECV_TYPE_ARG4 and RECV_TYPE_RETV must also
|
||||||
|
* be defined.
|
||||||
|
*
|
||||||
|
* HAVE_SEND is defined if you have a function named send()
|
||||||
|
* which is used to write outgoing data on a connected socket.
|
||||||
|
* If yours has another name then don't define HAVE_SEND.
|
||||||
|
*
|
||||||
|
* If HAVE_SEND is defined then SEND_TYPE_ARG1, SEND_QUAL_ARG2,
|
||||||
|
* SEND_TYPE_ARG2, SEND_TYPE_ARG3, SEND_TYPE_ARG4 and
|
||||||
|
* SEND_TYPE_RETV must also be defined.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef HAVE_RECV
|
||||||
|
#if !defined(RECV_TYPE_ARG1) || \
|
||||||
|
!defined(RECV_TYPE_ARG2) || \
|
||||||
|
!defined(RECV_TYPE_ARG3) || \
|
||||||
|
!defined(RECV_TYPE_ARG4) || \
|
||||||
|
!defined(RECV_TYPE_RETV)
|
||||||
|
/* */
|
||||||
|
Error Missing_definition_of_return_and_arguments_types_of_recv
|
||||||
|
/* */
|
||||||
|
#else
|
||||||
|
#define sread(x,y,z) (ssize_t)recv((RECV_TYPE_ARG1)(x), \
|
||||||
|
(RECV_TYPE_ARG2)(y), \
|
||||||
|
(RECV_TYPE_ARG3)(z), \
|
||||||
|
(RECV_TYPE_ARG4)(0))
|
||||||
|
#endif
|
||||||
|
#else /* HAVE_RECV */
|
||||||
|
#ifndef sread
|
||||||
|
/* */
|
||||||
|
Error Missing_definition_of_macro_sread
|
||||||
|
/* */
|
||||||
|
#endif
|
||||||
|
#endif /* HAVE_RECV */
|
||||||
|
|
||||||
|
#ifdef HAVE_SEND
|
||||||
|
#if !defined(SEND_TYPE_ARG1) || \
|
||||||
|
!defined(SEND_QUAL_ARG2) || \
|
||||||
|
!defined(SEND_TYPE_ARG2) || \
|
||||||
|
!defined(SEND_TYPE_ARG3) || \
|
||||||
|
!defined(SEND_TYPE_ARG4) || \
|
||||||
|
!defined(SEND_TYPE_RETV)
|
||||||
|
/* */
|
||||||
|
Error Missing_definition_of_return_and_arguments_types_of_send
|
||||||
|
/* */
|
||||||
|
#else
|
||||||
|
#define swrite(x,y,z) (ssize_t)send((SEND_TYPE_ARG1)(x), \
|
||||||
|
(SEND_TYPE_ARG2)(y), \
|
||||||
|
(SEND_TYPE_ARG3)(z), \
|
||||||
|
(SEND_TYPE_ARG4)(SEND_4TH_ARG))
|
||||||
|
#endif
|
||||||
|
#else /* HAVE_SEND */
|
||||||
|
#ifndef swrite
|
||||||
|
/* */
|
||||||
|
Error Missing_definition_of_macro_swrite
|
||||||
|
/* */
|
||||||
|
#endif
|
||||||
|
#endif /* HAVE_SEND */
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Uppercase macro versions of ANSI/ISO is*() functions/macros which
|
||||||
|
* avoid negative number inputs with argument byte codes > 127.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define ISSPACE(x) (isspace((int) ((unsigned char)x)))
|
||||||
|
#define ISDIGIT(x) (isdigit((int) ((unsigned char)x)))
|
||||||
|
#define ISALNUM(x) (isalnum((int) ((unsigned char)x)))
|
||||||
|
#define ISXDIGIT(x) (isxdigit((int) ((unsigned char)x)))
|
||||||
|
#define ISGRAPH(x) (isgraph((int) ((unsigned char)x)))
|
||||||
|
#define ISALPHA(x) (isalpha((int) ((unsigned char)x)))
|
||||||
|
#define ISPRINT(x) (isprint((int) ((unsigned char)x)))
|
||||||
|
#define ISUPPER(x) (isupper((int) ((unsigned char)x)))
|
||||||
|
#define ISLOWER(x) (islower((int) ((unsigned char)x)))
|
||||||
|
|
||||||
|
#define ISBLANK(x) (int)((((unsigned char)x) == ' ') || \
|
||||||
|
(((unsigned char)x) == '\t'))
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Typedef to 'unsigned char' if bool is not an available 'typedefed' type.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef HAVE_BOOL_T
|
||||||
|
typedef unsigned char bool;
|
||||||
|
#define HAVE_BOOL_T
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Default definition of uppercase TRUE and FALSE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef TRUE
|
||||||
|
#define TRUE 1
|
||||||
|
#endif
|
||||||
|
#ifndef FALSE
|
||||||
|
#define FALSE 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Typedef to 'int' if sig_atomic_t is not an available 'typedefed' type.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef HAVE_SIG_ATOMIC_T
|
||||||
|
typedef int sig_atomic_t;
|
||||||
|
#define HAVE_SIG_ATOMIC_T
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Convenience SIG_ATOMIC_T definition
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef HAVE_SIG_ATOMIC_T_VOLATILE
|
||||||
|
#define SIG_ATOMIC_T static sig_atomic_t
|
||||||
|
#else
|
||||||
|
#define SIG_ATOMIC_T static volatile sig_atomic_t
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Default return type for signal handlers.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef RETSIGTYPE
|
||||||
|
#define RETSIGTYPE void
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Macro used to include code only in debug builds.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef CURLDEBUG
|
||||||
|
#define DEBUGF(x) x
|
||||||
|
#else
|
||||||
|
#define DEBUGF(x) do { } while (0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Macro used to include assertion code only in debug builds.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined(CURLDEBUG) && defined(HAVE_ASSERT_H)
|
||||||
|
#define DEBUGASSERT(x) assert(x)
|
||||||
|
#else
|
||||||
|
#define DEBUGASSERT(x) do { } while (0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Macro SOCKERRNO / SET_SOCKERRNO() returns / sets the *socket-related* errno
|
||||||
|
* (or equivalent) on this platform to hide platform details to code using it.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef USE_WINSOCK
|
||||||
|
#define SOCKERRNO ((int)WSAGetLastError())
|
||||||
|
#define SET_SOCKERRNO(x) (WSASetLastError((int)(x)))
|
||||||
|
#else
|
||||||
|
#define SOCKERRNO (errno)
|
||||||
|
#define SET_SOCKERRNO(x) (errno = (x))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Macro ERRNO / SET_ERRNO() returns / sets the NOT *socket-related* errno
|
||||||
|
* (or equivalent) on this platform to hide platform details to code using it.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
#define ERRNO ((int)GetLastError())
|
||||||
|
#define SET_ERRNO(x) (SetLastError((DWORD)(x)))
|
||||||
|
#else
|
||||||
|
#define ERRNO (errno)
|
||||||
|
#define SET_ERRNO(x) (errno = (x))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Portable error number symbolic names defined to Winsock error codes.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef USE_WINSOCK
|
||||||
|
#undef EBADF /* override definition in errno.h */
|
||||||
|
#define EBADF WSAEBADF
|
||||||
|
#undef EINTR /* override definition in errno.h */
|
||||||
|
#define EINTR WSAEINTR
|
||||||
|
#undef EINVAL /* override definition in errno.h */
|
||||||
|
#define EINVAL WSAEINVAL
|
||||||
|
#define EWOULDBLOCK WSAEWOULDBLOCK
|
||||||
|
#define EINPROGRESS WSAEINPROGRESS
|
||||||
|
#define EALREADY WSAEALREADY
|
||||||
|
#define ENOTSOCK WSAENOTSOCK
|
||||||
|
#define EDESTADDRREQ WSAEDESTADDRREQ
|
||||||
|
#define EMSGSIZE WSAEMSGSIZE
|
||||||
|
#define EPROTOTYPE WSAEPROTOTYPE
|
||||||
|
#define ENOPROTOOPT WSAENOPROTOOPT
|
||||||
|
#define EPROTONOSUPPORT WSAEPROTONOSUPPORT
|
||||||
|
#define ESOCKTNOSUPPORT WSAESOCKTNOSUPPORT
|
||||||
|
#define EOPNOTSUPP WSAEOPNOTSUPP
|
||||||
|
#define EPFNOSUPPORT WSAEPFNOSUPPORT
|
||||||
|
#define EAFNOSUPPORT WSAEAFNOSUPPORT
|
||||||
|
#define EADDRINUSE WSAEADDRINUSE
|
||||||
|
#define EADDRNOTAVAIL WSAEADDRNOTAVAIL
|
||||||
|
#define ENETDOWN WSAENETDOWN
|
||||||
|
#define ENETUNREACH WSAENETUNREACH
|
||||||
|
#define ENETRESET WSAENETRESET
|
||||||
|
#define ECONNABORTED WSAECONNABORTED
|
||||||
|
#define ECONNRESET WSAECONNRESET
|
||||||
|
#define ENOBUFS WSAENOBUFS
|
||||||
|
#define EISCONN WSAEISCONN
|
||||||
|
#define ENOTCONN WSAENOTCONN
|
||||||
|
#define ESHUTDOWN WSAESHUTDOWN
|
||||||
|
#define ETOOMANYREFS WSAETOOMANYREFS
|
||||||
|
#define ETIMEDOUT WSAETIMEDOUT
|
||||||
|
#define ECONNREFUSED WSAECONNREFUSED
|
||||||
|
#define ELOOP WSAELOOP
|
||||||
|
#ifndef ENAMETOOLONG /* possible previous definition in errno.h */
|
||||||
|
#define ENAMETOOLONG WSAENAMETOOLONG
|
||||||
|
#endif
|
||||||
|
#define EHOSTDOWN WSAEHOSTDOWN
|
||||||
|
#define EHOSTUNREACH WSAEHOSTUNREACH
|
||||||
|
#ifndef ENOTEMPTY /* possible previous definition in errno.h */
|
||||||
|
#define ENOTEMPTY WSAENOTEMPTY
|
||||||
|
#endif
|
||||||
|
#define EPROCLIM WSAEPROCLIM
|
||||||
|
#define EUSERS WSAEUSERS
|
||||||
|
#define EDQUOT WSAEDQUOT
|
||||||
|
#define ESTALE WSAESTALE
|
||||||
|
#define EREMOTE WSAEREMOTE
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* __SETUP_ONCE_H */
|
||||||
|
|
||||||
@@ -1,213 +0,0 @@
|
|||||||
# Microsoft Developer Studio Generated NMAKE File, Based on adig.dsp
|
|
||||||
!IF "$(CFG)" == ""
|
|
||||||
CFG=adig - Win32 Debug
|
|
||||||
!MESSAGE No configuration specified. Defaulting to adig - Win32 Debug.
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
!IF "$(CFG)" != "adig - Win32 Release" && "$(CFG)" != "adig - Win32 Debug"
|
|
||||||
!MESSAGE Invalid configuration "$(CFG)" specified.
|
|
||||||
!MESSAGE You can specify a configuration when running NMAKE
|
|
||||||
!MESSAGE by defining the macro CFG on the command line. For example:
|
|
||||||
!MESSAGE
|
|
||||||
!MESSAGE NMAKE /f "adig.mak" CFG="adig - Win32 Debug"
|
|
||||||
!MESSAGE
|
|
||||||
!MESSAGE Possible choices for configuration are:
|
|
||||||
!MESSAGE
|
|
||||||
!MESSAGE "adig - Win32 Release" (based on "Win32 (x86) Console Application")
|
|
||||||
!MESSAGE "adig - Win32 Debug" (based on "Win32 (x86) Console Application")
|
|
||||||
!MESSAGE
|
|
||||||
!ERROR An invalid configuration is specified.
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
!IF "$(OS)" == "Windows_NT"
|
|
||||||
NULL=
|
|
||||||
!ELSE
|
|
||||||
NULL=nul
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
CPP=cl.exe
|
|
||||||
RSC=rc.exe
|
|
||||||
|
|
||||||
!IF "$(CFG)" == "adig - Win32 Release"
|
|
||||||
|
|
||||||
OUTDIR=.\Release
|
|
||||||
INTDIR=.\Release
|
|
||||||
# Begin Custom Macros
|
|
||||||
OutDir=.\Release
|
|
||||||
# End Custom Macros
|
|
||||||
|
|
||||||
!IF "$(RECURSE)" == "0"
|
|
||||||
|
|
||||||
ALL : "$(OUTDIR)\adig.exe"
|
|
||||||
|
|
||||||
!ELSE
|
|
||||||
|
|
||||||
ALL : "areslib - Win32 Release" "$(OUTDIR)\adig.exe"
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
!IF "$(RECURSE)" == "1"
|
|
||||||
CLEAN :"areslib - Win32 ReleaseCLEAN"
|
|
||||||
!ELSE
|
|
||||||
CLEAN :
|
|
||||||
!ENDIF
|
|
||||||
-@erase "$(INTDIR)\adig.obj"
|
|
||||||
-@erase "$(INTDIR)\getopt.obj"
|
|
||||||
-@erase "$(INTDIR)\vc60.idb"
|
|
||||||
-@erase "$(OUTDIR)\adig.exe"
|
|
||||||
|
|
||||||
"$(OUTDIR)" :
|
|
||||||
if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
|
|
||||||
|
|
||||||
CPP_PROJ=/nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /Fp"$(INTDIR)\adig.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
|
|
||||||
BSC32=bscmake.exe
|
|
||||||
BSC32_FLAGS=/nologo /o"$(OUTDIR)\adig.bsc"
|
|
||||||
BSC32_SBRS= \
|
|
||||||
|
|
||||||
LINK32=link.exe
|
|
||||||
LINK32_FLAGS=wsock32.lib areslib.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:no /pdb:"$(OUTDIR)\adig.pdb" /machine:I386 /out:"$(OUTDIR)\adig.exe" /libpath:"..\areslib\Release"
|
|
||||||
LINK32_OBJS= \
|
|
||||||
"$(INTDIR)\adig.obj" \
|
|
||||||
"$(INTDIR)\getopt.obj" \
|
|
||||||
"..\areslib\Release\areslib.lib"
|
|
||||||
|
|
||||||
"$(OUTDIR)\adig.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
|
|
||||||
$(LINK32) @<<
|
|
||||||
$(LINK32_FLAGS) $(LINK32_OBJS)
|
|
||||||
<<
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "adig - Win32 Debug"
|
|
||||||
|
|
||||||
OUTDIR=.\Debug
|
|
||||||
INTDIR=.\Debug
|
|
||||||
# Begin Custom Macros
|
|
||||||
OutDir=.\Debug
|
|
||||||
# End Custom Macros
|
|
||||||
|
|
||||||
!IF "$(RECURSE)" == "0"
|
|
||||||
|
|
||||||
ALL : "$(OUTDIR)\adig.exe"
|
|
||||||
|
|
||||||
!ELSE
|
|
||||||
|
|
||||||
ALL : "areslib - Win32 Debug" "$(OUTDIR)\adig.exe"
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
!IF "$(RECURSE)" == "1"
|
|
||||||
CLEAN :"areslib - Win32 DebugCLEAN"
|
|
||||||
!ELSE
|
|
||||||
CLEAN :
|
|
||||||
!ENDIF
|
|
||||||
-@erase "$(INTDIR)\adig.obj"
|
|
||||||
-@erase "$(INTDIR)\getopt.obj"
|
|
||||||
-@erase "$(INTDIR)\vc60.idb"
|
|
||||||
-@erase "$(INTDIR)\vc60.pdb"
|
|
||||||
-@erase "$(OUTDIR)\adig.exe"
|
|
||||||
-@erase "$(OUTDIR)\adig.ilk"
|
|
||||||
-@erase "$(OUTDIR)\adig.pdb"
|
|
||||||
|
|
||||||
"$(OUTDIR)" :
|
|
||||||
if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
|
|
||||||
|
|
||||||
CPP_PROJ=/nologo /MLd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /Fp"$(INTDIR)\adig.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c
|
|
||||||
BSC32=bscmake.exe
|
|
||||||
BSC32_FLAGS=/nologo /o"$(OUTDIR)\adig.bsc"
|
|
||||||
BSC32_SBRS= \
|
|
||||||
|
|
||||||
LINK32=link.exe
|
|
||||||
LINK32_FLAGS=wsock32.lib areslib.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:yes /pdb:"$(OUTDIR)\adig.pdb" /debug /machine:I386 /out:"$(OUTDIR)\adig.exe" /pdbtype:sept /libpath:"..\areslib\Debug"
|
|
||||||
LINK32_OBJS= \
|
|
||||||
"$(INTDIR)\adig.obj" \
|
|
||||||
"$(INTDIR)\getopt.obj" \
|
|
||||||
"..\areslib\Debug\areslib.lib"
|
|
||||||
|
|
||||||
"$(OUTDIR)\adig.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
|
|
||||||
$(LINK32) @<<
|
|
||||||
$(LINK32_FLAGS) $(LINK32_OBJS)
|
|
||||||
<<
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
.c{$(INTDIR)}.obj::
|
|
||||||
$(CPP) @<<
|
|
||||||
$(CPP_PROJ) $<
|
|
||||||
<<
|
|
||||||
|
|
||||||
.cpp{$(INTDIR)}.obj::
|
|
||||||
$(CPP) @<<
|
|
||||||
$(CPP_PROJ) $<
|
|
||||||
<<
|
|
||||||
|
|
||||||
.cxx{$(INTDIR)}.obj::
|
|
||||||
$(CPP) @<<
|
|
||||||
$(CPP_PROJ) $<
|
|
||||||
<<
|
|
||||||
|
|
||||||
.c{$(INTDIR)}.sbr::
|
|
||||||
$(CPP) @<<
|
|
||||||
$(CPP_PROJ) $<
|
|
||||||
<<
|
|
||||||
|
|
||||||
.cpp{$(INTDIR)}.sbr::
|
|
||||||
$(CPP) @<<
|
|
||||||
$(CPP_PROJ) $<
|
|
||||||
<<
|
|
||||||
|
|
||||||
.cxx{$(INTDIR)}.sbr::
|
|
||||||
$(CPP) @<<
|
|
||||||
$(CPP_PROJ) $<
|
|
||||||
<<
|
|
||||||
|
|
||||||
|
|
||||||
!IF "$(NO_EXTERNAL_DEPS)" != "1"
|
|
||||||
!IF EXISTS("adig.dep")
|
|
||||||
!INCLUDE "adig.dep"
|
|
||||||
!ELSE
|
|
||||||
!MESSAGE Warning: cannot find "adig.dep"
|
|
||||||
!ENDIF
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
|
|
||||||
!IF "$(CFG)" == "adig - Win32 Release" || "$(CFG)" == "adig - Win32 Debug"
|
|
||||||
SOURCE=..\..\adig.c
|
|
||||||
|
|
||||||
"$(INTDIR)\adig.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
SOURCE=..\..\getopt.c
|
|
||||||
|
|
||||||
"$(INTDIR)\getopt.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
!IF "$(CFG)" == "adig - Win32 Release"
|
|
||||||
|
|
||||||
"areslib - Win32 Release" :
|
|
||||||
cd "..\areslib"
|
|
||||||
$(MAKE) /$(MAKEFLAGS) /F ".\areslib.mak" CFG="areslib - Win32 Release"
|
|
||||||
cd "..\adig"
|
|
||||||
|
|
||||||
"areslib - Win32 ReleaseCLEAN" :
|
|
||||||
cd "..\areslib"
|
|
||||||
$(MAKE) /$(MAKEFLAGS) /F ".\areslib.mak" CFG="areslib - Win32 Release" RECURSE=1 CLEAN
|
|
||||||
cd "..\adig"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "adig - Win32 Debug"
|
|
||||||
|
|
||||||
"areslib - Win32 Debug" :
|
|
||||||
cd "..\areslib"
|
|
||||||
$(MAKE) /$(MAKEFLAGS) /F ".\areslib.mak" CFG="areslib - Win32 Debug"
|
|
||||||
cd "..\adig"
|
|
||||||
|
|
||||||
"areslib - Win32 DebugCLEAN" :
|
|
||||||
cd "..\areslib"
|
|
||||||
$(MAKE) /$(MAKEFLAGS) /F ".\areslib.mak" CFG="areslib - Win32 Debug" RECURSE=1 CLEAN
|
|
||||||
cd "..\adig"
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
@@ -1,77 +0,0 @@
|
|||||||
<html>
|
|
||||||
<body>
|
|
||||||
<pre>
|
|
||||||
<h1>Build Log</h1>
|
|
||||||
<h3>
|
|
||||||
--------------------Configuration: areslib - Win32 Release--------------------
|
|
||||||
</h3>
|
|
||||||
<h3>Command Lines</h3>
|
|
||||||
Creating temporary file "C:\DOCUME~1\liren\LOCALS~1\Temp\RSP615A.tmp" with contents
|
|
||||||
[
|
|
||||||
/nologo /MD /W3 /GX /O2 /I "..\.." /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /Fp"Release/areslib.pch" /YX /Fo"Release/" /Fd"Release/" /FD /c
|
|
||||||
"Z:\ARES-1.1.1\ares_gethostbyname.c"
|
|
||||||
"Z:\ARES-1.1.1\ares_init.c"
|
|
||||||
]
|
|
||||||
Creating command line "cl.exe @C:\DOCUME~1\liren\LOCALS~1\Temp\RSP615A.tmp"
|
|
||||||
Creating temporary file "C:\DOCUME~1\liren\LOCALS~1\Temp\RSP615B.tmp" with contents
|
|
||||||
[
|
|
||||||
/nologo /out:"Release\areslib.lib"
|
|
||||||
".\Release\ares__close_sockets.obj"
|
|
||||||
".\Release\ares__get_hostent.obj"
|
|
||||||
".\Release\ares__read_line.obj"
|
|
||||||
".\Release\ares_destroy.obj"
|
|
||||||
".\Release\ares_expand_name.obj"
|
|
||||||
".\Release\ares_fds.obj"
|
|
||||||
".\Release\ares_free_errmem.obj"
|
|
||||||
".\Release\ares_free_hostent.obj"
|
|
||||||
".\Release\ares_free_string.obj"
|
|
||||||
".\Release\ares_gethostbyaddr.obj"
|
|
||||||
".\Release\ares_gethostbyname.obj"
|
|
||||||
".\Release\ares_init.obj"
|
|
||||||
".\Release\ares_mkquery.obj"
|
|
||||||
".\Release\ares_parse_a_reply.obj"
|
|
||||||
".\Release\ares_parse_ptr_reply.obj"
|
|
||||||
".\Release\ares_process.obj"
|
|
||||||
".\Release\ares_query.obj"
|
|
||||||
".\Release\ares_search.obj"
|
|
||||||
".\Release\ares_send.obj"
|
|
||||||
".\Release\ares_strerror.obj"
|
|
||||||
".\Release\ares_timeout.obj"
|
|
||||||
".\Release\windows_port.obj"
|
|
||||||
]
|
|
||||||
Creating command line "link.exe -lib @C:\DOCUME~1\liren\LOCALS~1\Temp\RSP615B.tmp"
|
|
||||||
<h3>Output Window</h3>
|
|
||||||
Compiling...
|
|
||||||
ares_gethostbyname.c
|
|
||||||
Z:\ARES-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition
|
|
||||||
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR'
|
|
||||||
ares_init.c
|
|
||||||
Z:\ARES-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition
|
|
||||||
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR'
|
|
||||||
Z:\ARES-1.1.1\ares_init.c(141) : warning C4013: '_getpid' undefined; assuming extern returning int
|
|
||||||
Z:\ARES-1.1.1\ares_init.c(236) : warning C4101: 'p' : unreferenced local variable
|
|
||||||
Z:\ARES-1.1.1\ares_init.c(237) : warning C4101: 'linesize' : unreferenced local variable
|
|
||||||
Z:\ARES-1.1.1\ares_init.c(235) : warning C4101: 'fp' : unreferenced local variable
|
|
||||||
Creating library...
|
|
||||||
<h3>
|
|
||||||
--------------------Configuration: adig - Win32 Release--------------------
|
|
||||||
</h3>
|
|
||||||
<h3>Command Lines</h3>
|
|
||||||
Creating temporary file "C:\DOCUME~1\liren\LOCALS~1\Temp\RSP615C.tmp" with contents
|
|
||||||
[
|
|
||||||
wsock32.lib areslib.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:no /pdb:"Release/adig.pdb" /machine:I386 /out:"Release/adig.exe" /libpath:"..\areslib\Release"
|
|
||||||
".\Release\adig.obj"
|
|
||||||
".\Release\getopt.obj"
|
|
||||||
"\ARES-1.1.1\vc\areslib\Release\areslib.lib"
|
|
||||||
]
|
|
||||||
Creating command line "link.exe @C:\DOCUME~1\liren\LOCALS~1\Temp\RSP615C.tmp"
|
|
||||||
<h3>Output Window</h3>
|
|
||||||
Linking...
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<h3>Results</h3>
|
|
||||||
adig.exe - 0 error(s), 6 warning(s)
|
|
||||||
</pre>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,2 +1,2 @@
|
|||||||
# Microsoft Developer Studio Generated Dependency File, included by ahost.mak
|
# Microsoft Developer Studio Generated Dependency File, included by ahost.mak
|
||||||
|
|
||||||
|
|||||||
@@ -7,19 +7,19 @@
|
|||||||
CFG=ahost - Win32 Debug
|
CFG=ahost - Win32 Debug
|
||||||
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
|
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
|
||||||
!MESSAGE use the Export Makefile command and run
|
!MESSAGE use the Export Makefile command and run
|
||||||
!MESSAGE
|
!MESSAGE
|
||||||
!MESSAGE NMAKE /f "ahost.mak".
|
!MESSAGE NMAKE /f "ahost.mak".
|
||||||
!MESSAGE
|
!MESSAGE
|
||||||
!MESSAGE You can specify a configuration when running NMAKE
|
!MESSAGE You can specify a configuration when running NMAKE
|
||||||
!MESSAGE by defining the macro CFG on the command line. For example:
|
!MESSAGE by defining the macro CFG on the command line. For example:
|
||||||
!MESSAGE
|
!MESSAGE
|
||||||
!MESSAGE NMAKE /f "ahost.mak" CFG="ahost - Win32 Debug"
|
!MESSAGE NMAKE /f "ahost.mak" CFG="ahost - Win32 Debug"
|
||||||
!MESSAGE
|
!MESSAGE
|
||||||
!MESSAGE Possible choices for configuration are:
|
!MESSAGE Possible choices for configuration are:
|
||||||
!MESSAGE
|
!MESSAGE
|
||||||
!MESSAGE "ahost - Win32 Release" (based on "Win32 (x86) Console Application")
|
!MESSAGE "ahost - Win32 Release" (based on "Win32 (x86) Console Application")
|
||||||
!MESSAGE "ahost - Win32 Debug" (based on "Win32 (x86) Console Application")
|
!MESSAGE "ahost - Win32 Debug" (based on "Win32 (x86) Console Application")
|
||||||
!MESSAGE
|
!MESSAGE
|
||||||
|
|
||||||
# Begin Project
|
# Begin Project
|
||||||
# PROP AllowPerConfigDependencies 0
|
# PROP AllowPerConfigDependencies 0
|
||||||
@@ -74,7 +74,7 @@ LINK32=link.exe
|
|||||||
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
|
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
|
||||||
# ADD LINK32 wsock32.lib areslib.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\areslib\Debug"
|
# ADD LINK32 wsock32.lib areslib.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\areslib\Debug"
|
||||||
|
|
||||||
!ENDIF
|
!ENDIF
|
||||||
|
|
||||||
# Begin Target
|
# Begin Target
|
||||||
|
|
||||||
|
|||||||
@@ -1,223 +0,0 @@
|
|||||||
# Microsoft Developer Studio Generated NMAKE File, Based on ahost.dsp
|
|
||||||
!IF "$(CFG)" == ""
|
|
||||||
CFG=ahost - Win32 Debug
|
|
||||||
!MESSAGE No configuration specified. Defaulting to ahost - Win32 Debug.
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
!IF "$(CFG)" != "ahost - Win32 Release" && "$(CFG)" != "ahost - Win32 Debug"
|
|
||||||
!MESSAGE Invalid configuration "$(CFG)" specified.
|
|
||||||
!MESSAGE You can specify a configuration when running NMAKE
|
|
||||||
!MESSAGE by defining the macro CFG on the command line. For example:
|
|
||||||
!MESSAGE
|
|
||||||
!MESSAGE NMAKE /f "ahost.mak" CFG="ahost - Win32 Debug"
|
|
||||||
!MESSAGE
|
|
||||||
!MESSAGE Possible choices for configuration are:
|
|
||||||
!MESSAGE
|
|
||||||
!MESSAGE "ahost - Win32 Release" (based on "Win32 (x86) Console Application")
|
|
||||||
!MESSAGE "ahost - Win32 Debug" (based on "Win32 (x86) Console Application")
|
|
||||||
!MESSAGE
|
|
||||||
!ERROR An invalid configuration is specified.
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
!IF "$(OS)" == "Windows_NT"
|
|
||||||
NULL=
|
|
||||||
!ELSE
|
|
||||||
NULL=nul
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
CPP=cl.exe
|
|
||||||
RSC=rc.exe
|
|
||||||
|
|
||||||
!IF "$(CFG)" == "ahost - Win32 Release"
|
|
||||||
|
|
||||||
OUTDIR=.\Release
|
|
||||||
INTDIR=.\Release
|
|
||||||
# Begin Custom Macros
|
|
||||||
OutDir=.\Release
|
|
||||||
# End Custom Macros
|
|
||||||
|
|
||||||
!IF "$(RECURSE)" == "0"
|
|
||||||
|
|
||||||
ALL : "$(OUTDIR)\ahost.exe"
|
|
||||||
|
|
||||||
!ELSE
|
|
||||||
|
|
||||||
ALL : "areslib - Win32 Release" "$(OUTDIR)\ahost.exe"
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
!IF "$(RECURSE)" == "1"
|
|
||||||
CLEAN :"areslib - Win32 ReleaseCLEAN"
|
|
||||||
!ELSE
|
|
||||||
CLEAN :
|
|
||||||
!ENDIF
|
|
||||||
-@erase "$(INTDIR)\ahost.obj"
|
|
||||||
-@erase "$(INTDIR)\vc60.idb"
|
|
||||||
-@erase "$(OUTDIR)\ahost.exe"
|
|
||||||
|
|
||||||
"$(OUTDIR)" :
|
|
||||||
if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
|
|
||||||
|
|
||||||
CPP_PROJ=/nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /Fp"$(INTDIR)\ahost.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
|
|
||||||
BSC32=bscmake.exe
|
|
||||||
BSC32_FLAGS=/nologo /o"$(OUTDIR)\ahost.bsc"
|
|
||||||
BSC32_SBRS= \
|
|
||||||
|
|
||||||
LINK32=link.exe
|
|
||||||
LINK32_FLAGS=wsock32.lib areslib.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:no /pdb:"$(OUTDIR)\ahost.pdb" /machine:I386 /out:"$(OUTDIR)\ahost.exe" /libpath:"..\areslib\Release"
|
|
||||||
LINK32_OBJS= \
|
|
||||||
"$(INTDIR)\ahost.obj" \
|
|
||||||
"..\areslib\Release\areslib.lib"
|
|
||||||
|
|
||||||
"$(OUTDIR)\ahost.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
|
|
||||||
$(LINK32) @<<
|
|
||||||
$(LINK32_FLAGS) $(LINK32_OBJS)
|
|
||||||
<<
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "ahost - Win32 Debug"
|
|
||||||
|
|
||||||
OUTDIR=.\Debug
|
|
||||||
INTDIR=.\Debug
|
|
||||||
# Begin Custom Macros
|
|
||||||
OutDir=.\Debug
|
|
||||||
# End Custom Macros
|
|
||||||
|
|
||||||
!IF "$(RECURSE)" == "0"
|
|
||||||
|
|
||||||
ALL : "$(OUTDIR)\ahost.exe" "$(OUTDIR)\ahost.bsc"
|
|
||||||
|
|
||||||
!ELSE
|
|
||||||
|
|
||||||
ALL : "areslib - Win32 Debug" "$(OUTDIR)\ahost.exe" "$(OUTDIR)\ahost.bsc"
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
!IF "$(RECURSE)" == "1"
|
|
||||||
CLEAN :"areslib - Win32 DebugCLEAN"
|
|
||||||
!ELSE
|
|
||||||
CLEAN :
|
|
||||||
!ENDIF
|
|
||||||
-@erase "$(INTDIR)\ahost.obj"
|
|
||||||
-@erase "$(INTDIR)\ahost.sbr"
|
|
||||||
-@erase "$(INTDIR)\vc60.idb"
|
|
||||||
-@erase "$(INTDIR)\vc60.pdb"
|
|
||||||
-@erase "$(OUTDIR)\ahost.bsc"
|
|
||||||
-@erase "$(OUTDIR)\ahost.exe"
|
|
||||||
-@erase "$(OUTDIR)\ahost.ilk"
|
|
||||||
-@erase "$(OUTDIR)\ahost.pdb"
|
|
||||||
|
|
||||||
"$(OUTDIR)" :
|
|
||||||
if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
|
|
||||||
|
|
||||||
CPP_PROJ=/nologo /MLd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\ahost.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c
|
|
||||||
BSC32=bscmake.exe
|
|
||||||
BSC32_FLAGS=/nologo /o"$(OUTDIR)\ahost.bsc"
|
|
||||||
BSC32_SBRS= \
|
|
||||||
"$(INTDIR)\ahost.sbr"
|
|
||||||
|
|
||||||
"$(OUTDIR)\ahost.bsc" : "$(OUTDIR)" $(BSC32_SBRS)
|
|
||||||
$(BSC32) @<<
|
|
||||||
$(BSC32_FLAGS) $(BSC32_SBRS)
|
|
||||||
<<
|
|
||||||
|
|
||||||
LINK32=link.exe
|
|
||||||
LINK32_FLAGS=wsock32.lib areslib.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:yes /pdb:"$(OUTDIR)\ahost.pdb" /debug /machine:I386 /out:"$(OUTDIR)\ahost.exe" /pdbtype:sept /libpath:"..\areslib\Debug"
|
|
||||||
LINK32_OBJS= \
|
|
||||||
"$(INTDIR)\ahost.obj" \
|
|
||||||
"..\areslib\Debug\areslib.lib"
|
|
||||||
|
|
||||||
"$(OUTDIR)\ahost.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
|
|
||||||
$(LINK32) @<<
|
|
||||||
$(LINK32_FLAGS) $(LINK32_OBJS)
|
|
||||||
<<
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
.c{$(INTDIR)}.obj::
|
|
||||||
$(CPP) @<<
|
|
||||||
$(CPP_PROJ) $<
|
|
||||||
<<
|
|
||||||
|
|
||||||
.cpp{$(INTDIR)}.obj::
|
|
||||||
$(CPP) @<<
|
|
||||||
$(CPP_PROJ) $<
|
|
||||||
<<
|
|
||||||
|
|
||||||
.cxx{$(INTDIR)}.obj::
|
|
||||||
$(CPP) @<<
|
|
||||||
$(CPP_PROJ) $<
|
|
||||||
<<
|
|
||||||
|
|
||||||
.c{$(INTDIR)}.sbr::
|
|
||||||
$(CPP) @<<
|
|
||||||
$(CPP_PROJ) $<
|
|
||||||
<<
|
|
||||||
|
|
||||||
.cpp{$(INTDIR)}.sbr::
|
|
||||||
$(CPP) @<<
|
|
||||||
$(CPP_PROJ) $<
|
|
||||||
<<
|
|
||||||
|
|
||||||
.cxx{$(INTDIR)}.sbr::
|
|
||||||
$(CPP) @<<
|
|
||||||
$(CPP_PROJ) $<
|
|
||||||
<<
|
|
||||||
|
|
||||||
|
|
||||||
!IF "$(NO_EXTERNAL_DEPS)" != "1"
|
|
||||||
!IF EXISTS("ahost.dep")
|
|
||||||
!INCLUDE "ahost.dep"
|
|
||||||
!ELSE
|
|
||||||
!MESSAGE Warning: cannot find "ahost.dep"
|
|
||||||
!ENDIF
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
|
|
||||||
!IF "$(CFG)" == "ahost - Win32 Release" || "$(CFG)" == "ahost - Win32 Debug"
|
|
||||||
SOURCE=..\..\ahost.c
|
|
||||||
|
|
||||||
!IF "$(CFG)" == "ahost - Win32 Release"
|
|
||||||
|
|
||||||
|
|
||||||
"$(INTDIR)\ahost.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "ahost - Win32 Debug"
|
|
||||||
|
|
||||||
|
|
||||||
"$(INTDIR)\ahost.obj" "$(INTDIR)\ahost.sbr" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
!IF "$(CFG)" == "ahost - Win32 Release"
|
|
||||||
|
|
||||||
"areslib - Win32 Release" :
|
|
||||||
cd "..\areslib"
|
|
||||||
$(MAKE) /$(MAKEFLAGS) /F ".\areslib.mak" CFG="areslib - Win32 Release"
|
|
||||||
cd "..\ahost"
|
|
||||||
|
|
||||||
"areslib - Win32 ReleaseCLEAN" :
|
|
||||||
cd "..\areslib"
|
|
||||||
$(MAKE) /$(MAKEFLAGS) /F ".\areslib.mak" CFG="areslib - Win32 Release" RECURSE=1 CLEAN
|
|
||||||
cd "..\ahost"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "ahost - Win32 Debug"
|
|
||||||
|
|
||||||
"areslib - Win32 Debug" :
|
|
||||||
cd "..\areslib"
|
|
||||||
$(MAKE) /$(MAKEFLAGS) /F ".\areslib.mak" CFG="areslib - Win32 Debug"
|
|
||||||
cd "..\ahost"
|
|
||||||
|
|
||||||
"areslib - Win32 DebugCLEAN" :
|
|
||||||
cd "..\areslib"
|
|
||||||
$(MAKE) /$(MAKEFLAGS) /F ".\areslib.mak" CFG="areslib - Win32 Debug" RECURSE=1 CLEAN
|
|
||||||
cd "..\ahost"
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
<html>
|
|
||||||
<body>
|
|
||||||
<pre>
|
|
||||||
<h1>Build Log</h1>
|
|
||||||
<h3>
|
|
||||||
--------------------Configuration: ahost - Win32 Release--------------------
|
|
||||||
</h3>
|
|
||||||
<h3>Command Lines</h3>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<h3>Results</h3>
|
|
||||||
ahost.exe - 0 error(s), 0 warning(s)
|
|
||||||
</pre>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -63,8 +63,8 @@ LIB32=link.exe -lib
|
|||||||
# PROP Output_Dir "Debug"
|
# PROP Output_Dir "Debug"
|
||||||
# PROP Intermediate_Dir "Debug"
|
# PROP Intermediate_Dir "Debug"
|
||||||
# PROP Target_Dir ""
|
# PROP Target_Dir ""
|
||||||
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
|
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
|
||||||
# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\.." /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
|
# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\.." /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
|
||||||
# ADD BASE RSC /l 0x409 /d "_DEBUG"
|
# ADD BASE RSC /l 0x409 /d "_DEBUG"
|
||||||
# ADD RSC /l 0x409 /d "_DEBUG"
|
# ADD RSC /l 0x409 /d "_DEBUG"
|
||||||
BSC32=bscmake.exe
|
BSC32=bscmake.exe
|
||||||
@@ -97,6 +97,10 @@ SOURCE=..\..\ares__read_line.c
|
|||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\..\ares_cancel.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=..\..\ares_destroy.c
|
SOURCE=..\..\ares_destroy.c
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
@@ -125,6 +129,10 @@ SOURCE=..\..\ares_gethostbyname.c
|
|||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\..\ares_getsock.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=..\..\ares_init.c
|
SOURCE=..\..\ares_init.c
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
@@ -137,6 +145,10 @@ SOURCE=..\..\ares_parse_a_reply.c
|
|||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\..\ares_parse_aaaa_reply.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=..\..\ares_parse_ptr_reply.c
|
SOURCE=..\..\ares_parse_ptr_reply.c
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
@@ -153,14 +165,6 @@ SOURCE=..\..\ares_search.c
|
|||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=..\..\ares_cancel.c
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=..\..\ares_version.c
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=..\..\ares_send.c
|
SOURCE=..\..\ares_send.c
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
@@ -173,6 +177,22 @@ SOURCE=..\..\ares_timeout.c
|
|||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\..\ares_version.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\..\bitncmp.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\..\inet_net_pton.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\..\inet_ntop.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=..\..\windows_port.c
|
SOURCE=..\..\windows_port.c
|
||||||
# End Source File
|
# End Source File
|
||||||
# End Group
|
# End Group
|
||||||
@@ -189,7 +209,7 @@ SOURCE=..\..\ares_dns.h
|
|||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=..\..\ares_version.h
|
SOURCE=..\..\ares_ipv6.h
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
@@ -197,6 +217,22 @@ SOURCE=..\..\ares_private.h
|
|||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\..\ares_version.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\..\bitncmp.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\..\inet_net_pton.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\..\inet_ntop.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=..\..\nameser.h
|
SOURCE=..\..\nameser.h
|
||||||
# End Source File
|
# End Source File
|
||||||
# End Group
|
# End Group
|
||||||
|
|||||||
29
ares/vc/areslib/areslib.dsw
Normal file
29
ares/vc/areslib/areslib.dsw
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
Microsoft Developer Studio Workspace File, Format Version 6.00
|
||||||
|
# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
|
Project: "areslib"=.\areslib.dsp - Package Owner=<4>
|
||||||
|
|
||||||
|
Package=<5>
|
||||||
|
{{{
|
||||||
|
}}}
|
||||||
|
|
||||||
|
Package=<4>
|
||||||
|
{{{
|
||||||
|
}}}
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
|
Global:
|
||||||
|
|
||||||
|
Package=<5>
|
||||||
|
{{{
|
||||||
|
}}}
|
||||||
|
|
||||||
|
Package=<3>
|
||||||
|
{{{
|
||||||
|
}}}
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
@@ -1,367 +0,0 @@
|
|||||||
# Microsoft Developer Studio Generated NMAKE File, Based on areslib.dsp
|
|
||||||
!IF "$(CFG)" == ""
|
|
||||||
CFG=areslib - Win32 Debug
|
|
||||||
!MESSAGE No configuration specified. Defaulting to areslib - Win32 Debug.
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
!IF "$(CFG)" != "areslib - Win32 Release" && "$(CFG)" != "areslib - Win32 Debug"
|
|
||||||
!MESSAGE Invalid configuration "$(CFG)" specified.
|
|
||||||
!MESSAGE You can specify a configuration when running NMAKE
|
|
||||||
!MESSAGE by defining the macro CFG on the command line. For example:
|
|
||||||
!MESSAGE
|
|
||||||
!MESSAGE NMAKE /f "areslib.mak" CFG="areslib - Win32 Debug"
|
|
||||||
!MESSAGE
|
|
||||||
!MESSAGE Possible choices for configuration are:
|
|
||||||
!MESSAGE
|
|
||||||
!MESSAGE "areslib - Win32 Release" (based on "Win32 (x86) Static Library")
|
|
||||||
!MESSAGE "areslib - Win32 Debug" (based on "Win32 (x86) Static Library")
|
|
||||||
!MESSAGE
|
|
||||||
!ERROR An invalid configuration is specified.
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
!IF "$(OS)" == "Windows_NT"
|
|
||||||
NULL=
|
|
||||||
!ELSE
|
|
||||||
NULL=nul
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
CPP=cl.exe
|
|
||||||
RSC=rc.exe
|
|
||||||
|
|
||||||
!IF "$(CFG)" == "areslib - Win32 Release"
|
|
||||||
|
|
||||||
OUTDIR=.\Release
|
|
||||||
INTDIR=.\Release
|
|
||||||
# Begin Custom Macros
|
|
||||||
OutDir=.\Release
|
|
||||||
# End Custom Macros
|
|
||||||
|
|
||||||
ALL : "$(OUTDIR)\areslib.lib"
|
|
||||||
|
|
||||||
|
|
||||||
CLEAN :
|
|
||||||
-@erase "$(INTDIR)\ares__close_sockets.obj"
|
|
||||||
-@erase "$(INTDIR)\ares__get_hostent.obj"
|
|
||||||
-@erase "$(INTDIR)\ares__read_line.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_destroy.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_expand_name.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_fds.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_free_hostent.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_free_string.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_gethostbyaddr.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_gethostbyname.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_init.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_mkquery.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_parse_a_reply.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_parse_ptr_reply.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_process.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_query.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_search.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_send.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_strerror.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_timeout.obj"
|
|
||||||
-@erase "$(INTDIR)\vc60.idb"
|
|
||||||
-@erase "$(INTDIR)\windows_port.obj"
|
|
||||||
-@erase "$(OUTDIR)\areslib.lib"
|
|
||||||
|
|
||||||
"$(OUTDIR)" :
|
|
||||||
if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
|
|
||||||
|
|
||||||
CPP_PROJ=/nologo /MD /W3 /GX /O2 /I "..\.." /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /Fp"$(INTDIR)\areslib.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
|
|
||||||
BSC32=bscmake.exe
|
|
||||||
BSC32_FLAGS=/nologo /o"$(OUTDIR)\areslib.bsc"
|
|
||||||
BSC32_SBRS= \
|
|
||||||
|
|
||||||
LIB32=link.exe -lib
|
|
||||||
LIB32_FLAGS=/nologo /out:"$(OUTDIR)\areslib.lib"
|
|
||||||
LIB32_OBJS= \
|
|
||||||
"$(INTDIR)\ares__close_sockets.obj" \
|
|
||||||
"$(INTDIR)\ares__get_hostent.obj" \
|
|
||||||
"$(INTDIR)\ares__read_line.obj" \
|
|
||||||
"$(INTDIR)\ares_destroy.obj" \
|
|
||||||
"$(INTDIR)\ares_expand_name.obj" \
|
|
||||||
"$(INTDIR)\ares_fds.obj" \
|
|
||||||
"$(INTDIR)\ares_free_hostent.obj" \
|
|
||||||
"$(INTDIR)\ares_free_string.obj" \
|
|
||||||
"$(INTDIR)\ares_gethostbyaddr.obj" \
|
|
||||||
"$(INTDIR)\ares_gethostbyname.obj" \
|
|
||||||
"$(INTDIR)\ares_init.obj" \
|
|
||||||
"$(INTDIR)\ares_mkquery.obj" \
|
|
||||||
"$(INTDIR)\ares_parse_a_reply.obj" \
|
|
||||||
"$(INTDIR)\ares_parse_ptr_reply.obj" \
|
|
||||||
"$(INTDIR)\ares_process.obj" \
|
|
||||||
"$(INTDIR)\ares_query.obj" \
|
|
||||||
"$(INTDIR)\ares_search.obj" \
|
|
||||||
"$(INTDIR)\ares_cancel.obj" \
|
|
||||||
"$(INTDIR)\ares_version.obj" \
|
|
||||||
"$(INTDIR)\ares_send.obj" \
|
|
||||||
"$(INTDIR)\ares_strerror.obj" \
|
|
||||||
"$(INTDIR)\ares_timeout.obj" \
|
|
||||||
"$(INTDIR)\windows_port.obj"
|
|
||||||
|
|
||||||
"$(OUTDIR)\areslib.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS)
|
|
||||||
$(LIB32) @<<
|
|
||||||
$(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS)
|
|
||||||
<<
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "areslib - Win32 Debug"
|
|
||||||
|
|
||||||
OUTDIR=.\Debug
|
|
||||||
INTDIR=.\Debug
|
|
||||||
# Begin Custom Macros
|
|
||||||
OutDir=.\Debug
|
|
||||||
# End Custom Macros
|
|
||||||
|
|
||||||
ALL : "$(OUTDIR)\areslib.lib"
|
|
||||||
|
|
||||||
|
|
||||||
CLEAN :
|
|
||||||
-@erase "$(INTDIR)\ares__close_sockets.obj"
|
|
||||||
-@erase "$(INTDIR)\ares__get_hostent.obj"
|
|
||||||
-@erase "$(INTDIR)\ares__read_line.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_destroy.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_expand_name.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_fds.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_free_hostent.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_free_string.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_gethostbyaddr.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_gethostbyname.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_init.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_mkquery.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_parse_a_reply.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_parse_ptr_reply.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_process.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_query.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_search.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_cancel.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_version.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_send.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_strerror.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_timeout.obj"
|
|
||||||
-@erase "$(INTDIR)\vc60.idb"
|
|
||||||
-@erase "$(INTDIR)\vc60.pdb"
|
|
||||||
-@erase "$(INTDIR)\windows_port.obj"
|
|
||||||
-@erase "$(OUTDIR)\areslib.lib"
|
|
||||||
|
|
||||||
"$(OUTDIR)" :
|
|
||||||
if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
|
|
||||||
|
|
||||||
CPP_PROJ=/nologo /MLd /W3 /Gm /GX /ZI /Od /I "..\.." /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /Fp"$(INTDIR)\areslib.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c
|
|
||||||
BSC32=bscmake.exe
|
|
||||||
BSC32_FLAGS=/nologo /o"$(OUTDIR)\areslib.bsc"
|
|
||||||
BSC32_SBRS= \
|
|
||||||
|
|
||||||
LIB32=link.exe -lib
|
|
||||||
LIB32_FLAGS=/nologo /out:"$(OUTDIR)\areslib.lib"
|
|
||||||
LIB32_OBJS= \
|
|
||||||
"$(INTDIR)\ares__close_sockets.obj" \
|
|
||||||
"$(INTDIR)\ares__get_hostent.obj" \
|
|
||||||
"$(INTDIR)\ares__read_line.obj" \
|
|
||||||
"$(INTDIR)\ares_destroy.obj" \
|
|
||||||
"$(INTDIR)\ares_expand_name.obj" \
|
|
||||||
"$(INTDIR)\ares_fds.obj" \
|
|
||||||
"$(INTDIR)\ares_free_hostent.obj" \
|
|
||||||
"$(INTDIR)\ares_free_string.obj" \
|
|
||||||
"$(INTDIR)\ares_gethostbyaddr.obj" \
|
|
||||||
"$(INTDIR)\ares_gethostbyname.obj" \
|
|
||||||
"$(INTDIR)\ares_init.obj" \
|
|
||||||
"$(INTDIR)\ares_mkquery.obj" \
|
|
||||||
"$(INTDIR)\ares_parse_a_reply.obj" \
|
|
||||||
"$(INTDIR)\ares_parse_ptr_reply.obj" \
|
|
||||||
"$(INTDIR)\ares_process.obj" \
|
|
||||||
"$(INTDIR)\ares_query.obj" \
|
|
||||||
"$(INTDIR)\ares_search.obj" \
|
|
||||||
"$(INTDIR)\ares_send.obj" \
|
|
||||||
"$(INTDIR)\ares_strerror.obj" \
|
|
||||||
"$(INTDIR)\ares_timeout.obj" \
|
|
||||||
"$(INTDIR)\windows_port.obj"
|
|
||||||
|
|
||||||
"$(OUTDIR)\areslib.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS)
|
|
||||||
$(LIB32) @<<
|
|
||||||
$(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS)
|
|
||||||
<<
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
.c{$(INTDIR)}.obj::
|
|
||||||
$(CPP) @<<
|
|
||||||
$(CPP_PROJ) $<
|
|
||||||
<<
|
|
||||||
|
|
||||||
.cpp{$(INTDIR)}.obj::
|
|
||||||
$(CPP) @<<
|
|
||||||
$(CPP_PROJ) $<
|
|
||||||
<<
|
|
||||||
|
|
||||||
.cxx{$(INTDIR)}.obj::
|
|
||||||
$(CPP) @<<
|
|
||||||
$(CPP_PROJ) $<
|
|
||||||
<<
|
|
||||||
|
|
||||||
.c{$(INTDIR)}.sbr::
|
|
||||||
$(CPP) @<<
|
|
||||||
$(CPP_PROJ) $<
|
|
||||||
<<
|
|
||||||
|
|
||||||
.cpp{$(INTDIR)}.sbr::
|
|
||||||
$(CPP) @<<
|
|
||||||
$(CPP_PROJ) $<
|
|
||||||
<<
|
|
||||||
|
|
||||||
.cxx{$(INTDIR)}.sbr::
|
|
||||||
$(CPP) @<<
|
|
||||||
$(CPP_PROJ) $<
|
|
||||||
<<
|
|
||||||
|
|
||||||
|
|
||||||
!IF "$(NO_EXTERNAL_DEPS)" != "1"
|
|
||||||
!IF EXISTS("areslib.dep")
|
|
||||||
!INCLUDE "areslib.dep"
|
|
||||||
!ELSE
|
|
||||||
!MESSAGE Warning: cannot find "areslib.dep"
|
|
||||||
!ENDIF
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
|
|
||||||
!IF "$(CFG)" == "areslib - Win32 Release" || "$(CFG)" == "areslib - Win32 Debug"
|
|
||||||
SOURCE=..\..\ares__close_sockets.c
|
|
||||||
|
|
||||||
"$(INTDIR)\ares__close_sockets.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
SOURCE=..\..\ares__get_hostent.c
|
|
||||||
|
|
||||||
"$(INTDIR)\ares__get_hostent.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
SOURCE=..\..\ares__read_line.c
|
|
||||||
|
|
||||||
"$(INTDIR)\ares__read_line.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
SOURCE=..\..\ares_destroy.c
|
|
||||||
|
|
||||||
"$(INTDIR)\ares_destroy.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
SOURCE=..\..\ares_expand_name.c
|
|
||||||
|
|
||||||
"$(INTDIR)\ares_expand_name.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
SOURCE=..\..\ares_fds.c
|
|
||||||
|
|
||||||
"$(INTDIR)\ares_fds.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
SOURCE=..\..\ares_free_hostent.c
|
|
||||||
|
|
||||||
"$(INTDIR)\ares_free_hostent.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
SOURCE=..\..\ares_free_string.c
|
|
||||||
|
|
||||||
"$(INTDIR)\ares_free_string.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
SOURCE=..\..\ares_gethostbyaddr.c
|
|
||||||
|
|
||||||
"$(INTDIR)\ares_gethostbyaddr.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
SOURCE=..\..\ares_gethostbyname.c
|
|
||||||
|
|
||||||
"$(INTDIR)\ares_gethostbyname.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
SOURCE=..\..\ares_init.c
|
|
||||||
|
|
||||||
"$(INTDIR)\ares_init.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
SOURCE=..\..\ares_mkquery.c
|
|
||||||
|
|
||||||
"$(INTDIR)\ares_mkquery.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
SOURCE=..\..\ares_parse_a_reply.c
|
|
||||||
|
|
||||||
"$(INTDIR)\ares_parse_a_reply.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
SOURCE=..\..\ares_parse_ptr_reply.c
|
|
||||||
|
|
||||||
"$(INTDIR)\ares_parse_ptr_reply.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
SOURCE=..\..\ares_process.c
|
|
||||||
|
|
||||||
"$(INTDIR)\ares_process.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
SOURCE=..\..\ares_query.c
|
|
||||||
|
|
||||||
"$(INTDIR)\ares_query.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
SOURCE=..\..\ares_search.c
|
|
||||||
|
|
||||||
"$(INTDIR)\ares_search.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
SOURCE=..\..\ares_version.c
|
|
||||||
|
|
||||||
"$(INTDIR)\ares_version.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
SOURCE=..\..\ares_cancel.c
|
|
||||||
|
|
||||||
"$(INTDIR)\ares_cancel.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
SOURCE=..\..\ares_send.c
|
|
||||||
|
|
||||||
"$(INTDIR)\ares_send.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
SOURCE=..\..\ares_strerror.c
|
|
||||||
|
|
||||||
"$(INTDIR)\ares_strerror.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
SOURCE=..\..\ares_timeout.c
|
|
||||||
|
|
||||||
"$(INTDIR)\ares_timeout.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
SOURCE=..\..\windows_port.c
|
|
||||||
|
|
||||||
"$(INTDIR)\windows_port.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
@@ -1,125 +0,0 @@
|
|||||||
<html>
|
|
||||||
<body>
|
|
||||||
<pre>
|
|
||||||
<h1>Build Log</h1>
|
|
||||||
<h3>
|
|
||||||
--------------------Configuration: areslib - Win32 Release--------------------
|
|
||||||
</h3>
|
|
||||||
<h3>Command Lines</h3>
|
|
||||||
Creating temporary file "C:\DOCUME~1\liren\LOCALS~1\Temp\RSP603D.tmp" with contents
|
|
||||||
[
|
|
||||||
/nologo /MD /W3 /GX /O2 /I "..\.." /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /Fp"Release/areslib.pch" /YX /Fo"Release/" /Fd"Release/" /FD /c
|
|
||||||
"Z:\ares-1.1.1\ares__close_sockets.c"
|
|
||||||
"Z:\ares-1.1.1\ares__get_hostent.c"
|
|
||||||
"Z:\ares-1.1.1\ares__read_line.c"
|
|
||||||
"Z:\ares-1.1.1\ares_destroy.c"
|
|
||||||
"Z:\ares-1.1.1\ares_expand_name.c"
|
|
||||||
"Z:\ares-1.1.1\ares_fds.c"
|
|
||||||
"Z:\ares-1.1.1\ares_free_errmem.c"
|
|
||||||
"Z:\ares-1.1.1\ares_free_hostent.c"
|
|
||||||
"Z:\ares-1.1.1\ares_free_string.c"
|
|
||||||
"Z:\ares-1.1.1\ares_gethostbyaddr.c"
|
|
||||||
"Z:\ares-1.1.1\ares_gethostbyname.c"
|
|
||||||
"Z:\ares-1.1.1\ares_init.c"
|
|
||||||
"Z:\ares-1.1.1\ares_mkquery.c"
|
|
||||||
"Z:\ares-1.1.1\ares_parse_a_reply.c"
|
|
||||||
"Z:\ares-1.1.1\ares_parse_ptr_reply.c"
|
|
||||||
"Z:\ares-1.1.1\ares_process.c"
|
|
||||||
"Z:\ares-1.1.1\ares_query.c"
|
|
||||||
"Z:\ares-1.1.1\ares_search.c"
|
|
||||||
"Z:\ares-1.1.1\ares_send.c"
|
|
||||||
"Z:\ares-1.1.1\ares_strerror.c"
|
|
||||||
"Z:\ares-1.1.1\ares_timeout.c"
|
|
||||||
"Z:\ares-1.1.1\windows_port.c"
|
|
||||||
]
|
|
||||||
Creating command line "cl.exe @C:\DOCUME~1\liren\LOCALS~1\Temp\RSP603D.tmp"
|
|
||||||
Creating temporary file "C:\DOCUME~1\liren\LOCALS~1\Temp\RSP603E.tmp" with contents
|
|
||||||
[
|
|
||||||
/nologo /out:"Release\areslib.lib"
|
|
||||||
".\Release\ares__close_sockets.obj"
|
|
||||||
".\Release\ares__get_hostent.obj"
|
|
||||||
".\Release\ares__read_line.obj"
|
|
||||||
".\Release\ares_destroy.obj"
|
|
||||||
".\Release\ares_expand_name.obj"
|
|
||||||
".\Release\ares_fds.obj"
|
|
||||||
".\Release\ares_free_errmem.obj"
|
|
||||||
".\Release\ares_free_hostent.obj"
|
|
||||||
".\Release\ares_free_string.obj"
|
|
||||||
".\Release\ares_gethostbyaddr.obj"
|
|
||||||
".\Release\ares_gethostbyname.obj"
|
|
||||||
".\Release\ares_init.obj"
|
|
||||||
".\Release\ares_mkquery.obj"
|
|
||||||
".\Release\ares_parse_a_reply.obj"
|
|
||||||
".\Release\ares_parse_ptr_reply.obj"
|
|
||||||
".\Release\ares_process.obj"
|
|
||||||
".\Release\ares_query.obj"
|
|
||||||
".\Release\ares_search.obj"
|
|
||||||
".\Release\ares_send.obj"
|
|
||||||
".\Release\ares_strerror.obj"
|
|
||||||
".\Release\ares_timeout.obj"
|
|
||||||
".\Release\windows_port.obj"
|
|
||||||
]
|
|
||||||
Creating command line "link.exe -lib @C:\DOCUME~1\liren\LOCALS~1\Temp\RSP603E.tmp"
|
|
||||||
<h3>Output Window</h3>
|
|
||||||
Compiling...
|
|
||||||
ares__close_sockets.c
|
|
||||||
Z:\ares-1.1.1\ares__close_sockets.c(46) : warning C4013: 'close' undefined; assuming extern returning int
|
|
||||||
ares__get_hostent.c
|
|
||||||
ares__read_line.c
|
|
||||||
ares_destroy.c
|
|
||||||
ares_expand_name.c
|
|
||||||
Z:\ares-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition
|
|
||||||
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR'
|
|
||||||
ares_fds.c
|
|
||||||
ares_free_errmem.c
|
|
||||||
ares_free_hostent.c
|
|
||||||
ares_free_string.c
|
|
||||||
ares_gethostbyaddr.c
|
|
||||||
Z:\ares-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition
|
|
||||||
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR'
|
|
||||||
ares_gethostbyname.c
|
|
||||||
Z:\ares-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition
|
|
||||||
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR'
|
|
||||||
ares_init.c
|
|
||||||
Z:\ares-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition
|
|
||||||
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR'
|
|
||||||
Z:\ares-1.1.1\ares_init.c(141) : warning C4013: '_getpid' undefined; assuming extern returning int
|
|
||||||
Z:\ares-1.1.1\ares_init.c(236) : warning C4101: 'p' : unreferenced local variable
|
|
||||||
Z:\ares-1.1.1\ares_init.c(237) : warning C4101: 'linesize' : unreferenced local variable
|
|
||||||
Z:\ares-1.1.1\ares_init.c(235) : warning C4101: 'fp' : unreferenced local variable
|
|
||||||
ares_mkquery.c
|
|
||||||
Z:\ares-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition
|
|
||||||
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR'
|
|
||||||
ares_parse_a_reply.c
|
|
||||||
Z:\ares-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition
|
|
||||||
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR'
|
|
||||||
Z:\ares-1.1.1\ares_parse_a_reply.c(90) : warning C4018: '<' : signed/unsigned mismatch
|
|
||||||
ares_parse_ptr_reply.c
|
|
||||||
Z:\ares-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition
|
|
||||||
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR'
|
|
||||||
Z:\ares-1.1.1\ares_parse_ptr_reply.c(71) : warning C4018: '<' : signed/unsigned mismatch
|
|
||||||
ares_process.c
|
|
||||||
Z:\ares-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition
|
|
||||||
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR'
|
|
||||||
ares_query.c
|
|
||||||
Z:\ares-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition
|
|
||||||
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR'
|
|
||||||
ares_search.c
|
|
||||||
Z:\ares-1.1.1\ares_search.c(229) : warning C4013: 'strncasecmp' undefined; assuming extern returning int
|
|
||||||
ares_send.c
|
|
||||||
Z:\ares-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition
|
|
||||||
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR'
|
|
||||||
ares_strerror.c
|
|
||||||
ares_timeout.c
|
|
||||||
windows_port.c
|
|
||||||
Z:\ares-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition
|
|
||||||
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR'
|
|
||||||
Creating library...
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<h3>Results</h3>
|
|
||||||
areslib.lib - 0 error(s), 19 warning(s)
|
|
||||||
</pre>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,5 +1,7 @@
|
|||||||
#include "setup.h"
|
#include "setup.h"
|
||||||
|
|
||||||
|
/* $Id$ */
|
||||||
|
|
||||||
/* only do the following on windows
|
/* only do the following on windows
|
||||||
*/
|
*/
|
||||||
#if (defined(WIN32) || defined(WATT32)) && !defined(MSDOS)
|
#if (defined(WIN32) || defined(WATT32)) && !defined(MSDOS)
|
||||||
@@ -18,6 +20,20 @@
|
|||||||
#include "ares.h"
|
#include "ares.h"
|
||||||
#include "ares_private.h"
|
#include "ares_private.h"
|
||||||
|
|
||||||
|
#ifdef __WATCOMC__
|
||||||
|
/*
|
||||||
|
* Watcom needs a DllMain() in order to initialise the clib startup code.
|
||||||
|
*/
|
||||||
|
BOOL
|
||||||
|
WINAPI DllMain (HINSTANCE hnd, DWORD reason, LPVOID reserved)
|
||||||
|
{
|
||||||
|
(void) hnd;
|
||||||
|
(void) reason;
|
||||||
|
(void) reserved;
|
||||||
|
return (TRUE);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef __MINGW32__
|
#ifndef __MINGW32__
|
||||||
int
|
int
|
||||||
ares_strncasecmp(const char *a, const char *b, int n)
|
ares_strncasecmp(const char *a, const char *b, int n)
|
||||||
@@ -25,8 +41,8 @@ ares_strncasecmp(const char *a, const char *b, int n)
|
|||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; i < n; i++) {
|
for (i = 0; i < n; i++) {
|
||||||
int c1 = isupper(a[i]) ? tolower(a[i]) : a[i];
|
int c1 = ISUPPER(a[i]) ? tolower(a[i]) : a[i];
|
||||||
int c2 = isupper(b[i]) ? tolower(b[i]) : b[i];
|
int c2 = ISUPPER(b[i]) ? tolower(b[i]) : b[i];
|
||||||
if (c1 != c2) return c1-c2;
|
if (c1 != c2) return c1-c2;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
@@ -89,7 +105,7 @@ ares_writev (ares_socket_t s, const struct iovec *vector, size_t count)
|
|||||||
buffer = bp = (char*) alloca (bytes);
|
buffer = bp = (char*) alloca (bytes);
|
||||||
if (!buffer)
|
if (!buffer)
|
||||||
{
|
{
|
||||||
errno = ENOMEM;
|
SET_ERRNO(ENOMEM);
|
||||||
return (-1);
|
return (-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -100,6 +116,6 @@ ares_writev (ares_socket_t s, const struct iovec *vector, size_t count)
|
|||||||
memcpy (bp, vector[i].iov_base, vector[i].iov_len);
|
memcpy (bp, vector[i].iov_base, vector[i].iov_len);
|
||||||
bp += vector[i].iov_len;
|
bp += vector[i].iov_len;
|
||||||
}
|
}
|
||||||
return send (s, (const void*)buffer, bytes, 0);
|
return (int)swrite(s, buffer, bytes);
|
||||||
}
|
}
|
||||||
#endif /* WIN32 builds only */
|
#endif /* WIN32 builds only */
|
||||||
|
|||||||
53
buildconf
53
buildconf
@@ -1,4 +1,26 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
#***************************************************************************
|
||||||
|
# _ _ ____ _
|
||||||
|
# Project ___| | | | _ \| |
|
||||||
|
# / __| | | | |_) | |
|
||||||
|
# | (__| |_| | _ <| |___
|
||||||
|
# \___|\___/|_| \_\_____|
|
||||||
|
#
|
||||||
|
# Copyright (C) 1998 - 2006, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
|
#
|
||||||
|
# This software is licensed as described in the file COPYING, which
|
||||||
|
# you should have received as part of this distribution. The terms
|
||||||
|
# are also available at http://curl.haxx.se/docs/copyright.html.
|
||||||
|
#
|
||||||
|
# You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||||
|
# copies of the Software, and permit persons to whom the Software is
|
||||||
|
# furnished to do so, under the terms of the COPYING file.
|
||||||
|
#
|
||||||
|
# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||||
|
# KIND, either express or implied.
|
||||||
|
#
|
||||||
|
# $Id$
|
||||||
|
###########################################################################
|
||||||
|
|
||||||
die(){
|
die(){
|
||||||
echo "$@"
|
echo "$@"
|
||||||
@@ -13,6 +35,7 @@ findtool(){
|
|||||||
IFS=":"
|
IFS=":"
|
||||||
for path in $PATH
|
for path in $PATH
|
||||||
do
|
do
|
||||||
|
# echo "checks for $file in $path" >&2
|
||||||
if test -f "$path/$file"; then
|
if test -f "$path/$file"; then
|
||||||
echo "$path/$file"
|
echo "$path/$file"
|
||||||
return
|
return
|
||||||
@@ -85,8 +108,7 @@ fi
|
|||||||
|
|
||||||
echo "buildconf: automake version $am_version (ok)"
|
echo "buildconf: automake version $am_version (ok)"
|
||||||
|
|
||||||
ac=`findtool aclocal`
|
ac=`findtool ${ACLOCAL:-aclocal}`
|
||||||
|
|
||||||
if test -z "$ac"; then
|
if test -z "$ac"; then
|
||||||
echo "buildconf: aclocal not found. Weird automake installation!"
|
echo "buildconf: aclocal not found. Weird automake installation!"
|
||||||
exit 1
|
exit 1
|
||||||
@@ -107,13 +129,18 @@ LIBTOOL_WANTED_VERSION=1.4.2
|
|||||||
# glibtool, with 'libtool' being something completely different.
|
# glibtool, with 'libtool' being something completely different.
|
||||||
libtool=`findtool glibtool 2>/dev/null`
|
libtool=`findtool glibtool 2>/dev/null`
|
||||||
if test ! -x "$libtool"; then
|
if test ! -x "$libtool"; then
|
||||||
libtool=`findtool libtool`
|
libtool=`findtool ${LIBTOOL:-libtool}`
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# set the LIBTOOLIZE here so that glibtoolize is used if glibtool was found
|
if test -z "$LIBTOOLIZE"; then
|
||||||
LIBTOOLIZE="${libtool}ize"
|
# set the LIBTOOLIZE here so that glibtoolize is used if glibtool was found
|
||||||
|
# $libtool is already the full path
|
||||||
|
libtoolize="${libtool}ize"
|
||||||
|
else
|
||||||
|
libtoolize=`findtool $LIBTOOLIZE`
|
||||||
|
fi
|
||||||
|
|
||||||
lt_pversion=`$libtool --version 2>/dev/null|head -n 1|sed -e 's/^[^0-9]*//g' -e 's/[- ].*//'`
|
lt_pversion=`$libtool --version 2>/dev/null|head -n 2|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."
|
||||||
echo " You need libtool version $LIBTOOL_WANTED_VERSION or newer installed"
|
echo " You need libtool version $LIBTOOL_WANTED_VERSION or newer installed"
|
||||||
@@ -150,7 +177,7 @@ fi
|
|||||||
|
|
||||||
echo "buildconf: libtool version $lt_version (ok)"
|
echo "buildconf: libtool version $lt_version (ok)"
|
||||||
|
|
||||||
if test -f "$LIBTOOLIZE"; then
|
if test -f "$libtoolize"; then
|
||||||
echo "buildconf: libtoolize found"
|
echo "buildconf: libtoolize found"
|
||||||
else
|
else
|
||||||
echo "buildconf: libtoolize not found. Weird libtool installation!"
|
echo "buildconf: libtoolize not found. Weird libtool installation!"
|
||||||
@@ -173,14 +200,14 @@ fi
|
|||||||
#--------------------------------------------------------------------------
|
#--------------------------------------------------------------------------
|
||||||
# perl check
|
# perl check
|
||||||
#
|
#
|
||||||
PERL=`findtool perl`
|
PERL=`findtool ${PERL:-perl}`
|
||||||
|
|
||||||
# ------------------------------------------------------------
|
# ------------------------------------------------------------
|
||||||
|
|
||||||
# run the correct scripts now
|
# run the correct scripts now
|
||||||
|
|
||||||
echo "buildconf: running libtoolize"
|
echo "buildconf: running libtoolize"
|
||||||
${LIBTOOLIZE:-libtoolize} --copy --automake --force || die "The libtool command failed"
|
$libtoolize --copy --automake --force || die "The libtoolize command failed"
|
||||||
echo "buildconf: running aclocal"
|
echo "buildconf: running aclocal"
|
||||||
${ACLOCAL:-aclocal} $ACLOCAL_FLAGS || die "The aclocal command line failed"
|
${ACLOCAL:-aclocal} $ACLOCAL_FLAGS || die "The aclocal command line failed"
|
||||||
if test -n "$PERL"; then
|
if test -n "$PERL"; then
|
||||||
@@ -199,12 +226,8 @@ ${AUTOCONF:-autoconf} || die "The autoconf command failed"
|
|||||||
|
|
||||||
if test -d ares; then
|
if test -d ares; then
|
||||||
cd ares
|
cd ares
|
||||||
echo "buildconf: running ares/libtoolize"
|
echo "buildconf: running in ares"
|
||||||
${LIBTOOLIZE:-libtoolize} --copy --automake --force || die "The libtool command failed"
|
./buildconf
|
||||||
echo "buildconf: running ares/aclocal"
|
|
||||||
${ACLOCAL:-aclocal} $ACLOCAL_FLAGS || die "The ares aclocal command failed"
|
|
||||||
echo "buildconf: running ares/autoconf"
|
|
||||||
${AUTOCONF:-autoconf} || die "The ares autoconf command failed"
|
|
||||||
cd ..
|
cd ..
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ REM $Date$
|
|||||||
|
|
||||||
REM create ca-bundle.h
|
REM create ca-bundle.h
|
||||||
echo /* This file is generated automatically */ >lib\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 hugehelp.c
|
REM create hugehelp.c
|
||||||
copy src\hugehelp.c.cvs src\hugehelp.c
|
copy src\hugehelp.c.cvs src\hugehelp.c
|
||||||
|
|||||||
880
configure.ac
880
configure.ac
File diff suppressed because it is too large
Load Diff
@@ -1,10 +1,30 @@
|
|||||||
#! /bin/sh
|
#! /bin/sh
|
||||||
|
#***************************************************************************
|
||||||
|
# _ _ ____ _
|
||||||
|
# Project ___| | | | _ \| |
|
||||||
|
# / __| | | | |_) | |
|
||||||
|
# | (__| |_| | _ <| |___
|
||||||
|
# \___|\___/|_| \_\_____|
|
||||||
|
#
|
||||||
|
# Copyright (C) 2001 - 2007, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
|
#
|
||||||
|
# This software is licensed as described in the file COPYING, which
|
||||||
|
# you should have received as part of this distribution. The terms
|
||||||
|
# are also available at http://curl.haxx.se/docs/copyright.html.
|
||||||
|
#
|
||||||
|
# You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||||
|
# copies of the Software, and permit persons to whom the Software is
|
||||||
|
# furnished to do so, under the terms of the COPYING file.
|
||||||
|
#
|
||||||
|
# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||||
|
# KIND, either express or implied.
|
||||||
|
#
|
||||||
|
# $Id$
|
||||||
|
###########################################################################
|
||||||
#
|
#
|
||||||
# The idea to this kind of setup info script was stolen from numerous
|
# The idea to this kind of setup info script was stolen from numerous
|
||||||
# other packages, such as neon, libxml and gnome.
|
# other packages, such as neon, libxml and gnome.
|
||||||
#
|
#
|
||||||
# $Id$
|
|
||||||
#
|
|
||||||
prefix=@prefix@
|
prefix=@prefix@
|
||||||
exec_prefix=@exec_prefix@
|
exec_prefix=@exec_prefix@
|
||||||
includedir=@includedir@
|
includedir=@includedir@
|
||||||
@@ -19,6 +39,7 @@ Available values for OPTION include:
|
|||||||
--ca ca bundle install path
|
--ca ca bundle install path
|
||||||
--cc compiler
|
--cc compiler
|
||||||
--cflags pre-processor and compiler flags
|
--cflags pre-processor and compiler flags
|
||||||
|
--checkfor [version] check for (lib)curl of the specified version
|
||||||
--features newline separated list of enabled features
|
--features newline separated list of enabled features
|
||||||
--protocols newline separated list of enabled protocols
|
--protocols newline separated list of enabled protocols
|
||||||
--help display this help and exit
|
--help display this help and exit
|
||||||
@@ -101,9 +122,6 @@ while test $# -gt 0; do
|
|||||||
echo "FTPS"
|
echo "FTPS"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
if test "@CURL_DISABLE_GOPHER@" != "1"; then
|
|
||||||
echo "GOPHER"
|
|
||||||
fi
|
|
||||||
if test "@CURL_DISABLE_FILE@" != "1"; then
|
if test "@CURL_DISABLE_FILE@" != "1"; then
|
||||||
echo "FILE"
|
echo "FILE"
|
||||||
fi
|
fi
|
||||||
@@ -125,6 +143,26 @@ while test $# -gt 0; do
|
|||||||
exit 0
|
exit 0
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
--checkfor)
|
||||||
|
checkfor=$2
|
||||||
|
cmajor=`echo $checkfor | cut -d. -f1`
|
||||||
|
cminor=`echo $checkfor | cut -d. -f2`
|
||||||
|
# when extracting the patch part we strip off everything after a
|
||||||
|
# dash as that's used for things like version 1.2.3-CVS
|
||||||
|
cpatch=`echo $checkfor | cut -d. -f3 | cut -d- -f1`
|
||||||
|
checknum=`echo "$cmajor*256*256 + $cminor*256 + ${cpatch:-0}" | bc`
|
||||||
|
numuppercase=`echo @VERSIONNUM@ | tr 'a-f' 'A-F'`
|
||||||
|
nownum=`echo "obase=10; ibase=16; $numuppercase" | bc`
|
||||||
|
|
||||||
|
if test "$nownum" -ge "$checknum"; then
|
||||||
|
# silent success
|
||||||
|
exit 0
|
||||||
|
else
|
||||||
|
echo "requested version $checkfor is newer than existing @VERSION@"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
|
||||||
--vernum)
|
--vernum)
|
||||||
echo @VERSIONNUM@
|
echo @VERSIONNUM@
|
||||||
exit 0
|
exit 0
|
||||||
@@ -143,8 +181,17 @@ while test $# -gt 0; do
|
|||||||
;;
|
;;
|
||||||
|
|
||||||
--libs)
|
--libs)
|
||||||
echo -L@libdir@ -lcurl @LDFLAGS@ @LIBS@
|
if test "X@libdir@" != "X/usr/lib"; then
|
||||||
;;
|
CURLLIBDIR="-L@libdir@ "
|
||||||
|
else
|
||||||
|
CURLLIBDIR=""
|
||||||
|
fi
|
||||||
|
if test "X@REQUIRE_LIB_DEPS@" = "Xyes"; then
|
||||||
|
echo ${CURLLIBDIR}-lcurl @LDFLAGS@ @LIBCURL_LIBS@ @LIBS@
|
||||||
|
else
|
||||||
|
echo ${CURLLIBDIR}-lcurl @LDFLAGS@ @LIBS@
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
|
||||||
*)
|
*)
|
||||||
echo "unknown option: $1"
|
echo "unknown option: $1"
|
||||||
|
|||||||
@@ -46,8 +46,8 @@ Cocoa
|
|||||||
|
|
||||||
D
|
D
|
||||||
|
|
||||||
Written by Charles Sanders and James Wavro
|
Written by Kenneth Bogert
|
||||||
http://www.atari-soldiers.com/libcurl.html
|
http://curl.haxx.se/libcurl/d/
|
||||||
|
|
||||||
Dylan
|
Dylan
|
||||||
|
|
||||||
@@ -142,8 +142,8 @@ Rexx
|
|||||||
|
|
||||||
Ruby
|
Ruby
|
||||||
|
|
||||||
Written by Hirotaka Matsuyuki
|
Written by Ross Bamford
|
||||||
http://www.d1.dion.ne.jp/~matuyuki/ruby.html
|
http://curb.rubyforge.org/
|
||||||
|
|
||||||
Scheme
|
Scheme
|
||||||
|
|
||||||
@@ -155,6 +155,16 @@ S-Lang
|
|||||||
S-Lang binding written by John E Davis
|
S-Lang binding written by John E Davis
|
||||||
http://www.jedsoft.org/slang/modules/curl.html
|
http://www.jedsoft.org/slang/modules/curl.html
|
||||||
|
|
||||||
|
Smalltalk
|
||||||
|
|
||||||
|
Smalltalk binding written by Danil Osipchuk
|
||||||
|
http://www.squeaksource.com/CurlPlugin/
|
||||||
|
|
||||||
|
SPL
|
||||||
|
|
||||||
|
SPL binding written by Clifford Wolf
|
||||||
|
http://www.clifford.at/spl/
|
||||||
|
|
||||||
Tcl
|
Tcl
|
||||||
|
|
||||||
Tclcurl is written by Andr<64>s Garc<72>a
|
Tclcurl is written by Andr<64>s Garc<72>a
|
||||||
@@ -172,4 +182,9 @@ Q
|
|||||||
wxWidgets
|
wxWidgets
|
||||||
|
|
||||||
Written by Casey O'Donnell
|
Written by Casey O'Donnell
|
||||||
http://homepage.mac.com/codonnell/wxcurldav/
|
http://wxcode.sourceforge.net/components/wxcurl/
|
||||||
|
|
||||||
|
XBLite
|
||||||
|
|
||||||
|
Written by David Szafranski
|
||||||
|
http://perso.wanadoo.fr/xblite/libraries.html
|
||||||
|
|||||||
@@ -4,11 +4,11 @@
|
|||||||
| (__| |_| | _ <| |___
|
| (__| |_| | _ <| |___
|
||||||
\___|\___/|_| \_\_____|
|
\___|\___/|_| \_\_____|
|
||||||
|
|
||||||
To Think About When Contributing Source Code
|
When Contributing Source Code
|
||||||
|
|
||||||
This document is intended to offer some simple guidelines that can be useful
|
This document is intended to offer guidelines that can be useful to keep in
|
||||||
to keep in mind when you decide to contribute to the project. This concerns
|
mind when you decide to contribute to the project. This concerns new features
|
||||||
new features as well as corrections to existing flaws or bugs.
|
as well as corrections to existing flaws or bugs.
|
||||||
|
|
||||||
Join the Community
|
Join the Community
|
||||||
|
|
||||||
@@ -17,22 +17,38 @@ Join the Community
|
|||||||
you start sending patches! We prefer patches and discussions being held on
|
you start sending patches! We prefer patches and discussions being held on
|
||||||
the mailing list(s), not sent to individuals.
|
the mailing list(s), not sent to individuals.
|
||||||
|
|
||||||
The License Issue
|
We also hang out on IRC in #curl on irc.freenode.net
|
||||||
|
|
||||||
|
License
|
||||||
|
|
||||||
When contributing with code, you agree to put your changes and new code under
|
When contributing with code, you agree to put your changes and new code under
|
||||||
the same license curl and libcurl is already using unless stated otherwise.
|
the same license curl and libcurl is already using unless stated and agreed
|
||||||
|
otherwise.
|
||||||
|
|
||||||
If you add a larger piece of code, you can opt to make that file or set of
|
If you add a larger piece of code, you can opt to make that file or set of
|
||||||
files to use a different license as long as they don't enforce any changes to
|
files to use a different license as long as they don't enforce any changes to
|
||||||
the rest of the package and they make sense. Such "separate parts" can not be
|
the rest of the package and they make sense. Such "separate parts" can not be
|
||||||
GPL (as we don't want the GPL virus to attack users of libcurl) but they must
|
GPL licensed (as we don't want copyleft to affect users of libcurl) but they
|
||||||
use "GPL compatible" licenses.
|
must use "GPL compatible" licenses (as we want to allow users to use libcurl
|
||||||
|
properly in GPL licensed environments).
|
||||||
|
|
||||||
|
When changing existing source code, you do not alter the copyright of the
|
||||||
|
original file(s). The copyright will still be owned by the original
|
||||||
|
creator(s) or those who have been assigned copyright by the original
|
||||||
|
author(s).
|
||||||
|
|
||||||
|
By submitting a patch to the curl project, you are assumed to have the right
|
||||||
|
to the code and to be allowed by your employer or whatever to hand over that
|
||||||
|
patch/code to us. We will credit you for your changes as far as possible, to
|
||||||
|
give credit but also to keep a trace back to who made what changes. Please
|
||||||
|
always provide us with your full real name when contributing!
|
||||||
|
|
||||||
What To Read
|
What To Read
|
||||||
|
|
||||||
Source code, the man pages, the INTERNALS document, the TODO, the most recent
|
Source code, the man pages, the INTERNALS document, TODO, KNOWN_BUGS, the
|
||||||
CHANGES. Just lurking on the libcurl mailing list is gonna give you a lot of
|
most recent CHANGES. Just lurking on the libcurl mailing list is gonna give
|
||||||
insights on what's going on right now. Asking there is a good idea too.
|
you a lot of insights on what's going on right now. Asking there is a good
|
||||||
|
idea too.
|
||||||
|
|
||||||
Naming
|
Naming
|
||||||
|
|
||||||
@@ -157,3 +173,21 @@ How To Make a Patch
|
|||||||
|
|
||||||
http://gnuwin32.sourceforge.net/packages/patch.htm
|
http://gnuwin32.sourceforge.net/packages/patch.htm
|
||||||
http://gnuwin32.sourceforge.net/packages/diffutils.htm
|
http://gnuwin32.sourceforge.net/packages/diffutils.htm
|
||||||
|
|
||||||
|
How to get your patches into the libcurl sources
|
||||||
|
|
||||||
|
1. Submit your patch to the curl-library mailing list
|
||||||
|
|
||||||
|
2. Make the patch against as recent sources as possible.
|
||||||
|
|
||||||
|
3. Make sure your patch adheres to the source indent and coding style of
|
||||||
|
already existing source code. Failing to do so just adds more work for me.
|
||||||
|
|
||||||
|
4. Respond to replies on the list about the patch and answer questions and/or
|
||||||
|
fix nits/flaws. This is very important. I will take lack of replies as a
|
||||||
|
sign that you're not very anxious to get your patch accepted and I tend to
|
||||||
|
simply drop such patches from my TODO list.
|
||||||
|
|
||||||
|
5. If you've followed the above mentioned paragraphs and your patch still
|
||||||
|
hasn't been incorporated after some weeks, consider resubmitting them to
|
||||||
|
the list.
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
Date: September 30, 2005
|
Date: February 11, 2007
|
||||||
Author: Daniel Stenberg <daniel@haxx.se>
|
Author: Daniel Stenberg <daniel@haxx.se>
|
||||||
URL: http://curl.haxx.se/legal/distro-dilemma.html
|
URL: http://curl.haxx.se/legal/distro-dilemma.html
|
||||||
|
|
||||||
Condition
|
Condition
|
||||||
|
|
||||||
This document is written to describe the situation as it is right
|
This document is written to describe the situation as it is right now.
|
||||||
now. libcurl 7.14.1 is currently the latest version available. Things may (or
|
libcurl 7.16.1 is currently the latest version available. Things may of
|
||||||
perhaps will) of course change in the future.
|
course change in the future.
|
||||||
|
|
||||||
This document reflects my view and understanding of these things. Please tell
|
This document reflects my view and understanding of these things. Please tell
|
||||||
me where and how you think I'm wrong, and I'll try to correct my mistakes.
|
me where and how you think I'm wrong, and I'll try to correct my mistakes.
|
||||||
@@ -16,11 +16,10 @@ Background
|
|||||||
The Free Software Foundation has deemed the Original BSD license[1] to be
|
The Free Software Foundation has deemed the Original BSD license[1] to be
|
||||||
"incompatible"[2] with GPL[3]. I'd rather say it is the other way around, but
|
"incompatible"[2] with GPL[3]. I'd rather say it is the other way around, but
|
||||||
the point is the same: if you distribute a binary version of a GPL program,
|
the point is the same: if you distribute a binary version of a GPL program,
|
||||||
it MUST NOT be linked with any Original BSD-licensed parts or
|
it MUST NOT be linked with any Original BSD-licensed parts or libraries.
|
||||||
libraries. Doing so will violate the GPL license. For a long time, very many
|
Doing so will violate the GPL license. For a long time, very many GPL
|
||||||
GPL licensed programs have avoided this license mess by adding an
|
licensed programs have avoided this license mess by adding an exception[8] to
|
||||||
exception[8] to their license. And many others have just closed their eyes
|
their license. And many others have just closed their eyes for this problem.
|
||||||
for this problem.
|
|
||||||
|
|
||||||
libcurl is MIT-style[4] licensed - how on earth did this dilemma fall onto
|
libcurl is MIT-style[4] licensed - how on earth did this dilemma fall onto
|
||||||
our plates?
|
our plates?
|
||||||
@@ -33,7 +32,10 @@ Background
|
|||||||
tend to), you have a clash. GPL vs Original BSD.
|
tend to), you have a clash. GPL vs Original BSD.
|
||||||
|
|
||||||
This dilemma is not libcurl-specific nor is it specific to any particular
|
This dilemma is not libcurl-specific nor is it specific to any particular
|
||||||
Linux distro.
|
Linux distro. (This article mentions and refers to Debian several times, but
|
||||||
|
only because Debian seems to be the only Linux distro to have faced this
|
||||||
|
issue yet since no other distro is shipping libcurl built with two SSL
|
||||||
|
libraries.)
|
||||||
|
|
||||||
Part of the Operating System
|
Part of the Operating System
|
||||||
|
|
||||||
@@ -46,44 +48,56 @@ Part of the Operating System
|
|||||||
Debian does however not take this stance and has officially(?) claimed that
|
Debian does however not take this stance and has officially(?) claimed that
|
||||||
OpenSSL is not a required part of the Debian operating system
|
OpenSSL is not a required part of the Debian operating system
|
||||||
|
|
||||||
Debian-legal
|
Some people claim that this paragraph cannot be exploited this way by a Linux
|
||||||
|
distro, but I am not a lawyer and that is a discussion left outside of this
|
||||||
In August 2004 I figured I should start pulling people's attention to this to
|
document.
|
||||||
see if anyone has any bright ideas or if they would dismiss my worries based
|
|
||||||
on some elegant writing I had missed somewhere:
|
|
||||||
|
|
||||||
My post to debian-legal on August 12 2004:
|
|
||||||
|
|
||||||
http://lists.debian.org/debian-legal/2004/08/msg00279.html
|
|
||||||
|
|
||||||
Several people agreed then that this is a known and rather big problem, but
|
|
||||||
the following discussion didn't result in much.
|
|
||||||
|
|
||||||
GnuTLS
|
GnuTLS
|
||||||
|
|
||||||
With the release of libcurl 7.14.0 (May 2005), it can now get built to use
|
Since May 2005 libcurl can get built to use GnuTLS instead of OpenSSL. GnuTLS
|
||||||
GnuTLS instead of OpenSSL. GnuTLS is a LGPL[7] licensed library that offers a
|
is an LGPL[7] licensed library that offers a matching set of features as
|
||||||
matching set of features as OpenSSL does. Now, you can build and distribute
|
OpenSSL does. Now, you can build and distribute an TLS/SSL capable libcurl
|
||||||
an SSL capable libcurl without including any Original BSD licensed code.
|
without including any Original BSD licensed code.
|
||||||
|
|
||||||
I believe Debian is the first distro to provide libcurl/GnutTLS packages.
|
I believe Debian is the first (only?) distro that provides libcurl/GnutTLS
|
||||||
|
packages.
|
||||||
|
|
||||||
GnuTLS vs OpenSSL
|
yassl
|
||||||
|
|
||||||
While these two libraries offer similar features, they are not equal. Both
|
libcurl can get also get built to use yassl for the TLS/SSL layer. yassl is a
|
||||||
libraries have features the other one lacks. libcurl does not (yet) offer a
|
GPL[3] licensed library.
|
||||||
standardized stable ABI if you decide to switch from using libcurl-openssl to
|
|
||||||
libcurl-gnutls or vice versa. The GnuTLS support is very recent in libcurl
|
|
||||||
and it has not been tested nor used very extensively, while the OpenSSL
|
|
||||||
equivalent code has been used and thus matured for more than seven (7) years.
|
|
||||||
|
|
||||||
In August 2005, the debian-devel mailing list discovered the license issue as
|
|
||||||
a GPL licensed application wanted SSL capabilities from libcurl and thus was
|
|
||||||
forced to use the GnuTLS powered libcurl. For a reason that is unknown to me,
|
|
||||||
the application authors didn't want to or was unable to add an exception to
|
|
||||||
their GPL license. Alas, the license problem hit the fan again.
|
|
||||||
|
|
||||||
The Better License, Original BSD or LGPL?
|
GnuTLS vs OpenSSL vs yassl
|
||||||
|
|
||||||
|
While these three libraries offer similar features, they are not equal.
|
||||||
|
libcurl does not (yet) offer a standardized stable ABI if you decide to
|
||||||
|
switch from using libcurl-openssl to libcurl-gnutls or vice versa. The GnuTLS
|
||||||
|
and yassl support is very recent in libcurl and it has not been tested nor
|
||||||
|
used very extensively, while the OpenSSL equivalent code has been used and
|
||||||
|
thus matured since 1999.
|
||||||
|
|
||||||
|
GnuTLS
|
||||||
|
- LGPL licensened
|
||||||
|
- supports SRP
|
||||||
|
- lacks SSLv2 support
|
||||||
|
- lacks MD2 support (used by at least some CA certs)
|
||||||
|
- lacks the crypto functions libcurl uses for NTLM
|
||||||
|
|
||||||
|
OpenSSL
|
||||||
|
- Original BSD licensened
|
||||||
|
- lacks SRP
|
||||||
|
- supports SSLv2
|
||||||
|
- older and more widely used
|
||||||
|
- provides crypto functions libcurl uses for NTLM
|
||||||
|
- libcurl can do non-blocking connects with it in 7.15.4 and later
|
||||||
|
|
||||||
|
yassl
|
||||||
|
- GPL licensed
|
||||||
|
- much untested and unproven in the real work by (lib)curl users so we don't
|
||||||
|
know a lot about restrictions or benefits from using this
|
||||||
|
|
||||||
|
The Better License, Original BSD, GPL or LGPL?
|
||||||
|
|
||||||
It isn't obvious or without debate to any objective interested party that
|
It isn't obvious or without debate to any objective interested party that
|
||||||
either of these licenses are the "better" or even the "preferred" one in a
|
either of these licenses are the "better" or even the "preferred" one in a
|
||||||
@@ -92,8 +106,8 @@ The Better License, Original BSD or LGPL?
|
|||||||
Instead, I think we should accept the fact that the SSL/TLS libraries and
|
Instead, I think we should accept the fact that the SSL/TLS libraries and
|
||||||
their different licenses will fit different applications and their authors
|
their different licenses will fit different applications and their authors
|
||||||
differently depending on the applications' licenses and their general usage
|
differently depending on the applications' licenses and their general usage
|
||||||
pattern (considering how LGPL libraries for example can be burdensome for
|
pattern (considering how GPL and LGPL libraries for example can be burdensome
|
||||||
embedded systems usage).
|
for embedded systems usage).
|
||||||
|
|
||||||
In Debian land, there seems to be a common opinion that LGPL is "maximally
|
In Debian land, there seems to be a common opinion that LGPL is "maximally
|
||||||
compatible" with apps while Original BSD is not. Like this:
|
compatible" with apps while Original BSD is not. Like this:
|
||||||
@@ -102,27 +116,28 @@ The Better License, Original BSD or LGPL?
|
|||||||
|
|
||||||
More SSL Libraries
|
More SSL Libraries
|
||||||
|
|
||||||
In libcurl, there's no stopping us here. There are at least a few more Open
|
In libcurl, there's no stopping us here. There are more Open Source/Free
|
||||||
Source/Free SSL/TLS libraries and we would very much like to support them as
|
SSL/TLS libraries out there and we would very much like to support them as
|
||||||
well, to offer application authors an even wider scope of choice.
|
well, to offer application authors an even wider scope of choice.
|
||||||
|
|
||||||
Application Angle of this Problem
|
Application Angle of this Problem
|
||||||
|
|
||||||
libcurl is built to use one SSL/TLS library. It uses a single fixed name (by
|
libcurl is built to use one SSL/TLS library. It uses a single fixed name (by
|
||||||
default), and applications are built/linked to use that single lib. Replacing
|
default) on the built/created lib file, and applications are built/linked to
|
||||||
one libcurl instance with another one that uses the other SSL/TLS library
|
use that single lib. Replacing one libcurl instance with another one that
|
||||||
might break one or more applications (due to ABI differences and/or different
|
uses the other SSL/TLS library might break one or more applications (due to
|
||||||
feature set). You want your application to use the libcurl it was built for.
|
ABI differences and/or different feature set). You want your application to
|
||||||
|
use the libcurl it was built for.
|
||||||
|
|
||||||
Project cURL Angle of this Problem
|
Project cURL Angle of this Problem
|
||||||
|
|
||||||
We distribute libcurl and everyone may build libcurl with either library. At
|
We distribute libcurl and everyone may build libcurl with either library at
|
||||||
their choice. This problem is not directly a problem of ours. It merely
|
their choice. This problem is not directly a problem of ours. It merely
|
||||||
affects users - GPL application authors only - of our lib as it comes
|
affects users - GPL application authors only - of our lib as it comes
|
||||||
included and delivered on some distros.
|
included and delivered on some distros.
|
||||||
|
|
||||||
libcurl has different ABI when built with different SSL/TLS libraries due to
|
libcurl has different ABI when built with different SSL/TLS libraries due to
|
||||||
two reasons:
|
these reasons:
|
||||||
|
|
||||||
1. No one has worked on fixing this. The mutex/lock callbacks should be set
|
1. No one has worked on fixing this. The mutex/lock callbacks should be set
|
||||||
with a generic libcurl function that should use the proper underlying
|
with a generic libcurl function that should use the proper underlying
|
||||||
@@ -131,63 +146,19 @@ Project cURL Angle of this Problem
|
|||||||
2. The CURLOPT_SSL_CTX_FUNCTION option is not possible to "emulate" on GnuTLS
|
2. The CURLOPT_SSL_CTX_FUNCTION option is not possible to "emulate" on GnuTLS
|
||||||
but simply requires OpenSSL.
|
but simply requires OpenSSL.
|
||||||
|
|
||||||
|
3. There might be some other subtle differences just because nobody has yet
|
||||||
|
tried to make a fixed ABI like this.
|
||||||
|
|
||||||
Distro Angle of this Problem
|
Distro Angle of this Problem
|
||||||
|
|
||||||
A distro can provide separate libcurls built with different SSL/TLS libraries
|
To my knowledge there is only one distro that ships libcurl built with either
|
||||||
to work around this, but at least Debian seems to be very hostile against
|
OpenSSL or GnuTLS.
|
||||||
such an approach, probably since it makes things like devel packages for the
|
|
||||||
different libs collide since they would provide the same include files and
|
|
||||||
man pages etc.
|
|
||||||
|
|
||||||
Fixing the Only Problem
|
Debian Linux is now (since mid September 2005) providing two different
|
||||||
|
libcurl packages, one for libcurl built with OpenSSL and one built with
|
||||||
The only problem is thus for distributions that want to offer libcurl
|
GnuTLS. They use different .so names and can this both be installed in a
|
||||||
versions built with more than one SSL/TLS library.
|
single system simultaneously. This has been said to be a transitional system
|
||||||
|
not desired to keep in the long run.
|
||||||
Since multiple libcurl binaries using different names are ruled out, we need
|
|
||||||
to come up with a way to have one single libcurl that someone uses different
|
|
||||||
underlying libraries. The best(?) approach currently suggested involves this:
|
|
||||||
|
|
||||||
A new intermediate library (named lib2 so far in the discussions) with the
|
|
||||||
single purpose of providing libcurl with SSL/TLS capabilities. It would have
|
|
||||||
a unified API and ABI no matter what underlying library it would use.
|
|
||||||
|
|
||||||
There would be one lib2 binary provided for each supported SSL/TLS library.
|
|
||||||
For example: lib2-openssl, lib2-gnutls, lib2-yassl, lib2-matrixssl and
|
|
||||||
lib2-nossl. Yes, take note of the last one that provides the lib2 ABI but
|
|
||||||
that lacks the actual powers.
|
|
||||||
|
|
||||||
When libcurl is built and linked, it will be linked against a lib2 with the
|
|
||||||
set ABI.
|
|
||||||
|
|
||||||
When you link an app against libcurl, it would also need to provide one of
|
|
||||||
the (many) lib2 libs to decide what approach that fits the app. An app that
|
|
||||||
doesn't want SSL at all would still need to link with the lib2-nossl lib.
|
|
||||||
|
|
||||||
GPL apps can pick the lib2-gnutls, others may pick the lib2-openssl.
|
|
||||||
|
|
||||||
This concept works equally well both for shared and static libraries.
|
|
||||||
|
|
||||||
A positive side effect of this approach could be a more generic "de facto"
|
|
||||||
standard API for SSL/TLS libraries.
|
|
||||||
|
|
||||||
When Will This Happen
|
|
||||||
|
|
||||||
Note again that this is not a problem in curl, it doesn't solve any actual
|
|
||||||
technical problems in our project. Don't hold your breath for this to happen
|
|
||||||
very soon (if at all) unless you step forward and contribute.
|
|
||||||
|
|
||||||
The suggestion that is outlined above is still only a suggestion. Feel free
|
|
||||||
to bring a better idea!
|
|
||||||
|
|
||||||
Also, to keep in mind: I don't want this new concept to have too much of an
|
|
||||||
impact on the existing code. Preferably it should be possible to build the
|
|
||||||
code like today (without the use of lib2), should you decide to ignore the
|
|
||||||
problems outlined in this document.
|
|
||||||
|
|
||||||
Update: Work on this has been initiated by Richard Atterer:
|
|
||||||
|
|
||||||
http://curl.haxx.se/mail/lib-2005-09/0066.html
|
|
||||||
|
|
||||||
Footnotes
|
Footnotes
|
||||||
|
|
||||||
|
|||||||
177
docs/FAQ
177
docs/FAQ
@@ -1,4 +1,4 @@
|
|||||||
Updated: August 26, 2005 (http://curl.haxx.se/docs/faq.html)
|
Updated: February 11, 2007 (http://curl.haxx.se/docs/faq.html)
|
||||||
_ _ ____ _
|
_ _ ____ _
|
||||||
___| | | | _ \| |
|
___| | | | _ \| |
|
||||||
/ __| | | | |_) | |
|
/ __| | | | |_) | |
|
||||||
@@ -16,6 +16,8 @@ FAQ
|
|||||||
1.6 What do you get for making curl?
|
1.6 What do you get for making curl?
|
||||||
1.7 What about CURL from curl.com?
|
1.7 What about CURL from curl.com?
|
||||||
1.8 I have a problem who do I mail?
|
1.8 I have a problem who do I mail?
|
||||||
|
1.9 Where do I buy commercial support for curl?
|
||||||
|
1.10 How many are using curl?
|
||||||
|
|
||||||
2. Install Related Problems
|
2. Install Related Problems
|
||||||
2.1 configure doesn't find OpenSSL even when it is installed
|
2.1 configure doesn't find OpenSSL even when it is installed
|
||||||
@@ -88,6 +90,7 @@ FAQ
|
|||||||
6.4 I have a program that uses LGPL libraries, can I use libcurl?
|
6.4 I have a program that uses LGPL libraries, can I use libcurl?
|
||||||
6.5 Can I modify curl/libcurl for my program and keep the changes secret?
|
6.5 Can I modify curl/libcurl for my program and keep the changes secret?
|
||||||
6.6 Can you please change the curl/libcurl license to XXXX?
|
6.6 Can you please change the curl/libcurl license to XXXX?
|
||||||
|
6.7 What are my obligations when using libcurl in my commerical apps?
|
||||||
|
|
||||||
7. PHP/CURL Issues
|
7. PHP/CURL Issues
|
||||||
7.1 What is PHP/CURL?
|
7.1 What is PHP/CURL?
|
||||||
@@ -111,10 +114,10 @@ FAQ
|
|||||||
libcurl
|
libcurl
|
||||||
|
|
||||||
A free and easy-to-use client-side URL transfer library, supporting FTP,
|
A free and easy-to-use client-side URL transfer library, supporting FTP,
|
||||||
FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE and LDAP. libcurl supports
|
FTPS, HTTP, HTTPS, SCP, SFTP, TFTP, TELNET, DICT, FILE and LDAP. libcurl
|
||||||
HTTPS certificates, HTTP POST, HTTP PUT, FTP uploading, kerberos, HTTP
|
supports HTTPS certificates, HTTP POST, HTTP PUT, FTP uploading, kerberos,
|
||||||
form based upload, proxies, cookies, user+password authentication, file
|
HTTP form based upload, proxies, cookies, user+password authentication,
|
||||||
transfer resume, http proxy tunneling and more!
|
file transfer resume, http proxy tunneling and more!
|
||||||
|
|
||||||
libcurl is highly portable, it builds and works identically on numerous
|
libcurl is highly portable, it builds and works identically on numerous
|
||||||
platforms, including Solaris, NetBSD, FreeBSD, OpenBSD, Darwin, HPUX,
|
platforms, including Solaris, NetBSD, FreeBSD, OpenBSD, Darwin, HPUX,
|
||||||
@@ -129,8 +132,8 @@ FAQ
|
|||||||
A command line tool for getting or sending files using URL syntax.
|
A command line tool for getting or sending files using URL syntax.
|
||||||
|
|
||||||
Since curl uses libcurl, it supports a range of common Internet protocols,
|
Since curl uses libcurl, it supports a range of common Internet protocols,
|
||||||
currently including HTTP, HTTPS, FTP, FTPS, GOPHER, LDAP, DICT, TELNET and
|
currently including HTTP, HTTPS, FTP, FTPS, SCP, SFTP, TFTP, LDAP, DICT,
|
||||||
FILE.
|
TELNET and FILE.
|
||||||
|
|
||||||
We pronounce curl and cURL with an initial k sound: [kurl].
|
We pronounce curl and cURL with an initial k sound: [kurl].
|
||||||
|
|
||||||
@@ -148,9 +151,13 @@ FAQ
|
|||||||
You can use libcurl for free in your application, be it open source,
|
You can use libcurl for free in your application, be it open source,
|
||||||
commercial or closed-source.
|
commercial or closed-source.
|
||||||
|
|
||||||
|
libcurl is most probably the most portable, most powerful and most often
|
||||||
|
used C-based multi-platform file transfer library on this planet - be it
|
||||||
|
open source or commercial.
|
||||||
|
|
||||||
1.3 What is curl not?
|
1.3 What is curl not?
|
||||||
|
|
||||||
Curl is *not* a wget clone. That is a common misconception. Never, during
|
Curl is not a wget clone. That is a common misconception. Never, during
|
||||||
curl's development, have we intended curl to replace wget or compete on its
|
curl's development, have we intended curl to replace wget or compete on its
|
||||||
market. Curl is targeted at single-shot file transfers.
|
market. Curl is targeted at single-shot file transfers.
|
||||||
|
|
||||||
@@ -165,9 +172,10 @@ FAQ
|
|||||||
Curl is not a PHP tool, even though it works perfectly well when used from
|
Curl is not a PHP tool, even though it works perfectly well when used from
|
||||||
or with PHP (when using the PHP/CURL module).
|
or with PHP (when using the PHP/CURL module).
|
||||||
|
|
||||||
Curl is not a single-OS program. Curl exists, compiles, builds and runs
|
Curl is not a program for a single operating system. Curl exists, compiles,
|
||||||
under a wide range of operating systems, including all modern Unixes (and a
|
builds and runs under a wide range of operating systems, including all
|
||||||
bunch of older ones too), Windows, Amiga, BeOS, OS/2, OS X, QNX etc.
|
modern Unixes (and a bunch of older ones too), Windows, Amiga, BeOS, OS/2,
|
||||||
|
OS X, QNX etc.
|
||||||
|
|
||||||
1.4 When will you make curl do XXXX ?
|
1.4 When will you make curl do XXXX ?
|
||||||
|
|
||||||
@@ -205,7 +213,7 @@ FAQ
|
|||||||
improvements and have them inserted in the main sources (of course on the
|
improvements and have them inserted in the main sources (of course on the
|
||||||
condition that developers agree on that the fixes are good).
|
condition that developers agree on that the fixes are good).
|
||||||
|
|
||||||
The full list of the more than 400 contributors is found in the docs/THANKS
|
The full list of the more than 530 contributors is found in the docs/THANKS
|
||||||
file.
|
file.
|
||||||
|
|
||||||
curl is developed by a community, with Daniel at the wheel.
|
curl is developed by a community, with Daniel at the wheel.
|
||||||
@@ -259,6 +267,55 @@ FAQ
|
|||||||
flaw is announced to the world, thus lessen the impact the problem will have
|
flaw is announced to the world, thus lessen the impact the problem will have
|
||||||
on existing users.
|
on existing users.
|
||||||
|
|
||||||
|
1.9 Where do I buy commercial support for curl?
|
||||||
|
|
||||||
|
curl is fully open source. It means you can hire any skilled engineer to fix
|
||||||
|
your curl-related problems.
|
||||||
|
|
||||||
|
We list available alternatives on the curl web site:
|
||||||
|
http://curl.haxx.se/support.html
|
||||||
|
|
||||||
|
1.10 How many are using curl?
|
||||||
|
|
||||||
|
It is impossible to tell.
|
||||||
|
|
||||||
|
We don't know how many users that knowingly have installed and use curl.
|
||||||
|
|
||||||
|
We don't know how many users that use curl without knowing that they are in
|
||||||
|
fact using it.
|
||||||
|
|
||||||
|
We don't know how many users that downloaded or installed curl and then
|
||||||
|
never use it.
|
||||||
|
|
||||||
|
Some facts to use as input to the math:
|
||||||
|
|
||||||
|
curl packages are downloaded from the curl.haxx.se and mirrors almost one
|
||||||
|
million times per year. curl is installed by default with most Linux
|
||||||
|
distributions. curl is installed by default with Mac OS X. curl and libcurl
|
||||||
|
as used by numerous applications that include libcurl binaries in their
|
||||||
|
distribution packages (like Adobe Acrobat Reader and Google Earth).
|
||||||
|
|
||||||
|
More than 60 known named companies use curl in commercial environments and
|
||||||
|
products. More than 100 known named open source projects depend on
|
||||||
|
(lib)curl.
|
||||||
|
|
||||||
|
In a poll on the curl web site mid-2005, more than 50% of the 300+ answers
|
||||||
|
estimated a user base of one million users or more.
|
||||||
|
|
||||||
|
In March 2005, the "Linux Counter project" estimated a total Linux user base
|
||||||
|
of some 29 millions, while Netcraft detected some 4 million "active" Linux
|
||||||
|
based web servers. A guess is that a fair amount of these Linux
|
||||||
|
installations have curl installed.
|
||||||
|
|
||||||
|
All this taken together, there is no doubt that there are millions of
|
||||||
|
(lib)curl users.
|
||||||
|
|
||||||
|
http://curl.haxx.se/docs/companies.html
|
||||||
|
http://curl.haxx.se/docs/programs.html
|
||||||
|
http://curl.haxx.se/libcurl/using/apps.html
|
||||||
|
http://counter.li.org/estimates.php
|
||||||
|
http://news.netcraft.com/archives/2005/03/14/fedora_makes_rapid_progress.html
|
||||||
|
|
||||||
|
|
||||||
2. Install Related Problems
|
2. Install Related Problems
|
||||||
|
|
||||||
@@ -286,8 +343,6 @@ FAQ
|
|||||||
./configure places the -L/usr/local/ssl/lib early enough in the command
|
./configure places the -L/usr/local/ssl/lib early enough in the command
|
||||||
line to make things work
|
line to make things work
|
||||||
|
|
||||||
Solution submitted by: Bob Allison <allisonb@users.sourceforge.net>
|
|
||||||
|
|
||||||
2.1.2 only the libssl lib is missing
|
2.1.2 only the libssl lib is missing
|
||||||
|
|
||||||
If all include files and the libcrypto lib is present, with only the
|
If all include files and the libcrypto lib is present, with only the
|
||||||
@@ -303,10 +358,10 @@ FAQ
|
|||||||
|
|
||||||
2.2 Does curl work/build with other SSL libraries?
|
2.2 Does curl work/build with other SSL libraries?
|
||||||
|
|
||||||
Curl has been written to use OpenSSL or GnuTLS, although there should not be
|
Curl has been written to use OpenSSL, GnuTLS, yassl or NSS, although there
|
||||||
many problems using a different library. If anyone does "port" curl to use a
|
should not be many problems using a different library. If anyone does "port"
|
||||||
different SSL library, we are of course very interested in getting the
|
curl to use a different SSL library, we are of course very interested in
|
||||||
patch!
|
getting the patch!
|
||||||
|
|
||||||
2.3 Where can I find a copy of LIBEAY32.DLL?
|
2.3 Where can I find a copy of LIBEAY32.DLL?
|
||||||
|
|
||||||
@@ -412,10 +467,12 @@ FAQ
|
|||||||
install and use them, in the libcurl section of the curl web site:
|
install and use them, in the libcurl section of the curl web site:
|
||||||
http://curl.haxx.se/libcurl/
|
http://curl.haxx.se/libcurl/
|
||||||
|
|
||||||
In February 2003, there are interfaces available for the following
|
In February 2007, there are interfaces available for the following
|
||||||
languages: Basic, C, C++, Cocoa, Dylan, Euphoria, Java, Lua, Object-Pascal,
|
languages: Ada95, Basic, C, C++, Ch, Cocoa, D, Dylan, Euphoria, Ferite,
|
||||||
Pascal, Perl, PHP, PostgreSQL, Python, Rexx, Ruby, Scheme and Tcl. By the
|
Gambas, glib/GTK+, Java, Lisp, Lua, Mono, .NET, Object-Pascal, O'Caml,
|
||||||
time you read this, additional ones may have appeared!
|
Pascal, Perl, PHP, PostgreSQL, Python, R, Rexx, Ruby, Scheme, S-Lang,
|
||||||
|
Smalltalk, SPL, Tcl, Visual Basic, Q, wxwidgets and XBLite. By the time you
|
||||||
|
read this, additional ones may have appeared!
|
||||||
|
|
||||||
3.10 What about SOAP, WebDAV, XML-RPC or similar protocols over HTTP?
|
3.10 What about SOAP, WebDAV, XML-RPC or similar protocols over HTTP?
|
||||||
|
|
||||||
@@ -514,22 +571,24 @@ FAQ
|
|||||||
- Server certificate. The server you communicate with has a server
|
- Server certificate. The server you communicate with has a server
|
||||||
certificate. You can and should verify this certificate to make sure that
|
certificate. You can and should verify this certificate to make sure that
|
||||||
you are truly talking to the real server and not a server impersonating
|
you are truly talking to the real server and not a server impersonating
|
||||||
it. The server certificate verification process is made by using a
|
it.
|
||||||
Certificate Authority certificate ("CA cert") that was used to sign the
|
|
||||||
server certificate. Server certificate verification is enabled by default
|
|
||||||
in curl and libcurl and is often the reason for problems as explained in
|
|
||||||
FAQ entry 4.12 and the SSLCERTS document
|
|
||||||
(http://curl.haxx.se/docs/sslcerts.html). Server certificates that are
|
|
||||||
"self-signed" or otherwise signed by a CA that you do not have a CA cert
|
|
||||||
for, cannot be verified. If the verification during a connect fails, you
|
|
||||||
are refused access. You then need to explicitly disable the verification
|
|
||||||
to connect to the server.
|
|
||||||
|
|
||||||
- Certificate Authority certificate ("CA cert"). You often have several CA
|
- Certificate Authority certificate ("CA cert"). You often have several CA
|
||||||
certs in a CA cert bundle that can be used to verify a server certificate
|
certs in a CA cert bundle that can be used to verify a server certificate
|
||||||
that was signed by one of the authorities in the bundle. curl comes with a
|
that was signed by one of the authorities in the bundle. curl comes with a
|
||||||
default CA cert bundle. You can override the default.
|
default CA cert bundle. You can override the default.
|
||||||
|
|
||||||
|
The server certificate verification process is made by using a Certificate
|
||||||
|
Authority certificate ("CA cert") that was used to sign the server
|
||||||
|
certificate. Server certificate verification is enabled by default in curl
|
||||||
|
and libcurl and is often the reason for problems as explained in FAQ entry
|
||||||
|
4.12 and the SSLCERTS document
|
||||||
|
(http://curl.haxx.se/docs/sslcerts.html). Server certificates that are
|
||||||
|
"self-signed" or otherwise signed by a CA that you do not have a CA cert
|
||||||
|
for, cannot be verified. If the verification during a connect fails, you
|
||||||
|
are refused access. You then need to explicitly disable the verification
|
||||||
|
to connect to the server.
|
||||||
|
|
||||||
3.17 How do I list the root dir of an FTP server?
|
3.17 How do I list the root dir of an FTP server?
|
||||||
|
|
||||||
There are two ways. The way defined in the RFC is to use an encoded slash
|
There are two ways. The way defined in the RFC is to use an encoded slash
|
||||||
@@ -546,6 +605,8 @@ FAQ
|
|||||||
|
|
||||||
No.
|
No.
|
||||||
|
|
||||||
|
But you could easily write your own program using libcurl to do such stunts.
|
||||||
|
|
||||||
|
|
||||||
4. Running Problems
|
4. Running Problems
|
||||||
|
|
||||||
@@ -751,11 +812,11 @@ FAQ
|
|||||||
curl supports HTTP redirects fine (see item 3.8). Browsers generally support
|
curl supports HTTP redirects fine (see item 3.8). Browsers generally support
|
||||||
at least two other ways to perform directs that curl does not:
|
at least two other ways to perform directs that curl does not:
|
||||||
|
|
||||||
1 - Meta tags. You can write a HTML tag that will cause the browser to
|
- Meta tags. You can write a HTML tag that will cause the browser to
|
||||||
redirect to another given URL after a certain time.
|
redirect to another given URL after a certain time.
|
||||||
|
|
||||||
2 - Javascript. You can write a javascript program embeded in a HTML page
|
- Javascript. You can write a javascript program embeded in a HTML page
|
||||||
that redirects the browser to another given URL.
|
that redirects the browser to another given URL.
|
||||||
|
|
||||||
There is no way to make curl follow these redirects. You must either
|
There is no way to make curl follow these redirects. You must either
|
||||||
manually figure out what the page is set to do, or you write a script that
|
manually figure out what the page is set to do, or you write a script that
|
||||||
@@ -783,6 +844,8 @@ FAQ
|
|||||||
|
|
||||||
http://www.gnu.org/software/gnutls/manual/html_node/Multi_002dthreaded-applications.html
|
http://www.gnu.org/software/gnutls/manual/html_node/Multi_002dthreaded-applications.html
|
||||||
|
|
||||||
|
No special locking is needed with a NSS-powered libcurl. NSS is thread-safe.
|
||||||
|
|
||||||
5.2 How can I receive all data into a large memory chunk?
|
5.2 How can I receive all data into a large memory chunk?
|
||||||
|
|
||||||
[ See also the examples/getinmemory.c source ]
|
[ See also the examples/getinmemory.c source ]
|
||||||
@@ -793,8 +856,8 @@ FAQ
|
|||||||
|
|
||||||
One solution to this problem could be to have a pointer to a struct that you
|
One solution to this problem could be to have a pointer to a struct that you
|
||||||
pass to the callback function. You set the pointer using the
|
pass to the callback function. You set the pointer using the
|
||||||
curl_easy_setopt(CURLOPT_FILE) function. Then that pointer will be passed to
|
CURLOPT_WRITEDATA option. Then that pointer will be passed to the callback
|
||||||
the callback instead of a FILE * to a file:
|
instead of a FILE * to a file:
|
||||||
|
|
||||||
/* imaginary struct */
|
/* imaginary struct */
|
||||||
struct MemoryStruct {
|
struct MemoryStruct {
|
||||||
@@ -840,8 +903,6 @@ FAQ
|
|||||||
Similarly, if you use CURLOPT_READDATA you must also specify
|
Similarly, if you use CURLOPT_READDATA you must also specify
|
||||||
CURLOPT_READFUNCTION.
|
CURLOPT_READFUNCTION.
|
||||||
|
|
||||||
(Provided by Joel DeYoung and Bob Schader)
|
|
||||||
|
|
||||||
5.6 What about Keep-Alive or persistent connections?
|
5.6 What about Keep-Alive or persistent connections?
|
||||||
|
|
||||||
curl and libcurl have excellent support for persistent connections when
|
curl and libcurl have excellent support for persistent connections when
|
||||||
@@ -860,8 +921,6 @@ FAQ
|
|||||||
options to the command line compiler. /MD (linking against MSVCRT dll) seems
|
options to the command line compiler. /MD (linking against MSVCRT dll) seems
|
||||||
to be the most commonly used option.
|
to be the most commonly used option.
|
||||||
|
|
||||||
(Provided by Andrew Francis)
|
|
||||||
|
|
||||||
When building an application that uses the static libcurl library, you must
|
When building an application that uses the static libcurl library, you must
|
||||||
add -DCURL_STATICLIB to your CFLAGS. Otherwise the linker will look for
|
add -DCURL_STATICLIB to your CFLAGS. Otherwise the linker will look for
|
||||||
dynamic import symbols. If you get linker error like "unknown symbol
|
dynamic import symbols. If you get linker error like "unknown symbol
|
||||||
@@ -901,7 +960,10 @@ FAQ
|
|||||||
|
|
||||||
5.9 How does libcurl resolve host names?
|
5.9 How does libcurl resolve host names?
|
||||||
|
|
||||||
libcurl includes a number of different name resolve functions:
|
libcurl supports a large a number of different name resolve functions. One
|
||||||
|
of them is picked at build-time and will be used unconditionally. Thus, if
|
||||||
|
you want to change name resolver function you must rebuild libcurl and tell
|
||||||
|
it to use a different function.
|
||||||
|
|
||||||
- The non-ipv6 resolver that can use one out of four host name resolve calls
|
- The non-ipv6 resolver that can use one out of four host name resolve calls
|
||||||
(depending on what your system supports):
|
(depending on what your system supports):
|
||||||
@@ -914,6 +976,8 @@ FAQ
|
|||||||
- The ipv6-resolver that uses getaddrinfo()
|
- The ipv6-resolver that uses getaddrinfo()
|
||||||
|
|
||||||
- The c-ares based name resolver that uses the c-ares library for resolves.
|
- The c-ares based name resolver that uses the c-ares library for resolves.
|
||||||
|
Using this offers asynchronous name resolves but it currently has no IPv6
|
||||||
|
support.
|
||||||
|
|
||||||
- The Windows threaded resolver. It use:
|
- The Windows threaded resolver. It use:
|
||||||
|
|
||||||
@@ -926,8 +990,8 @@ FAQ
|
|||||||
5.10 How do I prevent libcurl from writing the response to stdout?
|
5.10 How do I prevent libcurl from writing the response to stdout?
|
||||||
|
|
||||||
libcurl provides a default built-in write function that writes received data
|
libcurl provides a default built-in write function that writes received data
|
||||||
to stdout. Set a WRITEFUNCTION to receive the data, or possibly set
|
to stdout. Set the CURLOPT_WRITEFUNCTION to receive the data, or possibly
|
||||||
WRITEDATA to a different FILE * handle.
|
set CURLOPT_WRITEDATA to a different FILE * handle.
|
||||||
|
|
||||||
5.11 How do I make libcurl not receive the whole HTTP response?
|
5.11 How do I make libcurl not receive the whole HTTP response?
|
||||||
|
|
||||||
@@ -956,6 +1020,9 @@ FAQ
|
|||||||
is just a brief summary for the cases we get the most questions. (Parts of
|
is just a brief summary for the cases we get the most questions. (Parts of
|
||||||
this section was much enhanced by Bjorn Reese.)
|
this section was much enhanced by Bjorn Reese.)
|
||||||
|
|
||||||
|
We are not lawyers and this is not legal advice. You should probably consult
|
||||||
|
one if you want true and accurate legal insights without our prejudice.
|
||||||
|
|
||||||
6.1 I have a GPL program, can I use the libcurl library?
|
6.1 I have a GPL program, can I use the libcurl library?
|
||||||
|
|
||||||
Yes!
|
Yes!
|
||||||
@@ -1000,6 +1067,26 @@ FAQ
|
|||||||
libraries that use it. It should be possible for everyone to use libcurl or
|
libraries that use it. It should be possible for everyone to use libcurl or
|
||||||
curl in their projects, no matter what license they already have in use.
|
curl in their projects, no matter what license they already have in use.
|
||||||
|
|
||||||
|
6.7 What are my obligations when using libcurl in my commerical apps?
|
||||||
|
|
||||||
|
Next to none. All you need to adhere to is the MIT-style license (stated in
|
||||||
|
the COPYING file) which basically says you have to include the copyright
|
||||||
|
notice in "all copies" and that you may not use the copyright holder's name
|
||||||
|
when promoting your software.
|
||||||
|
|
||||||
|
You do not have to release any of your source code.
|
||||||
|
|
||||||
|
You do not have to reveal or make public any changes to the libcurl source
|
||||||
|
code.
|
||||||
|
|
||||||
|
You do not have to reveal or make public that you are using libcurl within
|
||||||
|
your app.
|
||||||
|
|
||||||
|
As can be seen here: http://curl.haxx.se/docs/companies.html and
|
||||||
|
elsewhere, more and more companies are dicovering the power
|
||||||
|
of libcurl and take advantage of it even in commercial environments.
|
||||||
|
|
||||||
|
|
||||||
7. PHP/CURL Issues
|
7. PHP/CURL Issues
|
||||||
|
|
||||||
7.1 What is PHP/CURL?
|
7.1 What is PHP/CURL?
|
||||||
|
|||||||
@@ -87,14 +87,16 @@ FTP
|
|||||||
- via http-proxy
|
- via http-proxy
|
||||||
- all operations can be tunneled through a http-proxy
|
- all operations can be tunneled through a http-proxy
|
||||||
- customizable to retrieve file modification date
|
- customizable to retrieve file modification date
|
||||||
- third party transfers
|
|
||||||
- no dir depth limit
|
- no dir depth limit
|
||||||
|
|
||||||
FTPS (*1)
|
FTPS (*1)
|
||||||
- explicit ftps:// support that use SSL on both connections
|
- implicit ftps:// support that use SSL on both connections
|
||||||
- implicit "AUTH TSL" and "AUTH SSL" usage to "upgrade" plain ftp://
|
- explicit "AUTH TSL" and "AUTH SSL" usage to "upgrade" plain ftp://
|
||||||
connection to use SSL for both or one of the connections
|
connection to use SSL for both or one of the connections
|
||||||
|
|
||||||
|
TFTP
|
||||||
|
- download / upload
|
||||||
|
|
||||||
TELNET
|
TELNET
|
||||||
- connection negotiation
|
- connection negotiation
|
||||||
- custom telnet options
|
- custom telnet options
|
||||||
@@ -106,10 +108,6 @@ LDAP (*2)
|
|||||||
DICT
|
DICT
|
||||||
- extended DICT URL support
|
- extended DICT URL support
|
||||||
|
|
||||||
GOPHER
|
|
||||||
- GET
|
|
||||||
- via http-proxy
|
|
||||||
|
|
||||||
FILE
|
FILE
|
||||||
- URL support
|
- URL support
|
||||||
- "uploads"
|
- "uploads"
|
||||||
@@ -118,10 +116,10 @@ FILE
|
|||||||
FOOTNOTES
|
FOOTNOTES
|
||||||
=========
|
=========
|
||||||
|
|
||||||
*1 = requires OpenSSL or GnuTLS
|
*1 = requires OpenSSL, GnuTLS or NSS
|
||||||
*2 = requires OpenLDAP
|
*2 = requires OpenLDAP
|
||||||
*3 = requires a GSSAPI-compliant library, such as Heimdal or similar.
|
*3 = requires a GSSAPI-compliant library, such as Heimdal or similar.
|
||||||
*4 = requires FBopenssl
|
*4 = requires FBopenssl
|
||||||
*5 = requires a krb4 library, such as the MIT one or similar.
|
*5 = requires a krb4 library, such as the MIT one or similar.
|
||||||
*6 = requires c-ares
|
*6 = requires c-ares
|
||||||
*7 = requires OpenSSL specificly, as GnuTLS only supports SSLv3 and TLSv1
|
*7 = requires OpenSSL or NSS, as GnuTLS only supports SSLv3 and TLSv1
|
||||||
|
|||||||
449
docs/INSTALL
449
docs/INSTALL
@@ -16,7 +16,6 @@ Installing Binary Packages
|
|||||||
|
|
||||||
UNIX
|
UNIX
|
||||||
====
|
====
|
||||||
|
|
||||||
A normal unix installation is made in three or four steps (after you've
|
A normal unix installation is made in three or four steps (after you've
|
||||||
unpacked the source archive):
|
unpacked the source archive):
|
||||||
|
|
||||||
@@ -52,12 +51,12 @@ UNIX
|
|||||||
path for your compiler/linker, you don't need to do anything special. If
|
path for your compiler/linker, you don't need to do anything special. If
|
||||||
you have OpenSSL installed in /usr/local/ssl, you can run configure like:
|
you have OpenSSL installed in /usr/local/ssl, you can run configure like:
|
||||||
|
|
||||||
./configure --with-ssl
|
./configure --with-ssl
|
||||||
|
|
||||||
If you have OpenSSL installed somewhere else (for example, /opt/OpenSSL,)
|
If you have OpenSSL installed somewhere else (for example, /opt/OpenSSL,)
|
||||||
you can run configure like this:
|
you can run configure like this:
|
||||||
|
|
||||||
./configure --with-ssl=/opt/OpenSSL
|
./configure --with-ssl=/opt/OpenSSL
|
||||||
|
|
||||||
If you insist on forcing a build without SSL support, even though you may
|
If you insist on forcing a build without SSL support, even though you may
|
||||||
have OpenSSL installed in your system, you can run configure like this:
|
have OpenSSL installed in your system, you can run configure like this:
|
||||||
@@ -129,180 +128,205 @@ UNIX
|
|||||||
If you're a curl developer and use gcc, you might want to enable more
|
If you're a curl developer and use gcc, you might want to enable more
|
||||||
debug options with the --enable-debug option.
|
debug options with the --enable-debug option.
|
||||||
|
|
||||||
|
curl can be built to use a whole range of libraries to provide various
|
||||||
|
useful services, and configure will try to auto-detect a decent
|
||||||
|
default. But if you want to alter it, you can select how to deal with
|
||||||
|
each individual library.
|
||||||
|
|
||||||
|
To build with GnuTLS support instead of OpenSSL for SSL/TLS, note that
|
||||||
|
you need to use both --without-ssl and --with-gnutls.
|
||||||
|
|
||||||
|
To build with yassl support instead of OpenSSL or GunTLS, you must build
|
||||||
|
yassl with its OpenSSL emulation enabled and point to that directory root
|
||||||
|
with configure --with-ssl.
|
||||||
|
|
||||||
|
To build with NSS support instead of OpenSSL for SSL/TLS, note that
|
||||||
|
you need to use both --without-ssl and --with-nss.
|
||||||
|
|
||||||
|
|
||||||
Win32
|
Win32
|
||||||
=====
|
=====
|
||||||
|
|
||||||
Without SSL:
|
Building Windows DLLs and C run-time (CRT) linkage issues
|
||||||
|
---------------------------------------------------------
|
||||||
|
|
||||||
MingW32 (GCC-2.95) style
|
As a general rule, building a DLL with static CRT linkage is highly
|
||||||
------------------------
|
discouraged, and intermixing CRTs in the same app is something to
|
||||||
Run the 'mingw32.bat' file to get the proper environment variables
|
avoid at any cost.
|
||||||
set, then run 'make mingw32' in the root dir.
|
|
||||||
|
|
||||||
If you have any problems linking libraries or finding header files, be
|
Reading and comprehension of Microsoft Knowledge Base articles
|
||||||
sure to verify that the provided "Makefile.m32" files use the proper
|
KB94248 and KB140584 is a must for any Windows developer. Especially
|
||||||
paths, and adjust as necessary.
|
important is full understanding if you are not going to follow the
|
||||||
|
advice given above.
|
||||||
|
|
||||||
Cygwin style
|
KB94248 - How To Use the C Run-Time
|
||||||
------------
|
http://support.microsoft.com/kb/94248/en-us
|
||||||
Almost identical to the unix installation. Run the configure script in
|
|
||||||
the curl root with 'sh configure'. Make sure you have the sh
|
|
||||||
executable in /bin/ or you'll see the configure fail towards the end.
|
|
||||||
|
|
||||||
Run 'make'
|
KB140584 - How to link with the correct C Run-Time (CRT) library
|
||||||
|
http://support.microsoft.com/kb/140584/en-us
|
||||||
|
|
||||||
Microsoft command line style
|
If your app is misbehaving in some strange way, or it is suffering
|
||||||
----------------------------
|
from memory corruption, before asking for further help, please try
|
||||||
Run the 'vcvars32.bat' file to get the proper environment variables
|
first to rebuild every single library your app uses as well as your
|
||||||
set, then run 'nmake vc' in the root dir.
|
app using the debug multithreaded dynamic C runtime.
|
||||||
|
|
||||||
The vcvars32.bat file is part of the Microsoft development
|
MingW32
|
||||||
environment.
|
-------
|
||||||
|
|
||||||
IDE-style
|
Run the 'mingw32.bat' file to get the proper environment variables set,
|
||||||
-------------------------
|
then run 'make mingw32' in the root dir. Use 'make mingw32-ssl' to build
|
||||||
If you use VC++, Borland or similar compilers. Include all lib source
|
curl SSL enabled.
|
||||||
files in a static lib "project" (all .c and .h files that is).
|
|
||||||
(you should name it libcurl or similar)
|
|
||||||
|
|
||||||
Make the sources in the src/ drawer be a "win32 console application"
|
If you have any problems linking libraries or finding header files, be sure
|
||||||
project. Name it curl.
|
to verify that the provided "Makefile.m32" files use the proper paths, and
|
||||||
|
adjust as necessary. It is also possible to override these paths with
|
||||||
|
environment variables, for example:
|
||||||
|
|
||||||
For VC++ 6, there's an included Makefile.vc6 that should be possible
|
set ZLIB_PATH=c:\zlib-1.2.3
|
||||||
to use out-of-the-box.
|
set OPENSSL_PATH=c:\openssl-0.9.8d
|
||||||
|
set LIBSSH2_PATH=c:\libssh2-0.15
|
||||||
|
|
||||||
|
ATTENTION: if you want to build with libssh2 support you have to use latest
|
||||||
|
sources fetched from CVS - the current 0.14 release will NOT work!
|
||||||
|
Use 'make mingw32-ssh2-ssl' to build curl with SSH2 and SSL enabled.
|
||||||
|
|
||||||
|
Cygwin
|
||||||
|
------
|
||||||
|
|
||||||
|
Almost identical to the unix installation. Run the configure script in the
|
||||||
|
curl root with 'sh configure'. Make sure you have the sh executable in
|
||||||
|
/bin/ or you'll see the configure fail towards the end.
|
||||||
|
|
||||||
|
Run 'make'
|
||||||
|
|
||||||
|
Dev-Cpp
|
||||||
|
-------
|
||||||
|
|
||||||
|
See the separate INSTALL.devcpp file for details.
|
||||||
|
|
||||||
|
MSVC from command line
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
Run the 'vcvars32.bat' file to get a proper environment. The
|
||||||
|
vcvars32.bat file is part of the Microsoft development environment and
|
||||||
|
you may find it in 'C:\Program Files\Microsoft Visual Studio\vc98\bin'
|
||||||
|
provided that you installed Visual C/C++ 6 in the default directory.
|
||||||
|
|
||||||
|
Then run 'nmake vc' in curl's root directory.
|
||||||
|
|
||||||
|
If you want to compile with zlib support, you will need to build
|
||||||
|
zlib (http://www.gzip.org/zlib/) as well. Please read the zlib
|
||||||
|
documentation on how to compile zlib. Define the ZLIB_PATH environment
|
||||||
|
variable to the location of zlib.h and zlib.lib, for example:
|
||||||
|
|
||||||
|
set ZLIB_PATH=c:\zlib-1.2.3
|
||||||
|
|
||||||
|
Then run 'nmake vc-zlib' in curl's root directory.
|
||||||
|
|
||||||
|
If you want to compile with SSL support you need the OpenSSL package.
|
||||||
|
Please read the OpenSSL documentation on how to compile and install
|
||||||
|
the OpenSSL libraries. The build process of OpenSSL generates the
|
||||||
|
libeay32.dll and ssleay32.dll files in the out32dll subdirectory in
|
||||||
|
the OpenSSL home directory. OpenSSL static libraries (libeay32.lib,
|
||||||
|
ssleay32.lib, RSAglue.lib) are created in the out32 subdirectory.
|
||||||
|
|
||||||
|
Before running nmake define the OPENSSL_PATH environment variable with
|
||||||
|
the root/base directory of OpenSSL, for example:
|
||||||
|
|
||||||
|
set OPENSSL_PATH=c:\openssl-0.9.8d
|
||||||
|
|
||||||
|
Then run 'nmake vc-ssl' or 'nmake vc-ssl-dll' in curl's root
|
||||||
|
directory. 'nmake vc-ssl' will create a libcurl static and dynamic
|
||||||
|
libraries in the lib subdirectory, as well as a statically linked
|
||||||
|
version of curl.exe in the src subdirectory. This statically linked
|
||||||
|
version is a standalone executable not requiring any DLL at
|
||||||
|
runtime. This make method requires that you have the static OpenSSL
|
||||||
|
libraries available in OpenSSL's out32 subdirectory.
|
||||||
|
'nmake vc-ssl-dll' creates the libcurl dynamic library and
|
||||||
|
links curl.exe against libcurl and OpenSSL dynamically.
|
||||||
|
This executable requires libcurl.dll and the OpenSSL DLLs
|
||||||
|
at runtime.
|
||||||
|
Run 'nmake vc-ssl-zlib' to build with both ssl and zlib support.
|
||||||
|
|
||||||
|
Borland C++ compiler
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
compile openssl
|
||||||
|
|
||||||
|
Make sure you include the paths to curl/include and openssl/inc32 in
|
||||||
|
your bcc32.cnf file
|
||||||
|
|
||||||
|
eg : -I"c:\Bcc55\include;c:\path_curl\include;c:\path_openssl\inc32"
|
||||||
|
|
||||||
|
Check to make sure that all of the sources listed in lib/Makefile.b32
|
||||||
|
are present in the /path_to_curl/lib directory. (Check the src
|
||||||
|
directory for missing ones.)
|
||||||
|
|
||||||
|
Make sure the environment variable "BCCDIR" is set to the install
|
||||||
|
location for the compiler eg : c:\Borland\BCC55
|
||||||
|
|
||||||
|
command line:
|
||||||
|
make -f /path_to_curl/lib/Makefile-ssl.b32
|
||||||
|
|
||||||
|
compile simplessl.c with appropriate links
|
||||||
|
|
||||||
|
c:\curl\docs\examples\> bcc32 -L c:\path_to_curl\lib\libcurl.lib
|
||||||
|
-L c:\borland\bcc55\lib\psdk\ws2_32.lib
|
||||||
|
-L c:\openssl\out32\libeay32.lib
|
||||||
|
-L c:\openssl\out32\ssleay32.lib
|
||||||
|
simplessl.c
|
||||||
|
|
||||||
|
|
||||||
With SSL:
|
MSVC IDE
|
||||||
|
--------
|
||||||
|
|
||||||
MingW32 (GCC-2.95) style
|
If you use VC++, Borland or similar compilers. Include all lib source
|
||||||
------------------------
|
files in a static lib "project" (all .c and .h files that is).
|
||||||
Run the 'mingw32.bat' file to get the proper environment variables
|
(you should name it libcurl or similar)
|
||||||
set, then run 'make mingw32-ssl' in the root dir.
|
|
||||||
|
|
||||||
If you have any problems linking libraries or finding header files, be
|
Make the sources in the src/ drawer be a "win32 console application"
|
||||||
sure to look at the provided "Makefile.m32" files for the proper
|
project. Name it curl.
|
||||||
paths, and adjust as necessary.
|
|
||||||
|
|
||||||
Cygwin style
|
For VC++ 6, there's an included Makefile.vc6 that should be possible
|
||||||
------------
|
to use out-of-the-box.
|
||||||
Haven't done, nor got any reports on how to do. It should although be
|
|
||||||
identical to the unix setup for the same purpose. See above.
|
|
||||||
|
|
||||||
Microsoft command line style
|
|
||||||
----------------------------
|
|
||||||
|
|
||||||
Run the 'vcvars32.bat' file to get a proper environment. The
|
|
||||||
vcvars32.bat file is part of the Microsoft development environment and
|
|
||||||
you may find it in 'C:\Program Files\Microsoft Visual Studio\vc98\bin'
|
|
||||||
provided that you installed Visual C/C++ 6 in the default directory.
|
|
||||||
|
|
||||||
Then run 'nmake vc' in curl's root directory.
|
|
||||||
|
|
||||||
If you want to compile with zlib support, you will need to build
|
|
||||||
zlib (http://www.gzip.org/zlib/) as well. Please read the zlib
|
|
||||||
documentation on how to compile zlib. Define the ZLIB_PATH environment
|
|
||||||
variable to the location of zlib.h and zlib.lib, for example:
|
|
||||||
|
|
||||||
set ZLIB_PATH=c:\zlib-1.2.1
|
|
||||||
|
|
||||||
Then run 'nmake vc-zlib' in curl's root directory.
|
|
||||||
|
|
||||||
If you want to compile with SSL support you need the OpenSSL package.
|
|
||||||
Please read the OpenSSL documentation on how to compile and install
|
|
||||||
the OpenSSL libraries. The build process of OpenSSL generates the
|
|
||||||
libeay32.dll and ssleay32.dll files in the out32dll subdirectory in
|
|
||||||
the OpenSSL home directory. OpenSSL static libraries (libeay32.lib,
|
|
||||||
ssleay32.lib, RSAglue.lib) are created in the out32 subdirectory.
|
|
||||||
|
|
||||||
Before running nmake define the OPENSSL_PATH environment variable with
|
|
||||||
the root/base directory of OpenSSL, for example:
|
|
||||||
|
|
||||||
set OPENSSL_PATH=c:\openssl-0.9.7d
|
|
||||||
|
|
||||||
Then run 'nmake vc-ssl' or 'nmake vc-ssl-dll' in curl's root
|
|
||||||
directory. 'nmake vc-ssl' will create a libcurl static and dynamic
|
|
||||||
libraries in the lib subdirectory, as well as a statically linked
|
|
||||||
version of curl.exe in the src subdirectory. This statically linked
|
|
||||||
version is a standalone executable not requiring any DLL at
|
|
||||||
runtime. This make method requires that you have the static OpenSSL
|
|
||||||
libraries available in OpenSSL's out32 subdirectory.
|
|
||||||
'nmake vc-ssl-dll' creates the libcurl dynamic library and
|
|
||||||
links curl.exe against libcurl and OpenSSL dynamically.
|
|
||||||
This executable requires libcurl.dll and the OpenSSL DLLs
|
|
||||||
at runtime.
|
|
||||||
Run 'nmake vc-ssl-zlib' to build with both ssl and zlib support.
|
|
||||||
|
|
||||||
Microsoft / Borland style
|
|
||||||
-------------------------
|
|
||||||
If you have OpenSSL, and want curl to take advantage of it, edit your
|
|
||||||
project properties to use the SSL include path, link with the SSL libs
|
|
||||||
and define the USE_SSLEAY symbol.
|
|
||||||
|
|
||||||
Using Borland C++ compiler version 5.5.1 (available as free download
|
|
||||||
from Borland's site)
|
|
||||||
---------------------------------------------------------------------
|
|
||||||
|
|
||||||
compile openssl
|
|
||||||
|
|
||||||
Make sure you include the paths to curl/include and openssl/inc32 in
|
|
||||||
your bcc32.cnf file
|
|
||||||
|
|
||||||
|
|
||||||
eg : -I"c:\Bcc55\include;c:\path_curl\include;c:\path_openssl\inc32"
|
Disabling Specific Protocols in Win32 builds
|
||||||
|
--------------------------------------------
|
||||||
|
|
||||||
Check to make sure that all of the sources listed in lib/Makefile.b32
|
The configure utility, unfortunately, is not available for the Windows
|
||||||
are present in the /path_to_curl/lib directory. (Check the src
|
environment, therefore, you cannot use the various disable-protocol
|
||||||
directory for missing ones.)
|
options of the configure utility on this platform.
|
||||||
|
|
||||||
Make sure the environment variable "BCCDIR" is set to the install
|
However, you can use the following defines to disable specific
|
||||||
location for the compiler eg : c:\Borland\BCC55
|
protocols:
|
||||||
|
|
||||||
command line:
|
HTTP_ONLY disables all protocols except HTTP
|
||||||
make -f /path_to_curl/lib/Makefile-ssl.b32
|
CURL_DISABLE_FTP disables FTP
|
||||||
|
CURL_DISABLE_LDAP disables LDAP
|
||||||
|
CURL_DISABLE_TELNET disables TELNET
|
||||||
|
CURL_DISABLE_DICT disables DICT
|
||||||
|
CURL_DISABLE_FILE disables FILE
|
||||||
|
|
||||||
compile simplessl.c with appropriate links
|
If you want to set any of these defines you have the following
|
||||||
|
possibilities:
|
||||||
|
|
||||||
c:\curl\docs\examples\> bcc32 -L c:\path_to_curl\lib\libcurl.lib
|
- Modify lib/setup.h
|
||||||
-L c:\borland\bcc55\lib\psdk\ws2_32.lib
|
- Modify lib/Makefile.vc6
|
||||||
-L c:\openssl\out32\libeay32.lib
|
- Add defines to Project/Settings/C/C++/General/Preprocessor Definitions
|
||||||
-L c:\openssl\out32\ssleay32.lib
|
in the curllib.dsw/curllib.dsp Visual C++ 6 IDE project.
|
||||||
simplessl.c
|
|
||||||
|
|
||||||
Disabling Specific Protocols:
|
|
||||||
|
|
||||||
The configure utility, unfortunately, is not available for the Windows
|
|
||||||
environment, therefore, you cannot use the various disable-protocol
|
|
||||||
options of the configure utility on this platform.
|
|
||||||
|
|
||||||
However, you can use the following defines to disable specific
|
|
||||||
protocols:
|
|
||||||
|
|
||||||
HTTP_ONLY disables all protocols except HTTP
|
|
||||||
CURL_DISABLE_FTP disables FTP
|
|
||||||
CURL_DISABLE_LDAP disables LDAP
|
|
||||||
CURL_DISABLE_TELNET disables TELNET
|
|
||||||
CURL_DISABLE_DICT disables DICT
|
|
||||||
CURL_DISABLE_FILE disables FILE
|
|
||||||
CURL_DISABLE_GOPHER disables GOPHER
|
|
||||||
|
|
||||||
If you want to set any of these defines you have the following
|
|
||||||
possibilities:
|
|
||||||
|
|
||||||
- Modify lib/setup.h
|
|
||||||
- Modify lib/Makefile.vc6
|
|
||||||
- Add defines to Project/Settings/C/C++/General/Preprocessor Definitions
|
|
||||||
in the curllib.dsw/curllib.dsp Visual C++ 6 IDE project.
|
|
||||||
|
|
||||||
|
|
||||||
Important (with SSL or not):
|
Important static libcurl usage note
|
||||||
When building an application that uses the static libcurl library, you
|
-----------------------------------
|
||||||
must add '-DCURL_STATICLIB' to your CFLAGS. Otherwise the linker will
|
|
||||||
look for dynamic import symbols.
|
When building an application that uses the static libcurl library, you must
|
||||||
|
add '-DCURL_STATICLIB' to your CFLAGS. Otherwise the linker will look for
|
||||||
|
dynamic import symbols.
|
||||||
|
|
||||||
|
|
||||||
IBM OS/2
|
IBM OS/2
|
||||||
========
|
========
|
||||||
|
|
||||||
Building under OS/2 is not much different from building under unix.
|
Building under OS/2 is not much different from building under unix.
|
||||||
You need:
|
You need:
|
||||||
|
|
||||||
@@ -330,6 +354,7 @@ IBM OS/2
|
|||||||
If you're getting huge binaries, probably your makefiles have the -g in
|
If you're getting huge binaries, probably your makefiles have the -g in
|
||||||
CFLAGS.
|
CFLAGS.
|
||||||
|
|
||||||
|
|
||||||
VMS
|
VMS
|
||||||
===
|
===
|
||||||
(The VMS section is in whole contributed by the friendly Nico Baggus)
|
(The VMS section is in whole contributed by the friendly Nico Baggus)
|
||||||
@@ -400,6 +425,7 @@ VMS
|
|||||||
13-jul-2001
|
13-jul-2001
|
||||||
N. Baggus
|
N. Baggus
|
||||||
|
|
||||||
|
|
||||||
QNX
|
QNX
|
||||||
===
|
===
|
||||||
(This section was graciously brought to us by David Bentham)
|
(This section was graciously brought to us by David Bentham)
|
||||||
@@ -451,17 +477,16 @@ AmigaOS
|
|||||||
|
|
||||||
NetWare
|
NetWare
|
||||||
=======
|
=======
|
||||||
|
|
||||||
To compile curl.nlm / libcurl.nlm you need:
|
To compile curl.nlm / libcurl.nlm you need:
|
||||||
- either any gcc / nlmconv, or CodeWarrior 7 PDK 4 or later.
|
- either any gcc / nlmconv, or CodeWarrior 7 PDK 4 or later.
|
||||||
- gnu make and awk running on the platform you compile on;
|
- gnu make and awk running on the platform you compile on;
|
||||||
native Win32 versions can be downloaded from:
|
native Win32 versions can be downloaded from:
|
||||||
http://www.gknw.com/development/prgtools/
|
http://www.gknw.net/development/prgtools/
|
||||||
- recent Novell LibC SDK available from:
|
- recent Novell LibC SDK available from:
|
||||||
http://developer.novell.com/ndk/libc.htm
|
http://developer.novell.com/ndk/libc.htm
|
||||||
- optional zlib sources (at the moment only dynamic linking with zlib.imp);
|
- optional zlib sources (at the moment only dynamic linking with zlib.imp);
|
||||||
sources with NetWare Makefile can be obtained from:
|
sources with NetWare Makefile can be obtained from:
|
||||||
http://www.gknw.com/mirror/zlib/
|
http://www.gknw.net/mirror/zlib/
|
||||||
- optional OpenSSL sources (version 0.9.8 or later which builds with BSD);
|
- optional OpenSSL sources (version 0.9.8 or later which builds with BSD);
|
||||||
|
|
||||||
Set a search path to your compiler, linker and tools; on Linux make
|
Set a search path to your compiler, linker and tools; on Linux make
|
||||||
@@ -475,14 +500,101 @@ NetWare
|
|||||||
with 'OSTYPE=linux-rh9-gnu' and the detection in the Makefile worked...
|
with 'OSTYPE=linux-rh9-gnu' and the detection in the Makefile worked...
|
||||||
Any help in testing appreciated!
|
Any help in testing appreciated!
|
||||||
Builds automatically created 8 times a day from current CVS are here:
|
Builds automatically created 8 times a day from current CVS are here:
|
||||||
http://www.gknw.com/mirror/curl/autobuilds/
|
http://www.gknw.net/mirror/curl/autobuilds/
|
||||||
the status of these builds can be viewed at the autobuild table:
|
the status of these builds can be viewed at the autobuild table:
|
||||||
http://curl.haxx.se/auto/
|
http://curl.haxx.se/auto/
|
||||||
|
|
||||||
|
|
||||||
|
eCos
|
||||||
|
====
|
||||||
|
curl does not use the eCos build system, so you must first build eCos
|
||||||
|
separately, then link curl to the resulting eCos library. Here's a sample
|
||||||
|
configure line to do so on an x86 Linux box targeting x86:
|
||||||
|
|
||||||
|
GCCLIB=`gcc -print-libgcc-file-name` && \
|
||||||
|
CFLAGS="-D__ECOS=1 -nostdinc -I$ECOS_INSTALL/include \
|
||||||
|
-I`dirname $GCCLIB`/include" \
|
||||||
|
LDFLAGS="-nostdlib -Wl,--gc-sections -Wl,-static \
|
||||||
|
-L$ECOS_INSTALL/lib -Ttarget.ld -ltarget" \
|
||||||
|
./configure --host=i386 --disable-shared \
|
||||||
|
--without-ssl --without-zlib --disable-manual --disable-ldap
|
||||||
|
|
||||||
|
In most cases, eCos users will be using libcurl from within a custom
|
||||||
|
embedded application. Using the standard 'curl' executable from
|
||||||
|
within eCos means facing the limitation of the standard eCos C
|
||||||
|
startup code which does not allow passing arguments in main(). To
|
||||||
|
run 'curl' from eCos and have it do something useful, you will need
|
||||||
|
to either modify the eCos startup code to pass in some arguments, or
|
||||||
|
modify the curl application itself to retrieve its arguments from
|
||||||
|
some location set by the bootloader or hard-code them.
|
||||||
|
|
||||||
|
Something like the following patch could be used to hard-code some
|
||||||
|
arguments. The MTAB_ENTRY line mounts a RAM disk as the root filesystem
|
||||||
|
(without mounting some kind of filesystem, eCos errors out all file
|
||||||
|
operations which curl does not take to well). The next section synthesizes
|
||||||
|
some command-line arguments for curl to use, in this case to direct curl
|
||||||
|
to read further arguments from a file. It then creates that file on the
|
||||||
|
RAM disk and places within it a URL to download: a file: URL that
|
||||||
|
just happens to point to the configuration file itself. The results
|
||||||
|
of running curl in this way is the contents of the configuration file
|
||||||
|
printed to the console.
|
||||||
|
|
||||||
|
--- src/main.c 19 Jul 2006 19:09:56 -0000 1.363
|
||||||
|
+++ src/main.c 24 Jul 2006 21:37:23 -0000
|
||||||
|
@@ -4286,11 +4286,31 @@
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
+#ifdef __ECOS
|
||||||
|
+#include <cyg/fileio/fileio.h>
|
||||||
|
+MTAB_ENTRY( testfs_mte1,
|
||||||
|
+ "/",
|
||||||
|
+ "ramfs",
|
||||||
|
+ "",
|
||||||
|
+ 0);
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
int res;
|
||||||
|
struct Configurable config;
|
||||||
|
+#ifdef __ECOS
|
||||||
|
+ char *args[] = {"ecos-curl", "-K", "curlconf.txt"};
|
||||||
|
+ FILE *f;
|
||||||
|
+ argc = sizeof(args)/sizeof(args[0]);
|
||||||
|
+ argv = args;
|
||||||
|
+
|
||||||
|
+ f = fopen("curlconf.txt", "w");
|
||||||
|
+ if (f) {
|
||||||
|
+ fprintf(f, "--url file:curlconf.txt");
|
||||||
|
+ fclose(f);
|
||||||
|
+ }
|
||||||
|
+#endif
|
||||||
|
memset(&config, 0, sizeof(struct Configurable));
|
||||||
|
|
||||||
|
config.errors = stderr; /* default errors to stderr */
|
||||||
|
|
||||||
|
|
||||||
|
Minix
|
||||||
|
=====
|
||||||
|
curl can be compiled on Minix 3 using gcc (ACK has a few problems due
|
||||||
|
to mismatched headers and libraries as of ver. 3.1.2). The gcc and bash
|
||||||
|
packages must be installed first. The default heap size allocated to
|
||||||
|
bash is inadequate for running configure and will result in out of memory
|
||||||
|
errors. Increase it with the command:
|
||||||
|
|
||||||
|
chmem =2048000 /usr/local/bin/bash
|
||||||
|
|
||||||
|
Make sure gcc and bash are in the PATH then configure curl with a
|
||||||
|
command like this:
|
||||||
|
|
||||||
|
./configure GREP=/usr/bin/grep AR=/usr/gnu/bin/gar --disable-ldap
|
||||||
|
|
||||||
|
Then simply run 'make'.
|
||||||
|
|
||||||
|
|
||||||
CROSS COMPILE
|
CROSS COMPILE
|
||||||
=============
|
=============
|
||||||
|
|
||||||
(This section was graciously brought to us by Jim Duey, with additions by
|
(This section was graciously brought to us by Jim Duey, with additions by
|
||||||
Dan Fandrich)
|
Dan Fandrich)
|
||||||
|
|
||||||
@@ -528,13 +640,17 @@ CROSS COMPILE
|
|||||||
|
|
||||||
./configure --host=ARCH-OS
|
./configure --host=ARCH-OS
|
||||||
|
|
||||||
|
|
||||||
|
REDUCING SIZE
|
||||||
|
=============
|
||||||
There are a number of configure options that can be used to reduce the
|
There are a number of configure options that can be used to reduce the
|
||||||
size of libcurl for embedded applications where binary size is an
|
size of libcurl for embedded applications where binary size is an
|
||||||
important factor. First, be sure to set the CFLAGS environment variable
|
important factor. First, be sure to set the CFLAGS variable when
|
||||||
when configuring with any compiler optimization flags to reduce the
|
configuring with any relevant compiler optimization flags to reduce the
|
||||||
size of the binary. For gcc, this would mean at minimum:
|
size of the binary. For gcc, this would mean at minimum the -Os option
|
||||||
|
and probably the -march=X option as well, e.g.:
|
||||||
|
|
||||||
env CFLAGS='-Os' ./configure ...
|
./configure CFLAGS='-Os' ...
|
||||||
|
|
||||||
Be sure to specify as many --disable- and --without- flags on the configure
|
Be sure to specify as many --disable- and --without- flags on the configure
|
||||||
command-line as you can to disable all the libcurl features that you
|
command-line as you can to disable all the libcurl features that you
|
||||||
@@ -548,10 +664,24 @@ CROSS COMPILE
|
|||||||
--disable-crypto-auth (disables HTTP cryptographic authentication)
|
--disable-crypto-auth (disables HTTP cryptographic authentication)
|
||||||
--disable-ipv6 (disables support for IPv6)
|
--disable-ipv6 (disables support for IPv6)
|
||||||
--disable-verbose (eliminates debugging strings and error code strings)
|
--disable-verbose (eliminates debugging strings and error code strings)
|
||||||
|
--enable-hidden-symbols (eliminates unneeded symbols in the shared library)
|
||||||
--without-libidn (disables support for the libidn DNS library)
|
--without-libidn (disables support for the libidn DNS library)
|
||||||
--without-ssl (disables support for SSL/TLS)
|
--without-ssl (disables support for SSL/TLS)
|
||||||
--without-zlib (disables support for on-the-fly decompression)
|
--without-zlib (disables support for on-the-fly decompression)
|
||||||
|
|
||||||
|
The GNU linker has a number of options to reduce the size of the libcurl
|
||||||
|
dynamic libraries on some platforms even further. Specify them by giving
|
||||||
|
the options -Wl,-Bsymbolic and -Wl,-s on the gcc command-line.
|
||||||
|
Be sure also to strip debugging symbols from your binaries after
|
||||||
|
compiling using 'strip' (or the appropriate variant if cross-compiling).
|
||||||
|
If space is really tight, you may be able to remove some unneeded
|
||||||
|
sections of the shared library using the -R option to objcopy (e.g. the
|
||||||
|
.comment section).
|
||||||
|
|
||||||
|
Using these techniques it is possible to create an HTTP-only shared
|
||||||
|
libcurl library for i386 Linux platforms that is less than 90 KB in
|
||||||
|
size (as of version 7.15.4).
|
||||||
|
|
||||||
You may find that statically linking libcurl to your application will
|
You may find that statically linking libcurl to your application will
|
||||||
result in a lower total size.
|
result in a lower total size.
|
||||||
|
|
||||||
@@ -581,6 +711,7 @@ PORTS
|
|||||||
- PowerPC Linux
|
- PowerPC Linux
|
||||||
- PowerPC Mac OS 9
|
- PowerPC Mac OS 9
|
||||||
- PowerPC Mac OS X
|
- PowerPC Mac OS X
|
||||||
|
- SuperH4 Linux 2.6.X
|
||||||
- SINIX-Z v5
|
- SINIX-Z v5
|
||||||
- Sparc Linux
|
- Sparc Linux
|
||||||
- Sparc Solaris 2.4, 2.5, 2.5.1, 2.6, 7, 8, 9, 10
|
- Sparc Solaris 2.4, 2.5, 2.5.1, 2.6, 7, 8, 9, 10
|
||||||
@@ -589,12 +720,15 @@ PORTS
|
|||||||
- StrongARM/ARM7/ARM9 Linux 2.4, 2.6
|
- StrongARM/ARM7/ARM9 Linux 2.4, 2.6
|
||||||
- StrongARM NetBSD 1.4.1
|
- StrongARM NetBSD 1.4.1
|
||||||
- Ultrix 4.3a
|
- Ultrix 4.3a
|
||||||
|
- UNICOS 9.0
|
||||||
- i386 BeOS
|
- i386 BeOS
|
||||||
- i386 DOS
|
- i386 DOS
|
||||||
|
- i386 eCos 1.3.1
|
||||||
- i386 Esix 4.1
|
- i386 Esix 4.1
|
||||||
- i386 FreeBSD
|
- i386 FreeBSD
|
||||||
- i386 HURD
|
- i386 HURD
|
||||||
- i386 Linux 1.3, 2.0, 2.2, 2.3, 2.4, 2.6
|
- i386 Linux 1.3, 2.0, 2.2, 2.3, 2.4, 2.6
|
||||||
|
- i386 MINIX 3.1.2
|
||||||
- i386 NetBSD
|
- i386 NetBSD
|
||||||
- i386 Novell NetWare
|
- i386 Novell NetWare
|
||||||
- i386 OS/2
|
- i386 OS/2
|
||||||
@@ -619,3 +753,6 @@ OpenSSL http://www.openssl.org
|
|||||||
MingW http://www.mingw.org
|
MingW http://www.mingw.org
|
||||||
OpenLDAP http://www.openldap.org
|
OpenLDAP http://www.openldap.org
|
||||||
Zlib http://www.gzip.org/zlib/
|
Zlib http://www.gzip.org/zlib/
|
||||||
|
libssh2 http://www.libssh2.org
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
302
docs/INSTALL.devcpp
Normal file
302
docs/INSTALL.devcpp
Normal file
@@ -0,0 +1,302 @@
|
|||||||
|
DevCpp-Mingw Install & Compilation Sept 2005
|
||||||
|
==================================
|
||||||
|
|
||||||
|
Reference Emails available at curl@haxx.se:
|
||||||
|
|
||||||
|
Libcurl Install and Use Issues
|
||||||
|
Awaiting an Answer for Win 32 Install
|
||||||
|
res = curl_easy_perform(curl); Error
|
||||||
|
Makefile Issues
|
||||||
|
|
||||||
|
|
||||||
|
Having previously done a thorough review of what was available that met my
|
||||||
|
requirements under GPL, I settled for Libcurl as the software of choice for
|
||||||
|
many reasons not the least of which was the support.
|
||||||
|
|
||||||
|
Background
|
||||||
|
----------
|
||||||
|
|
||||||
|
This quest started when I innocently tried to incorporate the libcurl library
|
||||||
|
into my simple source code. I figured that a few easy steps would accomplish
|
||||||
|
this without major headaches. I had no idea that I would be facing an almost
|
||||||
|
insurmountable challenge.
|
||||||
|
|
||||||
|
The main problem lies in two areas. First the bulk of support for libcurl
|
||||||
|
exists for a Unix/linux command line environments. This is of little help when
|
||||||
|
it comes to Windows O/S.
|
||||||
|
|
||||||
|
Secondly the help that does exist for the Windows O/S focused around mingw
|
||||||
|
thru a command line argument environment.
|
||||||
|
|
||||||
|
You may ask "Why is this a problem?"
|
||||||
|
|
||||||
|
I'm using a Windows O/S with DevCpp. For those of you who are unfamiliar with
|
||||||
|
DevCpp, it is a window shell GUI that replaces the command line environment
|
||||||
|
for gcc. A definite improvement that I am unwilling to give up. However using
|
||||||
|
DevCpp presented its own set of issues. Inadvertently I also made some
|
||||||
|
careless errors such as compiling the 7.14 version of Makefile with an older
|
||||||
|
version of source code. Thanks to Dan Fandrich for picking this up.
|
||||||
|
|
||||||
|
I did eventually with the help of Daniel, Phillipe and others manage to
|
||||||
|
implement successfully (the only mingw available version)
|
||||||
|
curl-7.13.0-win32-ssl-devel-mingw32 into the DevCpp environment. Only the
|
||||||
|
dynamic libcurl.dll libcurldll.a libraries worked. The static library which I
|
||||||
|
was interested in did not. Furthermore when I tried to implement one of the
|
||||||
|
examples included with the curl package (get info.c) it caused the executable
|
||||||
|
to crash. Tracing the bug I found it in the code and function res =
|
||||||
|
curl_easy_perform(curl);.
|
||||||
|
|
||||||
|
At this point I had to make a choice as to whether invest my limited
|
||||||
|
time-energy resource to fixing the bug or to compile the new version
|
||||||
|
available. After searching the archives I found a very similar or the same bug
|
||||||
|
reported from version 7.12x on. Daniel did inform me that he thought that this
|
||||||
|
bug had been fixed with the latest version. So I proceeded to compile the
|
||||||
|
latest SSL version where I faced other challenges.
|
||||||
|
|
||||||
|
In order to make this process unremarkable for others using the same
|
||||||
|
environment I decided to document the process so that others will find it
|
||||||
|
routine. It would be a shame if newbies could not implement this excellent
|
||||||
|
package for their use.
|
||||||
|
|
||||||
|
I would like to thank the many others in this forum and in the DevCpp forum
|
||||||
|
for their help. Without your help I may either have given up or it would have
|
||||||
|
taken me many times longer to achieve success.
|
||||||
|
|
||||||
|
The Cookbook Approach
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
This discussion will be confined to a SSL static library compilation and
|
||||||
|
installation. Limited mention and comments will be inserted where appropriate
|
||||||
|
to help with non-SSL, dynamic libraries and executables.
|
||||||
|
|
||||||
|
|
||||||
|
Using Makefile from DevCpp to compile Libcurl libraries
|
||||||
|
|
||||||
|
Preamble
|
||||||
|
--------
|
||||||
|
|
||||||
|
Using the latest version release - curl-7.14.0.tar.gz. Curl source code is
|
||||||
|
platform independent. This simply means that the source code can be compiled
|
||||||
|
for any Operating System (Linux/Unix Windows etc. and variations of thereof).
|
||||||
|
|
||||||
|
The first thing to note is that inside curl-7.14.0 you will find two folders
|
||||||
|
lib and src. Both contain Makefile.m32 (required for win mingw library or exe
|
||||||
|
compilation) files which are different. The main difference between these two
|
||||||
|
folders and the makefiles is that the src folder contents are used to compile
|
||||||
|
an executable file(curl.exe) while the lib folder contents are used to compile
|
||||||
|
a static (libcurl.a) and dynamic (libcurl.dll & libcurldll.a) file that can be
|
||||||
|
used to compile libcurl with your own source code so that one can use and
|
||||||
|
access all libcurl functions.
|
||||||
|
|
||||||
|
Before we start please make sure that DevCpp is installed properly. In
|
||||||
|
particular make sure you have no spaces in the name of any of the directories
|
||||||
|
and subdirectories where DevCpp is installed. Failure to comply with the
|
||||||
|
install instructions may produce erratic behaviour in DevCpp. For further info
|
||||||
|
check the following sites
|
||||||
|
|
||||||
|
http://aditsu.freeunixhost.com/dev-cpp-faq.html
|
||||||
|
http://sourceforge.net/forum/message.php?msg_id=3252213
|
||||||
|
|
||||||
|
As I have mentioned before I will confine this to the SSL Library compilations
|
||||||
|
but the process is very similar for compilation of the executable - curl.exe;
|
||||||
|
just substitute the src folder makefile in its stead.
|
||||||
|
|
||||||
|
First use a text processor Notepad, or your own favourite text processor. To
|
||||||
|
engage your favourite text processor, select Makefile.m32 click once with your
|
||||||
|
mouse on file icon; icon turns blue, press the shift key and right-click on
|
||||||
|
mouse, menu appears select "Open with", select your favourite text processor.
|
||||||
|
|
||||||
|
Next read the contents of Makefile.m32. It includes instructions on its use.
|
||||||
|
|
||||||
|
Method I - DOS Command Line
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
Note - The only reason I have included this method is that Method II which is
|
||||||
|
the preferred method for compiling does not allow for the setting of option
|
||||||
|
switches (e.g. SSL = 1 or SSL =0). At least that's what they tell me at the
|
||||||
|
Dev-Cpp forum.
|
||||||
|
|
||||||
|
1 - Make a copy of (D:\Dev-Cpp\bin) bin folder and name it "bin Original"
|
||||||
|
place it in the Dev-Cpp installed directory (D:\Dev-Cpp\ for this example)
|
||||||
|
|
||||||
|
2 - Copy the entire contents of the LIB folder of curl-7.14.0.tar.gz or zip
|
||||||
|
version into the bin folder above (D:\Dev-Cpp\bin). The reason being is that
|
||||||
|
the make.exe file resides in this folder. Make.exe will use - Makefile.m32,
|
||||||
|
Makefile.inc, and the source code included in the lib folder to compile the
|
||||||
|
source code. There is a PATH issue with make.exe that remains unresolved at
|
||||||
|
least for me. Unless the entire source code to be compiled is placed entirely
|
||||||
|
within the directory of make.exe an error message will be generated - "file
|
||||||
|
xxxx.yyy not available".
|
||||||
|
|
||||||
|
3- Go to Dev-Cpp\bin and double click on make .exe. You will see a DOS window
|
||||||
|
quickly pop up and close very quickly. Not to worry! Please do not skip this
|
||||||
|
step.
|
||||||
|
|
||||||
|
4- Click on the start button\Programs\MS-DOS Prompt.Once the DOS Window is up
|
||||||
|
Type the disk drive letter (e.g. E: ) engage the enter button. The path should
|
||||||
|
automatically take you to the directory of the make.exe file.
|
||||||
|
|
||||||
|
5- To compile the source code simply type at the DOS prompt make -f
|
||||||
|
Makefile.m32 as per instructions contained in the Makefile.m32 file (use any
|
||||||
|
text processor to read instructions). I don't believe that this makefile
|
||||||
|
allows for the option of non SSL. Ignore any warnings.
|
||||||
|
|
||||||
|
6- Collect and make copies of libcurl.a, libcurl.dll, libcurldll.a and any *.o
|
||||||
|
compilations you might need in another directory outside of the bin directory
|
||||||
|
as you will need this files shortly to set up libcurl for use with
|
||||||
|
Dev-cpp. For most apps *.o is not required. Later on we will show what to do
|
||||||
|
with these files.
|
||||||
|
|
||||||
|
7- You are finished but before closing we need to do cleanup - erase the bin
|
||||||
|
folder and rename the "bin Original" folder created in step 1 to bin.
|
||||||
|
|
||||||
|
Note to compile a curl executable the process is probably similar but instead
|
||||||
|
of using the LIB folder contents use the SRC folder contents and Makefiles in
|
||||||
|
curl-7.14.0.tar.gz. File directories relative placements must be respected for
|
||||||
|
compiling to take place successfully. This may not be possible with the PATH
|
||||||
|
problem that make.exe experiences. If anyone has solved this PATH issue and
|
||||||
|
please make sure it actually works on Win 9x/2000/XP before letting me
|
||||||
|
know. Then please let me or Daniel in on the solution so that it can be
|
||||||
|
included with these instructions. Thanks.
|
||||||
|
|
||||||
|
or
|
||||||
|
|
||||||
|
Method II - Dev-Cpp GUI
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
1- Copy the entire contents of the LIB folder of curl-7.14.0.tar.gz or zip
|
||||||
|
version into any folder outside of (Dev-Cpp\bin).
|
||||||
|
|
||||||
|
2- Drop the File/New/click on Project.
|
||||||
|
|
||||||
|
3- New Project Dialogue box appears. Double click on the Static Library.
|
||||||
|
|
||||||
|
4- Create Project Dialogue box appears. Select the LIB folder location to
|
||||||
|
place and locate your Project File Name. Placing the Project File Name
|
||||||
|
elsewhere may cause problems (PATH issue problem again).
|
||||||
|
|
||||||
|
5- Drop down the Project/Project Options. Project Options Dialogue box
|
||||||
|
appears.
|
||||||
|
|
||||||
|
6- Select the Makefile tab in the Project Options Dialogue Box. Check Box -
|
||||||
|
Use Custom Makefile. Click on the Folder icon at the extreme right of the
|
||||||
|
Check Box. Select Makefile.m32 in the folder wherever you have placed the
|
||||||
|
contents of the LIB Folder. Press OK and close the Dialogue Box.
|
||||||
|
|
||||||
|
7- Drop the Menu Project/Click on Add to Project. Open File Dialogue Box
|
||||||
|
appears. The Dialogue Box should open in the folder wherever you have placed
|
||||||
|
the contents of the LIB Folder. If not go there.
|
||||||
|
|
||||||
|
8- Select Crtl-A to select all files in the LIB folder. Click on open to add
|
||||||
|
files and close box. Wait till all files are added. This may take 30 seconds
|
||||||
|
or longer.
|
||||||
|
|
||||||
|
9- Drop the Menu Execute/Click on Compile.
|
||||||
|
|
||||||
|
10- That's it.
|
||||||
|
|
||||||
|
|
||||||
|
The following steps must be completed if Curl is to work properly
|
||||||
|
=================================================================
|
||||||
|
|
||||||
|
LIB folder inclusions (*.a placement)
|
||||||
|
-------------------------------------
|
||||||
|
|
||||||
|
1- Refer to Method I - DOS Command Line point # 6 Take libcurl.a, libcurldll.a
|
||||||
|
and install it in the directory C( or whichever drive Dev is installed)
|
||||||
|
:\Dev-Cpp\lib.
|
||||||
|
|
||||||
|
|
||||||
|
Include Folder
|
||||||
|
--------------
|
||||||
|
|
||||||
|
1- Create a new folder by the name of curl (do not change the name curl to
|
||||||
|
some other name as it will cause major issues) in the directory
|
||||||
|
C:\Dev-Cpp\include.
|
||||||
|
|
||||||
|
2- Copy the entire contents of the curl folder of curl-7.14.0.tar.gz or zip
|
||||||
|
version into the newly created curl directory - C:\Dev-Cpp\include\curl.
|
||||||
|
|
||||||
|
Links To Include And Lib Folder
|
||||||
|
-------------------------------
|
||||||
|
|
||||||
|
1- Drop the Menu - Tools\Compiler Options\Directories\Libraries. Make sure
|
||||||
|
that C( or whichever drive Dev is installed):\DEV-CPP\lib is included.
|
||||||
|
|
||||||
|
2- Next select the Menu - Tools\Compiler Options\Directories\C Includes. Make
|
||||||
|
sure that C:\DEV-CPP\include and C:\Dev-Cpp\include\curl are included.
|
||||||
|
|
||||||
|
3- Next select the Menu - Tools\Compiler Options\Directories\C++
|
||||||
|
Includes. Make sure that C:\DEV-CPP\include and C:\Dev-Cpp\include\curl are
|
||||||
|
included.
|
||||||
|
|
||||||
|
Linker Links
|
||||||
|
------------
|
||||||
|
|
||||||
|
1- Drop the Menu - Tools\Compiler Options\Directories\Compiler.
|
||||||
|
|
||||||
|
2- Make sure that the box "Add these commands to the linker command line" is
|
||||||
|
checked.
|
||||||
|
|
||||||
|
3- Include in the white space immediately below the box referred in 2 -lcurl
|
||||||
|
-lws2_32 -lwinmm.
|
||||||
|
|
||||||
|
SSL Files
|
||||||
|
---------
|
||||||
|
|
||||||
|
1- Get the latest openSSL (as of time of this writing)
|
||||||
|
openssl-0.9.7e-win32-bin.zip for the minimalist package of the openssl-0.9.7e
|
||||||
|
binaries ported to MS Windows 95/98/NT/XP using the MingW32/GCC-3.1
|
||||||
|
development environment. The file may be downloaded at
|
||||||
|
http://curl.haxx.se/download/.
|
||||||
|
|
||||||
|
2- Open the above zip file. You will find two files - SDL.dll,
|
||||||
|
SDL_mixer.dll. Install them in the directory C:\WINDOWS\SYSTEM32 for Win 9x
|
||||||
|
users and c:\winnt\system32 for NT-family users.
|
||||||
|
|
||||||
|
Multithreading Files
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
To be completed
|
||||||
|
|
||||||
|
#define
|
||||||
|
-------
|
||||||
|
|
||||||
|
1- Make sure that your program includes the following - #define CURL_STATICLIB
|
||||||
|
must be declared FIRST before any other define functions may be
|
||||||
|
added. Otherwise you may experience link errors.
|
||||||
|
|
||||||
|
2- Don't forget to include #include "curl/curl.h".
|
||||||
|
|
||||||
|
e.g.
|
||||||
|
#define CURL_STATICLIB
|
||||||
|
#include <windows.h>
|
||||||
|
#include "curl/curl.h"
|
||||||
|
#include <fstream>
|
||||||
|
#include <iostream>
|
||||||
|
#include <vector>
|
||||||
|
etc...
|
||||||
|
|
||||||
|
|
||||||
|
Static or Dynamic Library
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
The above steps apply for the use by a static library. Should you choose to
|
||||||
|
use a dynamic library you will be required to perform these additional steps.
|
||||||
|
|
||||||
|
1- Refer to Method I - DOS Command Line point # 6. Install libcurl.dll in the
|
||||||
|
directory C:\WINDOWS\SYSTEM32 for Win 9x users and c:\winnt\system32 for
|
||||||
|
NT-family users.
|
||||||
|
|
||||||
|
2- Refer to Linker Links point 3 - Replace -lcurl with -lcurldll.
|
||||||
|
|
||||||
|
Voila you're done.
|
||||||
|
|
||||||
|
The non-SSL static Library build may not be possible to use at least as of the
|
||||||
|
time of this writing - v7.14. Check reference emails - Phillipe and I found it
|
||||||
|
impossible to fully compile as certain files were missing for linking. No big
|
||||||
|
loss as SSL is a major plus.
|
||||||
|
|
||||||
|
Hope this Helps
|
||||||
|
|
||||||
|
Tom
|
||||||
@@ -3,25 +3,76 @@ 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!
|
||||||
|
|
||||||
|
41. When doing an operation over FTP that requires the ACCT command (but not
|
||||||
|
when logging in), the operation will fail since libcurl doesn't detect this
|
||||||
|
and thus fails to issue the correct command:
|
||||||
|
http://curl.haxx.se/bug/view.cgi?id=1693337
|
||||||
|
|
||||||
|
40. Mac OS X test failures (Daniel Johnson)
|
||||||
|
http://curl.haxx.se/mail/lib-2007-03/0095.html
|
||||||
|
|
||||||
|
39. Steffen Rumler's Race Condition in Curl_proxyCONNECT:
|
||||||
|
http://curl.haxx.se/mail/lib-2007-01/0045.html
|
||||||
|
|
||||||
|
38. Kumar Swamy Bhatt's problem in ftp/ssl "LIST" operation:
|
||||||
|
http://curl.haxx.se/mail/lib-2007-01/0103.html
|
||||||
|
|
||||||
|
37. Having more than one connection to the same host when doing NTLM
|
||||||
|
authentication (with performs multiple "passes" and authenticates a
|
||||||
|
connection rather than a HTTP request), and particularly when using the
|
||||||
|
multi interface, there's a risk that libcurl will re-use a wrong connection
|
||||||
|
when doing the different passes in the NTLM negotiation and thus fail to
|
||||||
|
negotiate (in seemingly mysterious ways).
|
||||||
|
|
||||||
|
35. Both SOCKS5 and SOCKS4 proxy connections are done blocking, which is very
|
||||||
|
bad when used with the multi interface.
|
||||||
|
|
||||||
|
34. The SOCKS4 connection codes don't properly acknowledge (connect) timeouts.
|
||||||
|
Also see #12. According to bug #1556528, even the SOCKS5 connect code does
|
||||||
|
not do it right: http://curl.haxx.se/bug/view.cgi?id=1556528,
|
||||||
|
|
||||||
|
33. Doing multi-pass HTTP authentication on a non-default port does not work.
|
||||||
|
This happens because the multi-pass code abuses the redirect following code
|
||||||
|
for doing multiple requests, and when we following redirects to an absolute
|
||||||
|
URL we must use the newly specified port and not the one specified in the
|
||||||
|
original URL. A proper fix to this would need to separate the negotiation
|
||||||
|
"redirect" from an actual redirect.
|
||||||
|
|
||||||
|
32. (At least on Windows) If libcurl is built with c-ares and there's no DNS
|
||||||
|
server configured in the system, the ares_init() call fails and thus
|
||||||
|
curl_easy_init() fails as well. This causes weird effects for people who use
|
||||||
|
numerical IP addresses only.
|
||||||
|
|
||||||
|
31. "curl-config --libs" will include details set in LDFLAGS when configure is
|
||||||
|
run that might be needed only for building libcurl. Similarly, it might
|
||||||
|
include options that perhaps aren't suitable both for static and dynamic
|
||||||
|
linking. Further, curl-config --cflags suffers from the same effects with
|
||||||
|
CFLAGS/CPPFLAGS.
|
||||||
|
|
||||||
|
30. You need to use -g to the command line tool in order to use RFC2732-style
|
||||||
|
IPv6 numerical addresses in URLs.
|
||||||
|
|
||||||
|
29. IPv6 URLs with zone ID is not supported.
|
||||||
|
http://www.ietf.org/internet-drafts/draft-fenner-literal-zone-02.txt
|
||||||
|
specifies the use of a plus sign instead of a percent when specifying zone
|
||||||
|
IDs in URLs to get around the problem of percent signs being
|
||||||
|
special. According to the reporter, Firefox deals with the URL _with_ a
|
||||||
|
percent letter (which seems like a blatant URL spec violation).
|
||||||
|
|
||||||
|
See http://curl.haxx.se/bug/view.cgi?id=1371118
|
||||||
|
|
||||||
26. NTLM authentication using SSPI (on Windows) when (lib)curl is running in
|
26. NTLM authentication using SSPI (on Windows) when (lib)curl is running in
|
||||||
"system context" will make it use wrong(?) user name - at least when compared
|
"system context" will make it use wrong(?) user name - at least when compared
|
||||||
to what winhttp does. See http://curl.haxx.se/bug/view.cgi?id=1281867
|
to what winhttp does. See http://curl.haxx.se/bug/view.cgi?id=1281867
|
||||||
|
|
||||||
25. When doing a CONNECT request with curl it doesn't properly handle if the
|
23. SOCKS-related problems:
|
||||||
proxy closes the connection within the authentication "negotiation phase".
|
A) libcurl doesn't support SOCKS for IPv6.
|
||||||
Like if you do HTTPS or similar over a proxy and you use perhaps
|
B) libcurl doesn't support FTPS over a SOCKS proxy.
|
||||||
--proxy-anyauth. There's work in progress on this problem, and a recent
|
C) We don't have any test cases for SOCKS proxy.
|
||||||
patch was posted here: http://curl.haxx.se/mail/lib-2005-08/0074.html
|
E) libcurl doesn't support active FTP over a SOCKS proxy
|
||||||
|
|
||||||
24. Harshal Pradhan's Use-after-free with libcurl+ares. This probably occurs
|
We probably have even more bugs and lack of features when a SOCKS proxy is
|
||||||
because there is a pending ares callback that gets called after the
|
used.
|
||||||
connection struct has been freed in libcurl:
|
|
||||||
http://curl.haxx.se/mail/lib-2005-08/0022.html
|
|
||||||
Fixing this properly most likely requires a new c-ares function.
|
|
||||||
|
|
||||||
23. We don't support SOCKS for IPv6. We don't support FTPS over a SOCKS proxy.
|
|
||||||
We don't have any test cases for SOCKS proxy. We probably have even more
|
|
||||||
bugs and lack of features when a SOCKS proxy is used.
|
|
||||||
|
|
||||||
22. Sending files to a FTP server using curl on VMS, might lead to curl
|
22. Sending files to a FTP server using curl on VMS, might lead to curl
|
||||||
complaining on "unaligned file size" on completion. The problem is related
|
complaining on "unaligned file size" on completion. The problem is related
|
||||||
@@ -38,11 +89,7 @@ may have been fixed since this was written!
|
|||||||
specification). The receiver will convert the data from the standard
|
specification). The receiver will convert the data from the standard
|
||||||
form to his own internal form.
|
form to his own internal form.
|
||||||
|
|
||||||
19. FTP 3rd party transfers with the multi interface doesn't work. Test:
|
Since 7.15.4 at least line endings are converted.
|
||||||
define CURL_MULTIEASY, rebuild curl, run test case 230 - 232.
|
|
||||||
|
|
||||||
18. test case 57 has </test> that should be </client> but when corrected, the
|
|
||||||
test case fails!
|
|
||||||
|
|
||||||
16. FTP URLs passed to curl may contain NUL (0x00) in the RFC 1738 <user>,
|
16. FTP URLs passed to curl may contain NUL (0x00) in the RFC 1738 <user>,
|
||||||
<password>, and <fpath> components, encoded as "%00". The problem is that
|
<password>, and <fpath> components, encoded as "%00". The problem is that
|
||||||
@@ -65,10 +112,7 @@ may have been fixed since this was written!
|
|||||||
|
|
||||||
12. When connecting to a SOCKS proxy, the (connect) timeout is not properly
|
12. When connecting to a SOCKS proxy, the (connect) timeout is not properly
|
||||||
acknowledged after the actual TCP connect (during the SOCKS "negotiate"
|
acknowledged after the actual TCP connect (during the SOCKS "negotiate"
|
||||||
phase). Pointed out by Lucas. Fix: need to select() and timeout properly.
|
phase).
|
||||||
|
|
||||||
11. Using configure --disable-[protocol] may cause 'make test' to fail for
|
|
||||||
tests using the disabled protocol(s).
|
|
||||||
|
|
||||||
10. To get HTTP Negotiate authentication to work fine, you need to provide a
|
10. To get HTTP Negotiate authentication to work fine, you need to provide a
|
||||||
(fake) user name (this concerns both curl and the lib) because the code
|
(fake) user name (this concerns both curl and the lib) because the code
|
||||||
@@ -76,10 +120,6 @@ may have been fixed since this was written!
|
|||||||
http://curl.haxx.se/bug/view.cgi?id=1004841. How?
|
http://curl.haxx.se/bug/view.cgi?id=1004841. How?
|
||||||
http://curl.haxx.se/mail/lib-2004-08/0182.html
|
http://curl.haxx.se/mail/lib-2004-08/0182.html
|
||||||
|
|
||||||
9. --limit-rate using -d or -F does not work. This is because the limit logic
|
|
||||||
is provided by the curl app in its read/write callbacks, and when doing
|
|
||||||
-d/-F the callbacks aren't used! http://curl.haxx.se/bug/view.cgi?id=921395
|
|
||||||
|
|
||||||
8. Doing resumed upload over HTTP does not work with '-C -', because curl
|
8. Doing resumed upload over HTTP does not work with '-C -', because curl
|
||||||
doesn't do a HEAD first to get the initial size. This needs to be done
|
doesn't do a HEAD first to get the initial size. This needs to be done
|
||||||
manually for HTTP PUT resume to work, and then '-C [index]'.
|
manually for HTTP PUT resume to work, and then '-C [index]'.
|
||||||
@@ -101,8 +141,6 @@ may have been fixed since this was written!
|
|||||||
libcurl thinks of it as the *compressed* length. Some explanations are here:
|
libcurl thinks of it as the *compressed* length. Some explanations are here:
|
||||||
http://curl.haxx.se/mail/lib-2003-06/0146.html
|
http://curl.haxx.se/mail/lib-2003-06/0146.html
|
||||||
|
|
||||||
3. GOPHER transfers seem broken
|
|
||||||
|
|
||||||
2. If a HTTP server responds to a HEAD request and includes a body (thus
|
2. If a HTTP server responds to a HEAD request and includes a body (thus
|
||||||
violating the RFC2616), curl won't wait to read the response but just stop
|
violating the RFC2616), curl won't wait to read the response but just stop
|
||||||
reading and return back. If a second request (let's assume a GET) is then
|
reading and return back. If a second request (let's assume a GET) is then
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ clause). You may still build your own copies that use them all, but
|
|||||||
distributing them as binaries would be to violate the GPL license - unless you
|
distributing them as binaries would be to violate the GPL license - unless you
|
||||||
accompany your license with an exception[2]. This particular problem was
|
accompany your license with an exception[2]. This particular problem was
|
||||||
addressed when the Modified BSD license was created, which does not have the
|
addressed when the Modified BSD license was created, which does not have the
|
||||||
annoncement clause that collides with GPL.
|
announcement clause that collides with GPL.
|
||||||
|
|
||||||
libcurl http://curl.haxx.se/docs/copyright.html
|
libcurl http://curl.haxx.se/docs/copyright.html
|
||||||
|
|
||||||
@@ -28,11 +28,12 @@ libcurl http://curl.haxx.se/docs/copyright.html
|
|||||||
OpenSSL http://www.openssl.org/source/license.html
|
OpenSSL http://www.openssl.org/source/license.html
|
||||||
|
|
||||||
(May be used for SSL/TLS support) Uses an Original BSD-style license
|
(May be used for SSL/TLS support) Uses an Original BSD-style license
|
||||||
with an announement clause that makes it "incompatible" with GPL. You
|
with an announcement clause that makes it "incompatible" with GPL. You
|
||||||
are not allowed to ship binaries that link with OpenSSL that includes
|
are not allowed to ship binaries that link with OpenSSL that includes
|
||||||
GPL code (unless that specific GPL code includes an exception for
|
GPL code (unless that specific GPL code includes an exception for
|
||||||
OpenSSL - a habit that is growing more and more common). If OpenSSL's
|
OpenSSL - a habit that is growing more and more common). If OpenSSL's
|
||||||
licensing is a problem for you, consider using GnuTLS instead.
|
licensing is a problem for you, consider using GnuTLS or yassl
|
||||||
|
instead.
|
||||||
|
|
||||||
GnuTLS http://www.gnutls.org/
|
GnuTLS http://www.gnutls.org/
|
||||||
|
|
||||||
@@ -41,6 +42,19 @@ GnuTLS http://www.gnutls.org/
|
|||||||
GnuTLS itself depends on and uses other libs (libgcrypt and
|
GnuTLS itself depends on and uses other libs (libgcrypt and
|
||||||
libgpg-error) and they too are LGPL- or GPL-licensed.
|
libgpg-error) and they too are LGPL- or GPL-licensed.
|
||||||
|
|
||||||
|
yassl http://www.yassl.com/
|
||||||
|
|
||||||
|
(May be used for SSL/TLS support) Uses the GPL[1] license. If this is
|
||||||
|
a problem for you, consider using OpenSSL or GnuTLS instead.
|
||||||
|
|
||||||
|
NSS http://www.mozilla.org/projects/security/pki/nss/
|
||||||
|
|
||||||
|
(May be used for SSL/TLS support) Is covered by the MPL[4] license,
|
||||||
|
the GPL[1] license and the LGPL[3] license. You may choose to license
|
||||||
|
the code under MPL terms, GPL terms, or LGPL terms. These licenses
|
||||||
|
grant you different permissions and impose different obligations. You
|
||||||
|
should select the license that best meets your needs.
|
||||||
|
|
||||||
c-ares http://daniel.haxx.se/projects/c-ares/license.html
|
c-ares http://daniel.haxx.se/projects/c-ares/license.html
|
||||||
|
|
||||||
(Used for asynchronous name resolves) Uses an MIT license that is very
|
(Used for asynchronous name resolves) Uses an MIT license that is very
|
||||||
@@ -56,9 +70,9 @@ krb4
|
|||||||
|
|
||||||
While nothing in particular says that a Kerberos4 library must use any
|
While nothing in particular says that a Kerberos4 library must use any
|
||||||
particular license, the one I've tried and used successfully so far
|
particular license, the one I've tried and used successfully so far
|
||||||
(kth-krb4) is Original BSD-licensed with the announcement clause. Some
|
(kth-krb4) is partly Original BSD-licensed with the announcement
|
||||||
of the code in libcurl that is written to deal with Kerberos4 likewise
|
clause. Some of the code in libcurl that is written to deal with
|
||||||
have such a license.
|
Kerberos4 is Modified BSD-licensed.
|
||||||
|
|
||||||
MIT Kerberos http://web.mit.edu/kerberos/www/dist/
|
MIT Kerberos http://web.mit.edu/kerberos/www/dist/
|
||||||
|
|
||||||
@@ -82,10 +96,10 @@ fbopenssl
|
|||||||
that it uses the OpenSSL license and thus shares the same issues as
|
that it uses the OpenSSL license and thus shares the same issues as
|
||||||
described for OpenSSL above.
|
described for OpenSSL above.
|
||||||
|
|
||||||
libidn http://www.gnu.org/licenses/lgpl.html
|
libidn http://josefsson.org/libidn/
|
||||||
|
|
||||||
(Used for IDNA support) Uses the GNU Lesser General Public
|
(Used for IDNA support) Uses the GNU Lesser General Public
|
||||||
License. LGPL is a variation of GPL with slightly less aggressive
|
License [3]. LGPL is a variation of GPL with slightly less aggressive
|
||||||
"copyleft". This license requires more requirements to be met when
|
"copyleft". This license requires more requirements to be met when
|
||||||
distributing binaries, see the license for details. Also note that if
|
distributing binaries, see the license for details. Also note that if
|
||||||
you distribute a binary that includes this library, you must also
|
you distribute a binary that includes this library, you must also
|
||||||
@@ -98,9 +112,15 @@ OpenLDAP http://www.openldap.org/software/release/license.html
|
|||||||
libcurl uses OpenLDAP as a shared library only, I have not heard of
|
libcurl uses OpenLDAP as a shared library only, I have not heard of
|
||||||
anyone that ships OpenLDAP linked with libcurl in an app.
|
anyone that ships OpenLDAP linked with libcurl in an app.
|
||||||
|
|
||||||
|
libssh2 http://www.libssh2.org/
|
||||||
|
|
||||||
|
(Used for scp and sftp support) libssh2 uses a Modified BSD-style
|
||||||
|
license.
|
||||||
|
|
||||||
[1] = GPL - GNU General Public License: http://www.gnu.org/licenses/gpl.html
|
[1] = GPL - GNU General Public License: http://www.gnu.org/licenses/gpl.html
|
||||||
[2] = http://www.fsf.org/licenses/gpl-faq.html#GPLIncompatibleLibs details on
|
[2] = http://www.fsf.org/licenses/gpl-faq.html#GPLIncompatibleLibs details on
|
||||||
how to write such an exception to the GPL
|
how to write such an exception to the GPL
|
||||||
[3] = LGPL - GNU Lesser General Public License:
|
[3] = LGPL - GNU Lesser General Public License:
|
||||||
http://www.gnu.org/licenses/lgpl.html
|
http://www.gnu.org/licenses/lgpl.html
|
||||||
|
[4] = MPL - Mozilla Public License:
|
||||||
|
http://www.mozilla.org/MPL/
|
||||||
|
|||||||
63
docs/MANUAL
63
docs/MANUAL
@@ -7,7 +7,7 @@ LATEST VERSION
|
|||||||
|
|
||||||
SIMPLE USAGE
|
SIMPLE USAGE
|
||||||
|
|
||||||
Get the main page from netscape's web-server:
|
Get the main page from Netscape's web-server:
|
||||||
|
|
||||||
curl http://www.netscape.com/
|
curl http://www.netscape.com/
|
||||||
|
|
||||||
@@ -23,10 +23,6 @@ SIMPLE USAGE
|
|||||||
|
|
||||||
curl ftp://cool.haxx.se/
|
curl ftp://cool.haxx.se/
|
||||||
|
|
||||||
Get a gopher document from funet's gopher server:
|
|
||||||
|
|
||||||
curl gopher://gopher.funet.fi
|
|
||||||
|
|
||||||
Get the definition of curl from a dictionary:
|
Get the definition of curl from a dictionary:
|
||||||
|
|
||||||
curl dict://dict.org/m:curl
|
curl dict://dict.org/m:curl
|
||||||
@@ -35,6 +31,24 @@ SIMPLE USAGE
|
|||||||
|
|
||||||
curl ftp://cool.haxx.se/ http://www.weirdserver.com:8000/
|
curl ftp://cool.haxx.se/ http://www.weirdserver.com:8000/
|
||||||
|
|
||||||
|
Get a file off an FTPS server:
|
||||||
|
|
||||||
|
curl ftps://files.are.secure.com/secrets.txt
|
||||||
|
|
||||||
|
or use the more appropriate FTPS way to get the same file:
|
||||||
|
|
||||||
|
curl --ftp-ssl ftp://files.are.secure.com/secrets.txt
|
||||||
|
|
||||||
|
Get a file from an SSH server using SFTP:
|
||||||
|
|
||||||
|
curl -u username sftp://shell.example.com/etc/issue
|
||||||
|
|
||||||
|
Get a file from an SSH server using SCP using a private key to authenticate:
|
||||||
|
|
||||||
|
curl -u username: --key ~/.ssh/id_dsa --pubkey ~/.ssh/id_dsa.pub \
|
||||||
|
scp://shell.example.com/~/personal.txt
|
||||||
|
|
||||||
|
|
||||||
DOWNLOAD TO A FILE
|
DOWNLOAD TO A FILE
|
||||||
|
|
||||||
Get a web page and store in a local file:
|
Get a web page and store in a local file:
|
||||||
@@ -68,11 +82,14 @@ USING PASSWORDS
|
|||||||
It is just like for FTP, but you may also want to specify and use
|
It is just like for FTP, but you may also want to specify and use
|
||||||
SSL-specific options for certificates etc.
|
SSL-specific options for certificates etc.
|
||||||
|
|
||||||
|
Note that using FTPS:// as prefix is the "implicit" way as described in the
|
||||||
|
standards while the recommended "explicit" way is done by using FTP:// and
|
||||||
|
the --ftp-ssl option.
|
||||||
|
|
||||||
HTTP
|
HTTP
|
||||||
|
|
||||||
The HTTP URL doesn't support user and password in the URL string. Curl
|
Curl also supports user and password in HTTP URLs, thus you can pick a file
|
||||||
does support that anyway to provide a ftp-style interface and thus you can
|
like:
|
||||||
pick a file like:
|
|
||||||
|
|
||||||
curl http://name:passwd@machine.domain/full/path/to/file
|
curl http://name:passwd@machine.domain/full/path/to/file
|
||||||
|
|
||||||
@@ -94,10 +111,6 @@ USING PASSWORDS
|
|||||||
|
|
||||||
Probably most commonly used with private certificates, as explained below.
|
Probably most commonly used with private certificates, as explained below.
|
||||||
|
|
||||||
GOPHER
|
|
||||||
|
|
||||||
Curl features no password support for gopher.
|
|
||||||
|
|
||||||
PROXY
|
PROXY
|
||||||
|
|
||||||
Get an ftp file using a proxy named my-proxy that uses port 888:
|
Get an ftp file using a proxy named my-proxy that uses port 888:
|
||||||
@@ -113,6 +126,8 @@ PROXY
|
|||||||
|
|
||||||
curl -U user:passwd -x my-proxy:888 http://www.get.this/
|
curl -U user:passwd -x my-proxy:888 http://www.get.this/
|
||||||
|
|
||||||
|
curl also supports SOCKS4 and SOCKS5 proxies with --socks4 and --socks5.
|
||||||
|
|
||||||
See also the environment variables Curl support that offer further proxy
|
See also the environment variables Curl support that offer further proxy
|
||||||
control.
|
control.
|
||||||
|
|
||||||
@@ -693,9 +708,9 @@ TIME CONDITIONS
|
|||||||
curl -z -local.html http://remote.server.com/remote.html
|
curl -z -local.html http://remote.server.com/remote.html
|
||||||
|
|
||||||
You can specify a "free text" date as condition. Tell curl to only download
|
You can specify a "free text" date as condition. Tell curl to only download
|
||||||
the file if it was updated since yesterday:
|
the file if it was updated since January 12, 2012:
|
||||||
|
|
||||||
curl -z yesterday http://remote.server.com/remote.html
|
curl -z "Jan 12 2012" http://remote.server.com/remote.html
|
||||||
|
|
||||||
Curl will then accept a wide range of date formats. You always make the date
|
Curl will then accept a wide range of date formats. You always make the date
|
||||||
check the other way around by prepending it with a dash '-'.
|
check the other way around by prepending it with a dash '-'.
|
||||||
@@ -734,7 +749,7 @@ LDAP
|
|||||||
Working with LDAP URLs":
|
Working with LDAP URLs":
|
||||||
http://developer.netscape.com/docs/manuals/dirsdk/csdk30/url.htm
|
http://developer.netscape.com/docs/manuals/dirsdk/csdk30/url.htm
|
||||||
|
|
||||||
RFC 2255, "The LDAP URL Format" http://www.rfc-editor.org/rfc/rfc2255.txt
|
RFC 2255, "The LDAP URL Format" http://curl.haxx.se/rfc/rfc2255.txt
|
||||||
|
|
||||||
To show you an example, this is now I can get all people from my local LDAP
|
To show you an example, this is now I can get all people from my local LDAP
|
||||||
server that has a certain sub-domain in their email address:
|
server that has a certain sub-domain in their email address:
|
||||||
@@ -748,7 +763,7 @@ ENVIRONMENT VARIABLES
|
|||||||
|
|
||||||
Curl reads and understands the following environment variables:
|
Curl reads and understands the following environment variables:
|
||||||
|
|
||||||
http_proxy, HTTPS_PROXY, FTP_PROXY, GOPHER_PROXY
|
http_proxy, HTTPS_PROXY, FTP_PROXY
|
||||||
|
|
||||||
They should be set for protocol-specific proxies. General proxy should be
|
They should be set for protocol-specific proxies. General proxy should be
|
||||||
set with
|
set with
|
||||||
@@ -854,6 +869,22 @@ PERSISTENT CONNECTIONS
|
|||||||
transfers faster. If you use a http proxy for file transfers, practically
|
transfers faster. If you use a http proxy for file transfers, practically
|
||||||
all transfers will be persistent.
|
all transfers will be persistent.
|
||||||
|
|
||||||
|
MULTIPLE TRANSFERS WITH A SINGLE COMMAND LINE
|
||||||
|
|
||||||
|
As is mentioned above, you can download multiple files with one command line
|
||||||
|
by simply adding more URLs. If you want those to get saved to a local file
|
||||||
|
instead of just printed to stdout, you need to add one save option for each
|
||||||
|
URL you specify. Note that this also goes for the -O option.
|
||||||
|
|
||||||
|
For example: get two files and use -O for the first and a custom file
|
||||||
|
name for the second:
|
||||||
|
|
||||||
|
curl -O http://url.com/file.txt ftp://ftp.com/moo.exe -o moo.jpg
|
||||||
|
|
||||||
|
You can also upload multiple files in a similar fashion:
|
||||||
|
|
||||||
|
curl -T local1 ftp://ftp.com/moo.exe -T local2 ftp://ftp.com/moo2.txt
|
||||||
|
|
||||||
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,
|
||||||
|
|||||||
@@ -14,10 +14,10 @@ SUBDIRS = examples libcurl
|
|||||||
|
|
||||||
CLEANFILES = $(GENHTMLPAGES) $(PDFPAGES)
|
CLEANFILES = $(GENHTMLPAGES) $(PDFPAGES)
|
||||||
|
|
||||||
EXTRA_DIST = MANUAL BUGS CONTRIBUTE FAQ FEATURES INTERNALS SSLCERTS \
|
EXTRA_DIST = MANUAL BUGS CONTRIBUTE FAQ FEATURES INTERNALS SSLCERTS \
|
||||||
README.win32 RESOURCES TODO TheArtOfHttpScripting THANKS VERSIONS \
|
README.win32 RESOURCES TODO TheArtOfHttpScripting THANKS VERSIONS \
|
||||||
KNOWN_BUGS BINDINGS $(man_MANS) $(HTMLPAGES) HISTORY INSTALL \
|
KNOWN_BUGS BINDINGS $(man_MANS) $(HTMLPAGES) HISTORY INSTALL \
|
||||||
$(PDFPAGES) LICENSE-MIXING README.netware DISTRO-DILEMMA
|
$(PDFPAGES) LICENSE-MIXING README.netware DISTRO-DILEMMA INSTALL.devcpp
|
||||||
|
|
||||||
MAN2HTML= roffit < $< >$@
|
MAN2HTML= roffit < $< >$@
|
||||||
|
|
||||||
|
|||||||
90
docs/THANKS
90
docs/THANKS
@@ -8,19 +8,26 @@ Adrian Schuur
|
|||||||
Alan Pinstein
|
Alan Pinstein
|
||||||
Albert Chin-A-Young
|
Albert Chin-A-Young
|
||||||
Albert Choy
|
Albert Choy
|
||||||
|
Ale Vesely
|
||||||
Aleksandar Milivojevic
|
Aleksandar Milivojevic
|
||||||
Alex Neblett
|
Alex Neblett
|
||||||
Alex Suykov
|
Alex Suykov
|
||||||
Alex aka WindEagle
|
Alex aka WindEagle
|
||||||
Alexander Kourakos
|
Alexander Kourakos
|
||||||
Alexander Krasnostavsky
|
Alexander Krasnostavsky
|
||||||
|
Alexander Lazic
|
||||||
Alexander Zhuravlev
|
Alexander Zhuravlev
|
||||||
|
Alexey Simak
|
||||||
Alexis Carvalho
|
Alexis Carvalho
|
||||||
|
Amol Pattekar
|
||||||
Andi Jahja
|
Andi Jahja
|
||||||
Andreas Damm
|
Andreas Damm
|
||||||
|
Andreas Ntaflos
|
||||||
Andreas Olsson
|
Andreas Olsson
|
||||||
Andreas Rieke
|
Andreas Rieke
|
||||||
Andres Garcia
|
Andres Garcia
|
||||||
|
Andrew Benham
|
||||||
|
Andrew Biggs
|
||||||
Andrew Bushnell
|
Andrew Bushnell
|
||||||
Andrew Francis
|
Andrew Francis
|
||||||
Andrew Fuller
|
Andrew Fuller
|
||||||
@@ -31,21 +38,29 @@ Angus Mackay
|
|||||||
Antoine Calando
|
Antoine Calando
|
||||||
Anton Kalmykov
|
Anton Kalmykov
|
||||||
Arkadiusz Miskiewicz
|
Arkadiusz Miskiewicz
|
||||||
|
Armel Asselin
|
||||||
|
Arve Knudsen
|
||||||
|
Ates Goral
|
||||||
Augustus Saunders
|
Augustus Saunders
|
||||||
Avery Fay
|
Avery Fay
|
||||||
Ben Greear
|
Ben Greear
|
||||||
|
Ben Madsen
|
||||||
Benjamin Gerard
|
Benjamin Gerard
|
||||||
|
Bernard Leak
|
||||||
Bertrand Demiddelaer
|
Bertrand Demiddelaer
|
||||||
Bjorn Reese
|
Bjorn Reese
|
||||||
Bj<EFBFBD>rn Stenberg
|
Bj<EFBFBD>rn Stenberg
|
||||||
Bob Schader
|
Bob Schader
|
||||||
|
Bogdan Nicula
|
||||||
Brad Burdick
|
Brad Burdick
|
||||||
|
Bradford Bruce
|
||||||
|
Brendan Jurd
|
||||||
Brent Beardsley
|
Brent Beardsley
|
||||||
Brian Akins
|
Brian Akins
|
||||||
|
Brian Dessent
|
||||||
Brian R Duffy
|
Brian R Duffy
|
||||||
Bruce Mitchener
|
Bruce Mitchener
|
||||||
Bryan Henderson
|
Bryan Henderson
|
||||||
Bryan Henderson
|
|
||||||
Bryan Kemp
|
Bryan Kemp
|
||||||
Caolan McNamara
|
Caolan McNamara
|
||||||
Casey O'Donnell
|
Casey O'Donnell
|
||||||
@@ -59,6 +74,7 @@ Christian Robottom Reis
|
|||||||
Christophe Demory
|
Christophe Demory
|
||||||
Christophe Legry
|
Christophe Legry
|
||||||
Christopher R. Palmer
|
Christopher R. Palmer
|
||||||
|
Ciprian Badescu
|
||||||
Clarence Gardner
|
Clarence Gardner
|
||||||
Clifford Wolf
|
Clifford Wolf
|
||||||
Cody Jones
|
Cody Jones
|
||||||
@@ -73,10 +89,12 @@ Damien Adant
|
|||||||
Dan Becker
|
Dan Becker
|
||||||
Dan C
|
Dan C
|
||||||
Dan Fandrich
|
Dan Fandrich
|
||||||
|
Dan Nelson
|
||||||
Dan Torop
|
Dan Torop
|
||||||
Dan Zitter
|
Dan Zitter
|
||||||
Daniel Stenberg
|
Daniel Stenberg
|
||||||
Daniel at touchtunes
|
Daniel at touchtunes
|
||||||
|
Darryl House
|
||||||
Dave Dribin
|
Dave Dribin
|
||||||
Dave Halbakken
|
Dave Halbakken
|
||||||
Dave Hamilton
|
Dave Hamilton
|
||||||
@@ -89,18 +107,25 @@ David Hull
|
|||||||
David J Meyer
|
David J Meyer
|
||||||
David James
|
David James
|
||||||
David Kimdon
|
David Kimdon
|
||||||
|
David Lang
|
||||||
David LeBlanc
|
David LeBlanc
|
||||||
|
David McCreedy
|
||||||
David Odin
|
David Odin
|
||||||
David Phillips
|
David Phillips
|
||||||
David Shaw
|
David Shaw
|
||||||
David Tarendash
|
David Tarendash
|
||||||
David Thiel
|
David Thiel
|
||||||
|
David Yan
|
||||||
Detlef Schmier
|
Detlef Schmier
|
||||||
Diego Casorran
|
Diego Casorran
|
||||||
|
Dima Barsky
|
||||||
Dimitris Sarris
|
Dimitris Sarris
|
||||||
Dinar
|
Dinar
|
||||||
Dirk Eddelbuettel
|
Dirk Eddelbuettel
|
||||||
Dirk Manske
|
Dirk Manske
|
||||||
|
Dmitriy Sergeyev
|
||||||
|
Dmitry Bartsevich
|
||||||
|
Dmitry Rechkin
|
||||||
Dolbneff A.V
|
Dolbneff A.V
|
||||||
Domenico Andreoli
|
Domenico Andreoli
|
||||||
Dominick Meglio
|
Dominick Meglio
|
||||||
@@ -108,6 +133,8 @@ Doug Kaufman
|
|||||||
Doug Porter
|
Doug Porter
|
||||||
Douglas E. Wegscheid
|
Douglas E. Wegscheid
|
||||||
Douglas R. Horner
|
Douglas R. Horner
|
||||||
|
Dov Murik
|
||||||
|
Duane Cathey
|
||||||
Dustin Boswell
|
Dustin Boswell
|
||||||
Dylan Ellicott
|
Dylan Ellicott
|
||||||
Dylan Salisbury
|
Dylan Salisbury
|
||||||
@@ -127,6 +154,7 @@ Eric Young
|
|||||||
Erick Nuwendam
|
Erick Nuwendam
|
||||||
Erwan Legrand
|
Erwan Legrand
|
||||||
Erwin Authried
|
Erwin Authried
|
||||||
|
Eugene Kotlyarov
|
||||||
Evan Jordan
|
Evan Jordan
|
||||||
Fabrizio Ammollo
|
Fabrizio Ammollo
|
||||||
Fedor Karpelevitch
|
Fedor Karpelevitch
|
||||||
@@ -176,6 +204,8 @@ Ian Wilkes
|
|||||||
Ignacio Vazquez-Abrams
|
Ignacio Vazquez-Abrams
|
||||||
Igor Polyakov
|
Igor Polyakov
|
||||||
Ilguiz Latypov
|
Ilguiz Latypov
|
||||||
|
Ilja van Sprundel
|
||||||
|
Ingmar Runge
|
||||||
Ingo Ralf Blum
|
Ingo Ralf Blum
|
||||||
Ingo Wilken
|
Ingo Wilken
|
||||||
Jacky Lam
|
Jacky Lam
|
||||||
@@ -185,10 +215,17 @@ James Clancy
|
|||||||
James Cone
|
James Cone
|
||||||
James Gallagher
|
James Gallagher
|
||||||
James Griffiths
|
James Griffiths
|
||||||
|
James Housley
|
||||||
James MacMillan
|
James MacMillan
|
||||||
Jamie Lokier
|
Jamie Lokier
|
||||||
|
Jamie Newton
|
||||||
Jamie Wilkinson
|
Jamie Wilkinson
|
||||||
|
Jan Kunder
|
||||||
|
Jared Lundell
|
||||||
|
Jari Sundell
|
||||||
Jason S. Priebe
|
Jason S. Priebe
|
||||||
|
Jaz Fresh
|
||||||
|
Jean Jacques Drouin
|
||||||
Jean-Claude Chauve
|
Jean-Claude Chauve
|
||||||
Jean-Louis Lemaire
|
Jean-Louis Lemaire
|
||||||
Jean-Marc Ranger
|
Jean-Marc Ranger
|
||||||
@@ -207,6 +244,7 @@ Johan Anderson
|
|||||||
Johan Nilsson
|
Johan Nilsson
|
||||||
John Crow
|
John Crow
|
||||||
John Janssen
|
John Janssen
|
||||||
|
John Kelly
|
||||||
John Lask
|
John Lask
|
||||||
John McGowan
|
John McGowan
|
||||||
Jon Grubbs
|
Jon Grubbs
|
||||||
@@ -229,11 +267,14 @@ J
|
|||||||
Kai Sommerfeld
|
Kai Sommerfeld
|
||||||
Kai-Uwe Rommel
|
Kai-Uwe Rommel
|
||||||
Kang-Jin Lee
|
Kang-Jin Lee
|
||||||
|
Karl Moerder
|
||||||
Karol Pietrzak
|
Karol Pietrzak
|
||||||
|
Katie Wang
|
||||||
Keith MacDonald
|
Keith MacDonald
|
||||||
Keith McGuigan
|
Keith McGuigan
|
||||||
Ken Hirsch
|
Ken Hirsch
|
||||||
Ken Rastatter
|
Ken Rastatter
|
||||||
|
Kent Boortz
|
||||||
Kevin Fisk
|
Kevin Fisk
|
||||||
Kevin Lussier
|
Kevin Lussier
|
||||||
Kevin Roth
|
Kevin Roth
|
||||||
@@ -266,6 +307,7 @@ Lucas Adamski
|
|||||||
Lukasz Czekierda
|
Lukasz Czekierda
|
||||||
Luke Call
|
Luke Call
|
||||||
Luong Dinh Dung
|
Luong Dinh Dung
|
||||||
|
Maciej Karpiuk
|
||||||
Maciej W. Rozycki
|
Maciej W. Rozycki
|
||||||
Marc Boucher
|
Marc Boucher
|
||||||
Marcelo Juchem
|
Marcelo Juchem
|
||||||
@@ -274,17 +316,22 @@ Marco G. Salvagno
|
|||||||
Marcus Webster
|
Marcus Webster
|
||||||
Mario Schroeder
|
Mario Schroeder
|
||||||
Mark Butler
|
Mark Butler
|
||||||
|
Mark Eichin
|
||||||
|
Mark Lentczner
|
||||||
|
Markus Koetter
|
||||||
Markus Moeller
|
Markus Moeller
|
||||||
Markus Oberhumer
|
Markus Oberhumer
|
||||||
Martijn Koster
|
Martijn Koster
|
||||||
Martin C. Martin
|
Martin C. Martin
|
||||||
Martin Hedenfalk
|
Martin Hedenfalk
|
||||||
|
Martin Skinner
|
||||||
Marty Kuhrt
|
Marty Kuhrt
|
||||||
Maruko
|
Maruko
|
||||||
Massimiliano Ziccardi
|
Massimiliano Ziccardi
|
||||||
Mathias Axelsson
|
Mathias Axelsson
|
||||||
Mats Lidell
|
Mats Lidell
|
||||||
Matt Veenstra
|
Matt Veenstra
|
||||||
|
Matt Witherspoon
|
||||||
Matthew Blain
|
Matthew Blain
|
||||||
Matthew Clarke
|
Matthew Clarke
|
||||||
Maurice Barnum
|
Maurice Barnum
|
||||||
@@ -292,17 +339,25 @@ Mekonikum
|
|||||||
Mettgut Jamalla
|
Mettgut Jamalla
|
||||||
Michael Benedict
|
Michael Benedict
|
||||||
Michael Curtis
|
Michael Curtis
|
||||||
|
Michael Jahn
|
||||||
|
Michael Jerris
|
||||||
Michael Mealling
|
Michael Mealling
|
||||||
|
Michael Wallner
|
||||||
Michal Bonino
|
Michal Bonino
|
||||||
|
Michal Marek
|
||||||
|
Michele Bini
|
||||||
Mihai Ionescu
|
Mihai Ionescu
|
||||||
|
Mikael Sennerholm
|
||||||
Mike Bytnar
|
Mike Bytnar
|
||||||
Mike Dobbs
|
Mike Dobbs
|
||||||
|
Mike Protts
|
||||||
Miklos Nemeth
|
Miklos Nemeth
|
||||||
Mitz Wark
|
Mitz Wark
|
||||||
Mohamed Lrhazi
|
Mohamed Lrhazi
|
||||||
Mohun Biswas
|
Mohun Biswas
|
||||||
Moonesamy
|
Moonesamy
|
||||||
Nathan O'Sullivan
|
Nathan O'Sullivan
|
||||||
|
Nathanael Nerode
|
||||||
Naveen Noel
|
Naveen Noel
|
||||||
Neil Dunbar
|
Neil Dunbar
|
||||||
Neil Spring
|
Neil Spring
|
||||||
@@ -312,10 +367,16 @@ Nick Humfrey
|
|||||||
Nico Baggus
|
Nico Baggus
|
||||||
Nicolas Berloquin
|
Nicolas Berloquin
|
||||||
Nicolas Croiset
|
Nicolas Croiset
|
||||||
|
Nicolas Fran<61>ois
|
||||||
Niels van Tongeren
|
Niels van Tongeren
|
||||||
Nikita Schmidt
|
Nikita Schmidt
|
||||||
|
Nir Soffer
|
||||||
|
Nis Jorgensen
|
||||||
Nodak Sodak
|
Nodak Sodak
|
||||||
Norbert Novotny
|
Norbert Novotny
|
||||||
|
Ofer
|
||||||
|
Olaf Stueben
|
||||||
|
Olaf St<53>ben
|
||||||
Oren Tirosh
|
Oren Tirosh
|
||||||
P R Schaffner
|
P R Schaffner
|
||||||
Patrick Bihan-Faou
|
Patrick Bihan-Faou
|
||||||
@@ -324,6 +385,7 @@ Paul Harrington
|
|||||||
Paul Marquis
|
Paul Marquis
|
||||||
Paul Moore
|
Paul Moore
|
||||||
Paul Nolan
|
Paul Nolan
|
||||||
|
Paul Querna
|
||||||
Pavel Cenek
|
Pavel Cenek
|
||||||
Pavel Orehov
|
Pavel Orehov
|
||||||
Pawel A. Gajda
|
Pawel A. Gajda
|
||||||
@@ -331,7 +393,10 @@ Pedro Neves
|
|||||||
Pete Su
|
Pete Su
|
||||||
Peter Bray
|
Peter Bray
|
||||||
Peter Forret
|
Peter Forret
|
||||||
|
Peter Heuchert
|
||||||
Peter Pentchev
|
Peter Pentchev
|
||||||
|
Peter Silva
|
||||||
|
Peter Su
|
||||||
Peter Sylvester
|
Peter Sylvester
|
||||||
Peter Todd
|
Peter Todd
|
||||||
Peter Verhas
|
Peter Verhas
|
||||||
@@ -341,13 +406,16 @@ Phil Karn
|
|||||||
Philip Gladstone
|
Philip Gladstone
|
||||||
Philippe Hameau
|
Philippe Hameau
|
||||||
Philippe Raoult
|
Philippe Raoult
|
||||||
|
Philippe Vaucher
|
||||||
Pierre
|
Pierre
|
||||||
Puneet Pawaia
|
Puneet Pawaia
|
||||||
|
Quagmire
|
||||||
Rafael Sagula
|
Rafael Sagula
|
||||||
Ralph Beckmann
|
Ralph Beckmann
|
||||||
Ralph Mitchell
|
Ralph Mitchell
|
||||||
Ramana Mokkapati
|
Ramana Mokkapati
|
||||||
Randy McMurchy
|
Randy McMurchy
|
||||||
|
Ravi Pratap
|
||||||
Reinout van Schouwen
|
Reinout van Schouwen
|
||||||
Renaud Chaillat
|
Renaud Chaillat
|
||||||
Renaud Duhaut
|
Renaud Duhaut
|
||||||
@@ -366,10 +434,13 @@ Rick Jones
|
|||||||
Rick Richardson
|
Rick Richardson
|
||||||
Rob Stanzel
|
Rob Stanzel
|
||||||
Robert D. Young
|
Robert D. Young
|
||||||
|
Robert Foreman
|
||||||
Robert Olson
|
Robert Olson
|
||||||
Robert Weaver
|
Robert Weaver
|
||||||
Robin Kay
|
Robin Kay
|
||||||
|
Robson Braga Araujo
|
||||||
Rodney Simmons
|
Rodney Simmons
|
||||||
|
Roland Blom
|
||||||
Roland Krikava
|
Roland Krikava
|
||||||
Roland Zimmermann
|
Roland Zimmermann
|
||||||
Roman Koifman
|
Roman Koifman
|
||||||
@@ -386,17 +457,22 @@ Samuel D
|
|||||||
Samuel Listopad
|
Samuel Listopad
|
||||||
Sander Gates
|
Sander Gates
|
||||||
Saul good
|
Saul good
|
||||||
|
Scott Davis
|
||||||
Sebastien Willemijns
|
Sebastien Willemijns
|
||||||
Sergio Ballestrero
|
Sergio Ballestrero
|
||||||
Seshubabu Pasam
|
Seshubabu Pasam
|
||||||
|
Sh Diao
|
||||||
Shard
|
Shard
|
||||||
Shawn Poulson
|
Shawn Poulson
|
||||||
|
Shmulik Regev
|
||||||
Siddhartha Prakash Jain
|
Siddhartha Prakash Jain
|
||||||
Simon Dick
|
Simon Dick
|
||||||
Simon Josefsson
|
Simon Josefsson
|
||||||
Simon Liu
|
Simon Liu
|
||||||
Spiridonoff A.V
|
Spiridonoff A.V
|
||||||
Stadler Stephan
|
Stadler Stephan
|
||||||
|
Stefan Esser
|
||||||
|
Stefan Krause
|
||||||
Stefan Ulrich
|
Stefan Ulrich
|
||||||
Stephan Bergmann
|
Stephan Bergmann
|
||||||
Stephen Kick
|
Stephen Kick
|
||||||
@@ -413,6 +489,8 @@ Sven Neuhaus
|
|||||||
S<EFBFBD>bastien Willemijns
|
S<EFBFBD>bastien Willemijns
|
||||||
T. Bharath
|
T. Bharath
|
||||||
T. Yamada
|
T. Yamada
|
||||||
|
Temprimus
|
||||||
|
Thomas Klausner
|
||||||
Thomas Schwinge
|
Thomas Schwinge
|
||||||
Thomas Tonino
|
Thomas Tonino
|
||||||
Tim Baker
|
Tim Baker
|
||||||
@@ -421,6 +499,7 @@ Tim Costello
|
|||||||
Tim Sneddon
|
Tim Sneddon
|
||||||
Toby Peterson
|
Toby Peterson
|
||||||
Todd Kulesza
|
Todd Kulesza
|
||||||
|
Todd Vierling
|
||||||
Tom Benoist
|
Tom Benoist
|
||||||
Tom Lee
|
Tom Lee
|
||||||
Tom Mattison
|
Tom Mattison
|
||||||
@@ -431,6 +510,7 @@ Tomas Szepe
|
|||||||
Tomasz Lacki
|
Tomasz Lacki
|
||||||
Tommy Tam
|
Tommy Tam
|
||||||
Ton Voon
|
Ton Voon
|
||||||
|
Toon Verwaest
|
||||||
Tor Arntsen
|
Tor Arntsen
|
||||||
Torsten Foertsch
|
Torsten Foertsch
|
||||||
Toshiyuki Maezawa
|
Toshiyuki Maezawa
|
||||||
@@ -438,7 +518,11 @@ Traian Nicolescu
|
|||||||
Troels Walsted Hansen
|
Troels Walsted Hansen
|
||||||
Troy Engel
|
Troy Engel
|
||||||
Tupone Alfredo
|
Tupone Alfredo
|
||||||
|
Ulf H<>rnhammar
|
||||||
Ulrich Zadow
|
Ulrich Zadow
|
||||||
|
Venkat Akella
|
||||||
|
Victor Snezhko
|
||||||
|
Vilmos Nebehaj
|
||||||
Vincent Bronner
|
Vincent Bronner
|
||||||
Vincent Penquerc'h
|
Vincent Penquerc'h
|
||||||
Vincent Sanders
|
Vincent Sanders
|
||||||
@@ -451,7 +535,11 @@ Wesley Laxton
|
|||||||
Wez Furlong
|
Wez Furlong
|
||||||
Wilfredo Sanchez
|
Wilfredo Sanchez
|
||||||
Wojciech Zwiefka
|
Wojciech Zwiefka
|
||||||
|
Xavier Bouchoux
|
||||||
|
Yang Tse
|
||||||
Yarram Sunil
|
Yarram Sunil
|
||||||
|
Yves Lejeune
|
||||||
Zvi Har'El
|
Zvi Har'El
|
||||||
nk
|
nk
|
||||||
swalkaus at yahoo.com
|
swalkaus at yahoo.com
|
||||||
|
tommink[at]post.pl
|
||||||
|
|||||||
72
docs/TODO
72
docs/TODO
@@ -14,12 +14,6 @@ TODO
|
|||||||
|
|
||||||
LIBCURL
|
LIBCURL
|
||||||
|
|
||||||
* Introduce an interface to libcurl that allows applications to easier get to
|
|
||||||
know what cookies that are received. CURLINFO_COOKIELIST to get a
|
|
||||||
curl_slist with cookies (netscape/mozilla cookie file formatted), and
|
|
||||||
CURLOPT_COOKIELIST to set a list of cookies (using the same format).
|
|
||||||
http://curl.haxx.se/mail/lib-2004-12/0195.html
|
|
||||||
|
|
||||||
* Introduce another callback interface for upload/download that makes one
|
* Introduce another callback interface for upload/download that makes one
|
||||||
less copy of data and thus a faster operation.
|
less copy of data and thus a faster operation.
|
||||||
[http://curl.haxx.se/dev/no_copy_callbacks.txt]
|
[http://curl.haxx.se/dev/no_copy_callbacks.txt]
|
||||||
@@ -43,15 +37,25 @@ TODO
|
|||||||
* Add option that changes the interval in which the progress callback is
|
* Add option that changes the interval in which the progress callback is
|
||||||
called at most.
|
called at most.
|
||||||
|
|
||||||
|
* Make libcurl built with c-ares use c-ares' IPv6 abilities. They weren't
|
||||||
|
present when we first added c-ares support but they have been added since!
|
||||||
|
When this is done and works, we can actually start considering making c-ares
|
||||||
|
powered libcurl the default build (which of course would require that we'd
|
||||||
|
bundle the c-ares source code in the libcurl source code releases).
|
||||||
|
|
||||||
|
* Make the curl/*.h headers include the proper system includes based on what
|
||||||
|
was present at the time when configure was run. Currently, the sys/select.h
|
||||||
|
header is for example included by curl/multi.h only on specific platforms
|
||||||
|
we know MUST have it. This is error-prone. We therefore want the header
|
||||||
|
files to adapt to configure results. Those results must be stored in a new
|
||||||
|
header and they must use a curl name space, i.e not be HAVE_* prefix (as
|
||||||
|
that would risk collide with other apps that use libcurl and that runs
|
||||||
|
configure).
|
||||||
|
|
||||||
LIBCURL - multi interface
|
LIBCURL - multi interface
|
||||||
|
|
||||||
* Add a curl_multi_fdset() alternative. this allows apps to avoid the
|
|
||||||
FD_SETSIZE problem with select().
|
|
||||||
|
|
||||||
* Add curl_multi_timeout() to make libcurl's ares-functionality better.
|
|
||||||
|
|
||||||
* Make sure we don't ever loop because of non-blocking sockets return
|
* Make sure we don't ever loop because of non-blocking sockets return
|
||||||
EWOULDBLOCK or similar. This FTP command sending, the SSL connection etc.
|
EWOULDBLOCK or similar. The GnuTLS connection etc.
|
||||||
|
|
||||||
* Make transfers treated more carefully. We need a way to tell libcurl we
|
* Make transfers treated more carefully. We need a way to tell libcurl we
|
||||||
have data to write, as the current system expects us to upload data each
|
have data to write, as the current system expects us to upload data each
|
||||||
@@ -61,10 +65,6 @@ TODO
|
|||||||
ready to accept read data. Today libcurl feeds the data as soon as it is
|
ready to accept read data. Today libcurl feeds the data as soon as it is
|
||||||
available for reading, no matter what.
|
available for reading, no matter what.
|
||||||
|
|
||||||
* Add curl_multi_socket() and family to the multi interface that gets file
|
|
||||||
descriptors, as an alternative to the curl_multi_fdset(). This is necessary
|
|
||||||
to allow apps to properly avoid the FD_SETSIZE problem.
|
|
||||||
|
|
||||||
* Make curl_easy_perform() a wrapper-function that simply creates a multi
|
* Make curl_easy_perform() a wrapper-function that simply creates a multi
|
||||||
handle, adds the easy handle to it, runs curl_multi_perform() until the
|
handle, adds the easy handle to it, runs curl_multi_perform() until the
|
||||||
transfer is done, then detach the easy handle, destroy the multi handle and
|
transfer is done, then detach the easy handle, destroy the multi handle and
|
||||||
@@ -83,7 +83,7 @@ TODO
|
|||||||
|
|
||||||
* Support GSS/Kerberos 5 for ftp file transfer. This will allow user
|
* Support GSS/Kerberos 5 for ftp file transfer. This will allow user
|
||||||
authentication and file encryption. Possible libraries and example clients
|
authentication and file encryption. Possible libraries and example clients
|
||||||
are available from MIT or Heimdal. Requsted by Markus Moeller.
|
are available from MIT or Heimdal. Requested by Markus Moeller.
|
||||||
|
|
||||||
* REST fix for servers not behaving well on >2GB requests. This should fail
|
* REST fix for servers not behaving well on >2GB requests. This should fail
|
||||||
if the server doesn't set the pointer to the requested index. The tricky
|
if the server doesn't set the pointer to the requested index. The tricky
|
||||||
@@ -111,10 +111,6 @@ TODO
|
|||||||
|
|
||||||
HTTP
|
HTTP
|
||||||
|
|
||||||
* Pipelining. Sending multiple requests before the previous one(s) are done.
|
|
||||||
This could possibly be implemented using the multi interface to queue
|
|
||||||
requests and the response data.
|
|
||||||
|
|
||||||
* When doing CONNECT to a HTTP proxy, libcurl always uses HTTP/1.0. This has
|
* When doing CONNECT to a HTTP proxy, libcurl always uses HTTP/1.0. This has
|
||||||
never been reported as causing trouble to anyone, but should be considered
|
never been reported as causing trouble to anyone, but should be considered
|
||||||
to use the HTTP version the user has chosen.
|
to use the HTTP version the user has chosen.
|
||||||
@@ -131,6 +127,10 @@ TODO
|
|||||||
|
|
||||||
SSL
|
SSL
|
||||||
|
|
||||||
|
* Provide a libcurl API for setting mutex callbacks in the underlying SSL
|
||||||
|
library, so that the same application code can use mutex-locking
|
||||||
|
independently of OpenSSL or GnutTLS being used.
|
||||||
|
|
||||||
* Anton Fedorov's "dumpcert" patch:
|
* Anton Fedorov's "dumpcert" patch:
|
||||||
http://curl.haxx.se/mail/lib-2004-03/0088.html
|
http://curl.haxx.se/mail/lib-2004-03/0088.html
|
||||||
|
|
||||||
@@ -157,18 +157,14 @@ TODO
|
|||||||
Clark)
|
Clark)
|
||||||
|
|
||||||
* Make curl's SSL layer capable of using other free SSL libraries. Such as
|
* Make curl's SSL layer capable of using other free SSL libraries. Such as
|
||||||
Mozilla Security Services
|
MatrixSSL (http://www.matrixssl.org/).
|
||||||
(http://www.mozilla.org/projects/security/pki/nss/), MatrixSSL
|
|
||||||
(http://www.matrixssl.org/) or yaSSL (http://yassl.com/). At least the
|
|
||||||
latter two could be alternatives for those looking to reduce the footprint
|
|
||||||
of libcurl built with OpenSSL or GnuTLS.
|
|
||||||
|
|
||||||
* Peter Sylvester's patch for SRP on the TLS layer.
|
* Peter Sylvester's patch for SRP on the TLS layer.
|
||||||
Awaits OpenSSL support for this, no need to support this in libcurl before
|
Awaits OpenSSL support for this, no need to support this in libcurl before
|
||||||
there's an OpenSSL release that does it.
|
there's an OpenSSL release that does it.
|
||||||
|
|
||||||
* make the configure --with-ssl option first check for OpenSSL and then for
|
* make the configure --with-ssl option first check for OpenSSL, then GnuTLS,
|
||||||
GnuTLS if OpenSSL wasn't detected.
|
then NSS...
|
||||||
|
|
||||||
GnuTLS
|
GnuTLS
|
||||||
|
|
||||||
@@ -182,6 +178,11 @@ TODO
|
|||||||
* Work out a common method with Peter Sylvester's OpenSSL-patch for SRP
|
* Work out a common method with Peter Sylvester's OpenSSL-patch for SRP
|
||||||
on the TLS to provide name and password
|
on the TLS to provide name and password
|
||||||
|
|
||||||
|
* Fix the connection phase to be non-blocking when multi interface is used
|
||||||
|
|
||||||
|
* Add a way to check if the connection seems to be alive, to correspond to
|
||||||
|
the SSL_peak() way we use with OpenSSL.
|
||||||
|
|
||||||
LDAP
|
LDAP
|
||||||
|
|
||||||
* Look over the implementation. The looping will have to "go away" from the
|
* Look over the implementation. The looping will have to "go away" from the
|
||||||
@@ -190,17 +191,8 @@ TODO
|
|||||||
|
|
||||||
NEW PROTOCOLS
|
NEW PROTOCOLS
|
||||||
|
|
||||||
* TFTP - RFC1350 (protocol) and RFC3617 (URI format)
|
|
||||||
|
|
||||||
Dan Fandrich: I wrote a tftp protocol module as part of the I-Boot
|
|
||||||
bootloader under a BSD-style license with attribution clause
|
|
||||||
http://download.intrinsyc.com/supported/tools/i-boot-lite/i-boot-lite-1.8/src/libs/net/tftp.c
|
|
||||||
|
|
||||||
* RTSP - RFC2326 (protocol - very HTTP-like, also contains URL description)
|
* RTSP - RFC2326 (protocol - very HTTP-like, also contains URL description)
|
||||||
|
|
||||||
* SFTP/SCP/SSH (no RFCs for protocol nor URI/URL format). An implementation
|
|
||||||
should most probably use an existing ssh library, such as OpenSSH.
|
|
||||||
|
|
||||||
* RSYNC (no RFCs for protocol nor URI/URL format). An implementation should
|
* RSYNC (no RFCs for protocol nor URI/URL format). An implementation should
|
||||||
most probably use an existing rsync library, such as librsync.
|
most probably use an existing rsync library, such as librsync.
|
||||||
|
|
||||||
@@ -217,7 +209,7 @@ TODO
|
|||||||
* Globbing support for -d and -F, as in 'curl -d "name=foo[0-9]" URL'.
|
* Globbing support for -d and -F, as in 'curl -d "name=foo[0-9]" URL'.
|
||||||
Requested by Dane Jensen and others. This is easily scripted though.
|
Requested by Dane Jensen and others. This is easily scripted though.
|
||||||
|
|
||||||
* Add an option that prevents cURL from overwiting existing local files. When
|
* Add an option that prevents cURL from overwriting existing local files. When
|
||||||
used, and there already is an existing file with the target file name
|
used, and there already is an existing file with the target file name
|
||||||
(either -O or -o), a number should be appended (and increased if already
|
(either -O or -o), a number should be appended (and increased if already
|
||||||
existing). So that index.html becomes first index.html.1 and then
|
existing). So that index.html becomes first index.html.1 and then
|
||||||
@@ -269,6 +261,10 @@ TODO
|
|||||||
|
|
||||||
TEST SUITE
|
TEST SUITE
|
||||||
|
|
||||||
|
* Make our own version of stunnel for simple port forwarding to enable HTTPS
|
||||||
|
and FTP-SSL tests without the stunnel dependency, and it could allow us to
|
||||||
|
provide test tools built with either OpenSSL or GnuTLS
|
||||||
|
|
||||||
* Make the test servers able to serve multiple running test suites. Like if
|
* Make the test servers able to serve multiple running test suites. Like if
|
||||||
two users run 'make test' at once.
|
two users run 'make test' at once.
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
.\" * | (__| |_| | _ <| |___
|
.\" * | (__| |_| | _ <| |___
|
||||||
.\" * \___|\___/|_| \_\_____|
|
.\" * \___|\___/|_| \_\_____|
|
||||||
.\" *
|
.\" *
|
||||||
.\" * Copyright (C) 1998 - 2005, Daniel Stenberg, <daniel@haxx.se>, et al.
|
.\" * Copyright (C) 1998 - 2006, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
.\" *
|
.\" *
|
||||||
.\" * This software is licensed as described in the file COPYING, which
|
.\" * This software is licensed as described in the file COPYING, which
|
||||||
.\" * you should have received as part of this distribution. The terms
|
.\" * you should have received as part of this distribution. The terms
|
||||||
@@ -21,7 +21,7 @@
|
|||||||
.\" * $Id$
|
.\" * $Id$
|
||||||
.\" **************************************************************************
|
.\" **************************************************************************
|
||||||
.\"
|
.\"
|
||||||
.TH curl-config 1 "25 Jan 2004" "Curl 7.13.0" "curl-config manual"
|
.TH curl-config 1 "25 Jan 2004" "Curl 7.15.4" "curl-config manual"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
curl-config \- Get information about a libcurl installation
|
curl-config \- Get information about a libcurl installation
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
@@ -37,6 +37,11 @@ Displays the compiler used to build libcurl.
|
|||||||
.IP "--cflags"
|
.IP "--cflags"
|
||||||
Set of compiler options (CFLAGS) to use when compiling files that use
|
Set of compiler options (CFLAGS) to use when compiling files that use
|
||||||
libcurl. Currently that is only thw include path to the curl include files.
|
libcurl. Currently that is only thw include path to the curl include files.
|
||||||
|
.IP "--checkfor [version]"
|
||||||
|
Specify the oldest possible libcurl version string you want, and this
|
||||||
|
script will return 0 if the current installation is new enough or it
|
||||||
|
returns 1 and outputs a text saying that the current version is not new
|
||||||
|
enough. (Added in 7.15.4)
|
||||||
.IP "--feature"
|
.IP "--feature"
|
||||||
Lists what particular main features the installed libcurl was built with. At
|
Lists what particular main features the installed libcurl was built with. At
|
||||||
the time of writing, this list may include SSL, KRB4 or IPv6. Do not assume
|
the time of writing, this list may include SSL, KRB4 or IPv6. Do not assume
|
||||||
@@ -53,10 +58,10 @@ in $prefix/lib and its header files are installed in $prefix/include and so
|
|||||||
on. The prefix is set with "configure --prefix".
|
on. The prefix is set with "configure --prefix".
|
||||||
.IP "--protocols"
|
.IP "--protocols"
|
||||||
Lists what particular protocols the installed libcurl was built to support. At
|
Lists what particular protocols the installed libcurl was built to support. At
|
||||||
the time of writing, this list may include HTTP, HTTPS, FTP, FTPS, GOPHER,
|
the time of writing, this list may include HTTP, HTTPS, FTP, FTPS, FILE,
|
||||||
FILE, TELNET, LDAP, DICT. Do not assume any particular order. The protocols
|
TELNET, LDAP, DICT. Do not assume any particular order. The protocols will
|
||||||
will be listed using uppercase and are separated by newlines. There may be
|
be listed using uppercase and are separated by newlines. There may be none,
|
||||||
none, one or several protocols in the list. (Added in 7.13.0)
|
one or several protocols in the list. (Added in 7.13.0)
|
||||||
.IP "--version"
|
.IP "--version"
|
||||||
Outputs version information about the installed libcurl.
|
Outputs version information about the installed libcurl.
|
||||||
.IP "--vernum"
|
.IP "--vernum"
|
||||||
@@ -64,7 +69,7 @@ Outputs version information about the installed libcurl, in numerical mode.
|
|||||||
This outputs the version number, in hexadecimal, with 8 bits for each part;
|
This outputs the version number, in hexadecimal, with 8 bits for each part;
|
||||||
major, minor, patch. So that libcurl 7.7.4 would appear as 070704 and libcurl
|
major, minor, patch. So that libcurl 7.7.4 would appear as 070704 and libcurl
|
||||||
12.13.14 would appear as 0c0d0e... Note that the initial zero might be
|
12.13.14 would appear as 0c0d0e... Note that the initial zero might be
|
||||||
omitted.
|
omitted. (This option was broken in the 7.15.0 release.)
|
||||||
.SH "EXAMPLES"
|
.SH "EXAMPLES"
|
||||||
What linker options do I need when I link with libcurl?
|
What linker options do I need when I link with libcurl?
|
||||||
|
|
||||||
|
|||||||
421
docs/curl.1
421
docs/curl.1
@@ -5,7 +5,7 @@
|
|||||||
.\" * | (__| |_| | _ <| |___
|
.\" * | (__| |_| | _ <| |___
|
||||||
.\" * \___|\___/|_| \_\_____|
|
.\" * \___|\___/|_| \_\_____|
|
||||||
.\" *
|
.\" *
|
||||||
.\" * Copyright (C) 1998 - 2005, Daniel Stenberg, <daniel@haxx.se>, et al.
|
.\" * Copyright (C) 1998 - 2007, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
.\" *
|
.\" *
|
||||||
.\" * This software is licensed as described in the file COPYING, which
|
.\" * This software is licensed as described in the file COPYING, which
|
||||||
.\" * you should have received as part of this distribution. The terms
|
.\" * you should have received as part of this distribution. The terms
|
||||||
@@ -21,7 +21,7 @@
|
|||||||
.\" * $Id$
|
.\" * $Id$
|
||||||
.\" **************************************************************************
|
.\" **************************************************************************
|
||||||
.\"
|
.\"
|
||||||
.TH curl 1 "4 Sep 2005" "Curl 7.14.2" "Curl Manual"
|
.TH curl 1 "28 Feb 2007" "Curl 7.16.2" "Curl Manual"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
curl \- transfer a URL
|
curl \- transfer a URL
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
@@ -30,20 +30,20 @@ curl \- transfer a URL
|
|||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
||||||
.B curl
|
.B curl
|
||||||
is a tool to transfer data from or to a server, using one of the supported
|
is a tool to transfer data from or to a server, using one of the supported
|
||||||
protocols (HTTP, HTTPS, FTP, FTPS, TFTP, GOPHER, DICT, TELNET, LDAP or
|
protocols (HTTP, HTTPS, FTP, FTPS, SCP, SFTP, TFTP, DICT, TELNET, LDAP or
|
||||||
FILE). The command is designed to work without user interaction.
|
FILE). The command is designed to work without user interaction.
|
||||||
|
|
||||||
curl offers a busload of useful tricks like proxy support, user
|
curl offers a busload of useful tricks like proxy support, user
|
||||||
authentication, ftp upload, HTTP post, SSL (https:) connections, cookies, file
|
authentication, ftp upload, HTTP post, SSL connections, cookies, file transfer
|
||||||
transfer resume and more. As you will see below, the amount of features will
|
resume and more. As you will see below, the amount of features will make your
|
||||||
make your head spin!
|
head spin!
|
||||||
|
|
||||||
curl is powered by libcurl for all transfer-related features. See
|
curl is powered by libcurl for all transfer-related features. See
|
||||||
.BR libcurl (3)
|
.BR libcurl (3)
|
||||||
for details.
|
for details.
|
||||||
.SH URL
|
.SH URL
|
||||||
The URL syntax is protocol dependent. You'll find a detailed description in
|
The URL syntax is protocol dependent. You'll find a detailed description in
|
||||||
RFC 2396.
|
RFC 3986.
|
||||||
|
|
||||||
You can specify multiple URLs or parts of URLs by writing part sets within
|
You can specify multiple URLs or parts of URLs by writing part sets within
|
||||||
braces as in:
|
braces as in:
|
||||||
@@ -64,6 +64,12 @@ several ones next to each other:
|
|||||||
You can specify any amount of URLs on the command line. They will be fetched
|
You can specify any amount of URLs on the command line. They will be fetched
|
||||||
in a sequential manner in the specified order.
|
in a sequential manner in the specified order.
|
||||||
|
|
||||||
|
Since curl 7.15.1 you can also specify step counter for the ranges, so that
|
||||||
|
you can get every Nth number or letter:
|
||||||
|
|
||||||
|
http://www.numericals.com/file[1-100:10].txt
|
||||||
|
http://www.letters.com/file[a-z:2].txt
|
||||||
|
|
||||||
If you specify URL without protocol:// prefix, curl will attempt to guess what
|
If you specify URL without protocol:// prefix, curl will attempt to guess what
|
||||||
protocol you might want. It will then default to HTTP but try other protocols
|
protocol you might want. It will then default to HTTP but try other protocols
|
||||||
based on often-used host name prefixes. For example, for host names starting
|
based on often-used host name prefixes. For example, for host names starting
|
||||||
@@ -74,6 +80,24 @@ getting many files from the same server will not do multiple connects /
|
|||||||
handshakes. This improves speed. Of course this is only done on files
|
handshakes. This improves speed. Of course this is only done on files
|
||||||
specified on a single command line and cannot be used between separate curl
|
specified on a single command line and cannot be used between separate curl
|
||||||
invokes.
|
invokes.
|
||||||
|
.SH "PROGRESS METER"
|
||||||
|
curl normally displays a progress meter during operations, indicating amount
|
||||||
|
of transfered data, transfer speeds and estimated time left etc.
|
||||||
|
|
||||||
|
However, since curl displays data to the terminal by default, if you invoke
|
||||||
|
curl to do an operation and it is about to write data to the terminal, it
|
||||||
|
\fIdisables\fP the progress meter as otherwise it would mess up the output
|
||||||
|
mixing progress meter and response data.
|
||||||
|
|
||||||
|
If you want a progress meter for HTTP POST or PUT requests, you need to
|
||||||
|
redirect the response output to a file, using shell redirect (>), -o [file] or
|
||||||
|
similar.
|
||||||
|
|
||||||
|
It is not the same case for FTP upload as that operation is not spitting out
|
||||||
|
any response data to the terminal.
|
||||||
|
|
||||||
|
If you prefer a progress "bar" instead of the regular meter, \fI-#\fP is your
|
||||||
|
friend.
|
||||||
.SH OPTIONS
|
.SH OPTIONS
|
||||||
.IP "-a/--append"
|
.IP "-a/--append"
|
||||||
(FTP) When used in an FTP upload, this will tell curl to append to the target
|
(FTP) When used in an FTP upload, this will tell curl to append to the target
|
||||||
@@ -94,7 +118,7 @@ most secure one the remote site claims it supports. This is done by first
|
|||||||
doing a request and checking the response-headers, thus inducing an extra
|
doing a request and checking the response-headers, thus inducing an extra
|
||||||
network round-trip. This is used instead of setting a specific authentication
|
network round-trip. This is used instead of setting a specific authentication
|
||||||
method, which you can do with \fI--basic\fP, \fI--digest\fP, \fI--ntlm\fP, and
|
method, which you can do with \fI--basic\fP, \fI--digest\fP, \fI--ntlm\fP, and
|
||||||
\fI--negotiate\fP. (Added in 7.10.6)
|
\fI--negotiate\fP.
|
||||||
|
|
||||||
Note that using --anyauth is not recommended if you do uploads from stdin,
|
Note that using --anyauth is not recommended if you do uploads from stdin,
|
||||||
since it may require data to be sent twice and then the client must be able to
|
since it may require data to be sent twice and then the client must be able to
|
||||||
@@ -134,7 +158,7 @@ If this option is used twice, the second one will disable ASCII usage.
|
|||||||
(HTTP) Tells curl to use HTTP Basic authentication. This is the default and
|
(HTTP) Tells curl to use HTTP Basic authentication. This is the default and
|
||||||
this option is usually pointless, unless you use it to override a previously
|
this option is usually pointless, unless you use it to override a previously
|
||||||
set option that sets a different authentication method (such as \fI--ntlm\fP,
|
set option that sets a different authentication method (such as \fI--ntlm\fP,
|
||||||
\fI--digest\fP and \fI--negotiate\fP). (Added in 7.10.6)
|
\fI--digest\fP and \fI--negotiate\fP).
|
||||||
|
|
||||||
If this option is used several times, the following occurrences make no
|
If this option is used several times, the following occurrences make no
|
||||||
difference.
|
difference.
|
||||||
@@ -143,6 +167,10 @@ difference.
|
|||||||
must be using valid ciphers. Read up on SSL cipher list details on this URL:
|
must be using valid ciphers. Read up on SSL cipher list details on this URL:
|
||||||
\fIhttp://www.openssl.org/docs/apps/ciphers.html\fP
|
\fIhttp://www.openssl.org/docs/apps/ciphers.html\fP
|
||||||
|
|
||||||
|
NSS ciphers are done differently than OpenSSL and GnuTLS. The full list of
|
||||||
|
NSS ciphers is in the NSSCipherSuite entry at this URL:
|
||||||
|
\fIhttp://directory.fedora.redhat.com/docs/mod_nss.html#Directives\fP
|
||||||
|
|
||||||
If this option is used several times, the last one will override the others.
|
If this option is used several times, the last one will override the others.
|
||||||
.IP "--compressed"
|
.IP "--compressed"
|
||||||
(HTTP) Request a compressed response using one of the algorithms libcurl
|
(HTTP) Request a compressed response using one of the algorithms libcurl
|
||||||
@@ -192,7 +220,8 @@ To create remote directories when using FTP, try \fI--ftp-create-dirs\fP.
|
|||||||
.IP "--crlf"
|
.IP "--crlf"
|
||||||
(FTP) Convert LF to CRLF in upload. Useful for MVS (OS/390).
|
(FTP) Convert LF to CRLF in upload. Useful for MVS (OS/390).
|
||||||
|
|
||||||
If this option is used twice, the second will again disable crlf converting.
|
If this option is used several times, the following occurrences make no
|
||||||
|
difference.
|
||||||
.IP "-d/--data <data>"
|
.IP "-d/--data <data>"
|
||||||
(HTTP) Sends the specified data in a POST request to the HTTP server, in a way
|
(HTTP) Sends the specified data in a POST request to the HTTP server, in a way
|
||||||
that can emulate as if a user has filled in a HTML form and pressed the submit
|
that can emulate as if a user has filled in a HTML form and pressed the submit
|
||||||
@@ -236,7 +265,7 @@ append data.
|
|||||||
prevents the password from being sent over the wire in clear text. Use this in
|
prevents the password from being sent over the wire in clear text. Use this in
|
||||||
combination with the normal \fI-u/--user\fP option to set user name and
|
combination with the normal \fI-u/--user\fP option to set user name and
|
||||||
password. See also \fI--ntlm\fP, \fI--negotiate\fP and \fI--anyauth\fP for
|
password. See also \fI--ntlm\fP, \fI--negotiate\fP and \fI--anyauth\fP for
|
||||||
related options. (Added in curl 7.10.6)
|
related options.
|
||||||
|
|
||||||
If this option is used several times, the following occurrences make no
|
If this option is used several times, the following occurrences make no
|
||||||
difference.
|
difference.
|
||||||
@@ -246,7 +275,7 @@ active FTP transfers. Curl will normally always first attempt to use EPRT,
|
|||||||
then LPRT before using PORT, but with this option, it will use PORT right
|
then LPRT before using PORT, but with this option, it will use PORT right
|
||||||
away. EPRT and LPRT are extensions to the original FTP protocol, may not work
|
away. EPRT and LPRT are extensions to the original FTP protocol, may not work
|
||||||
on all servers but enable more functionality in a better way than the
|
on all servers but enable more functionality in a better way than the
|
||||||
traditional PORT command. (Added in 7.10.5)
|
traditional PORT command.
|
||||||
|
|
||||||
If this option is used several times, each occurrence will toggle this on/off.
|
If this option is used several times, each occurrence will toggle this on/off.
|
||||||
.IP "--disable-epsv"
|
.IP "--disable-epsv"
|
||||||
@@ -270,9 +299,9 @@ If this option is used several times, the last one will be used.
|
|||||||
.IP "-e/--referer <URL>"
|
.IP "-e/--referer <URL>"
|
||||||
(HTTP) Sends the "Referer Page" information to the HTTP server. This can also
|
(HTTP) Sends the "Referer Page" information to the HTTP server. This can also
|
||||||
be set with the \fI-H/--header\fP flag of course. When used with
|
be set with the \fI-H/--header\fP flag of course. When used with
|
||||||
\fI-L/--location\fP you can append ";auto" to the referer URL to make curl
|
\fI-L/--location\fP you can append ";auto" to the --referer URL to make curl
|
||||||
automatically set the previous URL when it follows a Location: header. The
|
automatically set the previous URL when it follows a Location: header. The
|
||||||
\&";auto" string can be used alone, even if you don't set an initial referer.
|
\&";auto" string can be used alone, even if you don't set an initial --referer.
|
||||||
|
|
||||||
If this option is used several times, the last one will be used.
|
If this option is used several times, the last one will be used.
|
||||||
.IP "--engine <name>"
|
.IP "--engine <name>"
|
||||||
@@ -287,25 +316,29 @@ run curl.
|
|||||||
|
|
||||||
If this option is used several times, each occurrence will toggle this on/off.
|
If this option is used several times, each occurrence will toggle this on/off.
|
||||||
.IP "--egd-file <file>"
|
.IP "--egd-file <file>"
|
||||||
(HTTPS) Specify the path name to the Entropy Gathering Daemon socket. The
|
(SSL) Specify the path name to the Entropy Gathering Daemon socket. The socket
|
||||||
socket is used to seed the random engine for SSL connections. See also the
|
is used to seed the random engine for SSL connections. See also the
|
||||||
\fI--random-file\fP option.
|
\fI--random-file\fP option.
|
||||||
.IP "-E/--cert <certificate[:password]>"
|
.IP "-E/--cert <certificate[:password]>"
|
||||||
(HTTPS)
|
(SSL) Tells curl to use the specified certificate file when getting a file
|
||||||
Tells curl to use the specified certificate file when getting a file
|
with HTTPS or FTPS. The certificate must be in PEM format. If the optional
|
||||||
with HTTPS. The certificate must be in PEM format.
|
password isn't specified, it will be queried for on the terminal. Note that
|
||||||
If the optional password isn't specified, it will be queried for on
|
this option assumes a \&"certificate" file that is the private key and the
|
||||||
the terminal. Note that this certificate is the private key and the private
|
private certificate concatenated! See \fI--cert\fP and \fI--key\fP to specify
|
||||||
certificate concatenated!
|
them independently.
|
||||||
|
|
||||||
|
If curl is built against the NSS SSL library then this option tells
|
||||||
|
curl the nickname of the certificate to use within the NSS database defined
|
||||||
|
by --cacert.
|
||||||
|
|
||||||
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 "--cert-type <type>"
|
.IP "--cert-type <type>"
|
||||||
(SSL) Tells curl what certificate type the provided certificate is in. PEM,
|
(SSL) Tells curl what certificate type the provided certificate is in. PEM,
|
||||||
DER and ENG are recognized types.
|
DER and ENG are recognized types. If not specified, PEM is assumed.
|
||||||
|
|
||||||
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
|
(SSL) Tells curl to use the specified certificate file to verify the
|
||||||
peer. The file may contain multiple CA certificates. The certificate(s) must
|
peer. The file may contain multiple CA certificates. The certificate(s) must
|
||||||
be in PEM format.
|
be in PEM format.
|
||||||
|
|
||||||
@@ -317,12 +350,15 @@ The windows version of curl will automatically look for a CA certs file named
|
|||||||
\'curl-ca-bundle.crt\', either in the same directory as curl.exe, or in the
|
\'curl-ca-bundle.crt\', either in the same directory as curl.exe, or in the
|
||||||
Current Working Directory, or in any folder along your PATH.
|
Current Working Directory, or in any folder along your PATH.
|
||||||
|
|
||||||
|
If curl is built against the NSS SSL library then this option tells
|
||||||
|
curl the directory that the NSS certificate database resides in.
|
||||||
|
|
||||||
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 "--capath <CA certificate directory>"
|
.IP "--capath <CA certificate directory>"
|
||||||
(HTTPS) Tells curl to use the specified certificate directory to verify the
|
(SSL) Tells curl to use the specified certificate directory to verify the
|
||||||
peer. The certificates must be in PEM format, and the directory must have been
|
peer. The certificates must be in PEM format, and the directory must have been
|
||||||
processed using the c_rehash utility supplied with openssl. Using
|
processed using the c_rehash utility supplied with openssl. Using
|
||||||
\fI--capath\fP can allow curl to make https connections much more efficiently
|
\fI--capath\fP can allow curl to make SSL-connections much more efficiently
|
||||||
than using \fI--cacert\fP if the \fI--cacert\fP file contains many CA
|
than using \fI--cacert\fP if the \fI--cacert\fP file contains many CA
|
||||||
certificates.
|
certificates.
|
||||||
|
|
||||||
@@ -330,9 +366,13 @@ If this option is used several times, the last one will be used.
|
|||||||
.IP "-f/--fail"
|
.IP "-f/--fail"
|
||||||
(HTTP) Fail silently (no output at all) on server errors. This is mostly done
|
(HTTP) Fail silently (no output at all) on server errors. This is mostly done
|
||||||
like this to better enable scripts etc to better deal with failed attempts. In
|
like this to better enable scripts etc to better deal with failed attempts. In
|
||||||
normal cases when a HTTP server fails to deliver a document, it returns a HTML
|
normal cases when a HTTP server fails to deliver a document, it returns an
|
||||||
document stating so (which often also describes why and more). This flag will
|
HTML document stating so (which often also describes why and more). This flag
|
||||||
prevent curl from outputting that and fail silently instead.
|
will prevent curl from outputting that and return error 22.
|
||||||
|
|
||||||
|
This method is not fail-safe and there are occasions where non-succesful
|
||||||
|
response codes will slip through, especially when authentication is involved
|
||||||
|
(response codes 401 and 407).
|
||||||
|
|
||||||
If this option is used twice, the second will again disable silent failure.
|
If this option is used twice, the second will again disable silent failure.
|
||||||
.IP "--ftp-account [data]"
|
.IP "--ftp-account [data]"
|
||||||
@@ -344,15 +384,37 @@ If this option is used twice, the second will override the previous use.
|
|||||||
.IP "--ftp-create-dirs"
|
.IP "--ftp-create-dirs"
|
||||||
(FTP) When an FTP URL/operation uses a path that doesn't currently exist on
|
(FTP) When an FTP URL/operation uses a path that doesn't currently exist on
|
||||||
the server, the standard behavior of curl is to fail. Using this option, curl
|
the server, the standard behavior of curl is to fail. Using this option, curl
|
||||||
will instead attempt to create missing directories. (Added in 7.10.7)
|
will instead attempt to create missing directories.
|
||||||
|
|
||||||
If this option is used twice, the second will again disable silent failure.
|
If this option is used twice, the second will again disable directory creation.
|
||||||
|
.IP "--ftp-method [method]"
|
||||||
|
(FTP) Control what method curl should use to reach a file on a FTP(S)
|
||||||
|
server. The method argument should be one of the following alternatives:
|
||||||
|
.RS
|
||||||
|
.IP multicwd
|
||||||
|
curl does a single CWD operation for each path part in the given URL. For deep
|
||||||
|
hierarchies this means very many commands. This is how RFC1738 says it should
|
||||||
|
be done. This is the default but the slowest behavior.
|
||||||
|
.IP nocwd
|
||||||
|
curl does no CWD at all. curl will do SIZE, RETR, STOR etc and give a full
|
||||||
|
path to the server for all these commands. This is the fastest behavior.
|
||||||
|
.IP singlecwd
|
||||||
|
curl does one CWD with the full target directory and then operates on the file
|
||||||
|
\&"normally" (like in the multicwd case). This is somewhat more standards
|
||||||
|
compliant than 'nocwd' but without the full penalty of 'multicwd'.
|
||||||
|
.RE
|
||||||
.IP "--ftp-pasv"
|
.IP "--ftp-pasv"
|
||||||
(FTP) Use PASV when transferring. PASV is the internal default behavior, but
|
(FTP) Use PASV when transferring. PASV is the internal default behavior, but
|
||||||
using this option can be used to override a previous --ftp-port option. (Added
|
using this option can be used to override a previous --ftp-port option. (Added
|
||||||
in 7.11.0)
|
in 7.11.0)
|
||||||
|
|
||||||
If this option is used twice, the second will again disable silent failure.
|
If this option is used several times, the following occurrences make no
|
||||||
|
difference.
|
||||||
|
.IP "--ftp-alternative-to-user <command>"
|
||||||
|
(FTP) If authenticating with the USER and PASS commands fails, send this
|
||||||
|
command. When connecting to Tumbleweed's Secure Transport server over FTPS
|
||||||
|
using a client certificate, using "SITE AUTH" will tell the server to retrieve
|
||||||
|
the username from the certificate. (Added in 7.15.5)
|
||||||
.IP "--ftp-skip-pasv-ip"
|
.IP "--ftp-skip-pasv-ip"
|
||||||
(FTP) Tell curl to not use the IP address the server suggests in its response
|
(FTP) Tell curl to not use the IP address the server suggests in its response
|
||||||
to curl's PASV command when curl connects the data connection. Instead curl
|
to curl's PASV command when curl connects the data connection. Instead curl
|
||||||
@@ -361,11 +423,43 @@ connection. (Added in 7.14.2)
|
|||||||
|
|
||||||
This option has no effect if PORT, EPRT or EPSV is used instead of PASV.
|
This option has no effect if PORT, EPRT or EPSV is used instead of PASV.
|
||||||
|
|
||||||
If this option is used twice, the second will again disable silent failure.
|
If this option is used twice, the second will again use the server's suggested
|
||||||
|
address.
|
||||||
.IP "--ftp-ssl"
|
.IP "--ftp-ssl"
|
||||||
(FTP) Make the FTP connection switch to use SSL/TLS. (Added in 7.11.0)
|
(FTP) Try to use SSL/TLS for the FTP connection. Reverts to a non-secure
|
||||||
|
connection if the server doesn't support SSL/TLS. See also
|
||||||
|
\fI--ftp-ssl-control\fP and \fI--ftp-ssl-reqd\fP for different levels of
|
||||||
|
encryption required. (Added in 7.11.0)
|
||||||
|
|
||||||
If this option is used twice, the second will again disable this.
|
If this option is used twice, the second will again disable this.
|
||||||
|
.IP "--ftp-ssl-control"
|
||||||
|
(FTP) Require SSL/TLS for the ftp login, clear for transfer. Allows secure
|
||||||
|
authentication, but non-encrypted data transfers for efficiency. Fails the
|
||||||
|
transfer if the server doesn't support SSL/TLS. (Added in 7.16.0)
|
||||||
|
|
||||||
|
If this option is used twice, the second will again disable this.
|
||||||
|
.IP "--ftp-ssl-reqd"
|
||||||
|
(FTP) Require SSL/TLS for the FTP connection.
|
||||||
|
Terminates the connection if the server doesn't support SSL/TLS.
|
||||||
|
(Added in 7.15.5)
|
||||||
|
|
||||||
|
If this option is used twice, the second will again disable this.
|
||||||
|
.IP "--ftp-ssl-ccc"
|
||||||
|
(FTP) Use CCC (Clear Command Channel)
|
||||||
|
Shuts down the SSL/TLS layer after authenticating. The rest of the
|
||||||
|
control channel communication will be unencrypted. This allows
|
||||||
|
NAT routers to follow the FTP transaction. The default mode is
|
||||||
|
passive. See --ftp-ssl-ccc-mode for other modes.
|
||||||
|
(Added in 7.16.1)
|
||||||
|
|
||||||
|
If this option is used twice, the second will again disable this.
|
||||||
|
.IP "--ftp-ssl-ccc-mode [active/passive]"
|
||||||
|
(FTP) Use CCC (Clear Command Channel)
|
||||||
|
Sets the CCC mode. The passive mode will not initiate the shutdown, but
|
||||||
|
instead wait for the server to do it, and will not reply to the
|
||||||
|
shutdown from the server. The active mode initiates the shutdown and
|
||||||
|
waits for a reply from the server.
|
||||||
|
(Added in 7.16.2)
|
||||||
.IP "-F/--form <name=content>"
|
.IP "-F/--form <name=content>"
|
||||||
(HTTP) This lets curl emulate a filled in form in which a user has pressed the
|
(HTTP) This lets curl emulate a filled in form in which a user has pressed the
|
||||||
submit button. This causes curl to POST data using the Content-Type
|
submit button. This causes curl to POST data using the Content-Type
|
||||||
@@ -422,7 +516,8 @@ with a '?' separator.
|
|||||||
If used in combination with -I, the POST data will instead be appended to the
|
If used in combination with -I, the POST data will instead be appended to the
|
||||||
URL with a HEAD request.
|
URL with a HEAD request.
|
||||||
|
|
||||||
If used multiple times, nothing special happens.
|
If this option is used several times, the following occurrences make no
|
||||||
|
difference.
|
||||||
.IP "-h/--help"
|
.IP "-h/--help"
|
||||||
Usage help.
|
Usage help.
|
||||||
.IP "-H/--header <header>"
|
.IP "-H/--header <header>"
|
||||||
@@ -431,9 +526,9 @@ of extra headers. Note that if you should add a custom header that has the
|
|||||||
same name as one of the internal ones curl would use, your externally set
|
same name as one of the internal ones curl would use, your externally set
|
||||||
header will be used instead of the internal one. This allows you to make even
|
header will be used instead of the internal one. This allows you to make even
|
||||||
trickier stuff than curl would normally do. You should not replace internally
|
trickier stuff than curl would normally do. You should not replace internally
|
||||||
set headers without knowing perfectly well what you're doing. Replacing an
|
set headers without knowing perfectly well what you're doing. Remove an
|
||||||
internal header with one without content on the right side of the colon will
|
internal header by giving a replacement without content on the right side of
|
||||||
prevent that header from appearing.
|
the colon, as in: -H \&"Host:".
|
||||||
|
|
||||||
curl will make sure that each header you add/replace get sent with the proper
|
curl will make sure that each header you add/replace get sent with the proper
|
||||||
end of line marker, you should thus \fBnot\fP add that as a part of the header
|
end of line marker, you should thus \fBnot\fP add that as a part of the header
|
||||||
@@ -473,25 +568,28 @@ If this option is used twice, the second will again disable header only.
|
|||||||
(HTTP) When curl is told to read cookies from a given file, this option will
|
(HTTP) When curl is told to read cookies from a given file, this option will
|
||||||
make it discard all "session cookies". This will basically have the same effect
|
make it discard all "session cookies". This will basically have the same effect
|
||||||
as if a new session is started. Typical browsers always discard session
|
as if a new session is started. Typical browsers always discard session
|
||||||
cookies when they're closed down. (Added in 7.9.7)
|
cookies when they're closed down.
|
||||||
|
|
||||||
If this option is used several times, each occurrence will toggle this on/off.
|
If this option is used several times, each occurrence will toggle this on/off.
|
||||||
.IP "-k/--insecure"
|
.IP "-k/--insecure"
|
||||||
(SSL) This option explicitly allows curl to perform "insecure" SSL connections
|
(SSL) This option explicitly allows curl to perform "insecure" SSL connections
|
||||||
and transfers. Starting with curl 7.10, all SSL connections will be attempted
|
and transfers. All SSL connections are attempted to be made secure by using
|
||||||
to be made secure by using the CA certificate bundle installed by
|
the CA certificate bundle installed by default. This makes all connections
|
||||||
default. This makes all connections considered "insecure" to fail unless
|
considered "insecure" to fail unless \fI-k/--insecure\fP is used.
|
||||||
\fI-k/--insecure\fP is used.
|
|
||||||
|
See this online resource for further details:
|
||||||
|
\fBhttp://curl.haxx.se/docs/sslcerts.html\fP
|
||||||
|
|
||||||
If this option is used twice, the second time will again disable it.
|
If this option is used twice, the second time will again disable it.
|
||||||
.IP "--key <key>"
|
.IP "--key <key>"
|
||||||
(SSL) Private key file name. Allows you to provide your private key in this
|
(SSL/SSH) Private key file name. Allows you to provide your private key in this
|
||||||
separate file.
|
separate file.
|
||||||
|
|
||||||
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 "--key-type <type>"
|
.IP "--key-type <type>"
|
||||||
(SSL) Private key file type. Specify which type your \fI--key\fP provided
|
(SSL) Private key file type. Specify which type your \fI--key\fP provided
|
||||||
private key is. DER, PEM and ENG are supported.
|
private key is. DER, PEM and ENG are supported. If not specified, PEM is
|
||||||
|
assumed.
|
||||||
|
|
||||||
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 "--krb4 <level>"
|
.IP "--krb4 <level>"
|
||||||
@@ -508,11 +606,13 @@ Specify which config file to read curl arguments from. The config file is a
|
|||||||
text file in which command line arguments can be written which then will be
|
text file in which command line arguments can be written which then will be
|
||||||
used as if they were written on the actual command line. Options and their
|
used as if they were written on the actual command line. Options and their
|
||||||
parameters must be specified on the same config file line. If the parameter is
|
parameters must be specified on the same config file line. If the parameter is
|
||||||
to contain white spaces, the parameter must be inclosed within quotes. If the
|
to contain white spaces, the parameter must be enclosed within quotes. If the
|
||||||
first column of a config line is a '#' character, the rest of the line will be
|
first column of a config line is a '#' character, the rest of the line will be
|
||||||
treated as a comment.
|
treated as a comment. Only write one option per physical line in the config
|
||||||
|
file.
|
||||||
|
|
||||||
Specify the filename as '-' to make curl read the file from stdin.
|
Specify the filename to -K/--config as '-' to make curl read the file from
|
||||||
|
stdin.
|
||||||
|
|
||||||
Note that to be able to specify a URL in the config file, you need to specify
|
Note that to be able to specify a URL in the config file, you need to specify
|
||||||
it using the \fI--url\fP option, and not by simply writing the URL on its own
|
it using the \fI--url\fP option, and not by simply writing the URL on its own
|
||||||
@@ -520,7 +620,8 @@ line. So, it could look similar to this:
|
|||||||
|
|
||||||
url = "http://curl.haxx.se/docs/"
|
url = "http://curl.haxx.se/docs/"
|
||||||
|
|
||||||
This option can be used multiple times.
|
Long option names can optionally be given in the config file without the
|
||||||
|
initial double dashes.
|
||||||
|
|
||||||
When curl is invoked, it always (unless \fI-q\fP is used) checks for a default
|
When curl is invoked, it always (unless \fI-q\fP is used) checks for a default
|
||||||
config file and uses it if found. The default config file is checked for in
|
config file and uses it if found. The default config file is checked for in
|
||||||
@@ -535,6 +636,28 @@ resort the '%USERPROFILE%\Application Data'.
|
|||||||
2) On windows, if there is no _curlrc file in the home dir, it checks for one
|
2) On windows, if there is no _curlrc file in the home dir, it checks for one
|
||||||
in the same dir the executable curl is placed. On unix-like systems, it will
|
in the same dir the executable curl is placed. On unix-like systems, it will
|
||||||
simply try to load .curlrc from the determined home dir.
|
simply try to load .curlrc from the determined home dir.
|
||||||
|
|
||||||
|
.nf
|
||||||
|
# --- Example file ---
|
||||||
|
# this is a comment
|
||||||
|
url = "curl.haxx.se"
|
||||||
|
output = "curlhere.html"
|
||||||
|
user-agent = "superagent/1.0"
|
||||||
|
|
||||||
|
# and fetch another URL too
|
||||||
|
url = "curl.haxx.se/docs/manpage.html"
|
||||||
|
-O
|
||||||
|
referer = "http://nowhereatall.com/"
|
||||||
|
# --- End of example file ---
|
||||||
|
.fi
|
||||||
|
|
||||||
|
This option can be used multiple times to load multiple config files.
|
||||||
|
.IP "--libcurl <file>"
|
||||||
|
Append this option to any ordinary curl command line, and you will get a
|
||||||
|
libcurl-using source code written to the file that does the equivalent
|
||||||
|
operation of what your command line operation does!
|
||||||
|
|
||||||
|
If this option is used several times, the last given file name will be used.
|
||||||
.IP "--limit-rate <speed>"
|
.IP "--limit-rate <speed>"
|
||||||
Specify the maximum transfer rate you want curl to use. This feature is useful
|
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
|
||||||
@@ -544,12 +667,14 @@ The given speed is measured in bytes/second, unless a suffix is appended.
|
|||||||
Appending 'k' or 'K' will count the number as kilobytes, 'm' or M' makes it
|
Appending 'k' or 'K' will count the number as kilobytes, 'm' or M' makes it
|
||||||
megabytes while 'g' or 'G' makes it gigabytes. Examples: 200K, 3m and 1G.
|
megabytes while 'g' or 'G' makes it gigabytes. Examples: 200K, 3m and 1G.
|
||||||
|
|
||||||
|
The given rate is the average speed, counted during the entire transfer. It
|
||||||
|
means that curl might use higher transfer speeds in short bursts, but over
|
||||||
|
time it uses no more than the given rate.
|
||||||
|
|
||||||
If you are also using the \fI-Y/--speed-limit\fP option, that option will take
|
If you are also using the \fI-Y/--speed-limit\fP option, that option will take
|
||||||
precedence and might cripple the rate-limiting slightly, to help keeping the
|
precedence and might cripple the rate-limiting slightly, to help keeping the
|
||||||
speed-limit logic working.
|
speed-limit logic working.
|
||||||
|
|
||||||
This option was introduced in curl 7.10.
|
|
||||||
|
|
||||||
If this option is used several times, the last one will be used.
|
If this option is used several times, the last one will be used.
|
||||||
.IP "-l/--list-only"
|
.IP "-l/--list-only"
|
||||||
(FTP)
|
(FTP)
|
||||||
@@ -563,15 +688,21 @@ list only files in their response to NLST; they do not include
|
|||||||
subdirectories and symbolic links.
|
subdirectories and symbolic links.
|
||||||
|
|
||||||
If this option is used twice, the second will again disable list only.
|
If this option is used twice, the second will again disable list only.
|
||||||
|
.IP "--local-port <num>[-num]"
|
||||||
|
Set a prefered number or range of local port numbers to use for the
|
||||||
|
connection(s). Note that port numbers by nature is a scarce resource that
|
||||||
|
will be busy at times so setting this range to something too narrow might
|
||||||
|
cause unnecessary connection setup failures. (Added in 7.15.2)
|
||||||
.IP "-L/--location"
|
.IP "-L/--location"
|
||||||
(HTTP/HTTPS) If the server reports that the requested page has a different
|
(HTTP/HTTPS) If the server reports that the requested page has moved to a
|
||||||
location (indicated with the header line Location:) this flag will let curl
|
different location (indicated with a Location: header and a 3XX response code)
|
||||||
attempt to reattempt the get on the new place. If used together with
|
this option will make curl redo the request on the new place. If used together
|
||||||
\fI-i/--include\fP or \fI-I/--head\fP, headers from all requested pages will
|
with \fI-i/--include\fP or \fI-I/--head\fP, headers from all requested pages
|
||||||
be shown. If authentication is used, curl will only send its credentials to
|
will be shown. When authentication is used, curl only sends its credentials to
|
||||||
the initial host, so if a redirect takes curl to a different host, it won't
|
the initial host. If a redirect takes curl to a different host, it won't be
|
||||||
intercept the user+password. See also \fI--location-trusted\fP on how to
|
able to intercept the user+password. See also \fI--location-trusted\fP on how
|
||||||
change this.
|
to change this. You can limit the amount of redirects to follow by using the
|
||||||
|
\fI--max-redirs\fP option.
|
||||||
|
|
||||||
If this option is used twice, the second will again disable location following.
|
If this option is used twice, the second will again disable location following.
|
||||||
.IP "--location-trusted"
|
.IP "--location-trusted"
|
||||||
@@ -625,12 +756,16 @@ Very similar to \fI--netrc\fP, but this option makes the .netrc usage
|
|||||||
designed by Microsoft and is used in their web applications. It is primarily
|
designed by Microsoft and is used in their web applications. It is primarily
|
||||||
meant as a support for Kerberos5 authentication but may be also used along
|
meant as a support for Kerberos5 authentication but may be also used along
|
||||||
with another authentication methods. For more information see IETF draft
|
with another authentication methods. For more information see IETF draft
|
||||||
draft-brezak-spnego-http-04.txt. (Added in 7.10.6)
|
draft-brezak-spnego-http-04.txt.
|
||||||
|
|
||||||
This option requires that the library was built with GSSAPI support. This is
|
This option requires that the library was built with GSSAPI support. This is
|
||||||
not very common. Use \fI-V/--version\fP to see if your version supports
|
not very common. Use \fI-V/--version\fP to see if your version supports
|
||||||
GSS-Negotiate.
|
GSS-Negotiate.
|
||||||
|
|
||||||
|
When using this option, you must also provide a fake -u/--user option to
|
||||||
|
activate the authentication code properly. Sending a '-u :' is enough as the
|
||||||
|
user name and password from the -u option aren't actually used.
|
||||||
|
|
||||||
If this option is used several times, the following occurrences make no
|
If this option is used several times, the following occurrences make no
|
||||||
difference.
|
difference.
|
||||||
.IP "-N/--no-buffer"
|
.IP "-N/--no-buffer"
|
||||||
@@ -640,13 +775,22 @@ will output the data in chunks, not necessarily exactly when the data arrives.
|
|||||||
Using this option will disable that buffering.
|
Using this option will disable that buffering.
|
||||||
|
|
||||||
If this option is used twice, the second will again switch on buffering.
|
If this option is used twice, the second will again switch on buffering.
|
||||||
|
.IP "--no-sessionid"
|
||||||
|
(SSL) Disable curl's use of SSL session-ID caching. By default all transfers
|
||||||
|
are done using the cache. Note that while nothing ever should get hurt by
|
||||||
|
attempting to reuse SSL session-IDs, there seem to be broken SSL
|
||||||
|
implementations in the wild that may require you to disable this in order for
|
||||||
|
you to succeed. (Added in 7.16.0)
|
||||||
|
|
||||||
|
If this option is used twice, the second will again switch on use of the
|
||||||
|
session cache.
|
||||||
.IP "--ntlm"
|
.IP "--ntlm"
|
||||||
(HTTP) Enables NTLM authentication. The NTLM authentication method was
|
(HTTP) Enables NTLM authentication. The NTLM authentication method was
|
||||||
designed by Microsoft and is used by IIS web servers. It is a proprietary
|
designed by Microsoft and is used by IIS web servers. It is a proprietary
|
||||||
protocol, reversed engineered by clever people and implemented in curl based
|
protocol, reversed engineered by clever people and implemented in curl based
|
||||||
on their efforts. This kind of behavior should not be endorsed, you should
|
on their efforts. This kind of behavior should not be endorsed, you should
|
||||||
encourage everyone who uses NTLM to switch to a public and documented
|
encourage everyone who uses NTLM to switch to a public and documented
|
||||||
authentication method instead. Such as Digest. (Added in 7.10.6)
|
authentication method instead. Such as Digest.
|
||||||
|
|
||||||
If you want to enable NTLM for your proxy authentication, then use
|
If you want to enable NTLM for your proxy authentication, then use
|
||||||
\fI--proxy-ntlm\fP.
|
\fI--proxy-ntlm\fP.
|
||||||
@@ -676,18 +820,18 @@ dynamically.
|
|||||||
Write output to a local file named like the remote file we get. (Only the file
|
Write output to a local file named like the remote file we get. (Only the file
|
||||||
part of the remote file is used, the path is cut off.)
|
part of the remote file is used, the path is cut off.)
|
||||||
|
|
||||||
The remote file name to use for saving is extracted from the given URL.
|
The remote file name to use for saving is extracted from the given URL,
|
||||||
Nothing else
|
nothing else.
|
||||||
|
|
||||||
You may use this option as many times as you have number of URLs.
|
You may use this option as many times as you have number of URLs.
|
||||||
.IP "--pass <phrase>"
|
.IP "--pass <phrase>"
|
||||||
(SSL) Pass phrase for the private key
|
(SSL/SSH) Pass phrase for the private key
|
||||||
|
|
||||||
If this option is used several times, the last one will be used.
|
If this option is used several times, the last one will be used.
|
||||||
.IP "--proxy-anyauth"
|
.IP "--proxy-anyauth"
|
||||||
Tells curl to pick a suitable authentication method when communicating with
|
Tells curl to pick a suitable authentication method when communicating with
|
||||||
the given proxy. This will cause an extra request/response round-trip. Added
|
the given proxy. This will cause an extra request/response round-trip. (Added
|
||||||
in curl 7.13.2.
|
in 7.13.2)
|
||||||
|
|
||||||
If this option is used twice, the second will again disable the proxy use-any
|
If this option is used twice, the second will again disable the proxy use-any
|
||||||
authentication.
|
authentication.
|
||||||
@@ -716,6 +860,11 @@ CONNECT request and requires that the proxy allows direct connect to the
|
|||||||
remote port number 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 "--pubkey <key>"
|
||||||
|
(SSH) Public key file name. Allows you to provide your public key in this
|
||||||
|
separate file.
|
||||||
|
|
||||||
|
If this option is used several times, the last one will be used.
|
||||||
.IP "-P/--ftp-port <address>"
|
.IP "-P/--ftp-port <address>"
|
||||||
(FTP) Reverses the initiator/listener roles when connecting with ftp. This
|
(FTP) Reverses the initiator/listener roles when connecting with ftp. This
|
||||||
switch makes Curl use the PORT command instead of PASV. In practice, PORT
|
switch makes Curl use the PORT command instead of PASV. In practice, PORT
|
||||||
@@ -730,7 +879,8 @@ i.e "192.168.10.1" to specify exact IP number
|
|||||||
.IP "host name"
|
.IP "host name"
|
||||||
i.e "my.host.domain" to specify machine
|
i.e "my.host.domain" to specify machine
|
||||||
.IP "-"
|
.IP "-"
|
||||||
(any single-letter string) to make it pick the machine's default
|
make curl pick the same IP address that is already used for the control
|
||||||
|
connection
|
||||||
.RE
|
.RE
|
||||||
|
|
||||||
If this option is used several times, the last one will be used. Disable the
|
If this option is used several times, the last one will be used. Disable the
|
||||||
@@ -752,7 +902,7 @@ must send syntactically correct FTP commands as RFC959 defines.
|
|||||||
|
|
||||||
This option can be used multiple times.
|
This option can be used multiple times.
|
||||||
.IP "--random-file <file>"
|
.IP "--random-file <file>"
|
||||||
(HTTPS) Specify the path name to file containing what will be considered as
|
(SSL) Specify the path name to file containing what will be considered as
|
||||||
random data. The data is used to seed the random engine for SSL connections.
|
random data. The data is used to seed the random engine for SSL connections.
|
||||||
See also the \fI--egd-file\fP option.
|
See also the \fI--egd-file\fP option.
|
||||||
.IP "-r/--range <range>"
|
.IP "-r/--range <range>"
|
||||||
@@ -770,7 +920,7 @@ specifies the second 500 bytes
|
|||||||
.B -500
|
.B -500
|
||||||
specifies the last 500 bytes
|
specifies the last 500 bytes
|
||||||
.TP
|
.TP
|
||||||
.B 9500
|
.B 9500-
|
||||||
specifies the bytes from offset 9500 and forward
|
specifies the bytes from offset 9500 and forward
|
||||||
.TP
|
.TP
|
||||||
.B 0-0,-1
|
.B 0-0,-1
|
||||||
@@ -794,6 +944,11 @@ FTP range downloads only support the simple syntax 'start-stop' (optionally
|
|||||||
with one of the numbers omitted). It depends on the non-RFC command SIZE.
|
with one of the numbers omitted). It depends on the non-RFC command SIZE.
|
||||||
|
|
||||||
If this option is used several times, the last one will be used.
|
If this option is used several times, the last one will be used.
|
||||||
|
.IP "--raw"
|
||||||
|
When used, it disables all internal HTTP decoding of content or transfer
|
||||||
|
encodings and instead makes them passed on unaltered, raw. (Added in 7.16.2)
|
||||||
|
|
||||||
|
If this option is used several times, each occurrence toggles this on/off.
|
||||||
.IP "-R/--remote-time"
|
.IP "-R/--remote-time"
|
||||||
When used, this will make libcurl attempt to figure out the timestamp of the
|
When used, this will make libcurl attempt to figure out the timestamp of the
|
||||||
remote file, and if that is available make the local file get that same
|
remote file, and if that is available make the local file get that same
|
||||||
@@ -811,7 +966,7 @@ for all forthcoming retries it will double the waiting time until it reaches
|
|||||||
10 minutes which then will be the delay between the rest of the retries. By
|
10 minutes which then will be the delay between the rest of the retries. By
|
||||||
using \fI--retry-delay\fP you disable this exponential backoff algorithm. See
|
using \fI--retry-delay\fP you disable this exponential backoff algorithm. See
|
||||||
also \fI--retry-max-time\fP to limit the total time allowed for
|
also \fI--retry-max-time\fP to limit the total time allowed for
|
||||||
retries. (Option added in 7.12.3)
|
retries. (Added in 7.12.3)
|
||||||
|
|
||||||
If this option is used multiple times, the last occurrence decide the amount.
|
If this option is used multiple times, the last occurrence decide the amount.
|
||||||
.IP "--retry-delay <seconds>"
|
.IP "--retry-delay <seconds>"
|
||||||
@@ -819,7 +974,7 @@ Make curl sleep this amount of time between each retry when a transfer has
|
|||||||
failed with a transient error (it changes the default backoff time algorithm
|
failed with a transient error (it changes the default backoff time algorithm
|
||||||
between retries). This option is only interesting if \fI--retry\fP is also
|
between retries). This option is only interesting if \fI--retry\fP is also
|
||||||
used. Setting this delay to zero will make curl use the default backoff time.
|
used. Setting this delay to zero will make curl use the default backoff time.
|
||||||
(Option added in 7.12.3)
|
(Added in 7.12.3)
|
||||||
|
|
||||||
If this option is used multiple times, the last occurrence decide the amount.
|
If this option is used multiple times, the last occurrence decide the amount.
|
||||||
.IP "--retry-max-time <seconds>"
|
.IP "--retry-max-time <seconds>"
|
||||||
@@ -828,26 +983,36 @@ done as usual (see \fI--retry\fP) as long as the timer hasn't reached this
|
|||||||
given limit. Notice that if the timer hasn't reached the limit, the request
|
given limit. Notice that if the timer hasn't reached the limit, the request
|
||||||
will be made and while performing, it may take longer than this given time
|
will be made and while performing, it may take longer than this given time
|
||||||
period. To limit a single request\'s maximum time, use \fI-m/--max-time\fP.
|
period. To limit a single request\'s maximum time, use \fI-m/--max-time\fP.
|
||||||
Set this option to zero to not timeout retries. (Option added in 7.12.3)
|
Set this option to zero to not timeout retries. (Added in 7.12.3)
|
||||||
|
|
||||||
If this option is used multiple times, the last occurrence decide the amount.
|
If this option is used multiple times, the last occurrence decide the amount.
|
||||||
.IP "-s/--silent"
|
.IP "-s/--silent"
|
||||||
Silent mode. Don't show progress meter or error messages. Makes
|
Silent mode. Don't show progress meter or error messages. Makes
|
||||||
Curl mute.
|
Curl mute.
|
||||||
|
|
||||||
If this option is used twice, the second will again disable mute.
|
If this option is used twice, the second will again disable silent mode.
|
||||||
.IP "-S/--show-error"
|
.IP "-S/--show-error"
|
||||||
When used with -s it makes curl show error message if it fails.
|
When used with -s it makes curl show error message if it fails.
|
||||||
|
|
||||||
If this option is used twice, the second will again disable show error.
|
If this option is used twice, the second will again disable show error.
|
||||||
.IP "--socks <host[:port]>"
|
.IP "--socks4 <host[:port]>"
|
||||||
Use the specified SOCKS5 proxy. If the port number is not specified, it is
|
Use the specified SOCKS4 proxy. If the port number is not specified, it is
|
||||||
assumed at port 1080. (Option added in 7.11.1)
|
assumed at port 1080. (Added in 7.15.2)
|
||||||
|
|
||||||
This option overrides any previous use of \fI-x/--proxy\fP, as they are
|
This option overrides any previous use of \fI-x/--proxy\fP, as they are
|
||||||
mutually exclusive.
|
mutually exclusive.
|
||||||
|
|
||||||
If this option is used several times, the last one will be used.
|
If this option is used several times, the last one will be used.
|
||||||
|
.IP "--socks5 <host[:port]>"
|
||||||
|
Use the specified SOCKS5 proxy. If the port number is not specified, it is
|
||||||
|
assumed at port 1080. (Added in 7.11.1)
|
||||||
|
|
||||||
|
This option overrides any previous use of \fI-x/--proxy\fP, as they are
|
||||||
|
mutually exclusive.
|
||||||
|
|
||||||
|
If this option is used several times, the last one will be used. (This option
|
||||||
|
was previously wrongly documented and used as --socks without the number
|
||||||
|
appended.)
|
||||||
.IP "--stderr <file>"
|
.IP "--stderr <file>"
|
||||||
Redirect all writes to stderr to the specified file instead. If the file name
|
Redirect all writes to stderr to the specified file instead. If the file name
|
||||||
is a plain '-', it is instead written to stdout. This option has no point when
|
is a plain '-', it is instead written to stdout. This option has no point when
|
||||||
@@ -877,13 +1042,10 @@ this is used on a http(s) server, the PUT command will be used.
|
|||||||
|
|
||||||
Use the file name "-" (a single dash) to use stdin instead of a given file.
|
Use the file name "-" (a single dash) to use stdin instead of a given file.
|
||||||
|
|
||||||
Before 7.10.8, when this option was used several times, the last one was used.
|
You can specify one -T for each URL on the command line. Each -T + URL pair
|
||||||
|
specifies what to upload and to where. curl also supports "globbing" of the -T
|
||||||
In curl 7.10.8 and later, you can specify one -T for each URL on the command
|
argument, meaning that you can upload multiple files to a single URL by using
|
||||||
line. Each -T + URL pair specifies what to upload and to where. curl also
|
the same URL globbing style supported in the URL, like this:
|
||||||
supports "globbing" of the -T argument, meaning that you can upload multiple
|
|
||||||
files to a single URL by using the same URL globbing style supported in the
|
|
||||||
URL, like this:
|
|
||||||
|
|
||||||
curl -T "{file1,file2}" http://www.uploadtothissite.com
|
curl -T "{file1,file2}" http://www.uploadtothissite.com
|
||||||
|
|
||||||
@@ -895,8 +1057,10 @@ Enables a full trace dump of all incoming and outgoing data, including
|
|||||||
descriptive information, to the given output file. Use "-" as filename to have
|
descriptive information, to the given output file. Use "-" as filename to have
|
||||||
the output sent to stdout.
|
the output sent to stdout.
|
||||||
|
|
||||||
If this option is used several times, the last one will be used. (Added in
|
This option overrides previous uses of \fI-v/--verbose\fP or
|
||||||
7.9.7)
|
\fI--trace-ascii\fP.
|
||||||
|
|
||||||
|
If this option is used several times, the last one will be used.
|
||||||
.IP "--trace-ascii <file>"
|
.IP "--trace-ascii <file>"
|
||||||
Enables a full trace dump of all incoming and outgoing data, including
|
Enables a full trace dump of all incoming and outgoing data, including
|
||||||
descriptive information, to the given output file. Use "-" as filename to have
|
descriptive information, to the given output file. Use "-" as filename to have
|
||||||
@@ -906,21 +1070,30 @@ This is very similar to \fI--trace\fP, but leaves out the hex part and only
|
|||||||
shows the ASCII part of the dump. It makes smaller output that might be easier
|
shows the ASCII part of the dump. It makes smaller output that might be easier
|
||||||
to read for untrained humans.
|
to read for untrained humans.
|
||||||
|
|
||||||
If this option is used several times, the last one will be used. (Added in
|
This option overrides previous uses of \fI-v/--verbose\fP or \fI--trace\fP.
|
||||||
7.9.7)
|
|
||||||
|
If this option is used several times, the last one will be used.
|
||||||
.IP "--trace-time"
|
.IP "--trace-time"
|
||||||
Prepends a time stamp to each trace or verbose line that curl displays.
|
Prepends a time stamp to each trace or verbose line that curl displays.
|
||||||
|
(Added in 7.14.0)
|
||||||
|
|
||||||
If this option is used several times, each occurrence will toggle it on/off.
|
If this option is used several times, each occurrence will toggle it on/off.
|
||||||
(Added in 7.14.0 )
|
|
||||||
.IP "-u/--user <user:password>"
|
.IP "-u/--user <user:password>"
|
||||||
Specify user and password to use for server authentication. Overrides
|
Specify user and password to use for server authentication. Overrides
|
||||||
\fI-n/--netrc\fP and \fI--netrc-optional\fP.
|
\fI-n/--netrc\fP and \fI--netrc-optional\fP.
|
||||||
|
|
||||||
|
If you use an SSPI-enabled curl binary and do NTLM autentication, you can
|
||||||
|
force curl to pick up the user name and password from your environment by
|
||||||
|
simply specifying a single colon with this option: "-u :".
|
||||||
|
|
||||||
If this option is used several times, the last one will be used.
|
If this option is used several times, the last one will be used.
|
||||||
.IP "-U/--proxy-user <user:password>"
|
.IP "-U/--proxy-user <user:password>"
|
||||||
Specify user and password to use for proxy authentication.
|
Specify user and password to use for proxy authentication.
|
||||||
|
|
||||||
|
If you use an SSPI-enabled curl binary and do NTLM autentication, you can
|
||||||
|
force curl to pick up the user name and password from your environment by
|
||||||
|
simply specifying a single colon with this option: "-U :".
|
||||||
|
|
||||||
If this option is used several times, the last one will be used.
|
If this option is used several times, the last one will be used.
|
||||||
.IP "--url <URL>"
|
.IP "--url <URL>"
|
||||||
Specify a URL to fetch. This option is mostly handy when you want to specify
|
Specify a URL to fetch. This option is mostly handy when you want to specify
|
||||||
@@ -940,7 +1113,9 @@ might be option you're looking for.
|
|||||||
If you think this option still doesn't give you enough details, consider using
|
If you think this option still doesn't give you enough details, consider using
|
||||||
\fI--trace\fP or \fI--trace-ascii\fP instead.
|
\fI--trace\fP or \fI--trace-ascii\fP instead.
|
||||||
|
|
||||||
If this option is used twice, the second will again disable verbose.
|
This option overrides previous uses of \fI--trace-ascii\fP or \fI--trace\fP.
|
||||||
|
|
||||||
|
If this option is used twice, the second will do nothing extra.
|
||||||
.IP "-V/--version"
|
.IP "-V/--version"
|
||||||
Displays information about curl and the libcurl version it uses.
|
Displays information about curl and the libcurl version it uses.
|
||||||
|
|
||||||
@@ -1058,13 +1233,17 @@ The average download speed that curl measured for the complete download.
|
|||||||
The average upload speed that curl measured for the complete upload.
|
The average upload speed that curl measured for the complete upload.
|
||||||
.TP
|
.TP
|
||||||
.B content_type
|
.B content_type
|
||||||
The Content-Type of the requested document, if there was any. (Added in 7.9.5)
|
The Content-Type of the requested document, if there was any.
|
||||||
.TP
|
.TP
|
||||||
.B num_connects
|
.B num_connects
|
||||||
Number of new connects made in the recent transfer. (Added in 7.12.3)
|
Number of new connects made in the recent transfer. (Added in 7.12.3)
|
||||||
.TP
|
.TP
|
||||||
.B num_redirects
|
.B num_redirects
|
||||||
Number of redirects that were followed in the request. (Added in 7.12.3)
|
Number of redirects that were followed in the request. (Added in 7.12.3)
|
||||||
|
.TP
|
||||||
|
.B ftp_entry_path
|
||||||
|
The initial path libcurl ended up in when logging on to the remote FTP
|
||||||
|
server. (Added in 7.15.4)
|
||||||
.RE
|
.RE
|
||||||
|
|
||||||
If this option is used several times, the last one will be used.
|
If this option is used several times, the last one will be used.
|
||||||
@@ -1113,7 +1292,7 @@ not set.
|
|||||||
|
|
||||||
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/--time-cond <date expression>"
|
.IP "-z/--time-cond <date expression>"
|
||||||
(HTTP) Request a file that has been modified later than the given time and
|
(HTTP/FTP) Request a file that has been modified later than the given time and
|
||||||
date, or one that has been modified before that time. The date expression can
|
date, or one that has been modified before that time. The date expression can
|
||||||
be all sorts of date strings or if it doesn't match any internal ones, it
|
be all sorts of date strings or if it doesn't match any internal ones, it
|
||||||
tries to get the time from a given file name instead! See the
|
tries to get the time from a given file name instead! See the
|
||||||
@@ -1127,40 +1306,30 @@ If this option is used several times, the last one will be used.
|
|||||||
.IP "--max-redirs <num>"
|
.IP "--max-redirs <num>"
|
||||||
Set maximum number of redirection-followings allowed. If \fI-L/--location\fP
|
Set maximum number of redirection-followings allowed. If \fI-L/--location\fP
|
||||||
is used, this option can be used to prevent curl from following redirections
|
is used, this option can be used to prevent curl from following redirections
|
||||||
\&"in absurdum".
|
\&"in absurdum". By default, the limit is set to 50 redirections. Set this
|
||||||
|
option to -1 to make it limitless.
|
||||||
|
|
||||||
If this option is used several times, the last one will be used.
|
If this option is used several times, the last one will be used.
|
||||||
.IP "-0/--http1.0"
|
.IP "-0/--http1.0"
|
||||||
(HTTP) Forces curl to issue its requests using HTTP 1.0 instead of using its
|
(HTTP) Forces curl to issue its requests using HTTP 1.0 instead of using its
|
||||||
internally preferred: HTTP 1.1.
|
internally preferred: HTTP 1.1.
|
||||||
.IP "-1/--tlsv1"
|
.IP "-1/--tlsv1"
|
||||||
(HTTPS)
|
(SSL)
|
||||||
Forces curl to use TSL version 1 when negotiating with a remote TLS server.
|
Forces curl to use TSL version 1 when negotiating with a remote TLS server.
|
||||||
.IP "-2/--sslv2"
|
.IP "-2/--sslv2"
|
||||||
(HTTPS)
|
(SSL)
|
||||||
Forces curl to use SSL version 2 when negotiating with a remote SSL server.
|
Forces curl to use SSL version 2 when negotiating with a remote SSL server.
|
||||||
.IP "-3/--sslv3"
|
.IP "-3/--sslv3"
|
||||||
(HTTPS)
|
(SSL)
|
||||||
Forces curl to use SSL version 3 when negotiating with a remote SSL server.
|
Forces curl to use SSL version 3 when negotiating with a remote SSL server.
|
||||||
.IP "--3p-quote"
|
|
||||||
(FTP) Specify arbitrary commands to send to the source server. See the
|
|
||||||
\fI-Q/--quote\fP option for details. (Added in 7.13.0)
|
|
||||||
.IP "--3p-url"
|
|
||||||
(FTP) Activates a FTP 3rd party transfer. Specifies the source URL to get a
|
|
||||||
file from, while the "normal" URL will be used as target URL, the file that
|
|
||||||
will be written/created.
|
|
||||||
|
|
||||||
Note that not all FTP server allow 3rd party transfers. (Added in 7.13.0)
|
|
||||||
.IP "--3p-user"
|
|
||||||
(FTP) Specify user:password for the source URL transfer. (Added in 7.13.0)
|
|
||||||
.IP "-4/--ipv4"
|
.IP "-4/--ipv4"
|
||||||
If libcurl is capable of resolving an address to multiple IP versions (which
|
If libcurl is capable of resolving an address to multiple IP versions (which
|
||||||
it is if it is ipv6-capable), this option tells libcurl to resolve names to
|
it is if it is ipv6-capable), this option tells libcurl to resolve names to
|
||||||
IPv4 addresses only. (Added in 7.10.8)
|
IPv4 addresses only.
|
||||||
.IP "-6/--ipv6"
|
.IP "-6/--ipv6"
|
||||||
If libcurl is capable of resolving an address to multiple IP versions (which
|
If libcurl is capable of resolving an address to multiple IP versions (which
|
||||||
it is if it is ipv6-capable), this option tells libcurl to resolve names to
|
it is if it is ipv6-capable), this option tells libcurl to resolve names to
|
||||||
IPv6 addresses only. (Added in 7.10.8)
|
IPv6 addresses only.
|
||||||
.IP "-#/--progress-bar"
|
.IP "-#/--progress-bar"
|
||||||
Make curl display progress information as a progress bar instead of the
|
Make curl display progress information as a progress bar instead of the
|
||||||
default statistics.
|
default statistics.
|
||||||
@@ -1169,7 +1338,7 @@ If this option is used twice, the second will again disable the progress bar.
|
|||||||
.SH FILES
|
.SH FILES
|
||||||
.I ~/.curlrc
|
.I ~/.curlrc
|
||||||
.RS
|
.RS
|
||||||
Default config file.
|
Default config file, see \fI-K/--config\fP for details.
|
||||||
|
|
||||||
.SH ENVIRONMENT
|
.SH ENVIRONMENT
|
||||||
.IP "http_proxy [protocol://]<host>[:port]"
|
.IP "http_proxy [protocol://]<host>[:port]"
|
||||||
@@ -1178,8 +1347,6 @@ Sets proxy server to use for HTTP.
|
|||||||
Sets proxy server to use for HTTPS.
|
Sets proxy server to use for HTTPS.
|
||||||
.IP "FTP_PROXY [protocol://]<host>[:port]"
|
.IP "FTP_PROXY [protocol://]<host>[:port]"
|
||||||
Sets proxy server to use for FTP.
|
Sets proxy server to use for FTP.
|
||||||
.IP "GOPHER_PROXY [protocol://]<host>[:port]"
|
|
||||||
Sets proxy server to use for GOPHER.
|
|
||||||
.IP "ALL_PROXY [protocol://]<host>[:port]"
|
.IP "ALL_PROXY [protocol://]<host>[:port]"
|
||||||
Sets proxy server to use if no protocol-specific proxy is set.
|
Sets proxy server to use if no protocol-specific proxy is set.
|
||||||
.IP "NO_PROXY <comma-separated list of hosts>"
|
.IP "NO_PROXY <comma-separated list of hosts>"
|
||||||
@@ -1206,7 +1373,9 @@ Failed to connect to host.
|
|||||||
.IP 8
|
.IP 8
|
||||||
FTP weird server reply. The server sent data curl couldn't parse.
|
FTP weird server reply. The server sent data curl couldn't parse.
|
||||||
.IP 9
|
.IP 9
|
||||||
FTP access denied. The server denied login.
|
FTP access denied. The server denied login or denied access to the particular
|
||||||
|
resource or directory you wanted to reach. Most often you tried to change to a
|
||||||
|
directory that doesn't exist on the server.
|
||||||
.IP 10
|
.IP 10
|
||||||
FTP user/password incorrect. Either one or both were not accepted by the
|
FTP user/password incorrect. Either one or both were not accepted by the
|
||||||
server.
|
server.
|
||||||
@@ -1322,6 +1491,32 @@ Unrecognized transfer encoding
|
|||||||
Invalid LDAP URL
|
Invalid LDAP URL
|
||||||
.IP 63
|
.IP 63
|
||||||
Maximum file size exceeded
|
Maximum file size exceeded
|
||||||
|
.IP 64
|
||||||
|
Requested FTP SSL level failed
|
||||||
|
.IP 65
|
||||||
|
Sending the data requires a rewind that failed
|
||||||
|
.IP 66
|
||||||
|
Failed to initialise SSL Engine
|
||||||
|
.IP 67
|
||||||
|
User, password or similar was not accepted and curl failed to login
|
||||||
|
.IP 68
|
||||||
|
File not found on TFTP server
|
||||||
|
.IP 69
|
||||||
|
Permission problem on TFTP server
|
||||||
|
.IP 70
|
||||||
|
Out of disk space on TFTP server
|
||||||
|
.IP 71
|
||||||
|
Illegal TFTP operation
|
||||||
|
.IP 72
|
||||||
|
Unknown TFTP transfer ID
|
||||||
|
.IP 73
|
||||||
|
File already exists (TFTP)
|
||||||
|
.IP 74
|
||||||
|
No such user (TFTP)
|
||||||
|
.IP 75
|
||||||
|
Character conversion failed
|
||||||
|
.IP 76
|
||||||
|
Character conversion functions required
|
||||||
.IP XX
|
.IP XX
|
||||||
There will appear more error codes here in future releases. The existing ones
|
There will appear more error codes here in future releases. The existing ones
|
||||||
are meant to never change.
|
are meant to never change.
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user