Compare commits
2125 Commits
curl-7_12_
...
curl-7_15_
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c7e9e60b05 | ||
|
|
47f2e1da73 | ||
|
|
5975229919 | ||
|
|
38295e8a75 | ||
|
|
f9612b5eaf | ||
|
|
5cf2ef2ef7 | ||
|
|
938b5c886e | ||
|
|
0618e68200 | ||
|
|
bac52f3969 | ||
|
|
d494d62953 | ||
|
|
7206181385 | ||
|
|
3f22901a43 | ||
|
|
f70f11fc70 | ||
|
|
cffebd7fd6 | ||
|
|
b8c8e7349f | ||
|
|
8bba99ae56 | ||
|
|
b5c5f57613 | ||
|
|
33df856925 | ||
|
|
ce09cedd2e | ||
|
|
7d68101f83 | ||
|
|
aa50a00898 | ||
|
|
26f112ba55 | ||
|
|
159b9162f8 | ||
|
|
d7999f9fcb | ||
|
|
f13eba4c78 | ||
|
|
050e82e088 | ||
|
|
88377e5b61 | ||
|
|
241af465fd | ||
|
|
59510a554d | ||
|
|
b10aa95d28 | ||
|
|
097bee681a | ||
|
|
8548c2fc61 | ||
|
|
dc4fbd2e97 | ||
|
|
60b029869f | ||
|
|
f592ea6c30 | ||
|
|
a39ac3d94a | ||
|
|
4b23ddc002 | ||
|
|
4486d336a6 | ||
|
|
45e4b811b0 | ||
|
|
0e6a1a4420 | ||
|
|
b8bf708db9 | ||
|
|
6fdbb01194 | ||
|
|
d29147565c | ||
|
|
75c9430559 | ||
|
|
9ac99a80c3 | ||
|
|
a15d107dde | ||
|
|
09897b8146 | ||
|
|
29e446e508 | ||
|
|
10beb36b1c | ||
|
|
a65a888866 | ||
|
|
98180b5cc7 | ||
|
|
92009181af | ||
|
|
831bdb9f63 | ||
|
|
50a4dbbb5e | ||
|
|
ad6511c313 | ||
|
|
7a37fa4aef | ||
|
|
dcee24191f | ||
|
|
87bcb6f377 | ||
|
|
b0bc2f00d2 | ||
|
|
3b19c7d0d9 | ||
|
|
12f5c67bf5 | ||
|
|
d7a83d8995 | ||
|
|
7725729d90 | ||
|
|
e96445bd02 | ||
|
|
da2c124675 | ||
|
|
8cb695a963 | ||
|
|
54cbd7e154 | ||
|
|
5994b62930 | ||
|
|
2fbf94b0f3 | ||
|
|
32bc30e210 | ||
|
|
f3bc8e6ce1 | ||
|
|
16f3a32bec | ||
|
|
c44d2498e3 | ||
|
|
2aed209efa | ||
|
|
b55b780d7b | ||
|
|
8d4eb2bc1f | ||
|
|
67bf4f28ff | ||
|
|
803582f8ac | ||
|
|
03603f392a | ||
|
|
fcfd6d9504 | ||
|
|
c31451cf13 | ||
|
|
5deff1a179 | ||
|
|
e236a1c99b | ||
|
|
a2f3094eb0 | ||
|
|
65afc576ea | ||
|
|
8971f656b4 | ||
|
|
394ce9ee39 | ||
|
|
67a83c1b34 | ||
|
|
1e8d094274 | ||
|
|
4c35a40858 | ||
|
|
802b2aaf6a | ||
|
|
0e79a8944b | ||
|
|
bebf70667d | ||
|
|
d9bd5de0b1 | ||
|
|
31c7aa0ba4 | ||
|
|
fc2388189f | ||
|
|
4431338691 | ||
|
|
bda1e9aeab | ||
|
|
4969ca768d | ||
|
|
2acd1c1642 | ||
|
|
e1e753179a | ||
|
|
f4cc8153ae | ||
|
|
e4d8cb4ee0 | ||
|
|
723a78ae3f | ||
|
|
cd9d0d7dec | ||
|
|
665d4f08c8 | ||
|
|
00c7780fcb | ||
|
|
15ab13dc42 | ||
|
|
8a0ca3066e | ||
|
|
ea01755bb4 | ||
|
|
69c2084a18 | ||
|
|
99c0a1a7d0 | ||
|
|
5acf997e69 | ||
|
|
dd87e4ed39 | ||
|
|
2f8c26ba8a | ||
|
|
81b9793807 | ||
|
|
7278f17e8f | ||
|
|
66c7427df0 | ||
|
|
c1a06d858d | ||
|
|
53b5fdbe9e | ||
|
|
687cf0235e | ||
|
|
b6e9229cf0 | ||
|
|
089e4848d8 | ||
|
|
58d2e7c6d1 | ||
|
|
fa18d6fb76 | ||
|
|
4dcb930247 | ||
|
|
74a299fd08 | ||
|
|
532a560d87 | ||
|
|
0040a60559 | ||
|
|
cc34342790 | ||
|
|
bdbf6e9d19 | ||
|
|
db86f765eb | ||
|
|
b11dec5dd5 | ||
|
|
86becc7591 | ||
|
|
8922bc038b | ||
|
|
009f5790a4 | ||
|
|
0536b6c459 | ||
|
|
0e3ebd9841 | ||
|
|
598965a606 | ||
|
|
d7a2938849 | ||
|
|
a683658675 | ||
|
|
25169f68b7 | ||
|
|
e5247ae65d | ||
|
|
a718cb05ff | ||
|
|
b466ef2581 | ||
|
|
c7a634641f | ||
|
|
e4388643f1 | ||
|
|
bc4208201c | ||
|
|
a0d69d52a1 | ||
|
|
c23a1be139 | ||
|
|
9799f7afb0 | ||
|
|
6358b24fac | ||
|
|
b58634316f | ||
|
|
e3657644d6 | ||
|
|
7d1e3ebeed | ||
|
|
9e61dfe85e | ||
|
|
7b51aafa86 | ||
|
|
5f487123df | ||
|
|
f1f32477e3 | ||
|
|
df2b1251a0 | ||
|
|
02c7cf6fa5 | ||
|
|
60006ff993 | ||
|
|
f3af5d7b8e | ||
|
|
d551412a32 | ||
|
|
6de67a134e | ||
|
|
8ec31398e0 | ||
|
|
fd0d560b47 | ||
|
|
cc542269a1 | ||
|
|
7b488a3bef | ||
|
|
f448168501 | ||
|
|
80a8fb98db | ||
|
|
898bb397b1 | ||
|
|
74ed5b5ebd | ||
|
|
178afd81a9 | ||
|
|
d6eb1a7b98 | ||
|
|
4ff56b15e9 | ||
|
|
e6b98d3152 | ||
|
|
5fd8dd2dce | ||
|
|
0ad3e046a4 | ||
|
|
d6c5d24af3 | ||
|
|
8a3280a2de | ||
|
|
450a0a647a | ||
|
|
676c0cf123 | ||
|
|
a731319321 | ||
|
|
81b06a09b7 | ||
|
|
23b34744d9 | ||
|
|
bc8590aa12 | ||
|
|
939d368d5f | ||
|
|
336e3b8baf | ||
|
|
47c06fa308 | ||
|
|
b7f447f8d8 | ||
|
|
03af76b631 | ||
|
|
e105d5c28f | ||
|
|
d6ffb4c177 | ||
|
|
6dbfce1031 | ||
|
|
fea5ddf585 | ||
|
|
b9f39c2711 | ||
|
|
5acac0309a | ||
|
|
78febad718 | ||
|
|
a6a5bba0a9 | ||
|
|
51581c034d | ||
|
|
8f25a95b47 | ||
|
|
7f5d092223 | ||
|
|
2e5cccd1b6 | ||
|
|
2645782f89 | ||
|
|
9533092511 | ||
|
|
6005a461bb | ||
|
|
e2df946eee | ||
|
|
d14588120f | ||
|
|
ab31cfa664 | ||
|
|
af1c397969 | ||
|
|
947f9deed5 | ||
|
|
ce95eee903 | ||
|
|
b15f3bb969 | ||
|
|
998e8cba19 | ||
|
|
e3f523ab2a | ||
|
|
36485e56ed | ||
|
|
b4113360f6 | ||
|
|
2d71e22f08 | ||
|
|
2ae67c431c | ||
|
|
4b1a91b64f | ||
|
|
4f69318e12 | ||
|
|
1cc98ab50f | ||
|
|
a6494602fd | ||
|
|
50ec78b488 | ||
|
|
7d044d14f9 | ||
|
|
df03d5a8b2 | ||
|
|
6a0ed81e67 | ||
|
|
c94f3e8188 | ||
|
|
1e5f6cc1dc | ||
|
|
b1fece74e3 | ||
|
|
fdbe0df6e7 | ||
|
|
93d59520e4 | ||
|
|
b68d3a073b | ||
|
|
2100311f41 | ||
|
|
e1269e3156 | ||
|
|
c88d61b044 | ||
|
|
f49df54a36 | ||
|
|
952bbc4410 | ||
|
|
1eb4b85d72 | ||
|
|
59b6cb9e91 | ||
|
|
e06afaeb7a | ||
|
|
8c6f654b26 | ||
|
|
1d8212e53a | ||
|
|
083c5e17e1 | ||
|
|
272231fb09 | ||
|
|
67b4d9b232 | ||
|
|
21709e1557 | ||
|
|
9c312637d1 | ||
|
|
feacad7f68 | ||
|
|
6513303498 | ||
|
|
3e2a52b034 | ||
|
|
176d4e85e9 | ||
|
|
84d30dffb6 | ||
|
|
0fd282b078 | ||
|
|
cdf4afbe50 | ||
|
|
b222b2304e | ||
|
|
fdf9900114 | ||
|
|
5867eb2dd2 | ||
|
|
61f145e3de | ||
|
|
b97e7fc730 | ||
|
|
01cbf08064 | ||
|
|
fec632e948 | ||
|
|
6aab5b57e1 | ||
|
|
d2a27e02ce | ||
|
|
b55506a76d | ||
|
|
afc2aa2b3f | ||
|
|
d055b269ed | ||
|
|
8a246a4a9f | ||
|
|
2f684351bf | ||
|
|
74e5beab9d | ||
|
|
b41765f441 | ||
|
|
05a6013f42 | ||
|
|
cfff544d67 | ||
|
|
599d9642ca | ||
|
|
0264faaa4e | ||
|
|
4022a60ea7 | ||
|
|
39e366fc11 | ||
|
|
096675824f | ||
|
|
80bfa76ac9 | ||
|
|
b2e553a82e | ||
|
|
772b64d9d3 | ||
|
|
92c0de518e | ||
|
|
ff96456513 | ||
|
|
e89adbef51 | ||
|
|
22a6a6cf81 | ||
|
|
fd870e4e8a | ||
|
|
d52ed3fff2 | ||
|
|
bac17ab7d8 | ||
|
|
9ace303528 | ||
|
|
7e81c35cdc | ||
|
|
0f125d9bcf | ||
|
|
d4714517c0 | ||
|
|
280e4bf4c3 | ||
|
|
adf462fe05 | ||
|
|
c2862742ab | ||
|
|
8a712eb5af | ||
|
|
d58790af17 | ||
|
|
9ef7a13403 | ||
|
|
a5da1219bb | ||
|
|
be524fed38 | ||
|
|
042016b85e | ||
|
|
f6da574324 | ||
|
|
b09d5c3135 | ||
|
|
ec65c3fd53 | ||
|
|
7ca2f31c8d | ||
|
|
2275737a5d | ||
|
|
5e3836055f | ||
|
|
37a6a0bb3e | ||
|
|
6bcca3eca9 | ||
|
|
ce40b8d531 | ||
|
|
9f109b94b8 | ||
|
|
89024febde | ||
|
|
b7a673c6e2 | ||
|
|
7f68be770d | ||
|
|
4f173f35db | ||
|
|
ae9fbe573e | ||
|
|
29676f473d | ||
|
|
a5fcb26ab1 | ||
|
|
d68b1a1e8c | ||
|
|
bd8baed138 | ||
|
|
00a7dda273 | ||
|
|
4dba07c384 | ||
|
|
4d39c6b7cc | ||
|
|
7d6f6158c9 | ||
|
|
6863dbbc0c | ||
|
|
28b96efd8b | ||
|
|
0f82af0f49 | ||
|
|
f0d839436f | ||
|
|
f1aa4b4127 | ||
|
|
ccdb43f7f1 | ||
|
|
72900f0f90 | ||
|
|
3ad958ddb1 | ||
|
|
2c77cc90f4 | ||
|
|
db4c33b4fb | ||
|
|
3fb04115fc | ||
|
|
4faaa32aef | ||
|
|
cab59b4c32 | ||
|
|
931eff89f5 | ||
|
|
175335808b | ||
|
|
e00216581e | ||
|
|
23951ec00c | ||
|
|
a8fc5d0f9f | ||
|
|
f5e85bab1c | ||
|
|
9a44fa83dc | ||
|
|
6b1e54da62 | ||
|
|
b91421b107 | ||
|
|
43b3954fa5 | ||
|
|
80f2e3f263 | ||
|
|
9ea423b4c1 | ||
|
|
b259c9c535 | ||
|
|
80f481a5f7 | ||
|
|
115fe1b577 | ||
|
|
06d6ea651e | ||
|
|
966fa848a0 | ||
|
|
6f8fe67ace | ||
|
|
d49edc8e09 | ||
|
|
3b9c20fe31 | ||
|
|
bd72c5eacf | ||
|
|
9d152a77fd | ||
|
|
33dc28b905 | ||
|
|
43ce64dcca | ||
|
|
9e0882ba98 | ||
|
|
c890149c8c | ||
|
|
1a1ab2e2e8 | ||
|
|
715b706caa | ||
|
|
bfa9c42c25 | ||
|
|
9d98f97e1b | ||
|
|
5eb5ce6ff3 | ||
|
|
be9c873a6e | ||
|
|
034d80f6cd | ||
|
|
021e786c71 | ||
|
|
0c6bb8cb66 | ||
|
|
4d7f08a99e | ||
|
|
fdef584681 | ||
|
|
f335bac8a3 | ||
|
|
51369753bb | ||
|
|
82a4c2bce3 | ||
|
|
e73c6e039e | ||
|
|
19bad0844f | ||
|
|
96cec4dfd7 | ||
|
|
943aea6267 | ||
|
|
b433e4a1e7 | ||
|
|
20f1966c0e | ||
|
|
ab1f5c3edd | ||
|
|
b2be6799f2 | ||
|
|
ea2618fc6f | ||
|
|
62fdf8eaed | ||
|
|
d3569a3572 | ||
|
|
89df76e449 | ||
|
|
e5b2f33b4f | ||
|
|
934d312f50 | ||
|
|
68917eb517 | ||
|
|
3beb2f6b5d | ||
|
|
b29017f15b | ||
|
|
db83a0ebbc | ||
|
|
6d9fddb95d | ||
|
|
4284190cc4 | ||
|
|
5e4cbd2d24 | ||
|
|
06c3bec65d | ||
|
|
e8c3bb45ba | ||
|
|
4ec55a964d | ||
|
|
b9420864c0 | ||
|
|
bf6588b6a7 | ||
|
|
e43217e664 | ||
|
|
e19ee2d102 | ||
|
|
b4c53e2cfd | ||
|
|
a2902de67c | ||
|
|
da192f7955 | ||
|
|
a2210d23c3 | ||
|
|
bd5a622400 | ||
|
|
b9494cb0d6 | ||
|
|
0f73af4470 | ||
|
|
45e26b5c02 | ||
|
|
6af5ea38ce | ||
|
|
b6f0aa4394 | ||
|
|
774dab58f6 | ||
|
|
e3bdb98f7a | ||
|
|
58d628c9f8 | ||
|
|
1e69394545 | ||
|
|
1cf798ad14 | ||
|
|
da3992d2e9 | ||
|
|
48908e4633 | ||
|
|
f5ae149338 | ||
|
|
3fe5311967 | ||
|
|
6a48639c68 | ||
|
|
e7093b3ca8 | ||
|
|
d0a4104c0c | ||
|
|
90559bed53 | ||
|
|
973a18cf03 | ||
|
|
3c666ce57a | ||
|
|
a1287ec64f | ||
|
|
5fbfa1bfa8 | ||
|
|
da3ecc91f8 | ||
|
|
09c8f558f7 | ||
|
|
528a149def | ||
|
|
29e36afb6b | ||
|
|
0e39543d35 | ||
|
|
0de20d8ee6 | ||
|
|
cd5de5c0e5 | ||
|
|
bd5afc26bd | ||
|
|
9542dfdcdc | ||
|
|
97a6d7b1a8 | ||
|
|
209b9d4374 | ||
|
|
0b8ccd0ae7 | ||
|
|
0b7f5ad508 | ||
|
|
8a38805e82 | ||
|
|
836d88a4b8 | ||
|
|
d5268ed511 | ||
|
|
0e7d93858d | ||
|
|
2164d760b7 | ||
|
|
b9c8de598b | ||
|
|
9889a811db | ||
|
|
9e38d882b9 | ||
|
|
e8635044b5 | ||
|
|
56dea0ac9a | ||
|
|
e8b77477c7 | ||
|
|
64298e528d | ||
|
|
4f1465e7c7 | ||
|
|
6120041b69 | ||
|
|
8c1213627d | ||
|
|
3e6ae6eeb8 | ||
|
|
291e9aeabd | ||
|
|
a3d776187a | ||
|
|
e55f502e2f | ||
|
|
e369270f88 | ||
|
|
7e845e7cfd | ||
|
|
56d9624b56 | ||
|
|
911d135deb | ||
|
|
8107b90678 | ||
|
|
7722452b98 | ||
|
|
6e1a986e0f | ||
|
|
e0785ade35 | ||
|
|
0177ed6f03 | ||
|
|
c62635a3b5 | ||
|
|
0177476fd2 | ||
|
|
76d7dface7 | ||
|
|
982ba21460 | ||
|
|
6081c60556 | ||
|
|
2fe3c22108 | ||
|
|
75dbb3189a | ||
|
|
32330300a9 | ||
|
|
64414df27e | ||
|
|
f98ec86798 | ||
|
|
87bbd13899 | ||
|
|
51a4493add | ||
|
|
5effe8f336 | ||
|
|
296eb2bd61 | ||
|
|
9853acba66 | ||
|
|
09cb9c782d | ||
|
|
575ce905b2 | ||
|
|
54887af471 | ||
|
|
573350637e | ||
|
|
49a16f7121 | ||
|
|
a4773fcbbb | ||
|
|
1e038c4bc6 | ||
|
|
6ba19692a3 | ||
|
|
432dfe2b8f | ||
|
|
a142372750 | ||
|
|
f14195f786 | ||
|
|
9d54f9a6b7 | ||
|
|
ebb91191bf | ||
|
|
8742e294d4 | ||
|
|
8882d1fa1b | ||
|
|
0c37ab5255 | ||
|
|
747a05844d | ||
|
|
c7b7bf32f8 | ||
|
|
710ee3b0e0 | ||
|
|
7a8993892d | ||
|
|
5e16a77fa9 | ||
|
|
ef35519696 | ||
|
|
d5baaf7756 | ||
|
|
2a94387fc3 | ||
|
|
6a5c2b0fc3 | ||
|
|
fc281d6440 | ||
|
|
e22ac39da4 | ||
|
|
34cadb1e54 | ||
|
|
94692b904e | ||
|
|
18f3087afd | ||
|
|
15bc228ae9 | ||
|
|
2b7a38d032 | ||
|
|
90e1a6905a | ||
|
|
c36af24cbd | ||
|
|
a676c18502 | ||
|
|
362912ff83 | ||
|
|
46ff13f243 | ||
|
|
340a67a6f8 | ||
|
|
9294c1e76c | ||
|
|
fd704f8de0 | ||
|
|
d9ca9154d1 | ||
|
|
35110eca73 | ||
|
|
9ad92b3007 | ||
|
|
2f78c96330 | ||
|
|
639857ceb2 | ||
|
|
162f58c53c | ||
|
|
84c4d96e71 | ||
|
|
c0d343d56d | ||
|
|
6d14a80608 | ||
|
|
f451bb7c49 | ||
|
|
20b17d6b04 | ||
|
|
bb2317b63c | ||
|
|
189461dc98 | ||
|
|
69af552bc1 | ||
|
|
0ae6ff9f72 | ||
|
|
8b571fbbb1 | ||
|
|
f3fcd409d5 | ||
|
|
a47532f88a | ||
|
|
6c157a404b | ||
|
|
4f8a49143d | ||
|
|
493d6033aa | ||
|
|
8f219af884 | ||
|
|
aeb04136f7 | ||
|
|
0b8f57bf06 | ||
|
|
6508d446e1 | ||
|
|
82cb462bb4 | ||
|
|
9a264bf610 | ||
|
|
57007e80a9 | ||
|
|
b6c876bdb6 | ||
|
|
57afae79eb | ||
|
|
84c2184909 | ||
|
|
e358a24a75 | ||
|
|
9da9d00c62 | ||
|
|
ec3f269d1f | ||
|
|
1c388a52a5 | ||
|
|
34a827bbfe | ||
|
|
726b9e2240 | ||
|
|
2236ba0d20 | ||
|
|
463c0f7096 | ||
|
|
e49a7e361c | ||
|
|
6e87cf5b30 | ||
|
|
5872e8dd7e | ||
|
|
e81d4ac8c8 | ||
|
|
4922904991 | ||
|
|
decae2dcda | ||
|
|
16bbd13af7 | ||
|
|
ee0666c8df | ||
|
|
a8a8ae2e92 | ||
|
|
fd1148a728 | ||
|
|
74c7b41ee7 | ||
|
|
465e19dbe9 | ||
|
|
86660c73e5 | ||
|
|
6d8a208df2 | ||
|
|
c3a826fdce | ||
|
|
c5d6a42abf | ||
|
|
d49c144297 | ||
|
|
e7de7d5eb3 | ||
|
|
20005a83d2 | ||
|
|
27926030f9 | ||
|
|
701de67b79 | ||
|
|
883479f01e | ||
|
|
b37a0b0512 | ||
|
|
5c5d5270d2 | ||
|
|
36461fb2aa | ||
|
|
d8dcd5e472 | ||
|
|
c51b46c982 | ||
|
|
b1b63c1dd1 | ||
|
|
30c93d66eb | ||
|
|
3b60bb7259 | ||
|
|
c73f8e835f | ||
|
|
93558c4299 | ||
|
|
396cff5779 | ||
|
|
336154e729 | ||
|
|
bb0aba34fa | ||
|
|
1dc0ce9562 | ||
|
|
e4aee168b5 | ||
|
|
2c10c895da | ||
|
|
c04fae3096 | ||
|
|
a214af0830 | ||
|
|
f21bc46e82 | ||
|
|
044327a488 | ||
|
|
c4bbcc83b6 | ||
|
|
eb162b73c2 | ||
|
|
29aafb9cea | ||
|
|
40eb7d0d48 | ||
|
|
1dcb2b7e65 | ||
|
|
5470b9aa73 | ||
|
|
050bd7dd0b | ||
|
|
f75038634f | ||
|
|
300b4a9158 | ||
|
|
52071f3476 | ||
|
|
42ddd745f8 | ||
|
|
a7846189cd | ||
|
|
4762995d1f | ||
|
|
e3a530eb61 | ||
|
|
d1235ff058 | ||
|
|
4370e92dbd | ||
|
|
50e9522a06 | ||
|
|
b5bb9aa8e3 | ||
|
|
cf2e365f23 | ||
|
|
72e532cb67 | ||
|
|
ac5635f77d | ||
|
|
640d67c119 | ||
|
|
3e79693e3b | ||
|
|
d55d3c2fd0 | ||
|
|
3aced17c75 | ||
|
|
bac63914db | ||
|
|
6a63c51f7c | ||
|
|
632cf13767 | ||
|
|
e7012a515c | ||
|
|
6b638af92f | ||
|
|
c654b79c53 | ||
|
|
bee7b874ea | ||
|
|
9c3fc592f7 | ||
|
|
4eab7a1ebc | ||
|
|
3d985688e4 | ||
|
|
17ea2631cd | ||
|
|
b749910e6c | ||
|
|
eff36caea8 | ||
|
|
6ff092f140 | ||
|
|
28bb36e53d | ||
|
|
4a091bbd8a | ||
|
|
e99a6b813e | ||
|
|
b9e5302f27 | ||
|
|
dd7b6aef39 | ||
|
|
910b8b6a69 | ||
|
|
c3207e215f | ||
|
|
f83be11b85 | ||
|
|
45bce1062a | ||
|
|
8cb344bf3c | ||
|
|
fcc4518cdc | ||
|
|
c84839eb91 | ||
|
|
1f878aee69 | ||
|
|
84fd4686e2 | ||
|
|
ede9fb4fcc | ||
|
|
723aef71e8 | ||
|
|
48964a911e | ||
|
|
6a35cb60fd | ||
|
|
1e51c3a832 | ||
|
|
205dda2b39 | ||
|
|
1c18d19da0 | ||
|
|
645729e943 | ||
|
|
f425a25c98 | ||
|
|
aaace2e802 | ||
|
|
3f16d9fbc9 | ||
|
|
3afc57bab8 | ||
|
|
55225106b6 | ||
|
|
1a31bff9fe | ||
|
|
4eaa3329ec | ||
|
|
028d78b993 | ||
|
|
944af98be6 | ||
|
|
2789b2b0ad | ||
|
|
7dded571de | ||
|
|
95fe8372e8 | ||
|
|
ecdcb0ef67 | ||
|
|
6a04a03eb5 | ||
|
|
0c96056a94 | ||
|
|
f518a5e231 | ||
|
|
f581c1062e | ||
|
|
0b3deceea3 | ||
|
|
fa4cd8868c | ||
|
|
8c573ca7f3 | ||
|
|
5a5cf3a51d | ||
|
|
3f23e8443e | ||
|
|
a00f9b093c | ||
|
|
5f538ce3f8 | ||
|
|
ebcaa3d579 | ||
|
|
60e26199a2 | ||
|
|
11defd180c | ||
|
|
c82c1691ee | ||
|
|
364562f209 | ||
|
|
5d9fc28fa7 | ||
|
|
e5ec5c284f | ||
|
|
a90e33ad71 | ||
|
|
62ab21ce7d | ||
|
|
cc8e8db1e5 | ||
|
|
b19cba2016 | ||
|
|
315a9c95d5 | ||
|
|
e010ac9706 | ||
|
|
e4c0a85da0 | ||
|
|
d3e4cdd5b0 | ||
|
|
763b812dc7 | ||
|
|
3269dfb4ab | ||
|
|
e816bd259f | ||
|
|
a295408e09 | ||
|
|
42a34c7cd7 | ||
|
|
9a72751958 | ||
|
|
314e6fa80b | ||
|
|
b2b66f749a | ||
|
|
708ed6fded | ||
|
|
5c30fa50d6 | ||
|
|
fc33c424d9 | ||
|
|
b04d6dd0b1 | ||
|
|
9c5f79c56a | ||
|
|
ef5eea689a | ||
|
|
fd191deb49 | ||
|
|
e1da1ff7d3 | ||
|
|
2b00ed7ef8 | ||
|
|
d960ea959d | ||
|
|
274842ec41 | ||
|
|
c06da7c84a | ||
|
|
cea117b509 | ||
|
|
6078c938b2 | ||
|
|
9e95dd4821 | ||
|
|
0cc8b57d4f | ||
|
|
2179e6e797 | ||
|
|
7dde3d1825 | ||
|
|
a0fe950b75 | ||
|
|
44985e8884 | ||
|
|
f03366bcbf | ||
|
|
d43ea83033 | ||
|
|
11bdba0007 | ||
|
|
07e58aaa79 | ||
|
|
a31ddd363b | ||
|
|
ed9e10f2d8 | ||
|
|
02ae3c2810 | ||
|
|
669ebb5f71 | ||
|
|
9a3e0e52cb | ||
|
|
b0f856213d | ||
|
|
6f4ff1f2bf | ||
|
|
d3eea61f1f | ||
|
|
d59d81fae8 | ||
|
|
329ca40b6f | ||
|
|
e71bd416f4 | ||
|
|
ad66fc6cc2 | ||
|
|
d12b44204b | ||
|
|
4be2136de4 | ||
|
|
c4dbed040b | ||
|
|
366b62af2d | ||
|
|
a6955aa486 | ||
|
|
ad30341fa2 | ||
|
|
23da55a9f1 | ||
|
|
41e6292e7b | ||
|
|
ae1d6f29d9 | ||
|
|
ccfc1ddbef | ||
|
|
002de1eae2 | ||
|
|
63621bae81 | ||
|
|
85f9e6c4b9 | ||
|
|
967ec296c0 | ||
|
|
c6aae9b1d7 | ||
|
|
913c370c25 | ||
|
|
e5472bbd21 | ||
|
|
957c258c6d | ||
|
|
abee109cd1 | ||
|
|
502e5ae6e1 | ||
|
|
b8417be1f2 | ||
|
|
9e037431b4 | ||
|
|
f71b3676bb | ||
|
|
50fe7b5e35 | ||
|
|
9fb253388b | ||
|
|
8cf1786296 | ||
|
|
51b17b299c | ||
|
|
78882e4642 | ||
|
|
8465a367a4 | ||
|
|
3bcfe678ab | ||
|
|
d5403f3a5b | ||
|
|
26abb48533 | ||
|
|
177848ed27 | ||
|
|
656a2e93d7 | ||
|
|
6b1220b61d | ||
|
|
9d7330d879 | ||
|
|
26a5954fa0 | ||
|
|
01165e08e0 | ||
|
|
6e1633a6c5 | ||
|
|
a8ff0a21bf | ||
|
|
b8bc6bed97 | ||
|
|
1a4402038c | ||
|
|
5ac51cc9b5 | ||
|
|
c12159ce21 | ||
|
|
4485503ecc | ||
|
|
200ac588cc | ||
|
|
0bb040822d | ||
|
|
543fbe14ee | ||
|
|
e02ab66120 | ||
|
|
76c7c694c5 | ||
|
|
f0057977b7 | ||
|
|
e8e43f06af | ||
|
|
04b35e86d5 | ||
|
|
64ab85da4f | ||
|
|
b8d7a13ea3 | ||
|
|
78a76dc905 | ||
|
|
5fa5fff0e9 | ||
|
|
d323b3d816 | ||
|
|
b685b5672a | ||
|
|
8f6c2f87c8 | ||
|
|
f30e8b11eb | ||
|
|
8bd6d6a4de | ||
|
|
b3a8f438fc | ||
|
|
e78ddf0a95 | ||
|
|
5f0366c2cb | ||
|
|
779ca09775 | ||
|
|
313f1a1e83 | ||
|
|
21337f4776 | ||
|
|
53a8e5655b | ||
|
|
2d85585ae1 | ||
|
|
63d109f7be | ||
|
|
c904b6b5bf | ||
|
|
6a27449922 | ||
|
|
9a9c07f571 | ||
|
|
4382204e1b | ||
|
|
6d3114efe2 | ||
|
|
b62baaed95 | ||
|
|
9b391e531b | ||
|
|
a0c7a6d22b | ||
|
|
14424f7058 | ||
|
|
6063dff8d0 | ||
|
|
7fba9ed398 | ||
|
|
53280a196b | ||
|
|
0bf9a5704b | ||
|
|
8182d17ae1 | ||
|
|
69b1ac7dcd | ||
|
|
b15507aac3 | ||
|
|
6c2f583f51 | ||
|
|
a72eaddda3 | ||
|
|
dc050e45df | ||
|
|
2fcbf13920 | ||
|
|
099ae31523 | ||
|
|
c2fcdf3a02 | ||
|
|
2056a538b9 | ||
|
|
cd1144dc24 | ||
|
|
e9d068b913 | ||
|
|
ec2ad57c32 | ||
|
|
316adac511 | ||
|
|
d7b11d4c33 | ||
|
|
c52aa6df33 | ||
|
|
a19b23b59f | ||
|
|
4e26b2a65b | ||
|
|
7c4feac6db | ||
|
|
e01e364c37 | ||
|
|
c13a3d7b84 | ||
|
|
67805b6dc5 | ||
|
|
0050ab2a3d | ||
|
|
60e66c6cbf | ||
|
|
5ad2a253e8 | ||
|
|
b5d50e9298 | ||
|
|
37f7362aca | ||
|
|
bee198def5 | ||
|
|
f09e479fd6 | ||
|
|
80fe93bc33 | ||
|
|
ea03ad3bee | ||
|
|
feec421744 | ||
|
|
634982840e | ||
|
|
fb3c85ab2f | ||
|
|
a9b7c3531c | ||
|
|
a7ba0d908d | ||
|
|
2fc70e2c5d | ||
|
|
7ae3f0e70c | ||
|
|
9afaa51e3f | ||
|
|
c736a719f1 | ||
|
|
37a547842b | ||
|
|
b9f1d43921 | ||
|
|
bec6423c02 | ||
|
|
241b2b4ae3 | ||
|
|
14d9b56937 | ||
|
|
1c3766eb46 | ||
|
|
70024d61eb | ||
|
|
2085f133d6 | ||
|
|
2a045dfceb | ||
|
|
893cbaaf2f | ||
|
|
6e61939382 | ||
|
|
015a618172 | ||
|
|
2a8b91cdb9 | ||
|
|
bebd5dbc5a | ||
|
|
018dbfe058 | ||
|
|
c6ea597817 | ||
|
|
175b00c0a2 | ||
|
|
5ebc6e305e | ||
|
|
993600761f | ||
|
|
1d9fff80b7 | ||
|
|
c712b84dd5 | ||
|
|
dcf8dd4b5e | ||
|
|
ba26c3fb22 | ||
|
|
41563607a8 | ||
|
|
2d4dcfb740 | ||
|
|
34854e70cf | ||
|
|
758d9fe852 | ||
|
|
6a6c0e7a73 | ||
|
|
ee44eec3e1 | ||
|
|
eccd0d8e37 | ||
|
|
983be0ec60 | ||
|
|
243a45d840 | ||
|
|
60ec804047 | ||
|
|
c53e9ccf4a | ||
|
|
6e8e0418fc | ||
|
|
e9eb52305f | ||
|
|
8501ae748c | ||
|
|
da59692067 | ||
|
|
bae77c0a46 | ||
|
|
b42bc7329e | ||
|
|
9b3c2b6ae2 | ||
|
|
833b6df969 | ||
|
|
0b45431139 | ||
|
|
5d1349031c | ||
|
|
82388a5e4c | ||
|
|
74816fed6c | ||
|
|
b4c9789d5f | ||
|
|
f96fadc074 | ||
|
|
f6b1173437 | ||
|
|
346992c366 | ||
|
|
ab4086bc24 | ||
|
|
d8e7f2b2c7 | ||
|
|
93fcb94b62 | ||
|
|
32a446cf19 | ||
|
|
94459cab98 | ||
|
|
158588640a | ||
|
|
f00f050d1b | ||
|
|
c4f34c60a5 | ||
|
|
371ef80dc3 | ||
|
|
84b4e9ff7c | ||
|
|
677a74fa1b | ||
|
|
8a076d1dba | ||
|
|
970722483c | ||
|
|
31443724c6 | ||
|
|
0e7614919b | ||
|
|
2bf72937d2 | ||
|
|
4e555c7b32 | ||
|
|
bd7021d05b | ||
|
|
1a14555605 | ||
|
|
cb3fb371ea | ||
|
|
6c6dda1b74 | ||
|
|
a712808006 | ||
|
|
e19c203728 | ||
|
|
8817779f23 | ||
|
|
3e5a32671c | ||
|
|
d34f32b39e | ||
|
|
c85a77e0b1 | ||
|
|
9406e517e6 | ||
|
|
4a56049225 | ||
|
|
04ea4b4d75 | ||
|
|
5b6b6283f3 | ||
|
|
38f07ce0fb | ||
|
|
987cdebefb | ||
|
|
6b978db369 | ||
|
|
5840c8cb70 | ||
|
|
44f2024bab | ||
|
|
410942e9df | ||
|
|
5b3730feae | ||
|
|
38f797ccd6 | ||
|
|
553c5a7501 | ||
|
|
bbba9d568f | ||
|
|
11e43dd021 | ||
|
|
e8ddf84871 | ||
|
|
67f04d2d5f | ||
|
|
8f646eef45 | ||
|
|
d26e932858 | ||
|
|
73b9d0840c | ||
|
|
2ea4326c40 | ||
|
|
8b80ac2877 | ||
|
|
233237740d | ||
|
|
f5cdac38bd | ||
|
|
760565dcad | ||
|
|
b5d97b3d94 | ||
|
|
4a6cc54eb5 | ||
|
|
61133545f6 | ||
|
|
bf87d13f5b | ||
|
|
efaf688650 | ||
|
|
9a5c21c16f | ||
|
|
06ffb47ef2 | ||
|
|
1acbda97e0 | ||
|
|
d6460aff36 | ||
|
|
a357f77c4c | ||
|
|
d5bdd2b2f9 | ||
|
|
562d2de303 | ||
|
|
1f68fa19c7 | ||
|
|
677ddd6160 | ||
|
|
228e627475 | ||
|
|
ec4e653c6f | ||
|
|
3916d1e6cb | ||
|
|
387aaba810 | ||
|
|
9f3d9da119 | ||
|
|
76c24a0d82 | ||
|
|
ffd65a1956 | ||
|
|
de8947f92f | ||
|
|
d2b4dedbe4 | ||
|
|
34865ffb4a | ||
|
|
62970da675 | ||
|
|
8ed31c48e0 | ||
|
|
13d40e33a4 | ||
|
|
c765213aaa | ||
|
|
983bf93a24 | ||
|
|
2f8085af15 | ||
|
|
88a4dc2795 | ||
|
|
b5112096d7 | ||
|
|
fc80c714e8 | ||
|
|
84bc23b92f | ||
|
|
d90472dd64 | ||
|
|
3b63ed8230 | ||
|
|
e75441e027 | ||
|
|
0ae8b51230 | ||
|
|
547c136b4f | ||
|
|
4ed13bde55 | ||
|
|
80e01deba0 | ||
|
|
fb9ae9d0e2 | ||
|
|
dd54d8551b | ||
|
|
205f8b266c | ||
|
|
c4ce9ac4de | ||
|
|
0e4e28fdda | ||
|
|
db2370a12f | ||
|
|
d1d35ba85f | ||
|
|
2ab2e7675c | ||
|
|
0472629222 | ||
|
|
c4f7570a23 | ||
|
|
d26cfd5791 | ||
|
|
b7ffc6bb45 | ||
|
|
8a96aec567 | ||
|
|
5cd9f57137 | ||
|
|
702664e959 | ||
|
|
18d87edd6d | ||
|
|
dc59795629 | ||
|
|
cb9bb31f7d | ||
|
|
02706bec94 | ||
|
|
7657186bf6 | ||
|
|
42ac24448c | ||
|
|
31891b55a4 | ||
|
|
aa47ac4c06 | ||
|
|
b01151e81c | ||
|
|
67bd6f9ccd | ||
|
|
4869fa285b | ||
|
|
d221e01406 | ||
|
|
874fc8228a | ||
|
|
6f752c64bc | ||
|
|
ccb7950c4c | ||
|
|
750e771376 | ||
|
|
7012a4a291 | ||
|
|
40ab20a252 | ||
|
|
6af315e50c | ||
|
|
861b5e608b | ||
|
|
f61917594e | ||
|
|
0ddab51ad8 | ||
|
|
9798432f56 | ||
|
|
5faf52619d | ||
|
|
f8b4ba80e0 | ||
|
|
527f70e540 | ||
|
|
19f66c7575 | ||
|
|
b7721deb02 | ||
|
|
5ba188ab2d | ||
|
|
eadfd78c2e | ||
|
|
4d815c9990 | ||
|
|
176981b529 | ||
|
|
85baebd0d4 | ||
|
|
ac022b2e30 | ||
|
|
f169b750b8 | ||
|
|
86295eef13 | ||
|
|
32d60b2714 | ||
|
|
0a3065a2f2 | ||
|
|
b98faaa8c0 | ||
|
|
73772323c9 | ||
|
|
98389066e2 | ||
|
|
fb53ed4c1f | ||
|
|
e719eb5b81 | ||
|
|
3858063bcd | ||
|
|
d4f5fea840 | ||
|
|
22c1d48cb2 | ||
|
|
e7cefd684b | ||
|
|
d2485e4f20 | ||
|
|
160d6b26b0 | ||
|
|
17d61e4f29 | ||
|
|
446b9467da | ||
|
|
3970a7056c | ||
|
|
74068a6d1b | ||
|
|
8c83422fe2 | ||
|
|
61a1e3cd01 | ||
|
|
89cac6f25c | ||
|
|
62082293c5 | ||
|
|
153fd2752c | ||
|
|
e649a40f5d | ||
|
|
32d76a5b57 | ||
|
|
14aa3fa258 | ||
|
|
f5394cccb1 | ||
|
|
64dd9c7656 | ||
|
|
16ae0c6466 | ||
|
|
6a2e21ec8c | ||
|
|
120f17ce04 | ||
|
|
ab938bb9bd | ||
|
|
33820cd2ac | ||
|
|
41def21f91 | ||
|
|
d118312922 | ||
|
|
82b93e4945 | ||
|
|
e36fb1ecda | ||
|
|
e4a1788614 | ||
|
|
7b23eff9cf | ||
|
|
67ff8e3ea3 | ||
|
|
2248599ae1 | ||
|
|
29350b363b | ||
|
|
83c470a443 | ||
|
|
ab96e2d6e9 | ||
|
|
6b81cf4bc9 | ||
|
|
0d9301539e | ||
|
|
4a9e12542d | ||
|
|
21b4105454 | ||
|
|
d7648d94ca | ||
|
|
883343ba63 | ||
|
|
16b5dc710f | ||
|
|
686d767053 | ||
|
|
ed3176dd6b | ||
|
|
6a99ab098c | ||
|
|
b03adde546 | ||
|
|
e6034ea299 | ||
|
|
c7f51ebeab | ||
|
|
9a820d7a98 | ||
|
|
8dbaf534c8 | ||
|
|
91f483c591 | ||
|
|
c5b448038f | ||
|
|
c4ff5eb0ca | ||
|
|
0859cd2444 | ||
|
|
59b45a90cc | ||
|
|
f661475962 | ||
|
|
54b02ecf09 | ||
|
|
4551e7ce49 | ||
|
|
064bc3ecbc | ||
|
|
cf38a4c470 | ||
|
|
aacc79a3a3 | ||
|
|
9864bf703d | ||
|
|
289a42f050 | ||
|
|
ade1e79b37 | ||
|
|
2415724d5f | ||
|
|
5463177f1f | ||
|
|
4efd751eda | ||
|
|
2337efc3b1 | ||
|
|
b942a25a45 | ||
|
|
beab9a9696 | ||
|
|
177dbc7be0 | ||
|
|
f2e71edcbd | ||
|
|
fad6e5a5bc | ||
|
|
52f6c437fe | ||
|
|
80a8be6319 | ||
|
|
043d70fcdf | ||
|
|
4f7e958969 | ||
|
|
53143910a1 | ||
|
|
95656cd7f3 | ||
|
|
d8f79b263d | ||
|
|
51da8552c3 | ||
|
|
7e42cb61f7 | ||
|
|
6c038680f9 | ||
|
|
291a908f19 | ||
|
|
b264a03f89 | ||
|
|
7472ede32a | ||
|
|
b5065e462b | ||
|
|
8dd799b4bd | ||
|
|
a38520c90d | ||
|
|
3050ae57c0 | ||
|
|
01205f772c | ||
|
|
06ad5be3af | ||
|
|
2fe3829e5e | ||
|
|
a0c8b9bc68 | ||
|
|
0406b1facf | ||
|
|
65dbee01e5 | ||
|
|
b1080f7c9a | ||
|
|
7bfd58d41f | ||
|
|
3851c6aae2 | ||
|
|
ae03fa7d8e | ||
|
|
8a14dd25a9 | ||
|
|
e0bea7d541 | ||
|
|
534a8a05f3 | ||
|
|
f5b8a26d9a | ||
|
|
cf51f7fb65 | ||
|
|
4d1f3d3cd0 | ||
|
|
f70b87b4c5 | ||
|
|
0e26355348 | ||
|
|
246ea56eab | ||
|
|
7c1bba315b | ||
|
|
9395cad379 | ||
|
|
c5b2e85b47 | ||
|
|
38f8087281 | ||
|
|
e3fa7d021e | ||
|
|
a1813e2b2d | ||
|
|
2e62458eef | ||
|
|
bb9e5565f2 | ||
|
|
29102befa6 | ||
|
|
9d1145598a | ||
|
|
065e466f1a | ||
|
|
3ac00f32af | ||
|
|
21bb852750 | ||
|
|
83bab78bda | ||
|
|
894ec46ef4 | ||
|
|
4eb1d3eb1b | ||
|
|
945423e83a | ||
|
|
9fd33c0b96 | ||
|
|
3c09f2d2bd | ||
|
|
7b4bf6a22c | ||
|
|
b5b77f6367 | ||
|
|
5a8097a4d5 | ||
|
|
9cdf6fb64b | ||
|
|
a137223b4f | ||
|
|
52e1ce9518 | ||
|
|
8127a34f98 | ||
|
|
2dcb8b674f | ||
|
|
1e3b1b6e47 | ||
|
|
9cdaae94cc | ||
|
|
316e74be74 | ||
|
|
af69c4f4f7 | ||
|
|
ad9648a215 | ||
|
|
1576f3319e | ||
|
|
8ac90316d9 | ||
|
|
35ba5c826d | ||
|
|
4f4ffa98b5 | ||
|
|
b7d92c3e03 | ||
|
|
4ecf939452 | ||
|
|
7ef6b05ef1 | ||
|
|
695f95aad1 | ||
|
|
2a6ea6d7a7 | ||
|
|
f5e0ff2170 | ||
|
|
814d176b86 | ||
|
|
3955b31362 | ||
|
|
4b3fb5a01c | ||
|
|
67abd4cd47 | ||
|
|
58f4af7973 | ||
|
|
99befd3a15 | ||
|
|
3acda85c2b | ||
|
|
dbb69797cf | ||
|
|
2910880b15 | ||
|
|
8b5f0abef1 | ||
|
|
10b5327b19 | ||
|
|
4ba1eb26fa | ||
|
|
444f6427b8 | ||
|
|
a173e07eec | ||
|
|
3de85777de | ||
|
|
f4c5314890 | ||
|
|
1225ad58bd | ||
|
|
951fdeba67 | ||
|
|
327b46cced | ||
|
|
80d301257c | ||
|
|
0e59182945 | ||
|
|
7270d5ce26 | ||
|
|
a142d419d2 | ||
|
|
23cf63f550 | ||
|
|
13ee90bbd4 | ||
|
|
754d6c3abd | ||
|
|
c6f6e81238 | ||
|
|
7803a1a28a | ||
|
|
3d647b9a98 | ||
|
|
090a7f38be | ||
|
|
8ad47a13e5 | ||
|
|
497cc6bfaf | ||
|
|
d5be114c07 | ||
|
|
6e43a4ccce | ||
|
|
a07dcfd850 | ||
|
|
321511a5be | ||
|
|
c5297b9fd9 | ||
|
|
7e00076586 | ||
|
|
9a8ba19b73 | ||
|
|
41e776f9db | ||
|
|
5c2d4a6bdd | ||
|
|
83b709401c | ||
|
|
3590fffeae | ||
|
|
5e2e87cc8d | ||
|
|
b1bdba7db5 | ||
|
|
e3d342df96 | ||
|
|
ff54a74b4d | ||
|
|
ccf65be0a4 | ||
|
|
7dfef13224 | ||
|
|
0b85e53af2 | ||
|
|
26cfb21c00 | ||
|
|
b7acdbcb4c | ||
|
|
6e1e9caa32 | ||
|
|
f71725de6e | ||
|
|
26fe6da93b | ||
|
|
8d4ac69175 | ||
|
|
4f5a6a33b4 | ||
|
|
ec8ee4404b | ||
|
|
e47b5d4e6c | ||
|
|
494c40fd98 | ||
|
|
d3b414724b | ||
|
|
38181fbc74 | ||
|
|
8847e61fca | ||
|
|
95b84adb9b | ||
|
|
b34d161703 | ||
|
|
d88b3d3d5d | ||
|
|
f2fb9039bd | ||
|
|
a28b32aa45 | ||
|
|
1ba47e7af9 | ||
|
|
9359498b06 | ||
|
|
553082e24a | ||
|
|
dc28a9c0c1 | ||
|
|
1faef62d59 | ||
|
|
0d0d5e7ee3 | ||
|
|
4f567d0f81 | ||
|
|
f23d923fd3 | ||
|
|
10d6d8b2ae | ||
|
|
358e08b95d | ||
|
|
e181eda253 | ||
|
|
7d3f5d7ac1 | ||
|
|
37c7a695a2 | ||
|
|
07f107ae20 | ||
|
|
5c14b3be6d | ||
|
|
1dc15ec1bc | ||
|
|
6a9ed44088 | ||
|
|
bdb0620529 | ||
|
|
be9ea07e87 | ||
|
|
4cf14e9f85 | ||
|
|
d02b2c4308 | ||
|
|
1687a9eb94 | ||
|
|
344c6a3725 | ||
|
|
f966dad306 | ||
|
|
887f41c062 | ||
|
|
4b1350e467 | ||
|
|
22a0c57746 | ||
|
|
fec571f5b0 | ||
|
|
976285ccbc | ||
|
|
9b3b7ad22e | ||
|
|
1b8ac7c6b5 | ||
|
|
bd2db87237 | ||
|
|
df3ca59116 | ||
|
|
3ca4509ae9 | ||
|
|
d531926246 | ||
|
|
357fdb60b6 | ||
|
|
b6f855cb9b | ||
|
|
b6646310e8 | ||
|
|
070da3c08f | ||
|
|
6b7f6369ec | ||
|
|
309e3ce4f9 | ||
|
|
8a4eb8ed45 | ||
|
|
eee70dcf8e | ||
|
|
c0c885a1f3 | ||
|
|
a7488672bf | ||
|
|
c1312cab1f | ||
|
|
8c833d375a | ||
|
|
18f14ae23d | ||
|
|
98adcdd466 | ||
|
|
a2bd47c567 | ||
|
|
7b3c308eb0 | ||
|
|
1be1d3cfb8 | ||
|
|
b970469df9 | ||
|
|
80a324386b | ||
|
|
163518778c | ||
|
|
7fd1ce4dc3 | ||
|
|
c78ee11c41 | ||
|
|
4435e3b269 | ||
|
|
b96a0dba90 | ||
|
|
30dfc00a54 | ||
|
|
fe5979cfdb | ||
|
|
a1f7987ad8 | ||
|
|
ac269a8f68 | ||
|
|
35944744f8 | ||
|
|
4b1c0bd1e7 | ||
|
|
b7ff86fa2b | ||
|
|
2c27e4ee76 | ||
|
|
6ac9e67bd7 | ||
|
|
8726a6b6ed | ||
|
|
2f26069a41 | ||
|
|
d6c155ff47 | ||
|
|
15360e5e51 | ||
|
|
e587a56fc0 | ||
|
|
113531432a | ||
|
|
bfa74c2649 | ||
|
|
6bb215f56c | ||
|
|
8b37844e5f | ||
|
|
1445e62312 | ||
|
|
4781ff88fd | ||
|
|
c28e15c682 | ||
|
|
fe0585ec91 | ||
|
|
18c0b49f3d | ||
|
|
5d69c956ee | ||
|
|
93aa22ea08 | ||
|
|
b7c6bc20be | ||
|
|
9bb4a95e08 | ||
|
|
0966ddafaa | ||
|
|
c073625fb9 | ||
|
|
85dd4bfb8d | ||
|
|
5ae34aa8e1 | ||
|
|
0eb8414750 | ||
|
|
09717d3fc8 | ||
|
|
81a3246a56 | ||
|
|
4c8fbe9abf | ||
|
|
c0d448f778 | ||
|
|
16e9a9eaef | ||
|
|
0d7446c134 | ||
|
|
a4752673bb | ||
|
|
9a0d5c4ed8 | ||
|
|
d85bc18178 | ||
|
|
f0e66d8c76 | ||
|
|
af114358c8 | ||
|
|
ffe17a8197 | ||
|
|
2459e1e268 | ||
|
|
a34a4af36a | ||
|
|
bf51f05a50 | ||
|
|
5d94ff5974 | ||
|
|
0d4ddfa743 | ||
|
|
56c9899832 | ||
|
|
7b3fba1ad5 | ||
|
|
700e3b685a | ||
|
|
3e1caa6185 | ||
|
|
50eafb7668 | ||
|
|
25559ac02e | ||
|
|
51a87fa652 | ||
|
|
b2dad0342f | ||
|
|
a5abce7982 | ||
|
|
de3f22b288 | ||
|
|
be5cc378c8 | ||
|
|
4afc4aed73 | ||
|
|
a4e1ac7952 | ||
|
|
f84d2b4d36 | ||
|
|
b4c7876e4b | ||
|
|
4207ef3d27 | ||
|
|
b3572269a4 | ||
|
|
097d449cc1 | ||
|
|
7f44713487 | ||
|
|
b7a6b78e0c | ||
|
|
855a9eff76 | ||
|
|
8e34e75100 | ||
|
|
4be60ac155 | ||
|
|
5ec4501b9d | ||
|
|
e80f566a14 | ||
|
|
1729918777 | ||
|
|
cef290c6b4 | ||
|
|
539e34b5df | ||
|
|
765683403f | ||
|
|
cca9fca894 | ||
|
|
2b403db811 | ||
|
|
03e7b7c95f | ||
|
|
1a05a90f1c | ||
|
|
dcea109bb5 | ||
|
|
d46a573bbe | ||
|
|
7d0d19708a | ||
|
|
09f14efade | ||
|
|
87753cda49 | ||
|
|
66f6f43056 | ||
|
|
86f059dcfb | ||
|
|
5931d43a36 | ||
|
|
8475a0df2f | ||
|
|
ccc4c9c02c | ||
|
|
16edb15600 | ||
|
|
9e7534a46e | ||
|
|
737dddaec0 | ||
|
|
b5c90c9b05 | ||
|
|
c3ecd552f5 | ||
|
|
56f0227c92 | ||
|
|
dcb5a4df01 | ||
|
|
fd64213c2f | ||
|
|
fc2c06754c | ||
|
|
7ec200f4d1 | ||
|
|
e53f139925 | ||
|
|
61599ceb7b | ||
|
|
6f8e3f106a | ||
|
|
8fd676f73e | ||
|
|
98a8103a3b | ||
|
|
94043b1150 | ||
|
|
1b02ad5e8a | ||
|
|
4897587615 | ||
|
|
8e2f57c82e | ||
|
|
c3323b1902 | ||
|
|
59c063dfd3 | ||
|
|
8c16696f47 | ||
|
|
f68950db67 | ||
|
|
710e370c34 | ||
|
|
7bb6d76d14 | ||
|
|
2467f814a8 | ||
|
|
a654ef9ee6 | ||
|
|
c1688733c1 | ||
|
|
cd73a733c7 | ||
|
|
8ef8e949bd | ||
|
|
49111a63e6 | ||
|
|
ee4ecf5155 | ||
|
|
3478253e5a | ||
|
|
6ddc59dadf | ||
|
|
dc8688b8dc | ||
|
|
865e495188 | ||
|
|
d3c0ed007e | ||
|
|
0dc79376e7 | ||
|
|
3ccbed1022 | ||
|
|
377e43fbb9 | ||
|
|
1f2b042b95 | ||
|
|
fd49ba6c18 | ||
|
|
facfa19cdd | ||
|
|
3347ced899 | ||
|
|
592686bee9 | ||
|
|
f471a293ea | ||
|
|
c688166066 | ||
|
|
5dcd2710d4 | ||
|
|
16d8383625 | ||
|
|
6b49fd7483 | ||
|
|
f10985fc50 | ||
|
|
edeac97773 | ||
|
|
40498ffdd0 | ||
|
|
fd884a3cd2 | ||
|
|
1887629c5c | ||
|
|
d3be5b2725 | ||
|
|
2e973684c0 | ||
|
|
ab909fc4c2 | ||
|
|
4cd5220d27 | ||
|
|
24d47a6e07 | ||
|
|
8a66584db4 | ||
|
|
186f433e40 | ||
|
|
736a40fec9 | ||
|
|
4245400ae4 | ||
|
|
629bba6b35 | ||
|
|
f6f2a9e4be | ||
|
|
8bfcae65ef | ||
|
|
96cf615e9d | ||
|
|
e9b3e1d031 | ||
|
|
7167cde020 | ||
|
|
2a80a4c521 | ||
|
|
83f11b1c9b | ||
|
|
a00e7f0f5e | ||
|
|
e1607f5705 | ||
|
|
cce931f27d | ||
|
|
34089c93bb | ||
|
|
beb61ef429 | ||
|
|
72aff74798 | ||
|
|
8e715af480 | ||
|
|
2730842559 | ||
|
|
cac269cf91 | ||
|
|
249036ada0 | ||
|
|
18d80b9e8f | ||
|
|
b2d8e0b476 | ||
|
|
225a652021 | ||
|
|
38b1d96750 | ||
|
|
2f069ad3e2 | ||
|
|
a3dbe03e80 | ||
|
|
f4bef25b5e | ||
|
|
ebf7d22503 | ||
|
|
9296d9deb8 | ||
|
|
7b95a25adc | ||
|
|
82d6cfa7fc | ||
|
|
48750d5fc7 | ||
|
|
4f0258ec09 | ||
|
|
db4d0d307a | ||
|
|
2baf22e184 | ||
|
|
21d5aead47 | ||
|
|
f40c9b83df | ||
|
|
b9e082b811 | ||
|
|
0bfa601a9f | ||
|
|
e356420123 | ||
|
|
e8f85cba0f | ||
|
|
1aba99b1e7 | ||
|
|
12815d7cd6 | ||
|
|
9deb76ce3e | ||
|
|
c98676068e | ||
|
|
b534f74bf4 | ||
|
|
411e9b0c45 | ||
|
|
3fa1879f6a | ||
|
|
d30cf22c12 | ||
|
|
557b6cfd3f | ||
|
|
84bf03b365 | ||
|
|
34342bcd19 | ||
|
|
5322a86313 | ||
|
|
1dc50e21c4 | ||
|
|
1eddbb1b47 | ||
|
|
bb8591cf54 | ||
|
|
a7913a62a9 | ||
|
|
6d1b37b3da | ||
|
|
34750cc738 | ||
|
|
af677c4e1d | ||
|
|
298076e00f | ||
|
|
0d2cdd9773 | ||
|
|
eb5d3b5a7c | ||
|
|
7663775971 | ||
|
|
fe46572f2b | ||
|
|
a6d4d3eeac | ||
|
|
62f97f1817 | ||
|
|
253ff7b2ad | ||
|
|
c274e51654 | ||
|
|
1239e48304 | ||
|
|
52313cbac9 | ||
|
|
071218a201 | ||
|
|
f0d6cc23ae | ||
|
|
ceefe2e248 | ||
|
|
9a2aed7d7a | ||
|
|
a91a75355d | ||
|
|
01acbfa1a5 | ||
|
|
49b2896a3b | ||
|
|
39af394a1c | ||
|
|
5c7dcc6c33 | ||
|
|
6c5ea2af27 | ||
|
|
93e084e097 | ||
|
|
1a61bcecfc | ||
|
|
3d9fb701e2 | ||
|
|
19a568a983 | ||
|
|
70c3f6a8dd | ||
|
|
bb999d8213 | ||
|
|
121197bc87 | ||
|
|
d5dd8e0fdc | ||
|
|
c368800877 | ||
|
|
6eb58549a9 | ||
|
|
95def48071 | ||
|
|
2ee6c33412 | ||
|
|
be7ce435c0 | ||
|
|
f4252f8672 | ||
|
|
f4f961c4ea | ||
|
|
e2fe03df8e | ||
|
|
19b284c214 | ||
|
|
6b3e3095ea | ||
|
|
fd2aad1d9b | ||
|
|
d239fc5d04 | ||
|
|
ec4da97a35 | ||
|
|
bb48ccedd7 | ||
|
|
afc0dfb141 | ||
|
|
8e87223195 | ||
|
|
be1cece69b | ||
|
|
45be6d6645 | ||
|
|
d4db35c125 | ||
|
|
94c6a5eeab | ||
|
|
35292e794a | ||
|
|
c2043a7f94 | ||
|
|
e752588e8d | ||
|
|
8f30dbd4f0 | ||
|
|
29eb80dbd1 | ||
|
|
6cf6f9a21e | ||
|
|
6af6a2bbe8 | ||
|
|
2576ac1c76 | ||
|
|
bfeea8e6b7 | ||
|
|
2f89f2311c | ||
|
|
75e5967afd | ||
|
|
1003628103 | ||
|
|
3451e888b9 | ||
|
|
12dc142a28 | ||
|
|
cb80670885 | ||
|
|
c189687188 | ||
|
|
595016d393 | ||
|
|
23550fe5de | ||
|
|
8420de971f | ||
|
|
17f8f32b2e | ||
|
|
7676f40218 | ||
|
|
2de62cb06f | ||
|
|
be1df3ca0a | ||
|
|
543ab6f331 | ||
|
|
2b6f7ef2a9 | ||
|
|
0d37f8564e | ||
|
|
6cd2536048 | ||
|
|
60fccf4e37 | ||
|
|
8a8028394f | ||
|
|
6a06667cc0 | ||
|
|
25bf23105d | ||
|
|
2544c78083 | ||
|
|
40b9b6f6dc | ||
|
|
f5e1beddf1 | ||
|
|
d4076c9a8a | ||
|
|
106695d45e | ||
|
|
f71b3f48a1 | ||
|
|
aa8dd932c1 | ||
|
|
adbe3eefb6 | ||
|
|
33f69c0546 | ||
|
|
6c3a87a599 | ||
|
|
13cc010e38 | ||
|
|
e99bf99829 | ||
|
|
2e7dcc1e2a | ||
|
|
b85a036e4a | ||
|
|
7885264b29 | ||
|
|
73dd450147 | ||
|
|
96efa990f9 | ||
|
|
4e0aee9408 | ||
|
|
27d509cfe9 | ||
|
|
ade8e47a8c | ||
|
|
ca52c963c7 | ||
|
|
17acdb5acf | ||
|
|
f6433211ae | ||
|
|
0ec4c66fba | ||
|
|
1faa9d6fd5 | ||
|
|
23d64e720d | ||
|
|
b8b56248bd | ||
|
|
33929117f9 | ||
|
|
2b1673c9c8 | ||
|
|
702f549a6a | ||
|
|
428741d7cf | ||
|
|
6fa624cf8c | ||
|
|
5f60188b8a | ||
|
|
75a6fdeb58 | ||
|
|
5f3fa92062 | ||
|
|
66077ae48b | ||
|
|
92637303db | ||
|
|
811dfd710b | ||
|
|
b08dc2cadb | ||
|
|
f7c5a097e3 | ||
|
|
5eb3102cd1 | ||
|
|
05825a8a9f | ||
|
|
24353c4372 | ||
|
|
e89ea07626 | ||
|
|
b99c95ba46 | ||
|
|
9432bfe90c | ||
|
|
37bf6da9c8 | ||
|
|
b3ebbd60a2 | ||
|
|
e942394bdb | ||
|
|
4adfcd4fd7 | ||
|
|
c10196afc0 | ||
|
|
49746d1dce | ||
|
|
d46e235c2a | ||
|
|
ee44677d7e | ||
|
|
20057aee2e | ||
|
|
7119679080 | ||
|
|
d869b51a57 | ||
|
|
dbacc81af7 | ||
|
|
b233c13dca | ||
|
|
464be27479 | ||
|
|
d736ac51c0 | ||
|
|
e8b295ff7d | ||
|
|
4a4490d5f1 | ||
|
|
46313be2f5 | ||
|
|
723bfe42e7 | ||
|
|
e35c7dcd72 | ||
|
|
fa83a0573e | ||
|
|
7b97371ab1 | ||
|
|
b17e32baa7 | ||
|
|
cd52b9f0da | ||
|
|
c3d74ffe48 | ||
|
|
a231a96841 | ||
|
|
93b61bf0d3 | ||
|
|
06d39bd303 | ||
|
|
52177b1f60 | ||
|
|
566f7b5e58 | ||
|
|
c8c47768c7 | ||
|
|
62ff567c47 | ||
|
|
ee400f9552 | ||
|
|
9ac7629e2c | ||
|
|
d72ca96a43 | ||
|
|
d0dcb3b554 | ||
|
|
e139e49826 | ||
|
|
3838745fdb | ||
|
|
06a5c70f4d | ||
|
|
62af3fb7b9 | ||
|
|
db302a1055 | ||
|
|
847c91e568 | ||
|
|
2646af106b | ||
|
|
7261b4556b | ||
|
|
071e3cf007 | ||
|
|
164184b484 | ||
|
|
8b6e87abee | ||
|
|
45197b188e | ||
|
|
559553b169 | ||
|
|
84ec4068de | ||
|
|
aea87be19e | ||
|
|
9f14744d16 | ||
|
|
1dc8c1dbc8 | ||
|
|
e9812c53cb | ||
|
|
ed98565963 | ||
|
|
1d3233612a | ||
|
|
8362a34cef | ||
|
|
edd16d978f | ||
|
|
4356356305 | ||
|
|
cb88135220 | ||
|
|
498a0fe795 | ||
|
|
0ca1b6afcf | ||
|
|
d3c9f3d6f8 | ||
|
|
df59ca1a45 | ||
|
|
9d84442409 | ||
|
|
5ab9d72e45 | ||
|
|
6060e7ed96 | ||
|
|
7ca7f7a725 | ||
|
|
355b3d3057 | ||
|
|
d5bdf5f89c | ||
|
|
17de7e0f1c | ||
|
|
2cea484428 | ||
|
|
fb3e19ae50 | ||
|
|
99db7fb222 | ||
|
|
49d0272627 | ||
|
|
da30242640 | ||
|
|
811edcde18 | ||
|
|
4934e6471b | ||
|
|
9dbd6659dc | ||
|
|
5ddad4cdb3 | ||
|
|
338c2da24f | ||
|
|
b5cafc0b83 | ||
|
|
c50ced6cc2 | ||
|
|
f4783bda27 | ||
|
|
b55507c8a7 | ||
|
|
827a805966 | ||
|
|
e23ba31eb9 | ||
|
|
02c6fde11e | ||
|
|
d003f6e125 | ||
|
|
1dfff2487f | ||
|
|
4ff9cd39c5 | ||
|
|
9c4ffcc250 | ||
|
|
6b5a04cf83 | ||
|
|
55e61c092e | ||
|
|
de6ab3de22 | ||
|
|
5e1eb58e5a | ||
|
|
d892a4dc23 | ||
|
|
496ea65f39 | ||
|
|
6577b15d08 | ||
|
|
f2e35fad27 | ||
|
|
81c48aa43d | ||
|
|
0cfa9b52ae | ||
|
|
48b92c163f | ||
|
|
b7575b39c4 | ||
|
|
ae2f002b44 | ||
|
|
89c312691e | ||
|
|
1d23affbc5 | ||
|
|
26ffaa263b | ||
|
|
ca5e6160b7 | ||
|
|
6d60ff6ea1 | ||
|
|
43ae26f146 | ||
|
|
3e01f70468 | ||
|
|
b9f1dd7691 | ||
|
|
a7bed4fc7c | ||
|
|
7ca49dc91d | ||
|
|
645ee8a42a | ||
|
|
115dd6f095 | ||
|
|
0e03165467 | ||
|
|
6574f4106e | ||
|
|
8e7fcd9ee1 | ||
|
|
ad63e1e698 | ||
|
|
d784526dae | ||
|
|
79d480e1e7 | ||
|
|
b3b2ba31f7 | ||
|
|
7f78bc3c6d | ||
|
|
f508f30fb6 | ||
|
|
d20a05161a | ||
|
|
6769ab2797 | ||
|
|
85867cbe94 | ||
|
|
5e8d3988a2 | ||
|
|
1cd0a08575 | ||
|
|
efd71af2a1 | ||
|
|
2ea80c29fa | ||
|
|
e3fc0d5e78 | ||
|
|
33f42aacca | ||
|
|
c85bf83e88 | ||
|
|
060b6ce148 | ||
|
|
35618b4712 | ||
|
|
cd2e99e980 | ||
|
|
0359ae8f40 | ||
|
|
972d39234f | ||
|
|
798349fce6 | ||
|
|
9612fda886 | ||
|
|
4b217efb84 | ||
|
|
555cfb3059 | ||
|
|
c0d1d6926c | ||
|
|
fca8fcec3e | ||
|
|
6844d5dcad | ||
|
|
d759e97166 | ||
|
|
cbfc737d79 | ||
|
|
ab64bf6fb1 | ||
|
|
0b0d20021c | ||
|
|
932a6f6b77 | ||
|
|
1318760ad2 | ||
|
|
15a403a98d | ||
|
|
a92b7c1b16 | ||
|
|
0c54013ee3 | ||
|
|
ca5d1e7a8d | ||
|
|
40a39e2270 | ||
|
|
982530b186 | ||
|
|
fadc08445a | ||
|
|
783381c163 | ||
|
|
5f26bee7c8 | ||
|
|
2be57d0833 | ||
|
|
6e6748f051 | ||
|
|
a8d544d9b3 | ||
|
|
5f1490e1bd | ||
|
|
2c3e557b5c | ||
|
|
08df4b8971 | ||
|
|
11f58ea896 | ||
|
|
15f3b4b6d1 | ||
|
|
35270e50c2 | ||
|
|
8c975657e7 | ||
|
|
03cb3b9db1 | ||
|
|
19ad942739 | ||
|
|
3cf452b923 | ||
|
|
2a6f9aa155 | ||
|
|
570455b21d | ||
|
|
dccdf9e66c | ||
|
|
dd4d5bb1e0 | ||
|
|
842e4aaa0d | ||
|
|
ebb09cd9c4 | ||
|
|
9a6df07d3d | ||
|
|
c59c429a69 | ||
|
|
69f9d0c916 | ||
|
|
56edbe3804 | ||
|
|
94c4a18541 | ||
|
|
bdcf8d626d | ||
|
|
576b40b1b0 | ||
|
|
954575a19d | ||
|
|
47bbe36725 | ||
|
|
1a8f7e830c | ||
|
|
dfc85b7291 | ||
|
|
1457b80617 | ||
|
|
dba40b35f2 | ||
|
|
e9d95f1a25 | ||
|
|
67e40a2b16 | ||
|
|
25f5f14d35 | ||
|
|
dfda9cc007 | ||
|
|
e39b29fc48 | ||
|
|
4c17ba4fc0 | ||
|
|
4511f7ac50 | ||
|
|
b9f76f11bb | ||
|
|
17841a20e3 | ||
|
|
d90d40b5d1 | ||
|
|
d2e6a0583a | ||
|
|
b2c9277e66 | ||
|
|
31c332af93 | ||
|
|
90af60a6ef | ||
|
|
80c7566203 | ||
|
|
efb1fdbec8 | ||
|
|
bada8cc259 | ||
|
|
c3a076176e | ||
|
|
2cda3070d5 | ||
|
|
728bed8c98 | ||
|
|
6e72ea7442 | ||
|
|
a4aac27fd3 | ||
|
|
5b8816dcb7 | ||
|
|
fc0df97278 | ||
|
|
592658e874 | ||
|
|
5a70e42428 | ||
|
|
e4caa98901 | ||
|
|
c211a7c685 | ||
|
|
7876c078bc | ||
|
|
aedadfc779 | ||
|
|
2046a6b9e5 | ||
|
|
d1d53b2bbf | ||
|
|
950aa1c743 | ||
|
|
a9572bf88a | ||
|
|
5a93f50394 | ||
|
|
60af1cbcc2 | ||
|
|
8952ef933b | ||
|
|
b350d5da59 | ||
|
|
6df3bf3644 | ||
|
|
35840a2c5c | ||
|
|
090b89cc76 | ||
|
|
f05d47ddd6 | ||
|
|
fcfd4bef2d | ||
|
|
18dc8fbc26 | ||
|
|
d9ceee1c75 | ||
|
|
097281f459 | ||
|
|
087748c48e | ||
|
|
e35187741b | ||
|
|
574e911375 | ||
|
|
ce945bd2f0 | ||
|
|
8efa6f407d | ||
|
|
85bd4621db | ||
|
|
6c3759d78d | ||
|
|
4af08a19f8 | ||
|
|
c14650caec | ||
|
|
c7a9e07909 | ||
|
|
185baf036b | ||
|
|
3523613826 | ||
|
|
782ade7223 | ||
|
|
ba40eccc90 | ||
|
|
4191741fb6 | ||
|
|
7a52f44bd4 | ||
|
|
efa5485744 | ||
|
|
c81ac51e5c | ||
|
|
fd17cf2e3c | ||
|
|
d4b0999415 | ||
|
|
03f8ec89db | ||
|
|
f633ab688b | ||
|
|
808621ab22 | ||
|
|
6ed5feda2b | ||
|
|
964066c0de | ||
|
|
a913e93667 | ||
|
|
a7b99fc463 | ||
|
|
6f252f4704 | ||
|
|
b596c34bed | ||
|
|
b0cd96478c | ||
|
|
387ec712e6 | ||
|
|
f2a99d7d74 | ||
|
|
8b6b15dccc | ||
|
|
bbb72b7b6b | ||
|
|
785bad388b | ||
|
|
cf10df6c68 | ||
|
|
5b55dcbfbb | ||
|
|
e7dbbd16a5 | ||
|
|
62f0457961 | ||
|
|
8879b57b73 | ||
|
|
e49a6feabb | ||
|
|
feb2dd2835 | ||
|
|
5e34f3dc01 | ||
|
|
0031d76f2a | ||
|
|
00ee738fdd | ||
|
|
8d0a823124 | ||
|
|
9729df1756 | ||
|
|
cdb419d65e | ||
|
|
d6f9a41539 | ||
|
|
1daa258b8a | ||
|
|
560c257bd0 | ||
|
|
d7aae417b1 | ||
|
|
c39858aac0 | ||
|
|
818aed35e2 | ||
|
|
2ed524f07e | ||
|
|
5f1eefd03f | ||
|
|
522b4d7576 | ||
|
|
d6dcb08407 | ||
|
|
806c756a2d | ||
|
|
2494701347 | ||
|
|
1c10272e15 | ||
|
|
0badcf381a | ||
|
|
35558e6bd7 | ||
|
|
7659747e6f | ||
|
|
53189fb2d7 | ||
|
|
450c178d77 | ||
|
|
a20eb6df1b | ||
|
|
d73425061a | ||
|
|
0051d5ac88 | ||
|
|
76920413d9 | ||
|
|
44d9a8ba4e | ||
|
|
38dc548a87 | ||
|
|
dca6386234 | ||
|
|
2a701a1aac | ||
|
|
0cb297abc9 | ||
|
|
821a23535b | ||
|
|
bc80599178 | ||
|
|
941374b573 | ||
|
|
1886893d66 | ||
|
|
7291772b1f | ||
|
|
8e28721057 | ||
|
|
8d2120566e | ||
|
|
67341c4cbe | ||
|
|
f8188ddfee | ||
|
|
29c546b426 | ||
|
|
0d259b898b | ||
|
|
c136b80af5 | ||
|
|
83b87d53c1 | ||
|
|
1e99f1ee41 | ||
|
|
d7fe136d54 | ||
|
|
cd7a0f829f | ||
|
|
cf3f1ef284 | ||
|
|
a737864a1c | ||
|
|
c68a6805b3 | ||
|
|
bd3d5a17b4 | ||
|
|
d4b577114b | ||
|
|
713effb6e4 | ||
|
|
b92e2ab6b1 | ||
|
|
05baf94b43 | ||
|
|
a76288b99a | ||
|
|
557e95c0a3 | ||
|
|
0a83fa90bb | ||
|
|
daeb143177 | ||
|
|
9f752120c0 | ||
|
|
80a1e972fc | ||
|
|
5e65d48ffa | ||
|
|
752ef08141 | ||
|
|
070e0e8b0a | ||
|
|
2ed0728cef | ||
|
|
a79b9e9d4a | ||
|
|
24572daccc | ||
|
|
1770563fff | ||
|
|
4cd96483f6 | ||
|
|
8f1783b8a7 | ||
|
|
be72eaa327 | ||
|
|
61bded1d82 | ||
|
|
4b3937373a | ||
|
|
08bf0907d4 | ||
|
|
eb044f8787 | ||
|
|
8d0c77403c | ||
|
|
601062455c | ||
|
|
5be788ba36 | ||
|
|
281559b31b | ||
|
|
ef1aa4e5e9 | ||
|
|
7b7ac04895 | ||
|
|
60f5b2b275 | ||
|
|
c0f9d7fdb7 | ||
|
|
fc4d6f73a6 | ||
|
|
295169f9d9 | ||
|
|
1a3797a699 | ||
|
|
977e106924 | ||
|
|
8d76d4016d | ||
|
|
9f92657f76 | ||
|
|
9f341f9ce5 | ||
|
|
2098871509 | ||
|
|
3d00c86f4c | ||
|
|
90037b85d1 | ||
|
|
6ec145d4b4 | ||
|
|
40a58c392f | ||
|
|
9733cd59bb | ||
|
|
b3caf7bfa8 | ||
|
|
23fbb89805 | ||
|
|
bd1adaf7ea | ||
|
|
0c9e23fc0c | ||
|
|
f091ce64ac | ||
|
|
55a69ebea6 | ||
|
|
d6b3850562 | ||
|
|
80197cf493 | ||
|
|
8ee564c216 | ||
|
|
5bfeb60a83 | ||
|
|
1ab4a2f870 | ||
|
|
2a627059ac | ||
|
|
3f739acf24 | ||
|
|
d3454ceb94 | ||
|
|
59695c05b1 | ||
|
|
f0969c9692 | ||
|
|
18dd8154e2 | ||
|
|
4c58797607 | ||
|
|
d620f1e529 | ||
|
|
e0b436f8e1 | ||
|
|
e99d1e97de | ||
|
|
1fb74b4fa2 | ||
|
|
473f6ea9f0 | ||
|
|
0b04c52119 | ||
|
|
8383945acc | ||
|
|
fce9d51122 | ||
|
|
7c3ee84295 | ||
|
|
a8db25f48b | ||
|
|
20705ca311 | ||
|
|
af33c6b549 | ||
|
|
2b8775dff7 | ||
|
|
ea81dd9e2e | ||
|
|
7dcb102733 | ||
|
|
aa0e32060e | ||
|
|
2e8f37aca5 | ||
|
|
195d769c4b | ||
|
|
70f08b5baa | ||
|
|
9e987ac6a2 | ||
|
|
de03f172ad | ||
|
|
0078944486 | ||
|
|
d3f796ac59 | ||
|
|
3d38080d54 | ||
|
|
fe07962f9c | ||
|
|
938a72b2db | ||
|
|
a8827b1ed6 | ||
|
|
ff40cd71ac |
@@ -12,3 +12,4 @@ depcomp
|
|||||||
config.guess
|
config.guess
|
||||||
config.sub
|
config.sub
|
||||||
ltmain.sh
|
ltmain.sh
|
||||||
|
libcurl.pc
|
||||||
|
|||||||
1994
CHANGES.2004
Normal file
1994
CHANGES.2004
Normal file
File diff suppressed because it is too large
Load Diff
2
COPYING
2
COPYING
@@ -1,6 +1,6 @@
|
|||||||
COPYRIGHT AND PERMISSION NOTICE
|
COPYRIGHT AND PERMISSION NOTICE
|
||||||
|
|
||||||
Copyright (c) 1996 - 2004, Daniel Stenberg, <daniel@haxx.se>.
|
Copyright (c) 1996 - 2006, Daniel Stenberg, <daniel@haxx.se>.
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
|
|||||||
6
CVS-INFO
6
CVS-INFO
@@ -15,12 +15,6 @@ 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.$year contains changes for the particular year.
|
||||||
|
|
||||||
tests/memanalyze.pl
|
|
||||||
is for analyzing the output generated by curl if -DCURLDEBUG
|
|
||||||
is used when compiling (run configure with --enable-debug)
|
|
||||||
|
|
||||||
buildconf builds the makefiles and configure stuff
|
|
||||||
|
|
||||||
Makefile.dist is included as the root Makefile in distribution archives
|
Makefile.dist is included as the root Makefile in distribution archives
|
||||||
|
|
||||||
perl/ is a subdirectory with various perl scripts
|
perl/ is a subdirectory with various perl scripts
|
||||||
|
|||||||
20
Makefile.am
20
Makefile.am
@@ -5,7 +5,7 @@
|
|||||||
# | (__| |_| | _ <| |___
|
# | (__| |_| | _ <| |___
|
||||||
# \___|\___/|_| \_\_____|
|
# \___|\___/|_| \_\_____|
|
||||||
#
|
#
|
||||||
# Copyright (C) 1998 - 2004, Daniel Stenberg, <daniel@haxx.se>, et al.
|
# Copyright (C) 1998 - 2005, 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,14 +23,17 @@
|
|||||||
|
|
||||||
AUTOMAKE_OPTIONS = foreign
|
AUTOMAKE_OPTIONS = foreign
|
||||||
|
|
||||||
EXTRA_DIST = CHANGES COPYING maketgz reconf Makefile.dist \
|
EXTRA_DIST = CHANGES COPYING maketgz reconf Makefile.dist curl-config.in \
|
||||||
curl-config.in curl-style.el sample.emacs testcurl.sh RELEASE-NOTES
|
curl-style.el sample.emacs RELEASE-NOTES buildconf buildconf.bat libcurl.pc.in
|
||||||
|
|
||||||
bin_SCRIPTS = curl-config
|
bin_SCRIPTS = curl-config
|
||||||
|
|
||||||
SUBDIRS = lib src
|
SUBDIRS = lib src
|
||||||
DIST_SUBDIRS = $(SUBDIRS) tests include packages docs
|
DIST_SUBDIRS = $(SUBDIRS) tests include packages docs
|
||||||
|
|
||||||
|
pkgconfigdir = $(libdir)/pkgconfig
|
||||||
|
pkgconfig_DATA = libcurl.pc
|
||||||
|
|
||||||
dist-hook:
|
dist-hook:
|
||||||
rm -rf $(top_builddir)/tests/log
|
rm -rf $(top_builddir)/tests/log
|
||||||
find $(distdir) -name "*.dist" -exec rm {} \;
|
find $(distdir) -name "*.dist" -exec rm {} \;
|
||||||
@@ -48,6 +51,15 @@ pdf:
|
|||||||
|
|
||||||
check: test
|
check: test
|
||||||
|
|
||||||
|
if CROSSCOMPILING
|
||||||
|
test-full: test
|
||||||
|
test-torture: test
|
||||||
|
|
||||||
|
test:
|
||||||
|
@echo "NOTICE: we can't run the tests when cross-compiling!"
|
||||||
|
|
||||||
|
else
|
||||||
|
|
||||||
test:
|
test:
|
||||||
@(cd tests; $(MAKE) all quiet-test)
|
@(cd tests; $(MAKE) all quiet-test)
|
||||||
|
|
||||||
@@ -57,6 +69,8 @@ test-full:
|
|||||||
test-torture:
|
test-torture:
|
||||||
@(cd tests; $(MAKE) all torture-test)
|
@(cd tests; $(MAKE) all torture-test)
|
||||||
|
|
||||||
|
endif
|
||||||
|
|
||||||
#
|
#
|
||||||
# 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
|
||||||
# must contain the following line:
|
# must contain the following line:
|
||||||
|
|||||||
165
Makefile.dist
165
Makefile.dist
@@ -5,7 +5,7 @@
|
|||||||
# | (__| |_| | _ <| |___
|
# | (__| |_| | _ <| |___
|
||||||
# \___|\___/|_| \_\_____|
|
# \___|\___/|_| \_\_____|
|
||||||
#
|
#
|
||||||
# Copyright (C) 1998 - 2004, Daniel Stenberg, <daniel@haxx.se>, et al.
|
# Copyright (C) 1998 - 2005, 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
|
||||||
@@ -30,16 +30,83 @@ ssl:
|
|||||||
make
|
make
|
||||||
|
|
||||||
borland:
|
borland:
|
||||||
cd lib & make -f Makefile.b32
|
cd lib
|
||||||
cd src & make -f Makefile.b32
|
make -f Makefile.b32
|
||||||
|
cd ..\src
|
||||||
|
make -f Makefile.b32
|
||||||
|
|
||||||
|
borland-ssl:
|
||||||
|
cd lib
|
||||||
|
make -f Makefile.b32 WITH_SSL=1
|
||||||
|
cd ..\src
|
||||||
|
make -f Makefile.b32 WITH_SSL=1
|
||||||
|
|
||||||
|
borland-ssl-zlib:
|
||||||
|
cd lib
|
||||||
|
make -f Makefile.b32 WITH_SSL=1 WITH_ZLIB=1
|
||||||
|
cd ..\src
|
||||||
|
make -f Makefile.b32 WITH_SSL=1 WITH_ZLIB=1
|
||||||
|
|
||||||
|
borland-clean:
|
||||||
|
cd lib
|
||||||
|
make -f Makefile.b32 clean
|
||||||
|
cd ..\src
|
||||||
|
make -f Makefile.b32 clean
|
||||||
|
|
||||||
|
watcom:
|
||||||
|
cd lib
|
||||||
|
wmake -f Makefile.Watcom
|
||||||
|
cd ..\src
|
||||||
|
wmake -f Makefile.Watcom
|
||||||
|
|
||||||
|
watcom-clean:
|
||||||
|
cd lib
|
||||||
|
wmake -f Makefile.Watcom clean
|
||||||
|
cd ..\src
|
||||||
|
wmake -f Makefile.Watcom clean
|
||||||
|
|
||||||
mingw32:
|
mingw32:
|
||||||
cd lib & make -f Makefile.m32 ZLIB=1
|
$(MAKE) -C lib -f Makefile.m32 ZLIB=1
|
||||||
cd src & make -f Makefile.m32 ZLIB=1
|
$(MAKE) -C src -f Makefile.m32 ZLIB=1
|
||||||
|
|
||||||
mingw32-ssl:
|
mingw32-ssl:
|
||||||
cd lib & make -f Makefile.m32 SSL=1 ZLIB=1
|
$(MAKE) -C lib -f Makefile.m32 SSL=1 ZLIB=1
|
||||||
cd src & make -f Makefile.m32 SSL=1 ZLIB=1
|
$(MAKE) -C src -f Makefile.m32 SSL=1 ZLIB=1
|
||||||
|
|
||||||
|
mingw32-clean:
|
||||||
|
$(MAKE) -C lib -f Makefile.m32 clean
|
||||||
|
$(MAKE) -C src -f Makefile.m32 clean
|
||||||
|
|
||||||
|
vc-clean:
|
||||||
|
cd lib
|
||||||
|
nmake -f Makefile.vc6 clean
|
||||||
|
cd ..\src
|
||||||
|
nmake -f Makefile.vc6 clean
|
||||||
|
|
||||||
|
vc-all:
|
||||||
|
cd lib
|
||||||
|
nmake -f Makefile.vc6 cfg=release
|
||||||
|
nmake -f Makefile.vc6 cfg=release-ssl
|
||||||
|
nmake -f Makefile.vc6 cfg=release-zlib
|
||||||
|
nmake -f Makefile.vc6 cfg=release-ssl-zlib
|
||||||
|
nmake -f Makefile.vc6 cfg=release-ssl-dll
|
||||||
|
nmake -f Makefile.vc6 cfg=release-zlib-dll
|
||||||
|
nmake -f Makefile.vc6 cfg=release-ssl-dll-zlib-dll
|
||||||
|
nmake -f Makefile.vc6 cfg=release-dll
|
||||||
|
nmake -f Makefile.vc6 cfg=release-dll-ssl-dll
|
||||||
|
nmake -f Makefile.vc6 cfg=release-dll-zlib-dll
|
||||||
|
nmake -f Makefile.vc6 cfg=release-dll-ssl-dll-zlib-dll
|
||||||
|
nmake -f Makefile.vc6 cfg=debug
|
||||||
|
nmake -f Makefile.vc6 cfg=debug-ssl
|
||||||
|
nmake -f Makefile.vc6 cfg=debug-zlib
|
||||||
|
nmake -f Makefile.vc6 cfg=debug-ssl-zlib
|
||||||
|
nmake -f Makefile.vc6 cfg=debug-ssl-dll
|
||||||
|
nmake -f Makefile.vc6 cfg=debug-zlib-dll
|
||||||
|
nmake -f Makefile.vc6 cfg=debug-ssl-dll-zlib-dll
|
||||||
|
nmake -f Makefile.vc6 cfg=debug-dll
|
||||||
|
nmake -f Makefile.vc6 cfg=debug-dll-ssl-dll
|
||||||
|
nmake -f Makefile.vc6 cfg=debug-dll-zlib-dll
|
||||||
|
nmake -f Makefile.vc6 cfg=debug-dll-ssl-dll-zlib-dll
|
||||||
|
|
||||||
vc:
|
vc:
|
||||||
cd lib
|
cd lib
|
||||||
@@ -47,27 +114,75 @@ vc:
|
|||||||
cd ..\src
|
cd ..\src
|
||||||
nmake /f Makefile.vc6
|
nmake /f Makefile.vc6
|
||||||
|
|
||||||
|
vc-zlib:
|
||||||
|
cd lib
|
||||||
|
nmake /f Makefile.vc6 cfg=release-zlib
|
||||||
|
cd ..\src
|
||||||
|
nmake /f Makefile.vc6 cfg=release-zlib
|
||||||
|
|
||||||
vc-ssl:
|
vc-ssl:
|
||||||
cd lib
|
cd lib
|
||||||
nmake /f Makefile.vc6 cfg=release-ssl
|
nmake /f Makefile.vc6 cfg=release-ssl
|
||||||
cd ..\src
|
cd ..\src
|
||||||
nmake /f Makefile.vc6 cfg=release-ssl
|
nmake /f Makefile.vc6 cfg=release-ssl
|
||||||
|
|
||||||
|
vc-ssl-zlib:
|
||||||
|
cd lib
|
||||||
|
nmake /f Makefile.vc6 cfg=release-ssl-zlib
|
||||||
|
cd ..\src
|
||||||
|
nmake /f Makefile.vc6 cfg=release-ssl-zlib
|
||||||
|
|
||||||
vc-ssl-dll:
|
vc-ssl-dll:
|
||||||
cd lib
|
cd lib
|
||||||
nmake /f Makefile.vc6 cfg=release-ssl-dll
|
nmake /f Makefile.vc6 cfg=release-ssl-dll
|
||||||
cd ..\src
|
cd ..\src
|
||||||
nmake /f Makefile.vc6
|
nmake /f Makefile.vc6 cfg=release-ssl-dll
|
||||||
|
|
||||||
vc-libcurl-ssl-dll:
|
vc-dll-ssl-dll:
|
||||||
cd lib
|
cd lib
|
||||||
nmake /f Makefile.vc6 cfg=release-libcurl-ssl-dll
|
nmake /f Makefile.vc6 cfg=release-dll-ssl-dll
|
||||||
cd ..\src
|
cd ..\src
|
||||||
nmake /f Makefile.vc6
|
nmake /f Makefile.vc6 cfg=release-dll-ssl-dll
|
||||||
|
|
||||||
|
vc-dll:
|
||||||
|
cd lib
|
||||||
|
nmake /f Makefile.vc6 cfg=release-dll
|
||||||
|
cd ..\src
|
||||||
|
nmake /f Makefile.vc6 cfg=release-dll
|
||||||
|
|
||||||
|
vc-dll-zlib-dll:
|
||||||
|
cd lib
|
||||||
|
nmake /f Makefile.vc6 cfg=release-dll-zlib-dll
|
||||||
|
cd ..\src
|
||||||
|
nmake /f Makefile.vc6 cfg=release-dll-zlib-dll
|
||||||
|
|
||||||
|
vc-dll-ssl-dll-zlib-dll:
|
||||||
|
cd lib
|
||||||
|
nmake /f Makefile.vc6 cfg=release-dll-ssl-dll-zlib-dll
|
||||||
|
cd ..\src
|
||||||
|
nmake /f Makefile.vc6 cfg=release-dll-ssl-dll-zlib-dll
|
||||||
|
|
||||||
|
vc-ssl-dll-zlib-dll:
|
||||||
|
cd lib
|
||||||
|
nmake /f Makefile.vc6 cfg=release-ssl-dll-zlib-dll
|
||||||
|
cd ..\src
|
||||||
|
nmake /f Makefile.vc6 cfg=release-ssl-dll-zlib-dll
|
||||||
|
|
||||||
|
vc-zlib-dll:
|
||||||
|
cd lib
|
||||||
|
nmake /f Makefile.vc6 cfg=release-zlib-dll
|
||||||
|
cd ..\src
|
||||||
|
nmake /f Makefile.vc6 cfg=release-zlib-dll
|
||||||
|
|
||||||
|
vc-sspi:
|
||||||
|
cd lib
|
||||||
|
nmake /f Makefile.vc6 cfg=release WINDOWS_SSPI=1
|
||||||
|
cd ..\src
|
||||||
|
nmake /f Makefile.vc6 cfg=release WINDOWS_SSPI=1
|
||||||
|
|
||||||
djgpp:
|
djgpp:
|
||||||
make -C lib -f Makefile.dj
|
$(MAKE) -C lib -f Makefile.dj
|
||||||
make -C src -f Makefile.dj
|
$(MAKE) -C src -f Makefile.dj
|
||||||
|
|
||||||
cygwin:
|
cygwin:
|
||||||
./configure
|
./configure
|
||||||
@@ -82,8 +197,28 @@ amiga:
|
|||||||
cd ./src && make -f makefile.amiga
|
cd ./src && make -f makefile.amiga
|
||||||
|
|
||||||
netware:
|
netware:
|
||||||
cd lib && make -f Makefile.netware
|
$(MAKE) -C lib -f Makefile.netware
|
||||||
cd src && make -f Makefile.netware
|
$(MAKE) -C src -f Makefile.netware
|
||||||
|
|
||||||
|
netware-ares:
|
||||||
|
$(MAKE) -C lib -f Makefile.netware WITH_ARES=1
|
||||||
|
$(MAKE) -C src -f Makefile.netware WITH_ARES=1
|
||||||
|
|
||||||
|
netware-ssl:
|
||||||
|
$(MAKE) -C lib -f Makefile.netware WITH_SSL=1
|
||||||
|
$(MAKE) -C src -f Makefile.netware WITH_SSL=1
|
||||||
|
|
||||||
|
netware-ssl-zlib:
|
||||||
|
$(MAKE) -C lib -f Makefile.netware WITH_SSL=1 WITH_ZLIB=1
|
||||||
|
$(MAKE) -C src -f Makefile.netware WITH_SSL=1 WITH_ZLIB=1
|
||||||
|
|
||||||
|
netware-zlib:
|
||||||
|
$(MAKE) -C lib -f Makefile.netware WITH_ZLIB=1
|
||||||
|
$(MAKE) -C src -f Makefile.netware WITH_ZLIB=1
|
||||||
|
|
||||||
|
netware-clean:
|
||||||
|
$(MAKE) -C lib -f Makefile.netware clean
|
||||||
|
$(MAKE) -C src -f Makefile.netware clean
|
||||||
|
|
||||||
unix: all
|
unix: all
|
||||||
|
|
||||||
|
|||||||
62
README
62
README
@@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
README
|
README
|
||||||
|
|
||||||
Curl is a command line tool for transfering data specified with URL
|
Curl is a command line tool for transferring data specified with URL
|
||||||
syntax. Find out how to use Curl by reading the curl.1 man page or the
|
syntax. Find out how to use Curl by reading the curl.1 man page or the
|
||||||
MANUAL document. Find out how to install Curl by reading the INSTALL
|
MANUAL document. Find out how to install Curl by reading the INSTALL
|
||||||
document.
|
document.
|
||||||
@@ -26,39 +26,41 @@ CONTACT
|
|||||||
If you have problems, questions, ideas or suggestions, please contact us
|
If you have problems, questions, ideas or suggestions, please contact us
|
||||||
by posting to a suitable mailing list. See http://curl.haxx.se/mail/
|
by posting to a suitable mailing list. See http://curl.haxx.se/mail/
|
||||||
|
|
||||||
Many major contributors to the project are listed in the THANKS document.
|
All contributors to the project are listed in the THANKS document.
|
||||||
|
|
||||||
WEB SITE
|
WEB SITE
|
||||||
|
|
||||||
Visit the curl web site or mirrors for the latest news:
|
Visit the curl web site or mirrors for the latest news and downloads:
|
||||||
|
|
||||||
Sweden -- http://curl.haxx.se/
|
Sweden http://curl.haxx.se/
|
||||||
Australia -- http://curl.planetmirror.com/
|
Australia http://curl.planetmirror.com/
|
||||||
Denmark -- http://curl.cofman.dk/
|
Austria http://curl.gds.tuwien.ac.at/
|
||||||
Estonia -- http://curl.wildyou.net/
|
Denmark http://curl.cofman.dk/
|
||||||
Germany -- http://curl.mirror.at.stealer.net/
|
France http://curl.fastmirror.net/
|
||||||
Germany -- http://curl.netmirror.org/
|
Germany http://curl.freemirror.de/
|
||||||
Russia -- http://curl.tsuren.net/
|
Germany http://curl.mirror-server.net/
|
||||||
Thailand -- http://curl.siamu.ac.th/
|
Germany http://curl.mirror.at.stealer.net/
|
||||||
US (CA) -- http://curl.mirror.redwire.net/
|
Germany http://curl.mirroring.de/
|
||||||
US -- http://curl.signal42.com/
|
Germany http://curl.miscellaneousmirror.org/
|
||||||
|
Germany http://curl.mons-new-media.de/
|
||||||
DOWNLOAD
|
Germany http://curl.storemypix.com/
|
||||||
|
Germany http://curl.triplemind.com/
|
||||||
The official download mirror sites are:
|
Hong Kong http://curl.hkmirror.org/
|
||||||
|
Japan http://curl.s-lines.net/
|
||||||
Australia -- http://curl.planetmirror.com/download.html
|
Netherlands http://curl.nedmirror.nl/
|
||||||
Estonia -- http://curl.wildyou.net/download.html
|
Russia http://curl.tsuren.net/
|
||||||
Germany -- ftp://ftp.fu-berlin.de/pub/unix/network/curl/
|
Taiwan http://curl.cs.pu.edu.tw/
|
||||||
Germany -- http://curl.mirror.at.stealer.net/download.html
|
Thailand http://curl.siamu.ac.th/
|
||||||
Germany -- http://curl.netmirror.org/download.html
|
US (AZ) http://curl.islandofpoker.com/
|
||||||
Germany -- http://www.mirrorspace.org/curl/
|
US (CA) http://curl.meulie.net/
|
||||||
Hongkong -- http://www.execve.net/curl/
|
US (CA) http://curl.mirror.redwire.net/
|
||||||
Russia -- http://curl.tsuren.net/download.html
|
US (CA) http://curl.mirrormonster.com/
|
||||||
Sweden -- ftp://ftp.sunet.se/pub/www/utilities/curl/
|
US (CA) http://curl.signal42.com/
|
||||||
Sweden -- http://cool.haxx.se/curl/
|
US (FL) http://curl.hoxt.com/
|
||||||
Thailand -- http://curl.siamu.ac.th/download.html
|
US (TX) http://curl.109k.com/
|
||||||
US (CA) -- http://curl.mirror.redwire.net/download.html
|
US (TX) http://curl.hostingzero.com/
|
||||||
|
US (TX) http://curl.mirrors.cyberservers.net/
|
||||||
|
US (TX) http://curl.seekmeup.com/
|
||||||
|
|
||||||
CVS
|
CVS
|
||||||
|
|
||||||
|
|||||||
@@ -1,62 +1,40 @@
|
|||||||
Curl and libcurl 7.12.0.
|
Curl and libcurl 7.15.3
|
||||||
|
|
||||||
Public curl release number: 81
|
Public curl release number: 93
|
||||||
Releases counted from the very beginning: 108
|
Releases counted from the very beginning: 120
|
||||||
Available command line options: 96
|
Available command line options: 112
|
||||||
Available curl_easy_setopt() options: 113
|
Available curl_easy_setopt() options: 129
|
||||||
Number of public functions in libcurl: 36
|
Number of public functions in libcurl: 46
|
||||||
|
Amount of public web site mirrors: 31
|
||||||
A special thanks to:
|
Number of known libcurl bindings: 32
|
||||||
|
Number of contributors: 487
|
||||||
archivas.com and Alan Pinstein, for paying me to focus on their requests
|
|
||||||
|
|
||||||
This release includes the following changes:
|
This release includes the following changes:
|
||||||
|
|
||||||
o added ability to "upload" to file:// URLs
|
o added docs for --ftp-method and CURLOPT_FTP_FILEMETHOD
|
||||||
o added curl_global_init_mem()
|
|
||||||
o removed curl_formparse()
|
|
||||||
o the MSVC project file in the release archive is automatically built
|
|
||||||
o curl --proxy-digest is a new command line option
|
|
||||||
o the Windows version of libcurl can use wldap32.dll for LDAP
|
|
||||||
o added curl_easy_strerror(), curl_multi_strerror() and curl_share_strerror()
|
|
||||||
o IPv6-enabled Windows hosts now resolves names threaded/asynch as well
|
|
||||||
o configure --with-libidn can be used to point out the root dir of a libidn
|
|
||||||
installation (version 0.4.5 or later) for curl to use, then libcurl can
|
|
||||||
resolve and use IDNA names (domain names with "international" letters)
|
|
||||||
|
|
||||||
This release includes the following bugfixes:
|
This release includes the following bugfixes:
|
||||||
|
|
||||||
o incoming cookies with domains set with a prefixed dot now works better
|
o TFTP Packet Buffer Overflow Vulnerability:
|
||||||
o CURLOPT_COOKIEFILE and CURLOPT_COOKIE can be used in the same request
|
http://curl.haxx.se/docs/adv_20060320.html
|
||||||
o improved peer certificate name verification
|
o properly detecting problems with sending the FTP command USER
|
||||||
o allocation failures cause no leaks nor crashes
|
o wrong error message shown when certificate verification failed
|
||||||
o the progress meter display now handles file sizes up to full 8 exabytes
|
o multi-part formpost with multi interface crash
|
||||||
(which is as high a signed 64 bit number can reach)
|
o the CURLFTPSSL_CONTROL setting for CURLOPT_FTP_SSL is acknowledged
|
||||||
o general HTTP authentication improvements
|
o "SSL: couldn't set callback" is now treated as a less serious problem
|
||||||
o HTTP Digest authentication with the proxy works
|
o Interix build fix
|
||||||
o mulipart formposting with -F and file names with spaces work again
|
o fixed curl "hang" when out of file handles at start
|
||||||
o curl_easy_duphandle() now works when ares-enabled
|
o prevent FTP uploads to URLs with trailing slash
|
||||||
o HTTP Digest authentication works a lot more like the RFC says
|
|
||||||
o curl works with telnet and stdin properly on Windows
|
|
||||||
o configure --without-ssl works even when pkg-config has OpenSSL details
|
|
||||||
o src/hugehelp.c builds correct again in non-configure build environments
|
|
||||||
|
|
||||||
Other curl-related news since the previous public release:
|
Other curl-related news since the previous public release:
|
||||||
|
|
||||||
o The CVS repository was moved to cool.haxx.se
|
o pycurl-7.15.2 has been released: http://pycurl.sf.net
|
||||||
o AdacURL 7.11.2 was released: http://www.almroth.com/adacurl/
|
o http://curl.download.nextag.com/ is a new US curl web mirror!
|
||||||
o PycURL 7.11.3 was released: http://pycurl.sourceforge.net
|
|
||||||
o A new German download mirror: http://www.mirrorspace.org/curl/
|
|
||||||
o Two new mailing lists are available:
|
|
||||||
curl-and-python - for python programmers using pycurl or curl
|
|
||||||
curl-perl-commmits - receives commits done to the curl-perl CVS module
|
|
||||||
|
|
||||||
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:
|
||||||
|
|
||||||
Gisle Vanem, Tommy Tam, Luca Altea, James Bursa, Mihai Ionescu, Michael
|
Gisle Vanem, Dan Fandrich, Thomas Klausner, Todd Vierling, Peter Heuchert,
|
||||||
Benedict, Andr<64>s Garc<72>a, Joe Halpin, Seshubabu Pasam, Peter Sylvester, Robert
|
Markus Koetter, David McCreedy, Tor Arntsen
|
||||||
D. Young, Jesse Noller, David Byron, Massimiliano Ziccardi, Mohun Biswas,
|
|
||||||
Renaud Duhaut
|
|
||||||
|
|
||||||
Thanks! (and sorry if I forgot to mention someone)
|
Thanks! (and sorry if I forgot to mention someone)
|
||||||
|
|||||||
13
TODO-RELEASE
13
TODO-RELEASE
@@ -1,13 +1,4 @@
|
|||||||
Issues not sorted in any particular order.
|
To get fixed in 7.15.2 (planned release: Febrary 2006)
|
||||||
#[num] refers to bug report numbers.
|
|
||||||
UNASSIGNED means that no person has publicly stated to work on the issue.
|
|
||||||
DELETE means the issue is subject for dismissal
|
|
||||||
|
|
||||||
To get fixed in 7.12.0 (planned release: June 2004)
|
|
||||||
======================
|
======================
|
||||||
|
|
||||||
To get fixed in 7.12.1 (planned release: August 2004)
|
65 -
|
||||||
======================
|
|
||||||
|
|
||||||
* FTP 3rd party transfers
|
|
||||||
|
|
||||||
|
|||||||
714
acinclude.m4
714
acinclude.m4
@@ -1,3 +1,393 @@
|
|||||||
|
#***************************************************************************
|
||||||
|
# _ _ ____ _
|
||||||
|
# Project ___| | | | _ \| |
|
||||||
|
# / __| | | | |_) | |
|
||||||
|
# | (__| |_| | _ <| |___
|
||||||
|
# \___|\___/|_| \_\_____|
|
||||||
|
#
|
||||||
|
# Copyright (C) 1998 - 2005, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
|
#
|
||||||
|
# This software is licensed as described in the file COPYING, which
|
||||||
|
# you should have received as part of this distribution. The terms
|
||||||
|
# are also available at http://curl.haxx.se/docs/copyright.html.
|
||||||
|
#
|
||||||
|
# You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||||
|
# copies of the Software, and permit persons to whom the Software is
|
||||||
|
# furnished to do so, under the terms of the COPYING file.
|
||||||
|
#
|
||||||
|
# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||||
|
# KIND, either express or implied.
|
||||||
|
#
|
||||||
|
# $Id$
|
||||||
|
###########################################################################
|
||||||
|
|
||||||
|
dnl CURL_CHECK_HEADER_WINDOWS
|
||||||
|
dnl -------------------------------------------------
|
||||||
|
dnl Check for compilable and valid windows.h header
|
||||||
|
|
||||||
|
AC_DEFUN([CURL_CHECK_HEADER_WINDOWS], [
|
||||||
|
AC_CACHE_CHECK([for windows.h], [ac_cv_header_windows_h], [
|
||||||
|
AC_COMPILE_IFELSE([
|
||||||
|
AC_LANG_PROGRAM([
|
||||||
|
#undef inline
|
||||||
|
#ifndef WIN32_LEAN_AND_MEAN
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#endif
|
||||||
|
#include <windows.h>
|
||||||
|
],[
|
||||||
|
int dummy=2*WINVER;
|
||||||
|
])
|
||||||
|
],[
|
||||||
|
ac_cv_header_windows_h="yes"
|
||||||
|
],[
|
||||||
|
ac_cv_header_windows_h="no"
|
||||||
|
])
|
||||||
|
])
|
||||||
|
if test "x$ac_cv_header_windows_h" = "xyes"; then
|
||||||
|
AC_DEFINE_UNQUOTED(HAVE_WINDOWS_H, 1,
|
||||||
|
[Define to 1 if you have the windows.h header file.])
|
||||||
|
AC_DEFINE_UNQUOTED(WIN32_LEAN_AND_MEAN, 1,
|
||||||
|
[Define to avoid automatic inclusion of winsock.h])
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
|
||||||
|
|
||||||
|
dnl CURL_CHECK_HEADER_WINSOCK
|
||||||
|
dnl -------------------------------------------------
|
||||||
|
dnl Check for compilable and valid winsock.h header
|
||||||
|
|
||||||
|
AC_DEFUN([CURL_CHECK_HEADER_WINSOCK], [
|
||||||
|
AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl
|
||||||
|
AC_CACHE_CHECK([for winsock.h], [ac_cv_header_winsock_h], [
|
||||||
|
AC_COMPILE_IFELSE([
|
||||||
|
AC_LANG_PROGRAM([
|
||||||
|
#undef inline
|
||||||
|
#ifndef WIN32_LEAN_AND_MEAN
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#endif
|
||||||
|
#include <windows.h>
|
||||||
|
#include <winsock.h>
|
||||||
|
],[
|
||||||
|
int dummy=WSACleanup();
|
||||||
|
])
|
||||||
|
],[
|
||||||
|
ac_cv_header_winsock_h="yes"
|
||||||
|
],[
|
||||||
|
ac_cv_header_winsock_h="no"
|
||||||
|
])
|
||||||
|
])
|
||||||
|
if test "x$ac_cv_header_winsock_h" = "xyes"; then
|
||||||
|
AC_DEFINE_UNQUOTED(HAVE_WINSOCK_H, 1,
|
||||||
|
[Define to 1 if you have the winsock.h header file.])
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
|
||||||
|
|
||||||
|
dnl CURL_CHECK_HEADER_WINSOCK2
|
||||||
|
dnl -------------------------------------------------
|
||||||
|
dnl Check for compilable and valid winsock2.h header
|
||||||
|
|
||||||
|
AC_DEFUN([CURL_CHECK_HEADER_WINSOCK2], [
|
||||||
|
AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl
|
||||||
|
AC_CACHE_CHECK([for winsock2.h], [ac_cv_header_winsock2_h], [
|
||||||
|
AC_COMPILE_IFELSE([
|
||||||
|
AC_LANG_PROGRAM([
|
||||||
|
#undef inline
|
||||||
|
#ifndef WIN32_LEAN_AND_MEAN
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#endif
|
||||||
|
#include <windows.h>
|
||||||
|
#include <winsock2.h>
|
||||||
|
],[
|
||||||
|
int dummy=2*IPPROTO_ESP;
|
||||||
|
])
|
||||||
|
],[
|
||||||
|
ac_cv_header_winsock2_h="yes"
|
||||||
|
],[
|
||||||
|
ac_cv_header_winsock2_h="no"
|
||||||
|
])
|
||||||
|
])
|
||||||
|
if test "x$ac_cv_header_winsock2_h" = "xyes"; then
|
||||||
|
AC_DEFINE_UNQUOTED(HAVE_WINSOCK2_H, 1,
|
||||||
|
[Define to 1 if you have the winsock2.h header file.])
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
|
||||||
|
|
||||||
|
dnl CURL_CHECK_HEADER_WS2TCPIP
|
||||||
|
dnl -------------------------------------------------
|
||||||
|
dnl Check for compilable and valid ws2tcpip.h header
|
||||||
|
|
||||||
|
AC_DEFUN([CURL_CHECK_HEADER_WS2TCPIP], [
|
||||||
|
AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl
|
||||||
|
AC_CACHE_CHECK([for ws2tcpip.h], [ac_cv_header_ws2tcpip_h], [
|
||||||
|
AC_COMPILE_IFELSE([
|
||||||
|
AC_LANG_PROGRAM([
|
||||||
|
#undef inline
|
||||||
|
#ifndef WIN32_LEAN_AND_MEAN
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#endif
|
||||||
|
#include <windows.h>
|
||||||
|
#include <winsock2.h>
|
||||||
|
#include <ws2tcpip.h>
|
||||||
|
],[
|
||||||
|
int dummy=2*IP_PKTINFO;
|
||||||
|
])
|
||||||
|
],[
|
||||||
|
ac_cv_header_ws2tcpip_h="yes"
|
||||||
|
],[
|
||||||
|
ac_cv_header_ws2tcpip_h="no"
|
||||||
|
])
|
||||||
|
])
|
||||||
|
if test "x$ac_cv_header_ws2tcpip_h" = "xyes"; then
|
||||||
|
AC_DEFINE_UNQUOTED(HAVE_WS2TCPIP_H, 1,
|
||||||
|
[Define to 1 if you have the ws2tcpip.h header file.])
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
|
||||||
|
|
||||||
|
dnl CURL_CHECK_TYPE_SOCKLEN_T
|
||||||
|
dnl -------------------------------------------------
|
||||||
|
dnl Check for existing socklen_t type, and provide
|
||||||
|
dnl an equivalent type if socklen_t not available
|
||||||
|
|
||||||
|
AC_DEFUN([CURL_CHECK_TYPE_SOCKLEN_T], [
|
||||||
|
AC_REQUIRE([CURL_CHECK_HEADER_WS2TCPIP])dnl
|
||||||
|
AC_CHECK_TYPE([socklen_t], ,[
|
||||||
|
AC_CACHE_CHECK([for socklen_t equivalent],
|
||||||
|
[curl_cv_socklen_t_equiv], [
|
||||||
|
curl_cv_socklen_t_equiv="unknown"
|
||||||
|
for arg2 in "struct sockaddr" void; do
|
||||||
|
for t in int size_t unsigned long "unsigned long"; do
|
||||||
|
AC_COMPILE_IFELSE([
|
||||||
|
AC_LANG_PROGRAM([
|
||||||
|
#undef inline
|
||||||
|
#ifdef HAVE_WINDOWS_H
|
||||||
|
#ifndef WIN32_LEAN_AND_MEAN
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#endif
|
||||||
|
#include <windows.h>
|
||||||
|
#ifdef HAVE_WINSOCK2_H
|
||||||
|
#include <winsock2.h>
|
||||||
|
#else
|
||||||
|
#ifdef HAVE_WINSOCK_H
|
||||||
|
#include <winsock.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#ifdef HAVE_SYS_TYPES_H
|
||||||
|
#include <sys/types.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
int getpeername (int, $arg2 *, $t *);
|
||||||
|
],[
|
||||||
|
$t len=0;
|
||||||
|
getpeername(0,0,&len);
|
||||||
|
])
|
||||||
|
],[
|
||||||
|
curl_cv_socklen_t_equiv="$t"
|
||||||
|
break 2
|
||||||
|
])
|
||||||
|
done
|
||||||
|
done
|
||||||
|
])
|
||||||
|
if test "$curl_cv_socklen_t_equiv" = "unknown"; then
|
||||||
|
AC_MSG_ERROR([Cannot find a type to use in place of socklen_t])
|
||||||
|
else
|
||||||
|
AC_DEFINE_UNQUOTED(socklen_t, $curl_cv_socklen_t_equiv,
|
||||||
|
[type to use in place of socklen_t if not defined])
|
||||||
|
fi
|
||||||
|
],[
|
||||||
|
#undef inline
|
||||||
|
#ifdef HAVE_WINDOWS_H
|
||||||
|
#ifndef WIN32_LEAN_AND_MEAN
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#endif
|
||||||
|
#include <windows.h>
|
||||||
|
#ifdef HAVE_WINSOCK2_H
|
||||||
|
#include <winsock2.h>
|
||||||
|
#ifdef HAVE_WS2TCPIP_H
|
||||||
|
#include <ws2tcpip.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#ifdef HAVE_SYS_TYPES_H
|
||||||
|
#include <sys/types.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
])
|
||||||
|
])
|
||||||
|
|
||||||
|
|
||||||
|
dnl CURL_CHECK_FUNC_GETNAMEINFO
|
||||||
|
dnl -------------------------------------------------
|
||||||
|
dnl Test if the getnameinfo function is available,
|
||||||
|
dnl and check the types of five of its arguments.
|
||||||
|
dnl If the function succeeds HAVE_GETNAMEINFO will be
|
||||||
|
dnl defined, defining the types of the arguments in
|
||||||
|
dnl GETNAMEINFO_TYPE_ARG1, GETNAMEINFO_TYPE_ARG2,
|
||||||
|
dnl GETNAMEINFO_TYPE_ARG46 and GETNAMEINFO_TYPE_ARG7.
|
||||||
|
dnl This function is experimental and its results shall
|
||||||
|
dnl not be trusted while this notice is in place ------
|
||||||
|
|
||||||
|
AC_DEFUN([CURL_CHECK_FUNC_GETNAMEINFO], [
|
||||||
|
AC_REQUIRE([CURL_CHECK_HEADER_WS2TCPIP])dnl
|
||||||
|
AC_REQUIRE([CURL_CHECK_TYPE_SOCKLEN_T])dnl
|
||||||
|
AC_CHECK_HEADERS(sys/types.h sys/socket.h netdb.h)
|
||||||
|
#
|
||||||
|
AC_MSG_CHECKING([for getnameinfo])
|
||||||
|
AC_LINK_IFELSE([
|
||||||
|
AC_LANG_FUNC_LINK_TRY([getnameinfo])
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT([yes])
|
||||||
|
curl_cv_getnameinfo="yes"
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT([no])
|
||||||
|
curl_cv_getnameinfo="no"
|
||||||
|
])
|
||||||
|
#
|
||||||
|
if test "$curl_cv_getnameinfo" != "yes"; then
|
||||||
|
AC_MSG_CHECKING([deeper for getnameinfo])
|
||||||
|
AC_TRY_LINK([
|
||||||
|
],[
|
||||||
|
getnameinfo();
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT([yes])
|
||||||
|
curl_cv_getnameinfo="yes"
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT([but still no])
|
||||||
|
curl_cv_getnameinfo="no"
|
||||||
|
])
|
||||||
|
fi
|
||||||
|
#
|
||||||
|
if test "$curl_cv_getnameinfo" != "yes"; then
|
||||||
|
AC_MSG_CHECKING([deeper and deeper for getnameinfo])
|
||||||
|
AC_TRY_LINK([
|
||||||
|
#undef inline
|
||||||
|
#ifdef HAVE_WINDOWS_H
|
||||||
|
#ifndef WIN32_LEAN_AND_MEAN
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#endif
|
||||||
|
#include <windows.h>
|
||||||
|
#ifdef HAVE_WINSOCK2_H
|
||||||
|
#include <winsock2.h>
|
||||||
|
#ifdef HAVE_WS2TCPIP_H
|
||||||
|
#include <ws2tcpip.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#ifdef HAVE_SYS_TYPES_H
|
||||||
|
#include <sys/types.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_NETDB_H
|
||||||
|
#include <netdb.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
],[
|
||||||
|
getnameinfo(0, 0, 0, 0, 0, 0, 0);
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT([yes])
|
||||||
|
curl_cv_getnameinfo="yes"
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT([but still no])
|
||||||
|
curl_cv_getnameinfo="no"
|
||||||
|
])
|
||||||
|
fi
|
||||||
|
#
|
||||||
|
if test "$curl_cv_getnameinfo" = "yes"; then
|
||||||
|
AC_CACHE_CHECK([types of arguments for getnameinfo],
|
||||||
|
[curl_cv_func_getnameinfo_args], [
|
||||||
|
curl_cv_func_getnameinfo_args="unknown"
|
||||||
|
for gni_arg1 in 'struct sockaddr *' 'const struct sockaddr *' 'void *'; do
|
||||||
|
for gni_arg2 in 'socklen_t' 'size_t' 'int'; do
|
||||||
|
for gni_arg46 in 'size_t' 'int' 'socklen_t' 'unsigned int' 'DWORD'; do
|
||||||
|
for gni_arg7 in 'int' 'unsigned int'; do
|
||||||
|
AC_COMPILE_IFELSE([
|
||||||
|
AC_LANG_PROGRAM([
|
||||||
|
#undef inline
|
||||||
|
#ifdef HAVE_WINDOWS_H
|
||||||
|
#ifndef WIN32_LEAN_AND_MEAN
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#endif
|
||||||
|
#if (!defined(_WIN32_WINNT)) || (_WIN32_WINNT < 0x0501)
|
||||||
|
#undef _WIN32_WINNT
|
||||||
|
#define _WIN32_WINNT 0x0501
|
||||||
|
#endif
|
||||||
|
#include <windows.h>
|
||||||
|
#ifdef HAVE_WINSOCK2_H
|
||||||
|
#include <winsock2.h>
|
||||||
|
#ifdef HAVE_WS2TCPIP_H
|
||||||
|
#include <ws2tcpip.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#define GNICALLCONV WSAAPI
|
||||||
|
#else
|
||||||
|
#ifdef HAVE_SYS_TYPES_H
|
||||||
|
#include <sys/types.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_NETDB_H
|
||||||
|
#include <netdb.h>
|
||||||
|
#endif
|
||||||
|
#define GNICALLCONV
|
||||||
|
#endif
|
||||||
|
extern int GNICALLCONV getnameinfo($gni_arg1, $gni_arg2,
|
||||||
|
char *, $gni_arg46,
|
||||||
|
char *, $gni_arg46,
|
||||||
|
$gni_arg7);
|
||||||
|
],[
|
||||||
|
$gni_arg2 salen=0;
|
||||||
|
$gni_arg46 hostlen=0;
|
||||||
|
$gni_arg46 servlen=0;
|
||||||
|
$gni_arg7 flags=0;
|
||||||
|
int res = getnameinfo(0, salen, 0, hostlen, 0, servlen, flags);
|
||||||
|
])
|
||||||
|
],[
|
||||||
|
curl_cv_func_getnameinfo_args="$gni_arg1,$gni_arg2,$gni_arg46,$gni_arg7"
|
||||||
|
break 4
|
||||||
|
])
|
||||||
|
done
|
||||||
|
done
|
||||||
|
done
|
||||||
|
done
|
||||||
|
]) # AC_CACHE_CHECK
|
||||||
|
if test "$curl_cv_func_getnameinfo_args" = "unknown"; then
|
||||||
|
AC_MSG_WARN([Cannot find proper types to use for getnameinfo args])
|
||||||
|
AC_MSG_WARN([HAVE_GETNAMEINFO will not be defined])
|
||||||
|
else
|
||||||
|
gni_prev_IFS=$IFS; IFS=','
|
||||||
|
set dummy `echo "$curl_cv_func_getnameinfo_args" | sed 's/\*/\*/g'`
|
||||||
|
IFS=$gni_prev_IFS
|
||||||
|
shift
|
||||||
|
AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG1, $[1],
|
||||||
|
[Define to the type of arg 1 for getnameinfo.])
|
||||||
|
AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG2, $[2],
|
||||||
|
[Define to the type of arg 2 for getnameinfo.])
|
||||||
|
AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG46, $[3],
|
||||||
|
[Define to the type of args 4 and 6 for getnameinfo.])
|
||||||
|
AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG7, $[4],
|
||||||
|
[Define to the type of arg 7 for getnameinfo.])
|
||||||
|
AC_DEFINE_UNQUOTED(HAVE_GETNAMEINFO, 1,
|
||||||
|
[Define to 1 if you have the getnameinfo function.])
|
||||||
|
ac_cv_func_getnameinfo="yes"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
]) # AC_DEFUN
|
||||||
|
|
||||||
|
|
||||||
|
dnl CURL_CHECK_NONBLOCKING_SOCKET
|
||||||
|
dnl -------------------------------------------------
|
||||||
dnl Check for how to set a socket to non-blocking state. There seems to exist
|
dnl Check for how to set a socket to non-blocking state. There seems to exist
|
||||||
dnl four known different ways, with the one used almost everywhere being POSIX
|
dnl four known different ways, with the one used almost everywhere being POSIX
|
||||||
dnl and XPG3, while the other different ways for different systems (old BSD,
|
dnl and XPG3, while the other different ways for different systems (old BSD,
|
||||||
@@ -59,12 +449,27 @@ dnl FIONBIO test was also bad
|
|||||||
dnl the code was bad, try a different program now, test 3
|
dnl the code was bad, try a different program now, test 3
|
||||||
|
|
||||||
AC_TRY_COMPILE([
|
AC_TRY_COMPILE([
|
||||||
/* headers for ioctlsocket test (cygwin?) */
|
/* headers for ioctlsocket test (Windows) */
|
||||||
|
#undef inline
|
||||||
|
#ifdef HAVE_WINDOWS_H
|
||||||
|
#ifndef WIN32_LEAN_AND_MEAN
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#endif
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
#ifdef HAVE_WINSOCK2_H
|
||||||
|
#include <winsock2.h>
|
||||||
|
#else
|
||||||
|
#ifdef HAVE_WINSOCK_H
|
||||||
|
#include <winsock.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
],[
|
],[
|
||||||
/* ioctlsocket source code */
|
/* ioctlsocket source code */
|
||||||
int socket;
|
SOCKET sd;
|
||||||
unsigned long flags = ioctlsocket(socket, FIONBIO, &flags);
|
unsigned long flags = 0;
|
||||||
|
sd = socket(0, 0, 0);
|
||||||
|
ioctlsocket(sd, FIONBIO, &flags);
|
||||||
],[
|
],[
|
||||||
dnl ioctlsocket test was good
|
dnl ioctlsocket test was good
|
||||||
nonblock="ioctlsocket"
|
nonblock="ioctlsocket"
|
||||||
@@ -87,9 +492,7 @@ AC_DEFINE(HAVE_IOCTLSOCKET_CASE, 1, [use Ioctlsocket() for non-blocking sockets]
|
|||||||
dnl Ioctlsocket didnt compile, do test 5!
|
dnl Ioctlsocket didnt compile, do test 5!
|
||||||
AC_TRY_COMPILE([
|
AC_TRY_COMPILE([
|
||||||
/* headers for SO_NONBLOCK test (BeOS) */
|
/* headers for SO_NONBLOCK test (BeOS) */
|
||||||
#include <sys/types.h>
|
#include <socket.h>
|
||||||
#include <unistd.h>
|
|
||||||
#include <fcntl.h>
|
|
||||||
],[
|
],[
|
||||||
/* SO_NONBLOCK source code */
|
/* SO_NONBLOCK source code */
|
||||||
long b = 1;
|
long b = 1;
|
||||||
@@ -124,54 +527,48 @@ dnl end of non-blocking try-compile test
|
|||||||
fi
|
fi
|
||||||
])
|
])
|
||||||
|
|
||||||
dnl Check for socklen_t: historically on BSD it is an int, and in
|
|
||||||
dnl POSIX 1g it is a type of its own, but some platforms use different
|
dnl TYPE_SOCKADDR_STORAGE
|
||||||
dnl types for the argument to getsockopt, getpeername, etc. So we
|
dnl -------------------------------------------------
|
||||||
dnl have to test to find something that will work.
|
dnl Check for struct sockaddr_storage. Most IPv6-enabled hosts have it, but
|
||||||
AC_DEFUN([TYPE_SOCKLEN_T],
|
dnl AIX 4.3 is one known exception.
|
||||||
|
AC_DEFUN([TYPE_SOCKADDR_STORAGE],
|
||||||
[
|
[
|
||||||
AC_CHECK_TYPE([socklen_t], ,[
|
AC_CHECK_TYPE([struct sockaddr_storage],
|
||||||
AC_MSG_CHECKING([for socklen_t equivalent])
|
AC_DEFINE(HAVE_STRUCT_SOCKADDR_STORAGE, 1,
|
||||||
AC_CACHE_VAL([curl_cv_socklen_t_equiv],
|
[if struct sockaddr_storage is defined]), ,
|
||||||
[
|
[
|
||||||
# Systems have either "struct sockaddr *" or
|
#undef inline
|
||||||
# "void *" as the second argument to getpeername
|
#ifdef HAVE_WINDOWS_H
|
||||||
curl_cv_socklen_t_equiv=
|
#ifndef WIN32_LEAN_AND_MEAN
|
||||||
for arg2 in "struct sockaddr" void; do
|
#define WIN32_LEAN_AND_MEAN
|
||||||
for t in int size_t unsigned long "unsigned long"; do
|
#endif
|
||||||
AC_TRY_COMPILE([
|
#include <windows.h>
|
||||||
|
#ifdef HAVE_WINSOCK2_H
|
||||||
|
#include <winsock2.h>
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
#ifdef HAVE_SYS_TYPES_H
|
#ifdef HAVE_SYS_TYPES_H
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_SYS_SOCKET_H
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef HAVE_NETINET_IN_H
|
||||||
int getpeername (int, $arg2 *, $t *);
|
#include <netinet/in.h>
|
||||||
],[
|
#endif
|
||||||
$t len;
|
#ifdef HAVE_ARPA_INET_H
|
||||||
getpeername(0,0,&len);
|
#include <arpa/inet.h>
|
||||||
],[
|
#endif
|
||||||
curl_cv_socklen_t_equiv="$t"
|
#endif
|
||||||
break
|
|
||||||
])
|
])
|
||||||
done
|
|
||||||
done
|
|
||||||
|
|
||||||
if test "x$curl_cv_socklen_t_equiv" = x; then
|
|
||||||
AC_MSG_ERROR([Cannot find a type to use in place of socklen_t])
|
|
||||||
fi
|
|
||||||
])
|
|
||||||
AC_MSG_RESULT($curl_cv_socklen_t_equiv)
|
|
||||||
AC_DEFINE_UNQUOTED(socklen_t, $curl_cv_socklen_t_equiv,
|
|
||||||
[type to use in place of socklen_t if not defined])],
|
|
||||||
[#include <sys/types.h>
|
|
||||||
#include <sys/socket.h>])
|
|
||||||
])
|
])
|
||||||
|
|
||||||
|
|
||||||
|
dnl TYPE_IN_ADDR_T
|
||||||
|
dnl -------------------------------------------------
|
||||||
dnl Check for in_addr_t: it is used to receive the return code of inet_addr()
|
dnl Check for in_addr_t: it is used to receive the return code of inet_addr()
|
||||||
dnl and a few other things. If not found, we set it to unsigned int, as even
|
dnl and a few other things.
|
||||||
dnl 64-bit implementations use to set it to a 32-bit type.
|
|
||||||
AC_DEFUN([TYPE_IN_ADDR_T],
|
AC_DEFUN([TYPE_IN_ADDR_T],
|
||||||
[
|
[
|
||||||
AC_CHECK_TYPE([in_addr_t], ,[
|
AC_CHECK_TYPE([in_addr_t], ,[
|
||||||
@@ -181,14 +578,32 @@ AC_DEFUN([TYPE_IN_ADDR_T],
|
|||||||
curl_cv_in_addr_t_equiv=
|
curl_cv_in_addr_t_equiv=
|
||||||
for t in "unsigned long" int size_t unsigned long; do
|
for t in "unsigned long" int size_t unsigned long; do
|
||||||
AC_TRY_COMPILE([
|
AC_TRY_COMPILE([
|
||||||
|
#undef inline
|
||||||
|
#ifdef HAVE_WINDOWS_H
|
||||||
|
#ifndef WIN32_LEAN_AND_MEAN
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#endif
|
||||||
|
#include <windows.h>
|
||||||
|
#ifdef HAVE_WINSOCK2_H
|
||||||
|
#include <winsock2.h>
|
||||||
|
#else
|
||||||
|
#ifdef HAVE_WINSOCK_H
|
||||||
|
#include <winsock.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
#ifdef HAVE_SYS_TYPES_H
|
#ifdef HAVE_SYS_TYPES_H
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_SYS_SOCKET_H
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef HAVE_NETINET_IN_H
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#endif
|
||||||
#ifdef HAVE_ARPA_INET_H
|
#ifdef HAVE_ARPA_INET_H
|
||||||
#include <arpa/inet.h>
|
#include <arpa/inet.h>
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
],[
|
],[
|
||||||
$t data = inet_addr ("1.2.3.4");
|
$t data = inet_addr ("1.2.3.4");
|
||||||
@@ -205,10 +620,36 @@ AC_DEFUN([TYPE_IN_ADDR_T],
|
|||||||
AC_MSG_RESULT($curl_cv_in_addr_t_equiv)
|
AC_MSG_RESULT($curl_cv_in_addr_t_equiv)
|
||||||
AC_DEFINE_UNQUOTED(in_addr_t, $curl_cv_in_addr_t_equiv,
|
AC_DEFINE_UNQUOTED(in_addr_t, $curl_cv_in_addr_t_equiv,
|
||||||
[type to use in place of in_addr_t if not defined])],
|
[type to use in place of in_addr_t if not defined])],
|
||||||
[#include <sys/types.h>
|
[
|
||||||
|
#undef inline
|
||||||
|
#ifdef HAVE_WINDOWS_H
|
||||||
|
#ifndef WIN32_LEAN_AND_MEAN
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#endif
|
||||||
|
#include <windows.h>
|
||||||
|
#ifdef HAVE_WINSOCK2_H
|
||||||
|
#include <winsock2.h>
|
||||||
|
#else
|
||||||
|
#ifdef HAVE_WINSOCK_H
|
||||||
|
#include <winsock.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#ifdef HAVE_SYS_TYPES_H
|
||||||
|
#include <sys/types.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#include <arpa/inet.h>])
|
#endif
|
||||||
])
|
#ifdef HAVE_NETINET_IN_H
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_ARPA_INET_H
|
||||||
|
#include <arpa/inet.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
]) dnl AC_CHECK_TYPE
|
||||||
|
]) dnl AC_DEFUN
|
||||||
|
|
||||||
dnl ************************************************************
|
dnl ************************************************************
|
||||||
dnl check for "localhost", if it doesn't exist, we can't do the
|
dnl check for "localhost", if it doesn't exist, we can't do the
|
||||||
@@ -236,7 +677,7 @@ exit (h == NULL ? 1 : 0); }],[
|
|||||||
])
|
])
|
||||||
|
|
||||||
dnl ************************************************************
|
dnl ************************************************************
|
||||||
dnl check for working getaddrinfo()
|
dnl check for working getaddrinfo() that works with AI_NUMERICHOST
|
||||||
dnl
|
dnl
|
||||||
AC_DEFUN([CURL_CHECK_WORKING_GETADDRINFO],[
|
AC_DEFUN([CURL_CHECK_WORKING_GETADDRINFO],[
|
||||||
AC_CACHE_CHECK(for working getaddrinfo, ac_cv_working_getaddrinfo,[
|
AC_CACHE_CHECK(for working getaddrinfo, ac_cv_working_getaddrinfo,[
|
||||||
@@ -251,6 +692,7 @@ int main(void)
|
|||||||
int error;
|
int error;
|
||||||
|
|
||||||
memset(&hints, 0, sizeof(hints));
|
memset(&hints, 0, sizeof(hints));
|
||||||
|
hints.ai_flags = AI_NUMERICHOST;
|
||||||
hints.ai_family = AF_UNSPEC;
|
hints.ai_family = AF_UNSPEC;
|
||||||
hints.ai_socktype = SOCK_STREAM;
|
hints.ai_socktype = SOCK_STREAM;
|
||||||
error = getaddrinfo("127.0.0.1", "8080", &hints, &ai);
|
error = getaddrinfo("127.0.0.1", "8080", &hints, &ai);
|
||||||
@@ -324,8 +766,24 @@ dnl program worked:
|
|||||||
[ ac_cv_working_ni_withscopeid="yes" ],
|
[ ac_cv_working_ni_withscopeid="yes" ],
|
||||||
dnl program failed:
|
dnl program failed:
|
||||||
[ ac_cv_working_ni_withscopeid="no" ],
|
[ ac_cv_working_ni_withscopeid="no" ],
|
||||||
dnl we cross-compile:
|
dnl we cross-compile, check the headers using the preprocessor
|
||||||
[ ac_cv_working_ni_withscopeid="yes" ]
|
[
|
||||||
|
|
||||||
|
AC_EGREP_CPP(WORKS,
|
||||||
|
[
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <netdb.h>
|
||||||
|
|
||||||
|
#ifdef NI_WITHSCOPEID
|
||||||
|
WORKS
|
||||||
|
#endif
|
||||||
|
],
|
||||||
|
ac_cv_working_ni_withscopeid="yes",
|
||||||
|
ac_cv_working_ni_withscopeid="no" )
|
||||||
|
|
||||||
|
]
|
||||||
) dnl end of AC_RUN_IFELSE
|
) dnl end of AC_RUN_IFELSE
|
||||||
|
|
||||||
]) dnl end of AC_CACHE_CHECK
|
]) dnl end of AC_CACHE_CHECK
|
||||||
@@ -378,34 +836,25 @@ dnl int strerror_r(int errnum, char *buf, size_t n);
|
|||||||
dnl
|
dnl
|
||||||
AC_DEFUN([CURL_CHECK_STRERROR_R],
|
AC_DEFUN([CURL_CHECK_STRERROR_R],
|
||||||
[
|
[
|
||||||
dnl determine of strerror_r is present
|
AC_CHECK_FUNCS(strerror_r)
|
||||||
AC_CHECK_FUNCS(strerror_r,[
|
|
||||||
|
if test "x$ac_cv_func_strerror_r" = "xyes"; then
|
||||||
|
|
||||||
AC_MSG_CHECKING(whether strerror_r is declared)
|
AC_MSG_CHECKING(whether strerror_r is declared)
|
||||||
AC_EGREP_CPP(strerror_r,[
|
AC_EGREP_CPP(strerror_r,[
|
||||||
#include <string.h>],[
|
#include <string.h>],[
|
||||||
strerror_r="yes"
|
|
||||||
AC_MSG_RESULT(yes)],[
|
AC_MSG_RESULT(yes)],[
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
AC_MSG_CHECKING(whether strerror_r with -D_THREAD_SAFE is declared)
|
AC_MSG_CHECKING(whether strerror_r with -D_REENTRANT is declared)
|
||||||
AC_EGREP_CPP(strerror_r,[
|
AC_EGREP_CPP(strerror_r,[
|
||||||
#define _THREAD_SAFE
|
#define _REENTRANT
|
||||||
#include <string.h>],[
|
#include <string.h>],[
|
||||||
strerror_r="yes"
|
CPPFLAGS="-D_REENTRANT $CPPFLAGS"
|
||||||
CPPFLAGS="-D_THREAD_SAFE $CPPFLAGS"
|
|
||||||
AC_MSG_RESULT(yes)],
|
AC_MSG_RESULT(yes)],
|
||||||
AC_MSG_RESULT(no))])])
|
AC_MSG_RESULT(no)
|
||||||
|
|
||||||
if test "x$strerror_r" = "xyes"; then
|
|
||||||
|
|
||||||
dnl check if strerror_r is properly declared in the headers
|
|
||||||
AC_CHECK_DECL(strerror_r, ,
|
|
||||||
AC_DEFINE(HAVE_NO_STRERROR_R_DECL, 1, [we have no strerror_r() proto])
|
AC_DEFINE(HAVE_NO_STRERROR_R_DECL, 1, [we have no strerror_r() proto])
|
||||||
,
|
) dnl with _THREAD_SAFE
|
||||||
[#include <stdlib.h>
|
]) dnl plain cpp for it
|
||||||
#include <stdio.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <errno.h>
|
|
||||||
])
|
|
||||||
|
|
||||||
dnl determine if this strerror_r() is glibc or POSIX
|
dnl determine if this strerror_r() is glibc or POSIX
|
||||||
AC_MSG_CHECKING([for a glibc strerror_r API])
|
AC_MSG_CHECKING([for a glibc strerror_r API])
|
||||||
@@ -423,11 +872,28 @@ main () {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
GLIBC_STRERROR_R="1"
|
||||||
AC_DEFINE(HAVE_GLIBC_STRERROR_R, 1, [we have a glibc-style strerror_r()])
|
AC_DEFINE(HAVE_GLIBC_STRERROR_R, 1, [we have a glibc-style strerror_r()])
|
||||||
AC_MSG_RESULT([yes]),
|
AC_MSG_RESULT([yes]),
|
||||||
AC_MSG_RESULT([no])
|
AC_MSG_RESULT([no]),
|
||||||
|
|
||||||
|
dnl Use an inferior method of strerror_r detection while cross-compiling
|
||||||
|
AC_EGREP_CPP(yes, [
|
||||||
|
#include <features.h>
|
||||||
|
#ifdef __GLIBC__
|
||||||
|
yes
|
||||||
|
#endif
|
||||||
|
],
|
||||||
|
dnl looks like glibc, so assume a glibc-style strerror_r()
|
||||||
|
GLIBC_STRERROR_R="1"
|
||||||
|
AC_DEFINE(HAVE_GLIBC_STRERROR_R, 1, [we have a glibc-style strerror_r()])
|
||||||
|
AC_MSG_RESULT([yes]),
|
||||||
|
AC_MSG_NOTICE([cannot determine strerror_r() style: edit lib/config.h manually!])
|
||||||
|
) dnl while cross-compiling
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if test -z "$GLIBC_STRERROR_R"; then
|
||||||
|
|
||||||
AC_MSG_CHECKING([for a POSIX strerror_r API])
|
AC_MSG_CHECKING([for a POSIX strerror_r API])
|
||||||
AC_TRY_RUN([
|
AC_TRY_RUN([
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
@@ -446,10 +912,14 @@ main () {
|
|||||||
],
|
],
|
||||||
AC_DEFINE(HAVE_POSIX_STRERROR_R, 1, [we have a POSIX-style strerror_r()])
|
AC_DEFINE(HAVE_POSIX_STRERROR_R, 1, [we have a POSIX-style strerror_r()])
|
||||||
AC_MSG_RESULT([yes]),
|
AC_MSG_RESULT([yes]),
|
||||||
AC_MSG_RESULT([no])
|
AC_MSG_RESULT([no]) ,
|
||||||
|
dnl cross-compiling!
|
||||||
|
AC_MSG_NOTICE([cannot determine strerror_r() style: edit lib/config.h manually!])
|
||||||
)
|
)
|
||||||
|
|
||||||
fi
|
fi dnl if not using glibc API
|
||||||
|
|
||||||
|
fi dnl we have a strerror_r
|
||||||
|
|
||||||
])
|
])
|
||||||
|
|
||||||
@@ -634,6 +1104,7 @@ if test "$ac_cv_func_gethostbyname_r" = "yes"; then
|
|||||||
fi
|
fi
|
||||||
])
|
])
|
||||||
|
|
||||||
|
|
||||||
dnl We create a function for detecting which compiler we use and then set as
|
dnl We create a function for detecting which compiler we use and then set as
|
||||||
dnl pendantic compiler options as possible for that particular compiler. The
|
dnl pendantic compiler options as possible for that particular compiler. The
|
||||||
dnl options are only used for debug-builds.
|
dnl options are only used for debug-builds.
|
||||||
@@ -681,15 +1152,20 @@ AC_DEFUN([CURL_CC_DEBUG_OPTS],
|
|||||||
fi
|
fi
|
||||||
else dnl $ICC = yes
|
else dnl $ICC = yes
|
||||||
dnl this is a set of options we believe *ALL* gcc versions support:
|
dnl this is a set of options we believe *ALL* gcc versions support:
|
||||||
WARN="-W -Wall -Wwrite-strings -pedantic -Wno-long-long -Wpointer-arith -Wnested-externs -Winline -Wmissing-declarations -Wmissing-prototypes -Wsign-compare"
|
WARN="-W -Wall -Wwrite-strings -pedantic -Wpointer-arith -Wnested-externs -Winline -Wmissing-prototypes"
|
||||||
|
|
||||||
dnl -Wcast-align is a bit too annoying on all gcc versions ;-)
|
dnl -Wcast-align is a bit too annoying on all gcc versions ;-)
|
||||||
|
|
||||||
|
if test "$gccnum" -ge "207"; then
|
||||||
|
dnl gcc 2.7 or later
|
||||||
|
WARN="$WARN -Wmissing-declarations"
|
||||||
|
fi
|
||||||
|
|
||||||
if test "$gccnum" -gt "295"; then
|
if test "$gccnum" -gt "295"; then
|
||||||
dnl only if the compiler is newer than 2.95 since we got lots of
|
dnl only if the compiler is newer than 2.95 since we got lots of
|
||||||
dnl "`_POSIX_C_SOURCE' is not defined" in system headers with
|
dnl "`_POSIX_C_SOURCE' is not defined" in system headers with
|
||||||
dnl gcc 2.95.4 on FreeBSD 4.9!
|
dnl gcc 2.95.4 on FreeBSD 4.9!
|
||||||
WARN="$WARN -Wundef"
|
WARN="$WARN -Wundef -Wno-long-long -Wsign-compare"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test "$gccnum" -ge "296"; then
|
if test "$gccnum" -ge "296"; then
|
||||||
@@ -703,15 +1179,18 @@ AC_DEFUN([CURL_CC_DEBUG_OPTS],
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
dnl -Wunreachable-code seems totally unreliable on my gcc 3.3.2 on
|
dnl -Wunreachable-code seems totally unreliable on my gcc 3.3.2 on
|
||||||
dnl on i686-Linux as it gives us heaps with false positives
|
dnl on i686-Linux as it gives us heaps with false positives.
|
||||||
|
dnl Also, on gcc 4.0.X it is totally unbearable and complains all
|
||||||
|
dnl over making it unusable for generic purposes. Let's not use it.
|
||||||
|
|
||||||
if test "$gccnum" -ge "303"; then
|
if test "$gccnum" -ge "303"; then
|
||||||
dnl gcc 3.3 and later
|
dnl gcc 3.3 and later
|
||||||
WARN="$WARN -Wendif-labels -Wstrict-prototypes"
|
WARN="$WARN -Wendif-labels -Wstrict-prototypes"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test "$gccnum" -ge "304"; then
|
if test "$gccnum" -ge "304"; then
|
||||||
# try -Wunreachable-code on gcc 3.4
|
# try these on gcc 3.4
|
||||||
WARN="$WARN -Wunreachable-code"
|
WARN="$WARN -Wdeclaration-after-statement"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
for flag in $CPPFLAGS; do
|
for flag in $CPPFLAGS; do
|
||||||
@@ -754,3 +1233,88 @@ AC_DEFUN([CURL_CC_DEBUG_OPTS],
|
|||||||
|
|
||||||
]) dnl end of AC_DEFUN()
|
]) dnl end of AC_DEFUN()
|
||||||
|
|
||||||
|
|
||||||
|
dnl Determine the name of the library to pass to dlopen() based on the name
|
||||||
|
dnl that would normally be given to AC_CHECK_LIB. The preprocessor symbol
|
||||||
|
dnl given is set to the quoted library file name.
|
||||||
|
dnl The standard dynamic library file name is first generated, based on the
|
||||||
|
dnl current system type, then a search is performed for that file on the
|
||||||
|
dnl standard dynamic library path. If it is a symbolic link, the destination
|
||||||
|
dnl of the link is used as the file name, after stripping off any minor
|
||||||
|
dnl version numbers. If a library file can't be found, a guess is made.
|
||||||
|
dnl This macro assumes AC_PROG_LIBTOOL has been called and requires perl
|
||||||
|
dnl to be available in the PATH, or $PERL to be set to its location.
|
||||||
|
dnl
|
||||||
|
dnl CURL_DLLIB_NAME(VARIABLE, library_name)
|
||||||
|
dnl e.g. CURL_DLLIB_NAME(LDAP_NAME, ldap) on a Linux system might result
|
||||||
|
dnl in LDAP_NAME holding the string "libldap.so.2".
|
||||||
|
|
||||||
|
AC_DEFUN([CURL_DLLIB_NAME],
|
||||||
|
[
|
||||||
|
AC_MSG_CHECKING([name of dynamic library $2])
|
||||||
|
dnl The shared library extension variable name changes from version to
|
||||||
|
dnl version of libtool. Try a few names then just set one statically.
|
||||||
|
test -z "$shared_ext" && shared_ext="$shrext_cmds"
|
||||||
|
test -z "$shared_ext" && shared_ext="$shrext"
|
||||||
|
test -z "$shared_ext" && shared_ext=".so"
|
||||||
|
|
||||||
|
dnl Create the library link name of the correct form for this platform
|
||||||
|
LIBNAME_LINK_SPEC=`echo "$library_names_spec" | $SED 's/^.* //'`
|
||||||
|
DLGUESSLIB=`name=$2 eval echo "$libname_spec"`
|
||||||
|
DLGUESSFILE=`libname="$DLGUESSLIB" release="" major="" versuffix="" eval echo "$LIBNAME_LINK_SPEC"`
|
||||||
|
|
||||||
|
dnl Synthesize a likely dynamic library name in case we can't find an actual one
|
||||||
|
SO_NAME_SPEC="$soname_spec"
|
||||||
|
dnl soname_spec undefined when identical to the 1st entry in library_names_spec
|
||||||
|
test -z "$SO_NAME_SPEC" && SO_NAME_SPEC=`echo "$library_names_spec" | $SED 's/ .*$//'`
|
||||||
|
DLGUESSSOFILE=`libname="$DLGUESSLIB" release="" major="" versuffix="" eval echo "$SO_NAME_SPEC"`
|
||||||
|
|
||||||
|
if test "$cross_compiling" = yes; then
|
||||||
|
dnl Can't look at filesystem when cross-compiling
|
||||||
|
AC_DEFINE_UNQUOTED($1, "$DLGUESSSOFILE", [$2 dynamic library file])
|
||||||
|
AC_MSG_RESULT([$DLGUESSSOFILE (guess while cross-compiling)])
|
||||||
|
else
|
||||||
|
|
||||||
|
DLFOUNDFILE=""
|
||||||
|
if test "$sys_lib_dlsearch_path_spec" ; then
|
||||||
|
dnl Search for the link library name and see what it points to.
|
||||||
|
for direc in $sys_lib_dlsearch_path_spec ; do
|
||||||
|
DLTRYFILE="$direc/$DLGUESSFILE"
|
||||||
|
dnl Find where the symbolic link for this name points
|
||||||
|
changequote(<<, >>)dnl
|
||||||
|
<<
|
||||||
|
DLFOUNDFILE=`${PERL:-perl} -e 'use File::Basename; (basename(readlink($ARGV[0])) =~ /^(.*[^\d]\.\d+)[\d\.]*$/ && print ${1}) || exit 1;' "$DLTRYFILE" 2>&5`
|
||||||
|
>>
|
||||||
|
changequote([, ])dnl
|
||||||
|
if test "$?" -eq "0"; then
|
||||||
|
dnl Found the file link
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test -z "$DLFOUNDFILE" ; then
|
||||||
|
dnl Couldn't find a link library, so guess at a name.
|
||||||
|
DLFOUNDFILE="$DLGUESSSOFILE"
|
||||||
|
fi
|
||||||
|
|
||||||
|
AC_DEFINE_UNQUOTED($1, "$DLFOUNDFILE", [$2 dynamic library file])
|
||||||
|
AC_MSG_RESULT($DLFOUNDFILE)
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
|
||||||
|
# This is only a temporary fix. This macro is here to replace the broken one
|
||||||
|
# delivered by the automake project (including the 1.9.6 release). As soon as
|
||||||
|
# they ship a working version we SHOULD remove this work-around.
|
||||||
|
|
||||||
|
AC_DEFUN([AM_MISSING_HAS_RUN],
|
||||||
|
[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
|
||||||
|
test x"${MISSING+set}" = xset || MISSING="\${SHELL} \"$am_aux_dir/missing\""
|
||||||
|
# Use eval to expand $SHELL
|
||||||
|
if eval "$MISSING --run true"; then
|
||||||
|
am_missing_run="$MISSING --run "
|
||||||
|
else
|
||||||
|
am_missing_run=
|
||||||
|
AC_MSG_WARN([`missing' script is too old or missing])
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
|||||||
@@ -6,3 +6,18 @@ ahost
|
|||||||
config.log
|
config.log
|
||||||
config.status
|
config.status
|
||||||
aclocal.m4
|
aclocal.m4
|
||||||
|
.deps
|
||||||
|
Makefile.in
|
||||||
|
config.guess
|
||||||
|
config.h
|
||||||
|
config.h.in
|
||||||
|
config.sub
|
||||||
|
libtool
|
||||||
|
ltmain.sh
|
||||||
|
stamp-h1
|
||||||
|
*.lo
|
||||||
|
.libs
|
||||||
|
depcomp
|
||||||
|
libcares.la
|
||||||
|
missing
|
||||||
|
ares_version.h.dist
|
||||||
|
|||||||
14
ares/AUTHORS
Normal file
14
ares/AUTHORS
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
c-ares is based on ares, and these are the people that have worked on it since
|
||||||
|
the fork was made:
|
||||||
|
|
||||||
|
Daniel Stenberg
|
||||||
|
Dominick Meglio
|
||||||
|
liren at vivisimo.com
|
||||||
|
James Bursa
|
||||||
|
Duncan Wilcox
|
||||||
|
Dirk Manske
|
||||||
|
Dan Fandrich
|
||||||
|
Gisle Vanem
|
||||||
|
Gunter Knauf
|
||||||
|
Henrik Stoerner
|
||||||
|
Yang Tse
|
||||||
242
ares/CHANGES
242
ares/CHANGES
@@ -1,5 +1,247 @@
|
|||||||
Changelog for the c-ares project
|
Changelog for the c-ares project
|
||||||
|
|
||||||
|
* January 9, 2006
|
||||||
|
|
||||||
|
- Alexander Lazic improved the getservbyport_r() configure check.
|
||||||
|
|
||||||
|
* January 6, 2006
|
||||||
|
|
||||||
|
- Alexander Lazic pointed out that the buildconf should use the ACLOCAL_FLAGS
|
||||||
|
variable for easier controlling what it does and how it runs.
|
||||||
|
|
||||||
|
* January 5, 2006
|
||||||
|
|
||||||
|
- James Bursa fixed c-ares to find the hosts file on RISC OS, and made it
|
||||||
|
build with newer gcc versions that no longer defines "riscos".
|
||||||
|
|
||||||
|
* December 22
|
||||||
|
|
||||||
|
- Daniel Stenberg added ares_getsock() that extracts the set of sockets to
|
||||||
|
wait for action on. Similar to ares_fds() but not restricted to using
|
||||||
|
select() for the waiting.
|
||||||
|
|
||||||
|
* November 25
|
||||||
|
|
||||||
|
- Yang Tse fixed some send() / recv() compiler warnings
|
||||||
|
|
||||||
|
* September 18
|
||||||
|
|
||||||
|
- Added constants that will be used by ares_getaddrinfo
|
||||||
|
|
||||||
|
- Made ares_getnameinfo use the reentrant getservbyport (getservbyport_r) if it is
|
||||||
|
available to ensure it works properly in a threaded environment.
|
||||||
|
|
||||||
|
* September 10
|
||||||
|
|
||||||
|
- configure fix for detecting a member in the sockaddr_in6 struct which failed
|
||||||
|
on ipv6-enabled HP-UX 11.00
|
||||||
|
|
||||||
|
Version 1.3.0 (August 29, 2004)
|
||||||
|
|
||||||
|
* August 21
|
||||||
|
|
||||||
|
- Alfredo Tupone provided a fix for the Windows code in get_iphlpapi_dns_info()
|
||||||
|
when getting the DNS server etc.
|
||||||
|
|
||||||
|
* June 19
|
||||||
|
|
||||||
|
- Added some checks for the addrinfo structure.
|
||||||
|
|
||||||
|
* June 2
|
||||||
|
|
||||||
|
- William Ahern:
|
||||||
|
|
||||||
|
Make UDP sockets non-blocking. I've confirmed that at least on Linux 2.4 a
|
||||||
|
read event can come back from poll() on a valid SOCK_DGRAM socket but
|
||||||
|
recv(2) will still block. This patch doesn't ignore EAGAIN in
|
||||||
|
read_udp_packets(), though maybe it should. (This patch was edited by Daniel
|
||||||
|
Stenberg and a new configure test was added (imported from curl's configure)
|
||||||
|
to properly detect what non-blocking socket approach to use.)
|
||||||
|
|
||||||
|
I'm not quite sure how this was happening, but I've been seeing PTR queries
|
||||||
|
which seem to return empty responses. At least, they were empty when calling
|
||||||
|
ares_expand_name() on the record. Here's a patch which guarantees to
|
||||||
|
NUL-terminate the expanded name. The old behavior failed to NUL-terminate if
|
||||||
|
len was 0, and this was causing strlen() to run past the end of the buffer
|
||||||
|
after calling ares_expand_name() and getting ARES_SUCCESS as the return
|
||||||
|
value. If q is not greater than *s then it's equal and *s is always
|
||||||
|
allocated with at least one byte.
|
||||||
|
|
||||||
|
* May 16
|
||||||
|
|
||||||
|
- Added ares_getnameinfo which mimics the getnameinfo API (another feature
|
||||||
|
that could use testing).
|
||||||
|
|
||||||
|
* May 14
|
||||||
|
|
||||||
|
- Added an inet_ntop function from BIND for systems that do not have it.
|
||||||
|
|
||||||
|
* April 9
|
||||||
|
|
||||||
|
- Made sortlist support IPv6 (this can probably use some testing).
|
||||||
|
|
||||||
|
- Made sortlist support CIDR matching for IPv4.
|
||||||
|
|
||||||
|
* April 8
|
||||||
|
|
||||||
|
- Added preliminary IPv6 support to ares_gethostbyname. Currently, sortlist
|
||||||
|
does not work with IPv6. Also provided an implementation of bitncmp from
|
||||||
|
BIND for systems that do not supply this function. This will be used to add
|
||||||
|
IPv6 support to sortlist.
|
||||||
|
|
||||||
|
- Made ares_gethostbyaddr support IPv6 by specifying AF_INET6 as the family.
|
||||||
|
The function can lookup IPv6 addresses both from files (/etc/hosts) and
|
||||||
|
DNS lookups.
|
||||||
|
|
||||||
|
* April 7
|
||||||
|
|
||||||
|
- Tupone Alfredo fixed includes of arpa/nameser_compat.h to build fine on Mac
|
||||||
|
OS X.
|
||||||
|
|
||||||
|
* April 5
|
||||||
|
|
||||||
|
- Dominick Meglio: Provided implementations of inet_net_pton and inet_pton
|
||||||
|
from BIND for systems that do not include these functions.
|
||||||
|
|
||||||
|
* March 11, 2005
|
||||||
|
|
||||||
|
- Dominick Meglio added ares_parse_aaaa_reply.c and did various
|
||||||
|
adjustments. The first little steps towards IPv6 support!
|
||||||
|
|
||||||
|
* November 7
|
||||||
|
|
||||||
|
- Fixed the VC project and makefile to use ares_cancel and ares_version
|
||||||
|
|
||||||
|
* October 24
|
||||||
|
|
||||||
|
- The released ares_version.h from 1.2.1 says 1.2.0 due to a maketgz flaw.
|
||||||
|
This is now fixed.
|
||||||
|
|
||||||
|
Version 1.2.1 (October 20, 2004)
|
||||||
|
|
||||||
|
* September 29
|
||||||
|
|
||||||
|
- Henrik Stoerner fix: got a report that Tru64 Unix (the unix from Digital
|
||||||
|
when they made Alpha's) uses /etc/svc.conf for the purpose fixed below for
|
||||||
|
other OSes. He made c-ares check for and understand it if present.
|
||||||
|
|
||||||
|
- Now c-ares will use local host name lookup _before_ DNS resolving by default
|
||||||
|
if nothing else is told.
|
||||||
|
|
||||||
|
* September 26
|
||||||
|
|
||||||
|
- Henrik Stoerner: found out that c-ares does not look at the /etc/host.conf
|
||||||
|
file to determine the sequence in which to search /etc/hosts and DNS. So on
|
||||||
|
systems where this order is defined by /etc/host.conf instead of a "lookup"
|
||||||
|
entry in /etc/resolv.conf, c-ares will always default to looking in DNS
|
||||||
|
first, and /etc/hosts second.
|
||||||
|
|
||||||
|
c-ares now looks at
|
||||||
|
|
||||||
|
1) resolv.conf (for the "lookup" line);
|
||||||
|
2) nsswitch.fon (for the "hosts:" line);
|
||||||
|
3) host.conf (for the "order" line).
|
||||||
|
|
||||||
|
First match wins.
|
||||||
|
|
||||||
|
- Dominick Meglio patched: C-ares on Windows assumed that the HOSTS file is
|
||||||
|
located in a static location. It assumed
|
||||||
|
C:\Windows\System32\Drivers\Etc. This is a poor assumption to make. In fact,
|
||||||
|
the location of the HOSTS file can be changed via a registry setting.
|
||||||
|
|
||||||
|
There is a key called DatabasePath which specifies the path to the HOSTS
|
||||||
|
file:
|
||||||
|
http://www.microsoft.com/technet/itsolutions/network/deploy/depovg/tcpip2k.mspx
|
||||||
|
|
||||||
|
The patch will make c-ares correctly consult the registry for the location
|
||||||
|
of this file.
|
||||||
|
|
||||||
|
* August 29
|
||||||
|
|
||||||
|
- Gisle Vanem fixed the MSVC build files.
|
||||||
|
|
||||||
|
* August 20
|
||||||
|
|
||||||
|
- Gisle Vanem made c-ares build and work with his Watt-32 TCP/IP stack.
|
||||||
|
|
||||||
|
* August 13
|
||||||
|
|
||||||
|
- Harshal Pradhan made a minor syntax change in ares_init.c to make it build
|
||||||
|
fine with MSVC 7.1
|
||||||
|
|
||||||
|
* July 24
|
||||||
|
|
||||||
|
- Made the lib get built static only if --enable-debug is used.
|
||||||
|
|
||||||
|
- Gisle Vanem fixed:
|
||||||
|
|
||||||
|
Basically in loops like handle_errors(), 'query->next' was assigned a local
|
||||||
|
variable and then query was referenced after the memory was freed by
|
||||||
|
next_server(). I've changed that so next_server() and end_query() returns
|
||||||
|
the next query. So callers should use this ret-value.
|
||||||
|
|
||||||
|
The next problem was that 'server->tcp_buffer_pos' had a random value at
|
||||||
|
entry to 1st recv() (luckily causing Winsock to return ENOBUFS).
|
||||||
|
|
||||||
|
I've also added a ares_writev() for Windows to streamline the code a bit
|
||||||
|
more.
|
||||||
|
|
||||||
|
* July 20
|
||||||
|
- Fixed a few variable return types for some system calls. Made configure
|
||||||
|
check for ssize_t to make it possible to use that when receiving the send()
|
||||||
|
error code. This is necessary to prevent compiler warnings on some systems.
|
||||||
|
|
||||||
|
- Made configure create config.h, and all source files now include setup.h that
|
||||||
|
might include the proper config.h (or a handicrafted alternative).
|
||||||
|
|
||||||
|
- Switched to 'ares_socket_t' type for sockets in ares, since Windows don't
|
||||||
|
use 'int' for that.
|
||||||
|
|
||||||
|
- automake-ified and libool-ified c-ares. Now it builds libcares as a shared
|
||||||
|
lib on most platforms if wanted. (This bloated the size of the release
|
||||||
|
archive with another 200K!)
|
||||||
|
|
||||||
|
- Makefile.am now uses Makefile.inc for the c sources, h headers and man
|
||||||
|
pages, to make it easier for other makefiles to use the exact same set of
|
||||||
|
files.
|
||||||
|
|
||||||
|
- Adjusted 'maketgz' to use the new automake magic when building distribution
|
||||||
|
archives.
|
||||||
|
|
||||||
|
- Anyone desires HTML and/or PDF versions of the man pages in the release
|
||||||
|
archives?
|
||||||
|
|
||||||
|
* July 3
|
||||||
|
- G<>nter Knauf made c-ares build and run on Novell Netware.
|
||||||
|
|
||||||
|
* July 1
|
||||||
|
- Gisle Vanem provided Makefile.dj to build with djgpp, added a few more djgpp
|
||||||
|
fixes and made ares not use 'errno' to provide further info on Windows.
|
||||||
|
|
||||||
|
* June 30
|
||||||
|
- Gisle Vanem made it build with djgpp and run fine with the Watt-32 stack.
|
||||||
|
|
||||||
|
* June 10
|
||||||
|
- Gisle Vanem's init patch for Windows:
|
||||||
|
|
||||||
|
The init_by_resolv_conf() function fetches the DNS-server(s)
|
||||||
|
from a series of registry branches.
|
||||||
|
|
||||||
|
This can be wrong in the case where DHCP has assigned nameservers, but the
|
||||||
|
user has overridden these servers with other prefered settings. Then it's
|
||||||
|
wrong to use the DHCPNAMESERVER setting in registry.
|
||||||
|
|
||||||
|
In the case of no global DHCP-assigned or fixed servers, but DNS server(s)
|
||||||
|
per adapter, one has to query the adapter branches. But how can c-ares know
|
||||||
|
which adapter is valid for use? AFAICS it can't. There could be one adapter
|
||||||
|
that is down (e.g. a VPN adapter).
|
||||||
|
|
||||||
|
So it's better to leave this to the IP Helper API (iphlapi) available in
|
||||||
|
Win-98/2000 and later. My patch falls-back to the old way if not available.
|
||||||
|
|
||||||
|
* June 8
|
||||||
|
- James Bursa fixed an init issue for RISC OS.
|
||||||
|
|
||||||
* May 11
|
* May 11
|
||||||
- Nico Stappenbelt reported that when processing domain and search lines in
|
- Nico Stappenbelt reported that when processing domain and search lines in
|
||||||
the resolv.conf file, the first entry encountered is processed and used as
|
the resolv.conf file, the first entry encountered is processed and used as
|
||||||
|
|||||||
@@ -10,6 +10,10 @@ maketgz
|
|||||||
aclocal.m4
|
aclocal.m4
|
||||||
acinclude.m4
|
acinclude.m4
|
||||||
Makefile.in
|
Makefile.in
|
||||||
|
Makefile.dj
|
||||||
|
Makefile.m32
|
||||||
|
Makefile.netware
|
||||||
|
Makefile.vc6
|
||||||
install-sh
|
install-sh
|
||||||
mkinstalldirs
|
mkinstalldirs
|
||||||
configure
|
configure
|
||||||
|
|||||||
65
ares/Makefile.am
Normal file
65
ares/Makefile.am
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
AUTOMAKE_OPTIONS = foreign
|
||||||
|
|
||||||
|
lib_LTLIBRARIES = libcares.la
|
||||||
|
|
||||||
|
man_MANS = $(MANPAGES)
|
||||||
|
|
||||||
|
MSVCFILES = vc/adig/adig.dep vc/adig/adig.dsp vc/vc.dsw vc/ahost/ahost.dep \
|
||||||
|
vc/ahost/ahost.dsp vc/areslib/areslib.dep vc/areslib/areslib.dsp \
|
||||||
|
vc/areslib/areslib.dsw
|
||||||
|
|
||||||
|
# adig and ahost are just sample programs and thus not mentioned with the
|
||||||
|
# regular sources and headers
|
||||||
|
EXTRA_DIST = CHANGES README.cares Makefile.inc adig.c ahost.c $(man_MANS) \
|
||||||
|
$(MSVCFILES) AUTHORS
|
||||||
|
|
||||||
|
|
||||||
|
VER=-version-info 1:0:0
|
||||||
|
# This flag accepts an argument of the form current[:revision[:age]]. So,
|
||||||
|
# passing -version-info 3:12:1 sets current to 3, revision to 12, and age to
|
||||||
|
# 1.
|
||||||
|
#
|
||||||
|
# If either revision or age are omitted, they default to 0. Also note that age
|
||||||
|
# must be less than or equal to the current interface number.
|
||||||
|
#
|
||||||
|
# Here are a set of rules to help you update your library version information:
|
||||||
|
#
|
||||||
|
# 1.Start with version information of 0:0:0 for each libtool library.
|
||||||
|
#
|
||||||
|
# 2.Update the version information only immediately before a public release of
|
||||||
|
# your software. More frequent updates are unnecessary, and only guarantee
|
||||||
|
# that the current interface number gets larger faster.
|
||||||
|
#
|
||||||
|
# 3.If the library source code has changed at all since the last update, then
|
||||||
|
# increment revision (c:r+1:a)
|
||||||
|
#
|
||||||
|
# 4.If any interfaces have been added, removed, or changed since the last
|
||||||
|
# update, increment current, and set revision to 0. (c+1:r=0:a)
|
||||||
|
#
|
||||||
|
# 5.If any interfaces have been added since the last public release, then
|
||||||
|
# increment age. (c:r:a+1)
|
||||||
|
#
|
||||||
|
# 6.If any interfaces have been removed since the last public release, then
|
||||||
|
# set age to 0. (c:r:a=0)
|
||||||
|
#
|
||||||
|
|
||||||
|
libcares_la_LDFLAGS = $(VER)
|
||||||
|
|
||||||
|
# Makefile.inc provides the CSOURCES and HHEADERS defines
|
||||||
|
include Makefile.inc
|
||||||
|
|
||||||
|
libcares_la_SOURCES = $(CSOURCES) $(HHEADERS)
|
||||||
|
|
||||||
|
# where to install the c-ares headers
|
||||||
|
libcares_ladir = $(includedir)
|
||||||
|
# what headers to install on 'make install':
|
||||||
|
libcares_la_HEADERS = ares.h ares_version.h
|
||||||
|
|
||||||
|
# Make files named *.dist replace the file without .dist extension
|
||||||
|
dist-hook:
|
||||||
|
find $(distdir) -name "*.dist" -exec rm {} \;
|
||||||
|
(distit=`find $(srcdir) -name "*.dist"`; \
|
||||||
|
for file in $$distit; do \
|
||||||
|
strip=`echo $$file | sed -e s/^$(srcdir)// -e s/\.dist//`; \
|
||||||
|
cp $$file $(distdir)$$strip; \
|
||||||
|
done)
|
||||||
55
ares/Makefile.dj
Normal file
55
ares/Makefile.dj
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
#
|
||||||
|
# c-ares Makefile for djgpp/gcc/Watt-32.
|
||||||
|
# By Gisle Vanem <giva@bgnett.no> 2004.
|
||||||
|
#
|
||||||
|
.SUFFIXES: .exe
|
||||||
|
|
||||||
|
include Makefile.inc
|
||||||
|
|
||||||
|
WATT32_ROOT = $(subst \,/,$(WATT_ROOT))
|
||||||
|
|
||||||
|
CC = gcc
|
||||||
|
CFLAGS = -O2 -Wall -DWATT32 -Dselect=select_s -DHAVE_AF_INET6 \
|
||||||
|
-DHAVE_PF_INET6 -DHAVE_IOCTLSOCKET -DHAVE_STRUCT_IN6_ADDR \
|
||||||
|
-DHAVE_STRUCT_SOCKADDR_IN6 -DHAVE_STRUCT_ADDRINFO \
|
||||||
|
-DHAVE_ARPA_NAMESER_H -DNS_INADDRSZ=4 \
|
||||||
|
-DHAVE_SOCKADDR_IN6_SIN6_SCOPE_ID -I$(WATT32_ROOT)/inc
|
||||||
|
|
||||||
|
LDFLAGS = -s
|
||||||
|
EX_LIBS = $(WATT32_ROOT)/lib/libwatt.a
|
||||||
|
|
||||||
|
OBJ_DIR = djgpp
|
||||||
|
|
||||||
|
OBJECTS = $(addprefix $(OBJ_DIR)/, $(CSOURCES:.c=.o))
|
||||||
|
|
||||||
|
all: $(OBJ_DIR) libcares.a ahost.exe adig.exe
|
||||||
|
@echo Welcome to c-ares.
|
||||||
|
|
||||||
|
$(OBJ_DIR):
|
||||||
|
- mkdir $(OBJ_DIR)
|
||||||
|
|
||||||
|
libcares.a: $(OBJECTS)
|
||||||
|
ar rs $@ $?
|
||||||
|
|
||||||
|
ahost.exe: ahost.c libcares.a
|
||||||
|
$(CC) $(LDFLAGS) $(CFLAGS) -o $@ $^ $(EX_LIBS)
|
||||||
|
|
||||||
|
adig.exe: adig.c libcares.a
|
||||||
|
$(CC) $(LDFLAGS) $(CFLAGS) -o $@ $^ $(EX_LIBS)
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f $(OBJECTS) libcares.a
|
||||||
|
|
||||||
|
vclean realclean: clean
|
||||||
|
rm -f ahost.exe adig.exe depend.dj
|
||||||
|
- rmdir $(OBJ_DIR)
|
||||||
|
|
||||||
|
$(OBJ_DIR)/%.o: %.c
|
||||||
|
$(CC) $(CFLAGS) -o $@ -c $<
|
||||||
|
@echo
|
||||||
|
|
||||||
|
depend:
|
||||||
|
$(CC) -MM $(CFLAGS) $(CSOURCES) | \
|
||||||
|
sed -e 's/^\([a-zA-Z0-9_-]*\.o:\)/$$(OBJ_DIR)\/\1/' > depend.dj
|
||||||
|
|
||||||
|
-include depend.dj
|
||||||
@@ -1,79 +0,0 @@
|
|||||||
# $Id$
|
|
||||||
|
|
||||||
SHELL=/bin/sh
|
|
||||||
INSTALL=@INSTALL@
|
|
||||||
RANLIB=@RANLIB@
|
|
||||||
VPATH=@srcdir@
|
|
||||||
srcdir=@srcdir@
|
|
||||||
top_srcdir=@top_srcdir@
|
|
||||||
prefix=@prefix@
|
|
||||||
exec_prefix=@exec_prefix@
|
|
||||||
libdir=@libdir@
|
|
||||||
includedir=@includedir@
|
|
||||||
mandir=@mandir@
|
|
||||||
|
|
||||||
LIB=libcares.a
|
|
||||||
CC=@CC@
|
|
||||||
CPPFLAGS=@CPPFLAGS@
|
|
||||||
CFLAGS=@CFLAGS@ ${WARN_CFLAGS} ${ERROR_CFLAGS}
|
|
||||||
DEFS=@DEFS@
|
|
||||||
LDFLAGS=@LDFLAGS@
|
|
||||||
LIBS=@LIBS@
|
|
||||||
ALL_CFLAGS=${CPPFLAGS} ${CFLAGS} ${DEFS}
|
|
||||||
OBJS= ares__close_sockets.o ares__get_hostent.o ares__read_line.o \
|
|
||||||
ares_destroy.o ares_expand_name.o ares_fds.o \
|
|
||||||
ares_free_hostent.o ares_free_string.o ares_gethostbyaddr.o \
|
|
||||||
ares_gethostbyname.o ares_init.o ares_mkquery.o ares_parse_a_reply.o \
|
|
||||||
ares_parse_ptr_reply.o ares_process.o ares_query.o ares_search.o \
|
|
||||||
ares_send.o ares_strerror.o ares_timeout.o ares_version.o \
|
|
||||||
ares_expand_string.o ares_cancel.o
|
|
||||||
|
|
||||||
MANPAGES= ares_destroy.3 ares_expand_name.3 ares_expand_string.3 ares_fds.3 \
|
|
||||||
ares_free_hostent.3 ares_free_string.3 ares_gethostbyaddr.3 \
|
|
||||||
ares_gethostbyname.3 ares_init.3 ares_init_options.3 ares_mkquery.3 \
|
|
||||||
ares_parse_a_reply.3 ares_parse_ptr_reply.3 ares_process.3 \
|
|
||||||
ares_query.3 ares_search.3 ares_send.3 ares_strerror.3 ares_timeout.3 \
|
|
||||||
ares_version.3 ares_cancel.3
|
|
||||||
|
|
||||||
$(LIB): ${OBJS}
|
|
||||||
ar cru $@ ${OBJS}
|
|
||||||
${RANLIB} $@
|
|
||||||
|
|
||||||
all: $(LIB) demos
|
|
||||||
|
|
||||||
demos: adig ahost
|
|
||||||
|
|
||||||
tags:
|
|
||||||
etags *.[ch]
|
|
||||||
|
|
||||||
adig: adig.o $(LIB)
|
|
||||||
${CC} ${LDFLAGS} -o $@ adig.o $(LIB) ${LIBS}
|
|
||||||
|
|
||||||
ahost: ahost.o $(LIB)
|
|
||||||
${CC} ${LDFLAGS} -o $@ ahost.o $(LIB) ${LIBS}
|
|
||||||
|
|
||||||
${OBJS}: ares.h ares_dns.h ares_private.h
|
|
||||||
|
|
||||||
.c.o:
|
|
||||||
${CC} -c ${ALL_CFLAGS} $<
|
|
||||||
|
|
||||||
check:
|
|
||||||
|
|
||||||
install:
|
|
||||||
${top_srcdir}/mkinstalldirs ${DESTDIR}${libdir}
|
|
||||||
${top_srcdir}/mkinstalldirs ${DESTDIR}${includedir}
|
|
||||||
${top_srcdir}/mkinstalldirs ${DESTDIR}${mandir}/man3
|
|
||||||
${INSTALL} -m 644 $(LIB) ${DESTDIR}${libdir}
|
|
||||||
${RANLIB} ${DESTDIR}${libdir}/$(LIB)
|
|
||||||
chmod u-w ${DESTDIR}${libdir}/$(LIB)
|
|
||||||
${INSTALL} -m 444 ${srcdir}/ares.h ${DESTDIR}${includedir}
|
|
||||||
${INSTALL} -m 444 ${srcdir}/ares_version.h ${DESTDIR}${includedir}
|
|
||||||
(for man in $(MANPAGES); do \
|
|
||||||
${INSTALL} -m 444 ${srcdir}/$${man} ${DESTDIR}${mandir}/man3; \
|
|
||||||
done)
|
|
||||||
|
|
||||||
clean:
|
|
||||||
rm -f ${OBJS} $(LIB) adig.o adig ahost.o ahost
|
|
||||||
|
|
||||||
distclean: clean
|
|
||||||
rm -f config.cache config.log config.status Makefile
|
|
||||||
18
ares/Makefile.inc
Normal file
18
ares/Makefile.inc
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
CSOURCES = ares_fds.c ares_getsock.c ares_process.c ares_free_hostent.c \
|
||||||
|
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_gethostbyname.c ares_strerror.c ares_cancel.c ares_init.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_string.c ares_parse_ptr_reply.c ares_parse_aaaa_reply.c \
|
||||||
|
ares_getnameinfo.c inet_net_pton.c bitncmp.c inet_ntop.c
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
MANPAGES= ares_destroy.3 ares_expand_name.3 ares_expand_string.3 ares_fds.3 \
|
||||||
|
ares_free_hostent.3 ares_free_string.3 ares_gethostbyaddr.3 \
|
||||||
|
ares_gethostbyname.3 ares_init.3 ares_init_options.3 ares_mkquery.3 \
|
||||||
|
ares_parse_a_reply.3 ares_parse_ptr_reply.3 ares_process.3 \
|
||||||
|
ares_query.3 ares_search.3 ares_send.3 ares_strerror.3 ares_timeout.3 \
|
||||||
|
ares_version.3 ares_cancel.3 ares_parse_aaaa_reply.3 ares_getnameinfo.3
|
||||||
68
ares/Makefile.m32
Normal file
68
ares/Makefile.m32
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
#############################################################
|
||||||
|
# $Id$
|
||||||
|
#
|
||||||
|
## Makefile for building libcares.a with MingW32 (GCC-3.2)
|
||||||
|
## Use: make -f Makefile.m32 [demos]
|
||||||
|
##
|
||||||
|
## Quick hack by Guenter; comments to: /dev/nul
|
||||||
|
|
||||||
|
CC = gcc
|
||||||
|
RANLIB = ranlib
|
||||||
|
|
||||||
|
########################################################
|
||||||
|
## Nothing more to do below this line!
|
||||||
|
|
||||||
|
LIB=libcares.a
|
||||||
|
CC=gcc
|
||||||
|
CFLAGS=-O2 -Wall
|
||||||
|
LDFLAGS=-s
|
||||||
|
LIBS=-lwsock32
|
||||||
|
|
||||||
|
MANPAGES := $(patsubst %.c,%.o,$(wildcard ares_*.3))
|
||||||
|
|
||||||
|
OBJS := $(patsubst %.c,%.o,$(wildcard ares_*.c))
|
||||||
|
OBJS += windows_port.o inet_ntop.o inet_net_pton.o bitncmp.o
|
||||||
|
|
||||||
|
$(LIB): ${OBJS}
|
||||||
|
ar cru $@ ${OBJS}
|
||||||
|
${RANLIB} $@
|
||||||
|
|
||||||
|
all: $(LIB) demos
|
||||||
|
|
||||||
|
demos: adig.exe ahost.exe
|
||||||
|
|
||||||
|
tags:
|
||||||
|
etags *.[ch]
|
||||||
|
|
||||||
|
adig.exe: adig.o $(LIB)
|
||||||
|
${CC} ${LDFLAGS} -o $@ adig.o $(LIB) ${LIBS}
|
||||||
|
|
||||||
|
ahost.exe: ahost.o $(LIB)
|
||||||
|
${CC} ${LDFLAGS} -o $@ ahost.o $(LIB) ${LIBS}
|
||||||
|
|
||||||
|
${OBJS}: ares.h ares_dns.h ares_private.h
|
||||||
|
|
||||||
|
.c.o:
|
||||||
|
${CC} -c ${CFLAGS} $<
|
||||||
|
|
||||||
|
check:
|
||||||
|
|
||||||
|
install:
|
||||||
|
${top_srcdir}/mkinstalldirs ${DESTDIR}${libdir}
|
||||||
|
${top_srcdir}/mkinstalldirs ${DESTDIR}${includedir}
|
||||||
|
${top_srcdir}/mkinstalldirs ${DESTDIR}${mandir}/man3
|
||||||
|
${INSTALL} -m 644 $(LIB) ${DESTDIR}${libdir}
|
||||||
|
${RANLIB} ${DESTDIR}${libdir}/$(LIB)
|
||||||
|
chmod u-w ${DESTDIR}${libdir}/$(LIB)
|
||||||
|
${INSTALL} -m 444 ${srcdir}/ares.h ${DESTDIR}${includedir}
|
||||||
|
${INSTALL} -m 444 ${srcdir}/ares_version.h ${DESTDIR}${includedir}
|
||||||
|
(for man in $(MANPAGES); do \
|
||||||
|
${INSTALL} -m 444 ${srcdir}/$${man} ${DESTDIR}${mandir}/man3; \
|
||||||
|
done)
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f ${OBJS} $(LIB) adig.o adig.exe ahost.o ahost.exe
|
||||||
|
|
||||||
|
distclean: clean
|
||||||
|
rm -f config.cache config.log config.status Makefile
|
||||||
|
|
||||||
328
ares/Makefile.netware
Normal file
328
ares/Makefile.netware
Normal file
@@ -0,0 +1,328 @@
|
|||||||
|
#################################################################
|
||||||
|
#
|
||||||
|
## Makefile for building libares.lib (NetWare version - gnu make)
|
||||||
|
## Use: make -f Makefile.netware
|
||||||
|
##
|
||||||
|
## Comments to: Guenter Knauf <eflash@gmx.net>
|
||||||
|
#
|
||||||
|
#################################################################
|
||||||
|
|
||||||
|
# Edit the path below to point to the base of your Novell NDK.
|
||||||
|
ifndef NDKBASE
|
||||||
|
NDKBASE = c:/novell
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifndef INSTDIR
|
||||||
|
INSTDIR = ../curl-$(LIBCURL_VERSION_STR)-bin-nw
|
||||||
|
endif
|
||||||
|
|
||||||
|
# Edit the vars below to change NLM target settings.
|
||||||
|
TARGETS = adig.nlm ahost.nlm
|
||||||
|
LTARGET = libcares.lib
|
||||||
|
VERSION = $(LIBCARES_VERSION)
|
||||||
|
COPYR = Copyright (C) 1996 - 2005, Daniel Stenberg, <daniel@haxx.se>
|
||||||
|
DESCR = cURL $(subst .def,,$(notdir $@)) $(LIBCARES_VERSION_STR) - http://curl.haxx.se
|
||||||
|
MTSAFE = YES
|
||||||
|
STACK = 64000
|
||||||
|
SCREEN = none
|
||||||
|
#EXPORTS =
|
||||||
|
# Comment the line below if you dont want to load protected automatically.
|
||||||
|
#LDRING = 3
|
||||||
|
|
||||||
|
# Edit the var below to point to your lib architecture.
|
||||||
|
ifndef LIBARCH
|
||||||
|
LIBARCH = LIBC
|
||||||
|
endif
|
||||||
|
|
||||||
|
# must be equal to DEBUG or NDEBUG
|
||||||
|
DB = NDEBUG
|
||||||
|
# DB = DEBUG
|
||||||
|
# DB = CURLDEBUG
|
||||||
|
# Optimization: -O<n> or debugging: -g
|
||||||
|
ifeq ($(DB),NDEBUG)
|
||||||
|
OPT = -O2
|
||||||
|
OBJDIR = release
|
||||||
|
else
|
||||||
|
OPT = -g
|
||||||
|
OBJDIR = debug
|
||||||
|
endif
|
||||||
|
|
||||||
|
# Include the version info retrieved from curlver.h
|
||||||
|
-include $(OBJDIR)/version.inc
|
||||||
|
|
||||||
|
# The following line defines your compiler.
|
||||||
|
ifdef METROWERKS
|
||||||
|
CC = mwccnlm
|
||||||
|
else
|
||||||
|
CC = gcc
|
||||||
|
endif
|
||||||
|
YACC = bison -y
|
||||||
|
CP = cp -afv
|
||||||
|
# RM = rm -f
|
||||||
|
# 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:
|
||||||
|
# http://www.gknw.com/development/prgtools/mkxdc.zip
|
||||||
|
MPKXDC = mkxdc
|
||||||
|
|
||||||
|
# Global flags for all compilers
|
||||||
|
CFLAGS = $(OPT) -D$(DB) -DNETWARE -DHAVE_CONFIG_H -nostdinc
|
||||||
|
|
||||||
|
ifeq ($(CC),mwccnlm)
|
||||||
|
LD = mwldnlm
|
||||||
|
LDFLAGS = -nostdlib $(PRELUDE) $(OBJS) $(<:.def=.o) -o $@ -commandfile
|
||||||
|
AR = mwldnlm
|
||||||
|
ARFLAGS = -type library -w nocmdline $(OBJDIR)/*.o -o
|
||||||
|
CFLAGS += -msgstyle gcc -gccinc -inline off -opt nointrinsics -proc 586
|
||||||
|
CFLAGS += -relax_pointers
|
||||||
|
#CFLAGS += -w on
|
||||||
|
ifeq ($(LIBARCH),LIBC)
|
||||||
|
PRELUDE = $(SDK_LIBC)/imports/libcpre.o
|
||||||
|
CFLAGS += -align 4
|
||||||
|
else
|
||||||
|
PRELUDE = "$(METROWERKS)/Novell Support/libraries/runtime/prelude.obj"
|
||||||
|
# CFLAGS += -include "$(METROWERKS)/Novell Support/headers/nlm_prefix.h"
|
||||||
|
CFLAGS += -align 1
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
LD = nlmconv
|
||||||
|
LDFLAGS = -T
|
||||||
|
AR = ar
|
||||||
|
ARFLAGS = -cq
|
||||||
|
CFLAGS += -fno-builtin -fpack-struct -fpcc-struct-return -fno-strict-aliasing
|
||||||
|
CFLAGS += -Wall -Wno-format -Wno-uninitialized # -pedantic
|
||||||
|
ifeq ($(LIBARCH),LIBC)
|
||||||
|
PRELUDE = $(SDK_LIBC)/imports/libcpre.gcc.o
|
||||||
|
else
|
||||||
|
PRELUDE = $(SDK_CLIB)/imports/clibpre.gcc.o
|
||||||
|
CFLAGS += -include $(NDKBASE)/nlmconv/genlm.h
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
NDK_ROOT = $(NDKBASE)/ndk
|
||||||
|
SDK_CLIB = $(NDK_ROOT)/nwsdk
|
||||||
|
SDK_LIBC = $(NDK_ROOT)/libc
|
||||||
|
|
||||||
|
ifeq ($(LIBARCH),LIBC)
|
||||||
|
INCLUDES += -I$(SDK_LIBC)/include -I$(SDK_LIBC)/include/nks
|
||||||
|
# INCLUDES += -I$(SDK_LIBC)/include/winsock
|
||||||
|
CFLAGS += -D_POSIX_SOURCE
|
||||||
|
# CFLAGS += -D__ANSIC__
|
||||||
|
else
|
||||||
|
INCLUDES += -I$(SDK_CLIB)/include/nlm -I$(SDK_CLIB)/include
|
||||||
|
# INCLUDES += -I$(SDK_CLIB)/include/nlm/obsolete
|
||||||
|
CFLAGS += -DNETDB_USE_INTERNET
|
||||||
|
endif
|
||||||
|
CFLAGS += -I. $(INCLUDES)
|
||||||
|
|
||||||
|
ifeq ($(MTSAFE),YES)
|
||||||
|
XDCOPT = -n
|
||||||
|
endif
|
||||||
|
ifeq ($(MTSAFE),NO)
|
||||||
|
XDCOPT = -u
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(findstring linux,$(OSTYPE)),linux)
|
||||||
|
DL = '
|
||||||
|
#-include $(NDKBASE)/nlmconv/ncpfs.inc
|
||||||
|
endif
|
||||||
|
|
||||||
|
# Makefile.inc provides the CSOURCES and HHEADERS defines
|
||||||
|
include Makefile.inc
|
||||||
|
|
||||||
|
OBJS := $(patsubst %.c,$(OBJDIR)/%.o,$(strip $(CSOURCES)))
|
||||||
|
|
||||||
|
.PHONY: lib nlm prebuild dist install clean
|
||||||
|
|
||||||
|
lib: prebuild $(LTARGET)
|
||||||
|
|
||||||
|
nlm: prebuild $(TARGETS)
|
||||||
|
|
||||||
|
prebuild: $(OBJDIR) $(OBJDIR)/version.inc config.h arpa/nameser.h
|
||||||
|
|
||||||
|
dist: all
|
||||||
|
-$(RM) $(OBJS) $(OBJDIR)/*.map $(OBJDIR)/*.ncv
|
||||||
|
-$(RM) $(OBJDIR)/*.def $(OBJDIR)/*.xdc $(OBJDIR)/version.inc
|
||||||
|
|
||||||
|
install: $(INSTDIR) all
|
||||||
|
@$(CP) *.nlm $(INSTDIR)
|
||||||
|
@$(CP) ../CHANGES $(INSTDIR)
|
||||||
|
@$(CP) ../COPYING $(INSTDIR)
|
||||||
|
@$(CP) ../README $(INSTDIR)
|
||||||
|
@$(CP) ../RELEASE-NOTES $(INSTDIR)
|
||||||
|
|
||||||
|
clean:
|
||||||
|
-$(RM) $(LTARGET) $(TARGETS) config.h
|
||||||
|
-$(RM) -r $(OBJDIR)
|
||||||
|
-$(RM) -r arpa
|
||||||
|
|
||||||
|
%.lib: $(OBJS)
|
||||||
|
@echo Creating $@
|
||||||
|
@-$(RM) $@
|
||||||
|
@$(AR) $(ARFLAGS) $@ $^
|
||||||
|
|
||||||
|
%.nlm: $(OBJDIR)/%.def $(OBJDIR)/%.o $(OBJDIR)/%.xdc $(OBJS)
|
||||||
|
@echo Linking $@
|
||||||
|
@-$(RM) $@
|
||||||
|
@$(LD) $(LDFLAGS) $<
|
||||||
|
|
||||||
|
$(INSTDIR):
|
||||||
|
@mkdir $(INSTDIR)
|
||||||
|
|
||||||
|
$(OBJDIR):
|
||||||
|
@mkdir $(OBJDIR)
|
||||||
|
|
||||||
|
$(OBJDIR)/%.o: %.c
|
||||||
|
# @echo Compiling $<
|
||||||
|
$(CC) $(CFLAGS) -c $< -o $@
|
||||||
|
|
||||||
|
$(OBJDIR)/version.inc: ares_version.h $(OBJDIR)
|
||||||
|
@echo Creating $@
|
||||||
|
@awk -f ../packages/NetWare/get_ver.awk $< > $@
|
||||||
|
|
||||||
|
$(OBJDIR)/%.xdc: Makefile.netware
|
||||||
|
@echo Creating $@
|
||||||
|
@$(MPKXDC) $(XDCOPT) $@
|
||||||
|
|
||||||
|
$(OBJDIR)/%.def: Makefile.netware
|
||||||
|
@echo Creating $@
|
||||||
|
@echo $(DL)# DEF file for linking with $(LD)$(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)copyright "$(COPYR)"$(DL) >> $@
|
||||||
|
@echo $(DL)description "$(DESCR)"$(DL) >> $@
|
||||||
|
@echo $(DL)version $(VERSION)$(DL) >> $@
|
||||||
|
ifdef NLMTYPE
|
||||||
|
@echo $(DL)type $(NLMTYPE)$(DL) >> $@
|
||||||
|
endif
|
||||||
|
ifdef STACK
|
||||||
|
@echo $(DL)stack $(STACK)$(DL) >> $@
|
||||||
|
endif
|
||||||
|
ifdef SCREEN
|
||||||
|
@echo $(DL)screenname "$(SCREEN)"$(DL) >> $@
|
||||||
|
else
|
||||||
|
@echo $(DL)screenname "DEFAULT"$(DL) >> $@
|
||||||
|
endif
|
||||||
|
ifeq ($(DB),DEBUG)
|
||||||
|
@echo $(DL)debug$(DL) >> $@
|
||||||
|
endif
|
||||||
|
@echo $(DL)threadname "$^"$(DL) >> $@
|
||||||
|
ifdef XDCOPT
|
||||||
|
@echo $(DL)xdcdata $(@:.def=.xdc)$(DL) >> $@
|
||||||
|
endif
|
||||||
|
ifeq ($(LDRING),0)
|
||||||
|
@echo $(DL)flag_on 16$(DL) >> $@
|
||||||
|
endif
|
||||||
|
ifeq ($(LDRING),3)
|
||||||
|
@echo $(DL)flag_on 512$(DL) >> $@
|
||||||
|
endif
|
||||||
|
ifeq ($(LIBARCH),CLIB)
|
||||||
|
@echo $(DL)start _Prelude$(DL) >> $@
|
||||||
|
@echo $(DL)exit _Stop$(DL) >> $@
|
||||||
|
@echo $(DL)import @$(SDK_CLIB)/imports/clib.imp$(DL) >> $@
|
||||||
|
@echo $(DL)import @$(SDK_CLIB)/imports/threads.imp$(DL) >> $@
|
||||||
|
@echo $(DL)import @$(SDK_CLIB)/imports/nlmlib.imp$(DL) >> $@
|
||||||
|
@echo $(DL)import @$(SDK_CLIB)/imports/socklib.imp$(DL) >> $@
|
||||||
|
@echo $(DL)module clib$(DL) >> $@
|
||||||
|
else
|
||||||
|
@echo $(DL)flag_on 64$(DL) >> $@
|
||||||
|
@echo $(DL)pseudopreemption$(DL) >> $@
|
||||||
|
@echo $(DL)start _LibCPrelude$(DL) >> $@
|
||||||
|
@echo $(DL)exit _LibCPostlude$(DL) >> $@
|
||||||
|
@echo $(DL)check _LibCCheckUnload$(DL) >> $@
|
||||||
|
@echo $(DL)import @$(SDK_LIBC)/imports/libc.imp$(DL) >> $@
|
||||||
|
@echo $(DL)import @$(SDK_LIBC)/imports/netware.imp$(DL) >> $@
|
||||||
|
@echo $(DL)module libc$(DL) >> $@
|
||||||
|
endif
|
||||||
|
ifdef MODULES
|
||||||
|
@echo $(DL)module $(MODULES)$(DL) >> $@
|
||||||
|
endif
|
||||||
|
ifdef EXPORTS
|
||||||
|
@echo $(DL)export $(EXPORTS)$(DL) >> $@
|
||||||
|
endif
|
||||||
|
ifdef IMPORTS
|
||||||
|
@echo $(DL)import $(IMPORTS)$(DL) >> $@
|
||||||
|
endif
|
||||||
|
ifeq ($(LD),nlmconv)
|
||||||
|
@echo $(DL)input $(OBJS)$(DL) >> $@
|
||||||
|
@echo $(DL)input $(PRELUDE)$(DL) >> $@
|
||||||
|
@echo $(DL)output $(notdir $(@:.def=.nlm))$(DL) >> $@
|
||||||
|
endif
|
||||||
|
|
||||||
|
config.h: Makefile.netware
|
||||||
|
@echo Creating $@
|
||||||
|
@echo $(DL)/* $@ 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)#define OS "i586-pc-NetWare"$(DL) >> $@
|
||||||
|
@echo $(DL)#define VERSION "$(LIBCURL_VERSION_STR)"$(DL) >> $@
|
||||||
|
@echo $(DL)#define PACKAGE_BUGREPORT "curl-bug@haxx.se"$(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_DLFCN_H 1$(DL) >> $@
|
||||||
|
@echo $(DL)#define HAVE_DLOPEN 1$(DL) >> $@
|
||||||
|
@echo $(DL)#define HAVE_ERR_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_GETTIMEOFDAY 1$(DL) >> $@
|
||||||
|
@echo $(DL)#define HAVE_INET_ADDR 1$(DL) >> $@
|
||||||
|
@echo $(DL)#define HAVE_INET_NTOA 1$(DL) >> $@
|
||||||
|
@echo $(DL)#define HAVE_INET_PTON 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_MALLOC_H 1$(DL) >> $@
|
||||||
|
@echo $(DL)#define HAVE_NETINET_IN_H 1$(DL) >> $@
|
||||||
|
@echo $(DL)#define HAVE_SELECT 1$(DL) >> $@
|
||||||
|
@echo $(DL)#define HAVE_SETJMP_H 1$(DL) >> $@
|
||||||
|
@echo $(DL)#define HAVE_SIGNAL 1$(DL) >> $@
|
||||||
|
@echo $(DL)#define HAVE_SOCKET 1$(DL) >> $@
|
||||||
|
@echo $(DL)#define HAVE_STDINT_H 1$(DL) >> $@
|
||||||
|
@echo $(DL)#define HAVE_STDLIB_H 1$(DL) >> $@
|
||||||
|
@echo $(DL)#define HAVE_STRCASECMP 1$(DL) >> $@
|
||||||
|
@echo $(DL)#define HAVE_STRDUP 1$(DL) >> $@
|
||||||
|
@echo $(DL)#define HAVE_STRFTIME 1$(DL) >> $@
|
||||||
|
@echo $(DL)#define HAVE_STRING_H 1$(DL) >> $@
|
||||||
|
@echo $(DL)#define HAVE_STRLCAT 1$(DL) >> $@
|
||||||
|
@echo $(DL)#define HAVE_STRLCPY 1$(DL) >> $@
|
||||||
|
@echo $(DL)#define HAVE_STRSTR 1$(DL) >> $@
|
||||||
|
@echo $(DL)#define HAVE_SYS_PARAM_H 1$(DL) >> $@
|
||||||
|
@echo $(DL)#define HAVE_SYS_SELECT_H 1$(DL) >> $@
|
||||||
|
@echo $(DL)#define HAVE_SYS_STAT_H 1$(DL) >> $@
|
||||||
|
@echo $(DL)#define HAVE_SYS_TIME_H 1$(DL) >> $@
|
||||||
|
@echo $(DL)#define HAVE_TERMIOS_H 1$(DL) >> $@
|
||||||
|
@echo $(DL)#define HAVE_TIME_H 1$(DL) >> $@
|
||||||
|
@echo $(DL)#define HAVE_UNAME 1$(DL) >> $@
|
||||||
|
@echo $(DL)#define HAVE_UNISTD_H 1$(DL) >> $@
|
||||||
|
@echo $(DL)#define RETSIGTYPE void$(DL) >> $@
|
||||||
|
@echo $(DL)#define SIZEOF_CURL_OFF_T 4$(DL) >> $@
|
||||||
|
@echo $(DL)#define STDC_HEADERS 1$(DL) >> $@
|
||||||
|
@echo $(DL)#define TIME_WITH_SYS_TIME 1$(DL) >> $@
|
||||||
|
@echo $(DL)#define HAVE_AF_INET6 1$(DL) >> $@
|
||||||
|
@echo $(DL)#define HAVE_PF_INET6 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_ADDRINFO 1$(DL) >> $@
|
||||||
|
@echo $(DL)#define SIZEOF_STRUCT_IN6_ADDR 16$(DL) >> $@
|
||||||
|
@echo $(DL)#define SIZEOF_STRUCT_IN_ADDR 4$(DL) >> $@
|
||||||
|
ifdef NW_WINSOCK
|
||||||
|
@echo $(DL)#define HAVE_CLOSESOCKET 1$(DL) >> $@
|
||||||
|
else
|
||||||
|
@echo $(DL)#define HAVE_SYS_TYPES_H 1$(DL) >> $@
|
||||||
|
@echo $(DL)#define HAVE_SYS_SOCKET_H 1$(DL) >> $@
|
||||||
|
@echo $(DL)#define HAVE_SYS_SOCKIO_H 1$(DL) >> $@
|
||||||
|
@echo $(DL)#define HAVE_NETDB_H 1$(DL) >> $@
|
||||||
|
endif
|
||||||
|
ifdef OLD_NOVELLSDK
|
||||||
|
@echo $(DL)#define socklen_t int$(DL) >> $@
|
||||||
|
endif
|
||||||
|
|
||||||
|
arpa/nameser.h: nameser.h
|
||||||
|
@echo Fix missing header $@
|
||||||
|
@-mkdir arpa
|
||||||
|
@$(CP) $< arpa
|
||||||
|
|
||||||
|
|
||||||
190
ares/Makefile.vc6
Normal file
190
ares/Makefile.vc6
Normal file
@@ -0,0 +1,190 @@
|
|||||||
|
# $Id$
|
||||||
|
#
|
||||||
|
# C-ares makefile for MSVC6+
|
||||||
|
# G. Vanem <giva@bgnett.no>.
|
||||||
|
#
|
||||||
|
|
||||||
|
CFG_MODEL = MD
|
||||||
|
DEBUG_MODEL = d
|
||||||
|
USE_WATT32 = 0
|
||||||
|
|
||||||
|
#
|
||||||
|
# Configurations:
|
||||||
|
# -MD - msvcrt.dll, threads, release (normal)
|
||||||
|
# -MDd - msvcrtd.dll, threads, debug
|
||||||
|
# -ML - libc, no threads, release
|
||||||
|
# -MLd - libc, no threads, debug
|
||||||
|
# -MT - libc, threads, release
|
||||||
|
# -MTd - libc, threads, debug
|
||||||
|
|
||||||
|
CC = cl
|
||||||
|
|
||||||
|
CFLAGS = -nologo -$(CFG_MODEL)$(DEBUG_MODEL) -W3 -Yd -Zi
|
||||||
|
LDFLAGS = -machine:i386 -map
|
||||||
|
|
||||||
|
OBJ_DIR = VC6_obj
|
||||||
|
DEF_FILE = cares.def
|
||||||
|
|
||||||
|
!if "$(USE_WATT32)" == "1"
|
||||||
|
CFLAGS = $(CFLAGS) -UWIN32 -DWATT32 -I$(WATT_ROOT)\inc
|
||||||
|
EX_LIBS = $(WATT_ROOT)\lib\wattcpvc_imp.lib
|
||||||
|
|
||||||
|
!else
|
||||||
|
CFLAGS = $(CFLAGS) -DWIN32 -DWIN32_LEAN_AND_MEAN
|
||||||
|
EX_LIBS = advapi32.lib ws2_32.lib
|
||||||
|
!endif
|
||||||
|
|
||||||
|
!if "$(DEBUG_MODEL)" == "d"
|
||||||
|
CFLAGS = $(CFLAGS) -D_DEBUG -GZ
|
||||||
|
LDFLAGS = $(LDFLAGS) -debug -fixed:no
|
||||||
|
|
||||||
|
!else
|
||||||
|
CFLAGS = $(CFLAGS) -O2 -Og
|
||||||
|
LDFLAGS = $(LDFLAGS) -release
|
||||||
|
!endif
|
||||||
|
|
||||||
|
OBJECTS = $(OBJ_DIR)\ares_fds.obj \
|
||||||
|
$(OBJ_DIR)\ares_process.obj \
|
||||||
|
$(OBJ_DIR)\ares_free_hostent.obj \
|
||||||
|
$(OBJ_DIR)\ares_query.obj \
|
||||||
|
$(OBJ_DIR)\ares__close_sockets.obj \
|
||||||
|
$(OBJ_DIR)\ares_free_string.obj \
|
||||||
|
$(OBJ_DIR)\ares_search.obj \
|
||||||
|
$(OBJ_DIR)\ares__get_hostent.obj \
|
||||||
|
$(OBJ_DIR)\ares_gethostbyaddr.obj \
|
||||||
|
$(OBJ_DIR)\ares_getsock.obj \
|
||||||
|
$(OBJ_DIR)\ares_send.obj \
|
||||||
|
$(OBJ_DIR)\ares__read_line.obj \
|
||||||
|
$(OBJ_DIR)\ares_gethostbyname.obj \
|
||||||
|
$(OBJ_DIR)\ares_getnameinfo.obj \
|
||||||
|
$(OBJ_DIR)\ares_strerror.obj \
|
||||||
|
$(OBJ_DIR)\ares_cancel.obj \
|
||||||
|
$(OBJ_DIR)\ares_init.obj \
|
||||||
|
$(OBJ_DIR)\ares_timeout.obj \
|
||||||
|
$(OBJ_DIR)\ares_destroy.obj \
|
||||||
|
$(OBJ_DIR)\ares_mkquery.obj \
|
||||||
|
$(OBJ_DIR)\ares_version.obj \
|
||||||
|
$(OBJ_DIR)\ares_expand_name.obj \
|
||||||
|
$(OBJ_DIR)\ares_parse_a_reply.obj \
|
||||||
|
$(OBJ_DIR)\ares_parse_aaaa_reply.obj \
|
||||||
|
$(OBJ_DIR)\windows_port.obj \
|
||||||
|
$(OBJ_DIR)\ares_expand_string.obj \
|
||||||
|
$(OBJ_DIR)\ares_parse_ptr_reply.obj \
|
||||||
|
$(OBJ_DIR)\bitncmp.obj \
|
||||||
|
$(OBJ_DIR)\inet_net_pton.obj \
|
||||||
|
$(OBJ_DIR)\inet_ntop.obj
|
||||||
|
|
||||||
|
all: $(OBJ_DIR) cares.lib cares.dll cares_imp.lib ahost.exe adig.exe
|
||||||
|
|
||||||
|
$(OBJ_DIR):
|
||||||
|
mkdir $(OBJ_DIR)
|
||||||
|
|
||||||
|
cares.lib: $(OBJ_DIR) $(OBJECTS)
|
||||||
|
lib -nologo -out:$@ $(OBJECTS)
|
||||||
|
|
||||||
|
cares_imp.lib cares.dll: $(OBJ_DIR) $(DEF_FILE) $(OBJECTS)
|
||||||
|
link $(LDFLAGS) -dll -implib:cares_imp.lib -out:cares.dll \
|
||||||
|
-def:$(DEF_FILE) $(OBJECTS) $(EX_LIBS)
|
||||||
|
|
||||||
|
$(DEF_FILE): $(OBJECTS) Makefile.VC6
|
||||||
|
@echo ; Generated. DO NOT EDIT > $@
|
||||||
|
@echo LIBRARY cares.dll >> $@
|
||||||
|
@echo EXPORTS >> $@
|
||||||
|
@echo ares_cancel >> $@
|
||||||
|
@echo ares_destroy >> $@
|
||||||
|
@echo ares_expand_name >> $@
|
||||||
|
@echo ares_expand_string >> $@
|
||||||
|
@echo ares_fds >> $@
|
||||||
|
@echo ares_free_hostent >> $@
|
||||||
|
@echo ares_free_string >> $@
|
||||||
|
@echo ares_gethostbyaddr >> $@
|
||||||
|
@echo ares_gethostbyname >> $@
|
||||||
|
@echo ares_getsock >> $@
|
||||||
|
@echo ares_init >> $@
|
||||||
|
@echo ares_init_options >> $@
|
||||||
|
@echo ares_mkquery >> $@
|
||||||
|
@echo ares_parse_a_reply >> $@
|
||||||
|
@echo ares_parse_ptr_reply >> $@
|
||||||
|
@echo ares_process >> $@
|
||||||
|
@echo ares_query >> $@
|
||||||
|
@echo ares_search >> $@
|
||||||
|
@echo ares_strerror >> $@
|
||||||
|
@echo ares_strncasecmp >> $@
|
||||||
|
@echo ares_strcasecmp >> $@
|
||||||
|
@echo ares_timeout >> $@
|
||||||
|
@echo ares_version >> $@
|
||||||
|
@echo ares_inet_net_pton >> $@
|
||||||
|
@echo ares_inet_ntop >> $@
|
||||||
|
@echo ares_inet_pton >> $@
|
||||||
|
@echo ares_writev >> $@
|
||||||
|
@echo ares_getnameinfo >> $@
|
||||||
|
@echo ares_gettimeofday >> $@
|
||||||
|
@echo ares_parse_aaaa_reply >> $@
|
||||||
|
|
||||||
|
ahost.exe: $(OBJ_DIR) $(OBJ_DIR)\ahost.obj cares_imp.lib
|
||||||
|
link $(LDFLAGS) -out:$@ $(OBJ_DIR)\ahost.obj cares_imp.lib $(EX_LIBS)
|
||||||
|
|
||||||
|
adig.exe: $(OBJ_DIR) $(OBJ_DIR)\adig.obj $(OBJ_DIR)\getopt.obj cares_imp.lib
|
||||||
|
link $(LDFLAGS) -out:$@ $(OBJ_DIR)\adig.obj $(OBJ_DIR)\getopt.obj cares_imp.lib $(EX_LIBS)
|
||||||
|
|
||||||
|
clean:
|
||||||
|
- del $(OBJ_DIR)\*.obj *.ilk *.pdb *.pbt *.pbi *.pbo *._xe *.map
|
||||||
|
|
||||||
|
vclean realclean: clean
|
||||||
|
- del $(DEF_FILE) cares.lib cares_imp.* cares.dll ahost.exe adig.exe
|
||||||
|
- rd $(OBJ_DIR)
|
||||||
|
|
||||||
|
.c{$(OBJ_DIR)}.obj:
|
||||||
|
$(CC) $(CFLAGS) -Fo$*.obj -c $<
|
||||||
|
|
||||||
|
#
|
||||||
|
# Copyright "gcc -MM .."
|
||||||
|
#
|
||||||
|
$(OBJ_DIR)\ares_fds.obj: ares_fds.c setup.h ares.h ares_private.h ares_ipv6.h
|
||||||
|
$(OBJ_DIR)\ares_process.obj: ares_process.c setup.h nameser.h ares.h ares_dns.h \
|
||||||
|
ares_private.h ares_ipv6.h
|
||||||
|
$(OBJ_DIR)\ares_free_hostent.obj: ares_free_hostent.c setup.h ares.h ares_private.h \
|
||||||
|
ares_ipv6.h
|
||||||
|
$(OBJ_DIR)\ares_query.obj: ares_query.c setup.h nameser.h ares.h ares_dns.h \
|
||||||
|
ares_private.h ares_ipv6.h
|
||||||
|
$(OBJ_DIR)\ares__close_sockets.obj: ares__close_sockets.c setup.h ares.h \
|
||||||
|
ares_private.h ares_ipv6.h
|
||||||
|
$(OBJ_DIR)\ares_free_string.obj: ares_free_string.c setup.h ares.h
|
||||||
|
$(OBJ_DIR)\ares_search.obj: ares_search.c setup.h nameser.h ares.h ares_private.h \
|
||||||
|
ares_ipv6.h
|
||||||
|
$(OBJ_DIR)\ares__get_hostent.obj: ares__get_hostent.c setup.h ares.h ares_private.h \
|
||||||
|
ares_ipv6.h inet_net_pton.h
|
||||||
|
$(OBJ_DIR)\ares_gethostbyaddr.obj: ares_gethostbyaddr.c setup.h nameser.h ares.h \
|
||||||
|
ares_private.h ares_ipv6.h inet_net_pton.h
|
||||||
|
$(OBJ_DIR)\ares_send.obj: ares_send.c setup.h nameser.h ares.h ares_dns.h \
|
||||||
|
ares_private.h ares_ipv6.h
|
||||||
|
$(OBJ_DIR)\ares__read_line.obj: ares__read_line.c setup.h ares.h ares_private.h \
|
||||||
|
ares_ipv6.h
|
||||||
|
$(OBJ_DIR)\ares_gethostbyname.obj: ares_gethostbyname.c setup.h nameser.h ares.h \
|
||||||
|
ares_private.h ares_ipv6.h inet_net_pton.h bitncmp.h
|
||||||
|
$(OBJ_DIR)\ares_strerror.obj: ares_strerror.c setup.h ares.h
|
||||||
|
$(OBJ_DIR)\ares_cancel.obj: ares_cancel.c setup.h ares.h ares_private.h ares_ipv6.h
|
||||||
|
$(OBJ_DIR)\ares_init.obj: ares_init.c setup.h nameser.h ares.h ares_private.h \
|
||||||
|
ares_ipv6.h inet_net_pton.h
|
||||||
|
$(OBJ_DIR)\ares_timeout.obj: ares_timeout.c setup.h ares.h ares_private.h ares_ipv6.h
|
||||||
|
$(OBJ_DIR)\ares_destroy.obj: ares_destroy.c setup.h ares.h ares_private.h ares_ipv6.h
|
||||||
|
$(OBJ_DIR)\ares_mkquery.obj: ares_mkquery.c setup.h nameser.h ares.h ares_dns.h
|
||||||
|
$(OBJ_DIR)\ares_version.obj: ares_version.c setup.h ares_version.h
|
||||||
|
$(OBJ_DIR)\ares_expand_name.obj: ares_expand_name.c setup.h nameser.h ares.h \
|
||||||
|
ares_private.h ares_ipv6.h
|
||||||
|
$(OBJ_DIR)\ares_parse_a_reply.obj: ares_parse_a_reply.c setup.h nameser.h ares.h \
|
||||||
|
ares_dns.h ares_private.h ares_ipv6.h
|
||||||
|
$(OBJ_DIR)\windows_port.obj: windows_port.c setup.h nameser.h ares.h ares_private.h \
|
||||||
|
ares_ipv6.h
|
||||||
|
$(OBJ_DIR)\ares_expand_string.obj: ares_expand_string.c setup.h nameser.h ares.h \
|
||||||
|
ares_private.h ares_ipv6.h
|
||||||
|
$(OBJ_DIR)\ares_parse_ptr_reply.obj: ares_parse_ptr_reply.c setup.h nameser.h ares.h \
|
||||||
|
ares_dns.h ares_private.h ares_ipv6.h
|
||||||
|
$(OBJ_DIR)\ares_parse_aaaa_reply.obj: ares_parse_aaaa_reply.c setup.h nameser.h ares.h \
|
||||||
|
ares_dns.h inet_net_pton.h ares_private.h ares_ipv6.h
|
||||||
|
$(OBJ_DIR)\ares_getnameinfo.obj: ares_getnameinfo.c setup.h nameser.h ares.h \
|
||||||
|
ares_private.h ares_ipv6.h inet_ntop.h
|
||||||
|
$(OBJ_DIR)\inet_net_pton.obj: inet_net_pton.c setup.h nameser.h ares_ipv6.h \
|
||||||
|
inet_net_pton.h
|
||||||
|
$(OBJ_DIR)\bitncmp.obj: bitncmp.c bitncmp.h
|
||||||
|
$(OBJ_DIR)\inet_ntop.obj: inet_ntop.c setup.h nameser.h ares_ipv6.h inet_ntop.h
|
||||||
@@ -1,3 +1,6 @@
|
|||||||
|
Major changes since:
|
||||||
|
* see the CHANGES file
|
||||||
|
|
||||||
Major changes in release 1.1.1:
|
Major changes in release 1.1.1:
|
||||||
* ares should now compile as C++ code (no longer uses reserved word
|
* ares should now compile as C++ code (no longer uses reserved word
|
||||||
"class").
|
"class").
|
||||||
|
|||||||
@@ -1,4 +1,637 @@
|
|||||||
|
|
||||||
|
|
||||||
|
dnl CURL_CHECK_HEADER_WINDOWS
|
||||||
|
dnl -------------------------------------------------
|
||||||
|
dnl Check for compilable and valid windows.h header
|
||||||
|
|
||||||
|
AC_DEFUN([CURL_CHECK_HEADER_WINDOWS], [
|
||||||
|
AC_CACHE_CHECK([for windows.h], [ac_cv_header_windows_h], [
|
||||||
|
AC_COMPILE_IFELSE([
|
||||||
|
AC_LANG_PROGRAM([
|
||||||
|
#undef inline
|
||||||
|
#ifndef WIN32_LEAN_AND_MEAN
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#endif
|
||||||
|
#include <windows.h>
|
||||||
|
],[
|
||||||
|
int dummy=2*WINVER;
|
||||||
|
])
|
||||||
|
],[
|
||||||
|
ac_cv_header_windows_h="yes"
|
||||||
|
],[
|
||||||
|
ac_cv_header_windows_h="no"
|
||||||
|
])
|
||||||
|
])
|
||||||
|
if test "x$ac_cv_header_windows_h" = "xyes"; then
|
||||||
|
AC_DEFINE_UNQUOTED(HAVE_WINDOWS_H, 1,
|
||||||
|
[Define to 1 if you have the windows.h header file.])
|
||||||
|
AC_DEFINE_UNQUOTED(WIN32_LEAN_AND_MEAN, 1,
|
||||||
|
[Define to avoid automatic inclusion of winsock.h])
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
|
||||||
|
|
||||||
|
dnl CURL_CHECK_HEADER_WINSOCK
|
||||||
|
dnl -------------------------------------------------
|
||||||
|
dnl Check for compilable and valid winsock.h header
|
||||||
|
|
||||||
|
AC_DEFUN([CURL_CHECK_HEADER_WINSOCK], [
|
||||||
|
AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl
|
||||||
|
AC_CACHE_CHECK([for winsock.h], [ac_cv_header_winsock_h], [
|
||||||
|
AC_COMPILE_IFELSE([
|
||||||
|
AC_LANG_PROGRAM([
|
||||||
|
#undef inline
|
||||||
|
#ifndef WIN32_LEAN_AND_MEAN
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#endif
|
||||||
|
#include <windows.h>
|
||||||
|
#include <winsock.h>
|
||||||
|
],[
|
||||||
|
int dummy=WSACleanup();
|
||||||
|
])
|
||||||
|
],[
|
||||||
|
ac_cv_header_winsock_h="yes"
|
||||||
|
],[
|
||||||
|
ac_cv_header_winsock_h="no"
|
||||||
|
])
|
||||||
|
])
|
||||||
|
if test "x$ac_cv_header_winsock_h" = "xyes"; then
|
||||||
|
AC_DEFINE_UNQUOTED(HAVE_WINSOCK_H, 1,
|
||||||
|
[Define to 1 if you have the winsock.h header file.])
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
|
||||||
|
|
||||||
|
dnl CURL_CHECK_HEADER_WINSOCK2
|
||||||
|
dnl -------------------------------------------------
|
||||||
|
dnl Check for compilable and valid winsock2.h header
|
||||||
|
|
||||||
|
AC_DEFUN([CURL_CHECK_HEADER_WINSOCK2], [
|
||||||
|
AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl
|
||||||
|
AC_CACHE_CHECK([for winsock2.h], [ac_cv_header_winsock2_h], [
|
||||||
|
AC_COMPILE_IFELSE([
|
||||||
|
AC_LANG_PROGRAM([
|
||||||
|
#undef inline
|
||||||
|
#ifndef WIN32_LEAN_AND_MEAN
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#endif
|
||||||
|
#include <windows.h>
|
||||||
|
#include <winsock2.h>
|
||||||
|
],[
|
||||||
|
int dummy=2*IPPROTO_ESP;
|
||||||
|
])
|
||||||
|
],[
|
||||||
|
ac_cv_header_winsock2_h="yes"
|
||||||
|
],[
|
||||||
|
ac_cv_header_winsock2_h="no"
|
||||||
|
])
|
||||||
|
])
|
||||||
|
if test "x$ac_cv_header_winsock2_h" = "xyes"; then
|
||||||
|
AC_DEFINE_UNQUOTED(HAVE_WINSOCK2_H, 1,
|
||||||
|
[Define to 1 if you have the winsock2.h header file.])
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
|
||||||
|
|
||||||
|
dnl CURL_CHECK_HEADER_WS2TCPIP
|
||||||
|
dnl -------------------------------------------------
|
||||||
|
dnl Check for compilable and valid ws2tcpip.h header
|
||||||
|
|
||||||
|
AC_DEFUN([CURL_CHECK_HEADER_WS2TCPIP], [
|
||||||
|
AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl
|
||||||
|
AC_CACHE_CHECK([for ws2tcpip.h], [ac_cv_header_ws2tcpip_h], [
|
||||||
|
AC_COMPILE_IFELSE([
|
||||||
|
AC_LANG_PROGRAM([
|
||||||
|
#undef inline
|
||||||
|
#ifndef WIN32_LEAN_AND_MEAN
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#endif
|
||||||
|
#include <windows.h>
|
||||||
|
#include <winsock2.h>
|
||||||
|
#include <ws2tcpip.h>
|
||||||
|
],[
|
||||||
|
int dummy=2*IP_PKTINFO;
|
||||||
|
])
|
||||||
|
],[
|
||||||
|
ac_cv_header_ws2tcpip_h="yes"
|
||||||
|
],[
|
||||||
|
ac_cv_header_ws2tcpip_h="no"
|
||||||
|
])
|
||||||
|
])
|
||||||
|
if test "x$ac_cv_header_ws2tcpip_h" = "xyes"; then
|
||||||
|
AC_DEFINE_UNQUOTED(HAVE_WS2TCPIP_H, 1,
|
||||||
|
[Define to 1 if you have the ws2tcpip.h header file.])
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
|
||||||
|
|
||||||
|
dnl CURL_CHECK_TYPE_SOCKLEN_T
|
||||||
|
dnl -------------------------------------------------
|
||||||
|
dnl Check for existing socklen_t type, and provide
|
||||||
|
dnl an equivalent type if socklen_t not available
|
||||||
|
|
||||||
|
AC_DEFUN([CURL_CHECK_TYPE_SOCKLEN_T], [
|
||||||
|
AC_REQUIRE([CURL_CHECK_HEADER_WS2TCPIP])dnl
|
||||||
|
AC_CHECK_TYPE([socklen_t], ,[
|
||||||
|
AC_CACHE_CHECK([for socklen_t equivalent],
|
||||||
|
[curl_cv_socklen_t_equiv], [
|
||||||
|
curl_cv_socklen_t_equiv="unknown"
|
||||||
|
for arg2 in "struct sockaddr" void; do
|
||||||
|
for t in int size_t unsigned long "unsigned long"; do
|
||||||
|
AC_COMPILE_IFELSE([
|
||||||
|
AC_LANG_PROGRAM([
|
||||||
|
#undef inline
|
||||||
|
#ifdef HAVE_WINDOWS_H
|
||||||
|
#ifndef WIN32_LEAN_AND_MEAN
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#endif
|
||||||
|
#include <windows.h>
|
||||||
|
#ifdef HAVE_WINSOCK2_H
|
||||||
|
#include <winsock2.h>
|
||||||
|
#else
|
||||||
|
#ifdef HAVE_WINSOCK_H
|
||||||
|
#include <winsock.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#ifdef HAVE_SYS_TYPES_H
|
||||||
|
#include <sys/types.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
int getpeername (int, $arg2 *, $t *);
|
||||||
|
],[
|
||||||
|
$t len=0;
|
||||||
|
getpeername(0,0,&len);
|
||||||
|
])
|
||||||
|
],[
|
||||||
|
curl_cv_socklen_t_equiv="$t"
|
||||||
|
break 2
|
||||||
|
])
|
||||||
|
done
|
||||||
|
done
|
||||||
|
])
|
||||||
|
if test "$curl_cv_socklen_t_equiv" = "unknown"; then
|
||||||
|
AC_MSG_ERROR([Cannot find a type to use in place of socklen_t])
|
||||||
|
else
|
||||||
|
AC_DEFINE_UNQUOTED(socklen_t, $curl_cv_socklen_t_equiv,
|
||||||
|
[type to use in place of socklen_t if not defined])
|
||||||
|
fi
|
||||||
|
],[
|
||||||
|
#undef inline
|
||||||
|
#ifdef HAVE_WINDOWS_H
|
||||||
|
#ifndef WIN32_LEAN_AND_MEAN
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#endif
|
||||||
|
#include <windows.h>
|
||||||
|
#ifdef HAVE_WINSOCK2_H
|
||||||
|
#include <winsock2.h>
|
||||||
|
#ifdef HAVE_WS2TCPIP_H
|
||||||
|
#include <ws2tcpip.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#ifdef HAVE_SYS_TYPES_H
|
||||||
|
#include <sys/types.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
])
|
||||||
|
])
|
||||||
|
|
||||||
|
|
||||||
|
dnl CURL_CHECK_FUNC_GETNAMEINFO
|
||||||
|
dnl -------------------------------------------------
|
||||||
|
dnl Test if the getnameinfo function is available,
|
||||||
|
dnl and check the types of five of its arguments.
|
||||||
|
dnl If the function succeeds HAVE_GETNAMEINFO will be
|
||||||
|
dnl defined, defining the types of the arguments in
|
||||||
|
dnl GETNAMEINFO_TYPE_ARG1, GETNAMEINFO_TYPE_ARG2,
|
||||||
|
dnl GETNAMEINFO_TYPE_ARG46 and GETNAMEINFO_TYPE_ARG7.
|
||||||
|
dnl This function is experimental and its results shall
|
||||||
|
dnl not be trusted while this notice is in place ------
|
||||||
|
|
||||||
|
AC_DEFUN([CURL_CHECK_FUNC_GETNAMEINFO], [
|
||||||
|
AC_REQUIRE([CURL_CHECK_HEADER_WS2TCPIP])dnl
|
||||||
|
AC_REQUIRE([CURL_CHECK_TYPE_SOCKLEN_T])dnl
|
||||||
|
AC_CHECK_HEADERS(sys/types.h sys/socket.h netdb.h)
|
||||||
|
#
|
||||||
|
AC_MSG_CHECKING([for getnameinfo])
|
||||||
|
AC_LINK_IFELSE([
|
||||||
|
AC_LANG_FUNC_LINK_TRY([getnameinfo])
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT([yes])
|
||||||
|
curl_cv_getnameinfo="yes"
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT([no])
|
||||||
|
curl_cv_getnameinfo="no"
|
||||||
|
])
|
||||||
|
#
|
||||||
|
if test "$curl_cv_getnameinfo" != "yes"; then
|
||||||
|
AC_MSG_CHECKING([deeper for getnameinfo])
|
||||||
|
AC_TRY_LINK([
|
||||||
|
],[
|
||||||
|
getnameinfo();
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT([yes])
|
||||||
|
curl_cv_getnameinfo="yes"
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT([but still no])
|
||||||
|
curl_cv_getnameinfo="no"
|
||||||
|
])
|
||||||
|
fi
|
||||||
|
#
|
||||||
|
if test "$curl_cv_getnameinfo" != "yes"; then
|
||||||
|
AC_MSG_CHECKING([deeper and deeper for getnameinfo])
|
||||||
|
AC_TRY_LINK([
|
||||||
|
#undef inline
|
||||||
|
#ifdef HAVE_WINDOWS_H
|
||||||
|
#ifndef WIN32_LEAN_AND_MEAN
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#endif
|
||||||
|
#include <windows.h>
|
||||||
|
#ifdef HAVE_WINSOCK2_H
|
||||||
|
#include <winsock2.h>
|
||||||
|
#ifdef HAVE_WS2TCPIP_H
|
||||||
|
#include <ws2tcpip.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#ifdef HAVE_SYS_TYPES_H
|
||||||
|
#include <sys/types.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_NETDB_H
|
||||||
|
#include <netdb.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
],[
|
||||||
|
getnameinfo(0, 0, 0, 0, 0, 0, 0);
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT([yes])
|
||||||
|
curl_cv_getnameinfo="yes"
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT([but still no])
|
||||||
|
curl_cv_getnameinfo="no"
|
||||||
|
])
|
||||||
|
fi
|
||||||
|
#
|
||||||
|
if test "$curl_cv_getnameinfo" = "yes"; then
|
||||||
|
AC_CACHE_CHECK([types of arguments for getnameinfo],
|
||||||
|
[curl_cv_func_getnameinfo_args], [
|
||||||
|
curl_cv_func_getnameinfo_args="unknown"
|
||||||
|
for gni_arg1 in 'struct sockaddr *' 'const struct sockaddr *' 'void *'; do
|
||||||
|
for gni_arg2 in 'socklen_t' 'size_t' 'int'; do
|
||||||
|
for gni_arg46 in 'size_t' 'int' 'socklen_t' 'unsigned int' 'DWORD'; do
|
||||||
|
for gni_arg7 in 'int' 'unsigned int'; do
|
||||||
|
AC_COMPILE_IFELSE([
|
||||||
|
AC_LANG_PROGRAM([
|
||||||
|
#undef inline
|
||||||
|
#ifdef HAVE_WINDOWS_H
|
||||||
|
#ifndef WIN32_LEAN_AND_MEAN
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#endif
|
||||||
|
#if (!defined(_WIN32_WINNT)) || (_WIN32_WINNT < 0x0501)
|
||||||
|
#undef _WIN32_WINNT
|
||||||
|
#define _WIN32_WINNT 0x0501
|
||||||
|
#endif
|
||||||
|
#include <windows.h>
|
||||||
|
#ifdef HAVE_WINSOCK2_H
|
||||||
|
#include <winsock2.h>
|
||||||
|
#ifdef HAVE_WS2TCPIP_H
|
||||||
|
#include <ws2tcpip.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#define GNICALLCONV WSAAPI
|
||||||
|
#else
|
||||||
|
#ifdef HAVE_SYS_TYPES_H
|
||||||
|
#include <sys/types.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_NETDB_H
|
||||||
|
#include <netdb.h>
|
||||||
|
#endif
|
||||||
|
#define GNICALLCONV
|
||||||
|
#endif
|
||||||
|
extern int GNICALLCONV getnameinfo($gni_arg1, $gni_arg2,
|
||||||
|
char *, $gni_arg46,
|
||||||
|
char *, $gni_arg46,
|
||||||
|
$gni_arg7);
|
||||||
|
],[
|
||||||
|
$gni_arg2 salen=0;
|
||||||
|
$gni_arg46 hostlen=0;
|
||||||
|
$gni_arg46 servlen=0;
|
||||||
|
$gni_arg7 flags=0;
|
||||||
|
int res = getnameinfo(0, salen, 0, hostlen, 0, servlen, flags);
|
||||||
|
])
|
||||||
|
],[
|
||||||
|
curl_cv_func_getnameinfo_args="$gni_arg1,$gni_arg2,$gni_arg46,$gni_arg7"
|
||||||
|
break 4
|
||||||
|
])
|
||||||
|
done
|
||||||
|
done
|
||||||
|
done
|
||||||
|
done
|
||||||
|
]) # AC_CACHE_CHECK
|
||||||
|
if test "$curl_cv_func_getnameinfo_args" = "unknown"; then
|
||||||
|
AC_MSG_WARN([Cannot find proper types to use for getnameinfo args])
|
||||||
|
AC_MSG_WARN([HAVE_GETNAMEINFO will not be defined])
|
||||||
|
else
|
||||||
|
gni_prev_IFS=$IFS; IFS=','
|
||||||
|
set dummy `echo "$curl_cv_func_getnameinfo_args" | sed 's/\*/\*/g'`
|
||||||
|
IFS=$gni_prev_IFS
|
||||||
|
shift
|
||||||
|
AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG1, $[1],
|
||||||
|
[Define to the type of arg 1 for getnameinfo.])
|
||||||
|
AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG2, $[2],
|
||||||
|
[Define to the type of arg 2 for getnameinfo.])
|
||||||
|
AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG46, $[3],
|
||||||
|
[Define to the type of args 4 and 6 for getnameinfo.])
|
||||||
|
AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG7, $[4],
|
||||||
|
[Define to the type of arg 7 for getnameinfo.])
|
||||||
|
AC_DEFINE_UNQUOTED(HAVE_GETNAMEINFO, 1,
|
||||||
|
[Define to 1 if you have the getnameinfo function.])
|
||||||
|
ac_cv_func_getnameinfo="yes"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
]) # AC_DEFUN
|
||||||
|
|
||||||
|
|
||||||
|
dnl CURL_CHECK_NONBLOCKING_SOCKET
|
||||||
|
dnl -------------------------------------------------
|
||||||
|
dnl Check for how to set a socket to non-blocking state. There seems to exist
|
||||||
|
dnl four known different ways, with the one used almost everywhere being POSIX
|
||||||
|
dnl and XPG3, while the other different ways for different systems (old BSD,
|
||||||
|
dnl Windows and Amiga).
|
||||||
|
dnl
|
||||||
|
dnl There are two known platforms (AIX 3.x and SunOS 4.1.x) where the
|
||||||
|
dnl O_NONBLOCK define is found but does not work. This condition is attempted
|
||||||
|
dnl to get caught in this script by using an excessive number of #ifdefs...
|
||||||
|
dnl
|
||||||
|
AC_DEFUN([CURL_CHECK_NONBLOCKING_SOCKET],
|
||||||
|
[
|
||||||
|
AC_MSG_CHECKING([non-blocking sockets style])
|
||||||
|
|
||||||
|
AC_TRY_COMPILE([
|
||||||
|
/* headers for O_NONBLOCK test */
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
],[
|
||||||
|
/* try to compile O_NONBLOCK */
|
||||||
|
|
||||||
|
#if defined(sun) || defined(__sun__) || defined(__SUNPRO_C) || defined(__SUNPRO_CC)
|
||||||
|
# if defined(__SVR4) || defined(__srv4__)
|
||||||
|
# define PLATFORM_SOLARIS
|
||||||
|
# else
|
||||||
|
# define PLATFORM_SUNOS4
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
#if (defined(_AIX) || defined(__xlC__)) && !defined(_AIX4)
|
||||||
|
# define PLATFORM_AIX_V3
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(PLATFORM_SUNOS4) || defined(PLATFORM_AIX_V3) || defined(__BEOS__)
|
||||||
|
#error "O_NONBLOCK does not work on this platform"
|
||||||
|
#endif
|
||||||
|
int socket;
|
||||||
|
int flags = fcntl(socket, F_SETFL, flags | O_NONBLOCK);
|
||||||
|
],[
|
||||||
|
dnl the O_NONBLOCK test was fine
|
||||||
|
nonblock="O_NONBLOCK"
|
||||||
|
AC_DEFINE(HAVE_O_NONBLOCK, 1, [use O_NONBLOCK for non-blocking sockets])
|
||||||
|
],[
|
||||||
|
dnl the code was bad, try a different program now, test 2
|
||||||
|
|
||||||
|
AC_TRY_COMPILE([
|
||||||
|
/* headers for FIONBIO test */
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <stropts.h>
|
||||||
|
],[
|
||||||
|
/* FIONBIO source test (old-style unix) */
|
||||||
|
int socket;
|
||||||
|
int flags = ioctl(socket, FIONBIO, &flags);
|
||||||
|
],[
|
||||||
|
dnl FIONBIO test was good
|
||||||
|
nonblock="FIONBIO"
|
||||||
|
AC_DEFINE(HAVE_FIONBIO, 1, [use FIONBIO for non-blocking sockets])
|
||||||
|
],[
|
||||||
|
dnl FIONBIO test was also bad
|
||||||
|
dnl the code was bad, try a different program now, test 3
|
||||||
|
|
||||||
|
AC_TRY_COMPILE([
|
||||||
|
/* headers for ioctlsocket test (Windows) */
|
||||||
|
#undef inline
|
||||||
|
#ifdef HAVE_WINDOWS_H
|
||||||
|
#ifndef WIN32_LEAN_AND_MEAN
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#endif
|
||||||
|
#include <windows.h>
|
||||||
|
#ifdef HAVE_WINSOCK2_H
|
||||||
|
#include <winsock2.h>
|
||||||
|
#else
|
||||||
|
#ifdef HAVE_WINSOCK_H
|
||||||
|
#include <winsock.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
],[
|
||||||
|
/* ioctlsocket source code */
|
||||||
|
SOCKET sd;
|
||||||
|
unsigned long flags = 0;
|
||||||
|
sd = socket(0, 0, 0);
|
||||||
|
ioctlsocket(sd, FIONBIO, &flags);
|
||||||
|
],[
|
||||||
|
dnl ioctlsocket test was good
|
||||||
|
nonblock="ioctlsocket"
|
||||||
|
AC_DEFINE(HAVE_IOCTLSOCKET, 1, [use ioctlsocket() for non-blocking sockets])
|
||||||
|
],[
|
||||||
|
dnl ioctlsocket didnt compile!, go to test 4
|
||||||
|
|
||||||
|
AC_TRY_LINK([
|
||||||
|
/* headers for IoctlSocket test (Amiga?) */
|
||||||
|
#include <sys/ioctl.h>
|
||||||
|
],[
|
||||||
|
/* IoctlSocket source code */
|
||||||
|
int socket;
|
||||||
|
int flags = IoctlSocket(socket, FIONBIO, (long)1);
|
||||||
|
],[
|
||||||
|
dnl ioctlsocket test was good
|
||||||
|
nonblock="IoctlSocket"
|
||||||
|
AC_DEFINE(HAVE_IOCTLSOCKET_CASE, 1, [use Ioctlsocket() for non-blocking sockets])
|
||||||
|
],[
|
||||||
|
dnl Ioctlsocket didnt compile, do test 5!
|
||||||
|
AC_TRY_COMPILE([
|
||||||
|
/* headers for SO_NONBLOCK test (BeOS) */
|
||||||
|
#include <socket.h>
|
||||||
|
],[
|
||||||
|
/* SO_NONBLOCK source code */
|
||||||
|
long b = 1;
|
||||||
|
int socket;
|
||||||
|
int flags = setsockopt(socket, SOL_SOCKET, SO_NONBLOCK, &b, sizeof(b));
|
||||||
|
],[
|
||||||
|
dnl the SO_NONBLOCK test was good
|
||||||
|
nonblock="SO_NONBLOCK"
|
||||||
|
AC_DEFINE(HAVE_SO_NONBLOCK, 1, [use SO_NONBLOCK for non-blocking sockets])
|
||||||
|
],[
|
||||||
|
dnl test 5 didnt compile!
|
||||||
|
nonblock="nada"
|
||||||
|
AC_DEFINE(HAVE_DISABLED_NONBLOCKING, 1, [disabled non-blocking sockets])
|
||||||
|
])
|
||||||
|
dnl end of fifth test
|
||||||
|
|
||||||
|
])
|
||||||
|
dnl end of forth test
|
||||||
|
|
||||||
|
])
|
||||||
|
dnl end of third test
|
||||||
|
|
||||||
|
])
|
||||||
|
dnl end of second test
|
||||||
|
|
||||||
|
])
|
||||||
|
dnl end of non-blocking try-compile test
|
||||||
|
AC_MSG_RESULT($nonblock)
|
||||||
|
|
||||||
|
if test "$nonblock" = "nada"; then
|
||||||
|
AC_MSG_WARN([non-block sockets disabled])
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
|
||||||
|
|
||||||
|
dnl TYPE_SOCKADDR_STORAGE
|
||||||
|
dnl -------------------------------------------------
|
||||||
|
dnl Check for struct sockaddr_storage. Most IPv6-enabled hosts have it, but
|
||||||
|
dnl AIX 4.3 is one known exception.
|
||||||
|
AC_DEFUN([TYPE_SOCKADDR_STORAGE],
|
||||||
|
[
|
||||||
|
AC_CHECK_TYPE([struct sockaddr_storage],
|
||||||
|
AC_DEFINE(HAVE_STRUCT_SOCKADDR_STORAGE, 1,
|
||||||
|
[if struct sockaddr_storage is defined]), ,
|
||||||
|
[
|
||||||
|
#undef inline
|
||||||
|
#ifdef HAVE_WINDOWS_H
|
||||||
|
#ifndef WIN32_LEAN_AND_MEAN
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#endif
|
||||||
|
#include <windows.h>
|
||||||
|
#ifdef HAVE_WINSOCK2_H
|
||||||
|
#include <winsock2.h>
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#ifdef HAVE_SYS_TYPES_H
|
||||||
|
#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
|
||||||
|
#ifdef HAVE_ARPA_INET_H
|
||||||
|
#include <arpa/inet.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
])
|
||||||
|
])
|
||||||
|
|
||||||
|
|
||||||
|
dnl TYPE_IN_ADDR_T
|
||||||
|
dnl -------------------------------------------------
|
||||||
|
dnl Check for in_addr_t: it is used to receive the return code of inet_addr()
|
||||||
|
dnl and a few other things.
|
||||||
|
AC_DEFUN([TYPE_IN_ADDR_T],
|
||||||
|
[
|
||||||
|
AC_CHECK_TYPE([in_addr_t], ,[
|
||||||
|
AC_MSG_CHECKING([for in_addr_t equivalent])
|
||||||
|
AC_CACHE_VAL([curl_cv_in_addr_t_equiv],
|
||||||
|
[
|
||||||
|
curl_cv_in_addr_t_equiv=
|
||||||
|
for t in "unsigned long" int size_t unsigned long; do
|
||||||
|
AC_TRY_COMPILE([
|
||||||
|
#undef inline
|
||||||
|
#ifdef HAVE_WINDOWS_H
|
||||||
|
#ifndef WIN32_LEAN_AND_MEAN
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#endif
|
||||||
|
#include <windows.h>
|
||||||
|
#ifdef HAVE_WINSOCK2_H
|
||||||
|
#include <winsock2.h>
|
||||||
|
#else
|
||||||
|
#ifdef HAVE_WINSOCK_H
|
||||||
|
#include <winsock.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#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
|
||||||
|
#ifdef HAVE_ARPA_INET_H
|
||||||
|
#include <arpa/inet.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
],[
|
||||||
|
$t data = inet_addr ("1.2.3.4");
|
||||||
|
],[
|
||||||
|
curl_cv_in_addr_t_equiv="$t"
|
||||||
|
break
|
||||||
|
])
|
||||||
|
done
|
||||||
|
|
||||||
|
if test "x$curl_cv_in_addr_t_equiv" = x; then
|
||||||
|
AC_MSG_ERROR([Cannot find a type to use in place of in_addr_t])
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
AC_MSG_RESULT($curl_cv_in_addr_t_equiv)
|
||||||
|
AC_DEFINE_UNQUOTED(in_addr_t, $curl_cv_in_addr_t_equiv,
|
||||||
|
[type to use in place of in_addr_t if not defined])],
|
||||||
|
[
|
||||||
|
#undef inline
|
||||||
|
#ifdef HAVE_WINDOWS_H
|
||||||
|
#ifndef WIN32_LEAN_AND_MEAN
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#endif
|
||||||
|
#include <windows.h>
|
||||||
|
#ifdef HAVE_WINSOCK2_H
|
||||||
|
#include <winsock2.h>
|
||||||
|
#else
|
||||||
|
#ifdef HAVE_WINSOCK_H
|
||||||
|
#include <winsock.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#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
|
||||||
|
#ifdef HAVE_ARPA_INET_H
|
||||||
|
#include <arpa/inet.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
]) dnl AC_CHECK_TYPE
|
||||||
|
]) dnl AC_DEFUN
|
||||||
|
|
||||||
|
|
||||||
dnl We create a function for detecting which compiler we use and then set as
|
dnl We create a function for detecting which compiler we use and then set as
|
||||||
dnl pendantic compiler options as possible for that particular compiler. The
|
dnl pendantic compiler options as possible for that particular compiler. The
|
||||||
dnl options are only used for debug-builds.
|
dnl options are only used for debug-builds.
|
||||||
@@ -99,3 +732,97 @@ AC_DEFUN([CURL_CC_DEBUG_OPTS],
|
|||||||
|
|
||||||
]) dnl end of AC_DEFUN()
|
]) dnl end of AC_DEFUN()
|
||||||
|
|
||||||
|
|
||||||
|
dnl This macro determines if the specified struct exists in the specified file
|
||||||
|
dnl Syntax:
|
||||||
|
dnl CARES_CHECK_STRUCT(headers, struct name, if found, [if not found])
|
||||||
|
|
||||||
|
AC_DEFUN([CARES_CHECK_STRUCT], [
|
||||||
|
AC_MSG_CHECKING([for struct $2])
|
||||||
|
AC_TRY_COMPILE([$1],
|
||||||
|
[
|
||||||
|
struct $2 struct_instance;
|
||||||
|
], ac_struct="yes", ac_found="no")
|
||||||
|
if test "$ac_struct" = "yes" ; then
|
||||||
|
AC_MSG_RESULT(yes)
|
||||||
|
$3
|
||||||
|
else
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
$4
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
|
||||||
|
dnl This macro determines if the specified constant exists in the specified file
|
||||||
|
dnl Syntax:
|
||||||
|
dnl CARES_CHECK_CONSTANT(headers, constant name, if found, [if not found])
|
||||||
|
|
||||||
|
AC_DEFUN([CARES_CHECK_CONSTANT], [
|
||||||
|
AC_MSG_CHECKING([for $2])
|
||||||
|
AC_EGREP_CPP(VARIABLEWASDEFINED,
|
||||||
|
[
|
||||||
|
$1
|
||||||
|
|
||||||
|
#ifdef $2
|
||||||
|
VARIABLEWASDEFINED
|
||||||
|
#else
|
||||||
|
NJET
|
||||||
|
#endif
|
||||||
|
], ac_constant="yes", ac_constant="no"
|
||||||
|
)
|
||||||
|
if test "$ac_constant" = "yes" ; then
|
||||||
|
AC_MSG_RESULT(yes)
|
||||||
|
$3
|
||||||
|
else
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
$4
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
|
||||||
|
|
||||||
|
dnl This macro determines how many parameters getservbyport_r takes
|
||||||
|
AC_DEFUN([CARES_CHECK_GETSERVBYPORT_R], [
|
||||||
|
AC_MSG_CHECKING([how many arguments getservbyport_r takes])
|
||||||
|
AC_TRY_LINK(
|
||||||
|
[#include <netdb.h>],
|
||||||
|
[
|
||||||
|
int p1, p5;
|
||||||
|
char *p2, p4[4096];
|
||||||
|
struct servent *p3, *p6;
|
||||||
|
getservbyport_r(p1, p2, p3, p4, p5, &p6);
|
||||||
|
], ac_func_getservbyport_r=6,
|
||||||
|
[AC_TRY_LINK(
|
||||||
|
[#include <netdb.h>],
|
||||||
|
[
|
||||||
|
int p1, p5;
|
||||||
|
char *p2, p4[4096];
|
||||||
|
struct servent *p3;
|
||||||
|
getservbyport_r(p1, p2, p3, p4, p5);
|
||||||
|
], ac_func_getservbyport_r=5,
|
||||||
|
[AC_TRY_LINK(
|
||||||
|
[#include <netdb.h>],
|
||||||
|
[
|
||||||
|
int p1;
|
||||||
|
char *p2;
|
||||||
|
struct servent *p3;
|
||||||
|
struct servent_data p4;
|
||||||
|
getservbyport_r(p1, p2, p3, &p4);
|
||||||
|
], ac_func_getservbyport_r=4, ac_func_getservbyport_r=0
|
||||||
|
)]
|
||||||
|
)]
|
||||||
|
)
|
||||||
|
if test $ac_func_getservbyport_r != "0" ; then
|
||||||
|
AC_MSG_RESULT($ac_func_getservbyport_r)
|
||||||
|
AC_DEFINE(HAVE_GETSERVBYPORT_R, 1, [Specifies whether getservbyport_r is present])
|
||||||
|
AC_DEFINE_UNQUOTED(GETSERVBYPORT_R_ARGS, $ac_func_getservbyport_r, [Specifies the number of arguments to
|
||||||
|
getservbyport_r])
|
||||||
|
if test $ac_func_getservbyport_r = "4" ; then
|
||||||
|
AC_DEFINE(GETSERVBYPORT_R_BUFSIZE, sizeof(struct servent_data), [Specifies the size of the buffer to pass to
|
||||||
|
getservbyport_r])
|
||||||
|
else
|
||||||
|
AC_DEFINE(GETSERVBYPORT_R_BUFSIZE, 4096, [Specifies the size of the buffer to pass to getservbyport_r])
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
AC_MSG_RESULT([not found])
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
|
||||||
|
|||||||
46
ares/adig.c
46
ares/adig.c
@@ -13,6 +13,7 @@
|
|||||||
* without express or implied warranty.
|
* without express or implied warranty.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "setup.h"
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
@@ -26,14 +27,23 @@
|
|||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <netdb.h>
|
#include <netdb.h>
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef HAVE_GETOPT_H
|
||||||
|
#include <getopt.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
|
||||||
#include "ares.h"
|
#include "ares.h"
|
||||||
#include "ares_dns.h"
|
#include "ares_dns.h"
|
||||||
|
#include "inet_ntop.h"
|
||||||
|
|
||||||
|
#ifdef WATT32
|
||||||
|
#undef WIN32 /* Redefined in MingW headers */
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef INADDR_NONE
|
#ifndef INADDR_NONE
|
||||||
#define INADDR_NONE 0xffffffff
|
#define INADDR_NONE 0xffffffff
|
||||||
@@ -44,8 +54,10 @@
|
|||||||
#define T_SRV 33 /* server selection */
|
#define T_SRV 33 /* server selection */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef optind
|
||||||
extern int optind;
|
extern int optind;
|
||||||
extern char *optarg;
|
extern char *optarg;
|
||||||
|
#endif
|
||||||
|
|
||||||
struct nv {
|
struct nv {
|
||||||
const char *name;
|
const char *name;
|
||||||
@@ -215,7 +227,7 @@ int main(int argc, char **argv)
|
|||||||
/* Set the TCP port number. */
|
/* Set the TCP port number. */
|
||||||
if (!isdigit((unsigned char)*optarg))
|
if (!isdigit((unsigned char)*optarg))
|
||||||
usage();
|
usage();
|
||||||
options.tcp_port = strtol(optarg, NULL, 0);
|
options.tcp_port = (unsigned short)strtol(optarg, NULL, 0);
|
||||||
optmask |= ARES_OPT_TCP_PORT;
|
optmask |= ARES_OPT_TCP_PORT;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -223,7 +235,7 @@ int main(int argc, char **argv)
|
|||||||
/* Set the UDP port number. */
|
/* Set the UDP port number. */
|
||||||
if (!isdigit((unsigned char)*optarg))
|
if (!isdigit((unsigned char)*optarg))
|
||||||
usage();
|
usage();
|
||||||
options.udp_port = strtol(optarg, NULL, 0);
|
options.udp_port = (unsigned short)strtol(optarg, NULL, 0);
|
||||||
optmask |= ARES_OPT_UDP_PORT;
|
optmask |= ARES_OPT_UDP_PORT;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -411,7 +423,7 @@ static const unsigned char *display_rr(const unsigned char *aptr,
|
|||||||
char *name;
|
char *name;
|
||||||
int type, dnsclass, ttl, dlen, status;
|
int type, dnsclass, ttl, dlen, status;
|
||||||
long len;
|
long len;
|
||||||
struct in_addr addr;
|
char addr[46];
|
||||||
|
|
||||||
/* Parse the RR name. */
|
/* Parse the RR name. */
|
||||||
status = ares_expand_name(aptr, abuf, alen, &name, &len);
|
status = ares_expand_name(aptr, abuf, alen, &name, &len);
|
||||||
@@ -473,12 +485,12 @@ static const unsigned char *display_rr(const unsigned char *aptr,
|
|||||||
len = *p;
|
len = *p;
|
||||||
if (p + len + 1 > aptr + dlen)
|
if (p + len + 1 > aptr + dlen)
|
||||||
return NULL;
|
return NULL;
|
||||||
printf("\t%.*s", len, p + 1);
|
printf("\t%.*s", (int)len, p + 1);
|
||||||
p += len + 1;
|
p += len + 1;
|
||||||
len = *p;
|
len = *p;
|
||||||
if (p + len + 1 > aptr + dlen)
|
if (p + len + 1 > aptr + dlen)
|
||||||
return NULL;
|
return NULL;
|
||||||
printf("\t%.*s", len, p + 1);
|
printf("\t%.*s", (int)len, p + 1);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case T_MINFO:
|
case T_MINFO:
|
||||||
@@ -503,7 +515,7 @@ static const unsigned char *display_rr(const unsigned char *aptr,
|
|||||||
*/
|
*/
|
||||||
if (dlen < 2)
|
if (dlen < 2)
|
||||||
return NULL;
|
return NULL;
|
||||||
printf("\t%d", (aptr[0] << 8) | aptr[1]);
|
printf("\t%d", DNS__16BIT(aptr));
|
||||||
status = ares_expand_name(aptr + 2, abuf, alen, &name, &len);
|
status = ares_expand_name(aptr + 2, abuf, alen, &name, &len);
|
||||||
if (status != ARES_SUCCESS)
|
if (status != ARES_SUCCESS)
|
||||||
return NULL;
|
return NULL;
|
||||||
@@ -530,12 +542,9 @@ static const unsigned char *display_rr(const unsigned char *aptr,
|
|||||||
p += len;
|
p += len;
|
||||||
if (p + 20 > aptr + dlen)
|
if (p + 20 > aptr + dlen)
|
||||||
return NULL;
|
return NULL;
|
||||||
printf("\t\t\t\t\t\t( %d %d %d %d %d )",
|
printf("\t\t\t\t\t\t( %lu %lu %lu %lu %lu )",
|
||||||
(p[0] << 24) | (p[1] << 16) | (p[2] << 8) | p[3],
|
DNS__32BIT(p), DNS__32BIT(p+4), DNS__32BIT(p+8),
|
||||||
(p[4] << 24) | (p[5] << 16) | (p[6] << 8) | p[7],
|
DNS__32BIT(p+12), DNS__32BIT(p+16));
|
||||||
(p[8] << 24) | (p[9] << 16) | (p[10] << 8) | p[11],
|
|
||||||
(p[12] << 24) | (p[13] << 16) | (p[14] << 8) | p[15],
|
|
||||||
(p[16] << 24) | (p[17] << 16) | (p[18] << 8) | p[19]);
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case T_TXT:
|
case T_TXT:
|
||||||
@@ -547,7 +556,7 @@ static const unsigned char *display_rr(const unsigned char *aptr,
|
|||||||
len = *p;
|
len = *p;
|
||||||
if (p + len + 1 > aptr + dlen)
|
if (p + len + 1 > aptr + dlen)
|
||||||
return NULL;
|
return NULL;
|
||||||
printf("\t%.*s", len, p + 1);
|
printf("\t%.*s", (int)len, p + 1);
|
||||||
p += len + 1;
|
p += len + 1;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -556,8 +565,14 @@ static const unsigned char *display_rr(const unsigned char *aptr,
|
|||||||
/* The RR data is a four-byte Internet address. */
|
/* The RR data is a four-byte Internet address. */
|
||||||
if (dlen != 4)
|
if (dlen != 4)
|
||||||
return NULL;
|
return NULL;
|
||||||
memcpy(&addr, aptr, sizeof(struct in_addr));
|
printf("\t%s", ares_inet_ntop(AF_INET,aptr,addr,sizeof(addr)));
|
||||||
printf("\t%s", inet_ntoa(addr));
|
break;
|
||||||
|
|
||||||
|
case T_AAAA:
|
||||||
|
/* The RR data is a 16-byte IPv6 address. */
|
||||||
|
if (dlen != 16)
|
||||||
|
return NULL;
|
||||||
|
printf("\t%s", ares_inet_ntop(AF_INET6,aptr,addr,sizeof(addr)));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case T_WKS:
|
case T_WKS:
|
||||||
@@ -582,6 +597,7 @@ static const unsigned char *display_rr(const unsigned char *aptr,
|
|||||||
|
|
||||||
default:
|
default:
|
||||||
printf("\t[Unknown RR; cannot parse]");
|
printf("\t[Unknown RR; cannot parse]");
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
printf("\n");
|
printf("\n");
|
||||||
|
|
||||||
|
|||||||
49
ares/ahost.c
49
ares/ahost.c
@@ -13,6 +13,7 @@
|
|||||||
* without express or implied warranty.
|
* without express or implied warranty.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "setup.h"
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
@@ -28,13 +29,23 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include "ares.h"
|
#include "ares.h"
|
||||||
#include "ares_dns.h"
|
#include "ares_dns.h"
|
||||||
|
#include "inet_ntop.h"
|
||||||
|
#include "inet_net_pton.h"
|
||||||
|
|
||||||
#ifndef INADDR_NONE
|
#ifndef INADDR_NONE
|
||||||
#define INADDR_NONE 0xffffffff
|
#define INADDR_NONE 0xffffffff
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef HAVE_STRUCT_IN6_ADDR
|
||||||
|
struct in6_addr
|
||||||
|
{
|
||||||
|
unsigned char s6_addr[16];
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
static void callback(void *arg, int status, struct hostent *host);
|
static void callback(void *arg, int status, struct hostent *host);
|
||||||
static void usage(void);
|
static void usage(void);
|
||||||
|
|
||||||
@@ -44,7 +55,8 @@ int main(int argc, char **argv)
|
|||||||
int status, nfds;
|
int status, nfds;
|
||||||
fd_set read_fds, write_fds;
|
fd_set read_fds, write_fds;
|
||||||
struct timeval *tvp, tv;
|
struct timeval *tvp, tv;
|
||||||
struct in_addr addr;
|
struct in_addr addr4;
|
||||||
|
struct in6_addr addr6;
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
WORD wVersionRequested = MAKEWORD(1,1);
|
WORD wVersionRequested = MAKEWORD(1,1);
|
||||||
@@ -65,13 +77,20 @@ int main(int argc, char **argv)
|
|||||||
/* Initiate the queries, one per command-line argument. */
|
/* Initiate the queries, one per command-line argument. */
|
||||||
for (argv++; *argv; argv++)
|
for (argv++; *argv; argv++)
|
||||||
{
|
{
|
||||||
addr.s_addr = inet_addr(*argv);
|
if (ares_inet_pton(AF_INET, *argv, &addr4) == 1)
|
||||||
if (addr.s_addr == INADDR_NONE)
|
{
|
||||||
ares_gethostbyname(channel, *argv, AF_INET, callback, *argv);
|
ares_gethostbyaddr(channel, &addr4, sizeof(addr4), AF_INET, callback,
|
||||||
|
*argv);
|
||||||
|
}
|
||||||
|
else if (ares_inet_pton(AF_INET6, *argv, &addr6) == 1)
|
||||||
|
{
|
||||||
|
ares_gethostbyaddr(channel, &addr6, sizeof(addr6), AF_INET6, callback,
|
||||||
|
*argv);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ares_gethostbyaddr(channel, &addr, sizeof(addr), AF_INET, callback,
|
/* assume user wants A-records */
|
||||||
*argv);
|
ares_gethostbyname(channel, *argv, AF_INET, callback, *argv);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -94,7 +113,6 @@ int main(int argc, char **argv)
|
|||||||
|
|
||||||
static void callback(void *arg, int status, struct hostent *host)
|
static void callback(void *arg, int status, struct hostent *host)
|
||||||
{
|
{
|
||||||
struct in_addr addr;
|
|
||||||
char **p;
|
char **p;
|
||||||
|
|
||||||
if (status != ARES_SUCCESS)
|
if (status != ARES_SUCCESS)
|
||||||
@@ -105,8 +123,21 @@ static void callback(void *arg, int status, struct hostent *host)
|
|||||||
|
|
||||||
for (p = host->h_addr_list; *p; p++)
|
for (p = host->h_addr_list; *p; p++)
|
||||||
{
|
{
|
||||||
memcpy(&addr, *p, sizeof(struct in_addr));
|
char addr_buf[46] = "??";
|
||||||
printf("%-32s\t%s\n", host->h_name, inet_ntoa(addr));
|
|
||||||
|
ares_inet_ntop(host->h_addrtype, *p, addr_buf, sizeof(addr_buf));
|
||||||
|
printf("%-32s\t%s", host->h_name, addr_buf);
|
||||||
|
#if 0
|
||||||
|
if (host->h_aliases[0])
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
printf (", Aliases: ");
|
||||||
|
for (i = 0; host->h_aliases[i]; i++)
|
||||||
|
printf("%s ", host->h_aliases[i]);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
puts("");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
79
ares/ares.h
79
ares/ares.h
@@ -20,18 +20,27 @@
|
|||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
#ifdef _AIX
|
#if defined(_AIX) || defined(NETWARE)
|
||||||
/* 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! */
|
||||||
#include <sys/select.h>
|
#include <sys/select.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef WIN32
|
#if defined(WATT32)
|
||||||
#include <winsock.h>
|
#include <netinet/in.h>
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <tcp.h>
|
||||||
|
#elif defined(WIN32)
|
||||||
|
#include <winsock2.h>
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#else
|
#else
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define ARES_SUCCESS 0
|
#define ARES_SUCCESS 0
|
||||||
@@ -57,6 +66,13 @@
|
|||||||
#define ARES_EDESTRUCTION 16
|
#define ARES_EDESTRUCTION 16
|
||||||
#define ARES_EBADSTR 17
|
#define ARES_EBADSTR 17
|
||||||
|
|
||||||
|
/* ares_getnameinfo error codes */
|
||||||
|
#define ARES_EBADFLAGS 18
|
||||||
|
|
||||||
|
/* ares_getaddrinfo error codes */
|
||||||
|
#define ARES_ENONAME 19
|
||||||
|
#define ARES_EBADHINTS 20
|
||||||
|
|
||||||
/* 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)
|
||||||
@@ -78,6 +94,47 @@
|
|||||||
#define ARES_OPT_DOMAINS (1 << 7)
|
#define ARES_OPT_DOMAINS (1 << 7)
|
||||||
#define ARES_OPT_LOOKUPS (1 << 8)
|
#define ARES_OPT_LOOKUPS (1 << 8)
|
||||||
|
|
||||||
|
/* Nameinfo flag values */
|
||||||
|
#define ARES_NI_NOFQDN (1 << 0)
|
||||||
|
#define ARES_NI_NUMERICHOST (1 << 1)
|
||||||
|
#define ARES_NI_NAMEREQD (1 << 2)
|
||||||
|
#define ARES_NI_NUMERICSERV (1 << 3)
|
||||||
|
#define ARES_NI_DGRAM (1 << 4)
|
||||||
|
#define ARES_NI_TCP 0
|
||||||
|
#define ARES_NI_UDP ARES_NI_DGRAM
|
||||||
|
#define ARES_NI_SCTP (1 << 5)
|
||||||
|
#define ARES_NI_DCCP (1 << 6)
|
||||||
|
#define ARES_NI_NUMERICSCOPE (1 << 7)
|
||||||
|
#define ARES_NI_LOOKUPHOST (1 << 8)
|
||||||
|
#define ARES_NI_LOOKUPSERVICE (1 << 9)
|
||||||
|
/* Reserved for future use */
|
||||||
|
#define ARES_NI_IDN (1 << 10)
|
||||||
|
#define ARES_NI_IDN_ALLOW_UNASSIGNED (1 << 11)
|
||||||
|
#define ARES_NI_IDN_USE_STD3_ASCII_RULES (1 << 12)
|
||||||
|
|
||||||
|
/* Addrinfo flag values */
|
||||||
|
#define ARES_AI_CANONNAME (1 << 0)
|
||||||
|
#define ARES_AI_NUMERICHOST (1 << 1)
|
||||||
|
#define ARES_AI_PASSIVE (1 << 2)
|
||||||
|
#define ARES_AI_NUMERICSERV (1 << 3)
|
||||||
|
#define ARES_AI_V4MAPPED (1 << 4)
|
||||||
|
#define ARES_AI_ALL (1 << 5)
|
||||||
|
#define ARES_AI_ADDRCONFIG (1 << 6)
|
||||||
|
/* Reserved for future use */
|
||||||
|
#define ARES_AI_IDN (1 << 10)
|
||||||
|
#define ARES_AI_IDN_ALLOW_UNASSIGNED (1 << 11)
|
||||||
|
#define ARES_AI_IDN_USE_STD3_ASCII_RULES (1 << 12)
|
||||||
|
#define ARES_AI_CANONIDN (1 << 13)
|
||||||
|
|
||||||
|
#define ARES_AI_MASK (ARES_AI_CANONNAME|ARES_AI_NUMERICHOST|ARES_AI_PASSIVE| \
|
||||||
|
ARES_AI_NUMERICSERV|ARES_AI_V4MAPPED|ARES_AI_ALL| \
|
||||||
|
ARES_AI_ADDRCONFIG)
|
||||||
|
#define ARES_GETSOCK_MAXNUM 16 /* ares_getsock() can return info about this
|
||||||
|
many sockets */
|
||||||
|
#define ARES_GETSOCK_READABLE(bits,num) (bits & (1<< (num)))
|
||||||
|
#define ARES_GETSOCK_WRITABLE(bits,num) (bits & (1 << ((num) + \
|
||||||
|
ARES_GETSOCK_MAXNUM)))
|
||||||
|
|
||||||
struct ares_options {
|
struct ares_options {
|
||||||
int flags;
|
int flags;
|
||||||
int timeout;
|
int timeout;
|
||||||
@@ -94,12 +151,15 @@ struct ares_options {
|
|||||||
|
|
||||||
struct hostent;
|
struct hostent;
|
||||||
struct timeval;
|
struct timeval;
|
||||||
|
struct sockaddr;
|
||||||
struct ares_channeldata;
|
struct ares_channeldata;
|
||||||
typedef struct ares_channeldata *ares_channel;
|
typedef struct ares_channeldata *ares_channel;
|
||||||
typedef void (*ares_callback)(void *arg, int status, unsigned char *abuf,
|
typedef void (*ares_callback)(void *arg, int status, unsigned char *abuf,
|
||||||
int alen);
|
int alen);
|
||||||
typedef void (*ares_host_callback)(void *arg, int status,
|
typedef void (*ares_host_callback)(void *arg, int status,
|
||||||
struct hostent *hostent);
|
struct hostent *hostent);
|
||||||
|
typedef void (*ares_nameinfo_callback)(void *arg, int status,
|
||||||
|
char *node, char *service);
|
||||||
|
|
||||||
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,
|
||||||
@@ -116,8 +176,12 @@ void ares_gethostbyname(ares_channel channel, const char *name, int family,
|
|||||||
ares_host_callback callback, void *arg);
|
ares_host_callback callback, void *arg);
|
||||||
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,
|
||||||
|
socklen_t salen, int flags,
|
||||||
|
ares_nameinfo_callback callback,
|
||||||
|
void *arg);
|
||||||
int ares_fds(ares_channel channel, fd_set *read_fds, fd_set *write_fds);
|
int ares_fds(ares_channel channel, fd_set *read_fds, fd_set *write_fds);
|
||||||
|
int ares_getsock(ares_channel channel, int *socks, int numsocks);
|
||||||
struct timeval *ares_timeout(ares_channel channel, struct timeval *maxtv,
|
struct timeval *ares_timeout(ares_channel channel, struct timeval *maxtv,
|
||||||
struct timeval *tv);
|
struct timeval *tv);
|
||||||
void ares_process(ares_channel channel, fd_set *read_fds, fd_set *write_fds);
|
void ares_process(ares_channel channel, fd_set *read_fds, fd_set *write_fds);
|
||||||
@@ -130,11 +194,16 @@ 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);
|
||||||
int ares_parse_a_reply(const unsigned char *abuf, int alen,
|
int ares_parse_a_reply(const unsigned char *abuf, int alen,
|
||||||
struct hostent **host);
|
struct hostent **host);
|
||||||
|
int ares_parse_aaaa_reply(const unsigned char *abuf, int alen,
|
||||||
|
struct hostent **host);
|
||||||
int ares_parse_ptr_reply(const unsigned char *abuf, int alen, const void *addr,
|
int ares_parse_ptr_reply(const unsigned char *abuf, int alen, const void *addr,
|
||||||
int addrlen, int family, struct hostent **host);
|
int addrlen, int family, struct hostent **host);
|
||||||
void ares_free_string(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);
|
||||||
void ares_free_errmem(char *mem);
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif /* ARES__H */
|
#endif /* ARES__H */
|
||||||
|
|||||||
@@ -13,11 +13,13 @@
|
|||||||
* without express or implied warranty.
|
* without express or implied warranty.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "setup.h"
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#ifdef WIN32
|
#ifdef HAVE_UNISTD_H
|
||||||
#else
|
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "ares.h"
|
#include "ares.h"
|
||||||
#include "ares_private.h"
|
#include "ares_private.h"
|
||||||
|
|
||||||
@@ -42,14 +44,14 @@ void ares__close_sockets(struct server_state *server)
|
|||||||
server->tcp_lenbuf_pos = 0;
|
server->tcp_lenbuf_pos = 0;
|
||||||
|
|
||||||
/* Close the TCP and UDP sockets. */
|
/* Close the TCP and UDP sockets. */
|
||||||
if (server->tcp_socket != -1)
|
if (server->tcp_socket != ARES_SOCKET_BAD)
|
||||||
{
|
{
|
||||||
closesocket(server->tcp_socket);
|
closesocket(server->tcp_socket);
|
||||||
server->tcp_socket = -1;
|
server->tcp_socket = ARES_SOCKET_BAD;
|
||||||
}
|
}
|
||||||
if (server->udp_socket != -1)
|
if (server->udp_socket != ARES_SOCKET_BAD)
|
||||||
{
|
{
|
||||||
closesocket(server->udp_socket);
|
closesocket(server->udp_socket);
|
||||||
server->udp_socket = -1;
|
server->udp_socket = ARES_SOCKET_BAD;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,11 +13,10 @@
|
|||||||
* without express or implied warranty.
|
* without express or implied warranty.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "setup.h"
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
#ifdef WIN32
|
#if !defined(WIN32) || defined(WATT32)
|
||||||
|
|
||||||
#else
|
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
#include <arpa/inet.h>
|
#include <arpa/inet.h>
|
||||||
@@ -31,12 +30,15 @@
|
|||||||
|
|
||||||
#include "ares.h"
|
#include "ares.h"
|
||||||
#include "ares_private.h"
|
#include "ares_private.h"
|
||||||
|
#include "inet_net_pton.h"
|
||||||
|
|
||||||
int ares__get_hostent(FILE *fp, struct hostent **host)
|
int ares__get_hostent(FILE *fp, int family, struct hostent **host)
|
||||||
{
|
{
|
||||||
char *line = NULL, *p, *q, *canonical, **alias;
|
char *line = NULL, *p, *q, *canonical, **alias;
|
||||||
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;
|
||||||
|
int 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)
|
||||||
@@ -57,6 +59,17 @@ int ares__get_hostent(FILE *fp, 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)
|
||||||
|
{
|
||||||
|
if (family != AF_INET6)
|
||||||
|
continue;
|
||||||
|
addrlen = sizeof(struct in6_addr);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
else if (family != AF_INET)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
/* Get the canonical hostname. */
|
/* Get the canonical hostname. */
|
||||||
@@ -101,7 +114,7 @@ int ares__get_hostent(FILE *fp, struct hostent **host)
|
|||||||
hostent->h_addr_list = malloc(2 * sizeof(char *));
|
hostent->h_addr_list = malloc(2 * sizeof(char *));
|
||||||
if (!hostent->h_addr_list)
|
if (!hostent->h_addr_list)
|
||||||
break;
|
break;
|
||||||
hostent->h_addr_list[0] = malloc(sizeof(struct in_addr));
|
hostent->h_addr_list[0] = malloc(addrlen);
|
||||||
if (!hostent->h_addr_list[0])
|
if (!hostent->h_addr_list[0])
|
||||||
break;
|
break;
|
||||||
hostent->h_aliases = malloc((naliases + 1) * sizeof(char *));
|
hostent->h_aliases = malloc((naliases + 1) * sizeof(char *));
|
||||||
@@ -135,9 +148,12 @@ int ares__get_hostent(FILE *fp, struct hostent **host)
|
|||||||
}
|
}
|
||||||
hostent->h_aliases[naliases] = NULL;
|
hostent->h_aliases[naliases] = NULL;
|
||||||
|
|
||||||
hostent->h_addrtype = AF_INET;
|
hostent->h_addrtype = family;
|
||||||
hostent->h_length = sizeof(struct in_addr);
|
hostent->h_length = addrlen;
|
||||||
memcpy(hostent->h_addr_list[0], &addr, sizeof(struct in_addr));
|
if (family == AF_INET)
|
||||||
|
memcpy(hostent->h_addr_list[0], &addr, addrlen);
|
||||||
|
else if (family == AF_INET6)
|
||||||
|
memcpy(hostent->h_addr_list[0], &addr6, addrlen);
|
||||||
hostent->h_addr_list[1] = NULL;
|
hostent->h_addr_list[1] = NULL;
|
||||||
*host = hostent;
|
*host = hostent;
|
||||||
free(line);
|
free(line);
|
||||||
|
|||||||
@@ -13,6 +13,7 @@
|
|||||||
* without express or implied warranty.
|
* without express or implied warranty.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "setup.h"
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
@@ -49,7 +50,7 @@ int ares__read_line(FILE *fp, char **buf, int *bufsize)
|
|||||||
if ((*buf)[len - 1] == '\n')
|
if ((*buf)[len - 1] == '\n')
|
||||||
{
|
{
|
||||||
(*buf)[len - 1] = 0;
|
(*buf)[len - 1] = 0;
|
||||||
return ARES_SUCCESS;
|
break;
|
||||||
}
|
}
|
||||||
offset = len;
|
offset = len;
|
||||||
|
|
||||||
@@ -60,4 +61,5 @@ int ares__read_line(FILE *fp, char **buf, int *bufsize)
|
|||||||
*buf = newbuf;
|
*buf = newbuf;
|
||||||
*bufsize *= 2;
|
*bufsize *= 2;
|
||||||
}
|
}
|
||||||
|
return ARES_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,5 +33,7 @@ might have been stored in their arguments.
|
|||||||
.SH SEE ALSO
|
.SH SEE ALSO
|
||||||
.BR ares_init (3)
|
.BR ares_init (3)
|
||||||
.BR ares_destroy (3)
|
.BR ares_destroy (3)
|
||||||
|
.SH NOTES
|
||||||
|
This function was added in c-ares 1.2.0
|
||||||
.SH AUTHOR
|
.SH AUTHOR
|
||||||
Dirk Manske
|
Dirk Manske
|
||||||
|
|||||||
@@ -1,18 +1,17 @@
|
|||||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
/* Copyright (C) 2004 by Daniel Stenberg et al
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this
|
* Permission to use, copy, modify, and distribute this software and its
|
||||||
* software and its documentation for any purpose and without
|
* documentation for any purpose and without fee is hereby granted, provided
|
||||||
* fee is hereby granted, provided that the above copyright
|
* that the above copyright notice appear in all copies and that both that
|
||||||
* notice appear in all copies and that both that copyright
|
* copyright notice and this permission notice appear in supporting
|
||||||
* notice and this permission notice appear in supporting
|
* documentation, and that the name of M.I.T. not be used in advertising or
|
||||||
* documentation, and that the name of M.I.T. not be used in
|
* publicity pertaining to distribution of the software without specific,
|
||||||
* advertising or publicity pertaining to distribution of the
|
* written prior permission. M.I.T. makes no representations about the
|
||||||
* software without specific, written prior permission.
|
* suitability of this software for any purpose. It is provided "as is"
|
||||||
* 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.
|
* without express or implied warranty.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "setup.h"
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include "ares.h"
|
#include "ares.h"
|
||||||
#include "ares_private.h"
|
#include "ares_private.h"
|
||||||
|
|||||||
@@ -14,14 +14,14 @@
|
|||||||
.\" 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_DESTROY 3 "23 July 1998"
|
.TH ARES_DESTROY 3 "7 December 2004"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
ares_destroy \- Destroy a resolver channel
|
ares_destroy \- Destroy a resolver channel
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
.nf
|
.nf
|
||||||
.B #include <ares.h>
|
.B #include <ares.h>
|
||||||
.PP
|
.PP
|
||||||
.B int ares_destroy(ares_channel \fIchannel\fP)
|
.B void ares_destroy(ares_channel \fIchannel\fP)
|
||||||
.fi
|
.fi
|
||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
||||||
The
|
The
|
||||||
|
|||||||
@@ -13,6 +13,7 @@
|
|||||||
* without express or implied warranty.
|
* without express or implied warranty.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "setup.h"
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include "ares.h"
|
#include "ares.h"
|
||||||
#include "ares_private.h"
|
#include "ares_private.h"
|
||||||
|
|||||||
@@ -18,6 +18,18 @@
|
|||||||
#ifndef ARES__DNS_H
|
#ifndef ARES__DNS_H
|
||||||
#define ARES__DNS_H
|
#define ARES__DNS_H
|
||||||
|
|
||||||
|
#ifdef ARES_BIG_ENDIAN
|
||||||
|
/* big-endian aware versions */
|
||||||
|
#define DNS__16BIT(p) (((p)[1] << 8) | (p)[0])
|
||||||
|
#define DNS__32BIT(p) (((p)[3] << 24) | ((p)[2] << 16) | \
|
||||||
|
((p)[1] << 8) | (p)[0])
|
||||||
|
#define DNS__SET16BIT(p, v) (((p)[1] = ((v) >> 8) & 0xff), \
|
||||||
|
((p)[0] = (v) & 0xff))
|
||||||
|
#define DNS__SET32BIT(p, v) (((p)[3] = ((v) >> 24) & 0xff), \
|
||||||
|
((p)[2] = ((v) >> 16) & 0xff), \
|
||||||
|
((p)[1] = ((v) >> 8) & 0xff), \
|
||||||
|
((p)[0] = (v) & 0xff))
|
||||||
|
#else
|
||||||
#define DNS__16BIT(p) (((p)[0] << 8) | (p)[1])
|
#define DNS__16BIT(p) (((p)[0] << 8) | (p)[1])
|
||||||
#define DNS__32BIT(p) (((p)[0] << 24) | ((p)[1] << 16) | \
|
#define DNS__32BIT(p) (((p)[0] << 24) | ((p)[1] << 16) | \
|
||||||
((p)[2] << 8) | (p)[3])
|
((p)[2] << 8) | (p)[3])
|
||||||
@@ -27,6 +39,16 @@
|
|||||||
((p)[1] = ((v) >> 16) & 0xff), \
|
((p)[1] = ((v) >> 16) & 0xff), \
|
||||||
((p)[2] = ((v) >> 8) & 0xff), \
|
((p)[2] = ((v) >> 8) & 0xff), \
|
||||||
((p)[3] = (v) & 0xff))
|
((p)[3] = (v) & 0xff))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
/* we cannot use this approach on systems where we can't access 16/32 bit
|
||||||
|
data on un-aligned addresses */
|
||||||
|
#define DNS__16BIT(p) ntohs(*(unsigned short*)(p))
|
||||||
|
#define DNS__32BIT(p) ntohl(*(unsigned long*)(p))
|
||||||
|
#define DNS__SET16BIT(p, v) *(unsigned short*)(p) = htons(v)
|
||||||
|
#define DNS__SET32BIT(p, v) *(unsigned long*)(p) = htonl(v)
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Macros for parsing a DNS header */
|
/* Macros for parsing a DNS header */
|
||||||
#define DNS_HEADER_QID(h) DNS__16BIT(h)
|
#define DNS_HEADER_QID(h) DNS__16BIT(h)
|
||||||
|
|||||||
@@ -13,13 +13,17 @@
|
|||||||
* without express or implied warranty.
|
* without express or implied warranty.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "setup.h"
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
#ifdef WIN32
|
#if defined(WIN32) && !defined(WATT32)
|
||||||
#include "nameser.h"
|
#include "nameser.h"
|
||||||
#else
|
#else
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
#include <arpa/nameser.h>
|
#include <arpa/nameser.h>
|
||||||
|
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
|
||||||
|
#include <arpa/nameser_compat.h>
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@@ -102,6 +106,8 @@ int ares_expand_name(const unsigned char *encoded, const unsigned char *abuf,
|
|||||||
/* Nuke the trailing period if we wrote one. */
|
/* Nuke the trailing period if we wrote one. */
|
||||||
if (q > *s)
|
if (q > *s)
|
||||||
*(q - 1) = 0;
|
*(q - 1) = 0;
|
||||||
|
else
|
||||||
|
*q = 0; /* zero terminate */
|
||||||
|
|
||||||
return ARES_SUCCESS;
|
return ARES_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,9 +13,10 @@
|
|||||||
* without express or implied warranty.
|
* without express or implied warranty.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "setup.h"
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
#ifdef WIN32
|
#if defined(WIN32) && !defined(WATT32)
|
||||||
#include "nameser.h"
|
#include "nameser.h"
|
||||||
#else
|
#else
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this
|
* Permission to use, copy, modify, and distribute this
|
||||||
@@ -13,11 +15,10 @@
|
|||||||
* without express or implied warranty.
|
* without express or implied warranty.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "setup.h"
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef HAVE_SYS_TIME_H
|
||||||
|
|
||||||
#else
|
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -27,7 +28,8 @@
|
|||||||
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)
|
||||||
{
|
{
|
||||||
struct server_state *server;
|
struct server_state *server;
|
||||||
int i, nfds;
|
ares_socket_t nfds;
|
||||||
|
int i;
|
||||||
|
|
||||||
/* No queries, no file descriptors. */
|
/* No queries, no file descriptors. */
|
||||||
if (!channel->queries)
|
if (!channel->queries)
|
||||||
@@ -37,13 +39,13 @@ int ares_fds(ares_channel channel, fd_set *read_fds, fd_set *write_fds)
|
|||||||
for (i = 0; i < channel->nservers; i++)
|
for (i = 0; i < channel->nservers; i++)
|
||||||
{
|
{
|
||||||
server = &channel->servers[i];
|
server = &channel->servers[i];
|
||||||
if (server->udp_socket != -1)
|
if (server->udp_socket != ARES_SOCKET_BAD)
|
||||||
{
|
{
|
||||||
FD_SET(server->udp_socket, read_fds);
|
FD_SET(server->udp_socket, read_fds);
|
||||||
if (server->udp_socket >= nfds)
|
if (server->udp_socket >= nfds)
|
||||||
nfds = server->udp_socket + 1;
|
nfds = server->udp_socket + 1;
|
||||||
}
|
}
|
||||||
if (server->tcp_socket != -1)
|
if (server->tcp_socket != ARES_SOCKET_BAD)
|
||||||
{
|
{
|
||||||
FD_SET(server->tcp_socket, read_fds);
|
FD_SET(server->tcp_socket, read_fds);
|
||||||
if (server->qhead)
|
if (server->qhead)
|
||||||
@@ -52,5 +54,5 @@ int ares_fds(ares_channel channel, fd_set *read_fds, fd_set *write_fds)
|
|||||||
nfds = server->tcp_socket + 1;
|
nfds = server->tcp_socket + 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nfds;
|
return (int)nfds;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,8 +28,8 @@ The
|
|||||||
.I ares_free_hostent
|
.I ares_free_hostent
|
||||||
function frees a
|
function frees a
|
||||||
.B struct hostent
|
.B struct hostent
|
||||||
allocated by one of the functions \fIares_parse_a_reply(3)\fP or
|
allocated by one of the functions \fIares_parse_a_reply(3)\fP,
|
||||||
\fIares_parse_ptr_reply(3)\fP.
|
\fIares_parse_aaaa_reply(3)\fP, or \fIares_parse_ptr_reply(3)\fP.
|
||||||
.SH NOTES
|
.SH NOTES
|
||||||
It is not necessary (and is not correct) to free the host structure passed to
|
It is not necessary (and is not correct) to free the host structure passed to
|
||||||
the callback functions for \fIares_gethostbyname(3)\fP or
|
the callback functions for \fIares_gethostbyname(3)\fP or
|
||||||
@@ -37,6 +37,7 @@ the callback functions for \fIares_gethostbyname(3)\fP or
|
|||||||
host structures when the callback returns.
|
host structures when the callback returns.
|
||||||
.SH SEE ALSO
|
.SH SEE ALSO
|
||||||
.BR ares_parse_a_reply (3),
|
.BR ares_parse_a_reply (3),
|
||||||
|
.BR ares_parse_aaaa_reply (3),
|
||||||
.BR ares_parse_ptr_reply (3)
|
.BR ares_parse_ptr_reply (3)
|
||||||
.SH AUTHOR
|
.SH AUTHOR
|
||||||
Greg Hudson, MIT Information Systems
|
Greg Hudson, MIT Information Systems
|
||||||
|
|||||||
@@ -13,11 +13,10 @@
|
|||||||
* without express or implied warranty.
|
* without express or implied warranty.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "setup.h"
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
#ifdef WIN32
|
#if !defined(WIN32) || defined(WATT32)
|
||||||
|
|
||||||
#else
|
|
||||||
#include <netdb.h>
|
#include <netdb.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -13,6 +13,7 @@
|
|||||||
* without express or implied warranty.
|
* without express or implied warranty.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "setup.h"
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include "ares.h"
|
#include "ares.h"
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this
|
* Permission to use, copy, modify, and distribute this
|
||||||
@@ -12,28 +14,38 @@
|
|||||||
* 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.
|
||||||
*/
|
*/
|
||||||
|
#include "setup.h"
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
#ifdef WIN32
|
#if defined(WIN32) && !defined(WATT32)
|
||||||
#include "nameser.h"
|
#include "nameser.h"
|
||||||
#else
|
#else
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
#include <netdb.h>
|
#include <netdb.h>
|
||||||
#include <arpa/nameser.h>
|
#include <arpa/nameser.h>
|
||||||
|
#ifdef HAVE_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 "ares.h"
|
#include "ares.h"
|
||||||
#include "ares_private.h"
|
#include "ares_private.h"
|
||||||
|
#include "inet_net_pton.h"
|
||||||
|
|
||||||
|
#ifdef WATT32
|
||||||
|
#undef WIN32
|
||||||
|
#endif
|
||||||
|
|
||||||
struct addr_query {
|
struct addr_query {
|
||||||
/* Arguments passed to ares_gethostbyaddr() */
|
/* Arguments passed to ares_gethostbyaddr() */
|
||||||
ares_channel channel;
|
ares_channel channel;
|
||||||
struct in_addr addr;
|
union ares_addr addr;
|
||||||
|
int family;
|
||||||
ares_host_callback callback;
|
ares_host_callback callback;
|
||||||
void *arg;
|
void *arg;
|
||||||
|
|
||||||
@@ -45,14 +57,21 @@ static void addr_callback(void *arg, int status, unsigned char *abuf,
|
|||||||
int alen);
|
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(struct in_addr *addr, struct hostent **host);
|
static int file_lookup(union ares_addr *addr, 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)
|
||||||
{
|
{
|
||||||
struct addr_query *aquery;
|
struct addr_query *aquery;
|
||||||
|
|
||||||
if (family != AF_INET || addrlen != sizeof(struct in_addr))
|
if (family != AF_INET && family != AF_INET6)
|
||||||
|
{
|
||||||
|
callback(arg, ARES_ENOTIMP, NULL);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((family == AF_INET && addrlen != sizeof(struct in_addr)) ||
|
||||||
|
(family == AF_INET6 && addrlen != sizeof(struct in6_addr)))
|
||||||
{
|
{
|
||||||
callback(arg, ARES_ENOTIMP, NULL);
|
callback(arg, ARES_ENOTIMP, NULL);
|
||||||
return;
|
return;
|
||||||
@@ -65,7 +84,11 @@ void ares_gethostbyaddr(ares_channel channel, const void *addr, int addrlen,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
aquery->channel = channel;
|
aquery->channel = channel;
|
||||||
memcpy(&aquery->addr, addr, sizeof(aquery->addr));
|
if (family == AF_INET)
|
||||||
|
memcpy(&aquery->addr.addr4, addr, sizeof(struct in_addr));
|
||||||
|
else
|
||||||
|
memcpy(&aquery->addr.addr6, addr, sizeof(struct in6_addr));
|
||||||
|
aquery->family = family;
|
||||||
aquery->callback = callback;
|
aquery->callback = callback;
|
||||||
aquery->arg = arg;
|
aquery->arg = arg;
|
||||||
aquery->remaining_lookups = channel->lookups;
|
aquery->remaining_lookups = channel->lookups;
|
||||||
@@ -76,7 +99,7 @@ void ares_gethostbyaddr(ares_channel channel, const void *addr, int addrlen,
|
|||||||
static void next_lookup(struct addr_query *aquery)
|
static void next_lookup(struct addr_query *aquery)
|
||||||
{
|
{
|
||||||
const char *p;
|
const char *p;
|
||||||
char name[64];
|
char name[128];
|
||||||
int a1, a2, a3, a4, status;
|
int a1, a2, a3, a4, status;
|
||||||
struct hostent *host;
|
struct hostent *host;
|
||||||
unsigned long addr;
|
unsigned long addr;
|
||||||
@@ -86,7 +109,9 @@ static void next_lookup(struct addr_query *aquery)
|
|||||||
switch (*p)
|
switch (*p)
|
||||||
{
|
{
|
||||||
case 'b':
|
case 'b':
|
||||||
addr = ntohl(aquery->addr.s_addr);
|
if (aquery->family == AF_INET)
|
||||||
|
{
|
||||||
|
addr = ntohl(aquery->addr.addr4.s_addr);
|
||||||
a1 = (int)((addr >> 24) & 0xff);
|
a1 = (int)((addr >> 24) & 0xff);
|
||||||
a2 = (int)((addr >> 16) & 0xff);
|
a2 = (int)((addr >> 16) & 0xff);
|
||||||
a3 = (int)((addr >> 8) & 0xff);
|
a3 = (int)((addr >> 8) & 0xff);
|
||||||
@@ -95,9 +120,27 @@ static void next_lookup(struct addr_query *aquery)
|
|||||||
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);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
unsigned char *bytes;
|
||||||
|
bytes = (unsigned char *)&aquery->addr.addr6.s6_addr;
|
||||||
|
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.ip6.arpa",
|
||||||
|
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[11]&0xf, bytes[11] >> 4, bytes[10]&0xf, bytes[10] >> 4,
|
||||||
|
bytes[9]&0xf, bytes[9] >> 4, bytes[8]&0xf, bytes[8] >> 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[3]&0xf, bytes[3] >> 4, bytes[2]&0xf, bytes[2] >> 4,
|
||||||
|
bytes[1]&0xf, bytes[1] >> 4, bytes[0]&0xf, bytes[0] >> 4);
|
||||||
|
aquery->remaining_lookups = p + 1;
|
||||||
|
ares_query(aquery->channel, name, C_IN, T_PTR, addr_callback,
|
||||||
|
aquery);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
case 'f':
|
case 'f':
|
||||||
status = file_lookup(&aquery->addr, &host);
|
status = file_lookup(&aquery->addr, aquery->family, &host);
|
||||||
if (status != ARES_ENOTFOUND)
|
if (status != ARES_ENOTFOUND)
|
||||||
{
|
{
|
||||||
end_aquery(aquery, status, host);
|
end_aquery(aquery, status, host);
|
||||||
@@ -116,8 +159,12 @@ static void addr_callback(void *arg, int status, unsigned char *abuf, int alen)
|
|||||||
|
|
||||||
if (status == ARES_SUCCESS)
|
if (status == ARES_SUCCESS)
|
||||||
{
|
{
|
||||||
status = ares_parse_ptr_reply(abuf, alen, &aquery->addr,
|
if (aquery->family == AF_INET)
|
||||||
|
status = ares_parse_ptr_reply(abuf, alen, &aquery->addr.addr4,
|
||||||
sizeof(struct in_addr), AF_INET, &host);
|
sizeof(struct in_addr), AF_INET, &host);
|
||||||
|
else
|
||||||
|
status = ares_parse_ptr_reply(abuf, alen, &aquery->addr.addr6,
|
||||||
|
sizeof(struct in6_addr), AF_INET6, &host);
|
||||||
end_aquery(aquery, status, host);
|
end_aquery(aquery, status, host);
|
||||||
}
|
}
|
||||||
else if (status == ARES_EDESTRUCTION)
|
else if (status == ARES_EDESTRUCTION)
|
||||||
@@ -135,32 +182,60 @@ static void end_aquery(struct addr_query *aquery, int status,
|
|||||||
free(aquery);
|
free(aquery);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int file_lookup(struct in_addr *addr, struct hostent **host)
|
static int file_lookup(union ares_addr *addr, int family, struct hostent **host)
|
||||||
{
|
{
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
int status;
|
int status;
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
|
|
||||||
char PATH_HOSTS[MAX_PATH];
|
char PATH_HOSTS[MAX_PATH];
|
||||||
if (IsNT) {
|
if (IS_NT()) {
|
||||||
GetSystemDirectory(PATH_HOSTS, MAX_PATH);
|
char tmp[MAX_PATH];
|
||||||
strcat(PATH_HOSTS, PATH_HOSTS_NT);
|
HKEY hkeyHosts;
|
||||||
} else {
|
|
||||||
GetWindowsDirectory(PATH_HOSTS, MAX_PATH);
|
|
||||||
strcat(PATH_HOSTS, PATH_HOSTS_9X);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, WIN_NS_NT_KEY, 0, KEY_READ, &hkeyHosts)
|
||||||
|
== ERROR_SUCCESS)
|
||||||
|
{
|
||||||
|
DWORD dwLength = MAX_PATH;
|
||||||
|
RegQueryValueEx(hkeyHosts, DATABASEPATH, NULL, NULL, (LPBYTE)tmp,
|
||||||
|
&dwLength);
|
||||||
|
ExpandEnvironmentStrings(tmp, PATH_HOSTS, MAX_PATH);
|
||||||
|
RegCloseKey(hkeyHosts);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
GetWindowsDirectory(PATH_HOSTS, MAX_PATH);
|
||||||
|
|
||||||
|
strcat(PATH_HOSTS, WIN_PATH_HOSTS);
|
||||||
|
|
||||||
|
#elif defined(WATT32)
|
||||||
|
extern const char *_w32_GetHostsFile (void);
|
||||||
|
const char *PATH_HOSTS = _w32_GetHostsFile();
|
||||||
|
|
||||||
|
if (!PATH_HOSTS)
|
||||||
|
return ARES_ENOTFOUND;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
fp = fopen(PATH_HOSTS, "r");
|
fp = fopen(PATH_HOSTS, "r");
|
||||||
if (!fp)
|
if (!fp)
|
||||||
return ARES_ENOTFOUND;
|
return ARES_ENOTFOUND;
|
||||||
|
while ((status = ares__get_hostent(fp, family, host)) == ARES_SUCCESS)
|
||||||
while ((status = ares__get_hostent(fp, host)) == ARES_SUCCESS)
|
|
||||||
{
|
{
|
||||||
if (memcmp((*host)->h_addr, addr, sizeof(struct in_addr)) == 0)
|
if (family != (*host)->h_addrtype)
|
||||||
|
{
|
||||||
|
ares_free_hostent(*host);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (family == AF_INET)
|
||||||
|
{
|
||||||
|
if (memcmp((*host)->h_addr, &addr->addr4, sizeof(struct in_addr)) == 0)
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
else if (family == AF_INET6)
|
||||||
|
{
|
||||||
|
if (memcmp((*host)->h_addr, &addr->addr6, sizeof(struct in6_addr)) == 0)
|
||||||
|
break;
|
||||||
|
}
|
||||||
ares_free_hostent(*host);
|
ares_free_hostent(*host);
|
||||||
}
|
}
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
|
|||||||
@@ -13,24 +13,37 @@
|
|||||||
* without express or implied warranty.
|
* without express or implied warranty.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "setup.h"
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
#ifdef WIN32
|
#if defined(WIN32) && !defined(WATT32)
|
||||||
#include "nameser.h"
|
#include "nameser.h"
|
||||||
#else
|
#else
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
#include <arpa/inet.h>
|
#include <arpa/inet.h>
|
||||||
#include <netdb.h>
|
#include <netdb.h>
|
||||||
|
#ifdef HAVE_ARPA_NAMESER_H
|
||||||
#include <arpa/nameser.h>
|
#include <arpa/nameser.h>
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
|
||||||
|
#include <arpa/nameser_compat.h>
|
||||||
|
#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>
|
||||||
|
|
||||||
#include "ares.h"
|
#include "ares.h"
|
||||||
#include "ares_private.h"
|
#include "ares_private.h"
|
||||||
|
#include "inet_net_pton.h"
|
||||||
|
#include "bitncmp.h"
|
||||||
|
|
||||||
|
#ifdef WATT32
|
||||||
|
#undef WIN32
|
||||||
|
#endif
|
||||||
|
|
||||||
struct host_query {
|
struct host_query {
|
||||||
/* Arguments passed to ares_gethostbyname() */
|
/* Arguments passed to ares_gethostbyname() */
|
||||||
@@ -38,7 +51,7 @@ struct host_query {
|
|||||||
char *name;
|
char *name;
|
||||||
ares_host_callback callback;
|
ares_host_callback callback;
|
||||||
void *arg;
|
void *arg;
|
||||||
|
int family;
|
||||||
const char *remaining_lookups;
|
const char *remaining_lookups;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -47,13 +60,17 @@ static void host_callback(void *arg, int status, unsigned char *abuf,
|
|||||||
int alen);
|
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, ares_host_callback callback,
|
static int fake_hostent(const char *name, int family, ares_host_callback callback,
|
||||||
void *arg);
|
void *arg);
|
||||||
static int file_lookup(const char *name, 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, struct apattern *sortlist,
|
||||||
int nsort);
|
int nsort);
|
||||||
|
static void sort6_addresses(struct hostent *host, struct apattern *sortlist,
|
||||||
|
int nsort);
|
||||||
static int get_address_index(struct in_addr *addr, struct apattern *sortlist,
|
static int get_address_index(struct in_addr *addr, struct apattern *sortlist,
|
||||||
int nsort);
|
int nsort);
|
||||||
|
static int get6_address_index(struct in6_addr *addr, 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)
|
||||||
@@ -61,13 +78,13 @@ void ares_gethostbyname(ares_channel channel, const char *name, int family,
|
|||||||
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. */
|
||||||
if (family != AF_INET)
|
if (family != AF_INET && family != AF_INET6)
|
||||||
{
|
{
|
||||||
callback(arg, ARES_ENOTIMP, NULL);
|
callback(arg, ARES_ENOTIMP, NULL);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fake_hostent(name, callback, arg))
|
if (fake_hostent(name, family, callback, arg))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* Allocate and fill in the host query structure. */
|
/* Allocate and fill in the host query structure. */
|
||||||
@@ -79,6 +96,7 @@ 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;
|
||||||
if (!hquery->name)
|
if (!hquery->name)
|
||||||
{
|
{
|
||||||
free(hquery);
|
free(hquery);
|
||||||
@@ -106,13 +124,17 @@ static void next_lookup(struct host_query *hquery)
|
|||||||
case 'b':
|
case 'b':
|
||||||
/* DNS lookup */
|
/* DNS lookup */
|
||||||
hquery->remaining_lookups = p + 1;
|
hquery->remaining_lookups = p + 1;
|
||||||
|
if (hquery->family == AF_INET6)
|
||||||
|
ares_search(hquery->channel, hquery->name, C_IN, T_AAAA, host_callback,
|
||||||
|
hquery);
|
||||||
|
else
|
||||||
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, &host);
|
status = file_lookup(hquery->name, hquery->family, &host);
|
||||||
if (status != ARES_ENOTFOUND)
|
if (status != ARES_ENOTFOUND)
|
||||||
{
|
{
|
||||||
end_hquery(hquery, status, host);
|
end_hquery(hquery, status, host);
|
||||||
@@ -131,12 +153,28 @@ static void host_callback(void *arg, int status, unsigned char *abuf, int alen)
|
|||||||
struct hostent *host;
|
struct hostent *host;
|
||||||
|
|
||||||
if (status == ARES_SUCCESS)
|
if (status == ARES_SUCCESS)
|
||||||
|
{
|
||||||
|
if (hquery->family == AF_INET)
|
||||||
{
|
{
|
||||||
status = ares_parse_a_reply(abuf, alen, &host);
|
status = ares_parse_a_reply(abuf, alen, &host);
|
||||||
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)
|
||||||
|
{
|
||||||
|
status = ares_parse_aaaa_reply(abuf, alen, &host);
|
||||||
|
if (host && 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)
|
||||||
|
{
|
||||||
|
/* There was no AAAA now lookup an A */
|
||||||
|
hquery->family = AF_INET;
|
||||||
|
ares_search(hquery->channel, hquery->name, C_IN, T_A, host_callback,
|
||||||
|
hquery);
|
||||||
|
}
|
||||||
else if (status == ARES_EDESTRUCTION)
|
else if (status == ARES_EDESTRUCTION)
|
||||||
end_hquery(hquery, status, NULL);
|
end_hquery(hquery, status, NULL);
|
||||||
else
|
else
|
||||||
@@ -156,36 +194,34 @@ static void end_hquery(struct host_query *hquery, int status,
|
|||||||
/* If the name looks like an IP address, fake up a host entry, end the
|
/* If the name looks like an IP address, fake up a host entry, end the
|
||||||
* query immediately, and return true. Otherwise return false.
|
* query immediately, and return true. Otherwise return false.
|
||||||
*/
|
*/
|
||||||
static int fake_hostent(const char *name, ares_host_callback callback,
|
static int fake_hostent(const char *name, int family, ares_host_callback callback,
|
||||||
void *arg)
|
void *arg)
|
||||||
{
|
{
|
||||||
struct in_addr addr;
|
|
||||||
struct hostent hostent;
|
struct hostent hostent;
|
||||||
const char *p;
|
|
||||||
char *aliases[1] = { NULL };
|
char *aliases[1] = { NULL };
|
||||||
char *addrs[2];
|
char *addrs[2];
|
||||||
|
int result = 0;
|
||||||
|
struct in_addr in;
|
||||||
|
struct in6_addr in6;
|
||||||
|
|
||||||
/* It only looks like an IP address if it's all numbers and dots. */
|
if (family == AF_INET)
|
||||||
for (p = name; *p; p++)
|
result = ((in.s_addr = inet_addr(name)) == INADDR_NONE ? 0 : 1);
|
||||||
{
|
else if (family == AF_INET6)
|
||||||
if (!isdigit((unsigned char)*p) && *p != '.')
|
result = (ares_inet_pton(AF_INET6, name, &in6) < 1 ? 0 : 1);
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* It also only looks like an IP address if it's non-zero-length and
|
if (!result)
|
||||||
* doesn't end with a dot.
|
|
||||||
*/
|
|
||||||
if (p == name || *(p - 1) == '.')
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/* It looks like an IP address. Figure out what IP address it is. */
|
if (family == AF_INET)
|
||||||
addr.s_addr = inet_addr(name);
|
|
||||||
if (addr.s_addr == INADDR_NONE)
|
|
||||||
{
|
{
|
||||||
callback(arg, ARES_EBADNAME, NULL);
|
hostent.h_length = sizeof(struct in_addr);
|
||||||
return 1;
|
addrs[0] = (char *)∈
|
||||||
|
}
|
||||||
|
else if (family == AF_INET6)
|
||||||
|
{
|
||||||
|
hostent.h_length = sizeof(struct in6_addr);
|
||||||
|
addrs[0] = (char *)&in6;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Duplicate the name, to avoid a constness violation. */
|
/* Duplicate the name, to avoid a constness violation. */
|
||||||
hostent.h_name = strdup(name);
|
hostent.h_name = strdup(name);
|
||||||
if (!hostent.h_name)
|
if (!hostent.h_name)
|
||||||
@@ -195,11 +231,9 @@ static int fake_hostent(const char *name, ares_host_callback callback,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Fill in the rest of the host structure and terminate the query. */
|
/* Fill in the rest of the host structure and terminate the query. */
|
||||||
addrs[0] = (char *) &addr;
|
|
||||||
addrs[1] = NULL;
|
addrs[1] = NULL;
|
||||||
hostent.h_aliases = aliases;
|
hostent.h_aliases = aliases;
|
||||||
hostent.h_addrtype = AF_INET;
|
hostent.h_addrtype = family;
|
||||||
hostent.h_length = sizeof(struct in_addr);
|
|
||||||
hostent.h_addr_list = addrs;
|
hostent.h_addr_list = addrs;
|
||||||
callback(arg, ARES_SUCCESS, &hostent);
|
callback(arg, ARES_SUCCESS, &hostent);
|
||||||
|
|
||||||
@@ -207,30 +241,46 @@ static int fake_hostent(const char *name, ares_host_callback callback,
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int file_lookup(const char *name, struct hostent **host)
|
static int file_lookup(const char *name, int family, struct hostent **host)
|
||||||
{
|
{
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
char **alias;
|
char **alias;
|
||||||
int status;
|
int status;
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
|
|
||||||
char PATH_HOSTS[MAX_PATH];
|
char PATH_HOSTS[MAX_PATH];
|
||||||
if (IsNT) {
|
if (IS_NT()) {
|
||||||
GetSystemDirectory(PATH_HOSTS, MAX_PATH);
|
char tmp[MAX_PATH];
|
||||||
strcat(PATH_HOSTS, PATH_HOSTS_NT);
|
HKEY hkeyHosts;
|
||||||
} else {
|
|
||||||
GetWindowsDirectory(PATH_HOSTS, MAX_PATH);
|
|
||||||
strcat(PATH_HOSTS, PATH_HOSTS_9X);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, WIN_NS_NT_KEY, 0, KEY_READ, &hkeyHosts)
|
||||||
|
== ERROR_SUCCESS)
|
||||||
|
{
|
||||||
|
DWORD dwLength = MAX_PATH;
|
||||||
|
RegQueryValueEx(hkeyHosts, DATABASEPATH, NULL, NULL, (LPBYTE)tmp,
|
||||||
|
&dwLength);
|
||||||
|
ExpandEnvironmentStrings(tmp, PATH_HOSTS, MAX_PATH);
|
||||||
|
RegCloseKey(hkeyHosts);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
GetWindowsDirectory(PATH_HOSTS, MAX_PATH);
|
||||||
|
|
||||||
|
strcat(PATH_HOSTS, WIN_PATH_HOSTS);
|
||||||
|
|
||||||
|
#elif defined(WATT32)
|
||||||
|
extern const char *_w32_GetHostsFile (void);
|
||||||
|
const char *PATH_HOSTS = _w32_GetHostsFile();
|
||||||
|
|
||||||
|
if (!PATH_HOSTS)
|
||||||
|
return ARES_ENOTFOUND;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
fp = fopen(PATH_HOSTS, "r");
|
fp = fopen(PATH_HOSTS, "r");
|
||||||
if (!fp)
|
if (!fp)
|
||||||
return ARES_ENOTFOUND;
|
return ARES_ENOTFOUND;
|
||||||
|
|
||||||
while ((status = ares__get_hostent(fp, host)) == ARES_SUCCESS)
|
while ((status = ares__get_hostent(fp, family, host)) == ARES_SUCCESS)
|
||||||
{
|
{
|
||||||
if (strcasecmp((*host)->h_name, name) == 0)
|
if (strcasecmp((*host)->h_name, name) == 0)
|
||||||
break;
|
break;
|
||||||
@@ -288,8 +338,66 @@ static int get_address_index(struct in_addr *addr, struct apattern *sortlist,
|
|||||||
|
|
||||||
for (i = 0; i < nsort; i++)
|
for (i = 0; i < nsort; i++)
|
||||||
{
|
{
|
||||||
if ((addr->s_addr & sortlist[i].mask.s_addr) == sortlist[i].addr.s_addr)
|
if (sortlist[i].family != AF_INET)
|
||||||
|
continue;
|
||||||
|
if (sortlist[i].type == PATTERN_MASK)
|
||||||
|
{
|
||||||
|
if ((addr->s_addr & sortlist[i].mask.addr.addr4.s_addr)
|
||||||
|
== sortlist[i].addr.addr4.s_addr)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (!ares_bitncmp(&addr->s_addr, &sortlist[i].addr.addr4.s_addr,
|
||||||
|
sortlist[i].mask.bits))
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void sort6_addresses(struct hostent *host, struct apattern *sortlist,
|
||||||
|
int nsort)
|
||||||
|
{
|
||||||
|
struct in6_addr a1, a2;
|
||||||
|
int i1, i2, ind1, ind2;
|
||||||
|
|
||||||
|
/* This is a simple insertion sort, not optimized at all. i1 walks
|
||||||
|
* through the address list, with the loop invariant that everything
|
||||||
|
* to the left of i1 is sorted. In the loop body, the value at i1 is moved
|
||||||
|
* back through the list (via i2) until it is in sorted order.
|
||||||
|
*/
|
||||||
|
for (i1 = 0; host->h_addr_list[i1]; i1++)
|
||||||
|
{
|
||||||
|
memcpy(&a1, host->h_addr_list[i1], sizeof(struct in6_addr));
|
||||||
|
ind1 = get6_address_index(&a1, sortlist, nsort);
|
||||||
|
for (i2 = i1 - 1; i2 >= 0; i2--)
|
||||||
|
{
|
||||||
|
memcpy(&a2, host->h_addr_list[i2], sizeof(struct in6_addr));
|
||||||
|
ind2 = get6_address_index(&a2, sortlist, nsort);
|
||||||
|
if (ind2 <= ind1)
|
||||||
|
break;
|
||||||
|
memcpy(host->h_addr_list[i2 + 1], &a2, sizeof(struct in6_addr));
|
||||||
|
}
|
||||||
|
memcpy(host->h_addr_list[i2 + 1], &a1, sizeof(struct in6_addr));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Find the first entry in sortlist which matches addr. Return nsort
|
||||||
|
* if none of them match.
|
||||||
|
*/
|
||||||
|
static int get6_address_index(struct in6_addr *addr, struct apattern *sortlist,
|
||||||
|
int nsort)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < nsort; i++)
|
||||||
|
{
|
||||||
|
if (sortlist[i].family != AF_INET6)
|
||||||
|
continue;
|
||||||
|
if (!ares_bitncmp(&addr->s6_addr, &sortlist[i].addr.addr6.s6_addr, sortlist[i].mask.bits))
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
145
ares/ares_getnameinfo.3
Normal file
145
ares/ares_getnameinfo.3
Normal file
@@ -0,0 +1,145 @@
|
|||||||
|
.\" $Id$
|
||||||
|
.\"
|
||||||
|
.\" Copyright 2005 by Dominick Meglio.
|
||||||
|
.\"
|
||||||
|
.\" 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_GETNAMEINFO 3 "16 May 2005"
|
||||||
|
.SH NAME
|
||||||
|
ares_getnameinfo \- Address-to-nodename translation in protocol-independent manner
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.nf
|
||||||
|
.B #include <ares.h>
|
||||||
|
.PP
|
||||||
|
.B typedef void (*ares_nameinfo_callback)(void *\fIarg\fP, int \fIstatus\fP,
|
||||||
|
.B char *\fInode\fP, char *\fIservice\fP)
|
||||||
|
.PP
|
||||||
|
.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 void *\fIarg\fP)
|
||||||
|
.fi
|
||||||
|
.SH DESCRIPTION
|
||||||
|
The
|
||||||
|
.B ares_getnameinfo
|
||||||
|
function is defined for protocol-independent address translation. The function
|
||||||
|
is a combination of \fIares_gethostbyaddr(3)\fP and \fIgetservbyport(3)\fP. The function will
|
||||||
|
translate the address either by executing a host query on the name service channel
|
||||||
|
identified by
|
||||||
|
.IR channel
|
||||||
|
or it will attempt to resolve it locally if possible.
|
||||||
|
The parameters
|
||||||
|
.I sa
|
||||||
|
and
|
||||||
|
.I len
|
||||||
|
give the address as a sockaddr structure, and
|
||||||
|
.I flags
|
||||||
|
gives the options that the function will use. Valid flags are listed below:
|
||||||
|
.TP 19
|
||||||
|
.B ARES_NI_NOFQDN
|
||||||
|
Only the nodename portion of the FQDN is returned for local hosts.
|
||||||
|
.TP 19
|
||||||
|
.B ARES_NI_NUMERICHOST
|
||||||
|
The numeric form of the hostname is returned rather than the name.
|
||||||
|
.TP 19
|
||||||
|
.B ARES_NI_NAMEREQD
|
||||||
|
An error is returned if the hostname cannot be found in the DNS.
|
||||||
|
.TP 19
|
||||||
|
.B ARES_NI_NUMERICSERV
|
||||||
|
The numeric form of the service is returned rather than the name.
|
||||||
|
.TP 19
|
||||||
|
.B ARES_NI_TCP
|
||||||
|
The service name is to be looked up for the TCP protocol.
|
||||||
|
.TP 19
|
||||||
|
.B ARES_NI_UDP
|
||||||
|
The service name is to be looked up for the UDP protocol.
|
||||||
|
.TP 19
|
||||||
|
.B ARES_NI_SCTP
|
||||||
|
The service name is to be looked up for the SCTP protocol.
|
||||||
|
.TP 19
|
||||||
|
.B ARES_NI_DCCP
|
||||||
|
The service name is to be looked up for the DCCP protocol.
|
||||||
|
.TP 19
|
||||||
|
.B ARES_NI_NUMERICSCOPE
|
||||||
|
The numeric form of the scope ID is returned rather than the name.
|
||||||
|
.TP 19
|
||||||
|
.B ARES_NI_LOOKUPHOST
|
||||||
|
A hostname lookup is being requested.
|
||||||
|
.TP 19
|
||||||
|
.B ARES_NI_LOOKUPSERVICE
|
||||||
|
A service name lookup is being requested.
|
||||||
|
.PP
|
||||||
|
When the query
|
||||||
|
is complete or has
|
||||||
|
failed, the ares library will invoke \fIcallback\fP. Completion or failure of
|
||||||
|
the query may happen immediately, or may happen during a later call to
|
||||||
|
\fIares_process(3)\fP, \fIares_destroy(3)\fP or \fIares_cancel(3)\fP.
|
||||||
|
.PP
|
||||||
|
The callback argument
|
||||||
|
.I arg
|
||||||
|
is copied from the
|
||||||
|
.B ares_getnameinfo
|
||||||
|
argument
|
||||||
|
.IR arg .
|
||||||
|
The callback argument
|
||||||
|
.I status
|
||||||
|
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.
|
||||||
|
.TP 19
|
||||||
|
.B ARES_ENOTIMP
|
||||||
|
The ares library does not know how to look up addresses of type
|
||||||
|
.IR family .
|
||||||
|
.TP 19
|
||||||
|
.B ARES_ENOTFOUND
|
||||||
|
The address
|
||||||
|
.I addr
|
||||||
|
was not found.
|
||||||
|
.TP 19
|
||||||
|
.B ARES_ENOMEM
|
||||||
|
Memory was exhausted.
|
||||||
|
.TP 19
|
||||||
|
.B ARES_EDESTRUCTION
|
||||||
|
The name service channel
|
||||||
|
.I channel
|
||||||
|
is being destroyed; the query will not be completed.
|
||||||
|
.TP 19
|
||||||
|
.B ARES_EBADFLAGS
|
||||||
|
The
|
||||||
|
.I flags
|
||||||
|
parameter contains an illegal value.
|
||||||
|
.PP
|
||||||
|
On successful completion of the query, the callback argument
|
||||||
|
.I node
|
||||||
|
contains a string representing the hostname (assuming
|
||||||
|
.B ARES_NI_LOOKUPHOST
|
||||||
|
was specified). Additionally,
|
||||||
|
.I service
|
||||||
|
contains a string representing the service name (assuming
|
||||||
|
.B ARES_NI_LOOKUPSERVICE
|
||||||
|
was specified).
|
||||||
|
If the query did not complete successfully, or one of the values
|
||||||
|
was not requested,
|
||||||
|
.I node
|
||||||
|
or
|
||||||
|
.I service
|
||||||
|
will be
|
||||||
|
.BR NULL .
|
||||||
|
.SH SEE ALSO
|
||||||
|
.BR ares_process (3),
|
||||||
|
.BR ares_getaddrinfo (3)
|
||||||
|
.SH AUTHOR
|
||||||
|
Dominick Meglio
|
||||||
|
.br
|
||||||
|
Copyright 2005 by Dominick Meglio.
|
||||||
382
ares/ares_getnameinfo.c
Normal file
382
ares/ares_getnameinfo.c
Normal file
@@ -0,0 +1,382 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
|
/* Copyright 2005 by Dominick Meglio
|
||||||
|
*
|
||||||
|
* 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 <sys/types.h>
|
||||||
|
#include <ctype.h>
|
||||||
|
|
||||||
|
#if defined(WIN32) && !defined(WATT32)
|
||||||
|
#include "nameser.h"
|
||||||
|
#else
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#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_NET_IF_H
|
||||||
|
#include <net/if.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_UNISTD_H
|
||||||
|
#include <unistd.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include "ares.h"
|
||||||
|
#include "ares_private.h"
|
||||||
|
#include "ares_ipv6.h"
|
||||||
|
#include "inet_ntop.h"
|
||||||
|
|
||||||
|
#ifdef WATT32
|
||||||
|
#undef WIN32
|
||||||
|
#endif
|
||||||
|
|
||||||
|
struct nameinfo_query {
|
||||||
|
ares_nameinfo_callback callback;
|
||||||
|
void *arg;
|
||||||
|
union {
|
||||||
|
struct sockaddr_in addr4;
|
||||||
|
struct sockaddr_in6 addr6;
|
||||||
|
} addr;
|
||||||
|
int family;
|
||||||
|
int flags;
|
||||||
|
};
|
||||||
|
|
||||||
|
#ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID
|
||||||
|
#define IPBUFSIZ 40+IF_NAMESIZE
|
||||||
|
#else
|
||||||
|
#define IPBUFSIZ 40
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static void nameinfo_callback(void *arg, int status, struct hostent *host);
|
||||||
|
static char *lookup_service(unsigned short port, int flags,
|
||||||
|
char *buf, size_t buflen);
|
||||||
|
#ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID
|
||||||
|
static void append_scopeid(struct sockaddr_in6 *addr6, unsigned int scopeid,
|
||||||
|
char *buf, size_t buflen);
|
||||||
|
#endif
|
||||||
|
static char *ares_striendstr(const char *s1, const char *s2);
|
||||||
|
|
||||||
|
void ares_getnameinfo(ares_channel channel, const struct sockaddr *sa, socklen_t salen,
|
||||||
|
int flags, ares_nameinfo_callback callback, void *arg)
|
||||||
|
{
|
||||||
|
struct sockaddr_in *addr = NULL;
|
||||||
|
struct sockaddr_in6 *addr6 = NULL;
|
||||||
|
struct nameinfo_query *niquery;
|
||||||
|
|
||||||
|
/* Verify the buffer size */
|
||||||
|
if (salen == sizeof(struct sockaddr_in))
|
||||||
|
addr = (struct sockaddr_in *)sa;
|
||||||
|
else if (salen == sizeof(struct sockaddr_in6))
|
||||||
|
addr6 = (struct sockaddr_in6 *)sa;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
callback(arg, ARES_ENOTIMP, NULL, NULL);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If neither, assume they want a host */
|
||||||
|
if (!(flags & ARES_NI_LOOKUPSERVICE) && !(flags & ARES_NI_LOOKUPHOST))
|
||||||
|
flags |= ARES_NI_LOOKUPHOST;
|
||||||
|
|
||||||
|
/* All they want is a service, no need for DNS */
|
||||||
|
if ((flags & ARES_NI_LOOKUPSERVICE) && !(flags & ARES_NI_LOOKUPHOST))
|
||||||
|
{
|
||||||
|
char buf[33], *service;
|
||||||
|
unsigned int port = 0;
|
||||||
|
|
||||||
|
if (salen == sizeof(struct sockaddr_in))
|
||||||
|
port = addr->sin_port;
|
||||||
|
else
|
||||||
|
port = addr6->sin6_port;
|
||||||
|
service = lookup_service(port, flags, buf, sizeof(buf));
|
||||||
|
callback(arg, ARES_SUCCESS, NULL, service);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* They want a host lookup */
|
||||||
|
if ((flags & ARES_NI_LOOKUPHOST))
|
||||||
|
{
|
||||||
|
/* A numeric host can be handled without DNS */
|
||||||
|
if ((flags & ARES_NI_NUMERICHOST))
|
||||||
|
{
|
||||||
|
unsigned int port = 0;
|
||||||
|
char ipbuf[IPBUFSIZ];
|
||||||
|
char srvbuf[33];
|
||||||
|
char *service = NULL;
|
||||||
|
ipbuf[0] = 0;
|
||||||
|
|
||||||
|
/* Specifying not to lookup a host, but then saying a host
|
||||||
|
* is required has to be illegal.
|
||||||
|
*/
|
||||||
|
if (flags & ARES_NI_NAMEREQD)
|
||||||
|
{
|
||||||
|
callback(arg, ARES_EBADFLAGS, NULL, NULL);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (salen == sizeof(struct sockaddr_in6))
|
||||||
|
{
|
||||||
|
ares_inet_ntop(AF_INET6, &addr6->sin6_addr, ipbuf, IPBUFSIZ);
|
||||||
|
port = addr6->sin6_port;
|
||||||
|
/* If the system supports scope IDs, use it */
|
||||||
|
#ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID
|
||||||
|
append_scopeid(addr6, flags, ipbuf, sizeof(ipbuf));
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ares_inet_ntop(AF_INET, &addr->sin_addr, ipbuf, IPBUFSIZ);
|
||||||
|
port = addr->sin_port;
|
||||||
|
}
|
||||||
|
/* They also want a service */
|
||||||
|
if (flags & ARES_NI_LOOKUPSERVICE)
|
||||||
|
service = lookup_service(port, flags, srvbuf, sizeof(srvbuf));
|
||||||
|
callback(arg, ARES_SUCCESS, ipbuf, service);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
/* This is where a DNS lookup becomes necessary */
|
||||||
|
else
|
||||||
|
{
|
||||||
|
niquery = malloc(sizeof(struct nameinfo_query));
|
||||||
|
if (!niquery)
|
||||||
|
{
|
||||||
|
callback(arg, ARES_ENOMEM, NULL, NULL);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
niquery->callback = callback;
|
||||||
|
niquery->arg = arg;
|
||||||
|
niquery->flags = flags;
|
||||||
|
if (sa->sa_family == AF_INET)
|
||||||
|
{
|
||||||
|
niquery->family = AF_INET;
|
||||||
|
memcpy(&niquery->addr.addr4, addr, sizeof(addr));
|
||||||
|
ares_gethostbyaddr(channel, &addr->sin_addr, sizeof(struct in_addr), AF_INET,
|
||||||
|
nameinfo_callback, niquery);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
niquery->family = AF_INET6;
|
||||||
|
memcpy(&niquery->addr.addr6, addr6, sizeof(addr6));
|
||||||
|
ares_gethostbyaddr(channel, &addr6->sin6_addr, sizeof(struct in6_addr), AF_INET6,
|
||||||
|
nameinfo_callback, niquery);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void nameinfo_callback(void *arg, int status, struct hostent *host)
|
||||||
|
{
|
||||||
|
struct nameinfo_query *niquery = (struct nameinfo_query *) arg;
|
||||||
|
char srvbuf[33];
|
||||||
|
char *service = NULL;
|
||||||
|
|
||||||
|
|
||||||
|
if (status == ARES_SUCCESS)
|
||||||
|
{
|
||||||
|
/* They want a service too */
|
||||||
|
if (niquery->flags & ARES_NI_LOOKUPSERVICE)
|
||||||
|
{
|
||||||
|
if (niquery->family == AF_INET)
|
||||||
|
service = lookup_service(niquery->addr.addr4.sin_port,
|
||||||
|
niquery->flags, srvbuf, sizeof(srvbuf));
|
||||||
|
else
|
||||||
|
service = lookup_service(niquery->addr.addr6.sin6_port,
|
||||||
|
niquery->flags, srvbuf, sizeof(srvbuf));
|
||||||
|
}
|
||||||
|
/* NOFQDN means we have to strip off the domain name portion.
|
||||||
|
We do this by determining our own domain name, then searching the string
|
||||||
|
for this domain name and removing it.
|
||||||
|
*/
|
||||||
|
if (niquery->flags & ARES_NI_NOFQDN)
|
||||||
|
{
|
||||||
|
char buf[255];
|
||||||
|
char *domain;
|
||||||
|
gethostname(buf, 255);
|
||||||
|
if ((domain = strchr(buf, '.')))
|
||||||
|
{
|
||||||
|
char *end = ares_striendstr(host->h_name, domain);
|
||||||
|
if (end)
|
||||||
|
*end = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
niquery->callback(niquery->arg, ARES_SUCCESS, host->h_name, service);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
/* We couldn't find the host, but it's OK, we can use the IP */
|
||||||
|
else if (status == ARES_ENOTFOUND && !(niquery->flags & ARES_NI_NAMEREQD))
|
||||||
|
{
|
||||||
|
char ipbuf[IPBUFSIZ];
|
||||||
|
if (niquery->family == AF_INET)
|
||||||
|
ares_inet_ntop(AF_INET, &niquery->addr.addr4.sin_addr, ipbuf, IPBUFSIZ);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ares_inet_ntop(AF_INET6, &niquery->addr.addr6.sin6_addr, ipbuf, IPBUFSIZ);
|
||||||
|
#ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID
|
||||||
|
append_scopeid(&niquery->addr.addr6, niquery->flags, ipbuf, sizeof(ipbuf));
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
/* They want a service too */
|
||||||
|
if (niquery->flags & ARES_NI_LOOKUPSERVICE)
|
||||||
|
{
|
||||||
|
if (niquery->family == AF_INET)
|
||||||
|
service = lookup_service(niquery->addr.addr4.sin_port,
|
||||||
|
niquery->flags, srvbuf, sizeof(srvbuf));
|
||||||
|
else
|
||||||
|
service = lookup_service(niquery->addr.addr6.sin6_port,
|
||||||
|
niquery->flags, srvbuf, sizeof(srvbuf));
|
||||||
|
}
|
||||||
|
niquery->callback(niquery->arg, ARES_SUCCESS, ipbuf, service);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
niquery->callback(niquery->arg, status, NULL, NULL);
|
||||||
|
free(niquery);
|
||||||
|
}
|
||||||
|
|
||||||
|
static char *lookup_service(unsigned short port, int flags,
|
||||||
|
char *buf, size_t buflen)
|
||||||
|
{
|
||||||
|
const char *proto;
|
||||||
|
struct servent *sep;
|
||||||
|
#ifdef HAVE_GETSERVBYPORT_R
|
||||||
|
struct servent se;
|
||||||
|
#endif
|
||||||
|
char tmpbuf[4096];
|
||||||
|
|
||||||
|
if (port)
|
||||||
|
{
|
||||||
|
if (flags & ARES_NI_NUMERICSERV)
|
||||||
|
sep = NULL;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (flags & ARES_NI_UDP)
|
||||||
|
proto = "udp";
|
||||||
|
else if (flags & ARES_NI_SCTP)
|
||||||
|
proto = "sctp";
|
||||||
|
else if (flags & ARES_NI_DCCP)
|
||||||
|
proto = "dccp";
|
||||||
|
else
|
||||||
|
proto = "tcp";
|
||||||
|
#ifdef HAVE_GETSERVBYPORT_R
|
||||||
|
sep = &se;
|
||||||
|
memset(tmpbuf, 0, sizeof(tmpbuf));
|
||||||
|
#if GETSERVBYPORT_R_ARGS == 6
|
||||||
|
if (getservbyport_r(port, proto, &se, (void *)tmpbuf, sizeof(tmpbuf), &sep) != 0)
|
||||||
|
sep = NULL;
|
||||||
|
#elif GETSERVBYPORT_R_ARGS == 5
|
||||||
|
sep = getservbyport_r(port, proto, &se, (void *)tmpbuf, sizeof(tmpbuf));
|
||||||
|
#elif GETSERVBYPORT_R_ARGS == 4
|
||||||
|
if (getservbyport_r(port, proto, &se, (void *)tmpbuf) != 0)
|
||||||
|
sep = NULL;
|
||||||
|
#else
|
||||||
|
/* Lets just hope the OS uses TLS! */
|
||||||
|
sep = getservbyport(port, proto);
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
/* Lets just hope the OS uses TLS! */
|
||||||
|
sep = getservbyport(port, proto);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
if (sep && sep->s_name)
|
||||||
|
/* get service name */
|
||||||
|
strcpy(tmpbuf, sep->s_name);
|
||||||
|
else
|
||||||
|
/* get port as a string */
|
||||||
|
sprintf(tmpbuf, "%u", ntohs(port));
|
||||||
|
if (strlen(tmpbuf) < buflen)
|
||||||
|
/* return it if buffer big enough */
|
||||||
|
strcpy(buf, tmpbuf);
|
||||||
|
else
|
||||||
|
/* avoid reusing previous one */
|
||||||
|
buf[0] = '\0';
|
||||||
|
return buf;
|
||||||
|
}
|
||||||
|
buf[0] = '\0';
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID
|
||||||
|
static void append_scopeid(struct sockaddr_in6 *addr6, unsigned int flags,
|
||||||
|
char *buf, size_t buflen)
|
||||||
|
{
|
||||||
|
char fmt_u[] = "%u";
|
||||||
|
char fmt_lu[] = "%lu";
|
||||||
|
char tmpbuf[IF_NAMESIZE + 2];
|
||||||
|
size_t bufl;
|
||||||
|
char *fmt = (sizeof(addr6->sin6_scope_id) > sizeof(unsigned int))?fmt_lu:fmt_u;
|
||||||
|
|
||||||
|
tmpbuf[0] = '%';
|
||||||
|
|
||||||
|
#ifdef HAVE_IF_INDEXTONAME
|
||||||
|
if ((flags & ARES_NI_NUMERICSCOPE) ||
|
||||||
|
(!IN6_IS_ADDR_LINKLOCAL(&addr6->sin6_addr)
|
||||||
|
&& !IN6_IS_ADDR_MC_LINKLOCAL(&addr6->sin6_addr)))
|
||||||
|
{
|
||||||
|
sprintf(&tmpbuf[1], fmt, addr6->sin6_scope_id);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (if_indextoname(addr6->sin6_scope_id, &tmpbuf[1]) == NULL)
|
||||||
|
sprintf(&tmpbuf[1], fmt, addr6->sin6_scope_id);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
sprintf(&tmpbuf[1], fmt, addr6->sin6_scope_id);
|
||||||
|
(void) flags;
|
||||||
|
#endif
|
||||||
|
tmpbuf[IF_NAMESIZE + 1] = '\0';
|
||||||
|
bufl = strlen(buf);
|
||||||
|
|
||||||
|
if(bufl + strlen(tmpbuf) < buflen)
|
||||||
|
/* only append the scopeid string if it fits in the target buffer */
|
||||||
|
strcpy(&buf[bufl], tmpbuf);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Determines if s1 ends with the string in s2 (case-insensitive) */
|
||||||
|
static char *ares_striendstr(const char *s1, const char *s2)
|
||||||
|
{
|
||||||
|
const char *c1, *c2, *c1_begin;
|
||||||
|
size_t s1_len = strlen(s1), s2_len = strlen(s2);
|
||||||
|
|
||||||
|
/* If the substr is longer than the full str, it can't match */
|
||||||
|
if (s2_len > s1_len)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
/* Jump to the end of s1 minus the length of s2 */
|
||||||
|
c1_begin = s1+s1_len-s2_len;
|
||||||
|
c1 = (const char *)c1_begin;
|
||||||
|
c2 = s2;
|
||||||
|
while (c2 < s2+s2_len)
|
||||||
|
{
|
||||||
|
if (tolower(*c1) != tolower(*c2))
|
||||||
|
return NULL;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
c1++;
|
||||||
|
c2++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (c2 == c1 && c2 == NULL)
|
||||||
|
return (char *)c1_begin;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
58
ares/ares_getsock.3
Normal file
58
ares/ares_getsock.3
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
.\" $Id$
|
||||||
|
.\"
|
||||||
|
.\" Copyright 1998 by Daniel Stenberg
|
||||||
|
.\"
|
||||||
|
.\" Permission to use, copy, modify, and distribute this
|
||||||
|
.\" software and its documentation for any purpose and without
|
||||||
|
.\" fee is hereby granted, provided that the above copyright
|
||||||
|
.\" notice appear in all copies and that both that copyright
|
||||||
|
.\" notice and this permission notice appear in supporting
|
||||||
|
.\" documentation, and that the name of M.I.T. not be used in
|
||||||
|
.\" advertising or publicity pertaining to distribution of the
|
||||||
|
.\" software without specific, written prior permission.
|
||||||
|
.\" M.I.T. makes no representations about the suitability of
|
||||||
|
.\" this software for any purpose. It is provided "as is"
|
||||||
|
.\" without express or implied warranty.
|
||||||
|
.\"
|
||||||
|
.TH ARES_GETSOCK 3 "22 December 2005"
|
||||||
|
.SH NAME
|
||||||
|
ares_getsock \- get file descriptors to wait on
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.nf
|
||||||
|
.B #include <ares.h>
|
||||||
|
.PP
|
||||||
|
.B int ares_getsock(ares_channel \fIchannel\fP, int *\fIsocks\fP,
|
||||||
|
.B int \fInumsocks\fP);
|
||||||
|
.fi
|
||||||
|
.SH DESCRIPTION
|
||||||
|
The
|
||||||
|
.B ares_getsock
|
||||||
|
function retrieves the set of file descriptors which the calling
|
||||||
|
application should wait on for reading and/or writing for the
|
||||||
|
processing of name service queries pending on the name service channel
|
||||||
|
identified by
|
||||||
|
.IR channel .
|
||||||
|
File descriptors will be set in the integer array pointed to by
|
||||||
|
\fIsocks\fP.
|
||||||
|
\fInumsocks\fP is the size of the given array in number of ints.
|
||||||
|
|
||||||
|
This function can only return information about up to 16 sockets. If more are
|
||||||
|
in use (however unlikely that is), they are simply not reported back.
|
||||||
|
.SH RETURN VALUES
|
||||||
|
\fBares_getsock\fP returns a bitmask for what actions to wait for on the
|
||||||
|
different sockets. The ares.h header file provides these convenience macros to
|
||||||
|
extract the information appropriately:
|
||||||
|
|
||||||
|
.nf
|
||||||
|
#define ARES_GETSOCK_MAXNUM 16 /* ares_getsock() can return info about
|
||||||
|
this many sockets */
|
||||||
|
#define ARES_GETSOCK_READABLE(bits,num) (bits & (1<< (num)))
|
||||||
|
#define ARES_GETSOCK_WRITABLE(bits,num) (bits & (1 << ((num) + \
|
||||||
|
ARES_GETSOCK_MAXNUM)))
|
||||||
|
.fi
|
||||||
|
.SH NOTES
|
||||||
|
This function was added in c-ares 1.3.1
|
||||||
|
.SH SEE ALSO
|
||||||
|
.BR ares_timeout (3),
|
||||||
|
.BR ares_fds (3),
|
||||||
|
.BR ares_process (3)
|
||||||
71
ares/ares_getsock.c
Normal file
71
ares/ares_getsock.c
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
|
/* Copyright 2005 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "setup.h"
|
||||||
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
#ifdef HAVE_SYS_TIME_H
|
||||||
|
#include <sys/time.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "ares.h"
|
||||||
|
#include "ares_private.h"
|
||||||
|
|
||||||
|
int ares_getsock(ares_channel channel,
|
||||||
|
int *s,
|
||||||
|
int numsocks) /* size of the 'socks' array */
|
||||||
|
{
|
||||||
|
struct server_state *server;
|
||||||
|
ares_socket_t nfds;
|
||||||
|
int i;
|
||||||
|
int sockindex=0;
|
||||||
|
int bitmap = 0;
|
||||||
|
unsigned int setbits = 0xffffffff;
|
||||||
|
|
||||||
|
ares_socket_t *socks = (ares_socket_t *)s;
|
||||||
|
|
||||||
|
/* No queries, no file descriptors. */
|
||||||
|
if (!channel->queries)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
nfds = 0;
|
||||||
|
for (i = 0; i < channel->nservers; i++)
|
||||||
|
{
|
||||||
|
server = &channel->servers[i];
|
||||||
|
if (server->udp_socket != ARES_SOCKET_BAD)
|
||||||
|
{
|
||||||
|
if(sockindex >= numsocks)
|
||||||
|
break;
|
||||||
|
socks[sockindex] = server->udp_socket;
|
||||||
|
bitmap |= ARES_GETSOCK_READABLE(setbits, sockindex);
|
||||||
|
sockindex++;
|
||||||
|
}
|
||||||
|
if (server->tcp_socket != ARES_SOCKET_BAD)
|
||||||
|
{
|
||||||
|
if(sockindex >= numsocks)
|
||||||
|
break;
|
||||||
|
socks[sockindex] = server->tcp_socket;
|
||||||
|
bitmap |= ARES_GETSOCK_READABLE(setbits, sockindex);
|
||||||
|
sockindex++;
|
||||||
|
|
||||||
|
if (server->qhead) {
|
||||||
|
/* then the tcp socket is also writable! */
|
||||||
|
bitmap |= ARES_GETSOCK_WRITABLE(setbits, sockindex-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return (int)nfds;
|
||||||
|
}
|
||||||
@@ -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_INIT 3 "21 July 1998"
|
.TH ARES_INIT 3 "7 December 2004"
|
||||||
.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
|
||||||
@@ -25,31 +25,20 @@ ares_init, ares_init_options \- Initialize a resolver channel
|
|||||||
.B int ares_init_options(ares_channel *\fIchannel\fP,
|
.B int ares_init_options(ares_channel *\fIchannel\fP,
|
||||||
.B struct ares_options *\fIoptions\fP, int \fIoptmask\fP)
|
.B struct ares_options *\fIoptions\fP, int \fIoptmask\fP)
|
||||||
.PP
|
.PP
|
||||||
.B cc file.c -lares
|
.B cc file.c -lcares
|
||||||
.fi
|
.fi
|
||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
||||||
The
|
The \fBares_init\fP function initializes a communications channel for name
|
||||||
.B ares_init
|
service lookups. If it returns successfully, \fBares_init\fP will set the
|
||||||
function initializes a communications channel for name service
|
variable pointed to by \fIchannel\fP to a handle used to identify the name
|
||||||
lookups. If it returns successfully,
|
service channel. The caller should invoke
|
||||||
.B ares_init
|
|
||||||
will set the variable pointed to by
|
|
||||||
.I channel
|
|
||||||
to a handle used to identify the name service channel. The caller
|
|
||||||
should invoke
|
|
||||||
.BR ares_destroy (3)
|
.BR ares_destroy (3)
|
||||||
on the handle when the channel is no longer needed.
|
on the handle when the channel is no longer needed.
|
||||||
.PP
|
.PP
|
||||||
The
|
The \fBares_init_options\fP function also initializes a name service channel,
|
||||||
.B ares_init_options
|
with additional options useful for applications requiring more control over
|
||||||
function also initializes a name service channel, with additional
|
name service configuration. The \fIoptmask\fP parameter specifies which fields
|
||||||
options useful for applications requiring more control over name
|
in the structure pointed to by \fIoptions\fP are set, as follows:
|
||||||
service configuration. The
|
|
||||||
.I optmask
|
|
||||||
parameter specifies which fields in the structure pointed to by
|
|
||||||
.I options
|
|
||||||
are set, as follows:
|
|
||||||
.PP
|
|
||||||
.TP 18
|
.TP 18
|
||||||
.B ARES_OPT_FLAGS
|
.B ARES_OPT_FLAGS
|
||||||
.B int \fIflags\fP;
|
.B int \fIflags\fP;
|
||||||
@@ -127,9 +116,11 @@ If a truncated response to a UDP query is received, do not fall back
|
|||||||
to TCP; simply continue on with the truncated response.
|
to TCP; simply continue on with the truncated response.
|
||||||
.TP 23
|
.TP 23
|
||||||
.B ARES_FLAG_NORECURSE
|
.B ARES_FLAG_NORECURSE
|
||||||
Do not set the "recursion desired" bit on outgoing queries, so that
|
Do not set the "recursion desired" bit on outgoing queries, so that the name
|
||||||
the name server being contacted will not try to fetch the answer from
|
server being contacted will not try to fetch the answer from other servers if
|
||||||
other servers if it doesn't know the answer locally.
|
it doesn't know the answer locally. Be aware that ares will not do the
|
||||||
|
recursion for you. Recursion must be handled by the application calling ares
|
||||||
|
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 communciations sockets when the number of active queries
|
||||||
|
|||||||
358
ares/ares_init.c
358
ares/ares_init.c
@@ -13,19 +13,35 @@
|
|||||||
* without express or implied warranty.
|
* without express or implied warranty.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "setup.h"
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
#ifdef WIN32
|
#if defined(WIN32) && !defined(WATT32)
|
||||||
#include "nameser.h"
|
#include "nameser.h"
|
||||||
|
#include <iphlpapi.h>
|
||||||
|
#include <malloc.h>
|
||||||
|
|
||||||
#else
|
#else
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
|
#ifdef HAVE_SYS_TIME_H
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
#include <arpa/inet.h>
|
#include <arpa/inet.h>
|
||||||
#include <netdb.h>
|
#include <netdb.h>
|
||||||
#include <arpa/nameser.h>
|
#include <arpa/nameser.h>
|
||||||
|
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
|
||||||
|
#include <arpa/nameser_compat.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_UNISTD_H
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@@ -35,24 +51,34 @@
|
|||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include "ares.h"
|
#include "ares.h"
|
||||||
#include "ares_private.h"
|
#include "ares_private.h"
|
||||||
|
#include "inet_net_pton.h"
|
||||||
|
|
||||||
|
#ifdef WATT32
|
||||||
|
#undef WIN32 /* Redefined in MingW/MSVC headers */
|
||||||
|
#endif
|
||||||
|
|
||||||
static int init_by_options(ares_channel channel, struct ares_options *options,
|
static int init_by_options(ares_channel channel, struct ares_options *options,
|
||||||
int optmask);
|
int optmask);
|
||||||
static int init_by_environment(ares_channel channel);
|
static int init_by_environment(ares_channel channel);
|
||||||
static int init_by_resolv_conf(ares_channel channel);
|
static int init_by_resolv_conf(ares_channel channel);
|
||||||
static int init_by_defaults(ares_channel channel);
|
static int init_by_defaults(ares_channel channel);
|
||||||
static int config_domain(ares_channel channel, char *str);
|
|
||||||
static int config_lookup(ares_channel channel, const char *str);
|
|
||||||
static int config_nameserver(struct server_state **servers, int *nservers,
|
static int config_nameserver(struct server_state **servers, int *nservers,
|
||||||
char *str);
|
char *str);
|
||||||
static int config_sortlist(struct apattern **sortlist, int *nsort,
|
|
||||||
const char *str);
|
|
||||||
static int set_search(ares_channel channel, const char *str);
|
static int set_search(ares_channel channel, const char *str);
|
||||||
static int set_options(ares_channel channel, const char *str);
|
static int set_options(ares_channel channel, const char *str);
|
||||||
static char *try_config(char *s, const char *opt);
|
|
||||||
static const char *try_option(const char *p, const char *q, const char *opt);
|
static const char *try_option(const char *p, const char *q, const char *opt);
|
||||||
|
#ifndef WIN32
|
||||||
|
static int sortlist_alloc(struct apattern **sortlist, int *nsort, struct apattern *pat);
|
||||||
static int ip_addr(const char *s, int len, struct in_addr *addr);
|
static int ip_addr(const char *s, int len, struct in_addr *addr);
|
||||||
static void natural_mask(struct apattern *pat);
|
static void natural_mask(struct apattern *pat);
|
||||||
|
static int config_domain(ares_channel channel, char *str);
|
||||||
|
static int config_lookup(ares_channel channel, const char *str,
|
||||||
|
const char *bindch, const char *filech);
|
||||||
|
static int config_sortlist(struct apattern **sortlist, int *nsort,
|
||||||
|
const char *str);
|
||||||
|
static char *try_config(char *s, const char *opt);
|
||||||
|
#endif
|
||||||
|
|
||||||
int ares_init(ares_channel *channelptr)
|
int ares_init(ares_channel *channelptr)
|
||||||
{
|
{
|
||||||
@@ -125,8 +151,8 @@ int ares_init_options(ares_channel *channelptr, struct ares_options *options,
|
|||||||
for (i = 0; i < channel->nservers; i++)
|
for (i = 0; i < channel->nservers; i++)
|
||||||
{
|
{
|
||||||
server = &channel->servers[i];
|
server = &channel->servers[i];
|
||||||
server->udp_socket = -1;
|
server->udp_socket = ARES_SOCKET_BAD;
|
||||||
server->tcp_socket = -1;
|
server->tcp_socket = ARES_SOCKET_BAD;
|
||||||
server->tcp_lenbuf_pos = 0;
|
server->tcp_lenbuf_pos = 0;
|
||||||
server->tcp_buffer = NULL;
|
server->tcp_buffer = NULL;
|
||||||
server->qhead = NULL;
|
server->qhead = NULL;
|
||||||
@@ -231,26 +257,27 @@ static int init_by_environment(ares_channel channel)
|
|||||||
|
|
||||||
return ARES_SUCCESS;
|
return ARES_SUCCESS;
|
||||||
}
|
}
|
||||||
#ifdef WIN32
|
|
||||||
static int get_res_size_nt(HKEY hKey, char *subkey, int *size)
|
|
||||||
{
|
|
||||||
return RegQueryValueEx(hKey, subkey, 0, NULL, NULL, size);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Warning: returns a dynamically allocated buffer, the user MUST
|
#ifdef WIN32
|
||||||
|
/*
|
||||||
|
* Warning: returns a dynamically allocated buffer, the user MUST
|
||||||
* use free() if the function returns 1
|
* use free() if the function returns 1
|
||||||
*/
|
*/
|
||||||
static int get_res_nt(HKEY hKey, char *subkey, char **obuf)
|
static int get_res_nt(HKEY hKey, const char *subkey, char **obuf)
|
||||||
{
|
{
|
||||||
/* Test for the size we need */
|
/* Test for the size we need */
|
||||||
int size = 0;
|
DWORD size = 0;
|
||||||
int result;
|
int result;
|
||||||
|
|
||||||
result = RegQueryValueEx(hKey, subkey, 0, NULL, NULL, &size);
|
result = RegQueryValueEx(hKey, subkey, 0, NULL, NULL, &size);
|
||||||
if ((result != ERROR_SUCCESS && result != ERROR_MORE_DATA) || !size)
|
if ((result != ERROR_SUCCESS && result != ERROR_MORE_DATA) || !size)
|
||||||
return 0;
|
return 0;
|
||||||
*obuf = malloc(size+1);
|
*obuf = malloc(size+1);
|
||||||
|
if (!*obuf)
|
||||||
|
return 0;
|
||||||
|
|
||||||
if (RegQueryValueEx(hKey, subkey, 0, NULL, *obuf, &size) != ERROR_SUCCESS)
|
if (RegQueryValueEx(hKey, subkey, 0, NULL,
|
||||||
|
(LPBYTE)*obuf, &size) != ERROR_SUCCESS)
|
||||||
{
|
{
|
||||||
free(*obuf);
|
free(*obuf);
|
||||||
return 0;
|
return 0;
|
||||||
@@ -263,41 +290,119 @@ static int get_res_nt(HKEY hKey, char *subkey, char **obuf)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int get_res_interfaces_nt(HKEY hKey, char *subkey, char **obuf)
|
static int get_res_interfaces_nt(HKEY hKey, const char *subkey, char **obuf)
|
||||||
{
|
{
|
||||||
char enumbuf[39]; /* GUIDs are 38 chars + 1 for NULL */
|
char enumbuf[39]; /* GUIDs are 38 chars + 1 for NULL */
|
||||||
int enum_size = 39;
|
DWORD enum_size = 39;
|
||||||
int idx = 0;
|
int idx = 0;
|
||||||
HKEY hVal;
|
HKEY hVal;
|
||||||
|
|
||||||
while (RegEnumKeyEx(hKey, idx++, enumbuf, &enum_size, 0,
|
while (RegEnumKeyEx(hKey, idx++, enumbuf, &enum_size, 0,
|
||||||
NULL, NULL, NULL) != ERROR_NO_MORE_ITEMS)
|
NULL, NULL, NULL) != ERROR_NO_MORE_ITEMS)
|
||||||
{
|
{
|
||||||
|
int rc;
|
||||||
|
|
||||||
enum_size = 39;
|
enum_size = 39;
|
||||||
if (RegOpenKeyEx(hKey, enumbuf, 0, KEY_QUERY_VALUE, &hVal) !=
|
if (RegOpenKeyEx(hKey, enumbuf, 0, KEY_QUERY_VALUE, &hVal) !=
|
||||||
ERROR_SUCCESS)
|
ERROR_SUCCESS)
|
||||||
continue;
|
continue;
|
||||||
if (!get_res_nt(hVal, subkey, obuf))
|
rc = get_res_nt(hVal, subkey, obuf);
|
||||||
RegCloseKey(hVal);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
RegCloseKey(hVal);
|
RegCloseKey(hVal);
|
||||||
|
if (rc)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int get_iphlpapi_dns_info (char *ret_buf, size_t ret_size)
|
||||||
|
{
|
||||||
|
FIXED_INFO *fi = alloca (sizeof(*fi));
|
||||||
|
DWORD size = sizeof (*fi);
|
||||||
|
typedef DWORD (WINAPI* get_net_param_func) (FIXED_INFO*, DWORD*);
|
||||||
|
get_net_param_func GetNetworkParams; /* available only on Win-98/2000+ */
|
||||||
|
HMODULE handle;
|
||||||
|
IP_ADDR_STRING *ipAddr;
|
||||||
|
int i, count = 0;
|
||||||
|
int debug = 0;
|
||||||
|
size_t ip_size = sizeof("255.255.255.255,")-1;
|
||||||
|
size_t left = ret_size;
|
||||||
|
char *ret = ret_buf;
|
||||||
|
HRESULT res;
|
||||||
|
|
||||||
|
if (!fi)
|
||||||
|
return (0);
|
||||||
|
|
||||||
|
handle = LoadLibrary ("iphlpapi.dll");
|
||||||
|
if (!handle)
|
||||||
|
return (0);
|
||||||
|
|
||||||
|
GetNetworkParams = (get_net_param_func) GetProcAddress (handle, "GetNetworkParams");
|
||||||
|
if (!GetNetworkParams)
|
||||||
|
goto quit;
|
||||||
|
|
||||||
|
res = (*GetNetworkParams) (fi, &size);
|
||||||
|
if ((res != ERROR_BUFFER_OVERFLOW) && (res != ERROR_SUCCESS))
|
||||||
|
goto quit;
|
||||||
|
|
||||||
|
fi = alloca (size);
|
||||||
|
if (!fi || (*GetNetworkParams) (fi, &size) != ERROR_SUCCESS)
|
||||||
|
goto quit;
|
||||||
|
|
||||||
|
if (debug)
|
||||||
|
{
|
||||||
|
printf ("Host Name: %s\n", fi->HostName);
|
||||||
|
printf ("Domain Name: %s\n", fi->DomainName);
|
||||||
|
printf ("DNS Servers:\n"
|
||||||
|
" %s (primary)\n", fi->DnsServerList.IpAddress.String);
|
||||||
|
}
|
||||||
|
if (inet_addr(fi->DnsServerList.IpAddress.String) != INADDR_NONE &&
|
||||||
|
left > ip_size)
|
||||||
|
{
|
||||||
|
ret += sprintf (ret, "%s,", fi->DnsServerList.IpAddress.String);
|
||||||
|
left -= ret - ret_buf;
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0, ipAddr = fi->DnsServerList.Next; ipAddr && left > ip_size;
|
||||||
|
ipAddr = ipAddr->Next, i++)
|
||||||
|
{
|
||||||
|
if (inet_addr(ipAddr->IpAddress.String) != INADDR_NONE)
|
||||||
|
{
|
||||||
|
ret += sprintf (ret, "%s,", ipAddr->IpAddress.String);
|
||||||
|
left -= ret - ret_buf;
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
if (debug)
|
||||||
|
printf (" %s (secondary %d)\n", ipAddr->IpAddress.String, i+1);
|
||||||
|
}
|
||||||
|
|
||||||
|
quit:
|
||||||
|
if (handle)
|
||||||
|
FreeLibrary (handle);
|
||||||
|
|
||||||
|
if (debug && left <= ip_size)
|
||||||
|
printf ("Too many nameservers. Truncating to %d addressess", count);
|
||||||
|
if (ret > ret_buf)
|
||||||
|
ret[-1] = '\0';
|
||||||
|
return (count);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static int init_by_resolv_conf(ares_channel channel)
|
static int init_by_resolv_conf(ares_channel channel)
|
||||||
{
|
{
|
||||||
char *line = NULL;
|
char *line = NULL;
|
||||||
int status, nservers = 0, nsort = 0;
|
int status = -1, nservers = 0, nsort = 0;
|
||||||
struct server_state *servers = NULL;
|
struct server_state *servers = NULL;
|
||||||
struct apattern *sortlist = NULL;
|
struct apattern *sortlist = NULL;
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
NameServer info via IPHLPAPI (IP helper API):
|
||||||
|
GetNetworkParams() should be the trusted source for this.
|
||||||
|
Available in Win-98/2000 and later. If that fail, fall-back to
|
||||||
|
registry information.
|
||||||
|
|
||||||
NameServer Registry:
|
NameServer Registry:
|
||||||
|
|
||||||
On Windows 9X, the DNS server can be found in:
|
On Windows 9X, the DNS server can be found in:
|
||||||
@@ -320,11 +425,19 @@ DhcpNameServer
|
|||||||
DWORD data_type;
|
DWORD data_type;
|
||||||
DWORD bytes;
|
DWORD bytes;
|
||||||
DWORD result;
|
DWORD result;
|
||||||
DWORD keysize = MAX_PATH;
|
char buf[256];
|
||||||
|
|
||||||
status = ARES_EFILE;
|
if (channel->nservers > -1) /* don't override ARES_OPT_SERVER */
|
||||||
|
return ARES_SUCCESS;
|
||||||
|
|
||||||
if (IsNT)
|
if (get_iphlpapi_dns_info(buf,sizeof(buf)) > 0)
|
||||||
|
{
|
||||||
|
status = config_nameserver(&servers, &nservers, buf);
|
||||||
|
if (status == ARES_SUCCESS)
|
||||||
|
goto okay;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (IS_NT())
|
||||||
{
|
{
|
||||||
if (RegOpenKeyEx(
|
if (RegOpenKeyEx(
|
||||||
HKEY_LOCAL_MACHINE, WIN_NS_NT_KEY, 0,
|
HKEY_LOCAL_MACHINE, WIN_NS_NT_KEY, 0,
|
||||||
@@ -388,23 +501,16 @@ DhcpNameServer
|
|||||||
RegCloseKey(mykey);
|
RegCloseKey(mykey);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (status != ARES_EFILE)
|
if (status == ARES_SUCCESS)
|
||||||
{
|
|
||||||
/*
|
|
||||||
if (!channel->lookups) {
|
|
||||||
status = config_lookup(channel, "file bind");
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
status = ARES_EOF;
|
status = ARES_EOF;
|
||||||
}
|
|
||||||
|
|
||||||
#elif defined(riscos)
|
#elif defined(__riscos__)
|
||||||
|
|
||||||
/* Under RISC OS, name servers are listed in the
|
/* Under RISC OS, name servers are listed in the
|
||||||
system variable Inet$Resolvers, space separated. */
|
system variable Inet$Resolvers, space separated. */
|
||||||
|
|
||||||
line = getenv("Inet$Resolvers");
|
line = getenv("Inet$Resolvers");
|
||||||
status = ARES_EFILE;
|
status = ARES_EOF;
|
||||||
if (line) {
|
if (line) {
|
||||||
char *resolvers = strdup(line), *pos, *space;
|
char *resolvers = strdup(line), *pos, *space;
|
||||||
|
|
||||||
@@ -428,6 +534,24 @@ DhcpNameServer
|
|||||||
free(resolvers);
|
free(resolvers);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#elif defined(WATT32)
|
||||||
|
int i;
|
||||||
|
|
||||||
|
sock_init();
|
||||||
|
for (i = 0; def_nameservers[i]; i++)
|
||||||
|
;
|
||||||
|
if (i == 0)
|
||||||
|
return ARES_SUCCESS; /* use localhost DNS server */
|
||||||
|
|
||||||
|
nservers = i;
|
||||||
|
servers = calloc(sizeof(*servers), i);
|
||||||
|
if (!servers)
|
||||||
|
return ARES_ENOMEM;
|
||||||
|
|
||||||
|
for (i = 0; def_nameservers[i]; i++)
|
||||||
|
servers[i].addr.s_addr = htonl(def_nameservers[i]);
|
||||||
|
status = ARES_EOF;
|
||||||
|
|
||||||
#else
|
#else
|
||||||
{
|
{
|
||||||
char *p;
|
char *p;
|
||||||
@@ -442,7 +566,7 @@ DhcpNameServer
|
|||||||
if ((p = try_config(line, "domain")))
|
if ((p = try_config(line, "domain")))
|
||||||
status = config_domain(channel, p);
|
status = config_domain(channel, p);
|
||||||
else if ((p = try_config(line, "lookup")) && !channel->lookups)
|
else if ((p = try_config(line, "lookup")) && !channel->lookups)
|
||||||
status = config_lookup(channel, p);
|
status = config_lookup(channel, p, "bind", "file");
|
||||||
else if ((p = try_config(line, "search")))
|
else if ((p = try_config(line, "search")))
|
||||||
status = set_search(channel, p);
|
status = set_search(channel, p);
|
||||||
else if ((p = try_config(line, "nameserver")) && channel->nservers == -1)
|
else if ((p = try_config(line, "nameserver")) && channel->nservers == -1)
|
||||||
@@ -456,9 +580,49 @@ DhcpNameServer
|
|||||||
if (status != ARES_SUCCESS)
|
if (status != ARES_SUCCESS)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
fclose(fp);
|
||||||
|
|
||||||
|
if (!channel->lookups) {
|
||||||
|
/* Many systems (Solaris, Linux, BSD's) use nsswitch.conf */
|
||||||
|
fp = fopen("/etc/nsswitch.conf", "r");
|
||||||
|
if (fp) {
|
||||||
|
while ((status = ares__read_line(fp, &line, &linesize)) == ARES_SUCCESS)
|
||||||
|
{
|
||||||
|
if ((p = try_config(line, "hosts:")) && !channel->lookups)
|
||||||
|
status = config_lookup(channel, p, "dns", "files");
|
||||||
|
}
|
||||||
|
fclose(fp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!channel->lookups) {
|
||||||
|
/* Linux / GNU libc 2.x and possibly others have host.conf */
|
||||||
|
fp = fopen("/etc/host.conf", "r");
|
||||||
|
if (fp) {
|
||||||
|
while ((status = ares__read_line(fp, &line, &linesize)) == ARES_SUCCESS)
|
||||||
|
{
|
||||||
|
if ((p = try_config(line, "order")) && !channel->lookups)
|
||||||
|
status = config_lookup(channel, p, "bind", "hosts");
|
||||||
|
}
|
||||||
|
fclose(fp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!channel->lookups) {
|
||||||
|
/* Tru64 uses /etc/svc.conf */
|
||||||
|
fp = fopen("/etc/svc.conf", "r");
|
||||||
|
if (fp) {
|
||||||
|
while ((status = ares__read_line(fp, &line, &linesize)) == ARES_SUCCESS)
|
||||||
|
{
|
||||||
|
if ((p = try_config(line, "hosts=")) && !channel->lookups)
|
||||||
|
status = config_lookup(channel, p, "bind", "local");
|
||||||
|
}
|
||||||
|
fclose(fp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if(line)
|
if(line)
|
||||||
free(line);
|
free(line);
|
||||||
fclose(fp);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -474,6 +638,9 @@ DhcpNameServer
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* If we got any name server entries, fill them in. */
|
/* If we got any name server entries, fill them in. */
|
||||||
|
#ifdef WIN32
|
||||||
|
okay:
|
||||||
|
#endif
|
||||||
if (servers)
|
if (servers)
|
||||||
{
|
{
|
||||||
channel->servers = servers;
|
channel->servers = servers;
|
||||||
@@ -549,7 +716,7 @@ static int init_by_defaults(ares_channel channel)
|
|||||||
|
|
||||||
if (!channel->lookups)
|
if (!channel->lookups)
|
||||||
{
|
{
|
||||||
channel->lookups = strdup("bf");
|
channel->lookups = strdup("fb");
|
||||||
if (!channel->lookups)
|
if (!channel->lookups)
|
||||||
return ARES_ENOMEM;
|
return ARES_ENOMEM;
|
||||||
}
|
}
|
||||||
@@ -557,6 +724,7 @@ static int init_by_defaults(ares_channel channel)
|
|||||||
return ARES_SUCCESS;
|
return ARES_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef WIN32
|
||||||
static int config_domain(ares_channel channel, char *str)
|
static int config_domain(ares_channel channel, char *str)
|
||||||
{
|
{
|
||||||
char *q;
|
char *q;
|
||||||
@@ -569,7 +737,8 @@ static int config_domain(ares_channel channel, char *str)
|
|||||||
return set_search(channel, str);
|
return set_search(channel, str);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int config_lookup(ares_channel channel, const char *str)
|
static int config_lookup(ares_channel channel, const char *str,
|
||||||
|
const char *bindch, const char *filech)
|
||||||
{
|
{
|
||||||
char lookups[3], *l;
|
char lookups[3], *l;
|
||||||
const char *p;
|
const char *p;
|
||||||
@@ -582,11 +751,13 @@ static int config_lookup(ares_channel channel, const char *str)
|
|||||||
p = str;
|
p = str;
|
||||||
while (*p)
|
while (*p)
|
||||||
{
|
{
|
||||||
if ((*p == 'b' || *p == 'f') && l < lookups + 2)
|
if ((*p == *bindch || *p == *filech) && l < lookups + 2) {
|
||||||
*l++ = *p;
|
if (*p == *bindch) *l++ = 'b';
|
||||||
while (*p && !isspace((unsigned char)*p))
|
else *l++ = 'f';
|
||||||
|
}
|
||||||
|
while (*p && !isspace((unsigned char)*p) && (*p != ','))
|
||||||
p++;
|
p++;
|
||||||
while (isspace((unsigned char)*p))
|
while (*p && (isspace((unsigned char)*p) || (*p == ',')))
|
||||||
p++;
|
p++;
|
||||||
}
|
}
|
||||||
*l = 0;
|
*l = 0;
|
||||||
@@ -594,6 +765,8 @@ static int config_lookup(ares_channel channel, const char *str)
|
|||||||
return (channel->lookups) ? ARES_SUCCESS : ARES_ENOMEM;
|
return (channel->lookups) ? ARES_SUCCESS : ARES_ENOMEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
static int config_nameserver(struct server_state **servers, int *nservers,
|
static int config_nameserver(struct server_state **servers, int *nservers,
|
||||||
char *str)
|
char *str)
|
||||||
{
|
{
|
||||||
@@ -655,39 +828,74 @@ static int config_nameserver(struct server_state **servers, int *nservers,
|
|||||||
return ARES_SUCCESS;
|
return ARES_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef WIN32
|
||||||
static int config_sortlist(struct apattern **sortlist, int *nsort,
|
static int config_sortlist(struct apattern **sortlist, int *nsort,
|
||||||
const char *str)
|
const char *str)
|
||||||
{
|
{
|
||||||
struct apattern pat, *newsort;
|
struct apattern pat;
|
||||||
const char *q;
|
const char *q;
|
||||||
|
|
||||||
/* Add sortlist entries. */
|
/* Add sortlist entries. */
|
||||||
while (*str && *str != ';')
|
while (*str && *str != ';')
|
||||||
{
|
{
|
||||||
|
int bits;
|
||||||
|
char ipbuf[16], ipbufpfx[32];
|
||||||
|
/* Find just the IP */
|
||||||
q = str;
|
q = str;
|
||||||
while (*q && *q != '/' && *q != ';' && !isspace((unsigned char)*q))
|
while (*q && *q != '/' && *q != ';' && !isspace((unsigned char)*q))
|
||||||
q++;
|
q++;
|
||||||
if (ip_addr(str, (int)(q - str), &pat.addr) == 0)
|
memcpy(ipbuf, str, (int)(q-str));
|
||||||
{
|
ipbuf[(int)(q-str)] = 0;
|
||||||
/* We have a pattern address; now determine the mask. */
|
/* Find the prefix */
|
||||||
if (*q == '/')
|
if (*q == '/')
|
||||||
{
|
{
|
||||||
str = q + 1;
|
const char *str2 = q+1;
|
||||||
while (*q && *q != ';' && !isspace((unsigned char)*q))
|
while (*q && *q != ';' && !isspace((unsigned char)*q))
|
||||||
q++;
|
q++;
|
||||||
if (ip_addr(str, (int)(q - str), &pat.mask) != 0)
|
memcpy(ipbufpfx, str, (int)(q-str));
|
||||||
|
ipbufpfx[(int)(q-str)] = 0;
|
||||||
|
str = str2;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
ipbufpfx[0] = 0;
|
||||||
|
/* Lets see if it is CIDR */
|
||||||
|
/* First we'll try IPv6 */
|
||||||
|
if ((bits = ares_inet_net_pton(AF_INET6, ipbufpfx ? ipbufpfx : ipbuf,
|
||||||
|
&pat.addr.addr6,
|
||||||
|
sizeof(pat.addr.addr6))) > 0)
|
||||||
|
{
|
||||||
|
pat.type = PATTERN_CIDR;
|
||||||
|
pat.mask.bits = bits;
|
||||||
|
pat.family = AF_INET6;
|
||||||
|
if (!sortlist_alloc(sortlist, nsort, &pat))
|
||||||
|
return ARES_ENOMEM;
|
||||||
|
}
|
||||||
|
if (ipbufpfx &&
|
||||||
|
(bits = ares_inet_net_pton(AF_INET, ipbufpfx, &pat.addr.addr4,
|
||||||
|
sizeof(pat.addr.addr4))) > 0)
|
||||||
|
{
|
||||||
|
pat.type = PATTERN_CIDR;
|
||||||
|
pat.mask.bits = bits;
|
||||||
|
pat.family = AF_INET;
|
||||||
|
if (!sortlist_alloc(sortlist, nsort, &pat))
|
||||||
|
return ARES_ENOMEM;
|
||||||
|
}
|
||||||
|
/* See if it is just a regular IP */
|
||||||
|
else if (ip_addr(ipbuf, (int)(q-str), &pat.addr.addr4) == 0)
|
||||||
|
{
|
||||||
|
if (ipbufpfx)
|
||||||
|
{
|
||||||
|
memcpy(ipbuf, str, (int)(q-str));
|
||||||
|
ipbuf[(int)(q-str)] = 0;
|
||||||
|
if (ip_addr(ipbuf, (int)(q - str), &pat.mask.addr.addr4) != 0)
|
||||||
natural_mask(&pat);
|
natural_mask(&pat);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
natural_mask(&pat);
|
natural_mask(&pat);
|
||||||
|
pat.family = AF_INET;
|
||||||
/* Add this pattern to our list. */
|
pat.type = PATTERN_MASK;
|
||||||
newsort = realloc(*sortlist, (*nsort + 1) * sizeof(struct apattern));
|
if (!sortlist_alloc(sortlist, nsort, &pat))
|
||||||
if (!newsort)
|
|
||||||
return ARES_ENOMEM;
|
return ARES_ENOMEM;
|
||||||
newsort[*nsort] = pat;
|
|
||||||
*sortlist = newsort;
|
|
||||||
(*nsort)++;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -701,6 +909,7 @@ static int config_sortlist(struct apattern **sortlist, int *nsort,
|
|||||||
|
|
||||||
return ARES_SUCCESS;
|
return ARES_SUCCESS;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static int set_search(ares_channel channel, const char *str)
|
static int set_search(ares_channel channel, const char *str)
|
||||||
{
|
{
|
||||||
@@ -782,6 +991,7 @@ static int set_options(ares_channel channel, const char *str)
|
|||||||
return ARES_SUCCESS;
|
return ARES_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef WIN32
|
||||||
static char *try_config(char *s, const char *opt)
|
static char *try_config(char *s, const char *opt)
|
||||||
{
|
{
|
||||||
size_t len;
|
size_t len;
|
||||||
@@ -795,21 +1005,34 @@ static char *try_config(char *s, const char *opt)
|
|||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#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;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ip_addr(const char *s, int len, struct in_addr *addr)
|
#ifndef WIN32
|
||||||
|
static int sortlist_alloc(struct apattern **sortlist, int *nsort,
|
||||||
|
struct apattern *pat)
|
||||||
|
{
|
||||||
|
struct apattern *newsort;
|
||||||
|
newsort = realloc(*sortlist, (*nsort + 1) * sizeof(struct apattern));
|
||||||
|
if (!newsort)
|
||||||
|
return 0;
|
||||||
|
newsort[*nsort] = *pat;
|
||||||
|
*sortlist = newsort;
|
||||||
|
(*nsort)++;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int ip_addr(const char *ipbuf, int len, struct in_addr *addr)
|
||||||
{
|
{
|
||||||
char ipbuf[16];
|
|
||||||
|
|
||||||
/* Four octets and three periods yields at most 15 characters. */
|
/* Four octets and three periods yields at most 15 characters. */
|
||||||
if (len > 15)
|
if (len > 15)
|
||||||
return -1;
|
return -1;
|
||||||
memcpy(ipbuf, s, len);
|
|
||||||
ipbuf[len] = 0;
|
|
||||||
|
|
||||||
addr->s_addr = inet_addr(ipbuf);
|
addr->s_addr = inet_addr(ipbuf);
|
||||||
if (addr->s_addr == INADDR_NONE && strcmp(ipbuf, "255.255.255.255") != 0)
|
if (addr->s_addr == INADDR_NONE && strcmp(ipbuf, "255.255.255.255") != 0)
|
||||||
@@ -824,15 +1047,16 @@ 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.s_addr);
|
addr.s_addr = ntohl(pat->addr.addr4.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.s_addr = htonl(IN_CLASSA_NET);
|
pat->mask.addr.addr4.s_addr = htonl(IN_CLASSA_NET);
|
||||||
else if (IN_CLASSB(addr.s_addr))
|
else if (IN_CLASSB(addr.s_addr))
|
||||||
pat->mask.s_addr = htonl(IN_CLASSB_NET);
|
pat->mask.addr.addr4.s_addr = htonl(IN_CLASSB_NET);
|
||||||
else
|
else
|
||||||
pat->mask.s_addr = htonl(IN_CLASSC_NET);
|
pat->mask.addr.addr4.s_addr = htonl(IN_CLASSC_NET);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|||||||
81
ares/ares_ipv6.h
Normal file
81
ares/ares_ipv6.h
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef ARES_IPV6_H
|
||||||
|
#define ARES_IPV6_H
|
||||||
|
|
||||||
|
#ifndef HAVE_PF_INET6
|
||||||
|
#define PF_INET6 AF_INET6
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef HAVE_STRUCT_IN6_ADDR
|
||||||
|
struct in6_addr
|
||||||
|
{
|
||||||
|
unsigned char s6_addr[16];
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef HAVE_STRUCT_SOCKADDR_IN6
|
||||||
|
struct sockaddr_in6
|
||||||
|
{
|
||||||
|
unsigned short sin6_family;
|
||||||
|
unsigned short sin6_port;
|
||||||
|
unsigned long sin6_flowinfo;
|
||||||
|
struct in6_addr sin6_addr;
|
||||||
|
unsigned int sin6_scope_id;
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef HAVE_STRUCT_ADDRINFO
|
||||||
|
struct addrinfo
|
||||||
|
{
|
||||||
|
int ai_flags;
|
||||||
|
int ai_family;
|
||||||
|
int ai_socktype;
|
||||||
|
int ai_protocol;
|
||||||
|
size_t ai_addrlen;
|
||||||
|
char *ai_cannonname;
|
||||||
|
struct sockaddr *ai_addr;
|
||||||
|
struct addrinfo *ai_next;
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef NS_IN6ADDRSZ
|
||||||
|
#if SIZEOF_STRUCT_IN6_ADDR == 0
|
||||||
|
/* We cannot have it set to zero, so we pick a fixed value here */
|
||||||
|
#define NS_IN6ADDRSZ 16
|
||||||
|
#else
|
||||||
|
#define NS_IN6ADDRSZ SIZEOF_STRUCT_IN6_ADDR
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef NS_INADDRSZ
|
||||||
|
#define NS_INADDRSZ SIZEOF_STRUCT_IN_ADDR
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef NS_INT16SZ
|
||||||
|
#define NS_INT16SZ 2
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef IF_NAMESIZE
|
||||||
|
#ifdef IFNAMSIZ
|
||||||
|
#define IF_NAMESIZE IFNAMSIZ
|
||||||
|
#else
|
||||||
|
#define IF_NAMESIZE 256
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* ARES_IPV6_H */
|
||||||
@@ -13,13 +13,17 @@
|
|||||||
* without express or implied warranty.
|
* without express or implied warranty.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "setup.h"
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
#ifdef WIN32
|
#if defined(WIN32) && !defined(WATT32)
|
||||||
#include "nameser.h"
|
#include "nameser.h"
|
||||||
#else
|
#else
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
#include <arpa/nameser.h>
|
#include <arpa/nameser.h>
|
||||||
|
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
|
||||||
|
#include <arpa/nameser_compat.h>
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|||||||
@@ -13,9 +13,10 @@
|
|||||||
* without express or implied warranty.
|
* without express or implied warranty.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "setup.h"
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
#ifdef WIN32
|
#if defined(WIN32) && !defined(WATT32)
|
||||||
#include "nameser.h"
|
#include "nameser.h"
|
||||||
#else
|
#else
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
@@ -23,6 +24,9 @@
|
|||||||
#include <arpa/inet.h>
|
#include <arpa/inet.h>
|
||||||
#include <netdb.h>
|
#include <netdb.h>
|
||||||
#include <arpa/nameser.h>
|
#include <arpa/nameser.h>
|
||||||
|
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
|
||||||
|
#include <arpa/nameser_compat.h>
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|||||||
64
ares/ares_parse_aaaa_reply.3
Normal file
64
ares/ares_parse_aaaa_reply.3
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
.\" $Id$
|
||||||
|
.\"
|
||||||
|
.\" Copyright 2005 by Dominick Meglio.
|
||||||
|
.\"
|
||||||
|
.\" Permission to use, copy, modify, and distribute this
|
||||||
|
.\" software and its documentation for any purpose and without
|
||||||
|
.\" fee is hereby granted, provided that the above copyright
|
||||||
|
.\" notice appear in all copies and that both that copyright
|
||||||
|
.\" notice and this permission notice appear in supporting
|
||||||
|
.\" documentation, and that the name of M.I.T. not be used in
|
||||||
|
.\" advertising or publicity pertaining to distribution of the
|
||||||
|
.\" software without specific, written prior permission.
|
||||||
|
.\" M.I.T. makes no representations about the suitability of
|
||||||
|
.\" this software for any purpose. It is provided "as is"
|
||||||
|
.\" without express or implied warranty.
|
||||||
|
.\"
|
||||||
|
.TH ARES_PARSE_AAAA_REPLY 3 "10 March 2005"
|
||||||
|
.SH NAME
|
||||||
|
ares_parse_aaaa_reply \- Parse a reply to a DNS query of type AAAA into a hostent
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.nf
|
||||||
|
.B #include <ares.h>
|
||||||
|
.PP
|
||||||
|
.B int ares_parse_aaaa_reply(const unsigned char *\fIabuf\fP, int \fIalen\fP,
|
||||||
|
.B struct hostent **\fIhost\fP);
|
||||||
|
.fi
|
||||||
|
.SH DESCRIPTION
|
||||||
|
The
|
||||||
|
.B ares_parse_aaaa_reply
|
||||||
|
function parses the response to a query of type AAAA into a
|
||||||
|
.BR "struct hostent" .
|
||||||
|
The parameters
|
||||||
|
.I abuf
|
||||||
|
and
|
||||||
|
.I alen
|
||||||
|
give the contents of the response. The result is stored in allocated
|
||||||
|
memory and a pointer to it stored into the variable pointed to by
|
||||||
|
.IR host .
|
||||||
|
It is the caller's responsibility to free the resulting host structure
|
||||||
|
using
|
||||||
|
.BR ares_free_hostent (3)
|
||||||
|
when it is no longer needed.
|
||||||
|
.SH RETURN VALUES
|
||||||
|
.B ares_parse_aaaa_reply
|
||||||
|
can return any of the following values:
|
||||||
|
.TP 15
|
||||||
|
.B ARES_SUCCESS
|
||||||
|
The response was successfully parsed.
|
||||||
|
.TP 15
|
||||||
|
.B ARES_EBADRESP
|
||||||
|
The response was malformatted.
|
||||||
|
.TP 15
|
||||||
|
.B ARES_ENODATA
|
||||||
|
The response did not contain an answer to the query.
|
||||||
|
.TP 15
|
||||||
|
.B ARES_ENOMEM
|
||||||
|
Memory was exhausted.
|
||||||
|
.SH SEE ALSO
|
||||||
|
.BR ares_gethostbyname (3),
|
||||||
|
.BR ares_free_hostent (3)
|
||||||
|
.SH AUTHOR
|
||||||
|
Dominick Meglio
|
||||||
|
.br
|
||||||
|
Copyright 2005 by Dominick Meglio.
|
||||||
179
ares/ares_parse_aaaa_reply.c
Normal file
179
ares/ares_parse_aaaa_reply.c
Normal file
@@ -0,0 +1,179 @@
|
|||||||
|
/* Copyright 2005 Dominick Meglio
|
||||||
|
*
|
||||||
|
* 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 <sys/types.h>
|
||||||
|
|
||||||
|
#if defined(WIN32) && !defined(WATT32)
|
||||||
|
#include "nameser.h"
|
||||||
|
#else
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#include <arpa/inet.h>
|
||||||
|
#include <netdb.h>
|
||||||
|
#ifdef HAVE_ARPA_NAMESER_H
|
||||||
|
#include <arpa/nameser.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
|
||||||
|
#include <arpa/nameser_compat.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include "ares.h"
|
||||||
|
#include "ares_dns.h"
|
||||||
|
#include "inet_net_pton.h"
|
||||||
|
#include "ares_private.h"
|
||||||
|
|
||||||
|
int ares_parse_aaaa_reply(const unsigned char *abuf, int alen,
|
||||||
|
struct hostent **host)
|
||||||
|
{
|
||||||
|
unsigned int qdcount, ancount;
|
||||||
|
int status, i, rr_type, rr_class, rr_len, naddrs;
|
||||||
|
int naliases;
|
||||||
|
long len;
|
||||||
|
const unsigned char *aptr;
|
||||||
|
char *hostname, *rr_name, *rr_data, **aliases;
|
||||||
|
struct in6_addr *addrs;
|
||||||
|
struct hostent *hostent;
|
||||||
|
|
||||||
|
/* Set *host to NULL for all failure cases. */
|
||||||
|
*host = NULL;
|
||||||
|
|
||||||
|
/* Give up if abuf doesn't have room for a header. */
|
||||||
|
if (alen < HFIXEDSZ)
|
||||||
|
return ARES_EBADRESP;
|
||||||
|
|
||||||
|
/* Fetch the question and answer count from the header. */
|
||||||
|
qdcount = DNS_HEADER_QDCOUNT(abuf);
|
||||||
|
ancount = DNS_HEADER_ANCOUNT(abuf);
|
||||||
|
if (qdcount != 1)
|
||||||
|
return ARES_EBADRESP;
|
||||||
|
|
||||||
|
/* Expand the name from the question, and skip past the question. */
|
||||||
|
aptr = abuf + HFIXEDSZ;
|
||||||
|
status = ares_expand_name(aptr, abuf, alen, &hostname, &len);
|
||||||
|
if (status != ARES_SUCCESS)
|
||||||
|
return status;
|
||||||
|
if (aptr + len + QFIXEDSZ > abuf + alen)
|
||||||
|
{
|
||||||
|
free(hostname);
|
||||||
|
return ARES_EBADRESP;
|
||||||
|
}
|
||||||
|
aptr += len + QFIXEDSZ;
|
||||||
|
|
||||||
|
/* Allocate addresses and aliases; ancount gives an upper bound for both. */
|
||||||
|
addrs = malloc(ancount * sizeof(struct in6_addr));
|
||||||
|
if (!addrs)
|
||||||
|
{
|
||||||
|
free(hostname);
|
||||||
|
return ARES_ENOMEM;
|
||||||
|
}
|
||||||
|
aliases = malloc((ancount + 1) * sizeof(char *));
|
||||||
|
if (!aliases)
|
||||||
|
{
|
||||||
|
free(hostname);
|
||||||
|
free(addrs);
|
||||||
|
return ARES_ENOMEM;
|
||||||
|
}
|
||||||
|
naddrs = 0;
|
||||||
|
naliases = 0;
|
||||||
|
|
||||||
|
/* Examine each answer resource record (RR) in turn. */
|
||||||
|
for (i = 0; i < (int)ancount; i++)
|
||||||
|
{
|
||||||
|
/* Decode the RR up to the data field. */
|
||||||
|
status = ares_expand_name(aptr, abuf, alen, &rr_name, &len);
|
||||||
|
if (status != ARES_SUCCESS)
|
||||||
|
break;
|
||||||
|
aptr += len;
|
||||||
|
if (aptr + RRFIXEDSZ > abuf + alen)
|
||||||
|
{
|
||||||
|
status = ARES_EBADRESP;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
rr_type = DNS_RR_TYPE(aptr);
|
||||||
|
rr_class = DNS_RR_CLASS(aptr);
|
||||||
|
rr_len = DNS_RR_LEN(aptr);
|
||||||
|
aptr += RRFIXEDSZ;
|
||||||
|
|
||||||
|
if (rr_class == C_IN && rr_type == T_AAAA
|
||||||
|
&& rr_len == sizeof(struct in6_addr)
|
||||||
|
&& strcasecmp(rr_name, hostname) == 0)
|
||||||
|
{
|
||||||
|
memcpy(&addrs[naddrs], aptr, sizeof(struct in6_addr));
|
||||||
|
naddrs++;
|
||||||
|
status = ARES_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rr_class == C_IN && rr_type == T_CNAME)
|
||||||
|
{
|
||||||
|
/* Record the RR name as an alias. */
|
||||||
|
aliases[naliases] = rr_name;
|
||||||
|
naliases++;
|
||||||
|
|
||||||
|
/* Decode the RR data and replace the hostname with it. */
|
||||||
|
status = ares_expand_name(aptr, abuf, alen, &rr_data, &len);
|
||||||
|
if (status != ARES_SUCCESS)
|
||||||
|
break;
|
||||||
|
free(hostname);
|
||||||
|
hostname = rr_data;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
free(rr_name);
|
||||||
|
|
||||||
|
aptr += rr_len;
|
||||||
|
if (aptr > abuf + alen)
|
||||||
|
{
|
||||||
|
status = ARES_EBADRESP;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (status == ARES_SUCCESS && naddrs == 0)
|
||||||
|
status = ARES_ENODATA;
|
||||||
|
if (status == ARES_SUCCESS)
|
||||||
|
{
|
||||||
|
/* We got our answer. Allocate memory to build the host entry. */
|
||||||
|
aliases[naliases] = NULL;
|
||||||
|
hostent = malloc(sizeof(struct hostent));
|
||||||
|
if (hostent)
|
||||||
|
{
|
||||||
|
hostent->h_addr_list = malloc((naddrs + 1) * sizeof(char *));
|
||||||
|
if (hostent->h_addr_list)
|
||||||
|
{
|
||||||
|
/* Fill in the hostent and return successfully. */
|
||||||
|
hostent->h_name = hostname;
|
||||||
|
hostent->h_aliases = aliases;
|
||||||
|
hostent->h_addrtype = AF_INET6;
|
||||||
|
hostent->h_length = sizeof(struct in6_addr);
|
||||||
|
for (i = 0; i < naddrs; i++)
|
||||||
|
hostent->h_addr_list[i] = (char *) &addrs[i];
|
||||||
|
hostent->h_addr_list[naddrs] = NULL;
|
||||||
|
*host = hostent;
|
||||||
|
return ARES_SUCCESS;
|
||||||
|
}
|
||||||
|
free(hostent);
|
||||||
|
}
|
||||||
|
status = ARES_ENOMEM;
|
||||||
|
}
|
||||||
|
for (i = 0; i < naliases; i++)
|
||||||
|
free(aliases[i]);
|
||||||
|
free(aliases);
|
||||||
|
free(addrs);
|
||||||
|
free(hostname);
|
||||||
|
return status;
|
||||||
|
}
|
||||||
@@ -13,15 +13,19 @@
|
|||||||
* without express or implied warranty.
|
* without express or implied warranty.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "setup.h"
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
#ifdef WIN32
|
#if defined(WIN32) && !defined(WATT32)
|
||||||
#include "nameser.h"
|
#include "nameser.h"
|
||||||
#else
|
#else
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
#include <netdb.h>
|
#include <netdb.h>
|
||||||
#include <arpa/nameser.h>
|
#include <arpa/nameser.h>
|
||||||
|
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
|
||||||
|
#include <arpa/nameser_compat.h>
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|||||||
@@ -18,30 +18,53 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
#ifdef WIN32
|
#if !defined(WIN32) || defined(WATT32)
|
||||||
|
|
||||||
#else
|
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
/* We define closesocket() here so that we can use this function all over
|
/* We define closesocket() here so that we can use this function all over
|
||||||
the source code for closing sockets. */
|
the source code for closing sockets. */
|
||||||
#define closesocket(x) close(x)
|
#define closesocket(x) close(x)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef WATT32
|
||||||
|
#include <tcp.h>
|
||||||
|
#include <sys/ioctl.h>
|
||||||
|
#undef closesocket
|
||||||
|
#define closesocket(s) close_s(s)
|
||||||
|
#define writev(s,v,c) writev_s(s,v,c)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef NETWARE
|
||||||
|
#include <time.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#define DEFAULT_TIMEOUT 5
|
#define DEFAULT_TIMEOUT 5
|
||||||
#define DEFAULT_TRIES 4
|
#define DEFAULT_TRIES 4
|
||||||
#ifndef INADDR_NONE
|
#ifndef INADDR_NONE
|
||||||
#define INADDR_NONE 0xffffffff
|
#define INADDR_NONE 0xffffffff
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef WIN32
|
#if defined(WIN32) && !defined(WATT32)
|
||||||
|
|
||||||
#define IsNT ((int)GetVersion()>0)
|
#define IS_NT() ((int)GetVersion() > 0)
|
||||||
#define WIN_NS_9X "System\\CurrentControlSet\\Services\\VxD\\MSTCP"
|
#define WIN_NS_9X "System\\CurrentControlSet\\Services\\VxD\\MSTCP"
|
||||||
#define WIN_NS_NT_KEY "System\\CurrentControlSet\\Services\\Tcpip\\Parameters"
|
#define WIN_NS_NT_KEY "System\\CurrentControlSet\\Services\\Tcpip\\Parameters"
|
||||||
#define NAMESERVER "NameServer"
|
#define NAMESERVER "NameServer"
|
||||||
#define DHCPNAMESERVER "DhcpNameServer"
|
#define DHCPNAMESERVER "DhcpNameServer"
|
||||||
#define PATH_HOSTS_NT "\\drivers\\etc\\hosts"
|
#define DATABASEPATH "DatabasePath"
|
||||||
#define PATH_HOSTS_9X "\\hosts"
|
#define WIN_PATH_HOSTS "\\hosts"
|
||||||
|
|
||||||
|
#elif defined(WATT32)
|
||||||
|
|
||||||
|
#define PATH_RESOLV_CONF "/dev/ENV/etc/resolv.conf"
|
||||||
|
|
||||||
|
#elif defined(NETWARE)
|
||||||
|
|
||||||
|
#define PATH_RESOLV_CONF "sys:/etc/resolv.cfg"
|
||||||
|
#define PATH_HOSTS "sys:/etc/hosts"
|
||||||
|
|
||||||
|
#elif defined(__riscos__)
|
||||||
|
|
||||||
|
#define PATH_HOSTS "InetDBase:Hosts"
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
@@ -54,6 +77,8 @@
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include "ares_ipv6.h"
|
||||||
|
|
||||||
struct send_request {
|
struct send_request {
|
||||||
/* Remaining data to send */
|
/* Remaining data to send */
|
||||||
const unsigned char *data;
|
const unsigned char *data;
|
||||||
@@ -65,8 +90,8 @@ struct send_request {
|
|||||||
|
|
||||||
struct server_state {
|
struct server_state {
|
||||||
struct in_addr addr;
|
struct in_addr addr;
|
||||||
int udp_socket;
|
ares_socket_t udp_socket;
|
||||||
int tcp_socket;
|
ares_socket_t tcp_socket;
|
||||||
|
|
||||||
/* Mini-buffer for reading the length word */
|
/* Mini-buffer for reading the length word */
|
||||||
unsigned char tcp_lenbuf[2];
|
unsigned char tcp_lenbuf[2];
|
||||||
@@ -109,9 +134,23 @@ struct query {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/* An IP address pattern; matches an IP address X if X & mask == addr */
|
/* An IP address pattern; matches an IP address X if X & mask == addr */
|
||||||
|
#define PATTERN_MASK 0x1
|
||||||
|
#define PATTERN_CIDR 0x2
|
||||||
|
|
||||||
|
union ares_addr {
|
||||||
|
struct in_addr addr4;
|
||||||
|
struct in6_addr addr6;
|
||||||
|
};
|
||||||
|
|
||||||
struct apattern {
|
struct apattern {
|
||||||
struct in_addr addr;
|
union ares_addr addr;
|
||||||
struct in_addr mask;
|
union
|
||||||
|
{
|
||||||
|
union ares_addr addr;
|
||||||
|
unsigned short bits;
|
||||||
|
} mask;
|
||||||
|
int family;
|
||||||
|
unsigned short type;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ares_channeldata {
|
struct ares_channeldata {
|
||||||
@@ -141,7 +180,7 @@ struct ares_channeldata {
|
|||||||
|
|
||||||
void ares__send_query(ares_channel channel, struct query *query, time_t now);
|
void ares__send_query(ares_channel channel, struct query *query, time_t now);
|
||||||
void ares__close_sockets(struct server_state *server);
|
void ares__close_sockets(struct server_state *server);
|
||||||
int ares__get_hostent(FILE *fp, 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);
|
||||||
|
|
||||||
#ifdef CURLDEBUG
|
#ifdef CURLDEBUG
|
||||||
|
|||||||
@@ -13,28 +13,56 @@
|
|||||||
* without express or implied warranty.
|
* without express or implied warranty.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "setup.h"
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
#ifdef WIN32
|
#if defined(WIN32) && !defined(WATT32)
|
||||||
#include "nameser.h"
|
#include "nameser.h"
|
||||||
|
|
||||||
#else
|
#else
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
|
#ifdef HAVE_SYS_UIO_H
|
||||||
#include <sys/uio.h>
|
#include <sys/uio.h>
|
||||||
|
#endif
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
#include <netdb.h>
|
#include <netdb.h>
|
||||||
#include <arpa/nameser.h>
|
#include <arpa/nameser.h>
|
||||||
|
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
|
||||||
|
#include <arpa/nameser_compat.h>
|
||||||
|
#endif
|
||||||
|
#endif /* WIN32 && !WATT32 */
|
||||||
|
|
||||||
|
#ifdef HAVE_UNISTD_H
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef HAVE_SYS_IOCTL_H
|
||||||
|
#include <sys/ioctl.h>
|
||||||
|
#endif
|
||||||
|
#ifdef NETWARE
|
||||||
|
#include <sys/filio.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
|
||||||
#include "ares.h"
|
#include "ares.h"
|
||||||
#include "ares_dns.h"
|
#include "ares_dns.h"
|
||||||
#include "ares_private.h"
|
#include "ares_private.h"
|
||||||
|
|
||||||
|
#ifndef TRUE
|
||||||
|
/* at least Solaris 7 does not have TRUE at this point */
|
||||||
|
#define TRUE 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if (defined(WIN32) || defined(WATT32)) && !defined(MSDOS)
|
||||||
|
#define GET_ERRNO() WSAGetLastError()
|
||||||
|
#else
|
||||||
|
#define GET_ERRNO() errno
|
||||||
|
#endif
|
||||||
|
|
||||||
static void write_tcp_data(ares_channel channel, fd_set *write_fds,
|
static void write_tcp_data(ares_channel channel, fd_set *write_fds,
|
||||||
time_t now);
|
time_t now);
|
||||||
static void read_tcp_data(ares_channel channel, fd_set *read_fds, time_t now);
|
static void read_tcp_data(ares_channel channel, fd_set *read_fds, time_t now);
|
||||||
@@ -44,12 +72,12 @@ static void process_timeouts(ares_channel channel, time_t 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, int now);
|
int alen, int whichserver, int tcp, int now);
|
||||||
static void handle_error(ares_channel channel, int whichserver, time_t now);
|
static void handle_error(ares_channel channel, int whichserver, time_t now);
|
||||||
static void next_server(ares_channel channel, struct query *query, time_t now);
|
static struct query *next_server(ares_channel channel, struct query *query, time_t now);
|
||||||
static int open_tcp_socket(ares_channel channel, struct server_state *server);
|
static int open_tcp_socket(ares_channel channel, struct server_state *server);
|
||||||
static int open_udp_socket(ares_channel channel, struct server_state *server);
|
static int open_udp_socket(ares_channel channel, struct server_state *server);
|
||||||
static int same_questions(const unsigned char *qbuf, int qlen,
|
static int same_questions(const unsigned char *qbuf, int qlen,
|
||||||
const unsigned char *abuf, int alen);
|
const unsigned char *abuf, int alen);
|
||||||
static void end_query(ares_channel channel, struct query *query, int status,
|
static struct query *end_query(ares_channel channel, struct query *query, int status,
|
||||||
unsigned char *abuf, int alen);
|
unsigned char *abuf, int alen);
|
||||||
|
|
||||||
/* Something interesting happened on the wire, or there was a timeout.
|
/* Something interesting happened on the wire, or there was a timeout.
|
||||||
@@ -74,13 +102,16 @@ static void write_tcp_data(ares_channel channel, fd_set *write_fds, time_t now)
|
|||||||
struct server_state *server;
|
struct server_state *server;
|
||||||
struct send_request *sendreq;
|
struct send_request *sendreq;
|
||||||
struct iovec *vec;
|
struct iovec *vec;
|
||||||
int i, n, count;
|
int i;
|
||||||
|
ssize_t scount;
|
||||||
|
ssize_t wcount;
|
||||||
|
size_t n;
|
||||||
|
|
||||||
for (i = 0; i < channel->nservers; i++)
|
for (i = 0; i < channel->nservers; i++)
|
||||||
{
|
{
|
||||||
/* Make sure server has data to send and is selected in write_fds. */
|
/* Make sure server has data to send and is selected in write_fds. */
|
||||||
server = &channel->servers[i];
|
server = &channel->servers[i];
|
||||||
if (!server->qhead || server->tcp_socket == -1
|
if (!server->qhead || server->tcp_socket == ARES_SOCKET_BAD
|
||||||
|| !FD_ISSET(server->tcp_socket, write_fds))
|
|| !FD_ISSET(server->tcp_socket, write_fds))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@@ -89,16 +120,10 @@ static void write_tcp_data(ares_channel channel, fd_set *write_fds, time_t now)
|
|||||||
for (sendreq = server->qhead; sendreq; sendreq = sendreq->next)
|
for (sendreq = server->qhead; sendreq; sendreq = sendreq->next)
|
||||||
n++;
|
n++;
|
||||||
|
|
||||||
#ifdef WIN32
|
|
||||||
vec = NULL;
|
|
||||||
#else
|
|
||||||
/* Allocate iovecs so we can send all our data at once. */
|
/* Allocate iovecs so we can send all our data at once. */
|
||||||
vec = malloc(n * sizeof(struct iovec));
|
vec = malloc(n * sizeof(struct iovec));
|
||||||
#endif
|
|
||||||
if (vec)
|
if (vec)
|
||||||
{
|
{
|
||||||
#ifdef WIN32
|
|
||||||
#else
|
|
||||||
/* Fill in the iovecs and send. */
|
/* Fill in the iovecs and send. */
|
||||||
n = 0;
|
n = 0;
|
||||||
for (sendreq = server->qhead; sendreq; sendreq = sendreq->next)
|
for (sendreq = server->qhead; sendreq; sendreq = sendreq->next)
|
||||||
@@ -107,21 +132,21 @@ static void write_tcp_data(ares_channel channel, fd_set *write_fds, time_t now)
|
|||||||
vec[n].iov_len = sendreq->len;
|
vec[n].iov_len = sendreq->len;
|
||||||
n++;
|
n++;
|
||||||
}
|
}
|
||||||
count = writev(server->tcp_socket, vec, n);
|
wcount = writev(server->tcp_socket, vec, n);
|
||||||
free(vec);
|
free(vec);
|
||||||
if (count < 0)
|
if (wcount < 0)
|
||||||
{
|
{
|
||||||
handle_error(channel, i, now);
|
handle_error(channel, i, now);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Advance the send queue by as many bytes as we sent. */
|
/* Advance the send queue by as many bytes as we sent. */
|
||||||
while (count)
|
while (wcount)
|
||||||
{
|
{
|
||||||
sendreq = server->qhead;
|
sendreq = server->qhead;
|
||||||
if ((size_t)count >= sendreq->len)
|
if ((size_t)wcount >= sendreq->len)
|
||||||
{
|
{
|
||||||
count -= sendreq->len;
|
wcount -= sendreq->len;
|
||||||
server->qhead = sendreq->next;
|
server->qhead = sendreq->next;
|
||||||
if (server->qhead == NULL)
|
if (server->qhead == NULL)
|
||||||
server->qtail = NULL;
|
server->qtail = NULL;
|
||||||
@@ -129,28 +154,28 @@ static void write_tcp_data(ares_channel channel, fd_set *write_fds, time_t now)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
sendreq->data += count;
|
sendreq->data += wcount;
|
||||||
sendreq->len -= count;
|
sendreq->len -= wcount;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* Can't allocate iovecs; just send the first request. */
|
/* Can't allocate iovecs; just send the first request. */
|
||||||
sendreq = server->qhead;
|
sendreq = server->qhead;
|
||||||
|
|
||||||
count = send(server->tcp_socket, sendreq->data, sendreq->len, 0);
|
scount = send(server->tcp_socket, (void *)sendreq->data,
|
||||||
|
sendreq->len, 0);
|
||||||
|
|
||||||
if (count < 0)
|
if (scount < 0)
|
||||||
{
|
{
|
||||||
handle_error(channel, i, now);
|
handle_error(channel, i, now);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Advance the send queue by as many bytes as we sent. */
|
/* Advance the send queue by as many bytes as we sent. */
|
||||||
if ((size_t)count == sendreq->len)
|
if ((size_t)scount == sendreq->len)
|
||||||
{
|
{
|
||||||
server->qhead = sendreq->next;
|
server->qhead = sendreq->next;
|
||||||
if (server->qhead == NULL)
|
if (server->qhead == NULL)
|
||||||
@@ -159,8 +184,8 @@ static void write_tcp_data(ares_channel channel, fd_set *write_fds, time_t now)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
sendreq->data += count;
|
sendreq->data += scount;
|
||||||
sendreq->len -= count;
|
sendreq->len -= scount;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -179,7 +204,8 @@ static void read_tcp_data(ares_channel channel, fd_set *read_fds, time_t now)
|
|||||||
{
|
{
|
||||||
/* Make sure the server has a socket and is selected in read_fds. */
|
/* Make sure the server has a socket and is selected in read_fds. */
|
||||||
server = &channel->servers[i];
|
server = &channel->servers[i];
|
||||||
if (server->tcp_socket == -1 || !FD_ISSET(server->tcp_socket, read_fds))
|
if (server->tcp_socket == ARES_SOCKET_BAD ||
|
||||||
|
!FD_ISSET(server->tcp_socket, read_fds))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (server->tcp_lenbuf_pos != 2)
|
if (server->tcp_lenbuf_pos != 2)
|
||||||
@@ -188,8 +214,8 @@ static void read_tcp_data(ares_channel channel, fd_set *read_fds, time_t now)
|
|||||||
* what's left to read of it).
|
* what's left to read of it).
|
||||||
*/
|
*/
|
||||||
count = recv(server->tcp_socket,
|
count = recv(server->tcp_socket,
|
||||||
server->tcp_lenbuf + server->tcp_buffer_pos,
|
(void *)(server->tcp_lenbuf + server->tcp_lenbuf_pos),
|
||||||
2 - server->tcp_buffer_pos, 0);
|
2 - server->tcp_lenbuf_pos, 0);
|
||||||
if (count <= 0)
|
if (count <= 0)
|
||||||
{
|
{
|
||||||
handle_error(channel, i, now);
|
handle_error(channel, i, now);
|
||||||
@@ -214,7 +240,7 @@ static void read_tcp_data(ares_channel channel, fd_set *read_fds, time_t now)
|
|||||||
{
|
{
|
||||||
/* Read data into the allocated buffer. */
|
/* Read data into the allocated buffer. */
|
||||||
count = recv(server->tcp_socket,
|
count = recv(server->tcp_socket,
|
||||||
server->tcp_buffer + server->tcp_buffer_pos,
|
(void *)(server->tcp_buffer + server->tcp_buffer_pos),
|
||||||
server->tcp_length - server->tcp_buffer_pos, 0);
|
server->tcp_length - server->tcp_buffer_pos, 0);
|
||||||
if (count <= 0)
|
if (count <= 0)
|
||||||
{
|
{
|
||||||
@@ -230,6 +256,7 @@ static void read_tcp_data(ares_channel channel, fd_set *read_fds, time_t now)
|
|||||||
*/
|
*/
|
||||||
process_answer(channel, server->tcp_buffer, server->tcp_length,
|
process_answer(channel, server->tcp_buffer, server->tcp_length,
|
||||||
i, 1, now);
|
i, 1, now);
|
||||||
|
if (server->tcp_buffer)
|
||||||
free(server->tcp_buffer);
|
free(server->tcp_buffer);
|
||||||
server->tcp_buffer = NULL;
|
server->tcp_buffer = NULL;
|
||||||
server->tcp_lenbuf_pos = 0;
|
server->tcp_lenbuf_pos = 0;
|
||||||
@@ -251,10 +278,11 @@ static void read_udp_packets(ares_channel channel, fd_set *read_fds,
|
|||||||
/* Make sure the server has a socket and is selected in read_fds. */
|
/* Make sure the server has a socket and is selected in read_fds. */
|
||||||
server = &channel->servers[i];
|
server = &channel->servers[i];
|
||||||
|
|
||||||
if (server->udp_socket == -1 || !FD_ISSET(server->udp_socket, read_fds))
|
if (server->udp_socket == ARES_SOCKET_BAD ||
|
||||||
|
!FD_ISSET(server->udp_socket, read_fds))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
count = recv(server->udp_socket, buf, sizeof(buf), 0);
|
count = recv(server->udp_socket, (void *)buf, sizeof(buf), 0);
|
||||||
if (count <= 0)
|
if (count <= 0)
|
||||||
handle_error(channel, i, now);
|
handle_error(channel, i, now);
|
||||||
|
|
||||||
@@ -273,7 +301,7 @@ static void process_timeouts(ares_channel channel, time_t now)
|
|||||||
if (query->timeout != 0 && now >= query->timeout)
|
if (query->timeout != 0 && now >= query->timeout)
|
||||||
{
|
{
|
||||||
query->error_status = ARES_ETIMEOUT;
|
query->error_status = ARES_ETIMEOUT;
|
||||||
next_server(channel, query, now);
|
next = next_server(channel, query, now);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -349,7 +377,7 @@ static void process_answer(ares_channel channel, unsigned char *abuf,
|
|||||||
|
|
||||||
static void handle_error(ares_channel channel, int whichserver, time_t now)
|
static void handle_error(ares_channel channel, int whichserver, time_t now)
|
||||||
{
|
{
|
||||||
struct query *query;
|
struct query *query, *next;
|
||||||
|
|
||||||
/* Reset communications with this server. */
|
/* Reset communications with this server. */
|
||||||
ares__close_sockets(&channel->servers[whichserver]);
|
ares__close_sockets(&channel->servers[whichserver]);
|
||||||
@@ -357,17 +385,19 @@ static void handle_error(ares_channel channel, int whichserver, time_t now)
|
|||||||
/* Tell all queries talking to this server to move on and not try
|
/* Tell all queries talking to this server to move on and not try
|
||||||
* this server again.
|
* this server again.
|
||||||
*/
|
*/
|
||||||
for (query = channel->queries; query; query = query->next)
|
|
||||||
|
for (query = channel->queries; query; query = next)
|
||||||
{
|
{
|
||||||
|
next = query->next;
|
||||||
if (query->server == whichserver)
|
if (query->server == whichserver)
|
||||||
{
|
{
|
||||||
query->skip_server[whichserver] = 1;
|
query->skip_server[whichserver] = 1;
|
||||||
next_server(channel, query, now);
|
next = next_server(channel, query, now);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void next_server(ares_channel channel, struct query *query, time_t now)
|
static struct query *next_server(ares_channel channel, struct query *query, time_t now)
|
||||||
{
|
{
|
||||||
/* Advance to the next server or try. */
|
/* Advance to the next server or try. */
|
||||||
query->server++;
|
query->server++;
|
||||||
@@ -378,7 +408,7 @@ static void next_server(ares_channel channel, struct query *query, time_t now)
|
|||||||
if (!query->skip_server[query->server])
|
if (!query->skip_server[query->server])
|
||||||
{
|
{
|
||||||
ares__send_query(channel, query, now);
|
ares__send_query(channel, query, now);
|
||||||
return;
|
return (query->next);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
query->server = 0;
|
query->server = 0;
|
||||||
@@ -387,7 +417,7 @@ static void next_server(ares_channel channel, struct query *query, time_t now)
|
|||||||
if (query->using_tcp)
|
if (query->using_tcp)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
end_query(channel, query, query->error_status, NULL, 0);
|
return 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, time_t now)
|
||||||
@@ -401,7 +431,7 @@ void ares__send_query(ares_channel channel, struct query *query, time_t now)
|
|||||||
/* Make sure the TCP socket for this server is set up and queue
|
/* Make sure the TCP socket for this server is set up and queue
|
||||||
* a send request.
|
* a send request.
|
||||||
*/
|
*/
|
||||||
if (server->tcp_socket == -1)
|
if (server->tcp_socket == ARES_SOCKET_BAD)
|
||||||
{
|
{
|
||||||
if (open_tcp_socket(channel, server) == -1)
|
if (open_tcp_socket(channel, server) == -1)
|
||||||
{
|
{
|
||||||
@@ -410,9 +440,12 @@ void ares__send_query(ares_channel channel, struct query *query, time_t now)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
sendreq = malloc(sizeof(struct send_request));
|
sendreq = calloc(sizeof(struct send_request), 1);
|
||||||
if (!sendreq)
|
if (!sendreq)
|
||||||
|
{
|
||||||
end_query(channel, query, ARES_ENOMEM, NULL, 0);
|
end_query(channel, query, ARES_ENOMEM, NULL, 0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
sendreq->data = query->tcpbuf;
|
sendreq->data = query->tcpbuf;
|
||||||
sendreq->len = query->tcplen;
|
sendreq->len = query->tcplen;
|
||||||
sendreq->next = NULL;
|
sendreq->next = NULL;
|
||||||
@@ -425,7 +458,7 @@ void ares__send_query(ares_channel channel, struct query *query, time_t now)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (server->udp_socket == -1)
|
if (server->udp_socket == ARES_SOCKET_BAD)
|
||||||
{
|
{
|
||||||
if (open_udp_socket(channel, server) == -1)
|
if (open_udp_socket(channel, server) == -1)
|
||||||
{
|
{
|
||||||
@@ -434,7 +467,8 @@ void ares__send_query(ares_channel channel, struct query *query, time_t now)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (send(server->udp_socket, query->qbuf, query->qlen, 0) == -1)
|
if (send(server->udp_socket, (void *)query->qbuf,
|
||||||
|
query->qlen, 0) == -1)
|
||||||
{
|
{
|
||||||
query->skip_server[query->server] = 1;
|
query->skip_server[query->server] = 1;
|
||||||
next_server(channel, query, now);
|
next_server(channel, query, now);
|
||||||
@@ -446,63 +480,119 @@ void ares__send_query(ares_channel channel, struct query *query, time_t now)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* nonblock() set the given socket to either blocking or non-blocking mode
|
||||||
|
* based on the 'nonblock' boolean argument. This function is highly portable.
|
||||||
|
*/
|
||||||
|
static int nonblock(ares_socket_t sockfd, /* operate on this */
|
||||||
|
int nonblock /* TRUE or FALSE */)
|
||||||
|
{
|
||||||
|
#undef SETBLOCK
|
||||||
|
#define SETBLOCK 0
|
||||||
|
#ifdef HAVE_O_NONBLOCK
|
||||||
|
/* most recent unix versions */
|
||||||
|
int flags;
|
||||||
|
|
||||||
|
flags = fcntl(sockfd, F_GETFL, 0);
|
||||||
|
if (TRUE == nonblock)
|
||||||
|
return fcntl(sockfd, F_SETFL, flags | O_NONBLOCK);
|
||||||
|
else
|
||||||
|
return fcntl(sockfd, F_SETFL, flags & (~O_NONBLOCK));
|
||||||
|
#undef SETBLOCK
|
||||||
|
#define SETBLOCK 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(HAVE_FIONBIO) && (SETBLOCK == 0)
|
||||||
|
/* older unix versions */
|
||||||
|
int flags;
|
||||||
|
|
||||||
|
flags = nonblock;
|
||||||
|
return ioctl(sockfd, FIONBIO, &flags);
|
||||||
|
#undef SETBLOCK
|
||||||
|
#define SETBLOCK 2
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(HAVE_IOCTLSOCKET) && (SETBLOCK == 0)
|
||||||
|
/* Windows? */
|
||||||
|
unsigned long flags;
|
||||||
|
flags = nonblock;
|
||||||
|
|
||||||
|
return ioctlsocket(sockfd, FIONBIO, &flags);
|
||||||
|
#undef SETBLOCK
|
||||||
|
#define SETBLOCK 3
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(HAVE_IOCTLSOCKET_CASE) && (SETBLOCK == 0)
|
||||||
|
/* presumably for Amiga */
|
||||||
|
return IoctlSocket(sockfd, FIONBIO, (long)nonblock);
|
||||||
|
#undef SETBLOCK
|
||||||
|
#define SETBLOCK 4
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(HAVE_SO_NONBLOCK) && (SETBLOCK == 0)
|
||||||
|
/* BeOS */
|
||||||
|
long b = nonblock ? 1 : 0;
|
||||||
|
return setsockopt(sockfd, SOL_SOCKET, SO_NONBLOCK, &b, sizeof(b));
|
||||||
|
#undef SETBLOCK
|
||||||
|
#define SETBLOCK 5
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_DISABLED_NONBLOCKING
|
||||||
|
return 0; /* returns success */
|
||||||
|
#undef SETBLOCK
|
||||||
|
#define SETBLOCK 6
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if (SETBLOCK == 0)
|
||||||
|
#error "no non-blocking method was found/used/set"
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
static int open_tcp_socket(ares_channel channel, struct server_state *server)
|
static int open_tcp_socket(ares_channel channel, struct server_state *server)
|
||||||
{
|
{
|
||||||
int s, flags;
|
ares_socket_t s;
|
||||||
struct sockaddr_in sockin;
|
struct sockaddr_in sockin;
|
||||||
|
|
||||||
/* Acquire a socket. */
|
/* Acquire a socket. */
|
||||||
s = socket(AF_INET, SOCK_STREAM, 0);
|
s = socket(AF_INET, SOCK_STREAM, 0);
|
||||||
if (s == -1)
|
if (s == ARES_SOCKET_BAD)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
/* Set the socket non-blocking. */
|
/* Set the socket non-blocking. */
|
||||||
|
nonblock(s, TRUE);
|
||||||
#ifdef WIN32
|
|
||||||
flags = 1;
|
|
||||||
ioctlsocket(s, FIONBIO, &flags);
|
|
||||||
#else
|
|
||||||
flags = fcntl(s, F_GETFL, 0);
|
|
||||||
|
|
||||||
if (flags == -1)
|
|
||||||
{
|
|
||||||
close(s);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
flags |= O_NONBLOCK;
|
|
||||||
if (fcntl(s, F_SETFL, flags) == -1)
|
|
||||||
{
|
|
||||||
close(s);
|
|
||||||
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 = channel->tcp_port;
|
sockin.sin_port = channel->tcp_port;
|
||||||
if (connect(s, (struct sockaddr *) &sockin, sizeof(sockin)) == -1
|
if (connect(s, (struct sockaddr *) &sockin, sizeof(sockin)) == -1) {
|
||||||
&& errno != EINPROGRESS)
|
int err = GET_ERRNO();
|
||||||
{
|
|
||||||
|
if (err != EINPROGRESS && err != EWOULDBLOCK) {
|
||||||
closesocket(s);
|
closesocket(s);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
server->tcp_buffer_pos = 0;
|
||||||
server->tcp_socket = s;
|
server->tcp_socket = s;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int open_udp_socket(ares_channel channel, struct server_state *server)
|
static int open_udp_socket(ares_channel channel, struct server_state *server)
|
||||||
{
|
{
|
||||||
int s;
|
ares_socket_t s;
|
||||||
struct sockaddr_in sockin;
|
struct sockaddr_in sockin;
|
||||||
|
|
||||||
/* Acquire a socket. */
|
/* Acquire a socket. */
|
||||||
s = socket(AF_INET, SOCK_DGRAM, 0);
|
s = socket(AF_INET, SOCK_DGRAM, 0);
|
||||||
if (s == -1)
|
if (s == ARES_SOCKET_BAD)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
|
/* Set the socket non-blocking. */
|
||||||
|
nonblock(s, TRUE);
|
||||||
|
|
||||||
/* 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;
|
||||||
@@ -597,10 +687,10 @@ static int same_questions(const unsigned char *qbuf, int qlen,
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void end_query(ares_channel channel, struct query *query, int status,
|
static struct query *end_query (ares_channel channel, struct query *query, int status,
|
||||||
unsigned char *abuf, int alen)
|
unsigned char *abuf, int alen)
|
||||||
{
|
{
|
||||||
struct query **q;
|
struct query **q, *next;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
query->callback(query->arg, status, abuf, alen);
|
query->callback(query->arg, status, abuf, alen);
|
||||||
@@ -610,6 +700,10 @@ static void end_query(ares_channel channel, struct query *query, int status,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
*q = query->next;
|
*q = query->next;
|
||||||
|
if (*q)
|
||||||
|
next = (*q)->next;
|
||||||
|
else
|
||||||
|
next = NULL;
|
||||||
free(query->tcpbuf);
|
free(query->tcpbuf);
|
||||||
free(query->skip_server);
|
free(query->skip_server);
|
||||||
free(query);
|
free(query);
|
||||||
@@ -622,4 +716,5 @@ static void end_query(ares_channel channel, struct query *query, int status,
|
|||||||
for (i = 0; i < channel->nservers; i++)
|
for (i = 0; i < channel->nservers; i++)
|
||||||
ares__close_sockets(&channel->servers[i]);
|
ares__close_sockets(&channel->servers[i]);
|
||||||
}
|
}
|
||||||
|
return (next);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,13 +13,17 @@
|
|||||||
* without express or implied warranty.
|
* without express or implied warranty.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "setup.h"
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
#ifdef WIN32
|
#if defined(WIN32) && !defined(WATT32)
|
||||||
#include "nameser.h"
|
#include "nameser.h"
|
||||||
#else
|
#else
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
#include <arpa/nameser.h>
|
#include <arpa/nameser.h>
|
||||||
|
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
|
||||||
|
#include <arpa/nameser_compat.h>
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|||||||
@@ -13,12 +13,13 @@
|
|||||||
* without express or implied warranty.
|
* without express or implied warranty.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#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>
|
||||||
|
|
||||||
#ifdef WIN32
|
#if defined(WIN32) && !defined(WATT32)
|
||||||
#include "nameser.h"
|
#include "nameser.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -13,13 +13,17 @@
|
|||||||
* without express or implied warranty.
|
* without express or implied warranty.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "setup.h"
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
#ifdef WIN32
|
#if defined(WIN32) && !defined(WATT32)
|
||||||
#include "nameser.h"
|
#include "nameser.h"
|
||||||
#else
|
#else
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
#include <arpa/nameser.h>
|
#include <arpa/nameser.h>
|
||||||
|
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
|
||||||
|
#include <arpa/nameser_compat.h>
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|||||||
@@ -30,7 +30,8 @@ function gets the description of the ares library error code
|
|||||||
.IR code ,
|
.IR code ,
|
||||||
returning the result as a NUL-terminated C string.
|
returning the result as a NUL-terminated C string.
|
||||||
.SH NOTES
|
.SH NOTES
|
||||||
This function is not compatible with ares.
|
This function is not compatible with ares, it takes a different set of
|
||||||
|
arguments.
|
||||||
.SH AUTHOR
|
.SH AUTHOR
|
||||||
Greg Hudson, MIT Information Systems
|
Greg Hudson, MIT Information Systems
|
||||||
.br
|
.br
|
||||||
|
|||||||
@@ -13,6 +13,7 @@
|
|||||||
* without express or implied warranty.
|
* without express or implied warranty.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "setup.h"
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include "ares.h"
|
#include "ares.h"
|
||||||
|
|
||||||
@@ -37,7 +38,8 @@ const char *ares_strerror(int code)
|
|||||||
"Error reading file",
|
"Error reading file",
|
||||||
"Out of memory",
|
"Out of memory",
|
||||||
"Channel is being destroyed",
|
"Channel is being destroyed",
|
||||||
"Misformatted string"
|
"Misformatted string",
|
||||||
|
"Illegal flags specified"
|
||||||
};
|
};
|
||||||
|
|
||||||
assert(code >= 0 && code < (int)(sizeof(errtext) / sizeof(*errtext)));
|
assert(code >= 0 && code < (int)(sizeof(errtext) / sizeof(*errtext)));
|
||||||
|
|||||||
@@ -13,15 +13,15 @@
|
|||||||
* without express or implied warranty.
|
* without express or implied warranty.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "setup.h"
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef HAVE_SYS_TIME_H
|
||||||
|
|
||||||
#else
|
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
|
|
||||||
#include "ares.h"
|
#include "ares.h"
|
||||||
#include "ares_private.h"
|
#include "ares_private.h"
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
/* $Id$ */
|
/* $Id$ */
|
||||||
|
|
||||||
|
#include "setup.h"
|
||||||
#include "ares_version.h"
|
#include "ares_version.h"
|
||||||
|
|
||||||
const char *ares_version(int *version)
|
const char *ares_version(int *version)
|
||||||
|
|||||||
@@ -4,12 +4,12 @@
|
|||||||
#define ARES__VERSION_H
|
#define ARES__VERSION_H
|
||||||
|
|
||||||
#define ARES_VERSION_MAJOR 1
|
#define ARES_VERSION_MAJOR 1
|
||||||
#define ARES_VERSION_MINOR 2
|
#define ARES_VERSION_MINOR 3
|
||||||
#define ARES_VERSION_PATCH 0
|
#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.2.0"
|
#define ARES_VERSION_STR "1.3.1"
|
||||||
|
|
||||||
const char *ares_version(int *version);
|
const char *ares_version(int *version);
|
||||||
|
|
||||||
|
|||||||
60
ares/bitncmp.c
Normal file
60
ares/bitncmp.c
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
|
||||||
|
* Copyright (c) 1996,1999 by Internet Software Consortium.
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and distribute this software for any
|
||||||
|
* purpose with or without fee is hereby granted, provided that the above
|
||||||
|
* copyright notice and this permission notice appear in all copies.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
|
||||||
|
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||||
|
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR
|
||||||
|
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||||
|
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||||
|
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
|
||||||
|
* OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef HAVE_BITNCMP
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include "bitncmp.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* int
|
||||||
|
* bitncmp(l, r, n)
|
||||||
|
* compare bit masks l and r, for n bits.
|
||||||
|
* return:
|
||||||
|
* -1, 1, or 0 in the libc tradition.
|
||||||
|
* note:
|
||||||
|
* network byte order assumed. this means 192.5.5.240/28 has
|
||||||
|
* 0x11110000 in its fourth octet.
|
||||||
|
* author:
|
||||||
|
* Paul Vixie (ISC), June 1996
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
ares_bitncmp(const void *l, const void *r, int n) {
|
||||||
|
unsigned int lb, rb;
|
||||||
|
int x, b;
|
||||||
|
|
||||||
|
b = n / 8;
|
||||||
|
x = memcmp(l, r, b);
|
||||||
|
if (x)
|
||||||
|
return (x);
|
||||||
|
|
||||||
|
lb = ((const unsigned char *)l)[b];
|
||||||
|
rb = ((const unsigned char *)r)[b];
|
||||||
|
for (b = n % 8; b > 0; b--) {
|
||||||
|
if ((lb & 0x80) != (rb & 0x80)) {
|
||||||
|
if (lb & 0x80)
|
||||||
|
return (1);
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
|
lb <<= 1;
|
||||||
|
rb <<= 1;
|
||||||
|
}
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
26
ares/bitncmp.h
Normal file
26
ares/bitncmp.h
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BITNCMP_H
|
||||||
|
#define BITNCMP_H
|
||||||
|
|
||||||
|
#ifndef HAVE_BITNCMP
|
||||||
|
int ares_bitncmp(const void *l, const void *r, int n);
|
||||||
|
#else
|
||||||
|
#define ares_bitncmp(x,y,z) bitncmp(x,y,z)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* BITNCMP_H */
|
||||||
@@ -1,4 +1,7 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
aclocal
|
${LIBTOOLIZE:-libtoolize} --copy --automake --force
|
||||||
autoconf
|
${ACLOCAL:-aclocal} $ACLOCAL_FLAGS
|
||||||
|
${AUTOHEADER:-autoheader}
|
||||||
|
${AUTOCONF:-autoconf}
|
||||||
|
${AUTOMAKE:-automake} --add-missing
|
||||||
|
|||||||
87
ares/config-win32.h
Normal file
87
ares/config-win32.h
Normal file
@@ -0,0 +1,87 @@
|
|||||||
|
#ifndef __ARES_CONFIG_WIN32_H
|
||||||
|
#define __ARES_CONFIG_WIN32_H
|
||||||
|
|
||||||
|
/* $Id$ */
|
||||||
|
|
||||||
|
/* Copyright (C) 2004 - 2005 by Daniel Stenberg et al
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and distribute this software and its
|
||||||
|
* documentation for any purpose and without fee is hereby granted, provided
|
||||||
|
* that the above copyright notice appear in all copies and that both that
|
||||||
|
* copyright notice and this permission notice appear in supporting
|
||||||
|
* documentation, and that the name of M.I.T. not be used in advertising or
|
||||||
|
* publicity pertaining to distribution of the software without specific,
|
||||||
|
* written prior permission. M.I.T. makes no representations about the
|
||||||
|
* suitability of this software for any purpose. It is provided "as is"
|
||||||
|
* without express or implied warranty.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* ================================================================ */
|
||||||
|
/* ares/config-win32.h - Hand crafted config file for windows */
|
||||||
|
/* ================================================================ */
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------- */
|
||||||
|
/* HEADER FILES */
|
||||||
|
/* ---------------------------------------------------------------- */
|
||||||
|
|
||||||
|
/* Define if you have the <getopt.h> header file. */
|
||||||
|
#if defined(__MINGW32__)
|
||||||
|
#define HAVE_GETOPT_H 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Define if you have the <unistd.h> header file. */
|
||||||
|
#if defined(__MINGW32__) || defined(__WATCOMC__) || defined(__LCC__) || \
|
||||||
|
defined(__POCC__)
|
||||||
|
#define HAVE_UNISTD_H 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Define if you have the <windows.h> header file. */
|
||||||
|
#define HAVE_WINDOWS_H 1
|
||||||
|
|
||||||
|
/* Define if you have the <winsock.h> header file. */
|
||||||
|
#define HAVE_WINSOCK_H 1
|
||||||
|
|
||||||
|
/* Define if you have the <winsock2.h> header file. */
|
||||||
|
#define HAVE_WINSOCK2_H 1
|
||||||
|
|
||||||
|
/* Define if you have the <ws2tcpip.h> header file. */
|
||||||
|
#define HAVE_WS2TCPIP_H 1
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------- */
|
||||||
|
/* FUNCTIONS */
|
||||||
|
/* ---------------------------------------------------------------- */
|
||||||
|
|
||||||
|
/* Define if you have the ioctlsocket function. */
|
||||||
|
#define HAVE_IOCTLSOCKET 1
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------- */
|
||||||
|
/* STRUCT RELATED */
|
||||||
|
/* ---------------------------------------------------------------- */
|
||||||
|
|
||||||
|
/* Define this if you have struct addrinfo */
|
||||||
|
#define HAVE_STRUCT_ADDRINFO 1
|
||||||
|
|
||||||
|
/* Define this if you have struct sockaddr_storage */
|
||||||
|
#define HAVE_STRUCT_SOCKADDR_STORAGE 1
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------- */
|
||||||
|
/* IPV6 COMPATIBILITY */
|
||||||
|
/* ---------------------------------------------------------------- */
|
||||||
|
|
||||||
|
/* Define this if you have address family AF_INET6 */
|
||||||
|
#define HAVE_AF_INET6 1
|
||||||
|
|
||||||
|
/* Define this if you have protocol family PF_INET6 */
|
||||||
|
#define HAVE_PF_INET6 1
|
||||||
|
|
||||||
|
/* Define this if you have struct in6_addr */
|
||||||
|
#define HAVE_STRUCT_IN6_ADDR 1
|
||||||
|
|
||||||
|
/* Define this if you have struct sockaddr_in6 */
|
||||||
|
#define HAVE_STRUCT_SOCKADDR_IN6 1
|
||||||
|
|
||||||
|
/* Define this if you have sockaddr_in6 with scopeid */
|
||||||
|
#define HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID 1
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* __ARES_CONFIG_WIN32_H */
|
||||||
1388
ares/config.guess
vendored
1388
ares/config.guess
vendored
File diff suppressed because it is too large
Load Diff
1489
ares/config.sub
vendored
1489
ares/config.sub
vendored
File diff suppressed because it is too large
Load Diff
@@ -1,20 +1,27 @@
|
|||||||
|
|
||||||
dnl Process this file with autoconf to produce a configure script.
|
dnl Process this file with autoconf to produce a configure script.
|
||||||
|
AC_PREREQ(2.57)
|
||||||
AC_INIT(ares_init.c)
|
AC_INIT(ares_init.c)
|
||||||
|
AC_CONFIG_SRCDIR([ares_ipv6.h])
|
||||||
|
AM_CONFIG_HEADER(config.h)
|
||||||
|
AM_MAINTAINER_MODE
|
||||||
|
AM_INIT_AUTOMAKE(c-ares, CVS)
|
||||||
|
|
||||||
AC_PROG_CC
|
AC_PROG_CC
|
||||||
AC_PROG_INSTALL
|
AC_PROG_INSTALL
|
||||||
AC_PROG_RANLIB
|
|
||||||
|
|
||||||
AC_CANONICAL_HOST
|
|
||||||
case $host_os in
|
case $host_os in
|
||||||
solaris*)
|
solaris*)
|
||||||
AC_DEFINE(ETC_INET)
|
AC_DEFINE(ETC_INET, 1, [if a /etc/inet dir is being used])
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
AC_SEARCH_LIBS(gethostbyname, nsl)
|
AC_SEARCH_LIBS(gethostbyname, nsl)
|
||||||
AC_SEARCH_LIBS(socket, socket)
|
AC_SEARCH_LIBS(socket, socket)
|
||||||
|
|
||||||
|
dnl check for cygwin stuff
|
||||||
|
AC_LIBTOOL_WIN32_DLL
|
||||||
|
|
||||||
dnl ************************************************************
|
dnl ************************************************************
|
||||||
dnl Option to switch on debug options. This makes an assumption that
|
dnl Option to switch on debug options. This makes an assumption that
|
||||||
dnl this is built as an 'ares' subdir in the curl source tree. Subject for
|
dnl this is built as an 'ares' subdir in the curl source tree. Subject for
|
||||||
@@ -30,10 +37,14 @@ AC_HELP_STRING([--disable-debug],[Disable debug options]),
|
|||||||
;;
|
;;
|
||||||
*) AC_MSG_RESULT(yes)
|
*) AC_MSG_RESULT(yes)
|
||||||
|
|
||||||
dnl Checks for standard header files, to make memdebug.h inclusions bettter
|
dnl when doing the debug stuff, use static library only
|
||||||
AC_HEADER_STDC
|
AC_DISABLE_SHARED
|
||||||
|
|
||||||
CPPFLAGS="$CPPFLAGS -DCURLDEBUG -I../include"
|
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"
|
CFLAGS="$CFLAGS -g"
|
||||||
|
|
||||||
dnl set compiler "debug" options to become more picky, and remove
|
dnl set compiler "debug" options to become more picky, and remove
|
||||||
@@ -45,12 +56,453 @@ AC_HELP_STRING([--disable-debug],[Disable debug options]),
|
|||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
dnl libtool setup
|
||||||
|
AC_PROG_LIBTOOL
|
||||||
|
|
||||||
|
dnl Checks for header files.
|
||||||
|
AC_HEADER_STDC
|
||||||
|
|
||||||
|
dnl **********************************************************************
|
||||||
|
dnl Make sure that our checks for headers windows.h winsock.h winsock2.h
|
||||||
|
dnl and ws2tcpip.h take precedence over any other further checks which
|
||||||
|
dnl could be done later using AC_CHECK_HEADER or AC_CHECK_HEADERS for
|
||||||
|
dnl this specific header files. And do them before its results are used.
|
||||||
|
dnl **********************************************************************
|
||||||
|
|
||||||
|
CURL_CHECK_HEADER_WINDOWS
|
||||||
|
CURL_CHECK_HEADER_WINSOCK
|
||||||
|
CURL_CHECK_HEADER_WINSOCK2
|
||||||
|
CURL_CHECK_HEADER_WS2TCPIP
|
||||||
|
|
||||||
dnl check for a few basic system headers we need
|
dnl check for a few basic system headers we need
|
||||||
dnl AC_CHECK_HEADERS(
|
AC_CHECK_HEADERS(
|
||||||
dnl sys/types.h \
|
sys/types.h \
|
||||||
dnl sys/time.h \
|
sys/time.h \
|
||||||
dnl sys/select.h \
|
sys/select.h \
|
||||||
dnl sys/socket.h \
|
sys/socket.h \
|
||||||
dnl )
|
sys/ioctl.h \
|
||||||
|
netdb.h \
|
||||||
|
netinet/in.h \
|
||||||
|
net/if.h \
|
||||||
|
arpa/nameser.h \
|
||||||
|
arpa/nameser_compat.h \
|
||||||
|
arpa/inet.h,
|
||||||
|
dnl to do if not found
|
||||||
|
[],
|
||||||
|
dnl to do if found
|
||||||
|
[],
|
||||||
|
dnl default includes
|
||||||
|
[
|
||||||
|
#ifdef HAVE_SYS_TYPES_H
|
||||||
|
#include <sys/types.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_SYS_TIME_H
|
||||||
|
#include <sys/time.h>
|
||||||
|
#endif
|
||||||
|
dnl We do this default-include simply to make sure that the nameser_compat.h
|
||||||
|
dnl header *REALLY* can be include after the new nameser.h. It seems AIX 5.1
|
||||||
|
dnl (and others?) is not designed to allow this.
|
||||||
|
#ifdef HAVE_ARPA_NAMESER_H
|
||||||
|
#include <arpa/nameser.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
dnl *Sigh* these are needed in order for net/if.h to get properly detected.
|
||||||
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_NETINET_IN_H
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#endif
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
dnl Checks for typedefs, structures, and compiler characteristics.
|
||||||
|
AC_C_CONST
|
||||||
|
AC_TYPE_SIZE_T
|
||||||
|
AC_HEADER_TIME
|
||||||
|
|
||||||
|
AC_CHECK_SIZEOF(curl_off_t, ,[
|
||||||
|
#include <stdio.h>
|
||||||
|
#include "$srcdir/include/curl/curl.h"
|
||||||
|
])
|
||||||
|
AC_CHECK_SIZEOF(size_t)
|
||||||
|
AC_CHECK_SIZEOF(long)
|
||||||
|
AC_CHECK_SIZEOF(time_t)
|
||||||
|
|
||||||
|
AC_CHECK_TYPE(long long,
|
||||||
|
[AC_DEFINE(HAVE_LONGLONG, 1, [if your compiler supports long long])]
|
||||||
|
longlong="yes"
|
||||||
|
)
|
||||||
|
|
||||||
|
if test "xyes" = "x$longlong"; then
|
||||||
|
AC_MSG_CHECKING([if numberLL works])
|
||||||
|
AC_COMPILE_IFELSE([long long val = 1000LL;],
|
||||||
|
[AC_DEFINE(HAVE_LL, 1, [if your compiler supports LL])]
|
||||||
|
AC_MSG_RESULT(yes),
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
)
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
# check for ssize_t
|
||||||
|
AC_CHECK_TYPE(ssize_t, ,
|
||||||
|
AC_DEFINE(ssize_t, int, [the signed version of size_t]))
|
||||||
|
|
||||||
|
# Check for socklen_t or equivalent
|
||||||
|
CURL_CHECK_TYPE_SOCKLEN_T
|
||||||
|
|
||||||
|
TYPE_IN_ADDR_T
|
||||||
|
|
||||||
|
TYPE_SOCKADDR_STORAGE
|
||||||
|
|
||||||
|
|
||||||
|
dnl check for AF_INET6
|
||||||
|
CARES_CHECK_CONSTANT(
|
||||||
|
[
|
||||||
|
#undef inline
|
||||||
|
#ifdef HAVE_WINDOWS_H
|
||||||
|
#ifndef WIN32_LEAN_AND_MEAN
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#endif
|
||||||
|
#include <windows.h>
|
||||||
|
#ifdef HAVE_WINSOCK2_H
|
||||||
|
#include <winsock2.h>
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#ifdef HAVE_SYS_TYPES_H
|
||||||
|
#include <sys/types.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
], [PF_INET6],
|
||||||
|
AC_DEFINE_UNQUOTED(HAVE_PF_INET6,1,[Define to 1 if you have PF_INET6.])
|
||||||
|
)
|
||||||
|
|
||||||
|
dnl check for PF_INET6
|
||||||
|
CARES_CHECK_CONSTANT(
|
||||||
|
[
|
||||||
|
#undef inline
|
||||||
|
#ifdef HAVE_WINDOWS_H
|
||||||
|
#ifndef WIN32_LEAN_AND_MEAN
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#endif
|
||||||
|
#include <windows.h>
|
||||||
|
#ifdef HAVE_WINSOCK2_H
|
||||||
|
#include <winsock2.h>
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#ifdef HAVE_SYS_TYPES_H
|
||||||
|
#include <sys/types.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
], [AF_INET6],
|
||||||
|
AC_DEFINE_UNQUOTED(HAVE_AF_INET6,1,[Define to 1 if you have AF_INET6.])
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
dnl check for the in6_addr structure
|
||||||
|
CARES_CHECK_STRUCT(
|
||||||
|
[
|
||||||
|
#undef inline
|
||||||
|
#ifdef HAVE_WINDOWS_H
|
||||||
|
#ifndef WIN32_LEAN_AND_MEAN
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#endif
|
||||||
|
#include <windows.h>
|
||||||
|
#ifdef HAVE_WINSOCK2_H
|
||||||
|
#include <winsock2.h>
|
||||||
|
#ifdef HAVE_WS2TCPIP_H
|
||||||
|
#include <ws2tcpip.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#ifdef HAVE_SYS_TYPES_H
|
||||||
|
#include <sys/types.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_NETINET_IN_H
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
], [in6_addr],
|
||||||
|
AC_DEFINE_UNQUOTED(HAVE_STRUCT_IN6_ADDR,1,[Define to 1 if you have struct in6_addr.])
|
||||||
|
)
|
||||||
|
|
||||||
|
dnl check for the sockaddr_in6 structure
|
||||||
|
CARES_CHECK_STRUCT(
|
||||||
|
[
|
||||||
|
#undef inline
|
||||||
|
#ifdef HAVE_WINDOWS_H
|
||||||
|
#ifndef WIN32_LEAN_AND_MEAN
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#endif
|
||||||
|
#include <windows.h>
|
||||||
|
#ifdef HAVE_WINSOCK2_H
|
||||||
|
#include <winsock2.h>
|
||||||
|
#ifdef HAVE_WS2TCPIP_H
|
||||||
|
#include <ws2tcpip.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#ifdef HAVE_SYS_TYPES_H
|
||||||
|
#include <sys/types.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_NETINET_IN_H
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
], [sockaddr_in6],
|
||||||
|
AC_DEFINE_UNQUOTED(HAVE_STRUCT_SOCKADDR_IN6,1,
|
||||||
|
[Define to 1 if you have struct sockaddr_in6.]) ac_have_sockaddr_in6=yes
|
||||||
|
)
|
||||||
|
|
||||||
|
AC_CHECK_MEMBER(struct sockaddr_in6.sin6_scope_id,
|
||||||
|
AC_DEFINE_UNQUOTED(HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID,1,
|
||||||
|
[Define to 1 if your struct sockaddr_in6 has sin6_scope_id.])
|
||||||
|
, ,
|
||||||
|
[
|
||||||
|
#undef inline
|
||||||
|
#ifdef HAVE_WINDOWS_H
|
||||||
|
#ifndef WIN32_LEAN_AND_MEAN
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#endif
|
||||||
|
#include <windows.h>
|
||||||
|
#ifdef HAVE_WINSOCK2_H
|
||||||
|
#include <winsock2.h>
|
||||||
|
#ifdef HAVE_WS2TCPIP_H
|
||||||
|
#include <ws2tcpip.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#ifdef HAVE_SYS_TYPES_H
|
||||||
|
#include <sys/types.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_NETINET_IN_H
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
])
|
||||||
|
|
||||||
|
dnl check for the addrinfo structure
|
||||||
|
AC_CHECK_MEMBER(struct addrinfo.ai_flags,
|
||||||
|
AC_DEFINE_UNQUOTED(HAVE_STRUCT_ADDRINFO,1,
|
||||||
|
[Define to 1 if you have struct addrinfo.]),,
|
||||||
|
[
|
||||||
|
#undef inline
|
||||||
|
#ifdef HAVE_WINDOWS_H
|
||||||
|
#ifndef WIN32_LEAN_AND_MEAN
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#endif
|
||||||
|
#include <windows.h>
|
||||||
|
#ifdef HAVE_WINSOCK2_H
|
||||||
|
#include <winsock2.h>
|
||||||
|
#ifdef HAVE_WS2TCPIP_H
|
||||||
|
#include <ws2tcpip.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#ifdef HAVE_SYS_TYPES_H
|
||||||
|
#include <sys/types.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_NETINET_IN_H
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_NETDB_H
|
||||||
|
#include <netdb.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
AC_CHECK_FUNCS( bitncmp \
|
||||||
|
if_indextoname,
|
||||||
|
dnl if found
|
||||||
|
[],
|
||||||
|
dnl if not found, $ac_func is the name we check for
|
||||||
|
func="$ac_func"
|
||||||
|
AC_MSG_CHECKING([deeper for $func])
|
||||||
|
AC_TRY_LINK( [],
|
||||||
|
[ $func ();],
|
||||||
|
AC_MSG_RESULT(yes!)
|
||||||
|
eval "ac_cv_func_$func=yes"
|
||||||
|
def=`echo "HAVE_$func" | tr 'a-z' 'A-Z'`
|
||||||
|
AC_DEFINE_UNQUOTED($def, 1, [If you have $func]),
|
||||||
|
AC_MSG_RESULT(but still no)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
dnl check for inet_pton
|
||||||
|
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
|
||||||
|
AC_CHECK_FUNCS(inet_net_pton)
|
||||||
|
dnl Again, some systems have it, but not IPv6
|
||||||
|
if test "$ac_cv_func_inet_net_pton" = "yes" ; then
|
||||||
|
AC_MSG_CHECKING(if inet_net_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_net_pton(AF_INET6, "::1", &addr6, sizeof(addr6)) < 1)
|
||||||
|
exit(1);
|
||||||
|
else
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
], [
|
||||||
|
AC_MSG_RESULT(yes)
|
||||||
|
AC_DEFINE_UNQUOTED(HAVE_INET_NET_PTON_IPV6,1,[Define to 1 if inet_net_pton supports IPv6.])
|
||||||
|
], AC_MSG_RESULT(no),AC_MSG_RESULT(no))
|
||||||
|
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, ,
|
||||||
|
[
|
||||||
|
#undef inline
|
||||||
|
#ifdef HAVE_WINDOWS_H
|
||||||
|
#ifndef WIN32_LEAN_AND_MEAN
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#endif
|
||||||
|
#include <windows.h>
|
||||||
|
#ifdef HAVE_WINSOCK2_H
|
||||||
|
#include <winsock2.h>
|
||||||
|
#ifdef HAVE_WS2TCPIP_H
|
||||||
|
#include <ws2tcpip.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#ifdef HAVE_SYS_TYPES_H
|
||||||
|
#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
|
||||||
|
#endif
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
AC_CHECK_SIZEOF(struct in_addr, ,
|
||||||
|
[
|
||||||
|
#undef inline
|
||||||
|
#ifdef HAVE_WINDOWS_H
|
||||||
|
#ifndef WIN32_LEAN_AND_MEAN
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#endif
|
||||||
|
#include <windows.h>
|
||||||
|
#ifdef HAVE_WINSOCK2_H
|
||||||
|
#include <winsock2.h>
|
||||||
|
#ifdef HAVE_WS2TCPIP_H
|
||||||
|
#include <ws2tcpip.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#ifdef HAVE_SYS_TYPES_H
|
||||||
|
#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
|
||||||
|
#endif
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
dnl Check if the getnameinfo function is available
|
||||||
|
dnl and get the types of five of its arguments.
|
||||||
|
CURL_CHECK_FUNC_GETNAMEINFO
|
||||||
|
|
||||||
|
|
||||||
|
dnl God bless non-standardized functions! We need to see which getservbyport_r variant is available
|
||||||
|
CARES_CHECK_GETSERVBYPORT_R
|
||||||
|
|
||||||
|
CURL_CHECK_NONBLOCKING_SOCKET
|
||||||
|
|
||||||
|
AC_C_BIGENDIAN(
|
||||||
|
[AC_DEFINE(ARES_BIG_ENDIAN, 1, [define this if ares is built for a big endian system])],
|
||||||
|
,
|
||||||
|
[AC_MSG_WARN([couldn't figure out endianess, assuming little endian!])]
|
||||||
|
)
|
||||||
|
|
||||||
AC_OUTPUT(Makefile)
|
AC_OUTPUT(Makefile)
|
||||||
|
|||||||
439
ares/inet_net_pton.c
Normal file
439
ares/inet_net_pton.c
Normal file
@@ -0,0 +1,439 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
|
||||||
|
* Copyright (c) 1996,1999 by Internet Software Consortium.
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and distribute this software for any
|
||||||
|
* purpose with or without fee is hereby granted, provided that the above
|
||||||
|
* copyright notice and this permission notice appear in all copies.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
|
||||||
|
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||||
|
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR
|
||||||
|
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||||
|
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||||
|
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
|
||||||
|
* OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "setup.h"
|
||||||
|
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
#if defined(WIN32) && !defined(WATT32)
|
||||||
|
#include "nameser.h"
|
||||||
|
#else
|
||||||
|
|
||||||
|
#ifdef HAVE_SYS_SOCKET_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>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_ARPA_INET_H
|
||||||
|
#include <arpa/inet.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <ctype.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#include "ares_ipv6.h"
|
||||||
|
#include "inet_net_pton.h"
|
||||||
|
|
||||||
|
#if !defined(HAVE_INET_NET_PTON) || !defined(HAVE_INET_NET_PTON_IPV6) || \
|
||||||
|
!defined(HAVE_INET_PTON) || !defined(HAVE_INET_PTON_IPV6)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* static int
|
||||||
|
* inet_net_pton_ipv4(src, dst, size)
|
||||||
|
* convert IPv4 network number from presentation to network format.
|
||||||
|
* accepts hex octets, hex strings, decimal octets, and /CIDR.
|
||||||
|
* "size" is in bytes and describes "dst".
|
||||||
|
* return:
|
||||||
|
* number of bits, either imputed classfully or specified with /CIDR,
|
||||||
|
* or -1 if some failure occurred (check errno). ENOENT means it was
|
||||||
|
* not an IPv4 network specification.
|
||||||
|
* note:
|
||||||
|
* network byte order assumed. this means 192.5.5.240/28 has
|
||||||
|
* 0b11110000 in its fourth octet.
|
||||||
|
* author:
|
||||||
|
* Paul Vixie (ISC), June 1996
|
||||||
|
*/
|
||||||
|
static int
|
||||||
|
inet_net_pton_ipv4(const char *src, unsigned char *dst, size_t size)
|
||||||
|
{
|
||||||
|
static const char xdigits[] = "0123456789abcdef";
|
||||||
|
static const char digits[] = "0123456789";
|
||||||
|
int n, ch, tmp = 0, dirty, bits;
|
||||||
|
const unsigned char *odst = dst;
|
||||||
|
|
||||||
|
ch = *src++;
|
||||||
|
if (ch == '0' && (src[0] == 'x' || src[0] == 'X')
|
||||||
|
&& isascii((unsigned char)(src[1]))
|
||||||
|
&& isxdigit((unsigned char)(src[1]))) {
|
||||||
|
/* Hexadecimal: Eat nybble string. */
|
||||||
|
if (size <= 0U)
|
||||||
|
goto emsgsize;
|
||||||
|
dirty = 0;
|
||||||
|
src++; /* skip x or X. */
|
||||||
|
while ((ch = *src++) != '\0' && isascii(ch) && isxdigit(ch)) {
|
||||||
|
if (isupper(ch))
|
||||||
|
ch = tolower(ch);
|
||||||
|
n = (int)(strchr(xdigits, ch) - xdigits);
|
||||||
|
if (dirty == 0)
|
||||||
|
tmp = n;
|
||||||
|
else
|
||||||
|
tmp = (tmp << 4) | n;
|
||||||
|
if (++dirty == 2) {
|
||||||
|
if (size-- <= 0U)
|
||||||
|
goto emsgsize;
|
||||||
|
*dst++ = (unsigned char) tmp;
|
||||||
|
dirty = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (dirty) { /* Odd trailing nybble? */
|
||||||
|
if (size-- <= 0U)
|
||||||
|
goto emsgsize;
|
||||||
|
*dst++ = (unsigned char) (tmp << 4);
|
||||||
|
}
|
||||||
|
} else if (isascii(ch) && isdigit(ch)) {
|
||||||
|
/* Decimal: eat dotted digit string. */
|
||||||
|
for (;;) {
|
||||||
|
tmp = 0;
|
||||||
|
do {
|
||||||
|
n = (int)(strchr(digits, ch) - digits);
|
||||||
|
tmp *= 10;
|
||||||
|
tmp += n;
|
||||||
|
if (tmp > 255)
|
||||||
|
goto enoent;
|
||||||
|
} while ((ch = *src++) != '\0' &&
|
||||||
|
isascii(ch) && isdigit(ch));
|
||||||
|
if (size-- <= 0U)
|
||||||
|
goto emsgsize;
|
||||||
|
*dst++ = (unsigned char) tmp;
|
||||||
|
if (ch == '\0' || ch == '/')
|
||||||
|
break;
|
||||||
|
if (ch != '.')
|
||||||
|
goto enoent;
|
||||||
|
ch = *src++;
|
||||||
|
if (!isascii(ch) || !isdigit(ch))
|
||||||
|
goto enoent;
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
goto enoent;
|
||||||
|
|
||||||
|
bits = -1;
|
||||||
|
if (ch == '/' && isascii((unsigned char)(src[0])) &&
|
||||||
|
isdigit((unsigned char)(src[0])) && dst > odst) {
|
||||||
|
/* CIDR width specifier. Nothing can follow it. */
|
||||||
|
ch = *src++; /* Skip over the /. */
|
||||||
|
bits = 0;
|
||||||
|
do {
|
||||||
|
n = (int)(strchr(digits, ch) - digits);
|
||||||
|
bits *= 10;
|
||||||
|
bits += n;
|
||||||
|
} while ((ch = *src++) != '\0' && isascii(ch) && isdigit(ch));
|
||||||
|
if (ch != '\0')
|
||||||
|
goto enoent;
|
||||||
|
if (bits > 32)
|
||||||
|
goto emsgsize;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Firey death and destruction unless we prefetched EOS. */
|
||||||
|
if (ch != '\0')
|
||||||
|
goto enoent;
|
||||||
|
|
||||||
|
/* If nothing was written to the destination, we found no address. */
|
||||||
|
if (dst == odst)
|
||||||
|
goto enoent;
|
||||||
|
/* If no CIDR spec was given, infer width from net class. */
|
||||||
|
if (bits == -1) {
|
||||||
|
if (*odst >= 240) /* Class E */
|
||||||
|
bits = 32;
|
||||||
|
else if (*odst >= 224) /* Class D */
|
||||||
|
bits = 8;
|
||||||
|
else if (*odst >= 192) /* Class C */
|
||||||
|
bits = 24;
|
||||||
|
else if (*odst >= 128) /* Class B */
|
||||||
|
bits = 16;
|
||||||
|
else /* Class A */
|
||||||
|
bits = 8;
|
||||||
|
/* If imputed mask is narrower than specified octets, widen. */
|
||||||
|
if (bits < ((dst - odst) * 8))
|
||||||
|
bits = (int)(dst - odst) * 8;
|
||||||
|
/*
|
||||||
|
* If there are no additional bits specified for a class D
|
||||||
|
* address adjust bits to 4.
|
||||||
|
*/
|
||||||
|
if (bits == 8 && *odst == 224)
|
||||||
|
bits = 4;
|
||||||
|
}
|
||||||
|
/* Extend network to cover the actual mask. */
|
||||||
|
while (bits > ((dst - odst) * 8)) {
|
||||||
|
if (size-- <= 0U)
|
||||||
|
goto emsgsize;
|
||||||
|
*dst++ = '\0';
|
||||||
|
}
|
||||||
|
return (bits);
|
||||||
|
|
||||||
|
enoent:
|
||||||
|
errno = ENOENT;
|
||||||
|
return (-1);
|
||||||
|
|
||||||
|
emsgsize:
|
||||||
|
errno = EMSGSIZE;
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
getbits(const char *src, int *bitsp)
|
||||||
|
{
|
||||||
|
static const char digits[] = "0123456789";
|
||||||
|
int n;
|
||||||
|
int val;
|
||||||
|
char ch;
|
||||||
|
|
||||||
|
val = 0;
|
||||||
|
n = 0;
|
||||||
|
while ((ch = *src++) != '\0') {
|
||||||
|
const char *pch;
|
||||||
|
|
||||||
|
pch = strchr(digits, ch);
|
||||||
|
if (pch != NULL) {
|
||||||
|
if (n++ != 0 && val == 0) /* no leading zeros */
|
||||||
|
return (0);
|
||||||
|
val *= 10;
|
||||||
|
val += (pch - digits);
|
||||||
|
if (val > 128) /* range */
|
||||||
|
return (0);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
if (n == 0)
|
||||||
|
return (0);
|
||||||
|
*bitsp = val;
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
getv4(const char *src, unsigned char *dst, int *bitsp)
|
||||||
|
{
|
||||||
|
static const char digits[] = "0123456789";
|
||||||
|
unsigned char *odst = dst;
|
||||||
|
int n;
|
||||||
|
unsigned int val;
|
||||||
|
char ch;
|
||||||
|
|
||||||
|
val = 0;
|
||||||
|
n = 0;
|
||||||
|
while ((ch = *src++) != '\0') {
|
||||||
|
const char *pch;
|
||||||
|
|
||||||
|
pch = strchr(digits, ch);
|
||||||
|
if (pch != NULL) {
|
||||||
|
if (n++ != 0 && val == 0) /* no leading zeros */
|
||||||
|
return (0);
|
||||||
|
val *= 10;
|
||||||
|
val += (pch - digits);
|
||||||
|
if (val > 255) /* range */
|
||||||
|
return (0);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (ch == '.' || ch == '/') {
|
||||||
|
if (dst - odst > 3) /* too many octets? */
|
||||||
|
return (0);
|
||||||
|
*dst++ = val;
|
||||||
|
if (ch == '/')
|
||||||
|
return (getbits(src, bitsp));
|
||||||
|
val = 0;
|
||||||
|
n = 0;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
if (n == 0)
|
||||||
|
return (0);
|
||||||
|
if (dst - odst > 3) /* too many octets? */
|
||||||
|
return (0);
|
||||||
|
*dst++ = val;
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
inet_net_pton_ipv6(const char *src, unsigned char *dst, size_t size)
|
||||||
|
{
|
||||||
|
static const char xdigits_l[] = "0123456789abcdef",
|
||||||
|
xdigits_u[] = "0123456789ABCDEF";
|
||||||
|
unsigned char tmp[NS_IN6ADDRSZ], *tp, *endp, *colonp;
|
||||||
|
const char *xdigits, *curtok;
|
||||||
|
int ch, saw_xdigit;
|
||||||
|
unsigned int val;
|
||||||
|
int digits;
|
||||||
|
int bits;
|
||||||
|
size_t bytes;
|
||||||
|
int words;
|
||||||
|
int ipv4;
|
||||||
|
|
||||||
|
memset((tp = tmp), '\0', NS_IN6ADDRSZ);
|
||||||
|
endp = tp + NS_IN6ADDRSZ;
|
||||||
|
colonp = NULL;
|
||||||
|
/* Leading :: requires some special handling. */
|
||||||
|
if (*src == ':')
|
||||||
|
if (*++src != ':')
|
||||||
|
goto enoent;
|
||||||
|
curtok = src;
|
||||||
|
saw_xdigit = 0;
|
||||||
|
val = 0;
|
||||||
|
digits = 0;
|
||||||
|
bits = -1;
|
||||||
|
ipv4 = 0;
|
||||||
|
while ((ch = *src++) != '\0') {
|
||||||
|
const char *pch;
|
||||||
|
|
||||||
|
if ((pch = strchr((xdigits = xdigits_l), ch)) == NULL)
|
||||||
|
pch = strchr((xdigits = xdigits_u), ch);
|
||||||
|
if (pch != NULL) {
|
||||||
|
val <<= 4;
|
||||||
|
val |= (pch - xdigits);
|
||||||
|
if (++digits > 4)
|
||||||
|
goto enoent;
|
||||||
|
saw_xdigit = 1;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (ch == ':') {
|
||||||
|
curtok = src;
|
||||||
|
if (!saw_xdigit) {
|
||||||
|
if (colonp)
|
||||||
|
goto enoent;
|
||||||
|
colonp = tp;
|
||||||
|
continue;
|
||||||
|
} else if (*src == '\0')
|
||||||
|
goto enoent;
|
||||||
|
if (tp + NS_INT16SZ > endp)
|
||||||
|
return (0);
|
||||||
|
*tp++ = (unsigned char) (val >> 8) & 0xff;
|
||||||
|
*tp++ = (unsigned char) val & 0xff;
|
||||||
|
saw_xdigit = 0;
|
||||||
|
digits = 0;
|
||||||
|
val = 0;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (ch == '.' && ((tp + NS_INADDRSZ) <= endp) &&
|
||||||
|
getv4(curtok, tp, &bits) > 0) {
|
||||||
|
tp += NS_INADDRSZ;
|
||||||
|
saw_xdigit = 0;
|
||||||
|
ipv4 = 1;
|
||||||
|
break; /* '\0' was seen by inet_pton4(). */
|
||||||
|
}
|
||||||
|
if (ch == '/' && getbits(src, &bits) > 0)
|
||||||
|
break;
|
||||||
|
goto enoent;
|
||||||
|
}
|
||||||
|
if (saw_xdigit) {
|
||||||
|
if (tp + NS_INT16SZ > endp)
|
||||||
|
goto enoent;
|
||||||
|
*tp++ = (unsigned char) (val >> 8) & 0xff;
|
||||||
|
*tp++ = (unsigned char) val & 0xff;
|
||||||
|
}
|
||||||
|
if (bits == -1)
|
||||||
|
bits = 128;
|
||||||
|
|
||||||
|
words = (bits + 15) / 16;
|
||||||
|
if (words < 2)
|
||||||
|
words = 2;
|
||||||
|
if (ipv4)
|
||||||
|
words = 8;
|
||||||
|
endp = tmp + 2 * words;
|
||||||
|
|
||||||
|
if (colonp != NULL) {
|
||||||
|
/*
|
||||||
|
* Since some memmove()'s erroneously fail to handle
|
||||||
|
* overlapping regions, we'll do the shift by hand.
|
||||||
|
*/
|
||||||
|
const int n = (int)(tp - colonp);
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (tp == endp)
|
||||||
|
goto enoent;
|
||||||
|
for (i = 1; i <= n; i++) {
|
||||||
|
endp[- i] = colonp[n - i];
|
||||||
|
colonp[n - i] = 0;
|
||||||
|
}
|
||||||
|
tp = endp;
|
||||||
|
}
|
||||||
|
if (tp != endp)
|
||||||
|
goto enoent;
|
||||||
|
|
||||||
|
bytes = (bits + 7) / 8;
|
||||||
|
if (bytes > size)
|
||||||
|
goto emsgsize;
|
||||||
|
memcpy(dst, tmp, bytes);
|
||||||
|
return (bits);
|
||||||
|
|
||||||
|
enoent:
|
||||||
|
errno = ENOENT;
|
||||||
|
return (-1);
|
||||||
|
|
||||||
|
emsgsize:
|
||||||
|
errno = EMSGSIZE;
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* int
|
||||||
|
* inet_net_pton(af, src, dst, size)
|
||||||
|
* convert network number from presentation to network format.
|
||||||
|
* accepts hex octets, hex strings, decimal octets, and /CIDR.
|
||||||
|
* "size" is in bytes and describes "dst".
|
||||||
|
* return:
|
||||||
|
* number of bits, either imputed classfully or specified with /CIDR,
|
||||||
|
* or -1 if some failure occurred (check errno). ENOENT means it was
|
||||||
|
* not a valid network specification.
|
||||||
|
* author:
|
||||||
|
* Paul Vixie (ISC), June 1996
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
ares_inet_net_pton(int af, const char *src, void *dst, size_t size)
|
||||||
|
{
|
||||||
|
switch (af) {
|
||||||
|
case AF_INET:
|
||||||
|
return (inet_net_pton_ipv4(src, dst, size));
|
||||||
|
case AF_INET6:
|
||||||
|
return (inet_net_pton_ipv6(src, dst, size));
|
||||||
|
default:
|
||||||
|
errno = EAFNOSUPPORT;
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(HAVE_INET_PTON) || !defined(HAVE_INET_PTON_IPV6)
|
||||||
|
int ares_inet_pton(int af, const char *src, void *dst)
|
||||||
|
{
|
||||||
|
int size, result;
|
||||||
|
|
||||||
|
if (af == AF_INET)
|
||||||
|
size = sizeof(struct in_addr);
|
||||||
|
else if (af == AF_INET6)
|
||||||
|
size = sizeof(struct in6_addr);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
errno = EAFNOSUPPORT;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
result = ares_inet_net_pton(af, src, dst, size);
|
||||||
|
if (result == -1 && errno == ENOENT)
|
||||||
|
return 0;
|
||||||
|
return (result > -1 ? 1 : -1);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
31
ares/inet_net_pton.h
Normal file
31
ares/inet_net_pton.h
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef INET_NET_PTON_H
|
||||||
|
#define INET_NET_PTON_H
|
||||||
|
|
||||||
|
#if defined(HAVE_INET_PTON) && defined(HAVE_INET_PTON_IPV6)
|
||||||
|
#define ares_inet_pton(x,y,z) inet_pton(x,y,z)
|
||||||
|
#else
|
||||||
|
int ares_inet_pton(int af, const char *src, void *dst);
|
||||||
|
#endif
|
||||||
|
#if defined(HAVE_INET_NET_PTON) && defined(HAVE_INET_NET_PTON_IPV6)
|
||||||
|
#define ares_inet_net_pton(w,x,y,z) inet_net_pton(w,x,y,z)
|
||||||
|
#else
|
||||||
|
int ares_inet_net_pton(int af, const char *src, void *dst, size_t size);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* INET_NET_PTON_H */
|
||||||
220
ares/inet_ntop.c
Normal file
220
ares/inet_ntop.c
Normal file
@@ -0,0 +1,220 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
|
/* Copyright (c) 1996 by Internet Software Consortium.
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and distribute this software for any
|
||||||
|
* purpose with or without fee is hereby granted, provided that the above
|
||||||
|
* copyright notice and this permission notice appear in all copies.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
|
||||||
|
* ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
|
||||||
|
* OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
|
||||||
|
* CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
|
||||||
|
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
|
||||||
|
* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
|
||||||
|
* ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
|
||||||
|
* SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "setup.h"
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
#if defined(WIN32) && !defined(WATT32)
|
||||||
|
#include "nameser.h"
|
||||||
|
#else
|
||||||
|
#ifdef HAVE_SYS_SOCKET_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>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_ARPA_INET_H
|
||||||
|
#include <arpa/inet.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <ctype.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#include "ares_ipv6.h"
|
||||||
|
#include "inet_ntop.h"
|
||||||
|
|
||||||
|
|
||||||
|
#if !defined(HAVE_INET_NTOP) || !defined(HAVE_INET_NTOP_IPV6)
|
||||||
|
|
||||||
|
#ifdef SPRINTF_CHAR
|
||||||
|
# define SPRINTF(x) strlen(sprintf/**/x)
|
||||||
|
#else
|
||||||
|
# define SPRINTF(x) ((size_t)sprintf x)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* WARNING: Don't even consider trying to compile this on a system where
|
||||||
|
* sizeof(int) < 4. sizeof(int) > 4 is fine; all the world's not a VAX.
|
||||||
|
*/
|
||||||
|
|
||||||
|
static const char *inet_ntop4(const unsigned char *src, char *dst, size_t size);
|
||||||
|
static const char *inet_ntop6(const unsigned char *src, char *dst, size_t size);
|
||||||
|
|
||||||
|
/* char *
|
||||||
|
* inet_ntop(af, src, dst, size)
|
||||||
|
* convert a network format address to presentation format.
|
||||||
|
* return:
|
||||||
|
* pointer to presentation format address (`dst'), or NULL (see errno).
|
||||||
|
* author:
|
||||||
|
* Paul Vixie, 1996.
|
||||||
|
*/
|
||||||
|
const char *
|
||||||
|
ares_inet_ntop(int af, const void *src, char *dst, size_t size)
|
||||||
|
{
|
||||||
|
switch (af)
|
||||||
|
{
|
||||||
|
case AF_INET:
|
||||||
|
return (inet_ntop4(src, dst, size));
|
||||||
|
case AF_INET6:
|
||||||
|
return (inet_ntop6(src, dst, size));
|
||||||
|
default:
|
||||||
|
errno = EAFNOSUPPORT;
|
||||||
|
return (NULL);
|
||||||
|
}
|
||||||
|
/* NOTREACHED */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* const char *
|
||||||
|
* inet_ntop4(src, dst, size)
|
||||||
|
* format an IPv4 address, more or less like inet_ntoa()
|
||||||
|
* return:
|
||||||
|
* `dst' (as a const)
|
||||||
|
* notes:
|
||||||
|
* (1) uses no statics
|
||||||
|
* (2) takes a unsigned char* not an in_addr as input
|
||||||
|
* author:
|
||||||
|
* Paul Vixie, 1996.
|
||||||
|
*/
|
||||||
|
static const char *
|
||||||
|
inet_ntop4(const unsigned char *src, char *dst, size_t size)
|
||||||
|
{
|
||||||
|
static const char fmt[] = "%u.%u.%u.%u";
|
||||||
|
char tmp[sizeof "255.255.255.255"];
|
||||||
|
|
||||||
|
if (SPRINTF((tmp, fmt, src[0], src[1], src[2], src[3])) > size)
|
||||||
|
{
|
||||||
|
errno = ENOSPC;
|
||||||
|
return (NULL);
|
||||||
|
}
|
||||||
|
strcpy(dst, tmp);
|
||||||
|
return (dst);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* const char *
|
||||||
|
* inet_ntop6(src, dst, size)
|
||||||
|
* convert IPv6 binary address into presentation (printable) format
|
||||||
|
* author:
|
||||||
|
* Paul Vixie, 1996.
|
||||||
|
*/
|
||||||
|
static const char *
|
||||||
|
inet_ntop6(const unsigned char *src, char *dst, size_t size)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* Note that int32_t and int16_t need only be "at least" large enough
|
||||||
|
* to contain a value of the specified size. On some systems, like
|
||||||
|
* Crays, there is no such thing as an integer variable with 16 bits.
|
||||||
|
* Keep this in mind if you think this function should have been coded
|
||||||
|
* to use pointer overlays. All the world's not a VAX.
|
||||||
|
*/
|
||||||
|
char tmp[sizeof "ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255"], *tp;
|
||||||
|
struct { int base, len; } best = { 0,0 }, cur = { 0,0 };
|
||||||
|
unsigned int words[NS_IN6ADDRSZ / NS_INT16SZ];
|
||||||
|
int i;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Preprocess:
|
||||||
|
* Copy the input (bytewise) array into a wordwise array.
|
||||||
|
* Find the longest run of 0x00's in src[] for :: shorthanding.
|
||||||
|
*/
|
||||||
|
memset(words, '\0', sizeof words);
|
||||||
|
for (i = 0; i < NS_IN6ADDRSZ; i++)
|
||||||
|
words[i / 2] |= (src[i] << ((1 - (i % 2)) << 3));
|
||||||
|
best.base = -1;
|
||||||
|
cur.base = -1;
|
||||||
|
for (i = 0; i < (NS_IN6ADDRSZ / NS_INT16SZ); i++)
|
||||||
|
{
|
||||||
|
if (words[i] == 0)
|
||||||
|
{
|
||||||
|
if (cur.base == -1)
|
||||||
|
cur.base = i, cur.len = 1;
|
||||||
|
else
|
||||||
|
cur.len++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (cur.base != -1)
|
||||||
|
{
|
||||||
|
if (best.base == -1 || cur.len > best.len)
|
||||||
|
best = cur;
|
||||||
|
cur.base = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (cur.base != -1)
|
||||||
|
{
|
||||||
|
if (best.base == -1 || cur.len > best.len)
|
||||||
|
best = cur;
|
||||||
|
}
|
||||||
|
if (best.base != -1 && best.len < 2)
|
||||||
|
best.base = -1;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Format the result.
|
||||||
|
*/
|
||||||
|
tp = tmp;
|
||||||
|
for (i = 0; i < (NS_IN6ADDRSZ / NS_INT16SZ); i++)
|
||||||
|
{
|
||||||
|
/* Are we inside the best run of 0x00's? */
|
||||||
|
if (best.base != -1 && i >= best.base &&
|
||||||
|
i < (best.base + best.len))
|
||||||
|
{
|
||||||
|
if (i == best.base)
|
||||||
|
*tp++ = ':';
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
/* Are we following an initial run of 0x00s or any real hex? */
|
||||||
|
if (i != 0)
|
||||||
|
*tp++ = ':';
|
||||||
|
/* Is this address an encapsulated IPv4? */
|
||||||
|
if (i == 6 && best.base == 0 &&
|
||||||
|
(best.len == 6 || (best.len == 5 && words[5] == 0xffff)))
|
||||||
|
{
|
||||||
|
if (!inet_ntop4(src+12, tp, sizeof tmp - (tp - tmp)))
|
||||||
|
return (NULL);
|
||||||
|
tp += strlen(tp);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
tp += SPRINTF((tp, "%x", words[i]));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Was it a trailing run of 0x00's? */
|
||||||
|
if (best.base != -1 && (best.base + best.len) == (NS_IN6ADDRSZ / NS_INT16SZ))
|
||||||
|
*tp++ = ':';
|
||||||
|
*tp++ = '\0';
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Check for overflow, copy, and we're done.
|
||||||
|
*/
|
||||||
|
if ((size_t)(tp - tmp) > size)
|
||||||
|
{
|
||||||
|
errno = ENOSPC;
|
||||||
|
return (NULL);
|
||||||
|
}
|
||||||
|
strcpy(dst, tmp);
|
||||||
|
return (dst);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
26
ares/inet_ntop.h
Normal file
26
ares/inet_ntop.h
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef INET_NTOP_H
|
||||||
|
#define INET_NTOP_H
|
||||||
|
|
||||||
|
#ifdef HAVE_INET_NTOP
|
||||||
|
#define ares_inet_ntop(w,x,y,z) inet_ntop(w,x,y,z)
|
||||||
|
#else
|
||||||
|
const char *ares_inet_ntop(int af, const void *src, char *dst, size_t size);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* INET_NET_NTOP_H */
|
||||||
114
ares/maketgz
114
ares/maketgz
@@ -2,8 +2,6 @@
|
|||||||
|
|
||||||
$version = $ARGV[0];
|
$version = $ARGV[0];
|
||||||
|
|
||||||
$name="c-ares";
|
|
||||||
|
|
||||||
if($version eq "") {
|
if($version eq "") {
|
||||||
print "Enter version number!\n";
|
print "Enter version number!\n";
|
||||||
exit;
|
exit;
|
||||||
@@ -14,87 +12,47 @@ if(!-f "ares.h") {
|
|||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
my ($major, $minor, $patch)=split(/\./, $version);
|
||||||
|
|
||||||
|
$major += 0;
|
||||||
|
$minor += 0;
|
||||||
|
$patch += 0;
|
||||||
|
|
||||||
|
open(VER, "<ares_version.h") ||
|
||||||
|
die "can't open ares_version.h";
|
||||||
|
open(NEWV, ">ares_version.h.dist");
|
||||||
|
while(<VER>) {
|
||||||
|
$_ =~ s/^\#define ARES_VERSION_MAJOR .*/\#define ARES_VERSION_MAJOR $major/;
|
||||||
|
$_ =~ s/^\#define ARES_VERSION_MINOR .*/\#define ARES_VERSION_MINOR $minor/;
|
||||||
|
$_ =~ s/^\#define ARES_VERSION_PATCH .*/\#define ARES_VERSION_PATCH $patch/;
|
||||||
|
$_ =~ s/^\#define ARES_VERSION_STR .*/\#define ARES_VERSION_STR \"$version\"/;
|
||||||
|
|
||||||
|
print NEWV $_;
|
||||||
|
}
|
||||||
|
close(VER);
|
||||||
|
close(NEWV);
|
||||||
|
print "ares_version.h.dist created\n";
|
||||||
|
|
||||||
if(!-f "configure") {
|
if(!-f "configure") {
|
||||||
`autoconf`;
|
print "running buildconf\n";
|
||||||
|
`./buildconf`;
|
||||||
}
|
}
|
||||||
|
print "adding $version in the configure.ac file\n";
|
||||||
|
`sed -e 's/AM_INIT_AUTOMAKE(c-ares, CVS)/AM_INIT_AUTOMAKE(c-ares, $version)/' < configure.ac > configure.ac-rel`;
|
||||||
|
|
||||||
@files=`find . -name FILES`;
|
# now make a new configure script with this
|
||||||
|
print "makes a new configure script\n";
|
||||||
|
`autoconf configure.ac-rel >configure`;
|
||||||
|
|
||||||
my @entries;
|
# now run this new configure to get a fine makefile
|
||||||
|
print "running configure\n";
|
||||||
|
`./configure`;
|
||||||
|
|
||||||
sub dirpart {
|
# now make the actual tarball
|
||||||
my ($file)=@_;
|
print "running make dist\n";
|
||||||
my @p=split("/", $file);
|
`make dist`;
|
||||||
$p[$#p]=""; # blank the last one
|
|
||||||
my $dir=join("/", @p);
|
|
||||||
|
|
||||||
$dir =~ s/^\.\///; # cut off ./ beginnings
|
print "removing temporary configure.ac file\n";
|
||||||
|
`rm configure.ac-rel`;
|
||||||
$dir =~ s/\/$//; # off / trailers
|
|
||||||
|
|
||||||
if(!$dir) {
|
|
||||||
$dir = ".";
|
|
||||||
}
|
|
||||||
|
|
||||||
return $dir;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub add {
|
|
||||||
my ($file)=@_;
|
|
||||||
|
|
||||||
my $dir=dirpart($file);
|
|
||||||
|
|
||||||
open(FILE, "<$file");
|
|
||||||
while(<FILE>) {
|
|
||||||
if($_ =~ /^ *\#/) {
|
|
||||||
next;
|
|
||||||
}
|
|
||||||
chomp;
|
|
||||||
push @entries, "$dir/$_";
|
|
||||||
}
|
|
||||||
close(FILE);
|
|
||||||
}
|
|
||||||
|
|
||||||
for(@files) {
|
|
||||||
chomp;
|
|
||||||
add($_);
|
|
||||||
}
|
|
||||||
|
|
||||||
sub mkalldir {
|
|
||||||
my ($dir) = @_;
|
|
||||||
|
|
||||||
my @parts = split("/", $dir);
|
|
||||||
|
|
||||||
#print "IN: $dir\n";
|
|
||||||
|
|
||||||
my $sub="";
|
|
||||||
for(@parts) {
|
|
||||||
#print "PART: $_\n";
|
|
||||||
|
|
||||||
$sub .= "$_";
|
|
||||||
if($_ eq "") {
|
|
||||||
next;
|
|
||||||
}
|
|
||||||
mkdir($sub, 0777);
|
|
||||||
#print "make $sub\n";
|
|
||||||
$sub .= "/";
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
for(@entries) {
|
|
||||||
my $dir = dirpart("$name-$version/$_");
|
|
||||||
# print "Create $dir\n";
|
|
||||||
mkalldir($dir);
|
|
||||||
# print "Copy $_ to $dir\n";
|
|
||||||
`cp -p $_ $dir`;
|
|
||||||
}
|
|
||||||
|
|
||||||
# make a tarball
|
|
||||||
`tar -cf $name-$version.tar $name-$version`;
|
|
||||||
# gzip the tarball
|
|
||||||
`gzip -9 $name-$version.tar`;
|
|
||||||
# remove the dir
|
|
||||||
`rm -rf $name-$version`;
|
|
||||||
|
|
||||||
print "NOTE: now cvs tag this release!\n";
|
print "NOTE: now cvs tag this release!\n";
|
||||||
|
|||||||
@@ -1,16 +1,25 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
#ifndef ARES_NAMESER_H
|
#ifndef ARES_NAMESER_H
|
||||||
#define ARES_NAMESER_H
|
#define ARES_NAMESER_H
|
||||||
|
|
||||||
/* Windows-only header file provided by liren@vivisimo.com to make his Windows
|
/* Windows-only header file provided by liren@vivisimo.com to make his Windows
|
||||||
port build */
|
port build */
|
||||||
|
|
||||||
|
#ifndef NETWARE
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#include <process.h> /* for the _getpid() proto */
|
#include <process.h> /* for the _getpid() proto */
|
||||||
|
#endif /* !NETWARE */
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
#ifndef NETWARE
|
||||||
|
|
||||||
#define MAXHOSTNAMELEN 256
|
#define MAXHOSTNAMELEN 256
|
||||||
|
|
||||||
#define EINPROGRESS WSAEINPROGRESS
|
#define EINPROGRESS WSAEINPROGRESS
|
||||||
|
#define EWOULDBLOCK WSAEWOULDBLOCK
|
||||||
|
#define EMSGSIZE WSAEMSGSIZE
|
||||||
|
#define EAFNOSUPPORT WSAEAFNOSUPPORT
|
||||||
|
|
||||||
/* Structure for scatter/gather I/O. */
|
/* Structure for scatter/gather I/O. */
|
||||||
struct iovec
|
struct iovec
|
||||||
@@ -21,13 +30,20 @@ struct iovec
|
|||||||
|
|
||||||
#define getpid() _getpid()
|
#define getpid() _getpid()
|
||||||
|
|
||||||
|
int ares_writev (SOCKET s, const struct iovec *vector, size_t count);
|
||||||
|
#define writev(s,vect,count) ares_writev(s,vect,count)
|
||||||
|
|
||||||
struct timezone { int dummy; };
|
struct timezone { int dummy; };
|
||||||
|
|
||||||
int ares_gettimeofday(struct timeval *tv, struct timezone *tz);
|
int ares_gettimeofday(struct timeval *tv, struct timezone *tz);
|
||||||
#define gettimeofday(tv,tz) ares_gettimeofday(tv,tz)
|
#define gettimeofday(tv,tz) ares_gettimeofday(tv,tz)
|
||||||
|
|
||||||
#define NS_CMPRSFLGS 0xc0
|
#endif /* !NETWARE */
|
||||||
|
|
||||||
|
#define NS_CMPRSFLGS 0xc0
|
||||||
|
#define NS_IN6ADDRSZ 16
|
||||||
|
#define NS_INT16SZ 2
|
||||||
|
#define NS_INADDRSZ 4
|
||||||
|
|
||||||
/* Flag bits indicating name compression. */
|
/* Flag bits indicating name compression. */
|
||||||
#define INDIR_MASK NS_CMPRSFLGS
|
#define INDIR_MASK NS_CMPRSFLGS
|
||||||
@@ -211,16 +227,4 @@ typedef enum __ns_rcode {
|
|||||||
#define T_MAILA ns_t_maila
|
#define T_MAILA ns_t_maila
|
||||||
#define T_ANY ns_t_any
|
#define T_ANY ns_t_any
|
||||||
|
|
||||||
#ifndef __MINGW32__
|
|
||||||
/* protos for the functions we provide in windows_port.c */
|
|
||||||
int ares_strncasecmp(const char *s1, const char *s2, size_t n);
|
|
||||||
int ares_strcasecmp(const char *s1, const char *s2);
|
|
||||||
|
|
||||||
/* use this define magic to prevent us from adding symbol names to the library
|
|
||||||
that is a high-risk to collide with another libraries' attempts to do the
|
|
||||||
same */
|
|
||||||
#define strncasecmp(a,b,c) ares_strncasecmp(a,b,c)
|
|
||||||
#define strcasecmp(a,b) ares_strcasecmp(a,b)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* ARES_NAMESER_H */
|
#endif /* ARES_NAMESER_H */
|
||||||
|
|||||||
148
ares/setup.h
Normal file
148
ares/setup.h
Normal file
@@ -0,0 +1,148 @@
|
|||||||
|
#ifndef __ARES_SETUP_H
|
||||||
|
#define __ARES_SETUP_H
|
||||||
|
|
||||||
|
/* Copyright (C) 2004 - 2005 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if !defined(WIN32) && defined(__WIN32__)
|
||||||
|
/* Borland fix */
|
||||||
|
#define WIN32
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(WIN32) && defined(_WIN32)
|
||||||
|
/* VS2005 on x64 fix */
|
||||||
|
#define WIN32
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Include configuration script results or hand-crafted
|
||||||
|
* configuration file for platforms which lack config tool.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
#include "config.h"
|
||||||
|
#else
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
#include "config-win32.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* HAVE_CONFIG_H */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Include header files for windows builds before redefining anything.
|
||||||
|
* Use this preproessor block only to include or exclude windows.h,
|
||||||
|
* winsock2.h, ws2tcpip.h or winsock.h. Any other windows thing belongs
|
||||||
|
* to any other further and independant block.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef HAVE_WINDOWS_H
|
||||||
|
# ifndef WIN32_LEAN_AND_MEAN
|
||||||
|
# define WIN32_LEAN_AND_MEAN
|
||||||
|
# endif
|
||||||
|
# include <windows.h>
|
||||||
|
# ifdef HAVE_WINSOCK2_H
|
||||||
|
# include <winsock2.h>
|
||||||
|
# ifdef HAVE_WS2TCPIP_H
|
||||||
|
# include <ws2tcpip.h>
|
||||||
|
# endif
|
||||||
|
# else
|
||||||
|
# ifdef HAVE_WINSOCK_H
|
||||||
|
# include <winsock.h>
|
||||||
|
# endif
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Work-arounds for systems without configure support
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef HAVE_CONFIG_H
|
||||||
|
|
||||||
|
#if defined(__DJGPP__) || (defined(__WATCOMC__) && (__WATCOMC__ >= 1240)) || \
|
||||||
|
defined(__POCC__)
|
||||||
|
#else
|
||||||
|
#define ssize_t int
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef HAVE_WS2TCPIP_H
|
||||||
|
#define socklen_t int
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* HAVE_CONFIG_H */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Recent autoconf versions define these symbols in config.h. We don't
|
||||||
|
* want them (since they collide with the libcurl ones when we build
|
||||||
|
* --enable-debug) so we undef them again here.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#undef PACKAGE_STRING
|
||||||
|
#undef PACKAGE_TARNAME
|
||||||
|
#undef PACKAGE_VERSION
|
||||||
|
#undef PACKAGE_BUGREPORT
|
||||||
|
#undef PACKAGE_NAME
|
||||||
|
#undef VERSION
|
||||||
|
#undef PACKAGE
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Typedef our socket type
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined(WIN32) && !defined(WATT32)
|
||||||
|
typedef SOCKET ares_socket_t;
|
||||||
|
#define ARES_SOCKET_BAD INVALID_SOCKET
|
||||||
|
#else
|
||||||
|
typedef int ares_socket_t;
|
||||||
|
#define ARES_SOCKET_BAD -1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Assume a few thing unless they're set by configure
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if !defined(HAVE_SYS_TIME_H) && !defined(_MSC_VER)
|
||||||
|
#define HAVE_SYS_TIME_H
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(HAVE_UNISTD_H) && !defined(_MSC_VER)
|
||||||
|
#define HAVE_UNISTD_H 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(HAVE_SYS_UIO_H) && !defined(WIN32) && !defined(MSDOS)
|
||||||
|
#define HAVE_SYS_UIO_H
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if (defined(WIN32) || defined(WATT32)) && \
|
||||||
|
!(defined(__MINGW32__) || defined(NETWARE) || defined(__DJGPP__))
|
||||||
|
/* protos for the functions we provide in windows_port.c */
|
||||||
|
int ares_strncasecmp(const char *s1, const char *s2, int n);
|
||||||
|
int ares_strcasecmp(const char *s1, const char *s2);
|
||||||
|
|
||||||
|
/* use this define magic to prevent us from adding symbol names to the library
|
||||||
|
that is a high-risk to collide with another libraries' attempts to do the
|
||||||
|
same */
|
||||||
|
#define strncasecmp(a,b,c) ares_strncasecmp(a,b,c)
|
||||||
|
#define strcasecmp(a,b) ares_strcasecmp(a,b)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* IPv6 compatibility */
|
||||||
|
#if !defined(HAVE_AF_INET6)
|
||||||
|
#if defined(HAVE_PF_INET6)
|
||||||
|
#define AF_INET6 PF_INET6
|
||||||
|
#else
|
||||||
|
#define AF_INET6 AF_MAX+1
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* __ARES_SETUP_H */
|
||||||
@@ -1,213 +0,0 @@
|
|||||||
# Microsoft Developer Studio Generated NMAKE File, Based on adig.dsp
|
|
||||||
!IF "$(CFG)" == ""
|
|
||||||
CFG=adig - Win32 Debug
|
|
||||||
!MESSAGE No configuration specified. Defaulting to adig - Win32 Debug.
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
!IF "$(CFG)" != "adig - Win32 Release" && "$(CFG)" != "adig - Win32 Debug"
|
|
||||||
!MESSAGE Invalid configuration "$(CFG)" specified.
|
|
||||||
!MESSAGE You can specify a configuration when running NMAKE
|
|
||||||
!MESSAGE by defining the macro CFG on the command line. For example:
|
|
||||||
!MESSAGE
|
|
||||||
!MESSAGE NMAKE /f "adig.mak" CFG="adig - Win32 Debug"
|
|
||||||
!MESSAGE
|
|
||||||
!MESSAGE Possible choices for configuration are:
|
|
||||||
!MESSAGE
|
|
||||||
!MESSAGE "adig - Win32 Release" (based on "Win32 (x86) Console Application")
|
|
||||||
!MESSAGE "adig - Win32 Debug" (based on "Win32 (x86) Console Application")
|
|
||||||
!MESSAGE
|
|
||||||
!ERROR An invalid configuration is specified.
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
!IF "$(OS)" == "Windows_NT"
|
|
||||||
NULL=
|
|
||||||
!ELSE
|
|
||||||
NULL=nul
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
CPP=cl.exe
|
|
||||||
RSC=rc.exe
|
|
||||||
|
|
||||||
!IF "$(CFG)" == "adig - Win32 Release"
|
|
||||||
|
|
||||||
OUTDIR=.\Release
|
|
||||||
INTDIR=.\Release
|
|
||||||
# Begin Custom Macros
|
|
||||||
OutDir=.\Release
|
|
||||||
# End Custom Macros
|
|
||||||
|
|
||||||
!IF "$(RECURSE)" == "0"
|
|
||||||
|
|
||||||
ALL : "$(OUTDIR)\adig.exe"
|
|
||||||
|
|
||||||
!ELSE
|
|
||||||
|
|
||||||
ALL : "areslib - Win32 Release" "$(OUTDIR)\adig.exe"
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
!IF "$(RECURSE)" == "1"
|
|
||||||
CLEAN :"areslib - Win32 ReleaseCLEAN"
|
|
||||||
!ELSE
|
|
||||||
CLEAN :
|
|
||||||
!ENDIF
|
|
||||||
-@erase "$(INTDIR)\adig.obj"
|
|
||||||
-@erase "$(INTDIR)\getopt.obj"
|
|
||||||
-@erase "$(INTDIR)\vc60.idb"
|
|
||||||
-@erase "$(OUTDIR)\adig.exe"
|
|
||||||
|
|
||||||
"$(OUTDIR)" :
|
|
||||||
if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
|
|
||||||
|
|
||||||
CPP_PROJ=/nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /Fp"$(INTDIR)\adig.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
|
|
||||||
BSC32=bscmake.exe
|
|
||||||
BSC32_FLAGS=/nologo /o"$(OUTDIR)\adig.bsc"
|
|
||||||
BSC32_SBRS= \
|
|
||||||
|
|
||||||
LINK32=link.exe
|
|
||||||
LINK32_FLAGS=wsock32.lib areslib.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:no /pdb:"$(OUTDIR)\adig.pdb" /machine:I386 /out:"$(OUTDIR)\adig.exe" /libpath:"..\areslib\Release"
|
|
||||||
LINK32_OBJS= \
|
|
||||||
"$(INTDIR)\adig.obj" \
|
|
||||||
"$(INTDIR)\getopt.obj" \
|
|
||||||
"..\areslib\Release\areslib.lib"
|
|
||||||
|
|
||||||
"$(OUTDIR)\adig.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
|
|
||||||
$(LINK32) @<<
|
|
||||||
$(LINK32_FLAGS) $(LINK32_OBJS)
|
|
||||||
<<
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "adig - Win32 Debug"
|
|
||||||
|
|
||||||
OUTDIR=.\Debug
|
|
||||||
INTDIR=.\Debug
|
|
||||||
# Begin Custom Macros
|
|
||||||
OutDir=.\Debug
|
|
||||||
# End Custom Macros
|
|
||||||
|
|
||||||
!IF "$(RECURSE)" == "0"
|
|
||||||
|
|
||||||
ALL : "$(OUTDIR)\adig.exe"
|
|
||||||
|
|
||||||
!ELSE
|
|
||||||
|
|
||||||
ALL : "areslib - Win32 Debug" "$(OUTDIR)\adig.exe"
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
!IF "$(RECURSE)" == "1"
|
|
||||||
CLEAN :"areslib - Win32 DebugCLEAN"
|
|
||||||
!ELSE
|
|
||||||
CLEAN :
|
|
||||||
!ENDIF
|
|
||||||
-@erase "$(INTDIR)\adig.obj"
|
|
||||||
-@erase "$(INTDIR)\getopt.obj"
|
|
||||||
-@erase "$(INTDIR)\vc60.idb"
|
|
||||||
-@erase "$(INTDIR)\vc60.pdb"
|
|
||||||
-@erase "$(OUTDIR)\adig.exe"
|
|
||||||
-@erase "$(OUTDIR)\adig.ilk"
|
|
||||||
-@erase "$(OUTDIR)\adig.pdb"
|
|
||||||
|
|
||||||
"$(OUTDIR)" :
|
|
||||||
if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
|
|
||||||
|
|
||||||
CPP_PROJ=/nologo /MLd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /Fp"$(INTDIR)\adig.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c
|
|
||||||
BSC32=bscmake.exe
|
|
||||||
BSC32_FLAGS=/nologo /o"$(OUTDIR)\adig.bsc"
|
|
||||||
BSC32_SBRS= \
|
|
||||||
|
|
||||||
LINK32=link.exe
|
|
||||||
LINK32_FLAGS=wsock32.lib areslib.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:yes /pdb:"$(OUTDIR)\adig.pdb" /debug /machine:I386 /out:"$(OUTDIR)\adig.exe" /pdbtype:sept /libpath:"..\areslib\Debug"
|
|
||||||
LINK32_OBJS= \
|
|
||||||
"$(INTDIR)\adig.obj" \
|
|
||||||
"$(INTDIR)\getopt.obj" \
|
|
||||||
"..\areslib\Debug\areslib.lib"
|
|
||||||
|
|
||||||
"$(OUTDIR)\adig.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
|
|
||||||
$(LINK32) @<<
|
|
||||||
$(LINK32_FLAGS) $(LINK32_OBJS)
|
|
||||||
<<
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
.c{$(INTDIR)}.obj::
|
|
||||||
$(CPP) @<<
|
|
||||||
$(CPP_PROJ) $<
|
|
||||||
<<
|
|
||||||
|
|
||||||
.cpp{$(INTDIR)}.obj::
|
|
||||||
$(CPP) @<<
|
|
||||||
$(CPP_PROJ) $<
|
|
||||||
<<
|
|
||||||
|
|
||||||
.cxx{$(INTDIR)}.obj::
|
|
||||||
$(CPP) @<<
|
|
||||||
$(CPP_PROJ) $<
|
|
||||||
<<
|
|
||||||
|
|
||||||
.c{$(INTDIR)}.sbr::
|
|
||||||
$(CPP) @<<
|
|
||||||
$(CPP_PROJ) $<
|
|
||||||
<<
|
|
||||||
|
|
||||||
.cpp{$(INTDIR)}.sbr::
|
|
||||||
$(CPP) @<<
|
|
||||||
$(CPP_PROJ) $<
|
|
||||||
<<
|
|
||||||
|
|
||||||
.cxx{$(INTDIR)}.sbr::
|
|
||||||
$(CPP) @<<
|
|
||||||
$(CPP_PROJ) $<
|
|
||||||
<<
|
|
||||||
|
|
||||||
|
|
||||||
!IF "$(NO_EXTERNAL_DEPS)" != "1"
|
|
||||||
!IF EXISTS("adig.dep")
|
|
||||||
!INCLUDE "adig.dep"
|
|
||||||
!ELSE
|
|
||||||
!MESSAGE Warning: cannot find "adig.dep"
|
|
||||||
!ENDIF
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
|
|
||||||
!IF "$(CFG)" == "adig - Win32 Release" || "$(CFG)" == "adig - Win32 Debug"
|
|
||||||
SOURCE=..\..\adig.c
|
|
||||||
|
|
||||||
"$(INTDIR)\adig.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
SOURCE=..\..\getopt.c
|
|
||||||
|
|
||||||
"$(INTDIR)\getopt.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
!IF "$(CFG)" == "adig - Win32 Release"
|
|
||||||
|
|
||||||
"areslib - Win32 Release" :
|
|
||||||
cd "\ARES-1.1.1\vc\areslib"
|
|
||||||
$(MAKE) /$(MAKEFLAGS) /F ".\areslib.mak" CFG="areslib - Win32 Release"
|
|
||||||
cd "..\adig"
|
|
||||||
|
|
||||||
"areslib - Win32 ReleaseCLEAN" :
|
|
||||||
cd "\ARES-1.1.1\vc\areslib"
|
|
||||||
$(MAKE) /$(MAKEFLAGS) /F ".\areslib.mak" CFG="areslib - Win32 Release" RECURSE=1 CLEAN
|
|
||||||
cd "..\adig"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "adig - Win32 Debug"
|
|
||||||
|
|
||||||
"areslib - Win32 Debug" :
|
|
||||||
cd "\ARES-1.1.1\vc\areslib"
|
|
||||||
$(MAKE) /$(MAKEFLAGS) /F ".\areslib.mak" CFG="areslib - Win32 Debug"
|
|
||||||
cd "..\adig"
|
|
||||||
|
|
||||||
"areslib - Win32 DebugCLEAN" :
|
|
||||||
cd "\ARES-1.1.1\vc\areslib"
|
|
||||||
$(MAKE) /$(MAKEFLAGS) /F ".\areslib.mak" CFG="areslib - Win32 Debug" RECURSE=1 CLEAN
|
|
||||||
cd "..\adig"
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
@@ -1,77 +0,0 @@
|
|||||||
<html>
|
|
||||||
<body>
|
|
||||||
<pre>
|
|
||||||
<h1>Build Log</h1>
|
|
||||||
<h3>
|
|
||||||
--------------------Configuration: areslib - Win32 Release--------------------
|
|
||||||
</h3>
|
|
||||||
<h3>Command Lines</h3>
|
|
||||||
Creating temporary file "C:\DOCUME~1\liren\LOCALS~1\Temp\RSP615A.tmp" with contents
|
|
||||||
[
|
|
||||||
/nologo /MD /W3 /GX /O2 /I "..\.." /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /Fp"Release/areslib.pch" /YX /Fo"Release/" /Fd"Release/" /FD /c
|
|
||||||
"Z:\ARES-1.1.1\ares_gethostbyname.c"
|
|
||||||
"Z:\ARES-1.1.1\ares_init.c"
|
|
||||||
]
|
|
||||||
Creating command line "cl.exe @C:\DOCUME~1\liren\LOCALS~1\Temp\RSP615A.tmp"
|
|
||||||
Creating temporary file "C:\DOCUME~1\liren\LOCALS~1\Temp\RSP615B.tmp" with contents
|
|
||||||
[
|
|
||||||
/nologo /out:"Release\areslib.lib"
|
|
||||||
".\Release\ares__close_sockets.obj"
|
|
||||||
".\Release\ares__get_hostent.obj"
|
|
||||||
".\Release\ares__read_line.obj"
|
|
||||||
".\Release\ares_destroy.obj"
|
|
||||||
".\Release\ares_expand_name.obj"
|
|
||||||
".\Release\ares_fds.obj"
|
|
||||||
".\Release\ares_free_errmem.obj"
|
|
||||||
".\Release\ares_free_hostent.obj"
|
|
||||||
".\Release\ares_free_string.obj"
|
|
||||||
".\Release\ares_gethostbyaddr.obj"
|
|
||||||
".\Release\ares_gethostbyname.obj"
|
|
||||||
".\Release\ares_init.obj"
|
|
||||||
".\Release\ares_mkquery.obj"
|
|
||||||
".\Release\ares_parse_a_reply.obj"
|
|
||||||
".\Release\ares_parse_ptr_reply.obj"
|
|
||||||
".\Release\ares_process.obj"
|
|
||||||
".\Release\ares_query.obj"
|
|
||||||
".\Release\ares_search.obj"
|
|
||||||
".\Release\ares_send.obj"
|
|
||||||
".\Release\ares_strerror.obj"
|
|
||||||
".\Release\ares_timeout.obj"
|
|
||||||
".\Release\windows_port.obj"
|
|
||||||
]
|
|
||||||
Creating command line "link.exe -lib @C:\DOCUME~1\liren\LOCALS~1\Temp\RSP615B.tmp"
|
|
||||||
<h3>Output Window</h3>
|
|
||||||
Compiling...
|
|
||||||
ares_gethostbyname.c
|
|
||||||
Z:\ARES-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition
|
|
||||||
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR'
|
|
||||||
ares_init.c
|
|
||||||
Z:\ARES-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition
|
|
||||||
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR'
|
|
||||||
Z:\ARES-1.1.1\ares_init.c(141) : warning C4013: '_getpid' undefined; assuming extern returning int
|
|
||||||
Z:\ARES-1.1.1\ares_init.c(236) : warning C4101: 'p' : unreferenced local variable
|
|
||||||
Z:\ARES-1.1.1\ares_init.c(237) : warning C4101: 'linesize' : unreferenced local variable
|
|
||||||
Z:\ARES-1.1.1\ares_init.c(235) : warning C4101: 'fp' : unreferenced local variable
|
|
||||||
Creating library...
|
|
||||||
<h3>
|
|
||||||
--------------------Configuration: adig - Win32 Release--------------------
|
|
||||||
</h3>
|
|
||||||
<h3>Command Lines</h3>
|
|
||||||
Creating temporary file "C:\DOCUME~1\liren\LOCALS~1\Temp\RSP615C.tmp" with contents
|
|
||||||
[
|
|
||||||
wsock32.lib areslib.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:no /pdb:"Release/adig.pdb" /machine:I386 /out:"Release/adig.exe" /libpath:"..\areslib\Release"
|
|
||||||
".\Release\adig.obj"
|
|
||||||
".\Release\getopt.obj"
|
|
||||||
"\ARES-1.1.1\vc\areslib\Release\areslib.lib"
|
|
||||||
]
|
|
||||||
Creating command line "link.exe @C:\DOCUME~1\liren\LOCALS~1\Temp\RSP615C.tmp"
|
|
||||||
<h3>Output Window</h3>
|
|
||||||
Linking...
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<h3>Results</h3>
|
|
||||||
adig.exe - 0 error(s), 6 warning(s)
|
|
||||||
</pre>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,223 +0,0 @@
|
|||||||
# Microsoft Developer Studio Generated NMAKE File, Based on ahost.dsp
|
|
||||||
!IF "$(CFG)" == ""
|
|
||||||
CFG=ahost - Win32 Debug
|
|
||||||
!MESSAGE No configuration specified. Defaulting to ahost - Win32 Debug.
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
!IF "$(CFG)" != "ahost - Win32 Release" && "$(CFG)" != "ahost - Win32 Debug"
|
|
||||||
!MESSAGE Invalid configuration "$(CFG)" specified.
|
|
||||||
!MESSAGE You can specify a configuration when running NMAKE
|
|
||||||
!MESSAGE by defining the macro CFG on the command line. For example:
|
|
||||||
!MESSAGE
|
|
||||||
!MESSAGE NMAKE /f "ahost.mak" CFG="ahost - Win32 Debug"
|
|
||||||
!MESSAGE
|
|
||||||
!MESSAGE Possible choices for configuration are:
|
|
||||||
!MESSAGE
|
|
||||||
!MESSAGE "ahost - Win32 Release" (based on "Win32 (x86) Console Application")
|
|
||||||
!MESSAGE "ahost - Win32 Debug" (based on "Win32 (x86) Console Application")
|
|
||||||
!MESSAGE
|
|
||||||
!ERROR An invalid configuration is specified.
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
!IF "$(OS)" == "Windows_NT"
|
|
||||||
NULL=
|
|
||||||
!ELSE
|
|
||||||
NULL=nul
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
CPP=cl.exe
|
|
||||||
RSC=rc.exe
|
|
||||||
|
|
||||||
!IF "$(CFG)" == "ahost - Win32 Release"
|
|
||||||
|
|
||||||
OUTDIR=.\Release
|
|
||||||
INTDIR=.\Release
|
|
||||||
# Begin Custom Macros
|
|
||||||
OutDir=.\Release
|
|
||||||
# End Custom Macros
|
|
||||||
|
|
||||||
!IF "$(RECURSE)" == "0"
|
|
||||||
|
|
||||||
ALL : "$(OUTDIR)\ahost.exe"
|
|
||||||
|
|
||||||
!ELSE
|
|
||||||
|
|
||||||
ALL : "areslib - Win32 Release" "$(OUTDIR)\ahost.exe"
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
!IF "$(RECURSE)" == "1"
|
|
||||||
CLEAN :"areslib - Win32 ReleaseCLEAN"
|
|
||||||
!ELSE
|
|
||||||
CLEAN :
|
|
||||||
!ENDIF
|
|
||||||
-@erase "$(INTDIR)\ahost.obj"
|
|
||||||
-@erase "$(INTDIR)\vc60.idb"
|
|
||||||
-@erase "$(OUTDIR)\ahost.exe"
|
|
||||||
|
|
||||||
"$(OUTDIR)" :
|
|
||||||
if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
|
|
||||||
|
|
||||||
CPP_PROJ=/nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /Fp"$(INTDIR)\ahost.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
|
|
||||||
BSC32=bscmake.exe
|
|
||||||
BSC32_FLAGS=/nologo /o"$(OUTDIR)\ahost.bsc"
|
|
||||||
BSC32_SBRS= \
|
|
||||||
|
|
||||||
LINK32=link.exe
|
|
||||||
LINK32_FLAGS=wsock32.lib areslib.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:no /pdb:"$(OUTDIR)\ahost.pdb" /machine:I386 /out:"$(OUTDIR)\ahost.exe" /libpath:"..\areslib\Release"
|
|
||||||
LINK32_OBJS= \
|
|
||||||
"$(INTDIR)\ahost.obj" \
|
|
||||||
"..\areslib\Release\areslib.lib"
|
|
||||||
|
|
||||||
"$(OUTDIR)\ahost.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
|
|
||||||
$(LINK32) @<<
|
|
||||||
$(LINK32_FLAGS) $(LINK32_OBJS)
|
|
||||||
<<
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "ahost - Win32 Debug"
|
|
||||||
|
|
||||||
OUTDIR=.\Debug
|
|
||||||
INTDIR=.\Debug
|
|
||||||
# Begin Custom Macros
|
|
||||||
OutDir=.\Debug
|
|
||||||
# End Custom Macros
|
|
||||||
|
|
||||||
!IF "$(RECURSE)" == "0"
|
|
||||||
|
|
||||||
ALL : "$(OUTDIR)\ahost.exe" "$(OUTDIR)\ahost.bsc"
|
|
||||||
|
|
||||||
!ELSE
|
|
||||||
|
|
||||||
ALL : "areslib - Win32 Debug" "$(OUTDIR)\ahost.exe" "$(OUTDIR)\ahost.bsc"
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
!IF "$(RECURSE)" == "1"
|
|
||||||
CLEAN :"areslib - Win32 DebugCLEAN"
|
|
||||||
!ELSE
|
|
||||||
CLEAN :
|
|
||||||
!ENDIF
|
|
||||||
-@erase "$(INTDIR)\ahost.obj"
|
|
||||||
-@erase "$(INTDIR)\ahost.sbr"
|
|
||||||
-@erase "$(INTDIR)\vc60.idb"
|
|
||||||
-@erase "$(INTDIR)\vc60.pdb"
|
|
||||||
-@erase "$(OUTDIR)\ahost.bsc"
|
|
||||||
-@erase "$(OUTDIR)\ahost.exe"
|
|
||||||
-@erase "$(OUTDIR)\ahost.ilk"
|
|
||||||
-@erase "$(OUTDIR)\ahost.pdb"
|
|
||||||
|
|
||||||
"$(OUTDIR)" :
|
|
||||||
if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
|
|
||||||
|
|
||||||
CPP_PROJ=/nologo /MLd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\ahost.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c
|
|
||||||
BSC32=bscmake.exe
|
|
||||||
BSC32_FLAGS=/nologo /o"$(OUTDIR)\ahost.bsc"
|
|
||||||
BSC32_SBRS= \
|
|
||||||
"$(INTDIR)\ahost.sbr"
|
|
||||||
|
|
||||||
"$(OUTDIR)\ahost.bsc" : "$(OUTDIR)" $(BSC32_SBRS)
|
|
||||||
$(BSC32) @<<
|
|
||||||
$(BSC32_FLAGS) $(BSC32_SBRS)
|
|
||||||
<<
|
|
||||||
|
|
||||||
LINK32=link.exe
|
|
||||||
LINK32_FLAGS=wsock32.lib areslib.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:yes /pdb:"$(OUTDIR)\ahost.pdb" /debug /machine:I386 /out:"$(OUTDIR)\ahost.exe" /pdbtype:sept /libpath:"..\areslib\Debug"
|
|
||||||
LINK32_OBJS= \
|
|
||||||
"$(INTDIR)\ahost.obj" \
|
|
||||||
"..\areslib\Debug\areslib.lib"
|
|
||||||
|
|
||||||
"$(OUTDIR)\ahost.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
|
|
||||||
$(LINK32) @<<
|
|
||||||
$(LINK32_FLAGS) $(LINK32_OBJS)
|
|
||||||
<<
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
.c{$(INTDIR)}.obj::
|
|
||||||
$(CPP) @<<
|
|
||||||
$(CPP_PROJ) $<
|
|
||||||
<<
|
|
||||||
|
|
||||||
.cpp{$(INTDIR)}.obj::
|
|
||||||
$(CPP) @<<
|
|
||||||
$(CPP_PROJ) $<
|
|
||||||
<<
|
|
||||||
|
|
||||||
.cxx{$(INTDIR)}.obj::
|
|
||||||
$(CPP) @<<
|
|
||||||
$(CPP_PROJ) $<
|
|
||||||
<<
|
|
||||||
|
|
||||||
.c{$(INTDIR)}.sbr::
|
|
||||||
$(CPP) @<<
|
|
||||||
$(CPP_PROJ) $<
|
|
||||||
<<
|
|
||||||
|
|
||||||
.cpp{$(INTDIR)}.sbr::
|
|
||||||
$(CPP) @<<
|
|
||||||
$(CPP_PROJ) $<
|
|
||||||
<<
|
|
||||||
|
|
||||||
.cxx{$(INTDIR)}.sbr::
|
|
||||||
$(CPP) @<<
|
|
||||||
$(CPP_PROJ) $<
|
|
||||||
<<
|
|
||||||
|
|
||||||
|
|
||||||
!IF "$(NO_EXTERNAL_DEPS)" != "1"
|
|
||||||
!IF EXISTS("ahost.dep")
|
|
||||||
!INCLUDE "ahost.dep"
|
|
||||||
!ELSE
|
|
||||||
!MESSAGE Warning: cannot find "ahost.dep"
|
|
||||||
!ENDIF
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
|
|
||||||
!IF "$(CFG)" == "ahost - Win32 Release" || "$(CFG)" == "ahost - Win32 Debug"
|
|
||||||
SOURCE=..\..\ahost.c
|
|
||||||
|
|
||||||
!IF "$(CFG)" == "ahost - Win32 Release"
|
|
||||||
|
|
||||||
|
|
||||||
"$(INTDIR)\ahost.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "ahost - Win32 Debug"
|
|
||||||
|
|
||||||
|
|
||||||
"$(INTDIR)\ahost.obj" "$(INTDIR)\ahost.sbr" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
!IF "$(CFG)" == "ahost - Win32 Release"
|
|
||||||
|
|
||||||
"areslib - Win32 Release" :
|
|
||||||
cd "\ARES-1.1.1\vc\areslib"
|
|
||||||
$(MAKE) /$(MAKEFLAGS) /F ".\areslib.mak" CFG="areslib - Win32 Release"
|
|
||||||
cd "..\ahost"
|
|
||||||
|
|
||||||
"areslib - Win32 ReleaseCLEAN" :
|
|
||||||
cd "\ARES-1.1.1\vc\areslib"
|
|
||||||
$(MAKE) /$(MAKEFLAGS) /F ".\areslib.mak" CFG="areslib - Win32 Release" RECURSE=1 CLEAN
|
|
||||||
cd "..\ahost"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "ahost - Win32 Debug"
|
|
||||||
|
|
||||||
"areslib - Win32 Debug" :
|
|
||||||
cd "\ARES-1.1.1\vc\areslib"
|
|
||||||
$(MAKE) /$(MAKEFLAGS) /F ".\areslib.mak" CFG="areslib - Win32 Debug"
|
|
||||||
cd "..\ahost"
|
|
||||||
|
|
||||||
"areslib - Win32 DebugCLEAN" :
|
|
||||||
cd "\ARES-1.1.1\vc\areslib"
|
|
||||||
$(MAKE) /$(MAKEFLAGS) /F ".\areslib.mak" CFG="areslib - Win32 Debug" RECURSE=1 CLEAN
|
|
||||||
cd "..\ahost"
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
<html>
|
|
||||||
<body>
|
|
||||||
<pre>
|
|
||||||
<h1>Build Log</h1>
|
|
||||||
<h3>
|
|
||||||
--------------------Configuration: ahost - Win32 Release--------------------
|
|
||||||
</h3>
|
|
||||||
<h3>Command Lines</h3>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<h3>Results</h3>
|
|
||||||
ahost.exe - 0 error(s), 0 warning(s)
|
|
||||||
</pre>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -97,6 +97,10 @@ SOURCE=..\..\ares__read_line.c
|
|||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\..\ares_cancel.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=..\..\ares_destroy.c
|
SOURCE=..\..\ares_destroy.c
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
@@ -109,10 +113,6 @@ SOURCE=..\..\ares_fds.c
|
|||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=..\..\ares_free_errmem.c
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=..\..\ares_free_hostent.c
|
SOURCE=..\..\ares_free_hostent.c
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
@@ -141,6 +141,10 @@ SOURCE=..\..\ares_parse_a_reply.c
|
|||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\..\ares_parse_aaaa_reply.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=..\..\ares_parse_ptr_reply.c
|
SOURCE=..\..\ares_parse_ptr_reply.c
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
@@ -169,6 +173,22 @@ SOURCE=..\..\ares_timeout.c
|
|||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\..\ares_version.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\..\bitncmp.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\..\inet_net_pton.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\..\inet_ntop.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=..\..\windows_port.c
|
SOURCE=..\..\windows_port.c
|
||||||
# End Source File
|
# End Source File
|
||||||
# End Group
|
# End Group
|
||||||
@@ -185,10 +205,30 @@ SOURCE=..\..\ares_dns.h
|
|||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\..\ares_ipv6.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=..\..\ares_private.h
|
SOURCE=..\..\ares_private.h
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\..\ares_version.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\..\bitncmp.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\..\inet_net_pton.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\..\inet_ntop.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=..\..\nameser.h
|
SOURCE=..\..\nameser.h
|
||||||
# End Source File
|
# End Source File
|
||||||
# End Group
|
# End Group
|
||||||
|
|||||||
29
ares/vc/areslib/areslib.dsw
Normal file
29
ares/vc/areslib/areslib.dsw
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
Microsoft Developer Studio Workspace File, Format Version 6.00
|
||||||
|
# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
|
Project: "areslib"=.\areslib.dsp - Package Owner=<4>
|
||||||
|
|
||||||
|
Package=<5>
|
||||||
|
{{{
|
||||||
|
}}}
|
||||||
|
|
||||||
|
Package=<4>
|
||||||
|
{{{
|
||||||
|
}}}
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
|
Global:
|
||||||
|
|
||||||
|
Package=<5>
|
||||||
|
{{{
|
||||||
|
}}}
|
||||||
|
|
||||||
|
Package=<3>
|
||||||
|
{{{
|
||||||
|
}}}
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
@@ -1,361 +0,0 @@
|
|||||||
# Microsoft Developer Studio Generated NMAKE File, Based on areslib.dsp
|
|
||||||
!IF "$(CFG)" == ""
|
|
||||||
CFG=areslib - Win32 Debug
|
|
||||||
!MESSAGE No configuration specified. Defaulting to areslib - Win32 Debug.
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
!IF "$(CFG)" != "areslib - Win32 Release" && "$(CFG)" != "areslib - Win32 Debug"
|
|
||||||
!MESSAGE Invalid configuration "$(CFG)" specified.
|
|
||||||
!MESSAGE You can specify a configuration when running NMAKE
|
|
||||||
!MESSAGE by defining the macro CFG on the command line. For example:
|
|
||||||
!MESSAGE
|
|
||||||
!MESSAGE NMAKE /f "areslib.mak" CFG="areslib - Win32 Debug"
|
|
||||||
!MESSAGE
|
|
||||||
!MESSAGE Possible choices for configuration are:
|
|
||||||
!MESSAGE
|
|
||||||
!MESSAGE "areslib - Win32 Release" (based on "Win32 (x86) Static Library")
|
|
||||||
!MESSAGE "areslib - Win32 Debug" (based on "Win32 (x86) Static Library")
|
|
||||||
!MESSAGE
|
|
||||||
!ERROR An invalid configuration is specified.
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
!IF "$(OS)" == "Windows_NT"
|
|
||||||
NULL=
|
|
||||||
!ELSE
|
|
||||||
NULL=nul
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
CPP=cl.exe
|
|
||||||
RSC=rc.exe
|
|
||||||
|
|
||||||
!IF "$(CFG)" == "areslib - Win32 Release"
|
|
||||||
|
|
||||||
OUTDIR=.\Release
|
|
||||||
INTDIR=.\Release
|
|
||||||
# Begin Custom Macros
|
|
||||||
OutDir=.\Release
|
|
||||||
# End Custom Macros
|
|
||||||
|
|
||||||
ALL : "$(OUTDIR)\areslib.lib"
|
|
||||||
|
|
||||||
|
|
||||||
CLEAN :
|
|
||||||
-@erase "$(INTDIR)\ares__close_sockets.obj"
|
|
||||||
-@erase "$(INTDIR)\ares__get_hostent.obj"
|
|
||||||
-@erase "$(INTDIR)\ares__read_line.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_destroy.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_expand_name.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_fds.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_free_errmem.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_free_hostent.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_free_string.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_gethostbyaddr.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_gethostbyname.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_init.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_mkquery.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_parse_a_reply.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_parse_ptr_reply.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_process.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_query.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_search.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_send.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_strerror.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_timeout.obj"
|
|
||||||
-@erase "$(INTDIR)\vc60.idb"
|
|
||||||
-@erase "$(INTDIR)\windows_port.obj"
|
|
||||||
-@erase "$(OUTDIR)\areslib.lib"
|
|
||||||
|
|
||||||
"$(OUTDIR)" :
|
|
||||||
if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
|
|
||||||
|
|
||||||
CPP_PROJ=/nologo /MD /W3 /GX /O2 /I "..\.." /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /Fp"$(INTDIR)\areslib.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
|
|
||||||
BSC32=bscmake.exe
|
|
||||||
BSC32_FLAGS=/nologo /o"$(OUTDIR)\areslib.bsc"
|
|
||||||
BSC32_SBRS= \
|
|
||||||
|
|
||||||
LIB32=link.exe -lib
|
|
||||||
LIB32_FLAGS=/nologo /out:"$(OUTDIR)\areslib.lib"
|
|
||||||
LIB32_OBJS= \
|
|
||||||
"$(INTDIR)\ares__close_sockets.obj" \
|
|
||||||
"$(INTDIR)\ares__get_hostent.obj" \
|
|
||||||
"$(INTDIR)\ares__read_line.obj" \
|
|
||||||
"$(INTDIR)\ares_destroy.obj" \
|
|
||||||
"$(INTDIR)\ares_expand_name.obj" \
|
|
||||||
"$(INTDIR)\ares_fds.obj" \
|
|
||||||
"$(INTDIR)\ares_free_errmem.obj" \
|
|
||||||
"$(INTDIR)\ares_free_hostent.obj" \
|
|
||||||
"$(INTDIR)\ares_free_string.obj" \
|
|
||||||
"$(INTDIR)\ares_gethostbyaddr.obj" \
|
|
||||||
"$(INTDIR)\ares_gethostbyname.obj" \
|
|
||||||
"$(INTDIR)\ares_init.obj" \
|
|
||||||
"$(INTDIR)\ares_mkquery.obj" \
|
|
||||||
"$(INTDIR)\ares_parse_a_reply.obj" \
|
|
||||||
"$(INTDIR)\ares_parse_ptr_reply.obj" \
|
|
||||||
"$(INTDIR)\ares_process.obj" \
|
|
||||||
"$(INTDIR)\ares_query.obj" \
|
|
||||||
"$(INTDIR)\ares_search.obj" \
|
|
||||||
"$(INTDIR)\ares_send.obj" \
|
|
||||||
"$(INTDIR)\ares_strerror.obj" \
|
|
||||||
"$(INTDIR)\ares_timeout.obj" \
|
|
||||||
"$(INTDIR)\windows_port.obj"
|
|
||||||
|
|
||||||
"$(OUTDIR)\areslib.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS)
|
|
||||||
$(LIB32) @<<
|
|
||||||
$(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS)
|
|
||||||
<<
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "areslib - Win32 Debug"
|
|
||||||
|
|
||||||
OUTDIR=.\Debug
|
|
||||||
INTDIR=.\Debug
|
|
||||||
# Begin Custom Macros
|
|
||||||
OutDir=.\Debug
|
|
||||||
# End Custom Macros
|
|
||||||
|
|
||||||
ALL : "$(OUTDIR)\areslib.lib"
|
|
||||||
|
|
||||||
|
|
||||||
CLEAN :
|
|
||||||
-@erase "$(INTDIR)\ares__close_sockets.obj"
|
|
||||||
-@erase "$(INTDIR)\ares__get_hostent.obj"
|
|
||||||
-@erase "$(INTDIR)\ares__read_line.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_destroy.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_expand_name.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_fds.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_free_errmem.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_free_hostent.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_free_string.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_gethostbyaddr.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_gethostbyname.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_init.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_mkquery.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_parse_a_reply.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_parse_ptr_reply.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_process.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_query.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_search.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_send.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_strerror.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_timeout.obj"
|
|
||||||
-@erase "$(INTDIR)\vc60.idb"
|
|
||||||
-@erase "$(INTDIR)\vc60.pdb"
|
|
||||||
-@erase "$(INTDIR)\windows_port.obj"
|
|
||||||
-@erase "$(OUTDIR)\areslib.lib"
|
|
||||||
|
|
||||||
"$(OUTDIR)" :
|
|
||||||
if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
|
|
||||||
|
|
||||||
CPP_PROJ=/nologo /MLd /W3 /Gm /GX /ZI /Od /I "..\.." /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /Fp"$(INTDIR)\areslib.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c
|
|
||||||
BSC32=bscmake.exe
|
|
||||||
BSC32_FLAGS=/nologo /o"$(OUTDIR)\areslib.bsc"
|
|
||||||
BSC32_SBRS= \
|
|
||||||
|
|
||||||
LIB32=link.exe -lib
|
|
||||||
LIB32_FLAGS=/nologo /out:"$(OUTDIR)\areslib.lib"
|
|
||||||
LIB32_OBJS= \
|
|
||||||
"$(INTDIR)\ares__close_sockets.obj" \
|
|
||||||
"$(INTDIR)\ares__get_hostent.obj" \
|
|
||||||
"$(INTDIR)\ares__read_line.obj" \
|
|
||||||
"$(INTDIR)\ares_destroy.obj" \
|
|
||||||
"$(INTDIR)\ares_expand_name.obj" \
|
|
||||||
"$(INTDIR)\ares_fds.obj" \
|
|
||||||
"$(INTDIR)\ares_free_errmem.obj" \
|
|
||||||
"$(INTDIR)\ares_free_hostent.obj" \
|
|
||||||
"$(INTDIR)\ares_free_string.obj" \
|
|
||||||
"$(INTDIR)\ares_gethostbyaddr.obj" \
|
|
||||||
"$(INTDIR)\ares_gethostbyname.obj" \
|
|
||||||
"$(INTDIR)\ares_init.obj" \
|
|
||||||
"$(INTDIR)\ares_mkquery.obj" \
|
|
||||||
"$(INTDIR)\ares_parse_a_reply.obj" \
|
|
||||||
"$(INTDIR)\ares_parse_ptr_reply.obj" \
|
|
||||||
"$(INTDIR)\ares_process.obj" \
|
|
||||||
"$(INTDIR)\ares_query.obj" \
|
|
||||||
"$(INTDIR)\ares_search.obj" \
|
|
||||||
"$(INTDIR)\ares_send.obj" \
|
|
||||||
"$(INTDIR)\ares_strerror.obj" \
|
|
||||||
"$(INTDIR)\ares_timeout.obj" \
|
|
||||||
"$(INTDIR)\windows_port.obj"
|
|
||||||
|
|
||||||
"$(OUTDIR)\areslib.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS)
|
|
||||||
$(LIB32) @<<
|
|
||||||
$(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS)
|
|
||||||
<<
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
.c{$(INTDIR)}.obj::
|
|
||||||
$(CPP) @<<
|
|
||||||
$(CPP_PROJ) $<
|
|
||||||
<<
|
|
||||||
|
|
||||||
.cpp{$(INTDIR)}.obj::
|
|
||||||
$(CPP) @<<
|
|
||||||
$(CPP_PROJ) $<
|
|
||||||
<<
|
|
||||||
|
|
||||||
.cxx{$(INTDIR)}.obj::
|
|
||||||
$(CPP) @<<
|
|
||||||
$(CPP_PROJ) $<
|
|
||||||
<<
|
|
||||||
|
|
||||||
.c{$(INTDIR)}.sbr::
|
|
||||||
$(CPP) @<<
|
|
||||||
$(CPP_PROJ) $<
|
|
||||||
<<
|
|
||||||
|
|
||||||
.cpp{$(INTDIR)}.sbr::
|
|
||||||
$(CPP) @<<
|
|
||||||
$(CPP_PROJ) $<
|
|
||||||
<<
|
|
||||||
|
|
||||||
.cxx{$(INTDIR)}.sbr::
|
|
||||||
$(CPP) @<<
|
|
||||||
$(CPP_PROJ) $<
|
|
||||||
<<
|
|
||||||
|
|
||||||
|
|
||||||
!IF "$(NO_EXTERNAL_DEPS)" != "1"
|
|
||||||
!IF EXISTS("areslib.dep")
|
|
||||||
!INCLUDE "areslib.dep"
|
|
||||||
!ELSE
|
|
||||||
!MESSAGE Warning: cannot find "areslib.dep"
|
|
||||||
!ENDIF
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
|
|
||||||
!IF "$(CFG)" == "areslib - Win32 Release" || "$(CFG)" == "areslib - Win32 Debug"
|
|
||||||
SOURCE=..\..\ares__close_sockets.c
|
|
||||||
|
|
||||||
"$(INTDIR)\ares__close_sockets.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
SOURCE=..\..\ares__get_hostent.c
|
|
||||||
|
|
||||||
"$(INTDIR)\ares__get_hostent.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
SOURCE=..\..\ares__read_line.c
|
|
||||||
|
|
||||||
"$(INTDIR)\ares__read_line.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
SOURCE=..\..\ares_destroy.c
|
|
||||||
|
|
||||||
"$(INTDIR)\ares_destroy.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
SOURCE=..\..\ares_expand_name.c
|
|
||||||
|
|
||||||
"$(INTDIR)\ares_expand_name.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
SOURCE=..\..\ares_fds.c
|
|
||||||
|
|
||||||
"$(INTDIR)\ares_fds.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
SOURCE=..\..\ares_free_errmem.c
|
|
||||||
|
|
||||||
"$(INTDIR)\ares_free_errmem.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
SOURCE=..\..\ares_free_hostent.c
|
|
||||||
|
|
||||||
"$(INTDIR)\ares_free_hostent.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
SOURCE=..\..\ares_free_string.c
|
|
||||||
|
|
||||||
"$(INTDIR)\ares_free_string.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
SOURCE=..\..\ares_gethostbyaddr.c
|
|
||||||
|
|
||||||
"$(INTDIR)\ares_gethostbyaddr.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
SOURCE=..\..\ares_gethostbyname.c
|
|
||||||
|
|
||||||
"$(INTDIR)\ares_gethostbyname.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
SOURCE=..\..\ares_init.c
|
|
||||||
|
|
||||||
"$(INTDIR)\ares_init.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
SOURCE=..\..\ares_mkquery.c
|
|
||||||
|
|
||||||
"$(INTDIR)\ares_mkquery.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
SOURCE=..\..\ares_parse_a_reply.c
|
|
||||||
|
|
||||||
"$(INTDIR)\ares_parse_a_reply.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
SOURCE=..\..\ares_parse_ptr_reply.c
|
|
||||||
|
|
||||||
"$(INTDIR)\ares_parse_ptr_reply.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
SOURCE=..\..\ares_process.c
|
|
||||||
|
|
||||||
"$(INTDIR)\ares_process.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
SOURCE=..\..\ares_query.c
|
|
||||||
|
|
||||||
"$(INTDIR)\ares_query.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
SOURCE=..\..\ares_search.c
|
|
||||||
|
|
||||||
"$(INTDIR)\ares_search.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
SOURCE=..\..\ares_send.c
|
|
||||||
|
|
||||||
"$(INTDIR)\ares_send.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
SOURCE=..\..\ares_strerror.c
|
|
||||||
|
|
||||||
"$(INTDIR)\ares_strerror.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
SOURCE=..\..\ares_timeout.c
|
|
||||||
|
|
||||||
"$(INTDIR)\ares_timeout.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
SOURCE=..\..\windows_port.c
|
|
||||||
|
|
||||||
"$(INTDIR)\windows_port.obj" : $(SOURCE) "$(INTDIR)"
|
|
||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
@@ -1,125 +0,0 @@
|
|||||||
<html>
|
|
||||||
<body>
|
|
||||||
<pre>
|
|
||||||
<h1>Build Log</h1>
|
|
||||||
<h3>
|
|
||||||
--------------------Configuration: areslib - Win32 Release--------------------
|
|
||||||
</h3>
|
|
||||||
<h3>Command Lines</h3>
|
|
||||||
Creating temporary file "C:\DOCUME~1\liren\LOCALS~1\Temp\RSP603D.tmp" with contents
|
|
||||||
[
|
|
||||||
/nologo /MD /W3 /GX /O2 /I "..\.." /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /Fp"Release/areslib.pch" /YX /Fo"Release/" /Fd"Release/" /FD /c
|
|
||||||
"Z:\ares-1.1.1\ares__close_sockets.c"
|
|
||||||
"Z:\ares-1.1.1\ares__get_hostent.c"
|
|
||||||
"Z:\ares-1.1.1\ares__read_line.c"
|
|
||||||
"Z:\ares-1.1.1\ares_destroy.c"
|
|
||||||
"Z:\ares-1.1.1\ares_expand_name.c"
|
|
||||||
"Z:\ares-1.1.1\ares_fds.c"
|
|
||||||
"Z:\ares-1.1.1\ares_free_errmem.c"
|
|
||||||
"Z:\ares-1.1.1\ares_free_hostent.c"
|
|
||||||
"Z:\ares-1.1.1\ares_free_string.c"
|
|
||||||
"Z:\ares-1.1.1\ares_gethostbyaddr.c"
|
|
||||||
"Z:\ares-1.1.1\ares_gethostbyname.c"
|
|
||||||
"Z:\ares-1.1.1\ares_init.c"
|
|
||||||
"Z:\ares-1.1.1\ares_mkquery.c"
|
|
||||||
"Z:\ares-1.1.1\ares_parse_a_reply.c"
|
|
||||||
"Z:\ares-1.1.1\ares_parse_ptr_reply.c"
|
|
||||||
"Z:\ares-1.1.1\ares_process.c"
|
|
||||||
"Z:\ares-1.1.1\ares_query.c"
|
|
||||||
"Z:\ares-1.1.1\ares_search.c"
|
|
||||||
"Z:\ares-1.1.1\ares_send.c"
|
|
||||||
"Z:\ares-1.1.1\ares_strerror.c"
|
|
||||||
"Z:\ares-1.1.1\ares_timeout.c"
|
|
||||||
"Z:\ares-1.1.1\windows_port.c"
|
|
||||||
]
|
|
||||||
Creating command line "cl.exe @C:\DOCUME~1\liren\LOCALS~1\Temp\RSP603D.tmp"
|
|
||||||
Creating temporary file "C:\DOCUME~1\liren\LOCALS~1\Temp\RSP603E.tmp" with contents
|
|
||||||
[
|
|
||||||
/nologo /out:"Release\areslib.lib"
|
|
||||||
".\Release\ares__close_sockets.obj"
|
|
||||||
".\Release\ares__get_hostent.obj"
|
|
||||||
".\Release\ares__read_line.obj"
|
|
||||||
".\Release\ares_destroy.obj"
|
|
||||||
".\Release\ares_expand_name.obj"
|
|
||||||
".\Release\ares_fds.obj"
|
|
||||||
".\Release\ares_free_errmem.obj"
|
|
||||||
".\Release\ares_free_hostent.obj"
|
|
||||||
".\Release\ares_free_string.obj"
|
|
||||||
".\Release\ares_gethostbyaddr.obj"
|
|
||||||
".\Release\ares_gethostbyname.obj"
|
|
||||||
".\Release\ares_init.obj"
|
|
||||||
".\Release\ares_mkquery.obj"
|
|
||||||
".\Release\ares_parse_a_reply.obj"
|
|
||||||
".\Release\ares_parse_ptr_reply.obj"
|
|
||||||
".\Release\ares_process.obj"
|
|
||||||
".\Release\ares_query.obj"
|
|
||||||
".\Release\ares_search.obj"
|
|
||||||
".\Release\ares_send.obj"
|
|
||||||
".\Release\ares_strerror.obj"
|
|
||||||
".\Release\ares_timeout.obj"
|
|
||||||
".\Release\windows_port.obj"
|
|
||||||
]
|
|
||||||
Creating command line "link.exe -lib @C:\DOCUME~1\liren\LOCALS~1\Temp\RSP603E.tmp"
|
|
||||||
<h3>Output Window</h3>
|
|
||||||
Compiling...
|
|
||||||
ares__close_sockets.c
|
|
||||||
Z:\ares-1.1.1\ares__close_sockets.c(46) : warning C4013: 'close' undefined; assuming extern returning int
|
|
||||||
ares__get_hostent.c
|
|
||||||
ares__read_line.c
|
|
||||||
ares_destroy.c
|
|
||||||
ares_expand_name.c
|
|
||||||
Z:\ares-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition
|
|
||||||
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR'
|
|
||||||
ares_fds.c
|
|
||||||
ares_free_errmem.c
|
|
||||||
ares_free_hostent.c
|
|
||||||
ares_free_string.c
|
|
||||||
ares_gethostbyaddr.c
|
|
||||||
Z:\ares-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition
|
|
||||||
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR'
|
|
||||||
ares_gethostbyname.c
|
|
||||||
Z:\ares-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition
|
|
||||||
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR'
|
|
||||||
ares_init.c
|
|
||||||
Z:\ares-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition
|
|
||||||
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR'
|
|
||||||
Z:\ares-1.1.1\ares_init.c(141) : warning C4013: '_getpid' undefined; assuming extern returning int
|
|
||||||
Z:\ares-1.1.1\ares_init.c(236) : warning C4101: 'p' : unreferenced local variable
|
|
||||||
Z:\ares-1.1.1\ares_init.c(237) : warning C4101: 'linesize' : unreferenced local variable
|
|
||||||
Z:\ares-1.1.1\ares_init.c(235) : warning C4101: 'fp' : unreferenced local variable
|
|
||||||
ares_mkquery.c
|
|
||||||
Z:\ares-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition
|
|
||||||
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR'
|
|
||||||
ares_parse_a_reply.c
|
|
||||||
Z:\ares-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition
|
|
||||||
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR'
|
|
||||||
Z:\ares-1.1.1\ares_parse_a_reply.c(90) : warning C4018: '<' : signed/unsigned mismatch
|
|
||||||
ares_parse_ptr_reply.c
|
|
||||||
Z:\ares-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition
|
|
||||||
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR'
|
|
||||||
Z:\ares-1.1.1\ares_parse_ptr_reply.c(71) : warning C4018: '<' : signed/unsigned mismatch
|
|
||||||
ares_process.c
|
|
||||||
Z:\ares-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition
|
|
||||||
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR'
|
|
||||||
ares_query.c
|
|
||||||
Z:\ares-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition
|
|
||||||
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR'
|
|
||||||
ares_search.c
|
|
||||||
Z:\ares-1.1.1\ares_search.c(229) : warning C4013: 'strncasecmp' undefined; assuming extern returning int
|
|
||||||
ares_send.c
|
|
||||||
Z:\ares-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition
|
|
||||||
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR'
|
|
||||||
ares_strerror.c
|
|
||||||
ares_timeout.c
|
|
||||||
windows_port.c
|
|
||||||
Z:\ares-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition
|
|
||||||
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR'
|
|
||||||
Creating library...
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<h3>Results</h3>
|
|
||||||
areslib.lib - 0 error(s), 19 warning(s)
|
|
||||||
</pre>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,15 +1,28 @@
|
|||||||
|
#include "setup.h"
|
||||||
|
|
||||||
|
/* only do the following on windows
|
||||||
|
*/
|
||||||
|
#if (defined(WIN32) || defined(WATT32)) && !defined(MSDOS)
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <malloc.h>
|
||||||
|
|
||||||
|
#ifdef WATT32
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#else
|
||||||
#include "nameser.h"
|
#include "nameser.h"
|
||||||
|
#endif
|
||||||
|
#include "ares.h"
|
||||||
|
#include "ares_private.h"
|
||||||
|
|
||||||
#ifndef __MINGW32__
|
#ifndef __MINGW32__
|
||||||
int
|
int
|
||||||
ares_strncasecmp(const char *a, const char *b, size_t n)
|
ares_strncasecmp(const char *a, const char *b, int n)
|
||||||
{
|
{
|
||||||
size_t i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; i < n; i++) {
|
for (i = 0; i < n; i++) {
|
||||||
int c1 = isupper(a[i]) ? tolower(a[i]) : a[i];
|
int c1 = isupper(a[i]) ? tolower(a[i]) : a[i];
|
||||||
@@ -26,38 +39,67 @@ ares_strcasecmp(const char *a, const char *b)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Number of micro-seconds between the beginning of the Windows epoch
|
||||||
|
* (Jan. 1, 1601) and the Unix epoch (Jan. 1, 1970).
|
||||||
|
*/
|
||||||
|
#if defined(_MSC_VER) || defined(__WATCOMC__)
|
||||||
|
#define EPOCH_FILETIME 11644473600000000Ui64
|
||||||
|
#else
|
||||||
|
#define EPOCH_FILETIME 11644473600000000ULL
|
||||||
|
#endif
|
||||||
|
|
||||||
int
|
int
|
||||||
ares_gettimeofday(struct timeval *tv, struct timezone *tz)
|
ares_gettimeofday(struct timeval *tv, struct timezone *tz)
|
||||||
{
|
{
|
||||||
FILETIME ft;
|
FILETIME ft;
|
||||||
LARGE_INTEGER li;
|
LARGE_INTEGER li;
|
||||||
__int64 t;
|
__int64 t;
|
||||||
static int tzflag;
|
|
||||||
|
|
||||||
if (tv)
|
if (tv)
|
||||||
{
|
{
|
||||||
GetSystemTimeAsFileTime(&ft);
|
GetSystemTimeAsFileTime(&ft);
|
||||||
li.LowPart = ft.dwLowDateTime;
|
li.LowPart = ft.dwLowDateTime;
|
||||||
li.HighPart = ft.dwHighDateTime;
|
li.HighPart = ft.dwHighDateTime;
|
||||||
t = li.QuadPart; /* In 100-nanosecond intervals */
|
t = li.QuadPart / 10; /* In micro-second intervals */
|
||||||
//t -= EPOCHFILETIME; /* Offset to the Epoch time */
|
t -= EPOCH_FILETIME; /* Offset to the Epoch time */
|
||||||
t /= 10; /* In microseconds */
|
|
||||||
tv->tv_sec = (long)(t / 1000000);
|
tv->tv_sec = (long)(t / 1000000);
|
||||||
tv->tv_usec = (long)(t % 1000000);
|
tv->tv_usec = (long)(t % 1000000);
|
||||||
}
|
}
|
||||||
|
(void) tz;
|
||||||
#if 0
|
|
||||||
if (tz)
|
|
||||||
{
|
|
||||||
if (!tzflag)
|
|
||||||
{
|
|
||||||
_tzset();
|
|
||||||
tzflag++;
|
|
||||||
}
|
|
||||||
tz->tz_minuteswest = _timezone / 60;
|
|
||||||
tz->tz_dsttime = _daylight;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
ares_writev (ares_socket_t s, const struct iovec *vector, size_t count)
|
||||||
|
{
|
||||||
|
char *buffer, *bp;
|
||||||
|
size_t i, bytes = 0;
|
||||||
|
|
||||||
|
/* Find the total number of bytes to write
|
||||||
|
*/
|
||||||
|
for (i = 0; i < count; i++)
|
||||||
|
bytes += vector[i].iov_len;
|
||||||
|
|
||||||
|
if (bytes == 0) /* not an error */
|
||||||
|
return (0);
|
||||||
|
|
||||||
|
/* Allocate a temporary buffer to hold the data
|
||||||
|
*/
|
||||||
|
buffer = bp = (char*) alloca (bytes);
|
||||||
|
if (!buffer)
|
||||||
|
{
|
||||||
|
errno = ENOMEM;
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Copy the data into buffer.
|
||||||
|
*/
|
||||||
|
for (i = 0; i < count; ++i)
|
||||||
|
{
|
||||||
|
memcpy (bp, vector[i].iov_base, vector[i].iov_len);
|
||||||
|
bp += vector[i].iov_len;
|
||||||
|
}
|
||||||
|
return send (s, (const void*)buffer, bytes, 0);
|
||||||
|
}
|
||||||
|
#endif /* WIN32 builds only */
|
||||||
|
|||||||
83
buildconf
83
buildconf
@@ -1,4 +1,26 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
#***************************************************************************
|
||||||
|
# _ _ ____ _
|
||||||
|
# Project ___| | | | _ \| |
|
||||||
|
# / __| | | | |_) | |
|
||||||
|
# | (__| |_| | _ <| |___
|
||||||
|
# \___|\___/|_| \_\_____|
|
||||||
|
#
|
||||||
|
# Copyright (C) 1998 - 2005, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
|
#
|
||||||
|
# This software is licensed as described in the file COPYING, which
|
||||||
|
# you should have received as part of this distribution. The terms
|
||||||
|
# are also available at http://curl.haxx.se/docs/copyright.html.
|
||||||
|
#
|
||||||
|
# You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||||
|
# copies of the Software, and permit persons to whom the Software is
|
||||||
|
# furnished to do so, under the terms of the COPYING file.
|
||||||
|
#
|
||||||
|
# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||||
|
# KIND, either express or implied.
|
||||||
|
#
|
||||||
|
# $Id$
|
||||||
|
###########################################################################
|
||||||
|
|
||||||
die(){
|
die(){
|
||||||
echo "$@"
|
echo "$@"
|
||||||
@@ -13,7 +35,8 @@ findtool(){
|
|||||||
IFS=":"
|
IFS=":"
|
||||||
for path in $PATH
|
for path in $PATH
|
||||||
do
|
do
|
||||||
if test -r "$path/$file"; then
|
# echo "checks for $file in $path" >&2
|
||||||
|
if test -f "$path/$file"; then
|
||||||
echo "$path/$file"
|
echo "$path/$file"
|
||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
@@ -24,7 +47,7 @@ findtool(){
|
|||||||
# autoconf 2.57 or newer
|
# autoconf 2.57 or newer
|
||||||
#
|
#
|
||||||
need_autoconf="2.57"
|
need_autoconf="2.57"
|
||||||
ac_version=`${AUTOCONF:-autoconf} --version 2>/dev/null|head -1| sed -e 's/^[^0-9]*//' -e 's/[a-z]* *$//'`
|
ac_version=`${AUTOCONF:-autoconf} --version 2>/dev/null|head -n 1| sed -e 's/^[^0-9]*//' -e 's/[a-z]* *$//'`
|
||||||
if test -z "$ac_version"; then
|
if test -z "$ac_version"; then
|
||||||
echo "buildconf: autoconf not found."
|
echo "buildconf: autoconf not found."
|
||||||
echo " You need autoconf version $need_autoconf or newer installed."
|
echo " You need autoconf version $need_autoconf or newer installed."
|
||||||
@@ -45,7 +68,7 @@ echo "buildconf: autoconf version $ac_version (ok)"
|
|||||||
#--------------------------------------------------------------------------
|
#--------------------------------------------------------------------------
|
||||||
# autoheader 2.50 or newer
|
# autoheader 2.50 or newer
|
||||||
#
|
#
|
||||||
ah_version=`${AUTOHEADER:-autoheader} --version 2>/dev/null|head -1| sed -e 's/^[^0-9]*//' -e 's/[a-z]* *$//'`
|
ah_version=`${AUTOHEADER:-autoheader} --version 2>/dev/null|head -n 1| sed -e 's/^[^0-9]*//' -e 's/[a-z]* *$//'`
|
||||||
if test -z "$ah_version"; then
|
if test -z "$ah_version"; then
|
||||||
echo "buildconf: autoheader not found."
|
echo "buildconf: autoheader not found."
|
||||||
echo " You need autoheader version 2.50 or newer installed."
|
echo " You need autoheader version 2.50 or newer installed."
|
||||||
@@ -67,7 +90,7 @@ echo "buildconf: autoheader version $ah_version (ok)"
|
|||||||
# automake 1.7 or newer
|
# automake 1.7 or newer
|
||||||
#
|
#
|
||||||
need_automake="1.7"
|
need_automake="1.7"
|
||||||
am_version=`${AUTOMAKE:-automake} --version 2>/dev/null|head -1| sed -e 's/^.* \([0-9]\)/\1/' -e 's/[a-z]* *$//' -e 's/\(.*\)\(-p.*\)/\1/'`
|
am_version=`${AUTOMAKE:-automake} --version 2>/dev/null|head -n 1| sed -e 's/^.* \([0-9]\)/\1/' -e 's/[a-z]* *$//' -e 's/\(.*\)\(-p.*\)/\1/'`
|
||||||
if test -z "$am_version"; then
|
if test -z "$am_version"; then
|
||||||
echo "buildconf: automake not found."
|
echo "buildconf: automake not found."
|
||||||
echo " You need automake version $need_automake or newer installed."
|
echo " You need automake version $need_automake or newer installed."
|
||||||
@@ -85,6 +108,13 @@ fi
|
|||||||
|
|
||||||
echo "buildconf: automake version $am_version (ok)"
|
echo "buildconf: automake version $am_version (ok)"
|
||||||
|
|
||||||
|
ac=`findtool ${ACLOCAL:-aclocal}`
|
||||||
|
if test -z "$ac"; then
|
||||||
|
echo "buildconf: aclocal not found. Weird automake installation!"
|
||||||
|
exit 1
|
||||||
|
else
|
||||||
|
echo "buildconf: aclocal found"
|
||||||
|
fi
|
||||||
|
|
||||||
#--------------------------------------------------------------------------
|
#--------------------------------------------------------------------------
|
||||||
# libtool check
|
# libtool check
|
||||||
@@ -99,9 +129,18 @@ LIBTOOL_WANTED_VERSION=1.4.2
|
|||||||
# glibtool, with 'libtool' being something completely different.
|
# glibtool, with 'libtool' being something completely different.
|
||||||
libtool=`findtool glibtool 2>/dev/null`
|
libtool=`findtool glibtool 2>/dev/null`
|
||||||
if test ! -x "$libtool"; then
|
if test ! -x "$libtool"; then
|
||||||
libtool=`findtool libtool`
|
libtool=`findtool ${LIBTOOL:-libtool}`
|
||||||
fi
|
fi
|
||||||
lt_pversion=`$libtool --version 2>/dev/null|head -1|sed -e 's/^[^0-9]*//g' -e 's/[- ].*//'`
|
|
||||||
|
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
|
||||||
|
|
||||||
|
lt_pversion=`$libtool --version 2>/dev/null|head -n 1|sed -e 's/^[^0-9]*//g' -e 's/[- ].*//'`
|
||||||
if test -z "$lt_pversion"; then
|
if test -z "$lt_pversion"; then
|
||||||
echo "buildconf: libtool not found."
|
echo "buildconf: libtool not found."
|
||||||
echo " You need libtool version $LIBTOOL_WANTED_VERSION or newer installed"
|
echo " You need libtool version $LIBTOOL_WANTED_VERSION or newer installed"
|
||||||
@@ -138,10 +177,17 @@ fi
|
|||||||
|
|
||||||
echo "buildconf: libtool version $lt_version (ok)"
|
echo "buildconf: libtool version $lt_version (ok)"
|
||||||
|
|
||||||
|
if test -f "$libtoolize"; then
|
||||||
|
echo "buildconf: libtoolize found"
|
||||||
|
else
|
||||||
|
echo "buildconf: libtoolize not found. Weird libtool installation!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
#--------------------------------------------------------------------------
|
#--------------------------------------------------------------------------
|
||||||
# m4 check
|
# m4 check
|
||||||
#
|
#
|
||||||
m4=`${M4:-m4} --version 2>/dev/null|head -1`;
|
m4=`${M4:-m4} --version 2>/dev/null|head -n 1`;
|
||||||
m4_version=`echo $m4 | sed -e 's/^.* \([0-9]\)/\1/' -e 's/[a-z]* *$//'`
|
m4_version=`echo $m4 | sed -e 's/^.* \([0-9]\)/\1/' -e 's/[a-z]* *$//'`
|
||||||
|
|
||||||
if { echo $m4 | grep "GNU" >/dev/null 2>&1; } then
|
if { echo $m4 | grep "GNU" >/dev/null 2>&1; } then
|
||||||
@@ -151,33 +197,42 @@ else
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
#--------------------------------------------------------------------------
|
||||||
|
# perl check
|
||||||
|
#
|
||||||
|
PERL=`findtool ${PERL:-perl}`
|
||||||
|
|
||||||
# ------------------------------------------------------------
|
# ------------------------------------------------------------
|
||||||
|
|
||||||
# run the correct scripts now
|
# run the correct scripts now
|
||||||
|
|
||||||
echo "buildconf: running libtoolize"
|
echo "buildconf: running libtoolize"
|
||||||
${LIBTOOLIZE:-libtoolize} --copy --automake --force || die "The libtool command failed"
|
$libtoolize --copy --automake --force || die "The libtoolize command failed"
|
||||||
echo "buildconf: running aclocal"
|
echo "buildconf: running aclocal"
|
||||||
${ACLOCAL:-aclocal} $ACLOCAL_FLAGS || die "The aclocal command line failed"
|
${ACLOCAL:-aclocal} $ACLOCAL_FLAGS || die "The aclocal command line failed"
|
||||||
|
if test -n "$PERL"; then
|
||||||
echo "buildconf: running aclocal hack to convert all mv to mv -f"
|
echo "buildconf: running aclocal hack to convert all mv to mv -f"
|
||||||
perl -i.bak -pe 's/\bmv +([^-\s])/mv -f $1/g' aclocal.m4
|
$PERL -i.bak -pe 's/\bmv +([^-\s])/mv -f $1/g' aclocal.m4
|
||||||
|
else
|
||||||
|
echo "buildconf: perl not found"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
echo "buildconf: running autoheader"
|
echo "buildconf: running autoheader"
|
||||||
${AUTOHEADER:-autoheader} || die "The autoheader command failed"
|
${AUTOHEADER:-autoheader} || die "The autoheader command failed"
|
||||||
|
echo "buildconf: cp lib/config.h.in src/config.h.in"
|
||||||
|
cp lib/config.h.in src/config.h.in
|
||||||
echo "buildconf: running autoconf"
|
echo "buildconf: running autoconf"
|
||||||
${AUTOCONF:-autoconf} || die "The autoconf command failed"
|
${AUTOCONF:-autoconf} || die "The autoconf command failed"
|
||||||
|
|
||||||
if test -d ares; then
|
if test -d ares; then
|
||||||
cd ares
|
cd ares
|
||||||
echo "buildconf: running aclocal in the ares directory"
|
echo "buildconf: running in ares"
|
||||||
${ACLOCAL:-aclocal} $ACLOCAL_FLAGS || die "The ares aclocal command failed"
|
./buildconf
|
||||||
echo "buildconf: running autoconf in the ares directory"
|
|
||||||
${AUTOCONF:-autoconf} || die "The ares autoconf command failed"
|
|
||||||
cd ..
|
cd ..
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "buildconf: running automake"
|
echo "buildconf: running automake"
|
||||||
${AUTOMAKE:-automake} -a || die "The automake command failed"
|
${AUTOMAKE:-automake} -a -c || die "The automake command failed"
|
||||||
|
|
||||||
echo "buildconf: OK"
|
echo "buildconf: OK"
|
||||||
exit 0
|
exit 0
|
||||||
|
|||||||
@@ -7,9 +7,6 @@ REM create ca-bundle.h
|
|||||||
echo /* This file is generated automatically */ >lib\ca-bundle.h
|
echo /* This file is generated automatically */ >lib\ca-bundle.h
|
||||||
echo #define CURL_CA_BUNDLE getenv("CURL_CA_BUNDLE") >>lib\ca-bundle.h
|
echo #define CURL_CA_BUNDLE getenv("CURL_CA_BUNDLE") >>lib\ca-bundle.h
|
||||||
|
|
||||||
REM create getdate.c
|
|
||||||
copy lib\getdate.c.cvs lib\getdate.c
|
|
||||||
|
|
||||||
REM create hugehelp.c
|
REM create hugehelp.c
|
||||||
copy src\hugehelp.c.cvs src\hugehelp.c
|
copy src\hugehelp.c.cvs src\hugehelp.c
|
||||||
|
|
||||||
|
|||||||
1009
configure.ac
1009
configure.ac
File diff suppressed because it is too large
Load Diff
@@ -19,7 +19,8 @@ Available values for OPTION include:
|
|||||||
--ca ca bundle install path
|
--ca ca bundle install path
|
||||||
--cc compiler
|
--cc compiler
|
||||||
--cflags pre-processor and compiler flags
|
--cflags pre-processor and compiler flags
|
||||||
--feature newline separated list of enabled features
|
--features newline separated list of enabled features
|
||||||
|
--protocols newline separated list of enabled protocols
|
||||||
--help display this help and exit
|
--help display this help and exit
|
||||||
--libs library linking information
|
--libs library linking information
|
||||||
--prefix curl install prefix
|
--prefix curl install prefix
|
||||||
@@ -45,19 +46,22 @@ while test $# -gt 0; do
|
|||||||
|
|
||||||
case "$1" in
|
case "$1" in
|
||||||
--ca)
|
--ca)
|
||||||
echo @CURL_CA_BUNDLE@
|
echo "@CURL_CA_BUNDLE@"
|
||||||
;;
|
;;
|
||||||
|
|
||||||
--cc)
|
--cc)
|
||||||
echo @CC@
|
echo "@CC@"
|
||||||
;;
|
;;
|
||||||
|
|
||||||
--prefix)
|
--prefix)
|
||||||
echo $prefix
|
echo "$prefix"
|
||||||
;;
|
;;
|
||||||
|
|
||||||
--feature)
|
--feature|--features)
|
||||||
if test "@OPENSSL_ENABLED@" = "1"; then
|
if test "@USE_SSLEAY@" = "1"; then
|
||||||
|
echo "SSL"
|
||||||
|
NTLM=1 # OpenSSL implies NTLM
|
||||||
|
elif test -n "@USE_GNUTLS@"; then
|
||||||
echo "SSL"
|
echo "SSL"
|
||||||
fi
|
fi
|
||||||
if test "@KRB4_ENABLED@" = "1"; then
|
if test "@KRB4_ENABLED@" = "1"; then
|
||||||
@@ -69,32 +73,50 @@ while test $# -gt 0; do
|
|||||||
if test "@HAVE_LIBZ@" = "1"; then
|
if test "@HAVE_LIBZ@" = "1"; then
|
||||||
echo "libz"
|
echo "libz"
|
||||||
fi
|
fi
|
||||||
if test "@CURL_DISABLE_HTTP@" = "1"; then
|
|
||||||
echo "HTTP-disabled"
|
|
||||||
fi
|
|
||||||
if test "@CURL_DISABLE_FTP@" = "1"; then
|
|
||||||
echo "FTP-disabled"
|
|
||||||
fi
|
|
||||||
if test "@CURL_DISABLE_GOPHER@" = "1"; then
|
|
||||||
echo "GOPHER-disabled"
|
|
||||||
fi
|
|
||||||
if test "@CURL_DISABLE_FILE@" = "1"; then
|
|
||||||
echo "FILE-disabled"
|
|
||||||
fi
|
|
||||||
if test "@CURL_DISABLE_TELNET@" = "1"; then
|
|
||||||
echo "TELNET-disabled"
|
|
||||||
fi
|
|
||||||
if test "@CURL_DISABLE_LDAP@" = "1"; then
|
|
||||||
echo "LDAP-disabled"
|
|
||||||
fi
|
|
||||||
if test "@CURL_DISABLE_DICT@" = "1"; then
|
|
||||||
echo "DICT-disabled"
|
|
||||||
fi
|
|
||||||
if test "@HAVE_ARES@" = "1"; then
|
if test "@HAVE_ARES@" = "1"; then
|
||||||
echo "AsynchDNS"
|
echo "AsynchDNS"
|
||||||
fi
|
fi
|
||||||
|
if test "@IDN_ENABLED@" = "1"; then
|
||||||
|
echo "IDN"
|
||||||
|
fi
|
||||||
|
if test "@USE_WINDOWS_SSPI@" = "1"; then
|
||||||
|
echo "SSPI"
|
||||||
|
NTLM=1
|
||||||
|
fi
|
||||||
|
if test "$NTLM" = "1"; then
|
||||||
|
echo "NTLM"
|
||||||
|
fi
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
--protocols)
|
||||||
|
if test "@CURL_DISABLE_HTTP@" != "1"; then
|
||||||
|
echo "HTTP"
|
||||||
|
if test "@USE_SSLEAY@" = "1"; then
|
||||||
|
echo "HTTPS"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if test "@CURL_DISABLE_FTP@" != "1"; then
|
||||||
|
echo "FTP"
|
||||||
|
if test "@USE_SSLEAY@" = "1"; then
|
||||||
|
echo "FTPS"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if test "@CURL_DISABLE_FILE@" != "1"; then
|
||||||
|
echo "FILE"
|
||||||
|
fi
|
||||||
|
if test "@CURL_DISABLE_TELNET@" != "1"; then
|
||||||
|
echo "TELNET"
|
||||||
|
fi
|
||||||
|
if test "@CURL_DISABLE_LDAP@" != "1"; then
|
||||||
|
echo "LDAP"
|
||||||
|
fi
|
||||||
|
if test "@CURL_DISABLE_DICT@" != "1"; then
|
||||||
|
echo "DICT"
|
||||||
|
fi
|
||||||
|
if test "@CURL_DISABLE_TFTP@" != "1"; then
|
||||||
|
echo "TFTP"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
--version)
|
--version)
|
||||||
echo libcurl @VERSION@
|
echo libcurl @VERSION@
|
||||||
exit 0
|
exit 0
|
||||||
@@ -123,8 +145,7 @@ while test $# -gt 0; do
|
|||||||
|
|
||||||
*)
|
*)
|
||||||
echo "unknown option: $1"
|
echo "unknown option: $1"
|
||||||
usage
|
usage 1
|
||||||
exit 1
|
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
shift
|
shift
|
||||||
|
|||||||
@@ -20,6 +20,13 @@
|
|||||||
)
|
)
|
||||||
"Curl C Programming Style")
|
"Curl C Programming Style")
|
||||||
|
|
||||||
|
(defun curl-code-cleanup ()
|
||||||
|
"no docs"
|
||||||
|
(interactive)
|
||||||
|
(untabify (point-min) (point-max))
|
||||||
|
(delete-trailing-whitespace)
|
||||||
|
)
|
||||||
|
|
||||||
;; Customizations for all of c-mode, c++-mode, and objc-mode
|
;; Customizations for all of c-mode, c++-mode, and objc-mode
|
||||||
(defun curl-c-mode-common-hook ()
|
(defun curl-c-mode-common-hook ()
|
||||||
"Curl C mode hook"
|
"Curl C mode hook"
|
||||||
@@ -28,12 +35,12 @@
|
|||||||
(setq tab-width 8
|
(setq tab-width 8
|
||||||
indent-tabs-mode nil ; Use spaces. Not tabs.
|
indent-tabs-mode nil ; Use spaces. Not tabs.
|
||||||
comment-column 40
|
comment-column 40
|
||||||
c-font-lock-extra-types (append '("bool" "CURL" "CURLcode" "ssize_t" "size_t" "socklen_t" "fd_set" "time_t" "curl_off_t" "curl_socket_t" "in_addr_t" "CURLSHcode" "CURLMcode"))
|
c-font-lock-extra-types (append '("bool" "CURL" "CURLcode" "ssize_t" "size_t" "socklen_t" "fd_set" "time_t" "curl_off_t" "curl_socket_t" "in_addr_t" "CURLSHcode" "CURLMcode" "Curl_addrinfo"))
|
||||||
)
|
)
|
||||||
;; keybindings for C, C++, and Objective-C. We can put these in
|
;; keybindings for C, C++, and Objective-C. We can put these in
|
||||||
;; c-mode-base-map because of inheritance ...
|
;; c-mode-base-map because of inheritance ...
|
||||||
(define-key c-mode-base-map "\M-q" 'c-fill-paragraph)
|
(define-key c-mode-base-map "\M-q" 'c-fill-paragraph)
|
||||||
(define-key c-mode-base-map "\M-m" 'delete-trailing-whitespace)
|
(define-key c-mode-base-map "\M-m" 'curl-code-cleanup)
|
||||||
(setq c-recognize-knr-p nil)
|
(setq c-recognize-knr-p nil)
|
||||||
;;; (add-hook 'write-file-hooks 'delete-trailing-whitespace t)
|
;;; (add-hook 'write-file-hooks 'delete-trailing-whitespace t)
|
||||||
(setq show-trailing-whitespace t)
|
(setq show-trailing-whitespace t)
|
||||||
|
|||||||
@@ -17,22 +17,31 @@ archives, but must be downloaded and installed separately.
|
|||||||
|
|
||||||
Ada95
|
Ada95
|
||||||
|
|
||||||
Writtten by Andreas Almroth.
|
Writtten by Andreas Almroth
|
||||||
http://www.almroth.com/adacurl/index.html
|
http://www.almroth.com/adacurl/index.html
|
||||||
|
|
||||||
Basic
|
Basic
|
||||||
|
|
||||||
ScriptBasic bindings to libcurl. Writtten by Peter Verhas.
|
ScriptBasic bindings to libcurl. Writtten by Peter Verhas
|
||||||
http://scriptbasic.com/
|
http://scriptbasic.com/
|
||||||
|
|
||||||
|
C
|
||||||
|
libcurl is a C library in itself!
|
||||||
|
http://curl.haxx.se/libcurl/
|
||||||
|
|
||||||
C++
|
C++
|
||||||
|
|
||||||
Written by Jean-Philippe Barrette-LaPierre.
|
Written by Jean-Philippe Barrette-LaPierre
|
||||||
http://www.sourceforge.net/projects/curlpp
|
http://rrette.com/curlpp.html
|
||||||
|
|
||||||
|
Ch
|
||||||
|
|
||||||
|
Written by Stephen Nestinger and Jonathan Rogado
|
||||||
|
http://chcurl.sourceforge.net/
|
||||||
|
|
||||||
Cocoa
|
Cocoa
|
||||||
|
|
||||||
Written by Dan Wood.
|
Written by Dan Wood
|
||||||
http://curlhandle.sourceforge.net/
|
http://curlhandle.sourceforge.net/
|
||||||
|
|
||||||
D
|
D
|
||||||
@@ -42,26 +51,49 @@ D
|
|||||||
|
|
||||||
Dylan
|
Dylan
|
||||||
|
|
||||||
Written by Chris Double.
|
Written by Chris Double
|
||||||
http://dylanlibs.sourceforge.net/
|
http://dylanlibs.sourceforge.net/
|
||||||
|
|
||||||
Euphoria
|
Euphoria
|
||||||
|
|
||||||
Written by Ray Smith.
|
Written by Ray Smith
|
||||||
http://rays-web.com/eulibcurl.htm
|
http://rays-web.com/eulibcurl.htm
|
||||||
|
|
||||||
Ferite
|
Ferite
|
||||||
|
Written by Paul Querna
|
||||||
http://www.ferite.org/
|
http://www.ferite.org/
|
||||||
|
|
||||||
|
Gambas
|
||||||
|
http://gambas.sourceforge.net
|
||||||
|
|
||||||
|
glib/GTK+
|
||||||
|
Written by Richard Atterer
|
||||||
|
http://atterer.net/glibcurl/
|
||||||
|
|
||||||
Java
|
Java
|
||||||
|
|
||||||
Written by Daniel Stenberg.
|
Maintained by Vic Hanson
|
||||||
http://curl.haxx.se/libcurl/java/
|
http://curl.haxx.se/libcurl/java/
|
||||||
|
|
||||||
|
Lisp
|
||||||
|
|
||||||
|
Written by Liam Healy
|
||||||
|
http://common-lisp.net/project/cl-curl/
|
||||||
|
|
||||||
Lua
|
Lua
|
||||||
|
|
||||||
Written by Steve Dekorte.
|
LuaCURL Written by Alexander Marinov
|
||||||
http://curl.haxx.se/libcurl/lua/
|
http://luacurl.luaforge.net/
|
||||||
|
|
||||||
|
Mono
|
||||||
|
|
||||||
|
Written by Jeffrey Phillips
|
||||||
|
http://forge.novell.com/modules/xfmod/project/?libcurl-mono
|
||||||
|
|
||||||
|
.NET
|
||||||
|
|
||||||
|
libcurl-net Written by Jeffrey Phillips
|
||||||
|
http://sourceforge.net/projects/libcurl-net/
|
||||||
|
|
||||||
Object-Pascal
|
Object-Pascal
|
||||||
|
|
||||||
@@ -70,7 +102,7 @@ Object-Pascal
|
|||||||
|
|
||||||
O'Caml
|
O'Caml
|
||||||
|
|
||||||
Written by Lars Nilsson.
|
Written by Lars Nilsson
|
||||||
http://sourceforge.net/projects/ocurl/
|
http://sourceforge.net/projects/ocurl/
|
||||||
|
|
||||||
Pascal
|
Pascal
|
||||||
@@ -80,40 +112,64 @@ Pascal
|
|||||||
|
|
||||||
Perl
|
Perl
|
||||||
|
|
||||||
Maintained by Cris Bailiff.
|
Maintained by Cris Bailiff
|
||||||
http://curl.haxx.se/libcurl/perl/
|
http://curl.haxx.se/libcurl/perl/
|
||||||
|
|
||||||
PHP
|
PHP
|
||||||
|
|
||||||
Written by Sterling Hughes.
|
Written by Sterling Hughes
|
||||||
http://curl.haxx.se/libcurl/php/
|
http://curl.haxx.se/libcurl/php/
|
||||||
|
|
||||||
PostgreSQL
|
PostgreSQL
|
||||||
|
|
||||||
Written by Gian Paolo Ciceri.
|
Written by Gian Paolo Ciceri
|
||||||
http://gborg.postgresql.org/project/pgcurl/projdisplay.php
|
http://gborg.postgresql.org/project/pgcurl/projdisplay.php
|
||||||
|
|
||||||
Python
|
Python
|
||||||
|
|
||||||
Written by Kjetil Jacobsen.
|
PycURL is written by Kjetil Jacobsen
|
||||||
http://pycurl.sourceforge.net/
|
http://pycurl.sourceforge.net/
|
||||||
|
|
||||||
|
R
|
||||||
|
|
||||||
|
RCurl is written by Duncan Temple Lang
|
||||||
|
http://www.omegahat.org/RCurl/
|
||||||
|
|
||||||
Rexx
|
Rexx
|
||||||
|
|
||||||
Written Mark Hessling.
|
Written Mark Hessling
|
||||||
http://rexxcurl.sourceforge.net/
|
http://rexxcurl.sourceforge.net/
|
||||||
|
|
||||||
Ruby
|
Ruby
|
||||||
|
|
||||||
Written by Hirotaka Matsuyuki.
|
Written by Hirotaka Matsuyuki
|
||||||
http://www.d1.dion.ne.jp/~matuyuki/ruby.html
|
http://www.d1.dion.ne.jp/~matuyuki/ruby.html
|
||||||
|
|
||||||
Scheme
|
Scheme
|
||||||
|
|
||||||
Bigloo binding written by Kirill Lisovsky.
|
Bigloo binding written by Kirill Lisovsky
|
||||||
http://curl.haxx.se/libcurl/scheme/
|
http://curl.haxx.se/libcurl/scheme/
|
||||||
|
|
||||||
|
S-Lang
|
||||||
|
|
||||||
|
S-Lang binding written by John E Davis
|
||||||
|
http://www.jedsoft.org/slang/modules/curl.html
|
||||||
|
|
||||||
Tcl
|
Tcl
|
||||||
|
|
||||||
Written by Andr<64>s Garc<72>a.
|
Tclcurl is written by Andr<64>s Garc<72>a
|
||||||
http://personal1.iddeo.es/andresgarci/tclcurl/english/docs.html
|
http://personal1.iddeo.es/andresgarci/tclcurl/english/docs.html
|
||||||
|
|
||||||
|
Visual Basic
|
||||||
|
|
||||||
|
libcurl-vb is written by Jeffrey Phillips
|
||||||
|
http://sourceforge.net/projects/libcurl-vb/
|
||||||
|
|
||||||
|
Q
|
||||||
|
The libcurl module is part of the default install
|
||||||
|
http://q-lang.sourceforge.net/
|
||||||
|
|
||||||
|
wxWidgets
|
||||||
|
|
||||||
|
Written by Casey O'Donnell
|
||||||
|
http://homepage.mac.com/codonnell/wxcurldav/
|
||||||
|
|||||||
@@ -4,11 +4,11 @@
|
|||||||
| (__| |_| | _ <| |___
|
| (__| |_| | _ <| |___
|
||||||
\___|\___/|_| \_\_____|
|
\___|\___/|_| \_\_____|
|
||||||
|
|
||||||
To Think About When Contributing Source Code
|
When Contributing Source Code
|
||||||
|
|
||||||
This document is intended to offer some simple guidelines that can be useful
|
This document is intended to offer guidelines that can be useful to keep in
|
||||||
to keep in mind when you decide to contribute to the project. This concerns
|
mind when you decide to contribute to the project. This concerns new features
|
||||||
new features as well as corrections to existing flaws or bugs.
|
as well as corrections to existing flaws or bugs.
|
||||||
|
|
||||||
Join the Community
|
Join the Community
|
||||||
|
|
||||||
@@ -20,13 +20,26 @@ Join the Community
|
|||||||
The License Issue
|
The License Issue
|
||||||
|
|
||||||
When contributing with code, you agree to put your changes and new code under
|
When contributing with code, you agree to put your changes and new code under
|
||||||
the same license curl and libcurl is already using unless stated otherwise.
|
the same license curl and libcurl is already using unless stated and agreed
|
||||||
|
otherwise.
|
||||||
|
|
||||||
If you add a larger piece of code, you can opt to make that file or set of
|
If you add a larger piece of code, you can opt to make that file or set of
|
||||||
files to use a different license as long as they don't enforce any changes to
|
files to use a different license as long as they don't enforce any changes to
|
||||||
the rest of the package and they make sense. Such "separate parts" can not be
|
the rest of the package and they make sense. Such "separate parts" can not be
|
||||||
GPL (as we don't want the GPL virus to attack users of libcurl) but they must
|
GPL licensed (as we don't want copyleft to affect users of libcurl) but they
|
||||||
use "GPL compatible" licenses.
|
must use "GPL compatible" licenses (as we want to allow users to use libcurl
|
||||||
|
properly in GPL licensed environments).
|
||||||
|
|
||||||
|
When changing existing source code, you do not alter the copyright of the
|
||||||
|
original file(s). The copyright will still be owned by the original
|
||||||
|
creator(s) or those who have been assigned copyright by the original
|
||||||
|
author(s).
|
||||||
|
|
||||||
|
By submitting a patch to the curl project, you are assumed to have the right
|
||||||
|
to the code and to be allowed by your employer or whatever to hand over that
|
||||||
|
patch/code to us. We will credit you for your changes as far as possible, to
|
||||||
|
give credit but also to keep a trace back to who made what changes. Please
|
||||||
|
always provide us with your full real name when contributing!
|
||||||
|
|
||||||
What To Read
|
What To Read
|
||||||
|
|
||||||
@@ -138,15 +151,15 @@ How To Make a Patch
|
|||||||
|
|
||||||
If you have modified a single file, try something like:
|
If you have modified a single file, try something like:
|
||||||
|
|
||||||
diff -u undmodified-file.c my-changed-one.c > my-fixes.diff
|
diff -u unmodified-file.c my-changed-one.c > my-fixes.diff
|
||||||
|
|
||||||
If you have modified several files, possibly in different directories, you
|
If you have modified several files, possibly in different directories, you
|
||||||
can use diff recursively:
|
can use diff recursively:
|
||||||
|
|
||||||
diff -ur curl-original-dir curl-modfied-sources-dir > my-fixes.diff
|
diff -ur curl-original-dir curl-modified-sources-dir > my-fixes.diff
|
||||||
|
|
||||||
The GNU diff and GNU patch tools exist for virtually all platforms, including
|
The GNU diff and GNU patch tools exist for virtually all platforms, including
|
||||||
all kinds of unixes and Windows:
|
all kinds of Unixes and Windows:
|
||||||
|
|
||||||
For unix-like operating systems:
|
For unix-like operating systems:
|
||||||
|
|
||||||
|
|||||||
226
docs/DISTRO-DILEMMA
Normal file
226
docs/DISTRO-DILEMMA
Normal file
@@ -0,0 +1,226 @@
|
|||||||
|
Date: October 27, 2005
|
||||||
|
Author: Daniel Stenberg <daniel@haxx.se>
|
||||||
|
URL: http://curl.haxx.se/legal/distro-dilemma.html
|
||||||
|
|
||||||
|
Condition
|
||||||
|
|
||||||
|
This document is written to describe the situation as it is right
|
||||||
|
now. libcurl 7.15.0 is currently the latest version available. Things may (or
|
||||||
|
perhaps will) of course change in the future.
|
||||||
|
|
||||||
|
This document reflects my view and understanding of these things. Please tell
|
||||||
|
me where and how you think I'm wrong, and I'll try to correct my mistakes.
|
||||||
|
|
||||||
|
Background
|
||||||
|
|
||||||
|
The Free Software Foundation has deemed the Original BSD license[1] to be
|
||||||
|
"incompatible"[2] with GPL[3]. I'd rather say it is the other way around, but
|
||||||
|
the point is the same: if you distribute a binary version of a GPL program,
|
||||||
|
it MUST NOT be linked with any Original BSD-licensed parts or
|
||||||
|
libraries. Doing so will violate the GPL license. For a long time, very many
|
||||||
|
GPL licensed programs have avoided this license mess by adding an
|
||||||
|
exception[8] to their license. And many others have just closed their eyes
|
||||||
|
for this problem.
|
||||||
|
|
||||||
|
libcurl is MIT-style[4] licensed - how on earth did this dilemma fall onto
|
||||||
|
our plates?
|
||||||
|
|
||||||
|
libcurl is only a little library. libcurl can be built to use OpenSSL for its
|
||||||
|
SSL/TLS capabilities. OpenSSL is basically Original BSD licensed[5].
|
||||||
|
|
||||||
|
If libcurl built to use OpenSSL is used by a GPL-licensed application and you
|
||||||
|
decide to distribute a binary version of it (Linux distros - for example -
|
||||||
|
tend to), you have a clash. GPL vs Original BSD.
|
||||||
|
|
||||||
|
This dilemma is not libcurl-specific nor is it specific to any particular
|
||||||
|
Linux distro. (This article mentions and refers to Debian several times, but
|
||||||
|
only because Debian seems to be the only Linux distro to have faced this
|
||||||
|
issue yet since no other distro is shipping libcurl built with two SSL
|
||||||
|
libraries.)
|
||||||
|
|
||||||
|
Part of the Operating System
|
||||||
|
|
||||||
|
This would not be a problem if the used lib would be considered part of the
|
||||||
|
underlying operating system, as then the GPL license has an exception
|
||||||
|
clause[6] that allows applications to use such libs without having to be
|
||||||
|
allowed to distribute it or its sources. Possibly some distros will claim
|
||||||
|
that OpenSSL is part of their operating system.
|
||||||
|
|
||||||
|
Debian does however not take this stance and has officially(?) claimed that
|
||||||
|
OpenSSL is not a required part of the Debian operating system
|
||||||
|
|
||||||
|
Debian-legal
|
||||||
|
|
||||||
|
In August 2004 I figured I should start pulling people's attention to this to
|
||||||
|
see if anyone has any bright ideas or if they would dismiss my worries based
|
||||||
|
on some elegant writing I had missed somewhere:
|
||||||
|
|
||||||
|
My post to debian-legal on August 12 2004:
|
||||||
|
|
||||||
|
http://lists.debian.org/debian-legal/2004/08/msg00279.html
|
||||||
|
|
||||||
|
Several people agreed then that this is a known and rather big problem, but
|
||||||
|
the following discussion didn't result in much.
|
||||||
|
|
||||||
|
GnuTLS
|
||||||
|
|
||||||
|
With the release of libcurl 7.14.0 (May 2005), it can now get built to use
|
||||||
|
GnuTLS instead of OpenSSL. GnuTLS is a LGPL[7] licensed library that offers a
|
||||||
|
matching set of features as OpenSSL does. Now, you can build and distribute
|
||||||
|
an SSL capable libcurl without including any Original BSD licensed code.
|
||||||
|
|
||||||
|
I believe Debian is the first distro to provide libcurl/GnutTLS packages.
|
||||||
|
|
||||||
|
GnuTLS vs OpenSSL
|
||||||
|
|
||||||
|
While these two libraries offer similar features, they are not equal. Both
|
||||||
|
libraries have features the other one lacks. libcurl does not (yet) offer a
|
||||||
|
standardized stable ABI if you decide to switch from using libcurl-openssl to
|
||||||
|
libcurl-gnutls or vice versa. The GnuTLS support is very recent in libcurl
|
||||||
|
and it has not been tested nor used very extensively, while the OpenSSL
|
||||||
|
equivalent code has been used and thus matured for more than seven (7) years.
|
||||||
|
|
||||||
|
In August 2005, the debian-devel mailing list discovered the license issue as
|
||||||
|
a GPL licensed application wanted SSL capabilities from libcurl and thus was
|
||||||
|
forced to use the GnuTLS powered libcurl. For a reason that is unknown to me,
|
||||||
|
the application authors didn't want to or was unable to add an exception to
|
||||||
|
their GPL license. Alas, the license problem hit the fan again.
|
||||||
|
|
||||||
|
GnuTLS
|
||||||
|
- LGPL licensened
|
||||||
|
- supports SRP
|
||||||
|
- lacks SSLv2 support
|
||||||
|
- lacks MD2 support (used by at least some CA certs)
|
||||||
|
|
||||||
|
OpenSSL
|
||||||
|
- Original BSD licensened
|
||||||
|
- lacks SRP
|
||||||
|
- supports SSLv2
|
||||||
|
- older and more widely used
|
||||||
|
|
||||||
|
The Better License, Original BSD or LGPL?
|
||||||
|
|
||||||
|
It isn't obvious or without debate to any objective interested party that
|
||||||
|
either of these licenses are the "better" or even the "preferred" one in a
|
||||||
|
generic situation.
|
||||||
|
|
||||||
|
Instead, I think we should accept the fact that the SSL/TLS libraries and
|
||||||
|
their different licenses will fit different applications and their authors
|
||||||
|
differently depending on the applications' licenses and their general usage
|
||||||
|
pattern (considering how LGPL libraries for example can be burdensome for
|
||||||
|
embedded systems usage).
|
||||||
|
|
||||||
|
In Debian land, there seems to be a common opinion that LGPL is "maximally
|
||||||
|
compatible" with apps while Original BSD is not. Like this:
|
||||||
|
|
||||||
|
http://lists.debian.org/debian-devel/2005/09/msg01417.html
|
||||||
|
|
||||||
|
More SSL Libraries
|
||||||
|
|
||||||
|
In libcurl, there's no stopping us here. There are at least a few more Open
|
||||||
|
Source/Free SSL/TLS libraries and we would very much like to support them as
|
||||||
|
well, to offer application authors an even wider scope of choice.
|
||||||
|
|
||||||
|
Application Angle of this Problem
|
||||||
|
|
||||||
|
libcurl is built to use one SSL/TLS library. It uses a single fixed name (by
|
||||||
|
default), and applications are built/linked to use that single lib. Replacing
|
||||||
|
one libcurl instance with another one that uses the other SSL/TLS library
|
||||||
|
might break one or more applications (due to ABI differences and/or different
|
||||||
|
feature set). You want your application to use the libcurl it was built for.
|
||||||
|
|
||||||
|
Project cURL Angle of this Problem
|
||||||
|
|
||||||
|
We distribute libcurl and everyone may build libcurl with either library. At
|
||||||
|
their choice. This problem is not directly a problem of ours. It merely
|
||||||
|
affects users - GPL application authors only - of our lib as it comes
|
||||||
|
included and delivered on some distros.
|
||||||
|
|
||||||
|
libcurl has different ABI when built with different SSL/TLS libraries due to
|
||||||
|
two reasons:
|
||||||
|
|
||||||
|
1. No one has worked on fixing this. The mutex/lock callbacks should be set
|
||||||
|
with a generic libcurl function that should use the proper underlying
|
||||||
|
functions.
|
||||||
|
|
||||||
|
2. The CURLOPT_SSL_CTX_FUNCTION option is not possible to "emulate" on GnuTLS
|
||||||
|
but simply requires OpenSSL.
|
||||||
|
|
||||||
|
Distro Angle of this Problem
|
||||||
|
|
||||||
|
A distro can provide separate libcurls built with different SSL/TLS libraries
|
||||||
|
to work around this, but at least Debian seems to be very hostile against
|
||||||
|
such an approach, probably since it makes things like devel packages for the
|
||||||
|
different libs collide since they would provide the same include files and
|
||||||
|
man pages etc.
|
||||||
|
|
||||||
|
Fixing the Only Problem
|
||||||
|
|
||||||
|
The only problem is thus for distributions that want to offer libcurl
|
||||||
|
versions built with more than one SSL/TLS library.
|
||||||
|
|
||||||
|
Debian is now (since mid September 2005) providing two different devel
|
||||||
|
packages, one for libcurl built with OpenSSL and one built with GnuTLS. They
|
||||||
|
use different .so names and can this both be installed in a single system
|
||||||
|
simultaneously. This has previously been said as a transitional system not
|
||||||
|
desired to keep in the long run.
|
||||||
|
|
||||||
|
Since multiple libcurl binaries using different names are ruled out, we need
|
||||||
|
to come up with a way to have one single libcurl that someone uses different
|
||||||
|
underlying libraries. The best(?) approach currently suggested involves this:
|
||||||
|
|
||||||
|
A new intermediate library (named lib2 so far in the discussions) with the
|
||||||
|
single purpose of providing libcurl with SSL/TLS capabilities. It would have
|
||||||
|
a unified API and ABI no matter what underlying library it would use.
|
||||||
|
|
||||||
|
There would be one lib2 binary provided for each supported SSL/TLS library.
|
||||||
|
For example: lib2-openssl, lib2-gnutls, lib2-yassl, lib2-matrixssl and
|
||||||
|
lib2-nossl. Yes, take note of the last one that provides the lib2 ABI but
|
||||||
|
that lacks the actual powers.
|
||||||
|
|
||||||
|
When libcurl is built and linked, it will be linked against a lib2 with the
|
||||||
|
set ABI.
|
||||||
|
|
||||||
|
When you link an app against libcurl, it would also need to provide one of
|
||||||
|
the (many) lib2 libs to decide what approach that fits the app. An app that
|
||||||
|
doesn't want SSL at all would still need to link with the lib2-nossl lib.
|
||||||
|
|
||||||
|
GPL apps can pick the lib2-gnutls, others may pick the lib2-openssl.
|
||||||
|
|
||||||
|
This concept works equally well both for shared and static libraries.
|
||||||
|
|
||||||
|
A positive side effect of this approach could be a more generic "de facto"
|
||||||
|
standard API for SSL/TLS libraries.
|
||||||
|
|
||||||
|
When Will This Happen
|
||||||
|
|
||||||
|
Note again that this is not a problem in curl, it doesn't solve any actual
|
||||||
|
technical problems in our project. Don't hold your breath for this to happen
|
||||||
|
very soon (if at all) unless you step forward and contribute.
|
||||||
|
|
||||||
|
The suggestion that is outlined above is still only a suggestion. Feel free
|
||||||
|
to bring a better idea!
|
||||||
|
|
||||||
|
Also, to keep in mind: I don't want this new concept to have too much of an
|
||||||
|
impact on the existing code. Preferably it should be possible to build the
|
||||||
|
code like today (without the use of lib2), should you decide to ignore the
|
||||||
|
problems outlined in this document.
|
||||||
|
|
||||||
|
Update: Work on this has been initiated by Richard Atterer:
|
||||||
|
|
||||||
|
http://curl.haxx.se/mail/lib-2005-09/0066.html
|
||||||
|
|
||||||
|
Footnotes
|
||||||
|
|
||||||
|
[1] = http://www.xfree86.org/3.3.6/COPYRIGHT2.html#6
|
||||||
|
[2] = http://www.fsf.org/licensing/essays/bsd.html
|
||||||
|
[3] = http://www.fsf.org/licensing/licenses/gpl.html
|
||||||
|
[4] = http://curl.haxx.se/docs/copyright.html
|
||||||
|
[5] = http://www.openssl.org/source/license.html
|
||||||
|
[6] = http://www.fsf.org/licensing/licenses/gpl.html end of section 3
|
||||||
|
[7] = http://www.fsf.org/licensing/licenses/lgpl.html
|
||||||
|
[8] = http://en.wikipedia.org/wiki/OpenSSL_exception
|
||||||
|
|
||||||
|
Feedback/Updates provided by
|
||||||
|
|
||||||
|
Eric Cooper
|
||||||
467
docs/FAQ
467
docs/FAQ
@@ -1,4 +1,4 @@
|
|||||||
Updated: March 16, 2004 (http://curl.haxx.se/docs/faq.html)
|
Updated: November 2, 2005 (http://curl.haxx.se/docs/faq.html)
|
||||||
_ _ ____ _
|
_ _ ____ _
|
||||||
___| | | | _ \| |
|
___| | | | _ \| |
|
||||||
/ __| | | | |_) | |
|
/ __| | | | |_) | |
|
||||||
@@ -10,20 +10,22 @@ FAQ
|
|||||||
1. Philosophy
|
1. Philosophy
|
||||||
1.1 What is cURL?
|
1.1 What is cURL?
|
||||||
1.2 What is libcurl?
|
1.2 What is libcurl?
|
||||||
1.3 What is cURL not?
|
1.3 What is curl not?
|
||||||
1.4 When will you make curl do XXXX ?
|
1.4 When will you make curl do XXXX ?
|
||||||
1.5 Who makes cURL?
|
1.5 Who makes curl?
|
||||||
1.6 What do you get for making cURL?
|
1.6 What do you get for making curl?
|
||||||
1.7 What about CURL from curl.com?
|
1.7 What about CURL from curl.com?
|
||||||
1.8 I have a problem who do I mail?
|
1.8 I have a problem who do I mail?
|
||||||
|
1.9 Where do I buy commercial support for curl?
|
||||||
|
1.10 How many are using curl?
|
||||||
|
|
||||||
2. Install Related Problems
|
2. Install Related Problems
|
||||||
2.1 configure doesn't find OpenSSL even when it is installed
|
2.1 configure doesn't find OpenSSL even when it is installed
|
||||||
2.1.1. native linker doesn't find OpenSSL
|
2.1.1 native linker doesn't find OpenSSL
|
||||||
2.1.2. only the libssl lib is missing
|
2.1.2 only the libssl lib is missing
|
||||||
2.2 Does curl work/build with other SSL libraries?
|
2.2 Does curl work/build with other SSL libraries?
|
||||||
2.3 Where can I find a copy of LIBEAY32.DLL?
|
2.3 Where can I find a copy of LIBEAY32.DLL?
|
||||||
2.4 Does cURL support Socks (RFC 1928) ?
|
2.4 Does curl support Socks (RFC 1928) ?
|
||||||
|
|
||||||
3. Usage Problems
|
3. Usage Problems
|
||||||
3.1 curl: (1) SSL is disabled, https: not supported
|
3.1 curl: (1) SSL is disabled, https: not supported
|
||||||
@@ -41,6 +43,9 @@ FAQ
|
|||||||
3.13 Why does my single/double quotes fail?
|
3.13 Why does my single/double quotes fail?
|
||||||
3.14 Does curl support javascript or pac (automated proxy config)?
|
3.14 Does curl support javascript or pac (automated proxy config)?
|
||||||
3.15 Can I do recursive fetches with curl?
|
3.15 Can I do recursive fetches with curl?
|
||||||
|
3.16 What certificates do I need when I use SSL?
|
||||||
|
3.17 How do I list the root dir of an FTP server?
|
||||||
|
3.18 Can I use curl to send a POST/PUT and not wait for a response?
|
||||||
|
|
||||||
4. Running Problems
|
4. Running Problems
|
||||||
4.1 Problems connecting to SSL servers.
|
4.1 Problems connecting to SSL servers.
|
||||||
@@ -61,6 +66,8 @@ FAQ
|
|||||||
4.10 My HTTP request using HEAD, PUT or DELETE doesn't work!
|
4.10 My HTTP request using HEAD, PUT or DELETE doesn't work!
|
||||||
4.11 Why does my HTTP range requests return the full document?
|
4.11 Why does my HTTP range requests return the full document?
|
||||||
4.12 Why do I get "certificate verify failed" ?
|
4.12 Why do I get "certificate verify failed" ?
|
||||||
|
4.13 Why is curl -R on Windows one hour off?
|
||||||
|
4.14 Redirects work in browser but not with curl!
|
||||||
|
|
||||||
5. libcurl Issues
|
5. libcurl Issues
|
||||||
5.1 Is libcurl thread-safe?
|
5.1 Is libcurl thread-safe?
|
||||||
@@ -70,6 +77,11 @@ FAQ
|
|||||||
5.5 Does CURLOPT_WRITEDATA and CURLOPT_READDATA work on win32 ?
|
5.5 Does CURLOPT_WRITEDATA and CURLOPT_READDATA work on win32 ?
|
||||||
5.6 What about Keep-Alive or persistent connections?
|
5.6 What about Keep-Alive or persistent connections?
|
||||||
5.7 Link errors when building libcurl on Windows!
|
5.7 Link errors when building libcurl on Windows!
|
||||||
|
5.8 libcurl.so.3: open failed: No such file or directory
|
||||||
|
5.9 How does libcurl resolve host names?
|
||||||
|
5.10 How do I prevent libcurl from writing the response to stdout?
|
||||||
|
5.11 How do I make libcurl not receive the whole HTTP response?
|
||||||
|
5.12 Can I make libcurl fake or hide my real IP address?
|
||||||
|
|
||||||
6. License Issues
|
6. License Issues
|
||||||
6.1 I have a GPL program, can I use the libcurl library?
|
6.1 I have a GPL program, can I use the libcurl library?
|
||||||
@@ -78,6 +90,12 @@ FAQ
|
|||||||
6.4 I have a program that uses LGPL libraries, can I use libcurl?
|
6.4 I have a program that uses LGPL libraries, can I use libcurl?
|
||||||
6.5 Can I modify curl/libcurl for my program and keep the changes secret?
|
6.5 Can I modify curl/libcurl for my program and keep the changes secret?
|
||||||
6.6 Can you please change the curl/libcurl license to XXXX?
|
6.6 Can you please change the curl/libcurl license to XXXX?
|
||||||
|
6.7 What are my obligations when using libcurl in my commerical apps?
|
||||||
|
|
||||||
|
7. PHP/CURL Issues
|
||||||
|
7.1 What is PHP/CURL?
|
||||||
|
7.2 Who write PHP/CURL?
|
||||||
|
7.3 Can I perform multiple requests using the same handle?
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
|
|
||||||
@@ -85,24 +103,44 @@ FAQ
|
|||||||
|
|
||||||
1.1 What is cURL?
|
1.1 What is cURL?
|
||||||
|
|
||||||
cURL (or simply just 'curl') is a command line tool for getting or sending
|
cURL is the name of the project. The name is a play on 'Client for URLs',
|
||||||
files using URL syntax. The name is a play on 'Client for URLs', originally
|
originally with URL spelled in uppercase to make it obvious it deals with
|
||||||
with URL spelled in uppercase to make it obvious it deals with URLs. The
|
URLs. The fact it can also be pronounced 'see URL' also helped, it works as
|
||||||
fact it can also be pronounced 'see URL' also helped, it works as an
|
an abbreviation for "Client URL Request Library" or why not the recursive
|
||||||
abbrivation for "Client URL Request Library" or why not the recursive
|
|
||||||
version: "Curl URL Request Library".
|
version: "Curl URL Request Library".
|
||||||
|
|
||||||
Curl supports a range of common Internet protocols, currently including
|
The cURL project produces two products:
|
||||||
HTTP, HTTPS, FTP, FTPS, GOPHER, LDAP, DICT, TELNET and FILE.
|
|
||||||
|
|
||||||
We spell it cURL or just curl. We pronounce it with an initial k sound:
|
libcurl
|
||||||
[kurl].
|
|
||||||
|
|
||||||
NOTE: there are numerous sub-projects and related projects that also use the
|
A free and easy-to-use client-side URL transfer library, supporting FTP,
|
||||||
word curl in the project names in various combinations, but you should take
|
FTPS, HTTP, HTTPS, TELNET, DICT, FILE and LDAP. libcurl supports
|
||||||
|
HTTPS certificates, HTTP POST, HTTP PUT, FTP uploading, kerberos, HTTP
|
||||||
|
form based upload, proxies, cookies, user+password authentication, file
|
||||||
|
transfer resume, http proxy tunneling and more!
|
||||||
|
|
||||||
|
libcurl is highly portable, it builds and works identically on numerous
|
||||||
|
platforms, including Solaris, NetBSD, FreeBSD, OpenBSD, Darwin, HPUX,
|
||||||
|
IRIX, AIX, Tru64, Linux, UnixWare, HURD, Windows, Amiga, OS/2, BeOs, Mac
|
||||||
|
OS X, Ultrix, QNX, OpenVMS, RISC OS, Novell NetWare, DOS and more...
|
||||||
|
|
||||||
|
libcurl is free, thread-safe, IPv6 compatible, feature rich, well
|
||||||
|
supported and fast.
|
||||||
|
|
||||||
|
curl
|
||||||
|
|
||||||
|
A command line tool for getting or sending files using URL syntax.
|
||||||
|
|
||||||
|
Since curl uses libcurl, it supports a range of common Internet protocols,
|
||||||
|
currently including HTTP, HTTPS, FTP, FTPS, LDAP, DICT, TELNET and FILE.
|
||||||
|
|
||||||
|
We pronounce curl and cURL with an initial k sound: [kurl].
|
||||||
|
|
||||||
|
There are numerous sub-projects and related projects that also use the word
|
||||||
|
curl in the project names in various combinations, but you should take
|
||||||
notice that this FAQ is directed at the command-line tool named curl (and
|
notice that this FAQ is directed at the command-line tool named curl (and
|
||||||
libcurl the library), and may therefore not be valid for other curl-related
|
libcurl the library), and may therefore not be valid for other curl-related
|
||||||
projects.
|
projects. (There is however a small section for the PHP/CURL in this FAQ.)
|
||||||
|
|
||||||
1.2 What is libcurl?
|
1.2 What is libcurl?
|
||||||
|
|
||||||
@@ -112,7 +150,11 @@ FAQ
|
|||||||
You can use libcurl for free in your application, be it open source,
|
You can use libcurl for free in your application, be it open source,
|
||||||
commercial or closed-source.
|
commercial or closed-source.
|
||||||
|
|
||||||
1.3 What is cURL not?
|
libcurl is most probably the most portable, most powerful and most often
|
||||||
|
used C-based multi-platform file transfer library on this planet - be it
|
||||||
|
open source or commercial.
|
||||||
|
|
||||||
|
1.3 What is curl not?
|
||||||
|
|
||||||
Curl is *not* a wget clone. That is a common misconception. Never, during
|
Curl is *not* a wget clone. That is a common misconception. Never, during
|
||||||
curl's development, have we intended curl to replace wget or compete on its
|
curl's development, have we intended curl to replace wget or compete on its
|
||||||
@@ -127,7 +169,7 @@ FAQ
|
|||||||
script (or write a new program that interfaces libcurl) and do it.
|
script (or write a new program that interfaces libcurl) and do it.
|
||||||
|
|
||||||
Curl is not a PHP tool, even though it works perfectly well when used from
|
Curl is not a PHP tool, even though it works perfectly well when used from
|
||||||
or with PHP.
|
or with PHP (when using the PHP/CURL module).
|
||||||
|
|
||||||
Curl is not a single-OS program. Curl exists, compiles, builds and runs
|
Curl is not a single-OS program. Curl exists, compiles, builds and runs
|
||||||
under a wide range of operating systems, including all modern Unixes (and a
|
under a wide range of operating systems, including all modern Unixes (and a
|
||||||
@@ -161,35 +203,32 @@ FAQ
|
|||||||
* If you write the code, chances are bigger that it will get into curl
|
* If you write the code, chances are bigger that it will get into curl
|
||||||
faster.
|
faster.
|
||||||
|
|
||||||
1.5 Who makes cURL?
|
1.5 Who makes curl?
|
||||||
|
|
||||||
cURL and libcurl are not made by any single individual. Sure, Daniel
|
curl and libcurl are not made by any single individual. Daniel Stenberg is
|
||||||
Stenberg writes the major parts, but other persons' submissions are
|
project leader and main developer, but other persons' submissions are
|
||||||
important and crucial. Anyone can contribute and post their changes and
|
important and crucial. Anyone can contribute and post their changes and
|
||||||
improvements and have them inserted in the main sources (of course on the
|
improvements and have them inserted in the main sources (of course on the
|
||||||
condition that developers agree on that the fixes are good).
|
condition that developers agree on that the fixes are good).
|
||||||
|
|
||||||
The list of contributors in the docs/THANKS file is only a small part of all
|
The full list of the more than 450 contributors is found in the docs/THANKS
|
||||||
the people that every day provide us with bug reports, suggestions, ideas
|
file.
|
||||||
and source code.
|
|
||||||
|
|
||||||
curl is developed by a community, with Daniel at the wheel.
|
curl is developed by a community, with Daniel at the wheel.
|
||||||
|
|
||||||
1.6 What do you get for making cURL?
|
1.6 What do you get for making curl?
|
||||||
|
|
||||||
Project cURL is entirely free and open. No person gets paid for developing
|
Project cURL is entirely free and open. No person gets paid for developing
|
||||||
curl. We do this voluntarily on our spare time.
|
(lib)curl. We do this voluntarily on our spare time.
|
||||||
|
|
||||||
We get some help from companies. Contactor Data hosts the curl web site,
|
We get some help from companies. Contactor Data hosts the curl web site,
|
||||||
Haxx owns the curl web site's domain and sourceforge.net hosts project
|
Haxx owns the curl web site's domain and sourceforge.net hosts project
|
||||||
services we take advantage from, like the bug tracker.
|
services we take advantage from, like the bug tracker. Also, some companies
|
||||||
|
have sponsored certain parts of the development in the past and I hope some
|
||||||
|
will continue to do so in the future.
|
||||||
|
|
||||||
If you want to support our project with a donation or similar, one way of
|
If you want to support our project, consider a donation or a banner-program
|
||||||
doing that would be to buy "gift certificates" at useful online shopping
|
or even better: by helping us coding, documenting, testing etc.
|
||||||
sites, such as amazon.com or thinkgeek.com. Another way would be to sponsor
|
|
||||||
us through a banner-program or even better: by helping us coding,
|
|
||||||
documenting, testing etc. You're welcome to send us a buck using paypal, as
|
|
||||||
described here: http://curl.haxx.se/donation.html
|
|
||||||
|
|
||||||
1.7 What about CURL from curl.com?
|
1.7 What about CURL from curl.com?
|
||||||
|
|
||||||
@@ -220,14 +259,66 @@ FAQ
|
|||||||
users thanks to the web based archives of the mailing lists), thus saving us
|
users thanks to the web based archives of the mailing lists), thus saving us
|
||||||
from having to repeat ourselves even more. Thanks for respecting this.
|
from having to repeat ourselves even more. Thanks for respecting this.
|
||||||
|
|
||||||
|
If you have found or simply suspect a security problem in curl or libcurl,
|
||||||
|
mail curl-security at haxx.se (closed list of receivers, mails are not
|
||||||
|
disclosed) and tell. Then we can produce a fix in a timely manner before the
|
||||||
|
flaw is announced to the world, thus lessen the impact the problem will have
|
||||||
|
on existing users.
|
||||||
|
|
||||||
|
1.9 Where do I buy commercial support for curl?
|
||||||
|
|
||||||
|
curl is fully open source. It means you can hire any skilled engineer to fix
|
||||||
|
your curl-related problems.
|
||||||
|
|
||||||
|
We list available alternatives on the curl web site:
|
||||||
|
http://curl.haxx.se/support.html
|
||||||
|
|
||||||
|
1.10 How many are using curl?
|
||||||
|
|
||||||
|
It is impossible to tell.
|
||||||
|
|
||||||
|
We don't know how many users that knowingly have installed and use curl.
|
||||||
|
|
||||||
|
We don't know how many users that use curl without knowing that they are in
|
||||||
|
fact using it.
|
||||||
|
|
||||||
|
We don't know how many users that downloaded or installed curl and then
|
||||||
|
never use it.
|
||||||
|
|
||||||
|
Some facts to use as input to the math:
|
||||||
|
|
||||||
|
curl packages have been downloaded from the curl.haxx.se site well over a
|
||||||
|
million times. curl is installed by default with most Linux
|
||||||
|
distributions. curl is installed by default with Mac OS X. curl and libcurl
|
||||||
|
as used by numerous applications that include libcurl binaries in their
|
||||||
|
distribution packages (like Adobe Acrobat Reader and Google Earth).
|
||||||
|
|
||||||
|
More than 40 known named companies use curl in commercial environments and
|
||||||
|
products. More than 100 known named open source projects depend on
|
||||||
|
(lib)curl.
|
||||||
|
|
||||||
|
In a poll on the curl web site mid-2005, more than 50% of the 300+ answers
|
||||||
|
estimated a user base of one million users or more.
|
||||||
|
|
||||||
|
In March 2005, the "Linux Counter project" estimated a total Linux user base
|
||||||
|
of some 29 millions, while Netcraft detected some 4 million "active" Linux
|
||||||
|
based web servers. A guess is that a fair amount of these Linux
|
||||||
|
installations have curl installed.
|
||||||
|
|
||||||
|
http://curl.haxx.se/docs/companies.html
|
||||||
|
http://curl.haxx.se/docs/programs.html
|
||||||
|
http://curl.haxx.se/libcurl/using/apps.html
|
||||||
|
http://counter.li.org/estimates.php
|
||||||
|
http://news.netcraft.com/archives/2005/03/14/fedora_makes_rapid_progress.html
|
||||||
|
|
||||||
|
|
||||||
2. Install Related Problems
|
2. Install Related Problems
|
||||||
|
|
||||||
2.1. configure doesn't find OpenSSL even when it is installed
|
2.1 configure doesn't find OpenSSL even when it is installed
|
||||||
|
|
||||||
This may be because of several reasons.
|
This may be because of several reasons.
|
||||||
|
|
||||||
2.1.1. native linker doesn't find openssl
|
2.1.1 native linker doesn't find openssl
|
||||||
|
|
||||||
Affected platforms:
|
Affected platforms:
|
||||||
Solaris (native cc compiler)
|
Solaris (native cc compiler)
|
||||||
@@ -249,7 +340,7 @@ FAQ
|
|||||||
|
|
||||||
Solution submitted by: Bob Allison <allisonb@users.sourceforge.net>
|
Solution submitted by: Bob Allison <allisonb@users.sourceforge.net>
|
||||||
|
|
||||||
2.1.2. only the libssl lib is missing
|
2.1.2 only the libssl lib is missing
|
||||||
|
|
||||||
If all include files and the libcrypto lib is present, with only the
|
If all include files and the libcrypto lib is present, with only the
|
||||||
libssl being missing according to configure, this is mostly likely because
|
libssl being missing according to configure, this is mostly likely because
|
||||||
@@ -262,14 +353,14 @@ FAQ
|
|||||||
configure. Make sure that you remove the config.cache file before you
|
configure. Make sure that you remove the config.cache file before you
|
||||||
rerun configure with the new flags.
|
rerun configure with the new flags.
|
||||||
|
|
||||||
2.2. Does curl work/build with other SSL libraries?
|
2.2 Does curl work/build with other SSL libraries?
|
||||||
|
|
||||||
Curl has been written to use OpenSSL, although there should not be much
|
Curl has been written to use OpenSSL or GnuTLS, although there should not be
|
||||||
problems using a different library. If anyone does "port" curl to use a
|
many problems using a different library. If anyone does "port" curl to use a
|
||||||
different SSL library, we are of course very interested in getting the
|
different SSL library, we are of course very interested in getting the
|
||||||
patch!
|
patch!
|
||||||
|
|
||||||
2.3. Where can I find a copy of LIBEAY32.DLL?
|
2.3 Where can I find a copy of LIBEAY32.DLL?
|
||||||
|
|
||||||
That is an OpenSSL binary built for Windows.
|
That is an OpenSSL binary built for Windows.
|
||||||
|
|
||||||
@@ -278,14 +369,14 @@ FAQ
|
|||||||
accurate and up-to-date pointers to recent OpenSSL DLLs and other binary
|
accurate and up-to-date pointers to recent OpenSSL DLLs and other binary
|
||||||
packages.
|
packages.
|
||||||
|
|
||||||
2.4. Does cURL support Socks (RFC 1928) ?
|
2.4 Does curl support Socks (RFC 1928) ?
|
||||||
|
|
||||||
Yes, SOCKS5 is supported when curl is built with IPv6 support disabled.
|
Yes, SOCKS5 is supported.
|
||||||
|
|
||||||
|
|
||||||
3. Usage problems
|
3. Usage problems
|
||||||
|
|
||||||
3.1. curl: (1) SSL is disabled, https: not supported
|
3.1 curl: (1) SSL is disabled, https: not supported
|
||||||
|
|
||||||
If you get this output when trying to get anything from a https:// server,
|
If you get this output when trying to get anything from a https:// server,
|
||||||
it means that the configure script couldn't find all libs and include files
|
it means that the configure script couldn't find all libs and include files
|
||||||
@@ -300,13 +391,13 @@ FAQ
|
|||||||
Also, check out the other paragraph in this FAQ labeled "configure doesn't
|
Also, check out the other paragraph in this FAQ labeled "configure doesn't
|
||||||
find OpenSSL even when it is installed".
|
find OpenSSL even when it is installed".
|
||||||
|
|
||||||
3.2. How do I tell curl to resume a transfer?
|
3.2 How do I tell curl to resume a transfer?
|
||||||
|
|
||||||
Curl supports resumed transfers both ways on both FTP and HTTP.
|
Curl supports resumed transfers both ways on both FTP and HTTP.
|
||||||
|
|
||||||
Try the -C option.
|
Try the -C option.
|
||||||
|
|
||||||
3.3. Why doesn't my posting using -F work?
|
3.3 Why doesn't my posting using -F work?
|
||||||
|
|
||||||
You can't simply use -F or -d at your choice. The web server that will
|
You can't simply use -F or -d at your choice. The web server that will
|
||||||
receive your post assumes one of the formats. If the form you're trying to
|
receive your post assumes one of the formats. If the form you're trying to
|
||||||
@@ -320,7 +411,7 @@ FAQ
|
|||||||
through the mailing list archives for old postings and questions regarding
|
through the mailing list archives for old postings and questions regarding
|
||||||
this.
|
this.
|
||||||
|
|
||||||
3.4. How do I tell curl to run custom FTP commands?
|
3.4 How do I tell curl to run custom FTP commands?
|
||||||
|
|
||||||
You can tell curl to perform optional commands both before and/or after a
|
You can tell curl to perform optional commands both before and/or after a
|
||||||
file transfer. Study the -Q/--quote option.
|
file transfer. Study the -Q/--quote option.
|
||||||
@@ -329,13 +420,13 @@ FAQ
|
|||||||
FTP commands without transferring anything. Therefore you must always specify
|
FTP commands without transferring anything. Therefore you must always specify
|
||||||
a URL to transfer to/from even when doing custom FTP commands.
|
a URL to transfer to/from even when doing custom FTP commands.
|
||||||
|
|
||||||
3.5. How can I disable the Pragma: nocache header?
|
3.5 How can I disable the Pragma: nocache header?
|
||||||
|
|
||||||
You can change all internally generated headers by adding a replacement with
|
You can change all internally generated headers by adding a replacement with
|
||||||
the -H/--header option. By adding a header with empty contents you safely
|
the -H/--header option. By adding a header with empty contents you safely
|
||||||
disable that one. Use -H "Pragma:" to disable that specific header.
|
disable that one. Use -H "Pragma:" to disable that specific header.
|
||||||
|
|
||||||
3.6. Does curl support ASP, XML, XHTML or HTML version Y?
|
3.6 Does curl support ASP, XML, XHTML or HTML version Y?
|
||||||
|
|
||||||
To curl, all contents are alike. It doesn't matter how the page was
|
To curl, all contents are alike. It doesn't matter how the page was
|
||||||
generated. It may be ASP, PHP, Perl, shell-script, SSI or plain
|
generated. It may be ASP, PHP, Perl, shell-script, SSI or plain
|
||||||
@@ -344,7 +435,7 @@ FAQ
|
|||||||
|
|
||||||
See also item 3.14 regarding javascript.
|
See also item 3.14 regarding javascript.
|
||||||
|
|
||||||
3.7. Can I use curl to delete/rename a file through FTP?
|
3.7 Can I use curl to delete/rename a file through FTP?
|
||||||
|
|
||||||
Yes. You specify custom FTP commands with -Q/--quote.
|
Yes. You specify custom FTP commands with -Q/--quote.
|
||||||
|
|
||||||
@@ -360,6 +451,8 @@ FAQ
|
|||||||
|
|
||||||
curl -L http://redirector.com
|
curl -L http://redirector.com
|
||||||
|
|
||||||
|
Not all redirects are HTTP ones, see 4.14
|
||||||
|
|
||||||
3.9 How do I use curl in my favorite programming language?
|
3.9 How do I use curl in my favorite programming language?
|
||||||
|
|
||||||
There exist many language interfaces/bindings for curl that integrates it
|
There exist many language interfaces/bindings for curl that integrates it
|
||||||
@@ -369,7 +462,6 @@ FAQ
|
|||||||
|
|
||||||
Find out more about which languages that support curl directly, and how to
|
Find out more about which languages that support curl directly, and how to
|
||||||
install and use them, in the libcurl section of the curl web site:
|
install and use them, in the libcurl section of the curl web site:
|
||||||
|
|
||||||
http://curl.haxx.se/libcurl/
|
http://curl.haxx.se/libcurl/
|
||||||
|
|
||||||
In February 2003, there are interfaces available for the following
|
In February 2003, there are interfaces available for the following
|
||||||
@@ -456,15 +548,64 @@ FAQ
|
|||||||
3.15 Can I do recursive fetches with curl?
|
3.15 Can I do recursive fetches with curl?
|
||||||
|
|
||||||
No. curl itself has no code that performs recursive operations, such as
|
No. curl itself has no code that performs recursive operations, such as
|
||||||
those performed by wget.
|
those performed by wget and similar tools.
|
||||||
|
|
||||||
There exist wrapper scripts with that functionality (for example the
|
There exist wrapper scripts with that functionality (for example the
|
||||||
curlmirror perl script), and you can write programs based on libcurl to do
|
curlmirror perl script), and you can write programs based on libcurl to do
|
||||||
it, but the command line tool curl itself cannot.
|
it, but the command line tool curl itself cannot.
|
||||||
|
|
||||||
|
3.16 What certificates do I need when I use SSL?
|
||||||
|
|
||||||
|
There are three different kinds of "certificates" to keep track of when we
|
||||||
|
talk about using SSL-based protocols (HTTPS or FTPS) using curl or libcurl.
|
||||||
|
|
||||||
|
- Client certificate. The server you communicate may require that you can
|
||||||
|
provide this in order to prove that you actually are who you claim to be.
|
||||||
|
If the server doesn't require this, you don't need a client certificate.
|
||||||
|
|
||||||
|
- Server certificate. The server you communicate with has a server
|
||||||
|
certificate. You can and should verify this certificate to make sure that
|
||||||
|
you are truly talking to the real server and not a server impersonating
|
||||||
|
it.
|
||||||
|
|
||||||
|
- Certificate Authority certificate ("CA cert"). You often have several CA
|
||||||
|
certs in a CA cert bundle that can be used to verify a server certificate
|
||||||
|
that was signed by one of the authorities in the bundle. curl comes with a
|
||||||
|
default CA cert bundle. You can override the default.
|
||||||
|
|
||||||
|
The server certificate verification process is made by using a Certificate
|
||||||
|
Authority certificate ("CA cert") that was used to sign the server
|
||||||
|
certificate. Server certificate verification is enabled by default in curl
|
||||||
|
and libcurl and is often the reason for problems as explained in FAQ entry
|
||||||
|
4.12 and the SSLCERTS document
|
||||||
|
(http://curl.haxx.se/docs/sslcerts.html). Server certificates that are
|
||||||
|
"self-signed" or otherwise signed by a CA that you do not have a CA cert
|
||||||
|
for, cannot be verified. If the verification during a connect fails, you
|
||||||
|
are refused access. You then need to explicitly disable the verification
|
||||||
|
to connect to the server.
|
||||||
|
|
||||||
|
3.17 How do I list the root dir of an FTP server?
|
||||||
|
|
||||||
|
There are two ways. The way defined in the RFC is to use an encoded slash
|
||||||
|
in the first path part. List the "/tmp" dir like this:
|
||||||
|
|
||||||
|
curl ftp://ftp.sunet.se/%2ftmp/
|
||||||
|
|
||||||
|
or the not-quite-kosher-but-more-readable way, by simply starting the path
|
||||||
|
section of the URL with a slash:
|
||||||
|
|
||||||
|
curl ftp://ftp.sunet.se//tmp/
|
||||||
|
|
||||||
|
3.18 Can I use curl to send a POST/PUT and not wait for a response?
|
||||||
|
|
||||||
|
No.
|
||||||
|
|
||||||
|
But you could easily write your own program using libcurl to do such stunts.
|
||||||
|
|
||||||
|
|
||||||
4. Running Problems
|
4. Running Problems
|
||||||
|
|
||||||
4.1. Problems connecting to SSL servers.
|
4.1 Problems connecting to SSL servers.
|
||||||
|
|
||||||
It took a very long time before we could sort out why curl had problems to
|
It took a very long time before we could sort out why curl had problems to
|
||||||
connect to certain SSL servers when using SSLeay or OpenSSL v0.9+. The
|
connect to certain SSL servers when using SSLeay or OpenSSL v0.9+. The
|
||||||
@@ -479,7 +620,7 @@ FAQ
|
|||||||
There have also been examples where the remote server didn't like the SSLv2
|
There have also been examples where the remote server didn't like the SSLv2
|
||||||
request and instead you had to force curl to use SSLv3 with -3/--sslv3.
|
request and instead you had to force curl to use SSLv3 with -3/--sslv3.
|
||||||
|
|
||||||
4.2. Why do I get problems when I use & or % in the URL?
|
4.2 Why do I get problems when I use & or % in the URL?
|
||||||
|
|
||||||
In general unix shells, the & letter is treated special and when used, it
|
In general unix shells, the & letter is treated special and when used, it
|
||||||
runs the specified command in the background. To safely send the & as a part
|
runs the specified command in the background. To safely send the & as a part
|
||||||
@@ -497,7 +638,7 @@ FAQ
|
|||||||
pass in a POST using -d/--data you must encode it as '%25' (which then also
|
pass in a POST using -d/--data you must encode it as '%25' (which then also
|
||||||
needs the %-letter doubled on Windows machines).
|
needs the %-letter doubled on Windows machines).
|
||||||
|
|
||||||
4.3. How can I use {, }, [ or ] to specify multiple URLs?
|
4.3 How can I use {, }, [ or ] to specify multiple URLs?
|
||||||
|
|
||||||
Because those letters have a special meaning to the shell, and to be used in
|
Because those letters have a special meaning to the shell, and to be used in
|
||||||
a URL specified to curl you must quote them.
|
a URL specified to curl you must quote them.
|
||||||
@@ -511,7 +652,7 @@ FAQ
|
|||||||
|
|
||||||
curl -g 'www.site.com/weirdname[].html'
|
curl -g 'www.site.com/weirdname[].html'
|
||||||
|
|
||||||
4.4. Why do I get downloaded data even though the web page doesn't exist?
|
4.4 Why do I get downloaded data even though the web page doesn't exist?
|
||||||
|
|
||||||
Curl asks remote servers for the page you specify. If the page doesn't exist
|
Curl asks remote servers for the page you specify. If the page doesn't exist
|
||||||
at the server, the HTTP protocol defines how the server should respond and
|
at the server, the HTTP protocol defines how the server should respond and
|
||||||
@@ -562,14 +703,17 @@ FAQ
|
|||||||
slash. Try the same operation again _with_ the trailing URL, or use the
|
slash. Try the same operation again _with_ the trailing URL, or use the
|
||||||
-L/--location option to follow the redirection.
|
-L/--location option to follow the redirection.
|
||||||
|
|
||||||
4.6. Can you tell me what error code 142 means?
|
4.6 Can you tell me what error code 142 means?
|
||||||
|
|
||||||
All error codes that are larger than the highest documented error code means
|
All curl error codes are described at the end of the man page, in the
|
||||||
|
section called "EXIT CODES".
|
||||||
|
|
||||||
|
Error codes that are larger than the highest documented error code means
|
||||||
that curl has exited due to a crash. This is a serious error, and we
|
that curl has exited due to a crash. This is a serious error, and we
|
||||||
appreciate a detailed bug report from you that describes how we could go
|
appreciate a detailed bug report from you that describes how we could go
|
||||||
ahead and repeat this!
|
ahead and repeat this!
|
||||||
|
|
||||||
4.7. How do I keep user names and passwords secret in Curl command lines?
|
4.7 How do I keep user names and passwords secret in Curl command lines?
|
||||||
|
|
||||||
This problem has two sides:
|
This problem has two sides:
|
||||||
|
|
||||||
@@ -603,7 +747,7 @@ FAQ
|
|||||||
If there is a bug, read the BUGS document first. Then report it as described
|
If there is a bug, read the BUGS document first. Then report it as described
|
||||||
in there.
|
in there.
|
||||||
|
|
||||||
4.9. Curl can't authenticate to the server that requires NTLM?
|
4.9 Curl can't authenticate to the server that requires NTLM?
|
||||||
|
|
||||||
This is supported in curl 7.10.6 or later. No earlier curl version knows
|
This is supported in curl 7.10.6 or later. No earlier curl version knows
|
||||||
of this magic.
|
of this magic.
|
||||||
@@ -651,18 +795,49 @@ FAQ
|
|||||||
Details are also in the SSLCERTS file in the release archives, found online
|
Details are also in the SSLCERTS file in the release archives, found online
|
||||||
here: http://curl.haxx.se/docs/sslcerts.html
|
here: http://curl.haxx.se/docs/sslcerts.html
|
||||||
|
|
||||||
|
4.13 Why is curl -R on Windows one hour off?
|
||||||
|
|
||||||
|
During daylight savings time, when -R is used, curl will set a time that
|
||||||
|
appears one hour off. This happens due to a flaw in how Windows stores and
|
||||||
|
uses file modification times and it is not easily worked around. For details
|
||||||
|
on this problem, read this: http://www.codeproject.com/datetime/dstbugs.asp
|
||||||
|
|
||||||
|
4.14 Redirects work in browser but not with curl!
|
||||||
|
|
||||||
|
curl supports HTTP redirects fine (see item 3.8). Browsers generally support
|
||||||
|
at least two other ways to perform directs that curl does not:
|
||||||
|
|
||||||
|
- Meta tags. You can write a HTML tag that will cause the browser to
|
||||||
|
redirect to another given URL after a certain time.
|
||||||
|
|
||||||
|
- Javascript. You can write a javascript program embeded in a HTML page
|
||||||
|
that redirects the browser to another given URL.
|
||||||
|
|
||||||
|
There is no way to make curl follow these redirects. You must either
|
||||||
|
manually figure out what the page is set to do, or you write a script that
|
||||||
|
parses the results and fetches the new URL.
|
||||||
|
|
||||||
|
|
||||||
5. libcurl Issues
|
5. libcurl Issues
|
||||||
|
|
||||||
5.1. Is libcurl thread-safe?
|
5.1 Is libcurl thread-safe?
|
||||||
|
|
||||||
Yes.
|
Yes.
|
||||||
|
|
||||||
We have written the libcurl code specificly adjusted for multi-threaded
|
We have written the libcurl code specifically adjusted for multi-threaded
|
||||||
programs. libcurl will use thread-safe functions instead of non-safe ones if
|
programs. libcurl will use thread-safe functions instead of non-safe ones if
|
||||||
your system has such.
|
your system has such.
|
||||||
|
|
||||||
We would appreciate some kind of report or README file from those who have
|
If you use a OpenSSL-powered libcurl in a multi-threaded environment, you
|
||||||
used libcurl in a threaded environment.
|
need to provide one or two locking functions:
|
||||||
|
|
||||||
|
http://www.openssl.org/docs/crypto/threads.html#DESCRIPTION
|
||||||
|
|
||||||
|
If you use a GnuTLS-powered libcurl in a multi-threaded environment, you
|
||||||
|
need to provide locking function(s) for libgcrypt (which is used by GnuTLS
|
||||||
|
for the crypto functions).
|
||||||
|
|
||||||
|
http://www.gnu.org/software/gnutls/manual/html_node/Multi_002dthreaded-applications.html
|
||||||
|
|
||||||
5.2 How can I receive all data into a large memory chunk?
|
5.2 How can I receive all data into a large memory chunk?
|
||||||
|
|
||||||
@@ -674,8 +849,8 @@ FAQ
|
|||||||
|
|
||||||
One solution to this problem could be to have a pointer to a struct that you
|
One solution to this problem could be to have a pointer to a struct that you
|
||||||
pass to the callback function. You set the pointer using the
|
pass to the callback function. You set the pointer using the
|
||||||
curl_easy_setopt(CURLOPT_FILE) function. Then that pointer will be passed to
|
CURLOPT_WRITEDATA option. Then that pointer will be passed to the callback
|
||||||
the callback instead of a FILE * to a file:
|
instead of a FILE * to a file:
|
||||||
|
|
||||||
/* imaginary struct */
|
/* imaginary struct */
|
||||||
struct MemoryStruct {
|
struct MemoryStruct {
|
||||||
@@ -687,7 +862,7 @@ FAQ
|
|||||||
size_t
|
size_t
|
||||||
WriteMemoryCallback(void *ptr, size_t size, size_t nmemb, void *data)
|
WriteMemoryCallback(void *ptr, size_t size, size_t nmemb, void *data)
|
||||||
{
|
{
|
||||||
register int realsize = size * nmemb;
|
size_t realsize = size * nmemb;
|
||||||
struct MemoryStruct *mem = (struct MemoryStruct *)data;
|
struct MemoryStruct *mem = (struct MemoryStruct *)data;
|
||||||
|
|
||||||
mem->memory = (char *)realloc(mem->memory, mem->size + realsize + 1);
|
mem->memory = (char *)realloc(mem->memory, mem->size + realsize + 1);
|
||||||
@@ -743,6 +918,97 @@ FAQ
|
|||||||
|
|
||||||
(Provided by Andrew Francis)
|
(Provided by Andrew Francis)
|
||||||
|
|
||||||
|
When building an application that uses the static libcurl library, you must
|
||||||
|
add -DCURL_STATICLIB to your CFLAGS. Otherwise the linker will look for
|
||||||
|
dynamic import symbols. If you get linker error like "unknown symbol
|
||||||
|
__imp__curl_easy_init ..." you have linked against the wrong (static)
|
||||||
|
library. If you want to use the libcurl.dll and import lib, you don't need
|
||||||
|
any extra CFLAGS, but use one of the import libraries below. These are the
|
||||||
|
libraries produced by the various lib/Makefile.* files:
|
||||||
|
|
||||||
|
Target: static lib. import lib for libcurl*.dll.
|
||||||
|
-----------------------------------------------------------
|
||||||
|
MingW: libcurl.a libcurldll.a
|
||||||
|
MSVC (release): libcurl.lib libcurl_imp.lib
|
||||||
|
MSVC (debug): libcurld.lib libcurld_imp.lib
|
||||||
|
Borland: libcurl.lib libcurl_imp.lib
|
||||||
|
|
||||||
|
|
||||||
|
5.8 libcurl.so.3: open failed: No such file or directory
|
||||||
|
|
||||||
|
This is an error message you might get when you try to run a program linked
|
||||||
|
with a shared version of libcurl and your run-time linker (ld.so) couldn't
|
||||||
|
find the shared library named libcurl.so.3.
|
||||||
|
|
||||||
|
You need to make sure that ld.so finds libcurl.so.3. You can do that
|
||||||
|
multiple ways, and it differs somewhat between different operating systems,
|
||||||
|
but they are usually:
|
||||||
|
|
||||||
|
* Add an option to the linker command line that specify the hard-coded path
|
||||||
|
the run-time linker should check for the lib (usually -R)
|
||||||
|
|
||||||
|
* Set an environment variable (LD_LIBRARY_PATH for example) where ld.so
|
||||||
|
should check for libs
|
||||||
|
|
||||||
|
* Adjust the system's config to check for libs in the directory where you've
|
||||||
|
put the dir (like Linux's /etc/ld.so.conf)
|
||||||
|
|
||||||
|
'man ld.so' and 'man ld' will tell you more details
|
||||||
|
|
||||||
|
5.9 How does libcurl resolve host names?
|
||||||
|
|
||||||
|
libcurl supports a large a number of different name resolve functions. One
|
||||||
|
of them is picked at build-time and will be used unconditionally. Thus, if
|
||||||
|
you want to change name resolver function you must rebuild libcurl and tell
|
||||||
|
it to use a different function.
|
||||||
|
|
||||||
|
- The non-ipv6 resolver that can use one out of four host name resolve calls
|
||||||
|
(depending on what your system supports):
|
||||||
|
|
||||||
|
A - gethostbyname()
|
||||||
|
B - gethostbyname_r() with 3 arguments
|
||||||
|
C - gethostbyname_r() with 5 arguments
|
||||||
|
D - gethostbyname_r() with 6 arguments
|
||||||
|
|
||||||
|
- The ipv6-resolver that uses getaddrinfo()
|
||||||
|
|
||||||
|
- The c-ares based name resolver that uses the c-ares library for resolves.
|
||||||
|
Using this offers asynchronous name resolves but it currently has no IPv6
|
||||||
|
support.
|
||||||
|
|
||||||
|
- The Windows threaded resolver. It use:
|
||||||
|
|
||||||
|
A - gethostbyname() on plain ipv4 windows hosts
|
||||||
|
B - getaddrinfo() on ipv6-enabled windows hosts
|
||||||
|
|
||||||
|
Also note that libcurl never resolves or reverse-lookups addresses given as
|
||||||
|
pure numbers, such as 127.0.0.1 or ::1.
|
||||||
|
|
||||||
|
5.10 How do I prevent libcurl from writing the response to stdout?
|
||||||
|
|
||||||
|
libcurl provides a default built-in write function that writes received data
|
||||||
|
to stdout. Set the CURLOPT_WRITEFUNCTION to receive the data, or possibly
|
||||||
|
set CURLOPT_WRITEDATA to a different FILE * handle.
|
||||||
|
|
||||||
|
5.11 How do I make libcurl not receive the whole HTTP response?
|
||||||
|
|
||||||
|
You make the write callback (or progress callback) return an error and
|
||||||
|
libcurl will then abort the transfer.
|
||||||
|
|
||||||
|
5.12 Can I make libcurl fake or hide my real IP address?
|
||||||
|
|
||||||
|
No. libcurl operates on a higher level than so. Besides, faking IP address
|
||||||
|
would imply sending IP packages with a made-up source address, and then you
|
||||||
|
normally get a problem with intercepting the packages sent back as they
|
||||||
|
would then not be routed to you!
|
||||||
|
|
||||||
|
If you use a proxy to access remote sites, the sites will not see your local
|
||||||
|
IP address but instead the address of the proxy.
|
||||||
|
|
||||||
|
Also note that on many networks NATs or other IP-munging techniques are used
|
||||||
|
that makes you see and use a different IP address locally than what the
|
||||||
|
remote server will see you coming from.
|
||||||
|
|
||||||
|
|
||||||
6. License Issues
|
6. License Issues
|
||||||
|
|
||||||
@@ -751,32 +1017,35 @@ FAQ
|
|||||||
is just a brief summary for the cases we get the most questions. (Parts of
|
is just a brief summary for the cases we get the most questions. (Parts of
|
||||||
this section was much enhanced by Bjorn Reese.)
|
this section was much enhanced by Bjorn Reese.)
|
||||||
|
|
||||||
6.1. I have a GPL program, can I use the libcurl library?
|
We are not lawyers and this is not legal advice. You should probably consult
|
||||||
|
one if you want true and accurate legal insights without our prejudice.
|
||||||
|
|
||||||
|
6.1 I have a GPL program, can I use the libcurl library?
|
||||||
|
|
||||||
Yes!
|
Yes!
|
||||||
|
|
||||||
Since libcurl may be distributed under the MIT/X derivate license, it can be
|
Since libcurl may be distributed under the MIT/X derivate license, it can be
|
||||||
used together with GPL in any software.
|
used together with GPL in any software.
|
||||||
|
|
||||||
6.2. I have a closed-source program, can I use the libcurl library?
|
6.2 I have a closed-source program, can I use the libcurl library?
|
||||||
|
|
||||||
Yes!
|
Yes!
|
||||||
|
|
||||||
libcurl does not put any restrictions on the program that uses the library.
|
libcurl does not put any restrictions on the program that uses the library.
|
||||||
|
|
||||||
6.3. I have a BSD licensed program, can I use the libcurl library?
|
6.3 I have a BSD licensed program, can I use the libcurl library?
|
||||||
|
|
||||||
Yes!
|
Yes!
|
||||||
|
|
||||||
libcurl does not put any restrictions on the program that uses the library.
|
libcurl does not put any restrictions on the program that uses the library.
|
||||||
|
|
||||||
6.4. I have a program that uses LGPL libraries, can I use libcurl?
|
6.4 I have a program that uses LGPL libraries, can I use libcurl?
|
||||||
|
|
||||||
Yes!
|
Yes!
|
||||||
|
|
||||||
The LGPL license doesn't clash with other licenses.
|
The LGPL license doesn't clash with other licenses.
|
||||||
|
|
||||||
6.5. Can I modify curl/libcurl for my program and keep the changes secret?
|
6.5 Can I modify curl/libcurl for my program and keep the changes secret?
|
||||||
|
|
||||||
Yes!
|
Yes!
|
||||||
|
|
||||||
@@ -784,7 +1053,7 @@ FAQ
|
|||||||
the sources, on the condition that the copyright texts in the sources are
|
the sources, on the condition that the copyright texts in the sources are
|
||||||
left intact.
|
left intact.
|
||||||
|
|
||||||
6.6. Can you please change the curl/libcurl license to XXXX?
|
6.6 Can you please change the curl/libcurl license to XXXX?
|
||||||
|
|
||||||
No.
|
No.
|
||||||
|
|
||||||
@@ -794,3 +1063,51 @@ FAQ
|
|||||||
we want on curl/libcurl and it does not spread to other programs or
|
we want on curl/libcurl and it does not spread to other programs or
|
||||||
libraries that use it. It should be possible for everyone to use libcurl or
|
libraries that use it. It should be possible for everyone to use libcurl or
|
||||||
curl in their projects, no matter what license they already have in use.
|
curl in their projects, no matter what license they already have in use.
|
||||||
|
|
||||||
|
6.7 What are my obligations when using libcurl in my commerical apps?
|
||||||
|
|
||||||
|
Next to none. All you need to adhere to is the MIT-style license (stated in
|
||||||
|
the COPYING file) which basically says you have to include the copyright
|
||||||
|
notice in "all copies" and that you may not use the copyright holder's name
|
||||||
|
when promoting your software.
|
||||||
|
|
||||||
|
You do not have to release any of your source code.
|
||||||
|
|
||||||
|
You do not have to reveal or make public any changes to the libcurl source
|
||||||
|
code.
|
||||||
|
|
||||||
|
You do not have to reveal or make public that you are using libcurl within
|
||||||
|
your app.
|
||||||
|
|
||||||
|
As can be seen here: http://curl.haxx.se/docs/companies.html and
|
||||||
|
elsewhere, more and more companies are dicovering the power
|
||||||
|
of libcurl and take advantage of it even in commercial environments.
|
||||||
|
|
||||||
|
|
||||||
|
7. PHP/CURL Issues
|
||||||
|
|
||||||
|
7.1 What is PHP/CURL?
|
||||||
|
|
||||||
|
The module for PHP that makes it possible for PHP programs to access curl-
|
||||||
|
functions from within PHP.
|
||||||
|
|
||||||
|
In the cURL project we call this module PHP/CURL to differentiate it from
|
||||||
|
curl the command line tool and libcurl the library. The PHP team however
|
||||||
|
does not refer to it like this (for unknown reasons). They call it plain
|
||||||
|
CURL (often using all caps) which causes much confusion to users which in
|
||||||
|
turn gives us a higher question load.
|
||||||
|
|
||||||
|
7.2 Who write PHP/CURL?
|
||||||
|
|
||||||
|
PHP/CURL is a module that comes with the regular PHP package. It depends and
|
||||||
|
uses libcurl, so you need to have libcurl installed properly first before
|
||||||
|
PHP/CURL can be used. PHP/CURL is written by Sterling Hughes.
|
||||||
|
|
||||||
|
7.3 Can I perform multiple requests using the same handle?
|
||||||
|
|
||||||
|
Yes - at least in PHP version 4.3.8 and later (this has been known to not
|
||||||
|
work in earlier versions, but the exact version when it started to work is
|
||||||
|
unknown to me).
|
||||||
|
|
||||||
|
After a transfer, you just set new options in the handle and make another
|
||||||
|
transfer. This will make libcurl to re-use the same connection if it can.
|
||||||
|
|||||||
@@ -6,26 +6,33 @@
|
|||||||
|
|
||||||
FEATURES
|
FEATURES
|
||||||
|
|
||||||
Misc
|
curl tool
|
||||||
- full URL syntax
|
- config file support
|
||||||
|
- multiple URLs in a single command line
|
||||||
|
- range "globbing" support: [0-13], {one,two,three}
|
||||||
|
- multiple file upload on a single command line
|
||||||
|
- custom maximum transfer rate
|
||||||
|
- redirectable stderr
|
||||||
|
|
||||||
|
libcurl supports
|
||||||
|
- full URL syntax with no length limit
|
||||||
- custom maximum download time
|
- custom maximum download time
|
||||||
- custom least download speed acceptable
|
- custom least download speed acceptable
|
||||||
- custom output result after completion
|
- custom output result after completion
|
||||||
- multiple URLs
|
|
||||||
- guesses protocol from host name unless specified
|
- guesses protocol from host name unless specified
|
||||||
- uses .netrc
|
- uses .netrc
|
||||||
- progress bar/time specs while downloading
|
- progress bar/time specs while downloading
|
||||||
- "standard" proxy environment variables support
|
- "standard" proxy environment variables support
|
||||||
- config file support
|
|
||||||
- compiles on win32 (reported builds on 40+ operating systems)
|
- compiles on win32 (reported builds on 40+ operating systems)
|
||||||
- redirectable stderr
|
|
||||||
- selectable network interface for outgoing traffic
|
- selectable network interface for outgoing traffic
|
||||||
- IPv6 support
|
- IPv6 support on unix and Windows
|
||||||
- persistant connections
|
- persistant connections
|
||||||
- socks5 support
|
- socks5 support
|
||||||
- supports user name + password in proxy environment variables
|
- supports user name + password in proxy environment variables
|
||||||
- operations through proxy "tunnel" (using CONNECT)
|
- operations through proxy "tunnel" (using CONNECT)
|
||||||
- supports transfers of large files (>2GB and >4GB)
|
- supports large files (>2GB and >4GB) both upload/download
|
||||||
|
- replacable memory functions (malloc, free, realloc, etc)
|
||||||
|
- asynchronous name resolving (*6)
|
||||||
|
|
||||||
HTTP
|
HTTP
|
||||||
- HTTP/1.1 compliant (optionally uses 1.0)
|
- HTTP/1.1 compliant (optionally uses 1.0)
|
||||||
@@ -35,7 +42,7 @@ HTTP
|
|||||||
- POST
|
- POST
|
||||||
- multipart formpost (RFC1867-style)
|
- multipart formpost (RFC1867-style)
|
||||||
- authentication: Basic, Digest, NTLM(*1), GSS-Negotiate/Negotiate(*3) and
|
- authentication: Basic, Digest, NTLM(*1), GSS-Negotiate/Negotiate(*3) and
|
||||||
SPNEGO (*4)
|
SPNEGO (*4) to server and proxy
|
||||||
- resume (both GET and PUT)
|
- resume (both GET and PUT)
|
||||||
- follow redirects
|
- follow redirects
|
||||||
- maximum amount of redirects to follow
|
- maximum amount of redirects to follow
|
||||||
@@ -55,11 +62,11 @@ HTTP
|
|||||||
|
|
||||||
HTTPS (*1)
|
HTTPS (*1)
|
||||||
- (all the HTTP features)
|
- (all the HTTP features)
|
||||||
- using certificates
|
- using client certificates
|
||||||
- verify server certificate
|
- verify server certificate
|
||||||
- via http-proxy
|
- via http-proxy
|
||||||
- select desired encryption
|
- select desired encryption
|
||||||
- force usage of a specific SSL version (SSLv2, SSLv3 or TLSv1)
|
- force usage of a specific SSL version (SSLv2(*7), SSLv3 or TLSv1)
|
||||||
|
|
||||||
FTP
|
FTP
|
||||||
- download
|
- download
|
||||||
@@ -80,12 +87,17 @@ FTP
|
|||||||
- via http-proxy
|
- via http-proxy
|
||||||
- all operations can be tunneled through a http-proxy
|
- all operations can be tunneled through a http-proxy
|
||||||
- customizable to retrieve file modification date
|
- customizable to retrieve file modification date
|
||||||
|
- third party transfers
|
||||||
|
- no dir depth limit
|
||||||
|
|
||||||
FTPS (*1)
|
FTPS (*1)
|
||||||
- explicit ftps:// support that use SSL on both connections
|
- explicit ftps:// support that use SSL on both connections
|
||||||
- implicit "AUTH TSL" and "AUTH SSL" usage to "upgrade" plain ftp://
|
- implicit "AUTH TSL" and "AUTH SSL" usage to "upgrade" plain ftp://
|
||||||
connection to use SSL for both or one of the connections
|
connection to use SSL for both or one of the connections
|
||||||
|
|
||||||
|
TFTP
|
||||||
|
- download / upload
|
||||||
|
|
||||||
TELNET
|
TELNET
|
||||||
- connection negotiation
|
- connection negotiation
|
||||||
- custom telnet options
|
- custom telnet options
|
||||||
@@ -97,18 +109,18 @@ LDAP (*2)
|
|||||||
DICT
|
DICT
|
||||||
- extended DICT URL support
|
- extended DICT URL support
|
||||||
|
|
||||||
GOPHER
|
|
||||||
- GET
|
|
||||||
- via http-proxy
|
|
||||||
|
|
||||||
FILE
|
FILE
|
||||||
- URL support
|
- URL support
|
||||||
|
- "uploads"
|
||||||
|
- resume
|
||||||
|
|
||||||
FOOTNOTES
|
FOOTNOTES
|
||||||
=========
|
=========
|
||||||
|
|
||||||
*1 = requires OpenSSL
|
*1 = requires OpenSSL or GnuTLS
|
||||||
*2 = requires OpenLDAP
|
*2 = requires OpenLDAP
|
||||||
*3 = requires a GSSAPI-compliant library, such as Heimdal or similar.
|
*3 = requires a GSSAPI-compliant library, such as Heimdal or similar.
|
||||||
*4 = requires FBopenssl
|
*4 = requires FBopenssl
|
||||||
*5 = requires a krb4 library, such as the MIT one or similar.
|
*5 = requires a krb4 library, such as the MIT one or similar.
|
||||||
|
*6 = requires c-ares
|
||||||
|
*7 = requires OpenSSL specificly, as GnuTLS only supports SSLv3 and TLSv1
|
||||||
|
|||||||
25
docs/HISTORY
25
docs/HISTORY
@@ -114,6 +114,8 @@ distributions and otherwise retrieved as part of other software.
|
|||||||
September 2002, with the release of curl 7.10 it is released under the MIT
|
September 2002, with the release of curl 7.10 it is released under the MIT
|
||||||
license only.
|
license only.
|
||||||
|
|
||||||
|
January 2003. Started working on the distributed curl tests. The autobuilds.
|
||||||
|
|
||||||
February 2003, the curl site averages at 20000 visits weekly. At any given
|
February 2003, the curl site averages at 20000 visits weekly. At any given
|
||||||
moment, there's an average of 3 people browsing the curl.haxx.se site.
|
moment, there's an average of 3 people browsing the curl.haxx.se site.
|
||||||
|
|
||||||
@@ -126,3 +128,26 @@ visitors to the curl.haxx.se site. Five official web mirrors.
|
|||||||
December 2003, full-fledged SSL for FTP is supported.
|
December 2003, full-fledged SSL for FTP is supported.
|
||||||
|
|
||||||
January 2004: curl 7.11.0 introduced large file support.
|
January 2004: curl 7.11.0 introduced large file support.
|
||||||
|
|
||||||
|
June 2004: curl 7.12.0 introduced IDN support. 10 official web mirrors.
|
||||||
|
|
||||||
|
August 2004:
|
||||||
|
Curl and libcurl 7.12.1
|
||||||
|
|
||||||
|
Public curl release number: 82
|
||||||
|
Releases counted from the very beginning: 109
|
||||||
|
Available command line options: 96
|
||||||
|
Available curl_easy_setopt() options: 120
|
||||||
|
Number of public functions in libcurl: 36
|
||||||
|
Amount of public web site mirrors: 12
|
||||||
|
Number of known libcurl bindings: 26
|
||||||
|
|
||||||
|
April 2005:
|
||||||
|
|
||||||
|
GnuTLS can now optionally be used for the secure layer when curl is built.
|
||||||
|
|
||||||
|
September 2005:
|
||||||
|
|
||||||
|
TFTP support was added.
|
||||||
|
|
||||||
|
More than 100,000 unique visitors of the curl web site. 25 mirrors.
|
||||||
|
|||||||
@@ -1,25 +0,0 @@
|
|||||||
Steps To Perform When Building a Public Release
|
|
||||||
|
|
||||||
* "make distcheck"
|
|
||||||
|
|
||||||
* ./maketgz
|
|
||||||
then upload the 3 curl packages maketgz created
|
|
||||||
|
|
||||||
* update these files:
|
|
||||||
www/_download.html
|
|
||||||
www/_changes.html
|
|
||||||
www/_newslog.html
|
|
||||||
www/Makefile
|
|
||||||
|
|
||||||
* commit the web changes
|
|
||||||
|
|
||||||
* 'cvs commit'
|
|
||||||
|
|
||||||
* 'cvs tag'
|
|
||||||
|
|
||||||
* write the release announcement, including:
|
|
||||||
- changes / bugfixes
|
|
||||||
- other curl-related news
|
|
||||||
- contributors
|
|
||||||
|
|
||||||
* mail release-announcement to curl-announce and curl-users
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user