Compare commits
1933 Commits
curl-7_18_
...
curl-7_19_
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1b6c683ca6 | ||
|
|
501e72c3de | ||
|
|
a450efb483 | ||
|
|
0cf8d4f8e8 | ||
|
|
084447e414 | ||
|
|
4c9c9f0b89 | ||
|
|
13db2916de | ||
|
|
2d64cd55a1 | ||
|
|
60a6af7498 | ||
|
|
3cb06eb2b2 | ||
|
|
b8e73495a5 | ||
|
|
187cfc1594 | ||
|
|
90cd2a4753 | ||
|
|
f3e6a582d4 | ||
|
|
3ae470eedf | ||
|
|
6595592a71 | ||
|
|
199389c94a | ||
|
|
c31438b2f2 | ||
|
|
843f73ecaa | ||
|
|
86f043a66c | ||
|
|
80d2df7789 | ||
|
|
f882a63cba | ||
|
|
611b3584d6 | ||
|
|
a1f13dd31b | ||
|
|
966e7d0e36 | ||
|
|
44103abdb7 | ||
|
|
8f9d4b2b50 | ||
|
|
78c674a685 | ||
|
|
197830a57d | ||
|
|
3d024d5fce | ||
|
|
5763743614 | ||
|
|
54da964a99 | ||
|
|
e25cff9328 | ||
|
|
36b397be9f | ||
|
|
468019e947 | ||
|
|
7e941baa26 | ||
|
|
63270b0665 | ||
|
|
bcdbba05d3 | ||
|
|
51d1f309cd | ||
|
|
f04720afb8 | ||
|
|
e6e6c6e635 | ||
|
|
1f340a262f | ||
|
|
242a17b9e0 | ||
|
|
6e1632c606 | ||
|
|
56dab605f1 | ||
|
|
3aa3d7e629 | ||
|
|
75585f771a | ||
|
|
9a9f35039e | ||
|
|
e6f84b8cc8 | ||
|
|
72f15da2ed | ||
|
|
effbd99384 | ||
|
|
d1ba4324de | ||
|
|
c0b5d378dc | ||
|
|
b8c438f22d | ||
|
|
a85271ce0a | ||
|
|
fd5e69f769 | ||
|
|
ddb0b8d8b8 | ||
|
|
1345226bc9 | ||
|
|
fb202e9de7 | ||
|
|
5dcb5fa862 | ||
|
|
f77f2709a9 | ||
|
|
bc852bca48 | ||
|
|
9314e9e853 | ||
|
|
838ddf8f55 | ||
|
|
619869c639 | ||
|
|
31baaf72b4 | ||
|
|
c92b996942 | ||
|
|
e84c7db049 | ||
|
|
9ef7b6afe2 | ||
|
|
c5c03ac556 | ||
|
|
6ca321ca75 | ||
|
|
9c788a529b | ||
|
|
6159c356c9 | ||
|
|
ac9d92587e | ||
|
|
f32dc6b828 | ||
|
|
7a928b40f3 | ||
|
|
172501e10c | ||
|
|
317e030de0 | ||
|
|
cfda3e6a48 | ||
|
|
4d522b8f31 | ||
|
|
e93c81196f | ||
|
|
7bdd14a994 | ||
|
|
afe06b48d6 | ||
|
|
63c5ed3798 | ||
|
|
77bb536542 | ||
|
|
7c6e0d5981 | ||
|
|
a1708730c3 | ||
|
|
d33ca87e4c | ||
|
|
3c509c5f68 | ||
|
|
a840cc700a | ||
|
|
b40b989523 | ||
|
|
5eba93c4e7 | ||
|
|
915dfb494e | ||
|
|
a16cca7680 | ||
|
|
644482fc99 | ||
|
|
8c08ecfcbf | ||
|
|
b9920bdd0e | ||
|
|
bdf71e2685 | ||
|
|
bd4fd9c28c | ||
|
|
ff3e574187 | ||
|
|
4422f80ae7 | ||
|
|
cc8c2efff2 | ||
|
|
cdaca293d9 | ||
|
|
4dbc7850bd | ||
|
|
8119379d4f | ||
|
|
9b4253fe67 | ||
|
|
b5c599c80c | ||
|
|
9137e717b0 | ||
|
|
80186aa7f4 | ||
|
|
6ac739630f | ||
|
|
80a61616b1 | ||
|
|
589d2ee7b5 | ||
|
|
0a294db912 | ||
|
|
2788aa366c | ||
|
|
0f29fdaf17 | ||
|
|
2912d993c2 | ||
|
|
62ceb118ee | ||
|
|
0569c9c1be | ||
|
|
5a91746b80 | ||
|
|
fdc091a857 | ||
|
|
8469db016d | ||
|
|
f6312b16f1 | ||
|
|
c76e538231 | ||
|
|
96ea49870c | ||
|
|
6e8c73fd38 | ||
|
|
56981a2aaf | ||
|
|
ec16121fb3 | ||
|
|
7bd9988c8e | ||
|
|
068312ecb8 | ||
|
|
d36a86a12c | ||
|
|
c174b13f8b | ||
|
|
6b95c4e358 | ||
|
|
22e2ecb003 | ||
|
|
e08296f70c | ||
|
|
dd50e5bdf2 | ||
|
|
504ecd5f7a | ||
|
|
7d1bb21c19 | ||
|
|
63dc2a843f | ||
|
|
296baeb096 | ||
|
|
01dabb774a | ||
|
|
d0fe4071a9 | ||
|
|
3d491c470b | ||
|
|
06462e8a92 | ||
|
|
dbf371344b | ||
|
|
e2c6e00570 | ||
|
|
e4a0001fc6 | ||
|
|
49400b0c7f | ||
|
|
5957498c6f | ||
|
|
b6282b99cb | ||
|
|
a8483841b5 | ||
|
|
d068001102 | ||
|
|
d576be58dc | ||
|
|
1a2b88964f | ||
|
|
f7a188a642 | ||
|
|
befbf2a206 | ||
|
|
e01b7c1ede | ||
|
|
dd8d472318 | ||
|
|
256489639c | ||
|
|
e323abe5d9 | ||
|
|
afc00b08d7 | ||
|
|
af41fb79b5 | ||
|
|
535b7c5e0f | ||
|
|
217f7a7ea7 | ||
|
|
317d351423 | ||
|
|
d27519c0ca | ||
|
|
255dc45dc9 | ||
|
|
f4d8728df9 | ||
|
|
8611631f5e | ||
|
|
1e5ed4fa33 | ||
|
|
0daeab3b8d | ||
|
|
bd27401311 | ||
|
|
14df44dd3f | ||
|
|
1272621ebc | ||
|
|
0e83482e47 | ||
|
|
c0d929bed9 | ||
|
|
828a26286d | ||
|
|
082b0d822c | ||
|
|
651b4b9efa | ||
|
|
ab1e54375f | ||
|
|
70e2db51e1 | ||
|
|
0145919a9e | ||
|
|
2236a247d9 | ||
|
|
7291f50e8d | ||
|
|
bc5677a47b | ||
|
|
137ef36757 | ||
|
|
33a3753c3f | ||
|
|
9770899a4b | ||
|
|
fe8eeb5641 | ||
|
|
8cd1f1f7f9 | ||
|
|
b84876ba69 | ||
|
|
0f1ca2939a | ||
|
|
4882078469 | ||
|
|
991b120eee | ||
|
|
f278d177f9 | ||
|
|
53b2ff4b04 | ||
|
|
0c89d71aee | ||
|
|
b746bf7814 | ||
|
|
f11969015a | ||
|
|
f1b820e5fc | ||
|
|
7356ff0b18 | ||
|
|
30f7a2ff20 | ||
|
|
f6b55fae79 | ||
|
|
8aa88f4d36 | ||
|
|
ce7b565595 | ||
|
|
41fd08bb0d | ||
|
|
d0a930cd44 | ||
|
|
9bb1854398 | ||
|
|
f7400212fc | ||
|
|
6434b42481 | ||
|
|
dd0b38b32f | ||
|
|
7816db8e8a | ||
|
|
9cc6ab3922 | ||
|
|
2c27e24bb4 | ||
|
|
c382c550e7 | ||
|
|
c663494c69 | ||
|
|
97f27ea585 | ||
|
|
379bfa5a36 | ||
|
|
235c0077b8 | ||
|
|
c621546bd6 | ||
|
|
aa330b8240 | ||
|
|
e43606eb4d | ||
|
|
6a378a28b4 | ||
|
|
95368d9cb4 | ||
|
|
74f9c570ea | ||
|
|
eed4a13b3b | ||
|
|
7e9f7659b3 | ||
|
|
4d396169c8 | ||
|
|
4cd950900b | ||
|
|
2b96c3f5ce | ||
|
|
63fad159e8 | ||
|
|
e5f1480a38 | ||
|
|
020955ebc2 | ||
|
|
3733fa02ee | ||
|
|
7037e4a4b1 | ||
|
|
0e98f938c4 | ||
|
|
55d0c29f4a | ||
|
|
59997ecad5 | ||
|
|
6e2f0833ad | ||
|
|
25f626cc52 | ||
|
|
ece891d6db | ||
|
|
702355da47 | ||
|
|
c4fba310d2 | ||
|
|
e9dd099870 | ||
|
|
070d89a561 | ||
|
|
28cc9dd331 | ||
|
|
7c1fecc94a | ||
|
|
7a9fab52be | ||
|
|
8cb8371011 | ||
|
|
875c55d86b | ||
|
|
b85154f13f | ||
|
|
06047d9103 | ||
|
|
2362637e90 | ||
|
|
edd02607e2 | ||
|
|
0211e420ed | ||
|
|
9a184e0bb1 | ||
|
|
168fb3a8d8 | ||
|
|
4c5307b456 | ||
|
|
626f9bd8c2 | ||
|
|
a06b36dee0 | ||
|
|
18e1bee8d5 | ||
|
|
41f76801eb | ||
|
|
31a7bfc47f | ||
|
|
1b6d18fcb0 | ||
|
|
57c32b709d | ||
|
|
5f19822e37 | ||
|
|
9a0c9cd6e1 | ||
|
|
0ac8e1d80b | ||
|
|
744e55ec74 | ||
|
|
74ba4d7950 | ||
|
|
fa96436661 | ||
|
|
d15b8273d6 | ||
|
|
0a5cf3a928 | ||
|
|
6173e38fdc | ||
|
|
34cd99d1d9 | ||
|
|
0922a0fc3f | ||
|
|
dd53b356ff | ||
|
|
f1db505778 | ||
|
|
662727ca3e | ||
|
|
bdec6f2b20 | ||
|
|
c86c294f55 | ||
|
|
a9a03b9708 | ||
|
|
f4e8c406bb | ||
|
|
12bfcb501c | ||
|
|
0fc1782dd4 | ||
|
|
9274d31690 | ||
|
|
983a539503 | ||
|
|
94bb7fe5cb | ||
|
|
b98e0aa09b | ||
|
|
49c6d7e32d | ||
|
|
ee73fc361b | ||
|
|
e84dbd28db | ||
|
|
02449d9aa5 | ||
|
|
2876329f16 | ||
|
|
a1f455551f | ||
|
|
042cc1f69e | ||
|
|
90b804d3fa | ||
|
|
4bc603a0cc | ||
|
|
6c3f74b946 | ||
|
|
8d78a33e60 | ||
|
|
df07537ccf | ||
|
|
de25ed3f37 | ||
|
|
40edf25866 | ||
|
|
7b7db23633 | ||
|
|
794b4da840 | ||
|
|
e9ea3ba4a2 | ||
|
|
d207ea1652 | ||
|
|
625d06ac79 | ||
|
|
3460225590 | ||
|
|
ea6531cf32 | ||
|
|
2afb88e2ce | ||
|
|
6c9f37d263 | ||
|
|
735955282b | ||
|
|
dd056e54e2 | ||
|
|
f5548973ab | ||
|
|
07dc741e18 | ||
|
|
8b66981ce0 | ||
|
|
3a7e8c9f5f | ||
|
|
fb90b43432 | ||
|
|
0302c21253 | ||
|
|
9182a46233 | ||
|
|
51b46f451f | ||
|
|
11f3690201 | ||
|
|
5784a37f91 | ||
|
|
af91ff0e06 | ||
|
|
be3a78f583 | ||
|
|
7f22da5230 | ||
|
|
5af0629ba5 | ||
|
|
a776e5ad31 | ||
|
|
6e422c447a | ||
|
|
4608d0157e | ||
|
|
a24fe59ee4 | ||
|
|
4ad296c60b | ||
|
|
0517fa153c | ||
|
|
8f81fd6be5 | ||
|
|
1472be4d3e | ||
|
|
8925527fef | ||
|
|
8cdc220bc0 | ||
|
|
d315d41a12 | ||
|
|
4f7687895d | ||
|
|
07d46886df | ||
|
|
b79c8f527f | ||
|
|
0cf10ae4d7 | ||
|
|
debe0b561d | ||
|
|
9ddc7ad038 | ||
|
|
9a4c887c4a | ||
|
|
de41c6ef43 | ||
|
|
002cf105c6 | ||
|
|
fb8fdf9273 | ||
|
|
517b8ed057 | ||
|
|
d3d7ed1766 | ||
|
|
77fd094090 | ||
|
|
c65f9acdc7 | ||
|
|
5c4cdcb2d5 | ||
|
|
b1233c7e4d | ||
|
|
4ebe4b907b | ||
|
|
bf44d0f640 | ||
|
|
73cf99c052 | ||
|
|
44c02227e9 | ||
|
|
77da9a0087 | ||
|
|
42d2353e74 | ||
|
|
4b441ebac5 | ||
|
|
01140217f5 | ||
|
|
71f3877f3a | ||
|
|
83d135f990 | ||
|
|
d4ac3d53fc | ||
|
|
f0332c0b58 | ||
|
|
bdd4294e79 | ||
|
|
dcf92bffd2 | ||
|
|
a2256e899b | ||
|
|
8b6805572a | ||
|
|
607253c2d0 | ||
|
|
09f4a1c5e5 | ||
|
|
5c9fff9c6e | ||
|
|
99b4912688 | ||
|
|
0a6312d66f | ||
|
|
a97f52db20 | ||
|
|
5267be57f7 | ||
|
|
e813bf31d7 | ||
|
|
1bd0be0361 | ||
|
|
996c8ca7c2 | ||
|
|
fec65fbff6 | ||
|
|
de4610a55f | ||
|
|
6e34c2d59a | ||
|
|
34b09398d5 | ||
|
|
0516ce7786 | ||
|
|
bb86462ed7 | ||
|
|
8fa8df95fb | ||
|
|
82ca52713b | ||
|
|
f29e383575 | ||
|
|
5aeef9c1c8 | ||
|
|
ddd3fe5948 | ||
|
|
5591550167 | ||
|
|
6bb9ef8de4 | ||
|
|
14a6788535 | ||
|
|
6f86826516 | ||
|
|
0e6ed13454 | ||
|
|
b914f45e9e | ||
|
|
3ed66094e8 | ||
|
|
718004d9b5 | ||
|
|
1dc54324f4 | ||
|
|
89ecf4ac01 | ||
|
|
d42eac4287 | ||
|
|
3fa6c51bb1 | ||
|
|
37c5250e03 | ||
|
|
0d3bb93ce8 | ||
|
|
5e74c58b73 | ||
|
|
7ac16811cc | ||
|
|
29b6a732f3 | ||
|
|
3dcd6bc597 | ||
|
|
1342f5d592 | ||
|
|
8fbfd5916d | ||
|
|
1225d36188 | ||
|
|
a19e02be5e | ||
|
|
0761e60a4a | ||
|
|
af96c8304f | ||
|
|
0de0e95020 | ||
|
|
35d8fb0501 | ||
|
|
87c71953be | ||
|
|
79a91b8168 | ||
|
|
2f9038bf62 | ||
|
|
4d50ca4e21 | ||
|
|
a1077d0970 | ||
|
|
b9fdc0c251 | ||
|
|
f471b4836f | ||
|
|
32b75d1b69 | ||
|
|
f7e3bd28b4 | ||
|
|
452e52f958 | ||
|
|
0090099565 | ||
|
|
2ed23cb50d | ||
|
|
a97ab4f933 | ||
|
|
bc93011554 | ||
|
|
14b6cc4e22 | ||
|
|
80ffd3581f | ||
|
|
dd058b8de6 | ||
|
|
3c2ad4022c | ||
|
|
1f4b8da60a | ||
|
|
9af4cf219e | ||
|
|
cf4b88fcc4 | ||
|
|
2215a9a181 | ||
|
|
aa32f61ce7 | ||
|
|
8266727062 | ||
|
|
d839230402 | ||
|
|
1cc50d31f9 | ||
|
|
104377d718 | ||
|
|
83640b2ee5 | ||
|
|
9aea3e265d | ||
|
|
59227bf075 | ||
|
|
f61cfc5931 | ||
|
|
27b8a5fd84 | ||
|
|
60ff74140e | ||
|
|
4f0a7170af | ||
|
|
6d2ff9d2a7 | ||
|
|
122b0bfe82 | ||
|
|
3eae7695fc | ||
|
|
6efde61227 | ||
|
|
1c48124db4 | ||
|
|
e9895ea2e7 | ||
|
|
eab8c0d754 | ||
|
|
7ffe62d901 | ||
|
|
d5bfec70af | ||
|
|
2a86817349 | ||
|
|
5be7d88b34 | ||
|
|
8a335ee7fd | ||
|
|
216ad2680b | ||
|
|
e16509d5cf | ||
|
|
19c9b7c803 | ||
|
|
ffd08df863 | ||
|
|
460459e8db | ||
|
|
07416b61e3 | ||
|
|
000a13e21a | ||
|
|
03ca98b0df | ||
|
|
abb74a1203 | ||
|
|
77c1d556bb | ||
|
|
bd55ab05bd | ||
|
|
2025193b7a | ||
|
|
418683f537 | ||
|
|
008b848dcc | ||
|
|
79b7575fd8 | ||
|
|
792279581b | ||
|
|
3ca360391a | ||
|
|
5f0a3797c9 | ||
|
|
2d2c53d20e | ||
|
|
02ca14fd0e | ||
|
|
0f5895faee | ||
|
|
c0dfe6e51d | ||
|
|
1b4af1f8d8 | ||
|
|
8e255534a1 | ||
|
|
4607dfe257 | ||
|
|
6e376532b0 | ||
|
|
4ed64fd5ee | ||
|
|
21700ae515 | ||
|
|
b962ef3154 | ||
|
|
32f78136b2 | ||
|
|
01d6133bd7 | ||
|
|
4b62cd3616 | ||
|
|
df7b1d8e64 | ||
|
|
2449e1f5a5 | ||
|
|
66c0e4ad5f | ||
|
|
18371aaff9 | ||
|
|
f36eab2608 | ||
|
|
66d38261f7 | ||
|
|
553b4cfd0b | ||
|
|
edd63a7920 | ||
|
|
5ce03efc3e | ||
|
|
4645e8b6b1 | ||
|
|
42365aa7ef | ||
|
|
dff4ce92ad | ||
|
|
e5b0533dab | ||
|
|
a2a315a6e8 | ||
|
|
7abdc4b218 | ||
|
|
479ddb1fee | ||
|
|
4ee27b4594 | ||
|
|
58ebde9502 | ||
|
|
04ee89493e | ||
|
|
dd3594c6b3 | ||
|
|
f7ea431516 | ||
|
|
16a153468d | ||
|
|
b062212e55 | ||
|
|
39eb96e9ff | ||
|
|
4c84f6b423 | ||
|
|
0b2ae71f8b | ||
|
|
39d0b57ebf | ||
|
|
c036f6ae2d | ||
|
|
e35e2ea6ec | ||
|
|
f33f8eee26 | ||
|
|
31a3f064c0 | ||
|
|
232518a219 | ||
|
|
bc165078a2 | ||
|
|
e4dabef0c7 | ||
|
|
00142d8443 | ||
|
|
1b0b7fa0e1 | ||
|
|
67fb731ec4 | ||
|
|
a30a6f2f20 | ||
|
|
baeebb2b57 | ||
|
|
ecc6f550eb | ||
|
|
640974fb28 | ||
|
|
3b0c5ae467 | ||
|
|
0fa14c8662 | ||
|
|
d17be0df52 | ||
|
|
53a8a6e5a6 | ||
|
|
dd2fc45c27 | ||
|
|
ba9f8c674c | ||
|
|
c4f4fa4089 | ||
|
|
32634b0771 | ||
|
|
c97b66287c | ||
|
|
cd6fc8a8ef | ||
|
|
3308781376 | ||
|
|
40e8b4e527 | ||
|
|
4741e64c89 | ||
|
|
0b489c7e61 | ||
|
|
22d4db1cf2 | ||
|
|
7383225271 | ||
|
|
4b3ae5e157 | ||
|
|
797bc8504c | ||
|
|
305f4d92ef | ||
|
|
c36f0e71b6 | ||
|
|
a028c69f48 | ||
|
|
4e4b6de5ce | ||
|
|
9aac2328c6 | ||
|
|
e5084c1eca | ||
|
|
9b12f09600 | ||
|
|
a71762e405 | ||
|
|
b8f3e5675a | ||
|
|
820011dedc | ||
|
|
cdd6054e08 | ||
|
|
a15b6a6f86 | ||
|
|
20d3e2b967 | ||
|
|
608fdce0a0 | ||
|
|
ecd3251542 | ||
|
|
999c7126b3 | ||
|
|
3c50ea961f | ||
|
|
acc29ff1d9 | ||
|
|
886bba55ac | ||
|
|
cd440215a5 | ||
|
|
73060b4523 | ||
|
|
c76d939563 | ||
|
|
3c4b69f95d | ||
|
|
3f01d9a043 | ||
|
|
dbc6fe3e84 | ||
|
|
da6c15163b | ||
|
|
9818bf7026 | ||
|
|
73c7acb159 | ||
|
|
ea8fbb5233 | ||
|
|
9b033e1b8a | ||
|
|
a65ce7b107 | ||
|
|
2249c12a3c | ||
|
|
b4ac9cd02c | ||
|
|
3517eba632 | ||
|
|
2cd44abafc | ||
|
|
4b486ebbc1 | ||
|
|
f9f211d2c6 | ||
|
|
77b30f69e4 | ||
|
|
17d2a464ad | ||
|
|
ae6530ee82 | ||
|
|
a6ba9e5ccd | ||
|
|
c4cdab969b | ||
|
|
c331c73ec6 | ||
|
|
d1f063c62d | ||
|
|
b686dc4911 | ||
|
|
78936b2f2a | ||
|
|
b2ed1e2607 | ||
|
|
fb8870297d | ||
|
|
4cbc0f6c2e | ||
|
|
1b9eff64fa | ||
|
|
d07d1a6ef8 | ||
|
|
8bdd60fa71 | ||
|
|
b872086c74 | ||
|
|
e0af4a15d0 | ||
|
|
d31802ed98 | ||
|
|
87c4136bd4 | ||
|
|
09e027bc9d | ||
|
|
707828b71a | ||
|
|
8f44037133 | ||
|
|
9717ccb786 | ||
|
|
6354cbf9d6 | ||
|
|
95a849efc2 | ||
|
|
fe083a94b9 | ||
|
|
6fdcdfa5ea | ||
|
|
4a4885eead | ||
|
|
a0ef686c54 | ||
|
|
2903a5c050 | ||
|
|
4d50b9f1f1 | ||
|
|
5e3c2af236 | ||
|
|
5d791838d2 | ||
|
|
b80c5cff49 | ||
|
|
47b5740bdf | ||
|
|
b8092857d9 | ||
|
|
3cda1a23ce | ||
|
|
215677c10b | ||
|
|
3688cd3fea | ||
|
|
5ca2a8318d | ||
|
|
e27ec862c3 | ||
|
|
d0b8b5a199 | ||
|
|
efe2ce3647 | ||
|
|
71f00188fb | ||
|
|
a1c9cb8860 | ||
|
|
74e9718370 | ||
|
|
2d71c9cdfd | ||
|
|
484d549ece | ||
|
|
d098ab436d | ||
|
|
85ffd33f08 | ||
|
|
c1b8e93083 | ||
|
|
383d4656aa | ||
|
|
3e3d10824f | ||
|
|
128418b214 | ||
|
|
050a39a7a5 | ||
|
|
5f085789b9 | ||
|
|
6a8832d83b | ||
|
|
fcb498b0d5 | ||
|
|
0433252e50 | ||
|
|
5ce6f37e26 | ||
|
|
02fc7bb5f6 | ||
|
|
9e1294e866 | ||
|
|
c2c800d863 | ||
|
|
625c107c25 | ||
|
|
33319f5d2d | ||
|
|
ad3c1c37bb | ||
|
|
005bf19acf | ||
|
|
91c77808c4 | ||
|
|
0ce97f77e0 | ||
|
|
197ad60d21 | ||
|
|
dc31387c6f | ||
|
|
bd64da3785 | ||
|
|
4fef0d4f14 | ||
|
|
89d6f580dc | ||
|
|
23eb74e085 | ||
|
|
9c86097286 | ||
|
|
f0bb9c7d8d | ||
|
|
d4514f9c10 | ||
|
|
c324033ba4 | ||
|
|
74a16db975 | ||
|
|
a10044e110 | ||
|
|
6cdd067faf | ||
|
|
0989cd358a | ||
|
|
6e0739931d | ||
|
|
b17ca44f0b | ||
|
|
fd6e025d61 | ||
|
|
9230708e47 | ||
|
|
92f3b3895e | ||
|
|
fa8a78ff01 | ||
|
|
310d842b70 | ||
|
|
1498de83d6 | ||
|
|
e29f62f0a7 | ||
|
|
39e5fa6ae8 | ||
|
|
dc289aa4fa | ||
|
|
6db8f53445 | ||
|
|
417bac4055 | ||
|
|
e9c94cdd49 | ||
|
|
d104216bbe | ||
|
|
d086fdaf9f | ||
|
|
8693afdfea | ||
|
|
a876161ef9 | ||
|
|
10035c898b | ||
|
|
71edaf4d01 | ||
|
|
2b77d50776 | ||
|
|
6ea91af2f8 | ||
|
|
b767440399 | ||
|
|
4174ec7116 | ||
|
|
068ba17e21 | ||
|
|
4d10c96aa6 | ||
|
|
b701ea36a7 | ||
|
|
198fa5e3c7 | ||
|
|
507cd13793 | ||
|
|
6c14c96e71 | ||
|
|
976963cd21 | ||
|
|
9391d980c3 | ||
|
|
bab5183820 | ||
|
|
0abaf22467 | ||
|
|
463a8134a1 | ||
|
|
d22b2d181f | ||
|
|
5a9bbf639a | ||
|
|
81e48ada47 | ||
|
|
598bc44f67 | ||
|
|
b93f4f623c | ||
|
|
1054dc5ed1 | ||
|
|
7fc4e8af0a | ||
|
|
4198bb88b6 | ||
|
|
db325d1f43 | ||
|
|
7ff38c14a9 | ||
|
|
3f2de3d101 | ||
|
|
6bd91936ff | ||
|
|
035a2e5479 | ||
|
|
6983ba3225 | ||
|
|
77e028d620 | ||
|
|
0bb91218c5 | ||
|
|
231a51fe7a | ||
|
|
8d0cbaf8df | ||
|
|
b843c27322 | ||
|
|
2688cf343b | ||
|
|
b416b87518 | ||
|
|
3f1b9f095a | ||
|
|
8a6eeb82c5 | ||
|
|
5779283a52 | ||
|
|
80d0dcc9a3 | ||
|
|
d51ad518c4 | ||
|
|
29ba1730ca | ||
|
|
183210619d | ||
|
|
feff911fb7 | ||
|
|
8eee5f3253 | ||
|
|
3e55fef5e1 | ||
|
|
63397e380f | ||
|
|
07c3aaeea1 | ||
|
|
8254bbae56 | ||
|
|
e7886aa9b4 | ||
|
|
fb08868e54 | ||
|
|
c141d99059 | ||
|
|
f66e1c49b0 | ||
|
|
4acbe8f20c | ||
|
|
2ea70a5c73 | ||
|
|
eb612bfdfc | ||
|
|
5e826c78a7 | ||
|
|
a0d906739d | ||
|
|
98b13037e7 | ||
|
|
29f09f71b4 | ||
|
|
a00b6e258d | ||
|
|
7ded272b94 | ||
|
|
1d12b1fa1e | ||
|
|
54582bdce9 | ||
|
|
a9a4300a36 | ||
|
|
f720e0ac0f | ||
|
|
a8245df745 | ||
|
|
86c5d02a5e | ||
|
|
5af597c2fb | ||
|
|
dd9e0164d5 | ||
|
|
9d16b4081e | ||
|
|
545cafce9b | ||
|
|
fb66d51796 | ||
|
|
5175664174 | ||
|
|
a579d67064 | ||
|
|
be760bed7e | ||
|
|
357383159e | ||
|
|
0ea1c28135 | ||
|
|
36e56f36ad | ||
|
|
0a9984c27e | ||
|
|
0ecdcc253b | ||
|
|
1667890172 | ||
|
|
9b3f863cf5 | ||
|
|
2f2ed4e40e | ||
|
|
3d582304b6 | ||
|
|
996d45df0a | ||
|
|
6047635406 | ||
|
|
e16bccbb91 | ||
|
|
9786e7faeb | ||
|
|
fde4b823f1 | ||
|
|
b7e71a249e | ||
|
|
bf8d642607 | ||
|
|
1fab40bb69 | ||
|
|
ad61b58036 | ||
|
|
b7722e7037 | ||
|
|
6c2167b65f | ||
|
|
18be9882f7 | ||
|
|
a102c2c22b | ||
|
|
ae75462254 | ||
|
|
3ad956e73f | ||
|
|
d6114165d3 | ||
|
|
c3a959cc37 | ||
|
|
ca70beec47 | ||
|
|
758939215d | ||
|
|
ab861e56f1 | ||
|
|
8eb64ad600 | ||
|
|
d74d3fe851 | ||
|
|
fefc6a7e6b | ||
|
|
a119114ad7 | ||
|
|
430b1a22db | ||
|
|
a754ea1326 | ||
|
|
2ecf22e37e | ||
|
|
9dcd0756ba | ||
|
|
c455254fd1 | ||
|
|
bb1f6e6818 | ||
|
|
0722e91eb9 | ||
|
|
c859a6f365 | ||
|
|
ef49850789 | ||
|
|
4f6f334f41 | ||
|
|
8cd76d3921 | ||
|
|
885805b5df | ||
|
|
d61f260372 | ||
|
|
d0a48627b2 | ||
|
|
4b8f13e902 | ||
|
|
5b9a57f536 | ||
|
|
ba9963b8fa | ||
|
|
6887106ff7 | ||
|
|
98416a4fab | ||
|
|
fad3288d20 | ||
|
|
5ecff1e4c3 | ||
|
|
bfeae0b5f5 | ||
|
|
1c5336cd57 | ||
|
|
43c2cf4edb | ||
|
|
f6d80d66a2 | ||
|
|
b2ca0babeb | ||
|
|
ed4ae322f5 | ||
|
|
4f924ab07e | ||
|
|
ebadeff0ca | ||
|
|
830018aa38 | ||
|
|
8dfddd279b | ||
|
|
544f2f74df | ||
|
|
450348d6bd | ||
|
|
5928ea9c7a | ||
|
|
4754880099 | ||
|
|
1fea66e527 | ||
|
|
806a3163ba | ||
|
|
08cf6780ba | ||
|
|
6814907a2c | ||
|
|
11a8a25528 | ||
|
|
1b246eecfe | ||
|
|
95456b8e78 | ||
|
|
79fc481a2b | ||
|
|
b9ce871463 | ||
|
|
0bd78e1cd8 | ||
|
|
d27f2d8168 | ||
|
|
407f3f142a | ||
|
|
61cfbecc74 | ||
|
|
feeabd08ab | ||
|
|
31a3432a8e | ||
|
|
27db045095 | ||
|
|
db8c75f08d | ||
|
|
beaada77e6 | ||
|
|
aefab9293a | ||
|
|
a6d9310888 | ||
|
|
bfc09ac211 | ||
|
|
d930280af5 | ||
|
|
445e4a9792 | ||
|
|
aec761916e | ||
|
|
7d750d2b92 | ||
|
|
bdf1724412 | ||
|
|
9cea2dfb8f | ||
|
|
00dec36c72 | ||
|
|
26a651f7ae | ||
|
|
b64f0dace3 | ||
|
|
a7b95cacb6 | ||
|
|
ac0e0351a0 | ||
|
|
2245ac2f88 | ||
|
|
1bfaf76dd0 | ||
|
|
88513d2d1a | ||
|
|
91bc396178 | ||
|
|
d3fdbe48ae | ||
|
|
2c086105b1 | ||
|
|
aed98c5125 | ||
|
|
2d77f7cd48 | ||
|
|
d5affe1ada | ||
|
|
d61688923d | ||
|
|
4aee6822ca | ||
|
|
038542ea3e | ||
|
|
beb14ca6d6 | ||
|
|
4114129ac0 | ||
|
|
6d24719167 | ||
|
|
2393c94363 | ||
|
|
372203f1fa | ||
|
|
691468174b | ||
|
|
6f8d439717 | ||
|
|
f3ab5d5500 | ||
|
|
8f467b4288 | ||
|
|
4adcf7e9ed | ||
|
|
9f8c40ed78 | ||
|
|
cda9d7e579 | ||
|
|
c27d2d4b93 | ||
|
|
003afef541 | ||
|
|
09bbca2f61 | ||
|
|
0a305eb79f | ||
|
|
aff5408633 | ||
|
|
31626d4c6f | ||
|
|
426ec2d399 | ||
|
|
a632f6d5b1 | ||
|
|
83c199bb00 | ||
|
|
2ec6d08613 | ||
|
|
42271ad463 | ||
|
|
57ee847ce7 | ||
|
|
985bd18904 | ||
|
|
2d1f798d14 | ||
|
|
9e9f70a693 | ||
|
|
1b9d311b5c | ||
|
|
4d437416da | ||
|
|
267b942383 | ||
|
|
142cb601f8 | ||
|
|
21b523fcd3 | ||
|
|
006cab3e9e | ||
|
|
4e909ee8b1 | ||
|
|
95df5d042c | ||
|
|
22059858fe | ||
|
|
82107a02f5 | ||
|
|
515893595d | ||
|
|
3800be3898 | ||
|
|
c9ad952604 | ||
|
|
2a09ffc648 | ||
|
|
821d8fee3b | ||
|
|
42224594b6 | ||
|
|
d369a2b775 | ||
|
|
a5f4cfc612 | ||
|
|
23e5402bec | ||
|
|
391e8afd1f | ||
|
|
eff2c3a621 | ||
|
|
de48e4e4df | ||
|
|
c4a694862c | ||
|
|
1e076a4ae0 | ||
|
|
188311863a | ||
|
|
0eb083e979 | ||
|
|
abe61b9926 | ||
|
|
54e49d10d2 | ||
|
|
ef75829878 | ||
|
|
a19341b57a | ||
|
|
c9549391d1 | ||
|
|
2b767161da | ||
|
|
7c9631081d | ||
|
|
b6f29bef06 | ||
|
|
6abbbaad1b | ||
|
|
fe5f448015 | ||
|
|
7beb473a3d | ||
|
|
19bc92289d | ||
|
|
4e4f6c1ec8 | ||
|
|
459e67b2a7 | ||
|
|
51ba24991c | ||
|
|
dfa0fd5b33 | ||
|
|
f7ef60c13f | ||
|
|
8b2bfa4212 | ||
|
|
a6c915aab9 | ||
|
|
a8323cc3f5 | ||
|
|
aa29735868 | ||
|
|
a059e9241e | ||
|
|
acd637160f | ||
|
|
ddb2783f9a | ||
|
|
8fa895d65e | ||
|
|
33b658a341 | ||
|
|
df725aade2 | ||
|
|
d84440d53b | ||
|
|
0c1ae21c11 | ||
|
|
f30959c6bd | ||
|
|
d7e406e020 | ||
|
|
638e3c070c | ||
|
|
07aeac37fd | ||
|
|
6ec76e7f9a | ||
|
|
cb9951dcad | ||
|
|
0776701396 | ||
|
|
39de6c784c | ||
|
|
e5c4482088 | ||
|
|
975c171d5a | ||
|
|
7d7f63059a | ||
|
|
8c6c0a7bcc | ||
|
|
aa41743ebd | ||
|
|
ee5f13cb6b | ||
|
|
974145f61c | ||
|
|
849318138e | ||
|
|
6a04c0878b | ||
|
|
db80e18308 | ||
|
|
3081207a4c | ||
|
|
8085c7a450 | ||
|
|
842de91168 | ||
|
|
4c621bc697 | ||
|
|
938458b330 | ||
|
|
651dad0cc1 | ||
|
|
f591ab3ba0 | ||
|
|
09aa4cf2ca | ||
|
|
61c0bdb09c | ||
|
|
89367d47a8 | ||
|
|
7fdfd938e0 | ||
|
|
e526b5ffeb | ||
|
|
adb974960d | ||
|
|
2acc92828f | ||
|
|
a1d1f43e6a | ||
|
|
aac739ccd2 | ||
|
|
c3d1b07c45 | ||
|
|
77bafd823b | ||
|
|
624b5f228b | ||
|
|
6d233becf0 | ||
|
|
2bcd13aaee | ||
|
|
20723cb792 | ||
|
|
b93ad10fa5 | ||
|
|
28e2007767 | ||
|
|
802f1e4406 | ||
|
|
a37cc6cb08 | ||
|
|
6cea51585f | ||
|
|
fce9c3a9f1 | ||
|
|
969903ebf2 | ||
|
|
7b3f86152a | ||
|
|
ea1362a936 | ||
|
|
f62a5b83a9 | ||
|
|
a834b98232 | ||
|
|
152cf6325d | ||
|
|
c98ab69cc7 | ||
|
|
f7cce15156 | ||
|
|
3072c5b8a1 | ||
|
|
ac1ab03cb0 | ||
|
|
2ef72f7abb | ||
|
|
eae27d1788 | ||
|
|
a3787eff19 | ||
|
|
836d945ece | ||
|
|
2816902f0e | ||
|
|
f72a26d340 | ||
|
|
387521bb6d | ||
|
|
a4da82a43b | ||
|
|
bc90fefb5b | ||
|
|
c3d871aef4 | ||
|
|
59e378f48f | ||
|
|
a622fd90b4 | ||
|
|
861b647e7b | ||
|
|
70e57dad88 | ||
|
|
91ff938035 | ||
|
|
3acd1146f9 | ||
|
|
45d3bfff28 | ||
|
|
18110b519c | ||
|
|
4c9768565e | ||
|
|
873e734c39 | ||
|
|
747e0c657d | ||
|
|
780f13db30 | ||
|
|
62519bfe05 | ||
|
|
29f7f468ce | ||
|
|
9c36a5fd06 | ||
|
|
4558c8f37a | ||
|
|
bb67388bbe | ||
|
|
3dcd2b82c4 | ||
|
|
c0f3e32447 | ||
|
|
8733e087d7 | ||
|
|
9f9e577640 | ||
|
|
9813cea1d0 | ||
|
|
304537c24f | ||
|
|
cc0054a4d5 | ||
|
|
29ec219b82 | ||
|
|
0994d7811f | ||
|
|
934708d950 | ||
|
|
bbc002a505 | ||
|
|
c8d4e8b5d0 | ||
|
|
18a21d5802 | ||
|
|
fcb63f3039 | ||
|
|
91d7a6f8a9 | ||
|
|
238db14002 | ||
|
|
d0995204da | ||
|
|
6ebc2b2561 | ||
|
|
95b817e8d7 | ||
|
|
558f034007 | ||
|
|
72ea805298 | ||
|
|
79ffbf7fe1 | ||
|
|
4f0d286d2c | ||
|
|
6fb5888e55 | ||
|
|
b5810dfe9d | ||
|
|
85a79f9d67 | ||
|
|
d24465b79a | ||
|
|
c67a99ff27 | ||
|
|
bae4e12302 | ||
|
|
09df1cdb5c | ||
|
|
2946d87e48 | ||
|
|
6a2d7bff1a | ||
|
|
9b7b2b347f | ||
|
|
33638d5347 | ||
|
|
2ae7d2e6ea | ||
|
|
ffc490ef89 | ||
|
|
29b75ca46f | ||
|
|
004dde18a7 | ||
|
|
3440e8d208 | ||
|
|
e138ae5ec9 | ||
|
|
bf8ba229e0 | ||
|
|
19d0a7495e | ||
|
|
099b62f124 | ||
|
|
8ce78ca488 | ||
|
|
fc9610919c | ||
|
|
e082d2403c | ||
|
|
370c3afc71 | ||
|
|
93357ef017 | ||
|
|
753592cc70 | ||
|
|
b150e6866d | ||
|
|
2f475fa9ea | ||
|
|
ecff50c2b4 | ||
|
|
6f53cf9cc6 | ||
|
|
1056202b48 | ||
|
|
709de3d621 | ||
|
|
f9894f4ebc | ||
|
|
74d3b80d70 | ||
|
|
4b01dfe369 | ||
|
|
fc09d10560 | ||
|
|
59b2e3ea4a | ||
|
|
243cf29793 | ||
|
|
9ded8fbe58 | ||
|
|
9258928c2d | ||
|
|
132cd3aa2c | ||
|
|
fef60d9d41 | ||
|
|
2fdd24c724 | ||
|
|
852a02daff | ||
|
|
2a6148716c | ||
|
|
5ca692fc89 | ||
|
|
3e2487493e | ||
|
|
fdcb0cd2bc | ||
|
|
4962e1772d | ||
|
|
d7d5618498 | ||
|
|
3f3d6ebe66 | ||
|
|
ec28988bfa | ||
|
|
db23538898 | ||
|
|
423a18cecc | ||
|
|
f164260eee | ||
|
|
a091121293 | ||
|
|
d744c85310 | ||
|
|
c9f2c54c49 | ||
|
|
f29d223ed5 | ||
|
|
8dabd34432 | ||
|
|
a104a365e3 | ||
|
|
62d94ff342 | ||
|
|
cbc04a7d40 | ||
|
|
71d3c5bf41 | ||
|
|
bc69e46ad1 | ||
|
|
13f035b905 | ||
|
|
79cbe50894 | ||
|
|
1c04aa54a7 | ||
|
|
b718283327 | ||
|
|
b34390017b | ||
|
|
8980f89370 | ||
|
|
f46d47239f | ||
|
|
13dc82b9d4 | ||
|
|
a243dd4587 | ||
|
|
9d5d6c557b | ||
|
|
a604682805 | ||
|
|
70b1cd798f | ||
|
|
578f42d588 | ||
|
|
e3ad6d2bd1 | ||
|
|
4b64a8d20d | ||
|
|
fcc8700218 | ||
|
|
e5b713ee63 | ||
|
|
9849c6b847 | ||
|
|
9bb5da968c | ||
|
|
d5a71fd567 | ||
|
|
0f98ba4729 | ||
|
|
a6a2174bf7 | ||
|
|
f07c3171e3 | ||
|
|
6cb1e3f3fa | ||
|
|
81b64f69a5 | ||
|
|
17e1f58fd6 | ||
|
|
582833b338 | ||
|
|
48be4fa069 | ||
|
|
2af05bdd3c | ||
|
|
4dbfc91e2b | ||
|
|
95cef39def | ||
|
|
00fb5bcf35 | ||
|
|
42eeb93d99 | ||
|
|
afe7bb4b33 | ||
|
|
0f5f91df0b | ||
|
|
f209a4804b | ||
|
|
5794ffe4bd | ||
|
|
ceb49d3742 | ||
|
|
44142f8234 | ||
|
|
347213d124 | ||
|
|
8ca51bc68a | ||
|
|
56f852a64f | ||
|
|
1c68e79091 | ||
|
|
473a050f0b | ||
|
|
6768e81d5d | ||
|
|
3743f515cf | ||
|
|
3e0b6a7d1f | ||
|
|
ef72f7d513 | ||
|
|
2f71461b29 | ||
|
|
d8cab4c133 | ||
|
|
95a093e97b | ||
|
|
68bb51c55b | ||
|
|
fb8fe6f2b3 | ||
|
|
3e61c90dbe | ||
|
|
ac18b471d2 | ||
|
|
bbe2386bff | ||
|
|
2f47248e3c | ||
|
|
315bb970a5 | ||
|
|
65b0f6049d | ||
|
|
0033535e21 | ||
|
|
3e4a8cb800 | ||
|
|
ad638da2c2 | ||
|
|
a923d8541c | ||
|
|
66fb9ca5f6 | ||
|
|
11cb78c5f8 | ||
|
|
527a5f0980 | ||
|
|
6e878d2ca4 | ||
|
|
cf30b24706 | ||
|
|
709a2ed474 | ||
|
|
ecd30cc8bb | ||
|
|
0105ad5e39 | ||
|
|
cebaab8ee5 | ||
|
|
34281925d6 | ||
|
|
e90c4fa770 | ||
|
|
a06e077938 | ||
|
|
7bdae7be4f | ||
|
|
c125d83e9e | ||
|
|
2abf9221e3 | ||
|
|
6f1e89085c | ||
|
|
5303cdc4af | ||
|
|
feb03e4717 | ||
|
|
64e3a091c3 | ||
|
|
a2c50a980c | ||
|
|
23478b891f | ||
|
|
aab2d52b25 | ||
|
|
9a9041f1ce | ||
|
|
0aa704935b | ||
|
|
ede7f8f5de | ||
|
|
3c317d2fac | ||
|
|
b55b0258e0 | ||
|
|
55a8098d48 | ||
|
|
389e50ff1e | ||
|
|
1df4043ad7 | ||
|
|
b000b8a736 | ||
|
|
7eab7fa353 | ||
|
|
58f7c82d52 | ||
|
|
4d1cd0da93 | ||
|
|
9ee7a014c9 | ||
|
|
e1ab7db87d | ||
|
|
14a5596346 | ||
|
|
2eba5f33b9 | ||
|
|
60a3773c50 | ||
|
|
e8e8177e9d | ||
|
|
f1fe04245a | ||
|
|
8bb208e8f8 | ||
|
|
f8a3aa91cd | ||
|
|
019bde82ce | ||
|
|
ca5e38751c | ||
|
|
b5b25b39e9 | ||
|
|
1784523cc6 | ||
|
|
d71d10adbc | ||
|
|
40fb750589 | ||
|
|
62a6b8d4a6 | ||
|
|
24b1890710 | ||
|
|
3a1d28379a | ||
|
|
c57285d199 | ||
|
|
68cfe929c4 | ||
|
|
6237fd2c16 | ||
|
|
b023f9bd2a | ||
|
|
b7ac885d38 | ||
|
|
cbd9dcbe41 | ||
|
|
4594187732 | ||
|
|
63818f8488 | ||
|
|
8af61cdb66 | ||
|
|
ab83c0fd5b | ||
|
|
3cc40a2584 | ||
|
|
c11933b3fd | ||
|
|
4687699726 | ||
|
|
012dcb4893 | ||
|
|
f01d18e4b9 | ||
|
|
dabd3cd355 | ||
|
|
fa001f27a5 | ||
|
|
40b2e06a7f | ||
|
|
8008499028 | ||
|
|
3ac6929919 | ||
|
|
8d36acd29b | ||
|
|
e54209d643 | ||
|
|
f6a958dc3a | ||
|
|
2548e7b23f | ||
|
|
97046a3548 | ||
|
|
a7d52c414f | ||
|
|
479466a495 | ||
|
|
fa2a8f6fb8 | ||
|
|
ddfa33be79 | ||
|
|
25c76a760e | ||
|
|
14240e9e10 | ||
|
|
a3045b4e49 | ||
|
|
b0685b3576 | ||
|
|
138c57c76a | ||
|
|
182a415555 | ||
|
|
6e789fc516 | ||
|
|
09f278121e | ||
|
|
ed50e3f1b4 | ||
|
|
3a499099af | ||
|
|
931fc45f05 | ||
|
|
6076c74041 | ||
|
|
b4fdccf87a | ||
|
|
8d012181b0 | ||
|
|
d6344d9b5f | ||
|
|
cb9410ded2 | ||
|
|
6838fb32af | ||
|
|
74d77cb140 | ||
|
|
7ad3abfd05 | ||
|
|
7c6df7132e | ||
|
|
f27299dc3b | ||
|
|
47724ef238 | ||
|
|
357389a905 | ||
|
|
42cabc14d4 | ||
|
|
a948ca1669 | ||
|
|
9cef14dfb2 | ||
|
|
2d15d84a01 | ||
|
|
1035469662 | ||
|
|
296a6f7749 | ||
|
|
5cff8124b0 | ||
|
|
90e2510e2f | ||
|
|
9251dd7b24 | ||
|
|
3615063fbc | ||
|
|
09664f1ab8 | ||
|
|
bdf1157d55 | ||
|
|
b4a5ce89c2 | ||
|
|
660516914e | ||
|
|
4c1c479fcf | ||
|
|
309651dc82 | ||
|
|
b13b9f3331 | ||
|
|
108e584983 | ||
|
|
f3b4071209 | ||
|
|
fe1d024351 | ||
|
|
0de08d418f | ||
|
|
109edaae6d | ||
|
|
d69a630989 | ||
|
|
987b67bd2e | ||
|
|
f4d56802f9 | ||
|
|
9dfd6eacf4 | ||
|
|
5aed78e183 | ||
|
|
011e5dd864 | ||
|
|
ae654266df | ||
|
|
03986f1b8b | ||
|
|
bc649593e4 | ||
|
|
cc0285da7f | ||
|
|
f3bc16f4f5 | ||
|
|
15f94858f2 | ||
|
|
5febd06c25 | ||
|
|
9eb7fe8ac0 | ||
|
|
1f26ea4a85 | ||
|
|
912c29fd8c | ||
|
|
eea468918e | ||
|
|
537490e391 | ||
|
|
de8e362d4a | ||
|
|
7a588144b7 | ||
|
|
7f2999aa43 | ||
|
|
a3498f96ef | ||
|
|
637bfa0252 | ||
|
|
1c8f689ecb | ||
|
|
7a8b11d716 | ||
|
|
a67e207866 | ||
|
|
5817209158 | ||
|
|
b39d409aa2 | ||
|
|
a18fb9448b | ||
|
|
1f3007dbb4 | ||
|
|
5dafa4a270 | ||
|
|
e93bcbeee1 | ||
|
|
adc032e7d8 | ||
|
|
248c2b9bf5 | ||
|
|
a8baa05023 | ||
|
|
7066a79466 | ||
|
|
4a623f7ed2 | ||
|
|
f18700ef64 | ||
|
|
52d9a3c34f | ||
|
|
d785ed2588 | ||
|
|
4ff37a4ed1 | ||
|
|
fe167b6ba2 | ||
|
|
f042a7419d | ||
|
|
bc0ebfcdeb | ||
|
|
57d13c770a | ||
|
|
1692384636 | ||
|
|
7634091325 | ||
|
|
bdc8f59c17 | ||
|
|
817efbc29c | ||
|
|
d2661cb4b2 | ||
|
|
9b0110f50c | ||
|
|
5876381f86 | ||
|
|
c4edc25d01 | ||
|
|
36361d14cf | ||
|
|
c8fe5f485c | ||
|
|
1ac1212925 | ||
|
|
3d4fb5136d | ||
|
|
b6b03c8ab9 | ||
|
|
432945e422 | ||
|
|
052f9ddedb | ||
|
|
a96784b98e | ||
|
|
e06944438a | ||
|
|
fa1009b6fc | ||
|
|
b377e857bd | ||
|
|
9a806f667b | ||
|
|
979c9ce8e3 | ||
|
|
b217e6eed7 | ||
|
|
6b7e74a030 | ||
|
|
7fdeb14e6d | ||
|
|
8a323f8354 | ||
|
|
a7abd5bf70 | ||
|
|
932b589780 | ||
|
|
27c282a6ee | ||
|
|
5373289574 | ||
|
|
7d0eabaa80 | ||
|
|
e7f5d12cb6 | ||
|
|
f14e020370 | ||
|
|
e933b28aaf | ||
|
|
1bc490077a | ||
|
|
7d773abe50 | ||
|
|
f22114aeed | ||
|
|
0919de4511 | ||
|
|
3e5292a052 | ||
|
|
2066d60b16 | ||
|
|
51e84c77e7 | ||
|
|
775d9e0615 | ||
|
|
a20d55fb64 | ||
|
|
1b37baf656 | ||
|
|
bffe69a151 | ||
|
|
71525352f0 | ||
|
|
facc5f7ec5 | ||
|
|
184229b1e5 | ||
|
|
3e488c4f19 | ||
|
|
3f84e373ac | ||
|
|
ac6d6ec2f1 | ||
|
|
f11d5d9de8 | ||
|
|
ed2dbefa73 | ||
|
|
39f23aec6b | ||
|
|
362422641e | ||
|
|
a9dc900515 | ||
|
|
3a705696af | ||
|
|
2cfb8a2bf0 | ||
|
|
21ee1c2d01 | ||
|
|
a00febe1a0 | ||
|
|
1e7125ae7b | ||
|
|
aa4a7471dd | ||
|
|
69a03ce23c | ||
|
|
0f50cd7623 | ||
|
|
669c555874 | ||
|
|
1cfb73a129 | ||
|
|
2a585c2fba | ||
|
|
32a83128e6 | ||
|
|
fe7bb33af8 | ||
|
|
da6fa34f02 | ||
|
|
37a358ab93 | ||
|
|
3452c8d693 | ||
|
|
336992cc54 | ||
|
|
13afcbd1eb | ||
|
|
e58a3fd0aa | ||
|
|
57625b6c4c | ||
|
|
0d058d2174 | ||
|
|
8d49a8f278 | ||
|
|
b4b6cfdb1c | ||
|
|
6b7ccde156 | ||
|
|
9b0fd007fd | ||
|
|
6f3ef94836 | ||
|
|
08ac9866e0 | ||
|
|
a17fadea3a | ||
|
|
e30bbfd85d | ||
|
|
120f9d81b2 | ||
|
|
fa38839a80 | ||
|
|
d8f109176c | ||
|
|
bbb1b99ce1 | ||
|
|
0cd8840dba | ||
|
|
d4b253ba3e | ||
|
|
aee7fc118b | ||
|
|
60f0b4fffe | ||
|
|
a95e600eb0 | ||
|
|
a25959184e | ||
|
|
0e5da5b8bc | ||
|
|
ddfa4b8896 | ||
|
|
d816a11bca | ||
|
|
7820391cb9 | ||
|
|
148866bc73 | ||
|
|
0b57c47547 | ||
|
|
02db4450df | ||
|
|
ed7af82bdf | ||
|
|
e3b5673e98 | ||
|
|
82412f218f | ||
|
|
7c648782bc | ||
|
|
ee64d14733 | ||
|
|
bfaab6ed6b | ||
|
|
97333deb3f | ||
|
|
400d9d4205 | ||
|
|
ad1145a201 | ||
|
|
513c22df3b | ||
|
|
b5afd53138 | ||
|
|
72b4b3c7f8 | ||
|
|
eb60ba23f5 | ||
|
|
69aac49f79 | ||
|
|
67f139e016 | ||
|
|
654f047302 | ||
|
|
e6c23672b2 | ||
|
|
1058e5fdde | ||
|
|
6929d9355f | ||
|
|
8c377ad965 | ||
|
|
a81a16beac | ||
|
|
d92945bb8a | ||
|
|
90a6a59a2f | ||
|
|
8bae3d9007 | ||
|
|
98042b858d | ||
|
|
a837bd08b0 | ||
|
|
2c61e9c76a | ||
|
|
da97f78ae0 | ||
|
|
2e1a9da5e2 | ||
|
|
422fd933f5 | ||
|
|
2594124825 | ||
|
|
d09b6ecaa5 | ||
|
|
fb2e71b9bd | ||
|
|
68b67e24f2 | ||
|
|
c1e2341f0a | ||
|
|
70d834c512 | ||
|
|
65ee4e4555 | ||
|
|
5304b13365 | ||
|
|
e547bfa933 | ||
|
|
36ddb13d1f | ||
|
|
74e3def5b3 | ||
|
|
24d41452b0 | ||
|
|
2597020d22 | ||
|
|
2d0fea2650 | ||
|
|
c1a71ad14f | ||
|
|
024c7641a9 | ||
|
|
5c56bdf229 | ||
|
|
af779fa57c | ||
|
|
9918541795 | ||
|
|
04d5c8fb77 | ||
|
|
5980b3cbb0 | ||
|
|
10074bfcc6 | ||
|
|
3940e69c91 | ||
|
|
0ace5f6553 | ||
|
|
b8a9f19515 | ||
|
|
6cd007838d | ||
|
|
72870e2c57 | ||
|
|
9c8997cbe4 | ||
|
|
c6efb82526 | ||
|
|
5abfdc0140 | ||
|
|
d8bc4a0e9a | ||
|
|
8ad2fdd71e | ||
|
|
a2e45a2211 | ||
|
|
621c2b9015 | ||
|
|
b39d1e9b9d | ||
|
|
e1c456407e | ||
|
|
3fe8251dfb | ||
|
|
930a45e7a9 | ||
|
|
afc66554d7 | ||
|
|
998ab15570 | ||
|
|
c0d258ca17 | ||
|
|
230e4547e8 | ||
|
|
4cf33909ee | ||
|
|
323273382c | ||
|
|
6f0a2608b4 | ||
|
|
ea86edbd82 | ||
|
|
e7b5a8e6cb | ||
|
|
27eaf0cf02 | ||
|
|
c84904d8c8 | ||
|
|
01e1c85304 | ||
|
|
4774582dfb | ||
|
|
1ed09ff7a4 | ||
|
|
d89cf27d65 | ||
|
|
35d5ba2626 | ||
|
|
e5f0c38fa9 | ||
|
|
47925f3dd7 | ||
|
|
82c5950c7e | ||
|
|
1806879bb2 | ||
|
|
998b046d70 | ||
|
|
ec4f6e93c2 | ||
|
|
b49dcfb52b | ||
|
|
c62d55342d | ||
|
|
f7815fa93c | ||
|
|
6e305e11e3 | ||
|
|
b97606f0b0 | ||
|
|
f26154bfa9 | ||
|
|
d220ac8582 | ||
|
|
c57e748107 | ||
|
|
d6f8f16068 | ||
|
|
466429efb0 | ||
|
|
89977c73d1 | ||
|
|
a9a05a32bd | ||
|
|
2045c79e37 | ||
|
|
e60b5245d3 | ||
|
|
90bbabce56 | ||
|
|
ddfbe8b649 | ||
|
|
d001f6a396 | ||
|
|
d31da176eb | ||
|
|
e664cd5826 | ||
|
|
b8abeab6d3 | ||
|
|
4aa176c127 | ||
|
|
498e939f0e | ||
|
|
9a22b893b6 | ||
|
|
76d0d40946 | ||
|
|
791ad1210e | ||
|
|
100945694a | ||
|
|
abe2e6ecf7 | ||
|
|
d8efc99217 | ||
|
|
0163b5b8be | ||
|
|
baee3996ab | ||
|
|
8ad1928d93 | ||
|
|
24bf52bc69 | ||
|
|
862049c490 | ||
|
|
a8fc98aa30 | ||
|
|
d70f33748c | ||
|
|
b006c31b7b | ||
|
|
ae45a462e0 | ||
|
|
3cb0dd6685 | ||
|
|
c2a84aa6f0 | ||
|
|
9346e55d5a | ||
|
|
8fc2f8ef62 | ||
|
|
512b9ac194 | ||
|
|
560a82aeaf | ||
|
|
7358db5c27 | ||
|
|
e059efda1b | ||
|
|
164a985115 | ||
|
|
ade57a781c | ||
|
|
9f12ed83f2 | ||
|
|
8aabd9839b | ||
|
|
882fbb0433 | ||
|
|
15eee5dbbb | ||
|
|
cfc1d037ff | ||
|
|
c24ed07596 | ||
|
|
08aab6a620 | ||
|
|
2748c64d60 | ||
|
|
c4f1ab3cc5 | ||
|
|
5e06ec8409 | ||
|
|
04d0a84ae5 | ||
|
|
c1dfe2c529 | ||
|
|
7f88e8badb | ||
|
|
2f66ff2e4f | ||
|
|
76c251513e | ||
|
|
80afddacc8 | ||
|
|
7543c9df50 | ||
|
|
83fb13329d | ||
|
|
e06c923605 | ||
|
|
ab1169895f | ||
|
|
01e81c7e10 | ||
|
|
7bf1142ae0 | ||
|
|
af9f7a952b | ||
|
|
514592b892 | ||
|
|
d72efff878 | ||
|
|
e4c60e2030 | ||
|
|
ed80eb5b0f | ||
|
|
60dd765b3d | ||
|
|
b380dd030f | ||
|
|
19479ea021 | ||
|
|
d708ef6731 | ||
|
|
d1238baecb | ||
|
|
0510759bc4 | ||
|
|
6d5cca5ed0 | ||
|
|
e2b82b4325 | ||
|
|
cf4570a06f | ||
|
|
6df5dddd90 | ||
|
|
d4e9b141db | ||
|
|
ec0665a931 | ||
|
|
836fa69e2e | ||
|
|
9026dc2da4 | ||
|
|
98c9af4c59 | ||
|
|
e481d679b2 | ||
|
|
eb68aa38e3 | ||
|
|
082237e2b5 | ||
|
|
dd08a7a4f6 | ||
|
|
a60c9ef88e | ||
|
|
4e3d235e04 | ||
|
|
19da3606f9 | ||
|
|
fc9e0d2249 | ||
|
|
21a0f09081 | ||
|
|
b84b71f524 | ||
|
|
3d29bda9f8 | ||
|
|
459c664043 | ||
|
|
45edad84cb | ||
|
|
fd31f7e7e5 | ||
|
|
7b2531da24 | ||
|
|
848a13654d | ||
|
|
1cca8f5a30 | ||
|
|
12ffcf0b45 | ||
|
|
852989856d | ||
|
|
7dfdbf8fbe | ||
|
|
1eebb90030 | ||
|
|
ab71654078 | ||
|
|
7a6cff4b3a | ||
|
|
c3ba2198b1 | ||
|
|
ff748f1a41 | ||
|
|
b8193b6321 | ||
|
|
113d0937de | ||
|
|
d0a506661f | ||
|
|
4e71173928 | ||
|
|
e0f0a2ccee | ||
|
|
96edebf4d9 | ||
|
|
3783b455c0 | ||
|
|
7ee5238f5e | ||
|
|
b398169567 | ||
|
|
1960eebc2d | ||
|
|
ad1dd08693 | ||
|
|
95fd093c4a | ||
|
|
ed1ad28e29 | ||
|
|
7076505c24 | ||
|
|
5825cf9457 | ||
|
|
ff40415aee | ||
|
|
f48eb36f75 | ||
|
|
768e3e796e | ||
|
|
3869d4a3a7 | ||
|
|
a87c468c5c | ||
|
|
7abf50a5c0 | ||
|
|
d3f46eb61b | ||
|
|
72c58b0d1d | ||
|
|
6c89e1b311 | ||
|
|
09777a4fc2 | ||
|
|
0331071346 | ||
|
|
614ae7b2bc | ||
|
|
af41ada7aa | ||
|
|
6a33a4456e | ||
|
|
e0c2a39ad4 | ||
|
|
cda1f2be58 | ||
|
|
79e06c4147 | ||
|
|
ead2618c31 | ||
|
|
84eb9fee76 | ||
|
|
79300cdcd9 | ||
|
|
a9591ad1b7 | ||
|
|
098106b54c | ||
|
|
74bb59fa57 | ||
|
|
c97d112b30 | ||
|
|
2dc20b84c1 | ||
|
|
39b689f966 | ||
|
|
6fd3ff4032 | ||
|
|
ab8d1464a7 | ||
|
|
bf90d11a31 | ||
|
|
a08b6ae813 | ||
|
|
74c500b6ec | ||
|
|
26aeadbc3e | ||
|
|
d0a4b50e19 | ||
|
|
ebaf06a741 | ||
|
|
34d837c2dd | ||
|
|
7607d5145b | ||
|
|
12a90289ed | ||
|
|
592697583d | ||
|
|
b50a96982e | ||
|
|
aa2a54c10a | ||
|
|
532d4b5106 | ||
|
|
5788719988 | ||
|
|
ac0b911eda | ||
|
|
10232bfe9e | ||
|
|
a9c1ca9fc5 | ||
|
|
d051dd8087 | ||
|
|
bf52cef16f | ||
|
|
16a9c5e02b | ||
|
|
fef1a90938 | ||
|
|
27870d48ff | ||
|
|
2f66f3ce08 | ||
|
|
369df58a0d | ||
|
|
3d08b352a2 | ||
|
|
d13be06aaa | ||
|
|
f1c69192da | ||
|
|
a2314225e0 | ||
|
|
1e482fe6a8 | ||
|
|
80e7f9b9de | ||
|
|
d219269f1b | ||
|
|
0ff0512aff | ||
|
|
bdd731177e | ||
|
|
abd1c526f0 | ||
|
|
a050a5fa9b | ||
|
|
7f7b643c0d | ||
|
|
cd2814725a | ||
|
|
342fa1cf06 | ||
|
|
b425e851fb | ||
|
|
7c6a026230 | ||
|
|
2c9763da3e | ||
|
|
a782c3e368 | ||
|
|
95bd901efe | ||
|
|
98c9a5b7f6 | ||
|
|
516192e7f2 | ||
|
|
c37cdbe2cf | ||
|
|
c0a30b04c2 | ||
|
|
86cbb23282 | ||
|
|
e9a460411f | ||
|
|
a57098ea9b | ||
|
|
6f3166c15b | ||
|
|
1380c9af9f | ||
|
|
942daece00 | ||
|
|
040a4443a1 | ||
|
|
641d5c4111 | ||
|
|
ad4a9955c5 | ||
|
|
553ed99e3b | ||
|
|
b74cdee6ab | ||
|
|
f3c0afa5b8 | ||
|
|
a69ba639ba | ||
|
|
fc9ad03e66 | ||
|
|
b9d66dca51 | ||
|
|
ecf1c6ca5d | ||
|
|
9b48991ebd | ||
|
|
7a8a20416f | ||
|
|
458925ae0b | ||
|
|
e44dc92197 | ||
|
|
9bb51d767e | ||
|
|
82e095a275 | ||
|
|
0e40261a11 | ||
|
|
8e9e33ae52 | ||
|
|
40e1a016f9 | ||
|
|
1cf559492a | ||
|
|
4957a838ef | ||
|
|
91aeebed26 | ||
|
|
b16ea66cec | ||
|
|
80cec5a62a | ||
|
|
6c2c281a7e | ||
|
|
0836893335 | ||
|
|
590f0358d8 | ||
|
|
115446be37 | ||
|
|
d83606ee3a | ||
|
|
8f4fda1d6f | ||
|
|
18cbb4d7d6 | ||
|
|
22e84d92b7 | ||
|
|
3d74649908 | ||
|
|
ed63d9d4de | ||
|
|
8adc7038fe | ||
|
|
b12fef3f31 | ||
|
|
6cc8df95dd | ||
|
|
f105e23444 | ||
|
|
7513d29a48 | ||
|
|
97a41f3646 | ||
|
|
84de433e62 | ||
|
|
724ad15dad | ||
|
|
79aa6c841e | ||
|
|
058e764af8 | ||
|
|
0d09f342c4 | ||
|
|
9682c2037e | ||
|
|
74241e7d85 | ||
|
|
3154f04fb9 | ||
|
|
6982ed4db7 | ||
|
|
9dd3e4d481 | ||
|
|
1d95109ffa | ||
|
|
e9bb7b7712 | ||
|
|
5e9c564883 | ||
|
|
3bb4602227 | ||
|
|
064eebeaf1 | ||
|
|
4ae644e427 | ||
|
|
d208e56b16 | ||
|
|
e6170eb20d | ||
|
|
2c80bcbc81 | ||
|
|
b60dbfa9e9 | ||
|
|
9019fc5671 | ||
|
|
5db0f70491 | ||
|
|
53a549000c | ||
|
|
55700cb01f | ||
|
|
f9a6062081 | ||
|
|
0cae201044 | ||
|
|
9df37b93df | ||
|
|
7b5c86033a | ||
|
|
ade0890746 | ||
|
|
7a5596bf02 | ||
|
|
d2125cf501 | ||
|
|
c9eb41c056 | ||
|
|
0d722204c3 | ||
|
|
e829d5643f | ||
|
|
1093287494 | ||
|
|
6398f71cc4 | ||
|
|
e2b50b203d | ||
|
|
ab0de23d83 | ||
|
|
ec54fbd9ed | ||
|
|
074bd2a19b | ||
|
|
fb23b85770 | ||
|
|
3458ce9ae5 | ||
|
|
ba3e7a8656 | ||
|
|
240bae4eb2 | ||
|
|
4180ca7638 | ||
|
|
0e73361a06 | ||
|
|
23547fa2a0 | ||
|
|
550d6f74b9 | ||
|
|
f7b71c2abe | ||
|
|
0da90b5d91 | ||
|
|
f20c94ced9 | ||
|
|
3e635a2334 | ||
|
|
e78652d850 | ||
|
|
48918c3047 | ||
|
|
dc42d6fb8d | ||
|
|
d2ad98d8c5 | ||
|
|
d25aab2704 | ||
|
|
cfaf88aab4 | ||
|
|
ecc75be6f3 | ||
|
|
13ebf61850 | ||
|
|
b3fafe9b3a | ||
|
|
c66943bd89 | ||
|
|
11fae450fa | ||
|
|
cf9259dd92 | ||
|
|
6634e3c3a3 | ||
|
|
533ae704a1 | ||
|
|
fcc320ee40 | ||
|
|
dc9fe9c361 | ||
|
|
75c369dcca | ||
|
|
019f6a1926 | ||
|
|
44fba11b34 | ||
|
|
df07c87b89 | ||
|
|
8f9e0357dd | ||
|
|
736af32b49 | ||
|
|
6942d313ff | ||
|
|
940c075bd8 | ||
|
|
08e5c0812f | ||
|
|
a8c71961e0 | ||
|
|
d6f47cc60c | ||
|
|
63d595a047 | ||
|
|
15e56c3284 | ||
|
|
fc1443dcfc | ||
|
|
59e3651af3 | ||
|
|
4c841a1f0c | ||
|
|
339ebdf08b | ||
|
|
f01d324c83 | ||
|
|
405e192b8c | ||
|
|
1a340de0e5 | ||
|
|
05c191199d | ||
|
|
1fd7085ef1 | ||
|
|
c3a7a757f7 | ||
|
|
dca46e6470 | ||
|
|
7edd13822c | ||
|
|
a2bff51ede | ||
|
|
5dc1240c49 | ||
|
|
c764331dd9 | ||
|
|
586444b6b8 | ||
|
|
ce1649564c | ||
|
|
d76a74cc5e | ||
|
|
1b701c746f | ||
|
|
15bf168527 | ||
|
|
20e9fc73e2 | ||
|
|
bad6410d08 | ||
|
|
fecb67b246 | ||
|
|
2c0956200f | ||
|
|
acd9d72466 | ||
|
|
cd63a461d7 | ||
|
|
7bd098f670 | ||
|
|
4b5c504bd4 | ||
|
|
ffae4f6b48 | ||
|
|
454e840590 | ||
|
|
ed0a413711 | ||
|
|
ff812ccdc9 | ||
|
|
03bbf4de48 | ||
|
|
a62e155ca4 | ||
|
|
b620e62f0f | ||
|
|
b3186dee17 | ||
|
|
ea3f63281c | ||
|
|
7b9435890d | ||
|
|
1bfbd25027 | ||
|
|
ceb5a8ca7b | ||
|
|
ddc98c6fc9 | ||
|
|
ff6ff66e50 |
24
.cvsignore
24
.cvsignore
@@ -1,16 +1,22 @@
|
|||||||
compile
|
|
||||||
config.log
|
|
||||||
Makefile
|
Makefile
|
||||||
libtool
|
|
||||||
Makefile.in
|
Makefile.in
|
||||||
aclocal.m4
|
aclocal.m4
|
||||||
configure
|
aclocal.m4.bak
|
||||||
config.h
|
|
||||||
config.status
|
|
||||||
curl-config
|
|
||||||
autom4te.cache
|
autom4te.cache
|
||||||
depcomp
|
compile
|
||||||
config.guess
|
config.guess
|
||||||
|
config.h
|
||||||
|
config.log
|
||||||
|
config.lt
|
||||||
|
config.status
|
||||||
config.sub
|
config.sub
|
||||||
ltmain.sh
|
configure
|
||||||
|
curl-config
|
||||||
|
depcomp
|
||||||
libcurl.pc
|
libcurl.pc
|
||||||
|
libtool
|
||||||
|
ltmain.sh
|
||||||
|
vc6curl.ncb
|
||||||
|
vc6curl.opt
|
||||||
|
vc6curl.sln
|
||||||
|
vc6curl.suo
|
||||||
|
|||||||
2
CMake/CMakeConfigurableFile.in
Normal file
2
CMake/CMakeConfigurableFile.in
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
@CMAKE_CONFIGURABLE_FILE_CONTENT@
|
||||||
|
|
||||||
34
CMake/CheckTypeSize.c.in
Normal file
34
CMake/CheckTypeSize.c.in
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
#cmakedefine CHECK_TYPE_SIZE_TYPE @CHECK_TYPE_SIZE_TYPE@
|
||||||
|
#ifdef CHECK_TYPE_SIZE_TYPE
|
||||||
|
|
||||||
|
@CHECK_TYPE_SIZE_PREINCLUDE@
|
||||||
|
#ifdef HAVE_SYS_TYPES_H
|
||||||
|
# include <sys/types.h>
|
||||||
|
#endif /* HAVE_SYS_TYPES_H */
|
||||||
|
|
||||||
|
#ifdef HAVE_STDINT_H
|
||||||
|
# include <stdint.h>
|
||||||
|
#endif /* HAVE_STDINT_H */
|
||||||
|
|
||||||
|
#ifdef HAVE_STDDEF_H
|
||||||
|
# include <stddef.h>
|
||||||
|
#endif /* HAVE_STDDEF_H */
|
||||||
|
|
||||||
|
@CHECK_TYPE_SIZE_PREMAIN@
|
||||||
|
|
||||||
|
#ifdef __CLASSIC_C__
|
||||||
|
int main(){
|
||||||
|
int ac;
|
||||||
|
char*av[];
|
||||||
|
#else
|
||||||
|
int main(int ac, char*av[]){
|
||||||
|
#endif
|
||||||
|
if(ac > 1000){return *av[0];}
|
||||||
|
return sizeof(CHECK_TYPE_SIZE_TYPE);
|
||||||
|
}
|
||||||
|
|
||||||
|
#else /* CHECK_TYPE_SIZE_TYPE */
|
||||||
|
|
||||||
|
# error "CHECK_TYPE_SIZE_TYPE has to specify the type"
|
||||||
|
|
||||||
|
#endif /* CHECK_TYPE_SIZE_TYPE */
|
||||||
56
CMake/CheckTypeSize.cmake
Normal file
56
CMake/CheckTypeSize.cmake
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
# - Check sizeof a type
|
||||||
|
# CHECK_TYPE_SIZE(TYPE VARIABLE)
|
||||||
|
# Check if the type exists and determine size of type. if the type
|
||||||
|
# exists, the size will be stored to the variable.
|
||||||
|
#
|
||||||
|
# VARIABLE - variable to store size if the type exists.
|
||||||
|
# HAVE_${VARIABLE} - does the variable exists or not
|
||||||
|
|
||||||
|
MACRO(CHECK_TYPE_SIZE TYPE VARIABLE)
|
||||||
|
SET(CMAKE_ALLOW_UNKNOWN_VARIABLE_READ_ACCESS 1)
|
||||||
|
IF(NOT DEFINED ${VARIABLE})
|
||||||
|
IF("HAVE_${VARIABLE}" MATCHES "^HAVE_${VARIABLE}$")
|
||||||
|
SET(CHECK_TYPE_SIZE_TYPE "${TYPE}")
|
||||||
|
SET(MACRO_CHECK_TYPE_SIZE_FLAGS
|
||||||
|
"${CMAKE_REQUIRED_FLAGS}")
|
||||||
|
FOREACH(def HAVE_SYS_TYPES_H HAVE_STDINT_H HAVE_STDDEF_H)
|
||||||
|
IF("${def}")
|
||||||
|
SET(MACRO_CHECK_TYPE_SIZE_FLAGS
|
||||||
|
"${MACRO_CHECK_TYPE_SIZE_FLAGS} -D${def}")
|
||||||
|
ENDIF("${def}")
|
||||||
|
ENDFOREACH(def)
|
||||||
|
SET(CHECK_TYPE_SIZE_PREMAIN)
|
||||||
|
FOREACH(def ${CMAKE_EXTRA_INCLUDE_FILES})
|
||||||
|
SET(CHECK_TYPE_SIZE_PREMAIN "${CHECK_TYPE_SIZE_PREMAIN}#include \"${def}\"\n")
|
||||||
|
ENDFOREACH(def)
|
||||||
|
CONFIGURE_FILE(
|
||||||
|
"${CMAKE_CURRENT_SOURCE_DIR}/CMake/CheckTypeSize.c.in"
|
||||||
|
"${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/CheckTypeSize.c"
|
||||||
|
IMMEDIATE @ONLY)
|
||||||
|
FILE(READ
|
||||||
|
"${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/CheckTypeSize.c"
|
||||||
|
CHECK_TYPE_SIZE_FILE_CONTENT)
|
||||||
|
MESSAGE(STATUS "Check size of ${TYPE}")
|
||||||
|
IF(CMAKE_REQUIRED_LIBRARIES)
|
||||||
|
SET(CHECK_TYPE_SIZE_ADD_LIBRARIES
|
||||||
|
"-DLINK_LIBRARIES:STRING=${CMAKE_REQUIRED_LIBRARIES}")
|
||||||
|
ENDIF(CMAKE_REQUIRED_LIBRARIES)
|
||||||
|
TRY_RUN(${VARIABLE} HAVE_${VARIABLE}
|
||||||
|
${CMAKE_BINARY_DIR}
|
||||||
|
"${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/CheckTypeSize.c"
|
||||||
|
CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_TYPE_SIZE_FLAGS}
|
||||||
|
"${CHECK_TYPE_SIZE_ADD_LIBRARIES}"
|
||||||
|
OUTPUT_VARIABLE OUTPUT)
|
||||||
|
IF(HAVE_${VARIABLE})
|
||||||
|
MESSAGE(STATUS "Check size of ${TYPE} - done")
|
||||||
|
FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
|
||||||
|
"Determining size of ${TYPE} passed with the following output:\n${OUTPUT}\n\n")
|
||||||
|
ELSE(HAVE_${VARIABLE})
|
||||||
|
MESSAGE(STATUS "Check size of ${TYPE} - failed")
|
||||||
|
FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
|
||||||
|
"Determining size of ${TYPE} failed with the following output:\n${OUTPUT}\nCheckTypeSize.c:\n${CHECK_TYPE_SIZE_FILE_CONTENT}\n\n")
|
||||||
|
ENDIF(HAVE_${VARIABLE})
|
||||||
|
ENDIF("HAVE_${VARIABLE}" MATCHES "^HAVE_${VARIABLE}$")
|
||||||
|
ENDIF(NOT DEFINED ${VARIABLE})
|
||||||
|
SET(CMAKE_ALLOW_UNKNOWN_VARIABLE_READ_ACCESS )
|
||||||
|
ENDMACRO(CHECK_TYPE_SIZE)
|
||||||
75
CMake/CurlCheckCSourceCompiles.cmake
Normal file
75
CMake/CurlCheckCSourceCompiles.cmake
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
# - Check if the source code provided in the SOURCE argument compiles.
|
||||||
|
# CURL_CHECK_C_SOURCE_COMPILES(SOURCE VAR)
|
||||||
|
# - macro which checks if the source code compiles
|
||||||
|
# SOURCE - source code to try to compile
|
||||||
|
# VAR - variable to store whether the source code compiled
|
||||||
|
#
|
||||||
|
# The following variables may be set before calling this macro to
|
||||||
|
# modify the way the check is run:
|
||||||
|
#
|
||||||
|
# CMAKE_REQUIRED_FLAGS = string of compile command line flags
|
||||||
|
# CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar)
|
||||||
|
# CMAKE_REQUIRED_INCLUDES = list of include directories
|
||||||
|
# CMAKE_REQUIRED_LIBRARIES = list of libraries to link
|
||||||
|
|
||||||
|
MACRO(CURL_CHECK_C_SOURCE_COMPILES SOURCE VAR)
|
||||||
|
IF("${VAR}" MATCHES "^${VAR}$" OR "${VAR}" MATCHES "UNKNOWN")
|
||||||
|
SET(message "${VAR}")
|
||||||
|
# If the number of arguments is greater than 2 (SOURCE VAR)
|
||||||
|
IF(${ARGC} GREATER 2)
|
||||||
|
# then add the third argument as a message
|
||||||
|
SET(message "${ARGV2} (${VAR})")
|
||||||
|
ENDIF(${ARGC} GREATER 2)
|
||||||
|
SET(MACRO_CHECK_FUNCTION_DEFINITIONS
|
||||||
|
"-D${VAR} ${CMAKE_REQUIRED_FLAGS}")
|
||||||
|
IF(CMAKE_REQUIRED_LIBRARIES)
|
||||||
|
SET(CURL_CHECK_C_SOURCE_COMPILES_ADD_LIBRARIES
|
||||||
|
"-DLINK_LIBRARIES:STRING=${CMAKE_REQUIRED_LIBRARIES}")
|
||||||
|
ELSE(CMAKE_REQUIRED_LIBRARIES)
|
||||||
|
SET(CURL_CHECK_C_SOURCE_COMPILES_ADD_LIBRARIES)
|
||||||
|
ENDIF(CMAKE_REQUIRED_LIBRARIES)
|
||||||
|
IF(CMAKE_REQUIRED_INCLUDES)
|
||||||
|
SET(CURL_CHECK_C_SOURCE_COMPILES_ADD_INCLUDES
|
||||||
|
"-DINCLUDE_DIRECTORIES:STRING=${CMAKE_REQUIRED_INCLUDES}")
|
||||||
|
ELSE(CMAKE_REQUIRED_INCLUDES)
|
||||||
|
SET(CURL_CHECK_C_SOURCE_COMPILES_ADD_INCLUDES)
|
||||||
|
ENDIF(CMAKE_REQUIRED_INCLUDES)
|
||||||
|
SET(src "")
|
||||||
|
FOREACH(def ${EXTRA_DEFINES})
|
||||||
|
SET(src "${src}#define ${def} 1\n")
|
||||||
|
ENDFOREACH(def)
|
||||||
|
FOREACH(inc ${HEADER_INCLUDES})
|
||||||
|
SET(src "${src}#include <${inc}>\n")
|
||||||
|
ENDFOREACH(inc)
|
||||||
|
|
||||||
|
SET(src "${src}\nint main() { ${SOURCE} ; return 0; }")
|
||||||
|
SET(CMAKE_CONFIGURABLE_FILE_CONTENT "${src}")
|
||||||
|
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/CMake/CMakeConfigurableFile.in
|
||||||
|
"${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.c"
|
||||||
|
IMMEDIATE)
|
||||||
|
MESSAGE(STATUS "Performing Test ${message}")
|
||||||
|
TRY_COMPILE(${VAR}
|
||||||
|
${CMAKE_BINARY_DIR}
|
||||||
|
${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.c
|
||||||
|
COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
|
||||||
|
CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS}
|
||||||
|
"${CURL_CHECK_C_SOURCE_COMPILES_ADD_LIBRARIES}"
|
||||||
|
"${CURL_CHECK_C_SOURCE_COMPILES_ADD_INCLUDES}"
|
||||||
|
OUTPUT_VARIABLE OUTPUT)
|
||||||
|
IF(${VAR})
|
||||||
|
SET(${VAR} 1 CACHE INTERNAL "Test ${message}")
|
||||||
|
MESSAGE(STATUS "Performing Test ${message} - Success")
|
||||||
|
FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
|
||||||
|
"Performing C SOURCE FILE Test ${message} succeded with the following output:\n"
|
||||||
|
"${OUTPUT}\n"
|
||||||
|
"Source file was:\n${src}\n")
|
||||||
|
ELSE(${VAR})
|
||||||
|
MESSAGE(STATUS "Performing Test ${message} - Failed")
|
||||||
|
SET(${VAR} "" CACHE INTERNAL "Test ${message}")
|
||||||
|
FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
|
||||||
|
"Performing C SOURCE FILE Test ${message} failed with the following output:\n"
|
||||||
|
"${OUTPUT}\n"
|
||||||
|
"Source file was:\n${src}\n")
|
||||||
|
ENDIF(${VAR})
|
||||||
|
ENDIF("${VAR}" MATCHES "^${VAR}$" OR "${VAR}" MATCHES "UNKNOWN")
|
||||||
|
ENDMACRO(CURL_CHECK_C_SOURCE_COMPILES)
|
||||||
83
CMake/CurlCheckCSourceRuns.cmake
Normal file
83
CMake/CurlCheckCSourceRuns.cmake
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
# - Check if the source code provided in the SOURCE argument compiles and runs.
|
||||||
|
# CURL_CHECK_C_SOURCE_RUNS(SOURCE VAR)
|
||||||
|
# - macro which checks if the source code runs
|
||||||
|
# SOURCE - source code to try to compile
|
||||||
|
# VAR - variable to store size if the type exists.
|
||||||
|
#
|
||||||
|
# The following variables may be set before calling this macro to
|
||||||
|
# modify the way the check is run:
|
||||||
|
#
|
||||||
|
# CMAKE_REQUIRED_FLAGS = string of compile command line flags
|
||||||
|
# CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar)
|
||||||
|
# CMAKE_REQUIRED_INCLUDES = list of include directories
|
||||||
|
# CMAKE_REQUIRED_LIBRARIES = list of libraries to link
|
||||||
|
|
||||||
|
MACRO(CURL_CHECK_C_SOURCE_RUNS SOURCE VAR)
|
||||||
|
IF("${VAR}" MATCHES "^${VAR}$" OR "${VAR}" MATCHES "UNKNOWN")
|
||||||
|
SET(message "${VAR}")
|
||||||
|
# If the number of arguments is greater than 2 (SOURCE VAR)
|
||||||
|
IF(${ARGC} GREATER 2)
|
||||||
|
# then add the third argument as a message
|
||||||
|
SET(message "${ARGV2} (${VAR})")
|
||||||
|
ENDIF(${ARGC} GREATER 2)
|
||||||
|
SET(MACRO_CHECK_FUNCTION_DEFINITIONS
|
||||||
|
"-D${VAR} ${CMAKE_REQUIRED_FLAGS}")
|
||||||
|
IF(CMAKE_REQUIRED_LIBRARIES)
|
||||||
|
SET(CURL_CHECK_C_SOURCE_COMPILES_ADD_LIBRARIES
|
||||||
|
"-DLINK_LIBRARIES:STRING=${CMAKE_REQUIRED_LIBRARIES}")
|
||||||
|
ELSE(CMAKE_REQUIRED_LIBRARIES)
|
||||||
|
SET(CURL_CHECK_C_SOURCE_COMPILES_ADD_LIBRARIES)
|
||||||
|
ENDIF(CMAKE_REQUIRED_LIBRARIES)
|
||||||
|
IF(CMAKE_REQUIRED_INCLUDES)
|
||||||
|
SET(CURL_CHECK_C_SOURCE_COMPILES_ADD_INCLUDES
|
||||||
|
"-DINCLUDE_DIRECTORIES:STRING=${CMAKE_REQUIRED_INCLUDES}")
|
||||||
|
ELSE(CMAKE_REQUIRED_INCLUDES)
|
||||||
|
SET(CURL_CHECK_C_SOURCE_COMPILES_ADD_INCLUDES)
|
||||||
|
ENDIF(CMAKE_REQUIRED_INCLUDES)
|
||||||
|
SET(src "")
|
||||||
|
FOREACH(def ${EXTRA_DEFINES})
|
||||||
|
SET(src "${src}#define ${def} 1\n")
|
||||||
|
ENDFOREACH(def)
|
||||||
|
FOREACH(inc ${HEADER_INCLUDES})
|
||||||
|
SET(src "${src}#include <${inc}>\n")
|
||||||
|
ENDFOREACH(inc)
|
||||||
|
|
||||||
|
SET(src "${src}\nint main() { ${SOURCE} ; return 0; }")
|
||||||
|
SET(CMAKE_CONFIGURABLE_FILE_CONTENT "${src}")
|
||||||
|
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/CMake/CMakeConfigurableFile.in
|
||||||
|
"${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.c"
|
||||||
|
IMMEDIATE)
|
||||||
|
MESSAGE(STATUS "Performing Test ${message}")
|
||||||
|
TRY_RUN(${VAR} ${VAR}_COMPILED
|
||||||
|
${CMAKE_BINARY_DIR}
|
||||||
|
${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.c
|
||||||
|
COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
|
||||||
|
CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS}
|
||||||
|
"${CURL_CHECK_C_SOURCE_COMPILES_ADD_LIBRARIES}"
|
||||||
|
"${CURL_CHECK_C_SOURCE_COMPILES_ADD_INCLUDES}"
|
||||||
|
OUTPUT_VARIABLE OUTPUT)
|
||||||
|
# if it did not compile make the return value fail code of 1
|
||||||
|
IF(NOT ${VAR}_COMPILED)
|
||||||
|
SET(${VAR} 1)
|
||||||
|
ENDIF(NOT ${VAR}_COMPILED)
|
||||||
|
# if the return value was 0 then it worked
|
||||||
|
SET(result_var ${${VAR}})
|
||||||
|
IF("${result_var}" EQUAL 0)
|
||||||
|
SET(${VAR} 1 CACHE INTERNAL "Test ${message}")
|
||||||
|
MESSAGE(STATUS "Performing Test ${message} - Success")
|
||||||
|
FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
|
||||||
|
"Performing C SOURCE FILE Test ${message} succeded with the following output:\n"
|
||||||
|
"${OUTPUT}\n"
|
||||||
|
"Return value: ${${VAR}}\n"
|
||||||
|
"Source file was:\n${src}\n")
|
||||||
|
ELSE("${result_var}" EQUAL 0)
|
||||||
|
MESSAGE(STATUS "Performing Test ${message} - Failed")
|
||||||
|
SET(${VAR} "" CACHE INTERNAL "Test ${message}")
|
||||||
|
FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
|
||||||
|
"Performing C SOURCE FILE Test ${message} failed with the following output:\n"
|
||||||
|
"${OUTPUT}\n"
|
||||||
|
"Return value: ${result_var}\n"
|
||||||
|
"Source file was:\n${src}\n")
|
||||||
|
ENDIF("${result_var}" EQUAL 0)
|
||||||
|
ENDIF("${VAR}" MATCHES "^${VAR}$" OR "${VAR}" MATCHES "UNKNOWN")
|
||||||
|
ENDMACRO(CURL_CHECK_C_SOURCE_RUNS)
|
||||||
690
CMake/CurlTests.c
Normal file
690
CMake/CurlTests.c
Normal file
@@ -0,0 +1,690 @@
|
|||||||
|
#ifdef TIME_WITH_SYS_TIME
|
||||||
|
/* Time with sys/time test */
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/time.h>
|
||||||
|
#include <time.h>
|
||||||
|
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
if ((struct tm *) 0)
|
||||||
|
return 0;
|
||||||
|
;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_FCNTL_O_NONBLOCK
|
||||||
|
|
||||||
|
/* headers for FCNTL_O_NONBLOCK test */
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
/* */
|
||||||
|
#if defined(sun) || defined(__sun__) || \
|
||||||
|
defined(__SUNPRO_C) || defined(__SUNPRO_CC)
|
||||||
|
# if defined(__SVR4) || defined(__srv4__)
|
||||||
|
# define PLATFORM_SOLARIS
|
||||||
|
# else
|
||||||
|
# define PLATFORM_SUNOS4
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
#if (defined(_AIX) || defined(__xlC__)) && !defined(_AIX41)
|
||||||
|
# define PLATFORM_AIX_V3
|
||||||
|
#endif
|
||||||
|
/* */
|
||||||
|
#if defined(PLATFORM_SUNOS4) || defined(PLATFORM_AIX_V3) || defined(__BEOS__)
|
||||||
|
#error "O_NONBLOCK does not work on this platform"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
/* O_NONBLOCK source test */
|
||||||
|
int flags = 0;
|
||||||
|
if(0 != fcntl(0, F_SETFL, flags | O_NONBLOCK))
|
||||||
|
return 1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_GETHOSTBYADDR_R_5
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <netdb.h>
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
|
||||||
|
char * address;
|
||||||
|
int length;
|
||||||
|
int type;
|
||||||
|
struct hostent h;
|
||||||
|
struct hostent_data hdata;
|
||||||
|
int rc;
|
||||||
|
#ifndef gethostbyaddr_r
|
||||||
|
(void)gethostbyaddr_r;
|
||||||
|
#endif
|
||||||
|
rc = gethostbyaddr_r(address, length, type, &h, &hdata);
|
||||||
|
;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_GETHOSTBYADDR_R_5_REENTRANT
|
||||||
|
#define _REENTRANT
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <netdb.h>
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
|
||||||
|
char * address;
|
||||||
|
int length;q
|
||||||
|
int type;
|
||||||
|
struct hostent h;
|
||||||
|
struct hostent_data hdata;
|
||||||
|
int rc;
|
||||||
|
#ifndef gethostbyaddr_r
|
||||||
|
(void)gethostbyaddr_r;
|
||||||
|
#endif
|
||||||
|
rc = gethostbyaddr_r(address, length, type, &h, &hdata);
|
||||||
|
;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_GETHOSTBYADDR_R_7
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <netdb.h>
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
|
||||||
|
char * address;
|
||||||
|
int length;
|
||||||
|
int type;
|
||||||
|
struct hostent h;
|
||||||
|
char buffer[8192];
|
||||||
|
int h_errnop;
|
||||||
|
struct hostent * hp;
|
||||||
|
|
||||||
|
#ifndef gethostbyaddr_r
|
||||||
|
(void)gethostbyaddr_r;
|
||||||
|
#endif
|
||||||
|
hp = gethostbyaddr_r(address, length, type, &h,
|
||||||
|
buffer, 8192, &h_errnop);
|
||||||
|
;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_GETHOSTBYADDR_R_7_REENTRANT
|
||||||
|
#define _REENTRANT
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <netdb.h>
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
|
||||||
|
char * address;
|
||||||
|
int length;
|
||||||
|
int type;
|
||||||
|
struct hostent h;
|
||||||
|
char buffer[8192];
|
||||||
|
int h_errnop;
|
||||||
|
struct hostent * hp;
|
||||||
|
|
||||||
|
#ifndef gethostbyaddr_r
|
||||||
|
(void)gethostbyaddr_r;
|
||||||
|
#endif
|
||||||
|
hp = gethostbyaddr_r(address, length, type, &h,
|
||||||
|
buffer, 8192, &h_errnop);
|
||||||
|
;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_GETHOSTBYADDR_R_8
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <netdb.h>
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
|
||||||
|
char * address;
|
||||||
|
int length;
|
||||||
|
int type;
|
||||||
|
struct hostent h;
|
||||||
|
char buffer[8192];
|
||||||
|
int h_errnop;
|
||||||
|
struct hostent * hp;
|
||||||
|
int rc;
|
||||||
|
|
||||||
|
#ifndef gethostbyaddr_r
|
||||||
|
(void)gethostbyaddr_r;
|
||||||
|
#endif
|
||||||
|
rc = gethostbyaddr_r(address, length, type, &h,
|
||||||
|
buffer, 8192, &hp, &h_errnop);
|
||||||
|
;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_GETHOSTBYADDR_R_8_REENTRANT
|
||||||
|
#define _REENTRANT
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <netdb.h>
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
|
||||||
|
char * address;
|
||||||
|
int length;
|
||||||
|
int type;
|
||||||
|
struct hostent h;
|
||||||
|
char buffer[8192];
|
||||||
|
int h_errnop;
|
||||||
|
struct hostent * hp;
|
||||||
|
int rc;
|
||||||
|
|
||||||
|
#ifndef gethostbyaddr_r
|
||||||
|
(void)gethostbyaddr_r;
|
||||||
|
#endif
|
||||||
|
rc = gethostbyaddr_r(address, length, type, &h,
|
||||||
|
buffer, 8192, &hp, &h_errnop);
|
||||||
|
;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_GETHOSTBYNAME_R_3
|
||||||
|
#include <string.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <netdb.h>
|
||||||
|
#undef NULL
|
||||||
|
#define NULL (void *)0
|
||||||
|
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
|
||||||
|
struct hostent_data data;
|
||||||
|
#ifndef gethostbyname_r
|
||||||
|
(void)gethostbyname_r;
|
||||||
|
#endif
|
||||||
|
gethostbyname_r(NULL, NULL, NULL);
|
||||||
|
;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_GETHOSTBYNAME_R_3_REENTRANT
|
||||||
|
#define _REENTRANT
|
||||||
|
#include <string.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <netdb.h>
|
||||||
|
#undef NULL
|
||||||
|
#define NULL (void *)0
|
||||||
|
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
|
||||||
|
struct hostent_data data;
|
||||||
|
#ifndef gethostbyname_r
|
||||||
|
(void)gethostbyname_r;
|
||||||
|
#endif
|
||||||
|
gethostbyname_r(NULL, NULL, NULL);
|
||||||
|
;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_GETHOSTBYNAME_R_5
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#include <netdb.h>
|
||||||
|
#undef NULL
|
||||||
|
#define NULL (void *)0
|
||||||
|
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
#ifndef gethostbyname_r
|
||||||
|
(void)gethostbyname_r;
|
||||||
|
#endif
|
||||||
|
gethostbyname_r(NULL, NULL, NULL, 0, NULL);
|
||||||
|
;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_GETHOSTBYNAME_R_5_REENTRANT
|
||||||
|
#define _REENTRANT
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <netdb.h>
|
||||||
|
#undef NULL
|
||||||
|
#define NULL (void *)0
|
||||||
|
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
|
||||||
|
#ifndef gethostbyname_r
|
||||||
|
(void)gethostbyname_r;
|
||||||
|
#endif
|
||||||
|
gethostbyname_r(NULL, NULL, NULL, 0, NULL);
|
||||||
|
;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_GETHOSTBYNAME_R_6
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <netdb.h>
|
||||||
|
#undef NULL
|
||||||
|
#define NULL (void *)0
|
||||||
|
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
|
||||||
|
#ifndef gethostbyname_r
|
||||||
|
(void)gethostbyname_r;
|
||||||
|
#endif
|
||||||
|
gethostbyname_r(NULL, NULL, NULL, 0, NULL, NULL);
|
||||||
|
;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_GETHOSTBYNAME_R_6_REENTRANT
|
||||||
|
#define _REENTRANT
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <netdb.h>
|
||||||
|
#undef NULL
|
||||||
|
#define NULL (void *)0
|
||||||
|
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
|
||||||
|
#ifndef gethostbyname_r
|
||||||
|
(void)gethostbyname_r;
|
||||||
|
#endif
|
||||||
|
gethostbyname_r(NULL, NULL, NULL, 0, NULL, NULL);
|
||||||
|
;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_SOCKLEN_T
|
||||||
|
#ifdef _WIN32
|
||||||
|
#include <ws2tcpip.h>
|
||||||
|
#else
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#endif
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
if ((socklen_t *) 0)
|
||||||
|
return 0;
|
||||||
|
if (sizeof (socklen_t))
|
||||||
|
return 0;
|
||||||
|
;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_IN_ADDR_T
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <arpa/inet.h>
|
||||||
|
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
if ((in_addr_t *) 0)
|
||||||
|
return 0;
|
||||||
|
if (sizeof (in_addr_t))
|
||||||
|
return 0;
|
||||||
|
;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_BOOL_T
|
||||||
|
#ifdef HAVE_SYS_TYPES_H
|
||||||
|
#include <sys/types.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_STDBOOL_H
|
||||||
|
#include <stdbool.h>
|
||||||
|
#endif
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
if (sizeof (bool *) )
|
||||||
|
return 0;
|
||||||
|
;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef STDC_HEADERS
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdarg.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <float.h>
|
||||||
|
int main() { return 0; }
|
||||||
|
#endif
|
||||||
|
#ifdef RETSIGTYPE_TEST
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <signal.h>
|
||||||
|
#ifdef signal
|
||||||
|
# undef signal
|
||||||
|
#endif
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" void (*signal (int, void (*)(int)))(int);
|
||||||
|
#else
|
||||||
|
void (*signal ()) ();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_INET_NTOA_R_DECL
|
||||||
|
#include <arpa/inet.h>
|
||||||
|
|
||||||
|
typedef void (*func_type)();
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
#ifndef inet_ntoa_r
|
||||||
|
func_type func;
|
||||||
|
func = (func_type)inet_ntoa_r;
|
||||||
|
#endif
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_INET_NTOA_R_DECL_REENTRANT
|
||||||
|
#define _REENTRANT
|
||||||
|
#include <arpa/inet.h>
|
||||||
|
|
||||||
|
typedef void (*func_type)();
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
#ifndef inet_ntoa_r
|
||||||
|
func_type func;
|
||||||
|
func = (func_type)&inet_ntoa_r;
|
||||||
|
#endif
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_GETADDRINFO
|
||||||
|
#include <netdb.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/socket.h>
|
||||||
|
|
||||||
|
int main(void) {
|
||||||
|
struct addrinfo hints, *ai;
|
||||||
|
int error;
|
||||||
|
|
||||||
|
memset(&hints, 0, sizeof(hints));
|
||||||
|
hints.ai_family = AF_UNSPEC;
|
||||||
|
hints.ai_socktype = SOCK_STREAM;
|
||||||
|
#ifndef getaddrinfo
|
||||||
|
(void)getaddrinfo;
|
||||||
|
#endif
|
||||||
|
error = getaddrinfo("127.0.0.1", "8080", &hints, &ai);
|
||||||
|
if (error) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_FILE_OFFSET_BITS
|
||||||
|
#ifdef _FILE_OFFSET_BITS
|
||||||
|
#undef _FILE_OFFSET_BITS
|
||||||
|
#endif
|
||||||
|
#define _FILE_OFFSET_BITS 64
|
||||||
|
#include <sys/types.h>
|
||||||
|
/* Check that off_t can represent 2**63 - 1 correctly.
|
||||||
|
We can't simply define LARGE_OFF_T to be 9223372036854775807,
|
||||||
|
since some C++ compilers masquerading as C compilers
|
||||||
|
incorrectly reject 9223372036854775807. */
|
||||||
|
#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
|
||||||
|
int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
|
||||||
|
&& LARGE_OFF_T % 2147483647 == 1)
|
||||||
|
? 1 : -1];
|
||||||
|
int main () { ; return 0; }
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_IOCTLSOCKET
|
||||||
|
/* includes start */
|
||||||
|
#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>
|
||||||
|
# else
|
||||||
|
# ifdef HAVE_WINSOCK_H
|
||||||
|
# include <winsock.h>
|
||||||
|
# endif
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
|
||||||
|
/* ioctlsocket source code */
|
||||||
|
int socket;
|
||||||
|
unsigned long flags = ioctlsocket(socket, FIONBIO, &flags);
|
||||||
|
|
||||||
|
;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_IOCTLSOCKET_CAMEL
|
||||||
|
/* includes start */
|
||||||
|
#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>
|
||||||
|
# else
|
||||||
|
# ifdef HAVE_WINSOCK_H
|
||||||
|
# include <winsock.h>
|
||||||
|
# endif
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
|
||||||
|
/* IoctlSocket source code */
|
||||||
|
if(0 != IoctlSocket(0, 0, 0))
|
||||||
|
return 1;
|
||||||
|
;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_IOCTLSOCKET_CAMEL_FIONBIO
|
||||||
|
/* includes start */
|
||||||
|
#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>
|
||||||
|
# else
|
||||||
|
# ifdef HAVE_WINSOCK_H
|
||||||
|
# include <winsock.h>
|
||||||
|
# endif
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
|
||||||
|
/* IoctlSocket source code */
|
||||||
|
long flags = 0;
|
||||||
|
if(0 != ioctlsocket(0, FIONBIO, &flags))
|
||||||
|
return 1;
|
||||||
|
;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_IOCTLSOCKET_FIONBIO
|
||||||
|
/* includes start */
|
||||||
|
#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>
|
||||||
|
# else
|
||||||
|
# ifdef HAVE_WINSOCK_H
|
||||||
|
# include <winsock.h>
|
||||||
|
# endif
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
|
||||||
|
int flags = 0;
|
||||||
|
if(0 != ioctlsocket(0, FIONBIO, &flags))
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_IOCTL_FIONBIO
|
||||||
|
/* headers for FIONBIO test */
|
||||||
|
/* includes start */
|
||||||
|
#ifdef HAVE_SYS_TYPES_H
|
||||||
|
# include <sys/types.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_UNISTD_H
|
||||||
|
# include <unistd.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
|
# include <sys/socket.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_SYS_IOCTL_H
|
||||||
|
# include <sys/ioctl.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_STROPTS_H
|
||||||
|
# include <stropts.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
|
||||||
|
int flags = 0;
|
||||||
|
if(0 != ioctl(0, FIONBIO, &flags))
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_IOCTL_SIOCGIFADDR
|
||||||
|
/* headers for FIONBIO test */
|
||||||
|
/* includes start */
|
||||||
|
#ifdef HAVE_SYS_TYPES_H
|
||||||
|
# include <sys/types.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_UNISTD_H
|
||||||
|
# include <unistd.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
|
# include <sys/socket.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_SYS_IOCTL_H
|
||||||
|
# include <sys/ioctl.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_STROPTS_H
|
||||||
|
# include <stropts.h>
|
||||||
|
#endif
|
||||||
|
#include <net/if.h>
|
||||||
|
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
struct ifreq ifr;
|
||||||
|
if(0 != ioctl(0, SIOCGIFADDR, &ifr))
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_SETSOCKOPT_SO_NONBLOCK
|
||||||
|
/* includes start */
|
||||||
|
#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>
|
||||||
|
# else
|
||||||
|
# ifdef HAVE_WINSOCK_H
|
||||||
|
# include <winsock.h>
|
||||||
|
# endif
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
/* includes start */
|
||||||
|
#ifdef HAVE_SYS_TYPES_H
|
||||||
|
# include <sys/types.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
|
# include <sys/socket.h>
|
||||||
|
#endif
|
||||||
|
/* includes end */
|
||||||
|
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
if(0 != setsockopt(0, SOL_SOCKET, SO_NONBLOCK, 0, 0))
|
||||||
|
return 1;
|
||||||
|
;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_GLIBC_STRERROR_R
|
||||||
|
#include <string.h>
|
||||||
|
#include <errno.h>
|
||||||
|
int
|
||||||
|
main () {
|
||||||
|
char buffer[1024]; /* big enough to play with */
|
||||||
|
char *string =
|
||||||
|
strerror_r(EACCES, buffer, sizeof(buffer));
|
||||||
|
/* this should've returned a string */
|
||||||
|
if(!string || !string[0])
|
||||||
|
return 99;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_POSIX_STRERROR_R
|
||||||
|
#include <string.h>
|
||||||
|
#include <errno.h>
|
||||||
|
int
|
||||||
|
main () {
|
||||||
|
char buffer[1024]; /* big enough to play with */
|
||||||
|
int error =
|
||||||
|
strerror_r(EACCES, buffer, sizeof(buffer));
|
||||||
|
/* This should've returned zero, and written an error string in the
|
||||||
|
buffer.*/
|
||||||
|
if(!buffer[0] || error)
|
||||||
|
return 99;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
19
CMake/FindOpenSSL.cmake
Normal file
19
CMake/FindOpenSSL.cmake
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
# Extension of the standard FindOpenSSL.cmake
|
||||||
|
# Adds OPENSSL_INCLUDE_DIRS and libeay32
|
||||||
|
INCLUDE("${CMAKE_ROOT}/Modules/FindOpenSSL.cmake")
|
||||||
|
|
||||||
|
# Bill Hoffman told that libeay32 is necessary for him:
|
||||||
|
FIND_LIBRARY(SSL_LIBEAY NAMES libeay32)
|
||||||
|
|
||||||
|
IF(OPENSSL_FOUND)
|
||||||
|
IF(SSL_LIBEAY)
|
||||||
|
LIST(APPEND OPENSSL_LIBRARIES ${SSL_LIBEAY})
|
||||||
|
ELSE()
|
||||||
|
SET(OPENSSL_FOUND FALSE)
|
||||||
|
ENDIF()
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
|
||||||
|
IF(OPENSSL_FOUND)
|
||||||
|
SET(OPENSSL_INCLUDE_DIRS ${OPENSSL_INCLUDE_DIR})
|
||||||
|
ENDIF()
|
||||||
8
CMake/FindZLIB.cmake
Normal file
8
CMake/FindZLIB.cmake
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
# Locate zlib
|
||||||
|
INCLUDE("${CMAKE_ROOT}/Modules/FindZLIB.cmake")
|
||||||
|
|
||||||
|
FIND_LIBRARY(ZLIB_LIBRARY_DEBUG NAMES zd zlibd zdlld zlib1d )
|
||||||
|
|
||||||
|
IF(ZLIB_FOUND AND ZLIB_LIBRARY_DEBUG)
|
||||||
|
SET( ZLIB_LIBRARIES optimized "${ZLIB_LIBRARY}" debug ${ZLIB_LIBRARY_DEBUG})
|
||||||
|
ENDIF()
|
||||||
250
CMake/OtherTests.cmake
Normal file
250
CMake/OtherTests.cmake
Normal file
@@ -0,0 +1,250 @@
|
|||||||
|
INCLUDE(CurlCheckCSourceCompiles)
|
||||||
|
SET(EXTRA_DEFINES "__unused1\n#undef inline\n#define __unused2")
|
||||||
|
SET(HEADER_INCLUDES)
|
||||||
|
SET(headers_hack)
|
||||||
|
|
||||||
|
MACRO(add_header_include check header)
|
||||||
|
IF(${check})
|
||||||
|
SET(headers_hack
|
||||||
|
"${headers_hack}\n#include <${header}>")
|
||||||
|
#SET(HEADER_INCLUDES
|
||||||
|
# ${HEADER_INCLUDES}
|
||||||
|
# "${header}")
|
||||||
|
ENDIF(${check})
|
||||||
|
ENDMACRO(add_header_include)
|
||||||
|
|
||||||
|
SET(signature_call_conv)
|
||||||
|
IF(HAVE_WINDOWS_H)
|
||||||
|
add_header_include(HAVE_WINDOWS_H "windows.h")
|
||||||
|
add_header_include(HAVE_WINSOCK2_H "winsock2.h")
|
||||||
|
add_header_include(HAVE_WINSOCK_H "winsock.h")
|
||||||
|
SET(EXTRA_DEFINES ${EXTRA_DEFINES}
|
||||||
|
"__unused7\n#ifndef WIN32_LEAN_AND_MEAN\n#define WIN32_LEAN_AND_MEAN\n#endif\n#define __unused3")
|
||||||
|
SET(signature_call_conv "PASCAL")
|
||||||
|
ELSE(HAVE_WINDOWS_H)
|
||||||
|
add_header_include(HAVE_SYS_TYPES_H "sys/types.h")
|
||||||
|
add_header_include(HAVE_SYS_SOCKET_H "sys/socket.h")
|
||||||
|
ENDIF(HAVE_WINDOWS_H)
|
||||||
|
|
||||||
|
SET(EXTRA_DEFINES_BACKUP "${EXTRA_DEFINES}")
|
||||||
|
SET(EXTRA_DEFINES "${EXTRA_DEFINES_BACKUP}\n${headers_hack}\n${extern_line}\n#define __unused5")
|
||||||
|
CURL_CHECK_C_SOURCE_COMPILES("recv(0, 0, 0, 0)" curl_cv_recv)
|
||||||
|
IF(curl_cv_recv)
|
||||||
|
# AC_CACHE_CHECK([types of arguments and return type for recv],
|
||||||
|
#[curl_cv_func_recv_args], [
|
||||||
|
#SET(curl_cv_func_recv_args "unknown")
|
||||||
|
#for recv_retv in 'int' 'ssize_t'; do
|
||||||
|
IF(NOT DEFINED curl_cv_func_recv_args OR "${curl_cv_func_recv_args}" STREQUAL "unknown")
|
||||||
|
FOREACH(recv_retv "int" "ssize_t" )
|
||||||
|
FOREACH(recv_arg1 "int" "ssize_t" "SOCKET")
|
||||||
|
FOREACH(recv_arg2 "void *" "char *")
|
||||||
|
FOREACH(recv_arg3 "size_t" "int" "socklen_t" "unsigned int")
|
||||||
|
FOREACH(recv_arg4 "int" "unsigned int")
|
||||||
|
IF(NOT curl_cv_func_recv_done)
|
||||||
|
SET(curl_cv_func_recv_test "UNKNOWN")
|
||||||
|
SET(extern_line "extern ${recv_retv} ${signature_call_conv} recv(${recv_arg1}, ${recv_arg2}, ${recv_arg3}, ${recv_arg4})\;")
|
||||||
|
SET(EXTRA_DEFINES "${EXTRA_DEFINES_BACKUP}\n${headers_hack}\n${extern_line}\n#define __unused5")
|
||||||
|
CURL_CHECK_C_SOURCE_COMPILES("
|
||||||
|
${recv_arg1} s=0;
|
||||||
|
${recv_arg2} buf=0;
|
||||||
|
${recv_arg3} len=0;
|
||||||
|
${recv_arg4} flags=0;
|
||||||
|
${recv_retv} res = recv(s, buf, len, flags)"
|
||||||
|
curl_cv_func_recv_test
|
||||||
|
"${recv_retv} recv(${recv_arg1}, ${recv_arg2}, ${recv_arg3}, ${recv_arg4})")
|
||||||
|
IF(curl_cv_func_recv_test)
|
||||||
|
SET(curl_cv_func_recv_args
|
||||||
|
"${recv_arg1},${recv_arg2},${recv_arg3},${recv_arg4},${recv_retv}")
|
||||||
|
SET(RECV_TYPE_ARG1 "${recv_arg1}")
|
||||||
|
SET(RECV_TYPE_ARG2 "${recv_arg2}")
|
||||||
|
SET(RECV_TYPE_ARG3 "${recv_arg3}")
|
||||||
|
SET(RECV_TYPE_ARG4 "${recv_arg4}")
|
||||||
|
SET(RECV_TYPE_RETV "${recv_retv}")
|
||||||
|
SET(HAVE_RECV 1)
|
||||||
|
SET(curl_cv_func_recv_done 1)
|
||||||
|
ENDIF(curl_cv_func_recv_test)
|
||||||
|
ENDIF(NOT curl_cv_func_recv_done)
|
||||||
|
ENDFOREACH(recv_arg4)
|
||||||
|
ENDFOREACH(recv_arg3)
|
||||||
|
ENDFOREACH(recv_arg2)
|
||||||
|
ENDFOREACH(recv_arg1)
|
||||||
|
ENDFOREACH(recv_retv)
|
||||||
|
ELSE(NOT DEFINED curl_cv_func_recv_args OR "${curl_cv_func_recv_args}" STREQUAL "unknown")
|
||||||
|
STRING(REGEX REPLACE "^([^,]*),[^,]*,[^,]*,[^,]*,[^,]*$" "\\1" RECV_TYPE_ARG1 "${curl_cv_func_recv_args}")
|
||||||
|
STRING(REGEX REPLACE "^[^,]*,([^,]*),[^,]*,[^,]*,[^,]*$" "\\1" RECV_TYPE_ARG2 "${curl_cv_func_recv_args}")
|
||||||
|
STRING(REGEX REPLACE "^[^,]*,[^,]*,([^,]*),[^,]*,[^,]*$" "\\1" RECV_TYPE_ARG3 "${curl_cv_func_recv_args}")
|
||||||
|
STRING(REGEX REPLACE "^[^,]*,[^,]*,[^,]*,([^,]*),[^,]*$" "\\1" RECV_TYPE_ARG4 "${curl_cv_func_recv_args}")
|
||||||
|
STRING(REGEX REPLACE "^[^,]*,[^,]*,[^,]*,[^,]*,([^,]*)$" "\\1" RECV_TYPE_RETV "${curl_cv_func_recv_args}")
|
||||||
|
#MESSAGE("RECV_TYPE_ARG1 ${RECV_TYPE_ARG1}")
|
||||||
|
#MESSAGE("RECV_TYPE_ARG2 ${RECV_TYPE_ARG2}")
|
||||||
|
#MESSAGE("RECV_TYPE_ARG3 ${RECV_TYPE_ARG3}")
|
||||||
|
#MESSAGE("RECV_TYPE_ARG4 ${RECV_TYPE_ARG4}")
|
||||||
|
#MESSAGE("RECV_TYPE_RETV ${RECV_TYPE_RETV}")
|
||||||
|
ENDIF(NOT DEFINED curl_cv_func_recv_args OR "${curl_cv_func_recv_args}" STREQUAL "unknown")
|
||||||
|
|
||||||
|
IF("${curl_cv_func_recv_args}" STREQUAL "unknown")
|
||||||
|
MESSAGE(FATAL_ERROR "Cannot find proper types to use for recv args")
|
||||||
|
ENDIF("${curl_cv_func_recv_args}" STREQUAL "unknown")
|
||||||
|
ELSE(curl_cv_recv)
|
||||||
|
MESSAGE(FATAL_ERROR "Unable to link function recv")
|
||||||
|
ENDIF(curl_cv_recv)
|
||||||
|
SET(curl_cv_func_recv_args "${curl_cv_func_recv_args}" CACHE INTERNAL "Arguments for recv")
|
||||||
|
SET(HAVE_RECV 1)
|
||||||
|
|
||||||
|
CURL_CHECK_C_SOURCE_COMPILES("send(0, 0, 0, 0)" curl_cv_send)
|
||||||
|
IF(curl_cv_send)
|
||||||
|
# AC_CACHE_CHECK([types of arguments and return type for send],
|
||||||
|
#[curl_cv_func_send_args], [
|
||||||
|
#SET(curl_cv_func_send_args "unknown")
|
||||||
|
#for send_retv in 'int' 'ssize_t'; do
|
||||||
|
IF(NOT DEFINED curl_cv_func_send_args OR "${curl_cv_func_send_args}" STREQUAL "unknown")
|
||||||
|
FOREACH(send_retv "int" "ssize_t" )
|
||||||
|
FOREACH(send_arg1 "int" "ssize_t" "SOCKET")
|
||||||
|
FOREACH(send_arg2 "const void *" "void *" "char *" "const char *")
|
||||||
|
FOREACH(send_arg3 "size_t" "int" "socklen_t" "unsigned int")
|
||||||
|
FOREACH(send_arg4 "int" "unsigned int")
|
||||||
|
IF(NOT curl_cv_func_send_done)
|
||||||
|
SET(curl_cv_func_send_test "UNKNOWN")
|
||||||
|
SET(extern_line "extern ${send_retv} ${signature_call_conv} send(${send_arg1}, ${send_arg2}, ${send_arg3}, ${send_arg4})\;")
|
||||||
|
SET(EXTRA_DEFINES "${EXTRA_DEFINES_BACKUP}\n${headers_hack}\n${extern_line}\n#define __unused5")
|
||||||
|
CURL_CHECK_C_SOURCE_COMPILES("
|
||||||
|
${send_arg1} s=0;
|
||||||
|
${send_arg2} buf=0;
|
||||||
|
${send_arg3} len=0;
|
||||||
|
${send_arg4} flags=0;
|
||||||
|
${send_retv} res = send(s, buf, len, flags)"
|
||||||
|
curl_cv_func_send_test
|
||||||
|
"${send_retv} send(${send_arg1}, ${send_arg2}, ${send_arg3}, ${send_arg4})")
|
||||||
|
IF(curl_cv_func_send_test)
|
||||||
|
#MESSAGE("Found arguments: ${curl_cv_func_send_test}")
|
||||||
|
STRING(REGEX REPLACE "(const) .*" "\\1" send_qual_arg2 "${send_arg2}")
|
||||||
|
STRING(REGEX REPLACE "const (.*)" "\\1" send_arg2 "${send_arg2}")
|
||||||
|
SET(curl_cv_func_send_args
|
||||||
|
"${send_arg1},${send_arg2},${send_arg3},${send_arg4},${send_retv},${send_qual_arg2}")
|
||||||
|
SET(SEND_TYPE_ARG1 "${send_arg1}")
|
||||||
|
SET(SEND_TYPE_ARG2 "${send_arg2}")
|
||||||
|
SET(SEND_TYPE_ARG3 "${send_arg3}")
|
||||||
|
SET(SEND_TYPE_ARG4 "${send_arg4}")
|
||||||
|
SET(SEND_TYPE_RETV "${send_retv}")
|
||||||
|
SET(HAVE_SEND 1)
|
||||||
|
SET(curl_cv_func_send_done 1)
|
||||||
|
ENDIF(curl_cv_func_send_test)
|
||||||
|
ENDIF(NOT curl_cv_func_send_done)
|
||||||
|
ENDFOREACH(send_arg4)
|
||||||
|
ENDFOREACH(send_arg3)
|
||||||
|
ENDFOREACH(send_arg2)
|
||||||
|
ENDFOREACH(send_arg1)
|
||||||
|
ENDFOREACH(send_retv)
|
||||||
|
ELSE(NOT DEFINED curl_cv_func_send_args OR "${curl_cv_func_send_args}" STREQUAL "unknown")
|
||||||
|
STRING(REGEX REPLACE "^([^,]*),[^,]*,[^,]*,[^,]*,[^,]*,[^,]*$" "\\1" SEND_TYPE_ARG1 "${curl_cv_func_send_args}")
|
||||||
|
STRING(REGEX REPLACE "^[^,]*,([^,]*),[^,]*,[^,]*,[^,]*,[^,]*$" "\\1" SEND_TYPE_ARG2 "${curl_cv_func_send_args}")
|
||||||
|
STRING(REGEX REPLACE "^[^,]*,[^,]*,([^,]*),[^,]*,[^,]*,[^,]*$" "\\1" SEND_TYPE_ARG3 "${curl_cv_func_send_args}")
|
||||||
|
STRING(REGEX REPLACE "^[^,]*,[^,]*,[^,]*,([^,]*),[^,]*,[^,]*$" "\\1" SEND_TYPE_ARG4 "${curl_cv_func_send_args}")
|
||||||
|
STRING(REGEX REPLACE "^[^,]*,[^,]*,[^,]*,[^,]*,([^,]*),[^,]*$" "\\1" SEND_TYPE_RETV "${curl_cv_func_send_args}")
|
||||||
|
STRING(REGEX REPLACE "^[^,]*,[^,]*,[^,]*,[^,]*,[^,]*,([^,]*)$" "\\1" SEND_QUAL_ARG2 "${curl_cv_func_send_args}")
|
||||||
|
#MESSAGE("SEND_TYPE_ARG1 ${SEND_TYPE_ARG1}")
|
||||||
|
#MESSAGE("SEND_TYPE_ARG2 ${SEND_TYPE_ARG2}")
|
||||||
|
#MESSAGE("SEND_TYPE_ARG3 ${SEND_TYPE_ARG3}")
|
||||||
|
#MESSAGE("SEND_TYPE_ARG4 ${SEND_TYPE_ARG4}")
|
||||||
|
#MESSAGE("SEND_TYPE_RETV ${SEND_TYPE_RETV}")
|
||||||
|
#MESSAGE("SEND_QUAL_ARG2 ${SEND_QUAL_ARG2}")
|
||||||
|
ENDIF(NOT DEFINED curl_cv_func_send_args OR "${curl_cv_func_send_args}" STREQUAL "unknown")
|
||||||
|
|
||||||
|
IF("${curl_cv_func_send_args}" STREQUAL "unknown")
|
||||||
|
MESSAGE(FATAL_ERROR "Cannot find proper types to use for send args")
|
||||||
|
ENDIF("${curl_cv_func_send_args}" STREQUAL "unknown")
|
||||||
|
SET(SEND_QUAL_ARG2 "const")
|
||||||
|
ELSE(curl_cv_send)
|
||||||
|
MESSAGE(FATAL_ERROR "Unable to link function send")
|
||||||
|
ENDIF(curl_cv_send)
|
||||||
|
SET(curl_cv_func_send_args "${curl_cv_func_send_args}" CACHE INTERNAL "Arguments for send")
|
||||||
|
SET(HAVE_SEND 1)
|
||||||
|
|
||||||
|
SET(EXTRA_DEFINES "${EXTRA_DEFINES}\n${headers_hack}\n#define __unused5")
|
||||||
|
CURL_CHECK_C_SOURCE_COMPILES("int flag = MSG_NOSIGNAL" HAVE_MSG_NOSIGNAL)
|
||||||
|
|
||||||
|
SET(EXTRA_DEFINES "__unused1\n#undef inline\n#define __unused2")
|
||||||
|
SET(HEADER_INCLUDES)
|
||||||
|
SET(headers_hack)
|
||||||
|
|
||||||
|
MACRO(add_header_include check header)
|
||||||
|
IF(${check})
|
||||||
|
SET(headers_hack
|
||||||
|
"${headers_hack}\n#include <${header}>")
|
||||||
|
#SET(HEADER_INCLUDES
|
||||||
|
# ${HEADER_INCLUDES}
|
||||||
|
# "${header}")
|
||||||
|
ENDIF(${check})
|
||||||
|
ENDMACRO(add_header_include header)
|
||||||
|
|
||||||
|
IF(HAVE_WINDOWS_H)
|
||||||
|
SET(EXTRA_DEFINES ${EXTRA_DEFINES}
|
||||||
|
"__unused7\n#ifndef WIN32_LEAN_AND_MEAN\n#define WIN32_LEAN_AND_MEAN\n#endif\n#define __unused3")
|
||||||
|
add_header_include(HAVE_WINDOWS_H "windows.h")
|
||||||
|
add_header_include(HAVE_WINSOCK2_H "winsock2.h")
|
||||||
|
add_header_include(HAVE_WINSOCK_H "winsock.h")
|
||||||
|
ELSE(HAVE_WINDOWS_H)
|
||||||
|
add_header_include(HAVE_SYS_TYPES_H "sys/types.h")
|
||||||
|
add_header_include(HAVE_SYS_TIME_H "sys/time.h")
|
||||||
|
add_header_include(TIME_WITH_SYS_TIME "time.h")
|
||||||
|
add_header_include(HAVE_TIME_H "time.h")
|
||||||
|
ENDIF(HAVE_WINDOWS_H)
|
||||||
|
SET(EXTRA_DEFINES "${EXTRA_DEFINES}\n${headers_hack}\n#define __unused5")
|
||||||
|
CURL_CHECK_C_SOURCE_COMPILES("struct timeval ts;\nts.tv_sec = 0;\nts.tv_usec = 0" HAVE_STRUCT_TIMEVAL)
|
||||||
|
|
||||||
|
|
||||||
|
INCLUDE(CurlCheckCSourceRuns)
|
||||||
|
SET(EXTRA_DEFINES)
|
||||||
|
SET(HEADER_INCLUDES)
|
||||||
|
IF(HAVE_SYS_POLL_H)
|
||||||
|
SET(HEADER_INCLUDES "sys/poll.h")
|
||||||
|
ENDIF(HAVE_SYS_POLL_H)
|
||||||
|
CURL_CHECK_C_SOURCE_RUNS("return poll((void *)0, 0, 10 /*ms*/)" HAVE_POLL_FINE)
|
||||||
|
|
||||||
|
SET(HAVE_SIG_ATOMIC_T 1)
|
||||||
|
SET(EXTRA_DEFINES)
|
||||||
|
SET(HEADER_INCLUDES)
|
||||||
|
IF(HAVE_SIGNAL_H)
|
||||||
|
SET(HEADER_INCLUDES "signal.h")
|
||||||
|
SET(CMAKE_EXTRA_INCLUDE_FILES "signal.h")
|
||||||
|
ENDIF(HAVE_SIGNAL_H)
|
||||||
|
CHECK_TYPE_SIZE("sig_atomic_t" SIZEOF_SIG_ATOMIC_T)
|
||||||
|
IF(HAVE_SIZEOF_SIG_ATOMIC_T)
|
||||||
|
CURL_CHECK_C_SOURCE_COMPILES("static volatile sig_atomic_t dummy = 0" HAVE_SIG_ATOMIC_T_NOT_VOLATILE)
|
||||||
|
IF(NOT HAVE_SIG_ATOMIC_T_NOT_VOLATILE)
|
||||||
|
SET(HAVE_SIG_ATOMIC_T_VOLATILE 1)
|
||||||
|
ENDIF(NOT HAVE_SIG_ATOMIC_T_NOT_VOLATILE)
|
||||||
|
ENDIF(HAVE_SIZEOF_SIG_ATOMIC_T)
|
||||||
|
|
||||||
|
SET(CHECK_TYPE_SIZE_PREINCLUDE
|
||||||
|
"#undef inline")
|
||||||
|
|
||||||
|
IF(HAVE_WINDOWS_H)
|
||||||
|
SET(CHECK_TYPE_SIZE_PREINCLUDE "${CHECK_TYPE_SIZE_PREINCLUDE}
|
||||||
|
#ifndef WIN32_LEAN_AND_MEAN
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#endif
|
||||||
|
#include <windows.h>")
|
||||||
|
IF(HAVE_WINSOCK2_H)
|
||||||
|
SET(CHECK_TYPE_SIZE_PREINCLUDE "${CHECK_TYPE_SIZE_PREINCLUDE}\n#include <winsock2.h>")
|
||||||
|
ENDIF(HAVE_WINSOCK2_H)
|
||||||
|
ELSE(HAVE_WINDOWS_H)
|
||||||
|
IF(HAVE_SYS_SOCKET_H)
|
||||||
|
SET(CMAKE_EXTRA_INCLUDE_FILES ${CMAKE_EXTRA_INCLUDE_FILES}
|
||||||
|
"sys/socket.h")
|
||||||
|
ENDIF(HAVE_SYS_SOCKET_H)
|
||||||
|
IF(HAVE_NETINET_IN_H)
|
||||||
|
SET(CMAKE_EXTRA_INCLUDE_FILES ${CMAKE_EXTRA_INCLUDE_FILES}
|
||||||
|
"netinet/in.h")
|
||||||
|
ENDIF(HAVE_NETINET_IN_H)
|
||||||
|
IF(HAVE_ARPA_INET_H)
|
||||||
|
SET(CMAKE_EXTRA_INCLUDE_FILES ${CMAKE_EXTRA_INCLUDE_FILES}
|
||||||
|
"arpa/inet.h")
|
||||||
|
ENDIF(HAVE_ARPA_INET_H)
|
||||||
|
ENDIF(HAVE_WINDOWS_H)
|
||||||
|
|
||||||
|
CHECK_TYPE_SIZE("struct sockaddr_storage" SIZEOF_STRUCT_SOCKADDR_STORAGE)
|
||||||
|
IF(HAVE_SIZEOF_STRUCT_SOCKADDR_STORAGE)
|
||||||
|
SET(HAVE_STRUCT_SOCKADDR_STORAGE 1)
|
||||||
|
ENDIF(HAVE_SIZEOF_STRUCT_SOCKADDR_STORAGE)
|
||||||
|
|
||||||
121
CMake/Platforms/WindowsCache.cmake
Normal file
121
CMake/Platforms/WindowsCache.cmake
Normal file
@@ -0,0 +1,121 @@
|
|||||||
|
IF(NOT UNIX)
|
||||||
|
IF(WIN32)
|
||||||
|
SET(HAVE_LIBDL 0)
|
||||||
|
SET(HAVE_LIBUCB 0)
|
||||||
|
SET(HAVE_LIBSOCKET 0)
|
||||||
|
SET(NOT_NEED_LIBNSL 0)
|
||||||
|
SET(HAVE_LIBNSL 0)
|
||||||
|
SET(HAVE_LIBZ 0)
|
||||||
|
SET(HAVE_LIBCRYPTO 0)
|
||||||
|
|
||||||
|
SET(HAVE_DLOPEN 0)
|
||||||
|
|
||||||
|
SET(HAVE_ALLOCA_H 0)
|
||||||
|
SET(HAVE_ARPA_INET_H 0)
|
||||||
|
SET(HAVE_DLFCN_H 0)
|
||||||
|
SET(HAVE_FCNTL_H 1)
|
||||||
|
SET(HAVE_FEATURES_H 0)
|
||||||
|
SET(HAVE_INTTYPES_H 0)
|
||||||
|
SET(HAVE_IO_H 1)
|
||||||
|
SET(HAVE_MALLOC_H 1)
|
||||||
|
SET(HAVE_MEMORY_H 1)
|
||||||
|
SET(HAVE_NETDB_H 0)
|
||||||
|
SET(HAVE_NETINET_IF_ETHER_H 0)
|
||||||
|
SET(HAVE_NETINET_IN_H 0)
|
||||||
|
SET(HAVE_NET_IF_H 0)
|
||||||
|
SET(HAVE_PROCESS_H 1)
|
||||||
|
SET(HAVE_PWD_H 0)
|
||||||
|
SET(HAVE_SETJMP_H 1)
|
||||||
|
SET(HAVE_SGTTY_H 0)
|
||||||
|
SET(HAVE_SIGNAL_H 1)
|
||||||
|
SET(HAVE_SOCKIO_H 0)
|
||||||
|
SET(HAVE_STDINT_H 0)
|
||||||
|
SET(HAVE_STDLIB_H 1)
|
||||||
|
SET(HAVE_STRINGS_H 0)
|
||||||
|
SET(HAVE_STRING_H 1)
|
||||||
|
SET(HAVE_SYS_PARAM_H 0)
|
||||||
|
SET(HAVE_SYS_POLL_H 0)
|
||||||
|
SET(HAVE_SYS_SELECT_H 0)
|
||||||
|
SET(HAVE_SYS_SOCKET_H 0)
|
||||||
|
SET(HAVE_SYS_SOCKIO_H 0)
|
||||||
|
SET(HAVE_SYS_STAT_H 1)
|
||||||
|
SET(HAVE_SYS_TIME_H 0)
|
||||||
|
SET(HAVE_SYS_TYPES_H 1)
|
||||||
|
SET(HAVE_SYS_UTIME_H 1)
|
||||||
|
SET(HAVE_TERMIOS_H 0)
|
||||||
|
SET(HAVE_TERMIO_H 0)
|
||||||
|
SET(HAVE_TIME_H 1)
|
||||||
|
SET(HAVE_UNISTD_H 0)
|
||||||
|
SET(HAVE_UTIME_H 0)
|
||||||
|
SET(HAVE_X509_H 0)
|
||||||
|
SET(HAVE_ZLIB_H 0)
|
||||||
|
|
||||||
|
SET(HAVE_SIZEOF_LONG_DOUBLE 1)
|
||||||
|
SET(SIZEOF_LONG_DOUBLE 8)
|
||||||
|
|
||||||
|
SET(HAVE_SOCKET 1)
|
||||||
|
SET(HAVE_POLL 0)
|
||||||
|
SET(HAVE_SELECT 1)
|
||||||
|
SET(HAVE_STRDUP 1)
|
||||||
|
SET(HAVE_STRSTR 1)
|
||||||
|
SET(HAVE_STRTOK_R 0)
|
||||||
|
SET(HAVE_STRFTIME 1)
|
||||||
|
SET(HAVE_UNAME 0)
|
||||||
|
SET(HAVE_STRCASECMP 0)
|
||||||
|
SET(HAVE_STRICMP 1)
|
||||||
|
SET(HAVE_STRCMPI 1)
|
||||||
|
SET(HAVE_GETHOSTBYADDR 1)
|
||||||
|
SET(HAVE_GETTIMEOFDAY 0)
|
||||||
|
SET(HAVE_INET_ADDR 1)
|
||||||
|
SET(HAVE_INET_NTOA 1)
|
||||||
|
SET(HAVE_INET_NTOA_R 0)
|
||||||
|
SET(HAVE_TCGETATTR 0)
|
||||||
|
SET(HAVE_TCSETATTR 0)
|
||||||
|
SET(HAVE_PERROR 1)
|
||||||
|
SET(HAVE_CLOSESOCKET 1)
|
||||||
|
SET(HAVE_SETVBUF 0)
|
||||||
|
SET(HAVE_SIGSETJMP 0)
|
||||||
|
SET(HAVE_GETPASS_R 0)
|
||||||
|
SET(HAVE_STRLCAT 0)
|
||||||
|
SET(HAVE_GETPWUID 0)
|
||||||
|
SET(HAVE_GETEUID 0)
|
||||||
|
SET(HAVE_UTIME 1)
|
||||||
|
SET(HAVE_RAND_EGD 0)
|
||||||
|
SET(HAVE_RAND_SCREEN 0)
|
||||||
|
SET(HAVE_RAND_STATUS 0)
|
||||||
|
SET(HAVE_GMTIME_R 0)
|
||||||
|
SET(HAVE_LOCALTIME_R 0)
|
||||||
|
SET(HAVE_GETHOSTBYADDR_R 0)
|
||||||
|
SET(HAVE_GETHOSTBYNAME_R 0)
|
||||||
|
SET(HAVE_SIGNAL_FUNC 1)
|
||||||
|
SET(HAVE_SIGNAL_MACRO 0)
|
||||||
|
|
||||||
|
SET(HAVE_GETHOSTBYADDR_R_5 0)
|
||||||
|
SET(HAVE_GETHOSTBYADDR_R_5_REENTRANT 0)
|
||||||
|
SET(HAVE_GETHOSTBYADDR_R_7 0)
|
||||||
|
SET(HAVE_GETHOSTBYADDR_R_7_REENTRANT 0)
|
||||||
|
SET(HAVE_GETHOSTBYADDR_R_8 0)
|
||||||
|
SET(HAVE_GETHOSTBYADDR_R_8_REENTRANT 0)
|
||||||
|
SET(HAVE_GETHOSTBYNAME_R_3 0)
|
||||||
|
SET(HAVE_GETHOSTBYNAME_R_3_REENTRANT 0)
|
||||||
|
SET(HAVE_GETHOSTBYNAME_R_5 0)
|
||||||
|
SET(HAVE_GETHOSTBYNAME_R_5_REENTRANT 0)
|
||||||
|
SET(HAVE_GETHOSTBYNAME_R_6 0)
|
||||||
|
SET(HAVE_GETHOSTBYNAME_R_6_REENTRANT 0)
|
||||||
|
|
||||||
|
SET(TIME_WITH_SYS_TIME 0)
|
||||||
|
SET(HAVE_O_NONBLOCK 0)
|
||||||
|
SET(HAVE_IN_ADDR_T 0)
|
||||||
|
SET(HAVE_INET_NTOA_R_DECL 0)
|
||||||
|
SET(HAVE_INET_NTOA_R_DECL_REENTRANT 0)
|
||||||
|
SET(HAVE_GETADDRINFO 0)
|
||||||
|
SET(STDC_HEADERS 1)
|
||||||
|
SET(RETSIGTYPE_TEST 1)
|
||||||
|
|
||||||
|
SET(HAVE_SIGACTION 0)
|
||||||
|
SET(HAVE_MACRO_SIGSETJMP 0)
|
||||||
|
ELSE(WIN32)
|
||||||
|
MESSAGE("This file should be included on Windows platform only")
|
||||||
|
ENDIF(WIN32)
|
||||||
|
ENDIF(NOT UNIX)
|
||||||
|
|
||||||
31
CMake/Utilities.cmake
Normal file
31
CMake/Utilities.cmake
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
# File containing various utilities
|
||||||
|
|
||||||
|
# Converts a CMake list to a string containing elements separated by spaces
|
||||||
|
FUNCTION(TO_LIST_SPACES _LIST_NAME OUTPUT_VAR)
|
||||||
|
SET(NEW_LIST_SPACE)
|
||||||
|
FOREACH(ITEM ${${_LIST_NAME}})
|
||||||
|
SET(NEW_LIST_SPACE "${NEW_LIST_SPACE} ${ITEM}")
|
||||||
|
ENDFOREACH()
|
||||||
|
STRING(STRIP ${NEW_LIST_SPACE} NEW_LIST_SPACE)
|
||||||
|
SET(${OUTPUT_VAR} "${NEW_LIST_SPACE}" PARENT_SCOPE)
|
||||||
|
ENDFUNCTION()
|
||||||
|
|
||||||
|
# Appends a lis of item to a string which is a space-separated list, if they don't already exist.
|
||||||
|
FUNCTION(LIST_SPACES_APPEND_ONCE LIST_NAME)
|
||||||
|
STRING(REPLACE " " ";" _LIST ${${LIST_NAME}})
|
||||||
|
LIST(APPEND _LIST ${ARGN})
|
||||||
|
LIST(REMOVE_DUPLICATES _LIST)
|
||||||
|
TO_LIST_SPACES(_LIST NEW_LIST_SPACE)
|
||||||
|
SET(${LIST_NAME} "${NEW_LIST_SPACE}" PARENT_SCOPE)
|
||||||
|
ENDFUNCTION()
|
||||||
|
|
||||||
|
# Convinience function that does the same as LIST(FIND ...) but with a TRUE/FALSE return value.
|
||||||
|
# Ex: IN_STR_LIST(MY_LIST "Searched item" WAS_FOUND)
|
||||||
|
FUNCTION(IN_STR_LIST LIST_NAME ITEM_SEARCHED RETVAL)
|
||||||
|
LIST(FIND ${LIST_NAME} ${ITEM_SEARCHED} FIND_POS)
|
||||||
|
IF(${FIND_POS} EQUAL -1)
|
||||||
|
SET(${RETVAL} FALSE PARENT_SCOPE)
|
||||||
|
ELSE()
|
||||||
|
SET(${RETVAL} TRUE PARENT_SCOPE)
|
||||||
|
ENDIF()
|
||||||
|
ENDFUNCTION()
|
||||||
843
CMakeLists.txt
Normal file
843
CMakeLists.txt
Normal file
@@ -0,0 +1,843 @@
|
|||||||
|
# cURL/libcurl CMake script
|
||||||
|
# by Tetetest and Sukender (Benoit Neil)
|
||||||
|
|
||||||
|
# TODO:
|
||||||
|
# The output .so file lacks the soname number which we currently have within the lib/Makefile.am file
|
||||||
|
# Add full (4 or 5 libs) SSL support
|
||||||
|
# Add INSTALL target (EXTRA_DIST variables in Makefile.am may be moved to Makefile.inc so that CMake/CPack is aware of what's to include).
|
||||||
|
# Add CTests(?)
|
||||||
|
# Check on all possible platforms
|
||||||
|
# Test with as many configurations possible (With or without any option)
|
||||||
|
# Create scripts that help keeping the CMake build system up to date (to reduce maintenance). According to Tetetest:
|
||||||
|
# - lists of headers that 'configure' checks for;
|
||||||
|
# - curl-specific tests (the ones that are in m4/curl-*.m4 files);
|
||||||
|
# - (most obvious thing:) curl version numbers.
|
||||||
|
# Add documentation subproject
|
||||||
|
#
|
||||||
|
# To check:
|
||||||
|
# (From Daniel Stenberg) The cmake build selected to run gcc with -fPIC on my box while the plain configure script did not.
|
||||||
|
# (From Daniel Stenberg) The gcc command line use neither -g nor any -O options. As a developer, I also treasure our configure scripts's --enable-debug option that sets a long range of "picky" compiler options.
|
||||||
|
|
||||||
|
CMAKE_MINIMUM_REQUIRED(VERSION 2.6.2 FATAL_ERROR)
|
||||||
|
SET(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMake;${CMAKE_MODULE_PATH}")
|
||||||
|
INCLUDE(Utilities)
|
||||||
|
|
||||||
|
project( CURL C )
|
||||||
|
SET(CURL_MAJOR_VERSION 7)
|
||||||
|
SET(CURL_MINOR_VERSION 19)
|
||||||
|
SET(CURL_PATCH_VERSION 4)
|
||||||
|
|
||||||
|
INCLUDE_REGULAR_EXPRESSION("^.*$") # Sukender: Is it necessary?
|
||||||
|
|
||||||
|
# Setup package meta-data
|
||||||
|
# SET(PACKAGE "curl")
|
||||||
|
SET(CURL_VERSION ${CURL_MAJOR_VERSION}.${CURL_MINOR_VERSION}.${CURL_PATCH_VERSION})
|
||||||
|
# SET(PACKAGE_TARNAME "curl")
|
||||||
|
# SET(PACKAGE_NAME "curl")
|
||||||
|
# SET(PACKAGE_VERSION "-")
|
||||||
|
# SET(PACKAGE_STRING "curl-")
|
||||||
|
# SET(PACKAGE_BUGREPORT "a suitable curl mailing list => http://curl.haxx.se/mail/")
|
||||||
|
SET(OPERATING_SYSTEM "${CMAKE_SYSTEM_NAME}")
|
||||||
|
SET(OS "\"${CMAKE_SYSTEM_NAME}\"")
|
||||||
|
|
||||||
|
# Make the base headers visible to everything
|
||||||
|
# IF(NOT ${PROJECT_BINARY_DIR} EQUAL ${PROJECT_SOURCE_DIR})
|
||||||
|
# INCLUDE_DIRECTORIES(${PROJECT_BINARY_DIR}/include)
|
||||||
|
# ENDIF()
|
||||||
|
INCLUDE_DIRECTORIES( ${CURL_SOURCE_DIR}/include )
|
||||||
|
|
||||||
|
IF(WIN32)
|
||||||
|
SET(NATIVE_WINDOWS ON)
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
OPTION(BUILD_CURL_EXE "Set to ON to build cURL executable." ON)
|
||||||
|
OPTION(BUILD_CURL_TESTS "Set to ON to build cURL tests." ON)
|
||||||
|
OPTION(CURL_STATICLIB "Set to ON to build libcurl with static linking." OFF)
|
||||||
|
|
||||||
|
OPTION(BUILD_DASHBOARD_REPORTS "Set to ON to activate reporting of cURL builds here http://www.cdash.org/CDashPublic/index.php?project=CURL" OFF)
|
||||||
|
IF(BUILD_DASHBOARD_REPORTS)
|
||||||
|
#INCLUDE(Dart)
|
||||||
|
INCLUDE(CTest)
|
||||||
|
ENDIF(BUILD_DASHBOARD_REPORTS)
|
||||||
|
|
||||||
|
IF(MSVC)
|
||||||
|
OPTION(BUILD_RELEASE_DEBUG_DIRS "Set OFF to build each configuration to a separate directory" OFF)
|
||||||
|
MARK_AS_ADVANCED(BUILD_RELEASE_DEBUG_DIRS)
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
OPTION(CURL_HIDDEN_SYMBOLS "Set to ON to hide libcurl internal symbols (=hide all symbols that aren't officially external)." ON)
|
||||||
|
MARK_AS_ADVANCED(CURL_HIDDEN_SYMBOLS)
|
||||||
|
|
||||||
|
# IF(WIN32)
|
||||||
|
# OPTION(CURL_WINDOWS_SSPI "Use windows libraries to allow NTLM authentication without openssl" ON)
|
||||||
|
# MARK_AS_ADVANCED(CURL_WINDOWS_SSPI)
|
||||||
|
# ENDIF()
|
||||||
|
|
||||||
|
OPTION(HTTP_ONLY "disables all protocols except HTTP (This overrides all CURL_DISABLE_* options)" OFF)
|
||||||
|
MARK_AS_ADVANCED(HTTP_ONLY)
|
||||||
|
OPTION(CURL_DISABLE_FTP "disables FTP" OFF)
|
||||||
|
MARK_AS_ADVANCED(CURL_DISABLE_FTP)
|
||||||
|
OPTION(CURL_DISABLE_LDAP "disables LDAP" OFF)
|
||||||
|
MARK_AS_ADVANCED(CURL_DISABLE_LDAP)
|
||||||
|
OPTION(CURL_DISABLE_TELNET "disables Telnet" OFF)
|
||||||
|
MARK_AS_ADVANCED(CURL_DISABLE_TELNET)
|
||||||
|
OPTION(CURL_DISABLE_DICT "disables DICT" OFF)
|
||||||
|
MARK_AS_ADVANCED(CURL_DISABLE_DICT)
|
||||||
|
OPTION(CURL_DISABLE_FILE "disables FILE" OFF)
|
||||||
|
MARK_AS_ADVANCED(CURL_DISABLE_FILE)
|
||||||
|
OPTION(CURL_DISABLE_TFTP "disables TFTP" OFF)
|
||||||
|
MARK_AS_ADVANCED(CURL_DISABLE_TFTP)
|
||||||
|
OPTION(CURL_DISABLE_HTTP "disables HTTP" OFF)
|
||||||
|
MARK_AS_ADVANCED(CURL_DISABLE_HTTP)
|
||||||
|
|
||||||
|
OPTION(CURL_DISABLE_LDAPS "to disable LDAPS" OFF)
|
||||||
|
MARK_AS_ADVANCED(CURL_DISABLE_LDAPS)
|
||||||
|
IF(WIN32)
|
||||||
|
OPTION(CURL_LDAP_WIN "Use W$ LDAP implementation" ON)
|
||||||
|
MARK_AS_ADVANCED(CURL_LDAP_WIN)
|
||||||
|
SET(CURL_LDAP_HYBRID OFF)
|
||||||
|
ELSE()
|
||||||
|
OPTION(CURL_LDAP_HYBRID "W$ LDAP with non-W$ compiler" OFF)
|
||||||
|
MARK_AS_ADVANCED(CURL_LDAP_HYBRID)
|
||||||
|
SET(CURL_LDAP_WIN OFF)
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
IF(HTTP_ONLY)
|
||||||
|
SET(CURL_DISABLE_FTP ON)
|
||||||
|
SET(CURL_DISABLE_LDAP ON)
|
||||||
|
SET(CURL_DISABLE_TELNET ON)
|
||||||
|
SET(CURL_DISABLE_DICT ON)
|
||||||
|
SET(CURL_DISABLE_FILE ON)
|
||||||
|
SET(CURL_DISABLE_TFTP ON)
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
OPTION(CURL_DISABLE_COOKIES "to disable cookies support" OFF)
|
||||||
|
MARK_AS_ADVANCED(CURL_DISABLE_COOKIES)
|
||||||
|
|
||||||
|
OPTION(CURL_DISABLE_CRYPTO_AUTH "to disable cryptographic authentication" OFF)
|
||||||
|
MARK_AS_ADVANCED(CURL_DISABLE_CRYPTO_AUTH)
|
||||||
|
OPTION(CURL_DISABLE_VERBOSE_STRINGS "to disable verbose strings" OFF)
|
||||||
|
MARK_AS_ADVANCED(CURL_DISABLE_VERBOSE_STRINGS)
|
||||||
|
OPTION(DISABLED_THREADSAFE "Set to explicitly specify we don't want to use thread-safe functions" OFF)
|
||||||
|
MARK_AS_ADVANCED(DISABLED_THREADSAFE)
|
||||||
|
OPTION(ENABLE_IPV6 "Define if you want to enable IPv6 support" OFF)
|
||||||
|
MARK_AS_ADVANCED(ENABLE_IPV6)
|
||||||
|
|
||||||
|
IF(WIN32)
|
||||||
|
LIST_SPACES_APPEND_ONCE(CMAKE_C_STANDARD_LIBRARIES wsock32.lib ws2_32.lib) # bufferoverflowu.lib
|
||||||
|
IF(CURL_DISABLE_LDAP)
|
||||||
|
# Remove wldap32.lib from space-separated list
|
||||||
|
STRING(REPLACE " " ";" _LIST ${CMAKE_C_STANDARD_LIBRARIES})
|
||||||
|
LIST(REMOVE_ITEM _LIST "wldap32.lib")
|
||||||
|
TO_LIST_SPACES(_LIST CMAKE_C_STANDARD_LIBRARIES)
|
||||||
|
ELSE()
|
||||||
|
# Append wldap32.lib
|
||||||
|
LIST_SPACES_APPEND_ONCE(CMAKE_C_STANDARD_LIBRARIES wldap32.lib)
|
||||||
|
ENDIF()
|
||||||
|
SET(CMAKE_C_STANDARD_LIBRARIES "${CMAKE_C_STANDARD_LIBRARIES}" CACHE STRING "" FORCE)
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
|
||||||
|
# We need ansi c-flags, especially on HP
|
||||||
|
SET(CMAKE_C_FLAGS "${CMAKE_ANSI_CFLAGS} ${CMAKE_C_FLAGS}")
|
||||||
|
SET(CMAKE_REQUIRED_FLAGS ${CMAKE_ANSI_CFLAGS})
|
||||||
|
|
||||||
|
# Disable warnings on Borland to avoid changing 3rd party code.
|
||||||
|
IF(BORLAND)
|
||||||
|
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -w-")
|
||||||
|
ENDIF(BORLAND)
|
||||||
|
|
||||||
|
# If we are on AIX, do the _ALL_SOURCE magic
|
||||||
|
IF(${CMAKE_SYSTEM_NAME} MATCHES AIX)
|
||||||
|
SET(_ALL_SOURCE 1)
|
||||||
|
ENDIF(${CMAKE_SYSTEM_NAME} MATCHES AIX)
|
||||||
|
|
||||||
|
# Include all the necessary files for macros
|
||||||
|
INCLUDE (CheckFunctionExists)
|
||||||
|
INCLUDE (CheckIncludeFile)
|
||||||
|
INCLUDE (CheckIncludeFiles)
|
||||||
|
INCLUDE (CheckLibraryExists)
|
||||||
|
INCLUDE (CheckSymbolExists)
|
||||||
|
# if crosscompiling is on, the CHECK_TYPE_SIZE macro coming with cmake uses
|
||||||
|
# TRY_COMPILE instead of TRY_RUN which makes crosscompiling easier, Alex
|
||||||
|
IF(CMAKE_CROSSCOMPILING)
|
||||||
|
INCLUDE ("${CMAKE_MODULE_PATH}/CheckTypeSize.cmake")
|
||||||
|
ELSE(CMAKE_CROSSCOMPILING)
|
||||||
|
INCLUDE (CheckTypeSize)
|
||||||
|
ENDIF(CMAKE_CROSSCOMPILING)
|
||||||
|
|
||||||
|
# On windows preload settings
|
||||||
|
IF(WIN32)
|
||||||
|
INCLUDE(${CMAKE_CURRENT_SOURCE_DIR}/CMake/Platforms/WindowsCache.cmake)
|
||||||
|
ENDIF(WIN32)
|
||||||
|
|
||||||
|
# This macro checks if the symbol exists in the library and if it
|
||||||
|
# does, it appends library to the list.
|
||||||
|
SET(CURL_LIBS "")
|
||||||
|
MACRO(CHECK_LIBRARY_EXISTS_CONCAT LIBRARY SYMBOL VARIABLE)
|
||||||
|
CHECK_LIBRARY_EXISTS("${LIBRARY};${CURL_LIBS}" ${SYMBOL} ""
|
||||||
|
${VARIABLE})
|
||||||
|
IF(${VARIABLE})
|
||||||
|
SET(CURL_LIBS ${CURL_LIBS} ${LIBRARY})
|
||||||
|
ENDIF(${VARIABLE})
|
||||||
|
ENDMACRO(CHECK_LIBRARY_EXISTS_CONCAT)
|
||||||
|
|
||||||
|
# Check for all needed libraries
|
||||||
|
CHECK_LIBRARY_EXISTS_CONCAT("dl" dlopen HAVE_LIBDL)
|
||||||
|
#CHECK_LIBRARY_EXISTS_CONCAT("ucb" gethostname HAVE_LIBUCB)
|
||||||
|
CHECK_LIBRARY_EXISTS_CONCAT("socket" connect HAVE_LIBSOCKET)
|
||||||
|
CHECK_LIBRARY_EXISTS("c" gethostbyname "" NOT_NEED_LIBNSL)
|
||||||
|
|
||||||
|
# Yellowtab Zeta needs different libraries than BeOS 5.
|
||||||
|
IF(BEOS)
|
||||||
|
SET(NOT_NEED_LIBNSL 1)
|
||||||
|
CHECK_LIBRARY_EXISTS_CONCAT("bind" gethostbyname HAVE_LIBBIND)
|
||||||
|
CHECK_LIBRARY_EXISTS_CONCAT("bnetapi" closesocket HAVE_LIBBNETAPI)
|
||||||
|
ENDIF(BEOS)
|
||||||
|
|
||||||
|
IF(NOT NOT_NEED_LIBNSL)
|
||||||
|
CHECK_LIBRARY_EXISTS_CONCAT("nsl" gethostbyname HAVE_LIBNSL)
|
||||||
|
ENDIF(NOT NOT_NEED_LIBNSL)
|
||||||
|
|
||||||
|
CHECK_LIBRARY_EXISTS_CONCAT("ws2_32" getch HAVE_LIBWS2_32)
|
||||||
|
CHECK_LIBRARY_EXISTS_CONCAT("winmm" getch HAVE_LIBWINMM)
|
||||||
|
# IF(NOT CURL_SPECIAL_LIBZ)
|
||||||
|
# CHECK_LIBRARY_EXISTS_CONCAT("z" inflateEnd HAVE_LIBZ)
|
||||||
|
# ENDIF(NOT CURL_SPECIAL_LIBZ)
|
||||||
|
|
||||||
|
OPTION(CMAKE_USE_OPENSSL "Use OpenSSL code. Experimental" ON)
|
||||||
|
MARK_AS_ADVANCED(CMAKE_USE_OPENSSL)
|
||||||
|
IF(CMAKE_USE_OPENSSL)
|
||||||
|
IF(WIN32)
|
||||||
|
FIND_PACKAGE(OpenSSL)
|
||||||
|
IF(OPENSSL_FOUND)
|
||||||
|
SET(USE_SSLEAY TRUE)
|
||||||
|
SET(USE_OPENSSL TRUE)
|
||||||
|
LIST(APPEND CURL_LIBS ${OPENSSL_LIBRARIES} )
|
||||||
|
ENDIF()
|
||||||
|
#FIND_LIBRARY(LIBEAY NAMES libeay32)
|
||||||
|
#LIST(APPEND CURL_LIBS ${LIBEAY} )
|
||||||
|
ELSE(WIN32)
|
||||||
|
CHECK_LIBRARY_EXISTS_CONCAT("crypto" CRYPTO_lock HAVE_LIBCRYPTO)
|
||||||
|
CHECK_LIBRARY_EXISTS_CONCAT("ssl" SSL_connect HAVE_LIBSSL)
|
||||||
|
ENDIF(WIN32)
|
||||||
|
ENDIF(CMAKE_USE_OPENSSL)
|
||||||
|
|
||||||
|
# Check for idn
|
||||||
|
CHECK_LIBRARY_EXISTS_CONCAT("idn" idna_to_ascii_lz HAVE_LIBIDN)
|
||||||
|
|
||||||
|
# Check for LDAP
|
||||||
|
CHECK_LIBRARY_EXISTS_CONCAT("ldap" ldap_init HAVE_LIBLDAP)
|
||||||
|
# if(NOT HAVE_LIBLDAP)
|
||||||
|
# SET(CURL_DISABLE_LDAP ON)
|
||||||
|
# endif(NOT HAVE_LIBLDAP)
|
||||||
|
|
||||||
|
# Check for symbol dlopen (same as HAVE_LIBDL)
|
||||||
|
CHECK_LIBRARY_EXISTS("${CURL_LIBS}" dlopen "" HAVE_DLOPEN)
|
||||||
|
|
||||||
|
# For other tests to use the same libraries
|
||||||
|
SET(CMAKE_REQUIRED_LIBRARIES ${CURL_LIBS})
|
||||||
|
|
||||||
|
OPTION(CURL_ZLIB "Set to ON to enable building cURL with zlib support." ON)
|
||||||
|
SET(HAVE_LIBZ OFF)
|
||||||
|
SET(HAVE_ZLIB_H OFF)
|
||||||
|
SET(HAVE_ZLIB OFF)
|
||||||
|
IF(CURL_ZLIB) # AND CURL_CONFIG_HAS_BEEN_RUN_BEFORE
|
||||||
|
FIND_PACKAGE(ZLIB)
|
||||||
|
IF(ZLIB_FOUND)
|
||||||
|
SET(HAVE_ZLIB_H ON)
|
||||||
|
SET(HAVE_ZLIB ON)
|
||||||
|
SET(HAVE_LIBZ ON)
|
||||||
|
ENDIF()
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
# If we have features.h, then do the _BSD_SOURCE magic
|
||||||
|
CHECK_INCLUDE_FILE("features.h" HAVE_FEATURES_H)
|
||||||
|
|
||||||
|
# Check if header file exists and add it to the list.
|
||||||
|
MACRO(CHECK_INCLUDE_FILE_CONCAT FILE VARIABLE)
|
||||||
|
CHECK_INCLUDE_FILES("${CURL_INCLUDES};${FILE}" ${VARIABLE})
|
||||||
|
IF(${VARIABLE})
|
||||||
|
SET(CURL_INCLUDES ${CURL_INCLUDES} ${FILE})
|
||||||
|
SET(CURL_TEST_DEFINES "${CURL_TEST_DEFINES} -D${VARIABLE}")
|
||||||
|
ENDIF(${VARIABLE})
|
||||||
|
ENDMACRO(CHECK_INCLUDE_FILE_CONCAT)
|
||||||
|
|
||||||
|
|
||||||
|
# Check for header files
|
||||||
|
IF(NOT UNIX)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("ws2tcpip.h" HAVE_WS2TCPIP_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("winsock2.h" HAVE_WINSOCK2_H)
|
||||||
|
ENDIF(NOT UNIX)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("stdio.h" HAVE_STDIO_H)
|
||||||
|
IF(NOT UNIX)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("windows.h" HAVE_WINDOWS_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("winsock.h" HAVE_WINSOCK_H)
|
||||||
|
ENDIF(NOT UNIX)
|
||||||
|
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("inttypes.h" HAVE_INTTYPES_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("sys/filio.h" HAVE_SYS_FILIO_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("sys/ioctl.h" HAVE_SYS_IOCTL_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("sys/param.h" HAVE_SYS_PARAM_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("sys/poll.h" HAVE_SYS_POLL_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("sys/resource.h" HAVE_SYS_RESOURCE_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("sys/select.h" HAVE_SYS_SELECT_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("sys/socket.h" HAVE_SYS_SOCKET_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("sys/sockio.h" HAVE_SYS_SOCKIO_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("sys/stat.h" HAVE_SYS_STAT_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("sys/time.h" HAVE_SYS_TIME_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("sys/types.h" HAVE_SYS_TYPES_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("sys/uio.h" HAVE_SYS_UIO_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("sys/un.h" HAVE_SYS_UN_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("sys/utime.h" HAVE_SYS_UTIME_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("alloca.h" HAVE_ALLOCA_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("arpa/inet.h" HAVE_ARPA_INET_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("arpa/tftp.h" HAVE_ARPA_TFTP_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("assert.h" HAVE_ASSERT_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("crypto.h" HAVE_CRYPTO_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("des.h" HAVE_DES_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("err.h" HAVE_ERR_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("errno.h" HAVE_ERRNO_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("fcntl.h" HAVE_FCNTL_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("gssapi/gssapi.h" HAVE_GSSAPI_GSSAPI_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("gssapi/gssapi_generic.h" HAVE_GSSAPI_GSSAPI_GENERIC_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("gssapi/gssapi_krb5.h" HAVE_GSSAPI_GSSAPI_KRB5_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("idn-free.h" HAVE_IDN_FREE_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("ifaddrs.h" HAVE_IFADDRS_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("io.h" HAVE_IO_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("krb.h" HAVE_KRB_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("libgen.h" HAVE_LIBGEN_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("libssh2.h" HAVE_LIBSSH2_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("limits.h" HAVE_LIMITS_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("locale.h" HAVE_LOCALE_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("net/if.h" HAVE_NET_IF_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("netdb.h" HAVE_NETDB_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("netinet/in.h" HAVE_NETINET_IN_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("netinet/tcp.h" HAVE_NETINET_TCP_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("openssl/crypto.h" HAVE_OPENSSL_CRYPTO_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("openssl/engine.h" HAVE_OPENSSL_ENGINE_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("openssl/err.h" HAVE_OPENSSL_ERR_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("openssl/pem.h" HAVE_OPENSSL_PEM_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("openssl/pkcs12.h" HAVE_OPENSSL_PKCS12_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("openssl/rsa.h" HAVE_OPENSSL_RSA_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("openssl/ssl.h" HAVE_OPENSSL_SSL_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("openssl/x509.h" HAVE_OPENSSL_X509_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("pem.h" HAVE_PEM_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("poll.h" HAVE_POLL_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("pwd.h" HAVE_PWD_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("rsa.h" HAVE_RSA_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("setjmp.h" HAVE_SETJMP_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("sgtty.h" HAVE_SGTTY_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("signal.h" HAVE_SIGNAL_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("ssl.h" HAVE_SSL_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("stdbool.h" HAVE_STDBOOL_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("stdint.h" HAVE_STDINT_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("stdio.h" HAVE_STDIO_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("stdlib.h" HAVE_STDLIB_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("string.h" HAVE_STRING_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("strings.h" HAVE_STRINGS_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("stropts.h" HAVE_STROPTS_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("termio.h" HAVE_TERMIO_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("termios.h" HAVE_TERMIOS_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("time.h" HAVE_TIME_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("tld.h" HAVE_TLD_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("unistd.h" HAVE_UNISTD_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("utime.h" HAVE_UTIME_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("x509.h" HAVE_X509_H)
|
||||||
|
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("process.h" HAVE_PROCESS_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("stddef.h" HAVE_STDDEF_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("dlfcn.h" HAVE_DLFCN_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("malloc.h" HAVE_MALLOC_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("memory.h" HAVE_MEMORY_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("ldap.h" HAVE_LDAP_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("netinet/if_ether.h" HAVE_NETINET_IF_ETHER_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("stdint.h" HAVE_STDINT_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("sockio.h" HAVE_SOCKIO_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("sys/utsname.h" HAVE_SYS_UTSNAME_H)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("idna.h" HAVE_IDNA_H)
|
||||||
|
|
||||||
|
IF(CMAKE_USE_OPENSSL)
|
||||||
|
CHECK_INCLUDE_FILE_CONCAT("openssl/rand.h" HAVE_OPENSSL_RAND_H)
|
||||||
|
ENDIF(CMAKE_USE_OPENSSL)
|
||||||
|
|
||||||
|
|
||||||
|
CHECK_TYPE_SIZE(size_t SIZEOF_SIZE_T)
|
||||||
|
CHECK_TYPE_SIZE(ssize_t SIZEOF_SSIZE_T)
|
||||||
|
CHECK_TYPE_SIZE("long long" SIZEOF_LONG_LONG)
|
||||||
|
CHECK_TYPE_SIZE("long" SIZEOF_LONG)
|
||||||
|
CHECK_TYPE_SIZE("int" SIZEOF_INT)
|
||||||
|
CHECK_TYPE_SIZE("__int64" SIZEOF___INT64)
|
||||||
|
CHECK_TYPE_SIZE("long double" SIZEOF_LONG_DOUBLE)
|
||||||
|
CHECK_TYPE_SIZE("time_t" SIZEOF_TIME_T)
|
||||||
|
IF(NOT HAVE_SIZEOF_SSIZE_T)
|
||||||
|
IF(SIZEOF_LONG EQUAL SIZEOF_SIZE_T)
|
||||||
|
SET(ssize_t long)
|
||||||
|
ENDIF(SIZEOF_LONG EQUAL SIZEOF_SIZE_T)
|
||||||
|
IF(NOT ssize_t AND SIZEOF___INT64 EQUAL SIZEOF_SIZE_T)
|
||||||
|
SET(ssize_t __int64)
|
||||||
|
ENDIF(NOT ssize_t AND SIZEOF___INT64 EQUAL SIZEOF_SIZE_T)
|
||||||
|
ENDIF(NOT HAVE_SIZEOF_SSIZE_T)
|
||||||
|
|
||||||
|
# Different sizeofs, etc.
|
||||||
|
|
||||||
|
# define CURL_SIZEOF_LONG 4
|
||||||
|
# define CURL_TYPEOF_CURL_OFF_T long long
|
||||||
|
# define CURL_FORMAT_CURL_OFF_T "lld"
|
||||||
|
# define CURL_FORMAT_CURL_OFF_TU "llu"
|
||||||
|
# define CURL_FORMAT_OFF_T "%lld"
|
||||||
|
# define CURL_SIZEOF_CURL_OFF_T 8
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_T LL
|
||||||
|
# define CURL_SUFFIX_CURL_OFF_TU ULL
|
||||||
|
|
||||||
|
set(CURL_SIZEOF_LONG ${SIZEOF_LONG})
|
||||||
|
|
||||||
|
if(SIZEOF_LONG EQUAL 8)
|
||||||
|
set(CURL_TYPEOF_CURL_OFF_T long)
|
||||||
|
set(CURL_SIZEOF_CURL_OFF_T 8)
|
||||||
|
set(CURL_FORMAT_CURL_OFF_T "ld")
|
||||||
|
set(CURL_FORMAT_CURL_OFF_TU "lu")
|
||||||
|
set(CURL_FORMAT_OFF_T "%ld")
|
||||||
|
set(CURL_SUFFIX_CURL_OFF_T L)
|
||||||
|
set(CURL_SUFFIX_CURL_OFF_TU LU)
|
||||||
|
endif(SIZEOF_LONG EQUAL 8)
|
||||||
|
|
||||||
|
if(SIZEOF_LONG_LONG EQUAL 8)
|
||||||
|
set(CURL_TYPEOF_CURL_OFF_T "long long")
|
||||||
|
set(CURL_SIZEOF_CURL_OFF_T 8)
|
||||||
|
set(CURL_FORMAT_CURL_OFF_T "lld")
|
||||||
|
set(CURL_FORMAT_CURL_OFF_TU "llu")
|
||||||
|
set(CURL_FORMAT_OFF_T "%lld")
|
||||||
|
set(CURL_SUFFIX_CURL_OFF_T LL)
|
||||||
|
set(CURL_SUFFIX_CURL_OFF_TU LLU)
|
||||||
|
endif(SIZEOF_LONG_LONG EQUAL 8)
|
||||||
|
|
||||||
|
if(NOT CURL_TYPEOF_CURL_OFF_T)
|
||||||
|
set(CURL_TYPEOF_CURL_OFF_T ${ssize_t})
|
||||||
|
set(CURL_SIZEOF_CURL_OFF_T ${SIZEOF_SSIZE_T})
|
||||||
|
# TODO: need adjustment here.
|
||||||
|
set(CURL_FORMAT_CURL_OFF_T "ld")
|
||||||
|
set(CURL_FORMAT_CURL_OFF_TU "lu")
|
||||||
|
set(CURL_FORMAT_OFF_T "%ld")
|
||||||
|
set(CURL_SUFFIX_CURL_OFF_T L)
|
||||||
|
set(CURL_SUFFIX_CURL_OFF_TU LU)
|
||||||
|
endif(NOT CURL_TYPEOF_CURL_OFF_T)
|
||||||
|
|
||||||
|
IF(HAVE_SIZEOF_LONG_LONG)
|
||||||
|
SET(HAVE_LONGLONG 1)
|
||||||
|
SET(HAVE_LL 1)
|
||||||
|
ENDIF(HAVE_SIZEOF_LONG_LONG)
|
||||||
|
|
||||||
|
FIND_FILE(RANDOM_FILE urandom /dev)
|
||||||
|
MARK_AS_ADVANCED(RANDOM_FILE)
|
||||||
|
|
||||||
|
# Check for some functions that are used
|
||||||
|
CHECK_SYMBOL_EXISTS(basename "${CURL_INCLUDES}" HAVE_BASENAME)
|
||||||
|
CHECK_SYMBOL_EXISTS(socket "${CURL_INCLUDES}" HAVE_SOCKET)
|
||||||
|
CHECK_SYMBOL_EXISTS(poll "${CURL_INCLUDES}" HAVE_POLL)
|
||||||
|
CHECK_SYMBOL_EXISTS(select "${CURL_INCLUDES}" HAVE_SELECT)
|
||||||
|
CHECK_SYMBOL_EXISTS(strdup "${CURL_INCLUDES}" HAVE_STRDUP)
|
||||||
|
CHECK_SYMBOL_EXISTS(strstr "${CURL_INCLUDES}" HAVE_STRSTR)
|
||||||
|
CHECK_SYMBOL_EXISTS(strtok_r "${CURL_INCLUDES}" HAVE_STRTOK_R)
|
||||||
|
CHECK_SYMBOL_EXISTS(strftime "${CURL_INCLUDES}" HAVE_STRFTIME)
|
||||||
|
CHECK_SYMBOL_EXISTS(uname "${CURL_INCLUDES}" HAVE_UNAME)
|
||||||
|
CHECK_SYMBOL_EXISTS(strcasecmp "${CURL_INCLUDES}" HAVE_STRCASECMP)
|
||||||
|
CHECK_SYMBOL_EXISTS(stricmp "${CURL_INCLUDES}" HAVE_STRICMP)
|
||||||
|
CHECK_SYMBOL_EXISTS(strcmpi "${CURL_INCLUDES}" HAVE_STRCMPI)
|
||||||
|
CHECK_SYMBOL_EXISTS(strncmpi "${CURL_INCLUDES}" HAVE_STRNCMPI)
|
||||||
|
CHECK_SYMBOL_EXISTS(alarm "${CURL_INCLUDES}" HAVE_ALARM)
|
||||||
|
IF(NOT HAVE_STRNCMPI)
|
||||||
|
SET(HAVE_STRCMPI)
|
||||||
|
ENDIF(NOT HAVE_STRNCMPI)
|
||||||
|
CHECK_SYMBOL_EXISTS(gethostbyaddr "${CURL_INCLUDES}" HAVE_GETHOSTBYADDR)
|
||||||
|
CHECK_SYMBOL_EXISTS(gethostbyaddr_r "${CURL_INCLUDES}" HAVE_GETHOSTBYADDR_R)
|
||||||
|
CHECK_SYMBOL_EXISTS(gettimeofday "${CURL_INCLUDES}" HAVE_GETTIMEOFDAY)
|
||||||
|
CHECK_SYMBOL_EXISTS(inet_addr "${CURL_INCLUDES}" HAVE_INET_ADDR)
|
||||||
|
CHECK_SYMBOL_EXISTS(inet_ntoa "${CURL_INCLUDES}" HAVE_INET_NTOA)
|
||||||
|
CHECK_SYMBOL_EXISTS(inet_ntoa_r "${CURL_INCLUDES}" HAVE_INET_NTOA_R)
|
||||||
|
CHECK_SYMBOL_EXISTS(tcsetattr "${CURL_INCLUDES}" HAVE_TCSETATTR)
|
||||||
|
CHECK_SYMBOL_EXISTS(tcgetattr "${CURL_INCLUDES}" HAVE_TCGETATTR)
|
||||||
|
CHECK_SYMBOL_EXISTS(perror "${CURL_INCLUDES}" HAVE_PERROR)
|
||||||
|
CHECK_SYMBOL_EXISTS(closesocket "${CURL_INCLUDES}" HAVE_CLOSESOCKET)
|
||||||
|
CHECK_SYMBOL_EXISTS(setvbuf "${CURL_INCLUDES}" HAVE_SETVBUF)
|
||||||
|
CHECK_SYMBOL_EXISTS(sigsetjmp "${CURL_INCLUDES}" HAVE_SIGSETJMP)
|
||||||
|
CHECK_SYMBOL_EXISTS(getpass_r "${CURL_INCLUDES}" HAVE_GETPASS_R)
|
||||||
|
CHECK_SYMBOL_EXISTS(strlcat "${CURL_INCLUDES}" HAVE_STRLCAT)
|
||||||
|
CHECK_SYMBOL_EXISTS(getpwuid "${CURL_INCLUDES}" HAVE_GETPWUID)
|
||||||
|
CHECK_SYMBOL_EXISTS(geteuid "${CURL_INCLUDES}" HAVE_GETEUID)
|
||||||
|
CHECK_SYMBOL_EXISTS(utime "${CURL_INCLUDES}" HAVE_UTIME)
|
||||||
|
IF(CMAKE_USE_OPENSSL)
|
||||||
|
CHECK_SYMBOL_EXISTS(RAND_status "${CURL_INCLUDES}" HAVE_RAND_STATUS)
|
||||||
|
CHECK_SYMBOL_EXISTS(RAND_screen "${CURL_INCLUDES}" HAVE_RAND_SCREEN)
|
||||||
|
CHECK_SYMBOL_EXISTS(RAND_egd "${CURL_INCLUDES}" HAVE_RAND_EGD)
|
||||||
|
CHECK_SYMBOL_EXISTS(CRYPTO_cleanup_all_ex_data "${CURL_INCLUDES}"
|
||||||
|
HAVE_CRYPTO_CLEANUP_ALL_EX_DATA)
|
||||||
|
IF(HAVE_LIBCRYPTO AND HAVE_LIBSSL)
|
||||||
|
SET(USE_OPENSSL 1)
|
||||||
|
SET(USE_SSLEAY 1)
|
||||||
|
ENDIF(HAVE_LIBCRYPTO AND HAVE_LIBSSL)
|
||||||
|
ENDIF(CMAKE_USE_OPENSSL)
|
||||||
|
CHECK_SYMBOL_EXISTS(gmtime_r "${CURL_INCLUDES}" HAVE_GMTIME_R)
|
||||||
|
CHECK_SYMBOL_EXISTS(localtime_r "${CURL_INCLUDES}" HAVE_LOCALTIME_R)
|
||||||
|
|
||||||
|
CHECK_SYMBOL_EXISTS(gethostbyname "${CURL_INCLUDES}" HAVE_GETHOSTBYNAME)
|
||||||
|
CHECK_SYMBOL_EXISTS(gethostbyname_r "${CURL_INCLUDES}" HAVE_GETHOSTBYNAME_R)
|
||||||
|
|
||||||
|
CHECK_SYMBOL_EXISTS(signal "${CURL_INCLUDES}" HAVE_SIGNAL_FUNC)
|
||||||
|
CHECK_SYMBOL_EXISTS(SIGALRM "${CURL_INCLUDES}" HAVE_SIGNAL_MACRO)
|
||||||
|
IF(HAVE_SIGNAL_FUNC AND HAVE_SIGNAL_MACRO)
|
||||||
|
SET(HAVE_SIGNAL 1)
|
||||||
|
ENDIF(HAVE_SIGNAL_FUNC AND HAVE_SIGNAL_MACRO)
|
||||||
|
CHECK_SYMBOL_EXISTS(uname "${CURL_INCLUDES}" HAVE_UNAME)
|
||||||
|
CHECK_SYMBOL_EXISTS(strtoll "${CURL_INCLUDES}" HAVE_STRTOLL)
|
||||||
|
CHECK_SYMBOL_EXISTS(_strtoi64 "${CURL_INCLUDES}" HAVE__STRTOI64)
|
||||||
|
CHECK_SYMBOL_EXISTS(strerror_r "${CURL_INCLUDES}" HAVE_STRERROR_R)
|
||||||
|
CHECK_SYMBOL_EXISTS(siginterrupt "${CURL_INCLUDES}" HAVE_SIGINTERRUPT)
|
||||||
|
CHECK_SYMBOL_EXISTS(perror "${CURL_INCLUDES}" HAVE_PERROR)
|
||||||
|
CHECK_SYMBOL_EXISTS(fork "${CURL_INCLUDES}" HAVE_FORK)
|
||||||
|
CHECK_SYMBOL_EXISTS(freeaddrinfo "${CURL_INCLUDES}" HAVE_FREEADDRINFO)
|
||||||
|
CHECK_SYMBOL_EXISTS(freeifaddrs "${CURL_INCLUDES}" HAVE_FREEIFADDRS)
|
||||||
|
CHECK_SYMBOL_EXISTS(pipe "${CURL_INCLUDES}" HAVE_PIPE)
|
||||||
|
CHECK_SYMBOL_EXISTS(ftruncate "${CURL_INCLUDES}" HAVE_FTRUNCATE)
|
||||||
|
CHECK_SYMBOL_EXISTS(getprotobyname "${CURL_INCLUDES}" HAVE_GETPROTOBYNAME)
|
||||||
|
CHECK_SYMBOL_EXISTS(getrlimit "${CURL_INCLUDES}" HAVE_GETRLIMIT)
|
||||||
|
CHECK_SYMBOL_EXISTS(idn_free "${CURL_INCLUDES}" HAVE_IDN_FREE)
|
||||||
|
CHECK_SYMBOL_EXISTS(idna_strerror "${CURL_INCLUDES}" HAVE_IDNA_STRERROR)
|
||||||
|
CHECK_SYMBOL_EXISTS(tld_strerror "${CURL_INCLUDES}" HAVE_TLD_STRERROR)
|
||||||
|
CHECK_SYMBOL_EXISTS(setlocale "${CURL_INCLUDES}" HAVE_SETLOCALE)
|
||||||
|
CHECK_SYMBOL_EXISTS(setrlimit "${CURL_INCLUDES}" HAVE_SETRLIMIT)
|
||||||
|
CHECK_SYMBOL_EXISTS(fcntl "${CURL_INCLUDES}" HAVE_FCNTL)
|
||||||
|
CHECK_SYMBOL_EXISTS(ioctl "${CURL_INCLUDES}" HAVE_IOCTL)
|
||||||
|
CHECK_SYMBOL_EXISTS(setsockopt "${CURL_INCLUDES}" HAVE_SETSOCKOPT)
|
||||||
|
|
||||||
|
# symbol exists in win32, but function does not.
|
||||||
|
CHECK_FUNCTION_EXISTS(inet_pton HAVE_INET_PTON)
|
||||||
|
|
||||||
|
# sigaction and sigsetjmp are special. Use special mechanism for
|
||||||
|
# detecting those, but only if previous attempt failed.
|
||||||
|
IF(HAVE_SIGNAL_H)
|
||||||
|
CHECK_SYMBOL_EXISTS(sigaction "signal.h" HAVE_SIGACTION)
|
||||||
|
ENDIF(HAVE_SIGNAL_H)
|
||||||
|
|
||||||
|
IF(NOT HAVE_SIGSETJMP)
|
||||||
|
IF(HAVE_SETJMP_H)
|
||||||
|
CHECK_SYMBOL_EXISTS(sigsetjmp "setjmp.h" HAVE_MACRO_SIGSETJMP)
|
||||||
|
IF(HAVE_MACRO_SIGSETJMP)
|
||||||
|
SET(HAVE_SIGSETJMP 1)
|
||||||
|
ENDIF(HAVE_MACRO_SIGSETJMP)
|
||||||
|
ENDIF(HAVE_SETJMP_H)
|
||||||
|
ENDIF(NOT HAVE_SIGSETJMP)
|
||||||
|
|
||||||
|
# If there is no stricmp(), do not allow LDAP to parse URLs
|
||||||
|
if(NOT HAVE_STRICMP)
|
||||||
|
SET(HAVE_LDAP_URL_PARSE 1)
|
||||||
|
endif(NOT HAVE_STRICMP)
|
||||||
|
|
||||||
|
# For other curl specific tests, use this macro.
|
||||||
|
MACRO(CURL_INTERNAL_TEST CURL_TEST)
|
||||||
|
IF("${CURL_TEST}" MATCHES "^${CURL_TEST}$")
|
||||||
|
SET(MACRO_CHECK_FUNCTION_DEFINITIONS
|
||||||
|
"-D${CURL_TEST} ${CURL_TEST_DEFINES} ${CMAKE_REQUIRED_FLAGS}")
|
||||||
|
IF(CMAKE_REQUIRED_LIBRARIES)
|
||||||
|
SET(CURL_TEST_ADD_LIBRARIES
|
||||||
|
"-DLINK_LIBRARIES:STRING=${CMAKE_REQUIRED_LIBRARIES}")
|
||||||
|
ENDIF(CMAKE_REQUIRED_LIBRARIES)
|
||||||
|
|
||||||
|
MESSAGE(STATUS "Performing Curl Test ${CURL_TEST}")
|
||||||
|
TRY_COMPILE(${CURL_TEST}
|
||||||
|
${CMAKE_BINARY_DIR}
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/CMake/CurlTests.c
|
||||||
|
CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS}
|
||||||
|
"${CURL_TEST_ADD_LIBRARIES}"
|
||||||
|
OUTPUT_VARIABLE OUTPUT)
|
||||||
|
IF(${CURL_TEST})
|
||||||
|
SET(${CURL_TEST} 1 CACHE INTERNAL "Curl test ${FUNCTION}")
|
||||||
|
MESSAGE(STATUS "Performing Curl Test ${CURL_TEST} - Success")
|
||||||
|
FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
|
||||||
|
"Performing Curl Test ${CURL_TEST} passed with the following output:\n"
|
||||||
|
"${OUTPUT}\n")
|
||||||
|
ELSE(${CURL_TEST})
|
||||||
|
MESSAGE(STATUS "Performing Curl Test ${CURL_TEST} - Failed")
|
||||||
|
SET(${CURL_TEST} "" CACHE INTERNAL "Curl test ${FUNCTION}")
|
||||||
|
FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
|
||||||
|
"Performing Curl Test ${CURL_TEST} failed with the following output:\n"
|
||||||
|
"${OUTPUT}\n")
|
||||||
|
ENDIF(${CURL_TEST})
|
||||||
|
ENDIF("${CURL_TEST}" MATCHES "^${CURL_TEST}$")
|
||||||
|
ENDMACRO(CURL_INTERNAL_TEST)
|
||||||
|
|
||||||
|
MACRO(CURL_INTERNAL_TEST_RUN CURL_TEST)
|
||||||
|
IF("${CURL_TEST}_COMPILE" MATCHES "^${CURL_TEST}_COMPILE$")
|
||||||
|
SET(MACRO_CHECK_FUNCTION_DEFINITIONS
|
||||||
|
"-D${CURL_TEST} ${CMAKE_REQUIRED_FLAGS}")
|
||||||
|
IF(CMAKE_REQUIRED_LIBRARIES)
|
||||||
|
SET(CURL_TEST_ADD_LIBRARIES
|
||||||
|
"-DLINK_LIBRARIES:STRING=${CMAKE_REQUIRED_LIBRARIES}")
|
||||||
|
ENDIF(CMAKE_REQUIRED_LIBRARIES)
|
||||||
|
|
||||||
|
MESSAGE(STATUS "Performing Curl Test ${CURL_TEST}")
|
||||||
|
TRY_RUN(${CURL_TEST} ${CURL_TEST}_COMPILE
|
||||||
|
${CMAKE_BINARY_DIR}
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/CMake/CurlTests.c
|
||||||
|
CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS}
|
||||||
|
"${CURL_TEST_ADD_LIBRARIES}"
|
||||||
|
OUTPUT_VARIABLE OUTPUT)
|
||||||
|
IF(${CURL_TEST}_COMPILE AND NOT ${CURL_TEST})
|
||||||
|
SET(${CURL_TEST} 1 CACHE INTERNAL "Curl test ${FUNCTION}")
|
||||||
|
MESSAGE(STATUS "Performing Curl Test ${CURL_TEST} - Success")
|
||||||
|
ELSE(${CURL_TEST}_COMPILE AND NOT ${CURL_TEST})
|
||||||
|
MESSAGE(STATUS "Performing Curl Test ${CURL_TEST} - Failed")
|
||||||
|
SET(${CURL_TEST} "" CACHE INTERNAL "Curl test ${FUNCTION}")
|
||||||
|
FILE(APPEND "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log"
|
||||||
|
"Performing Curl Test ${CURL_TEST} failed with the following output:\n"
|
||||||
|
"${OUTPUT}")
|
||||||
|
IF(${CURL_TEST}_COMPILE)
|
||||||
|
FILE(APPEND
|
||||||
|
"${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log"
|
||||||
|
"There was a problem running this test\n")
|
||||||
|
ENDIF(${CURL_TEST}_COMPILE)
|
||||||
|
FILE(APPEND "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log"
|
||||||
|
"\n\n")
|
||||||
|
ENDIF(${CURL_TEST}_COMPILE AND NOT ${CURL_TEST})
|
||||||
|
ENDIF("${CURL_TEST}_COMPILE" MATCHES "^${CURL_TEST}_COMPILE$")
|
||||||
|
ENDMACRO(CURL_INTERNAL_TEST_RUN)
|
||||||
|
|
||||||
|
# Do curl specific tests
|
||||||
|
FOREACH(CURL_TEST
|
||||||
|
HAVE_FCNTL_O_NONBLOCK
|
||||||
|
HAVE_IOCTLSOCKET
|
||||||
|
HAVE_IOCTLSOCKET_CAMEL
|
||||||
|
HAVE_IOCTLSOCKET_CAMEL_FIONBIO
|
||||||
|
HAVE_IOCTLSOCKET_FIONBIO
|
||||||
|
HAVE_IOCTL_FIONBIO
|
||||||
|
HAVE_IOCTL_SIOCGIFADDR
|
||||||
|
HAVE_SETSOCKOPT_SO_NONBLOCK
|
||||||
|
HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID
|
||||||
|
TIME_WITH_SYS_TIME
|
||||||
|
HAVE_O_NONBLOCK
|
||||||
|
HAVE_GETHOSTBYADDR_R_5
|
||||||
|
HAVE_GETHOSTBYADDR_R_7
|
||||||
|
HAVE_GETHOSTBYADDR_R_8
|
||||||
|
HAVE_GETHOSTBYADDR_R_5_REENTRANT
|
||||||
|
HAVE_GETHOSTBYADDR_R_7_REENTRANT
|
||||||
|
HAVE_GETHOSTBYADDR_R_8_REENTRANT
|
||||||
|
HAVE_GETHOSTBYNAME_R_3
|
||||||
|
HAVE_GETHOSTBYNAME_R_5
|
||||||
|
HAVE_GETHOSTBYNAME_R_6
|
||||||
|
HAVE_GETHOSTBYNAME_R_3_REENTRANT
|
||||||
|
HAVE_GETHOSTBYNAME_R_5_REENTRANT
|
||||||
|
HAVE_GETHOSTBYNAME_R_6_REENTRANT
|
||||||
|
HAVE_SOCKLEN_T
|
||||||
|
HAVE_IN_ADDR_T
|
||||||
|
HAVE_BOOL_T
|
||||||
|
STDC_HEADERS
|
||||||
|
RETSIGTYPE_TEST
|
||||||
|
HAVE_INET_NTOA_R_DECL
|
||||||
|
HAVE_INET_NTOA_R_DECL_REENTRANT
|
||||||
|
HAVE_GETADDRINFO
|
||||||
|
HAVE_FILE_OFFSET_BITS
|
||||||
|
)
|
||||||
|
CURL_INTERNAL_TEST(${CURL_TEST})
|
||||||
|
ENDFOREACH(CURL_TEST)
|
||||||
|
IF(HAVE_FILE_OFFSET_BITS)
|
||||||
|
SET(_FILE_OFFSET_BITS 64)
|
||||||
|
ENDIF(HAVE_FILE_OFFSET_BITS)
|
||||||
|
|
||||||
|
FOREACH(CURL_TEST
|
||||||
|
HAVE_GLIBC_STRERROR_R
|
||||||
|
HAVE_POSIX_STRERROR_R
|
||||||
|
)
|
||||||
|
CURL_INTERNAL_TEST_RUN(${CURL_TEST})
|
||||||
|
ENDFOREACH(CURL_TEST)
|
||||||
|
|
||||||
|
# Check for reentrant
|
||||||
|
FOREACH(CURL_TEST
|
||||||
|
HAVE_GETHOSTBYADDR_R_5
|
||||||
|
HAVE_GETHOSTBYADDR_R_7
|
||||||
|
HAVE_GETHOSTBYADDR_R_8
|
||||||
|
HAVE_GETHOSTBYNAME_R_3
|
||||||
|
HAVE_GETHOSTBYNAME_R_5
|
||||||
|
HAVE_GETHOSTBYNAME_R_6
|
||||||
|
HAVE_INET_NTOA_R_DECL_REENTRANT)
|
||||||
|
IF(NOT ${CURL_TEST})
|
||||||
|
IF(${CURL_TEST}_REENTRANT)
|
||||||
|
SET(NEED_REENTRANT 1)
|
||||||
|
ENDIF(${CURL_TEST}_REENTRANT)
|
||||||
|
ENDIF(NOT ${CURL_TEST})
|
||||||
|
ENDFOREACH(CURL_TEST)
|
||||||
|
|
||||||
|
IF(NEED_REENTRANT)
|
||||||
|
FOREACH(CURL_TEST
|
||||||
|
HAVE_GETHOSTBYADDR_R_5
|
||||||
|
HAVE_GETHOSTBYADDR_R_7
|
||||||
|
HAVE_GETHOSTBYADDR_R_8
|
||||||
|
HAVE_GETHOSTBYNAME_R_3
|
||||||
|
HAVE_GETHOSTBYNAME_R_5
|
||||||
|
HAVE_GETHOSTBYNAME_R_6)
|
||||||
|
SET(${CURL_TEST} 0)
|
||||||
|
IF(${CURL_TEST}_REENTRANT)
|
||||||
|
SET(${CURL_TEST} 1)
|
||||||
|
ENDIF(${CURL_TEST}_REENTRANT)
|
||||||
|
ENDFOREACH(CURL_TEST)
|
||||||
|
ENDIF(NEED_REENTRANT)
|
||||||
|
|
||||||
|
IF(HAVE_INET_NTOA_R_DECL_REENTRANT)
|
||||||
|
SET(HAVE_INET_NTOA_R_DECL 1)
|
||||||
|
SET(NEED_REENTRANT 1)
|
||||||
|
ENDIF(HAVE_INET_NTOA_R_DECL_REENTRANT)
|
||||||
|
|
||||||
|
# Some other minor tests
|
||||||
|
|
||||||
|
IF(NOT HAVE_IN_ADDR_T)
|
||||||
|
SET(in_addr_t "unsigned long")
|
||||||
|
ENDIF(NOT HAVE_IN_ADDR_T)
|
||||||
|
|
||||||
|
# Fix libz / zlib.h
|
||||||
|
|
||||||
|
IF(NOT CURL_SPECIAL_LIBZ)
|
||||||
|
IF(NOT HAVE_LIBZ)
|
||||||
|
SET(HAVE_ZLIB_H 0)
|
||||||
|
ENDIF(NOT HAVE_LIBZ)
|
||||||
|
|
||||||
|
IF(NOT HAVE_ZLIB_H)
|
||||||
|
SET(HAVE_LIBZ 0)
|
||||||
|
ENDIF(NOT HAVE_ZLIB_H)
|
||||||
|
ENDIF(NOT CURL_SPECIAL_LIBZ)
|
||||||
|
|
||||||
|
IF(_FILE_OFFSET_BITS)
|
||||||
|
SET(_FILE_OFFSET_BITS 64)
|
||||||
|
ENDIF(_FILE_OFFSET_BITS)
|
||||||
|
SET(CMAKE_REQUIRED_FLAGS "-D_FILE_OFFSET_BITS=64")
|
||||||
|
SET(CMAKE_EXTRA_INCLUDE_FILES "${CMAKE_CURRENT_SOURCE_DIR}/curl/curl.h")
|
||||||
|
CHECK_TYPE_SIZE("curl_off_t" SIZEOF_CURL_OFF_T)
|
||||||
|
SET(CMAKE_EXTRA_INCLUDE_FILES)
|
||||||
|
SET(CMAKE_REQUIRED_FLAGS)
|
||||||
|
|
||||||
|
|
||||||
|
# Check for nonblocking
|
||||||
|
SET(HAVE_DISABLED_NONBLOCKING 1)
|
||||||
|
IF(HAVE_FIONBIO OR
|
||||||
|
HAVE_IOCTLSOCKET OR
|
||||||
|
HAVE_IOCTLSOCKET_CASE OR
|
||||||
|
HAVE_O_NONBLOCK)
|
||||||
|
SET(HAVE_DISABLED_NONBLOCKING)
|
||||||
|
ENDIF(HAVE_FIONBIO OR
|
||||||
|
HAVE_IOCTLSOCKET OR
|
||||||
|
HAVE_IOCTLSOCKET_CASE OR
|
||||||
|
HAVE_O_NONBLOCK)
|
||||||
|
|
||||||
|
IF(RETSIGTYPE_TEST)
|
||||||
|
SET(RETSIGTYPE void)
|
||||||
|
ELSE(RETSIGTYPE_TEST)
|
||||||
|
SET(RETSIGTYPE int)
|
||||||
|
ENDIF(RETSIGTYPE_TEST)
|
||||||
|
|
||||||
|
IF(CMAKE_COMPILER_IS_GNUCC AND APPLE)
|
||||||
|
INCLUDE(CheckCCompilerFlag)
|
||||||
|
CHECK_C_COMPILER_FLAG(-Wno-long-double HAVE_C_FLAG_Wno_long_double)
|
||||||
|
IF(HAVE_C_FLAG_Wno_long_double)
|
||||||
|
# The Mac version of GCC warns about use of long double. Disable it.
|
||||||
|
GET_SOURCE_FILE_PROPERTY(MPRINTF_COMPILE_FLAGS mprintf.c COMPILE_FLAGS)
|
||||||
|
IF(MPRINTF_COMPILE_FLAGS)
|
||||||
|
SET(MPRINTF_COMPILE_FLAGS "${MPRINTF_COMPILE_FLAGS} -Wno-long-double")
|
||||||
|
ELSE(MPRINTF_COMPILE_FLAGS)
|
||||||
|
SET(MPRINTF_COMPILE_FLAGS "-Wno-long-double")
|
||||||
|
ENDIF(MPRINTF_COMPILE_FLAGS)
|
||||||
|
SET_SOURCE_FILES_PROPERTIES(mprintf.c PROPERTIES
|
||||||
|
COMPILE_FLAGS ${MPRINTF_COMPILE_FLAGS})
|
||||||
|
ENDIF(HAVE_C_FLAG_Wno_long_double)
|
||||||
|
ENDIF(CMAKE_COMPILER_IS_GNUCC AND APPLE)
|
||||||
|
|
||||||
|
INCLUDE(CMake/OtherTests.cmake)
|
||||||
|
|
||||||
|
ADD_DEFINITIONS(-DHAVE_CONFIG_H)
|
||||||
|
|
||||||
|
# For windows, do not allow the compiler to use default target (Vista).
|
||||||
|
IF(WIN32)
|
||||||
|
ADD_DEFINITIONS(-D_WIN32_WINNT=0x0501)
|
||||||
|
ENDIF(WIN32)
|
||||||
|
|
||||||
|
IF(MSVC)
|
||||||
|
ADD_DEFINITIONS(-D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE)
|
||||||
|
ENDIF(MSVC)
|
||||||
|
|
||||||
|
# Sets up the dependencies (zlib, OpenSSL, etc.) of a cURL subproject according to options.
|
||||||
|
# TODO This is far to be complete!
|
||||||
|
FUNCTION(SETUP_CURL_DEPENDENCIES TARGET_NAME)
|
||||||
|
IF(CURL_ZLIB AND ZLIB_FOUND)
|
||||||
|
INCLUDE_DIRECTORIES(${ZLIB_INCLUDE_DIR})
|
||||||
|
ENDIF()
|
||||||
|
IF(CURL_ZLIB AND ZLIB_FOUND)
|
||||||
|
TARGET_LINK_LIBRARIES(${TARGET_NAME} ${ZLIB_LIBRARIES})
|
||||||
|
#ADD_DEFINITIONS( -DHAVE_ZLIB_H -DHAVE_ZLIB -DHAVE_LIBZ )
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
IF(CMAKE_USE_OPENSSL AND OPENSSL_FOUND)
|
||||||
|
INCLUDE_DIRECTORIES(${OPENSSL_INCLUDE_DIR})
|
||||||
|
ENDIF()
|
||||||
|
IF(CURL_SSL AND CURL_CONFIG_HAS_BEEN_RUN_BEFORE)
|
||||||
|
TARGET_LINK_LIBRARIES(${TARGET_NAME} ${OPENSSL_LIBRARIES})
|
||||||
|
#ADD_DEFINITIONS( -DUSE_SSLEAY )
|
||||||
|
ENDIF()
|
||||||
|
ENDFUNCTION()
|
||||||
|
|
||||||
|
# Ugly (but functional) way to include "Makefile.inc" by transforming it (= regenerate it).
|
||||||
|
FUNCTION(TRANSFORM_MAKEFILE_INC INPUT_FILE OUTPUT_FILE)
|
||||||
|
FILE(READ ${INPUT_FILE} MAKEFILE_INC_TEXT)
|
||||||
|
STRING(REPLACE "$(top_srcdir)" "\${CURL_SOURCE_DIR}" MAKEFILE_INC_TEXT ${MAKEFILE_INC_TEXT})
|
||||||
|
STRING(REPLACE "$(top_builddir)" "\${CURL_BINARY_DIR}" MAKEFILE_INC_TEXT ${MAKEFILE_INC_TEXT})
|
||||||
|
|
||||||
|
STRING(REGEX REPLACE "\\\\\n" "<22>!<21>" MAKEFILE_INC_TEXT ${MAKEFILE_INC_TEXT})
|
||||||
|
STRING(REGEX REPLACE "([a-zA-Z_][a-zA-Z0-9_]*)[\t ]*=[\t ]*([^\n]*\n)" "SET(\\1 \\2)\n" MAKEFILE_INC_TEXT ${MAKEFILE_INC_TEXT})
|
||||||
|
STRING(REPLACE "<22>!<21>" "\n" MAKEFILE_INC_TEXT ${MAKEFILE_INC_TEXT})
|
||||||
|
|
||||||
|
STRING(REGEX REPLACE "\\$\\(([a-zA-Z_][a-zA-Z0-9_]*)\\)" "\${\\1}" MAKEFILE_INC_TEXT ${MAKEFILE_INC_TEXT}) # Replace $() with ${}
|
||||||
|
STRING(REGEX REPLACE "@([a-zA-Z_][a-zA-Z0-9_]*)@" "\${\\1}" MAKEFILE_INC_TEXT ${MAKEFILE_INC_TEXT}) # Replace @@ with ${}, even if that may not be read by CMake scripts.
|
||||||
|
FILE(WRITE ${OUTPUT_FILE} ${MAKEFILE_INC_TEXT})
|
||||||
|
|
||||||
|
### BUGGY METHOD 1
|
||||||
|
# FILE(STRINGS Makefile.inc MAKEFILE_INC_TEXT)
|
||||||
|
# STRING(REPLACE "# ./lib/Makefile.inc" "" MAKEFILE_INC_TEXT ${MAKEFILE_INC_TEXT})
|
||||||
|
# STRING(REPLACE " " " " MAKEFILE_INC_TEXT ${MAKEFILE_INC_TEXT}) # Replace tabs with spaces
|
||||||
|
|
||||||
|
# #STRING(REGEX MATCH "CSOURCES *=" AAA ${MAKEFILE_INC_TEXT})
|
||||||
|
# #MESSAGE(STATUS ${AAA})
|
||||||
|
|
||||||
|
# STRING(REPLACE "CSOURCES =" "" MAKEFILE_INC_TEXT ${MAKEFILE_INC_TEXT})
|
||||||
|
# STRING(REPLACE "HHEADERS =" "" MAKEFILE_INC_TEXT ${MAKEFILE_INC_TEXT})
|
||||||
|
|
||||||
|
# STRING(REGEX REPLACE "[^ ]+\\.c" "" ${HEADERS_VAR} ${MAKEFILE_INC_TEXT}) # Remove source files and store into headers var
|
||||||
|
# STRING(REGEX REPLACE " +" " " ${HEADERS_VAR} ${${HEADERS_VAR}})
|
||||||
|
# STRING(REGEX REPLACE " " ";" ${HEADERS_VAR} ${${HEADERS_VAR}})
|
||||||
|
|
||||||
|
# STRING(REGEX REPLACE "[^ ]+\\.h" "" ${SOURCES_VAR} ${MAKEFILE_INC_TEXT}) # Remove headers and store into source files var
|
||||||
|
# STRING(REGEX REPLACE " +" " " ${SOURCES_VAR} ${${SOURCES_VAR}})
|
||||||
|
# STRING(REGEX REPLACE " " ";" ${SOURCES_VAR} ${${SOURCES_VAR}})
|
||||||
|
|
||||||
|
# SET(${HEADERS_VAR} ${${HEADERS_VAR}} PARENT_SCOPE)
|
||||||
|
# SET(${SOURCES_VAR} ${${SOURCES_VAR}} PARENT_SCOPE)
|
||||||
|
|
||||||
|
### BUGGY METHOD 2
|
||||||
|
# FILE(READ Makefile.inc MAKEFILE_INC_TEXT)
|
||||||
|
# #STRING(REPLACE "\t" " " MAKEFILE_INC_TEXT ${MAKEFILE_INC_TEXT}) # Replace tabs with spaces
|
||||||
|
# #STRING(REGEX REPLACE "\n+" "\n" MAKEFILE_INC_TEXT ${MAKEFILE_INC_TEXT}) # Remove empty lines (allow a simplification in the script)
|
||||||
|
# STRING(REGEX REPLACE "([A-Z]+)[\t ]*=[\t ]*" "SET(\\1 " MAKEFILE_INC_TEXT ${MAKEFILE_INC_TEXT})
|
||||||
|
# #STRING(REGEX REPLACE "^(.*)[\t ]*[^\\]$" ")" MAKEFILE_INC_TEXT ${MAKEFILE_INC_TEXT})
|
||||||
|
# STRING(REGEX REPLACE "([^\\])\n" "\\1)\n" MAKEFILE_INC_TEXT ${MAKEFILE_INC_TEXT})
|
||||||
|
# # STRING(REGEX REPLACE "CSOURCES *=" "SET(libCurl_SRCS " MAKEFILE_INC_TEXT ${MAKEFILE_INC_TEXT})
|
||||||
|
# # STRING(REGEX REPLACE "HHEADERS *=" "SET(libCurl_HEADERS " MAKEFILE_INC_TEXT ${MAKEFILE_INC_TEXT})
|
||||||
|
# FILE(WRITE Makefile.inc.cmake ${MAKEFILE_INC_TEXT})
|
||||||
|
ENDFUNCTION()
|
||||||
|
|
||||||
|
ADD_SUBDIRECTORY(lib)
|
||||||
|
IF(BUILD_CURL_EXE)
|
||||||
|
ADD_SUBDIRECTORY(src)
|
||||||
|
ENDIF()
|
||||||
|
IF(BUILD_CURL_TESTS)
|
||||||
|
ADD_SUBDIRECTORY(tests)
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
# This needs to be run very last so other parts of the scripts can take advantage of this.
|
||||||
|
IF(NOT CURL_CONFIG_HAS_BEEN_RUN_BEFORE)
|
||||||
|
SET(CURL_CONFIG_HAS_BEEN_RUN_BEFORE 1 CACHE INTERNAL "Flag to track whether this is the first time running CMake or if CMake has been configured before")
|
||||||
|
ENDIF()
|
||||||
2
COPYING
2
COPYING
@@ -1,6 +1,6 @@
|
|||||||
COPYRIGHT AND PERMISSION NOTICE
|
COPYRIGHT AND PERMISSION NOTICE
|
||||||
|
|
||||||
Copyright (c) 1996 - 2008, Daniel Stenberg, <daniel@haxx.se>.
|
Copyright (c) 1996 - 2009, Daniel Stenberg, <daniel@haxx.se>.
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
|
|||||||
13
CTestConfig.cmake
Normal file
13
CTestConfig.cmake
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
## This file should be placed in the root directory of your project.
|
||||||
|
## Then modify the CMakeLists.txt file in the root directory of your
|
||||||
|
## project to incorporate the testing dashboard.
|
||||||
|
## # The following are required to uses Dart and the Cdash dashboard
|
||||||
|
## ENABLE_TESTING()
|
||||||
|
## INCLUDE(Dart)
|
||||||
|
set(CTEST_PROJECT_NAME "CURL")
|
||||||
|
set(CTEST_NIGHTLY_START_TIME "00:00:00 EST")
|
||||||
|
|
||||||
|
set(CTEST_DROP_METHOD "http")
|
||||||
|
set(CTEST_DROP_SITE "www.cdash.org")
|
||||||
|
set(CTEST_DROP_LOCATION "/CDashPublic/submit.php?project=CURL")
|
||||||
|
set(CTEST_DROP_SITE_CDASH TRUE)
|
||||||
9
CVS-INFO
9
CVS-INFO
@@ -12,8 +12,8 @@ inner sanctum.
|
|||||||
|
|
||||||
Compile and build instructions follow below.
|
Compile and build instructions follow below.
|
||||||
|
|
||||||
CHANGES.0 contains ancient changes.
|
CHANGES.0 contains ancient changes
|
||||||
CHANGES.$year contains changes for the particular year.
|
CHANGES contains the most recent changes
|
||||||
|
|
||||||
Makefile.dist is included as the root Makefile in distribution archives
|
Makefile.dist is included as the root Makefile in distribution archives
|
||||||
|
|
||||||
@@ -49,9 +49,8 @@ installed:
|
|||||||
|
|
||||||
If you don't have nroff and perl and you for some reason don't want to
|
If you don't have nroff and perl and you for some reason don't want to
|
||||||
install them, you can rename the source file src/hugehelp.c.cvs to
|
install them, you can rename the source file src/hugehelp.c.cvs to
|
||||||
src/hugehelp.c and avoid having to generate this file. This will of course
|
src/hugehelp.c and avoid having to generate this file. This will give you
|
||||||
give you an older version of the file that isn't up-to-date. That file was
|
a stubbed version of the file that doesn't contain actual content.
|
||||||
checked in once and won't be updated very regularly.
|
|
||||||
|
|
||||||
MAC OS X
|
MAC OS X
|
||||||
|
|
||||||
|
|||||||
78
MacOSX-Framework
Executable file
78
MacOSX-Framework
Executable file
@@ -0,0 +1,78 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# This script performs all of the steps needed to build a
|
||||||
|
# universal binary libcurl.framework for Mac OS X 10.4 or greater.
|
||||||
|
|
||||||
|
VERSION=`/usr/bin/sed -ne 's/^#define LIBCURL_VERSION "\(.*\)"/\1/p' include/curl/curlver.h`
|
||||||
|
|
||||||
|
SDK32='/Developer/SDKs/MacOSX10.4u.sdk'
|
||||||
|
|
||||||
|
MINVER32='-mmacosx-version-min=10.4'
|
||||||
|
|
||||||
|
ARCHES32='-arch ppc -arch i386'
|
||||||
|
|
||||||
|
SDK64='/Developer/SDKs/MacOSX10.5.sdk'
|
||||||
|
|
||||||
|
MINVER64='-mmacosx-version-min=10.5'
|
||||||
|
|
||||||
|
ARCHES64='-arch ppc64 -arch x86_64'
|
||||||
|
|
||||||
|
if test -d $SDK32; then
|
||||||
|
echo "----Configuring libcurl for 32 bit universal framework..."
|
||||||
|
./configure --disable-dependency-tracking --disable-static --with-gssapi \
|
||||||
|
CFLAGS="-Os -isysroot $SDK32 $ARCHES32 $MINVER32" \
|
||||||
|
LDFLAGS="-Wl,-syslibroot,$SDK32 $ARCHES32 $MINVER32 -Wl,-headerpad_max_install_names" \
|
||||||
|
CC=$CC
|
||||||
|
|
||||||
|
echo "----Building 32 bit libcurl..."
|
||||||
|
make
|
||||||
|
|
||||||
|
echo "----Creating 32 bit framework..."
|
||||||
|
rm -r libcurl.framework
|
||||||
|
mkdir -p libcurl.framework/Versions/A/Resources
|
||||||
|
cp lib/.libs/libcurl.dylib libcurl.framework/Versions/A/libcurl
|
||||||
|
install_name_tool -id @executable_path/../Frameworks/libcurl.framework/Versions/A/libcurl libcurl.framework/Versions/A/libcurl
|
||||||
|
/usr/bin/sed -e "s/7\.12\.3/$VERSION/" lib/libcurl.plist >libcurl.framework/Versions/A/Resources/Info.plist
|
||||||
|
mkdir -p libcurl.framework/Versions/A/Headers/curl
|
||||||
|
cp include/curl/*.h libcurl.framework/Versions/A/Headers/curl
|
||||||
|
pushd libcurl.framework
|
||||||
|
ln -fs Versions/A/libcurl libcurl
|
||||||
|
ln -fs Versions/A/Resources Resources
|
||||||
|
ln -fs Versions/A/Headers Headers
|
||||||
|
cd Versions
|
||||||
|
ln -fs A Current
|
||||||
|
|
||||||
|
if test -d $SDK64; then
|
||||||
|
popd
|
||||||
|
make clean
|
||||||
|
echo "----Configuring libcurl for 64 bit universal framework..."
|
||||||
|
./configure --disable-dependency-tracking --disable-static --with-gssapi \
|
||||||
|
CFLAGS="-Os -isysroot $SDK64 $ARCHES64 $MINVER64" \
|
||||||
|
LDFLAGS="-Wl,-syslibroot,$SDK64 $ARCHES64 $MINVER64 -Wl,-headerpad_max_install_names" \
|
||||||
|
CC=$CC
|
||||||
|
|
||||||
|
echo "----Building 64 bit libcurl..."
|
||||||
|
make
|
||||||
|
|
||||||
|
echo "----Appending 64 bit framework to 32 bit framework..."
|
||||||
|
cp lib/.libs/libcurl.dylib libcurl.framework/Versions/A/libcurl64
|
||||||
|
install_name_tool -id @executable_path/../Frameworks/libcurl.framework/Versions/A/libcurl libcurl.framework/Versions/A/libcurl64
|
||||||
|
cp libcurl.framework/Versions/A/libcurl libcurl.framework/Versions/A/libcurl32
|
||||||
|
lipo libcurl.framework/Versions/A/libcurl32 libcurl.framework/Versions/A/libcurl64 -create -output libcurl.framework/Versions/A/libcurl
|
||||||
|
rm libcurl.framework/Versions/A/libcurl32 libcurl.framework/Versions/A/libcurl64
|
||||||
|
cp libcurl.framework/Versions/A/Headers/curl/curlbuild.h libcurl.framework/Versions/A/Headers/curl/curlbuild32.h
|
||||||
|
cp include/curl/curlbuild.h libcurl.framework/Versions/A/Headers/curl/curlbuild64.h
|
||||||
|
cat >libcurl.framework/Versions/A/Headers/curl/curlbuild.h <<EOF
|
||||||
|
#ifdef __LP64__
|
||||||
|
#include "curl/curlbuild64.h"
|
||||||
|
#else
|
||||||
|
#include "curl/curlbuild32.h"
|
||||||
|
#endif
|
||||||
|
EOF
|
||||||
|
fi
|
||||||
|
|
||||||
|
lipo -info libcurl.framework/Versions/A/libcurl
|
||||||
|
echo "libcurl.framework is built and can now be included in other projects."
|
||||||
|
echo "Copy libcurl.framework to your bundle's Contents/Frameworks folder, ~/Library/Frameworks or /Library/Frameworks."
|
||||||
|
else
|
||||||
|
echo "Building libcurl.framework requires Mac OS X 10.4 or later with the MacOSX10.4u SDK installed."
|
||||||
|
fi
|
||||||
31
Makefile.am
31
Makefile.am
@@ -5,7 +5,7 @@
|
|||||||
# | (__| |_| | _ <| |___
|
# | (__| |_| | _ <| |___
|
||||||
# \___|\___/|_| \_\_____|
|
# \___|\___/|_| \_\_____|
|
||||||
#
|
#
|
||||||
# Copyright (C) 1998 - 2005, Daniel Stenberg, <daniel@haxx.se>, et al.
|
# Copyright (C) 1998 - 2009, 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
|
||||||
@@ -23,8 +23,17 @@
|
|||||||
|
|
||||||
AUTOMAKE_OPTIONS = foreign
|
AUTOMAKE_OPTIONS = foreign
|
||||||
|
|
||||||
EXTRA_DIST = CHANGES COPYING maketgz reconf Makefile.dist curl-config.in \
|
ACLOCAL_AMFLAGS = -I m4
|
||||||
curl-style.el sample.emacs RELEASE-NOTES buildconf buildconf.bat libcurl.pc.in
|
|
||||||
|
CMAKE_DIST = CMakeLists.txt CMake/CheckTypeSize.c.in CMake/CheckTypeSize.cmake \
|
||||||
|
CMake/CMakeConfigurableFile.in CMake/CurlCheckCSourceCompiles.cmake \
|
||||||
|
CMake/CurlCheckCSourceRuns.cmake CMake/CurlTests.c CMake/FindOpenSSL.cmake \
|
||||||
|
CMake/FindZLIB.cmake CMake/OtherTests.cmake CMake/Platforms/WindowsCache.cmake \
|
||||||
|
CMake/Utilities.cmake include/curl/curlbuild.h.cmake
|
||||||
|
|
||||||
|
EXTRA_DIST = CHANGES COPYING maketgz Makefile.dist curl-config.in \
|
||||||
|
curl-style.el sample.emacs RELEASE-NOTES buildconf buildconf.bat \
|
||||||
|
libcurl.pc.in vc6curl.dsw MacOSX-Framework $(CMAKE_DIST)
|
||||||
|
|
||||||
bin_SCRIPTS = curl-config
|
bin_SCRIPTS = curl-config
|
||||||
|
|
||||||
@@ -72,7 +81,11 @@ test-torture:
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
examples:
|
examples:
|
||||||
@(cd docs/examples; $(MAKE) all)
|
@(cd docs/examples; $(MAKE) check)
|
||||||
|
|
||||||
|
clean-local:
|
||||||
|
@(cd tests; $(MAKE) clean)
|
||||||
|
@(cd docs; $(MAKE) clean)
|
||||||
|
|
||||||
#
|
#
|
||||||
# Build source and binary rpms. For rpm-3.0 and above, the ~/.rpmmacros
|
# Build source and binary rpms. For rpm-3.0 and above, the ~/.rpmmacros
|
||||||
@@ -102,7 +115,7 @@ rpm:
|
|||||||
mv $$RPM_TOPDIR/SRPMS/$(RPMDIST)-*.src.rpm .
|
mv $$RPM_TOPDIR/SRPMS/$(RPMDIST)-*.src.rpm .
|
||||||
|
|
||||||
#
|
#
|
||||||
# Build a Solaris pkkgadd format file
|
# Build a Solaris pkgadd format file
|
||||||
# run 'make pkgadd' once you've done './configure' and 'make' to make a Solaris pkgadd format
|
# run 'make pkgadd' once you've done './configure' and 'make' to make a Solaris pkgadd format
|
||||||
# file (which ends up back in this directory).
|
# file (which ends up back in this directory).
|
||||||
# The pkgadd file is in 'pkgtrans' format, so to install on Solaris, do
|
# The pkgadd file is in 'pkgtrans' format, so to install on Solaris, do
|
||||||
@@ -131,3 +144,11 @@ install-data-hook:
|
|||||||
uninstall-hook:
|
uninstall-hook:
|
||||||
cd include && $(MAKE) uninstall
|
cd include && $(MAKE) uninstall
|
||||||
cd docs && $(MAKE) uninstall
|
cd docs && $(MAKE) uninstall
|
||||||
|
|
||||||
|
ca-bundle: lib/mk-ca-bundle.pl
|
||||||
|
@echo "generate a fresh ca-bundle.crt"
|
||||||
|
@perl $< -b -l -u lib/ca-bundle.crt
|
||||||
|
|
||||||
|
ca-firefox: lib/firefox-db2pem.sh
|
||||||
|
@echo "generate a fresh ca-bundle.crt"
|
||||||
|
./lib/firefox-db2pem.sh lib/ca-bundle.crt
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
# | (__| |_| | _ <| |___
|
# | (__| |_| | _ <| |___
|
||||||
# \___|\___/|_| \_\_____|
|
# \___|\___/|_| \_\_____|
|
||||||
#
|
#
|
||||||
# Copyright (C) 1998 - 2008, Daniel Stenberg, <daniel@haxx.se>, et al.
|
# Copyright (C) 1998 - 2009, 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
|
||||||
@@ -256,7 +256,22 @@ linux: all
|
|||||||
|
|
||||||
linux-ssl: ssl
|
linux-ssl: ssl
|
||||||
|
|
||||||
|
|
||||||
vc8:
|
vc8:
|
||||||
echo "generate VC8 makefiles"
|
@echo "generate VC8 makefiles"
|
||||||
sed -e "s#/GX /DWIN32 /YX#/EHsc /DWIN32#" -e "s#/GZ#/RTC1#" -e "s/wsock32.lib/wsock32.lib bufferoverflowu.lib/g" -e "s/VC6/VC8/g" lib/Makefile.vc6 > lib/Makefile.vc8
|
@sed -e "s#/GX /DWIN32 /YX#/EHsc /DWIN32#" -e "s#/GZ#/RTC1#" -e "s/wsock32.lib/wsock32.lib bufferoverflowu.lib/g" -e "s/VC6/VC8/g" lib/Makefile.vc6 > lib/Makefile.vc8
|
||||||
sed -e "s#/GX /DWIN32 /YX#/EHsc /DWIN32#" -e "s#/GZ#/RTC1#" -e "s/wsock32.lib/wsock32.lib bufferoverflowu.lib/g" -e "s/VC6/VC8/g" src/Makefile.vc6 > src/Makefile.vc8
|
@sed -e "s#/GX /DWIN32 /YX#/EHsc /DWIN32#" -e "s#/GZ#/RTC1#" -e "s/wsock32.lib/wsock32.lib bufferoverflowu.lib/g" -e "s/VC6/VC8/g" src/Makefile.vc6 > src/Makefile.vc8
|
||||||
|
|
||||||
|
# VC9 makefiles are for use with VS2008
|
||||||
|
vc9:
|
||||||
|
@echo "generate VC9 makefiles"
|
||||||
|
@sed -e "s#/GX /DWIN32 /YX#/EHsc /DWIN32#" -e "s#/GZ#/RTC1#" -e "s/wsock32.lib/ws2_32.lib/g" -e "s/vc6/vc9/g" -e "s/VC6/VC9/g" lib/Makefile.vc6 > lib/Makefile.vc9
|
||||||
|
@sed -e "s#/GX /DWIN32 /YX#/EHsc /DWIN32#" -e "s#/GZ#/RTC1#" -e "s/wsock32.lib/ws2_32.lib/g" -e "s/vc6/vc9/g" -e "s/VC6/VC9/g" src/Makefile.vc6 > src/Makefile.vc9
|
||||||
|
|
||||||
|
ca-bundle: lib/mk-ca-bundle.pl
|
||||||
|
@echo "generate a fresh ca-bundle.crt"
|
||||||
|
@perl $< -b -l -u lib/ca-bundle.crt
|
||||||
|
|
||||||
|
ca-firefox: lib/firefox-db2pem.sh
|
||||||
|
@echo "generate a fresh ca-bundle.crt"
|
||||||
|
./lib/firefox-db2pem.sh lib/ca-bundle.crt
|
||||||
|
|||||||
5
README
5
README
@@ -30,10 +30,9 @@ CONTACT
|
|||||||
|
|
||||||
WEB SITE
|
WEB SITE
|
||||||
|
|
||||||
Visit the curl web site or mirrors for the latest news and downloads:
|
Visit the curl web site for the latest news and downloads:
|
||||||
|
|
||||||
Sweden http://curl.haxx.se/
|
http://curl.haxx.se/
|
||||||
Mirrors http://curlm.haxx.se/
|
|
||||||
|
|
||||||
CVS
|
CVS
|
||||||
|
|
||||||
|
|||||||
127
RELEASE-NOTES
127
RELEASE-NOTES
@@ -1,94 +1,67 @@
|
|||||||
Curl and libcurl 7.18.0
|
Curl and libcurl 7.19.5
|
||||||
|
|
||||||
Public curl releases: 103
|
Public curl releases: 111
|
||||||
Command line options: 126
|
Command line options: 132
|
||||||
curl_easy_setopt() options: 150
|
curl_easy_setopt() options: 163
|
||||||
Public functions in libcurl: 56
|
Public functions in libcurl: 58
|
||||||
Public web site mirrors: 43
|
Known libcurl bindings: 38
|
||||||
Known libcurl bindings: 36
|
Contributors: 715
|
||||||
Contributors: 597
|
|
||||||
|
|
||||||
This release includes the following changes:
|
This release includes the following changes:
|
||||||
|
|
||||||
o --data-urlencode
|
o libcurl now closes all dead connections whenever you attempt to open a new
|
||||||
o CURLOPT_PROXY_TRANSFER_MODE
|
connection
|
||||||
o --no-keepalive - now curl does connections with keep-alive enabled by
|
o libssh2's version number can now be figured out run-time instead of using
|
||||||
default
|
the build-time fixed number
|
||||||
o --socks4a added (proxy type CURLPROXY_SOCKS4A for libcurl)
|
o CURLOPT_SEEKFUNCTION may now return CURL_SEEKFUNC_CANTSEEK
|
||||||
o --socks5-hostname added (CURLPROXY_SOCKS5_HOSTNAME for libcurl)
|
o curl can now upload with resume even when reading from a pipe
|
||||||
o curl_easy_pause()
|
o a build-time configured curl_socklen_t is now used instead of socklen_t
|
||||||
o CURLOPT_SEEKFUNCTION and CURLOPT_SEEKDATA
|
|
||||||
o --keepalive-time
|
|
||||||
o curl --help output was re-ordered
|
|
||||||
|
|
||||||
This release includes the following bugfixes:
|
This release includes the following bugfixes:
|
||||||
|
|
||||||
o curl-config --features and --protocols show the correct output when built
|
o NTLM authentication memory leak on SSPI enabled Windows builds
|
||||||
with NSS, and also when SCP, SFTP and libz are not available
|
o fixed the GnuTLS-using code to do correct return code checks
|
||||||
o free problem in the curl tool for users with empty home dir
|
o an alloc-related call in the OpenSSL-using code didn't check the return value
|
||||||
o curl.h version 7.17.1 problem when building C++ apps with MSVC
|
o curl_easy_duphandle() failed to duplicate cookies at times
|
||||||
o SFTP and SCP use persistent connections
|
o missing TELNET timeout support in Windows builds
|
||||||
o segfault on bad URL
|
o missing Curl_read() and write callback result checking in TELNET transfers
|
||||||
o variable wrapping when using absolutely huge send buffer sizes
|
o more ciphers enabled in libcurl built to use NSS
|
||||||
o variable wrapping when using debug callback and the HTTP request wasn't sent
|
o properly return an error code in curl_easy_recv
|
||||||
in one go
|
o Sun compilers specific preprocessor block removed from curlbuild.h.dist
|
||||||
o SSL connections with NSS done with the multi-interface
|
o allow creation of four way fat libcurl Mac OS X Framework
|
||||||
o setting a share no longer activates cookies
|
o several memory leaks in libcurl+NSS
|
||||||
o Negotiate now works on auth and proxy simultanouesly
|
o improved the CURLOPT_NOBODY set to 0 confusions
|
||||||
o support HTTP Digest nonces up to 1023 letters
|
o persistent connections when doing FTP over a HTTP proxy
|
||||||
o resumed ftp upload no longer requires the read callback to return full
|
o --libcurl bogus strings where other data was pointed to
|
||||||
buffers
|
o crash related to FTP and "Re-used connection seems dead, get a new one"
|
||||||
o no longer default-appends ;type= on FTP URLs thru proxies
|
o CURLINFO_APPCONNECT_TIME with the multi interface
|
||||||
o SSL session id caching
|
o Enhanced upload speeds on Windows
|
||||||
o POST with callback over proxy requiring NTLM or Digest
|
o TFTP problems after a failed transfer to the same host
|
||||||
o Expect: 100-continue flaw on re-used connection with POSTs
|
o improved out of the box TPF compatibility
|
||||||
o build fix for MSVC 9.0 (VS2008)
|
o HTTP PUT protocol line endings portions mangled from CRLF to CRCRLF
|
||||||
o Windows curl builds failed file truncation when retry downloading
|
o Rejected SSL session ids are killed properly (for OpenSSL and GnuTLS builds)
|
||||||
o SSL session ID cache memory leak
|
o Deal with the TFTP OACK packet
|
||||||
o bad connection re-use check with environment variable-activated proxy use
|
o fixed roff mistakes in man pages
|
||||||
o --libcurl now generates a return statement as well
|
o use SOCKS proxy with the multi interface
|
||||||
o socklen_t is no longer used in the public includes
|
o fixed the Curl_getoff_all_pipelines SIGSEGV
|
||||||
o time zone offsets from -1400 to +1400 are now accepted by the date parser
|
o POST, NTLM and following a redirect hang
|
||||||
o allows more spaces in WWW/Proxy-Authenticate: headers
|
o libcurl+NSS endless loop on incorrect password for private key
|
||||||
o curl-config --libs skips /usr/lib64
|
o gzip decompression memory leak
|
||||||
o range support for file:// transfers
|
o no_proxy flaw with user name in URL
|
||||||
o libcurl hang with huge POST request and request-body read from callback
|
|
||||||
o removed extra newlines from many error messages
|
|
||||||
o improved pipelining
|
|
||||||
o improved OOM handling for data url encoded HTTP POSTs when read from a file
|
|
||||||
o test suite could pick wrong tool(s) if more than one existed in the PATH
|
|
||||||
o curl_multi_fdset() failed to return socket while doing CONNECT over proxy
|
|
||||||
o curl_multi_remove_handle() on a handle that is in used for a pipeline now
|
|
||||||
break that pipeline
|
|
||||||
o CURLOPT_COOKIELIST memory leaks
|
|
||||||
o progress meter/callback during http proxy CONNECT requests
|
|
||||||
o auth for http proxy when the proxy closes connection after first response
|
|
||||||
|
|
||||||
This release includes the following known bugs:
|
This release includes the following known bugs:
|
||||||
|
|
||||||
o see docs/KNOWN_BUGS (http://curl.haxx.se/docs/knownbugs.html)
|
o see docs/KNOWN_BUGS (http://curl.haxx.se/docs/knownbugs.html)
|
||||||
|
|
||||||
Other curl-related news:
|
|
||||||
|
|
||||||
o TclCurl 7.17.1 => http://personal1.iddeo.es/andresgarci/tclcurl/english/
|
|
||||||
o Ruby Curl::Multi 0.1 => http://curl-multi.rubyforge.org/
|
|
||||||
o curl-java 0.2.1 => http://curl.haxx.se/libcurl/java/
|
|
||||||
|
|
||||||
New curl mirrors:
|
|
||||||
|
|
||||||
o http://curl.gominet.net/ is new mirror in Vizcaya, Portugal
|
|
||||||
o http://curl.very-clever.com/ is a new mirror in Nuremberg, Germany
|
|
||||||
|
|
||||||
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:
|
||||||
|
|
||||||
Dan Fandrich, Gisle Vanem, Toby Peterson, Yang Tse, Daniel Black,
|
Daniel Fandrich, Yang Tse, David James, Chris Deidun, Bill Egert,
|
||||||
Robin Johnson, Michal Marek, Ates Goral, Andres Garcia, Rob Crittenden,
|
Andre Guibert de Bruet, Andreas Farber, Frank Hempel, Pierre Brico,
|
||||||
Emil Romanus, Alessandro Vesely, Ray Pekowski, Spacen Jasset, Andrew Moise,
|
Kamil Dudka, Jim Freeman, Daniel Johnson, Toshio Kuratomi, Martin Storsjo,
|
||||||
Gilles Blanc, David Wright, Vikram Saxena, Mateusz Loskot, Gary Maxwell,
|
Pramod Sharma, Gisle Vanem, Lenaic Lefever, Rainer Koenig, Sven Wegener,
|
||||||
Dmitry Kurochkin, Mohun Biswas, Richard Atterer, Maxim Perenesenko,
|
Tim Chen, Constantine Sapuntzakis, David McCreedy, Michael Smith,
|
||||||
Daniel Egger, Jeff Johnson, Nikitinskit Dmitriy, Georg Lippitsch, Eric Landes,
|
Colin Watson, Ebenezer Ikonne, Laurent Rabret, Michael Cronenworth,
|
||||||
Joe Malicki, Nathan Coulter, Lau Hang Kin, Judson Bishop, Igor Franchuk,
|
Balint Szilakszi, James Bursa
|
||||||
Kevin Reed
|
|
||||||
|
|
||||||
Thanks! (and sorry if I forgot to mention someone)
|
Thanks! (and sorry if I forgot to mention someone)
|
||||||
|
|||||||
11
TODO-RELEASE
11
TODO-RELEASE
@@ -1,4 +1,9 @@
|
|||||||
To be addressed before 7.18.0 (planned release: January 2008)
|
To be addressed in 7.19.6 (planned release: July 2009)
|
||||||
=============================
|
=========================
|
||||||
|
|
||||||
118 -
|
226 - Active Mode FTPS Data Port Range
|
||||||
|
|
||||||
|
235 - KNOWN_BUG #65
|
||||||
|
Code adjustment for FTP over socks proxy remains
|
||||||
|
|
||||||
|
240 -
|
||||||
|
|||||||
2716
acinclude.m4
2716
acinclude.m4
File diff suppressed because it is too large
Load Diff
@@ -1,23 +1,26 @@
|
|||||||
configure
|
*.lo
|
||||||
autom4te.cache
|
.deps
|
||||||
|
.libs
|
||||||
Makefile
|
Makefile
|
||||||
|
Makefile.in
|
||||||
|
aclocal.m4
|
||||||
adig
|
adig
|
||||||
ahost
|
ahost
|
||||||
config.log
|
ares_build.h
|
||||||
config.status
|
ares_version.h.dist
|
||||||
aclocal.m4
|
autom4te.cache
|
||||||
.deps
|
|
||||||
Makefile.in
|
|
||||||
config.guess
|
config.guess
|
||||||
config.h
|
config.h
|
||||||
config.h.in
|
config.h.in
|
||||||
|
config.log
|
||||||
|
config.lt
|
||||||
|
config.status
|
||||||
config.sub
|
config.sub
|
||||||
libtool
|
configure
|
||||||
ltmain.sh
|
|
||||||
stamp-h1
|
|
||||||
*.lo
|
|
||||||
.libs
|
|
||||||
depcomp
|
depcomp
|
||||||
libcares.la
|
libcares.la
|
||||||
|
libcares.pc
|
||||||
|
libtool
|
||||||
|
ltmain.sh
|
||||||
missing
|
missing
|
||||||
ares_version.h.dist
|
stamp-h*
|
||||||
|
|||||||
47
ares/AUTHORS
47
ares/AUTHORS
@@ -1,28 +1,37 @@
|
|||||||
c-ares is based on ares, and these are the people that have worked on it since
|
c-ares is based on ares, and these are the people that have worked on it since
|
||||||
the fork was made:
|
the fork was made:
|
||||||
|
|
||||||
Daniel Stenberg
|
Alexander Lazic
|
||||||
Dominick Meglio
|
Alexey Simak
|
||||||
liren at vivisimo.com
|
Andreas Rieke
|
||||||
James Bursa
|
Ashish Sharma
|
||||||
Duncan Wilcox
|
Brad House
|
||||||
Dirk Manske
|
Brad Spencer
|
||||||
|
Bram Matthys
|
||||||
Dan Fandrich
|
Dan Fandrich
|
||||||
|
Daniel Stenberg
|
||||||
|
Dirk Manske
|
||||||
|
Dominick Meglio
|
||||||
|
Doug Goldstein
|
||||||
|
Duncan Wilcox
|
||||||
|
Eino Tuominen
|
||||||
|
Erik Kline
|
||||||
|
George Neill
|
||||||
Gisle Vanem
|
Gisle Vanem
|
||||||
|
Guilherme Balena Versiani
|
||||||
Gunter Knauf
|
Gunter Knauf
|
||||||
Henrik Stoerner
|
Henrik Stoerner
|
||||||
Yang Tse
|
James Bursa
|
||||||
Nick Mathewson
|
|
||||||
Alexander Lazic
|
|
||||||
Andreas Rieke
|
|
||||||
Guilherme Balena Versiani
|
|
||||||
Brad Spencer
|
|
||||||
Ravi Pratap
|
|
||||||
William Ahern
|
|
||||||
Bram Matthys
|
|
||||||
Michael Wallner
|
Michael Wallner
|
||||||
Vlad Dinulescu
|
Nick Mathewson
|
||||||
Brad House
|
Phil Blundell
|
||||||
|
Ravi Pratap
|
||||||
|
Robin Cornelius
|
||||||
|
Sebastian at basti79.de
|
||||||
Shmulik Regev
|
Shmulik Regev
|
||||||
Ashish Sharma
|
Steinar H. Gunderson
|
||||||
Brad Spencer
|
Tofu Linden
|
||||||
|
Vlad Dinulescu
|
||||||
|
William Ahern
|
||||||
|
Yang Tse
|
||||||
|
liren at vivisimo.com
|
||||||
|
|||||||
301
ares/CHANGES
301
ares/CHANGES
@@ -1,5 +1,306 @@
|
|||||||
Changelog for the c-ares project
|
Changelog for the c-ares project
|
||||||
|
|
||||||
|
* May 11 2009 (Daniel Stenberg)
|
||||||
|
- Gregor Jasny made c-ares link with libtool 's -export-symbols-regex option to
|
||||||
|
only expose functions starting with ares_.
|
||||||
|
|
||||||
|
* May 2 2009 (Yang Tse)
|
||||||
|
- Use a build-time configured ares_socklen_t data type instead of socklen_t.
|
||||||
|
|
||||||
|
* April 21 2009 (Yang Tse)
|
||||||
|
- Moved potential inclusion of system's malloc.h and memory.h header files to
|
||||||
|
setup_once.h. Inclusion of each header file is based on the definition of
|
||||||
|
NEED_MALLOC_H and NEED_MEMORY_H respectively.
|
||||||
|
|
||||||
|
* March 11 2009 (Yang Tse)
|
||||||
|
- Japheth Cleaver fixed acountry.c replacing u_long with unsigned long.
|
||||||
|
|
||||||
|
* February 20 2009 (Yang Tse)
|
||||||
|
- Do not halt compilation when using VS2008 to build a Windows 2000 target.
|
||||||
|
|
||||||
|
* February 3 2009 (Phil Blundell)
|
||||||
|
- If the server returns garbage or nothing at all in response to an AAAA query,
|
||||||
|
go on and ask for A records anyway.
|
||||||
|
|
||||||
|
* January 31 2009 (Daniel Stenberg)
|
||||||
|
- ares_gethostbyname() now accepts 'AF_UNSPEC' as a family for resolving
|
||||||
|
either AF_INET6 or AF_INET. It works by accepting any of the looksups in the
|
||||||
|
hosts file, and it resolves the AAAA field with a fallback to A.
|
||||||
|
|
||||||
|
* January 14 2009 (Daniel Stenberg)
|
||||||
|
- ares.h no longer uses the HAVE_STRUCT_IN6_ADDR define check, but instead it
|
||||||
|
now declares the private struct ares_in6_addr for all systems instead of
|
||||||
|
relying on one possibly not present in the system.
|
||||||
|
|
||||||
|
* January 13 2009 (Phil Blundell)
|
||||||
|
- ares__send_query() now varies the retry timeout pseudo-randomly to avoid
|
||||||
|
packet storms when several queries were started at the same time.
|
||||||
|
|
||||||
|
* January 11 2009 (Daniel Stenberg)
|
||||||
|
- Phil Blundell added the internal function ares__expand_name_for_response()
|
||||||
|
that is now used by the ares_parse_*_reply() functions instead of the
|
||||||
|
ares_expand_name() simply to easier return ARES_EBADRESP for the cases where
|
||||||
|
the name expansion fails as in responses that really isn't expected.
|
||||||
|
|
||||||
|
Version 1.6.0 (Dec 9, 2008)
|
||||||
|
|
||||||
|
* December 9 2008 (Gisle Vanem)
|
||||||
|
|
||||||
|
Fixes for Win32 targets using the Watt-32 tcp/ip stack.
|
||||||
|
|
||||||
|
* Dec 4 2008 (Daniel Stenberg)
|
||||||
|
|
||||||
|
Gregor Jasny provided the patch that introduces ares_set_socket_callback(),
|
||||||
|
and I edited it to also get duped by ares_dup().
|
||||||
|
|
||||||
|
* Dec 3 2008 (Daniel Stenberg)
|
||||||
|
|
||||||
|
API changes:
|
||||||
|
|
||||||
|
I made sure the public ares_config struct looks like before and yet it
|
||||||
|
supports the ROTATE option thanks to c-ares now storing the "optmask"
|
||||||
|
internally. Thus we should be ABI compatible with the past release(s)
|
||||||
|
now. My efforts mentioned below should not break backwards ABI compliance.
|
||||||
|
|
||||||
|
Here's how I suggest we proceed with the API:
|
||||||
|
|
||||||
|
ares_init() will be primary "channel creator" function.
|
||||||
|
|
||||||
|
ares_init_options() will continue to work exactly like now and before. For
|
||||||
|
starters, it will be the (only) way to set the existing options.
|
||||||
|
|
||||||
|
ares_save_options() will continue to work like today, but will ONLY save
|
||||||
|
options that you can set today (including ARES_OPT_ROTATE actually) but new
|
||||||
|
options that we add may not be saved with this.
|
||||||
|
|
||||||
|
Instead we introduce:
|
||||||
|
|
||||||
|
ares_dup() that instead can make a new channel and clone the config used
|
||||||
|
from an existing channel. It will then clone all config options, including
|
||||||
|
future new things we add.
|
||||||
|
|
||||||
|
ares_set_*() style functions that set (new) config options. As a start we
|
||||||
|
simply add these for new functionality, but over time we can also introduce
|
||||||
|
them for existing "struct ares_options" so that we can eventually deprecate
|
||||||
|
the two ares_*_options() functions.
|
||||||
|
|
||||||
|
ares_get_*() style functions for extracting info from a channel handle that
|
||||||
|
should be used instead of ares_save_options().
|
||||||
|
|
||||||
|
* Nov 26 2008 (Yang Tse)
|
||||||
|
- Brad Spencer provided changes to allow buildconf to work on OS X.
|
||||||
|
|
||||||
|
- Gerald Combs fixed a bug in ares_parse_ptr_reply() which would cause a
|
||||||
|
buffer to shrink instead of expand if a reply contained 8 or more records.
|
||||||
|
|
||||||
|
* Nov 25 2008 (Yang Tse)
|
||||||
|
- In preparation for the upcomming IPv6 nameservers patch, the internal
|
||||||
|
ares_addr union is now changed into an internal struct which also holds
|
||||||
|
the address family.
|
||||||
|
|
||||||
|
* Nov 19 2008 (Daniel Stenberg)
|
||||||
|
- Brad Spencer brought the new function ares_gethostbyname_file() which simply
|
||||||
|
resolves a host name from the given file, using the regular hosts syntax.
|
||||||
|
|
||||||
|
* Nov 1 2008 (Daniel Stenberg)
|
||||||
|
- Carlo Contavalli added support for the glibc "rotate" option, as documented
|
||||||
|
in man resolv.conf:
|
||||||
|
|
||||||
|
causes round robin selection of nameservers from among those listed. This
|
||||||
|
has the effect of spreading the query load among all listed servers, rather
|
||||||
|
than having all clients try the first listed server first every time.
|
||||||
|
|
||||||
|
You can enable it with ARES_OPT_ROTATE
|
||||||
|
|
||||||
|
* Oct 21 2008 (Yang Tse)
|
||||||
|
Charles Hardin added handling of EINPROGRESS for UDP connects.
|
||||||
|
|
||||||
|
* Oct 18 2008 (Daniel Stenberg)
|
||||||
|
Charles Hardin made adig support a regular numerical dotted IP address for the
|
||||||
|
-s option as well.
|
||||||
|
|
||||||
|
* Oct 7 2008 (Yang Tse)
|
||||||
|
- Added --enable-optimize configure option to enable and disable compiler
|
||||||
|
optimizations to allow decoupled setting from --enable-debug.
|
||||||
|
|
||||||
|
* Oct 2 2008 (Yang Tse)
|
||||||
|
- Added --enable-warnings configure option to enable and disable strict
|
||||||
|
compiler warnings to allow decoupled setting from --enable-debug.
|
||||||
|
|
||||||
|
* Sep 17 2008 (Yang Tse)
|
||||||
|
- Code reorganization to allow internal/private use of "nameser.h" to any
|
||||||
|
system that lacks arpa/nameser.h or arpa/nameser_compat.h header files.
|
||||||
|
|
||||||
|
* Sep 16 2008 (Yang Tse)
|
||||||
|
- Code reorganization to allow internal/private use of ares_writev to any
|
||||||
|
system that lacks the writev function.
|
||||||
|
|
||||||
|
* Sep 15 2008 (Yang Tse)
|
||||||
|
- Code reorganization to allow internal/private use of ares_strcasecmp to any
|
||||||
|
system that lacks the strcasecmp function.
|
||||||
|
|
||||||
|
- Improve configure detection of some string functions.
|
||||||
|
|
||||||
|
* Sep 11 2008 (Yang Tse)
|
||||||
|
- Code reorganization to allow internal/private use of ares_strdup to any
|
||||||
|
system that lacks the strdup function.
|
||||||
|
|
||||||
|
Version 1.5.3 (Aug 29, 2008)
|
||||||
|
|
||||||
|
* Aug 25 2008 (Yang Tse)
|
||||||
|
- Improvement by Brad House:
|
||||||
|
|
||||||
|
This patch addresses an issue in which a response could be sent back to the
|
||||||
|
source port of a client from a different address than the request was made to.
|
||||||
|
This is one form of a DNS cache poisoning attack.
|
||||||
|
|
||||||
|
The patch simply uses recvfrom() rather than recv() and validates that the
|
||||||
|
address returned from recvfrom() matches the address of the server we have
|
||||||
|
connected to. Only necessary on UDP sockets as they are connection-less, TCP
|
||||||
|
is unaffected.
|
||||||
|
|
||||||
|
- Fix by George Neill:
|
||||||
|
Fixed compilation of acountry sample application failure on some systems.
|
||||||
|
|
||||||
|
* Aug 4 2008 (Daniel Stenberg)
|
||||||
|
- Fix by Tofu Linden:
|
||||||
|
|
||||||
|
The symptom:
|
||||||
|
* Users (usually, but not always) on 2-Wire routers and the Comcast service
|
||||||
|
and a wired connection to their router would find that the second and
|
||||||
|
subsequent DNS lookups from fresh processes using c-ares to resolve the same
|
||||||
|
address would cause the process to never see a reply (it keeps polling for
|
||||||
|
around 1m15s before giving up).
|
||||||
|
|
||||||
|
The repro:
|
||||||
|
* On such a machine (and yeah, it took us a lot of QA to find the systems
|
||||||
|
that reproduce such a specific problem!), do 'ahost www.secondlife.com',
|
||||||
|
then do it again. The first process's lookup will work, subsequent lookups
|
||||||
|
will time-out and fail.
|
||||||
|
|
||||||
|
The cause:
|
||||||
|
* init_id_key() was calling randomize_key() *before* it initialized
|
||||||
|
key->state, meaning that the randomness generated by randomize_key() is
|
||||||
|
immediately overwritten with deterministic values. (/dev/urandom was also
|
||||||
|
being read incorrectly in the c-ares version we were using, but this was
|
||||||
|
fixed in a later version.)
|
||||||
|
* This makes the stream of generated query-IDs from any new c-ares process
|
||||||
|
be an identical and predictable sequence of IDs.
|
||||||
|
* This makes the 2-Wire's default built-in DNS server detect these queries
|
||||||
|
as probable-duplicates and (erroneously) not respond at all.
|
||||||
|
|
||||||
|
|
||||||
|
* Aug 4 2008 (Yang Tse)
|
||||||
|
- Autoconf 2.62 has changed the behaviour of the AC_AIX macro which we use.
|
||||||
|
Prior versions of autoconf defined _ALL_SOURCE if _AIX was defined. 2.62
|
||||||
|
version of AC_AIX defines _ALL_SOURCE and other four preprocessor symbols
|
||||||
|
no matter if the system is AIX or not. To keep the traditional behaviour,
|
||||||
|
and an uniform one across autoconf versions AC_AIX is replaced with our
|
||||||
|
own internal macro CARES_CHECK_AIX_ALL_SOURCE.
|
||||||
|
|
||||||
|
* Aug 1 2008 (Yang Tse)
|
||||||
|
- Configure process now checks if the preprocessor _REENTRANT symbol is already
|
||||||
|
defined. If it isn't currently defined a set of checks are performed to test
|
||||||
|
if its definition is required to make visible to the compiler a set of *_r
|
||||||
|
functions. Finally, if _REENTRANT is already defined or needed it takes care
|
||||||
|
of making adjustments necessary to ensure that it is defined equally for the
|
||||||
|
configure process tests and generated config file.
|
||||||
|
|
||||||
|
* Jul 20 2008 (Yang Tse)
|
||||||
|
- When recvfrom prototype uses a void pointer for arguments 2, 5 or 6 this will
|
||||||
|
now cause the definition, as appropriate, of RECVFROM_TYPE_ARG2_IS_VOID,
|
||||||
|
RECVFROM_TYPE_ARG5_IS_VOID or RECVFROM_TYPE_ARG6_IS_VOID.
|
||||||
|
|
||||||
|
* Jul 17 2008 (Yang Tse)
|
||||||
|
- RECVFROM_TYPE_ARG2, RECVFROM_TYPE_ARG5 and RECVFROM_TYPE_ARG6 are now defined
|
||||||
|
to the data type pointed by its respective argument and not the pointer type.
|
||||||
|
|
||||||
|
* Jul 16 2008 (Yang Tse)
|
||||||
|
- Improved configure detection of number of arguments for getservbyport_r.
|
||||||
|
Detection is now based on compilation checks instead of linker ones.
|
||||||
|
|
||||||
|
- Configure process now checks availability of recvfrom() socket function and
|
||||||
|
finds out its return type and the types of its arguments. Added definitions
|
||||||
|
for non-configure systems config files, and introduced macro sreadfrom which
|
||||||
|
will be used on udp sockets as a recvfrom() wrapper in the future.
|
||||||
|
|
||||||
|
* Jul 15 2008 (Yang Tse)
|
||||||
|
- Introduce definition of _REENTRANT symbol in setup.h to improve library
|
||||||
|
usability. Previously the configure process only used the AC_SYS_LARGEFILE
|
||||||
|
macro for debug builds, now it is also used for non-debug ones enabling the
|
||||||
|
use of configure options --enable-largefile and --disable-largefile which
|
||||||
|
might be needed for library compatibility. Remove checking the size of
|
||||||
|
curl_off_t, it is no longer needed.
|
||||||
|
|
||||||
|
* Jul 3 2008 (Daniel Stenberg)
|
||||||
|
- Phil Blundell: If you ask ares_gethostbyname() to do an AF_INET6 lookup and
|
||||||
|
the target host has only A records, it automatically falls back to an
|
||||||
|
AF_INET lookup and gives you the A results. However, if the target host has
|
||||||
|
a CNAME record, this behaviour is defeated since the original query does
|
||||||
|
return some data even though ares_parse_aaa_reply() doesn't consider it
|
||||||
|
relevant. Here's a small patch to make it behave the same with and without
|
||||||
|
the CNAME.
|
||||||
|
|
||||||
|
* Jul 2 2008 (Yang Tse)
|
||||||
|
- Fallback to gettimeofday when monotonic clock is unavailable at run-time.
|
||||||
|
|
||||||
|
* Jun 30 2008 (Daniel Stenberg)
|
||||||
|
|
||||||
|
- As was pointed out to me by Andreas Schuldei, the MAXHOSTNAMELEN define is
|
||||||
|
not posix or anything and thus c-ares failed to build on hurd (and possibly
|
||||||
|
elsewhere). The define was also somewhat artificially used in the windows
|
||||||
|
port. Now, I instead rewrote the use of gethostbyname to enlarge the host
|
||||||
|
name buffer in case of need and totally avoid the use of the MAXHOSTNAMELEN
|
||||||
|
define. I thus also removed the defien from the namser.h file where it was
|
||||||
|
once added for the windows build.
|
||||||
|
|
||||||
|
I also fixed init_by_defaults() function to not leak memory in case if
|
||||||
|
error.
|
||||||
|
|
||||||
|
* Jun 9 2008 (Yang Tse)
|
||||||
|
|
||||||
|
- Make libcares.pc generated file for pkg-config include information relative
|
||||||
|
to the libraries needed for the static linking of c-ares.
|
||||||
|
|
||||||
|
* May 30 2008 (Yang Tse)
|
||||||
|
|
||||||
|
- Brad House fixed a missing header file inclusion in adig sample program.
|
||||||
|
|
||||||
|
Version 1.5.2 (May 29, 2008)
|
||||||
|
|
||||||
|
* May 13 2008 (Daniel Stenberg)
|
||||||
|
|
||||||
|
- Introducing millisecond resolution support for the timeout option. See
|
||||||
|
ares_init_options()'s ARES_OPT_TIMEOUTMS.
|
||||||
|
|
||||||
|
* May 9 2008 (Yang Tse)
|
||||||
|
|
||||||
|
- Use monotonic time source if available, for private function ares__tvnow()
|
||||||
|
|
||||||
|
* May 7 2008 (Daniel Stenberg)
|
||||||
|
|
||||||
|
- Sebastian made c-ares able to return all PTR-records when doing reverse
|
||||||
|
lookups. It is not common practice to have multiple PTR-Records for a single
|
||||||
|
IP, but its perfectly legal and some sites have those.
|
||||||
|
|
||||||
|
- Doug Goldstein provided a configure patch: updates autoconf 2.13 usage to
|
||||||
|
autoconf 2.57 usage (which is the version you have specified as the minimum
|
||||||
|
version). It's a minor change but it does clean up some warnings with newer
|
||||||
|
autoconf (specifically 2.62).
|
||||||
|
|
||||||
|
* May 5 2008 (Yang Tse)
|
||||||
|
|
||||||
|
- Improved parsing of resolver configuration files.
|
||||||
|
|
||||||
|
* April 4 2008 (Daniel Stenberg)
|
||||||
|
|
||||||
|
- Eino Tuominen improved the code when a file is used to seed the randomizer.
|
||||||
|
|
||||||
|
- Alexey Simak made adig support NAPTR records
|
||||||
|
|
||||||
|
- Alexey Simak fixed the VC dsp file by adding the missing source file
|
||||||
|
ares_expand_string.c
|
||||||
|
|
||||||
* December 11 2007 (Gisle Vanem)
|
* December 11 2007 (Gisle Vanem)
|
||||||
|
|
||||||
- Added another sample application; acountry.c which converts an
|
- Added another sample application; acountry.c which converts an
|
||||||
|
|||||||
35
ares/FILES
35
ares/FILES
@@ -1,35 +0,0 @@
|
|||||||
*.c
|
|
||||||
*.h
|
|
||||||
*.3
|
|
||||||
NEWS
|
|
||||||
README
|
|
||||||
README.cares
|
|
||||||
CHANGES
|
|
||||||
FILES
|
|
||||||
maketgz
|
|
||||||
aclocal.m4
|
|
||||||
acinclude.m4
|
|
||||||
Makefile.in
|
|
||||||
Makefile.dj
|
|
||||||
Makefile.m32
|
|
||||||
Makefile.netware
|
|
||||||
Makefile.vc6
|
|
||||||
install-sh
|
|
||||||
mkinstalldirs
|
|
||||||
configure
|
|
||||||
configure.ac
|
|
||||||
config.guess
|
|
||||||
config.sub
|
|
||||||
vc/adig/adig.dep
|
|
||||||
vc/adig/adig.dsp
|
|
||||||
vc/adig/adig.mak
|
|
||||||
vc/adig/adig.plg
|
|
||||||
vc/vc.dsw
|
|
||||||
vc/ahost/ahost.dep
|
|
||||||
vc/ahost/ahost.dsp
|
|
||||||
vc/ahost/ahost.mak
|
|
||||||
vc/ahost/ahost.plg
|
|
||||||
vc/areslib/areslib.dep
|
|
||||||
vc/areslib/areslib.dsp
|
|
||||||
vc/areslib/areslib.mak
|
|
||||||
vc/areslib/areslib.plg
|
|
||||||
@@ -1,12 +1,37 @@
|
|||||||
AUTOMAKE_OPTIONS = foreign
|
AUTOMAKE_OPTIONS = foreign nostdinc
|
||||||
|
|
||||||
|
ACLOCAL_AMFLAGS = -I m4
|
||||||
|
|
||||||
|
# Specify our include paths here, and do it relative to $(top_srcdir) and
|
||||||
|
# $(top_builddir), to ensure that these paths which belong to the library
|
||||||
|
# being currently built and tested are searched before the library which
|
||||||
|
# might possibly already be installed in the system.
|
||||||
|
#
|
||||||
|
# When using the low-level hard-hacking memory leak tracking code from
|
||||||
|
# libcurl the generated curl/curlbuild.h file must also be reachable.
|
||||||
|
# Using the libcurl lowlevel code from within c-ares library is ugly and
|
||||||
|
# only works when c-ares is built and linked with a similarly debug-build
|
||||||
|
# libcurl, but we do this anyway for convenience.
|
||||||
|
#
|
||||||
|
# $(top_builddir)/../include is for libcurl's generated curl/curlbuild.h file
|
||||||
|
# $(top_builddir) is for c-ares's generated config.h file
|
||||||
|
# $(top_srcdir) is for c-ares's lib/setup.h and other "c-ares-private" files
|
||||||
|
|
||||||
|
if CURLDEBUG
|
||||||
|
INCLUDES = -I$(top_builddir)/../include \
|
||||||
|
-I$(top_builddir) \
|
||||||
|
-I$(top_srcdir)
|
||||||
|
else
|
||||||
|
INCLUDES = -I$(top_builddir) \
|
||||||
|
-I$(top_srcdir)
|
||||||
|
endif
|
||||||
|
|
||||||
lib_LTLIBRARIES = libcares.la
|
lib_LTLIBRARIES = libcares.la
|
||||||
|
|
||||||
man_MANS = $(MANPAGES)
|
man_MANS = $(MANPAGES)
|
||||||
|
|
||||||
MSVCFILES = vc/adig/adig.dep vc/adig/adig.dsp vc/vc.dsw vc/ahost/ahost.dep \
|
MSVCFILES = vc/vc.dsw vc/acountry/acountry.dsp vc/adig/adig.dsp \
|
||||||
vc/ahost/ahost.dsp vc/areslib/areslib.dep vc/areslib/areslib.dsp \
|
vc/ahost/ahost.dsp vc/areslib/areslib.dsp vc/areslib/areslib.dsw
|
||||||
vc/areslib/areslib.dsw
|
|
||||||
|
|
||||||
if DEBUGBUILD
|
if DEBUGBUILD
|
||||||
PROGS =
|
PROGS =
|
||||||
@@ -18,8 +43,12 @@ noinst_PROGRAMS =$(PROGS)
|
|||||||
|
|
||||||
# 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 = AUTHORS CHANGES README.cares Makefile.inc Makefile.dj \
|
||||||
$(MSVCFILES) AUTHORS config-win32.h RELEASE-NOTES libcares.pc.in
|
Makefile.m32 Makefile.netware Makefile.vc6 $(man_MANS) $(MSVCFILES) \
|
||||||
|
config-win32.h RELEASE-NOTES libcares.pc.in buildconf get_ver.awk maketgz \
|
||||||
|
TODO ares_build.h.in buildconf.bat
|
||||||
|
|
||||||
|
DISTCLEANFILES = ares_build.h
|
||||||
|
|
||||||
pkgconfigdir = $(libdir)/pkgconfig
|
pkgconfigdir = $(libdir)/pkgconfig
|
||||||
pkgconfig_DATA = libcares.pc
|
pkgconfig_DATA = libcares.pc
|
||||||
@@ -58,8 +87,9 @@ if NO_UNDEFINED
|
|||||||
UNDEF = -no-undefined
|
UNDEF = -no-undefined
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
EXPORT_SYMBOLS = -export-symbols-regex '^ares_[[:alnum:]].*'
|
||||||
|
|
||||||
libcares_la_LDFLAGS = $(UNDEF) $(VER)
|
libcares_la_LDFLAGS = $(UNDEF) $(VER) $(EXPORT_SYMBOLS)
|
||||||
|
|
||||||
# Makefile.inc provides the CSOURCES and HHEADERS defines
|
# Makefile.inc provides the CSOURCES and HHEADERS defines
|
||||||
include Makefile.inc
|
include Makefile.inc
|
||||||
@@ -69,15 +99,16 @@ 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 ares_dns.h
|
libcares_la_HEADERS = ares.h ares_version.h ares_dns.h \
|
||||||
|
ares_build.h ares_rules.h
|
||||||
|
|
||||||
ahost_SOURCES = ahost.c ares_getopt.c
|
ahost_SOURCES = ahost.c ares_getopt.c ares_getopt.h
|
||||||
ahost_LDADD = $(top_builddir)/$(lib_LTLIBRARIES)
|
ahost_LDADD = $(top_builddir)/$(lib_LTLIBRARIES)
|
||||||
|
|
||||||
adig_SOURCES = adig.c ares_getopt.c
|
adig_SOURCES = adig.c ares_getopt.c ares_getopt.h
|
||||||
adig_LDADD = $(top_builddir)/$(lib_LTLIBRARIES)
|
adig_LDADD = $(top_builddir)/$(lib_LTLIBRARIES)
|
||||||
|
|
||||||
acountry_SOURCES = acountry.c ares_getopt.c
|
acountry_SOURCES = acountry.c ares_getopt.c ares_getopt.h
|
||||||
acountry_LDADD = $(top_builddir)/$(lib_LTLIBRARIES)
|
acountry_LDADD = $(top_builddir)/$(lib_LTLIBRARIES)
|
||||||
|
|
||||||
# Make files named *.dist replace the file without .dist extension
|
# Make files named *.dist replace the file without .dist extension
|
||||||
|
|||||||
@@ -10,19 +10,27 @@ include ../packages/DOS/common.dj
|
|||||||
|
|
||||||
include Makefile.inc
|
include Makefile.inc
|
||||||
|
|
||||||
CFLAGS += -DWATT32 -DHAVE_AF_INET6 -DHAVE_PF_INET6 -DHAVE_FIONBIO \
|
CFLAGS += -DWATT32 -DHAVE_AF_INET6 -DHAVE_PF_INET6 -DHAVE_IOCTLSOCKET \
|
||||||
-DHAVE_STRUCT_IN6_ADDR -DHAVE_SOCKADDR_IN6_SIN6_SCOPE_ID \
|
-DHAVE_IOCTLSOCKET_FIONBIO -DHAVE_STRUCT_IN6_ADDR \
|
||||||
-DHAVE_SYS_TIME_H -DHAVE_STRUCT_SOCKADDR_IN6 -DHAVE_STRUCT_ADDRINFO \
|
-DHAVE_SOCKADDR_IN6_SIN6_SCOPE_ID -DHAVE_SYS_TIME_H \
|
||||||
-DHAVE_SIGNAL_H -DHAVE_SIG_ATOMIC_T -DRETSIGTYPE='void' -DHAVE_PROCESS_H \
|
-DHAVE_STRUCT_SOCKADDR_IN6 -DHAVE_STRUCT_ADDRINFO \
|
||||||
-DHAVE_ARPA_NAMESER_H -DHAVE_SYS_SOCKET_H -DHAVE_SYS_UIO_H -DHAVE_NETINET_IN_H \
|
-DHAVE_ARPA_NAMESER_H -DHAVE_ARPA_INET_H -DHAVE_SYS_SOCKET_H \
|
||||||
-DHAVE_NETINET_TCP_H -DNS_INADDRSZ=4 -DHAVE_RECV -DHAVE_SEND \
|
-DHAVE_SYS_UIO_H -DHAVE_NETINET_IN_H -DHAVE_NETINET_TCP_H \
|
||||||
|
-DNS_INADDRSZ=4 -DHAVE_RECV -DHAVE_SEND -DHAVE_GETTIMEOFDAY \
|
||||||
-DSEND_TYPE_ARG1='int' -DSEND_QUAL_ARG2='const' \
|
-DSEND_TYPE_ARG1='int' -DSEND_QUAL_ARG2='const' \
|
||||||
-DSEND_TYPE_ARG2='void*' -DSEND_TYPE_ARG3='int' \
|
-DSEND_TYPE_ARG2='void*' -DSEND_TYPE_ARG3='int' \
|
||||||
-DSEND_TYPE_ARG4='int' -DSEND_TYPE_RETV='int' \
|
-DSEND_TYPE_ARG4='int' -DSEND_TYPE_RETV='int' \
|
||||||
-DRECV_TYPE_ARG1='int' -DRECV_TYPE_ARG2='void*' \
|
-DRECV_TYPE_ARG1='int' -DRECV_TYPE_ARG2='void*' \
|
||||||
-DRECV_TYPE_ARG3='int' -DRECV_TYPE_ARG4='int' \
|
-DRECV_TYPE_ARG3='int' -DRECV_TYPE_ARG4='int' \
|
||||||
-DRECV_TYPE_RETV='int' -DHAVE_STRUCT_TIMEVAL \
|
-DRECV_TYPE_RETV='int' -DHAVE_STRUCT_TIMEVAL \
|
||||||
-Dselect=select_s -Dsocklen_t=int -UHAVE_CONFIG_H
|
-Dselect=select_s -UHAVE_CONFIG_H \
|
||||||
|
-DRECVFROM_TYPE_ARG1='int' -DRECVFROM_TYPE_ARG2='void' \
|
||||||
|
-DRECVFROM_TYPE_ARG3='int' -DRECVFROM_TYPE_ARG4='int' \
|
||||||
|
-DRECVFROM_TYPE_ARG6='int' -DRECVFROM_TYPE_RETV='int' \
|
||||||
|
-DRECVFROM_TYPE_ARG5='struct sockaddr' -DHAVE_RECVFROM \
|
||||||
|
-DRECVFROM_TYPE_ARG2_IS_VOID -DHAVE_STRDUP -DHAVE_NETDB_H \
|
||||||
|
-DHAVE_STRCASECMP -DHAVE_STRNCASECMP -DHAVE_GETHOSTNAME \
|
||||||
|
-DHAVE_LIMITS_H
|
||||||
|
|
||||||
LDFLAGS = -s
|
LDFLAGS = -s
|
||||||
|
|
||||||
|
|||||||
@@ -3,14 +3,16 @@ ares_query.c ares__close_sockets.c ares_free_string.c ares_search.c \
|
|||||||
ares__get_hostent.c ares_gethostbyaddr.c ares_send.c ares__read_line.c \
|
ares__get_hostent.c ares_gethostbyaddr.c ares_send.c ares__read_line.c \
|
||||||
ares_gethostbyname.c ares_strerror.c ares_cancel.c ares_init.c \
|
ares_gethostbyname.c ares_strerror.c ares_cancel.c ares_init.c \
|
||||||
ares_timeout.c ares_destroy.c ares_mkquery.c ares_version.c \
|
ares_timeout.c ares_destroy.c ares_mkquery.c ares_version.c \
|
||||||
ares_expand_name.c ares_parse_a_reply.c windows_port.c \
|
ares_expand_name.c ares_parse_a_reply.c windows_port.c ares_strdup.c \
|
||||||
ares_expand_string.c ares_parse_ptr_reply.c ares_parse_aaaa_reply.c \
|
ares_expand_string.c ares_parse_ptr_reply.c ares_parse_aaaa_reply.c \
|
||||||
ares_getnameinfo.c inet_net_pton.c bitncmp.c inet_ntop.c \
|
ares_getnameinfo.c inet_net_pton.c bitncmp.c inet_ntop.c ares_writev.c \
|
||||||
ares_parse_ns_reply.c ares_llist.c
|
ares_parse_ns_reply.c ares_llist.c ares__timeval.c ares_strcasecmp.c \
|
||||||
|
ares_library_init.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 \
|
||||||
setup_once.h ares_llist.h
|
ares_llist.h ares_strdup.h ares_strcasecmp.h ares_writev.h ares_build.h \
|
||||||
|
ares_rules.h ares_library_init.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 \
|
||||||
@@ -18,5 +20,6 @@ MANPAGES= ares_destroy.3 ares_expand_name.3 ares_expand_string.3 ares_fds.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 \
|
ares_getsock.3 ares_parse_ns_reply.3 ares_dup.3 \
|
||||||
ares_destroy_options.3 ares_save_options.3
|
ares_destroy_options.3 ares_save_options.3 ares_gethostbyname_file.3 \
|
||||||
|
ares_set_socket_callback.3
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ tags:
|
|||||||
%.exe: %.o ares_getopt.o $(LIB)
|
%.exe: %.o ares_getopt.o $(LIB)
|
||||||
$(LD) $(LDFLAGS) -o $@ $^ $(LIBS)
|
$(LD) $(LDFLAGS) -o $@ $^ $(LIBS)
|
||||||
|
|
||||||
$(OBJLIB): ares.h ares_dns.h ares_private.h
|
$(OBJLIB): ares.h ares_dns.h ares_private.h ares_build.h ares_rules.h
|
||||||
|
|
||||||
.c.o:
|
.c.o:
|
||||||
$(CC) $(CFLAGS) -c $<
|
$(CC) $(CFLAGS) -c $<
|
||||||
@@ -55,7 +55,8 @@ install:
|
|||||||
${RANLIB} ${DESTDIR}${libdir}/$(LIB)
|
${RANLIB} ${DESTDIR}${libdir}/$(LIB)
|
||||||
chmod u-w ${DESTDIR}${libdir}/$(LIB)
|
chmod u-w ${DESTDIR}${libdir}/$(LIB)
|
||||||
${INSTALL} -m 444 ${srcdir}/ares.h ${DESTDIR}${includedir}
|
${INSTALL} -m 444 ${srcdir}/ares.h ${DESTDIR}${includedir}
|
||||||
${INSTALL} -m 444 ${srcdir}/ares_version.h ${DESTDIR}${includedir}
|
${INSTALL} -m 444 ${srcdir}/ares_build.h ${DESTDIR}${includedir}
|
||||||
|
${INSTALL} -m 444 ${srcdir}/ares_rules.h ${DESTDIR}${includedir}
|
||||||
(for man in $(MANPAGES); do \
|
(for man in $(MANPAGES); do \
|
||||||
${INSTALL} -m 444 ${srcdir}/$${man} ${DESTDIR}${mandir}/man3; \
|
${INSTALL} -m 444 ${srcdir}/$${man} ${DESTDIR}${mandir}/man3; \
|
||||||
done)
|
done)
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ NDKBASE = c:/novell
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
ifndef INSTDIR
|
ifndef INSTDIR
|
||||||
INSTDIR = ../curl-$(LIBCURL_VERSION_STR)-bin-nw
|
INSTDIR = ../ares-$(LIBCARES_VERSION_STR)-bin-nw
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# Edit the vars below to change NLM target settings.
|
# Edit the vars below to change NLM target settings.
|
||||||
@@ -63,18 +63,19 @@ else
|
|||||||
CC = gcc
|
CC = gcc
|
||||||
endif
|
endif
|
||||||
# a native win32 awk can be downloaded from here:
|
# a native win32 awk can be downloaded from here:
|
||||||
# http://www.gknw.net/development/prgtools/awk-20050424.zip
|
# http://www.gknw.net/development/prgtools/awk-20070501.zip
|
||||||
AWK = awk
|
AWK = awk
|
||||||
YACC = bison -y
|
YACC = bison -y
|
||||||
CP = cp -afv
|
CP = cp -afv
|
||||||
|
MKDIR = mkdir
|
||||||
# RM = rm -f
|
# RM = rm -f
|
||||||
# if you want to mark the target as MTSAFE you will need a tool for
|
# if you want to mark the target as MTSAFE you will need a tool for
|
||||||
# generating the xdc data for the linker; here's a minimal tool:
|
# generating the xdc data for the linker; here's a minimal tool:
|
||||||
# http://www.gknw.com/development/prgtools/mkxdc.zip
|
# http://www.gknw.net/development/prgtools/mkxdc.zip
|
||||||
MPKXDC = mkxdc
|
MPKXDC = mkxdc
|
||||||
|
|
||||||
# Global flags for all compilers
|
# Global flags for all compilers
|
||||||
CFLAGS = $(OPT) -D$(DB) -DNETWARE -DHAVE_CONFIG_H -nostdinc
|
CFLAGS += $(OPT) -D$(DB) -DNETWARE -DHAVE_CONFIG_H -nostdinc
|
||||||
|
|
||||||
ifeq ($(CC),mwccnlm)
|
ifeq ($(CC),mwccnlm)
|
||||||
LD = mwldnlm
|
LD = mwldnlm
|
||||||
@@ -159,11 +160,7 @@ lib: prebuild $(LTARGET)
|
|||||||
|
|
||||||
nlm: prebuild $(TARGETS)
|
nlm: prebuild $(TARGETS)
|
||||||
|
|
||||||
prebuild: $(OBJDIR) $(OBJDIR)/version.inc config.h arpa/nameser.h
|
prebuild: $(OBJDIR) ares_build.h $(OBJDIR)/version.inc config.h
|
||||||
|
|
||||||
dist: all
|
|
||||||
-$(RM) $(OBJLIB) $(OBJDIR)/*.map $(OBJDIR)/*.ncv
|
|
||||||
-$(RM) $(OBJDIR)/*.def $(OBJDIR)/*.xdc $(OBJDIR)/version.inc
|
|
||||||
|
|
||||||
install: $(INSTDIR) all
|
install: $(INSTDIR) all
|
||||||
@$(CP) *.nlm $(INSTDIR)
|
@$(CP) *.nlm $(INSTDIR)
|
||||||
@@ -190,11 +187,8 @@ endif
|
|||||||
@-$(RM) $@
|
@-$(RM) $@
|
||||||
@$(LD) $(LDFLAGS) $<
|
@$(LD) $(LDFLAGS) $<
|
||||||
|
|
||||||
$(INSTDIR):
|
$(OBJDIR) $(INSTDIR):
|
||||||
@mkdir $(INSTDIR)
|
@$(MKDIR) $@
|
||||||
|
|
||||||
$(OBJDIR):
|
|
||||||
@mkdir $(OBJDIR)
|
|
||||||
|
|
||||||
$(OBJDIR)/%.o: %.c
|
$(OBJDIR)/%.o: %.c
|
||||||
# @echo Compiling $<
|
# @echo Compiling $<
|
||||||
@@ -202,7 +196,7 @@ $(OBJDIR)/%.o: %.c
|
|||||||
|
|
||||||
$(OBJDIR)/version.inc: ares_version.h $(OBJDIR)
|
$(OBJDIR)/version.inc: ares_version.h $(OBJDIR)
|
||||||
@echo Creating $@
|
@echo Creating $@
|
||||||
@$(AWK) -f ../packages/NetWare/get_ver.awk $< > $@
|
@$(AWK) -f get_ver.awk $< > $@
|
||||||
|
|
||||||
$(OBJDIR)/%.xdc: Makefile.netware
|
$(OBJDIR)/%.xdc: Makefile.netware
|
||||||
@echo Creating $@
|
@echo Creating $@
|
||||||
@@ -269,8 +263,9 @@ ifdef IMPORTS
|
|||||||
@echo $(DL)import $(IMPORTS)$(DL) >> $@
|
@echo $(DL)import $(IMPORTS)$(DL) >> $@
|
||||||
endif
|
endif
|
||||||
ifeq ($(LD),nlmconv)
|
ifeq ($(LD),nlmconv)
|
||||||
@echo $(DL)input $(OBJEXE)$(DL) >> $@
|
|
||||||
@echo $(DL)input $(PRELUDE)$(DL) >> $@
|
@echo $(DL)input $(PRELUDE)$(DL) >> $@
|
||||||
|
@echo $(DL)input $(OBJEXE)$(DL) >> $@
|
||||||
|
@echo $(DL)input $(@:.def=.o)$(DL) >> $@
|
||||||
@echo $(DL)output $(notdir $(@:.def=.nlm))$(DL) >> $@
|
@echo $(DL)output $(notdir $(@:.def=.nlm))$(DL) >> $@
|
||||||
endif
|
endif
|
||||||
|
|
||||||
@@ -287,31 +282,34 @@ config.h: Makefile.netware
|
|||||||
@echo $(DL)#define PACKAGE_BUGREPORT "a suitable curl mailing list => http://curl.haxx.se/mail/"$(DL) >> $@
|
@echo $(DL)#define PACKAGE_BUGREPORT "a suitable curl mailing list => http://curl.haxx.se/mail/"$(DL) >> $@
|
||||||
ifeq ($(LIBARCH),CLIB)
|
ifeq ($(LIBARCH),CLIB)
|
||||||
@echo $(DL)#define OS "i586-pc-clib-NetWare"$(DL) >> $@
|
@echo $(DL)#define OS "i586-pc-clib-NetWare"$(DL) >> $@
|
||||||
@echo $(DL)#define MAXHOSTNAMELEN 256$(DL) >> $@
|
@echo $(DL)#define HAVE_STRICMP 1$(DL) >> $@
|
||||||
|
@echo $(DL)#define HAVE_STRNICMP 1$(DL) >> $@
|
||||||
@echo $(DL)#define NETDB_USE_INTERNET 1$(DL) >> $@
|
@echo $(DL)#define NETDB_USE_INTERNET 1$(DL) >> $@
|
||||||
@echo $(DL)#define RECV_TYPE_ARG1 int$(DL) >> $@
|
@echo $(DL)#define RECV_TYPE_ARG1 int$(DL) >> $@
|
||||||
@echo $(DL)#define RECV_TYPE_ARG2 char *$(DL) >> $@
|
@echo $(DL)#define RECV_TYPE_ARG2 char *$(DL) >> $@
|
||||||
@echo $(DL)#define RECV_TYPE_ARG3 int$(DL) >> $@
|
@echo $(DL)#define RECV_TYPE_ARG3 int$(DL) >> $@
|
||||||
@echo $(DL)#define RECV_TYPE_ARG4 int$(DL) >> $@
|
@echo $(DL)#define RECV_TYPE_ARG4 int$(DL) >> $@
|
||||||
@echo $(DL)#define RECV_TYPE_RETV int$(DL) >> $@
|
@echo $(DL)#define RECV_TYPE_RETV int$(DL) >> $@
|
||||||
|
@echo $(DL)#define RECVFROM_TYPE_ARG1 int$(DL) >> $@
|
||||||
|
@echo $(DL)#define RECVFROM_TYPE_ARG2 char$(DL) >> $@
|
||||||
|
@echo $(DL)#define RECVFROM_TYPE_ARG3 int$(DL) >> $@
|
||||||
|
@echo $(DL)#define RECVFROM_TYPE_ARG4 int$(DL) >> $@
|
||||||
|
@echo $(DL)#define RECVFROM_TYPE_ARG5 struct sockaddr$(DL) >> $@
|
||||||
|
@echo $(DL)#define RECVFROM_TYPE_ARG6 int$(DL) >> $@
|
||||||
|
@echo $(DL)#define RECVFROM_TYPE_RETV int$(DL) >> $@
|
||||||
@echo $(DL)#define SEND_QUAL_ARG2$(DL) >> $@
|
@echo $(DL)#define SEND_QUAL_ARG2$(DL) >> $@
|
||||||
@echo $(DL)#define SEND_TYPE_ARG1 int$(DL) >> $@
|
@echo $(DL)#define SEND_TYPE_ARG1 int$(DL) >> $@
|
||||||
@echo $(DL)#define SEND_TYPE_ARG2 char *$(DL) >> $@
|
@echo $(DL)#define SEND_TYPE_ARG2 char *$(DL) >> $@
|
||||||
@echo $(DL)#define SEND_TYPE_ARG3 int$(DL) >> $@
|
@echo $(DL)#define SEND_TYPE_ARG3 int$(DL) >> $@
|
||||||
@echo $(DL)#define SEND_TYPE_ARG4 int$(DL) >> $@
|
@echo $(DL)#define SEND_TYPE_ARG4 int$(DL) >> $@
|
||||||
@echo $(DL)#define SEND_TYPE_RETV int$(DL) >> $@
|
@echo $(DL)#define SEND_TYPE_RETV int$(DL) >> $@
|
||||||
@echo $(DL)#define socklen_t int$(DL) >> $@
|
|
||||||
@echo $(DL)#define strncasecmp strnicmp$(DL) >> $@
|
|
||||||
@echo $(DL)#define strcasecmp stricmp$(DL) >> $@
|
|
||||||
else
|
else
|
||||||
@echo $(DL)#define OS "i586-pc-libc-NetWare"$(DL) >> $@
|
@echo $(DL)#define OS "i586-pc-libc-NetWare"$(DL) >> $@
|
||||||
@echo $(DL)#define HAVE_DLFCN_H 1$(DL) >> $@
|
@echo $(DL)#define HAVE_DLFCN_H 1$(DL) >> $@
|
||||||
@echo $(DL)#define HAVE_DLOPEN 1$(DL) >> $@
|
@echo $(DL)#define HAVE_DLOPEN 1$(DL) >> $@
|
||||||
@echo $(DL)#define HAVE_FTRUNCATE 1$(DL) >> $@
|
@echo $(DL)#define HAVE_FTRUNCATE 1$(DL) >> $@
|
||||||
@echo $(DL)#define HAVE_GETTIMEOFDAY 1$(DL) >> $@
|
@echo $(DL)#define HAVE_GETTIMEOFDAY 1$(DL) >> $@
|
||||||
@echo $(DL)#define HAVE_INET_PTON 1$(DL) >> $@
|
|
||||||
@echo $(DL)#define HAVE_INTTYPES_H 1$(DL) >> $@
|
@echo $(DL)#define HAVE_INTTYPES_H 1$(DL) >> $@
|
||||||
@echo $(DL)#define HAVE_LIMITS_H 1$(DL) >> $@
|
|
||||||
@echo $(DL)#define HAVE_LONGLONG 1$(DL) >> $@
|
@echo $(DL)#define HAVE_LONGLONG 1$(DL) >> $@
|
||||||
@echo $(DL)#define HAVE_STDINT_H 1$(DL) >> $@
|
@echo $(DL)#define HAVE_STDINT_H 1$(DL) >> $@
|
||||||
@echo $(DL)#define HAVE_STRCASECMP 1$(DL) >> $@
|
@echo $(DL)#define HAVE_STRCASECMP 1$(DL) >> $@
|
||||||
@@ -323,6 +321,9 @@ else
|
|||||||
@echo $(DL)#define HAVE_TERMIOS_H 1$(DL) >> $@
|
@echo $(DL)#define HAVE_TERMIOS_H 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_FREEADDRINFO 1$(DL) >> $@
|
||||||
|
@echo $(DL)#define HAVE_GETADDRINFO 1$(DL) >> $@
|
||||||
|
@echo $(DL)#define HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID 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 RECV_TYPE_ARG1 int$(DL) >> $@
|
@echo $(DL)#define RECV_TYPE_ARG1 int$(DL) >> $@
|
||||||
@@ -330,6 +331,14 @@ else
|
|||||||
@echo $(DL)#define RECV_TYPE_ARG3 size_t$(DL) >> $@
|
@echo $(DL)#define RECV_TYPE_ARG3 size_t$(DL) >> $@
|
||||||
@echo $(DL)#define RECV_TYPE_ARG4 int$(DL) >> $@
|
@echo $(DL)#define RECV_TYPE_ARG4 int$(DL) >> $@
|
||||||
@echo $(DL)#define RECV_TYPE_RETV ssize_t$(DL) >> $@
|
@echo $(DL)#define RECV_TYPE_RETV ssize_t$(DL) >> $@
|
||||||
|
@echo $(DL)#define RECVFROM_TYPE_ARG1 int$(DL) >> $@
|
||||||
|
@echo $(DL)#define RECVFROM_TYPE_ARG2 void$(DL) >> $@
|
||||||
|
@echo $(DL)#define RECVFROM_TYPE_ARG3 size_t$(DL) >> $@
|
||||||
|
@echo $(DL)#define RECVFROM_TYPE_ARG4 int$(DL) >> $@
|
||||||
|
@echo $(DL)#define RECVFROM_TYPE_ARG5 struct sockaddr$(DL) >> $@
|
||||||
|
@echo $(DL)#define RECVFROM_TYPE_ARG6 size_t$(DL) >> $@
|
||||||
|
@echo $(DL)#define RECVFROM_TYPE_RETV ssize_t$(DL) >> $@
|
||||||
|
@echo $(DL)#define RECVFROM_TYPE_ARG2_IS_VOID 1$(DL) >> $@
|
||||||
@echo $(DL)#define SEND_QUAL_ARG2$(DL) >> $@
|
@echo $(DL)#define SEND_QUAL_ARG2$(DL) >> $@
|
||||||
@echo $(DL)#define SEND_TYPE_ARG1 int$(DL) >> $@
|
@echo $(DL)#define SEND_TYPE_ARG1 int$(DL) >> $@
|
||||||
@echo $(DL)#define SEND_TYPE_ARG2 void *$(DL) >> $@
|
@echo $(DL)#define SEND_TYPE_ARG2 void *$(DL) >> $@
|
||||||
@@ -339,22 +348,24 @@ else
|
|||||||
@echo $(DL)#define SIZEOF_STRUCT_IN6_ADDR 16$(DL) >> $@
|
@echo $(DL)#define SIZEOF_STRUCT_IN6_ADDR 16$(DL) >> $@
|
||||||
endif
|
endif
|
||||||
@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_ASSERT_H 1$(DL) >> $@
|
@echo $(DL)#define HAVE_ASSERT_H 1$(DL) >> $@
|
||||||
@echo $(DL)#define HAVE_ERR_H 1$(DL) >> $@
|
@echo $(DL)#define HAVE_ERR_H 1$(DL) >> $@
|
||||||
@echo $(DL)#define HAVE_FCNTL_H 1$(DL) >> $@
|
@echo $(DL)#define HAVE_FCNTL_H 1$(DL) >> $@
|
||||||
@echo $(DL)#define HAVE_FIONBIO 1$(DL) >> $@
|
|
||||||
@echo $(DL)#define HAVE_GETHOSTBYADDR 1$(DL) >> $@
|
@echo $(DL)#define HAVE_GETHOSTBYADDR 1$(DL) >> $@
|
||||||
@echo $(DL)#define HAVE_GETHOSTBYNAME 1$(DL) >> $@
|
@echo $(DL)#define HAVE_GETHOSTBYNAME 1$(DL) >> $@
|
||||||
|
@echo $(DL)#define HAVE_GETHOSTNAME 1$(DL) >> $@
|
||||||
@echo $(DL)#define HAVE_GETPROTOBYNAME 1$(DL) >> $@
|
@echo $(DL)#define HAVE_GETPROTOBYNAME 1$(DL) >> $@
|
||||||
@echo $(DL)#define HAVE_GMTIME_R 1$(DL) >> $@
|
@echo $(DL)#define HAVE_GMTIME_R 1$(DL) >> $@
|
||||||
@echo $(DL)#define HAVE_INET_ADDR 1$(DL) >> $@
|
@echo $(DL)#define HAVE_INET_ADDR 1$(DL) >> $@
|
||||||
@echo $(DL)#define HAVE_INET_NTOA 1$(DL) >> $@
|
@echo $(DL)#define HAVE_IOCTL 1$(DL) >> $@
|
||||||
|
@echo $(DL)#define HAVE_IOCTL_FIONBIO 1$(DL) >> $@
|
||||||
|
@echo $(DL)#define HAVE_LIMITS_H 1$(DL) >> $@
|
||||||
@echo $(DL)#define HAVE_LL 1$(DL) >> $@
|
@echo $(DL)#define HAVE_LL 1$(DL) >> $@
|
||||||
@echo $(DL)#define HAVE_LOCALTIME_R 1$(DL) >> $@
|
@echo $(DL)#define HAVE_LOCALTIME_R 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_RECV 1$(DL) >> $@
|
||||||
|
@echo $(DL)#define HAVE_RECVFROM 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_SEND 1$(DL) >> $@
|
||||||
@echo $(DL)#define HAVE_SETJMP_H 1$(DL) >> $@
|
@echo $(DL)#define HAVE_SETJMP_H 1$(DL) >> $@
|
||||||
@@ -377,8 +388,8 @@ endif
|
|||||||
@echo $(DL)#define HAVE_UNISTD_H 1$(DL) >> $@
|
@echo $(DL)#define HAVE_UNISTD_H 1$(DL) >> $@
|
||||||
@echo $(DL)#define HAVE_UTIME 1$(DL) >> $@
|
@echo $(DL)#define HAVE_UTIME 1$(DL) >> $@
|
||||||
@echo $(DL)#define HAVE_UTIME_H 1$(DL) >> $@
|
@echo $(DL)#define HAVE_UTIME_H 1$(DL) >> $@
|
||||||
|
@echo $(DL)#define HAVE_WRITEV 1$(DL) >> $@
|
||||||
@echo $(DL)#define RETSIGTYPE void$(DL) >> $@
|
@echo $(DL)#define RETSIGTYPE void$(DL) >> $@
|
||||||
@echo $(DL)#define SIZEOF_CURL_OFF_T 4$(DL) >> $@
|
|
||||||
@echo $(DL)#define SIZEOF_STRUCT_IN_ADDR 4$(DL) >> $@
|
@echo $(DL)#define SIZEOF_STRUCT_IN_ADDR 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) >> $@
|
||||||
@@ -395,13 +406,24 @@ endif
|
|||||||
@echo $(DL)#else$(DL) >> $@
|
@echo $(DL)#else$(DL) >> $@
|
||||||
@echo $(DL)#define HAVE_VARIADIC_MACROS_C99 1$(DL) >> $@
|
@echo $(DL)#define HAVE_VARIADIC_MACROS_C99 1$(DL) >> $@
|
||||||
@echo $(DL)#endif$(DL) >> $@
|
@echo $(DL)#endif$(DL) >> $@
|
||||||
ifdef OLD_NOVELLSDK
|
|
||||||
@echo $(DL)#define socklen_t int$(DL) >> $@
|
FORCE: ;
|
||||||
|
|
||||||
|
ares_build.h: Makefile.netware FORCE
|
||||||
|
@echo Creating $@
|
||||||
|
@echo $(DL)/* $@ intended for NetWare target.$(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)*/$(DL) >> $@
|
||||||
|
@echo $(DL)#ifndef __CARES_BUILD_H$(DL) >> $@
|
||||||
|
@echo $(DL)#define __CARES_BUILD_H$(DL) >> $@
|
||||||
|
ifeq ($(LIBARCH),CLIB)
|
||||||
|
@echo $(DL)#define CARES_TYPEOF_ARES_SOCKLEN_T int$(DL) >> $@
|
||||||
|
@echo $(DL)#define CARES_SIZEOF_ARES_SOCKLEN_T 4$(DL) >> $@
|
||||||
|
else
|
||||||
|
@echo $(DL)#define CARES_TYPEOF_ARES_SOCKLEN_T unsigned int$(DL) >> $@
|
||||||
|
@echo $(DL)#define CARES_SIZEOF_ARES_SOCKLEN_T 4$(DL) >> $@
|
||||||
endif
|
endif
|
||||||
|
@echo $(DL)#define CARES_SIZEOF_LONG 4$(DL) >> $@
|
||||||
arpa/nameser.h: nameser.h
|
@echo $(DL)typedef CARES_TYPEOF_ARES_SOCKLEN_T ares_socklen_t;$(DL) >> $@
|
||||||
@echo Fix missing header $@
|
@echo $(DL)#endif /* __CARES_BUILD_H */$(DL) >> $@
|
||||||
@-mkdir arpa
|
|
||||||
@$(CP) $< arpa
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ OBJ_DIR = VC6_obj
|
|||||||
DEF_FILE = cares.def
|
DEF_FILE = cares.def
|
||||||
|
|
||||||
!if "$(USE_WATT32)" == "1"
|
!if "$(USE_WATT32)" == "1"
|
||||||
CFLAGS = $(CFLAGS) -UWIN32 -DWATT32 -I$(WATT_ROOT)\inc
|
CFLAGS = $(CFLAGS) -UWIN32 -DWATT32 -D_USE_32BIT_TIME_T -I$(WATT_ROOT)\inc
|
||||||
EX_LIBS = $(WATT_ROOT)\lib\wattcpvc_imp.lib
|
EX_LIBS = $(WATT_ROOT)\lib\wattcpvc_imp.lib
|
||||||
|
|
||||||
!else
|
!else
|
||||||
@@ -43,6 +43,8 @@ CFLAGS = $(CFLAGS) -O2 -Og
|
|||||||
LDFLAGS = $(LDFLAGS) -release
|
LDFLAGS = $(LDFLAGS) -release
|
||||||
!endif
|
!endif
|
||||||
|
|
||||||
|
CFLAGS = $(CFLAGS) -I.\.
|
||||||
|
|
||||||
OBJECTS = $(OBJ_DIR)\ares_fds.obj \
|
OBJECTS = $(OBJ_DIR)\ares_fds.obj \
|
||||||
$(OBJ_DIR)\ares_process.obj \
|
$(OBJ_DIR)\ares_process.obj \
|
||||||
$(OBJ_DIR)\ares_free_hostent.obj \
|
$(OBJ_DIR)\ares_free_hostent.obj \
|
||||||
@@ -57,11 +59,14 @@ OBJECTS = $(OBJ_DIR)\ares_fds.obj \
|
|||||||
$(OBJ_DIR)\ares__read_line.obj \
|
$(OBJ_DIR)\ares__read_line.obj \
|
||||||
$(OBJ_DIR)\ares_gethostbyname.obj \
|
$(OBJ_DIR)\ares_gethostbyname.obj \
|
||||||
$(OBJ_DIR)\ares_getnameinfo.obj \
|
$(OBJ_DIR)\ares_getnameinfo.obj \
|
||||||
|
$(OBJ_DIR)\ares_strcasecmp.obj \
|
||||||
$(OBJ_DIR)\ares_strerror.obj \
|
$(OBJ_DIR)\ares_strerror.obj \
|
||||||
$(OBJ_DIR)\ares_cancel.obj \
|
$(OBJ_DIR)\ares_cancel.obj \
|
||||||
$(OBJ_DIR)\ares_init.obj \
|
$(OBJ_DIR)\ares_init.obj \
|
||||||
|
$(OBJ_DIR)\ares_library_init.obj \
|
||||||
$(OBJ_DIR)\ares_llist.obj \
|
$(OBJ_DIR)\ares_llist.obj \
|
||||||
$(OBJ_DIR)\ares_timeout.obj \
|
$(OBJ_DIR)\ares_timeout.obj \
|
||||||
|
$(OBJ_DIR)\ares__timeval.obj \
|
||||||
$(OBJ_DIR)\ares_destroy.obj \
|
$(OBJ_DIR)\ares_destroy.obj \
|
||||||
$(OBJ_DIR)\ares_mkquery.obj \
|
$(OBJ_DIR)\ares_mkquery.obj \
|
||||||
$(OBJ_DIR)\ares_version.obj \
|
$(OBJ_DIR)\ares_version.obj \
|
||||||
@@ -72,6 +77,7 @@ OBJECTS = $(OBJ_DIR)\ares_fds.obj \
|
|||||||
$(OBJ_DIR)\windows_port.obj \
|
$(OBJ_DIR)\windows_port.obj \
|
||||||
$(OBJ_DIR)\ares_expand_string.obj \
|
$(OBJ_DIR)\ares_expand_string.obj \
|
||||||
$(OBJ_DIR)\ares_parse_ptr_reply.obj \
|
$(OBJ_DIR)\ares_parse_ptr_reply.obj \
|
||||||
|
$(OBJ_DIR)\ares_writev.obj \
|
||||||
$(OBJ_DIR)\bitncmp.obj \
|
$(OBJ_DIR)\bitncmp.obj \
|
||||||
$(OBJ_DIR)\inet_net_pton.obj \
|
$(OBJ_DIR)\inet_net_pton.obj \
|
||||||
$(OBJ_DIR)\inet_ntop.obj
|
$(OBJ_DIR)\inet_ntop.obj
|
||||||
@@ -105,11 +111,14 @@ $(DEF_FILE): $(OBJECTS) Makefile.VC6
|
|||||||
@echo ares_getsock >> $@
|
@echo ares_getsock >> $@
|
||||||
@echo ares_init >> $@
|
@echo ares_init >> $@
|
||||||
@echo ares_init_options >> $@
|
@echo ares_init_options >> $@
|
||||||
|
@echo ares_library_init >> $@
|
||||||
|
@echo ares_library_cleanup >> $@
|
||||||
@echo ares_mkquery >> $@
|
@echo ares_mkquery >> $@
|
||||||
@echo ares_parse_a_reply >> $@
|
@echo ares_parse_a_reply >> $@
|
||||||
@echo ares_parse_ptr_reply >> $@
|
@echo ares_parse_ptr_reply >> $@
|
||||||
@echo ares_parse_ns_reply >> $@
|
@echo ares_parse_ns_reply >> $@
|
||||||
@echo ares_process >> $@
|
@echo ares_process >> $@
|
||||||
|
@echo ares_process_fd >> $@
|
||||||
@echo ares_query >> $@
|
@echo ares_query >> $@
|
||||||
@echo ares_search >> $@
|
@echo ares_search >> $@
|
||||||
@echo ares_strerror >> $@
|
@echo ares_strerror >> $@
|
||||||
@@ -120,10 +129,11 @@ $(DEF_FILE): $(OBJECTS) Makefile.VC6
|
|||||||
@echo ares_inet_net_pton >> $@
|
@echo ares_inet_net_pton >> $@
|
||||||
@echo ares_inet_ntop >> $@
|
@echo ares_inet_ntop >> $@
|
||||||
@echo ares_inet_pton >> $@
|
@echo ares_inet_pton >> $@
|
||||||
@echo ares_writev >> $@
|
|
||||||
@echo ares_getnameinfo >> $@
|
@echo ares_getnameinfo >> $@
|
||||||
@echo ares_gettimeofday >> $@
|
|
||||||
@echo ares_parse_aaaa_reply >> $@
|
@echo ares_parse_aaaa_reply >> $@
|
||||||
|
!if "$(USE_WATT32)" == "0"
|
||||||
|
@echo ares_writev >> $@
|
||||||
|
!endif
|
||||||
|
|
||||||
ahost.exe: $(OBJ_DIR) $(OBJ_DIR)\ahost.obj $(OBJ_DIR)\ares_getopt.obj cares_imp.lib
|
ahost.exe: $(OBJ_DIR) $(OBJ_DIR)\ahost.obj $(OBJ_DIR)\ares_getopt.obj cares_imp.lib
|
||||||
link $(LDFLAGS) -out:$@ $(OBJ_DIR)\ahost.obj $(OBJ_DIR)\ares_getopt.obj cares_imp.lib $(EX_LIBS)
|
link $(LDFLAGS) -out:$@ $(OBJ_DIR)\ahost.obj $(OBJ_DIR)\ares_getopt.obj cares_imp.lib $(EX_LIBS)
|
||||||
@@ -138,7 +148,8 @@ clean:
|
|||||||
- del $(OBJ_DIR)\*.obj *.ilk *.pdb *.pbt *.pbi *.pbo *._xe *.map
|
- del $(OBJ_DIR)\*.obj *.ilk *.pdb *.pbt *.pbi *.pbo *._xe *.map
|
||||||
|
|
||||||
vclean realclean: clean
|
vclean realclean: clean
|
||||||
- del $(DEF_FILE) cares.lib cares_imp.* cares.dll ahost.exe adig.exe
|
- del $(DEF_FILE) cares.lib cares_imp.* cares.dll
|
||||||
|
- del ahost.exe adig.exe acountry.exe
|
||||||
- rd $(OBJ_DIR)
|
- rd $(OBJ_DIR)
|
||||||
|
|
||||||
.c{$(OBJ_DIR)}.obj:
|
.c{$(OBJ_DIR)}.obj:
|
||||||
@@ -148,93 +159,116 @@ vclean realclean: clean
|
|||||||
# Copyright "gcc -MM .."
|
# Copyright "gcc -MM .."
|
||||||
#
|
#
|
||||||
$(OBJ_DIR)\ares_fds.obj: ares_fds.c setup.h setup_once.h ares.h ares_private.h \
|
$(OBJ_DIR)\ares_fds.obj: ares_fds.c setup.h setup_once.h ares.h ares_private.h \
|
||||||
ares_ipv6.h
|
ares_ipv6.h ares_build.h ares_rules.h
|
||||||
|
|
||||||
$(OBJ_DIR)\ares_process.obj: ares_process.c setup.h setup_once.h nameser.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
|
ares.h ares_dns.h ares_private.h ares_ipv6.h ares_build.h ares_rules.h
|
||||||
|
|
||||||
$(OBJ_DIR)\ares_free_hostent.obj: ares_free_hostent.c setup.h setup_once.h \
|
$(OBJ_DIR)\ares_free_hostent.obj: ares_free_hostent.c setup.h setup_once.h \
|
||||||
ares.h ares_private.h ares_ipv6.h
|
ares.h ares_private.h ares_ipv6.h ares_build.h ares_rules.h
|
||||||
|
|
||||||
$(OBJ_DIR)\ares_query.obj: ares_query.c setup.h setup_once.h nameser.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
|
ares.h ares_dns.h ares_private.h ares_ipv6.h ares_build.h ares_rules.h
|
||||||
|
|
||||||
$(OBJ_DIR)\ares__close_sockets.obj: ares__close_sockets.c setup.h setup_once.h \
|
$(OBJ_DIR)\ares__close_sockets.obj: ares__close_sockets.c setup.h setup_once.h \
|
||||||
ares.h ares_private.h ares_ipv6.h
|
ares.h ares_private.h ares_ipv6.h ares_build.h ares_rules.h
|
||||||
|
|
||||||
$(OBJ_DIR)\ares_free_string.obj: ares_free_string.c setup.h setup_once.h ares.h
|
$(OBJ_DIR)\ares_free_string.obj: ares_free_string.c setup.h setup_once.h \
|
||||||
|
ares.h ares_build.h ares_rules.h
|
||||||
|
|
||||||
$(OBJ_DIR)\ares_search.obj: ares_search.c setup.h setup_once.h nameser.h \
|
$(OBJ_DIR)\ares_search.obj: ares_search.c setup.h setup_once.h nameser.h \
|
||||||
ares.h ares_private.h ares_ipv6.h
|
ares.h ares_private.h ares_ipv6.h ares_build.h ares_rules.h
|
||||||
|
|
||||||
$(OBJ_DIR)\ares__get_hostent.obj: ares__get_hostent.c setup.h setup_once.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
|
ares.h ares_private.h ares_ipv6.h inet_net_pton.h ares_build.h ares_rules.h
|
||||||
|
|
||||||
$(OBJ_DIR)\ares_gethostbyaddr.obj: ares_gethostbyaddr.c setup.h setup_once.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
|
nameser.h ares.h ares_private.h ares_ipv6.h inet_net_pton.h ares_build.h \
|
||||||
|
ares_rules.h
|
||||||
|
|
||||||
$(OBJ_DIR)\ares_send.obj: ares_send.c setup.h setup_once.h nameser.h ares.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
|
ares_dns.h ares_private.h ares_ipv6.h ares_build.h ares_rules.h
|
||||||
|
|
||||||
$(OBJ_DIR)\ares__read_line.obj: ares__read_line.c setup.h setup_once.h ares.h \
|
$(OBJ_DIR)\ares__read_line.obj: ares__read_line.c setup.h setup_once.h ares.h \
|
||||||
ares_private.h ares_ipv6.h
|
ares_private.h ares_ipv6.h ares_build.h ares_rules.h
|
||||||
|
|
||||||
$(OBJ_DIR)\ares_gethostbyname.obj: ares_gethostbyname.c setup.h setup_once.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
|
nameser.h ares.h ares_private.h ares_ipv6.h inet_net_pton.h bitncmp.h \
|
||||||
|
ares_build.h ares_rules.h
|
||||||
|
|
||||||
$(OBJ_DIR)\ares_strerror.obj: ares_strerror.c setup.h setup_once.h ares.h
|
$(OBJ_DIR)\ares_strcasecmp.obj: ares_strcasecmp.c setup.h setup_once.h ares.h \
|
||||||
|
ares_build.h ares_rules.h
|
||||||
|
|
||||||
|
$(OBJ_DIR)\ares_strerror.obj: ares_strerror.c setup.h setup_once.h ares.h \
|
||||||
|
ares_build.h ares_rules.h
|
||||||
|
|
||||||
$(OBJ_DIR)\ares_cancel.obj: ares_cancel.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
|
ares_private.h ares_ipv6.h ares_build.h ares_rules.h
|
||||||
|
|
||||||
$(OBJ_DIR)\ares_init.obj: ares_init.c setup.h setup_once.h nameser.h ares.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
|
ares_private.h ares_ipv6.h inet_net_pton.h ares_build.h ares_rules.h \
|
||||||
|
ares_library_init.h
|
||||||
|
|
||||||
$(OBJ_DIR)\ares_timeout.obj: ares_timeout.c setup.h setup_once.h ares.h \
|
$(OBJ_DIR)\ares_timeout.obj: ares_timeout.c setup.h setup_once.h ares.h \
|
||||||
ares_private.h ares_ipv6.h
|
ares_private.h ares_ipv6.h ares_build.h ares_rules.h
|
||||||
|
|
||||||
|
$(OBJ_DIR)\ares__timeval.obj: ares__timeval.c setup.h setup_once.h ares.h \
|
||||||
|
ares_private.h ares_ipv6.h ares_build.h ares_rules.h
|
||||||
|
|
||||||
$(OBJ_DIR)\ares_destroy.obj: ares_destroy.c setup.h setup_once.h ares.h \
|
$(OBJ_DIR)\ares_destroy.obj: ares_destroy.c setup.h setup_once.h ares.h \
|
||||||
ares_private.h ares_ipv6.h
|
ares_private.h ares_ipv6.h ares_build.h ares_rules.h
|
||||||
|
|
||||||
$(OBJ_DIR)\ares_mkquery.obj: ares_mkquery.c setup.h setup_once.h nameser.h \
|
$(OBJ_DIR)\ares_mkquery.obj: ares_mkquery.c setup.h setup_once.h nameser.h \
|
||||||
ares.h ares_dns.h
|
ares.h ares_dns.h ares_build.h ares_rules.h
|
||||||
|
|
||||||
$(OBJ_DIR)\ares_version.obj: ares_version.c setup.h setup_once.h ares_version.h
|
$(OBJ_DIR)\ares_version.obj: ares_version.c setup.h setup_once.h ares.h \
|
||||||
|
ares_version.h ares_build.h ares_rules.h
|
||||||
|
|
||||||
$(OBJ_DIR)\ares_expand_name.obj: ares_expand_name.c setup.h setup_once.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
|
nameser.h ares.h ares_private.h ares_ipv6.h ares_build.h ares_rules.h
|
||||||
|
|
||||||
$(OBJ_DIR)\ares_parse_a_reply.obj: ares_parse_a_reply.c setup.h setup_once.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
|
nameser.h ares.h ares_dns.h ares_private.h ares_ipv6.h ares_build.h \
|
||||||
|
ares_rules.h
|
||||||
|
|
||||||
$(OBJ_DIR)\windows_port.obj: windows_port.c setup.h setup_once.h nameser.h \
|
$(OBJ_DIR)\windows_port.obj: windows_port.c setup.h setup_once.h nameser.h \
|
||||||
ares.h ares_private.h ares_ipv6.h
|
ares.h ares_private.h ares_ipv6.h ares_build.h ares_rules.h
|
||||||
|
|
||||||
$(OBJ_DIR)\ares_expand_string.obj: ares_expand_string.c setup.h setup_once.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
|
nameser.h ares.h ares_private.h ares_ipv6.h ares_build.h ares_rules.h
|
||||||
|
|
||||||
$(OBJ_DIR)\ares_parse_ptr_reply.obj: ares_parse_ptr_reply.c setup.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
|
setup_once.h nameser.h ares.h ares_dns.h ares_private.h ares_ipv6.h \
|
||||||
|
ares_build.h ares_rules.h
|
||||||
|
|
||||||
$(OBJ_DIR)\ares_parse_aaaa_reply.obj: ares_parse_aaaa_reply.c setup.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 \
|
setup_once.h nameser.h ares.h ares_dns.h inet_net_pton.h ares_private.h \
|
||||||
ares_ipv6.h
|
ares_ipv6.h ares_build.h ares_rules.h
|
||||||
|
|
||||||
$(OBJ_DIR)\ares_parse_ns_reply.obj: ares_parse_ns_reply.c setup.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
|
setup_once.h nameser.h ares.h ares_dns.h ares_private.h ares_ipv6.h \
|
||||||
|
ares_build.h ares_rules.h
|
||||||
|
|
||||||
$(OBJ_DIR)\ares_getnameinfo.obj: ares_getnameinfo.c setup.h setup_once.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
|
nameser.h ares.h ares_private.h ares_ipv6.h inet_ntop.h ares_build.h \
|
||||||
|
ares_rules.h
|
||||||
|
|
||||||
$(OBJ_DIR)\inet_net_pton.obj: inet_net_pton.c setup.h setup_once.h nameser.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
|
ares_ipv6.h inet_net_pton.h ares_build.h ares_rules.h
|
||||||
|
|
||||||
$(OBJ_DIR)\bitncmp.obj: bitncmp.c bitncmp.h
|
$(OBJ_DIR)\bitncmp.obj: bitncmp.c bitncmp.h ares_build.h ares_rules.h
|
||||||
|
|
||||||
$(OBJ_DIR)\inet_ntop.obj: inet_ntop.c setup.h setup_once.h nameser.h \
|
$(OBJ_DIR)\inet_ntop.obj: inet_ntop.c setup.h setup_once.h nameser.h \
|
||||||
ares_ipv6.h inet_ntop.h
|
ares_ipv6.h inet_ntop.h ares_build.h ares_rules.h
|
||||||
|
|
||||||
$(OBJ_DIR)\ares_getopt.obj: ares_getopt.c ares_getopt.h
|
$(OBJ_DIR)\ares_getopt.obj: ares_getopt.c ares_getopt.h ares_build.h \
|
||||||
|
ares_rules.h
|
||||||
|
|
||||||
|
$(OBJ_DIR)\ares_library_init.obj: ares_library_init.c setup.h setup_once.h \
|
||||||
|
ares.h ares_private.h ares_library_init.h ares_build.h ares_rules.h
|
||||||
|
|
||||||
$(OBJ_DIR)\ares_llist.obj: ares_llist.c setup.h setup_once.h ares.h \
|
$(OBJ_DIR)\ares_llist.obj: ares_llist.c setup.h setup_once.h ares.h \
|
||||||
ares_private.h ares_llist.h
|
ares_private.h ares_llist.h ares_build.h ares_rules.h
|
||||||
|
|
||||||
|
$(OBJ_DIR)\ares_writev.obj: ares_writev.c setup.h setup_once.h ares.h \
|
||||||
|
ares_writev.h ares_build.h ares_rules.h
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ call ares_process() when select() returns.
|
|||||||
Some features are missing from the current version of ares, relative
|
Some features are missing from the current version of ares, relative
|
||||||
to the BIND resolver:
|
to the BIND resolver:
|
||||||
|
|
||||||
* There is no IPV6 support.
|
* There is no IPV6 support. [not true for c-ares]
|
||||||
* There is no hostname verification.
|
* There is no hostname verification.
|
||||||
* There is no logging of unexpected events.
|
* There is no logging of unexpected events.
|
||||||
* There is no debugging-oriented logging.
|
* There is no debugging-oriented logging.
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ c-ares is not API compatible with ares: a new name makes that more obvious to
|
|||||||
the public.
|
the public.
|
||||||
|
|
||||||
The full source code is available in the 'c-ares' release archives, and in the
|
The full source code is available in the 'c-ares' release archives, and in the
|
||||||
'ares' subdir of the curl CVS source repostitory.
|
'ares' subdir of the curl CVS source repository.
|
||||||
|
|
||||||
If you find bugs, correct flaws, have questions or have comments in general in
|
If you find bugs, correct flaws, have questions or have comments in general in
|
||||||
regard to c-ares (or by all means the original ares too), get in touch with us
|
regard to c-ares (or by all means the original ares too), get in touch with us
|
||||||
@@ -22,4 +22,42 @@ original ares.
|
|||||||
|
|
||||||
You'll find all c-ares details and news here:
|
You'll find all c-ares details and news here:
|
||||||
|
|
||||||
http://daniel.haxx.se/projects/c-ares
|
http://c-ares.haxx.se/
|
||||||
|
|
||||||
|
|
||||||
|
NOTES FOR C-ARES HACKERS
|
||||||
|
|
||||||
|
The following notes apply to c-ares version 1.6.1 and later.
|
||||||
|
|
||||||
|
* The distributed ares_build.h file is only intended to be used on systems
|
||||||
|
which can not run the also distributed configure script.
|
||||||
|
|
||||||
|
* The distributed ares_build.h file is generated as a copy of ares_build.h.dist
|
||||||
|
when the c-ares source code distribution archive file is originally created.
|
||||||
|
|
||||||
|
* If you check out from CVS on a non-configure platform, you must run the
|
||||||
|
appropriate buildconf* script to set up ares_build.h and other local files
|
||||||
|
before being able of compiling the library.
|
||||||
|
|
||||||
|
* On systems capable of running the configure script, the configure process
|
||||||
|
will overwrite the distributed ares_build.h file with one that is suitable
|
||||||
|
and specific to the library being configured and built, this new file is
|
||||||
|
generated from the ares_build.h.in template file.
|
||||||
|
|
||||||
|
* If you intend to distribute an already compiled c-ares library you _MUST_
|
||||||
|
also distribute along with it the generated ares_build.h which has been
|
||||||
|
used to compile it. Otherwise the library will be of no use for the users of
|
||||||
|
the library that you have built. It is _your_ responsability to provide this
|
||||||
|
file. No one at the c-ares project can know how you have built the library.
|
||||||
|
|
||||||
|
* File ares_build.h includes platform and configuration dependant info,
|
||||||
|
and must not be modified by anyone. Configure script generates it for you.
|
||||||
|
|
||||||
|
* We cannot assume anything else but very basic compiler features being
|
||||||
|
present. While c-ares requires an ANSI C compiler to build, some of the
|
||||||
|
earlier ANSI compilers clearly can't deal with some preprocessor operators.
|
||||||
|
|
||||||
|
* Newlines must remain unix-style for older compilers' sake.
|
||||||
|
|
||||||
|
* Comments must be written in the old-style /* unnested C-fashion */
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,21 @@
|
|||||||
This is what's new and changed in the c-ares 1.5.2 release:
|
This is what's new and changed in the c-ares 1.6.1 release:
|
||||||
|
|
||||||
o
|
Changed:
|
||||||
|
|
||||||
|
o in6_addr is not used in ares.h anymore, but a private ares_in6_addr is
|
||||||
|
instead declared and used
|
||||||
|
o ares_gethostbyname() now supports 'AF_UNSPEC' as a family for resolving
|
||||||
|
either AF_INET6 or AF_INET
|
||||||
|
o a build-time configured ares_socklen_t is now used instead of socklen_t
|
||||||
|
|
||||||
|
Fixed:
|
||||||
|
|
||||||
|
o ares_parse_*_reply() functions now return ARES_EBADRESP instead of
|
||||||
|
ARES_EBADNAME if the name in the response failed to decode
|
||||||
|
o only expose/export symbols starting with 'ares_'
|
||||||
|
|
||||||
Thanks go to these friendly people for their efforts and contributions:
|
Thanks go to these friendly people for their efforts and contributions:
|
||||||
|
|
||||||
|
Phil Blundell, Japheth Cleaver, Yang Tse, Gregor Jasny
|
||||||
|
|
||||||
Have fun!
|
Have fun!
|
||||||
|
|||||||
8
ares/TODO
Normal file
8
ares/TODO
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
TODO
|
||||||
|
====
|
||||||
|
|
||||||
|
ares_gethostbyname
|
||||||
|
|
||||||
|
- When built to support IPv6, it needs to also support PF_UNSPEC or similar,
|
||||||
|
so that an application can ask for any protocol and then c-ares would return
|
||||||
|
all known resolves and not just explicitly IPv4 _or_ IPv6 resolves.
|
||||||
1553
ares/acinclude.m4
1553
ares/acinclude.m4
File diff suppressed because it is too large
Load Diff
@@ -43,10 +43,14 @@
|
|||||||
#ifdef HAVE_UNISTD_H
|
#ifdef HAVE_UNISTD_H
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef HAVE_STRINGS_H
|
||||||
|
#include <strings.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(WIN32)
|
#if defined(WIN32) && !defined(WATT32)
|
||||||
#include <winsock.h>
|
#include <winsock.h>
|
||||||
#else
|
#else
|
||||||
|
#include <sys/socket.h>
|
||||||
#include <arpa/inet.h>
|
#include <arpa/inet.h>
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
#include <netdb.h>
|
#include <netdb.h>
|
||||||
@@ -57,6 +61,25 @@
|
|||||||
#include "inet_net_pton.h"
|
#include "inet_net_pton.h"
|
||||||
#include "inet_ntop.h"
|
#include "inet_ntop.h"
|
||||||
|
|
||||||
|
#ifndef HAVE_STRDUP
|
||||||
|
# include "ares_strdup.h"
|
||||||
|
# define strdup(ptr) ares_strdup(ptr)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef HAVE_STRCASECMP
|
||||||
|
# include "ares_strcasecmp.h"
|
||||||
|
# define strcasecmp(p1,p2) ares_strcasecmp(p1,p2)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef HAVE_STRNCASECMP
|
||||||
|
# include "ares_strcasecmp.h"
|
||||||
|
# define strncasecmp(p1,p2,n) ares_strncasecmp(p1,p2,n)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef INADDR_NONE
|
||||||
|
#define INADDR_NONE 0xffffffff
|
||||||
|
#endif
|
||||||
|
|
||||||
static const char *usage = "acountry [-vh?] {host|addr} ...\n";
|
static const char *usage = "acountry [-vh?] {host|addr} ...\n";
|
||||||
static const char nerd_fmt[] = "%u.%u.%u.%u.zz.countries.nerd.dk";
|
static const char nerd_fmt[] = "%u.%u.%u.%u.zz.countries.nerd.dk";
|
||||||
static const char *nerd_ver1 = nerd_fmt + 14;
|
static const char *nerd_ver1 = nerd_fmt + 14;
|
||||||
@@ -87,12 +110,19 @@ int main(int argc, char **argv)
|
|||||||
ares_channel channel;
|
ares_channel channel;
|
||||||
int ch, status;
|
int ch, status;
|
||||||
|
|
||||||
#ifdef WIN32
|
#if defined(WIN32) && !defined(WATT32)
|
||||||
WORD wVersionRequested = MAKEWORD(USE_WINSOCK,USE_WINSOCK);
|
WORD wVersionRequested = MAKEWORD(USE_WINSOCK,USE_WINSOCK);
|
||||||
WSADATA wsaData;
|
WSADATA wsaData;
|
||||||
WSAStartup(wVersionRequested, &wsaData);
|
WSAStartup(wVersionRequested, &wsaData);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
status = ares_library_init(ARES_LIB_INIT_ALL);
|
||||||
|
if (status != ARES_SUCCESS)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "ares_library_init: %s\n", ares_strerror(status));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
while ((ch = ares_getopt(argc, argv, "dvh?")) != -1)
|
while ((ch = ares_getopt(argc, argv, "dvh?")) != -1)
|
||||||
switch (ch)
|
switch (ch)
|
||||||
{
|
{
|
||||||
@@ -155,7 +185,9 @@ int main(int argc, char **argv)
|
|||||||
wait_ares(channel);
|
wait_ares(channel);
|
||||||
ares_destroy(channel);
|
ares_destroy(channel);
|
||||||
|
|
||||||
#ifdef WIN32
|
ares_library_cleanup();
|
||||||
|
|
||||||
|
#if defined(WIN32) && !defined(WATT32)
|
||||||
WSACleanup();
|
WSACleanup();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -233,7 +265,7 @@ struct search_list {
|
|||||||
const char *long_name; /* normal country name */
|
const char *long_name; /* normal country name */
|
||||||
};
|
};
|
||||||
|
|
||||||
const struct search_list *list_lookup(int number, const struct search_list *list, int num)
|
static const struct search_list *list_lookup(int number, const struct search_list *list, int num)
|
||||||
{
|
{
|
||||||
while (num > 0 && list->long_name)
|
while (num > 0 && list->long_name)
|
||||||
{
|
{
|
||||||
@@ -501,7 +533,8 @@ static int is_addr(char *str, char **end)
|
|||||||
{
|
{
|
||||||
int a0, a1, a2, a3, num, rc = 0, length = 0;
|
int a0, a1, a2, a3, num, rc = 0, length = 0;
|
||||||
|
|
||||||
if ((num = sscanf(str,"%3d.%3d.%3d.%3d%n",&a0,&a1,&a2,&a3,&length)) == 4 &&
|
num = sscanf(str,"%3d.%3d.%3d.%3d%n",&a0,&a1,&a2,&a3,&length);
|
||||||
|
if( (num == 4) &&
|
||||||
BYTE_OK(a0) && BYTE_OK(a1) && BYTE_OK(a2) && BYTE_OK(a3) &&
|
BYTE_OK(a0) && BYTE_OK(a1) && BYTE_OK(a2) && BYTE_OK(a3) &&
|
||||||
length >= (3+4))
|
length >= (3+4))
|
||||||
{
|
{
|
||||||
@@ -523,12 +556,13 @@ static void find_country_from_cname(const char *cname, struct in_addr addr)
|
|||||||
const struct search_list *country;
|
const struct search_list *country;
|
||||||
char ccode_A2[3], *ccopy, *dot_4;
|
char ccode_A2[3], *ccopy, *dot_4;
|
||||||
int cnumber, z0, z1, ver_1, ver_2;
|
int cnumber, z0, z1, ver_1, ver_2;
|
||||||
u_long ip;
|
unsigned long ip;
|
||||||
|
|
||||||
ip = ntohl(addr.s_addr);
|
ip = ntohl(addr.s_addr);
|
||||||
z0 = tolower(cname[0]);
|
z0 = tolower(cname[0]);
|
||||||
z1 = tolower(cname[1]);
|
z1 = tolower(cname[1]);
|
||||||
ccopy = strdup(cname);
|
ccopy = strdup(cname);
|
||||||
|
dot_4 = NULL;
|
||||||
|
|
||||||
ver_1 = (z0 == 'z' && z1 == 'z' && !strcasecmp(cname+4,nerd_ver1));
|
ver_1 = (z0 == 'z' && z1 == 'z' && !strcasecmp(cname+4,nerd_ver1));
|
||||||
ver_2 = (is_addr(ccopy,&dot_4) && !strcasecmp(dot_4,nerd_ver2));
|
ver_2 = (is_addr(ccopy,&dot_4) && !strcasecmp(dot_4,nerd_ver2));
|
||||||
@@ -560,8 +594,8 @@ static void find_country_from_cname(const char *cname, struct in_addr addr)
|
|||||||
|
|
||||||
if (ver_1)
|
if (ver_1)
|
||||||
{
|
{
|
||||||
ccode_A2[0] = tolower(cname[2]);
|
ccode_A2[0] = (char)tolower(cname[2]);
|
||||||
ccode_A2[1] = tolower(cname[3]);
|
ccode_A2[1] = (char)tolower(cname[3]);
|
||||||
ccode_A2[2] = '\0';
|
ccode_A2[2] = '\0';
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
168
ares/adig.c
168
ares/adig.c
@@ -17,20 +17,35 @@
|
|||||||
|
|
||||||
#include "setup.h"
|
#include "setup.h"
|
||||||
|
|
||||||
#if defined(WIN32) && !defined(WATT32)
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
#include "nameser.h"
|
# include <sys/socket.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_NETINET_IN_H
|
||||||
|
# include <netinet/in.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_ARPA_INET_H
|
||||||
|
# include <arpa/inet.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_NETDB_H
|
||||||
|
# include <netdb.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_ARPA_NAMESER_H
|
||||||
|
# include <arpa/nameser.h>
|
||||||
#else
|
#else
|
||||||
|
# include "nameser.h"
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
|
||||||
|
# include <arpa/nameser_compat.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_SYS_TIME_H
|
#ifdef HAVE_SYS_TIME_H
|
||||||
#include <sys/time.h>
|
# include <sys/time.h>
|
||||||
#endif
|
#endif
|
||||||
#include <sys/socket.h>
|
|
||||||
#include <netinet/in.h>
|
|
||||||
#include <arpa/inet.h>
|
|
||||||
#include <arpa/nameser.h>
|
|
||||||
#ifdef HAVE_UNISTD_H
|
#ifdef HAVE_UNISTD_H
|
||||||
#include <unistd.h>
|
# include <unistd.h>
|
||||||
#endif
|
#endif
|
||||||
#include <netdb.h>
|
#ifdef HAVE_STRINGS_H
|
||||||
|
# include <strings.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
@@ -42,8 +57,24 @@
|
|||||||
#include "ares.h"
|
#include "ares.h"
|
||||||
#include "ares_dns.h"
|
#include "ares_dns.h"
|
||||||
#include "inet_ntop.h"
|
#include "inet_ntop.h"
|
||||||
|
#include "inet_net_pton.h"
|
||||||
#include "ares_getopt.h"
|
#include "ares_getopt.h"
|
||||||
|
|
||||||
|
#ifndef HAVE_STRDUP
|
||||||
|
# include "ares_strdup.h"
|
||||||
|
# define strdup(ptr) ares_strdup(ptr)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef HAVE_STRCASECMP
|
||||||
|
# include "ares_strcasecmp.h"
|
||||||
|
# define strcasecmp(p1,p2) ares_strcasecmp(p1,p2)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef HAVE_STRNCASECMP
|
||||||
|
# include "ares_strcasecmp.h"
|
||||||
|
# define strncasecmp(p1,p2,n) ares_strncasecmp(p1,p2,n)
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef WATT32
|
#ifdef WATT32
|
||||||
#undef WIN32 /* Redefined in MingW headers */
|
#undef WIN32 /* Redefined in MingW headers */
|
||||||
#endif
|
#endif
|
||||||
@@ -110,6 +141,7 @@ static const struct nv types[] = {
|
|||||||
{ "AXFR", T_AXFR },
|
{ "AXFR", T_AXFR },
|
||||||
{ "MAILB", T_MAILB },
|
{ "MAILB", T_MAILB },
|
||||||
{ "MAILA", T_MAILA },
|
{ "MAILA", T_MAILA },
|
||||||
|
{ "NAPTR", T_NAPTR },
|
||||||
{ "ANY", T_ANY }
|
{ "ANY", T_ANY }
|
||||||
};
|
};
|
||||||
static const int ntypes = sizeof(types) / sizeof(types[0]);
|
static const int ntypes = sizeof(types) / sizeof(types[0]);
|
||||||
@@ -120,6 +152,7 @@ static const char *opcodes[] = {
|
|||||||
"UPDATEA", "UPDATED", "UPDATEDA", "UPDATEM", "UPDATEMA",
|
"UPDATEA", "UPDATED", "UPDATEDA", "UPDATEM", "UPDATEMA",
|
||||||
"ZONEINIT", "ZONEREF"
|
"ZONEINIT", "ZONEREF"
|
||||||
};
|
};
|
||||||
|
struct in_addr inaddr;
|
||||||
|
|
||||||
static const char *rcodes[] = {
|
static const char *rcodes[] = {
|
||||||
"NOERROR", "FORMERR", "SERVFAIL", "NXDOMAIN", "NOTIMP", "REFUSED",
|
"NOERROR", "FORMERR", "SERVFAIL", "NXDOMAIN", "NOTIMP", "REFUSED",
|
||||||
@@ -154,6 +187,13 @@ int main(int argc, char **argv)
|
|||||||
WSAStartup(wVersionRequested, &wsaData);
|
WSAStartup(wVersionRequested, &wsaData);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
status = ares_library_init(ARES_LIB_INIT_ALL);
|
||||||
|
if (status != ARES_SUCCESS)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "ares_library_init: %s\n", ares_strerror(status));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
options.flags = ARES_FLAG_NOCHECKRESP;
|
options.flags = ARES_FLAG_NOCHECKRESP;
|
||||||
options.servers = NULL;
|
options.servers = NULL;
|
||||||
options.nservers = 0;
|
options.nservers = 0;
|
||||||
@@ -181,11 +221,15 @@ int main(int argc, char **argv)
|
|||||||
|
|
||||||
case 's':
|
case 's':
|
||||||
/* Add a server, and specify servers in the option mask. */
|
/* Add a server, and specify servers in the option mask. */
|
||||||
hostent = gethostbyname(optarg);
|
if (ares_inet_pton(AF_INET, optarg, &inaddr) <= 0)
|
||||||
if (!hostent || hostent->h_addrtype != AF_INET)
|
|
||||||
{
|
{
|
||||||
fprintf(stderr, "adig: server %s not found.\n", optarg);
|
hostent = gethostbyname(optarg);
|
||||||
return 1;
|
if (!hostent || hostent->h_addrtype != AF_INET)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "adig: server %s not found.\n", optarg);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
memcpy(&inaddr, hostent->h_addr, sizeof(struct in_addr));
|
||||||
}
|
}
|
||||||
options.servers = realloc(options.servers, (options.nservers + 1)
|
options.servers = realloc(options.servers, (options.nservers + 1)
|
||||||
* sizeof(struct in_addr));
|
* sizeof(struct in_addr));
|
||||||
@@ -194,7 +238,7 @@ int main(int argc, char **argv)
|
|||||||
fprintf(stderr, "Out of memory!\n");
|
fprintf(stderr, "Out of memory!\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
memcpy(&options.servers[options.nservers], hostent->h_addr,
|
memcpy(&options.servers[options.nservers], &inaddr,
|
||||||
sizeof(struct in_addr));
|
sizeof(struct in_addr));
|
||||||
options.nservers++;
|
options.nservers++;
|
||||||
optmask |= ARES_OPT_SERVERS;
|
optmask |= ARES_OPT_SERVERS;
|
||||||
@@ -288,6 +332,8 @@ int main(int argc, char **argv)
|
|||||||
|
|
||||||
ares_destroy(channel);
|
ares_destroy(channel);
|
||||||
|
|
||||||
|
ares_library_cleanup();
|
||||||
|
|
||||||
#ifdef USE_WINSOCK
|
#ifdef USE_WINSOCK
|
||||||
WSACleanup();
|
WSACleanup();
|
||||||
#endif
|
#endif
|
||||||
@@ -303,6 +349,8 @@ static void callback(void *arg, int status, int timeouts,
|
|||||||
unsigned int qdcount, ancount, nscount, arcount, i;
|
unsigned int qdcount, ancount, nscount, arcount, i;
|
||||||
const unsigned char *aptr;
|
const unsigned char *aptr;
|
||||||
|
|
||||||
|
(void) timeouts;
|
||||||
|
|
||||||
/* Display the query name if given. */
|
/* Display the query name if given. */
|
||||||
if (name)
|
if (name)
|
||||||
printf("Answer for query %s:\n", name);
|
printf("Answer for query %s:\n", name);
|
||||||
@@ -427,13 +475,16 @@ static const unsigned char *display_rr(const unsigned char *aptr,
|
|||||||
const unsigned char *abuf, int alen)
|
const unsigned char *abuf, int alen)
|
||||||
{
|
{
|
||||||
const unsigned char *p;
|
const unsigned char *p;
|
||||||
char *name;
|
|
||||||
int type, dnsclass, ttl, dlen, status;
|
int type, dnsclass, ttl, dlen, status;
|
||||||
long len;
|
long len;
|
||||||
char addr[46];
|
char addr[46];
|
||||||
|
union {
|
||||||
|
unsigned char * as_uchar;
|
||||||
|
char * as_char;
|
||||||
|
} name;
|
||||||
|
|
||||||
/* 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.as_char, &len);
|
||||||
if (status != ARES_SUCCESS)
|
if (status != ARES_SUCCESS)
|
||||||
return NULL;
|
return NULL;
|
||||||
aptr += len;
|
aptr += len;
|
||||||
@@ -443,7 +494,7 @@ static const unsigned char *display_rr(const unsigned char *aptr,
|
|||||||
*/
|
*/
|
||||||
if (aptr + RRFIXEDSZ > abuf + alen)
|
if (aptr + RRFIXEDSZ > abuf + alen)
|
||||||
{
|
{
|
||||||
ares_free_string(name);
|
ares_free_string(name.as_char);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -456,16 +507,16 @@ static const unsigned char *display_rr(const unsigned char *aptr,
|
|||||||
aptr += RRFIXEDSZ;
|
aptr += RRFIXEDSZ;
|
||||||
if (aptr + dlen > abuf + alen)
|
if (aptr + dlen > abuf + alen)
|
||||||
{
|
{
|
||||||
ares_free_string(name);
|
ares_free_string(name.as_char);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Display the RR name, class, and type. */
|
/* Display the RR name, class, and type. */
|
||||||
printf("\t%-15s.\t%d", name, ttl);
|
printf("\t%-15s.\t%d", name.as_char, ttl);
|
||||||
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));
|
||||||
ares_free_string(name);
|
ares_free_string(name.as_char);
|
||||||
|
|
||||||
/* Display the RR data. Don't touch aptr. */
|
/* Display the RR data. Don't touch aptr. */
|
||||||
switch (type)
|
switch (type)
|
||||||
@@ -479,11 +530,11 @@ static const unsigned char *display_rr(const unsigned char *aptr,
|
|||||||
case T_NS:
|
case T_NS:
|
||||||
case T_PTR:
|
case T_PTR:
|
||||||
/* For these types, the RR data is just a domain name. */
|
/* For these types, the RR data is just a domain name. */
|
||||||
status = ares_expand_name(aptr, abuf, alen, &name, &len);
|
status = ares_expand_name(aptr, abuf, alen, &name.as_char, &len);
|
||||||
if (status != ARES_SUCCESS)
|
if (status != ARES_SUCCESS)
|
||||||
return NULL;
|
return NULL;
|
||||||
printf("\t%s.", name);
|
printf("\t%s.", name.as_char);
|
||||||
ares_free_string(name);
|
ares_free_string(name.as_char);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case T_HINFO:
|
case T_HINFO:
|
||||||
@@ -503,17 +554,17 @@ static const unsigned char *display_rr(const unsigned char *aptr,
|
|||||||
case T_MINFO:
|
case T_MINFO:
|
||||||
/* The RR data is two domain names. */
|
/* The RR data is two domain names. */
|
||||||
p = aptr;
|
p = aptr;
|
||||||
status = ares_expand_name(p, abuf, alen, &name, &len);
|
status = ares_expand_name(p, abuf, alen, &name.as_char, &len);
|
||||||
if (status != ARES_SUCCESS)
|
if (status != ARES_SUCCESS)
|
||||||
return NULL;
|
return NULL;
|
||||||
printf("\t%s.", name);
|
printf("\t%s.", name.as_char);
|
||||||
ares_free_string(name);
|
ares_free_string(name.as_char);
|
||||||
p += len;
|
p += len;
|
||||||
status = ares_expand_name(p, abuf, alen, &name, &len);
|
status = ares_expand_name(p, abuf, alen, &name.as_char, &len);
|
||||||
if (status != ARES_SUCCESS)
|
if (status != ARES_SUCCESS)
|
||||||
return NULL;
|
return NULL;
|
||||||
printf("\t%s.", name);
|
printf("\t%s.", name.as_char);
|
||||||
ares_free_string(name);
|
ares_free_string(name.as_char);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case T_MX:
|
case T_MX:
|
||||||
@@ -523,11 +574,11 @@ static const unsigned char *display_rr(const unsigned char *aptr,
|
|||||||
if (dlen < 2)
|
if (dlen < 2)
|
||||||
return NULL;
|
return NULL;
|
||||||
printf("\t%d", DNS__16BIT(aptr));
|
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.as_char, &len);
|
||||||
if (status != ARES_SUCCESS)
|
if (status != ARES_SUCCESS)
|
||||||
return NULL;
|
return NULL;
|
||||||
printf("\t%s.", name);
|
printf("\t%s.", name.as_char);
|
||||||
ares_free_string(name);
|
ares_free_string(name.as_char);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case T_SOA:
|
case T_SOA:
|
||||||
@@ -535,17 +586,17 @@ static const unsigned char *display_rr(const unsigned char *aptr,
|
|||||||
* numbers giving the serial number and some timeouts.
|
* numbers giving the serial number and some timeouts.
|
||||||
*/
|
*/
|
||||||
p = aptr;
|
p = aptr;
|
||||||
status = ares_expand_name(p, abuf, alen, &name, &len);
|
status = ares_expand_name(p, abuf, alen, &name.as_char, &len);
|
||||||
if (status != ARES_SUCCESS)
|
if (status != ARES_SUCCESS)
|
||||||
return NULL;
|
return NULL;
|
||||||
printf("\t%s.\n", name);
|
printf("\t%s.\n", name.as_char);
|
||||||
ares_free_string(name);
|
ares_free_string(name.as_char);
|
||||||
p += len;
|
p += len;
|
||||||
status = ares_expand_name(p, abuf, alen, &name, &len);
|
status = ares_expand_name(p, abuf, alen, &name.as_char, &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.as_char);
|
||||||
ares_free_string(name);
|
ares_free_string(name.as_char);
|
||||||
p += len;
|
p += len;
|
||||||
if (p + 20 > aptr + dlen)
|
if (p + 20 > aptr + dlen)
|
||||||
return NULL;
|
return NULL;
|
||||||
@@ -596,13 +647,48 @@ static const unsigned char *display_rr(const unsigned char *aptr,
|
|||||||
printf(" %d", DNS__16BIT(aptr + 2));
|
printf(" %d", DNS__16BIT(aptr + 2));
|
||||||
printf(" %d", DNS__16BIT(aptr + 4));
|
printf(" %d", DNS__16BIT(aptr + 4));
|
||||||
|
|
||||||
status = ares_expand_name(aptr + 6, abuf, alen, &name, &len);
|
status = ares_expand_name(aptr + 6, abuf, alen, &name.as_char, &len);
|
||||||
if (status != ARES_SUCCESS)
|
if (status != ARES_SUCCESS)
|
||||||
return NULL;
|
return NULL;
|
||||||
printf("\t%s.", name);
|
printf("\t%s.", name.as_char);
|
||||||
ares_free_string(name);
|
ares_free_string(name.as_char);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case T_NAPTR:
|
||||||
|
|
||||||
|
printf("\t%d", DNS__16BIT(aptr)); /* order */
|
||||||
|
printf(" %d\n", DNS__16BIT(aptr + 2)); /* preference */
|
||||||
|
|
||||||
|
p = aptr + 4;
|
||||||
|
status = ares_expand_string(p, abuf, alen, &name.as_uchar, &len);
|
||||||
|
if (status != ARES_SUCCESS)
|
||||||
|
return NULL;
|
||||||
|
printf("\t\t\t\t\t\t%s\n", name.as_char);
|
||||||
|
ares_free_string(name.as_char);
|
||||||
|
p += len;
|
||||||
|
|
||||||
|
status = ares_expand_string(p, abuf, alen, &name.as_uchar, &len);
|
||||||
|
if (status != ARES_SUCCESS)
|
||||||
|
return NULL;
|
||||||
|
printf("\t\t\t\t\t\t%s\n", name.as_char);
|
||||||
|
ares_free_string(name.as_char);
|
||||||
|
p += len;
|
||||||
|
|
||||||
|
status = ares_expand_string(p, abuf, alen, &name.as_uchar, &len);
|
||||||
|
if (status != ARES_SUCCESS)
|
||||||
|
return NULL;
|
||||||
|
printf("\t\t\t\t\t\t%s\n", name.as_char);
|
||||||
|
ares_free_string(name.as_char);
|
||||||
|
p += len;
|
||||||
|
|
||||||
|
status = ares_expand_string(p, abuf, alen, &name.as_uchar, &len);
|
||||||
|
if (status != ARES_SUCCESS)
|
||||||
|
return NULL;
|
||||||
|
printf("\t\t\t\t\t\t%s", name.as_char);
|
||||||
|
ares_free_string(name.as_char);
|
||||||
|
break;
|
||||||
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
printf("\t[Unknown RR; cannot parse]");
|
printf("\t[Unknown RR; cannot parse]");
|
||||||
break;
|
break;
|
||||||
|
|||||||
30
ares/ahost.c
30
ares/ahost.c
@@ -29,6 +29,9 @@
|
|||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef HAVE_STRINGS_H
|
||||||
|
#include <strings.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@@ -39,6 +42,22 @@
|
|||||||
#include "inet_ntop.h"
|
#include "inet_ntop.h"
|
||||||
#include "inet_net_pton.h"
|
#include "inet_net_pton.h"
|
||||||
#include "ares_getopt.h"
|
#include "ares_getopt.h"
|
||||||
|
#include "ares_ipv6.h"
|
||||||
|
|
||||||
|
#ifndef HAVE_STRDUP
|
||||||
|
# include "ares_strdup.h"
|
||||||
|
# define strdup(ptr) ares_strdup(ptr)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef HAVE_STRCASECMP
|
||||||
|
# include "ares_strcasecmp.h"
|
||||||
|
# define strcasecmp(p1,p2) ares_strcasecmp(p1,p2)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef HAVE_STRNCASECMP
|
||||||
|
# include "ares_strcasecmp.h"
|
||||||
|
# define strncasecmp(p1,p2,n) ares_strncasecmp(p1,p2,n)
|
||||||
|
#endif
|
||||||
|
|
||||||
static void callback(void *arg, int status, int timeouts, struct hostent *host);
|
static void callback(void *arg, int status, int timeouts, struct hostent *host);
|
||||||
static void usage(void);
|
static void usage(void);
|
||||||
@@ -58,6 +77,13 @@ int main(int argc, char **argv)
|
|||||||
WSAStartup(wVersionRequested, &wsaData);
|
WSAStartup(wVersionRequested, &wsaData);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
status = ares_library_init(ARES_LIB_INIT_ALL);
|
||||||
|
if (status != ARES_SUCCESS)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "ares_library_init: %s\n", ares_strerror(status));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
while ((c = ares_getopt(argc,argv,"dt:h")) != -1)
|
while ((c = ares_getopt(argc,argv,"dt:h")) != -1)
|
||||||
{
|
{
|
||||||
switch (c)
|
switch (c)
|
||||||
@@ -128,6 +154,8 @@ int main(int argc, char **argv)
|
|||||||
|
|
||||||
ares_destroy(channel);
|
ares_destroy(channel);
|
||||||
|
|
||||||
|
ares_library_cleanup();
|
||||||
|
|
||||||
#ifdef USE_WINSOCK
|
#ifdef USE_WINSOCK
|
||||||
WSACleanup();
|
WSACleanup();
|
||||||
#endif
|
#endif
|
||||||
@@ -139,6 +167,8 @@ static void callback(void *arg, int status, int timeouts, struct hostent *host)
|
|||||||
{
|
{
|
||||||
char **p;
|
char **p;
|
||||||
|
|
||||||
|
(void)timeouts;
|
||||||
|
|
||||||
if (status != ARES_SUCCESS)
|
if (status != ARES_SUCCESS)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "%s: %s\n", (char *) arg, ares_strerror(status));
|
fprintf(stderr, "%s: %s\n", (char *) arg, ares_strerror(status));
|
||||||
|
|||||||
82
ares/ares.h
82
ares/ares.h
@@ -1,6 +1,7 @@
|
|||||||
/* $Id$ */
|
/* $Id$ */
|
||||||
|
|
||||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
|
* Copyright (C) 2007-2009 by Daniel Stenberg
|
||||||
*
|
*
|
||||||
* 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
|
||||||
@@ -18,6 +19,10 @@
|
|||||||
#ifndef ARES__H
|
#ifndef ARES__H
|
||||||
#define ARES__H
|
#define ARES__H
|
||||||
|
|
||||||
|
#include "ares_version.h" /* c-ares version defines */
|
||||||
|
#include "ares_build.h" /* c-ares build definitions */
|
||||||
|
#include "ares_rules.h" /* c-ares rules enforcement */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Define WIN32 when build target is Win32 API
|
* Define WIN32 when build target is Win32 API
|
||||||
*/
|
*/
|
||||||
@@ -28,10 +33,11 @@
|
|||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
#if defined(_AIX) || (defined(NETWARE) && defined(__NOVELL_LIBC__))
|
|
||||||
/* HP-UX systems version 9, 10 and 11 lack sys/select.h and so does oldish
|
/* HP-UX systems version 9, 10 and 11 lack sys/select.h and so does oldish
|
||||||
libc5-based Linux systems. Only include it on system that are known to
|
libc5-based Linux systems. Only include it on system that are known to
|
||||||
require it! */
|
require it! */
|
||||||
|
#if defined(_AIX) || defined(__NOVELL_LIBC__) || defined(__NetBSD__) || \
|
||||||
|
defined(__minix) || defined(__SYMBIAN32__) || defined(__INTEGRITY)
|
||||||
#include <sys/select.h>
|
#include <sys/select.h>
|
||||||
#endif
|
#endif
|
||||||
#if (defined(NETWARE) && !defined(__NOVELL_LIBC__))
|
#if (defined(NETWARE) && !defined(__NOVELL_LIBC__))
|
||||||
@@ -50,8 +56,8 @@
|
|||||||
# include <winsock2.h>
|
# include <winsock2.h>
|
||||||
# include <ws2tcpip.h>
|
# include <ws2tcpip.h>
|
||||||
#else
|
#else
|
||||||
#include <netinet/in.h>
|
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
|
#include <netinet/in.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
@@ -88,6 +94,11 @@ extern "C" {
|
|||||||
#define ARES_ENONAME 19
|
#define ARES_ENONAME 19
|
||||||
#define ARES_EBADHINTS 20
|
#define ARES_EBADHINTS 20
|
||||||
|
|
||||||
|
/* ares_library_init error codes */
|
||||||
|
#define ARES_ELOADIPHLPAPI 21
|
||||||
|
#define ARES_ELOADADVAPI32 22
|
||||||
|
#define ARES_EADDRGetNetworkParams 23
|
||||||
|
|
||||||
/* Flag values */
|
/* Flag values */
|
||||||
#define ARES_FLAG_USEVC (1 << 0)
|
#define ARES_FLAG_USEVC (1 << 0)
|
||||||
#define ARES_FLAG_PRIMARY (1 << 1)
|
#define ARES_FLAG_PRIMARY (1 << 1)
|
||||||
@@ -112,6 +123,8 @@ extern "C" {
|
|||||||
#define ARES_OPT_SORTLIST (1 << 10)
|
#define ARES_OPT_SORTLIST (1 << 10)
|
||||||
#define ARES_OPT_SOCK_SNDBUF (1 << 11)
|
#define ARES_OPT_SOCK_SNDBUF (1 << 11)
|
||||||
#define ARES_OPT_SOCK_RCVBUF (1 << 12)
|
#define ARES_OPT_SOCK_RCVBUF (1 << 12)
|
||||||
|
#define ARES_OPT_TIMEOUTMS (1 << 13)
|
||||||
|
#define ARES_OPT_ROTATE (1 << 14)
|
||||||
|
|
||||||
/* Nameinfo flag values */
|
/* Nameinfo flag values */
|
||||||
#define ARES_NI_NOFQDN (1 << 0)
|
#define ARES_NI_NOFQDN (1 << 0)
|
||||||
@@ -154,6 +167,11 @@ extern "C" {
|
|||||||
#define ARES_GETSOCK_WRITABLE(bits,num) (bits & (1 << ((num) + \
|
#define ARES_GETSOCK_WRITABLE(bits,num) (bits & (1 << ((num) + \
|
||||||
ARES_GETSOCK_MAXNUM)))
|
ARES_GETSOCK_MAXNUM)))
|
||||||
|
|
||||||
|
/* c-ares library initialization flag values */
|
||||||
|
#define ARES_LIB_INIT_NONE (0)
|
||||||
|
#define ARES_LIB_INIT_WIN32 (1 << 0)
|
||||||
|
#define ARES_LIB_INIT_ALL (ARES_LIB_INIT_WIN32)
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Typedef our socket type
|
* Typedef our socket type
|
||||||
@@ -177,9 +195,26 @@ typedef void (*ares_sock_state_cb)(void *data,
|
|||||||
|
|
||||||
struct apattern;
|
struct apattern;
|
||||||
|
|
||||||
|
/* NOTE about the ares_options struct to users and developers.
|
||||||
|
|
||||||
|
This struct will remain looking like this. It will not be extended nor
|
||||||
|
shrunk in future releases, but all new options will be set by ares_set_*()
|
||||||
|
options instead of with the ares_init_options() function.
|
||||||
|
|
||||||
|
Eventually (in a galaxy far far away), all options will be settable by
|
||||||
|
ares_set_*() options and the ares_init_options() function will become
|
||||||
|
deprecated.
|
||||||
|
|
||||||
|
When new options are added to c-ares, they are not added to this
|
||||||
|
struct. And they are not "saved" with the ares_save_options() function but
|
||||||
|
instead we encourage the use of the ares_dup() function. Needless to say,
|
||||||
|
if you add config options to c-ares you need to make sure ares_dup()
|
||||||
|
duplicates this new option.
|
||||||
|
|
||||||
|
*/
|
||||||
struct ares_options {
|
struct ares_options {
|
||||||
int flags;
|
int flags;
|
||||||
int timeout;
|
int timeout; /* in seconds or milliseconds, depending on options */
|
||||||
int tries;
|
int tries;
|
||||||
int ndots;
|
int ndots;
|
||||||
unsigned short udp_port;
|
unsigned short udp_port;
|
||||||
@@ -208,14 +243,25 @@ typedef void (*ares_host_callback)(void *arg, int status, int timeouts,
|
|||||||
struct hostent *hostent);
|
struct hostent *hostent);
|
||||||
typedef void (*ares_nameinfo_callback)(void *arg, int status, int timeouts,
|
typedef void (*ares_nameinfo_callback)(void *arg, int status, int timeouts,
|
||||||
char *node, char *service);
|
char *node, char *service);
|
||||||
|
typedef int (*ares_sock_create_callback)(ares_socket_t socket_fd,
|
||||||
|
int type, void *data);
|
||||||
|
|
||||||
|
int ares_library_init(int flags);
|
||||||
|
void ares_library_cleanup(void);
|
||||||
|
const char *ares_version(int *version);
|
||||||
|
|
||||||
int ares_init(ares_channel *channelptr);
|
int ares_init(ares_channel *channelptr);
|
||||||
int ares_init_options(ares_channel *channelptr, struct ares_options *options,
|
int ares_init_options(ares_channel *channelptr, struct ares_options *options,
|
||||||
int optmask);
|
int optmask);
|
||||||
int ares_save_options(ares_channel channel, struct ares_options *options, int *optmask);
|
int ares_save_options(ares_channel channel, struct ares_options *options,
|
||||||
|
int *optmask);
|
||||||
void ares_destroy_options(struct ares_options *options);
|
void ares_destroy_options(struct ares_options *options);
|
||||||
|
int ares_dup(ares_channel *dest, ares_channel src);
|
||||||
void ares_destroy(ares_channel channel);
|
void ares_destroy(ares_channel channel);
|
||||||
void ares_cancel(ares_channel channel);
|
void ares_cancel(ares_channel channel);
|
||||||
|
void ares_set_socket_callback(ares_channel channel,
|
||||||
|
ares_sock_create_callback callback,
|
||||||
|
void *user_data);
|
||||||
void ares_send(ares_channel channel, const unsigned char *qbuf, int qlen,
|
void ares_send(ares_channel channel, const unsigned char *qbuf, int qlen,
|
||||||
ares_callback callback, void *arg);
|
ares_callback callback, void *arg);
|
||||||
void ares_query(ares_channel channel, const char *name, int dnsclass,
|
void ares_query(ares_channel channel, const char *name, int dnsclass,
|
||||||
@@ -224,10 +270,12 @@ void ares_search(ares_channel channel, const char *name, int dnsclass,
|
|||||||
int type, ares_callback callback, void *arg);
|
int type, ares_callback callback, void *arg);
|
||||||
void ares_gethostbyname(ares_channel channel, const char *name, int family,
|
void ares_gethostbyname(ares_channel channel, const char *name, int family,
|
||||||
ares_host_callback callback, void *arg);
|
ares_host_callback callback, void *arg);
|
||||||
|
int ares_gethostbyname_file(ares_channel channel, const char *name,
|
||||||
|
int family, struct hostent **host);
|
||||||
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_socklen_t salen, int flags,
|
||||||
ares_nameinfo_callback callback,
|
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);
|
||||||
@@ -245,21 +293,29 @@ int ares_expand_name(const unsigned char *encoded, const unsigned char *abuf,
|
|||||||
int ares_expand_string(const unsigned char *encoded, const unsigned char *abuf,
|
int ares_expand_string(const unsigned char *encoded, const unsigned char *abuf,
|
||||||
int alen, unsigned char **s, long *enclen);
|
int alen, unsigned char **s, long *enclen);
|
||||||
|
|
||||||
#if !defined(HAVE_STRUCT_IN6_ADDR) && !defined(s6_addr)
|
/*
|
||||||
struct in6_addr {
|
* NOTE: before c-ares 1.6.1 we would most often use the system in6_addr
|
||||||
|
* struct below when ares itself was built, but many apps would use this
|
||||||
|
* private version since the header checked a HAVE_* define for it. Starting
|
||||||
|
* with 1.6.1 we always declare and use our own to stop relying on the
|
||||||
|
* system's one.
|
||||||
|
*/
|
||||||
|
struct ares_in6_addr {
|
||||||
union {
|
union {
|
||||||
unsigned char _S6_u8[16];
|
unsigned char _S6_u8[16];
|
||||||
} _S6_un;
|
} _S6_un;
|
||||||
};
|
};
|
||||||
#define s6_addr _S6_un._S6_u8
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* TODO: the structs 'addrttl' and 'addr6ttl' really should get their names
|
||||||
|
* prefixed with ares_ to keep them in our own "name space".
|
||||||
|
*/
|
||||||
struct addrttl {
|
struct addrttl {
|
||||||
struct in_addr ipaddr;
|
struct in_addr ipaddr;
|
||||||
int ttl;
|
int ttl;
|
||||||
};
|
};
|
||||||
struct addr6ttl {
|
struct addr6ttl {
|
||||||
struct in6_addr ip6addr;
|
struct ares_in6_addr ip6addr;
|
||||||
int ttl;
|
int ttl;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -274,12 +330,12 @@ int ares_parse_a_reply(const unsigned char *abuf, int alen,
|
|||||||
struct hostent **host,
|
struct hostent **host,
|
||||||
struct addrttl *addrttls, int *naddrttls);
|
struct addrttl *addrttls, int *naddrttls);
|
||||||
int ares_parse_aaaa_reply(const unsigned char *abuf, int alen,
|
int ares_parse_aaaa_reply(const unsigned char *abuf, int alen,
|
||||||
struct hostent **host,
|
struct hostent **host,
|
||||||
struct addr6ttl *addrttls, int *naddrttls);
|
struct addr6ttl *addrttls, int *naddrttls);
|
||||||
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,
|
int ares_parse_ns_reply(const unsigned char *abuf, int alen,
|
||||||
struct hostent **host);
|
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);
|
||||||
|
|||||||
@@ -18,11 +18,19 @@
|
|||||||
#include "setup.h"
|
#include "setup.h"
|
||||||
|
|
||||||
#if !defined(WIN32) || defined(WATT32)
|
#if !defined(WIN32) || defined(WATT32)
|
||||||
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_NETINET_IN_H
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
#include <arpa/inet.h>
|
#endif
|
||||||
|
#ifdef HAVE_NETDB_H
|
||||||
#include <netdb.h>
|
#include <netdb.h>
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef HAVE_ARPA_INET_H
|
||||||
|
#include <arpa/inet.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@@ -30,8 +38,8 @@
|
|||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
|
|
||||||
#include "ares.h"
|
#include "ares.h"
|
||||||
#include "ares_private.h"
|
|
||||||
#include "inet_net_pton.h"
|
#include "inet_net_pton.h"
|
||||||
|
#include "ares_private.h"
|
||||||
|
|
||||||
int ares__get_hostent(FILE *fp, int family, struct hostent **host)
|
int ares__get_hostent(FILE *fp, int family, struct hostent **host)
|
||||||
{
|
{
|
||||||
@@ -39,7 +47,7 @@ int ares__get_hostent(FILE *fp, int family, struct hostent **host)
|
|||||||
int status, linesize, end_at_hostname, naliases;
|
int status, linesize, end_at_hostname, naliases;
|
||||||
struct in_addr addr;
|
struct in_addr addr;
|
||||||
struct in6_addr addr6;
|
struct in6_addr addr6;
|
||||||
int addrlen = sizeof(struct in_addr);
|
size_t addrlen = sizeof(struct in_addr);
|
||||||
struct hostent *hostent = NULL;
|
struct hostent *hostent = NULL;
|
||||||
|
|
||||||
while ((status = ares__read_line(fp, &line, &linesize)) == ARES_SUCCESS)
|
while ((status = ares__read_line(fp, &line, &linesize)) == ARES_SUCCESS)
|
||||||
@@ -60,17 +68,21 @@ int ares__get_hostent(FILE *fp, int family, struct hostent **host)
|
|||||||
*p = 0;
|
*p = 0;
|
||||||
addr.s_addr = inet_addr(line);
|
addr.s_addr = inet_addr(line);
|
||||||
if (addr.s_addr == INADDR_NONE)
|
if (addr.s_addr == INADDR_NONE)
|
||||||
{
|
{
|
||||||
if (ares_inet_pton(AF_INET6, line, &addr6) > 0)
|
/* It wasn't an AF_INET dotted address, then AF_UNSPEC and AF_INET6
|
||||||
{
|
families are subject for this further check */
|
||||||
if (family != AF_INET6)
|
if ((family != AF_INET) &&
|
||||||
continue;
|
(ares_inet_pton(AF_INET6, line, &addr6) > 0)) {
|
||||||
addrlen = sizeof(struct in6_addr);
|
addrlen = sizeof(struct in6_addr);
|
||||||
}
|
family = AF_INET6;
|
||||||
else
|
}
|
||||||
continue;
|
else
|
||||||
}
|
continue;
|
||||||
|
}
|
||||||
|
else if (family == AF_UNSPEC)
|
||||||
|
family = AF_INET; /* now confirmed! */
|
||||||
else if (family != AF_INET)
|
else if (family != AF_INET)
|
||||||
|
/* unknown, keep moving */
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
/* Get the canonical hostname. */
|
/* Get the canonical hostname. */
|
||||||
@@ -150,7 +162,7 @@ int ares__get_hostent(FILE *fp, int family, struct hostent **host)
|
|||||||
hostent->h_aliases[naliases] = NULL;
|
hostent->h_aliases[naliases] = NULL;
|
||||||
|
|
||||||
hostent->h_addrtype = family;
|
hostent->h_addrtype = family;
|
||||||
hostent->h_length = addrlen;
|
hostent->h_length = (int)addrlen;
|
||||||
if (family == AF_INET)
|
if (family == AF_INET)
|
||||||
memcpy(hostent->h_addr_list[0], &addr, addrlen);
|
memcpy(hostent->h_addr_list[0], &addr, addrlen);
|
||||||
else if (family == AF_INET6)
|
else if (family == AF_INET6)
|
||||||
|
|||||||
112
ares/ares__timeval.c
Normal file
112
ares/ares__timeval.c
Normal file
@@ -0,0 +1,112 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
|
/* Copyright (C) 2008 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "setup.h"
|
||||||
|
#include "ares.h"
|
||||||
|
#include "ares_private.h"
|
||||||
|
|
||||||
|
#if defined(WIN32) && !defined(MSDOS)
|
||||||
|
|
||||||
|
struct timeval ares__tvnow(void)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
** GetTickCount() is available on _all_ Windows versions from W95 up
|
||||||
|
** to nowadays. Returns milliseconds elapsed since last system boot,
|
||||||
|
** increases monotonically and wraps once 49.7 days have elapsed.
|
||||||
|
*/
|
||||||
|
struct timeval now;
|
||||||
|
DWORD milliseconds = GetTickCount();
|
||||||
|
now.tv_sec = milliseconds / 1000;
|
||||||
|
now.tv_usec = (milliseconds % 1000) * 1000;
|
||||||
|
return now;
|
||||||
|
}
|
||||||
|
|
||||||
|
#elif defined(HAVE_CLOCK_GETTIME_MONOTONIC)
|
||||||
|
|
||||||
|
struct timeval ares__tvnow(void)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
** clock_gettime() is granted to be increased monotonically when the
|
||||||
|
** monotonic clock is queried. Time starting point is unspecified, it
|
||||||
|
** could be the system start-up time, the Epoch, or something else,
|
||||||
|
** in any case the time starting point does not change once that the
|
||||||
|
** system has started up.
|
||||||
|
*/
|
||||||
|
struct timeval now;
|
||||||
|
struct timespec tsnow;
|
||||||
|
if(0 == clock_gettime(CLOCK_MONOTONIC, &tsnow)) {
|
||||||
|
now.tv_sec = tsnow.tv_sec;
|
||||||
|
now.tv_usec = tsnow.tv_nsec / 1000;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
** Even when the configure process has truly detected monotonic clock
|
||||||
|
** availability, it might happen that it is not actually available at
|
||||||
|
** run-time. When this occurs simply fallback to other time source.
|
||||||
|
*/
|
||||||
|
#ifdef HAVE_GETTIMEOFDAY
|
||||||
|
else
|
||||||
|
(void)gettimeofday(&now, NULL);
|
||||||
|
#else
|
||||||
|
else {
|
||||||
|
now.tv_sec = (long)time(NULL);
|
||||||
|
now.tv_usec = 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
return now;
|
||||||
|
}
|
||||||
|
|
||||||
|
#elif defined(HAVE_GETTIMEOFDAY)
|
||||||
|
|
||||||
|
struct timeval ares__tvnow(void)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
** gettimeofday() is not granted to be increased monotonically, due to
|
||||||
|
** clock drifting and external source time synchronization it can jump
|
||||||
|
** forward or backward in time.
|
||||||
|
*/
|
||||||
|
struct timeval now;
|
||||||
|
(void)gettimeofday(&now, NULL);
|
||||||
|
return now;
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
struct timeval ares__tvnow(void)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
** time() returns the value of time in seconds since the Epoch.
|
||||||
|
*/
|
||||||
|
struct timeval now;
|
||||||
|
now.tv_sec = (long)time(NULL);
|
||||||
|
now.tv_usec = 0;
|
||||||
|
return now;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if 0 /* Not used */
|
||||||
|
/*
|
||||||
|
* Make sure that the first argument is the more recent time, as otherwise
|
||||||
|
* we'll get a weird negative time-diff back...
|
||||||
|
*
|
||||||
|
* Returns: the time difference in number of milliseconds.
|
||||||
|
*/
|
||||||
|
long ares__tvdiff(struct timeval newer, struct timeval older)
|
||||||
|
{
|
||||||
|
return (newer.tv_sec-older.tv_sec)*1000+
|
||||||
|
(newer.tv_usec-older.tv_usec)/1000;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
253
ares/ares_build.h.dist
Normal file
253
ares/ares_build.h.dist
Normal file
@@ -0,0 +1,253 @@
|
|||||||
|
#ifndef __CARES_BUILD_H
|
||||||
|
#define __CARES_BUILD_H
|
||||||
|
|
||||||
|
/* $Id$ */
|
||||||
|
|
||||||
|
/* Copyright (C) 2009 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* ================================================================ */
|
||||||
|
/* NOTES FOR CONFIGURE CAPABLE SYSTEMS */
|
||||||
|
/* ================================================================ */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* NOTE 1:
|
||||||
|
* -------
|
||||||
|
*
|
||||||
|
* See file ares_build.h.in, run configure, and forget that this file
|
||||||
|
* exists it is only used for non-configure systems.
|
||||||
|
* But you can keep reading if you want ;-)
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* ================================================================ */
|
||||||
|
/* NOTES FOR NON-CONFIGURE SYSTEMS */
|
||||||
|
/* ================================================================ */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* NOTE 1:
|
||||||
|
* -------
|
||||||
|
*
|
||||||
|
* Nothing in this file is intended to be modified or adjusted by the
|
||||||
|
* c-ares library user nor by the c-ares library builder.
|
||||||
|
*
|
||||||
|
* If you think that something actually needs to be changed, adjusted
|
||||||
|
* or fixed in this file, then, report it on the c-ares development
|
||||||
|
* mailing list: http://cool.haxx.se/mailman/listinfo/c-ares/
|
||||||
|
*
|
||||||
|
* Try to keep one section per platform, compiler and architecture,
|
||||||
|
* otherwise, if an existing section is reused for a different one and
|
||||||
|
* later on the original is adjusted, probably the piggybacking one can
|
||||||
|
* be adversely changed.
|
||||||
|
*
|
||||||
|
* In order to differentiate between platforms/compilers/architectures
|
||||||
|
* use only compiler built in predefined preprocessor symbols.
|
||||||
|
*
|
||||||
|
* This header file shall only export symbols which are 'cares' or 'CARES'
|
||||||
|
* prefixed, otherwise public name space would be polluted.
|
||||||
|
*
|
||||||
|
* NOTE 2:
|
||||||
|
* -------
|
||||||
|
*
|
||||||
|
* Right now you might be staring at file ares_build.h.dist or ares_build.h,
|
||||||
|
* this is due to the following reason: file ares_build.h.dist is renamed
|
||||||
|
* to ares_build.h when the c-ares source code distribution archive file is
|
||||||
|
* created.
|
||||||
|
*
|
||||||
|
* File ares_build.h.dist is not included in the distribution archive.
|
||||||
|
* File ares_build.h is not present in the CVS tree.
|
||||||
|
*
|
||||||
|
* The distributed ares_build.h file is only intended to be used on systems
|
||||||
|
* which can not run the also distributed configure script.
|
||||||
|
*
|
||||||
|
* On systems capable of running the configure script, the configure process
|
||||||
|
* will overwrite the distributed ares_build.h file with one that is suitable
|
||||||
|
* and specific to the library being configured and built, which is generated
|
||||||
|
* from the ares_build.h.in template file.
|
||||||
|
*
|
||||||
|
* If you check out from CVS on a non-configure platform, you must run the
|
||||||
|
* appropriate buildconf* script to set up ares_build.h and other local files.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* ================================================================ */
|
||||||
|
/* DEFINITION OF THESE SYMBOLS SHALL NOT TAKE PLACE ANYWHERE ELSE */
|
||||||
|
/* ================================================================ */
|
||||||
|
|
||||||
|
#ifdef CARES_SIZEOF_LONG
|
||||||
|
# error "CARES_SIZEOF_LONG shall not be defined except in ares_build.h"
|
||||||
|
Error Compilation_aborted_CARES_SIZEOF_LONG_already_defined
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CARES_TYPEOF_ARES_SOCKLEN_T
|
||||||
|
# error "CARES_TYPEOF_ARES_SOCKLEN_T shall not be defined except in ares_build.h"
|
||||||
|
Error Compilation_aborted_CARES_TYPEOF_ARES_SOCKLEN_T_already_defined
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CARES_SIZEOF_ARES_SOCKLEN_T
|
||||||
|
# error "CARES_SIZEOF_ARES_SOCKLEN_T shall not be defined except in ares_build.h"
|
||||||
|
Error Compilation_aborted_CARES_SIZEOF_ARES_SOCKLEN_T_already_defined
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* ================================================================ */
|
||||||
|
/* EXTERNAL INTERFACE SETTINGS FOR NON-CONFIGURE SYSTEMS ONLY */
|
||||||
|
/* ================================================================ */
|
||||||
|
|
||||||
|
#if defined(__DJGPP__) || defined(__GO32__)
|
||||||
|
# define CARES_SIZEOF_LONG 4
|
||||||
|
# define CARES_TYPEOF_ARES_SOCKLEN_T int
|
||||||
|
# define CARES_SIZEOF_ARES_SOCKLEN_T 4
|
||||||
|
|
||||||
|
#elif defined(__SALFORDC__)
|
||||||
|
# define CARES_SIZEOF_LONG 4
|
||||||
|
# define CARES_TYPEOF_ARES_SOCKLEN_T int
|
||||||
|
# define CARES_SIZEOF_ARES_SOCKLEN_T 4
|
||||||
|
|
||||||
|
#elif defined(__BORLANDC__)
|
||||||
|
# define CARES_SIZEOF_LONG 4
|
||||||
|
# define CARES_TYPEOF_ARES_SOCKLEN_T int
|
||||||
|
# define CARES_SIZEOF_ARES_SOCKLEN_T 4
|
||||||
|
|
||||||
|
#elif defined(__TURBOC__)
|
||||||
|
# define CARES_SIZEOF_LONG 4
|
||||||
|
# define CARES_TYPEOF_ARES_SOCKLEN_T int
|
||||||
|
# define CARES_SIZEOF_ARES_SOCKLEN_T 4
|
||||||
|
|
||||||
|
#elif defined(__WATCOMC__)
|
||||||
|
# define CARES_SIZEOF_LONG 4
|
||||||
|
# define CARES_TYPEOF_ARES_SOCKLEN_T int
|
||||||
|
# define CARES_SIZEOF_ARES_SOCKLEN_T 4
|
||||||
|
|
||||||
|
#elif defined(__POCC__)
|
||||||
|
# define CARES_SIZEOF_LONG 4
|
||||||
|
# define CARES_TYPEOF_ARES_SOCKLEN_T int
|
||||||
|
# define CARES_SIZEOF_ARES_SOCKLEN_T 4
|
||||||
|
|
||||||
|
#elif defined(__LCC__)
|
||||||
|
# define CARES_SIZEOF_LONG 4
|
||||||
|
# define CARES_TYPEOF_ARES_SOCKLEN_T int
|
||||||
|
# define CARES_SIZEOF_ARES_SOCKLEN_T 4
|
||||||
|
|
||||||
|
#elif defined(__SYMBIAN32__)
|
||||||
|
# define CARES_SIZEOF_LONG 4
|
||||||
|
# define CARES_TYPEOF_ARES_SOCKLEN_T unsigned int
|
||||||
|
# define CARES_SIZEOF_ARES_SOCKLEN_T 4
|
||||||
|
|
||||||
|
#elif defined(__MWERKS__)
|
||||||
|
# define CARES_SIZEOF_LONG 4
|
||||||
|
# define CARES_TYPEOF_ARES_SOCKLEN_T int
|
||||||
|
# define CARES_SIZEOF_ARES_SOCKLEN_T 4
|
||||||
|
|
||||||
|
#elif defined(_WIN32_WCE)
|
||||||
|
# define CARES_SIZEOF_LONG 4
|
||||||
|
# define CARES_TYPEOF_ARES_SOCKLEN_T int
|
||||||
|
# define CARES_SIZEOF_ARES_SOCKLEN_T 4
|
||||||
|
|
||||||
|
#elif defined(__MINGW32__)
|
||||||
|
# define CARES_SIZEOF_LONG 4
|
||||||
|
# define CARES_TYPEOF_ARES_SOCKLEN_T int
|
||||||
|
# define CARES_SIZEOF_ARES_SOCKLEN_T 4
|
||||||
|
|
||||||
|
#elif defined(__VMS)
|
||||||
|
# define CARES_SIZEOF_LONG 4
|
||||||
|
# define CARES_TYPEOF_ARES_SOCKLEN_T unsigned int
|
||||||
|
# define CARES_SIZEOF_ARES_SOCKLEN_T 4
|
||||||
|
|
||||||
|
#elif defined(__OS400__)
|
||||||
|
# if defined(__ILEC400__)
|
||||||
|
# define CARES_SIZEOF_LONG 4
|
||||||
|
# define CARES_TYPEOF_ARES_SOCKLEN_T socklen_t
|
||||||
|
# define CARES_SIZEOF_ARES_SOCKLEN_T 4
|
||||||
|
# define CARES_PULL_SYS_TYPES_H 1
|
||||||
|
# define CARES_PULL_SYS_SOCKET_H 1
|
||||||
|
# endif
|
||||||
|
|
||||||
|
#elif defined(__MVS__)
|
||||||
|
# if defined(__IBMC__) || defined(__IBMCPP__)
|
||||||
|
# if defined(_ILP32)
|
||||||
|
# define CARES_SIZEOF_LONG 4
|
||||||
|
# elif defined(_LP64)
|
||||||
|
# define CARES_SIZEOF_LONG 8
|
||||||
|
# endif
|
||||||
|
# define CARES_TYPEOF_ARES_SOCKLEN_T socklen_t
|
||||||
|
# define CARES_SIZEOF_ARES_SOCKLEN_T 4
|
||||||
|
# define CARES_PULL_SYS_TYPES_H 1
|
||||||
|
# define CARES_PULL_SYS_SOCKET_H 1
|
||||||
|
# endif
|
||||||
|
|
||||||
|
#elif defined(__370__)
|
||||||
|
# if defined(__IBMC__) || defined(__IBMCPP__)
|
||||||
|
# if defined(_ILP32)
|
||||||
|
# define CARES_SIZEOF_LONG 4
|
||||||
|
# elif defined(_LP64)
|
||||||
|
# define CARES_SIZEOF_LONG 8
|
||||||
|
# endif
|
||||||
|
# define CARES_TYPEOF_ARES_SOCKLEN_T socklen_t
|
||||||
|
# define CARES_SIZEOF_ARES_SOCKLEN_T 4
|
||||||
|
# define CARES_PULL_SYS_TYPES_H 1
|
||||||
|
# define CARES_PULL_SYS_SOCKET_H 1
|
||||||
|
# endif
|
||||||
|
|
||||||
|
#elif defined(TPF)
|
||||||
|
# define CARES_SIZEOF_LONG 8
|
||||||
|
# define CARES_TYPEOF_ARES_SOCKLEN_T int
|
||||||
|
# define CARES_SIZEOF_ARES_SOCKLEN_T 4
|
||||||
|
|
||||||
|
/* ===================================== */
|
||||||
|
/* KEEP MSVC THE PENULTIMATE ENTRY */
|
||||||
|
/* ===================================== */
|
||||||
|
|
||||||
|
#elif defined(_MSC_VER)
|
||||||
|
# define CARES_SIZEOF_LONG 4
|
||||||
|
# define CARES_TYPEOF_ARES_SOCKLEN_T int
|
||||||
|
# define CARES_SIZEOF_ARES_SOCKLEN_T 4
|
||||||
|
|
||||||
|
/* ===================================== */
|
||||||
|
/* KEEP GENERIC GCC THE LAST ENTRY */
|
||||||
|
/* ===================================== */
|
||||||
|
|
||||||
|
#elif defined(__GNUC__)
|
||||||
|
# if defined(__i386__) || defined(__ppc__)
|
||||||
|
# define CARES_SIZEOF_LONG 4
|
||||||
|
# elif defined(__x86_64__) || defined(__ppc64__)
|
||||||
|
# define CARES_SIZEOF_LONG 8
|
||||||
|
# endif
|
||||||
|
# define CARES_TYPEOF_ARES_SOCKLEN_T socklen_t
|
||||||
|
# define CARES_SIZEOF_ARES_SOCKLEN_T 4
|
||||||
|
# define CARES_PULL_SYS_TYPES_H 1
|
||||||
|
# define CARES_PULL_SYS_SOCKET_H 1
|
||||||
|
|
||||||
|
#else
|
||||||
|
# error "Unknown non-configure build target!"
|
||||||
|
Error Compilation_aborted_Unknown_non_configure_build_target
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* CARES_PULL_SYS_TYPES_H is defined above when inclusion of header file */
|
||||||
|
/* sys/types.h is required here to properly make type definitions below. */
|
||||||
|
#ifdef CARES_PULL_SYS_TYPES_H
|
||||||
|
# include <sys/types.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* CARES_PULL_SYS_SOCKET_H is defined above when inclusion of header file */
|
||||||
|
/* sys/socket.h is required here to properly make type definitions below. */
|
||||||
|
#ifdef CARES_PULL_SYS_SOCKET_H
|
||||||
|
# include <sys/socket.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Data type definition of ares_socklen_t. */
|
||||||
|
|
||||||
|
#ifdef CARES_TYPEOF_ARES_SOCKLEN_T
|
||||||
|
typedef CARES_TYPEOF_ARES_SOCKLEN_T ares_socklen_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* __CARES_BUILD_H */
|
||||||
111
ares/ares_build.h.in
Normal file
111
ares/ares_build.h.in
Normal file
@@ -0,0 +1,111 @@
|
|||||||
|
#ifndef __CARES_BUILD_H
|
||||||
|
#define __CARES_BUILD_H
|
||||||
|
|
||||||
|
/* $Id$ */
|
||||||
|
|
||||||
|
/* Copyright (C) 2009 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* ================================================================ */
|
||||||
|
/* NOTES FOR CONFIGURE CAPABLE SYSTEMS */
|
||||||
|
/* ================================================================ */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* NOTE 1:
|
||||||
|
* -------
|
||||||
|
*
|
||||||
|
* Nothing in this file is intended to be modified or adjusted by the
|
||||||
|
* c-ares library user nor by the c-ares library builder.
|
||||||
|
*
|
||||||
|
* If you think that something actually needs to be changed, adjusted
|
||||||
|
* or fixed in this file, then, report it on the c-ares development
|
||||||
|
* mailing list: http://cool.haxx.se/mailman/listinfo/c-ares/
|
||||||
|
*
|
||||||
|
* This header file shall only export symbols which are 'cares' or 'CARES'
|
||||||
|
* prefixed, otherwise public name space would be polluted.
|
||||||
|
*
|
||||||
|
* NOTE 2:
|
||||||
|
* -------
|
||||||
|
*
|
||||||
|
* Right now you might be staring at file ares_build.h.in or ares_build.h,
|
||||||
|
* this is due to the following reason:
|
||||||
|
*
|
||||||
|
* On systems capable of running the configure script, the configure process
|
||||||
|
* will overwrite the distributed ares_build.h file with one that is suitable
|
||||||
|
* and specific to the library being configured and built, which is generated
|
||||||
|
* from the ares_build.h.in template file.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* ================================================================ */
|
||||||
|
/* DEFINITION OF THESE SYMBOLS SHALL NOT TAKE PLACE ANYWHERE ELSE */
|
||||||
|
/* ================================================================ */
|
||||||
|
|
||||||
|
#ifdef CARES_SIZEOF_LONG
|
||||||
|
# error "CARES_SIZEOF_LONG shall not be defined except in ares_build.h"
|
||||||
|
Error Compilation_aborted_CARES_SIZEOF_LONG_already_defined
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CARES_TYPEOF_ARES_SOCKLEN_T
|
||||||
|
# error "CARES_TYPEOF_ARES_SOCKLEN_T shall not be defined except in ares_build.h"
|
||||||
|
Error Compilation_aborted_CARES_TYPEOF_ARES_SOCKLEN_T_already_defined
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CARES_SIZEOF_ARES_SOCKLEN_T
|
||||||
|
# error "CARES_SIZEOF_ARES_SOCKLEN_T shall not be defined except in ares_build.h"
|
||||||
|
Error Compilation_aborted_CARES_SIZEOF_ARES_SOCKLEN_T_already_defined
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* ================================================================ */
|
||||||
|
/* EXTERNAL INTERFACE SETTINGS FOR CONFIGURE CAPABLE SYSTEMS ONLY */
|
||||||
|
/* ================================================================ */
|
||||||
|
|
||||||
|
/* Configure process defines this to 1 when it finds out that system */
|
||||||
|
/* header file ws2tcpip.h must be included by the external interface. */
|
||||||
|
#undef CARES_PULL_WS2TCPIP_H
|
||||||
|
#ifdef CARES_PULL_WS2TCPIP_H
|
||||||
|
# ifndef WIN32_LEAN_AND_MEAN
|
||||||
|
# define WIN32_LEAN_AND_MEAN
|
||||||
|
# endif
|
||||||
|
# include <windows.h>
|
||||||
|
# include <winsock2.h>
|
||||||
|
# include <ws2tcpip.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Configure process defines this to 1 when it finds out that system */
|
||||||
|
/* header file sys/types.h must be included by the external interface. */
|
||||||
|
#undef CARES_PULL_SYS_TYPES_H
|
||||||
|
#ifdef CARES_PULL_SYS_TYPES_H
|
||||||
|
# include <sys/types.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Configure process defines this to 1 when it finds out that system */
|
||||||
|
/* header file sys/socket.h must be included by the external interface. */
|
||||||
|
#undef CARES_PULL_SYS_SOCKET_H
|
||||||
|
#ifdef CARES_PULL_SYS_SOCKET_H
|
||||||
|
# include <sys/socket.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* The size of `long', as computed by sizeof. */
|
||||||
|
#undef CARES_SIZEOF_LONG
|
||||||
|
|
||||||
|
/* Integral data type used for ares_socklen_t. */
|
||||||
|
#undef CARES_TYPEOF_ARES_SOCKLEN_T
|
||||||
|
|
||||||
|
/* The size of `ares_socklen_t', as computed by sizeof. */
|
||||||
|
#undef CARES_SIZEOF_ARES_SOCKLEN_T
|
||||||
|
|
||||||
|
/* Data type definition of ares_socklen_t. */
|
||||||
|
typedef CARES_TYPEOF_ARES_SOCKLEN_T ares_socklen_t;
|
||||||
|
|
||||||
|
#endif /* __CARES_BUILD_H */
|
||||||
43
ares/ares_dup.3
Normal file
43
ares/ares_dup.3
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
.\" $Id$
|
||||||
|
.\"
|
||||||
|
.\" Copyright (C) 2007-2008 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_DUP 3 "2 Dec 2008"
|
||||||
|
.SH NAME
|
||||||
|
ares_dup \- Duplicate a resolver channel
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.nf
|
||||||
|
.B #include <ares.h>
|
||||||
|
.PP
|
||||||
|
.B int ares_dup(ares_channel *\fIchannel\fP, ares_channel \fIsource\fP)
|
||||||
|
.fi
|
||||||
|
.SH DESCRIPTION
|
||||||
|
The \fBares_dup(3)\fP function duplicates an existing communications channel
|
||||||
|
for name service lookups. If it returns successfully, \fBares_dup(3)\fP will
|
||||||
|
set the variable pointed to by \fIchannel\fP to a handle used to identify the
|
||||||
|
name service channel. The caller should invoke \fIares_destroy(3)\fP on the
|
||||||
|
handle when the channel is no longer needed.
|
||||||
|
|
||||||
|
The \fBares_dup_options\fP function also initializes a name service channel,
|
||||||
|
with additional options set exactly as the \fIsource\fP channel has them
|
||||||
|
configured.
|
||||||
|
.SH SEE ALSO
|
||||||
|
.BR ares_destroy(3),
|
||||||
|
.BR ares_init(3)
|
||||||
|
.SH AVAILABILITY
|
||||||
|
ares_dup(3) was added in c-ares 1.6.0
|
||||||
|
.SH AUTHOR
|
||||||
|
Daniel Stenberg
|
||||||
|
|
||||||
@@ -17,14 +17,19 @@
|
|||||||
|
|
||||||
#include "setup.h"
|
#include "setup.h"
|
||||||
|
|
||||||
#if defined(WIN32) && !defined(WATT32)
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
#include "nameser.h"
|
# include <sys/socket.h>
|
||||||
#else
|
|
||||||
#include <netinet/in.h>
|
|
||||||
#include <arpa/nameser.h>
|
|
||||||
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
|
|
||||||
#include <arpa/nameser_compat.h>
|
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef HAVE_NETINET_IN_H
|
||||||
|
# include <netinet/in.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_ARPA_NAMESER_H
|
||||||
|
# include <arpa/nameser.h>
|
||||||
|
#else
|
||||||
|
# include "nameser.h"
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
|
||||||
|
# include <arpa/nameser_compat.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@@ -172,3 +177,14 @@ static int name_length(const unsigned char *encoded, const unsigned char *abuf,
|
|||||||
*/
|
*/
|
||||||
return (n) ? n - 1 : n;
|
return (n) ? n - 1 : n;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Like ares_expand_name but returns EBADRESP in case of invalid input. */
|
||||||
|
int ares__expand_name_for_response(const unsigned char *encoded,
|
||||||
|
const unsigned char *abuf, int alen,
|
||||||
|
char **s, long *enclen)
|
||||||
|
{
|
||||||
|
int status = ares_expand_name(encoded, abuf, alen, s, enclen);
|
||||||
|
if (status == ARES_EBADNAME)
|
||||||
|
status = ARES_EBADRESP;
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|||||||
@@ -17,11 +17,16 @@
|
|||||||
|
|
||||||
#include "setup.h"
|
#include "setup.h"
|
||||||
|
|
||||||
#if defined(WIN32) && !defined(WATT32)
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
#include "nameser.h"
|
# include <sys/socket.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_NETINET_IN_H
|
||||||
|
# include <netinet/in.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_ARPA_NAMESER_H
|
||||||
|
# include <arpa/nameser.h>
|
||||||
#else
|
#else
|
||||||
#include <netinet/in.h>
|
# include "nameser.h"
|
||||||
#include <arpa/nameser.h>
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|||||||
@@ -16,16 +16,25 @@
|
|||||||
*/
|
*/
|
||||||
#include "setup.h"
|
#include "setup.h"
|
||||||
|
|
||||||
#if defined(WIN32) && !defined(WATT32)
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
#include "nameser.h"
|
# include <sys/socket.h>
|
||||||
#else
|
|
||||||
#include <sys/socket.h>
|
|
||||||
#include <netinet/in.h>
|
|
||||||
#include <netdb.h>
|
|
||||||
#include <arpa/nameser.h>
|
|
||||||
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
|
|
||||||
#include <arpa/nameser_compat.h>
|
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef HAVE_NETINET_IN_H
|
||||||
|
# include <netinet/in.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_NETDB_H
|
||||||
|
# include <netdb.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_ARPA_INET_H
|
||||||
|
# include <arpa/inet.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_ARPA_NAMESER_H
|
||||||
|
# include <arpa/nameser.h>
|
||||||
|
#else
|
||||||
|
# include "nameser.h"
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
|
||||||
|
# include <arpa/nameser_compat.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
@@ -33,8 +42,8 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include "ares.h"
|
#include "ares.h"
|
||||||
#include "ares_private.h"
|
|
||||||
#include "inet_net_pton.h"
|
#include "inet_net_pton.h"
|
||||||
|
#include "ares_private.h"
|
||||||
|
|
||||||
#ifdef WATT32
|
#ifdef WATT32
|
||||||
#undef WIN32
|
#undef WIN32
|
||||||
@@ -43,8 +52,7 @@
|
|||||||
struct addr_query {
|
struct addr_query {
|
||||||
/* Arguments passed to ares_gethostbyaddr() */
|
/* Arguments passed to ares_gethostbyaddr() */
|
||||||
ares_channel channel;
|
ares_channel channel;
|
||||||
union ares_addr addr;
|
struct ares_addr addr;
|
||||||
int family;
|
|
||||||
ares_host_callback callback;
|
ares_host_callback callback;
|
||||||
void *arg;
|
void *arg;
|
||||||
|
|
||||||
@@ -57,8 +65,8 @@ static void addr_callback(void *arg, int status, int timeouts,
|
|||||||
unsigned char *abuf, int alen);
|
unsigned char *abuf, int alen);
|
||||||
static void end_aquery(struct addr_query *aquery, int status,
|
static void end_aquery(struct addr_query *aquery, int status,
|
||||||
struct hostent *host);
|
struct hostent *host);
|
||||||
static int file_lookup(union ares_addr *addr, int family, struct hostent **host);
|
static int file_lookup(struct ares_addr *addr, struct hostent **host);
|
||||||
static void ptr_rr_name(char *name, int family, union ares_addr *addr);
|
static void ptr_rr_name(char *name, const struct ares_addr *addr);
|
||||||
|
|
||||||
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)
|
||||||
@@ -86,10 +94,10 @@ void ares_gethostbyaddr(ares_channel channel, const void *addr, int addrlen,
|
|||||||
}
|
}
|
||||||
aquery->channel = channel;
|
aquery->channel = channel;
|
||||||
if (family == AF_INET)
|
if (family == AF_INET)
|
||||||
memcpy(&aquery->addr.addr4, addr, sizeof(struct in_addr));
|
memcpy(&aquery->addr.addrV4, addr, sizeof(struct in_addr));
|
||||||
else
|
else
|
||||||
memcpy(&aquery->addr.addr6, addr, sizeof(struct in6_addr));
|
memcpy(&aquery->addr.addrV6, addr, sizeof(struct in6_addr));
|
||||||
aquery->family = family;
|
aquery->addr.family = family;
|
||||||
aquery->callback = callback;
|
aquery->callback = callback;
|
||||||
aquery->arg = arg;
|
aquery->arg = arg;
|
||||||
aquery->remaining_lookups = channel->lookups;
|
aquery->remaining_lookups = channel->lookups;
|
||||||
@@ -110,13 +118,13 @@ static void next_lookup(struct addr_query *aquery)
|
|||||||
switch (*p)
|
switch (*p)
|
||||||
{
|
{
|
||||||
case 'b':
|
case 'b':
|
||||||
ptr_rr_name(name, aquery->family, &aquery->addr);
|
ptr_rr_name(name, &aquery->addr);
|
||||||
aquery->remaining_lookups = p + 1;
|
aquery->remaining_lookups = p + 1;
|
||||||
ares_query(aquery->channel, name, C_IN, T_PTR, addr_callback,
|
ares_query(aquery->channel, name, C_IN, T_PTR, addr_callback,
|
||||||
aquery);
|
aquery);
|
||||||
return;
|
return;
|
||||||
case 'f':
|
case 'f':
|
||||||
status = file_lookup(&aquery->addr, aquery->family, &host);
|
status = file_lookup(&aquery->addr, &host);
|
||||||
|
|
||||||
/* this status check below previously checked for !ARES_ENOTFOUND,
|
/* this status check below previously checked for !ARES_ENOTFOUND,
|
||||||
but we should not assume that this single error code is the one
|
but we should not assume that this single error code is the one
|
||||||
@@ -137,16 +145,23 @@ static void addr_callback(void *arg, int status, int timeouts,
|
|||||||
{
|
{
|
||||||
struct addr_query *aquery = (struct addr_query *) arg;
|
struct addr_query *aquery = (struct addr_query *) arg;
|
||||||
struct hostent *host;
|
struct hostent *host;
|
||||||
|
size_t addrlen;
|
||||||
|
|
||||||
aquery->timeouts += timeouts;
|
aquery->timeouts += timeouts;
|
||||||
if (status == ARES_SUCCESS)
|
if (status == ARES_SUCCESS)
|
||||||
{
|
{
|
||||||
if (aquery->family == AF_INET)
|
if (aquery->addr.family == AF_INET)
|
||||||
status = ares_parse_ptr_reply(abuf, alen, &aquery->addr.addr4,
|
{
|
||||||
sizeof(struct in_addr), AF_INET, &host);
|
addrlen = sizeof(struct in_addr);
|
||||||
|
status = ares_parse_ptr_reply(abuf, alen, &aquery->addr.addrV4,
|
||||||
|
(int)addrlen, AF_INET, &host);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
status = ares_parse_ptr_reply(abuf, alen, &aquery->addr.addr6,
|
{
|
||||||
sizeof(struct in6_addr), AF_INET6, &host);
|
addrlen = sizeof(struct in6_addr);
|
||||||
|
status = ares_parse_ptr_reply(abuf, alen, &aquery->addr.addrV6,
|
||||||
|
(int)addrlen, AF_INET6, &host);
|
||||||
|
}
|
||||||
end_aquery(aquery, status, host);
|
end_aquery(aquery, status, host);
|
||||||
}
|
}
|
||||||
else if (status == ARES_EDESTRUCTION)
|
else if (status == ARES_EDESTRUCTION)
|
||||||
@@ -164,7 +179,7 @@ static void end_aquery(struct addr_query *aquery, int status,
|
|||||||
free(aquery);
|
free(aquery);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int file_lookup(union ares_addr *addr, int family, struct hostent **host)
|
static int file_lookup(struct ares_addr *addr, struct hostent **host)
|
||||||
{
|
{
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
int status;
|
int status;
|
||||||
@@ -217,21 +232,21 @@ static int file_lookup(union ares_addr *addr, int family, struct hostent **host)
|
|||||||
return ARES_EFILE;
|
return ARES_EFILE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
while ((status = ares__get_hostent(fp, family, host)) == ARES_SUCCESS)
|
while ((status = ares__get_hostent(fp, addr->family, host)) == ARES_SUCCESS)
|
||||||
{
|
{
|
||||||
if (family != (*host)->h_addrtype)
|
if (addr->family != (*host)->h_addrtype)
|
||||||
{
|
{
|
||||||
ares_free_hostent(*host);
|
ares_free_hostent(*host);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (family == AF_INET)
|
if (addr->family == AF_INET)
|
||||||
{
|
{
|
||||||
if (memcmp((*host)->h_addr, &addr->addr4, sizeof(struct in_addr)) == 0)
|
if (memcmp((*host)->h_addr, &addr->addrV4, sizeof(struct in_addr)) == 0)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else if (family == AF_INET6)
|
else if (addr->family == AF_INET6)
|
||||||
{
|
{
|
||||||
if (memcmp((*host)->h_addr, &addr->addr6, sizeof(struct in6_addr)) == 0)
|
if (memcmp((*host)->h_addr, &addr->addrV6, sizeof(struct in6_addr)) == 0)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
ares_free_hostent(*host);
|
ares_free_hostent(*host);
|
||||||
@@ -244,11 +259,11 @@ static int file_lookup(union ares_addr *addr, int family, struct hostent **host)
|
|||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ptr_rr_name(char *name, int family, union ares_addr *addr)
|
static void ptr_rr_name(char *name, const struct ares_addr *addr)
|
||||||
{
|
{
|
||||||
if (family == AF_INET)
|
if (addr->family == AF_INET)
|
||||||
{
|
{
|
||||||
unsigned long laddr = ntohl(addr->addr4.s_addr);
|
unsigned long laddr = ntohl(addr->addrV4.s_addr);
|
||||||
int a1 = (int)((laddr >> 24) & 0xff);
|
int a1 = (int)((laddr >> 24) & 0xff);
|
||||||
int a2 = (int)((laddr >> 16) & 0xff);
|
int a2 = (int)((laddr >> 16) & 0xff);
|
||||||
int a3 = (int)((laddr >> 8) & 0xff);
|
int a3 = (int)((laddr >> 8) & 0xff);
|
||||||
@@ -257,14 +272,17 @@ static void ptr_rr_name(char *name, int family, union ares_addr *addr)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
unsigned char *bytes = (unsigned char *)&addr->addr6.s6_addr;
|
unsigned char *bytes = (unsigned char *)&addr->addrV6.s6_addr;
|
||||||
|
/* There are too many arguments to do this in one line using
|
||||||
|
* minimally C89-compliant compilers */
|
||||||
sprintf(name,
|
sprintf(name,
|
||||||
"%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x."
|
"%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.",
|
||||||
"%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.ip6.arpa",
|
|
||||||
bytes[15]&0xf, bytes[15] >> 4, bytes[14]&0xf, bytes[14] >> 4,
|
bytes[15]&0xf, bytes[15] >> 4, bytes[14]&0xf, bytes[14] >> 4,
|
||||||
bytes[13]&0xf, bytes[13] >> 4, bytes[12]&0xf, bytes[12] >> 4,
|
bytes[13]&0xf, bytes[13] >> 4, bytes[12]&0xf, bytes[12] >> 4,
|
||||||
bytes[11]&0xf, bytes[11] >> 4, bytes[10]&0xf, bytes[10] >> 4,
|
bytes[11]&0xf, bytes[11] >> 4, bytes[10]&0xf, bytes[10] >> 4,
|
||||||
bytes[9]&0xf, bytes[9] >> 4, bytes[8]&0xf, bytes[8] >> 4,
|
bytes[9]&0xf, bytes[9] >> 4, bytes[8]&0xf, bytes[8] >> 4);
|
||||||
|
sprintf(name+strlen(name),
|
||||||
|
"%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.ip6.arpa",
|
||||||
bytes[7]&0xf, bytes[7] >> 4, bytes[6]&0xf, bytes[6] >> 4,
|
bytes[7]&0xf, bytes[7] >> 4, bytes[6]&0xf, bytes[6] >> 4,
|
||||||
bytes[5]&0xf, bytes[5] >> 4, bytes[4]&0xf, bytes[4] >> 4,
|
bytes[5]&0xf, bytes[5] >> 4, bytes[4]&0xf, bytes[4] >> 4,
|
||||||
bytes[3]&0xf, bytes[3] >> 4, bytes[2]&0xf, bytes[2] >> 4,
|
bytes[3]&0xf, bytes[3] >> 4, bytes[2]&0xf, bytes[2] >> 4,
|
||||||
|
|||||||
@@ -17,30 +17,39 @@
|
|||||||
|
|
||||||
#include "setup.h"
|
#include "setup.h"
|
||||||
|
|
||||||
#if defined(WIN32) && !defined(WATT32)
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
#include "nameser.h"
|
# include <sys/socket.h>
|
||||||
#else
|
#endif
|
||||||
#include <sys/socket.h>
|
#ifdef HAVE_NETINET_IN_H
|
||||||
#include <netinet/in.h>
|
# include <netinet/in.h>
|
||||||
#include <arpa/inet.h>
|
#endif
|
||||||
#include <netdb.h>
|
#ifdef HAVE_NETDB_H
|
||||||
|
# include <netdb.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_ARPA_INET_H
|
||||||
|
# include <arpa/inet.h>
|
||||||
|
#endif
|
||||||
#ifdef HAVE_ARPA_NAMESER_H
|
#ifdef HAVE_ARPA_NAMESER_H
|
||||||
#include <arpa/nameser.h>
|
# include <arpa/nameser.h>
|
||||||
|
#else
|
||||||
|
# include "nameser.h"
|
||||||
#endif
|
#endif
|
||||||
#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
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
|
#ifdef HAVE_STRINGS_H
|
||||||
|
#include <strings.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "ares.h"
|
#include "ares.h"
|
||||||
#include "ares_private.h"
|
|
||||||
#include "inet_net_pton.h"
|
#include "inet_net_pton.h"
|
||||||
#include "bitncmp.h"
|
#include "bitncmp.h"
|
||||||
|
#include "ares_private.h"
|
||||||
|
|
||||||
#ifdef WATT32
|
#ifdef WATT32
|
||||||
#undef WIN32
|
#undef WIN32
|
||||||
@@ -52,7 +61,8 @@ struct host_query {
|
|||||||
char *name;
|
char *name;
|
||||||
ares_host_callback callback;
|
ares_host_callback callback;
|
||||||
void *arg;
|
void *arg;
|
||||||
int family;
|
int sent_family; /* this family is what was is being used */
|
||||||
|
int want_family; /* this family is what is asked for in the API */
|
||||||
const char *remaining_lookups;
|
const char *remaining_lookups;
|
||||||
int timeouts;
|
int timeouts;
|
||||||
};
|
};
|
||||||
@@ -62,29 +72,34 @@ static void host_callback(void *arg, int status, int timeouts,
|
|||||||
unsigned char *abuf, int alen);
|
unsigned char *abuf, int alen);
|
||||||
static void end_hquery(struct host_query *hquery, int status,
|
static void end_hquery(struct host_query *hquery, int status,
|
||||||
struct hostent *host);
|
struct hostent *host);
|
||||||
static int fake_hostent(const char *name, int family, ares_host_callback callback,
|
static int fake_hostent(const char *name, int family,
|
||||||
void *arg);
|
ares_host_callback callback, void *arg);
|
||||||
static int file_lookup(const char *name, int family, struct hostent **host);
|
static int file_lookup(const char *name, int family, struct hostent **host);
|
||||||
static void sort_addresses(struct hostent *host, struct apattern *sortlist,
|
static void sort_addresses(struct hostent *host,
|
||||||
int nsort);
|
const struct apattern *sortlist, int nsort);
|
||||||
static void sort6_addresses(struct hostent *host, struct apattern *sortlist,
|
static void sort6_addresses(struct hostent *host,
|
||||||
int nsort);
|
const struct apattern *sortlist, int nsort);
|
||||||
static int get_address_index(struct in_addr *addr, struct apattern *sortlist,
|
static int get_address_index(const struct in_addr *addr,
|
||||||
int nsort);
|
const struct apattern *sortlist, int nsort);
|
||||||
static int get6_address_index(struct in6_addr *addr, struct apattern *sortlist,
|
static int get6_address_index(const struct in6_addr *addr,
|
||||||
int nsort);
|
const struct apattern *sortlist, int nsort);
|
||||||
|
|
||||||
void ares_gethostbyname(ares_channel channel, const char *name, int family,
|
void ares_gethostbyname(ares_channel channel, const char *name, int family,
|
||||||
ares_host_callback callback, void *arg)
|
ares_host_callback callback, void *arg)
|
||||||
{
|
{
|
||||||
struct host_query *hquery;
|
struct host_query *hquery;
|
||||||
|
|
||||||
/* Right now we only know how to look up Internet addresses. */
|
/* Right now we only know how to look up Internet addresses - and unspec
|
||||||
if (family != AF_INET && family != AF_INET6)
|
means try both basically. */
|
||||||
{
|
switch (family) {
|
||||||
callback(arg, ARES_ENOTIMP, 0, NULL);
|
case AF_INET:
|
||||||
return;
|
case AF_INET6:
|
||||||
}
|
case AF_UNSPEC:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
callback(arg, ARES_ENOTIMP, 0, NULL);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (fake_hostent(name, family, callback, arg))
|
if (fake_hostent(name, family, callback, arg))
|
||||||
return;
|
return;
|
||||||
@@ -98,13 +113,13 @@ void ares_gethostbyname(ares_channel channel, const char *name, int family,
|
|||||||
}
|
}
|
||||||
hquery->channel = channel;
|
hquery->channel = channel;
|
||||||
hquery->name = strdup(name);
|
hquery->name = strdup(name);
|
||||||
hquery->family = family;
|
hquery->want_family = family;
|
||||||
if (!hquery->name)
|
hquery->sent_family = -1; /* nothing is sent yet */
|
||||||
{
|
if (!hquery->name) {
|
||||||
free(hquery);
|
free(hquery);
|
||||||
callback(arg, ARES_ENOMEM, 0, NULL);
|
callback(arg, ARES_ENOMEM, 0, NULL);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
hquery->callback = callback;
|
hquery->callback = callback;
|
||||||
hquery->arg = arg;
|
hquery->arg = arg;
|
||||||
hquery->remaining_lookups = channel->lookups;
|
hquery->remaining_lookups = channel->lookups;
|
||||||
@@ -127,17 +142,23 @@ static void next_lookup(struct host_query *hquery, int status_code)
|
|||||||
case 'b':
|
case 'b':
|
||||||
/* DNS lookup */
|
/* DNS lookup */
|
||||||
hquery->remaining_lookups = p + 1;
|
hquery->remaining_lookups = p + 1;
|
||||||
if (hquery->family == AF_INET6)
|
if ((hquery->want_family == AF_INET6) ||
|
||||||
|
(hquery->want_family == AF_UNSPEC)) {
|
||||||
|
/* if inet6 or unspec, start out with AAAA */
|
||||||
|
hquery->sent_family = AF_INET6;
|
||||||
ares_search(hquery->channel, hquery->name, C_IN, T_AAAA,
|
ares_search(hquery->channel, hquery->name, C_IN, T_AAAA,
|
||||||
host_callback, hquery);
|
host_callback, hquery);
|
||||||
else
|
}
|
||||||
|
else {
|
||||||
|
hquery->sent_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);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
|
|
||||||
case 'f':
|
case 'f':
|
||||||
/* Host file lookup */
|
/* Host file lookup */
|
||||||
status = file_lookup(hquery->name, hquery->family, &host);
|
status = file_lookup(hquery->name, hquery->want_family, &host);
|
||||||
|
|
||||||
/* this status check below previously checked for !ARES_ENOTFOUND,
|
/* this status check below previously checked for !ARES_ENOTFOUND,
|
||||||
but we should not assume that this single error code is the one
|
but we should not assume that this single error code is the one
|
||||||
@@ -159,29 +180,39 @@ static void host_callback(void *arg, int status, int timeouts,
|
|||||||
{
|
{
|
||||||
struct host_query *hquery = (struct host_query *) arg;
|
struct host_query *hquery = (struct host_query *) arg;
|
||||||
ares_channel channel = hquery->channel;
|
ares_channel channel = hquery->channel;
|
||||||
struct hostent *host;
|
struct hostent *host = NULL;
|
||||||
|
|
||||||
hquery->timeouts += timeouts;
|
hquery->timeouts += timeouts;
|
||||||
if (status == ARES_SUCCESS)
|
if (status == ARES_SUCCESS)
|
||||||
{
|
{
|
||||||
if (hquery->family == AF_INET)
|
if (hquery->sent_family == AF_INET)
|
||||||
{
|
{
|
||||||
status = ares_parse_a_reply(abuf, alen, &host, NULL, NULL);
|
status = ares_parse_a_reply(abuf, alen, &host, NULL, NULL);
|
||||||
if (host && channel->nsort)
|
if (host && channel->nsort)
|
||||||
sort_addresses(host, channel->sortlist, channel->nsort);
|
sort_addresses(host, channel->sortlist, channel->nsort);
|
||||||
}
|
}
|
||||||
else if (hquery->family == AF_INET6)
|
else if (hquery->sent_family == AF_INET6)
|
||||||
{
|
{
|
||||||
status = ares_parse_aaaa_reply(abuf, alen, &host, NULL, NULL);
|
status = ares_parse_aaaa_reply(abuf, alen, &host, NULL, NULL);
|
||||||
|
if (status == ARES_ENODATA || status == ARES_EBADRESP) {
|
||||||
|
/* The query returned something but either there were no AAAA records (e.g. just CNAME)
|
||||||
|
or the response was malformed. Try looking up A instead.
|
||||||
|
We should possibly limit this attempt-next logic to AF_UNSPEC lookups only. */
|
||||||
|
hquery->sent_family = AF_INET;
|
||||||
|
ares_search(hquery->channel, hquery->name, C_IN, T_A,
|
||||||
|
host_callback, hquery);
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (host && channel->nsort)
|
if (host && channel->nsort)
|
||||||
sort6_addresses(host, channel->sortlist, channel->nsort);
|
sort6_addresses(host, channel->sortlist, channel->nsort);
|
||||||
}
|
}
|
||||||
end_hquery(hquery, status, host);
|
end_hquery(hquery, status, host);
|
||||||
}
|
}
|
||||||
else if (status == ARES_ENODATA && hquery->family == AF_INET6)
|
else if ((status == ARES_ENODATA || status == ARES_EBADRESP || status == ARES_ETIMEOUT) && hquery->sent_family == AF_INET6)
|
||||||
{
|
{
|
||||||
/* There was no AAAA. Now lookup an A */
|
/* The AAAA query yielded no useful result. Now look up an A instead.
|
||||||
hquery->family = AF_INET;
|
We should possibly limit this attempt-next logic to AF_UNSPEC lookups only. */
|
||||||
|
hquery->sent_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);
|
||||||
}
|
}
|
||||||
@@ -244,12 +275,12 @@ static int fake_hostent(const char *name, int family, ares_host_callback callbac
|
|||||||
|
|
||||||
if (family == AF_INET)
|
if (family == AF_INET)
|
||||||
{
|
{
|
||||||
hostent.h_length = sizeof(struct in_addr);
|
hostent.h_length = (int)sizeof(struct in_addr);
|
||||||
addrs[0] = (char *)∈
|
addrs[0] = (char *)∈
|
||||||
}
|
}
|
||||||
else if (family == AF_INET6)
|
else if (family == AF_INET6)
|
||||||
{
|
{
|
||||||
hostent.h_length = sizeof(struct in6_addr);
|
hostent.h_length = (int)sizeof(struct in6_addr);
|
||||||
addrs[0] = (char *)&in6;
|
addrs[0] = (char *)&in6;
|
||||||
}
|
}
|
||||||
/* Duplicate the name, to avoid a constness violation. */
|
/* Duplicate the name, to avoid a constness violation. */
|
||||||
@@ -271,6 +302,33 @@ static int fake_hostent(const char *name, int family, ares_host_callback callbac
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* This is an API method */
|
||||||
|
int ares_gethostbyname_file(ares_channel channel, const char *name,
|
||||||
|
int family, struct hostent **host)
|
||||||
|
{
|
||||||
|
int result;
|
||||||
|
|
||||||
|
/* We only take the channel to ensure that ares_init() been called. */
|
||||||
|
if(channel == NULL)
|
||||||
|
{
|
||||||
|
/* Anything will do, really. This seems fine, and is consistent with
|
||||||
|
other error cases. */
|
||||||
|
*host = NULL;
|
||||||
|
return ARES_ENOTFOUND;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Just chain to the internal implementation we use here; it's exactly
|
||||||
|
* what we want.
|
||||||
|
*/
|
||||||
|
result = file_lookup(name, family, host);
|
||||||
|
if(result != ARES_SUCCESS)
|
||||||
|
{
|
||||||
|
/* We guarantee a NULL hostent on failure. */
|
||||||
|
*host = NULL;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
static int file_lookup(const char *name, int family, struct hostent **host)
|
static int file_lookup(const char *name, int family, struct hostent **host)
|
||||||
{
|
{
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
@@ -346,7 +404,7 @@ static int file_lookup(const char *name, int family, struct hostent **host)
|
|||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void sort_addresses(struct hostent *host, struct apattern *sortlist,
|
static void sort_addresses(struct hostent *host, const struct apattern *sortlist,
|
||||||
int nsort)
|
int nsort)
|
||||||
{
|
{
|
||||||
struct in_addr a1, a2;
|
struct in_addr a1, a2;
|
||||||
@@ -376,7 +434,8 @@ static void sort_addresses(struct hostent *host, struct apattern *sortlist,
|
|||||||
/* Find the first entry in sortlist which matches addr. Return nsort
|
/* Find the first entry in sortlist which matches addr. Return nsort
|
||||||
* if none of them match.
|
* if none of them match.
|
||||||
*/
|
*/
|
||||||
static int get_address_index(struct in_addr *addr, struct apattern *sortlist,
|
static int get_address_index(const struct in_addr *addr,
|
||||||
|
const struct apattern *sortlist,
|
||||||
int nsort)
|
int nsort)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
@@ -387,13 +446,13 @@ static int get_address_index(struct in_addr *addr, struct apattern *sortlist,
|
|||||||
continue;
|
continue;
|
||||||
if (sortlist[i].type == PATTERN_MASK)
|
if (sortlist[i].type == PATTERN_MASK)
|
||||||
{
|
{
|
||||||
if ((addr->s_addr & sortlist[i].mask.addr.addr4.s_addr)
|
if ((addr->s_addr & sortlist[i].mask.addr4.s_addr)
|
||||||
== sortlist[i].addr.addr4.s_addr)
|
== sortlist[i].addrV4.s_addr)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (!ares_bitncmp(&addr->s_addr, &sortlist[i].addr.addr4.s_addr,
|
if (!ares_bitncmp(&addr->s_addr, &sortlist[i].addrV4.s_addr,
|
||||||
sortlist[i].mask.bits))
|
sortlist[i].mask.bits))
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -401,7 +460,7 @@ static int get_address_index(struct in_addr *addr, struct apattern *sortlist,
|
|||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void sort6_addresses(struct hostent *host, struct apattern *sortlist,
|
static void sort6_addresses(struct hostent *host, const struct apattern *sortlist,
|
||||||
int nsort)
|
int nsort)
|
||||||
{
|
{
|
||||||
struct in6_addr a1, a2;
|
struct in6_addr a1, a2;
|
||||||
@@ -431,8 +490,9 @@ static void sort6_addresses(struct hostent *host, struct apattern *sortlist,
|
|||||||
/* Find the first entry in sortlist which matches addr. Return nsort
|
/* Find the first entry in sortlist which matches addr. Return nsort
|
||||||
* if none of them match.
|
* if none of them match.
|
||||||
*/
|
*/
|
||||||
static int get6_address_index(struct in6_addr *addr, struct apattern *sortlist,
|
static int get6_address_index(const struct in6_addr *addr,
|
||||||
int nsort)
|
const struct apattern *sortlist,
|
||||||
|
int nsort)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@@ -440,7 +500,7 @@ static int get6_address_index(struct in6_addr *addr, struct apattern *sortlist,
|
|||||||
{
|
{
|
||||||
if (sortlist[i].family != AF_INET6)
|
if (sortlist[i].family != AF_INET6)
|
||||||
continue;
|
continue;
|
||||||
if (!ares_bitncmp(&addr->s6_addr, &sortlist[i].addr.addr6.s6_addr, sortlist[i].mask.bits))
|
if (!ares_bitncmp(&addr->s6_addr, &sortlist[i].addrV6.s6_addr, sortlist[i].mask.bits))
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return i;
|
return i;
|
||||||
|
|||||||
84
ares/ares_gethostbyname_file.3
Normal file
84
ares/ares_gethostbyname_file.3
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
.\" $Id$
|
||||||
|
.\"
|
||||||
|
.\" Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
|
.\"
|
||||||
|
.\" Permission to use, copy, modify, and distribute this
|
||||||
|
.\" software and its documentation for any purpose and without
|
||||||
|
.\" fee is hereby granted, provided that the above copyright
|
||||||
|
.\" notice appear in all copies and that both that copyright
|
||||||
|
.\" notice and this permission notice appear in supporting
|
||||||
|
.\" documentation, and that the name of M.I.T. not be used in
|
||||||
|
.\" advertising or publicity pertaining to distribution of the
|
||||||
|
.\" software without specific, written prior permission.
|
||||||
|
.\" M.I.T. makes no representations about the suitability of
|
||||||
|
.\" this software for any purpose. It is provided "as is"
|
||||||
|
.\" without express or implied warranty.
|
||||||
|
.\"
|
||||||
|
.TH ARES_GETHOSTBYNAME 3 "25 July 1998"
|
||||||
|
.SH NAME
|
||||||
|
ares_gethostbyname_file \- Lookup a name in the system's hosts file
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.nf
|
||||||
|
.B #include <ares.h>
|
||||||
|
.PP
|
||||||
|
.B void ares_gethostbyname_file(ares_channel \fIchannel\fP, const char *\fIname\fP,
|
||||||
|
.B int \fIfamily\fP, struct hostent **host)
|
||||||
|
.fi
|
||||||
|
.SH DESCRIPTION
|
||||||
|
The
|
||||||
|
.B ares_gethostbyname_file
|
||||||
|
function performs a host lookup by name against the system's hosts file (or equivalent local hostname database).
|
||||||
|
The
|
||||||
|
.IR channel
|
||||||
|
parameter is required, but no asynchronous queries are performed. Instead, the
|
||||||
|
lookup is done via the same mechanism used to perform 'f' lookups
|
||||||
|
(see the
|
||||||
|
.I lookups
|
||||||
|
options field in \fIares_init_options(3)\fP).
|
||||||
|
The parameter
|
||||||
|
.I name
|
||||||
|
gives the hostname as a NUL-terminated C string, and
|
||||||
|
.I family
|
||||||
|
gives the desired type of address for the resulting host entry.
|
||||||
|
.PP
|
||||||
|
The return value indicates whether the query succeeded and, if not, how it
|
||||||
|
failed. It may have any of the following values:
|
||||||
|
.TP 19
|
||||||
|
.B ARES_SUCCESS
|
||||||
|
The host lookup completed successfully and
|
||||||
|
.I host
|
||||||
|
now points to the result (and must be freed with \fIares_free_hostent(3)\fP).
|
||||||
|
.TP 19
|
||||||
|
.B ARES_ENOTFOUND
|
||||||
|
The hostname
|
||||||
|
.I name
|
||||||
|
was not found.
|
||||||
|
.TP 19
|
||||||
|
.B ARES_EFILE
|
||||||
|
There was a file I/O error while performing the lookup.
|
||||||
|
.TP 19
|
||||||
|
.B ARES_ENOMEM
|
||||||
|
Memory was exhausted.
|
||||||
|
.PP
|
||||||
|
On successful completion of the query, the pointer pointed to by
|
||||||
|
.I host
|
||||||
|
points to a
|
||||||
|
.B struct hostent
|
||||||
|
containing the address of the host returned by the lookup. The user must
|
||||||
|
free the memory pointed to by
|
||||||
|
.IR host
|
||||||
|
when finished with it by calling \fIares_free_hostent(3)\fP. If the lookup did
|
||||||
|
not complete successfully,
|
||||||
|
.I host
|
||||||
|
will be
|
||||||
|
.BR NULL .
|
||||||
|
.SH AVAILABILITY
|
||||||
|
Added in c-ares 1.5.4
|
||||||
|
.SH SEE ALSO
|
||||||
|
.BR ares_gethostbyname (3),
|
||||||
|
.BR ares_free_hostent (3),
|
||||||
|
.BR ares_init_options (3)
|
||||||
|
.SH AUTHOR
|
||||||
|
Brad Spencer
|
||||||
|
.br
|
||||||
|
Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
@@ -14,7 +14,7 @@
|
|||||||
.\" this software for any purpose. It is provided "as is"
|
.\" this software for any purpose. It is provided "as is"
|
||||||
.\" without express or implied warranty.
|
.\" without express or implied warranty.
|
||||||
.\"
|
.\"
|
||||||
.TH ARES_GETNAMEINFO 3 "16 May 2005"
|
.TH ARES_GETNAMEINFO 3 "1 May 2009"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
ares_getnameinfo \- Address-to-nodename translation in protocol-independent manner
|
ares_getnameinfo \- Address-to-nodename translation in protocol-independent manner
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
@@ -25,7 +25,7 @@ ares_getnameinfo \- Address-to-nodename translation in protocol-independent mann
|
|||||||
.B int \fItimeouts\fP, char *\fInode\fP, char *\fIservice\fP)
|
.B int \fItimeouts\fP, char *\fInode\fP, char *\fIservice\fP)
|
||||||
.PP
|
.PP
|
||||||
.B void ares_getnameinfo(ares_channel \fIchannel\fP, const struct sockaddr *\fIsa\fP,
|
.B void ares_getnameinfo(ares_channel \fIchannel\fP, const struct sockaddr *\fIsa\fP,
|
||||||
.B socklen_t \fIsalen\fP, int \fIflags\fP, ares_nameinfo_callback \fIcallback\fP,
|
.B ares_socklen_t \fIsalen\fP, int \fIflags\fP, ares_nameinfo_callback \fIcallback\fP,
|
||||||
.B void *\fIarg\fP)
|
.B void *\fIarg\fP)
|
||||||
.fi
|
.fi
|
||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
||||||
|
|||||||
@@ -16,17 +16,32 @@
|
|||||||
*/
|
*/
|
||||||
#include "setup.h"
|
#include "setup.h"
|
||||||
|
|
||||||
#if defined(WIN32) && !defined(WATT32)
|
#ifdef HAVE_GETSERVBYPORT_R
|
||||||
#include "nameser.h"
|
# if !defined(GETSERVBYPORT_R_ARGS) || \
|
||||||
#else
|
(GETSERVBYPORT_R_ARGS < 4) || (GETSERVBYPORT_R_ARGS > 6)
|
||||||
#include <sys/socket.h>
|
# error "you MUST specifiy a valid number of arguments for getservbyport_r"
|
||||||
#include <netinet/in.h>
|
# endif
|
||||||
#include <netdb.h>
|
|
||||||
#include <arpa/inet.h>
|
|
||||||
#include <arpa/nameser.h>
|
|
||||||
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
|
|
||||||
#include <arpa/nameser_compat.h>
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
|
# include <sys/socket.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_NETINET_IN_H
|
||||||
|
# include <netinet/in.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_NETDB_H
|
||||||
|
# include <netdb.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_ARPA_INET_H
|
||||||
|
# include <arpa/inet.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_ARPA_NAMESER_H
|
||||||
|
# include <arpa/nameser.h>
|
||||||
|
#else
|
||||||
|
# include "nameser.h"
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
|
||||||
|
# include <arpa/nameser_compat.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_NET_IF_H
|
#ifdef HAVE_NET_IF_H
|
||||||
@@ -42,9 +57,9 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include "ares.h"
|
#include "ares.h"
|
||||||
#include "ares_private.h"
|
|
||||||
#include "ares_ipv6.h"
|
#include "ares_ipv6.h"
|
||||||
#include "inet_ntop.h"
|
#include "inet_ntop.h"
|
||||||
|
#include "ares_private.h"
|
||||||
|
|
||||||
#ifdef WATT32
|
#ifdef WATT32
|
||||||
#undef WIN32
|
#undef WIN32
|
||||||
@@ -77,7 +92,8 @@ static void append_scopeid(struct sockaddr_in6 *addr6, unsigned int scopeid,
|
|||||||
#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,
|
||||||
|
ares_socklen_t salen,
|
||||||
int flags, ares_nameinfo_callback callback, void *arg)
|
int flags, ares_nameinfo_callback callback, void *arg)
|
||||||
{
|
{
|
||||||
struct sockaddr_in *addr = NULL;
|
struct sockaddr_in *addr = NULL;
|
||||||
@@ -210,6 +226,7 @@ static void nameinfo_callback(void *arg, int status, int timeouts, struct hosten
|
|||||||
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
|
||||||
for this domain name and removing it.
|
for this domain name and removing it.
|
||||||
*/
|
*/
|
||||||
|
#ifdef HAVE_GETHOSTNAME
|
||||||
if (niquery->flags & ARES_NI_NOFQDN)
|
if (niquery->flags & ARES_NI_NOFQDN)
|
||||||
{
|
{
|
||||||
char buf[255];
|
char buf[255];
|
||||||
@@ -222,6 +239,7 @@ static void nameinfo_callback(void *arg, int status, int timeouts, struct hosten
|
|||||||
*end = 0;
|
*end = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
niquery->callback(niquery->arg, ARES_SUCCESS, niquery->timeouts, (char *)(host->h_name),
|
niquery->callback(niquery->arg, ARES_SUCCESS, niquery->timeouts, (char *)(host->h_name),
|
||||||
service);
|
service);
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -82,7 +82,7 @@ ares_getopt(int nargc, char * const nargv[], const char *ostr)
|
|||||||
}
|
}
|
||||||
} /* option letter okay? */
|
} /* option letter okay? */
|
||||||
if ((optopt = (int)*place++) == (int)':' ||
|
if ((optopt = (int)*place++) == (int)':' ||
|
||||||
!(oli = strchr(ostr, optopt))) {
|
(oli = strchr(ostr, optopt)) == NULL) {
|
||||||
/*
|
/*
|
||||||
* if the user didn't specify '-' as an option,
|
* if the user didn't specify '-' as an option,
|
||||||
* assume it means EOF.
|
* assume it means EOF.
|
||||||
|
|||||||
@@ -33,6 +33,12 @@
|
|||||||
|
|
||||||
int ares_getopt(int nargc, char * const nargv[], const char *ostr);
|
int ares_getopt(int nargc, char * const nargv[], const char *ostr);
|
||||||
|
|
||||||
|
#if defined(WATT32)
|
||||||
|
#undef optarg
|
||||||
|
#undef optind
|
||||||
|
#undef opterr
|
||||||
|
#endif
|
||||||
|
|
||||||
extern char *optarg;
|
extern char *optarg;
|
||||||
extern int optind;
|
extern int optind;
|
||||||
extern int opterr;
|
extern int opterr;
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
.\" $Id$
|
.\" $Id$
|
||||||
.\"
|
.\"
|
||||||
.\" Copyright 1998 by the Massachusetts Institute of Technology.
|
.\" Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
|
.\" Copyright (C) 2007-2008 by Daniel Stenberg
|
||||||
.\"
|
.\"
|
||||||
.\" 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,7 +15,7 @@
|
|||||||
.\" this software for any purpose. It is provided "as is"
|
.\" this software for any purpose. It is provided "as is"
|
||||||
.\" without express or implied warranty.
|
.\" without express or implied warranty.
|
||||||
.\"
|
.\"
|
||||||
.TH ARES_INIT 3 "7 December 2004"
|
.TH ARES_INIT 3 "13 May 2008"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
ares_init, ares_init_options \- Initialize a resolver channel
|
ares_init, ares_init_options \- Initialize a resolver channel
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
@@ -49,10 +50,22 @@ description of possible flag values.
|
|||||||
.B ARES_OPT_TIMEOUT
|
.B ARES_OPT_TIMEOUT
|
||||||
.B int \fItimeout\fP;
|
.B int \fItimeout\fP;
|
||||||
.br
|
.br
|
||||||
The number of seconds each name server is given to respond to a query
|
The number of seconds each name server is given to respond to a query on the
|
||||||
on the first try. (After the first try, the timeout algorithm becomes
|
first try. (After the first try, the timeout algorithm becomes more
|
||||||
more complicated, but scales linearly with the value of
|
complicated, but scales linearly with the value of \fItimeout\fP.) The
|
||||||
\fItimeout\fP.) The default is five seconds.
|
default is five seconds. This option is being deprecated by
|
||||||
|
\fIARES_OPT_TIMEOUTMS\fP starting in c-ares 1.5.2.
|
||||||
|
.TP 18
|
||||||
|
.B ARES_OPT_TIMEOUTMS
|
||||||
|
.B int \fItimeout\fP;
|
||||||
|
.br
|
||||||
|
The number of milliseconds each name server is given to respond to a query on
|
||||||
|
the first try. (After the first try, the timeout algorithm becomes more
|
||||||
|
complicated, but scales linearly with the value of \fItimeout\fP.) The
|
||||||
|
default is five seconds. Note that this option is specified with the same
|
||||||
|
struct field as the former \fIARES_OPT_TIMEOUT\fP, it is but the option bits
|
||||||
|
that tell c-ares how to interpret the number. This option was added in c-ares
|
||||||
|
1.5.2.
|
||||||
.TP 18
|
.TP 18
|
||||||
.B ARES_OPT_TRIES
|
.B ARES_OPT_TRIES
|
||||||
.B int \fItries\fP;
|
.B int \fItries\fP;
|
||||||
@@ -141,7 +154,7 @@ recursion for you. Recursion must be handled by the application calling ares
|
|||||||
if \fIARES_FLAG_NORECURSE\fP is set.
|
if \fIARES_FLAG_NORECURSE\fP is set.
|
||||||
.TP 23
|
.TP 23
|
||||||
.B ARES_FLAG_STAYOPEN
|
.B ARES_FLAG_STAYOPEN
|
||||||
Do not close communciations sockets when the number of active queries
|
Do not close communications sockets when the number of active queries
|
||||||
drops to zero.
|
drops to zero.
|
||||||
.TP 23
|
.TP 23
|
||||||
.B ARES_FLAG_NOSEARCH
|
.B ARES_FLAG_NOSEARCH
|
||||||
@@ -172,7 +185,8 @@ A configuration file could not be read.
|
|||||||
.B ARES_ENOMEM
|
.B ARES_ENOMEM
|
||||||
The process's available memory was exhausted.
|
The process's available memory was exhausted.
|
||||||
.SH SEE ALSO
|
.SH SEE ALSO
|
||||||
.BR ares_destroy (3)
|
.BR ares_destroy(3),
|
||||||
|
.BR ares_dup(3)
|
||||||
.SH AUTHOR
|
.SH AUTHOR
|
||||||
Greg Hudson, MIT Information Systems
|
Greg Hudson, MIT Information Systems
|
||||||
.br
|
.br
|
||||||
|
|||||||
395
ares/ares_init.c
395
ares/ares_init.c
@@ -1,6 +1,7 @@
|
|||||||
/* $Id$ */
|
/* $Id$ */
|
||||||
|
|
||||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
|
* Copyright (C) 2007-2009 by Daniel Stenberg
|
||||||
*
|
*
|
||||||
* 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
|
||||||
@@ -18,11 +19,9 @@
|
|||||||
#include "setup.h"
|
#include "setup.h"
|
||||||
|
|
||||||
#if defined(WIN32) && !defined(WATT32)
|
#if defined(WIN32) && !defined(WATT32)
|
||||||
#include "nameser.h"
|
|
||||||
#include <iphlpapi.h>
|
#include <iphlpapi.h>
|
||||||
#include <malloc.h>
|
#endif
|
||||||
|
|
||||||
#else
|
|
||||||
#ifdef HAVE_SYS_PARAM_H
|
#ifdef HAVE_SYS_PARAM_H
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
#endif
|
#endif
|
||||||
@@ -35,20 +34,30 @@
|
|||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_NETINET_IN_H
|
||||||
#include <netinet/in.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
|
||||||
|
|
||||||
|
#ifdef HAVE_NETDB_H
|
||||||
|
#include <netdb.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_ARPA_INET_H
|
||||||
|
#include <arpa/inet.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_ARPA_NAMESER_H
|
||||||
|
# include <arpa/nameser.h>
|
||||||
|
#else
|
||||||
|
# include "nameser.h"
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
|
||||||
|
# include <arpa/nameser_compat.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#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
|
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@@ -57,8 +66,9 @@
|
|||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include "ares.h"
|
#include "ares.h"
|
||||||
#include "ares_private.h"
|
|
||||||
#include "inet_net_pton.h"
|
#include "inet_net_pton.h"
|
||||||
|
#include "ares_library_init.h"
|
||||||
|
#include "ares_private.h"
|
||||||
|
|
||||||
#ifdef WATT32
|
#ifdef WATT32
|
||||||
#undef WIN32 /* Redefined in MingW/MSVC headers */
|
#undef WIN32 /* Redefined in MingW/MSVC headers */
|
||||||
@@ -107,6 +117,7 @@ int ares_init_options(ares_channel *channelptr, struct ares_options *options,
|
|||||||
int i;
|
int i;
|
||||||
int status = ARES_SUCCESS;
|
int status = ARES_SUCCESS;
|
||||||
struct server_state *server;
|
struct server_state *server;
|
||||||
|
struct timeval now;
|
||||||
|
|
||||||
#ifdef CURLDEBUG
|
#ifdef CURLDEBUG
|
||||||
const char *env = getenv("CARES_MEMDEBUG");
|
const char *env = getenv("CARES_MEMDEBUG");
|
||||||
@@ -124,6 +135,8 @@ int ares_init_options(ares_channel *channelptr, struct ares_options *options,
|
|||||||
return ARES_ENOMEM;
|
return ARES_ENOMEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
now = ares__tvnow();
|
||||||
|
|
||||||
/* 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.
|
||||||
*/
|
*/
|
||||||
@@ -131,6 +144,7 @@ int ares_init_options(ares_channel *channelptr, struct ares_options *options,
|
|||||||
channel->timeout = -1;
|
channel->timeout = -1;
|
||||||
channel->tries = -1;
|
channel->tries = -1;
|
||||||
channel->ndots = -1;
|
channel->ndots = -1;
|
||||||
|
channel->rotate = -1;
|
||||||
channel->udp_port = -1;
|
channel->udp_port = -1;
|
||||||
channel->tcp_port = -1;
|
channel->tcp_port = -1;
|
||||||
channel->socket_send_buffer_size = -1;
|
channel->socket_send_buffer_size = -1;
|
||||||
@@ -145,8 +159,11 @@ int ares_init_options(ares_channel *channelptr, struct ares_options *options,
|
|||||||
channel->servers = NULL;
|
channel->servers = NULL;
|
||||||
channel->sock_state_cb = NULL;
|
channel->sock_state_cb = NULL;
|
||||||
channel->sock_state_cb_data = NULL;
|
channel->sock_state_cb_data = NULL;
|
||||||
|
channel->sock_create_cb = NULL;
|
||||||
|
channel->sock_create_cb_data = NULL;
|
||||||
|
|
||||||
channel->last_timeout_processed = (long)time(NULL);
|
channel->last_server = 0;
|
||||||
|
channel->last_timeout_processed = (time_t)now.tv_sec;
|
||||||
|
|
||||||
/* Initialize our lists of queries */
|
/* Initialize our lists of queries */
|
||||||
ares__init_list_head(&(channel->all_queries));
|
ares__init_list_head(&(channel->all_queries));
|
||||||
@@ -164,7 +181,7 @@ int ares_init_options(ares_channel *channelptr, struct ares_options *options,
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
if (status == ARES_SUCCESS) {
|
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",
|
DEBUGF(fprintf(stderr, "Error: init_by_options failed: %s\n",
|
||||||
ares_strerror(status)));
|
ares_strerror(status)));
|
||||||
@@ -242,6 +259,40 @@ int ares_init_options(ares_channel *channelptr, struct ares_options *options,
|
|||||||
return ARES_SUCCESS;
|
return ARES_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ares_dup() duplicates a channel handle with all its options and returns a
|
||||||
|
new channel handle */
|
||||||
|
int ares_dup(ares_channel *dest, ares_channel src)
|
||||||
|
{
|
||||||
|
struct ares_options opts;
|
||||||
|
int rc;
|
||||||
|
int optmask;
|
||||||
|
|
||||||
|
*dest = NULL; /* in case of failure return NULL explicitly */
|
||||||
|
|
||||||
|
/* First get the options supported by the old ares_save_options() function,
|
||||||
|
which is most of them */
|
||||||
|
rc = ares_save_options(src, &opts, &optmask);
|
||||||
|
if(rc)
|
||||||
|
return rc;
|
||||||
|
|
||||||
|
/* Then create the new channel with those options */
|
||||||
|
rc = ares_init_options(dest, &opts, optmask);
|
||||||
|
|
||||||
|
/* destroy the options copy to not leak any memory */
|
||||||
|
ares_destroy_options(&opts);
|
||||||
|
|
||||||
|
if(rc)
|
||||||
|
return rc;
|
||||||
|
|
||||||
|
/* Now clone the options that ares_save_options() doesn't support. */
|
||||||
|
(*dest)->sock_create_cb = src->sock_create_cb;
|
||||||
|
(*dest)->sock_create_cb_data = src->sock_create_cb_data;
|
||||||
|
|
||||||
|
|
||||||
|
return ARES_SUCCESS; /* everything went fine */
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/* Save options from initialized channel */
|
/* Save options from initialized channel */
|
||||||
int ares_save_options(ares_channel channel, struct ares_options *options,
|
int ares_save_options(ares_channel channel, struct ares_options *options,
|
||||||
int *optmask)
|
int *optmask)
|
||||||
@@ -254,13 +305,20 @@ int ares_save_options(ares_channel channel, struct ares_options *options,
|
|||||||
if (!ARES_CONFIG_CHECK(channel))
|
if (!ARES_CONFIG_CHECK(channel))
|
||||||
return ARES_ENODATA;
|
return ARES_ENODATA;
|
||||||
|
|
||||||
(*optmask) = (ARES_OPT_FLAGS|ARES_OPT_TIMEOUT|ARES_OPT_TRIES|ARES_OPT_NDOTS|
|
/* Traditionally the optmask wasn't saved in the channel struct so it was
|
||||||
|
recreated here. ROTATE is the first option that has no struct field of
|
||||||
|
its own in the public config struct */
|
||||||
|
(*optmask) = (ARES_OPT_FLAGS|ARES_OPT_TRIES|ARES_OPT_NDOTS|
|
||||||
ARES_OPT_UDP_PORT|ARES_OPT_TCP_PORT|ARES_OPT_SOCK_STATE_CB|
|
ARES_OPT_UDP_PORT|ARES_OPT_TCP_PORT|ARES_OPT_SOCK_STATE_CB|
|
||||||
ARES_OPT_SERVERS|ARES_OPT_DOMAINS|ARES_OPT_LOOKUPS|
|
ARES_OPT_SERVERS|ARES_OPT_DOMAINS|ARES_OPT_LOOKUPS|
|
||||||
ARES_OPT_SORTLIST);
|
ARES_OPT_SORTLIST|ARES_OPT_TIMEOUTMS) |
|
||||||
|
(channel->optmask & ARES_OPT_ROTATE);
|
||||||
|
|
||||||
/* Copy easy stuff */
|
/* Copy easy stuff */
|
||||||
options->flags = channel->flags;
|
options->flags = channel->flags;
|
||||||
|
|
||||||
|
/* We return full millisecond resolution but that's only because we don't
|
||||||
|
set the ARES_OPT_TIMEOUT anymore, only the new ARES_OPT_TIMEOUTMS */
|
||||||
options->timeout = channel->timeout;
|
options->timeout = channel->timeout;
|
||||||
options->tries = channel->tries;
|
options->tries = channel->tries;
|
||||||
options->ndots = channel->ndots;
|
options->ndots = channel->ndots;
|
||||||
@@ -328,12 +386,16 @@ static int init_by_options(ares_channel channel,
|
|||||||
/* Easy stuff. */
|
/* Easy stuff. */
|
||||||
if ((optmask & ARES_OPT_FLAGS) && channel->flags == -1)
|
if ((optmask & ARES_OPT_FLAGS) && channel->flags == -1)
|
||||||
channel->flags = options->flags;
|
channel->flags = options->flags;
|
||||||
if ((optmask & ARES_OPT_TIMEOUT) && channel->timeout == -1)
|
if ((optmask & ARES_OPT_TIMEOUTMS) && channel->timeout == -1)
|
||||||
channel->timeout = options->timeout;
|
channel->timeout = options->timeout;
|
||||||
|
else if ((optmask & ARES_OPT_TIMEOUT) && channel->timeout == -1)
|
||||||
|
channel->timeout = options->timeout * 1000;
|
||||||
if ((optmask & ARES_OPT_TRIES) && channel->tries == -1)
|
if ((optmask & ARES_OPT_TRIES) && channel->tries == -1)
|
||||||
channel->tries = options->tries;
|
channel->tries = options->tries;
|
||||||
if ((optmask & ARES_OPT_NDOTS) && channel->ndots == -1)
|
if ((optmask & ARES_OPT_NDOTS) && channel->ndots == -1)
|
||||||
channel->ndots = options->ndots;
|
channel->ndots = options->ndots;
|
||||||
|
if ((optmask & ARES_OPT_ROTATE) && channel->rotate == -1)
|
||||||
|
channel->rotate = 1;
|
||||||
if ((optmask & ARES_OPT_UDP_PORT) && channel->udp_port == -1)
|
if ((optmask & ARES_OPT_UDP_PORT) && channel->udp_port == -1)
|
||||||
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)
|
||||||
@@ -404,11 +466,14 @@ static int init_by_options(ares_channel channel,
|
|||||||
return ARES_ENOMEM;
|
return ARES_ENOMEM;
|
||||||
for (i = 0; i < options->nsort; i++)
|
for (i = 0; i < options->nsort; i++)
|
||||||
{
|
{
|
||||||
memcpy(&(channel->sortlist[i]), &(options->sortlist[i]), sizeof(struct apattern));
|
memcpy(&(channel->sortlist[i]), &(options->sortlist[i]),
|
||||||
|
sizeof(struct apattern));
|
||||||
}
|
}
|
||||||
channel->nsort = options->nsort;
|
channel->nsort = options->nsort;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
channel->optmask = optmask;
|
||||||
|
|
||||||
return ARES_SUCCESS;
|
return ARES_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -494,11 +559,8 @@ static int get_res_interfaces_nt(HKEY hKey, const char *subkey, char **obuf)
|
|||||||
|
|
||||||
static int get_iphlpapi_dns_info (char *ret_buf, size_t ret_size)
|
static int get_iphlpapi_dns_info (char *ret_buf, size_t ret_size)
|
||||||
{
|
{
|
||||||
FIXED_INFO *fi = alloca (sizeof(*fi));
|
FIXED_INFO *fi, *newfi;
|
||||||
DWORD size = sizeof (*fi);
|
DWORD size = sizeof (*fi);
|
||||||
typedef DWORD (WINAPI* get_net_param_func) (FIXED_INFO*, DWORD*);
|
|
||||||
get_net_param_func fpGetNetworkParams; /* available only on Win-98/2000+ */
|
|
||||||
HMODULE handle;
|
|
||||||
IP_ADDR_STRING *ipAddr;
|
IP_ADDR_STRING *ipAddr;
|
||||||
int i, count = 0;
|
int i, count = 0;
|
||||||
int debug = 0;
|
int debug = 0;
|
||||||
@@ -507,23 +569,21 @@ static int get_iphlpapi_dns_info (char *ret_buf, size_t ret_size)
|
|||||||
char *ret = ret_buf;
|
char *ret = ret_buf;
|
||||||
HRESULT res;
|
HRESULT res;
|
||||||
|
|
||||||
|
fi = malloc(size);
|
||||||
if (!fi)
|
if (!fi)
|
||||||
return (0);
|
return 0;
|
||||||
|
|
||||||
handle = LoadLibrary ("iphlpapi.dll");
|
|
||||||
if (!handle)
|
|
||||||
return (0);
|
|
||||||
|
|
||||||
fpGetNetworkParams = (get_net_param_func) GetProcAddress (handle, "GetNetworkParams");
|
|
||||||
if (!fpGetNetworkParams)
|
|
||||||
goto quit;
|
|
||||||
|
|
||||||
res = (*fpGetNetworkParams) (fi, &size);
|
res = (*fpGetNetworkParams) (fi, &size);
|
||||||
if ((res != ERROR_BUFFER_OVERFLOW) && (res != ERROR_SUCCESS))
|
if ((res != ERROR_BUFFER_OVERFLOW) && (res != ERROR_SUCCESS))
|
||||||
goto quit;
|
goto quit;
|
||||||
|
|
||||||
fi = alloca (size);
|
newfi = realloc(fi, size);
|
||||||
if (!fi || (*fpGetNetworkParams) (fi, &size) != ERROR_SUCCESS)
|
if (!newfi)
|
||||||
|
goto quit;
|
||||||
|
|
||||||
|
fi = newfi;
|
||||||
|
res = (*fpGetNetworkParams) (fi, &size);
|
||||||
|
if (res != ERROR_SUCCESS)
|
||||||
goto quit;
|
goto quit;
|
||||||
|
|
||||||
if (debug)
|
if (debug)
|
||||||
@@ -556,14 +616,14 @@ static int get_iphlpapi_dns_info (char *ret_buf, size_t ret_size)
|
|||||||
}
|
}
|
||||||
|
|
||||||
quit:
|
quit:
|
||||||
if (handle)
|
if (fi)
|
||||||
FreeLibrary (handle);
|
free(fi);
|
||||||
|
|
||||||
if (debug && left <= ip_size)
|
if (debug && left <= ip_size)
|
||||||
printf ("Too many nameservers. Truncating to %d addressess", count);
|
printf ("Too many nameservers. Truncating to %d addressess", count);
|
||||||
if (ret > ret_buf)
|
if (ret > ret_buf)
|
||||||
ret[-1] = '\0';
|
ret[-1] = '\0';
|
||||||
return (count);
|
return count;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -666,7 +726,7 @@ DhcpNameServer
|
|||||||
{
|
{
|
||||||
if (bytes)
|
if (bytes)
|
||||||
{
|
{
|
||||||
line = (char *)malloc(bytes+1);
|
line = malloc(bytes+1);
|
||||||
if (RegQueryValueEx(mykey, NAMESERVER, NULL, &data_type,
|
if (RegQueryValueEx(mykey, NAMESERVER, NULL, &data_type,
|
||||||
(unsigned char *)line, &bytes) ==
|
(unsigned char *)line, &bytes) ==
|
||||||
ERROR_SUCCESS)
|
ERROR_SUCCESS)
|
||||||
@@ -903,7 +963,8 @@ okay:
|
|||||||
|
|
||||||
static int init_by_defaults(ares_channel channel)
|
static int init_by_defaults(ares_channel channel)
|
||||||
{
|
{
|
||||||
char hostname[MAXHOSTNAMELEN + 1];
|
char *hostname = NULL;
|
||||||
|
int rc = ARES_SUCCESS;
|
||||||
|
|
||||||
if (channel->flags == -1)
|
if (channel->flags == -1)
|
||||||
channel->flags = 0;
|
channel->flags = 0;
|
||||||
@@ -913,58 +974,112 @@ static int init_by_defaults(ares_channel channel)
|
|||||||
channel->tries = DEFAULT_TRIES;
|
channel->tries = DEFAULT_TRIES;
|
||||||
if (channel->ndots == -1)
|
if (channel->ndots == -1)
|
||||||
channel->ndots = 1;
|
channel->ndots = 1;
|
||||||
|
if (channel->rotate == -1)
|
||||||
|
channel->rotate = 0;
|
||||||
if (channel->udp_port == -1)
|
if (channel->udp_port == -1)
|
||||||
channel->udp_port = htons(NAMESERVER_PORT);
|
channel->udp_port = htons(NAMESERVER_PORT);
|
||||||
if (channel->tcp_port == -1)
|
if (channel->tcp_port == -1)
|
||||||
channel->tcp_port = htons(NAMESERVER_PORT);
|
channel->tcp_port = htons(NAMESERVER_PORT);
|
||||||
|
|
||||||
if (channel->nservers == -1)
|
if (channel->nservers == -1) {
|
||||||
{
|
/* If nobody specified servers, try a local named. */
|
||||||
/* If nobody specified servers, try a local named. */
|
channel->servers = malloc(sizeof(struct server_state));
|
||||||
channel->servers = malloc(sizeof(struct server_state));
|
if (!channel->servers) {
|
||||||
if (!channel->servers)
|
rc = ARES_ENOMEM;
|
||||||
return ARES_ENOMEM;
|
goto error;
|
||||||
channel->servers[0].addr.s_addr = htonl(INADDR_LOOPBACK);
|
}
|
||||||
channel->nservers = 1;
|
channel->servers[0].addr.s_addr = htonl(INADDR_LOOPBACK);
|
||||||
|
channel->nservers = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef ENAMETOOLONG
|
||||||
|
#define toolong(x) (x == -1) && ((ENAMETOOLONG == errno) || (EINVAL == errno))
|
||||||
|
#else
|
||||||
|
#define toolong(x) (x == -1) && (EINVAL == errno)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (channel->ndomains == -1) {
|
||||||
|
/* Derive a default domain search list from the kernel hostname,
|
||||||
|
* or set it to empty if the hostname isn't helpful.
|
||||||
|
*/
|
||||||
|
size_t len = 64;
|
||||||
|
int res;
|
||||||
|
channel->ndomains = 0; /* default to none */
|
||||||
|
|
||||||
|
#ifdef HAVE_GETHOSTNAME
|
||||||
|
hostname = malloc(len);
|
||||||
|
if(!hostname) {
|
||||||
|
rc = ARES_ENOMEM;
|
||||||
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (channel->ndomains == -1)
|
do {
|
||||||
{
|
res = gethostname(hostname, len);
|
||||||
/* Derive a default domain search list from the kernel hostname,
|
|
||||||
* or set it to empty if the hostname isn't helpful.
|
if(toolong(res)) {
|
||||||
*/
|
char *p;
|
||||||
if (gethostname(hostname, sizeof(hostname)) == -1
|
len *= 2;
|
||||||
|| !strchr(hostname, '.'))
|
p = realloc(hostname, len);
|
||||||
{
|
if(!p) {
|
||||||
channel->ndomains = 0;
|
rc = ARES_ENOMEM;
|
||||||
|
goto error;
|
||||||
}
|
}
|
||||||
else
|
hostname = p;
|
||||||
{
|
continue;
|
||||||
channel->domains = malloc(sizeof(char *));
|
}
|
||||||
if (!channel->domains)
|
else if(res) {
|
||||||
return ARES_ENOMEM;
|
rc = ARES_EBADNAME;
|
||||||
channel->ndomains = 0;
|
goto error;
|
||||||
channel->domains[0] = strdup(strchr(hostname, '.') + 1);
|
}
|
||||||
if (!channel->domains[0])
|
|
||||||
return ARES_ENOMEM;
|
|
||||||
channel->ndomains = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (channel->nsort == -1)
|
} while(0);
|
||||||
{
|
|
||||||
channel->sortlist = NULL;
|
|
||||||
channel->nsort = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!channel->lookups)
|
if (strchr(hostname, '.')) {
|
||||||
{
|
/* a dot was found */
|
||||||
channel->lookups = strdup("fb");
|
|
||||||
if (!channel->lookups)
|
|
||||||
return ARES_ENOMEM;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ARES_SUCCESS;
|
channel->domains = malloc(sizeof(char *));
|
||||||
|
if (!channel->domains) {
|
||||||
|
rc = ARES_ENOMEM;
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
channel->domains[0] = strdup(strchr(hostname, '.') + 1);
|
||||||
|
if (!channel->domains[0]) {
|
||||||
|
rc = ARES_ENOMEM;
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
channel->ndomains = 1;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
if (channel->nsort == -1) {
|
||||||
|
channel->sortlist = NULL;
|
||||||
|
channel->nsort = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!channel->lookups) {
|
||||||
|
channel->lookups = strdup("fb");
|
||||||
|
if (!channel->lookups)
|
||||||
|
rc = ARES_ENOMEM;
|
||||||
|
}
|
||||||
|
|
||||||
|
error:
|
||||||
|
if(rc) {
|
||||||
|
if(channel->servers)
|
||||||
|
free(channel->servers);
|
||||||
|
|
||||||
|
if(channel->domains && channel->domains[0])
|
||||||
|
free(channel->domains[0]);
|
||||||
|
if(channel->domains)
|
||||||
|
free(channel->domains);
|
||||||
|
if(channel->lookups)
|
||||||
|
free(channel->lookups);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(hostname)
|
||||||
|
free(hostname);
|
||||||
|
|
||||||
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef WIN32
|
#ifndef WIN32
|
||||||
@@ -1104,8 +1219,8 @@ static int config_sortlist(struct apattern **sortlist, int *nsort,
|
|||||||
/* 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[0] ? ipbufpfx : ipbuf,
|
if ((bits = ares_inet_net_pton(AF_INET6, ipbufpfx[0] ? ipbufpfx : ipbuf,
|
||||||
&pat.addr.addr6,
|
&pat.addrV6,
|
||||||
sizeof(pat.addr.addr6))) > 0)
|
sizeof(pat.addrV6))) > 0)
|
||||||
{
|
{
|
||||||
pat.type = PATTERN_CIDR;
|
pat.type = PATTERN_CIDR;
|
||||||
pat.mask.bits = (unsigned short)bits;
|
pat.mask.bits = (unsigned short)bits;
|
||||||
@@ -1114,8 +1229,8 @@ static int config_sortlist(struct apattern **sortlist, int *nsort,
|
|||||||
return ARES_ENOMEM;
|
return ARES_ENOMEM;
|
||||||
}
|
}
|
||||||
if (ipbufpfx[0] &&
|
if (ipbufpfx[0] &&
|
||||||
(bits = ares_inet_net_pton(AF_INET, ipbufpfx, &pat.addr.addr4,
|
(bits = ares_inet_net_pton(AF_INET, ipbufpfx, &pat.addrV4,
|
||||||
sizeof(pat.addr.addr4))) > 0)
|
sizeof(pat.addrV4))) > 0)
|
||||||
{
|
{
|
||||||
pat.type = PATTERN_CIDR;
|
pat.type = PATTERN_CIDR;
|
||||||
pat.mask.bits = (unsigned short)bits;
|
pat.mask.bits = (unsigned short)bits;
|
||||||
@@ -1124,13 +1239,13 @@ static int config_sortlist(struct apattern **sortlist, int *nsort,
|
|||||||
return ARES_ENOMEM;
|
return ARES_ENOMEM;
|
||||||
}
|
}
|
||||||
/* See if it is just a regular IP */
|
/* See if it is just a regular IP */
|
||||||
else if (ip_addr(ipbuf, (int)(q-str), &pat.addr.addr4) == 0)
|
else if (ip_addr(ipbuf, (int)(q-str), &pat.addrV4) == 0)
|
||||||
{
|
{
|
||||||
if (ipbufpfx[0])
|
if (ipbufpfx[0])
|
||||||
{
|
{
|
||||||
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.addr4) != 0)
|
||||||
natural_mask(&pat);
|
natural_mask(&pat);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -1233,6 +1348,9 @@ static int set_options(ares_channel channel, const char *str)
|
|||||||
val = try_option(p, q, "retry:");
|
val = try_option(p, q, "retry:");
|
||||||
if (val && channel->tries == -1)
|
if (val && channel->tries == -1)
|
||||||
channel->tries = atoi(val);
|
channel->tries = atoi(val);
|
||||||
|
val = try_option(p, q, "rotate");
|
||||||
|
if (val && channel->rotate == -1)
|
||||||
|
channel->rotate = 1;
|
||||||
p = q;
|
p = q;
|
||||||
while (ISSPACE(*p))
|
while (ISSPACE(*p))
|
||||||
p++;
|
p++;
|
||||||
@@ -1245,22 +1363,67 @@ static int set_options(ares_channel channel, const char *str)
|
|||||||
static char *try_config(char *s, const char *opt)
|
static char *try_config(char *s, const char *opt)
|
||||||
{
|
{
|
||||||
size_t len;
|
size_t len;
|
||||||
|
ssize_t i;
|
||||||
|
ssize_t j;
|
||||||
|
char *p;
|
||||||
|
|
||||||
len = strlen(opt);
|
if (!s || !opt)
|
||||||
if (strncmp(s, opt, len) != 0 || !ISSPACE(s[len]))
|
/* no line or no option */
|
||||||
return NULL;
|
return NULL;
|
||||||
s += len;
|
|
||||||
while (ISSPACE(*s))
|
|
||||||
s++;
|
|
||||||
return s;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
/* trim line comment */
|
||||||
|
for (i = 0; s[i] && s[i] != '#'; ++i);
|
||||||
|
s[i] = '\0';
|
||||||
|
|
||||||
|
/* trim trailing whitespace */
|
||||||
|
for (j = i-1; j >= 0 && ISSPACE(s[j]); --j);
|
||||||
|
s[++j] = '\0';
|
||||||
|
|
||||||
|
/* skip leading whitespace */
|
||||||
|
for (i = 0; s[i] && ISSPACE(s[i]); ++i);
|
||||||
|
p = &s[i];
|
||||||
|
|
||||||
|
if (!*p)
|
||||||
|
/* empty line */
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
if ((len = strlen(opt)) == 0)
|
||||||
|
/* empty option */
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
if (strncmp(p, opt, len) != 0)
|
||||||
|
/* line and option do not match */
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
/* skip over given option name */
|
||||||
|
p += len;
|
||||||
|
|
||||||
|
if (!*p)
|
||||||
|
/* no option value */
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
if ((opt[len-1] != ':') && (opt[len-1] != '=') && !ISSPACE(*p))
|
||||||
|
/* whitespace between option name and value is mandatory
|
||||||
|
for given option names which do not end with ':' or '=' */
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
/* skip over whitespace */
|
||||||
|
while (*p && ISSPACE(*p))
|
||||||
|
p++;
|
||||||
|
|
||||||
|
if (!*p)
|
||||||
|
/* no option value */
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
/* return pointer to option value */
|
||||||
|
return p;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static const char *try_option(const char *p, const char *q, const char *opt)
|
static const char *try_option(const char *p, const char *q, const char *opt)
|
||||||
{
|
{
|
||||||
size_t len = strlen(opt);
|
size_t len = strlen(opt);
|
||||||
return ((size_t)(q - p) > len && !strncmp(p, opt, len)) ? &p[len] : NULL;
|
return ((size_t)(q - p) >= len && !strncmp(p, opt, len)) ? &p[len] : NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef WIN32
|
#ifndef WIN32
|
||||||
@@ -1297,17 +1460,17 @@ static void natural_mask(struct apattern *pat)
|
|||||||
/* Store a host-byte-order copy of pat in a struct in_addr. Icky,
|
/* Store a host-byte-order copy of pat in a struct in_addr. Icky,
|
||||||
* but portable.
|
* but portable.
|
||||||
*/
|
*/
|
||||||
addr.s_addr = ntohl(pat->addr.addr4.s_addr);
|
addr.s_addr = ntohl(pat->addrV4.s_addr);
|
||||||
|
|
||||||
/* This is out of date in the CIDR world, but some people might
|
/* This is out of date in the CIDR world, but some people might
|
||||||
* still rely on it.
|
* still rely on it.
|
||||||
*/
|
*/
|
||||||
if (IN_CLASSA(addr.s_addr))
|
if (IN_CLASSA(addr.s_addr))
|
||||||
pat->mask.addr.addr4.s_addr = htonl(IN_CLASSA_NET);
|
pat->mask.addr4.s_addr = htonl(IN_CLASSA_NET);
|
||||||
else if (IN_CLASSB(addr.s_addr))
|
else if (IN_CLASSB(addr.s_addr))
|
||||||
pat->mask.addr.addr4.s_addr = htonl(IN_CLASSB_NET);
|
pat->mask.addr4.s_addr = htonl(IN_CLASSB_NET);
|
||||||
else
|
else
|
||||||
pat->mask.addr.addr4.s_addr = htonl(IN_CLASSC_NET);
|
pat->mask.addr4.s_addr = htonl(IN_CLASSC_NET);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
/* initialize an rc4 key. If possible a cryptographically secure random key
|
/* initialize an rc4 key. If possible a cryptographically secure random key
|
||||||
@@ -1322,24 +1485,18 @@ static void randomize_key(unsigned char* key,int key_data_len)
|
|||||||
int randomized = 0;
|
int randomized = 0;
|
||||||
int counter=0;
|
int counter=0;
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
HMODULE lib=LoadLibrary("ADVAPI32.DLL");
|
BOOLEAN res;
|
||||||
if (lib) {
|
if (fpSystemFunction036)
|
||||||
BOOLEAN (APIENTRY *pfn)(void*, ULONG) =
|
{
|
||||||
(BOOLEAN (APIENTRY *)(void*,ULONG))GetProcAddress(lib,"SystemFunction036");
|
res = (*fpSystemFunction036) (key, key_data_len);
|
||||||
if (pfn && pfn(key,key_data_len) )
|
if (res)
|
||||||
randomized = 1;
|
randomized = 1;
|
||||||
|
}
|
||||||
FreeLibrary(lib);
|
|
||||||
}
|
|
||||||
#else /* !WIN32 */
|
#else /* !WIN32 */
|
||||||
#ifdef RANDOM_FILE
|
#ifdef RANDOM_FILE
|
||||||
char buffer[256];
|
|
||||||
FILE *f = fopen(RANDOM_FILE, "rb");
|
FILE *f = fopen(RANDOM_FILE, "rb");
|
||||||
if(f) {
|
if(f) {
|
||||||
size_t i;
|
counter = fread(key, 1, key_data_len, f);
|
||||||
size_t rc = fread(buffer, key_data_len, 1, f);
|
|
||||||
for(i=0; i<rc && counter < key_data_len; i++)
|
|
||||||
key[counter++]=buffer[i];
|
|
||||||
fclose(f);
|
fclose(f);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@@ -1363,11 +1520,11 @@ static int init_id_key(rc4_key* key,int key_data_len)
|
|||||||
if (!key_data_ptr)
|
if (!key_data_ptr)
|
||||||
return ARES_ENOMEM;
|
return ARES_ENOMEM;
|
||||||
|
|
||||||
randomize_key(key->state,key_data_len);
|
|
||||||
state = &key->state[0];
|
state = &key->state[0];
|
||||||
for(counter = 0; counter < 256; counter++)
|
for(counter = 0; counter < 256; counter++)
|
||||||
/* unnecessary AND but it keeps some compilers happier */
|
/* unnecessary AND but it keeps some compilers happier */
|
||||||
state[counter] = (unsigned char)(counter & 0xff);
|
state[counter] = (unsigned char)(counter & 0xff);
|
||||||
|
randomize_key(key->state,key_data_len);
|
||||||
key->x = 0;
|
key->x = 0;
|
||||||
key->y = 0;
|
key->y = 0;
|
||||||
index1 = 0;
|
index1 = 0;
|
||||||
@@ -1384,9 +1541,17 @@ static int init_id_key(rc4_key* key,int key_data_len)
|
|||||||
return ARES_SUCCESS;
|
return ARES_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
short ares__generate_new_id(rc4_key* key)
|
unsigned short ares__generate_new_id(rc4_key* key)
|
||||||
{
|
{
|
||||||
short r=0;
|
unsigned short r=0;
|
||||||
ares__rc4(key, (unsigned char *)&r, sizeof(r));
|
ares__rc4(key, (unsigned char *)&r, sizeof(r));
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ares_set_socket_callback(ares_channel channel,
|
||||||
|
ares_sock_create_callback cb,
|
||||||
|
void *data)
|
||||||
|
{
|
||||||
|
channel->sock_create_cb = cb;
|
||||||
|
channel->sock_create_cb_data = data;
|
||||||
|
}
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ struct addrinfo
|
|||||||
int ai_family;
|
int ai_family;
|
||||||
int ai_socktype;
|
int ai_socktype;
|
||||||
int ai_protocol;
|
int ai_protocol;
|
||||||
socklen_t ai_addrlen; /* Follow rfc3493 struct addrinfo */
|
ares_socklen_t ai_addrlen; /* Follow rfc3493 struct addrinfo */
|
||||||
char *ai_canonname;
|
char *ai_canonname;
|
||||||
struct sockaddr *ai_addr;
|
struct sockaddr *ai_addr;
|
||||||
struct addrinfo *ai_next;
|
struct addrinfo *ai_next;
|
||||||
|
|||||||
109
ares/ares_library_init.c
Normal file
109
ares/ares_library_init.c
Normal file
@@ -0,0 +1,109 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
|
#include "setup.h"
|
||||||
|
|
||||||
|
#include "ares.h"
|
||||||
|
#include "ares_library_init.h"
|
||||||
|
#include "ares_private.h"
|
||||||
|
|
||||||
|
/* library-private global and unique instance vars */
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
fpGetNetworkParams_t fpGetNetworkParams = ZERO_NULL;
|
||||||
|
fpSystemFunction036_t fpSystemFunction036 = ZERO_NULL;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* library-private global vars with source visibility restricted to this file */
|
||||||
|
|
||||||
|
static unsigned int ares_initialized;
|
||||||
|
static int ares_init_flags;
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
static HMODULE hnd_iphlpapi;
|
||||||
|
static HMODULE hnd_advapi32;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
static int ares_win32_init(void)
|
||||||
|
{
|
||||||
|
#ifdef WIN32
|
||||||
|
|
||||||
|
hnd_iphlpapi = 0;
|
||||||
|
hnd_iphlpapi = LoadLibrary("iphlpapi.dll");
|
||||||
|
if (!hnd_iphlpapi)
|
||||||
|
return ARES_ELOADIPHLPAPI;
|
||||||
|
|
||||||
|
fpGetNetworkParams = (fpGetNetworkParams_t)
|
||||||
|
GetProcAddress(hnd_iphlpapi, "GetNetworkParams");
|
||||||
|
if (!fpGetNetworkParams)
|
||||||
|
{
|
||||||
|
FreeLibrary(hnd_iphlpapi);
|
||||||
|
return ARES_EADDRGetNetworkParams;
|
||||||
|
}
|
||||||
|
|
||||||
|
hnd_advapi32 = 0;
|
||||||
|
hnd_advapi32 = LoadLibrary("advapi32.dll");
|
||||||
|
if (!hnd_advapi32)
|
||||||
|
{
|
||||||
|
FreeLibrary(hnd_iphlpapi);
|
||||||
|
return ARES_ELOADADVAPI32;
|
||||||
|
}
|
||||||
|
|
||||||
|
fpSystemFunction036 = (fpSystemFunction036_t)
|
||||||
|
GetProcAddress(hnd_advapi32, "SystemFunction036");
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Intentionally avoid checking if the address of SystemFunction036, a.k.a.
|
||||||
|
* RtlGenRandom, has been located or not. This function is only available on
|
||||||
|
* WinXP and later. When unavailable c-ares uses portable rand() function.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#endif
|
||||||
|
return ARES_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void ares_win32_cleanup(void)
|
||||||
|
{
|
||||||
|
#ifdef WIN32
|
||||||
|
if (hnd_advapi32)
|
||||||
|
FreeLibrary(hnd_advapi32);
|
||||||
|
if (hnd_iphlpapi)
|
||||||
|
FreeLibrary(hnd_iphlpapi);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int ares_library_init(int flags)
|
||||||
|
{
|
||||||
|
int res;
|
||||||
|
|
||||||
|
if (ares_initialized)
|
||||||
|
return ARES_SUCCESS;
|
||||||
|
ares_initialized++;
|
||||||
|
|
||||||
|
if (flags & ARES_LIB_INIT_WIN32)
|
||||||
|
{
|
||||||
|
res = ares_win32_init();
|
||||||
|
if (res != ARES_SUCCESS)
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
ares_init_flags = flags;
|
||||||
|
|
||||||
|
return ARES_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ares_library_cleanup(void)
|
||||||
|
{
|
||||||
|
if (!ares_initialized)
|
||||||
|
return;
|
||||||
|
ares_initialized--;
|
||||||
|
|
||||||
|
if (ares_init_flags & ARES_LIB_INIT_WIN32)
|
||||||
|
ares_win32_cleanup();
|
||||||
|
|
||||||
|
ares_init_flags = ARES_LIB_INIT_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
24
ares/ares_library_init.h
Normal file
24
ares/ares_library_init.h
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
#ifndef HEADER_CARES_LIBRARY_INIT_H
|
||||||
|
#define HEADER_CARES_LIBRARY_INIT_H
|
||||||
|
|
||||||
|
/* $Id$ */
|
||||||
|
|
||||||
|
#include "setup.h"
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
|
||||||
|
#include <iphlpapi.h>
|
||||||
|
|
||||||
|
typedef DWORD (WINAPI *fpGetNetworkParams_t) (FIXED_INFO*, DWORD*);
|
||||||
|
typedef BOOLEAN (APIENTRY *fpSystemFunction036_t) (void*, ULONG);
|
||||||
|
|
||||||
|
/* Forward-declaration of variables defined in ares_library_init.c */
|
||||||
|
/* that are global and unique instances for whole c-ares library. */
|
||||||
|
|
||||||
|
extern fpGetNetworkParams_t fpGetNetworkParams;
|
||||||
|
extern fpSystemFunction036_t fpSystemFunction036;
|
||||||
|
|
||||||
|
#endif /* WIN32 */
|
||||||
|
|
||||||
|
#endif /* HEADER_CARES_LIBRARY_INIT_H */
|
||||||
|
|
||||||
@@ -17,14 +17,19 @@
|
|||||||
|
|
||||||
#include "setup.h"
|
#include "setup.h"
|
||||||
|
|
||||||
#if defined(WIN32) && !defined(WATT32)
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
#include "nameser.h"
|
# include <sys/socket.h>
|
||||||
#else
|
|
||||||
#include <netinet/in.h>
|
|
||||||
#include <arpa/nameser.h>
|
|
||||||
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
|
|
||||||
#include <arpa/nameser_compat.h>
|
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef HAVE_NETINET_IN_H
|
||||||
|
# include <netinet/in.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_ARPA_NAMESER_H
|
||||||
|
# include <arpa/nameser.h>
|
||||||
|
#else
|
||||||
|
# include "nameser.h"
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
|
||||||
|
# include <arpa/nameser_compat.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|||||||
@@ -17,22 +17,37 @@
|
|||||||
|
|
||||||
#include "setup.h"
|
#include "setup.h"
|
||||||
|
|
||||||
#if defined(WIN32) && !defined(WATT32)
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
#include "nameser.h"
|
# include <sys/socket.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
|
||||||
|
#ifdef HAVE_NETINET_IN_H
|
||||||
|
# include <netinet/in.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_NETDB_H
|
||||||
|
# include <netdb.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_ARPA_INET_H
|
||||||
|
# include <arpa/inet.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_ARPA_NAMESER_H
|
||||||
|
# include <arpa/nameser.h>
|
||||||
|
#else
|
||||||
|
# include "nameser.h"
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
|
||||||
|
# include <arpa/nameser_compat.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_STRINGS_H
|
||||||
|
# include <strings.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <limits.h>
|
#ifdef HAVE_LIMITS_H
|
||||||
|
# include <limits.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "ares.h"
|
#include "ares.h"
|
||||||
#include "ares_dns.h"
|
#include "ares_dns.h"
|
||||||
#include "ares_private.h"
|
#include "ares_private.h"
|
||||||
@@ -71,7 +86,7 @@ int ares_parse_a_reply(const unsigned char *abuf, int alen,
|
|||||||
|
|
||||||
/* Expand the name from the question, and skip past the question. */
|
/* Expand the name from the question, and skip past the question. */
|
||||||
aptr = abuf + HFIXEDSZ;
|
aptr = abuf + HFIXEDSZ;
|
||||||
status = ares_expand_name(aptr, abuf, alen, &hostname, &len);
|
status = ares__expand_name_for_response(aptr, abuf, alen, &hostname, &len);
|
||||||
if (status != ARES_SUCCESS)
|
if (status != ARES_SUCCESS)
|
||||||
return status;
|
return status;
|
||||||
if (aptr + len + QFIXEDSZ > abuf + alen)
|
if (aptr + len + QFIXEDSZ > abuf + alen)
|
||||||
@@ -83,7 +98,8 @@ int ares_parse_a_reply(const unsigned char *abuf, int alen,
|
|||||||
|
|
||||||
if (host)
|
if (host)
|
||||||
{
|
{
|
||||||
/* Allocate addresses and aliases; ancount gives an upper bound for both. */
|
/* Allocate addresses and aliases; ancount gives an upper bound for
|
||||||
|
both. */
|
||||||
addrs = malloc(ancount * sizeof(struct in_addr));
|
addrs = malloc(ancount * sizeof(struct in_addr));
|
||||||
if (!addrs)
|
if (!addrs)
|
||||||
{
|
{
|
||||||
@@ -111,7 +127,7 @@ int ares_parse_a_reply(const unsigned char *abuf, int alen,
|
|||||||
for (i = 0; i < (int)ancount; i++)
|
for (i = 0; i < (int)ancount; i++)
|
||||||
{
|
{
|
||||||
/* Decode the RR up to the data field. */
|
/* Decode the RR up to the data field. */
|
||||||
status = ares_expand_name(aptr, abuf, alen, &rr_name, &len);
|
status = ares__expand_name_for_response(aptr, abuf, alen, &rr_name, &len);
|
||||||
if (status != ARES_SUCCESS)
|
if (status != ARES_SUCCESS)
|
||||||
break;
|
break;
|
||||||
aptr += len;
|
aptr += len;
|
||||||
@@ -164,7 +180,8 @@ int ares_parse_a_reply(const unsigned char *abuf, int alen,
|
|||||||
naliases++;
|
naliases++;
|
||||||
|
|
||||||
/* Decode the RR data and replace the hostname with it. */
|
/* Decode the RR data and replace the hostname with it. */
|
||||||
status = ares_expand_name(aptr, abuf, alen, &rr_data, &len);
|
status = ares__expand_name_for_response(aptr, abuf, alen, &rr_data,
|
||||||
|
&len);
|
||||||
if (status != ARES_SUCCESS)
|
if (status != ARES_SUCCESS)
|
||||||
break;
|
break;
|
||||||
free(hostname);
|
free(hostname);
|
||||||
|
|||||||
@@ -17,24 +17,37 @@
|
|||||||
|
|
||||||
#include "setup.h"
|
#include "setup.h"
|
||||||
|
|
||||||
#if defined(WIN32) && !defined(WATT32)
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
#include "nameser.h"
|
# include <sys/socket.h>
|
||||||
#else
|
#endif
|
||||||
#include <sys/socket.h>
|
#ifdef HAVE_NETINET_IN_H
|
||||||
#include <netinet/in.h>
|
# include <netinet/in.h>
|
||||||
#include <arpa/inet.h>
|
#endif
|
||||||
#include <netdb.h>
|
#ifdef HAVE_NETDB_H
|
||||||
|
# include <netdb.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_ARPA_INET_H
|
||||||
|
# include <arpa/inet.h>
|
||||||
|
#endif
|
||||||
#ifdef HAVE_ARPA_NAMESER_H
|
#ifdef HAVE_ARPA_NAMESER_H
|
||||||
#include <arpa/nameser.h>
|
# include <arpa/nameser.h>
|
||||||
|
#else
|
||||||
|
# include "nameser.h"
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
|
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
|
||||||
#include <arpa/nameser_compat.h>
|
# include <arpa/nameser_compat.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_STRINGS_H
|
||||||
|
# include <strings.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <limits.h>
|
#ifdef HAVE_LIMITS_H
|
||||||
|
# include <limits.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "ares.h"
|
#include "ares.h"
|
||||||
#include "ares_dns.h"
|
#include "ares_dns.h"
|
||||||
#include "inet_net_pton.h"
|
#include "inet_net_pton.h"
|
||||||
@@ -74,7 +87,7 @@ int ares_parse_aaaa_reply(const unsigned char *abuf, int alen,
|
|||||||
|
|
||||||
/* Expand the name from the question, and skip past the question. */
|
/* Expand the name from the question, and skip past the question. */
|
||||||
aptr = abuf + HFIXEDSZ;
|
aptr = abuf + HFIXEDSZ;
|
||||||
status = ares_expand_name(aptr, abuf, alen, &hostname, &len);
|
status = ares__expand_name_for_response(aptr, abuf, alen, &hostname, &len);
|
||||||
if (status != ARES_SUCCESS)
|
if (status != ARES_SUCCESS)
|
||||||
return status;
|
return status;
|
||||||
if (aptr + len + QFIXEDSZ > abuf + alen)
|
if (aptr + len + QFIXEDSZ > abuf + alen)
|
||||||
@@ -113,7 +126,7 @@ int ares_parse_aaaa_reply(const unsigned char *abuf, int alen,
|
|||||||
for (i = 0; i < (int)ancount; i++)
|
for (i = 0; i < (int)ancount; i++)
|
||||||
{
|
{
|
||||||
/* Decode the RR up to the data field. */
|
/* Decode the RR up to the data field. */
|
||||||
status = ares_expand_name(aptr, abuf, alen, &rr_name, &len);
|
status = ares__expand_name_for_response(aptr, abuf, alen, &rr_name, &len);
|
||||||
if (status != ARES_SUCCESS)
|
if (status != ARES_SUCCESS)
|
||||||
break;
|
break;
|
||||||
aptr += len;
|
aptr += len;
|
||||||
@@ -166,7 +179,8 @@ int ares_parse_aaaa_reply(const unsigned char *abuf, int alen,
|
|||||||
naliases++;
|
naliases++;
|
||||||
|
|
||||||
/* Decode the RR data and replace the hostname with it. */
|
/* Decode the RR data and replace the hostname with it. */
|
||||||
status = ares_expand_name(aptr, abuf, alen, &rr_data, &len);
|
status = ares__expand_name_for_response(aptr, abuf, alen, &rr_data,
|
||||||
|
&len);
|
||||||
if (status != ARES_SUCCESS)
|
if (status != ARES_SUCCESS)
|
||||||
break;
|
break;
|
||||||
free(hostname);
|
free(hostname);
|
||||||
|
|||||||
@@ -20,17 +20,25 @@
|
|||||||
|
|
||||||
#include "setup.h"
|
#include "setup.h"
|
||||||
|
|
||||||
#if defined(WIN32) && !defined(WATT32)
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
#include "nameser.h"
|
# include <sys/socket.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
|
||||||
|
#ifdef HAVE_NETINET_IN_H
|
||||||
|
# include <netinet/in.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_NETDB_H
|
||||||
|
# include <netdb.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_ARPA_INET_H
|
||||||
|
# include <arpa/inet.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_ARPA_NAMESER_H
|
||||||
|
# include <arpa/nameser.h>
|
||||||
|
#else
|
||||||
|
# include "nameser.h"
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
|
||||||
|
# include <arpa/nameser_compat.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@@ -65,7 +73,7 @@ int ares_parse_ns_reply( const unsigned char* abuf, int alen,
|
|||||||
|
|
||||||
/* Expand the name from the question, and skip past the question. */
|
/* Expand the name from the question, and skip past the question. */
|
||||||
aptr = abuf + HFIXEDSZ;
|
aptr = abuf + HFIXEDSZ;
|
||||||
status = ares_expand_name( aptr, abuf, alen, &hostname, &len );
|
status = ares__expand_name_for_response( aptr, abuf, alen, &hostname, &len);
|
||||||
if ( status != ARES_SUCCESS )
|
if ( status != ARES_SUCCESS )
|
||||||
return status;
|
return status;
|
||||||
if ( aptr + len + QFIXEDSZ > abuf + alen )
|
if ( aptr + len + QFIXEDSZ > abuf + alen )
|
||||||
@@ -88,7 +96,7 @@ int ares_parse_ns_reply( const unsigned char* abuf, int alen,
|
|||||||
for ( i = 0; i < ( int ) ancount; i++ )
|
for ( i = 0; i < ( int ) ancount; i++ )
|
||||||
{
|
{
|
||||||
/* Decode the RR up to the data field. */
|
/* Decode the RR up to the data field. */
|
||||||
status = ares_expand_name( aptr, abuf, alen, &rr_name, &len );
|
status = ares__expand_name_for_response( aptr, abuf, alen, &rr_name, &len );
|
||||||
if ( status != ARES_SUCCESS )
|
if ( status != ARES_SUCCESS )
|
||||||
break;
|
break;
|
||||||
aptr += len;
|
aptr += len;
|
||||||
@@ -105,7 +113,8 @@ int ares_parse_ns_reply( const unsigned char* abuf, int alen,
|
|||||||
if ( rr_class == C_IN && rr_type == T_NS )
|
if ( rr_class == C_IN && rr_type == T_NS )
|
||||||
{
|
{
|
||||||
/* Decode the RR data and add it to the nameservers list */
|
/* Decode the RR data and add it to the nameservers list */
|
||||||
status = ares_expand_name( aptr, abuf, alen, &rr_data, &len );
|
status = ares__expand_name_for_response( aptr, abuf, alen, &rr_data,
|
||||||
|
&len);
|
||||||
if ( status != ARES_SUCCESS )
|
if ( status != ARES_SUCCESS )
|
||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -17,16 +17,26 @@
|
|||||||
|
|
||||||
#include "setup.h"
|
#include "setup.h"
|
||||||
|
|
||||||
#if defined(WIN32) && !defined(WATT32)
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
#include "nameser.h"
|
# include <sys/socket.h>
|
||||||
#else
|
|
||||||
#include <sys/socket.h>
|
|
||||||
#include <netinet/in.h>
|
|
||||||
#include <netdb.h>
|
|
||||||
#include <arpa/nameser.h>
|
|
||||||
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
|
|
||||||
#include <arpa/nameser_compat.h>
|
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef HAVE_NETINET_IN_H
|
||||||
|
# include <netinet/in.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_NETDB_H
|
||||||
|
# include <netdb.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_ARPA_NAMESER_H
|
||||||
|
# include <arpa/nameser.h>
|
||||||
|
#else
|
||||||
|
# include "nameser.h"
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
|
||||||
|
# include <arpa/nameser_compat.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_STRINGS_H
|
||||||
|
# include <strings.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@@ -44,6 +54,9 @@ int ares_parse_ptr_reply(const unsigned char *abuf, int alen, const void *addr,
|
|||||||
const unsigned char *aptr;
|
const unsigned char *aptr;
|
||||||
char *ptrname, *hostname, *rr_name, *rr_data;
|
char *ptrname, *hostname, *rr_name, *rr_data;
|
||||||
struct hostent *hostent;
|
struct hostent *hostent;
|
||||||
|
int aliascnt = 0;
|
||||||
|
int alias_alloc = 8;
|
||||||
|
char ** aliases;
|
||||||
|
|
||||||
/* Set *host to NULL for all failure cases. */
|
/* Set *host to NULL for all failure cases. */
|
||||||
*host = NULL;
|
*host = NULL;
|
||||||
@@ -60,7 +73,7 @@ int ares_parse_ptr_reply(const unsigned char *abuf, int alen, const void *addr,
|
|||||||
|
|
||||||
/* Expand the name from the question, and skip past the question. */
|
/* Expand the name from the question, and skip past the question. */
|
||||||
aptr = abuf + HFIXEDSZ;
|
aptr = abuf + HFIXEDSZ;
|
||||||
status = ares_expand_name(aptr, abuf, alen, &ptrname, &len);
|
status = ares__expand_name_for_response(aptr, abuf, alen, &ptrname, &len);
|
||||||
if (status != ARES_SUCCESS)
|
if (status != ARES_SUCCESS)
|
||||||
return status;
|
return status;
|
||||||
if (aptr + len + QFIXEDSZ > abuf + alen)
|
if (aptr + len + QFIXEDSZ > abuf + alen)
|
||||||
@@ -72,10 +85,16 @@ int ares_parse_ptr_reply(const unsigned char *abuf, int alen, const void *addr,
|
|||||||
|
|
||||||
/* Examine each answer resource record (RR) in turn. */
|
/* Examine each answer resource record (RR) in turn. */
|
||||||
hostname = NULL;
|
hostname = NULL;
|
||||||
|
aliases = malloc(alias_alloc * sizeof(char *));
|
||||||
|
if (!aliases)
|
||||||
|
{
|
||||||
|
free(ptrname);
|
||||||
|
return ARES_ENOMEM;
|
||||||
|
}
|
||||||
for (i = 0; i < (int)ancount; i++)
|
for (i = 0; i < (int)ancount; i++)
|
||||||
{
|
{
|
||||||
/* Decode the RR up to the data field. */
|
/* Decode the RR up to the data field. */
|
||||||
status = ares_expand_name(aptr, abuf, alen, &rr_name, &len);
|
status = ares__expand_name_for_response(aptr, abuf, alen, &rr_name, &len);
|
||||||
if (status != ARES_SUCCESS)
|
if (status != ARES_SUCCESS)
|
||||||
break;
|
break;
|
||||||
aptr += len;
|
aptr += len;
|
||||||
@@ -93,18 +112,38 @@ int ares_parse_ptr_reply(const unsigned char *abuf, int alen, const void *addr,
|
|||||||
&& strcasecmp(rr_name, ptrname) == 0)
|
&& strcasecmp(rr_name, ptrname) == 0)
|
||||||
{
|
{
|
||||||
/* Decode the RR data and set hostname to it. */
|
/* Decode the RR data and set hostname to it. */
|
||||||
status = ares_expand_name(aptr, abuf, alen, &rr_data, &len);
|
status = ares__expand_name_for_response(aptr, abuf, alen, &rr_data,
|
||||||
|
&len);
|
||||||
if (status != ARES_SUCCESS)
|
if (status != ARES_SUCCESS)
|
||||||
break;
|
break;
|
||||||
if (hostname)
|
if (hostname)
|
||||||
free(hostname);
|
free(hostname);
|
||||||
hostname = rr_data;
|
hostname = rr_data;
|
||||||
|
aliases[aliascnt] = malloc((strlen(rr_data)+1) * sizeof(char *));
|
||||||
|
if (!aliases[aliascnt])
|
||||||
|
{
|
||||||
|
status = ARES_ENOMEM;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
strncpy(aliases[aliascnt], rr_data, strlen(rr_data)+1);
|
||||||
|
aliascnt++;
|
||||||
|
if (aliascnt >= alias_alloc) {
|
||||||
|
char **ptr;
|
||||||
|
alias_alloc *= 2;
|
||||||
|
ptr = realloc(aliases, alias_alloc * sizeof(char *));
|
||||||
|
if(!ptr) {
|
||||||
|
status = ARES_ENOMEM;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
aliases = ptr;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rr_class == C_IN && rr_type == T_CNAME)
|
if (rr_class == C_IN && rr_type == T_CNAME)
|
||||||
{
|
{
|
||||||
/* Decode the RR data and replace ptrname with it. */
|
/* Decode the RR data and replace ptrname with it. */
|
||||||
status = ares_expand_name(aptr, abuf, alen, &rr_data, &len);
|
status = ares__expand_name_for_response(aptr, abuf, alen, &rr_data,
|
||||||
|
&len);
|
||||||
if (status != ARES_SUCCESS)
|
if (status != ARES_SUCCESS)
|
||||||
break;
|
break;
|
||||||
free(ptrname);
|
free(ptrname);
|
||||||
@@ -134,17 +173,20 @@ int ares_parse_ptr_reply(const unsigned char *abuf, int alen, const void *addr,
|
|||||||
hostent->h_addr_list[0] = malloc(addrlen);
|
hostent->h_addr_list[0] = malloc(addrlen);
|
||||||
if (hostent->h_addr_list[0])
|
if (hostent->h_addr_list[0])
|
||||||
{
|
{
|
||||||
hostent->h_aliases = malloc(sizeof (char *));
|
hostent->h_aliases = malloc((aliascnt+1) * sizeof (char *));
|
||||||
if (hostent->h_aliases)
|
if (hostent->h_aliases)
|
||||||
{
|
{
|
||||||
/* Fill in the hostent and return successfully. */
|
/* Fill in the hostent and return successfully. */
|
||||||
hostent->h_name = hostname;
|
hostent->h_name = hostname;
|
||||||
hostent->h_aliases[0] = NULL;
|
for (i=0 ; i<aliascnt ; i++)
|
||||||
|
hostent->h_aliases[i] = aliases[i];
|
||||||
|
hostent->h_aliases[aliascnt] = NULL;
|
||||||
hostent->h_addrtype = family;
|
hostent->h_addrtype = family;
|
||||||
hostent->h_length = addrlen;
|
hostent->h_length = addrlen;
|
||||||
memcpy(hostent->h_addr_list[0], addr, addrlen);
|
memcpy(hostent->h_addr_list[0], addr, addrlen);
|
||||||
hostent->h_addr_list[1] = NULL;
|
hostent->h_addr_list[1] = NULL;
|
||||||
*host = hostent;
|
*host = hostent;
|
||||||
|
free(aliases);
|
||||||
free(ptrname);
|
free(ptrname);
|
||||||
return ARES_SUCCESS;
|
return ARES_SUCCESS;
|
||||||
}
|
}
|
||||||
@@ -156,6 +198,10 @@ int ares_parse_ptr_reply(const unsigned char *abuf, int alen, const void *addr,
|
|||||||
}
|
}
|
||||||
status = ARES_ENOMEM;
|
status = ARES_ENOMEM;
|
||||||
}
|
}
|
||||||
|
for (i=0 ; i<aliascnt ; i++)
|
||||||
|
if (aliases[i])
|
||||||
|
free(aliases[i]);
|
||||||
|
free(aliases);
|
||||||
if (hostname)
|
if (hostname)
|
||||||
free(hostname);
|
free(hostname);
|
||||||
free(ptrname);
|
free(ptrname);
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
/* $Id$ */
|
/* $Id$ */
|
||||||
|
|
||||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
|
* Copyright (C) 2004-2008 by Daniel Stenberg
|
||||||
*
|
*
|
||||||
* 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
|
||||||
@@ -42,13 +43,14 @@
|
|||||||
#undef closesocket
|
#undef closesocket
|
||||||
#define closesocket(s) close_s(s)
|
#define closesocket(s) close_s(s)
|
||||||
#define writev(s,v,c) writev_s(s,v,c)
|
#define writev(s,v,c) writev_s(s,v,c)
|
||||||
|
#define HAVE_WRITEV 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef NETWARE
|
#ifdef NETWARE
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define DEFAULT_TIMEOUT 5
|
#define DEFAULT_TIMEOUT 5000 /* milliseconds */
|
||||||
#define DEFAULT_TRIES 4
|
#define DEFAULT_TRIES 4
|
||||||
#ifndef INADDR_NONE
|
#ifndef INADDR_NONE
|
||||||
#define INADDR_NONE 0xffffffff
|
#define INADDR_NONE 0xffffffff
|
||||||
@@ -93,6 +95,36 @@
|
|||||||
#include "ares_ipv6.h"
|
#include "ares_ipv6.h"
|
||||||
#include "ares_llist.h"
|
#include "ares_llist.h"
|
||||||
|
|
||||||
|
#ifndef HAVE_STRDUP
|
||||||
|
# include "ares_strdup.h"
|
||||||
|
# define strdup(ptr) ares_strdup(ptr)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef HAVE_STRCASECMP
|
||||||
|
# include "ares_strcasecmp.h"
|
||||||
|
# define strcasecmp(p1,p2) ares_strcasecmp(p1,p2)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef HAVE_STRNCASECMP
|
||||||
|
# include "ares_strcasecmp.h"
|
||||||
|
# define strncasecmp(p1,p2,n) ares_strncasecmp(p1,p2,n)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef HAVE_WRITEV
|
||||||
|
# include "ares_writev.h"
|
||||||
|
# define writev(s,ptr,cnt) ares_writev(s,ptr,cnt)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
struct ares_addr {
|
||||||
|
int family;
|
||||||
|
union {
|
||||||
|
struct in_addr addr4;
|
||||||
|
struct in6_addr addr6;
|
||||||
|
} addr;
|
||||||
|
};
|
||||||
|
#define addrV4 addr.addr4
|
||||||
|
#define addrV6 addr.addr6
|
||||||
|
|
||||||
struct query;
|
struct query;
|
||||||
|
|
||||||
struct send_request {
|
struct send_request {
|
||||||
@@ -149,7 +181,7 @@ struct server_state {
|
|||||||
struct query {
|
struct query {
|
||||||
/* Query ID from qbuf, for faster lookup, and current timeout */
|
/* Query ID from qbuf, for faster lookup, and current timeout */
|
||||||
unsigned short qid;
|
unsigned short qid;
|
||||||
time_t timeout;
|
struct timeval timeout;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Links for the doubly-linked lists in which we insert a query.
|
* Links for the doubly-linked lists in which we insert a query.
|
||||||
@@ -173,8 +205,8 @@ struct query {
|
|||||||
void *arg;
|
void *arg;
|
||||||
|
|
||||||
/* Query status */
|
/* Query status */
|
||||||
int try;
|
int try; /* Number of times we tried this query already. */
|
||||||
int server;
|
int server; /* Server this query has last been sent to. */
|
||||||
struct query_server_info *server_info; /* per-server state */
|
struct query_server_info *server_info; /* per-server state */
|
||||||
int using_tcp;
|
int using_tcp;
|
||||||
int error_status;
|
int error_status;
|
||||||
@@ -191,17 +223,17 @@ struct query_server_info {
|
|||||||
#define PATTERN_MASK 0x1
|
#define PATTERN_MASK 0x1
|
||||||
#define PATTERN_CIDR 0x2
|
#define PATTERN_CIDR 0x2
|
||||||
|
|
||||||
union ares_addr {
|
|
||||||
struct in_addr addr4;
|
|
||||||
struct in6_addr addr6;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct apattern {
|
struct apattern {
|
||||||
union ares_addr addr;
|
|
||||||
union
|
union
|
||||||
{
|
{
|
||||||
union ares_addr addr;
|
struct in_addr addr4;
|
||||||
unsigned short bits;
|
struct in6_addr addr6;
|
||||||
|
} addr;
|
||||||
|
union
|
||||||
|
{
|
||||||
|
struct in_addr addr4;
|
||||||
|
struct in6_addr addr6;
|
||||||
|
unsigned short bits;
|
||||||
} mask;
|
} mask;
|
||||||
int family;
|
int family;
|
||||||
unsigned short type;
|
unsigned short type;
|
||||||
@@ -217,9 +249,10 @@ typedef struct rc4_key
|
|||||||
struct ares_channeldata {
|
struct ares_channeldata {
|
||||||
/* Configuration data */
|
/* Configuration data */
|
||||||
int flags;
|
int flags;
|
||||||
int timeout;
|
int timeout; /* in milliseconds */
|
||||||
int tries;
|
int tries;
|
||||||
int ndots;
|
int ndots;
|
||||||
|
int rotate; /* if true, all servers specified are used */
|
||||||
int udp_port;
|
int udp_port;
|
||||||
int tcp_port;
|
int tcp_port;
|
||||||
int socket_send_buffer_size;
|
int socket_send_buffer_size;
|
||||||
@@ -230,6 +263,8 @@ struct ares_channeldata {
|
|||||||
int nsort;
|
int nsort;
|
||||||
char *lookups;
|
char *lookups;
|
||||||
|
|
||||||
|
int optmask; /* the option bitfield passed in at init time */
|
||||||
|
|
||||||
/* Server addresses and communications state */
|
/* Server addresses and communications state */
|
||||||
struct server_state *servers;
|
struct server_state *servers;
|
||||||
int nservers;
|
int nservers;
|
||||||
@@ -242,9 +277,13 @@ struct ares_channeldata {
|
|||||||
/* Generation number to use for the next TCP socket open/close */
|
/* Generation number to use for the next TCP socket open/close */
|
||||||
int tcp_connection_generation;
|
int tcp_connection_generation;
|
||||||
|
|
||||||
/* The time at which we last called process_timeouts() */
|
/* The time at which we last called process_timeouts(). Uses integer seconds
|
||||||
|
just to draw the line somewhere. */
|
||||||
time_t last_timeout_processed;
|
time_t last_timeout_processed;
|
||||||
|
|
||||||
|
/* Last server we sent a query to. */
|
||||||
|
int last_server;
|
||||||
|
|
||||||
/* Circular, doubly-linked list of queries, bucketed various ways.... */
|
/* Circular, doubly-linked list of queries, bucketed various ways.... */
|
||||||
/* All active queries in a single list: */
|
/* All active queries in a single list: */
|
||||||
struct list_node all_queries;
|
struct list_node all_queries;
|
||||||
@@ -257,15 +296,35 @@ struct ares_channeldata {
|
|||||||
|
|
||||||
ares_sock_state_cb sock_state_cb;
|
ares_sock_state_cb sock_state_cb;
|
||||||
void *sock_state_cb_data;
|
void *sock_state_cb_data;
|
||||||
|
|
||||||
|
ares_sock_create_callback sock_create_cb;
|
||||||
|
void *sock_create_cb_data;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* return true if now is exactly check time or later */
|
||||||
|
int ares__timedout(struct timeval *now,
|
||||||
|
struct timeval *check);
|
||||||
|
/* add the specific number of milliseconds to the time in the first argument */
|
||||||
|
int ares__timeadd(struct timeval *now,
|
||||||
|
int millisecs);
|
||||||
|
/* return time offset between now and (future) check, in milliseconds */
|
||||||
|
long ares__timeoffset(struct timeval *now,
|
||||||
|
struct timeval *check);
|
||||||
void ares__rc4(rc4_key* key,unsigned char *buffer_ptr, int buffer_len);
|
void ares__rc4(rc4_key* key,unsigned char *buffer_ptr, int buffer_len);
|
||||||
void ares__send_query(ares_channel channel, struct query *query, time_t now);
|
void ares__send_query(ares_channel channel, struct query *query,
|
||||||
|
struct timeval *now);
|
||||||
void ares__close_sockets(ares_channel channel, 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);
|
||||||
void ares__free_query(struct query *query);
|
void ares__free_query(struct query *query);
|
||||||
short ares__generate_new_id(rc4_key* key);
|
unsigned short ares__generate_new_id(rc4_key* key);
|
||||||
|
struct timeval ares__tvnow(void);
|
||||||
|
int ares__expand_name_for_response(const unsigned char *encoded,
|
||||||
|
const unsigned char *abuf, int alen,
|
||||||
|
char **s, long *enclen);
|
||||||
|
#if 0 /* Not used */
|
||||||
|
long ares__tvdiff(struct timeval t1, struct timeval t2);
|
||||||
|
#endif
|
||||||
|
|
||||||
#define ARES_SWAP_BYTE(a,b) \
|
#define ARES_SWAP_BYTE(a,b) \
|
||||||
{ unsigned char swapByte = *(a); *(a) = *(b); *(b) = swapByte; }
|
{ unsigned char swapByte = *(a); *(a) = *(b); *(b) = swapByte; }
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
/* $Id$ */
|
/* $Id$ */
|
||||||
|
|
||||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
|
* Copyright (C) 2004-2009 by Daniel Stenberg
|
||||||
*
|
*
|
||||||
* 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
|
||||||
@@ -17,41 +18,45 @@
|
|||||||
|
|
||||||
#include "setup.h"
|
#include "setup.h"
|
||||||
|
|
||||||
#if defined(WIN32) && !defined(WATT32)
|
|
||||||
#include "nameser.h"
|
|
||||||
|
|
||||||
#else
|
|
||||||
#ifdef HAVE_SYS_SOCKET_H
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
#include <sys/socket.h>
|
# include <sys/socket.h>
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_SYS_UIO_H
|
#ifdef HAVE_SYS_UIO_H
|
||||||
#include <sys/uio.h>
|
# include <sys/uio.h>
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_NETINET_IN_H
|
#ifdef HAVE_NETINET_IN_H
|
||||||
#include <netinet/in.h> /* <netinet/tcp.h> may need it */
|
# include <netinet/in.h>
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_NETINET_TCP_H
|
#ifdef HAVE_NETINET_TCP_H
|
||||||
#include <netinet/tcp.h> /* for TCP_NODELAY */
|
# include <netinet/tcp.h>
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_NETDB_H
|
#ifdef HAVE_NETDB_H
|
||||||
#include <netdb.h>
|
# include <netdb.h>
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_ARPA_NAMESER_H
|
#ifdef HAVE_ARPA_NAMESER_H
|
||||||
#include <arpa/nameser.h>
|
# include <arpa/nameser.h>
|
||||||
|
#else
|
||||||
|
# include "nameser.h"
|
||||||
#endif
|
#endif
|
||||||
#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_SYS_TIME_H
|
||||||
|
# include <sys/time.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_STRINGS_H
|
||||||
|
# include <strings.h>
|
||||||
|
#endif
|
||||||
#ifdef HAVE_UNISTD_H
|
#ifdef HAVE_UNISTD_H
|
||||||
#include <unistd.h>
|
# include <unistd.h>
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_SYS_IOCTL_H
|
#ifdef HAVE_SYS_IOCTL_H
|
||||||
#include <sys/ioctl.h>
|
# include <sys/ioctl.h>
|
||||||
#endif
|
#endif
|
||||||
#ifdef NETWARE
|
#ifdef NETWARE
|
||||||
#include <sys/filio.h>
|
# include <sys/filio.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
@@ -68,21 +73,25 @@
|
|||||||
|
|
||||||
static int try_again(int errnum);
|
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,
|
||||||
ares_socket_t write_fd, time_t now);
|
ares_socket_t write_fd, struct timeval *now);
|
||||||
static void read_tcp_data(ares_channel channel, fd_set *read_fds,
|
static void read_tcp_data(ares_channel channel, fd_set *read_fds,
|
||||||
ares_socket_t read_fd, time_t now);
|
ares_socket_t read_fd, struct timeval *now);
|
||||||
static void read_udp_packets(ares_channel channel, fd_set *read_fds,
|
static void read_udp_packets(ares_channel channel, fd_set *read_fds,
|
||||||
ares_socket_t read_fd, time_t now);
|
ares_socket_t read_fd, struct timeval *now);
|
||||||
static void advance_tcp_send_queue(ares_channel channel, int whichserver,
|
static void advance_tcp_send_queue(ares_channel channel, int whichserver,
|
||||||
ssize_t num_bytes);
|
ssize_t num_bytes);
|
||||||
static void process_timeouts(ares_channel channel, time_t now);
|
static void process_timeouts(ares_channel channel, struct timeval *now);
|
||||||
static void process_broken_connections(ares_channel channel, time_t now);
|
static void process_broken_connections(ares_channel channel,
|
||||||
|
struct timeval *now);
|
||||||
static void process_answer(ares_channel channel, unsigned char *abuf,
|
static void process_answer(ares_channel channel, unsigned char *abuf,
|
||||||
int alen, int whichserver, int tcp, time_t now);
|
int alen, int whichserver, int tcp,
|
||||||
static void handle_error(ares_channel channel, int whichserver, time_t now);
|
struct timeval *now);
|
||||||
|
static void handle_error(ares_channel channel, int whichserver,
|
||||||
|
struct timeval *now);
|
||||||
static void skip_server(ares_channel channel, struct query *query,
|
static void skip_server(ares_channel channel, struct query *query,
|
||||||
int whichserver);
|
int whichserver);
|
||||||
static void next_server(ares_channel channel, struct query *query, time_t now);
|
static void next_server(ares_channel channel, struct query *query,
|
||||||
|
struct timeval *now);
|
||||||
static int configure_socket(int s, ares_channel channel);
|
static int configure_socket(int s, ares_channel channel);
|
||||||
static int open_tcp_socket(ares_channel channel, struct server_state *server);
|
static int open_tcp_socket(ares_channel channel, struct server_state *server);
|
||||||
static int open_udp_socket(ares_channel channel, struct server_state *server);
|
static int open_udp_socket(ares_channel channel, struct server_state *server);
|
||||||
@@ -91,19 +100,57 @@ static int same_questions(const unsigned char *qbuf, int qlen,
|
|||||||
static void end_query(ares_channel channel, struct query *query, int status,
|
static void end_query(ares_channel channel, struct query *query, int status,
|
||||||
unsigned char *abuf, int alen);
|
unsigned char *abuf, int alen);
|
||||||
|
|
||||||
|
/* return true if now is exactly check time or later */
|
||||||
|
int ares__timedout(struct timeval *now,
|
||||||
|
struct timeval *check)
|
||||||
|
{
|
||||||
|
long secs = (now->tv_sec - check->tv_sec);
|
||||||
|
|
||||||
|
if(secs > 0)
|
||||||
|
return 1; /* yes, timed out */
|
||||||
|
if(secs < 0)
|
||||||
|
return 0; /* nope, not timed out */
|
||||||
|
|
||||||
|
/* if the full seconds were identical, check the sub second parts */
|
||||||
|
return (now->tv_usec - check->tv_usec >= 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* add the specific number of milliseconds to the time in the first argument */
|
||||||
|
int ares__timeadd(struct timeval *now,
|
||||||
|
int millisecs)
|
||||||
|
{
|
||||||
|
now->tv_sec += millisecs/1000;
|
||||||
|
now->tv_usec += (millisecs%1000)*1000;
|
||||||
|
|
||||||
|
if(now->tv_usec >= 1000000) {
|
||||||
|
++(now->tv_sec);
|
||||||
|
now->tv_usec -= 1000000;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* return time offset between now and (future) check, in milliseconds */
|
||||||
|
long ares__timeoffset(struct timeval *now,
|
||||||
|
struct timeval *check)
|
||||||
|
{
|
||||||
|
return (check->tv_sec - now->tv_sec)*1000 +
|
||||||
|
(check->tv_usec - now->tv_usec)/1000;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Something interesting happened on the wire, or there was a timeout.
|
/* Something interesting happened on the wire, or there was a timeout.
|
||||||
* See what's up and respond accordingly.
|
* See what's up and respond accordingly.
|
||||||
*/
|
*/
|
||||||
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)
|
||||||
{
|
{
|
||||||
time_t now;
|
struct timeval now = ares__tvnow();
|
||||||
|
|
||||||
time(&now);
|
write_tcp_data(channel, write_fds, ARES_SOCKET_BAD, &now);
|
||||||
write_tcp_data(channel, write_fds, ARES_SOCKET_BAD, now);
|
read_tcp_data(channel, read_fds, ARES_SOCKET_BAD, &now);
|
||||||
read_tcp_data(channel, read_fds, ARES_SOCKET_BAD, now);
|
read_udp_packets(channel, read_fds, ARES_SOCKET_BAD, &now);
|
||||||
read_udp_packets(channel, read_fds, ARES_SOCKET_BAD, now);
|
process_timeouts(channel, &now);
|
||||||
process_timeouts(channel, now);
|
process_broken_connections(channel, &now);
|
||||||
process_broken_connections(channel, now);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Something interesting happened on the wire, or there was a timeout.
|
/* Something interesting happened on the wire, or there was a timeout.
|
||||||
@@ -114,13 +161,12 @@ void ares_process_fd(ares_channel channel,
|
|||||||
file descriptors */
|
file descriptors */
|
||||||
ares_socket_t write_fd)
|
ares_socket_t write_fd)
|
||||||
{
|
{
|
||||||
time_t now;
|
struct timeval now = ares__tvnow();
|
||||||
|
|
||||||
time(&now);
|
write_tcp_data(channel, NULL, write_fd, &now);
|
||||||
write_tcp_data(channel, NULL, write_fd, now);
|
read_tcp_data(channel, NULL, read_fd, &now);
|
||||||
read_tcp_data(channel, NULL, read_fd, now);
|
read_udp_packets(channel, NULL, read_fd, &now);
|
||||||
read_udp_packets(channel, NULL, read_fd, now);
|
process_timeouts(channel, &now);
|
||||||
process_timeouts(channel, now);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -155,7 +201,7 @@ static int try_again(int errnum)
|
|||||||
static void write_tcp_data(ares_channel channel,
|
static void write_tcp_data(ares_channel channel,
|
||||||
fd_set *write_fds,
|
fd_set *write_fds,
|
||||||
ares_socket_t write_fd,
|
ares_socket_t write_fd,
|
||||||
time_t now)
|
struct timeval *now)
|
||||||
{
|
{
|
||||||
struct server_state *server;
|
struct server_state *server;
|
||||||
struct send_request *sendreq;
|
struct send_request *sendreq;
|
||||||
@@ -174,7 +220,8 @@ static void write_tcp_data(ares_channel channel,
|
|||||||
/* Make sure server has data to send and is selected in write_fds or
|
/* Make sure server has data to send and is selected in write_fds or
|
||||||
write_fd. */
|
write_fd. */
|
||||||
server = &channel->servers[i];
|
server = &channel->servers[i];
|
||||||
if (!server->qhead || server->tcp_socket == ARES_SOCKET_BAD || server->is_broken)
|
if (!server->qhead || server->tcp_socket == ARES_SOCKET_BAD ||
|
||||||
|
server->is_broken)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if(write_fds) {
|
if(write_fds) {
|
||||||
@@ -278,7 +325,7 @@ static void advance_tcp_send_queue(ares_channel channel, int whichserver,
|
|||||||
* a packet if we finish reading one.
|
* a packet if we finish reading one.
|
||||||
*/
|
*/
|
||||||
static void read_tcp_data(ares_channel channel, fd_set *read_fds,
|
static void read_tcp_data(ares_channel channel, fd_set *read_fds,
|
||||||
ares_socket_t read_fd, time_t now)
|
ares_socket_t read_fd, struct timeval *now)
|
||||||
{
|
{
|
||||||
struct server_state *server;
|
struct server_state *server;
|
||||||
int i;
|
int i;
|
||||||
@@ -374,12 +421,16 @@ static void read_tcp_data(ares_channel channel, fd_set *read_fds,
|
|||||||
|
|
||||||
/* If any UDP sockets select true for reading, process them. */
|
/* If any UDP sockets select true for reading, process them. */
|
||||||
static void read_udp_packets(ares_channel channel, fd_set *read_fds,
|
static void read_udp_packets(ares_channel channel, fd_set *read_fds,
|
||||||
ares_socket_t read_fd, time_t now)
|
ares_socket_t read_fd, struct timeval *now)
|
||||||
{
|
{
|
||||||
struct server_state *server;
|
struct server_state *server;
|
||||||
int i;
|
int i;
|
||||||
ssize_t count;
|
ssize_t count;
|
||||||
unsigned char buf[PACKETSZ + 1];
|
unsigned char buf[PACKETSZ + 1];
|
||||||
|
#ifdef HAVE_RECVFROM
|
||||||
|
struct sockaddr_in from;
|
||||||
|
ares_socklen_t fromlen;
|
||||||
|
#endif
|
||||||
|
|
||||||
if(!read_fds && (read_fd == ARES_SOCKET_BAD))
|
if(!read_fds && (read_fd == ARES_SOCKET_BAD))
|
||||||
/* no possible action */
|
/* no possible action */
|
||||||
@@ -413,11 +464,24 @@ static void read_udp_packets(ares_channel channel, fd_set *read_fds,
|
|||||||
/* To reduce event loop overhead, read and process as many
|
/* To reduce event loop overhead, read and process as many
|
||||||
* packets as we can. */
|
* packets as we can. */
|
||||||
do {
|
do {
|
||||||
|
#ifdef HAVE_RECVFROM
|
||||||
|
fromlen = sizeof(from);
|
||||||
|
count = (ssize_t)recvfrom(server->udp_socket, (void *)buf, sizeof(buf),
|
||||||
|
0, (struct sockaddr *)&from, &fromlen);
|
||||||
|
#else
|
||||||
count = sread(server->udp_socket, buf, sizeof(buf));
|
count = sread(server->udp_socket, buf, sizeof(buf));
|
||||||
|
#endif
|
||||||
if (count == -1 && try_again(SOCKERRNO))
|
if (count == -1 && try_again(SOCKERRNO))
|
||||||
continue;
|
continue;
|
||||||
else if (count <= 0)
|
else if (count <= 0)
|
||||||
handle_error(channel, i, now);
|
handle_error(channel, i, now);
|
||||||
|
#ifdef HAVE_RECVFROM
|
||||||
|
else if (from.sin_addr.s_addr != server->addr.s_addr)
|
||||||
|
/* Address response came from did not match the address
|
||||||
|
* we sent the request to. Someone may be attempting
|
||||||
|
* to perform a cache poisoning attack */
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
else
|
else
|
||||||
process_answer(channel, buf, (int)count, i, 0, now);
|
process_answer(channel, buf, (int)count, i, 0, now);
|
||||||
} while (count > 0);
|
} while (count > 0);
|
||||||
@@ -425,7 +489,7 @@ static void read_udp_packets(ares_channel channel, fd_set *read_fds,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* If any queries have timed out, note the timeout and move them on. */
|
/* If any queries have timed out, note the timeout and move them on. */
|
||||||
static void process_timeouts(ares_channel channel, time_t now)
|
static void process_timeouts(ares_channel channel, struct timeval *now)
|
||||||
{
|
{
|
||||||
time_t t; /* the time of the timeouts we're processing */
|
time_t t; /* the time of the timeouts we're processing */
|
||||||
struct query *query;
|
struct query *query;
|
||||||
@@ -438,14 +502,14 @@ static void process_timeouts(ares_channel channel, time_t now)
|
|||||||
* only a handful of requests that fall into the "now" bucket, so
|
* only a handful of requests that fall into the "now" bucket, so
|
||||||
* this should be quite quick.
|
* this should be quite quick.
|
||||||
*/
|
*/
|
||||||
for (t = channel->last_timeout_processed; t <= now; t++)
|
for (t = channel->last_timeout_processed; t <= now->tv_sec; t++)
|
||||||
{
|
{
|
||||||
list_head = &(channel->queries_by_timeout[t % ARES_TIMEOUT_TABLE_SIZE]);
|
list_head = &(channel->queries_by_timeout[t % ARES_TIMEOUT_TABLE_SIZE]);
|
||||||
for (list_node = list_head->next; list_node != list_head; )
|
for (list_node = list_head->next; list_node != list_head; )
|
||||||
{
|
{
|
||||||
query = list_node->data;
|
query = list_node->data;
|
||||||
list_node = list_node->next; /* in case the query gets deleted */
|
list_node = list_node->next; /* in case the query gets deleted */
|
||||||
if (query->timeout != 0 && now >= query->timeout)
|
if (query->timeout.tv_sec && ares__timedout(now, &query->timeout))
|
||||||
{
|
{
|
||||||
query->error_status = ARES_ETIMEOUT;
|
query->error_status = ARES_ETIMEOUT;
|
||||||
++query->timeouts;
|
++query->timeouts;
|
||||||
@@ -453,12 +517,13 @@ static void process_timeouts(ares_channel channel, time_t now)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
channel->last_timeout_processed = now;
|
channel->last_timeout_processed = now->tv_sec;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Handle an answer from a server. */
|
/* Handle an answer from a server. */
|
||||||
static void process_answer(ares_channel channel, unsigned char *abuf,
|
static void process_answer(ares_channel channel, unsigned char *abuf,
|
||||||
int alen, int whichserver, int tcp, time_t now)
|
int alen, int whichserver, int tcp,
|
||||||
|
struct timeval *now)
|
||||||
{
|
{
|
||||||
int tc, rcode;
|
int tc, rcode;
|
||||||
unsigned short id;
|
unsigned short id;
|
||||||
@@ -536,7 +601,8 @@ static void process_answer(ares_channel channel, unsigned char *abuf,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Close all the connections that are no longer usable. */
|
/* Close all the connections that are no longer usable. */
|
||||||
static void process_broken_connections(ares_channel channel, time_t now)
|
static void process_broken_connections(ares_channel channel,
|
||||||
|
struct timeval *now)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
for (i = 0; i < channel->nservers; i++)
|
for (i = 0; i < channel->nservers; i++)
|
||||||
@@ -549,7 +615,8 @@ static void process_broken_connections(ares_channel channel, time_t now)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void handle_error(ares_channel channel, int whichserver, time_t now)
|
static void handle_error(ares_channel channel, int whichserver,
|
||||||
|
struct timeval *now)
|
||||||
{
|
{
|
||||||
struct server_state *server;
|
struct server_state *server;
|
||||||
struct query *query;
|
struct query *query;
|
||||||
@@ -600,32 +667,36 @@ static void skip_server(ares_channel channel, struct query *query,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void next_server(ares_channel channel, struct query *query, time_t now)
|
static void next_server(ares_channel channel, struct query *query,
|
||||||
|
struct timeval *now)
|
||||||
{
|
{
|
||||||
/* Advance to the next server or try. */
|
/* We need to try each server channel->tries times. We have channel->nservers
|
||||||
query->server++;
|
* servers to try. In total, we need to do channel->nservers * channel->tries
|
||||||
for (; query->try < channel->tries; query->try++)
|
* attempts. Use query->try to remember how many times we already attempted
|
||||||
|
* this query. Use modular arithmetic to find the next server to try. */
|
||||||
|
while (++(query->try) < (channel->nservers * channel->tries))
|
||||||
{
|
{
|
||||||
for (; query->server < channel->nservers; query->server++)
|
struct server_state *server;
|
||||||
|
|
||||||
|
/* Move on to the next server. */
|
||||||
|
query->server = (query->server + 1) % channel->nservers;
|
||||||
|
server = &channel->servers[query->server];
|
||||||
|
|
||||||
|
/* We don't want to use this server if (1) we decided this
|
||||||
|
* connection is broken, and thus about to be closed, (2)
|
||||||
|
* we've decided to skip this server because of earlier
|
||||||
|
* errors we encountered, or (3) we already sent this query
|
||||||
|
* over this exact connection.
|
||||||
|
*/
|
||||||
|
if (!server->is_broken &&
|
||||||
|
!query->server_info[query->server].skip_server &&
|
||||||
|
!(query->using_tcp &&
|
||||||
|
(query->server_info[query->server].tcp_connection_generation ==
|
||||||
|
server->tcp_connection_generation)))
|
||||||
{
|
{
|
||||||
struct server_state *server = &channel->servers[query->server];
|
ares__send_query(channel, query, now);
|
||||||
/* We don't want to use this server if (1) we decided this
|
return;
|
||||||
* connection is broken, and thus about to be closed, (2)
|
|
||||||
* we've decided to skip this server because of earlier
|
|
||||||
* errors we encountered, or (3) we already sent this query
|
|
||||||
* over this exact connection.
|
|
||||||
*/
|
|
||||||
if (!server->is_broken &&
|
|
||||||
!query->server_info[query->server].skip_server &&
|
|
||||||
!(query->using_tcp &&
|
|
||||||
(query->server_info[query->server].tcp_connection_generation ==
|
|
||||||
server->tcp_connection_generation)))
|
|
||||||
{
|
|
||||||
ares__send_query(channel, query, now);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
query->server = 0;
|
|
||||||
|
|
||||||
/* You might think that with TCP we only need one try. However,
|
/* You might think that with TCP we only need one try. However,
|
||||||
* even when using TCP, servers can time-out our connection just
|
* even when using TCP, servers can time-out our connection just
|
||||||
@@ -634,13 +705,17 @@ static void next_server(ares_channel channel, struct query *query, time_t now)
|
|||||||
* tickle a bug that drops our request.
|
* tickle a bug that drops our request.
|
||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* If we are here, all attempts to perform query failed. */
|
||||||
end_query(channel, query, query->error_status, NULL, 0);
|
end_query(channel, query, query->error_status, NULL, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ares__send_query(ares_channel channel, struct query *query, time_t now)
|
void ares__send_query(ares_channel channel, struct query *query,
|
||||||
|
struct timeval *now)
|
||||||
{
|
{
|
||||||
struct send_request *sendreq;
|
struct send_request *sendreq;
|
||||||
struct server_state *server;
|
struct server_state *server;
|
||||||
|
int timeplus;
|
||||||
|
|
||||||
server = &channel->servers[query->server];
|
server = &channel->servers[query->server];
|
||||||
if (query->using_tcp)
|
if (query->using_tcp)
|
||||||
@@ -704,16 +779,18 @@ void ares__send_query(ares_channel channel, struct query *query, time_t now)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
query->timeout = now
|
timeplus = channel->timeout << (query->try / channel->nservers);
|
||||||
+ ((query->try == 0) ? channel->timeout
|
timeplus = (timeplus * (9 + (rand () & 7))) / 16;
|
||||||
: channel->timeout << query->try / channel->nservers);
|
query->timeout = *now;
|
||||||
|
ares__timeadd(&query->timeout,
|
||||||
|
timeplus);
|
||||||
/* Keep track of queries bucketed by timeout, so we can process
|
/* Keep track of queries bucketed by timeout, so we can process
|
||||||
* timeout events quickly.
|
* timeout events quickly.
|
||||||
*/
|
*/
|
||||||
ares__remove_from_list(&(query->queries_by_timeout));
|
ares__remove_from_list(&(query->queries_by_timeout));
|
||||||
ares__insert_in_list(
|
ares__insert_in_list(
|
||||||
&(query->queries_by_timeout),
|
&(query->queries_by_timeout),
|
||||||
&(channel->queries_by_timeout[query->timeout %
|
&(channel->queries_by_timeout[query->timeout.tv_sec %
|
||||||
ARES_TIMEOUT_TABLE_SIZE]));
|
ARES_TIMEOUT_TABLE_SIZE]));
|
||||||
|
|
||||||
/* Keep track of queries bucketed by server, so we can process server
|
/* Keep track of queries bucketed by server, so we can process server
|
||||||
@@ -731,68 +808,51 @@ void ares__send_query(ares_channel channel, struct query *query, time_t now)
|
|||||||
static int setsocknonblock(ares_socket_t sockfd, /* operate on this */
|
static int setsocknonblock(ares_socket_t sockfd, /* operate on this */
|
||||||
int nonblock /* TRUE or FALSE */)
|
int nonblock /* TRUE or FALSE */)
|
||||||
{
|
{
|
||||||
#undef SETBLOCK
|
#if defined(USE_BLOCKING_SOCKETS)
|
||||||
#define SETBLOCK 0
|
|
||||||
#ifdef HAVE_O_NONBLOCK
|
return 0; /* returns success */
|
||||||
|
|
||||||
|
#elif defined(HAVE_FCNTL_O_NONBLOCK)
|
||||||
|
|
||||||
/* most recent unix versions */
|
/* most recent unix versions */
|
||||||
int flags;
|
int flags;
|
||||||
|
|
||||||
flags = fcntl(sockfd, F_GETFL, 0);
|
flags = fcntl(sockfd, F_GETFL, 0);
|
||||||
if (FALSE != 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));
|
||||||
#undef SETBLOCK
|
|
||||||
#define SETBLOCK 1
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(HAVE_FIONBIO) && (SETBLOCK == 0)
|
#elif defined(HAVE_IOCTL_FIONBIO)
|
||||||
|
|
||||||
/* older unix versions */
|
/* older unix versions */
|
||||||
int flags;
|
int flags;
|
||||||
|
|
||||||
flags = nonblock;
|
flags = nonblock;
|
||||||
return ioctl(sockfd, FIONBIO, &flags);
|
return ioctl(sockfd, FIONBIO, &flags);
|
||||||
#undef SETBLOCK
|
|
||||||
#define SETBLOCK 2
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(HAVE_IOCTLSOCKET) && (SETBLOCK == 0)
|
#elif defined(HAVE_IOCTLSOCKET_FIONBIO)
|
||||||
|
|
||||||
#ifdef WATT32
|
#ifdef WATT32
|
||||||
char flags;
|
char flags;
|
||||||
#else
|
#else
|
||||||
/* Windows? */
|
/* Windows */
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
#endif
|
#endif
|
||||||
flags = nonblock;
|
flags = nonblock;
|
||||||
|
|
||||||
return ioctlsocket(sockfd, FIONBIO, &flags);
|
return ioctlsocket(sockfd, FIONBIO, &flags);
|
||||||
#undef SETBLOCK
|
|
||||||
#define SETBLOCK 3
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(HAVE_IOCTLSOCKET_CASE) && (SETBLOCK == 0)
|
#elif defined(HAVE_IOCTLSOCKET_CAMEL_FIONBIO)
|
||||||
/* presumably for Amiga */
|
|
||||||
|
/* Amiga */
|
||||||
return IoctlSocket(sockfd, FIONBIO, (long)nonblock);
|
return IoctlSocket(sockfd, FIONBIO, (long)nonblock);
|
||||||
#undef SETBLOCK
|
|
||||||
#define SETBLOCK 4
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(HAVE_SO_NONBLOCK) && (SETBLOCK == 0)
|
#elif defined(HAVE_SETSOCKOPT_SO_NONBLOCK)
|
||||||
|
|
||||||
/* BeOS */
|
/* BeOS */
|
||||||
long b = nonblock ? 1 : 0;
|
long b = nonblock ? 1 : 0;
|
||||||
return setsockopt(sockfd, SOL_SOCKET, SO_NONBLOCK, &b, sizeof(b));
|
return setsockopt(sockfd, SOL_SOCKET, SO_NONBLOCK, &b, sizeof(b));
|
||||||
#undef SETBLOCK
|
|
||||||
#define SETBLOCK 5
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_DISABLED_NONBLOCKING
|
#else
|
||||||
return 0; /* returns success */
|
# error "no non-blocking method was found/used/set"
|
||||||
#undef SETBLOCK
|
|
||||||
#define SETBLOCK 6
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if (SETBLOCK == 0)
|
|
||||||
#error "no non-blocking method was found/used/set"
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -836,10 +896,11 @@ static int open_tcp_socket(ares_channel channel, struct server_state *server)
|
|||||||
/* Configure it. */
|
/* Configure it. */
|
||||||
if (configure_socket(s, channel) < 0)
|
if (configure_socket(s, channel) < 0)
|
||||||
{
|
{
|
||||||
close(s);
|
closesocket(s);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef TCP_NODELAY
|
||||||
/*
|
/*
|
||||||
* Disable the Nagle algorithm (only relevant for TCP sockets, and thus not in
|
* Disable the Nagle algorithm (only relevant for TCP sockets, and thus not in
|
||||||
* configure_socket). In general, in DNS lookups we're pretty much interested
|
* configure_socket). In general, in DNS lookups we're pretty much interested
|
||||||
@@ -850,23 +911,37 @@ static int open_tcp_socket(ares_channel channel, struct server_state *server)
|
|||||||
if (setsockopt(s, IPPROTO_TCP, TCP_NODELAY,
|
if (setsockopt(s, IPPROTO_TCP, TCP_NODELAY,
|
||||||
(void *)&opt, sizeof(opt)) == -1)
|
(void *)&opt, sizeof(opt)) == -1)
|
||||||
{
|
{
|
||||||
close(s);
|
closesocket(s);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Connect to the server. */
|
/* Connect to the 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 = (unsigned short)(channel->tcp_port & 0xffff);
|
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 = SOCKERRNO;
|
{
|
||||||
|
int err = SOCKERRNO;
|
||||||
|
|
||||||
if (err != EINPROGRESS && err != EWOULDBLOCK) {
|
if (err != EINPROGRESS && err != EWOULDBLOCK)
|
||||||
closesocket(s);
|
{
|
||||||
return -1;
|
closesocket(s);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (channel->sock_create_cb)
|
||||||
|
{
|
||||||
|
int err = channel->sock_create_cb(s, SOCK_STREAM,
|
||||||
|
channel->sock_create_cb_data);
|
||||||
|
if (err < 0)
|
||||||
|
{
|
||||||
|
closesocket(s);
|
||||||
|
return err;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
SOCK_STATE_CALLBACK(channel, s, 1, 0);
|
SOCK_STATE_CALLBACK(channel, s, 1, 0);
|
||||||
server->tcp_buffer_pos = 0;
|
server->tcp_buffer_pos = 0;
|
||||||
@@ -888,7 +963,7 @@ static int open_udp_socket(ares_channel channel, struct server_state *server)
|
|||||||
/* Set the socket non-blocking. */
|
/* Set the socket non-blocking. */
|
||||||
if (configure_socket(s, channel) < 0)
|
if (configure_socket(s, channel) < 0)
|
||||||
{
|
{
|
||||||
close(s);
|
closesocket(s);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -899,8 +974,24 @@ static int open_udp_socket(ares_channel channel, struct server_state *server)
|
|||||||
sockin.sin_port = (unsigned short)(channel->udp_port & 0xffff);
|
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);
|
int err = SOCKERRNO;
|
||||||
return -1;
|
|
||||||
|
if (err != EINPROGRESS && err != EWOULDBLOCK)
|
||||||
|
{
|
||||||
|
closesocket(s);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (channel->sock_create_cb)
|
||||||
|
{
|
||||||
|
int err = channel->sock_create_cb(s, SOCK_DGRAM,
|
||||||
|
channel->sock_create_cb_data);
|
||||||
|
if (err < 0)
|
||||||
|
{
|
||||||
|
closesocket(s);
|
||||||
|
return err;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SOCK_STATE_CALLBACK(channel, s, 1, 0);
|
SOCK_STATE_CALLBACK(channel, s, 1, 0);
|
||||||
|
|||||||
@@ -17,14 +17,19 @@
|
|||||||
|
|
||||||
#include "setup.h"
|
#include "setup.h"
|
||||||
|
|
||||||
#if defined(WIN32) && !defined(WATT32)
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
#include "nameser.h"
|
# include <sys/socket.h>
|
||||||
#else
|
|
||||||
#include <netinet/in.h>
|
|
||||||
#include <arpa/nameser.h>
|
|
||||||
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
|
|
||||||
#include <arpa/nameser_compat.h>
|
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef HAVE_NETINET_IN_H
|
||||||
|
# include <netinet/in.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_ARPA_NAMESER_H
|
||||||
|
# include <arpa/nameser.h>
|
||||||
|
#else
|
||||||
|
# include "nameser.h"
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
|
||||||
|
# include <arpa/nameser_compat.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@@ -65,7 +70,7 @@ void ares__rc4(rc4_key* key, unsigned char *buffer_ptr, int buffer_len)
|
|||||||
key->y = y;
|
key->y = y;
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct query* find_query_by_id(ares_channel channel, int id)
|
static struct query* find_query_by_id(ares_channel channel, unsigned short id)
|
||||||
{
|
{
|
||||||
unsigned short qid;
|
unsigned short qid;
|
||||||
struct list_node* list_head;
|
struct list_node* list_head;
|
||||||
@@ -90,15 +95,15 @@ static struct query* find_query_by_id(ares_channel channel, int id)
|
|||||||
performed per id generation. In practice this search should happen only
|
performed per id generation. In practice this search should happen only
|
||||||
once per newly generated id
|
once per newly generated id
|
||||||
*/
|
*/
|
||||||
static int generate_unique_id(ares_channel channel)
|
static unsigned short generate_unique_id(ares_channel channel)
|
||||||
{
|
{
|
||||||
int id;
|
unsigned short id;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
id = ares__generate_new_id(&channel->id_key);
|
id = ares__generate_new_id(&channel->id_key);
|
||||||
} while (find_query_by_id(channel,id));
|
} while (find_query_by_id(channel, id));
|
||||||
|
|
||||||
return id;
|
return (unsigned short)id;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ares_query(ares_channel channel, const char *name, int dnsclass,
|
void ares_query(ares_channel channel, const char *name, int dnsclass,
|
||||||
|
|||||||
145
ares/ares_rules.h
Normal file
145
ares/ares_rules.h
Normal file
@@ -0,0 +1,145 @@
|
|||||||
|
#ifndef __CARES_RULES_H
|
||||||
|
#define __CARES_RULES_H
|
||||||
|
|
||||||
|
/* $Id$ */
|
||||||
|
|
||||||
|
/* Copyright (C) 2009 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* ================================================================ */
|
||||||
|
/* COMPILE TIME SANITY CHECKS */
|
||||||
|
/* ================================================================ */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* NOTE 1:
|
||||||
|
* -------
|
||||||
|
*
|
||||||
|
* All checks done in this file are intentionally placed in a public
|
||||||
|
* header file which is pulled by ares.h when an application is
|
||||||
|
* being built using an already built c-ares library. Additionally
|
||||||
|
* this file is also included and used when building the library.
|
||||||
|
*
|
||||||
|
* If compilation fails on this file it is certainly sure that the
|
||||||
|
* problem is elsewhere. It could be a problem in the ares_build.h
|
||||||
|
* header file, or simply that you are using different compilation
|
||||||
|
* settings than those used to build the library.
|
||||||
|
*
|
||||||
|
* Nothing in this file is intended to be modified or adjusted by the
|
||||||
|
* c-ares library user nor by the c-ares library builder.
|
||||||
|
*
|
||||||
|
* Do not deactivate any check, these are done to make sure that the
|
||||||
|
* library is properly built and used.
|
||||||
|
*
|
||||||
|
* You can find further help on the c-ares development mailing list:
|
||||||
|
* http://cool.haxx.se/mailman/listinfo/c-ares/
|
||||||
|
*
|
||||||
|
* NOTE 2
|
||||||
|
* ------
|
||||||
|
*
|
||||||
|
* Some of the following compile time checks are based on the fact
|
||||||
|
* that the dimension of a constant array can not be a negative one.
|
||||||
|
* In this way if the compile time verification fails, the compilation
|
||||||
|
* will fail issuing an error. The error description wording is compiler
|
||||||
|
* dependant but it will be quite similar to one of the following:
|
||||||
|
*
|
||||||
|
* "negative subscript or subscript is too large"
|
||||||
|
* "array must have at least one element"
|
||||||
|
* "-1 is an illegal array size"
|
||||||
|
* "size of array is negative"
|
||||||
|
*
|
||||||
|
* If you are building an application which tries to use an already
|
||||||
|
* built c-ares library and you are getting this kind of errors on
|
||||||
|
* this file, it is a clear indication that there is a mismatch between
|
||||||
|
* how the library was built and how you are trying to use it for your
|
||||||
|
* application. Your already compiled or binary library provider is the
|
||||||
|
* only one who can give you the details you need to properly use it.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Verify that some macros are actually defined.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef CARES_SIZEOF_LONG
|
||||||
|
# error "CARES_SIZEOF_LONG definition is missing!"
|
||||||
|
Error Compilation_aborted_CARES_SIZEOF_LONG_is_missing
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef CARES_TYPEOF_ARES_SOCKLEN_T
|
||||||
|
# error "CARES_TYPEOF_ARES_SOCKLEN_T definition is missing!"
|
||||||
|
Error Compilation_aborted_CARES_TYPEOF_ARES_SOCKLEN_T_is_missing
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef CARES_SIZEOF_ARES_SOCKLEN_T
|
||||||
|
# error "CARES_SIZEOF_ARES_SOCKLEN_T definition is missing!"
|
||||||
|
Error Compilation_aborted_CARES_SIZEOF_ARES_SOCKLEN_T_is_missing
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Macros private to this header file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define CareschkszEQ(t, s) sizeof(t) == s ? 1 : -1
|
||||||
|
|
||||||
|
#define CareschkszGE(t1, t2) sizeof(t1) >= sizeof(t2) ? 1 : -1
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Verify that the size previously defined and expected for long
|
||||||
|
* is the same as the one reported by sizeof() at compile time.
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef char
|
||||||
|
__cares_rule_01__
|
||||||
|
[CareschkszEQ(long, CARES_SIZEOF_LONG)];
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Verify that the size previously defined and expected for
|
||||||
|
* ares_socklen_t is actually the the same as the one reported
|
||||||
|
* by sizeof() at compile time.
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef char
|
||||||
|
__cares_rule_02__
|
||||||
|
[CareschkszEQ(ares_socklen_t, CARES_SIZEOF_ARES_SOCKLEN_T)];
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Verify at compile time that the size of ares_socklen_t as reported
|
||||||
|
* by sizeof() is greater or equal than the one reported for int for
|
||||||
|
* the current compilation.
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef char
|
||||||
|
__cares_rule_03__
|
||||||
|
[CareschkszGE(ares_socklen_t, int)];
|
||||||
|
|
||||||
|
/* ================================================================ */
|
||||||
|
/* EXTERNALLY AND INTERNALLY VISIBLE DEFINITIONS */
|
||||||
|
/* ================================================================ */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Get rid of macros private to this header file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#undef CareschkszEQ
|
||||||
|
#undef CareschkszGE
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Get rid of macros not intended to exist beyond this point.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#undef CARES_PULL_WS2TCPIP_H
|
||||||
|
#undef CARES_PULL_SYS_TYPES_H
|
||||||
|
#undef CARES_PULL_SYS_SOCKET_H
|
||||||
|
|
||||||
|
#undef CARES_TYPEOF_ARES_SOCKLEN_T
|
||||||
|
|
||||||
|
#endif /* __CARES_RULES_H */
|
||||||
@@ -24,9 +24,7 @@ ares_save_options \- Save configuration values obtained from initialized ares_ch
|
|||||||
.B void ares_save_options(ares_channel \fIchannel\fP, struct ares_options *\fIoptions\fP, int *\fIoptmask\fP)
|
.B void ares_save_options(ares_channel \fIchannel\fP, struct ares_options *\fIoptions\fP, int *\fIoptmask\fP)
|
||||||
.fi
|
.fi
|
||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
||||||
The
|
The \fBares_save_options(3)\fP function saves the channel data identified by
|
||||||
.B ares_save_options
|
|
||||||
function saves the channel data identified by
|
|
||||||
.IR channel ,
|
.IR channel ,
|
||||||
into the options struct identified by
|
into the options struct identified by
|
||||||
.IR options ,
|
.IR options ,
|
||||||
@@ -38,11 +36,18 @@ The resultant options and optmask are then able to be
|
|||||||
passed directly to ares_init_options. When the options
|
passed directly to ares_init_options. When the options
|
||||||
are no longer needed, ares_destroy_options should be called
|
are no longer needed, ares_destroy_options should be called
|
||||||
to free any associated memory.
|
to free any associated memory.
|
||||||
|
.SH NOTE
|
||||||
|
Since c-ares 1.6.0 the ares_options struct has been "locked" meaning that it
|
||||||
|
won't be extended to cover new funtions. This function will remain
|
||||||
|
functioning, but it can only return config data that can be represented in
|
||||||
|
this config struct, which may no longer be the complete set of config
|
||||||
|
options. \fBares_dup(3)\fP will not have that restriction.
|
||||||
.SH SEE ALSO
|
.SH SEE ALSO
|
||||||
.BR ares_destroy_options (3),
|
.BR ares_destroy_options (3),
|
||||||
.BR ares_init_options (3)
|
.BR ares_init_options (3),
|
||||||
|
.BR ares_dup (3)
|
||||||
|
.SH AVAILABILITY
|
||||||
|
ares_save_options(3) was added in c-ares 1.4.0
|
||||||
.SH AUTHOR
|
.SH AUTHOR
|
||||||
Brad House
|
Brad House
|
||||||
.br
|
.br
|
||||||
|
|||||||
@@ -16,14 +16,15 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "setup.h"
|
#include "setup.h"
|
||||||
|
|
||||||
#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>
|
||||||
|
|
||||||
#if defined(WIN32) && !defined(WATT32)
|
#ifdef HAVE_STRINGS_H
|
||||||
#include "nameser.h"
|
# include <strings.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "ares.h"
|
#include "ares.h"
|
||||||
@@ -291,7 +292,7 @@ static int single_domain(ares_channel channel, const char *name, char **s)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
error = ERRNO;
|
error = errno;
|
||||||
switch(error)
|
switch(error)
|
||||||
{
|
{
|
||||||
case ENOENT:
|
case ENOENT:
|
||||||
|
|||||||
@@ -17,14 +17,19 @@
|
|||||||
|
|
||||||
#include "setup.h"
|
#include "setup.h"
|
||||||
|
|
||||||
#if defined(WIN32) && !defined(WATT32)
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
#include "nameser.h"
|
# include <sys/socket.h>
|
||||||
#else
|
|
||||||
#include <netinet/in.h>
|
|
||||||
#include <arpa/nameser.h>
|
|
||||||
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
|
|
||||||
#include <arpa/nameser_compat.h>
|
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef HAVE_NETINET_IN_H
|
||||||
|
# include <netinet/in.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_ARPA_NAMESER_H
|
||||||
|
# include <arpa/nameser.h>
|
||||||
|
#else
|
||||||
|
# include "nameser.h"
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
|
||||||
|
# include <arpa/nameser_compat.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@@ -39,7 +44,7 @@ void ares_send(ares_channel channel, const unsigned char *qbuf, int qlen,
|
|||||||
{
|
{
|
||||||
struct query *query;
|
struct query *query;
|
||||||
int i;
|
int i;
|
||||||
time_t now;
|
struct timeval now;
|
||||||
|
|
||||||
/* Verify that the query is at least long enough to hold the header. */
|
/* Verify that the query is at least long enough to hold the header. */
|
||||||
if (qlen < HFIXEDSZ || qlen >= (1 << 16))
|
if (qlen < HFIXEDSZ || qlen >= (1 << 16))
|
||||||
@@ -74,7 +79,8 @@ 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 = (unsigned short)DNS_HEADER_QID(qbuf);
|
query->qid = (unsigned short)DNS_HEADER_QID(qbuf);
|
||||||
query->timeout = 0;
|
query->timeout.tv_sec = 0;
|
||||||
|
query->timeout.tv_usec = 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.
|
||||||
@@ -92,7 +98,13 @@ void ares_send(ares_channel channel, const unsigned char *qbuf, int qlen,
|
|||||||
|
|
||||||
/* Initialize query status. */
|
/* Initialize query status. */
|
||||||
query->try = 0;
|
query->try = 0;
|
||||||
query->server = 0;
|
|
||||||
|
/* Choose the server to send the query to. If rotation is enabled, keep track
|
||||||
|
* of the next server we want to use. */
|
||||||
|
query->server = channel->last_server;
|
||||||
|
if (channel->rotate == 1)
|
||||||
|
channel->last_server = (channel->last_server + 1) % channel->nservers;
|
||||||
|
|
||||||
for (i = 0; i < channel->nservers; i++)
|
for (i = 0; i < channel->nservers; i++)
|
||||||
{
|
{
|
||||||
query->server_info[i].skip_server = 0;
|
query->server_info[i].skip_server = 0;
|
||||||
@@ -114,10 +126,10 @@ void ares_send(ares_channel channel, const unsigned char *qbuf, int qlen,
|
|||||||
* responses quickly.
|
* responses quickly.
|
||||||
*/
|
*/
|
||||||
ares__insert_in_list(
|
ares__insert_in_list(
|
||||||
&(query->queries_by_qid),
|
&(query->queries_by_qid),
|
||||||
&(channel->queries_by_qid[query->qid % ARES_QID_TABLE_SIZE]));
|
&(channel->queries_by_qid[query->qid % ARES_QID_TABLE_SIZE]));
|
||||||
|
|
||||||
/* Perform the first query action. */
|
/* Perform the first query action. */
|
||||||
time(&now);
|
now = ares__tvnow();
|
||||||
ares__send_query(channel, query, now);
|
ares__send_query(channel, query, &now);
|
||||||
}
|
}
|
||||||
|
|||||||
24
ares/ares_set_socket_callback.3
Normal file
24
ares/ares_set_socket_callback.3
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
.\" $Id$
|
||||||
|
.\"
|
||||||
|
.TH ARES_SET_SOCKET_CALLBACK 3 "2 Dec 2008"
|
||||||
|
.SH NAME
|
||||||
|
ares_set_socket_callback \- Set a socket creation callback
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.nf
|
||||||
|
int ares_set_socket_callback(ares_channel \fIchannel\fP,
|
||||||
|
ares_sock_create_callback \fIcallback\fP,
|
||||||
|
void *\fIuserdata\fP)
|
||||||
|
.fi
|
||||||
|
.SH DESCRIPTION
|
||||||
|
This function sets a \fIcallback\fP in the given ares channel handle. This
|
||||||
|
callback function will be invoked after the socket has been created, and
|
||||||
|
connected to the remote server. The callback must return ARES_SUCCESS if
|
||||||
|
things are fine, or use the standard ares error codes to signal errors
|
||||||
|
back. Returned errors will abort the ares operation.
|
||||||
|
.SH SEE ALSO
|
||||||
|
.BR ares_init_options (3)
|
||||||
|
.SH AVAILABILITY
|
||||||
|
ares_set_socket_callback(3) was added in c-ares 1.6.0
|
||||||
|
.SH AUTHOR
|
||||||
|
Gregor Jasny
|
||||||
|
|
||||||
67
ares/ares_strcasecmp.c
Normal file
67
ares/ares_strcasecmp.c
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
|
||||||
|
/* $Id$ */
|
||||||
|
|
||||||
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and distribute this
|
||||||
|
* software and its documentation for any purpose and without
|
||||||
|
* fee is hereby granted, provided that the above copyright
|
||||||
|
* notice appear in all copies and that both that copyright
|
||||||
|
* notice and this permission notice appear in supporting
|
||||||
|
* documentation, and that the name of M.I.T. not be used in
|
||||||
|
* advertising or publicity pertaining to distribution of the
|
||||||
|
* software without specific, written prior permission.
|
||||||
|
* M.I.T. makes no representations about the suitability of
|
||||||
|
* this software for any purpose. It is provided "as is"
|
||||||
|
* without express or implied warranty.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "setup.h"
|
||||||
|
#include "ares_strcasecmp.h"
|
||||||
|
|
||||||
|
#ifndef HAVE_STRCASECMP
|
||||||
|
int ares_strcasecmp(const char *a, const char *b)
|
||||||
|
{
|
||||||
|
#if defined(HAVE_STRCMPI)
|
||||||
|
return strcmpi(a, b);
|
||||||
|
#elif defined(HAVE_STRICMP)
|
||||||
|
return stricmp(a, b);
|
||||||
|
#else
|
||||||
|
size_t i;
|
||||||
|
|
||||||
|
for (i = 0; i < (size_t)-1; i++) {
|
||||||
|
int c1 = ISUPPER(a[i]) ? tolower(a[i]) : a[i];
|
||||||
|
int c2 = ISUPPER(b[i]) ? tolower(b[i]) : b[i];
|
||||||
|
if (c1 != c2)
|
||||||
|
return c1-c2;
|
||||||
|
if (!c1)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef HAVE_STRNCASECMP
|
||||||
|
int ares_strncasecmp(const char *a, const char *b, size_t n)
|
||||||
|
{
|
||||||
|
#if defined(HAVE_STRNCMPI)
|
||||||
|
return strncmpi(a, b, n);
|
||||||
|
#elif defined(HAVE_STRNICMP)
|
||||||
|
return strnicmp(a, b, n);
|
||||||
|
#else
|
||||||
|
size_t i;
|
||||||
|
|
||||||
|
for (i = 0; i < n; i++) {
|
||||||
|
int c1 = ISUPPER(a[i]) ? tolower(a[i]) : a[i];
|
||||||
|
int c2 = ISUPPER(b[i]) ? tolower(b[i]) : b[i];
|
||||||
|
if (c1 != c2)
|
||||||
|
return c1-c2;
|
||||||
|
if (!c1)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
31
ares/ares_strcasecmp.h
Normal file
31
ares/ares_strcasecmp.h
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
#ifndef HEADER_CARES_STRCASECMP_H
|
||||||
|
#define HEADER_CARES_STRCASECMP_H
|
||||||
|
|
||||||
|
/* $Id$ */
|
||||||
|
|
||||||
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and distribute this
|
||||||
|
* software and its documentation for any purpose and without
|
||||||
|
* fee is hereby granted, provided that the above copyright
|
||||||
|
* notice appear in all copies and that both that copyright
|
||||||
|
* notice and this permission notice appear in supporting
|
||||||
|
* documentation, and that the name of M.I.T. not be used in
|
||||||
|
* advertising or publicity pertaining to distribution of the
|
||||||
|
* software without specific, written prior permission.
|
||||||
|
* M.I.T. makes no representations about the suitability of
|
||||||
|
* this software for any purpose. It is provided "as is"
|
||||||
|
* without express or implied warranty.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "setup.h"
|
||||||
|
|
||||||
|
#ifndef HAVE_STRCASECMP
|
||||||
|
extern int ares_strcasecmp(const char *a, const char *b);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef HAVE_STRNCASECMP
|
||||||
|
extern int ares_strncasecmp(const char *a, const char *b, size_t n);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* HEADER_CARES_STRCASECMP_H */
|
||||||
43
ares/ares_strdup.c
Normal file
43
ares/ares_strdup.c
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
|
||||||
|
/* $Id$ */
|
||||||
|
|
||||||
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and distribute this
|
||||||
|
* software and its documentation for any purpose and without
|
||||||
|
* fee is hereby granted, provided that the above copyright
|
||||||
|
* notice appear in all copies and that both that copyright
|
||||||
|
* notice and this permission notice appear in supporting
|
||||||
|
* documentation, and that the name of M.I.T. not be used in
|
||||||
|
* advertising or publicity pertaining to distribution of the
|
||||||
|
* software without specific, written prior permission.
|
||||||
|
* M.I.T. makes no representations about the suitability of
|
||||||
|
* this software for any purpose. It is provided "as is"
|
||||||
|
* without express or implied warranty.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "setup.h"
|
||||||
|
#include "ares_strdup.h"
|
||||||
|
|
||||||
|
#ifndef HAVE_STRDUP
|
||||||
|
char *ares_strdup(const char *s1)
|
||||||
|
{
|
||||||
|
size_t sz;
|
||||||
|
char * s2;
|
||||||
|
|
||||||
|
if(s1) {
|
||||||
|
sz = strlen(s1);
|
||||||
|
if(sz < (size_t)-1) {
|
||||||
|
sz++;
|
||||||
|
if(sz < ((size_t)-1) / sizeof(char)) {
|
||||||
|
s2 = malloc(sz * sizeof(char));
|
||||||
|
if(s2) {
|
||||||
|
memcpy(s2, s1, sz * sizeof(char));
|
||||||
|
return s2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return (char *)NULL;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
27
ares/ares_strdup.h
Normal file
27
ares/ares_strdup.h
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
#ifndef HEADER_CARES_STRDUP_H
|
||||||
|
#define HEADER_CARES_STRDUP_H
|
||||||
|
|
||||||
|
/* $Id$ */
|
||||||
|
|
||||||
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and distribute this
|
||||||
|
* software and its documentation for any purpose and without
|
||||||
|
* fee is hereby granted, provided that the above copyright
|
||||||
|
* notice appear in all copies and that both that copyright
|
||||||
|
* notice and this permission notice appear in supporting
|
||||||
|
* documentation, and that the name of M.I.T. not be used in
|
||||||
|
* advertising or publicity pertaining to distribution of the
|
||||||
|
* software without specific, written prior permission.
|
||||||
|
* M.I.T. makes no representations about the suitability of
|
||||||
|
* this software for any purpose. It is provided "as is"
|
||||||
|
* without express or implied warranty.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "setup.h"
|
||||||
|
|
||||||
|
#ifndef HAVE_STRDUP
|
||||||
|
extern char *ares_strdup(const char *s1);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* HEADER_CARES_STRDUP_H */
|
||||||
@@ -43,7 +43,10 @@ const char *ares_strerror(int code)
|
|||||||
"Misformatted string",
|
"Misformatted string",
|
||||||
"Illegal flags specified",
|
"Illegal flags specified",
|
||||||
"Given hostname is not numeric",
|
"Given hostname is not numeric",
|
||||||
"Illegal hints flags specified"
|
"Illegal hints flags specified",
|
||||||
|
"Error loading iphlpapi.dll",
|
||||||
|
"Error loading advapi32.dll",
|
||||||
|
"Could not find GetNetworkParams function"
|
||||||
};
|
};
|
||||||
|
|
||||||
if(code >= 0 && code < (int)(sizeof(errtext) / sizeof(*errtext)))
|
if(code >= 0 && code < (int)(sizeof(errtext) / sizeof(*errtext)))
|
||||||
|
|||||||
@@ -37,16 +37,16 @@ struct timeval *ares_timeout(ares_channel channel, struct timeval *maxtv,
|
|||||||
struct query *query;
|
struct query *query;
|
||||||
struct list_node* list_head;
|
struct list_node* list_head;
|
||||||
struct list_node* list_node;
|
struct list_node* list_node;
|
||||||
time_t now;
|
struct timeval now;
|
||||||
time_t offset, min_offset; /* these use time_t since some 32 bit systems
|
struct timeval nextstop;
|
||||||
still use 64 bit time_t! (like VS2005) */
|
long offset, min_offset;
|
||||||
|
|
||||||
/* No queries, no timeout (and no fetch of the current time). */
|
/* No queries, no timeout (and no fetch of the current time). */
|
||||||
if (ares__is_list_empty(&(channel->all_queries)))
|
if (ares__is_list_empty(&(channel->all_queries)))
|
||||||
return maxtv;
|
return maxtv;
|
||||||
|
|
||||||
/* Find the minimum timeout for the current set of queries. */
|
/* Find the minimum timeout for the current set of queries. */
|
||||||
time(&now);
|
now = ares__tvnow();
|
||||||
min_offset = -1;
|
min_offset = -1;
|
||||||
|
|
||||||
list_head = &(channel->all_queries);
|
list_head = &(channel->all_queries);
|
||||||
@@ -54,23 +54,26 @@ struct timeval *ares_timeout(ares_channel channel, struct timeval *maxtv,
|
|||||||
list_node = list_node->next)
|
list_node = list_node->next)
|
||||||
{
|
{
|
||||||
query = list_node->data;
|
query = list_node->data;
|
||||||
if (query->timeout == 0)
|
if (query->timeout.tv_sec == 0)
|
||||||
continue;
|
continue;
|
||||||
offset = query->timeout - now;
|
offset = ares__timeoffset(&now, &query->timeout);
|
||||||
if (offset < 0)
|
if (offset < 0)
|
||||||
offset = 0;
|
offset = 0;
|
||||||
if (min_offset == -1 || offset < min_offset)
|
if (min_offset == -1 || offset < min_offset)
|
||||||
min_offset = offset;
|
min_offset = offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If we found a minimum timeout and it's sooner than the one
|
if(min_offset != -1) {
|
||||||
* specified in maxtv (if any), return it. Otherwise go with
|
nextstop.tv_sec = min_offset/1000;
|
||||||
* maxtv.
|
nextstop.tv_usec = (min_offset%1000)*1000;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If we found a minimum timeout and it's sooner than the one specified in
|
||||||
|
* maxtv (if any), return it. Otherwise go with maxtv.
|
||||||
*/
|
*/
|
||||||
if (min_offset != -1 && (!maxtv || min_offset <= maxtv->tv_sec))
|
if (min_offset != -1 && (!maxtv || ares__timedout(maxtv, &nextstop)))
|
||||||
{
|
{
|
||||||
tvbuf->tv_sec = (long)min_offset;
|
*tvbuf = nextstop;
|
||||||
tvbuf->tv_usec = 0;
|
|
||||||
return tvbuf;
|
return tvbuf;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/* $Id$ */
|
/* $Id$ */
|
||||||
|
|
||||||
#include "setup.h"
|
#include "setup.h"
|
||||||
#include "ares_version.h"
|
#include "ares.h"
|
||||||
|
|
||||||
const char *ares_version(int *version)
|
const char *ares_version(int *version)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -4,22 +4,19 @@
|
|||||||
#define ARES__VERSION_H
|
#define ARES__VERSION_H
|
||||||
|
|
||||||
#define ARES_VERSION_MAJOR 1
|
#define ARES_VERSION_MAJOR 1
|
||||||
#define ARES_VERSION_MINOR 5
|
#define ARES_VERSION_MINOR 6
|
||||||
#define ARES_VERSION_PATCH 2
|
#define ARES_VERSION_PATCH 1
|
||||||
#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.5.2-CVS"
|
#define ARES_VERSION_STR "1.6.1-CVS"
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#if (ARES_VERSION >= 0x010601)
|
||||||
extern "C" {
|
# define CARES_HAVE_ARES_LIBRARY_INIT 1
|
||||||
#endif
|
# define CARES_HAVE_ARES_LIBRARY_CLEANUP 1
|
||||||
|
#else
|
||||||
const char *ares_version(int *version);
|
# undef CARES_HAVE_ARES_LIBRARY_INIT
|
||||||
|
# undef CARES_HAVE_ARES_LIBRARY_CLEANUP
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
80
ares/ares_writev.c
Normal file
80
ares/ares_writev.c
Normal file
@@ -0,0 +1,80 @@
|
|||||||
|
|
||||||
|
/* $Id$ */
|
||||||
|
|
||||||
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and distribute this
|
||||||
|
* software and its documentation for any purpose and without
|
||||||
|
* fee is hereby granted, provided that the above copyright
|
||||||
|
* notice appear in all copies and that both that copyright
|
||||||
|
* notice and this permission notice appear in supporting
|
||||||
|
* documentation, and that the name of M.I.T. not be used in
|
||||||
|
* advertising or publicity pertaining to distribution of the
|
||||||
|
* software without specific, written prior permission.
|
||||||
|
* M.I.T. makes no representations about the suitability of
|
||||||
|
* this software for any purpose. It is provided "as is"
|
||||||
|
* without express or implied warranty.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "setup.h"
|
||||||
|
|
||||||
|
#ifdef HAVE_LIMITS_H
|
||||||
|
# include <limits.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "ares.h"
|
||||||
|
#include "ares_private.h"
|
||||||
|
|
||||||
|
#ifndef HAVE_WRITEV
|
||||||
|
ssize_t ares_writev(ares_socket_t s, const struct iovec *iov, int iovcnt)
|
||||||
|
{
|
||||||
|
char *buffer, *bp;
|
||||||
|
int i;
|
||||||
|
size_t bytes = 0;
|
||||||
|
ssize_t result;
|
||||||
|
|
||||||
|
/* Validate iovcnt */
|
||||||
|
if (iovcnt <= 0)
|
||||||
|
{
|
||||||
|
SET_ERRNO(EINVAL);
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Validate and find the sum of the iov_len values in the iov array */
|
||||||
|
for (i = 0; i < iovcnt; i++)
|
||||||
|
{
|
||||||
|
if (iov[i].iov_len > INT_MAX - bytes)
|
||||||
|
{
|
||||||
|
SET_ERRNO(EINVAL);
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
|
bytes += iov[i].iov_len;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bytes == 0)
|
||||||
|
return (0);
|
||||||
|
|
||||||
|
/* Allocate a temporary buffer to hold the data */
|
||||||
|
buffer = malloc(bytes);
|
||||||
|
if (!buffer)
|
||||||
|
{
|
||||||
|
SET_ERRNO(ENOMEM);
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Copy the data into buffer */
|
||||||
|
for (bp = buffer, i = 0; i < iovcnt; ++i)
|
||||||
|
{
|
||||||
|
memcpy (bp, iov[i].iov_base, iov[i].iov_len);
|
||||||
|
bp += iov[i].iov_len;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Send buffer contents */
|
||||||
|
result = swrite(s, buffer, bytes);
|
||||||
|
|
||||||
|
free(buffer);
|
||||||
|
|
||||||
|
return (result);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
37
ares/ares_writev.h
Normal file
37
ares/ares_writev.h
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
#ifndef HEADER_CARES_WRITEV_H
|
||||||
|
#define HEADER_CARES_WRITEV_H
|
||||||
|
|
||||||
|
/* $Id$ */
|
||||||
|
|
||||||
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and distribute this
|
||||||
|
* software and its documentation for any purpose and without
|
||||||
|
* fee is hereby granted, provided that the above copyright
|
||||||
|
* notice appear in all copies and that both that copyright
|
||||||
|
* notice and this permission notice appear in supporting
|
||||||
|
* documentation, and that the name of M.I.T. not be used in
|
||||||
|
* advertising or publicity pertaining to distribution of the
|
||||||
|
* software without specific, written prior permission.
|
||||||
|
* M.I.T. makes no representations about the suitability of
|
||||||
|
* this software for any purpose. It is provided "as is"
|
||||||
|
* without express or implied warranty.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "setup.h"
|
||||||
|
#include "ares.h"
|
||||||
|
|
||||||
|
#ifndef HAVE_WRITEV
|
||||||
|
|
||||||
|
/* Structure for scatter/gather I/O. */
|
||||||
|
struct iovec
|
||||||
|
{
|
||||||
|
void *iov_base; /* Pointer to data. */
|
||||||
|
size_t iov_len; /* Length of data. */
|
||||||
|
};
|
||||||
|
|
||||||
|
extern ssize_t ares_writev(ares_socket_t s, const struct iovec *iov, int iovcnt);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* HEADER_CARES_WRITEV_H */
|
||||||
@@ -1,7 +1,45 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
${LIBTOOLIZE:-libtoolize} --copy --automake --force
|
# The logic for finding the right libtoolize is taken from libcurl's buildconf
|
||||||
${ACLOCAL:-aclocal} $ACLOCAL_FLAGS
|
|
||||||
|
#--------------------------------------------------------------------------
|
||||||
|
# findtool works as 'which' but we use a different name to make it more
|
||||||
|
# obvious we aren't using 'which'! ;-)
|
||||||
|
#
|
||||||
|
findtool(){
|
||||||
|
file="$1"
|
||||||
|
|
||||||
|
old_IFS=$IFS; IFS=':'
|
||||||
|
for path in $PATH
|
||||||
|
do
|
||||||
|
IFS=$old_IFS
|
||||||
|
# echo "checks for $file in $path" >&2
|
||||||
|
if test -f "$path/$file"; then
|
||||||
|
echo "$path/$file"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
IFS=$old_IFS
|
||||||
|
}
|
||||||
|
|
||||||
|
# this approach that tries 'glibtool' first is some kind of work-around for
|
||||||
|
# some BSD-systems I believe that use to provide the GNU libtool named
|
||||||
|
# glibtool, with 'libtool' being something completely different.
|
||||||
|
libtool=`findtool glibtool 2>/dev/null`
|
||||||
|
if test ! -x "$libtool"; then
|
||||||
|
libtool=`findtool ${LIBTOOL:-libtool}`
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test -z "$LIBTOOLIZE"; then
|
||||||
|
# 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
|
||||||
|
|
||||||
|
${libtoolize} --copy --automake --force
|
||||||
|
${ACLOCAL:-aclocal} -I m4 $ACLOCAL_FLAGS
|
||||||
${AUTOHEADER:-autoheader}
|
${AUTOHEADER:-autoheader}
|
||||||
${AUTOCONF:-autoconf}
|
${AUTOCONF:-autoconf}
|
||||||
${AUTOMAKE:-automake} --add-missing
|
${AUTOMAKE:-automake} --add-missing
|
||||||
|
|||||||
8
ares/buildconf.bat
Normal file
8
ares/buildconf.bat
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
@echo off
|
||||||
|
REM set up a CVS tree to build when there's no autotools
|
||||||
|
REM $Revision$
|
||||||
|
REM $Date$
|
||||||
|
|
||||||
|
REM create ares_build.h
|
||||||
|
copy /Y ares_build.h.dist ares_build.h
|
||||||
|
|
||||||
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
/* $Id$ */
|
/* $Id$ */
|
||||||
|
|
||||||
/* Copyright (C) 2004 - 2006 by Daniel Stenberg et al
|
/* Copyright (C) 2004 - 2008 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
|
||||||
* documentation for any purpose and without fee is hereby granted, provided
|
* documentation for any purpose and without fee is hereby granted, provided
|
||||||
@@ -29,6 +29,9 @@
|
|||||||
#define HAVE_GETOPT_H 1
|
#define HAVE_GETOPT_H 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Define if you have the <limits.h> header file. */
|
||||||
|
#define HAVE_LIMITS_H 1
|
||||||
|
|
||||||
/* Define if you have the <signal.h> header file. */
|
/* Define if you have the <signal.h> header file. */
|
||||||
#define HAVE_SIGNAL_H 1
|
#define HAVE_SIGNAL_H 1
|
||||||
|
|
||||||
@@ -76,9 +79,30 @@
|
|||||||
/* FUNCTIONS */
|
/* FUNCTIONS */
|
||||||
/* ---------------------------------------------------------------- */
|
/* ---------------------------------------------------------------- */
|
||||||
|
|
||||||
/* Define if you have the ioctlsocket function. */
|
/* Define if you have the ioctlsocket function. */
|
||||||
#define HAVE_IOCTLSOCKET 1
|
#define HAVE_IOCTLSOCKET 1
|
||||||
|
|
||||||
|
/* Define if you have a working ioctlsocket FIONBIO function. */
|
||||||
|
#define HAVE_IOCTLSOCKET_FIONBIO 1
|
||||||
|
|
||||||
|
/* Define if you have the strcasecmp function. */
|
||||||
|
/* #define HAVE_STRCASECMP 1 */
|
||||||
|
|
||||||
|
/* Define if you have the strdup function. */
|
||||||
|
#define HAVE_STRDUP 1
|
||||||
|
|
||||||
|
/* Define if you have the stricmp function. */
|
||||||
|
#define HAVE_STRICMP 1
|
||||||
|
|
||||||
|
/* Define if you have the strncasecmp function. */
|
||||||
|
/* #define HAVE_STRNCASECMP 1 */
|
||||||
|
|
||||||
|
/* Define if you have the strnicmp function. */
|
||||||
|
#define HAVE_STRNICMP 1
|
||||||
|
|
||||||
|
/* Define if you have the gethostname function. */
|
||||||
|
#define HAVE_GETHOSTNAME 1
|
||||||
|
|
||||||
/* Define if you have the recv function. */
|
/* Define if you have the recv function. */
|
||||||
#define HAVE_RECV 1
|
#define HAVE_RECV 1
|
||||||
|
|
||||||
@@ -97,6 +121,30 @@
|
|||||||
/* Define to the function return type for recv. */
|
/* Define to the function return type for recv. */
|
||||||
#define RECV_TYPE_RETV int
|
#define RECV_TYPE_RETV int
|
||||||
|
|
||||||
|
/* Define if you have the recvfrom function. */
|
||||||
|
#define HAVE_RECVFROM 1
|
||||||
|
|
||||||
|
/* Define to the type of arg 1 for recvfrom. */
|
||||||
|
#define RECVFROM_TYPE_ARG1 SOCKET
|
||||||
|
|
||||||
|
/* Define to the type pointed by arg 2 for recvfrom. */
|
||||||
|
#define RECVFROM_TYPE_ARG2 char
|
||||||
|
|
||||||
|
/* Define to the type of arg 3 for recvfrom. */
|
||||||
|
#define RECVFROM_TYPE_ARG3 int
|
||||||
|
|
||||||
|
/* Define to the type of arg 4 for recvfrom. */
|
||||||
|
#define RECVFROM_TYPE_ARG4 int
|
||||||
|
|
||||||
|
/* Define to the type pointed by arg 5 for recvfrom. */
|
||||||
|
#define RECVFROM_TYPE_ARG5 struct sockaddr
|
||||||
|
|
||||||
|
/* Define to the type pointed by arg 6 for recvfrom. */
|
||||||
|
#define RECVFROM_TYPE_ARG6 int
|
||||||
|
|
||||||
|
/* Define to the function return type for recvfrom. */
|
||||||
|
#define RECVFROM_TYPE_RETV int
|
||||||
|
|
||||||
/* Define if you have the send function. */
|
/* Define if you have the send function. */
|
||||||
#define HAVE_SEND 1
|
#define HAVE_SEND 1
|
||||||
|
|
||||||
@@ -123,6 +171,15 @@
|
|||||||
#define SOCKET int
|
#define SOCKET int
|
||||||
#define NS_INADDRSZ 4
|
#define NS_INADDRSZ 4
|
||||||
#define HAVE_ARPA_NAMESER_H 1
|
#define HAVE_ARPA_NAMESER_H 1
|
||||||
|
#define HAVE_ARPA_INET_H 1
|
||||||
|
#define HAVE_NETDB_H 1
|
||||||
|
#define HAVE_NETINET_IN_H 1
|
||||||
|
#define HAVE_SYS_SOCKET_H 1
|
||||||
|
#define HAVE_NETINET_TCP_H 1
|
||||||
|
#define HAVE_AF_INET6 1
|
||||||
|
#define HAVE_PF_INET6 1
|
||||||
|
#define HAVE_STRUCT_IN6_ADDR 1
|
||||||
|
#define HAVE_STRUCT_SOCKADDR_IN6 1
|
||||||
#undef HAVE_WINSOCK_H
|
#undef HAVE_WINSOCK_H
|
||||||
#undef HAVE_WINSOCK2_H
|
#undef HAVE_WINSOCK2_H
|
||||||
#undef HAVE_WS2TCPIP_H
|
#undef HAVE_WS2TCPIP_H
|
||||||
@@ -169,17 +226,47 @@
|
|||||||
#define _CRT_NONSTDC_NO_DEPRECATE 1
|
#define _CRT_NONSTDC_NO_DEPRECATE 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* VS2008 does not support Windows build targets prior to WinXP, */
|
/* Officially, Microsoft's Windows SDK versions 6.X do not support Windows
|
||||||
/* so, if no build target has been defined we will target WinXP. */
|
2000 as a supported build target. VS2008 default installations provide an
|
||||||
|
embedded Windows SDK v6.0A along with the claim that Windows 2000 is a
|
||||||
|
valid build target for VS2008. Popular belief is that binaries built using
|
||||||
|
Windows SDK versions 6.X and Windows 2000 as a build target are functional */
|
||||||
|
#if defined(_MSC_VER) && (_MSC_VER >= 1500)
|
||||||
|
# define VS2008_MINIMUM_TARGET 0x0500
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* When no build target is specified VS2008 default build target is Windows
|
||||||
|
Vista, which leaves out even Winsows XP. If no build target has been given
|
||||||
|
for VS2008 we will target the minimum Officially supported build target,
|
||||||
|
which happens to be Windows XP. */
|
||||||
|
#if defined(_MSC_VER) && (_MSC_VER >= 1500)
|
||||||
|
# define VS2008_DEFAULT_TARGET 0x0501
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* VS2008 default target settings and minimum build target check */
|
||||||
#if defined(_MSC_VER) && (_MSC_VER >= 1500)
|
#if defined(_MSC_VER) && (_MSC_VER >= 1500)
|
||||||
# ifndef _WIN32_WINNT
|
# ifndef _WIN32_WINNT
|
||||||
# define _WIN32_WINNT 0x0501
|
# define _WIN32_WINNT VS2008_DEFAULT_TARGET
|
||||||
# endif
|
# endif
|
||||||
# ifndef WINVER
|
# ifndef WINVER
|
||||||
# define WINVER 0x0501
|
# define WINVER VS2008_DEFAULT_TARGET
|
||||||
# endif
|
# endif
|
||||||
# if (_WIN32_WINNT < 0x0501) || (WINVER < 0x0501)
|
# if (_WIN32_WINNT < VS2008_MINIMUM_TARGET) || (WINVER < VS2008_MINIMUM_TARGET)
|
||||||
# error VS2008 does not support Windows build targets prior to WinXP
|
# error VS2008 does not support Windows build targets prior to Windows 2000
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Availability of freeaddrinfo, getaddrinfo and getnameinfo functions is quite */
|
||||||
|
/* convoluted, compiler dependant and in some cases even build target dependat. */
|
||||||
|
#if defined(HAVE_WS2TCPIP_H)
|
||||||
|
# if defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0501)
|
||||||
|
# define HAVE_FREEADDRINFO 1
|
||||||
|
# define HAVE_GETADDRINFO 1
|
||||||
|
# define HAVE_GETNAMEINFO 1
|
||||||
|
# elif defined(_MSC_VER) && (_MSC_VER >= 1200)
|
||||||
|
# define HAVE_FREEADDRINFO 1
|
||||||
|
# define HAVE_GETADDRINFO 1
|
||||||
|
# define HAVE_GETNAMEINFO 1
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +1,68 @@
|
|||||||
|
|
||||||
dnl Process this file with autoconf to produce a configure script.
|
|
||||||
AC_PREREQ(2.57)
|
AC_PREREQ(2.57)
|
||||||
AC_INIT(ares_init.c)
|
|
||||||
|
dnl Version not hardcoded here. Fetched later from ares_version.h
|
||||||
|
AC_INIT([c-ares], [-],
|
||||||
|
[c-ares mailing list => http://cool.haxx.se/mailman/listinfo/c-ares])
|
||||||
|
|
||||||
|
CARES_OVERRIDE_AUTOCONF
|
||||||
|
|
||||||
AC_CONFIG_SRCDIR([ares_ipv6.h])
|
AC_CONFIG_SRCDIR([ares_ipv6.h])
|
||||||
AM_CONFIG_HEADER(config.h)
|
AM_CONFIG_HEADER([config.h ares_build.h])
|
||||||
AM_MAINTAINER_MODE
|
AM_MAINTAINER_MODE
|
||||||
AM_INIT_AUTOMAKE(c-ares, CVS)
|
|
||||||
|
CARES_CHECK_OPTION_DEBUG
|
||||||
|
CARES_CHECK_OPTION_OPTIMIZE
|
||||||
|
CARES_CHECK_OPTION_WARNINGS
|
||||||
|
|
||||||
|
CARES_CHECK_PATH_SEPARATOR
|
||||||
|
|
||||||
|
dnl SED is mandatory for configure process and libtool.
|
||||||
|
dnl Set it now, allowing it to be changed later.
|
||||||
|
AC_PATH_PROG([SED], [sed], [not_found],
|
||||||
|
[$PATH:/usr/bin:/usr/local/bin])
|
||||||
|
if test -z "$SED" || test "$SED" = "not_found"; then
|
||||||
|
AC_MSG_ERROR([sed not found in PATH. Cannot continue without sed.])
|
||||||
|
fi
|
||||||
|
AC_SUBST([SED])
|
||||||
|
|
||||||
|
dnl GREP is mandatory for configure process and libtool.
|
||||||
|
dnl Set it now, allowing it to be changed later.
|
||||||
|
AC_PATH_PROG([GREP], [grep], [not_found],
|
||||||
|
[$PATH:/usr/bin:/usr/local/bin])
|
||||||
|
if test -z "$GREP" || test "$GREP" = "not_found"; then
|
||||||
|
AC_MSG_ERROR([grep not found in PATH. Cannot continue without grep.])
|
||||||
|
fi
|
||||||
|
AC_SUBST([GREP])
|
||||||
|
|
||||||
|
dnl EGREP is mandatory for configure process and libtool.
|
||||||
|
dnl Set it now, allowing it to be changed later.
|
||||||
|
if echo a | ($GREP -E '(a|b)') >/dev/null 2>&1; then
|
||||||
|
AC_MSG_CHECKING([for egrep])
|
||||||
|
EGREP="$GREP -E"
|
||||||
|
AC_MSG_RESULT([$EGREP])
|
||||||
|
else
|
||||||
|
AC_PATH_PROG([EGREP], [egrep], [not_found],
|
||||||
|
[$PATH:/usr/bin:/usr/local/bin])
|
||||||
|
fi
|
||||||
|
if test -z "$EGREP" || test "$EGREP" = "not_found"; then
|
||||||
|
AC_MSG_ERROR([egrep not found in PATH. Cannot continue without egrep.])
|
||||||
|
fi
|
||||||
|
AC_SUBST([EGREP])
|
||||||
|
|
||||||
|
dnl AR is mandatory for configure process and libtool.
|
||||||
|
dnl This is target dependant, so check it as a tool.
|
||||||
|
AC_PATH_TOOL([AR], [ar], [not_found],
|
||||||
|
[$PATH:/usr/bin:/usr/local/bin])
|
||||||
|
if test -z "$AR" || test "$AR" = "not_found"; then
|
||||||
|
AC_MSG_ERROR([ar not found in PATH. Cannot continue without ar.])
|
||||||
|
fi
|
||||||
|
AC_SUBST([AR])
|
||||||
|
|
||||||
|
dnl Fetch c-ares version from ares_version.h
|
||||||
|
VERSION=`$SED -ne 's/^#define ARES_VERSION_STR "\(.*\)"/\1/p' ${srcdir}/ares_version.h`
|
||||||
|
AM_INIT_AUTOMAKE([c-ares], [$VERSION])
|
||||||
|
AC_MSG_CHECKING([c-ares version])
|
||||||
|
AC_MSG_RESULT([$VERSION])
|
||||||
|
|
||||||
dnl
|
dnl
|
||||||
dnl Detect the canonical host and target build environment
|
dnl Detect the canonical host and target build environment
|
||||||
@@ -15,81 +72,37 @@ AC_CANONICAL_HOST
|
|||||||
dnl Get system canonical name
|
dnl Get system canonical name
|
||||||
AC_DEFINE_UNQUOTED(OS, "${host}", [cpu-machine-OS])
|
AC_DEFINE_UNQUOTED(OS, "${host}", [cpu-machine-OS])
|
||||||
|
|
||||||
AC_AIX
|
CARES_CHECK_PROG_CC
|
||||||
AC_PROG_CC
|
AM_PROG_CC_C_O
|
||||||
AC_PROG_INSTALL
|
AC_PROG_INSTALL
|
||||||
|
|
||||||
|
dnl This defines _ALL_SOURCE for AIX
|
||||||
|
CARES_CHECK_AIX_ALL_SOURCE
|
||||||
|
|
||||||
|
dnl Our configure and build reentrant settings
|
||||||
|
CARES_CONFIGURE_REENTRANT
|
||||||
|
|
||||||
|
dnl check for how to do large files
|
||||||
|
AC_SYS_LARGEFILE
|
||||||
|
|
||||||
case $host_os in
|
case $host_os in
|
||||||
solaris*)
|
solaris*)
|
||||||
AC_DEFINE(ETC_INET, 1, [if a /etc/inet dir is being used])
|
AC_DEFINE(ETC_INET, 1, [if a /etc/inet dir is being used])
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
dnl support building of Windows DLLs
|
dnl support building of Windows DLLs
|
||||||
AC_LIBTOOL_WIN32_DLL
|
AC_LIBTOOL_WIN32_DLL
|
||||||
|
|
||||||
dnl ************************************************************
|
CARES_PROCESS_DEBUG_BUILD_OPTS
|
||||||
dnl Option to switch on debug options. This makes an assumption that
|
|
||||||
dnl this is built as an 'ares' subdir in the curl source tree. Subject for
|
|
||||||
dnl improval in the future!
|
|
||||||
dnl
|
|
||||||
AC_MSG_CHECKING([whether to enable debug options])
|
|
||||||
AC_ARG_ENABLE(debug,
|
|
||||||
AC_HELP_STRING([--enable-debug],[Enable pedantic debug options])
|
|
||||||
AC_HELP_STRING([--disable-debug],[Disable debug options]),
|
|
||||||
[ case "$enableval" in
|
|
||||||
no)
|
|
||||||
AC_MSG_RESULT(no)
|
|
||||||
;;
|
|
||||||
*) AC_MSG_RESULT(yes)
|
|
||||||
|
|
||||||
dnl when doing the debug stuff, use static library only
|
AM_CONDITIONAL(DEBUGBUILD, test x$want_debug = xyes)
|
||||||
AC_DISABLE_SHARED
|
AM_CONDITIONAL(CURLDEBUG, test x$want_debug = xyes)
|
||||||
|
|
||||||
debugbuild="yes"
|
dnl force libtool to build static libraries with PIC on AMD64-Linux & FreeBSD
|
||||||
|
AC_MSG_CHECKING([if arch-OS host is AMD64-Linux/FreeBSD (to build static libraries with PIC)])
|
||||||
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
|
|
||||||
AC_DEFINE(BUILDING_LIBCURL, 1, [when building as static part of libcurl])
|
|
||||||
|
|
||||||
CPPFLAGS="$CPPFLAGS -DCURLDEBUG -I$srcdir/../include"
|
|
||||||
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 optimize options from CFLAGS
|
|
||||||
CURL_CC_DEBUG_OPTS
|
|
||||||
|
|
||||||
;;
|
|
||||||
esac ],
|
|
||||||
AC_MSG_RESULT(no)
|
|
||||||
)
|
|
||||||
AM_CONDITIONAL(DEBUGBUILD, test x$debugbuild = xyes)
|
|
||||||
|
|
||||||
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
|
case $host in
|
||||||
x86_64*linux*)
|
x86_64*linux*|amd64*freebsd*|ia64*freebsd*)
|
||||||
AC_MSG_RESULT([yes])
|
AC_MSG_RESULT([yes])
|
||||||
with_pic=yes
|
with_pic=yes
|
||||||
;;
|
;;
|
||||||
@@ -103,7 +116,7 @@ AC_PROG_LIBTOOL
|
|||||||
|
|
||||||
AC_MSG_CHECKING([if we need -no-undefined])
|
AC_MSG_CHECKING([if we need -no-undefined])
|
||||||
case $host in
|
case $host in
|
||||||
*-*-cygwin | *-*-mingw* | *-*-pw32*)
|
*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*)
|
||||||
need_no_undefined=yes
|
need_no_undefined=yes
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
@@ -113,41 +126,29 @@ esac
|
|||||||
AC_MSG_RESULT($need_no_undefined)
|
AC_MSG_RESULT($need_no_undefined)
|
||||||
AM_CONDITIONAL(NO_UNDEFINED, test x$need_no_undefined = xyes)
|
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 **********************************************************************
|
||||||
dnl platform/compiler/architecture specific checks/flags
|
dnl platform/compiler/architecture specific checks/flags
|
||||||
dnl **********************************************************************
|
dnl **********************************************************************
|
||||||
|
|
||||||
|
CARES_CHECK_COMPILER
|
||||||
|
CARES_SET_COMPILER_BASIC_OPTS
|
||||||
|
CARES_SET_COMPILER_DEBUG_OPTS
|
||||||
|
CARES_SET_COMPILER_OPTIMIZE_OPTS
|
||||||
|
CARES_SET_COMPILER_WARNING_OPTS
|
||||||
|
|
||||||
case $host in
|
case $host in
|
||||||
#
|
#
|
||||||
x86_64*linux*)
|
x86_64*linux*|amd64*freebsd*|ia64*freebsd*)
|
||||||
#
|
#
|
||||||
dnl find out if icc is being used
|
if test "$compiler_id" = "INTEL_UNIX_C"; then
|
||||||
if test "z$ICC" = "z"; then
|
|
||||||
CURL_DETECT_ICC
|
|
||||||
fi
|
|
||||||
#
|
|
||||||
if test "$ICC" = "yes"; then
|
|
||||||
dnl figure out icc version
|
|
||||||
AC_MSG_CHECKING([icc version])
|
|
||||||
iccver=`$CC -dumpversion`
|
|
||||||
iccnhi=`echo $iccver | cut -d . -f1`
|
|
||||||
iccnlo=`echo $iccver | cut -d . -f2`
|
|
||||||
iccnum=`(expr $iccnhi "*" 100 + $iccnlo) 2>/dev/null`
|
|
||||||
AC_MSG_RESULT($iccver)
|
|
||||||
#
|
#
|
||||||
if test "$iccnum" -ge "900" && test "$iccnum" -lt "1000"; then
|
if test "$compiler_num" -ge "900" &&
|
||||||
|
test "$compiler_num" -lt "1000"; then
|
||||||
dnl icc 9.X specific
|
dnl icc 9.X specific
|
||||||
CFLAGS="$CFLAGS -i-dynamic"
|
CFLAGS="$CFLAGS -i-dynamic"
|
||||||
fi
|
fi
|
||||||
#
|
#
|
||||||
if test "$iccnum" -ge "1000"; then
|
if test "$compiler_num" -ge "1000"; then
|
||||||
dnl icc 10.X or later
|
dnl icc 10.X or later
|
||||||
CFLAGS="$CFLAGS -shared-intel"
|
CFLAGS="$CFLAGS -shared-intel"
|
||||||
fi
|
fi
|
||||||
@@ -157,10 +158,41 @@ case $host in
|
|||||||
#
|
#
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
CARES_CHECK_COMPILER_HALT_ON_ERROR
|
||||||
|
CARES_CHECK_COMPILER_ARRAY_SIZE_NEGATIVE
|
||||||
|
|
||||||
|
dnl **********************************************************************
|
||||||
|
dnl Compilation based checks should not be done before this point.
|
||||||
|
dnl **********************************************************************
|
||||||
|
|
||||||
|
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_NATIVE_WINDOWS
|
||||||
|
case X-"$ac_cv_native_windows" in
|
||||||
|
X-yes)
|
||||||
|
CURL_CHECK_HEADER_WINSOCK
|
||||||
|
CURL_CHECK_HEADER_WINSOCK2
|
||||||
|
CURL_CHECK_HEADER_WS2TCPIP
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
ac_cv_header_winsock_h="no"
|
||||||
|
ac_cv_header_winsock2_h="no"
|
||||||
|
ac_cv_header_ws2tcpip_h="no"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
dnl **********************************************************************
|
dnl **********************************************************************
|
||||||
dnl Checks for libraries.
|
dnl Checks for libraries.
|
||||||
dnl **********************************************************************
|
dnl **********************************************************************
|
||||||
|
|
||||||
|
CARES_CHECK_LIB_XNET
|
||||||
|
|
||||||
dnl gethostbyname without lib or in the nsl lib?
|
dnl gethostbyname without lib or in the nsl lib?
|
||||||
AC_CHECK_FUNC(gethostbyname,
|
AC_CHECK_FUNC(gethostbyname,
|
||||||
[HAVE_GETHOSTBYNAME="1"
|
[HAVE_GETHOSTBYNAME="1"
|
||||||
@@ -187,49 +219,107 @@ then
|
|||||||
AC_MSG_CHECKING([for gethostbyname with both nsl and socket libs])
|
AC_MSG_CHECKING([for gethostbyname with both nsl and socket libs])
|
||||||
my_ac_save_LIBS=$LIBS
|
my_ac_save_LIBS=$LIBS
|
||||||
LIBS="-lnsl -lsocket $LIBS"
|
LIBS="-lnsl -lsocket $LIBS"
|
||||||
AC_TRY_LINK( ,
|
AC_LINK_IFELSE([
|
||||||
[gethostbyname();],
|
AC_LANG_PROGRAM([[
|
||||||
[ dnl found it!
|
]],[[
|
||||||
HAVE_GETHOSTBYNAME="1"
|
gethostbyname();
|
||||||
AC_MSG_RESULT([yes])],
|
]])
|
||||||
[ dnl failed!
|
],[
|
||||||
AC_MSG_RESULT([no])
|
AC_MSG_RESULT([yes])
|
||||||
dnl restore LIBS
|
HAVE_GETHOSTBYNAME="1"
|
||||||
LIBS=$my_ac_save_LIBS]
|
],[
|
||||||
)
|
AC_MSG_RESULT([no])
|
||||||
|
LIBS=$my_ac_save_LIBS
|
||||||
|
])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test "$HAVE_GETHOSTBYNAME" != "1"
|
if test "$HAVE_GETHOSTBYNAME" != "1"
|
||||||
then
|
then
|
||||||
dnl This is for Msys/Mingw
|
dnl This is for winsock systems
|
||||||
AC_MSG_CHECKING([for gethostbyname in ws2_32])
|
if test "$ac_cv_header_windows_h" = "yes"; then
|
||||||
my_ac_save_LIBS=$LIBS
|
if test "$ac_cv_header_winsock_h" = "yes"; then
|
||||||
LIBS="-lws2_32 $LIBS"
|
case $host in
|
||||||
AC_TRY_LINK([#include <winsock2.h>],
|
*-*-mingw32ce*)
|
||||||
[gethostbyname("www.dummysite.com");],
|
winsock_LIB="-lwinsock"
|
||||||
[ dnl worked!
|
;;
|
||||||
ws2="yes"
|
*)
|
||||||
AC_MSG_RESULT([yes])
|
winsock_LIB="-lwsock32"
|
||||||
HAVE_GETHOSTBYNAME="1"],
|
;;
|
||||||
[ dnl failed, restore LIBS
|
esac
|
||||||
LIBS=$my_ac_save_LIBS
|
fi
|
||||||
AC_MSG_RESULT(no)]
|
if test "$ac_cv_header_winsock2_h" = "yes"; then
|
||||||
)
|
winsock_LIB="-lws2_32"
|
||||||
|
fi
|
||||||
|
if test ! -z "$winsock_LIB"; then
|
||||||
|
my_ac_save_LIBS=$LIBS
|
||||||
|
LIBS="$winsock_LIB $LIBS"
|
||||||
|
AC_MSG_CHECKING([for gethostbyname in $winsock_LIB])
|
||||||
|
AC_LINK_IFELSE([
|
||||||
|
AC_LANG_PROGRAM([[
|
||||||
|
#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>
|
||||||
|
#else
|
||||||
|
#ifdef HAVE_WINSOCK_H
|
||||||
|
#include <winsock.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
]],[[
|
||||||
|
gethostbyname("www.dummysite.com");
|
||||||
|
]])
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT([yes])
|
||||||
|
HAVE_GETHOSTBYNAME="1"
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT([no])
|
||||||
|
winsock_LIB=""
|
||||||
|
LIBS=$my_ac_save_LIBS
|
||||||
|
])
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test "$HAVE_GETHOSTBYNAME" != "1"
|
||||||
|
then
|
||||||
|
dnl This is for Minix 3.1
|
||||||
|
AC_MSG_CHECKING([for gethostbyname for Minix 3])
|
||||||
|
AC_LINK_IFELSE([
|
||||||
|
AC_LANG_PROGRAM([[
|
||||||
|
/* Older Minix versions may need <net/gen/netdb.h> here instead */
|
||||||
|
#include <netdb.h>
|
||||||
|
]],[[
|
||||||
|
gethostbyname("www.dummysite.com");
|
||||||
|
]])
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT([yes])
|
||||||
|
HAVE_GETHOSTBYNAME="1"
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT([no])
|
||||||
|
])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test "$HAVE_GETHOSTBYNAME" != "1"
|
if test "$HAVE_GETHOSTBYNAME" != "1"
|
||||||
then
|
then
|
||||||
dnl This is for eCos with a stubbed DNS implementation
|
dnl This is for eCos with a stubbed DNS implementation
|
||||||
AC_MSG_CHECKING([for gethostbyname for eCos])
|
AC_MSG_CHECKING([for gethostbyname for eCos])
|
||||||
AC_TRY_LINK([
|
AC_LINK_IFELSE([
|
||||||
|
AC_LANG_PROGRAM([[
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <netdb.h>],
|
#include <netdb.h>
|
||||||
[gethostbyname("www.dummysite.com");],
|
]],[[
|
||||||
[ dnl worked!
|
gethostbyname("www.dummysite.com");
|
||||||
AC_MSG_RESULT([yes])
|
]])
|
||||||
HAVE_GETHOSTBYNAME="1"],
|
],[
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT([yes])
|
||||||
)
|
HAVE_GETHOSTBYNAME="1"
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT([no])
|
||||||
|
])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test "$HAVE_GETHOSTBYNAME" != "1"
|
if test "$HAVE_GETHOSTBYNAME" != "1"
|
||||||
@@ -242,9 +332,7 @@ then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
if test "$HAVE_GETHOSTBYNAME" = "1"; then
|
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()])
|
AC_MSG_ERROR([couldn't find libraries for gethostbyname()])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -257,10 +345,17 @@ if test "$ac_cv_lib_resolve_strcasecmp" = "$ac_cv_func_strcasecmp"; then
|
|||||||
,
|
,
|
||||||
-lnsl)
|
-lnsl)
|
||||||
fi
|
fi
|
||||||
|
ac_cv_func_strcasecmp="no"
|
||||||
|
|
||||||
dnl socket lib?
|
dnl socket lib?
|
||||||
AC_CHECK_FUNC(connect, , [ AC_CHECK_LIB(socket, connect) ])
|
AC_CHECK_FUNC(connect, , [ AC_CHECK_LIB(socket, connect) ])
|
||||||
|
|
||||||
|
dnl **********************************************************************
|
||||||
|
dnl In case that function clock_gettime with monotonic timer is available,
|
||||||
|
dnl check for additional required libraries.
|
||||||
|
dnl **********************************************************************
|
||||||
|
CURL_CHECK_LIBS_CLOCK_GETTIME_MONOTONIC
|
||||||
|
|
||||||
AC_MSG_CHECKING([whether to use libgcc])
|
AC_MSG_CHECKING([whether to use libgcc])
|
||||||
AC_ARG_ENABLE(libgcc,
|
AC_ARG_ENABLE(libgcc,
|
||||||
AC_HELP_STRING([--enable-libgcc],[use libgcc when linking]),
|
AC_HELP_STRING([--enable-libgcc],[use libgcc when linking]),
|
||||||
@@ -326,23 +421,6 @@ if test "x$RECENTAIX" = "xyes"; then
|
|||||||
|
|
||||||
AC_DEFINE(_THREAD_SAFE, 1, [define this if you need it to compile thread-safe code])
|
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
|
fi
|
||||||
|
|
||||||
|
|
||||||
@@ -353,19 +431,8 @@ dnl **********************************************************************
|
|||||||
dnl Checks for header files.
|
dnl Checks for header files.
|
||||||
AC_HEADER_STDC
|
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
|
CURL_CHECK_HEADER_MALLOC
|
||||||
|
CURL_CHECK_HEADER_MEMORY
|
||||||
|
|
||||||
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(
|
||||||
@@ -375,12 +442,16 @@ AC_CHECK_HEADERS(
|
|||||||
sys/socket.h \
|
sys/socket.h \
|
||||||
sys/ioctl.h \
|
sys/ioctl.h \
|
||||||
sys/param.h \
|
sys/param.h \
|
||||||
|
sys/uio.h \
|
||||||
netdb.h \
|
netdb.h \
|
||||||
netinet/in.h \
|
netinet/in.h \
|
||||||
netinet/tcp.h \
|
netinet/tcp.h \
|
||||||
net/if.h \
|
net/if.h \
|
||||||
errno.h \
|
errno.h \
|
||||||
|
strings.h \
|
||||||
stdbool.h \
|
stdbool.h \
|
||||||
|
time.h \
|
||||||
|
limits.h \
|
||||||
arpa/nameser.h \
|
arpa/nameser.h \
|
||||||
arpa/nameser_compat.h \
|
arpa/nameser_compat.h \
|
||||||
arpa/inet.h,
|
arpa/inet.h,
|
||||||
@@ -420,11 +491,14 @@ AC_HEADER_TIME
|
|||||||
CURL_CHECK_STRUCT_TIMEVAL
|
CURL_CHECK_STRUCT_TIMEVAL
|
||||||
|
|
||||||
AC_CHECK_SIZEOF(size_t)
|
AC_CHECK_SIZEOF(size_t)
|
||||||
|
AC_CHECK_SIZEOF(int)
|
||||||
AC_CHECK_SIZEOF(long)
|
AC_CHECK_SIZEOF(long)
|
||||||
|
CARES_CONFIGURE_LONG
|
||||||
AC_CHECK_SIZEOF(time_t)
|
AC_CHECK_SIZEOF(time_t)
|
||||||
|
|
||||||
AC_CHECK_TYPE(long long,
|
AC_CHECK_TYPE(long long,
|
||||||
[AC_DEFINE(HAVE_LONGLONG, 1, [if your compiler supports long long])]
|
[AC_DEFINE(HAVE_LONGLONG, 1,
|
||||||
|
[Define to 1 if the compiler supports the 'long long' data type.])]
|
||||||
longlong="yes"
|
longlong="yes"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -455,8 +529,7 @@ AC_CHECK_TYPE([bool],[
|
|||||||
#endif
|
#endif
|
||||||
])
|
])
|
||||||
|
|
||||||
# Check for socklen_t or equivalent
|
CARES_CONFIGURE_ARES_SOCKLEN_T
|
||||||
CURL_CHECK_TYPE_SOCKLEN_T
|
|
||||||
|
|
||||||
TYPE_IN_ADDR_T
|
TYPE_IN_ADDR_T
|
||||||
|
|
||||||
@@ -467,11 +540,33 @@ TYPE_SIG_ATOMIC_T
|
|||||||
AC_TYPE_SIGNAL
|
AC_TYPE_SIGNAL
|
||||||
|
|
||||||
CURL_CHECK_FUNC_RECV
|
CURL_CHECK_FUNC_RECV
|
||||||
|
CURL_CHECK_FUNC_RECVFROM
|
||||||
CURL_CHECK_FUNC_SEND
|
CURL_CHECK_FUNC_SEND
|
||||||
|
|
||||||
CURL_CHECK_MSG_NOSIGNAL
|
CURL_CHECK_MSG_NOSIGNAL
|
||||||
|
|
||||||
|
CARES_CHECK_FUNC_FCNTL
|
||||||
|
CARES_CHECK_FUNC_FREEADDRINFO
|
||||||
|
CARES_CHECK_FUNC_GETADDRINFO
|
||||||
|
CARES_CHECK_FUNC_GETHOSTBYADDR
|
||||||
|
CARES_CHECK_FUNC_GETHOSTBYNAME
|
||||||
|
CARES_CHECK_FUNC_GETHOSTNAME
|
||||||
|
CARES_CHECK_FUNC_GETSERVBYPORT_R
|
||||||
|
CARES_CHECK_FUNC_INET_NTOP
|
||||||
|
CARES_CHECK_FUNC_INET_PTON
|
||||||
|
CARES_CHECK_FUNC_IOCTL
|
||||||
|
CARES_CHECK_FUNC_IOCTLSOCKET
|
||||||
|
CARES_CHECK_FUNC_IOCTLSOCKET_CAMEL
|
||||||
|
CARES_CHECK_FUNC_SETSOCKOPT
|
||||||
|
CARES_CHECK_FUNC_STRCASECMP
|
||||||
|
CARES_CHECK_FUNC_STRCMPI
|
||||||
|
CARES_CHECK_FUNC_STRDUP
|
||||||
|
CARES_CHECK_FUNC_STRICMP
|
||||||
|
CARES_CHECK_FUNC_STRNCASECMP
|
||||||
|
CARES_CHECK_FUNC_STRNCMPI
|
||||||
|
CARES_CHECK_FUNC_STRNICMP
|
||||||
|
CARES_CHECK_FUNC_WRITEV
|
||||||
|
|
||||||
|
|
||||||
dnl check for AF_INET6
|
dnl check for AF_INET6
|
||||||
CARES_CHECK_CONSTANT(
|
CARES_CHECK_CONSTANT(
|
||||||
[
|
[
|
||||||
@@ -638,54 +733,29 @@ AC_CHECK_MEMBER(struct addrinfo.ai_flags,
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
AC_CHECK_FUNCS( bitncmp \
|
AC_CHECK_FUNCS([bitncmp \
|
||||||
gettimeofday \
|
gettimeofday \
|
||||||
if_indextoname,
|
if_indextoname
|
||||||
dnl if found
|
],[
|
||||||
[],
|
],[
|
||||||
dnl if not found, $ac_func is the name we check for
|
func="$ac_func"
|
||||||
func="$ac_func"
|
AC_MSG_CHECKING([deeper for $func])
|
||||||
AC_MSG_CHECKING([deeper for $func])
|
AC_LINK_IFELSE([
|
||||||
AC_TRY_LINK( [],
|
AC_LANG_PROGRAM([[
|
||||||
[ $func ();],
|
]],[[
|
||||||
AC_MSG_RESULT(yes!)
|
$func ();
|
||||||
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([yes])
|
||||||
AC_MSG_RESULT(but still no)
|
eval "ac_cv_func_$func=yes"
|
||||||
)
|
AC_DEFINE_UNQUOTED(AS_TR_CPP([HAVE_$func]), [1],
|
||||||
)
|
[Define to 1 if you have the $func function.])
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT([but still no])
|
||||||
|
])
|
||||||
|
])
|
||||||
|
|
||||||
|
|
||||||
dnl check for inet_pton
|
|
||||||
AC_CHECK_FUNCS(inet_pton)
|
|
||||||
dnl Some systems have it, but not IPv6
|
|
||||||
if test "$ac_cv_func_inet_pton" = "yes" ; then
|
|
||||||
AC_MSG_CHECKING(if inet_pton supports IPv6)
|
|
||||||
AC_TRY_RUN(
|
|
||||||
[
|
|
||||||
#ifdef HAVE_SYS_TYPES_H
|
|
||||||
#include <sys/types.h>
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_SYS_SOCKET_H
|
|
||||||
#include <sys/socket.h>
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_NETINET_IN_H
|
|
||||||
#include <netinet/in.h>
|
|
||||||
#endif
|
|
||||||
int main()
|
|
||||||
{
|
|
||||||
struct in6_addr addr6;
|
|
||||||
if (inet_pton(AF_INET6, "::1", &addr6) < 1)
|
|
||||||
exit(1);
|
|
||||||
else
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
], [
|
|
||||||
AC_MSG_RESULT(yes)
|
|
||||||
AC_DEFINE_UNQUOTED(HAVE_INET_PTON_IPV6,1,[Define to 1 if inet_pton supports IPv6.])
|
|
||||||
], AC_MSG_RESULT(no),AC_MSG_RESULT(no))
|
|
||||||
fi
|
|
||||||
dnl Check for inet_net_pton
|
dnl Check for inet_net_pton
|
||||||
AC_CHECK_FUNCS(inet_net_pton)
|
AC_CHECK_FUNCS(inet_net_pton)
|
||||||
dnl Again, some systems have it, but not IPv6
|
dnl Again, some systems have it, but not IPv6
|
||||||
@@ -717,39 +787,6 @@ int main()
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
dnl Check for inet_ntop
|
|
||||||
AC_CHECK_FUNCS(inet_ntop)
|
|
||||||
dnl Again, some systems have it, but not IPv6
|
|
||||||
if test "$ac_cv_func_inet_ntop" = "yes" ; then
|
|
||||||
AC_MSG_CHECKING(if inet_ntop supports IPv6)
|
|
||||||
AC_TRY_RUN(
|
|
||||||
[
|
|
||||||
#ifdef HAVE_SYS_TYPES_H
|
|
||||||
#include <sys/types.h>
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_SYS_SOCKET_H
|
|
||||||
#include <sys/socket.h>
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_NETINET_IN_H
|
|
||||||
#include <netinet/in.h>
|
|
||||||
#endif
|
|
||||||
#include <errno.h>
|
|
||||||
int main()
|
|
||||||
{
|
|
||||||
struct in6_addr addr6;
|
|
||||||
char buf[128];
|
|
||||||
if (inet_ntop(AF_INET6, &addr6, buf, 128) == 0 && errno == EAFNOSUPPORT)
|
|
||||||
exit(1);
|
|
||||||
else
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
], [
|
|
||||||
AC_MSG_RESULT(yes)
|
|
||||||
AC_DEFINE_UNQUOTED(HAVE_INET_NTOP_IPV6,1,
|
|
||||||
[Define to 1 if inet_ntop supports IPv6.])
|
|
||||||
], AC_MSG_RESULT(no),AC_MSG_RESULT(no))
|
|
||||||
fi
|
|
||||||
|
|
||||||
AC_CHECK_SIZEOF(struct in6_addr, ,
|
AC_CHECK_SIZEOF(struct in6_addr, ,
|
||||||
[
|
[
|
||||||
#undef inline
|
#undef inline
|
||||||
@@ -812,12 +849,6 @@ dnl and get the types of five of its arguments.
|
|||||||
CURL_CHECK_FUNC_GETNAMEINFO
|
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
|
|
||||||
|
|
||||||
CURL_CHECK_NONBLOCKING_SOCKET
|
|
||||||
|
|
||||||
AC_C_BIGENDIAN(
|
AC_C_BIGENDIAN(
|
||||||
[AC_DEFINE(ARES_BIG_ENDIAN, 1,
|
[AC_DEFINE(ARES_BIG_ENDIAN, 1,
|
||||||
[define this if ares is built for a big endian system])],
|
[define this if ares is built for a big endian system])],
|
||||||
@@ -848,4 +879,21 @@ if test -n "$RANDOM_FILE" && test X"$RANDOM_FILE" != Xno ; then
|
|||||||
[a suitable file/device to read random data from])
|
[a suitable file/device to read random data from])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
AC_OUTPUT(Makefile libcares.pc)
|
CARES_CHECK_OPTION_NONBLOCKING
|
||||||
|
CARES_CHECK_NONBLOCKING_SOCKET
|
||||||
|
|
||||||
|
CARES_PRIVATE_LIBS="$LIBS"
|
||||||
|
AC_SUBST(CARES_PRIVATE_LIBS)
|
||||||
|
|
||||||
|
dnl squeeze whitespace out of some variables
|
||||||
|
|
||||||
|
squeeze CFLAGS
|
||||||
|
squeeze CPPFLAGS
|
||||||
|
squeeze DEFS
|
||||||
|
squeeze LDFLAGS
|
||||||
|
squeeze LIBS
|
||||||
|
|
||||||
|
squeeze CARES_PRIVATE_LIBS
|
||||||
|
|
||||||
|
AC_CONFIG_FILES([Makefile libcares.pc])
|
||||||
|
AC_OUTPUT
|
||||||
|
|||||||
36
ares/get_ver.awk
Normal file
36
ares/get_ver.awk
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
# ***************************************************************************
|
||||||
|
# * Project: c-ares
|
||||||
|
# *
|
||||||
|
# * $Id$
|
||||||
|
# ***************************************************************************
|
||||||
|
# awk script which fetches c-ares version number and string from input
|
||||||
|
# file and writes them to STDOUT. Here you can get an awk version for Win32:
|
||||||
|
# http://www.gknw.net/development/prgtools/awk-20070501.zip
|
||||||
|
#
|
||||||
|
BEGIN {
|
||||||
|
if (match (ARGV[1], /ares_version.h/)) {
|
||||||
|
while ((getline < ARGV[1]) > 0) {
|
||||||
|
if (match ($0, /^#define ARES_COPYRIGHT "[^"]+"$/)) {
|
||||||
|
libcares_copyright_str = substr($0, 25, length($0)-25);
|
||||||
|
}
|
||||||
|
else if (match ($0, /^#define ARES_VERSION_STR "[^"]+"$/)) {
|
||||||
|
libcares_ver_str = substr($3, 2, length($3)-2);
|
||||||
|
}
|
||||||
|
else if (match ($0, /^#define ARES_VERSION_MAJOR [0-9]+$/)) {
|
||||||
|
libcares_ver_major = substr($3, 1, length($3));
|
||||||
|
}
|
||||||
|
else if (match ($0, /^#define ARES_VERSION_MINOR [0-9]+$/)) {
|
||||||
|
libcares_ver_minor = substr($3, 1, length($3));
|
||||||
|
}
|
||||||
|
else if (match ($0, /^#define ARES_VERSION_PATCH [0-9]+$/)) {
|
||||||
|
libcares_ver_patch = substr($3, 1, length($3));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
libcares_ver = libcares_ver_major "," libcares_ver_minor "," libcares_ver_patch;
|
||||||
|
print "LIBCARES_VERSION = " libcares_ver "";
|
||||||
|
print "LIBCARES_VERSION_STR = " libcares_ver_str "";
|
||||||
|
print "LIBCARES_COPYRIGHT_STR = " libcares_copyright_str "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -19,23 +19,22 @@
|
|||||||
|
|
||||||
#include "setup.h"
|
#include "setup.h"
|
||||||
|
|
||||||
#if defined(WIN32) && !defined(WATT32)
|
|
||||||
#include "nameser.h"
|
|
||||||
#else
|
|
||||||
|
|
||||||
#ifdef HAVE_SYS_SOCKET_H
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
#include <sys/socket.h>
|
# include <sys/socket.h>
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_NETINET_IN_H
|
#ifdef HAVE_NETINET_IN_H
|
||||||
#include <netinet/in.h>
|
# include <netinet/in.h>
|
||||||
#endif
|
|
||||||
#ifdef HAVE_ARPA_NAMESER_H
|
|
||||||
#include <arpa/nameser.h>
|
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_ARPA_INET_H
|
#ifdef HAVE_ARPA_INET_H
|
||||||
#include <arpa/inet.h>
|
# include <arpa/inet.h>
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef HAVE_ARPA_NAMESER_H
|
||||||
|
# include <arpa/nameser.h>
|
||||||
|
#else
|
||||||
|
# include "nameser.h"
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
|
||||||
|
# include <arpa/nameser_compat.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
@@ -47,8 +46,7 @@
|
|||||||
#include "ares_ipv6.h"
|
#include "ares_ipv6.h"
|
||||||
#include "inet_net_pton.h"
|
#include "inet_net_pton.h"
|
||||||
|
|
||||||
#if !defined(HAVE_INET_NET_PTON) || !defined(HAVE_INET_NET_PTON_IPV6) || \
|
#if !defined(HAVE_INET_NET_PTON) || !defined(HAVE_INET_NET_PTON_IPV6)
|
||||||
!defined(HAVE_INET_PTON) || !defined(HAVE_INET_PTON_IPV6)
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* static int
|
* static int
|
||||||
@@ -425,7 +423,7 @@ ares_inet_net_pton(int af, const char *src, void *dst, size_t size)
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if !defined(HAVE_INET_PTON) || !defined(HAVE_INET_PTON_IPV6)
|
#ifndef HAVE_INET_PTON
|
||||||
int ares_inet_pton(int af, const char *src, void *dst)
|
int ares_inet_pton(int af, const char *src, void *dst)
|
||||||
{
|
{
|
||||||
int size, result;
|
int size, result;
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
* without express or implied warranty.
|
* without express or implied warranty.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#if defined(HAVE_INET_PTON) && defined(HAVE_INET_PTON_IPV6)
|
#ifdef HAVE_INET_PTON
|
||||||
#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
|
||||||
int ares_inet_pton(int af, const char *src, void *dst);
|
int ares_inet_pton(int af, const char *src, void *dst);
|
||||||
|
|||||||
@@ -18,21 +18,22 @@
|
|||||||
|
|
||||||
#include "setup.h"
|
#include "setup.h"
|
||||||
|
|
||||||
#if defined(WIN32) && !defined(WATT32)
|
|
||||||
#include "nameser.h"
|
|
||||||
#else
|
|
||||||
#ifdef HAVE_SYS_SOCKET_H
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
#include <sys/socket.h>
|
# include <sys/socket.h>
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_NETINET_IN_H
|
#ifdef HAVE_NETINET_IN_H
|
||||||
#include <netinet/in.h>
|
# include <netinet/in.h>
|
||||||
#endif
|
|
||||||
#ifdef HAVE_ARPA_NAMESER_H
|
|
||||||
#include <arpa/nameser.h>
|
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_ARPA_INET_H
|
#ifdef HAVE_ARPA_INET_H
|
||||||
#include <arpa/inet.h>
|
# include <arpa/inet.h>
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef HAVE_ARPA_NAMESER_H
|
||||||
|
# include <arpa/nameser.h>
|
||||||
|
#else
|
||||||
|
# include "nameser.h"
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
|
||||||
|
# include <arpa/nameser_compat.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
@@ -45,7 +46,7 @@
|
|||||||
#include "inet_ntop.h"
|
#include "inet_ntop.h"
|
||||||
|
|
||||||
|
|
||||||
#if !defined(HAVE_INET_NTOP) || !defined(HAVE_INET_NTOP_IPV6)
|
#ifndef HAVE_INET_NTOP
|
||||||
|
|
||||||
#ifdef SPRINTF_CHAR
|
#ifdef SPRINTF_CHAR
|
||||||
# define SPRINTF(x) strlen(sprintf/**/x)
|
# define SPRINTF(x) strlen(sprintf/**/x)
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
* without express or implied warranty.
|
* without express or implied warranty.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#if defined(HAVE_INET_NTOP) && defined(HAVE_INET_NTOP_IPV6)
|
#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);
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
# / __|____ / _` | '__/ _ \/ __|
|
# / __|____ / _` | '__/ _ \/ __|
|
||||||
# | (_|_____| (_| | | | __/\__ \
|
# | (_|_____| (_| | | | __/\__ \
|
||||||
# \___| \__,_|_| \___||___/
|
# \___| \__,_|_| \___||___/
|
||||||
# $id: $
|
# $Id$
|
||||||
#
|
#
|
||||||
prefix=@prefix@
|
prefix=@prefix@
|
||||||
exec_prefix=@exec_prefix@
|
exec_prefix=@exec_prefix@
|
||||||
@@ -18,3 +18,4 @@ Requires:
|
|||||||
Requires.private:
|
Requires.private:
|
||||||
Cflags: -I${includedir}
|
Cflags: -I${includedir}
|
||||||
Libs: -L${libdir} -lcares
|
Libs: -L${libdir} -lcares
|
||||||
|
Libs.private: @CARES_PRIVATE_LIBS@
|
||||||
|
|||||||
5
ares/m4/.cvsignore
Normal file
5
ares/m4/.cvsignore
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
libtool.m4
|
||||||
|
ltoptions.m4
|
||||||
|
ltsugar.m4
|
||||||
|
ltversion.m4
|
||||||
|
lt~obsolete.m4
|
||||||
1290
ares/m4/cares-compilers.m4
Normal file
1290
ares/m4/cares-compilers.m4
Normal file
File diff suppressed because it is too large
Load Diff
214
ares/m4/cares-confopts.m4
Normal file
214
ares/m4/cares-confopts.m4
Normal file
@@ -0,0 +1,214 @@
|
|||||||
|
#***************************************************************************
|
||||||
|
# $Id$
|
||||||
|
#
|
||||||
|
# Copyright (C) 2008 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.
|
||||||
|
#
|
||||||
|
#***************************************************************************
|
||||||
|
|
||||||
|
# File version for 'aclocal' use. Keep it a single number.
|
||||||
|
# serial 3
|
||||||
|
|
||||||
|
|
||||||
|
dnl CARES_CHECK_OPTION_DEBUG
|
||||||
|
dnl -------------------------------------------------
|
||||||
|
dnl Verify if configure has been invoked with option
|
||||||
|
dnl --enable-debug or --disable-debug, and set shell
|
||||||
|
dnl variable want_debug value as appropriate.
|
||||||
|
|
||||||
|
AC_DEFUN([CARES_CHECK_OPTION_DEBUG], [
|
||||||
|
AC_BEFORE([$0],[CARES_CHECK_OPTION_WARNINGS])dnl
|
||||||
|
AC_BEFORE([$0],[CARES_CHECK_PROG_CC])dnl
|
||||||
|
AC_MSG_CHECKING([whether to enable debug build options])
|
||||||
|
OPT_DEBUG_BUILD="default"
|
||||||
|
AC_ARG_ENABLE(debug,
|
||||||
|
AC_HELP_STRING([--enable-debug],[Enable debug build options])
|
||||||
|
AC_HELP_STRING([--disable-debug],[Disable debug build options]),
|
||||||
|
OPT_DEBUG_BUILD=$enableval)
|
||||||
|
case "$OPT_DEBUG_BUILD" in
|
||||||
|
no)
|
||||||
|
dnl --disable-debug option used
|
||||||
|
want_debug="no"
|
||||||
|
;;
|
||||||
|
default)
|
||||||
|
dnl configure option not specified
|
||||||
|
want_debug="no"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
dnl --enable-debug option used
|
||||||
|
want_debug="yes"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
AC_MSG_RESULT([$want_debug])
|
||||||
|
])
|
||||||
|
|
||||||
|
|
||||||
|
dnl CARES_CHECK_OPTION_NONBLOCKING
|
||||||
|
dnl -------------------------------------------------
|
||||||
|
dnl Verify if configure has been invoked with option
|
||||||
|
dnl --enable-nonblocking or --disable-nonblocking, and
|
||||||
|
dnl set shell variable want_nonblocking as appropriate.
|
||||||
|
|
||||||
|
AC_DEFUN([CARES_CHECK_OPTION_NONBLOCKING], [
|
||||||
|
AC_BEFORE([$0],[CARES_CHECK_NONBLOCKING_SOCKET])dnl
|
||||||
|
AC_MSG_CHECKING([whether to enable non-blocking communications])
|
||||||
|
OPT_NONBLOCKING="default"
|
||||||
|
AC_ARG_ENABLE(nonblocking,
|
||||||
|
AC_HELP_STRING([--enable-nonblocking],[Enable non-blocking communications])
|
||||||
|
AC_HELP_STRING([--disable-nonblocking],[Disable non-blocking communications]),
|
||||||
|
OPT_NONBLOCKING=$enableval)
|
||||||
|
case "$OPT_NONBLOCKING" in
|
||||||
|
no)
|
||||||
|
dnl --disable-nonblocking option used
|
||||||
|
want_nonblocking="no"
|
||||||
|
;;
|
||||||
|
default)
|
||||||
|
dnl configure option not specified
|
||||||
|
want_nonblocking="yes"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
dnl --enable-nonblocking option used
|
||||||
|
want_nonblocking="yes"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
AC_MSG_RESULT([$want_nonblocking])
|
||||||
|
])
|
||||||
|
|
||||||
|
|
||||||
|
dnl CARES_CHECK_OPTION_OPTIMIZE
|
||||||
|
dnl -------------------------------------------------
|
||||||
|
dnl Verify if configure has been invoked with option
|
||||||
|
dnl --enable-optimize or --disable-optimize, and set
|
||||||
|
dnl shell variable want_optimize value as appropriate.
|
||||||
|
|
||||||
|
AC_DEFUN([CARES_CHECK_OPTION_OPTIMIZE], [
|
||||||
|
AC_REQUIRE([CARES_CHECK_OPTION_DEBUG])dnl
|
||||||
|
AC_BEFORE([$0],[CARES_CHECK_PROG_CC])dnl
|
||||||
|
AC_MSG_CHECKING([whether to enable compiler optimizer])
|
||||||
|
OPT_COMPILER_OPTIMIZE="default"
|
||||||
|
AC_ARG_ENABLE(optimize,
|
||||||
|
AC_HELP_STRING([--enable-optimize(=OPT)],[Enable compiler optimizations (default=-O2)])
|
||||||
|
AC_HELP_STRING([--disable-optimize],[Disable compiler optimizations]),
|
||||||
|
OPT_COMPILER_OPTIMIZE=$enableval)
|
||||||
|
case "$OPT_COMPILER_OPTIMIZE" in
|
||||||
|
no)
|
||||||
|
dnl --disable-optimize option used. We will handle this as
|
||||||
|
dnl a request to disable compiler optimizations if possible.
|
||||||
|
dnl If the compiler is known CFLAGS and CPPFLAGS will be
|
||||||
|
dnl overridden, otherwise this can not be honored.
|
||||||
|
want_optimize="no"
|
||||||
|
AC_MSG_RESULT([no])
|
||||||
|
;;
|
||||||
|
default)
|
||||||
|
dnl configure's optimize option not specified. Initially we will
|
||||||
|
dnl handle this as a a request contrary to configure's setting
|
||||||
|
dnl for --enable-debug. IOW, initially, for debug-enabled builds
|
||||||
|
dnl this will be handled as a request to disable optimizations if
|
||||||
|
dnl possible, and for debug-disabled builds this will be handled
|
||||||
|
dnl initially as a request to enable optimizations if possible.
|
||||||
|
dnl Finally, if the compiler is known and CFLAGS and CPPFLAGS do
|
||||||
|
dnl not have any optimizer flag the request will be honored, in
|
||||||
|
dnl any other case the request can not be honored.
|
||||||
|
dnl IOW, existing optimizer flags defined in CFLAGS or CPPFLAGS
|
||||||
|
dnl will always take precedence over any initial assumption.
|
||||||
|
if test "$want_debug" = "yes"; then
|
||||||
|
want_optimize="assume_no"
|
||||||
|
AC_MSG_RESULT([not specified (assuming no)])
|
||||||
|
else
|
||||||
|
want_optimize="assume_yes"
|
||||||
|
AC_MSG_RESULT([not specified (assuming yes)])
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
dnl --enable-optimize option used. We will handle this as
|
||||||
|
dnl a request to enable compiler optimizations if possible.
|
||||||
|
dnl If the compiler is known CFLAGS and CPPFLAGS will be
|
||||||
|
dnl overridden, otherwise this can not be honored.
|
||||||
|
want_optimize="yes"
|
||||||
|
AC_MSG_RESULT([yes])
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
])
|
||||||
|
|
||||||
|
|
||||||
|
dnl CARES_CHECK_OPTION_WARNINGS
|
||||||
|
dnl -------------------------------------------------
|
||||||
|
dnl Verify if configure has been invoked with option
|
||||||
|
dnl --enable-warnings or --disable-warnings, and set
|
||||||
|
dnl shell variable want_warnings as appropriate.
|
||||||
|
|
||||||
|
AC_DEFUN([CARES_CHECK_OPTION_WARNINGS], [
|
||||||
|
AC_REQUIRE([CARES_CHECK_OPTION_DEBUG])dnl
|
||||||
|
AC_BEFORE([$0],[CARES_CHECK_PROG_CC])dnl
|
||||||
|
AC_MSG_CHECKING([whether to enable strict compiler warnings])
|
||||||
|
OPT_COMPILER_WARNINGS="default"
|
||||||
|
AC_ARG_ENABLE(warnings,
|
||||||
|
AC_HELP_STRING([--enable-warnings],[Enable strict compiler warnings])
|
||||||
|
AC_HELP_STRING([--disable-warnings],[Disable strict compiler warnings]),
|
||||||
|
OPT_COMPILER_WARNINGS=$enableval)
|
||||||
|
case "$OPT_COMPILER_WARNINGS" in
|
||||||
|
no)
|
||||||
|
dnl --disable-warnings option used
|
||||||
|
want_warnings="no"
|
||||||
|
;;
|
||||||
|
default)
|
||||||
|
dnl configure option not specified, so
|
||||||
|
dnl use same setting as --enable-debug
|
||||||
|
want_warnings="$want_debug"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
dnl --enable-warnings option used
|
||||||
|
want_warnings="yes"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
AC_MSG_RESULT([$want_warnings])
|
||||||
|
])
|
||||||
|
|
||||||
|
|
||||||
|
dnl CARES_CHECK_NONBLOCKING_SOCKET
|
||||||
|
dnl -------------------------------------------------
|
||||||
|
dnl Check for how to set a socket into non-blocking state.
|
||||||
|
|
||||||
|
AC_DEFUN([CARES_CHECK_NONBLOCKING_SOCKET], [
|
||||||
|
AC_REQUIRE([CARES_CHECK_OPTION_NONBLOCKING])dnl
|
||||||
|
AC_REQUIRE([CARES_CHECK_FUNC_FCNTL])dnl
|
||||||
|
AC_REQUIRE([CARES_CHECK_FUNC_IOCTL])dnl
|
||||||
|
AC_REQUIRE([CARES_CHECK_FUNC_IOCTLSOCKET])dnl
|
||||||
|
AC_REQUIRE([CARES_CHECK_FUNC_IOCTLSOCKET_CAMEL])dnl
|
||||||
|
AC_REQUIRE([CARES_CHECK_FUNC_SETSOCKOPT])dnl
|
||||||
|
#
|
||||||
|
tst_method="unknown"
|
||||||
|
if test "$want_nonblocking" = "yes"; then
|
||||||
|
AC_MSG_CHECKING([how to set a socket into non-blocking mode])
|
||||||
|
if test "x$ac_cv_func_fcntl_o_nonblock" = "xyes"; then
|
||||||
|
tst_method="fcntl O_NONBLOCK"
|
||||||
|
elif test "x$ac_cv_func_ioctl_fionbio" = "xyes"; then
|
||||||
|
tst_method="ioctl FIONBIO"
|
||||||
|
elif test "x$ac_cv_func_ioctlsocket_fionbio" = "xyes"; then
|
||||||
|
tst_method="ioctlsocket FIONBIO"
|
||||||
|
elif test "x$ac_cv_func_ioctlsocket_camel_fionbio" = "xyes"; then
|
||||||
|
tst_method="IoctlSocket FIONBIO"
|
||||||
|
elif test "x$ac_cv_func_setsockopt_so_nonblock" = "xyes"; then
|
||||||
|
tst_method="setsockopt SO_NONBLOCK"
|
||||||
|
fi
|
||||||
|
AC_MSG_RESULT([$tst_method])
|
||||||
|
if test "$tst_method" = "unknown"; then
|
||||||
|
AC_MSG_WARN([cannot determine non-blocking socket method.])
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if test "$tst_method" = "unknown"; then
|
||||||
|
AC_DEFINE_UNQUOTED(USE_BLOCKING_SOCKETS, 1,
|
||||||
|
[Define to disable non-blocking sockets.])
|
||||||
|
AC_MSG_WARN([non-blocking sockets disabled.])
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
|
||||||
2754
ares/m4/cares-functions.m4
Normal file
2754
ares/m4/cares-functions.m4
Normal file
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user