Compare commits
1135 Commits
curl-7_11_
...
curl-7_12_
Author | SHA1 | Date | |
---|---|---|---|
![]() |
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 | ||
![]() |
39626d8cfd | ||
![]() |
67ad29e716 | ||
![]() |
8bbf9b13af | ||
![]() |
cb21851c74 | ||
![]() |
8d611bec6e | ||
![]() |
1de1dc7314 | ||
![]() |
aca79af7de | ||
![]() |
da6eea9b38 | ||
![]() |
dcf7310b2d | ||
![]() |
c2e8ba0fba | ||
![]() |
a5360255ba | ||
![]() |
5690a2b493 | ||
![]() |
ff0429a802 | ||
![]() |
46cdc83b81 | ||
![]() |
76dfef7117 | ||
![]() |
de2aeb9fc2 | ||
![]() |
17a5b44205 | ||
![]() |
f99e347878 | ||
![]() |
f5a0c17322 | ||
![]() |
8442c3942d | ||
![]() |
15cd35f67f | ||
![]() |
459801d6e0 | ||
![]() |
2c43d64302 | ||
![]() |
fd802db39f | ||
![]() |
765754d39d | ||
![]() |
f7f6b288eb | ||
![]() |
11ee9540bf | ||
![]() |
f6319bd706 | ||
![]() |
0912015a5c | ||
![]() |
4e7575fc7a | ||
![]() |
6531a6116d | ||
![]() |
9a33561e80 | ||
![]() |
88229a0f2a | ||
![]() |
120394cc45 | ||
![]() |
1adfe0fe18 | ||
![]() |
d57c178a62 | ||
![]() |
6faa83bc6a | ||
![]() |
9fb4e019fa | ||
![]() |
74551597b1 | ||
![]() |
37c269d0ba | ||
![]() |
5d8b526b80 | ||
![]() |
83dcc3e061 | ||
![]() |
4ed58463f7 | ||
![]() |
85b2056dc7 | ||
![]() |
94ca911dc1 | ||
![]() |
24420c2191 | ||
![]() |
59f904d8de | ||
![]() |
755f98e768 | ||
![]() |
aadc797225 | ||
![]() |
5c882bdfa3 | ||
![]() |
60f9450594 | ||
![]() |
ff52ba7f7b | ||
![]() |
0fbcea45d6 | ||
![]() |
ca6d430561 | ||
![]() |
91601b3bf4 | ||
![]() |
cdd70596df | ||
![]() |
7e186f9a63 | ||
![]() |
a94e117ede | ||
![]() |
662cb30372 | ||
![]() |
bd3aba5d6a | ||
![]() |
29ed6d24bf | ||
![]() |
e2c5c20896 | ||
![]() |
7c4b6cb0d9 | ||
![]() |
aced2904ff | ||
![]() |
17eb1fca7c | ||
![]() |
2511d1193a | ||
![]() |
e9056f5f95 | ||
![]() |
a9893ca79a | ||
![]() |
f39f7c28f0 | ||
![]() |
a807065ccc | ||
![]() |
67532e916c | ||
![]() |
3920b4dae8 | ||
![]() |
d70a335dce | ||
![]() |
8001921112 | ||
![]() |
d7cb09bd18 | ||
![]() |
e11710714c | ||
![]() |
5b0bfc298f | ||
![]() |
0383f7f19d | ||
![]() |
23a43c6e0f | ||
![]() |
eb946690d2 | ||
![]() |
c090fdbdf1 | ||
![]() |
de279099e5 | ||
![]() |
6bd8db3c99 | ||
![]() |
6176f14141 | ||
![]() |
512e54ff85 | ||
![]() |
a5aa569fe3 | ||
![]() |
e2e593a036 | ||
![]() |
9ce0a7b49d | ||
![]() |
4ab0d74250 | ||
![]() |
b5f85ba77d | ||
![]() |
b6ee33c6e1 | ||
![]() |
1c69b15c7c | ||
![]() |
54cd2bee58 | ||
![]() |
5bf02b16a0 | ||
![]() |
594cb8507b | ||
![]() |
78aba6e4cd | ||
![]() |
ccdcdb2a46 | ||
![]() |
b121e41ec3 | ||
![]() |
05d8e56ffd | ||
![]() |
4345c7a712 | ||
![]() |
12d5e33dc9 | ||
![]() |
6d70a82757 | ||
![]() |
47d52d4eca | ||
![]() |
4973b0f88a | ||
![]() |
d1542bf549 | ||
![]() |
2b7727aad1 | ||
![]() |
fd775454ca | ||
![]() |
8e09a389c4 | ||
![]() |
aa3ae01878 | ||
![]() |
c123676825 | ||
![]() |
d60c22572b | ||
![]() |
1d7ce36791 | ||
![]() |
34e8baab9a | ||
![]() |
a219d774fe | ||
![]() |
005042e973 | ||
![]() |
d301d69fbf | ||
![]() |
34af02caca | ||
![]() |
91025d1dd6 | ||
![]() |
c9bab31a7f | ||
![]() |
2f60e91a9b | ||
![]() |
018affe6d0 | ||
![]() |
aeb27ccfdb | ||
![]() |
939866faab | ||
![]() |
98f968f2ee | ||
![]() |
864f1a3366 | ||
![]() |
f42b10242f | ||
![]() |
853134017d | ||
![]() |
d3999e06d1 | ||
![]() |
0b0b37cffe | ||
![]() |
a13f5888d5 | ||
![]() |
c8807438ce | ||
![]() |
3f106afd00 | ||
![]() |
d925057e11 | ||
![]() |
bbafb2eb27 | ||
![]() |
434bc13812 | ||
![]() |
5c592f7dd9 | ||
![]() |
9bf1ba2f7e | ||
![]() |
724e4a3585 | ||
![]() |
f69711fc78 | ||
![]() |
04e2520dbb | ||
![]() |
7a35fb5403 | ||
![]() |
63f97b38eb | ||
![]() |
b8541929c8 | ||
![]() |
329f17ac7c | ||
![]() |
5dcab07c54 | ||
![]() |
1f798affb9 | ||
![]() |
a2ecdf4249 | ||
![]() |
71fdc063bd | ||
![]() |
887d78a9ad | ||
![]() |
00557a5475 | ||
![]() |
e18d27b78a | ||
![]() |
228fea4628 | ||
![]() |
e64dacb40e | ||
![]() |
fff01f24bf | ||
![]() |
e55dee3807 | ||
![]() |
8c2ce33c0b | ||
![]() |
135394f511 | ||
![]() |
fe065dc851 | ||
![]() |
445c7791a7 | ||
![]() |
686ba84128 | ||
![]() |
3394c01826 | ||
![]() |
d67ea8c7ad | ||
![]() |
535046430a | ||
![]() |
9aebdff219 | ||
![]() |
90da930131 | ||
![]() |
fbdc1b1e3d | ||
![]() |
e942df755b | ||
![]() |
91c8be3628 | ||
![]() |
d56c03840b | ||
![]() |
d3d5cdf305 | ||
![]() |
af43ce73e5 | ||
![]() |
84b52e92f4 | ||
![]() |
0aa7d11cc9 | ||
![]() |
933f7cecae | ||
![]() |
8e73e55336 | ||
![]() |
55c015c136 | ||
![]() |
bde6c6685e | ||
![]() |
58387b91f9 | ||
![]() |
6f74820cfc | ||
![]() |
af72f198ba | ||
![]() |
3fc831f9eb | ||
![]() |
9f660862ec | ||
![]() |
1354671c90 | ||
![]() |
1175a226e3 | ||
![]() |
358b72bb12 | ||
![]() |
6c408c885a | ||
![]() |
9cf04dff6a | ||
![]() |
6bdcfecbcf | ||
![]() |
3f21fe60fc | ||
![]() |
b2c290e40e | ||
![]() |
bc5b2fa12c | ||
![]() |
32a9554c92 | ||
![]() |
afc1ed60f7 | ||
![]() |
91018f4f24 | ||
![]() |
fb086b57a8 | ||
![]() |
3fc39a6efb | ||
![]() |
6062ac7c37 | ||
![]() |
caf7854a3c | ||
![]() |
6def0892ea | ||
![]() |
1c0744bde6 | ||
![]() |
7591e07b7c | ||
![]() |
35ab93f484 | ||
![]() |
dcf5e52b62 | ||
![]() |
aae521d086 | ||
![]() |
78e6508e22 | ||
![]() |
4d9517f0b4 | ||
![]() |
a331aa0221 | ||
![]() |
679cabb532 | ||
![]() |
7332350e85 | ||
![]() |
69f4dda74a | ||
![]() |
c19c3bd15a | ||
![]() |
76ff92b811 | ||
![]() |
4250637e7d | ||
![]() |
08d1da106e | ||
![]() |
9e31a0536e | ||
![]() |
2960d37d71 | ||
![]() |
c63af5fc01 | ||
![]() |
fc6eff13b5 | ||
![]() |
e7ee1ccf45 | ||
![]() |
98bf69f8f1 | ||
![]() |
0363fbc411 | ||
![]() |
e3bc92ae53 | ||
![]() |
27e76021e9 | ||
![]() |
93dde29979 | ||
![]() |
d42dcd60cd | ||
![]() |
ade89799f5 | ||
![]() |
6e118ce50f | ||
![]() |
34be9df773 | ||
![]() |
7356a67780 | ||
![]() |
f77949ef3b | ||
![]() |
26b8b3fc53 | ||
![]() |
38cc79a54f | ||
![]() |
ec113aefb9 | ||
![]() |
913e1570bd | ||
![]() |
e2aaf22d5d | ||
![]() |
3304589043 | ||
![]() |
0247642bb6 | ||
![]() |
19f5aa165c | ||
![]() |
1756499b11 | ||
![]() |
15f9a93c25 | ||
![]() |
e99287734b | ||
![]() |
8349dde0f1 | ||
![]() |
59907ebc0e | ||
![]() |
da91d6ac66 | ||
![]() |
7548115a0e | ||
![]() |
8ca37dd1c7 | ||
![]() |
31e9e4bb76 | ||
![]() |
84a322ab23 | ||
![]() |
707f217b2d | ||
![]() |
e6b45a66ec | ||
![]() |
b34c40dcf5 | ||
![]() |
699ebe2f0b | ||
![]() |
e1c6f216c2 | ||
![]() |
630b73bfa8 | ||
![]() |
877f16e5a5 | ||
![]() |
fbe1fa9dcc | ||
![]() |
5b65cc55a2 | ||
![]() |
97769737d0 | ||
![]() |
5b0a5c4050 | ||
![]() |
4b9f8e766d | ||
![]() |
96002646f1 | ||
![]() |
5ef6904ec3 | ||
![]() |
2f53da5e7a | ||
![]() |
58f1cc0b5f | ||
![]() |
98c70b73f2 | ||
![]() |
6bd02a3ab5 | ||
![]() |
372e7a6cd4 | ||
![]() |
211004bb0d | ||
![]() |
80d2fff1a1 | ||
![]() |
cf3cf413c8 | ||
![]() |
e218811ca3 | ||
![]() |
a9f2274bd8 | ||
![]() |
92179ff990 | ||
![]() |
4aac210a83 | ||
![]() |
245e3122df | ||
![]() |
ffc5fa3a2b | ||
![]() |
f5042cce34 | ||
![]() |
712c67b4ae | ||
![]() |
5dcfb8ad66 | ||
![]() |
673ff5eb2c | ||
![]() |
92fc3f07ba | ||
![]() |
cff90cf3f9 | ||
![]() |
a33c53a36b | ||
![]() |
2370d4fa02 | ||
![]() |
f128d904a5 | ||
![]() |
fb1039f2ab | ||
![]() |
923ce98e42 | ||
![]() |
8e935b58a2 | ||
![]() |
c93e972543 | ||
![]() |
1cb66f5262 | ||
![]() |
648e82f05d | ||
![]() |
1dbe60b8b7 | ||
![]() |
9631fa7407 | ||
![]() |
9befc682ee | ||
![]() |
fbeb674479 | ||
![]() |
af641d20a7 | ||
![]() |
d02587750c | ||
![]() |
241a4b3d45 | ||
![]() |
496e81a25a | ||
![]() |
f39b081253 | ||
![]() |
c96f7f13da | ||
![]() |
1bdc4b2006 | ||
![]() |
3915fecf80 | ||
![]() |
f94f06825c | ||
![]() |
2ddbf8975a | ||
![]() |
68a3cbe384 | ||
![]() |
b9432d1296 | ||
![]() |
e202a29a9a | ||
![]() |
3755bffcc2 | ||
![]() |
2a0a305300 | ||
![]() |
70e2aadc18 | ||
![]() |
a1c8aaf666 | ||
![]() |
8ee470aaeb | ||
![]() |
37e4858cd0 | ||
![]() |
a27072bebb | ||
![]() |
47059f45fe | ||
![]() |
daced8041d | ||
![]() |
b053ae6a65 | ||
![]() |
42f60ecb36 | ||
![]() |
550862f41a | ||
![]() |
6838f74fe0 | ||
![]() |
2ff30d067c | ||
![]() |
84406b3e2c | ||
![]() |
c323969bdd | ||
![]() |
43cbbdbea0 | ||
![]() |
1d3f76df71 | ||
![]() |
33cb93ad0b | ||
![]() |
4dc9179f4b | ||
![]() |
26a5ec9aa0 | ||
![]() |
883ea3113c | ||
![]() |
62b7c08bb3 | ||
![]() |
a85fa66cc8 | ||
![]() |
9ba010c629 | ||
![]() |
3ef3f2b6f0 | ||
![]() |
1401d909e8 | ||
![]() |
3233322622 | ||
![]() |
e373f1fd73 | ||
![]() |
dc25cd6f3a | ||
![]() |
0e31d41d4e | ||
![]() |
b7a7600465 | ||
![]() |
111a2f3057 | ||
![]() |
760cecac8d | ||
![]() |
6f8b4395ec | ||
![]() |
5506f8767c | ||
![]() |
5887945828 | ||
![]() |
25e98179be | ||
![]() |
78ebe3fa5a | ||
![]() |
a8e8e51b14 | ||
![]() |
f97d194934 | ||
![]() |
4661cc7403 | ||
![]() |
bc11929395 | ||
![]() |
caf37bc92e | ||
![]() |
5de447b0cb | ||
![]() |
5dbaced4a2 | ||
![]() |
43f8a1f5de | ||
![]() |
f57efa1899 | ||
![]() |
592522ceaf | ||
![]() |
4f84e6d9e2 | ||
![]() |
6f08903f07 | ||
![]() |
220cd010bd | ||
![]() |
68e8a0f0d9 | ||
![]() |
b23dbf9f34 | ||
![]() |
1d0b5b507a | ||
![]() |
b83d8104cd | ||
![]() |
bf6e1053cf | ||
![]() |
c3dd928e29 | ||
![]() |
aba6c2b89d | ||
![]() |
9c0a386246 | ||
![]() |
bba3bb7556 | ||
![]() |
c1422864b5 | ||
![]() |
31a693b99a | ||
![]() |
804534fbc9 | ||
![]() |
1bc6532c16 | ||
![]() |
b48bf7470d | ||
![]() |
1ca9ce5ef4 | ||
![]() |
789f2ecbe7 | ||
![]() |
ee7d1d0701 | ||
![]() |
4e3aa250c4 | ||
![]() |
3647a6ddcd | ||
![]() |
79aaa85a51 | ||
![]() |
392a543eff | ||
![]() |
eb6345de60 | ||
![]() |
0fd3b7a00a | ||
![]() |
bd51b80fa5 | ||
![]() |
15c900839b | ||
![]() |
2fd463e979 | ||
![]() |
de8660a96a | ||
![]() |
1e9cb272f1 | ||
![]() |
72b1144b8c | ||
![]() |
348fe0e210 | ||
![]() |
cf1f46e1ca | ||
![]() |
f052cbee19 | ||
![]() |
1f5e8670e1 | ||
![]() |
3b491d0f73 | ||
![]() |
26a2b8d26d | ||
![]() |
a7fd6f9007 | ||
![]() |
8ed44e8dfb | ||
![]() |
f617c1131a | ||
![]() |
5ca47f19d7 | ||
![]() |
9044fcbb5f | ||
![]() |
7a82810b59 | ||
![]() |
0ccdf3d0e6 | ||
![]() |
ca7f0852df | ||
![]() |
780b962336 | ||
![]() |
bbeb840916 | ||
![]() |
f4ec465bfc | ||
![]() |
57c86a953d | ||
![]() |
0fff8656e9 | ||
![]() |
7b929636ee | ||
![]() |
76835a2e00 | ||
![]() |
1b171b02ac | ||
![]() |
a8dc362572 | ||
![]() |
7c72f8ee6c | ||
![]() |
c39a54609b | ||
![]() |
ce6b767b47 | ||
![]() |
7ba4d3464f | ||
![]() |
03def138fe | ||
![]() |
9d99af5329 | ||
![]() |
c8d850dbad | ||
![]() |
01ea357744 | ||
![]() |
ad9e83a90f | ||
![]() |
6c9d96e811 | ||
![]() |
f840e5192c | ||
![]() |
ba9272dd05 | ||
![]() |
675db3a211 | ||
![]() |
1fc7ff878e | ||
![]() |
b643d148b1 | ||
![]() |
5804c995e1 | ||
![]() |
13a6f85320 | ||
![]() |
8b4582f111 | ||
![]() |
cd3bf7c56f | ||
![]() |
ee1595dcd5 | ||
![]() |
310086deed | ||
![]() |
5d27f50f2f | ||
![]() |
9d0330d5bd | ||
![]() |
d5074f74bb | ||
![]() |
ea0cf7c87b | ||
![]() |
a56164c8e0 | ||
![]() |
cd95bb22ea | ||
![]() |
1745ecd8ac | ||
![]() |
75d66b9c62 | ||
![]() |
2ff9f55001 | ||
![]() |
ce446dbdc2 | ||
![]() |
dd2add82ee | ||
![]() |
40d9855df2 | ||
![]() |
ecf7adba15 | ||
![]() |
931c847e2b | ||
![]() |
8230d9bff8 | ||
![]() |
64cc14e9e6 | ||
![]() |
d5b8971ff3 | ||
![]() |
7ea837a18c | ||
![]() |
b8b8473b6d | ||
![]() |
894dbae455 | ||
![]() |
2c11425868 | ||
![]() |
a2ea0abf7f | ||
![]() |
be8f8e66a4 | ||
![]() |
9fadfffb9d | ||
![]() |
76f23acfa1 | ||
![]() |
6950aeafcc | ||
![]() |
cd160a66c9 | ||
![]() |
a7376968d2 | ||
![]() |
fd96a2af34 | ||
![]() |
a90cd1a45c | ||
![]() |
8e92600ddd | ||
![]() |
5e75c310ba | ||
![]() |
20cab07c29 | ||
![]() |
f466d7a6f1 | ||
![]() |
dc46f535ae | ||
![]() |
27fd5d6d6a | ||
![]() |
18a3c3302f | ||
![]() |
97959a00d7 | ||
![]() |
5e92b2906b | ||
![]() |
126ed14313 | ||
![]() |
712d0374f7 | ||
![]() |
4b49b2e3cf | ||
![]() |
d85c21994f | ||
![]() |
6b33a5f954 | ||
![]() |
ed22afe5fb | ||
![]() |
843391c745 | ||
![]() |
ad6699e0c4 | ||
![]() |
43137cf595 | ||
![]() |
db6dc49b0b | ||
![]() |
593170d1de | ||
![]() |
0eace2fefe | ||
![]() |
abd65e21c6 | ||
![]() |
e21104a865 | ||
![]() |
3ecf63fa66 | ||
![]() |
762dcf0780 | ||
![]() |
75ee9b5333 | ||
![]() |
e161bdc5be | ||
![]() |
bb3d6e8552 | ||
![]() |
189c2f4989 | ||
![]() |
f28389c87b | ||
![]() |
7461592a16 | ||
![]() |
50b0e72f7b | ||
![]() |
76e73cfec8 | ||
![]() |
5d8ec172a6 | ||
![]() |
0953140b53 | ||
![]() |
6c2825997a | ||
![]() |
accc6eb91a | ||
![]() |
eab8cdc640 | ||
![]() |
dc9d0f256d | ||
![]() |
b60d6404d8 | ||
![]() |
08fe4b3210 | ||
![]() |
0e60a118d0 | ||
![]() |
4b78b4124e | ||
![]() |
0d6d9af7ab | ||
![]() |
41cd36b830 | ||
![]() |
242be55771 | ||
![]() |
7cf47ea5b5 | ||
![]() |
6fb0012833 | ||
![]() |
9d1ce9c0df | ||
![]() |
5947e4e9fd | ||
![]() |
e992aa6a54 | ||
![]() |
2cf218610e | ||
![]() |
fe6f0aeb26 | ||
![]() |
bd04c6fb67 | ||
![]() |
c5637baa06 | ||
![]() |
f8426a2c44 | ||
![]() |
0c791d1e76 | ||
![]() |
c4a89d29f6 | ||
![]() |
306ff5649a | ||
![]() |
1c652dfc5d | ||
![]() |
1f61e7f8f4 | ||
![]() |
1a5f190e47 | ||
![]() |
570033448c | ||
![]() |
f44b655513 | ||
![]() |
0aa720fa26 | ||
![]() |
d44f3f84f8 | ||
![]() |
d426db3d27 | ||
![]() |
0fd88d7c8f | ||
![]() |
4e84ac4db8 | ||
![]() |
da5c8a121f | ||
![]() |
76c36688d0 | ||
![]() |
651c8d3bc4 | ||
![]() |
a8a946d71d | ||
![]() |
c5c005609e | ||
![]() |
97886f9353 | ||
![]() |
a784bd0797 | ||
![]() |
4aacf65678 | ||
![]() |
dd1ba7633e | ||
![]() |
a4ea5a4054 | ||
![]() |
69060b1382 | ||
![]() |
a6562ea77d | ||
![]() |
ad3563096a | ||
![]() |
c5f02c1986 | ||
![]() |
7ef5d20cad | ||
![]() |
98b619c3a7 | ||
![]() |
5b75919f95 | ||
![]() |
20b76e09e3 | ||
![]() |
67fca4cb01 | ||
![]() |
606715b2cd | ||
![]() |
ce04b35032 | ||
![]() |
ec7f244ee9 |
1572
CHANGES.2003
Normal file
1572
CHANGES.2003
Normal file
File diff suppressed because it is too large
Load Diff
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
|
||||||
|
@@ -23,8 +23,8 @@
|
|||||||
|
|
||||||
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
|
||||||
|
|
||||||
bin_SCRIPTS = curl-config
|
bin_SCRIPTS = curl-config
|
||||||
|
|
||||||
@@ -54,6 +54,9 @@ test:
|
|||||||
test-full:
|
test-full:
|
||||||
@(cd tests; $(MAKE) all full-test)
|
@(cd tests; $(MAKE) all full-test)
|
||||||
|
|
||||||
|
test-torture:
|
||||||
|
@(cd tests; $(MAKE) all torture-test)
|
||||||
|
|
||||||
#
|
#
|
||||||
# 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:
|
||||||
|
@@ -30,8 +30,28 @@ 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
|
||||||
|
|
||||||
mingw32:
|
mingw32:
|
||||||
cd lib & make -f Makefile.m32 ZLIB=1
|
cd lib & make -f Makefile.m32 ZLIB=1
|
||||||
@@ -41,18 +61,34 @@ mingw32-ssl:
|
|||||||
cd lib & make -f Makefile.m32 SSL=1 ZLIB=1
|
cd lib & make -f Makefile.m32 SSL=1 ZLIB=1
|
||||||
cd src & make -f Makefile.m32 SSL=1 ZLIB=1
|
cd src & make -f Makefile.m32 SSL=1 ZLIB=1
|
||||||
|
|
||||||
|
mingw32-clean:
|
||||||
|
cd lib & make -f Makefile.m32 clean
|
||||||
|
cd src & make -f Makefile.m32 clean
|
||||||
|
|
||||||
vc:
|
vc:
|
||||||
cd lib
|
cd lib
|
||||||
nmake /f Makefile.vc6 cfg=release
|
nmake /f Makefile.vc6 cfg=release
|
||||||
cd ..\src
|
cd ..\src
|
||||||
nmake /f Makefile.vc6
|
nmake /f Makefile.vc6
|
||||||
|
|
||||||
|
vc-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
|
||||||
@@ -82,8 +118,16 @@ 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-ssl:
|
||||||
|
$(MAKE) -C lib -f Makefile.netware SSL=1
|
||||||
|
$(MAKE) -C src -f Makefile.netware SSL=1
|
||||||
|
|
||||||
|
netware-clean:
|
||||||
|
$(MAKE) -C lib -f Makefile.netware clean
|
||||||
|
$(MAKE) -C src -f Makefile.netware clean
|
||||||
|
|
||||||
unix: all
|
unix: all
|
||||||
|
|
||||||
|
34
README
34
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.
|
||||||
@@ -17,7 +17,9 @@ README
|
|||||||
|
|
||||||
You find answers to the most frequent questions we get in the FAQ document.
|
You find answers to the most frequent questions we get in the FAQ document.
|
||||||
|
|
||||||
Study the COPYING file for distribution terms and similar.
|
Study the COPYING file for distribution terms and similar. If you distribute
|
||||||
|
curl binaries or other binaries that involve libcurl, you might enjoy the
|
||||||
|
LICENSE-MIXING document.
|
||||||
|
|
||||||
CONTACT
|
CONTACT
|
||||||
|
|
||||||
@@ -32,42 +34,44 @@ WEB SITE
|
|||||||
|
|
||||||
Sweden -- http://curl.haxx.se/
|
Sweden -- http://curl.haxx.se/
|
||||||
Australia -- http://curl.planetmirror.com/
|
Australia -- http://curl.planetmirror.com/
|
||||||
Estonia -- http://curl.dope-brothers.com/
|
Denmark -- http://curl.cofman.dk/
|
||||||
|
Estonia -- http://curl.wildyou.net/
|
||||||
Germany -- http://curl.mirror.at.stealer.net/
|
Germany -- http://curl.mirror.at.stealer.net/
|
||||||
|
Germany -- http://curl.netmirror.org/
|
||||||
Russia -- http://curl.tsuren.net/
|
Russia -- http://curl.tsuren.net/
|
||||||
Thailand -- http://curl.siamu.ac.th/
|
Thailand -- http://curl.siamu.ac.th/
|
||||||
US (CA) -- http://curl.mirror.redwire.net/
|
US (CA) -- http://curl.mirror.redwire.net/
|
||||||
|
US -- http://curl.signal42.com/
|
||||||
|
|
||||||
DOWNLOAD
|
DOWNLOAD
|
||||||
|
|
||||||
The official download mirror sites are:
|
The official download mirror sites are:
|
||||||
|
|
||||||
Australia -- http://curl.planetmirror.com/download/
|
Australia -- http://curl.planetmirror.com/download.html
|
||||||
Estonia -- http://curl.dope-brothers.com/download/
|
Estonia -- http://curl.wildyou.net/download.html
|
||||||
Germany -- ftp://ftp.fu-berlin.de/pub/unix/network/curl/
|
Germany -- ftp://ftp.fu-berlin.de/pub/unix/network/curl/
|
||||||
|
Germany -- http://curl.mirror.at.stealer.net/download.html
|
||||||
|
Germany -- http://curl.netmirror.org/download.html
|
||||||
|
Germany -- http://www.mirrorspace.org/curl/
|
||||||
Hongkong -- http://www.execve.net/curl/
|
Hongkong -- http://www.execve.net/curl/
|
||||||
Russia -- http://curl.tsuren.net/download/
|
Russia -- http://curl.tsuren.net/download.html
|
||||||
Sweden -- ftp://ftp.sunet.se/pub/www/utilities/curl/
|
Sweden -- ftp://ftp.sunet.se/pub/www/utilities/curl/
|
||||||
Sweden -- http://cool.haxx.se/curl/
|
Sweden -- http://cool.haxx.se/curl/
|
||||||
Thailand -- http://curl.siamu.ac.th/download/
|
Thailand -- http://curl.siamu.ac.th/download.html
|
||||||
US (CA) -- http://curl.mirror.redwire.net/download/
|
US (CA) -- http://curl.mirror.redwire.net/download.html
|
||||||
|
|
||||||
CVS
|
CVS
|
||||||
|
|
||||||
To download the very latest source off the CVS server do this:
|
To download the very latest source off the CVS server do this:
|
||||||
|
|
||||||
cvs -d :pserver:cvsread@cvs.php.net:/repository login
|
cvs -d :pserver:anonymous@cool.haxx.se:/cvsroot/curl login
|
||||||
|
|
||||||
(enter "phpfi" when asked for password)
|
(just press enter when asked for password)
|
||||||
|
|
||||||
cvs -d :pserver:cvsread@cvs.php.net:/repository co curl
|
cvs -d :pserver:anonymous@cool.haxx.se:/cvsroot/curl co curl
|
||||||
|
|
||||||
(you'll get a directory named curl created, filled with the source code)
|
(you'll get a directory named curl created, filled with the source code)
|
||||||
|
|
||||||
cvs -d :pserver:cvsread@cvs.php.net:/repository logout
|
|
||||||
|
|
||||||
(you're off the hook!)
|
|
||||||
|
|
||||||
NOTICE
|
NOTICE
|
||||||
|
|
||||||
Curl contains pieces of source code that is Copyright (c) 1998, 1999
|
Curl contains pieces of source code that is Copyright (c) 1998, 1999
|
||||||
|
139
RELEASE-NOTES
139
RELEASE-NOTES
@@ -1,89 +1,84 @@
|
|||||||
Curl and libcurl 7.11.1. A bugfix release.
|
Curl and libcurl 7.12.2
|
||||||
|
|
||||||
Public curl release number: 79
|
Public curl release number: 83
|
||||||
Releases counted from the very beginning: 106
|
Releases counted from the very beginning: 110
|
||||||
Available command line options: 94
|
Available command line options: 96
|
||||||
Available curl_easy_setopt() options: 112
|
Available curl_easy_setopt() options: 121
|
||||||
|
Number of public functions in libcurl: 36
|
||||||
|
Amount of public web site mirrors: 13
|
||||||
|
Number of known libcurl bindings: 27
|
||||||
|
|
||||||
This release includes the following changes:
|
This release includes the following changes:
|
||||||
|
|
||||||
o CURLOPT_POSTFIELDSIZE_LARGE added to offer POSTs larger than 2GB
|
o the IDN code now verifies that only TLD-legitmate letters are used in the
|
||||||
o CURL_VERSION_LARGEFILE is a feature bit returned by libcurls that feature
|
name or a warning is displayed (when verbose is enabled)
|
||||||
large file support
|
o provides error texts for IDN errors
|
||||||
o libcurl only requires winsock 1.1 on windows now
|
o file upload parts in formposts now get their directory names cut off
|
||||||
o when doing FTP, curl now sends QUIT before disconnecting
|
o added CURLINFO_OS_ERRNO
|
||||||
o name resolves can now timeout on windows too
|
o added CURLOPT_FTPSSLAUTH to allow ftp connects to attempt "AUTH TLS" instead
|
||||||
o $HOME is now recognized better when looking for .netrc files
|
before "AUTH SSL"
|
||||||
o now re-uses the ares handle when re-using curl handles
|
o curl_getdate() completely rewritten: may affect rare curl -z use cases
|
||||||
o SO_BINDTODEVICE is used for network interface binding
|
|
||||||
o configure --disable-manual disables the built-in huge manual from the
|
|
||||||
command line tool
|
|
||||||
o the default Accept: header used in HTTP requests changed
|
|
||||||
o asynch dns lookups now require the c-ares library
|
|
||||||
o curl --socks can be used to set a SOCKS5 proxy to use
|
|
||||||
o response-headers received after a (proxy) CONNECT request are now passed
|
|
||||||
to the header callback just like other headers
|
|
||||||
|
|
||||||
This release includes the following bugfixes:
|
This release includes the following bugfixes:
|
||||||
|
|
||||||
o builds and runs on Novell NetWare
|
o CURLOPT_FTP_CREATE_MISSING_DIRS works for third party transfers
|
||||||
o Windows builds now report OS as "i386-pc-win32"
|
o memory leak for cookies received with max-age set
|
||||||
o received signals during SSL connect is handled better
|
o potential memory leaks in the window name resolver
|
||||||
o improved PUT/POST with NTLM/Digest authentication
|
o URLs with ?-letters in the user name or password fields
|
||||||
o following redirects and doing NTLM/Digest (where the first connection gets
|
o libcurl error message is now provided when send() fails
|
||||||
closed) with the multi interface work better now
|
o no more SIGPIPE on Mac OS X and other SO_NOSIGPIPE-supporting platforms
|
||||||
o file: progress meter and getinfo variables work now
|
o HTTP resume was refused if redirected
|
||||||
o CURLOPT_FRESH_CONNECT and CURLAUTH_NTLM now work when set together
|
o configure's gethostbyname check when both nsl and socket libs are required
|
||||||
o share interface usage without (un)lock functions segfaulted
|
o configure --with-libidn now checks the given path before defaults
|
||||||
o --limit-rate no longer cripples the --speed-limit feature
|
o a race condition sometimes resulting in CURLE_COULDNT_RESOLVE_HOST in the
|
||||||
o fixed verbose output problem with ipv6-enabled re-used connections
|
windows threaded name resolver code
|
||||||
o fixed the socks5 code to check version in the socks response properly
|
o isspace() invokes with negative values in the cookie code
|
||||||
o dns cache bug - fixed the 'inuse' counter
|
o a case of read-already-freed-data when CURLOPT_VERBOSE is used and a (very)
|
||||||
o large file fix for Content-Length
|
persistent connection
|
||||||
o better docs for the share interface
|
o now includes descriptive error messages for IDN errors
|
||||||
o several configure fixes for mingw/msys
|
o more forgivning PASS response code check for better working with proftpd
|
||||||
o setting a Host: header is no longer affecting the Host: header used when
|
o curl/multi.h works better included in winsock-using apps
|
||||||
libcurl follows a Location:
|
o curl_easy_reset() no longer enables the progress meter
|
||||||
o fixed numerous compiler warnings on several operating systems and compilers
|
o build fix for SSL disabled curl with SSL Engine support present
|
||||||
o PUTing from stdin couldn't disable chunked transfer-encoding
|
o configure --with-ssl=PATH now ignores pkg-config path info
|
||||||
o corrected the mingw makefiles
|
o CURLOPT_SSLENGINE can be set to NULL even if no engine support is available
|
||||||
o improved the configure libz detection
|
o LDAP crash when more than one record was received
|
||||||
o fixed EPRT/PORT use when doing FTP on ipv6-enabled AIX hosts
|
o connect failures properly stores an error message in the errorbuffer
|
||||||
o *nroff commands that only support -mandoc and not -man are now supported
|
o Rare Location:-following problem with bad original URL
|
||||||
(for the built-in manual text in the command line tool)
|
o -F can now add Content-Type on non-file sections
|
||||||
o fixed the unconditional #include of config.h in hugehelp.c
|
o double Host: header when following Location: with replaced Host:
|
||||||
o builds fine on MPE/iX
|
o curl_multi_add_handle() return code
|
||||||
o upload using chunked transfer-encoding now sends the last chunk properly
|
o "Proxy-Connection: close" is now understood and properly dealt with
|
||||||
teriminated with an extra CRLF
|
o curl_getdate() crash
|
||||||
o Fixed the progress meter display for files >2GB
|
o downloading empty files now calls the write callback properly
|
||||||
o persistant connections over a proxy messed up the proxy name/password
|
o no reverse DNS lookups for ip-only addresses with ipv6-enabled libcurl
|
||||||
o the socks5 code segfaulted if no username/password was set
|
o file handler leak when getting an empty file:// URL
|
||||||
o the *_LARGE options now take curl_off_t types as parameters and this will
|
o libcurl works better multi-threaded on AIX (when built with xlc)
|
||||||
make it possible to handle large files on windows too
|
o cookies over proxy didn't match the path properly
|
||||||
o builds with large file support even on systems without strtoll()
|
o MSVC makefile fixes to build better
|
||||||
|
o FTP response 530 on 'PASS' now sends back a better error message
|
||||||
|
|
||||||
Other curl-related news since the previous public release:
|
Other curl-related news since the previous public release:
|
||||||
|
|
||||||
o Many platforms are being used to autobuild and autotest curl on a daily
|
o AdacURL version 7.12.1 http://www.almroth.com/adacurl/index.html
|
||||||
basis. Please join in and test curl on your systems:
|
o pycurl version 7.12.1 http://pycurl.sourceforge.net/
|
||||||
http://curl.haxx.se/auto/
|
o tclcurl version 0.12.1
|
||||||
o the curl mailing lists moved, (re-)subscribe to the new ones from here:
|
|
||||||
http://curl.haxx.se/mail/
|
|
||||||
o c-ares 1.1.0 was relased: http://daniel.haxx.se/projects/c-ares/
|
|
||||||
o TclCurl 0.11.0 was released:
|
|
||||||
http://personal1.iddeo.es/andresgarci/tclcurl/english/
|
http://personal1.iddeo.es/andresgarci/tclcurl/english/
|
||||||
o PycURL 7.11.0 was released: http://pycurl.sourceforge.net/
|
o libcurl.NET was announce: http://www.seasideresearch.com/downloads.html
|
||||||
o the libcurl D binding was released:
|
o Get your fresh Mozilla-extracted ca cert bundle here:
|
||||||
http://www.atari-soldiers.com/libcurl.html
|
http://curl.haxx.se/docs/caextract.html
|
||||||
o new Estonian web site mirror: http://curl.dope-brothers.com/
|
o New web mirror in Taiwan: http://curl.cs.pu.edu.tw/
|
||||||
|
|
||||||
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, Vincent Bronner, Richard Bramante, Dirk Manske, Dan Fandrich,
|
Casey O'Donnell, Roland Krikava, Alex, Alexander Krasnostavsky, Kjetil
|
||||||
Ken Hirsch, Stadler Stephan, Domenico Andreoli, Patrick Smith, Tor Arntsen,
|
Jacobsen, Ling Thio, Roman Koifman, Harshal Pradhan, Jonas Forsman, David
|
||||||
Andr<EFBFBD>s Garc<72>a, Tim Baker, Len Krause, Gilad, Ken Rastatter, P R Schaffner,
|
Tarendash, Daniel at touchtunes, Bertrand Demiddelaer, Andreas Rieke,
|
||||||
Greg Hewgill, Ben Greear, Jeff Lawson, Grigory Entin, Doug Porter, David
|
Jean-Claude Chauve, Dan Fandrich, Peter Sylvester, "Mekonikum", Jean-Philippe
|
||||||
Byron, Andy Serpa, Joe Halpin, Christopher R. Palmer, G<>nter Knauf
|
Barrette-LaPierre, G<>nter Knauf, Larry Campbell, Fedor Karpelevitch,
|
||||||
|
Aleksandar Milivojevic, Gisle Vanem, Chris "Bob Bob", Chih-Chung Chang, Andy
|
||||||
|
Cedilnik, Alan Pinstein, Eric Vergnaud, Traian Nicolescu, runekl at
|
||||||
|
opoint.com
|
||||||
|
|
||||||
Thanks! (and sorry if I forgot to mention someone)
|
Thanks! (and sorry if I forgot to mention someone)
|
||||||
|
50
TODO-RELEASE
50
TODO-RELEASE
@@ -1,53 +1,11 @@
|
|||||||
Issues not sorted in any particular order.
|
Issues not sorted in any particular order.
|
||||||
#[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.11.1 (planned release in March 2004)
|
To get fixed in 7.12.2 (planned release: mid October 2004)
|
||||||
======================
|
======================
|
||||||
|
|
||||||
To get fixed in 7.11.2 (planned release May/June 2004)
|
To get fixed in 7.12.3 (planned release: December 2004)
|
||||||
======================
|
======================
|
||||||
|
|
||||||
6. REST fix for servers not behaving well on >2GB requests. This should fail
|
47 - Peter Sylvester's patch for SRP on the TLS layer
|
||||||
if the server doesn't set the pointer to the requested index. The tricky
|
|
||||||
part is to figure out if the server did the right thing or not.
|
|
||||||
UNASSIGNED
|
|
||||||
|
|
||||||
10. Anton Fedorov's "dumpcert" patch UNASSIGNED
|
48 - MSVC Makefile improvements by Samuel D<>az Garc<72>a
|
||||||
http://curl.haxx.se/mail/lib-2004-03/0088.html
|
|
||||||
|
|
||||||
14. Evaluate/apply Gertjan van Wingerde's SSL patches, UNASSIGNED
|
|
||||||
http://curl.haxx.se/mail/lib-2004-03/0087.html
|
|
||||||
|
|
||||||
23. Peter Sylvester's "Most Significant Common Name" change. Feedback welcome.
|
|
||||||
At least the UTF8 conversion and comparison should be done. Patch?
|
|
||||||
UNASSIGNED
|
|
||||||
|
|
||||||
24. Make the progress meter use one digit more for the hour time fields.
|
|
||||||
Accomplish this by removing one of the times displayed.
|
|
||||||
|
|
||||||
27. Put the version defines in their own header file, so that lib/libcurl.rc
|
|
||||||
can include only that to reduce problems with MSVC.
|
|
||||||
|
|
||||||
28. Optimize the way libcurl uses CWD on each new request over a persistent
|
|
||||||
connection (on FTP) even if it doesn't have to.
|
|
||||||
|
|
||||||
29. Define USE_NTRESPONSES in the NTLM code to work properly with >14 letter
|
|
||||||
passwords against IIS servers. Requires test cases to be updated
|
|
||||||
accordingly. #915609
|
|
||||||
|
|
||||||
30. Digest re-negotiation is not supported, we wrongly assume a new 401
|
|
||||||
response to signify an authenticaion error. We need to detect the
|
|
||||||
difference between a 401 due to a bad Digest authorization header and a
|
|
||||||
401 because the server wants to re-negotiate.
|
|
||||||
|
|
||||||
Mitz Wark provided details and traces here:
|
|
||||||
http://curl.haxx.se/mail/lib-2004-03/0299.html
|
|
||||||
|
|
||||||
To get fixed in 7.12.0
|
|
||||||
======================
|
|
||||||
|
|
||||||
25. curl_easy_strerror() curl_multi_strerror() curl_share_strerror()
|
|
||||||
|
|
||||||
26. i18n of error messages
|
|
||||||
|
189
acinclude.m4
189
acinclude.m4
@@ -64,7 +64,7 @@ dnl the code was bad, try a different program now, test 3
|
|||||||
],[
|
],[
|
||||||
/* ioctlsocket source code */
|
/* ioctlsocket source code */
|
||||||
int socket;
|
int socket;
|
||||||
int flags = ioctlsocket(socket, FIONBIO, &flags);
|
unsigned long flags = ioctlsocket(socket, FIONBIO, &flags);
|
||||||
],[
|
],[
|
||||||
dnl ioctlsocket test was good
|
dnl ioctlsocket test was good
|
||||||
nonblock="ioctlsocket"
|
nonblock="ioctlsocket"
|
||||||
@@ -245,7 +245,8 @@ AC_DEFUN([CURL_CHECK_WORKING_GETADDRINFO],[
|
|||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
|
|
||||||
void main(void) {
|
int main(void)
|
||||||
|
{
|
||||||
struct addrinfo hints, *ai;
|
struct addrinfo hints, *ai;
|
||||||
int error;
|
int error;
|
||||||
|
|
||||||
@@ -254,11 +255,9 @@ void main(void) {
|
|||||||
hints.ai_socktype = SOCK_STREAM;
|
hints.ai_socktype = SOCK_STREAM;
|
||||||
error = getaddrinfo("127.0.0.1", "8080", &hints, &ai);
|
error = getaddrinfo("127.0.0.1", "8080", &hints, &ai);
|
||||||
if (error) {
|
if (error) {
|
||||||
exit(1);
|
return 1;
|
||||||
}
|
|
||||||
else {
|
|
||||||
exit(0);
|
|
||||||
}
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
],[
|
],[
|
||||||
ac_cv_working_getaddrinfo="yes"
|
ac_cv_working_getaddrinfo="yes"
|
||||||
@@ -276,10 +275,72 @@ if test "$ac_cv_working_getaddrinfo" = "yes"; then
|
|||||||
fi
|
fi
|
||||||
])
|
])
|
||||||
|
|
||||||
|
dnl ************************************************************
|
||||||
|
dnl check for working NI_WITHSCOPEID in getnameinfo()
|
||||||
|
dnl
|
||||||
|
AC_DEFUN([CURL_CHECK_NI_WITHSCOPEID],[
|
||||||
|
AC_CACHE_CHECK(for working NI_WITHSCOPEID, ac_cv_working_ni_withscopeid,[
|
||||||
|
|
||||||
|
AC_RUN_IFELSE([[
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <netdb.h>
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
#ifdef NI_WITHSCOPEID
|
||||||
|
struct sockaddr_storage ss;
|
||||||
|
int sslen = sizeof(ss);
|
||||||
|
int rc;
|
||||||
|
char hbuf[NI_MAXHOST];
|
||||||
|
int fd = socket(AF_INET6, SOCK_STREAM, 0);
|
||||||
|
if(fd < 0) {
|
||||||
|
perror("socket()");
|
||||||
|
return 1; /* couldn't create socket of either kind */
|
||||||
|
}
|
||||||
|
|
||||||
|
rc = getsockname(fd, (struct sockaddr *)&ss, &sslen);
|
||||||
|
if(rc) {
|
||||||
|
perror("getsockname()");
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
rc = getnameinfo((struct sockaddr *)&ss, sslen, hbuf, sizeof(hbuf),
|
||||||
|
NULL, 0,
|
||||||
|
NI_NUMERICHOST | NI_NUMERICSERV | NI_WITHSCOPEID);
|
||||||
|
|
||||||
|
if(rc) {
|
||||||
|
printf("rc = %s\n", gai_strerror(rc));
|
||||||
|
return 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0; /* everything works fine, use NI_WITHSCOPEID! */
|
||||||
|
#else
|
||||||
|
return 4; /* we don't seem to have the definition, don't use it */
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
]],
|
||||||
|
dnl program worked:
|
||||||
|
[ ac_cv_working_ni_withscopeid="yes" ],
|
||||||
|
dnl program failed:
|
||||||
|
[ ac_cv_working_ni_withscopeid="no" ],
|
||||||
|
dnl we cross-compile:
|
||||||
|
[ ac_cv_working_ni_withscopeid="yes" ]
|
||||||
|
) dnl end of AC_RUN_IFELSE
|
||||||
|
|
||||||
|
]) dnl end of AC_CACHE_CHECK
|
||||||
|
|
||||||
|
if test "$ac_cv_working_ni_withscopeid" = "yes"; then
|
||||||
|
AC_DEFINE(HAVE_NI_WITHSCOPEID, 1,
|
||||||
|
[Define if NI_WITHSCOPEID exists and works])
|
||||||
|
fi
|
||||||
|
|
||||||
|
]) dnl end of AC_DEFUN
|
||||||
|
|
||||||
|
|
||||||
AC_DEFUN([CURL_CHECK_LOCALTIME_R],
|
AC_DEFUN([CURL_CHECK_LOCALTIME_R],
|
||||||
[
|
[
|
||||||
dnl check for a few thread-safe functions
|
dnl check for localtime_r
|
||||||
AC_CHECK_FUNCS(localtime_r,[
|
AC_CHECK_FUNCS(localtime_r,[
|
||||||
AC_MSG_CHECKING(whether localtime_r is declared)
|
AC_MSG_CHECKING(whether localtime_r is declared)
|
||||||
AC_EGREP_CPP(localtime_r,[
|
AC_EGREP_CPP(localtime_r,[
|
||||||
@@ -295,6 +356,112 @@ AC_DEFUN([CURL_CHECK_LOCALTIME_R],
|
|||||||
AC_MSG_RESULT(no))])])
|
AC_MSG_RESULT(no))])])
|
||||||
])
|
])
|
||||||
|
|
||||||
|
dnl
|
||||||
|
dnl This function checks for strerror_r(). If it isn't found at first, it
|
||||||
|
dnl retries with _THREAD_SAFE defined, as that is what AIX seems to require
|
||||||
|
dnl in order to find this function.
|
||||||
|
dnl
|
||||||
|
dnl If the function is found, it will then proceed to check how the function
|
||||||
|
dnl actually works: glibc-style or POSIX-style.
|
||||||
|
dnl
|
||||||
|
dnl glibc:
|
||||||
|
dnl char *strerror_r(int errnum, char *buf, size_t n);
|
||||||
|
dnl
|
||||||
|
dnl What this one does is to return the error string (no surprises there),
|
||||||
|
dnl but it doesn't usually copy anything into buf! The 'buf' and 'n'
|
||||||
|
dnl parameters are only meant as an optional working area, in case strerror_r
|
||||||
|
dnl needs it. A quick test on a few systems shows that it's generally not
|
||||||
|
dnl touched at all.
|
||||||
|
dnl
|
||||||
|
dnl POSIX:
|
||||||
|
dnl int strerror_r(int errnum, char *buf, size_t n);
|
||||||
|
dnl
|
||||||
|
AC_DEFUN([CURL_CHECK_STRERROR_R],
|
||||||
|
[
|
||||||
|
dnl determine of strerror_r is present
|
||||||
|
AC_CHECK_FUNCS(strerror_r,[
|
||||||
|
AC_MSG_CHECKING(whether strerror_r is declared)
|
||||||
|
AC_EGREP_CPP(strerror_r,[
|
||||||
|
#include <string.h>],[
|
||||||
|
strerror_r="yes"
|
||||||
|
AC_MSG_RESULT(yes)],[
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
AC_MSG_CHECKING(whether strerror_r with -D_THREAD_SAFE is declared)
|
||||||
|
AC_EGREP_CPP(strerror_r,[
|
||||||
|
#define _THREAD_SAFE
|
||||||
|
#include <string.h>],[
|
||||||
|
strerror_r="yes"
|
||||||
|
CPPFLAGS="-D_THREAD_SAFE $CPPFLAGS"
|
||||||
|
AC_MSG_RESULT(yes)],
|
||||||
|
AC_MSG_RESULT(no))])])
|
||||||
|
|
||||||
|
if test "x$strerror_r" = "xyes"; then
|
||||||
|
|
||||||
|
dnl 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])
|
||||||
|
,
|
||||||
|
[#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <errno.h>
|
||||||
|
])
|
||||||
|
|
||||||
|
dnl determine if this strerror_r() is glibc or POSIX
|
||||||
|
AC_MSG_CHECKING([for a glibc strerror_r API])
|
||||||
|
AC_TRY_RUN([
|
||||||
|
#include <string.h>
|
||||||
|
#include <errno.h>
|
||||||
|
int
|
||||||
|
main () {
|
||||||
|
char buffer[1024]; /* big enough to play with */
|
||||||
|
char *string =
|
||||||
|
strerror_r(EACCES, buffer, sizeof(buffer));
|
||||||
|
/* this should've returned a string */
|
||||||
|
if(!string || !string[0])
|
||||||
|
return 99;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
],
|
||||||
|
GLIBC_STRERROR_R="1"
|
||||||
|
AC_DEFINE(HAVE_GLIBC_STRERROR_R, 1, [we have a glibc-style strerror_r()])
|
||||||
|
AC_MSG_RESULT([yes]),
|
||||||
|
AC_MSG_RESULT([no]),
|
||||||
|
dnl cross-compiling!
|
||||||
|
AC_MSG_NOTICE([cannot determine strerror_r() style: edit lib/config.h manually!])
|
||||||
|
)
|
||||||
|
|
||||||
|
if test -z "$GLIBC_STRERROR_R"; then
|
||||||
|
|
||||||
|
AC_MSG_CHECKING([for a POSIX strerror_r API])
|
||||||
|
AC_TRY_RUN([
|
||||||
|
#include <string.h>
|
||||||
|
#include <errno.h>
|
||||||
|
int
|
||||||
|
main () {
|
||||||
|
char buffer[1024]; /* big enough to play with */
|
||||||
|
int error =
|
||||||
|
strerror_r(EACCES, buffer, sizeof(buffer));
|
||||||
|
/* This should've returned zero, and written an error string in the
|
||||||
|
buffer.*/
|
||||||
|
if(!buffer[0] || error)
|
||||||
|
return 99;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
],
|
||||||
|
AC_DEFINE(HAVE_POSIX_STRERROR_R, 1, [we have a POSIX-style strerror_r()])
|
||||||
|
AC_MSG_RESULT([yes]),
|
||||||
|
AC_MSG_RESULT([no]) ,
|
||||||
|
dnl cross-compiling!
|
||||||
|
AC_MSG_NOTICE([cannot determine strerror_r() style: edit lib/config.h manually!])
|
||||||
|
)
|
||||||
|
|
||||||
|
fi dnl if not using glibc API
|
||||||
|
|
||||||
|
fi dnl we have a strerror_r
|
||||||
|
|
||||||
|
])
|
||||||
|
|
||||||
AC_DEFUN([CURL_CHECK_INET_NTOA_R],
|
AC_DEFUN([CURL_CHECK_INET_NTOA_R],
|
||||||
[
|
[
|
||||||
dnl determine if function definition for inet_ntoa_r exists.
|
dnl determine if function definition for inet_ntoa_r exists.
|
||||||
@@ -511,10 +678,11 @@ AC_DEFUN([CURL_CC_DEBUG_OPTS],
|
|||||||
dnl "invalid format string conversion"
|
dnl "invalid format string conversion"
|
||||||
dnl * 279 warns on static conditions in while expressions
|
dnl * 279 warns on static conditions in while expressions
|
||||||
dnl * 981 warns on "operands are evaluated in unspecified order"
|
dnl * 981 warns on "operands are evaluated in unspecified order"
|
||||||
|
dnl * 1418 "external definition with no prior declaration"
|
||||||
dnl * 1419 warns on "external declaration in primary source file"
|
dnl * 1419 warns on "external declaration in primary source file"
|
||||||
dnl which we know and do on purpose.
|
dnl which we know and do on purpose.
|
||||||
|
|
||||||
WARN="-wd279,269,1419,981"
|
WARN="-wd279,269,981,1418,1419"
|
||||||
|
|
||||||
if test "$gccnum" -gt "600"; then
|
if test "$gccnum" -gt "600"; then
|
||||||
dnl icc 6.0 and older doesn't have the -Wall flag
|
dnl icc 6.0 and older doesn't have the -Wall flag
|
||||||
@@ -550,6 +718,11 @@ AC_DEFUN([CURL_CC_DEBUG_OPTS],
|
|||||||
WARN="$WARN -Wendif-labels -Wstrict-prototypes"
|
WARN="$WARN -Wendif-labels -Wstrict-prototypes"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if test "$gccnum" -ge "304"; then
|
||||||
|
# try -Wunreachable-code on gcc 3.4
|
||||||
|
WARN="$WARN -Wunreachable-code"
|
||||||
|
fi
|
||||||
|
|
||||||
for flag in $CPPFLAGS; do
|
for flag in $CPPFLAGS; do
|
||||||
case "$flag" in
|
case "$flag" in
|
||||||
-I*)
|
-I*)
|
||||||
|
@@ -6,3 +6,17 @@ 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
|
||||||
|
157
ares/CHANGES
157
ares/CHANGES
@@ -1,3 +1,158 @@
|
|||||||
|
Changelog for the c-ares project
|
||||||
|
|
||||||
|
* 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
|
||||||
|
- 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 search list. According to the manual pages for both Linux, Solaris and
|
||||||
|
Tru64, the last entry of either a domain or a search field is used.
|
||||||
|
|
||||||
|
This is now adjusted in the code
|
||||||
|
|
||||||
|
Version 1.2.0 (April 13, 2004)
|
||||||
|
|
||||||
|
* April 2, 2004
|
||||||
|
- Updated various man pages to look nicer when converted to HTML on the web
|
||||||
|
site.
|
||||||
|
|
||||||
|
* April 1, 2004
|
||||||
|
- Dirk Manske provided a new function that is now named ares_cancel(). It is
|
||||||
|
used to cancel/cleanup a resolve/request made using ares functions on the
|
||||||
|
given ares channel. It does not destroy/kill the ares channel itself.
|
||||||
|
|
||||||
|
- Dominick Meglio cleaned up the formatting in several man pages.
|
||||||
|
|
||||||
|
* March 30, 2004
|
||||||
|
- Dominick Meglio's new ares_expand_string. A helper function when decoding
|
||||||
|
incoming DNS packages.
|
||||||
|
|
||||||
|
- Daniel Stenberg modified the Makefile.in to use a for loop for the man page
|
||||||
|
installation to improve overview and make it easier to add man pages.
|
||||||
|
|
||||||
|
Version 1.1.0 (March 11, 2004)
|
||||||
|
|
||||||
* March 9, 2004
|
* March 9, 2004
|
||||||
- Gisle Vanem improved build on Windows.
|
- Gisle Vanem improved build on Windows.
|
||||||
|
|
||||||
@@ -74,3 +229,5 @@ Version 1.0-pre1 (8 October 2003)
|
|||||||
- Daniel Stenberg adjusted the windows port
|
- Daniel Stenberg adjusted the windows port
|
||||||
|
|
||||||
- liren at vivisimo.com made the initial windows port
|
- liren at vivisimo.com made the initial windows port
|
||||||
|
|
||||||
|
* Imported the sources from ares 1.1.1
|
||||||
|
@@ -10,6 +10,9 @@ maketgz
|
|||||||
aclocal.m4
|
aclocal.m4
|
||||||
acinclude.m4
|
acinclude.m4
|
||||||
Makefile.in
|
Makefile.in
|
||||||
|
Makefile.dj
|
||||||
|
Makefile.m32
|
||||||
|
Makefile.netware
|
||||||
install-sh
|
install-sh
|
||||||
mkinstalldirs
|
mkinstalldirs
|
||||||
configure
|
configure
|
||||||
@@ -21,8 +24,6 @@ vc/adig/adig.dsp
|
|||||||
vc/adig/adig.mak
|
vc/adig/adig.mak
|
||||||
vc/adig/adig.plg
|
vc/adig/adig.plg
|
||||||
vc/vc.dsw
|
vc/vc.dsw
|
||||||
vc/vc.ncb
|
|
||||||
vc/vc.opt
|
|
||||||
vc/ahost/ahost.dep
|
vc/ahost/ahost.dep
|
||||||
vc/ahost/ahost.dsp
|
vc/ahost/ahost.dsp
|
||||||
vc/ahost/ahost.mak
|
vc/ahost/ahost.mak
|
||||||
|
57
ares/Makefile.am
Normal file
57
ares/Makefile.am
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
AUTOMAKE_OPTIONS = foreign
|
||||||
|
|
||||||
|
lib_LTLIBRARIES = libcares.la
|
||||||
|
|
||||||
|
man_MANS = $(MANPAGES)
|
||||||
|
|
||||||
|
MSVCFILES = vc/adig/adig.dep vc/adig/adig.dsp vc/adig/adig.mak \
|
||||||
|
vc/adig/adig.plg vc/vc.dsw vc/ahost/ahost.dep vc/ahost/ahost.dsp \
|
||||||
|
vc/ahost/ahost.mak vc/ahost/ahost.plg vc/areslib/areslib.dep \
|
||||||
|
vc/areslib/areslib.dsp vc/areslib/areslib.mak vc/areslib/areslib.plg
|
||||||
|
|
||||||
|
# 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)
|
||||||
|
|
||||||
|
|
||||||
|
VER=-version-info 0: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
|
50
ares/Makefile.dj
Normal file
50
ares/Makefile.dj
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
#
|
||||||
|
# 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 -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,93 +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
|
|
||||||
|
|
||||||
$(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}
|
|
||||||
${INSTALL} -m 444 ${srcdir}/ares_destroy.3 ${DESTDIR}${mandir}/man3
|
|
||||||
${INSTALL} -m 444 ${srcdir}/ares_expand_name.3 ${DESTDIR}${mandir}/man3
|
|
||||||
${INSTALL} -m 444 ${srcdir}/ares_fds.3 ${DESTDIR}${mandir}/man3
|
|
||||||
${INSTALL} -m 444 ${srcdir}/ares_free_hostent.3 \
|
|
||||||
${DESTDIR}${mandir}/man3
|
|
||||||
${INSTALL} -m 444 ${srcdir}/ares_free_string.3 \
|
|
||||||
${DESTDIR}${mandir}/man3
|
|
||||||
${INSTALL} -m 444 ${srcdir}/ares_gethostbyaddr.3 \
|
|
||||||
${DESTDIR}${mandir}/man3
|
|
||||||
${INSTALL} -m 444 ${srcdir}/ares_gethostbyname.3 \
|
|
||||||
${DESTDIR}${mandir}/man3
|
|
||||||
${INSTALL} -m 444 ${srcdir}/ares_init.3 ${DESTDIR}${mandir}/man3
|
|
||||||
${INSTALL} -m 444 ${srcdir}/ares_init_options.3 \
|
|
||||||
${DESTDIR}${mandir}/man3
|
|
||||||
${INSTALL} -m 444 ${srcdir}/ares_mkquery.3 ${DESTDIR}${mandir}/man3
|
|
||||||
${INSTALL} -m 444 ${srcdir}/ares_parse_a_reply.3 \
|
|
||||||
${DESTDIR}${mandir}/man3
|
|
||||||
${INSTALL} -m 444 ${srcdir}/ares_parse_ptr_reply.3 \
|
|
||||||
${DESTDIR}${mandir}/man3
|
|
||||||
${INSTALL} -m 444 ${srcdir}/ares_process.3 ${DESTDIR}${mandir}/man3
|
|
||||||
${INSTALL} -m 444 ${srcdir}/ares_query.3 ${DESTDIR}${mandir}/man3
|
|
||||||
${INSTALL} -m 444 ${srcdir}/ares_search.3 ${DESTDIR}${mandir}/man3
|
|
||||||
${INSTALL} -m 444 ${srcdir}/ares_send.3 ${DESTDIR}${mandir}/man3
|
|
||||||
${INSTALL} -m 444 ${srcdir}/ares_strerror.3 ${DESTDIR}${mandir}/man3
|
|
||||||
${INSTALL} -m 444 ${srcdir}/ares_timeout.3 ${DESTDIR}${mandir}/man3
|
|
||||||
|
|
||||||
clean:
|
|
||||||
rm -f ${OBJS} $(LIB) adig.o adig ahost.o ahost
|
|
||||||
|
|
||||||
distclean: clean
|
|
||||||
rm -f config.cache config.log config.status Makefile
|
|
15
ares/Makefile.inc
Normal file
15
ares/Makefile.inc
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
CSOURCES = ares_fds.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
|
||||||
|
|
||||||
|
HHEADERS = ares.h ares_private.h setup.h ares_dns.h ares_version.h nameser.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
|
75
ares/Makefile.m32
Normal file
75
ares/Makefile.m32
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
#############################################################
|
||||||
|
# $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
|
||||||
|
AR = ar
|
||||||
|
RANLIB = ranlib
|
||||||
|
STRIP = strip -g
|
||||||
|
#RM = rm -f
|
||||||
|
|
||||||
|
########################################################
|
||||||
|
## Nothing more to do below this line!
|
||||||
|
|
||||||
|
LIB=libcares.a
|
||||||
|
CC=gcc
|
||||||
|
#CPPFLAGS=@CPPFLAGS@
|
||||||
|
WARN_FLAGS=-Wall
|
||||||
|
CFLAGS=-O2
|
||||||
|
CFLAGS+=${WARN_CFLAGS} ${ERROR_CFLAGS}
|
||||||
|
DEFS=-DMINGW32
|
||||||
|
LDFLAGS=-s
|
||||||
|
LIBS=-lwsock32
|
||||||
|
ALL_CFLAGS=${CPPFLAGS} ${CFLAGS} ${DEFS}
|
||||||
|
|
||||||
|
MANPAGES := $(patsubst %.c,%.o,$(wildcard ares_*.3))
|
||||||
|
|
||||||
|
OBJS := $(patsubst %.c,%.o,$(wildcard ares_*.c))
|
||||||
|
OBJS += windows_port.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 ${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.exe ahost.o ahost.exe
|
||||||
|
|
||||||
|
distclean: clean
|
||||||
|
rm -f config.cache config.log config.status Makefile
|
317
ares/Makefile.netware
Normal file
317
ares/Makefile.netware
Normal file
@@ -0,0 +1,317 @@
|
|||||||
|
#################################################################
|
||||||
|
#
|
||||||
|
## 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 - 2004, 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 # -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
|
||||||
|
|
||||||
|
OBJS := $(patsubst %.c,$(OBJDIR)/%.o,$(wildcard ares_*.c))
|
||||||
|
|
||||||
|
.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_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) >> $@
|
||||||
|
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
|
||||||
|
|
||||||
|
|
@@ -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,19 +1,21 @@
|
|||||||
|
c-ares
|
||||||
|
======
|
||||||
|
|
||||||
This package is based on ares 1.1.1 (written by Greg Hudson). I've decided to
|
This package is based on ares 1.1.1 (written by Greg Hudson). I decided to
|
||||||
put together and release my own ares archives since the ares maintainer
|
fork and release a separate project since the ares author didn't want the
|
||||||
doesn't want these improvements.
|
improvements that were vital for our use of it.
|
||||||
|
|
||||||
The package is thus dubbed 'c-ares' since I (Daniel Stenberg) want this for
|
This package is dubbed 'c-ares' since I (Daniel Stenberg) wanted this for use
|
||||||
use within the curl project (hence the letter C) and it makes a nice
|
within the curl project (hence the letter C) and it makes a nice pun. Also,
|
||||||
pun. Also, c-ares will not remain API compatible with the original ares, so
|
c-ares is not API compatible with ares: a new name makes that more obvious to
|
||||||
picking a new name makes it more obvious to the public.
|
the public.
|
||||||
|
|
||||||
The full source code is available in the 'c-ares' release archives, and in the
|
The full source code is available in the 'c-ares' release archives, and in the
|
||||||
'ares' subdir of the curl CVS source repostitory.
|
'ares' subdir of the curl CVS source repostitory.
|
||||||
|
|
||||||
If you find bugs, correct flaws, have questions or have comments in general in
|
If you find bugs, correct flaws, have questions or have comments in general in
|
||||||
regard to c-ares (or by all means the original ares too), get in touch with us
|
regard to c-ares (or by all means the original ares too), get in touch with us
|
||||||
on the curl-library mailing list.
|
on the c-ares mailing list: http://cool.haxx.se/mailman/listinfo/c-ares
|
||||||
|
|
||||||
c-ares is of course distributed under the same MIT-style license as the
|
c-ares is of course distributed under the same MIT-style license as the
|
||||||
original ares.
|
original ares.
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
|
18
ares/ares.h
18
ares/ares.h
@@ -20,18 +20,21 @@
|
|||||||
|
|
||||||
#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 <windows.h>
|
#include <tcp.h>
|
||||||
|
#elif defined(WIN32)
|
||||||
|
#include <winsock.h>
|
||||||
|
#include <windows.h>
|
||||||
#else
|
#else
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define ARES_SUCCESS 0
|
#define ARES_SUCCESS 0
|
||||||
@@ -55,6 +58,7 @@
|
|||||||
#define ARES_EFILE 14
|
#define ARES_EFILE 14
|
||||||
#define ARES_ENOMEM 15
|
#define ARES_ENOMEM 15
|
||||||
#define ARES_EDESTRUCTION 16
|
#define ARES_EDESTRUCTION 16
|
||||||
|
#define ARES_EBADSTR 17
|
||||||
|
|
||||||
/* Flag values */
|
/* Flag values */
|
||||||
#define ARES_FLAG_USEVC (1 << 0)
|
#define ARES_FLAG_USEVC (1 << 0)
|
||||||
@@ -104,7 +108,7 @@ int ares_init(ares_channel *channelptr);
|
|||||||
int ares_init_options(ares_channel *channelptr, struct ares_options *options,
|
int ares_init_options(ares_channel *channelptr, struct ares_options *options,
|
||||||
int optmask);
|
int optmask);
|
||||||
void ares_destroy(ares_channel channel);
|
void ares_destroy(ares_channel channel);
|
||||||
|
void ares_cancel(ares_channel channel);
|
||||||
void ares_send(ares_channel channel, const unsigned char *qbuf, int qlen,
|
void ares_send(ares_channel channel, const unsigned char *qbuf, int qlen,
|
||||||
ares_callback callback, void *arg);
|
ares_callback callback, void *arg);
|
||||||
void ares_query(ares_channel channel, const char *name, int dnsclass,
|
void ares_query(ares_channel channel, const char *name, int dnsclass,
|
||||||
@@ -125,6 +129,8 @@ int ares_mkquery(const char *name, int dnsclass, int type, unsigned short id,
|
|||||||
int rd, unsigned char **buf, int *buflen);
|
int rd, unsigned char **buf, int *buflen);
|
||||||
int ares_expand_name(const unsigned char *encoded, const unsigned char *abuf,
|
int ares_expand_name(const unsigned char *encoded, const unsigned char *abuf,
|
||||||
int alen, char **s, long *enclen);
|
int alen, char **s, long *enclen);
|
||||||
|
int ares_expand_string(const unsigned char *encoded, const unsigned char *abuf,
|
||||||
|
int alen, unsigned char **s, long *enclen);
|
||||||
int ares_parse_a_reply(const unsigned char *abuf, int alen,
|
int ares_parse_a_reply(const unsigned char *abuf, int alen,
|
||||||
struct hostent **host);
|
struct hostent **host);
|
||||||
int ares_parse_ptr_reply(const unsigned char *abuf, int alen, const void *addr,
|
int ares_parse_ptr_reply(const unsigned char *abuf, int alen, const void *addr,
|
||||||
|
@@ -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>
|
||||||
@@ -143,6 +142,7 @@ int ares__get_hostent(FILE *fp, struct hostent **host)
|
|||||||
free(line);
|
free(line);
|
||||||
return ARES_SUCCESS;
|
return ARES_SUCCESS;
|
||||||
}
|
}
|
||||||
|
if(line)
|
||||||
free(line);
|
free(line);
|
||||||
|
|
||||||
if (status == ARES_SUCCESS)
|
if (status == ARES_SUCCESS)
|
||||||
@@ -150,18 +150,21 @@ int ares__get_hostent(FILE *fp, struct hostent **host)
|
|||||||
/* Memory allocation failure; clean up. */
|
/* Memory allocation failure; clean up. */
|
||||||
if (hostent)
|
if (hostent)
|
||||||
{
|
{
|
||||||
|
if(hostent->h_name)
|
||||||
free((char *) hostent->h_name);
|
free((char *) hostent->h_name);
|
||||||
if (hostent->h_aliases)
|
if (hostent->h_aliases)
|
||||||
{
|
{
|
||||||
for (alias = hostent->h_aliases; *alias; alias++)
|
for (alias = hostent->h_aliases; *alias; alias++)
|
||||||
free(*alias);
|
free(*alias);
|
||||||
}
|
}
|
||||||
|
if(hostent->h_aliases)
|
||||||
free(hostent->h_aliases);
|
free(hostent->h_aliases);
|
||||||
if (hostent->h_addr_list)
|
if (hostent->h_addr_list && hostent->h_addr_list[0])
|
||||||
free(hostent->h_addr_list[0]);
|
free(hostent->h_addr_list[0]);
|
||||||
|
if(hostent->h_addr_list)
|
||||||
free(hostent->h_addr_list);
|
free(hostent->h_addr_list);
|
||||||
}
|
|
||||||
free(hostent);
|
free(hostent);
|
||||||
|
}
|
||||||
return ARES_ENOMEM;
|
return ARES_ENOMEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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>
|
||||||
|
37
ares/ares_cancel.3
Normal file
37
ares/ares_cancel.3
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
.\" $Id$
|
||||||
|
.\"
|
||||||
|
.\" Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
|
.\"
|
||||||
|
.\" Permission to use, copy, modify, and distribute this
|
||||||
|
.\" software and its documentation for any purpose and without
|
||||||
|
.\" fee is hereby granted, provided that the above copyright
|
||||||
|
.\" notice appear in all copies and that both that copyright
|
||||||
|
.\" notice and this permission notice appear in supporting
|
||||||
|
.\" documentation, and that the name of M.I.T. not be used in
|
||||||
|
.\" advertising or publicity pertaining to distribution of the
|
||||||
|
.\" software without specific, written prior permission.
|
||||||
|
.\" M.I.T. makes no representations about the suitability of
|
||||||
|
.\" this software for any purpose. It is provided "as is"
|
||||||
|
.\" without express or implied warranty.
|
||||||
|
.\"
|
||||||
|
.TH ARES_CANCEL 3 "31 March 2004"
|
||||||
|
.SH NAME
|
||||||
|
ares_cancel \- Cancel a resolve
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.nf
|
||||||
|
.B #include <ares.h>
|
||||||
|
.PP
|
||||||
|
.B int ares_cancel(ares_channel \fIchannel\fP)
|
||||||
|
.fi
|
||||||
|
.SH DESCRIPTION
|
||||||
|
The \fBares_cancel\fP function cancels all lookups/requests made on the the
|
||||||
|
name service channel identified by \fIchannel\fP. \fBares_cancel\fP invokes
|
||||||
|
the callbacks for each pending query on the channel, passing a status of
|
||||||
|
.BR ARES_ETIMEOUT .
|
||||||
|
These calls give the callbacks a chance to clean up any state which
|
||||||
|
might have been stored in their arguments.
|
||||||
|
.SH SEE ALSO
|
||||||
|
.BR ares_init (3)
|
||||||
|
.BR ares_destroy (3)
|
||||||
|
.SH AUTHOR
|
||||||
|
Dirk Manske
|
43
ares/ares_cancel.c
Normal file
43
ares/ares_cancel.c
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
/* Copyright (C) 2004 by Daniel Stenberg et al
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and distribute this software and its
|
||||||
|
* documentation for any purpose and without fee is hereby granted, provided
|
||||||
|
* that the above copyright notice appear in all copies and that both that
|
||||||
|
* copyright notice and this permission notice appear in supporting
|
||||||
|
* documentation, and that the name of M.I.T. not be used in advertising or
|
||||||
|
* publicity pertaining to distribution of the software without specific,
|
||||||
|
* written prior permission. M.I.T. makes no representations about the
|
||||||
|
* suitability of this software for any purpose. It is provided "as is"
|
||||||
|
* without express or implied warranty.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "setup.h"
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include "ares.h"
|
||||||
|
#include "ares_private.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* ares_cancel() cancels a ongoing request/resolve that might be going on on
|
||||||
|
* the given channel. It does NOT kill the channel, use ares_destroy() for
|
||||||
|
* that.
|
||||||
|
*/
|
||||||
|
void ares_cancel(ares_channel channel)
|
||||||
|
{
|
||||||
|
struct query *query, *next;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (query = channel->queries; query; query = next)
|
||||||
|
{
|
||||||
|
next = query->next;
|
||||||
|
query->callback(query->arg, ARES_ETIMEOUT, NULL, 0);
|
||||||
|
free(query->tcpbuf);
|
||||||
|
free(query->skip_server);
|
||||||
|
free(query);
|
||||||
|
}
|
||||||
|
channel->queries = NULL;
|
||||||
|
if (!(channel->flags & ARES_FLAG_STAYOPEN))
|
||||||
|
{
|
||||||
|
for (i = 0; i < channel->nservers; i++)
|
||||||
|
ares__close_sockets(&channel->servers[i]);
|
||||||
|
}
|
||||||
|
}
|
@@ -36,7 +36,8 @@ status of
|
|||||||
These calls give the callbacks a chance to clean up any state which
|
These calls give the callbacks a chance to clean up any state which
|
||||||
might have been stored in their arguments.
|
might have been stored in their arguments.
|
||||||
.SH SEE ALSO
|
.SH SEE ALSO
|
||||||
.BR ares_init (3)
|
.BR ares_init (3),
|
||||||
|
.BR ares_cancel (3)
|
||||||
.SH AUTHOR
|
.SH AUTHOR
|
||||||
Greg Hudson, MIT Information Systems
|
Greg Hudson, MIT Information Systems
|
||||||
.br
|
.br
|
||||||
|
@@ -13,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"
|
||||||
|
@@ -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>
|
||||||
|
62
ares/ares_expand_string.3
Normal file
62
ares/ares_expand_string.3
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
.\" $Id$
|
||||||
|
.\"
|
||||||
|
.\" Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
|
.\"
|
||||||
|
.\" Permission to use, copy, modify, and distribute this
|
||||||
|
.\" software and its documentation for any purpose and without
|
||||||
|
.\" fee is hereby granted, provided that the above copyright
|
||||||
|
.\" notice appear in all copies and that both that copyright
|
||||||
|
.\" notice and this permission notice appear in supporting
|
||||||
|
.\" documentation, and that the name of M.I.T. not be used in
|
||||||
|
.\" advertising or publicity pertaining to distribution of the
|
||||||
|
.\" software without specific, written prior permission.
|
||||||
|
.\" M.I.T. makes no representations about the suitability of
|
||||||
|
.\" this software for any purpose. It is provided "as is"
|
||||||
|
.\" without express or implied warranty.
|
||||||
|
.\"
|
||||||
|
.TH ARES_EXPAND_NAME 3 "23 July 1998"
|
||||||
|
.SH NAME
|
||||||
|
ares_expand_string \- Expand a length encoded string
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.nf
|
||||||
|
.B #include <ares.h>
|
||||||
|
.PP
|
||||||
|
.B int ares_expand_string(const unsigned char *\fIencoded\fP,
|
||||||
|
.B const unsigned char *\fIabuf\fP, int \fIalen\fP, unsigned char **\fIs\fP,
|
||||||
|
.B int *\fIenclen\fP)
|
||||||
|
.fi
|
||||||
|
.SH DESCRIPTION
|
||||||
|
The
|
||||||
|
.B ares_expand_string
|
||||||
|
function converts a length encoded string to a NULL terminated C
|
||||||
|
string. The argument
|
||||||
|
.I encoded
|
||||||
|
gives the beginning of the encoded string, and the arguments
|
||||||
|
.I abuf
|
||||||
|
and
|
||||||
|
.I alen
|
||||||
|
give the containing message buffer (necessary for the processing of
|
||||||
|
indirection pointers within the encoded domain name). The result is
|
||||||
|
placed in a NUL-terminated allocated buffer, a pointer to which is
|
||||||
|
stored in the variable pointed to by
|
||||||
|
.IR s .
|
||||||
|
The length of the encoded string is stored in the variable pointed to by
|
||||||
|
.I enclen
|
||||||
|
so that the caller can advance past the encoded string to read
|
||||||
|
further data in the message.
|
||||||
|
.SH RETURN VALUES
|
||||||
|
.B ares_expand_string
|
||||||
|
can return any of the following values:
|
||||||
|
.TP 15
|
||||||
|
.B ARES_SUCCESS
|
||||||
|
Expansion of the encoded string succeeded.
|
||||||
|
.TP 15
|
||||||
|
.B ARES_EBADSTR
|
||||||
|
The encoded string was malformed and could not be expanded.
|
||||||
|
.TP 15
|
||||||
|
.B ARES_ENOMEM
|
||||||
|
Memory was exhausted.
|
||||||
|
.SH SEE ALSO
|
||||||
|
.BR ares_free_string (3)
|
||||||
|
.SH AUTHOR
|
||||||
|
Dominick Meglio
|
66
ares/ares_expand_string.c
Normal file
66
ares/ares_expand_string.c
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and distribute this
|
||||||
|
* software and its documentation for any purpose and without
|
||||||
|
* fee is hereby granted, provided that the above copyright
|
||||||
|
* notice appear in all copies and that both that copyright
|
||||||
|
* notice and this permission notice appear in supporting
|
||||||
|
* documentation, and that the name of M.I.T. not be used in
|
||||||
|
* advertising or publicity pertaining to distribution of the
|
||||||
|
* software without specific, written prior permission.
|
||||||
|
* M.I.T. makes no representations about the suitability of
|
||||||
|
* this software for any purpose. It is provided "as is"
|
||||||
|
* without express or implied warranty.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "setup.h"
|
||||||
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
#if defined(WIN32) && !defined(WATT32)
|
||||||
|
#include "nameser.h"
|
||||||
|
#else
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#include <arpa/nameser.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include "ares.h"
|
||||||
|
#include "ares_private.h" /* for the memdebug */
|
||||||
|
|
||||||
|
/* Simply decodes a length-encoded character string. The first byte of the
|
||||||
|
* input is the length of the string to be returned and the bytes thereafter
|
||||||
|
* are the characters of the string. The returned result will be NULL
|
||||||
|
* terminated.
|
||||||
|
*/
|
||||||
|
int ares_expand_string(const unsigned char *encoded,
|
||||||
|
const unsigned char *abuf,
|
||||||
|
int alen,
|
||||||
|
unsigned char **s,
|
||||||
|
long *enclen)
|
||||||
|
{
|
||||||
|
unsigned char *q;
|
||||||
|
long len;
|
||||||
|
if (encoded == abuf+alen)
|
||||||
|
return ARES_EBADSTR;
|
||||||
|
|
||||||
|
len = *encoded;
|
||||||
|
if (encoded+len+1 > abuf+alen)
|
||||||
|
return ARES_EBADSTR;
|
||||||
|
|
||||||
|
encoded++;
|
||||||
|
|
||||||
|
*s = malloc(len+1);
|
||||||
|
if (*s == NULL)
|
||||||
|
return ARES_ENOMEM;
|
||||||
|
q = *s;
|
||||||
|
strncpy((char *)q, (char *)encoded, len);
|
||||||
|
q[len] = '\0';
|
||||||
|
|
||||||
|
*s = q;
|
||||||
|
|
||||||
|
*enclen = len+1;
|
||||||
|
|
||||||
|
return ARES_SUCCESS;
|
||||||
|
}
|
||||||
|
|
@@ -13,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
|
#ifdef HAVE_SYS_TIME_H
|
||||||
|
|
||||||
#else
|
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -37,13 +36,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)
|
||||||
|
@@ -28,21 +28,16 @@ The
|
|||||||
.I ares_free_hostent
|
.I ares_free_hostent
|
||||||
function frees a
|
function frees a
|
||||||
.B struct hostent
|
.B struct hostent
|
||||||
allocated by one of the functions
|
allocated by one of the functions \fIares_parse_a_reply(3)\fP or
|
||||||
.I ares_parse_a_reply
|
\fIares_parse_ptr_reply(3)\fP.
|
||||||
or
|
.SH NOTES
|
||||||
.IR ares_parse_ptr_reply .
|
It is not necessary (and is not correct) to free the host structure passed to
|
||||||
|
the callback functions for \fIares_gethostbyname(3)\fP or
|
||||||
|
\fIares_gethostbyaddr(3)\fP. The ares library will automatically free such
|
||||||
|
host structures when the callback returns.
|
||||||
.SH SEE ALSO
|
.SH SEE ALSO
|
||||||
.BR ares_parse_a_reply (3),
|
.BR ares_parse_a_reply (3),
|
||||||
.BR ares_parse_ptr_reply (3)
|
.BR ares_parse_ptr_reply (3)
|
||||||
.SH NOTES
|
|
||||||
It is not necessary (and is not correct) to free the host structure
|
|
||||||
passed to the callback functions for
|
|
||||||
.I ares_gethostbyname
|
|
||||||
or
|
|
||||||
.IR ares_gethostbyaddr .
|
|
||||||
The ares library will automatically free such host structures when the
|
|
||||||
callback returns.
|
|
||||||
.SH AUTHOR
|
.SH AUTHOR
|
||||||
Greg Hudson, MIT Information Systems
|
Greg Hudson, MIT Information Systems
|
||||||
.br
|
.br
|
||||||
|
@@ -13,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
|
||||||
|
|
||||||
|
@@ -26,11 +26,10 @@ ares_free_string \- Free strings allocated by ares functions
|
|||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
||||||
The
|
The
|
||||||
.I ares_free_string
|
.I ares_free_string
|
||||||
function frees a string allocated by the
|
function frees a string allocated by an ares function.
|
||||||
.I ares_mkquery
|
|
||||||
function.
|
|
||||||
.SH SEE ALSO
|
.SH SEE ALSO
|
||||||
.BR ares_mkquery (3)
|
.BR ares_mkquery (3)
|
||||||
|
.BR ares_expand_string (3)
|
||||||
.SH AUTHOR
|
.SH AUTHOR
|
||||||
Greg Hudson, MIT Information Systems
|
Greg Hudson, MIT Information Systems
|
||||||
.br
|
.br
|
||||||
|
@@ -13,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"
|
||||||
|
|
||||||
|
@@ -40,14 +40,10 @@ and
|
|||||||
.I addrlen
|
.I addrlen
|
||||||
give the address as a series of bytes, and
|
give the address as a series of bytes, and
|
||||||
.I family
|
.I family
|
||||||
gives the type of address. When the query is complete or has failed,
|
gives the type of address. When the query is complete or has failed, the ares
|
||||||
the ares library will invoke
|
library will invoke \fIcallback\fP. Completion or failure of the query may
|
||||||
.IR callback .
|
happen immediately, or may happen during a later call to
|
||||||
Completion or failure of the query may happen immediately, or may
|
\fIares_process(3)\fP, \fIares_destroy(3)\fP or \fIares_cancel(3)\fP.
|
||||||
happen during a later call to
|
|
||||||
.BR ares_process (3)
|
|
||||||
or
|
|
||||||
.BR ares_destroy (3).
|
|
||||||
.PP
|
.PP
|
||||||
The callback argument
|
The callback argument
|
||||||
.I arg
|
.I arg
|
||||||
@@ -93,7 +89,8 @@ did not complete successfully,
|
|||||||
will be
|
will be
|
||||||
.BR NULL .
|
.BR NULL .
|
||||||
.SH SEE ALSO
|
.SH SEE ALSO
|
||||||
.BR ares_process (3)
|
.BR ares_process (3),
|
||||||
|
.BR ares_gethostbyname (3)
|
||||||
.SH AUTHOR
|
.SH AUTHOR
|
||||||
Greg Hudson, MIT Information Systems
|
Greg Hudson, MIT Information Systems
|
||||||
.br
|
.br
|
||||||
|
@@ -13,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>
|
||||||
@@ -27,9 +28,14 @@
|
|||||||
#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"
|
||||||
|
|
||||||
|
#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;
|
||||||
@@ -87,10 +93,10 @@ static void next_lookup(struct addr_query *aquery)
|
|||||||
{
|
{
|
||||||
case 'b':
|
case 'b':
|
||||||
addr = ntohl(aquery->addr.s_addr);
|
addr = ntohl(aquery->addr.s_addr);
|
||||||
a1 = (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);
|
||||||
a4 = (int)addr & 0xff;
|
a4 = (int)(addr & 0xff);
|
||||||
sprintf(name, "%d.%d.%d.%d.in-addr.arpa", a4, a3, a2, a1);
|
sprintf(name, "%d.%d.%d.%d.in-addr.arpa", a4, a3, a2, a1);
|
||||||
aquery->remaining_lookups = p + 1;
|
aquery->remaining_lookups = p + 1;
|
||||||
ares_query(aquery->channel, name, C_IN, T_PTR, addr_callback,
|
ares_query(aquery->channel, name, C_IN, T_PTR, addr_callback,
|
||||||
@@ -144,13 +150,30 @@ static int file_lookup(struct in_addr *addr, struct hostent **host)
|
|||||||
|
|
||||||
char PATH_HOSTS[MAX_PATH];
|
char PATH_HOSTS[MAX_PATH];
|
||||||
if (IsNT) {
|
if (IsNT) {
|
||||||
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, 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");
|
||||||
|
@@ -37,14 +37,11 @@ The parameter
|
|||||||
.I name
|
.I name
|
||||||
gives the hostname as a NUL-terminated C string, and
|
gives the hostname as a NUL-terminated C string, and
|
||||||
.I family
|
.I family
|
||||||
gives the desired type of address for the resulting host entry. When
|
gives the desired type of address for the resulting host entry. When the
|
||||||
the query is complete or has failed, the ares library will invoke
|
query is complete or has failed, the ares library will invoke \fIcallback\fP.
|
||||||
.IR callback .
|
Completion or failure of the query may happen immediately, or may happen
|
||||||
Completion or failure of the query may happen immediately, or may
|
during a later call to \fIares_process(3)\fP, \fIares_destroy(3)\fP or
|
||||||
happen during a later call to
|
\fIares_cancel(3)\fP.
|
||||||
.BR ares_process (3)
|
|
||||||
or
|
|
||||||
.BR ares_destroy (3).
|
|
||||||
.PP
|
.PP
|
||||||
The callback argument
|
The callback argument
|
||||||
.I arg
|
.I arg
|
||||||
@@ -96,7 +93,8 @@ did not complete successfully,
|
|||||||
will be
|
will be
|
||||||
.BR NULL .
|
.BR NULL .
|
||||||
.SH SEE ALSO
|
.SH SEE ALSO
|
||||||
.BR ares_process (3)
|
.BR ares_process (3),
|
||||||
|
.BR ares_gethostbyaddr (3)
|
||||||
.SH AUTHOR
|
.SH AUTHOR
|
||||||
Greg Hudson, MIT Information Systems
|
Greg Hudson, MIT Information Systems
|
||||||
.br
|
.br
|
||||||
|
@@ -13,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>
|
||||||
@@ -29,9 +30,14 @@
|
|||||||
#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"
|
||||||
|
|
||||||
|
#ifdef WATT32
|
||||||
|
#undef WIN32
|
||||||
|
#endif
|
||||||
|
|
||||||
struct host_query {
|
struct host_query {
|
||||||
/* Arguments passed to ares_gethostbyname() */
|
/* Arguments passed to ares_gethostbyname() */
|
||||||
ares_channel channel;
|
ares_channel channel;
|
||||||
@@ -214,16 +220,32 @@ static int file_lookup(const char *name, struct hostent **host)
|
|||||||
int status;
|
int status;
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
|
|
||||||
char PATH_HOSTS[MAX_PATH];
|
char PATH_HOSTS[MAX_PATH];
|
||||||
if (IsNT) {
|
if (IsNT) {
|
||||||
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, 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");
|
||||||
|
256
ares/ares_init.c
256
ares/ares_init.c
@@ -13,19 +13,28 @@
|
|||||||
* 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
|
||||||
|
|
||||||
#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_UNISTD_H
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@@ -36,13 +45,18 @@
|
|||||||
#include "ares.h"
|
#include "ares.h"
|
||||||
#include "ares_private.h"
|
#include "ares_private.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_domain(ares_channel channel, char *str);
|
||||||
static int config_lookup(ares_channel channel, const char *str);
|
static int config_lookup(ares_channel channel, const char *str,
|
||||||
|
const char *bindch, const char *filech);
|
||||||
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,
|
static int config_sortlist(struct apattern **sortlist, int *nsort,
|
||||||
@@ -85,6 +99,8 @@ int ares_init_options(ares_channel *channelptr, struct ares_options *options,
|
|||||||
channel->nsort = -1;
|
channel->nsort = -1;
|
||||||
channel->lookups = NULL;
|
channel->lookups = NULL;
|
||||||
channel->queries = NULL;
|
channel->queries = NULL;
|
||||||
|
channel->domains = NULL;
|
||||||
|
channel->sortlist = NULL;
|
||||||
|
|
||||||
/* Initialize configuration by each of the four sources, from highest
|
/* Initialize configuration by each of the four sources, from highest
|
||||||
* precedence to lowest.
|
* precedence to lowest.
|
||||||
@@ -101,14 +117,15 @@ int ares_init_options(ares_channel *channelptr, struct ares_options *options,
|
|||||||
/* Something failed; clean up memory we may have allocated. */
|
/* Something failed; clean up memory we may have allocated. */
|
||||||
if (channel->nservers != -1)
|
if (channel->nservers != -1)
|
||||||
free(channel->servers);
|
free(channel->servers);
|
||||||
if (channel->ndomains != -1)
|
if (channel->domains)
|
||||||
{
|
{
|
||||||
for (i = 0; i < channel->ndomains; i++)
|
for (i = 0; i < channel->ndomains; i++)
|
||||||
free(channel->domains[i]);
|
free(channel->domains[i]);
|
||||||
free(channel->domains);
|
free(channel->domains);
|
||||||
}
|
}
|
||||||
if (channel->nsort != -1)
|
if (channel->sortlist)
|
||||||
free(channel->sortlist);
|
free(channel->sortlist);
|
||||||
|
if(channel->lookups)
|
||||||
free(channel->lookups);
|
free(channel->lookups);
|
||||||
free(channel);
|
free(channel);
|
||||||
return status;
|
return status;
|
||||||
@@ -122,8 +139,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;
|
||||||
@@ -228,24 +245,24 @@ 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, *obuf, &size) != ERROR_SUCCESS)
|
||||||
{
|
{
|
||||||
@@ -260,29 +277,99 @@ 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);
|
||||||
|
DWORD (WINAPI *GetNetworkParams) (FIXED_INFO*, DWORD*); /* 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;
|
||||||
|
|
||||||
|
if (!fi)
|
||||||
|
return (0);
|
||||||
|
|
||||||
|
handle = LoadLibrary ("iphlpapi.dll");
|
||||||
|
if (!handle)
|
||||||
|
return (0);
|
||||||
|
|
||||||
|
(void*)GetNetworkParams = GetProcAddress (handle, "GetNetworkParams");
|
||||||
|
if (!GetNetworkParams)
|
||||||
|
goto quit;
|
||||||
|
|
||||||
|
if ((*GetNetworkParams) (fi, &size) != ERROR_BUFFER_OVERFLOW)
|
||||||
|
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)
|
||||||
@@ -295,6 +382,11 @@ static int init_by_resolv_conf(ares_channel channel)
|
|||||||
#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:
|
||||||
@@ -317,9 +409,17 @@ 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 (get_iphlpapi_dns_info(buf,sizeof(buf)) > 0)
|
||||||
|
{
|
||||||
|
status = config_nameserver(&servers, &nservers, buf);
|
||||||
|
if (status == ARES_SUCCESS)
|
||||||
|
goto okay;
|
||||||
|
}
|
||||||
|
|
||||||
if (IsNT)
|
if (IsNT)
|
||||||
{
|
{
|
||||||
@@ -385,15 +485,8 @@ 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)
|
||||||
|
|
||||||
@@ -401,7 +494,7 @@ DhcpNameServer
|
|||||||
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;
|
||||||
|
|
||||||
@@ -425,6 +518,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;
|
||||||
@@ -436,11 +547,11 @@ DhcpNameServer
|
|||||||
return (errno == ENOENT) ? ARES_SUCCESS : ARES_EFILE;
|
return (errno == ENOENT) ? ARES_SUCCESS : ARES_EFILE;
|
||||||
while ((status = ares__read_line(fp, &line, &linesize)) == ARES_SUCCESS)
|
while ((status = ares__read_line(fp, &line, &linesize)) == ARES_SUCCESS)
|
||||||
{
|
{
|
||||||
if ((p = try_config(line, "domain")) && channel->ndomains == -1)
|
if ((p = try_config(line, "domain")))
|
||||||
status = config_domain(channel, p);
|
status = config_domain(channel, p);
|
||||||
else if ((p = try_config(line, "lookup")) && !channel->lookups)
|
else if ((p = try_config(line, "lookup")) && !channel->lookups)
|
||||||
status = config_lookup(channel, p);
|
status = config_lookup(channel, p, "bind", "file");
|
||||||
else if ((p = try_config(line, "search")) && channel->ndomains == -1)
|
else if ((p = try_config(line, "search")))
|
||||||
status = set_search(channel, p);
|
status = set_search(channel, p);
|
||||||
else if ((p = try_config(line, "nameserver")) && channel->nservers == -1)
|
else if ((p = try_config(line, "nameserver")) && channel->nservers == -1)
|
||||||
status = config_nameserver(&servers, &nservers, p);
|
status = config_nameserver(&servers, &nservers, p);
|
||||||
@@ -453,8 +564,49 @@ DhcpNameServer
|
|||||||
if (status != ARES_SUCCESS)
|
if (status != ARES_SUCCESS)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
free(line);
|
|
||||||
fclose(fp);
|
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)
|
||||||
|
free(line);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -462,12 +614,17 @@ DhcpNameServer
|
|||||||
/* Handle errors. */
|
/* Handle errors. */
|
||||||
if (status != ARES_EOF)
|
if (status != ARES_EOF)
|
||||||
{
|
{
|
||||||
if (servers != NULL) free(servers);
|
if (servers != NULL)
|
||||||
if (sortlist != NULL) free(sortlist);
|
free(servers);
|
||||||
|
if (sortlist != NULL)
|
||||||
|
free(sortlist);
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 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;
|
||||||
@@ -543,7 +700,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;
|
||||||
}
|
}
|
||||||
@@ -563,7 +720,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;
|
||||||
@@ -576,11 +734,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;
|
||||||
@@ -701,6 +861,14 @@ static int set_search(ares_channel channel, const char *str)
|
|||||||
int n;
|
int n;
|
||||||
const char *p, *q;
|
const char *p, *q;
|
||||||
|
|
||||||
|
if(channel->ndomains != -1) {
|
||||||
|
/* if we already have some domains present, free them first */
|
||||||
|
for(n=0; n < channel->ndomains; n++)
|
||||||
|
free(channel->domains[n]);
|
||||||
|
free(channel->domains);
|
||||||
|
channel->ndomains = -1;
|
||||||
|
}
|
||||||
|
|
||||||
/* Count the domains given. */
|
/* Count the domains given. */
|
||||||
n = 0;
|
n = 0;
|
||||||
p = str;
|
p = str;
|
||||||
|
@@ -21,11 +21,9 @@ ares_mkquery \- Compose a single-question DNS query buffer
|
|||||||
.nf
|
.nf
|
||||||
.B #include <ares.h>
|
.B #include <ares.h>
|
||||||
.PP
|
.PP
|
||||||
.B
|
.B int ares_mkquery(const char *\fIname\fP, int \fIdnsclass\fP, int \fItype\fP,
|
||||||
int ares_mkquery(const char *\fIname\fP, int \fIdnsclass\fP, int \fItype\fP,
|
.B unsigned short \fIid\fP, int \fIrd\fP, char **\fIbuf\fP,
|
||||||
.B
|
.B int *\fIbuflen\fP)
|
||||||
unsigned short \fIid\fP, int \fIrd\fP, char **\fIbuf\fP,
|
|
||||||
int *\fIbuflen\fP)
|
|
||||||
.fi
|
.fi
|
||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
||||||
The
|
The
|
||||||
@@ -52,8 +50,7 @@ stored in the variable pointed to by
|
|||||||
and the length of which will be stored in the variable pointed to by
|
and the length of which will be stored in the variable pointed to by
|
||||||
.IR buflen .
|
.IR buflen .
|
||||||
It is the caller's responsibility to free this buffer using
|
It is the caller's responsibility to free this buffer using
|
||||||
.B ares_free_string
|
\fIares_free_string(3)\fP when it is no longer needed.
|
||||||
when it is no longer needed.
|
|
||||||
.SH RETURN VALUES
|
.SH RETURN VALUES
|
||||||
.B ares_mkquery
|
.B ares_mkquery
|
||||||
can return any of the following values:
|
can return any of the following values:
|
||||||
|
@@ -13,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>
|
||||||
|
@@ -21,9 +21,8 @@ ares_parse_a_reply \- Parse a reply to a DNS query of type A into a hostent
|
|||||||
.nf
|
.nf
|
||||||
.B #include <ares.h>
|
.B #include <ares.h>
|
||||||
.PP
|
.PP
|
||||||
.B
|
.B int ares_parse_a_reply(const unsigned char *\fIabuf\fP, int \fIalen\fP,
|
||||||
int ares_parse_a_reply(const unsigned char *\fIabuf\fB, int \fIalen\fB,
|
.B struct hostent **\fIhost\fP);
|
||||||
.B struct hostent **\fIhost\fB);
|
|
||||||
.fi
|
.fi
|
||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
||||||
The
|
The
|
||||||
|
@@ -13,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>
|
||||||
|
@@ -21,11 +21,9 @@ ares_parse_ptr_reply \- Parse a reply to a DNS query of type PTR into a hostent
|
|||||||
.nf
|
.nf
|
||||||
.B #include <ares.h>
|
.B #include <ares.h>
|
||||||
.PP
|
.PP
|
||||||
.B
|
.B int ares_parse_ptr_reply(const unsigned char *\fIabuf\fP, int \fIalen\fP,
|
||||||
int ares_parse_ptr_reply(const unsigned char *\fIabuf\fB, int \fIalen\fB,
|
.B const void *\fIaddr\fP, int \fIaddrlen\fP, int \fIfamily\fP,
|
||||||
.B
|
.B struct hostent **\fIhost\fP);
|
||||||
const void *\fIaddr\fP, int \fIaddrlen\fP, int \fIfamily\fP,
|
|
||||||
.B struct hostent **\fIhost\fB);
|
|
||||||
.fi
|
.fi
|
||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
||||||
The
|
The
|
||||||
|
@@ -13,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>
|
||||||
|
@@ -18,30 +18,45 @@
|
|||||||
#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
|
||||||
|
|
||||||
#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 IsNT ((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"
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
@@ -65,8 +80,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];
|
||||||
|
@@ -35,13 +35,10 @@ The file descriptor sets pointed to by
|
|||||||
and
|
and
|
||||||
.I write_fds
|
.I write_fds
|
||||||
should have file descriptors set in them according to whether the file
|
should have file descriptors set in them according to whether the file
|
||||||
descriptors specified by
|
descriptors specified by \fIares_fds(3)\fP are ready for reading and writing.
|
||||||
.BR ares_fds (3)
|
(The easiest way to determine this information is to invoke
|
||||||
are ready for reading and writing. (The easiest way to determine this
|
|
||||||
information is to invoke
|
|
||||||
.B select
|
.B select
|
||||||
with a timeout no greater than the timeout given by
|
with a timeout no greater than the timeout given by \fIares_timeout(3)\fP ).
|
||||||
.BR ares_timeout (3)).
|
|
||||||
.PP
|
.PP
|
||||||
The
|
The
|
||||||
.B ares_process
|
.B ares_process
|
||||||
|
@@ -13,28 +13,41 @@
|
|||||||
* 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_UNISTD_H
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#endif
|
#endif
|
||||||
|
#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"
|
||||||
|
|
||||||
|
#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 +57,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 +87,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;
|
||||||
|
int 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 +105,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 +117,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 +139,27 @@ 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, 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 +168,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 +188,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)
|
||||||
@@ -230,6 +240,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,7 +262,8 @@ 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, buf, sizeof(buf), 0);
|
||||||
@@ -273,7 +285,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 +361,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 +369,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 +392,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 +401,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 +415,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 +424,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 +442,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)
|
||||||
{
|
{
|
||||||
@@ -448,17 +465,18 @@ void ares__send_query(ares_channel channel, struct query *query, time_t now)
|
|||||||
|
|
||||||
static int open_tcp_socket(ares_channel channel, struct server_state *server)
|
static int open_tcp_socket(ares_channel channel, struct server_state *server)
|
||||||
{
|
{
|
||||||
int s, flags;
|
ares_socket_t s;
|
||||||
|
int flags;
|
||||||
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. */
|
||||||
|
|
||||||
#ifdef WIN32
|
#if defined(WIN32) || defined(WATT32)
|
||||||
flags = 1;
|
flags = 1;
|
||||||
ioctlsocket(s, FIONBIO, &flags);
|
ioctlsocket(s, FIONBIO, &flags);
|
||||||
#else
|
#else
|
||||||
@@ -466,13 +484,13 @@ static int open_tcp_socket(ares_channel channel, struct server_state *server)
|
|||||||
|
|
||||||
if (flags == -1)
|
if (flags == -1)
|
||||||
{
|
{
|
||||||
close(s);
|
closesocket(s);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
flags |= O_NONBLOCK;
|
flags |= O_NONBLOCK;
|
||||||
if (fcntl(s, F_SETFL, flags) == -1)
|
if (fcntl(s, F_SETFL, flags) == -1)
|
||||||
{
|
{
|
||||||
close(s);
|
closesocket(s);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@@ -482,25 +500,28 @@ static int open_tcp_socket(ares_channel channel, struct server_state *server)
|
|||||||
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;
|
||||||
|
|
||||||
/* Connect to the server. */
|
/* Connect to the server. */
|
||||||
@@ -597,10 +618,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 +631,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 +647,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,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>
|
||||||
|
@@ -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
|
||||||
|
|
||||||
@@ -124,8 +125,13 @@ void ares_search(ares_channel channel, const char *name, int dnsclass,
|
|||||||
free(s);
|
free(s);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
|
/* failed, free the malloc()ed memory */
|
||||||
|
free(squery->name);
|
||||||
|
free(squery);
|
||||||
callback(arg, status, NULL, 0);
|
callback(arg, status, NULL, 0);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void search_callback(void *arg, int status, unsigned char *abuf,
|
static void search_callback(void *arg, int status, unsigned char *abuf,
|
||||||
|
@@ -24,8 +24,7 @@ ares_send \- Initiate a DNS query
|
|||||||
.B typedef void (*ares_callback)(void *\fIarg\fP, int \fIstatus\fP,
|
.B typedef void (*ares_callback)(void *\fIarg\fP, int \fIstatus\fP,
|
||||||
.B unsigned char *\fIabuf\fP, int \fIalen\fP)
|
.B unsigned char *\fIabuf\fP, int \fIalen\fP)
|
||||||
.PP
|
.PP
|
||||||
.B
|
.B void ares_send(ares_channel \fIchannel\fP, const unsigned char *\fIqbuf\fP,
|
||||||
void ares_send(ares_channel \fIchannel\fP, const unsigned char *\fIqbuf\fP,
|
|
||||||
.B int \fIqlen\fP, ares_callback \fIcallback\fP, void *\fIarg\fP)
|
.B int \fIqlen\fP, ares_callback \fIcallback\fP, void *\fIarg\fP)
|
||||||
.fi
|
.fi
|
||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
||||||
|
@@ -13,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>
|
||||||
|
@@ -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"
|
||||||
|
|
||||||
@@ -35,7 +36,9 @@ const char *ares_strerror(int code)
|
|||||||
"Timeout while contacting DNS servers",
|
"Timeout while contacting DNS servers",
|
||||||
"End of file",
|
"End of file",
|
||||||
"Error reading file",
|
"Error reading file",
|
||||||
"Out of memory"
|
"Out of memory",
|
||||||
|
"Channel is being destroyed",
|
||||||
|
"Misformatted string"
|
||||||
};
|
};
|
||||||
|
|
||||||
assert(code >= 0 && code < (int)(sizeof(errtext) / sizeof(*errtext)));
|
assert(code >= 0 && code < (int)(sizeof(errtext) / sizeof(*errtext)));
|
||||||
|
@@ -27,10 +27,8 @@ ares_fds \- Get file descriptors to select on for name service
|
|||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
||||||
The
|
The
|
||||||
.B ares_timeout
|
.B ares_timeout
|
||||||
function determines the maximum time for which the caller should wait
|
function determines the maximum time for which the caller should wait before
|
||||||
before invoking
|
invoking \fIares_process(3)\fP to process timeouts. The parameter
|
||||||
.BR ares_process (3)
|
|
||||||
to process timeouts. The parameter
|
|
||||||
.I maxtv
|
.I maxtv
|
||||||
specifies a existing maximum timeout, or
|
specifies a existing maximum timeout, or
|
||||||
.B NULL
|
.B NULL
|
||||||
|
@@ -13,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 0
|
#define ARES_VERSION_MINOR 2
|
||||||
#define ARES_VERSION_PATCH 0
|
#define ARES_VERSION_PATCH 0
|
||||||
#define ARES_VERSION ((ARES_VERSION_MAJOR<<16)|\
|
#define ARES_VERSION ((ARES_VERSION_MAJOR<<16)|\
|
||||||
(ARES_VERSION_MINOR<<8)|\
|
(ARES_VERSION_MINOR<<8)|\
|
||||||
(ARES_VERSION_PATCH))
|
(ARES_VERSION_PATCH))
|
||||||
#define ARES_VERSION_STR "1.0.0"
|
#define ARES_VERSION_STR "1.2.0"
|
||||||
|
|
||||||
const char *ares_version(int *version);
|
const char *ares_version(int *version);
|
||||||
|
|
||||||
|
7
ares/buildconf
Executable file
7
ares/buildconf
Executable file
@@ -0,0 +1,7 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
libtoolize --copy --automake --force
|
||||||
|
aclocal
|
||||||
|
autoheader
|
||||||
|
autoconf
|
||||||
|
automake --add-missing
|
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,17 +1,22 @@
|
|||||||
dnl Process this file with autoconf to produce a configure script.
|
dnl Process this file with autoconf to produce a configure script.
|
||||||
AC_INIT(ares_init.c)
|
AC_INIT(ares_init.c)
|
||||||
|
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
|
||||||
|
|
||||||
|
# check for ssize_t
|
||||||
|
AC_CHECK_TYPE(ssize_t, ,
|
||||||
|
AC_DEFINE(ssize_t, int, [the signed version of size_t]))
|
||||||
|
|
||||||
AC_SEARCH_LIBS(gethostbyname, nsl)
|
AC_SEARCH_LIBS(gethostbyname, nsl)
|
||||||
AC_SEARCH_LIBS(socket, socket)
|
AC_SEARCH_LIBS(socket, socket)
|
||||||
|
|
||||||
@@ -30,6 +35,9 @@ AC_HELP_STRING([--disable-debug],[Disable debug options]),
|
|||||||
;;
|
;;
|
||||||
*) AC_MSG_RESULT(yes)
|
*) AC_MSG_RESULT(yes)
|
||||||
|
|
||||||
|
dnl when doing the debug stuff, use static library only
|
||||||
|
AC_DISABLE_SHARED
|
||||||
|
|
||||||
dnl Checks for standard header files, to make memdebug.h inclusions bettter
|
dnl Checks for standard header files, to make memdebug.h inclusions bettter
|
||||||
AC_HEADER_STDC
|
AC_HEADER_STDC
|
||||||
|
|
||||||
@@ -45,12 +53,14 @@ AC_HELP_STRING([--disable-debug],[Disable debug options]),
|
|||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
AC_PROG_LIBTOOL
|
||||||
|
|
||||||
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 )
|
)
|
||||||
|
|
||||||
AC_OUTPUT(Makefile)
|
AC_OUTPUT(Makefile)
|
||||||
|
93
ares/maketgz
93
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;
|
||||||
@@ -15,84 +13,25 @@ if(!-f "ares.h") {
|
|||||||
}
|
}
|
||||||
|
|
||||||
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
|
print "NOTE: now cvs tag this release!\n";
|
||||||
|
|
||||||
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`;
|
|
||||||
|
@@ -4,13 +4,18 @@
|
|||||||
/* 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
|
||||||
|
|
||||||
/* Structure for scatter/gather I/O. */
|
/* Structure for scatter/gather I/O. */
|
||||||
struct iovec
|
struct iovec
|
||||||
@@ -21,11 +26,16 @@ 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)
|
||||||
|
|
||||||
|
#endif /* !NETWARE */
|
||||||
|
|
||||||
#define NS_CMPRSFLGS 0xc0
|
#define NS_CMPRSFLGS 0xc0
|
||||||
|
|
||||||
|
|
||||||
@@ -211,16 +221,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 */
|
||||||
|
72
ares/setup.h
Normal file
72
ares/setup.h
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
#ifndef ARES_SETUP_H
|
||||||
|
#define ARES_SETUP_H
|
||||||
|
|
||||||
|
/* Copyright (C) 2004 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
#include "config.h"
|
||||||
|
#else
|
||||||
|
/* simple work-around for now, for systems without configure support */
|
||||||
|
#define ssize_t int
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* 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
|
||||||
|
|
||||||
|
/* now typedef our socket type */
|
||||||
|
#if defined(WIN32) && !defined(WATT32)
|
||||||
|
#include <winsock.h>
|
||||||
|
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
|
||||||
|
#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))
|
||||||
|
/* 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
|
||||||
|
|
||||||
|
#endif /* ARES_SETUP_H */
|
@@ -109,10 +109,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
|
||||||
|
@@ -46,7 +46,6 @@ CLEAN :
|
|||||||
-@erase "$(INTDIR)\ares_destroy.obj"
|
-@erase "$(INTDIR)\ares_destroy.obj"
|
||||||
-@erase "$(INTDIR)\ares_expand_name.obj"
|
-@erase "$(INTDIR)\ares_expand_name.obj"
|
||||||
-@erase "$(INTDIR)\ares_fds.obj"
|
-@erase "$(INTDIR)\ares_fds.obj"
|
||||||
-@erase "$(INTDIR)\ares_free_errmem.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_free_hostent.obj"
|
-@erase "$(INTDIR)\ares_free_hostent.obj"
|
||||||
-@erase "$(INTDIR)\ares_free_string.obj"
|
-@erase "$(INTDIR)\ares_free_string.obj"
|
||||||
-@erase "$(INTDIR)\ares_gethostbyaddr.obj"
|
-@erase "$(INTDIR)\ares_gethostbyaddr.obj"
|
||||||
@@ -82,7 +81,6 @@ LIB32_OBJS= \
|
|||||||
"$(INTDIR)\ares_destroy.obj" \
|
"$(INTDIR)\ares_destroy.obj" \
|
||||||
"$(INTDIR)\ares_expand_name.obj" \
|
"$(INTDIR)\ares_expand_name.obj" \
|
||||||
"$(INTDIR)\ares_fds.obj" \
|
"$(INTDIR)\ares_fds.obj" \
|
||||||
"$(INTDIR)\ares_free_errmem.obj" \
|
|
||||||
"$(INTDIR)\ares_free_hostent.obj" \
|
"$(INTDIR)\ares_free_hostent.obj" \
|
||||||
"$(INTDIR)\ares_free_string.obj" \
|
"$(INTDIR)\ares_free_string.obj" \
|
||||||
"$(INTDIR)\ares_gethostbyaddr.obj" \
|
"$(INTDIR)\ares_gethostbyaddr.obj" \
|
||||||
@@ -122,7 +120,6 @@ CLEAN :
|
|||||||
-@erase "$(INTDIR)\ares_destroy.obj"
|
-@erase "$(INTDIR)\ares_destroy.obj"
|
||||||
-@erase "$(INTDIR)\ares_expand_name.obj"
|
-@erase "$(INTDIR)\ares_expand_name.obj"
|
||||||
-@erase "$(INTDIR)\ares_fds.obj"
|
-@erase "$(INTDIR)\ares_fds.obj"
|
||||||
-@erase "$(INTDIR)\ares_free_errmem.obj"
|
|
||||||
-@erase "$(INTDIR)\ares_free_hostent.obj"
|
-@erase "$(INTDIR)\ares_free_hostent.obj"
|
||||||
-@erase "$(INTDIR)\ares_free_string.obj"
|
-@erase "$(INTDIR)\ares_free_string.obj"
|
||||||
-@erase "$(INTDIR)\ares_gethostbyaddr.obj"
|
-@erase "$(INTDIR)\ares_gethostbyaddr.obj"
|
||||||
@@ -159,7 +156,6 @@ LIB32_OBJS= \
|
|||||||
"$(INTDIR)\ares_destroy.obj" \
|
"$(INTDIR)\ares_destroy.obj" \
|
||||||
"$(INTDIR)\ares_expand_name.obj" \
|
"$(INTDIR)\ares_expand_name.obj" \
|
||||||
"$(INTDIR)\ares_fds.obj" \
|
"$(INTDIR)\ares_fds.obj" \
|
||||||
"$(INTDIR)\ares_free_errmem.obj" \
|
|
||||||
"$(INTDIR)\ares_free_hostent.obj" \
|
"$(INTDIR)\ares_free_hostent.obj" \
|
||||||
"$(INTDIR)\ares_free_string.obj" \
|
"$(INTDIR)\ares_free_string.obj" \
|
||||||
"$(INTDIR)\ares_gethostbyaddr.obj" \
|
"$(INTDIR)\ares_gethostbyaddr.obj" \
|
||||||
@@ -260,12 +256,6 @@ SOURCE=..\..\ares_fds.c
|
|||||||
$(CPP) $(CPP_PROJ) $(SOURCE)
|
$(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
|
SOURCE=..\..\ares_free_hostent.c
|
||||||
|
|
||||||
"$(INTDIR)\ares_free_hostent.obj" : $(SOURCE) "$(INTDIR)"
|
"$(INTDIR)\ares_free_hostent.obj" : $(SOURCE) "$(INTDIR)"
|
||||||
|
BIN
ares/vc/vc.ncb
BIN
ares/vc/vc.ncb
Binary file not shown.
BIN
ares/vc/vc.opt
BIN
ares/vc/vc.opt
Binary file not shown.
@@ -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];
|
||||||
@@ -40,24 +53,47 @@ ares_gettimeofday(struct timeval *tv, struct timezone *tz)
|
|||||||
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; /* In 100-nanosecond intervals */
|
||||||
//t -= EPOCHFILETIME; /* Offset to the Epoch time */
|
#if 0
|
||||||
|
t -= EPOCHFILETIME; /* Offset to the Epoch time */
|
||||||
|
#endif
|
||||||
t /= 10; /* In microseconds */
|
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
#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 */
|
||||||
|
20
buildconf
20
buildconf
@@ -67,7 +67,7 @@ echo "buildconf: autoheader version $ah_version (ok)"
|
|||||||
# automake 1.7 or newer
|
# automake 1.7 or newer
|
||||||
#
|
#
|
||||||
need_automake="1.7"
|
need_automake="1.7"
|
||||||
am_version=`${AUTOMAKE:-automake} --version 2>/dev/null|head -1| sed -e 's/^.* \([0-9]\)/\1/' -e 's/[a-z]* *$//'`
|
am_version=`${AUTOMAKE:-automake} --version 2>/dev/null|head -1| sed -e 's/^.* \([0-9]\)/\1/' -e 's/[a-z]* *$//' -e 's/\(.*\)\(-p.*\)/\1/'`
|
||||||
if test -z "$am_version"; then
|
if test -z "$am_version"; then
|
||||||
echo "buildconf: automake not found."
|
echo "buildconf: automake not found."
|
||||||
echo " You need automake version $need_automake or newer installed."
|
echo " You need automake version $need_automake or newer installed."
|
||||||
@@ -101,6 +101,10 @@ libtool=`findtool glibtool 2>/dev/null`
|
|||||||
if test ! -x "$libtool"; then
|
if test ! -x "$libtool"; then
|
||||||
libtool=`findtool libtool`
|
libtool=`findtool libtool`
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# set the LIBTOOLIZE here so that glibtoolize is used if glibtool was found
|
||||||
|
LIBTOOLIZE="${libtool}ize"
|
||||||
|
|
||||||
lt_pversion=`$libtool --version 2>/dev/null|head -1|sed -e 's/^[^0-9]*//g' -e 's/[- ].*//'`
|
lt_pversion=`$libtool --version 2>/dev/null|head -1|sed -e 's/^[^0-9]*//g' -e 's/[- ].*//'`
|
||||||
if test -z "$lt_pversion"; then
|
if test -z "$lt_pversion"; then
|
||||||
echo "buildconf: libtool not found."
|
echo "buildconf: libtool not found."
|
||||||
@@ -157,27 +161,27 @@ fi
|
|||||||
# 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 command '${LIBTOOLIZE:-libtoolize} --copy --automake --force' failed"
|
${LIBTOOLIZE:-libtoolize} --copy --automake --force || die "The libtool command failed"
|
||||||
echo "buildconf: running aclocal"
|
echo "buildconf: running aclocal"
|
||||||
${ACLOCAL:-aclocal} || die "The command '${AUTOHEADER:-aclocal}' failed"
|
${ACLOCAL:-aclocal} $ACLOCAL_FLAGS || die "The aclocal command line failed"
|
||||||
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
|
||||||
echo "buildconf: running autoheader"
|
echo "buildconf: running autoheader"
|
||||||
${AUTOHEADER:-autoheader} || die "The command '${AUTOHEADER:-autoheader}' failed"
|
${AUTOHEADER:-autoheader} || die "The autoheader command failed"
|
||||||
echo "buildconf: running autoconf"
|
echo "buildconf: running autoconf"
|
||||||
${AUTOCONF:-autoconf} || die "The command '${AUTOCONF:-autoconf}' 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 aclocal in the ares directory"
|
||||||
${ACLOCAL:-aclocal} || die "The command '${ACLOCAL:-aclocal}' failed"
|
${ACLOCAL:-aclocal} $ACLOCAL_FLAGS || die "The ares aclocal command failed"
|
||||||
echo "buildconf: running autoconf in the ares directory"
|
echo "buildconf: running autoconf in the ares directory"
|
||||||
${AUTOCONF:-autoconf} || die "The command '${AUTOCONF:-autoconf}' failed"
|
${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 command '${AUTOMAKE:-automake} -a' failed"
|
${AUTOMAKE:-automake} -a || 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
|
||||||
|
|
||||||
|
433
configure.ac
433
configure.ac
@@ -4,7 +4,7 @@ dnl Process this file with autoconf to produce a configure script.
|
|||||||
AC_PREREQ(2.57)
|
AC_PREREQ(2.57)
|
||||||
|
|
||||||
dnl We don't know the version number "staticly" so we use a dash here
|
dnl We don't know the version number "staticly" so we use a dash here
|
||||||
AC_INIT(curl, [-], [curl-bug@haxx.se])
|
AC_INIT(curl, [-], [a suitable curl mailing list => http://curl.haxx.se/mail/])
|
||||||
|
|
||||||
dnl configure script copyright
|
dnl configure script copyright
|
||||||
AC_COPYRIGHT([Copyright (c) 1998 - 2004 Daniel Stenberg, <daniel@haxx.se>
|
AC_COPYRIGHT([Copyright (c) 1998 - 2004 Daniel Stenberg, <daniel@haxx.se>
|
||||||
@@ -16,22 +16,34 @@ AM_CONFIG_HEADER(lib/config.h src/config.h)
|
|||||||
AM_MAINTAINER_MODE
|
AM_MAINTAINER_MODE
|
||||||
|
|
||||||
dnl SED is needed by some of the tools
|
dnl SED is needed by some of the tools
|
||||||
AC_PATH_PROG( SED, sed, , $PATH:/usr/bin:/usr/local/bin)
|
AC_PATH_PROG( SED, sed, sed-was-not-found-by-configure,
|
||||||
|
$PATH:/usr/bin:/usr/local/bin)
|
||||||
AC_SUBST(SED)
|
AC_SUBST(SED)
|
||||||
|
|
||||||
|
if test "x$SED" = "xsed-was-not-found-by-configure"; then
|
||||||
|
AC_MSG_WARN([sed was not found, this may ruin your chances to build fine])
|
||||||
|
fi
|
||||||
|
|
||||||
dnl AR is used by libtool, and try the odd Solaris path too
|
dnl AR is used by libtool, and try the odd Solaris path too
|
||||||
AC_PATH_PROG( AR, ar, , $PATH:/usr/bin:/usr/local/bin:/usr/ccs/bin)
|
dnl we use AC_CHECK_TOOL since this should make a library for the target
|
||||||
|
dnl platform
|
||||||
|
AC_CHECK_TOOL(AR, ar,
|
||||||
|
ar-was-not-found-by-configure,
|
||||||
|
$PATH:/usr/bin:/usr/local/bin:/usr/ccs/bin)
|
||||||
AC_SUBST(AR)
|
AC_SUBST(AR)
|
||||||
|
if test "x$AR" = "xar-was-not-found-by-configure"; then
|
||||||
|
AC_MSG_WARN([ar was not found, this may ruin your chances to build fine])
|
||||||
|
fi
|
||||||
|
|
||||||
dnl figure out the libcurl version
|
dnl figure out the libcurl version
|
||||||
VERSION=`$SED -ne 's/^#define LIBCURL_VERSION "\(.*\)"/\1/p' ${srcdir}/include/curl/curl.h`
|
VERSION=`$SED -ne 's/^#define LIBCURL_VERSION "\(.*\)"/\1/p' ${srcdir}/include/curl/curlver.h`
|
||||||
AM_INIT_AUTOMAKE(curl,$VERSION)
|
AM_INIT_AUTOMAKE(curl,$VERSION)
|
||||||
AC_MSG_CHECKING([curl version])
|
AC_MSG_CHECKING([curl version])
|
||||||
AC_MSG_RESULT($VERSION)
|
AC_MSG_RESULT($VERSION)
|
||||||
|
|
||||||
dnl
|
dnl
|
||||||
dnl we extract the numerical version for curl-config only
|
dnl we extract the numerical version for curl-config only
|
||||||
VERSIONNUM=`$SED -ne 's/^#define LIBCURL_VERSION_NUM 0x\(.*\)/\1/p' ${srcdir}/include/curl/curl.h`
|
VERSIONNUM=`$SED -ne 's/^#define LIBCURL_VERSION_NUM 0x\(.*\)/\1/p' ${srcdir}/include/curl/curlver.h`
|
||||||
AC_SUBST(VERSIONNUM)
|
AC_SUBST(VERSIONNUM)
|
||||||
|
|
||||||
dnl Solaris pkgadd support definitions
|
dnl Solaris pkgadd support definitions
|
||||||
@@ -42,6 +54,17 @@ AC_SUBST(PKGADD_PKG)
|
|||||||
AC_SUBST(PKGADD_NAME)
|
AC_SUBST(PKGADD_NAME)
|
||||||
AC_SUBST(PKGADD_VENDOR)
|
AC_SUBST(PKGADD_VENDOR)
|
||||||
|
|
||||||
|
dnl
|
||||||
|
dnl initialize all the info variables to 'no'
|
||||||
|
curl_ssl_msg="no (--with-ssl)"
|
||||||
|
curl_zlib_msg="no (--with-zlib)"
|
||||||
|
curl_krb4_msg="no (--with-krb4*)"
|
||||||
|
curl_gss_msg="no (--with-gssapi)"
|
||||||
|
curl_spnego_msg="no (--with-spnego)"
|
||||||
|
curl_ares_msg="no (--enable-ares)"
|
||||||
|
curl_ipv6_msg="no (--enable-ipv6)"
|
||||||
|
curl_idn_msg="no (--with-libidn)"
|
||||||
|
curl_manual_msg="no (--enable-manual)"
|
||||||
|
|
||||||
dnl
|
dnl
|
||||||
dnl Detect the canonical host and target build environment
|
dnl Detect the canonical host and target build environment
|
||||||
@@ -64,7 +87,7 @@ dnl check for cygwin stuff
|
|||||||
AC_LIBTOOL_WIN32_DLL
|
AC_LIBTOOL_WIN32_DLL
|
||||||
|
|
||||||
dnl libtool setup
|
dnl libtool setup
|
||||||
AM_PROG_LIBTOOL
|
AC_PROG_LIBTOOL
|
||||||
|
|
||||||
AC_MSG_CHECKING([if we need -no-undefined])
|
AC_MSG_CHECKING([if we need -no-undefined])
|
||||||
case $host in
|
case $host in
|
||||||
@@ -79,6 +102,7 @@ AC_MSG_RESULT($need_no_undefined)
|
|||||||
AM_CONDITIONAL(NO_UNDEFINED, test x$need_no_undefined = xyes)
|
AM_CONDITIONAL(NO_UNDEFINED, test x$need_no_undefined = xyes)
|
||||||
|
|
||||||
AC_MSG_CHECKING([if we need -mimpure-text])
|
AC_MSG_CHECKING([if we need -mimpure-text])
|
||||||
|
mimpure=no
|
||||||
case $host in
|
case $host in
|
||||||
*-*-solaris2*)
|
*-*-solaris2*)
|
||||||
if test "$GCC" = "yes"; then
|
if test "$GCC" = "yes"; then
|
||||||
@@ -86,7 +110,6 @@ case $host in
|
|||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
mimpure=no
|
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
AC_MSG_RESULT($mimpure)
|
AC_MSG_RESULT($mimpure)
|
||||||
@@ -258,13 +281,13 @@ dnl At least one system has been identified to require BOTH nsl and socket
|
|||||||
dnl libs at the same time to link properly.
|
dnl libs at the same time to link properly.
|
||||||
if test "$HAVE_GETHOSTBYNAME" != "1"
|
if test "$HAVE_GETHOSTBYNAME" != "1"
|
||||||
then
|
then
|
||||||
AC_MSG_CHECKING([trying gethostbyname with both nsl and socket libs])
|
AC_MSG_CHECKING([for gethostbyname with both nsl and socket libs])
|
||||||
my_ac_save_LIBS=$LIBS
|
my_ac_save_LIBS=$LIBS
|
||||||
LIBS="-lnsl -lsocket $LIBS"
|
LIBS="-lnsl -lsocket $LIBS"
|
||||||
AC_TRY_LINK( ,
|
AC_TRY_LINK( ,
|
||||||
[gethostbyname();],
|
[gethostbyname();],
|
||||||
[ dnl found it!
|
[ dnl found it!
|
||||||
HAVE_GETHOSTBYNAME="1",
|
HAVE_GETHOSTBYNAME="1"
|
||||||
AC_MSG_RESULT([yes])],
|
AC_MSG_RESULT([yes])],
|
||||||
[ dnl failed!
|
[ dnl failed!
|
||||||
AC_MSG_RESULT([no])
|
AC_MSG_RESULT([no])
|
||||||
@@ -383,7 +406,11 @@ main()
|
|||||||
))
|
))
|
||||||
|
|
||||||
if test "$ipv6" = "yes"; then
|
if test "$ipv6" = "yes"; then
|
||||||
|
curl_ipv6_msg="enabled"
|
||||||
|
|
||||||
CURL_CHECK_WORKING_GETADDRINFO
|
CURL_CHECK_WORKING_GETADDRINFO
|
||||||
|
|
||||||
|
CURL_CHECK_NI_WITHSCOPEID
|
||||||
fi
|
fi
|
||||||
|
|
||||||
dnl **********************************************************************
|
dnl **********************************************************************
|
||||||
@@ -533,7 +560,7 @@ then
|
|||||||
AC_CHECK_HEADERS(krb.h)
|
AC_CHECK_HEADERS(krb.h)
|
||||||
|
|
||||||
dnl we found the required libraries, add to LIBS
|
dnl we found the required libraries, add to LIBS
|
||||||
LIBS="-lkrb -ldes $LIBS"
|
LIBS="-lkrb -lcom_err -ldes $LIBS"
|
||||||
|
|
||||||
dnl Check for function krb_get_our_ip_for_realm
|
dnl Check for function krb_get_our_ip_for_realm
|
||||||
dnl this is needed for NAT networks
|
dnl this is needed for NAT networks
|
||||||
@@ -547,6 +574,8 @@ then
|
|||||||
KRB4_ENABLED=1
|
KRB4_ENABLED=1
|
||||||
AC_SUBST(KRB4_ENABLED)
|
AC_SUBST(KRB4_ENABLED)
|
||||||
|
|
||||||
|
curl_krb4_msg="enabled"
|
||||||
|
|
||||||
dnl the krb4 stuff needs a strlcpy()
|
dnl the krb4 stuff needs a strlcpy()
|
||||||
AC_CHECK_FUNCS(strlcpy)
|
AC_CHECK_FUNCS(strlcpy)
|
||||||
|
|
||||||
@@ -580,7 +609,9 @@ if test x"$want_spnego" = xyes; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
AC_MSG_RESULT(yes)
|
AC_MSG_RESULT(yes)
|
||||||
AC_DEFINE(HAVE_SPNEGO, 1, [Define this if you have the SPNEGO library fbopenssl])
|
AC_DEFINE(HAVE_SPNEGO, 1,
|
||||||
|
[Define this if you have the SPNEGO library fbopenssl])
|
||||||
|
curl_spnego_msg="enabled"
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
@@ -636,6 +667,8 @@ if test x"$want_gss" = xyes; then
|
|||||||
AC_MSG_RESULT(yes)
|
AC_MSG_RESULT(yes)
|
||||||
AC_DEFINE(HAVE_GSSAPI, 1, [if you have the gssapi libraries])
|
AC_DEFINE(HAVE_GSSAPI, 1, [if you have the gssapi libraries])
|
||||||
|
|
||||||
|
curl_gss_msg="enabled"
|
||||||
|
|
||||||
if test -n "$GSSAPI_INCS"; then
|
if test -n "$GSSAPI_INCS"; then
|
||||||
# cut off the preceding -I from the include path
|
# cut off the preceding -I from the include path
|
||||||
GSSAPI_INCS=`echo $GSSAPI_INCS | sed -e s/^-I//g`
|
GSSAPI_INCS=`echo $GSSAPI_INCS | sed -e s/^-I//g`
|
||||||
@@ -651,33 +684,6 @@ else
|
|||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
dnl Detect the pkg-config tool, as it may have extra info about the
|
|
||||||
dnl openssl installation we can use. I *believe* this is what we are
|
|
||||||
dnl expected to do on really recent Redhat Linux hosts.
|
|
||||||
AC_PATH_PROG( PKGCONFIG, pkg-config, no, $PATH:/usr/bin:/usr/local/bin)
|
|
||||||
if test "$PKGCONFIG" != "no" ; then
|
|
||||||
AC_MSG_CHECKING([for OpenSSL options using pkg-config])
|
|
||||||
|
|
||||||
$PKGCONFIG --exists openssl
|
|
||||||
SSL_EXISTS=$?
|
|
||||||
|
|
||||||
if test "$SSL_EXISTS" -eq "0"; then
|
|
||||||
SSL_LIBS=`$PKGCONFIG --libs-only-l openssl 2>/dev/null`
|
|
||||||
SSL_LDFLAGS=`$PKGCONFIG --libs-only-L openssl 2>/dev/null`
|
|
||||||
SSL_CPPFLAGS=`$PKGCONFIG --cflags-only-I openssl 2>/dev/null`
|
|
||||||
|
|
||||||
LIBS="$LIBS $SSL_LIBS"
|
|
||||||
CPPFLAGS="$CPPFLAGS $SSL_CPPFLAGS"
|
|
||||||
LDFLAGS="$LDFLAGS $SSL_LDFLAGS"
|
|
||||||
|
|
||||||
AC_MSG_RESULT([yes])
|
|
||||||
else
|
|
||||||
AC_MSG_RESULT([no])
|
|
||||||
fi
|
|
||||||
|
|
||||||
fi
|
|
||||||
|
|
||||||
dnl **********************************************************************
|
dnl **********************************************************************
|
||||||
dnl Check for the presence of SSL libraries and headers
|
dnl Check for the presence of SSL libraries and headers
|
||||||
dnl **********************************************************************
|
dnl **********************************************************************
|
||||||
@@ -693,39 +699,71 @@ AC_HELP_STRING([--without-ssl], [disable SSL]),
|
|||||||
|
|
||||||
if test X"$OPT_SSL" = Xno
|
if test X"$OPT_SSL" = Xno
|
||||||
then
|
then
|
||||||
AC_MSG_WARN(SSL/https support disabled)
|
AC_MSG_WARN([SSL disabled, you will not be able to use HTTPS, FTPS, NTLM and more])
|
||||||
else
|
else
|
||||||
|
|
||||||
dnl Check for and handle argument to --with-ssl.
|
dnl backup the pre-ssl variables
|
||||||
|
|
||||||
dnl save the pre-ssl check flags for a while
|
|
||||||
CLEANLDFLAGS="$LDFLAGS"
|
CLEANLDFLAGS="$LDFLAGS"
|
||||||
CLEANCPPFLAGS="$CPPFLAGS"
|
CLEANCPPFLAGS="$CPPFLAGS"
|
||||||
|
CLEANLIBS="$LIBS"
|
||||||
|
|
||||||
case "$OPT_SSL" in
|
case "$OPT_SSL" in
|
||||||
yes)
|
yes)
|
||||||
|
dnl --with-ssl (without path) used
|
||||||
|
PKGTEST="yes"
|
||||||
EXTRA_SSL=/usr/local/ssl ;;
|
EXTRA_SSL=/usr/local/ssl ;;
|
||||||
off)
|
off)
|
||||||
|
dnl no --with-ssl option given, just check default places
|
||||||
|
PKGTEST="yes"
|
||||||
EXTRA_SSL= ;;
|
EXTRA_SSL= ;;
|
||||||
*)
|
*)
|
||||||
dnl check the given spot right away!
|
dnl check the given --with-ssl spot
|
||||||
|
PKGTEST="no"
|
||||||
EXTRA_SSL=$OPT_SSL
|
EXTRA_SSL=$OPT_SSL
|
||||||
LDFLAGS="$LDFLAGS -L$EXTRA_SSL/lib$libsuff"
|
LDFLAGS="$LDFLAGS -L$EXTRA_SSL/lib$libsuff"
|
||||||
CPPFLAGS="$CPPFLAGS -I$EXTRA_SSL/include/openssl -I$EXTRA_SSL/include"
|
CPPFLAGS="$CPPFLAGS -I$EXTRA_SSL/include/openssl -I$EXTRA_SSL/include"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
if test "$PKGTEST" = "yes"; then
|
||||||
|
|
||||||
|
dnl Detect the pkg-config tool, as it may have extra info about the
|
||||||
|
dnl openssl installation we can use. I *believe* this is what we are
|
||||||
|
dnl expected to do on really recent Redhat Linux hosts.
|
||||||
|
|
||||||
|
AC_PATH_PROG( PKGCONFIG, pkg-config, no, $PATH:/usr/bin:/usr/local/bin)
|
||||||
|
if test "$PKGCONFIG" != "no" ; then
|
||||||
|
AC_MSG_CHECKING([OpenSSL options with pkg-config])
|
||||||
|
|
||||||
|
$PKGCONFIG --exists openssl
|
||||||
|
SSL_EXISTS=$?
|
||||||
|
|
||||||
|
if test "$SSL_EXISTS" -eq "0"; then
|
||||||
|
SSL_LIBS=`$PKGCONFIG --libs-only-l openssl 2>/dev/null`
|
||||||
|
SSL_LDFLAGS=`$PKGCONFIG --libs-only-L openssl 2>/dev/null`
|
||||||
|
SSL_CPPFLAGS=`$PKGCONFIG --cflags-only-I openssl 2>/dev/null`
|
||||||
|
|
||||||
|
dnl use the values pkg-config reported
|
||||||
|
LIBS="$LIBS $SSL_LIBS"
|
||||||
|
CPPFLAGS="$CPPFLAGS $SSL_CPPFLAGS"
|
||||||
|
LDFLAGS="$LDFLAGS $SSL_LDFLAGS"
|
||||||
|
AC_MSG_RESULT([found])
|
||||||
|
else
|
||||||
|
AC_MSG_RESULT([no])
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
AC_CHECK_LIB(crypto, CRYPTO_lock,[
|
AC_CHECK_LIB(crypto, CRYPTO_lock,[
|
||||||
HAVECRYPTO="yes"
|
HAVECRYPTO="yes"
|
||||||
],[
|
],[
|
||||||
OLDLDFLAGS="$LDFLAGS"
|
|
||||||
OLDCPPFLAGS="$CPPFLAGS"
|
|
||||||
LDFLAGS="$CLEANLDFLAGS -L$EXTRA_SSL/lib$libsuff"
|
LDFLAGS="$CLEANLDFLAGS -L$EXTRA_SSL/lib$libsuff"
|
||||||
CPPFLAGS="$CLEANCPPFLAGS -I$EXTRA_SSL/include/openssl -I$EXTRA_SSL/include"
|
CPPFLAGS="$CLEANCPPFLAGS -I$EXTRA_SSL/include/openssl -I$EXTRA_SSL/include"
|
||||||
AC_CHECK_LIB(crypto, CRYPTO_add_lock,[
|
AC_CHECK_LIB(crypto, CRYPTO_add_lock,[
|
||||||
HAVECRYPTO="yes" ], [
|
HAVECRYPTO="yes" ], [
|
||||||
LDFLAGS="$OLDLDFLAGS"
|
LDFLAGS="$CLEANLDFLAGS"
|
||||||
CPPFLAGS="$OLDCPPFLAGS"
|
CPPFLAGS="$CLEANCPPFLAGS"
|
||||||
|
LIBS="$CLEANLIBS"
|
||||||
])
|
])
|
||||||
])
|
])
|
||||||
|
|
||||||
@@ -770,10 +808,12 @@ else
|
|||||||
dnl Check for SSLeay headers
|
dnl Check for SSLeay headers
|
||||||
AC_CHECK_HEADERS(openssl/x509.h openssl/rsa.h openssl/crypto.h \
|
AC_CHECK_HEADERS(openssl/x509.h openssl/rsa.h openssl/crypto.h \
|
||||||
openssl/pem.h openssl/ssl.h openssl/err.h,
|
openssl/pem.h openssl/ssl.h openssl/err.h,
|
||||||
|
curl_ssl_msg="enabled"
|
||||||
OPENSSL_ENABLED=1)
|
OPENSSL_ENABLED=1)
|
||||||
|
|
||||||
if test $ac_cv_header_openssl_x509_h = no; then
|
if test $ac_cv_header_openssl_x509_h = no; then
|
||||||
AC_CHECK_HEADERS(x509.h rsa.h crypto.h pem.h ssl.h err.h,
|
AC_CHECK_HEADERS(x509.h rsa.h crypto.h pem.h ssl.h err.h,
|
||||||
|
curl_ssl_msg="enabled"
|
||||||
OPENSSL_ENABLED=1)
|
OPENSSL_ENABLED=1)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -894,6 +934,7 @@ case "$OPT_ZLIB" in
|
|||||||
dnl replace 'HAVE_LIBZ' in the automake makefile.ams
|
dnl replace 'HAVE_LIBZ' in the automake makefile.ams
|
||||||
AMFIXLIB="1"
|
AMFIXLIB="1"
|
||||||
AC_MSG_NOTICE([found both libz and libz.h header])
|
AC_MSG_NOTICE([found both libz and libz.h header])
|
||||||
|
curl_zlib_msg="enabled"
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
@@ -901,6 +942,48 @@ esac
|
|||||||
dnl set variable for use in automakefile(s)
|
dnl set variable for use in automakefile(s)
|
||||||
AM_CONDITIONAL(HAVE_LIBZ, test x"$AMFIXLIB" = x1)
|
AM_CONDITIONAL(HAVE_LIBZ, test x"$AMFIXLIB" = x1)
|
||||||
|
|
||||||
|
AC_MSG_CHECKING([whether to build with libidn])
|
||||||
|
AC_ARG_WITH(libidn,
|
||||||
|
AC_HELP_STRING([--with-libidn=PATH],[Enable libidn usage])
|
||||||
|
AC_HELP_STRING([--without-libidn],[Disable libidn usage]),
|
||||||
|
[LIBIDN="$withval"])
|
||||||
|
|
||||||
|
case "$LIBIDN" in
|
||||||
|
no)
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
;;
|
||||||
|
*) AC_MSG_RESULT(yes)
|
||||||
|
|
||||||
|
idn=""
|
||||||
|
dnl if there is a given path, check that FIRST
|
||||||
|
if test "x$LIBIDN" != "xyes"; then
|
||||||
|
oldLDFLAGS=$LDFLAGS
|
||||||
|
oldCPPFLAGS=$CPPFLAGS
|
||||||
|
LDFLAGS="$LDFLAGS -L$LIBIDN/lib"
|
||||||
|
CPPFLAGS="$CPPFLAGS -I$LIBIDN/include"
|
||||||
|
idn="yes"
|
||||||
|
AC_CHECK_LIB(idn, idna_to_ascii_4i, ,
|
||||||
|
idn=""
|
||||||
|
LDFLAGS=$oldLDFLAGS
|
||||||
|
CPPFLAGS=$oldCPPFLAGS)
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test "x$idn" != "xyes"; then
|
||||||
|
dnl check with default paths
|
||||||
|
AC_CHECK_LIB(idn, idna_to_ascii_lz, ,
|
||||||
|
idn="")
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test "x$idn" = "xyes"; then
|
||||||
|
curl_idn_msg="enabled"
|
||||||
|
dnl different versions of libidn have different setups of these:
|
||||||
|
AC_CHECK_FUNCS( idn_free idna_strerror tld_strerror)
|
||||||
|
AC_CHECK_HEADERS( idn-free.h )
|
||||||
|
fi
|
||||||
|
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
dnl Default is to try the thread-safe versions of a few functions
|
dnl Default is to try the thread-safe versions of a few functions
|
||||||
OPT_THREAD=on
|
OPT_THREAD=on
|
||||||
|
|
||||||
@@ -915,6 +998,7 @@ printf("just fine");
|
|||||||
#endif
|
#endif
|
||||||
],
|
],
|
||||||
[ AC_MSG_RESULT([yes])
|
[ AC_MSG_RESULT([yes])
|
||||||
|
RECENTAIX=yes
|
||||||
OPT_THREAD=off ],
|
OPT_THREAD=off ],
|
||||||
[ AC_MSG_RESULT([no]) ]
|
[ AC_MSG_RESULT([no]) ]
|
||||||
)
|
)
|
||||||
@@ -943,7 +1027,7 @@ else
|
|||||||
CURL_CHECK_GETHOSTBYNAME_R()
|
CURL_CHECK_GETHOSTBYNAME_R()
|
||||||
|
|
||||||
dnl dig around for gethostbyaddr_r()
|
dnl dig around for gethostbyaddr_r()
|
||||||
CURL_CHECK_GETHOSTBYADDR_R()
|
dnl CURL_CHECK_GETHOSTBYADDR_R()
|
||||||
fi
|
fi
|
||||||
|
|
||||||
dnl poke around for inet_ntoa_r()
|
dnl poke around for inet_ntoa_r()
|
||||||
@@ -952,10 +1036,49 @@ else
|
|||||||
dnl is there a localtime_r()
|
dnl is there a localtime_r()
|
||||||
CURL_CHECK_LOCALTIME_R()
|
CURL_CHECK_LOCALTIME_R()
|
||||||
|
|
||||||
AC_CHECK_FUNCS( gmtime_r )
|
dnl is there a strerror_r()
|
||||||
|
CURL_CHECK_STRERROR_R()
|
||||||
|
|
||||||
|
AC_CHECK_FUNCS( gmtime_r )
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
dnl for recent AIX versions, we skip all the thread-safe checks above since
|
||||||
|
dnl they claim a thread-safe libc using the standard API. But there are
|
||||||
|
dnl some functions still not thread-safe. Check for these!
|
||||||
|
|
||||||
|
dnl Let's hope this split URL remains working:
|
||||||
|
dnl http://publibn.boulder.ibm.com/doc_link/en_US/a_doc_lib/aixprggd/ \
|
||||||
|
dnl genprogc/thread_quick_ref.htm
|
||||||
|
|
||||||
|
if test "x$RECENTAIX" = "xyes"; then
|
||||||
|
|
||||||
|
AC_DEFINE(_THREAD_SAFE, 1, [define this if you need it to compile thread-safe code])
|
||||||
|
|
||||||
|
dnl check if this is the IMB xlc compiler
|
||||||
|
dnl Details thanks to => http://predef.sourceforge.net/
|
||||||
|
AC_MSG_CHECKING([if this is the xlc compiler])
|
||||||
|
AC_EGREP_CPP([^__xlC__], [__xlC__],
|
||||||
|
dnl action if the text is found, this it has not been replaced by the
|
||||||
|
dnl cpp
|
||||||
|
XLC="no"
|
||||||
|
AC_MSG_RESULT([no]),
|
||||||
|
dnl the text was not found, it was replaced by the cpp
|
||||||
|
XLC="yes"
|
||||||
|
AC_MSG_RESULT([yes])
|
||||||
|
CFLAGS="$CFLAGS -qthreaded"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
dnl is there a localtime_r()
|
||||||
|
CURL_CHECK_LOCALTIME_R()
|
||||||
|
|
||||||
|
dnl is there a strerror_r()
|
||||||
|
CURL_CHECK_STRERROR_R()
|
||||||
|
|
||||||
|
AC_CHECK_FUNCS( gmtime_r )
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
dnl **********************************************************************
|
dnl **********************************************************************
|
||||||
dnl Back to "normal" configuring
|
dnl Back to "normal" configuring
|
||||||
dnl **********************************************************************
|
dnl **********************************************************************
|
||||||
@@ -979,6 +1102,7 @@ AC_CHECK_HEADERS(
|
|||||||
arpa/inet.h \
|
arpa/inet.h \
|
||||||
net/if.h \
|
net/if.h \
|
||||||
netinet/in.h \
|
netinet/in.h \
|
||||||
|
netinet/tcp.h \
|
||||||
netdb.h \
|
netdb.h \
|
||||||
sys/sockio.h \
|
sys/sockio.h \
|
||||||
sys/stat.h \
|
sys/stat.h \
|
||||||
@@ -996,6 +1120,7 @@ AC_CHECK_HEADERS(
|
|||||||
utime.h \
|
utime.h \
|
||||||
sys/utime.h \
|
sys/utime.h \
|
||||||
sys/poll.h \
|
sys/poll.h \
|
||||||
|
libgen.h \
|
||||||
setjmp.h,
|
setjmp.h,
|
||||||
dnl to do if not found
|
dnl to do if not found
|
||||||
[],
|
[],
|
||||||
@@ -1015,6 +1140,9 @@ dnl default includes
|
|||||||
#ifdef HAVE_SYS_SOCKET_H
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef HAVE_NETINET_IN_H
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#endif
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -1027,9 +1155,23 @@ AC_CHECK_SIZEOF(curl_off_t, ,[
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include "$srcdir/include/curl/curl.h"
|
#include "$srcdir/include/curl/curl.h"
|
||||||
])
|
])
|
||||||
|
AC_CHECK_SIZEOF(size_t)
|
||||||
|
AC_CHECK_SIZEOF(long)
|
||||||
|
|
||||||
AC_CHECK_TYPE(long long,
|
AC_CHECK_TYPE(long long,
|
||||||
[AC_DEFINE(HAVE_LONGLONG, 1, [if your compiler supports 'long long'])])
|
[AC_DEFINE(HAVE_LONGLONG, 1, [if your compiler supports long long])]
|
||||||
|
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
|
# check for ssize_t
|
||||||
AC_CHECK_TYPE(ssize_t, ,
|
AC_CHECK_TYPE(ssize_t, ,
|
||||||
@@ -1074,6 +1216,7 @@ AC_CHECK_FUNCS( strtoll \
|
|||||||
dlopen \
|
dlopen \
|
||||||
utime \
|
utime \
|
||||||
sigsetjmp \
|
sigsetjmp \
|
||||||
|
basename \
|
||||||
poll,
|
poll,
|
||||||
dnl if found
|
dnl if found
|
||||||
[],
|
[],
|
||||||
@@ -1104,6 +1247,41 @@ if test "$ac_cv_func_sigsetjmp" != "yes"; then
|
|||||||
)
|
)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
AC_CHECK_DECL(basename, ,
|
||||||
|
AC_DEFINE(NEED_BASENAME_PROTO, 1, [If you lack a fine basename() prototype]),
|
||||||
|
#ifdef HAVE_STRING_H
|
||||||
|
#include <string.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_LIBGEN_H
|
||||||
|
#include <libgen.h>
|
||||||
|
#endif
|
||||||
|
)
|
||||||
|
|
||||||
|
dnl poll() might be badly emulated, as in Mac OS X 10.3 (and other BSDs?) and
|
||||||
|
dnl to find out we make an extra check here!
|
||||||
|
if test "$ac_cv_func_poll" = "yes"; then
|
||||||
|
AC_MSG_CHECKING([if poll works with NULL inputs])
|
||||||
|
AC_RUN_IFELSE([
|
||||||
|
#ifdef HAVE_SYS_POLL_H
|
||||||
|
#include <sys/poll.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
/* make this return 0 == timeout since there's nothing to read from */
|
||||||
|
return poll((void *)0, 0, 10 /*ms*/);
|
||||||
|
}
|
||||||
|
],
|
||||||
|
AC_MSG_RESULT(yes)
|
||||||
|
AC_DEFINE(HAVE_POLL_FINE, 1, [If you have a fine poll]),
|
||||||
|
AC_MSG_RESULT(no),
|
||||||
|
AC_MSG_RESULT(cross-compiling assumes yes)
|
||||||
|
AC_DEFINE(HAVE_POLL_FINE, 1, [If you have a fine poll])
|
||||||
|
) dnl end of AC_RUN_IFELSE
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
AC_PATH_PROG( PERL, perl, ,
|
AC_PATH_PROG( PERL, perl, ,
|
||||||
$PATH:/usr/local/bin/perl:/usr/bin/:/usr/local/bin )
|
$PATH:/usr/local/bin/perl:/usr/bin/:/usr/local/bin )
|
||||||
AC_SUBST(PERL)
|
AC_SUBST(PERL)
|
||||||
@@ -1142,37 +1320,90 @@ then
|
|||||||
USE_MANUAL="no";
|
USE_MANUAL="no";
|
||||||
fi
|
fi
|
||||||
|
|
||||||
AC_PROG_YACC
|
|
||||||
|
|
||||||
if test -z "$YACC"
|
|
||||||
then
|
|
||||||
AC_MSG_CHECKING([if OK to build without bison/yacc])
|
|
||||||
dnl no yacc is a big deal if we have no pre-fixed getdate.y
|
|
||||||
if test -r "$srcdir/lib/getdate.c"
|
|
||||||
then
|
|
||||||
dnl all is well, we don't have to generate it!
|
|
||||||
AC_MSG_RESULT(yes)
|
|
||||||
else
|
|
||||||
AC_MSG_RESULT(no)
|
|
||||||
AC_MSG_ERROR([no yacc or bison found, can't build libcurl!])
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
dnl *************************************************************************
|
dnl *************************************************************************
|
||||||
dnl If the manual variable still is set, then we go with providing a built-in
|
dnl If the manual variable still is set, then we go with providing a built-in
|
||||||
dnl manual
|
dnl manual
|
||||||
|
|
||||||
if test "$USE_MANUAL" = "1"; then
|
if test "$USE_MANUAL" = "1"; then
|
||||||
AC_DEFINE(USE_MANUAL, 1, [If you want to build curl with the built-in manual])
|
AC_DEFINE(USE_MANUAL, 1, [If you want to build curl with the built-in manual])
|
||||||
|
curl_manual_msg="enabled"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
dnl set variable for use in automakefile(s)
|
dnl set variable for use in automakefile(s)
|
||||||
AM_CONDITIONAL(USE_MANUAL, test x"$USE_MANUAL" = x1)
|
AM_CONDITIONAL(USE_MANUAL, test x"$USE_MANUAL" = x1)
|
||||||
|
|
||||||
|
AC_MSG_CHECKING([whether to enable ares])
|
||||||
|
AC_ARG_ENABLE(ares,
|
||||||
|
AC_HELP_STRING([--enable-ares=PATH],[Enable ares for name lookups])
|
||||||
|
AC_HELP_STRING([--disable-ares],[Disable ares for name lookups]),
|
||||||
|
[ case "$enableval" in
|
||||||
|
no)
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
;;
|
||||||
|
*) AC_MSG_RESULT(yes)
|
||||||
|
|
||||||
dnl AC_PATH_PROG( RANLIB, ranlib, /usr/bin/ranlib,
|
if test "x$IPV6_ENABLED" = "x1"; then
|
||||||
dnl $PATH:/usr/bin/:/usr/local/bin )
|
AC_MSG_ERROR([ares doesn't work with ipv6, disable ipv6 to use ares])
|
||||||
dnl AC_SUBST(RANLIB)
|
fi
|
||||||
|
|
||||||
|
AC_DEFINE(USE_ARES, 1, [Define if you want to enable ares support])
|
||||||
|
dnl substitute HAVE_ARES for curl-config and similar
|
||||||
|
HAVE_ARES="1"
|
||||||
|
AC_SUBST(HAVE_ARES)
|
||||||
|
curl_ares_msg="enabled"
|
||||||
|
|
||||||
|
LIBS="$LIBS -lcares"
|
||||||
|
|
||||||
|
dnl For backwards compatibility default to includes/lib in srcdir/ares
|
||||||
|
dnl If a value is specified it is assumed that the libs are in $val/lib
|
||||||
|
dnl and the includes are in $val/include. This is the default setup for
|
||||||
|
dnl ares so it should not be a problem.
|
||||||
|
if test "x$enableval" = "xyes" ; then
|
||||||
|
if test -d "$srcdir/ares"; then
|
||||||
|
aresembedded="yes"
|
||||||
|
AC_CONFIG_SUBDIRS(ares)
|
||||||
|
aresinc=`cd $srcdir/ares && pwd`
|
||||||
|
CPPFLAGS="$CPPFLAGS -I$aresinc"
|
||||||
|
|
||||||
|
dnl the pwd= below cannot 'cd' into the ares dir to get the full
|
||||||
|
dnl path to it, since it may not exist yet if we build outside of
|
||||||
|
dnl the source tree
|
||||||
|
pwd=`pwd`
|
||||||
|
LDFLAGS="$LDFLAGS -L$pwd/ares"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
CPPFLAGS="$CPPFLAGS -I$enableval/include"
|
||||||
|
LDFLAGS="$LDFLAGS -L$enableval/lib"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test -z "$aresembedded"; then
|
||||||
|
dnl verify that a sufficient c-ares is here if we have pointed one
|
||||||
|
dnl out and don't use the "embedded" ares dir (in which case we don't
|
||||||
|
dnl check it because it might not have been built yet)
|
||||||
|
AC_MSG_CHECKING([that c-ares is good and recent enough])
|
||||||
|
AC_LINK_IFELSE( [
|
||||||
|
#include <ares.h>
|
||||||
|
/* provide a set of dummy functions in case c-ares was built with debug */
|
||||||
|
void curl_dofree() { }
|
||||||
|
void curl_sclose() { }
|
||||||
|
void curl_domalloc() { }
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
ares_channel channel;
|
||||||
|
ares_cancel(channel);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
],
|
||||||
|
AC_MSG_RESULT(yes),
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
AC_MSG_ERROR([c-ares library defective or too old])
|
||||||
|
)
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac ],
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
)
|
||||||
|
|
||||||
dnl ************************************************************
|
dnl ************************************************************
|
||||||
dnl lame option to switch on debug options
|
dnl lame option to switch on debug options
|
||||||
@@ -1199,51 +1430,7 @@ AC_HELP_STRING([--disable-debug],[Disable debug options]),
|
|||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
)
|
)
|
||||||
|
|
||||||
AC_MSG_CHECKING([whether to enable ares])
|
AM_CONDITIONAL(CROSSCOMPILING, test x$cross_compiling = xyes)
|
||||||
AC_ARG_ENABLE(ares,
|
|
||||||
AC_HELP_STRING([--enable-ares=PATH],[Enable ares for name lookups])
|
|
||||||
AC_HELP_STRING([--disable-ares],[Disable ares for name lookups]),
|
|
||||||
[ case "$enableval" in
|
|
||||||
no)
|
|
||||||
AC_MSG_RESULT(no)
|
|
||||||
;;
|
|
||||||
*) AC_MSG_RESULT(yes)
|
|
||||||
|
|
||||||
if test "x$IPV6_ENABLED" = "x1"; then
|
|
||||||
AC_MSG_ERROR([ares doesn't work with ipv6, disable ipv6 to use ares])
|
|
||||||
fi
|
|
||||||
|
|
||||||
AC_DEFINE(USE_ARES, 1, [Define if you want to enable ares support])
|
|
||||||
dnl substitute HAVE_ARES for curl-config and similar
|
|
||||||
HAVE_ARES="1"
|
|
||||||
AC_SUBST(HAVE_ARES)
|
|
||||||
|
|
||||||
LIBS="$LIBS -lcares"
|
|
||||||
|
|
||||||
dnl For backwards compatibility default to includes/lib in srcdir/ares
|
|
||||||
dnl If a value is specified it is assumed that the libs are in $val/lib
|
|
||||||
dnl and the includes are in $val/include. This is the default setup for
|
|
||||||
dnl ares so it should not be a problem.
|
|
||||||
if test "x$enableval" = "xyes" ; then
|
|
||||||
if test -d "$srcdir/ares"; then
|
|
||||||
AC_CONFIG_SUBDIRS(ares)
|
|
||||||
aresinc=`cd $srcdir/ares && pwd`
|
|
||||||
CPPFLAGS="$CPPFLAGS -I$aresinc"
|
|
||||||
|
|
||||||
dnl the pwd= below cannot 'cd' into the ares dir to get the full
|
|
||||||
dnl path to it, since it may not exist yet if we build outside of
|
|
||||||
dnl the source tree
|
|
||||||
pwd=`pwd`
|
|
||||||
LDFLAGS="$LDFLAGS -L$pwd/ares"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
CPPFLAGS="$CPPFLAGS -I$enableval/include"
|
|
||||||
LDFLAGS="$LDFLAGS -L$enableval/lib"
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
esac ],
|
|
||||||
AC_MSG_RESULT(no)
|
|
||||||
)
|
|
||||||
|
|
||||||
AC_CONFIG_FILES([Makefile \
|
AC_CONFIG_FILES([Makefile \
|
||||||
docs/Makefile \
|
docs/Makefile \
|
||||||
@@ -1272,3 +1459,21 @@ AC_CONFIG_FILES([Makefile \
|
|||||||
curl-config
|
curl-config
|
||||||
])
|
])
|
||||||
AC_OUTPUT
|
AC_OUTPUT
|
||||||
|
|
||||||
|
AC_MSG_NOTICE([Configured to build curl/libcurl:
|
||||||
|
|
||||||
|
curl version: ${VERSION}
|
||||||
|
Host setup: ${host}
|
||||||
|
Install prefix: ${prefix}
|
||||||
|
Compiler: ${CC}
|
||||||
|
SSL support: ${curl_ssl_msg}
|
||||||
|
zlib support: ${curl_zlib_msg}
|
||||||
|
krb4 support: ${curl_krb4_msg}
|
||||||
|
GSSAPI support: ${curl_gss_msg}
|
||||||
|
SNPEGO support: ${curl_spnego_msg}
|
||||||
|
c-ares support: ${curl_ares_msg}
|
||||||
|
ipv6 support: ${curl_ipv6_msg}
|
||||||
|
IDN support: ${curl_idn_msg}
|
||||||
|
Build libcurl: Shared=${enable_shared}, Static=${enable_static}
|
||||||
|
Built-in manual: ${curl_manual_msg}
|
||||||
|
])
|
||||||
|
@@ -2,17 +2,8 @@
|
|||||||
;;;; $Id$
|
;;;; $Id$
|
||||||
|
|
||||||
;;; The curl hacker's C conventions.
|
;;; The curl hacker's C conventions.
|
||||||
|
;;; See the sample.emacs file on how this file can be made to take
|
||||||
;;; After loading this file and added the mode-hook you can in C
|
;;; effect automatically when editing curl source files.
|
||||||
;;; files, put something like this to use the curl style
|
|
||||||
;;; automatically:
|
|
||||||
;;
|
|
||||||
;; /* -----------------------------------------------------------------
|
|
||||||
;; * local variables:
|
|
||||||
;; * eval: (set c-file-style "curl")
|
|
||||||
;; * end:
|
|
||||||
;; */
|
|
||||||
;;
|
|
||||||
|
|
||||||
(defconst curl-c-style
|
(defconst curl-c-style
|
||||||
'((c-basic-offset . 2)
|
'((c-basic-offset . 2)
|
||||||
@@ -29,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"
|
||||||
@@ -37,12 +35,15 @@
|
|||||||
(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"))
|
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" 'curl-code-cleanup)
|
||||||
(setq c-recognize-knr-p nil)
|
(setq c-recognize-knr-p nil)
|
||||||
|
;;; (add-hook 'write-file-hooks 'delete-trailing-whitespace t)
|
||||||
|
(setq show-trailing-whitespace t)
|
||||||
)
|
)
|
||||||
|
|
||||||
;; Set this is in your .emacs if you want to use the c-mode-hook as
|
;; Set this is in your .emacs if you want to use the c-mode-hook as
|
||||||
|
@@ -17,22 +17,27 @@ 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++
|
C++
|
||||||
|
|
||||||
Written by Jean-Philippe Barrette-LaPierre.
|
Written by Jean-Philippe Barrette-LaPierre
|
||||||
http://www.sourceforge.net/projects/curlpp
|
http://www.sourceforge.net/projects/curlpp
|
||||||
|
|
||||||
|
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,25 +47,33 @@ 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.
|
Written by Daniel Stenberg
|
||||||
http://curl.haxx.se/libcurl/java/
|
http://curl.haxx.se/libcurl/java/
|
||||||
|
|
||||||
Lua
|
Lua
|
||||||
|
|
||||||
Written by Steve Dekorte.
|
Written by Steve Dekorte
|
||||||
http://curl.haxx.se/libcurl/lua/
|
http://curl.haxx.se/libcurl/lua/
|
||||||
|
|
||||||
Object-Pascal
|
Object-Pascal
|
||||||
@@ -70,7 +83,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 +93,49 @@ 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.
|
Written by Kjetil Jacobsen
|
||||||
http://pycurl.sourceforge.net/
|
http://pycurl.sourceforge.net/
|
||||||
|
|
||||||
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/
|
||||||
|
|
||||||
Tcl
|
Tcl
|
||||||
|
|
||||||
Written by Andr<64>s Garc<72>a.
|
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
|
||||||
|
|
||||||
|
Q
|
||||||
|
|
||||||
|
http://q-lang.sourceforge.net/
|
||||||
|
|
||||||
|
wxWidgets
|
||||||
|
|
||||||
|
Written by Casey O'Donnell
|
||||||
|
http://homepage.mac.com/codonnell/wxcurldav/
|
||||||
|
@@ -138,15 +138,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:
|
||||||
|
|
||||||
|
232
docs/FAQ
232
docs/FAQ
@@ -1,4 +1,4 @@
|
|||||||
Updated: March 16, 2004 (http://curl.haxx.se/docs/faq.html)
|
Updated: August 18, 2004 (http://curl.haxx.se/docs/faq.html)
|
||||||
_ _ ____ _
|
_ _ ____ _
|
||||||
___| | | | _ \| |
|
___| | | | _ \| |
|
||||||
/ __| | | | |_) | |
|
/ __| | | | |_) | |
|
||||||
@@ -10,20 +10,20 @@ 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?
|
||||||
|
|
||||||
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 +41,7 @@ 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?
|
||||||
|
|
||||||
4. Running Problems
|
4. Running Problems
|
||||||
4.1 Problems connecting to SSL servers.
|
4.1 Problems connecting to SSL servers.
|
||||||
@@ -70,6 +71,8 @@ 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?
|
||||||
|
|
||||||
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?
|
||||||
@@ -79,24 +82,50 @@ FAQ
|
|||||||
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?
|
||||||
|
|
||||||
|
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?
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
|
|
||||||
1. Philosophy
|
1. Philosophy
|
||||||
|
|
||||||
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 abbrivation 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].
|
|
||||||
|
A free and easy-to-use client-side URL transfer library, supporting FTP,
|
||||||
|
FTPS, HTTP, HTTPS, GOPHER, 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, GOPHER, LDAP, DICT, TELNET and
|
||||||
|
FILE.
|
||||||
|
|
||||||
|
We pronounce curl and cURL with an initial k sound: [kurl].
|
||||||
|
|
||||||
NOTE: there are numerous sub-projects and related projects that also use the
|
NOTE: there are numerous sub-projects and related projects that also use the
|
||||||
word curl in the project names in various combinations, but you should take
|
word curl in the project names in various combinations, but you should take
|
||||||
@@ -112,7 +141,7 @@ 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?
|
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 +156,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,9 +190,9 @@ 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. Sure, Daniel
|
||||||
Stenberg writes the major parts, but other persons' submissions are
|
Stenberg writes the major parts, 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
|
||||||
@@ -175,14 +204,16 @@ FAQ
|
|||||||
|
|
||||||
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 with a donation or similar, one way of
|
||||||
doing that would be to buy "gift certificates" at useful online shopping
|
doing that would be to buy "gift certificates" at useful online shopping
|
||||||
@@ -223,11 +254,11 @@ FAQ
|
|||||||
|
|
||||||
2. Install Related Problems
|
2. Install Related Problems
|
||||||
|
|
||||||
2.1. configure doesn't find OpenSSL even when it is installed
|
2.1 configure doesn't find OpenSSL even when it is installed
|
||||||
|
|
||||||
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 +280,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 +293,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, although there should not be much
|
||||||
problems using a different library. If anyone does "port" curl to use a
|
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 +309,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 +331,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 +351,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 +360,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 +375,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.
|
||||||
|
|
||||||
@@ -369,7 +400,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 +486,44 @@ 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 certficate to make sure that
|
||||||
|
you are truly talking to the real server and not a server impersonating
|
||||||
|
it. The server certificate verifaction 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.
|
||||||
|
|
||||||
|
- 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.
|
||||||
|
|
||||||
|
|
||||||
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 +538,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 +556,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 +570,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 +621,14 @@ 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 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 +662,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,9 +710,10 @@ 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
|
||||||
|
|
||||||
|
|
||||||
5. libcurl Issues
|
5. libcurl Issues
|
||||||
|
|
||||||
5.1. Is libcurl thread-safe?
|
5.1 Is libcurl thread-safe?
|
||||||
|
|
||||||
Yes.
|
Yes.
|
||||||
|
|
||||||
@@ -687,7 +747,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 +803,47 @@ FAQ
|
|||||||
|
|
||||||
(Provided by Andrew Francis)
|
(Provided by Andrew Francis)
|
||||||
|
|
||||||
|
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 includes a number of different name resolve functions:
|
||||||
|
|
||||||
|
- 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.
|
||||||
|
|
||||||
|
- The Windows threaded resolver. It use:
|
||||||
|
|
||||||
|
A - gethostbyname() on plain ipv4 windows hosts
|
||||||
|
B - getaddrinfo() on ipv6-enabled windows hosts
|
||||||
|
|
||||||
6. License Issues
|
6. License Issues
|
||||||
|
|
||||||
@@ -751,32 +852,32 @@ 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?
|
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 +885,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 +895,26 @@ 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.
|
||||||
|
|
||||||
|
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. We often call it PHP/CURL to differentiate from
|
||||||
|
curl the command line tool and libcurl the library.
|
||||||
|
|
||||||
|
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
|
||||||
@@ -80,6 +87,8 @@ 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
|
||||||
@@ -103,6 +112,8 @@ GOPHER
|
|||||||
|
|
||||||
FILE
|
FILE
|
||||||
- URL support
|
- URL support
|
||||||
|
- "uploads"
|
||||||
|
- resume
|
||||||
|
|
||||||
FOOTNOTES
|
FOOTNOTES
|
||||||
=========
|
=========
|
||||||
@@ -112,3 +123,4 @@ FOOTNOTES
|
|||||||
*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
|
||||||
|
13
docs/HISTORY
13
docs/HISTORY
@@ -126,3 +126,16 @@ 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
|
||||||
|
@@ -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
|
|
100
docs/INSTALL
100
docs/INSTALL
@@ -158,17 +158,9 @@ Win32
|
|||||||
Make the sources in the src/ drawer be a "win32 console application"
|
Make the sources in the src/ drawer be a "win32 console application"
|
||||||
project. Name it curl.
|
project. Name it curl.
|
||||||
|
|
||||||
With VC++, add 'ws2_32.lib' to the link libs when you build curl!
|
|
||||||
Borland seems to do that itself magically. Of course you have to make
|
|
||||||
sure it links with the libcurl too!
|
|
||||||
|
|
||||||
For VC++ 6, there's an included Makefile.vc6 that should be possible
|
For VC++ 6, there's an included Makefile.vc6 that should be possible
|
||||||
to use out-of-the-box.
|
to use out-of-the-box.
|
||||||
|
|
||||||
Microsoft note: add /Zm200 to the compiler options to increase the
|
|
||||||
compiler's memory allocation limit, as the hugehelp.c won't compile
|
|
||||||
due to "too long puts string".
|
|
||||||
|
|
||||||
|
|
||||||
With SSL:
|
With SSL:
|
||||||
|
|
||||||
@@ -189,28 +181,33 @@ Win32
|
|||||||
Microsoft command line style
|
Microsoft command line style
|
||||||
----------------------------
|
----------------------------
|
||||||
|
|
||||||
|
Run the 'vcvars32.bat' file to get a proper environment. The
|
||||||
|
vcvars32.bat file is part of the Microsoft development environment and
|
||||||
|
you may find it in 'C:\Program Files\Microsoft Visual Studio\vc98\bin'
|
||||||
|
provided that you installed Visual C/C++ 6 in the default directory.
|
||||||
|
|
||||||
|
Then run 'nmake vc' in curl's root directory.
|
||||||
|
|
||||||
|
If you want to compile with zlib support, you will need to build
|
||||||
|
zlib (http://www.gzip.org/zlib/) as well. Please read the zlib
|
||||||
|
documentation on how to compile zlib. Define the ZLIB_PATH environment
|
||||||
|
variable to the location of zlib.h and zlib.lib, for example:
|
||||||
|
|
||||||
|
set ZLIB_PATH=c:\zlib-1.2.1
|
||||||
|
|
||||||
|
Then run 'nmake vc-zlib' in curl's root directory.
|
||||||
|
|
||||||
|
If you want to compile with SSL support you need the OpenSSL package.
|
||||||
Please read the OpenSSL documentation on how to compile and install
|
Please read the OpenSSL documentation on how to compile and install
|
||||||
the OpenSSL libraries. The build process of OpenSSL generates the
|
the OpenSSL libraries. The build process of OpenSSL generates the
|
||||||
libeay32.dll and ssleay32.dll files in the out32dll subdirectory in
|
libeay32.dll and ssleay32.dll files in the out32dll subdirectory in
|
||||||
the OpenSSL home directory. OpenSSL static libraries (libeay32.lib,
|
the OpenSSL home directory. OpenSSL static libraries (libeay32.lib,
|
||||||
ssleay32.lib, RSAglue.lib) are created in the out32 subdirectory.
|
ssleay32.lib, RSAglue.lib) are created in the out32 subdirectory.
|
||||||
|
|
||||||
Run the 'vcvars32.bat' file to get a proper environment. The
|
|
||||||
vcvars32.bat file is part of the Microsoft development environment and
|
|
||||||
you may find it in 'C:\Program Files\Microsoft Visual Studio\vc98\bin'
|
|
||||||
provided that you installed Visual C/C++ 6 in the default directory.
|
|
||||||
|
|
||||||
Before running nmake define the OPENSSL_PATH environment variable with
|
Before running nmake define the OPENSSL_PATH environment variable with
|
||||||
the root/base directory of OpenSSL, for example:
|
the root/base directory of OpenSSL, for example:
|
||||||
|
|
||||||
set OPENSSL_PATH=c:\openssl-0.9.7a
|
set OPENSSL_PATH=c:\openssl-0.9.7d
|
||||||
|
|
||||||
lib/Makefile.vc6 depends on zlib (http://www.gzip.org/zlib/) as well.
|
|
||||||
Please read the zlib documentation on how to compile zlib. Define the
|
|
||||||
ZLIB_PATH environment variable to the location of zlib.h and zlib.lib,
|
|
||||||
for example:
|
|
||||||
|
|
||||||
set ZLIB_PATH=c:\zlib-1.1.4
|
|
||||||
|
|
||||||
Then run 'nmake vc-ssl' or 'nmake vc-ssl-dll' in curl's root
|
Then run 'nmake vc-ssl' or 'nmake vc-ssl-dll' in curl's root
|
||||||
directory. 'nmake vc-ssl' will create a libcurl static and dynamic
|
directory. 'nmake vc-ssl' will create a libcurl static and dynamic
|
||||||
@@ -223,6 +220,7 @@ Win32
|
|||||||
links curl.exe against libcurl and OpenSSL dynamically.
|
links curl.exe against libcurl and OpenSSL dynamically.
|
||||||
This executable requires libcurl.dll and the OpenSSL DLLs
|
This executable requires libcurl.dll and the OpenSSL DLLs
|
||||||
at runtime.
|
at runtime.
|
||||||
|
Run 'nmake vc-ssl-zlib' to build with both ssl and zlib support.
|
||||||
|
|
||||||
Microsoft / Borland style
|
Microsoft / Borland style
|
||||||
-------------------------
|
-------------------------
|
||||||
@@ -472,6 +470,39 @@ AmigaOS
|
|||||||
you can find a precompiled package at http://amiga.sourceforge.net/OpenSSL/
|
you can find a precompiled package at http://amiga.sourceforge.net/OpenSSL/
|
||||||
|
|
||||||
|
|
||||||
|
NetWare
|
||||||
|
=======
|
||||||
|
|
||||||
|
To compile curl.nlm / libcurl.nlm you need:
|
||||||
|
- either any gcc / nlmconv, or CodeWarrior 7 PDK 4 or later.
|
||||||
|
- gnu make and awk running on the platform you compile on;
|
||||||
|
native Win32 versions can be downloaded from:
|
||||||
|
http://www.gknw.com/development/prgtools/
|
||||||
|
- recent Novell LibC SDK availabable from:
|
||||||
|
http://developer.novell.com/ndk/libc.htm
|
||||||
|
- optional zlib sources (at the moment only dynamic linking with zlib.imp);
|
||||||
|
sources with NetWare Makefile can be optained from:
|
||||||
|
http://www.gknw.com/mirror/zlib/
|
||||||
|
|
||||||
|
Set a search path to your compiler, linker and tools; if you want to have
|
||||||
|
zlib support then set the environment var ZLIB_PATH pointing to your zlib
|
||||||
|
sources, on Linux make sure the var OSTYPE contains the string 'linux';
|
||||||
|
and finally type 'make netware' from the top source directory...
|
||||||
|
I found on some Linux systems (RH9) that OS detection didnt work although
|
||||||
|
a 'set | grep OSTYPE' shows the var present and set; I simply overwrote it
|
||||||
|
with 'OSTYPE=linux-rh9-gnu' and the detection in the Makefile worked...;
|
||||||
|
other options are currently not supported, although partly prepared.
|
||||||
|
The Ares lib builds arlready fine, and both test tools work fine at least
|
||||||
|
when build with CodeWarrior...; dont know yet why they fail when build with
|
||||||
|
gcc though; if you want to compile with Ares support then set an env var
|
||||||
|
WITH_ARES=1; I've not tested yet including libcares into curl.
|
||||||
|
Any help in testing appreciated!
|
||||||
|
Buils automatically created 4 times a day from current CVS are here:
|
||||||
|
http://www.gknw.com/mirror/curl/autobuilds/
|
||||||
|
the status of these buids can be viewed at the autobuild table:
|
||||||
|
http://curl.haxx.se/auto/
|
||||||
|
|
||||||
|
|
||||||
PORTS
|
PORTS
|
||||||
=====
|
=====
|
||||||
This is a probably incomplete list of known hardware and operating systems
|
This is a probably incomplete list of known hardware and operating systems
|
||||||
@@ -527,25 +558,10 @@ PORTS
|
|||||||
- s390 Linux
|
- s390 Linux
|
||||||
- XScale/PXA250 Linux 2.4
|
- XScale/PXA250 Linux 2.4
|
||||||
|
|
||||||
OpenSSL
|
Useful URLs
|
||||||
=======
|
===========
|
||||||
|
|
||||||
You'll find OpenSSL information at:
|
|
||||||
|
|
||||||
http://www.openssl.org
|
|
||||||
|
|
||||||
|
|
||||||
MingW32/Cygwin
|
|
||||||
==============
|
|
||||||
|
|
||||||
You'll find MingW32 and Cygwin information at:
|
|
||||||
|
|
||||||
http://www.mingw.org
|
|
||||||
|
|
||||||
OpenLDAP
|
|
||||||
========
|
|
||||||
|
|
||||||
You'll find OpenLDAP information at:
|
|
||||||
|
|
||||||
http://www.openldap.org
|
|
||||||
|
|
||||||
|
OpenSSL http://www.openssl.org
|
||||||
|
MingW http://www.mingw.org
|
||||||
|
OpenLDAP http://www.openldap.org
|
||||||
|
Zlib http://www.gzip.org/zlib/
|
||||||
|
@@ -3,8 +3,28 @@ join in and help us correct one or more of these! Also be sure to check the
|
|||||||
changelog of the current development status, as one or more of these problems
|
changelog of the current development status, as one or more of these problems
|
||||||
may have been fixed since this was written!
|
may have been fixed since this was written!
|
||||||
|
|
||||||
* NTLM authentication with passwords longer than 14 letters fail. There is
|
* curl version 7.12.2 fails on AIX if compiled with --enable-ares.
|
||||||
a known fix for this, planned to come in curl 7.11.2
|
The workaround is to combine --enable-ares with --disable-shared
|
||||||
|
|
||||||
|
* When connecting to a SOCKS proxy, the (connect) timeout is not properly
|
||||||
|
acknowledged after the actual TCP connect (during the SOCKS "negotiate"
|
||||||
|
phase). Pointed out by Lucas. Fix: need to select() and timeout properly.
|
||||||
|
|
||||||
|
* Using configure --disable-[protocol] may cause 'make test' to fail for
|
||||||
|
tests using the disabled protocol(s).
|
||||||
|
|
||||||
|
* To get HTTP Negotiate authentication to work fine, you need to provide a
|
||||||
|
(fake) user name (this concerns both curl and the lib) because the code
|
||||||
|
wrongly only considers authentication if there's a user name provided.
|
||||||
|
Bug report #1004841. How? http://curl.haxx.se/mail/lib-2004-08/0182.html
|
||||||
|
|
||||||
|
* If you use a very large amount of file descriptors (more than FD_SETSIZE)
|
||||||
|
and then use libcurl, it might crash on its use of select() which then
|
||||||
|
stores data out of bounds. Bug report #948950.
|
||||||
|
|
||||||
|
* --limit-rate using -d or -F does not work. This is because the limit logic
|
||||||
|
is provided by the curl app in its read/write callbacks, and when doing
|
||||||
|
-d/-F the callbacks aren't used! Bug report #921395.
|
||||||
|
|
||||||
* Doing resumed upload over HTTP does not work with '-C -', because curl
|
* Doing resumed upload over HTTP does not work with '-C -', because curl
|
||||||
doesn't do a HEAD first to get the initial size. This needs to be done
|
doesn't do a HEAD first to get the initial size. This needs to be done
|
||||||
@@ -22,33 +42,16 @@ may have been fixed since this was written!
|
|||||||
indicate that the user wants to reach the root dir (this exception SHALL
|
indicate that the user wants to reach the root dir (this exception SHALL
|
||||||
remain even when this bug is fixed).
|
remain even when this bug is fixed).
|
||||||
|
|
||||||
* 1) libcurl does a POST
|
|
||||||
2) receives a 100-continue
|
|
||||||
3) sends away the POST
|
|
||||||
Now, if nothing else is returned from the server, libcurl MUST return
|
|
||||||
CURLE_GOT_NOTHING, but it seems it returns CURLE_OK as it seems to count
|
|
||||||
the 100-continue reply as a good enough reply.
|
|
||||||
|
|
||||||
* libcurl doesn't treat the content-length of compressed data properly, as
|
* libcurl doesn't treat the content-length of compressed data properly, as
|
||||||
it seems HTTP servers send the *uncompressed* length in that header and
|
it seems HTTP servers send the *uncompressed* length in that header and
|
||||||
libcurl thinks of it as the *compressed* lenght. Some explanations are here:
|
libcurl thinks of it as the *compressed* lenght. Some explanations are here:
|
||||||
http://curl.haxx.se/mail/lib-2003-06/0146.html
|
http://curl.haxx.se/mail/lib-2003-06/0146.html
|
||||||
|
|
||||||
* Downloading 0 (zero) bytes files over FTP will not create a zero byte file
|
|
||||||
locally, which is because libcurl doesn't call the write callback with zero
|
|
||||||
bytes. Explained here: http://curl.haxx.se/mail/archive-2003-04/0143.html
|
|
||||||
|
|
||||||
* Using CURLOPT_FAILONERROR (-f/--fail) will make authentication to stop
|
|
||||||
working if you use anything but plain Basic auth.
|
|
||||||
|
|
||||||
* IPv6 support on AIX 4.3.3 doesn't work due to a missing sockaddr_storage
|
* IPv6 support on AIX 4.3.3 doesn't work due to a missing sockaddr_storage
|
||||||
struct. It has been reported to work on AIX 5.1 though.
|
struct. It has been reported to work on AIX 5.1 though.
|
||||||
|
|
||||||
* GOPHER transfers seem broken
|
* GOPHER transfers seem broken
|
||||||
|
|
||||||
* configure --disable-http is not fully supported. All other protocols seem
|
|
||||||
to work to disable.
|
|
||||||
|
|
||||||
* If a HTTP server responds to a HEAD request and includes a body (thus
|
* If a HTTP server responds to a HEAD request and includes a body (thus
|
||||||
violating the RFC2616), curl won't wait to read the response but just stop
|
violating the RFC2616), curl won't wait to read the response but just stop
|
||||||
reading and return back. If a second request (let's assume a GET) is then
|
reading and return back. If a second request (let's assume a GET) is then
|
||||||
|
86
docs/LICENSE-MIXING
Normal file
86
docs/LICENSE-MIXING
Normal file
@@ -0,0 +1,86 @@
|
|||||||
|
License Mixing with apps, libcurl and Third Party Libraries
|
||||||
|
===========================================================
|
||||||
|
|
||||||
|
libcurl can be built to use a fair amount of various third party libraries,
|
||||||
|
libraries that are written and provided by other parties that are distributed
|
||||||
|
using their own licenses. Even libcurl itself contains code that may cause
|
||||||
|
problems to some. This document attempts to describe what licenses libcurl and
|
||||||
|
the other libraries use and what possible dilemmas linking and mixing them all
|
||||||
|
can lead to for end users.
|
||||||
|
|
||||||
|
I am not a lawyer and this is not legal advice!
|
||||||
|
|
||||||
|
One common dilemma is that GPL[1]-licensed code is not allowed to be linked
|
||||||
|
with code licensed under the Original BSD license (with the announcement
|
||||||
|
clause, unless there's a specified exception in the GPL-licensed module). You
|
||||||
|
may still build your own copies that use them all, but distributing them as
|
||||||
|
binaries would be to violate the GPL license - unless you accompany your
|
||||||
|
license with an exception[2]. This particular problem was addressed when the
|
||||||
|
Modified BSD license was created, which does not have the annoncement clause
|
||||||
|
that collides with GPL.
|
||||||
|
|
||||||
|
libcurl http://curl.haxx.se/docs/copyright.html
|
||||||
|
|
||||||
|
Uses an MIT (or Modified BSD)-style license that is as liberal as
|
||||||
|
possible. Some of the source files that deal with KRB4 have Original
|
||||||
|
BSD-style announce-clause licenses. You may not distribute binaries
|
||||||
|
with krb4-enabled libcurl that also link with GPL-licensed code!
|
||||||
|
|
||||||
|
OpenSSL http://www.openssl.org/source/license.html
|
||||||
|
|
||||||
|
Uses an Original BSD-style license with an announement clause that
|
||||||
|
makes it "incompatible" with GPL. You are not allowed to ship binaries
|
||||||
|
that link with OpenSSL that includes GPL code (unless that specific
|
||||||
|
GPL code includes an exception for OpenSSL - a habit that is growing
|
||||||
|
more and more common).
|
||||||
|
|
||||||
|
c-ares http://daniel.haxx.se/projects/c-ares/license.html
|
||||||
|
|
||||||
|
Uses an MIT license that is very liberal and imposes no restrictions
|
||||||
|
on any other library or part you may link with.
|
||||||
|
|
||||||
|
zlib http://www.gzip.org/zlib/zlib_license.html
|
||||||
|
|
||||||
|
Uses an MIT-style license that shouldn't collide with any other
|
||||||
|
library.
|
||||||
|
|
||||||
|
krb4
|
||||||
|
|
||||||
|
While nothing in particular says that a Kerberos4 library must use any
|
||||||
|
particular license, the one I've tried and used successfully so far
|
||||||
|
(kth-krb4) is Original BSD-licensed with the announcement clause. Some
|
||||||
|
of the code in libcurl that is written to deal with Kerberos4 likewise
|
||||||
|
have such a license.
|
||||||
|
|
||||||
|
GSSAPI
|
||||||
|
|
||||||
|
While nothing in particular says that a GSS/Kerberos5 library must use
|
||||||
|
any particular license, the one I've used (Heimdal) is Original BSD-
|
||||||
|
licensed with the announcement clause.
|
||||||
|
|
||||||
|
fbopenssl
|
||||||
|
|
||||||
|
Unclear license. Based on its name, I assume that it uses the OpenSSL
|
||||||
|
license and thus shares the same issues as described for OpenSSL
|
||||||
|
above.
|
||||||
|
|
||||||
|
libidn http://www.gnu.org/licenses/lgpl.html
|
||||||
|
|
||||||
|
Uses the GNU Lesser General Public License. LGPL is a variation of GPL
|
||||||
|
with slightly less aggressive "copyleft". This license requires more
|
||||||
|
requirements to be met when distributing binaries, see the license for
|
||||||
|
details. Also note that if you distribute a binary that includes this
|
||||||
|
library, you must also include the full LGPL license text. Please
|
||||||
|
properly point out what parts of the distributed package that the
|
||||||
|
license addresses.
|
||||||
|
|
||||||
|
OpenLDAP http://www.openldap.org/software/release/license.html
|
||||||
|
|
||||||
|
Uses a Modified BSD-style license. Since libcurl uses OpenLDAP as a
|
||||||
|
shared library only, I have not heard of anyone that ships OpenLDAP
|
||||||
|
linked with libcurl in an app.
|
||||||
|
|
||||||
|
|
||||||
|
[1] = GPL - GNU General Public License: http://www.gnu.org/licenses/gpl.html
|
||||||
|
[2] = http://www.fsf.org/licenses/gpl-faq.html#GPLIncompatibleLibs details on
|
||||||
|
how to write such an exception to the GPL
|
31
docs/MANUAL
31
docs/MANUAL
@@ -63,6 +63,11 @@ USING PASSWORDS
|
|||||||
|
|
||||||
curl -u name:passwd ftp://machine.domain:port/full/path/to/file
|
curl -u name:passwd ftp://machine.domain:port/full/path/to/file
|
||||||
|
|
||||||
|
FTPS
|
||||||
|
|
||||||
|
It is just like for FTP, but you may also want to specify and use
|
||||||
|
SSL-specific options for certificates etc.
|
||||||
|
|
||||||
HTTP
|
HTTP
|
||||||
|
|
||||||
The HTTP URL doesn't support user and password in the URL string. Curl
|
The HTTP URL doesn't support user and password in the URL string. Curl
|
||||||
@@ -75,6 +80,12 @@ USING PASSWORDS
|
|||||||
|
|
||||||
curl -u name:passwd http://machine.domain/full/path/to/file
|
curl -u name:passwd http://machine.domain/full/path/to/file
|
||||||
|
|
||||||
|
HTTP offers many different methods of authentication and curl supports
|
||||||
|
several: Basic, Digest, NTLM and Negotiate. Without telling which method to
|
||||||
|
use, curl defaults to Basic. You can also ask curl to pick the most secure
|
||||||
|
ones out of the ones that the server accepts for the given URL, by using
|
||||||
|
--anyauth.
|
||||||
|
|
||||||
NOTE! Since HTTP URLs don't support user and password, you can't use that
|
NOTE! Since HTTP URLs don't support user and password, you can't use that
|
||||||
style when using Curl via a proxy. You _must_ use the -u style fetch
|
style when using Curl via a proxy. You _must_ use the -u style fetch
|
||||||
during such circumstances.
|
during such circumstances.
|
||||||
@@ -840,7 +851,7 @@ MAILING LISTS
|
|||||||
|
|
||||||
For your convenience, we have several open mailing lists to discuss curl,
|
For your convenience, we have several open mailing lists to discuss curl,
|
||||||
its development and things relevant to this. Get all info at
|
its development and things relevant to this. Get all info at
|
||||||
http://curl.haxx.se/mail/. The lists available are:
|
http://curl.haxx.se/mail/. Some of the lists available are:
|
||||||
|
|
||||||
curl-users
|
curl-users
|
||||||
|
|
||||||
@@ -854,24 +865,18 @@ MAILING LISTS
|
|||||||
|
|
||||||
curl-announce
|
curl-announce
|
||||||
|
|
||||||
Low-traffic. Only announcements of new public versions.
|
Low-traffic. Only receives announcements of new public versions. At worst,
|
||||||
|
that makes something like one or two mails per month, but usually only one
|
||||||
|
mail every second month.
|
||||||
|
|
||||||
curl-and-PHP
|
curl-and-php
|
||||||
|
|
||||||
Using the curl functions in PHP. Everything curl with a PHP angle. Or PHP
|
Using the curl functions in PHP. Everything curl with a PHP angle. Or PHP
|
||||||
with a curl angle.
|
with a curl angle.
|
||||||
|
|
||||||
curl-commits
|
curl-and-python
|
||||||
|
|
||||||
Receives notifications on all CVS commits done to the curl source module.
|
Python hackers using curl with or without the python binding pycurl.
|
||||||
This can become quite a large amount of mails during intense development,
|
|
||||||
be aware. This is for us who like email...
|
|
||||||
|
|
||||||
curl-www-commits
|
|
||||||
|
|
||||||
Receives notifications on all CVS commits done to the curl www module
|
|
||||||
(basicly the web site). This can become quite a large amount of mails
|
|
||||||
during intense changing, be aware. This is for us who like email...
|
|
||||||
|
|
||||||
Please direct curl questions, feature requests and trouble reports to one of
|
Please direct curl questions, feature requests and trouble reports to one of
|
||||||
these mailing lists instead of mailing any individual.
|
these mailing lists instead of mailing any individual.
|
||||||
|
@@ -4,28 +4,20 @@
|
|||||||
|
|
||||||
AUTOMAKE_OPTIONS = foreign no-dependencies
|
AUTOMAKE_OPTIONS = foreign no-dependencies
|
||||||
|
|
||||||
man_MANS = \
|
man_MANS = curl.1 curl-config.1
|
||||||
curl.1 \
|
GENHTMLPAGES = curl.html curl-config.html
|
||||||
curl-config.1
|
PDFPAGES = curl.pdf curl-config.pdf
|
||||||
|
|
||||||
GENHTMLPAGES = \
|
|
||||||
curl.html \
|
|
||||||
curl-config.html
|
|
||||||
|
|
||||||
HTMLPAGES = $(GENHTMLPAGES) index.html
|
HTMLPAGES = $(GENHTMLPAGES) index.html
|
||||||
|
|
||||||
PDFPAGES = \
|
|
||||||
curl.pdf \
|
|
||||||
curl-config.pdf
|
|
||||||
|
|
||||||
SUBDIRS = examples libcurl
|
SUBDIRS = examples libcurl
|
||||||
|
|
||||||
CLEANFILES = $(GENHTMLPAGES) $(PDFPAGES)
|
CLEANFILES = $(GENHTMLPAGES) $(PDFPAGES)
|
||||||
|
|
||||||
EXTRA_DIST = MANUAL BUGS CONTRIBUTE FAQ FEATURES INTERNALS SSLCERTS \
|
EXTRA_DIST = MANUAL BUGS CONTRIBUTE FAQ FEATURES INTERNALS SSLCERTS \
|
||||||
README.win32 RESOURCES TODO TheArtOfHttpScripting THANKS \
|
README.win32 RESOURCES TODO TheArtOfHttpScripting THANKS VERSIONS \
|
||||||
VERSIONS KNOWN_BUGS BINDINGS $(man_MANS) $(HTMLPAGES) \
|
KNOWN_BUGS BINDINGS $(man_MANS) $(HTMLPAGES) HISTORY INSTALL \
|
||||||
HISTORY INSTALL libcurl-the-guide $(PDFPAGES)
|
$(PDFPAGES) LICENSE-MIXING README.netware
|
||||||
|
|
||||||
MAN2HTML= roffit < $< >$@
|
MAN2HTML= roffit < $< >$@
|
||||||
|
|
||||||
|
27
docs/README.netware
Normal file
27
docs/README.netware
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
_ _ ____ _
|
||||||
|
___| | | | _ \| |
|
||||||
|
/ __| | | | |_) | |
|
||||||
|
| (__| |_| | _ <| |___
|
||||||
|
\___|\___/|_| \_\_____|
|
||||||
|
|
||||||
|
README.netware
|
||||||
|
|
||||||
|
Read the README file first.
|
||||||
|
|
||||||
|
Curl has been successfully compiled with gcc / nlmconv on different flavours
|
||||||
|
of Linux as well as with the official Metrowerks CodeWarrior compiler.
|
||||||
|
While not being the main development target, a continously growing share of
|
||||||
|
curl users are NetWare-based, specially also consuming the lib from PHP.
|
||||||
|
|
||||||
|
The unix-style man pages are tricky to read on windows, so therefore are all
|
||||||
|
those pages converted to HTML as well as pdf, and included in the release
|
||||||
|
archives.
|
||||||
|
|
||||||
|
The main curl.1 man page is also "built-in" in the command line tool. Use a
|
||||||
|
command line similar to this in order to extract a separate text file:
|
||||||
|
|
||||||
|
curl -M >manual.txt
|
||||||
|
|
||||||
|
Read the INSTALL file for instructions how to compile curl self.
|
||||||
|
|
||||||
|
|
@@ -1,46 +1,92 @@
|
|||||||
Peer SSL Certificate Verification
|
Peer SSL Certificate Verification
|
||||||
=================================
|
=================================
|
||||||
|
|
||||||
Since version 7.10, libcurl performs peer SSL certificate verification by
|
libcurl performs peer SSL certificate verification by default. This is done by
|
||||||
default. This is done by installing a default CA cert bundle on 'make install'
|
installing a default CA cert bundle on 'make install' (or similar), that CA
|
||||||
(or similar), that CA bundle package is used by default on operations against
|
bundle package is used by default on operations against SSL servers.
|
||||||
SSL servers.
|
|
||||||
|
|
||||||
Alas, if you communicate with HTTPS servers using certificates that are signed
|
If you communicate with HTTPS or FTPS servers using certificates that are
|
||||||
by CAs present in the bundle, you will not notice any changed behavior and you
|
signed by CAs present in the bundle, you can be sure that the remote server
|
||||||
will seamlessly get a higher security level on your SSL connections since you
|
really is the one it claims to be.
|
||||||
can be sure that the remote server really is the one it claims to be.
|
|
||||||
|
|
||||||
If the remote server uses a self-signed certificate, if you don't install
|
If the remote server uses a self-signed certificate, if you don't install
|
||||||
curl's CA cert bundle, if the server uses a certificate signed by a CA that
|
curl's CA cert bundle, if the server uses a certificate signed by a CA that
|
||||||
isn't included in the bundle or if the remoste host is an imposter
|
isn't included in the bundle or if the remote host is an impostor
|
||||||
impersonating your favourite site, and you want to transfer files from this
|
impersonating your favorite site, and you want to transfer files from this
|
||||||
server, do one of the following:
|
server, do one of the following:
|
||||||
|
|
||||||
1. Tell libcurl to *not* verify the peer. With libcurl you disable with with
|
1. Tell libcurl to *not* verify the peer. With libcurl you disable with with
|
||||||
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, FALSE);
|
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, FALSE);
|
||||||
|
|
||||||
With the curl command tool, you disable this with -k/--insecure.
|
With the curl command line tool, you disable this with -k/--insecure.
|
||||||
|
|
||||||
2. Get a CA certificate that can verify the remote server and use the proper
|
2. Get a CA certificate that can verify the remote server and use the proper
|
||||||
option to point out this CA cert for verification when connecting. For
|
option to point out this CA cert for verification when connecting. For
|
||||||
libcurl hackers: curl_easy_setopt(curl, CURLOPT_CAPATH, capath);
|
libcurl hackers: curl_easy_setopt(curl, CURLOPT_CAPATH, capath);
|
||||||
|
|
||||||
With the curl command tool: --cacert [file]
|
With the curl command line tool: --cacert [file]
|
||||||
|
|
||||||
Neglecting to use one of the above menthods when dealing with a server using a
|
3. Add the CA cert for your server to the existing default CA cert bundle.
|
||||||
certficate that isn't signed by one of the certficates in the installed CA
|
The default path of the CA bundle installed with the curl package is:
|
||||||
|
/usr/local/share/curl/curl-ca-bundle.crt, which can be changed by running
|
||||||
|
configure with the --with-ca-bundle option pointing out the path of your
|
||||||
|
choice.
|
||||||
|
|
||||||
|
To do this, you need to get the CA cert for your server in PEM format and
|
||||||
|
then append that to your CA cert bundle.
|
||||||
|
|
||||||
|
If you use Internet Explorer, this is one way to get extract the CA cert
|
||||||
|
for a particular server:
|
||||||
|
|
||||||
|
o View the certificate by double-clicking the padlock
|
||||||
|
o Find out where the CA certificate is kept (Certificate>
|
||||||
|
Authority Information Access>URL)
|
||||||
|
o Get a copy of the crt file using curl
|
||||||
|
o Convert it from crt to PEM using the openssl tool:
|
||||||
|
openssl x509 -inform DES -in yourdownloaded.crt \
|
||||||
|
-out outcert.pem -text
|
||||||
|
o Append the 'outcert.pem' to the CA cert bundle or use it stand-alone
|
||||||
|
as described below.
|
||||||
|
|
||||||
|
(Thanks to Frankie V for this description)
|
||||||
|
|
||||||
|
If you use the 'openssl' tool, this is one way to get extract the CA cert
|
||||||
|
for a particular server:
|
||||||
|
|
||||||
|
o openssl s_client -connect xxxxx.com:443 |tee logfile
|
||||||
|
o type "QUIT", followed by the "ENTER" key
|
||||||
|
o The certificate will have "BEGIN CERTIFICATE" and "END CERTIFICATE"
|
||||||
|
markers.
|
||||||
|
o If you want to see the data in the certificate, you can do: "openssl
|
||||||
|
x509 -inform PEM -in certfile -text -out certdata" where certfile is
|
||||||
|
the cert you extracted from logfile. Look in certdata.
|
||||||
|
o If you want to trust the certificate, you can append it to your
|
||||||
|
cert_bundle or use it stand-alone as described. Just remember that the
|
||||||
|
security is no better than the way you obtained the certificate.
|
||||||
|
|
||||||
|
(Thanks to Doug Kaufman for this description)
|
||||||
|
|
||||||
|
4. If you're using the curl command line tool, you can specify your own CA
|
||||||
|
cert path by setting the environment variable CURL_CA_BUNDLE to the path
|
||||||
|
of your choice.
|
||||||
|
|
||||||
|
If you're using the curl command line tool on Windows, curl will search
|
||||||
|
for a CA cert file named "curl-ca-bundle.crt" in these directories and in
|
||||||
|
this order:
|
||||||
|
1. application's directory
|
||||||
|
2. current working directory
|
||||||
|
3. Windows System directory (e.g. C:\windows\system32)
|
||||||
|
4. Windows Directory (e.g. C:\windows)
|
||||||
|
5. all directories along %PATH%
|
||||||
|
|
||||||
|
5. Get a better/different/newer CA cert bundle! One option is to extract the
|
||||||
|
one a recent Mozilla browser uses, by following the instruction found
|
||||||
|
here:
|
||||||
|
|
||||||
|
http://curl.haxx.se/docs/caextract.html
|
||||||
|
|
||||||
|
Neglecting to use one of the above methods when dealing with a server using a
|
||||||
|
certificate that isn't signed by one of the certificates in the installed CA
|
||||||
cert bundle, will cause SSL to report an error ("certificate verify failed")
|
cert bundle, will cause SSL to report an error ("certificate verify failed")
|
||||||
during the handshake and SSL will then refuse further communication with that
|
during the handshake and SSL will then refuse further communication with that
|
||||||
server.
|
server.
|
||||||
|
|
||||||
This procedure has been deemed The Right Thing even though it adds this extra
|
|
||||||
trouble for some users, since it adds security to a majority of the SSL
|
|
||||||
connections that previously weren't really secure. It turned out many people
|
|
||||||
were using previous versions of curl/libcurl without realizing the need for
|
|
||||||
the CA cert options to get truly secure SSL connections.
|
|
||||||
|
|
||||||
The default path of the CA bundle installed with the curl package is:
|
|
||||||
/usr/local/share/curl/curl-ca-bundle.crt, which can be changed by running
|
|
||||||
configure with the --with-ca-bundle option pointing out the path of your
|
|
||||||
choice.
|
|
||||||
|
91
docs/TODO
91
docs/TODO
@@ -33,8 +33,8 @@ TODO
|
|||||||
return informational stuff as errors, consider a new info returned by
|
return informational stuff as errors, consider a new info returned by
|
||||||
curl_easy_getinfo() #845941
|
curl_easy_getinfo() #845941
|
||||||
|
|
||||||
* Option to set the SO_KEEPALIVE socket option to make libcurl notice and
|
* Use 'struct lifreq' and SIOCGLIFADDR instead of 'struct ifreq' and
|
||||||
disconnect very long time idle connections.
|
SIOCGIFADDR on newer Solaris versions as they claim the latter is obsolete.
|
||||||
|
|
||||||
LIBCURL - multi interface
|
LIBCURL - multi interface
|
||||||
|
|
||||||
@@ -57,6 +57,25 @@ TODO
|
|||||||
|
|
||||||
FTP
|
FTP
|
||||||
|
|
||||||
|
* "PASV IP override" - When an FTPS host is behind a NAT firewall, passive
|
||||||
|
mode fails. The PASV response from the host ["227 PASV Entering passive
|
||||||
|
mode (_ip_address_, _port_)."] contains the private network IP address of
|
||||||
|
the host, which since it is encrypted, cannot be modified by the firewall
|
||||||
|
to the public IP address. What is needed is a cURL option to override the
|
||||||
|
IP address passed by the host "227 PASV" response. Requested by Ed
|
||||||
|
Hingsbergen
|
||||||
|
|
||||||
|
* Support GSS/Kerberos 5 for ftp file transfer. This will allow user
|
||||||
|
authentication and file encryption. Possible libraries and example clients
|
||||||
|
are available from MIT or Heimdal. Requsted by Markus Moeller.
|
||||||
|
|
||||||
|
* Optimize the way libcurl uses CWD on each new request over a persistent
|
||||||
|
connection (on FTP) even if it doesn't have to.
|
||||||
|
|
||||||
|
* REST fix for servers not behaving well on >2GB requests. This should fail
|
||||||
|
if the server doesn't set the pointer to the requested index. The tricky
|
||||||
|
part is to figure out if the server did the right thing or not.
|
||||||
|
|
||||||
* Support the most common FTP proxies, Philip Newton provided a list
|
* Support the most common FTP proxies, Philip Newton provided a list
|
||||||
allegedly from ncftp:
|
allegedly from ncftp:
|
||||||
http://curl.haxx.se/mail/archive-2003-04/0126.html
|
http://curl.haxx.se/mail/archive-2003-04/0126.html
|
||||||
@@ -70,10 +89,13 @@ TODO
|
|||||||
* Since USERPWD always override the user and password specified in URLs, we
|
* Since USERPWD always override the user and password specified in URLs, we
|
||||||
might need another way to specify user+password for anonymous ftp logins.
|
might need another way to specify user+password for anonymous ftp logins.
|
||||||
|
|
||||||
HTTP
|
* The FTP code should get a way of returning errors that is known to still
|
||||||
|
have the control connection alive and sound. Currently, a returned error
|
||||||
|
from within ftp-functions does not tell if the control connection is still
|
||||||
|
OK to use or not. This causes libcurl to fail to re-use connections
|
||||||
|
slightly too often.
|
||||||
|
|
||||||
* Digest and GSS-Negotiate support for HTTP proxies. They only work on
|
HTTP
|
||||||
direct-connections to the server.
|
|
||||||
|
|
||||||
* Pipelining. Sending multiple requests before the previous one(s) are done.
|
* Pipelining. Sending multiple requests before the previous one(s) are done.
|
||||||
This could possibly be implemented using the multi interface to queue
|
This could possibly be implemented using the multi interface to queue
|
||||||
@@ -91,21 +113,25 @@ TODO
|
|||||||
|
|
||||||
SSL
|
SSL
|
||||||
|
|
||||||
* If you really want to improve the SSL situation, you should probably have a
|
* Anton Fedorov's "dumpcert" patch:
|
||||||
look at SSL cafile loading as well - quick traces look to me like these are
|
http://curl.haxx.se/mail/lib-2004-03/0088.html
|
||||||
done on every request as well, when they should only be necessary once per
|
|
||||||
ssl context (or once per handle). Even better would be to support the SSL
|
* Evaluate/apply Gertjan van Wingerde's SSL patches:
|
||||||
CAdir option - instead of loading all of the root CA certs for every
|
http://curl.haxx.se/mail/lib-2004-03/0087.html
|
||||||
request, this option allows you to only read the CA chain that is actually
|
|
||||||
required (into the cache)...
|
* "Look at SSL cafile - quick traces look to me like these are done on every
|
||||||
|
request as well, when they should only be necessary once per ssl context
|
||||||
|
(or once per handle)". The major improvement we can rather easily do is to
|
||||||
|
make sure we don't create and kill a new SSL "context" for every request,
|
||||||
|
but instead make one for every connection and re-use that SSL context in
|
||||||
|
the same style connections are re-used. It will make us use slightly more
|
||||||
|
memory but it will libcurl do less creations and deletions of SSL contexts.
|
||||||
|
|
||||||
* Add an interface to libcurl that enables "session IDs" to get
|
* Add an interface to libcurl that enables "session IDs" to get
|
||||||
exported/imported. Cris Bailiff said: "OpenSSL has functions which can
|
exported/imported. Cris Bailiff said: "OpenSSL has functions which can
|
||||||
serialise the current SSL state to a buffer of your choice, and
|
serialise the current SSL state to a buffer of your choice, and
|
||||||
recover/reset the state from such a buffer at a later date - this is used
|
recover/reset the state from such a buffer at a later date - this is used
|
||||||
by mod_ssl for apache to implement and SSL session ID cache". This whole
|
by mod_ssl for apache to implement and SSL session ID cache".
|
||||||
idea might become moot if we enable the 'data sharing' as mentioned in the
|
|
||||||
LIBCURL label above.
|
|
||||||
|
|
||||||
* OpenSSL supports a callback for customised verification of the peer
|
* OpenSSL supports a callback for customised verification of the peer
|
||||||
certificate, but this doesn't seem to be exposed in the libcurl APIs. Could
|
certificate, but this doesn't seem to be exposed in the libcurl APIs. Could
|
||||||
@@ -114,8 +140,12 @@ TODO
|
|||||||
|
|
||||||
* Make curl's SSL layer option capable of using other free SSL libraries.
|
* Make curl's SSL layer option capable of using other free SSL libraries.
|
||||||
Such as the Mozilla Security Services
|
Such as the Mozilla Security Services
|
||||||
(http://www.mozilla.org/projects/security/pki/nss/) and GNUTLS
|
(http://www.mozilla.org/projects/security/pki/nss/) and GnuTLS
|
||||||
(http://gnutls.hellug.gr/)
|
(http://www.gnu.org/software/gnutls/) This subject has been brought up
|
||||||
|
again recently since GPL-licensed applications that link with libcurl MAY
|
||||||
|
NOT distribute binaries that use OpenSSL without adding an exception clause
|
||||||
|
to the GPL license. See the LICENSE-MIXING document and this:
|
||||||
|
http://www.gnome.org/~markmc/openssl-and-the-gpl.html
|
||||||
|
|
||||||
LDAP
|
LDAP
|
||||||
|
|
||||||
@@ -125,6 +155,17 @@ TODO
|
|||||||
|
|
||||||
CLIENT
|
CLIENT
|
||||||
|
|
||||||
|
* "curl --sync http://example.com/feed[1-100].rss" or
|
||||||
|
"curl --sync http://example.net/{index,calendar,history}.html"
|
||||||
|
|
||||||
|
Downloads a range or set of URLs using the remote name, but only if the
|
||||||
|
remote file is newer than the local file. A Last-Modified HTTP date header
|
||||||
|
should also be used to set the mod date on the downloaded file.
|
||||||
|
(idea from "Brianiac")
|
||||||
|
|
||||||
|
* Globbing support for -d and -F, as in 'curl -d "name=foo[0-9]" URL'.
|
||||||
|
Requested by Dane Jensen and others. This is easily scripted though.
|
||||||
|
|
||||||
* Add an option that prevents cURL from overwiting existing local files. When
|
* Add an option that prevents cURL from overwiting existing local files. When
|
||||||
used, and there already is an existing file with the target file name
|
used, and there already is an existing file with the target file name
|
||||||
(either -O or -o), a number should be appended (and increased if already
|
(either -O or -o), a number should be appended (and increased if already
|
||||||
@@ -158,6 +199,18 @@ TODO
|
|||||||
* --data-encode that URL encodes the data before posting
|
* --data-encode that URL encodes the data before posting
|
||||||
http://curl.haxx.se/mail/archive-2003-11/0091.html (Kevin Roth suggested)
|
http://curl.haxx.se/mail/archive-2003-11/0091.html (Kevin Roth suggested)
|
||||||
|
|
||||||
|
* Provide a way to make options bound to a specific URL among several on the
|
||||||
|
command line. Possibly by letting ':' separate options between URLs,
|
||||||
|
similar to this:
|
||||||
|
|
||||||
|
curl --data foo --url url.com : \
|
||||||
|
--url url2.com : \
|
||||||
|
--url url3.com --data foo3
|
||||||
|
|
||||||
|
(More details: http://curl.haxx.se/mail/archive-2004-07/0133.html)
|
||||||
|
|
||||||
|
The example would do a POST-GET-POST combination on a single command line.
|
||||||
|
|
||||||
BUILD
|
BUILD
|
||||||
|
|
||||||
* Consider extending 'roffit' to produce decent ASCII output, and use that
|
* Consider extending 'roffit' to produce decent ASCII output, and use that
|
||||||
@@ -185,10 +238,10 @@ TODO
|
|||||||
* curl_easy_cleanup() returns void, but curl_multi_cleanup() returns a
|
* curl_easy_cleanup() returns void, but curl_multi_cleanup() returns a
|
||||||
CURLMcode. These should be changed to be the same.
|
CURLMcode. These should be changed to be the same.
|
||||||
|
|
||||||
* curl_formparse() should be removed
|
|
||||||
|
|
||||||
* remove obsolete defines from curl/curl.h
|
* remove obsolete defines from curl/curl.h
|
||||||
|
|
||||||
|
* make several functions use size_t instead of int in their APIs
|
||||||
|
|
||||||
* remove the following functions from the public API:
|
* remove the following functions from the public API:
|
||||||
curl_getenv
|
curl_getenv
|
||||||
curl_mprintf (and variations)
|
curl_mprintf (and variations)
|
||||||
|
@@ -370,11 +370,11 @@ Version: 0.6
|
|||||||
|
|
||||||
In the HTTPS world, you use certificates to validate that you are the one
|
In the HTTPS world, you use certificates to validate that you are the one
|
||||||
you you claim to be, as an addition to normal passwords. Curl supports
|
you you claim to be, as an addition to normal passwords. Curl supports
|
||||||
client-side certificates. All certificates are locked with a PIN-code, why
|
client-side certificates. All certificates are locked with a pass phrase,
|
||||||
you need to enter the unlock-code before the certificate can be used by
|
which you need to enter before the certificate can be used by curl. The pass
|
||||||
curl. The PIN-code can be specified on the command line or if not, entered
|
phrase can be specified on the command line or if not, entered interactively
|
||||||
interactively when curl queries for it. Use a certificate with curl on a
|
when curl queries for it. Use a certificate with curl on a HTTPS server
|
||||||
HTTPS server like:
|
like:
|
||||||
|
|
||||||
curl -E mycert.pem https://that.secure.server.com
|
curl -E mycert.pem https://that.secure.server.com
|
||||||
|
|
||||||
|
98
docs/curl.1
98
docs/curl.1
@@ -1,8 +1,27 @@
|
|||||||
.\" You can view this file with:
|
.\" **************************************************************************
|
||||||
.\" nroff -man curl.1
|
.\" * _ _ ____ _
|
||||||
.\" Written by Daniel Stenberg
|
.\" * Project ___| | | | _ \| |
|
||||||
|
.\" * / __| | | | |_) | |
|
||||||
|
.\" * | (__| |_| | _ <| |___
|
||||||
|
.\" * \___|\___/|_| \_\_____|
|
||||||
|
.\" *
|
||||||
|
.\" * Copyright (C) 1998 - 2004, 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$
|
||||||
|
.\" **************************************************************************
|
||||||
.\"
|
.\"
|
||||||
.TH curl 1 "5 Mar 2004" "Curl 7.11.1" "Curl Manual"
|
.TH curl 1 "3 May 2004" "Curl 7.12" "Curl Manual"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
curl \- transfer a URL
|
curl \- transfer a URL
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
@@ -37,9 +56,10 @@ or you can get sequences of alphanumeric series by using [] as in:
|
|||||||
ftp://ftp.numericals.com/file[001-100].txt (with leading zeros)
|
ftp://ftp.numericals.com/file[001-100].txt (with leading zeros)
|
||||||
ftp://ftp.letters.com/file[a-z].txt
|
ftp://ftp.letters.com/file[a-z].txt
|
||||||
|
|
||||||
No nesting of the sequences is supported at the moment:
|
No nesting of the sequences is supported at the moment, but you can use
|
||||||
|
several ones next to each other:
|
||||||
|
|
||||||
http://www.any.org/archive[1996-1999]/volume[1-4]part{a,b,c,index}.html
|
http://any.org/archive[1996-1999]/vol[1-4]/part{a,b,c}.html
|
||||||
|
|
||||||
You can specify any amount of URLs on the command line. They will be fetched
|
You can specify any amount of URLs on the command line. They will be fetched
|
||||||
in a sequential manner in the specified order.
|
in a sequential manner in the specified order.
|
||||||
@@ -123,7 +143,7 @@ If this option is used several times, each occurrence will toggle it on/off.
|
|||||||
.IP "--connect-timeout <seconds>"
|
.IP "--connect-timeout <seconds>"
|
||||||
Maximum time in seconds that you allow the connection to the server to take.
|
Maximum time in seconds that you allow the connection to the server to take.
|
||||||
This only limits the connection phase, once curl has connected this option is
|
This only limits the connection phase, once curl has connected this option is
|
||||||
of no more use. See also the \fI--max-time\fP option.
|
of no more use. See also the \fI-m/--max-time\fP option.
|
||||||
|
|
||||||
If this option is used several times, the last one will be used.
|
If this option is used several times, the last one will be used.
|
||||||
.IP "-c/--cookie-jar <file name>"
|
.IP "-c/--cookie-jar <file name>"
|
||||||
@@ -154,7 +174,11 @@ transfer. It then uses the given output/input files to figure that out.
|
|||||||
If this option is used several times, the last one will be used.
|
If this option is used several times, the last one will be used.
|
||||||
.IP "--create-dirs"
|
.IP "--create-dirs"
|
||||||
When used in conjunction with the -o option, curl will create the necessary
|
When used in conjunction with the -o option, curl will create the necessary
|
||||||
local directory hierarchy as needed.
|
local directory hierarchy as needed. This option creates the dirs mentioned
|
||||||
|
with the -o option, nothing else. If the -o file name uses no dir or if the
|
||||||
|
dirs it mentions already exist, no dir will be created.
|
||||||
|
|
||||||
|
To create remote directories when using FTP, try \fI--ftp-create-dirs\fP.
|
||||||
.IP "--crlf"
|
.IP "--crlf"
|
||||||
(FTP) Convert LF to CRLF in upload. Useful for MVS (OS/390).
|
(FTP) Convert LF to CRLF in upload. Useful for MVS (OS/390).
|
||||||
|
|
||||||
@@ -311,10 +335,10 @@ If this option is used twice, the second will again disable silent failure.
|
|||||||
.IP "--ftp-ssl"
|
.IP "--ftp-ssl"
|
||||||
(FTP) Make the FTP connection switch to use SSL/TLS. (Added in 7.11.0)
|
(FTP) Make the FTP connection switch to use SSL/TLS. (Added in 7.11.0)
|
||||||
|
|
||||||
If this option is used twice, the second will again disable silent failure.
|
If this option is used twice, the second will again disable this.
|
||||||
.IP "-F/--form <name=content>"
|
.IP "-F/--form <name=content>"
|
||||||
(HTTP) This lets curl emulate a filled in form in which a user has pressed the
|
(HTTP) This lets curl emulate a filled in form in which a user has pressed the
|
||||||
submit button. This causes curl to POST data using the content-type
|
submit button. This causes curl to POST data using the Content-Type
|
||||||
multipart/form-data according to RFC1867. This enables uploading of binary
|
multipart/form-data according to RFC1867. This enables uploading of binary
|
||||||
files etc. To force the 'content' part to be be a file, prefix the file name
|
files etc. To force the 'content' part to be be a file, prefix the file name
|
||||||
with an @ sign. To just get the content part from a file, prefix the file name
|
with an @ sign. To just get the content part from a file, prefix the file name
|
||||||
@@ -331,11 +355,15 @@ input:
|
|||||||
To read the file's content from stdin insted of a file, use - where the file
|
To read the file's content from stdin insted of a file, use - where the file
|
||||||
name should've been. This goes for both @ and < constructs.
|
name should've been. This goes for both @ and < constructs.
|
||||||
|
|
||||||
You can also tell curl what Content-Type to use for the file upload part, by
|
You can also tell curl what Content-Type to use by using 'type=', in a manner
|
||||||
using 'type=', in a manner similar to:
|
similar to:
|
||||||
|
|
||||||
\fBcurl\fP -F "web=@index.html;type=text/html" url.com
|
\fBcurl\fP -F "web=@index.html;type=text/html" url.com
|
||||||
|
|
||||||
|
or
|
||||||
|
|
||||||
|
\fBcurl\fP -F "name=daniel;type=text/foo" url.com
|
||||||
|
|
||||||
See further examples and details in the MANUAL.
|
See further examples and details in the MANUAL.
|
||||||
|
|
||||||
This option can be used multiple times.
|
This option can be used multiple times.
|
||||||
@@ -589,11 +617,23 @@ You may use this option as many times as you have number of URLs.
|
|||||||
(SSL) Pass phrase for the private key
|
(SSL) Pass phrase for the private key
|
||||||
|
|
||||||
If this option is used several times, the last one will be used.
|
If this option is used several times, the last one will be used.
|
||||||
|
.IP "--proxy-basic"
|
||||||
|
Tells curl to use HTTP Basic authentication when communicating with the given
|
||||||
|
proxy. Use \fI--basic\fP for enabling HTTP Basic with a remote host. Basic is
|
||||||
|
the default authentication method curl uses with proxies.
|
||||||
|
|
||||||
|
If this option is used twice, the second will again disable proxy HTTP Basic
|
||||||
|
authentication.
|
||||||
|
.IP "--proxy-digest"
|
||||||
|
Tells curl to use HTTP Digest authentication when communicating with the given
|
||||||
|
proxy. Use \fI--digest\fP for enabling HTTP Digest with a remote host.
|
||||||
|
|
||||||
|
If this option is used twice, the second will again disable proxy HTTP Digest.
|
||||||
.IP "--proxy-ntlm"
|
.IP "--proxy-ntlm"
|
||||||
Tells curl to use NTLM authentication when communicating with the given
|
Tells curl to use HTTP NTLM authentication when communicating with the given
|
||||||
proxy. Use \fI--ntlm\fP for enabling NTLM with a remote host.
|
proxy. Use \fI--ntlm\fP for enabling NTLM with a remote host.
|
||||||
|
|
||||||
If this option is used twice, the second will again disable proxy NTLM.
|
If this option is used twice, the second will again disable proxy HTTP NTLM.
|
||||||
.IP "-p/--proxytunnel"
|
.IP "-p/--proxytunnel"
|
||||||
When an HTTP proxy is used (\fI-x/--proxy\fP), this option will cause non-HTTP
|
When an HTTP proxy is used (\fI-x/--proxy\fP), this option will cause non-HTTP
|
||||||
protocols to attempt to tunnel through the proxy instead of merely using it to
|
protocols to attempt to tunnel through the proxy instead of merely using it to
|
||||||
@@ -626,13 +666,12 @@ instead of PORT by using \fI--disable-eprt\fP. EPRT is really PORT++.
|
|||||||
If used as the first parameter on the command line, the \fI$HOME/.curlrc\fP
|
If used as the first parameter on the command line, the \fI$HOME/.curlrc\fP
|
||||||
file will not be read and used as a config file.
|
file will not be read and used as a config file.
|
||||||
.IP "-Q/--quote <comand>"
|
.IP "-Q/--quote <comand>"
|
||||||
(FTP) Send an arbitrary command to the remote FTP server, by using the QUOTE
|
(FTP) Send an arbitrary command to the remote FTP server. Quote commands are
|
||||||
command of the server. Not all servers support this command, and the set of
|
sent BEFORE the transfer is taking place. To make commands take place after a
|
||||||
QUOTE commands are server specific! Quote commands are sent BEFORE the
|
successful transfer, prefix them with a dash '-'. You may specify any amount
|
||||||
transfer is taking place. To make commands take place after a successful
|
of commands to be run before and after the transfer. If the server returns
|
||||||
transfer, prefix them with a dash '-'. You may specify any amount of commands
|
failure for one of the commands, the entire operation will be aborted. You
|
||||||
to be run before and after the transfer. If the server returns failure for one
|
must send syntactically correct FTP commands as RFC959 defines.
|
||||||
of the commands, the entire operation will be aborted.
|
|
||||||
|
|
||||||
This option can be used multiple times.
|
This option can be used multiple times.
|
||||||
.IP "--random-file <file>"
|
.IP "--random-file <file>"
|
||||||
@@ -707,6 +746,11 @@ is a plain '-', it is instead written to stdout. This option has no point when
|
|||||||
you're using a shell with decent redirecting capabilities.
|
you're using a shell with decent redirecting capabilities.
|
||||||
|
|
||||||
If this option is used several times, the last one will be used.
|
If this option is used several times, the last one will be used.
|
||||||
|
.IP "--tcp-nodelay"
|
||||||
|
Turn on the TCP_NODELAY option. See the \fIcurl_easy_setopt(3)\fP man page for
|
||||||
|
details about this option. (Added in 7.11.2)
|
||||||
|
|
||||||
|
If this option is used several times, each occurance toggles this on/off.
|
||||||
.IP "-t/--telnet-option <OPT=val>"
|
.IP "-t/--telnet-option <OPT=val>"
|
||||||
Pass options to the telnet protocol. Supported options are:
|
Pass options to the telnet protocol. Supported options are:
|
||||||
|
|
||||||
@@ -816,6 +860,8 @@ This curl uses asynchronous name resolves.
|
|||||||
SPNEGO Negotiate authenticaion is supported.
|
SPNEGO Negotiate authenticaion is supported.
|
||||||
.IP "Largefile"
|
.IP "Largefile"
|
||||||
This curl supports transfers of large files, files larger than 2GB.
|
This curl supports transfers of large files, files larger than 2GB.
|
||||||
|
.IP "IDN"
|
||||||
|
This curl supports IDN - international domain names.
|
||||||
.RE
|
.RE
|
||||||
.IP "-w/--write-out <format>"
|
.IP "-w/--write-out <format>"
|
||||||
Defines what to display after a completed and successful operation. The format
|
Defines what to display after a completed and successful operation. The format
|
||||||
@@ -930,22 +976,18 @@ not set.
|
|||||||
|
|
||||||
If this option is used several times, the last one will be used.
|
If this option is used several times, the last one will be used.
|
||||||
.IP "-z/--time-cond <date expression>"
|
.IP "-z/--time-cond <date expression>"
|
||||||
(HTTP)
|
(HTTP) Request a file that has been modified later than the given time and
|
||||||
Request to get a file that has been modified later than the given time and
|
|
||||||
date, or one that has been modified before that time. The date expression can
|
date, or one that has been modified before that time. The date expression can
|
||||||
be all sorts of date strings or if it doesn't match any internal ones, it
|
be all sorts of date strings or if it doesn't match any internal ones, it
|
||||||
tries to get the time from a given file name instead! See the
|
tries to get the time from a given file name instead! See the
|
||||||
.BR "GNU date(1)"
|
\fIcurl_getdate(3)\fP man pages for date expression details.
|
||||||
or
|
|
||||||
.BR "curl_getdate(3)"
|
|
||||||
man pages for date expression details.
|
|
||||||
|
|
||||||
Start the date expression with a dash (-) to make it request for a document
|
Start the date expression with a dash (-) to make it request for a document
|
||||||
that is older than the given date/time, default is a document that is newer
|
that is older than the given date/time, default is a document that is newer
|
||||||
than the specified date/time.
|
than the specified date/time.
|
||||||
|
|
||||||
If this option is used several times, the last one will be used.
|
If this option is used several times, the last one will be used.
|
||||||
.IP "-Z/--max-redirs <num>"
|
.IP "--max-redirs <num>"
|
||||||
Set maximum number of redirection-followings allowed. If \fI-L/--location\fP
|
Set maximum number of redirection-followings allowed. If \fI-L/--location\fP
|
||||||
is used, this option can be used to prevent curl from following redirections
|
is used, this option can be used to prevent curl from following redirections
|
||||||
\&"in absurdum".
|
\&"in absurdum".
|
||||||
|
@@ -5,11 +5,11 @@
|
|||||||
AUTOMAKE_OPTIONS = foreign no-dependencies
|
AUTOMAKE_OPTIONS = foreign no-dependencies
|
||||||
|
|
||||||
EXTRA_DIST = README curlgtk.c sepheaders.c simple.c postit2.c \
|
EXTRA_DIST = README curlgtk.c sepheaders.c simple.c postit2.c \
|
||||||
persistant.c ftpget.c Makefile.example \
|
persistant.c ftpget.c Makefile.example multithread.c getinmemory.c \
|
||||||
multithread.c getinmemory.c ftpupload.c httpput.c \
|
ftpupload.c httpput.c simplessl.c ftpgetresp.c http-post.c \
|
||||||
simplessl.c ftpgetresp.c http-post.c post-callback.c \
|
post-callback.c multi-app.c multi-double.c multi-single.c \
|
||||||
multi-app.c multi-double.c multi-single.c multi-post.c \
|
multi-post.c fopen.c simplepost.c makefile.dj curlx.c https.c \
|
||||||
fopen.c simplepost.c makefile.dj curlx.c
|
multi-debugcallback.c fileupload.c getinfo.c ftp3rdparty.c debug.c
|
||||||
|
|
||||||
all:
|
all:
|
||||||
@echo "done"
|
@echo "done"
|
||||||
|
128
docs/examples/debug.c
Normal file
128
docs/examples/debug.c
Normal file
@@ -0,0 +1,128 @@
|
|||||||
|
/*****************************************************************************
|
||||||
|
* _ _ ____ _
|
||||||
|
* Project ___| | | | _ \| |
|
||||||
|
* / __| | | | |_) | |
|
||||||
|
* | (__| |_| | _ <| |___
|
||||||
|
* \___|\___/|_| \_\_____|
|
||||||
|
*
|
||||||
|
* $Id$
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <curl/curl.h>
|
||||||
|
|
||||||
|
struct data {
|
||||||
|
char trace_ascii; /* 1 or 0 */
|
||||||
|
};
|
||||||
|
|
||||||
|
static
|
||||||
|
void dump(const char *text,
|
||||||
|
FILE *stream, unsigned char *ptr, size_t size,
|
||||||
|
char nohex)
|
||||||
|
{
|
||||||
|
size_t i;
|
||||||
|
size_t c;
|
||||||
|
|
||||||
|
unsigned int width=0x10;
|
||||||
|
|
||||||
|
if(nohex)
|
||||||
|
/* without the hex output, we can fit more on screen */
|
||||||
|
width = 0x40;
|
||||||
|
|
||||||
|
fprintf(stream, "%s, %zd bytes (0x%zx)\n", text, size, size);
|
||||||
|
|
||||||
|
for(i=0; i<size; i+= width) {
|
||||||
|
|
||||||
|
fprintf(stream, "%04zx: ", i);
|
||||||
|
|
||||||
|
if(!nohex) {
|
||||||
|
/* hex not disabled, show it */
|
||||||
|
for(c = 0; c < width; c++)
|
||||||
|
if(i+c < size)
|
||||||
|
fprintf(stream, "%02x ", ptr[i+c]);
|
||||||
|
else
|
||||||
|
fputs(" ", stream);
|
||||||
|
}
|
||||||
|
|
||||||
|
for(c = 0; (c < width) && (i+c < size); c++) {
|
||||||
|
/* check for 0D0A; if found, skip past and start a new line of output */
|
||||||
|
if (nohex && (i+c+1 < size) && ptr[i+c]==0x0D && ptr[i+c+1]==0x0A) {
|
||||||
|
i+=(c+2-width);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
fprintf(stream, "%c",
|
||||||
|
(ptr[i+c]>=0x20) && (ptr[i+c]<0x80)?ptr[i+c]:'.');
|
||||||
|
/* check again for 0D0A, to avoid an extra \n if it's at width */
|
||||||
|
if (nohex && (i+c+2 < size) && ptr[i+c+1]==0x0D && ptr[i+c+2]==0x0A) {
|
||||||
|
i+=(c+3-width);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fputc('\n', stream); /* newline */
|
||||||
|
}
|
||||||
|
fflush(stream);
|
||||||
|
}
|
||||||
|
|
||||||
|
static
|
||||||
|
int my_trace(CURL *handle, curl_infotype type,
|
||||||
|
unsigned char *data, size_t size,
|
||||||
|
void *userp)
|
||||||
|
{
|
||||||
|
struct data *config = (struct data *)userp;
|
||||||
|
const char *text;
|
||||||
|
(void)handle; /* prevent compiler warning */
|
||||||
|
|
||||||
|
switch (type) {
|
||||||
|
case CURLINFO_TEXT:
|
||||||
|
fprintf(stderr, "== Info: %s", data);
|
||||||
|
default: /* in case a new one is introduced to shock us */
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case CURLINFO_HEADER_OUT:
|
||||||
|
text = "=> Send header";
|
||||||
|
break;
|
||||||
|
case CURLINFO_DATA_OUT:
|
||||||
|
text = "=> Send data";
|
||||||
|
break;
|
||||||
|
case CURLINFO_HEADER_IN:
|
||||||
|
text = "<= Recv header";
|
||||||
|
break;
|
||||||
|
case CURLINFO_DATA_IN:
|
||||||
|
text = "<= Recv data";
|
||||||
|
break;
|
||||||
|
case CURLINFO_SSL_DATA_IN:
|
||||||
|
text = "<= Recv SSL data";
|
||||||
|
break;
|
||||||
|
case CURLINFO_SSL_DATA_OUT:
|
||||||
|
text = "<= Send SSL data";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
dump(text, stderr, data, size, config->trace_ascii);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
CURL *curl;
|
||||||
|
CURLcode res;
|
||||||
|
struct data config;
|
||||||
|
|
||||||
|
config.trace_ascii = 1; /* enable ascii tracing */
|
||||||
|
|
||||||
|
curl = curl_easy_init();
|
||||||
|
if(curl) {
|
||||||
|
curl_easy_setopt(curl, CURLOPT_DEBUGFUNCTION, my_trace);
|
||||||
|
curl_easy_setopt(curl, CURLOPT_DEBUGDATA, &config);
|
||||||
|
|
||||||
|
/* the DEBUGFUNCTION has no effect until we enable VERBOSE */
|
||||||
|
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
|
||||||
|
|
||||||
|
curl_easy_setopt(curl, CURLOPT_URL, "curl.haxx.se");
|
||||||
|
res = curl_easy_perform(curl);
|
||||||
|
|
||||||
|
/* always cleanup */
|
||||||
|
curl_easy_cleanup(curl);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
65
docs/examples/fileupload.c
Normal file
65
docs/examples/fileupload.c
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
/*****************************************************************************
|
||||||
|
* _ _ ____ _
|
||||||
|
* Project ___| | | | _ \| |
|
||||||
|
* / __| | | | |_) | |
|
||||||
|
* | (__| |_| | _ <| |___
|
||||||
|
* \___|\___/|_| \_\_____|
|
||||||
|
*
|
||||||
|
* $Id$
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <curl/curl.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
CURL *curl;
|
||||||
|
CURLcode res;
|
||||||
|
curl_off_t size;
|
||||||
|
struct stat file_info;
|
||||||
|
double speed_upload, total_time;
|
||||||
|
FILE *fd;
|
||||||
|
|
||||||
|
fd = fopen("debugit", "rb"); /* open file to upload */
|
||||||
|
if(!fd) {
|
||||||
|
|
||||||
|
return 1; /* can't continue */
|
||||||
|
}
|
||||||
|
|
||||||
|
stat("debugit", &file_info); /* to get the file size */
|
||||||
|
|
||||||
|
curl = curl_easy_init();
|
||||||
|
if(curl) {
|
||||||
|
/* upload to this place */
|
||||||
|
curl_easy_setopt(curl, CURLOPT_URL,
|
||||||
|
"file:///home/dast/src/curl/debug/new");
|
||||||
|
|
||||||
|
/* tell it to "upload" to the URL */
|
||||||
|
curl_easy_setopt(curl, CURLOPT_UPLOAD, 1);
|
||||||
|
|
||||||
|
/* set where to read from (on Windows you need to use READFUNCTION too) */
|
||||||
|
curl_easy_setopt(curl, CURLOPT_READDATA, fd);
|
||||||
|
|
||||||
|
/* and give the size of the upload (optional) */
|
||||||
|
curl_easy_setopt(curl, CURLOPT_INFILESIZE_LARGE,
|
||||||
|
(curl_off_t)file_info.st_size);
|
||||||
|
|
||||||
|
/* enable verbose for easier tracing */
|
||||||
|
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
|
||||||
|
|
||||||
|
res = curl_easy_perform(curl);
|
||||||
|
|
||||||
|
/* now extract transfer info */
|
||||||
|
curl_easy_getinfo(curl, CURLINFO_SPEED_UPLOAD, &speed_upload);
|
||||||
|
curl_easy_getinfo(curl, CURLINFO_TOTAL_TIME, &total_time);
|
||||||
|
|
||||||
|
fprintf(stderr, "Speed: %.3f bytes/sec during %.3f seconds\n",
|
||||||
|
speed_upload, total_time);
|
||||||
|
|
||||||
|
/* always cleanup */
|
||||||
|
curl_easy_cleanup(curl);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
104
docs/examples/ftp3rdparty.c
Normal file
104
docs/examples/ftp3rdparty.c
Normal file
@@ -0,0 +1,104 @@
|
|||||||
|
/*****************************************************************************
|
||||||
|
* _ _ ____ _
|
||||||
|
* Project ___| | | | _ \| |
|
||||||
|
* / __| | | | |_) | |
|
||||||
|
* | (__| |_| | _ <| |___
|
||||||
|
* \___|\___/|_| \_\_____|
|
||||||
|
*
|
||||||
|
* $Id$
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#include <curl/curl.h>
|
||||||
|
#include <curl/types.h>
|
||||||
|
#include <curl/easy.h>
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This is an example showing how to transfer a file between two remote hosts.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
CURL *curl;
|
||||||
|
CURLcode res;
|
||||||
|
char sourceFileName[] = "/tmp/file";
|
||||||
|
char targetFileName[] = "/tmp/curlTargetTest.dat";
|
||||||
|
char sourceHost[] = "source";
|
||||||
|
char targetHost[] = "target";
|
||||||
|
char sourceUserPass[] = "user:pass";
|
||||||
|
char targetUserPass[] = "user:pass";
|
||||||
|
char url[100];
|
||||||
|
|
||||||
|
struct curl_slist *source_pre_cmd = NULL;
|
||||||
|
struct curl_slist *target_pre_cmd = NULL;
|
||||||
|
struct curl_slist *source_post_cmd = NULL;
|
||||||
|
struct curl_slist *target_post_cmd = NULL;
|
||||||
|
char cmd[] = "PWD"; /* just to test */
|
||||||
|
|
||||||
|
curl_global_init(CURL_GLOBAL_DEFAULT);
|
||||||
|
|
||||||
|
curl = curl_easy_init();
|
||||||
|
if (curl) {
|
||||||
|
sprintf(url, "ftp://%s@%s/%s", targetUserPass, targetHost, targetFileName);
|
||||||
|
printf("%s\n", url);
|
||||||
|
curl_easy_setopt(curl, CURLOPT_URL, url);
|
||||||
|
|
||||||
|
/* Set a proxy host */
|
||||||
|
curl_easy_setopt(curl, CURLOPT_SOURCE_HOST, sourceHost);
|
||||||
|
|
||||||
|
/* Set a proxy user and password */
|
||||||
|
curl_easy_setopt(curl, CURLOPT_SOURCE_USERPWD, sourceUserPass);
|
||||||
|
|
||||||
|
/* Set a proxy full file name */
|
||||||
|
curl_easy_setopt(curl, CURLOPT_SOURCE_PATH, sourceFileName);
|
||||||
|
|
||||||
|
/* Set a proxy passive host */
|
||||||
|
curl_easy_setopt(curl, CURLOPT_PASV_HOST, 0); /* optional */
|
||||||
|
|
||||||
|
/* build a list of commands to pass to libcurl */
|
||||||
|
source_pre_cmd = curl_slist_append(source_pre_cmd, cmd);
|
||||||
|
/* Set a proxy pre-quote command */
|
||||||
|
curl_easy_setopt(curl, CURLOPT_SOURCE_PREQUOTE, source_pre_cmd);
|
||||||
|
|
||||||
|
/* build a list of commands to pass to libcurl */
|
||||||
|
target_pre_cmd = curl_slist_append(target_pre_cmd, cmd);
|
||||||
|
/* Set a pre-quote command */
|
||||||
|
curl_easy_setopt(curl, CURLOPT_PREQUOTE, target_pre_cmd);
|
||||||
|
|
||||||
|
/* build a list of commands to pass to libcurl */
|
||||||
|
source_post_cmd = curl_slist_append(source_post_cmd, cmd);
|
||||||
|
/* Set a proxy post-quote command */
|
||||||
|
curl_easy_setopt(curl, CURLOPT_SOURCE_POSTQUOTE, source_post_cmd);
|
||||||
|
|
||||||
|
/* build a list of commands to pass to libcurl */
|
||||||
|
target_post_cmd = curl_slist_append(target_post_cmd, cmd);
|
||||||
|
/* Set a post-quote command */
|
||||||
|
curl_easy_setopt(curl, CURLOPT_POSTQUOTE, target_post_cmd);
|
||||||
|
|
||||||
|
/* Switch on full protocol/debug output */
|
||||||
|
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
|
||||||
|
|
||||||
|
res = curl_easy_perform(curl);
|
||||||
|
|
||||||
|
/* clean up the FTP commands list */
|
||||||
|
curl_slist_free_all(source_pre_cmd);
|
||||||
|
curl_slist_free_all(target_pre_cmd);
|
||||||
|
curl_slist_free_all(source_post_cmd);
|
||||||
|
curl_slist_free_all(target_post_cmd);
|
||||||
|
|
||||||
|
/* always cleanup */
|
||||||
|
curl_easy_cleanup(curl);
|
||||||
|
|
||||||
|
if(CURLE_OK != res) {
|
||||||
|
/* we failed */
|
||||||
|
fprintf(stderr, "curl told us %d\n", res);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
curl_global_cleanup();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
@@ -52,7 +52,11 @@ int main(void)
|
|||||||
|
|
||||||
curl = curl_easy_init();
|
curl = curl_easy_init();
|
||||||
if(curl) {
|
if(curl) {
|
||||||
/* Get curl 7.9.2 from sunet.se's FTP site: */
|
/*
|
||||||
|
* Get curl 7.9.2 from sunet.se's FTP site. curl 7.9.2 is most likely not
|
||||||
|
* present there by the time you read this, so you'd better replace the
|
||||||
|
* URL with one that works!
|
||||||
|
*/
|
||||||
curl_easy_setopt(curl, CURLOPT_URL,
|
curl_easy_setopt(curl, CURLOPT_URL,
|
||||||
"ftp://ftp.sunet.se/pub/www/utilities/curl/curl-7.9.2.tar.gz");
|
"ftp://ftp.sunet.se/pub/www/utilities/curl/curl-7.9.2.tar.gz");
|
||||||
/* Define our callback to get called when there's data to be written */
|
/* Define our callback to get called when there's data to be written */
|
||||||
|
37
docs/examples/getinfo.c
Normal file
37
docs/examples/getinfo.c
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
/*****************************************************************************
|
||||||
|
* _ _ ____ _
|
||||||
|
* Project ___| | | | _ \| |
|
||||||
|
* / __| | | | |_) | |
|
||||||
|
* | (__| |_| | _ <| |___
|
||||||
|
* \___|\___/|_| \_\_____|
|
||||||
|
*
|
||||||
|
* $Id$
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <curl/curl.h>
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
CURL *curl;
|
||||||
|
CURLcode res;
|
||||||
|
|
||||||
|
curl = curl_easy_init();
|
||||||
|
if(curl) {
|
||||||
|
curl_easy_setopt(curl, CURLOPT_URL, "curl.haxx.se");
|
||||||
|
res = curl_easy_perform(curl);
|
||||||
|
|
||||||
|
if(CURLE_OK == res) {
|
||||||
|
char *ct;
|
||||||
|
/* ask for the content-type */
|
||||||
|
res = curl_easy_getinfo(curl, CURLINFO_CONTENT_TYPE, &ct);
|
||||||
|
|
||||||
|
if((CURLE_OK == res) && ct)
|
||||||
|
printf("We received Content-Type: %s\n", ct);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* always cleanup */
|
||||||
|
curl_easy_cleanup(curl);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
@@ -62,6 +62,10 @@ int main(int argc, char **argv)
|
|||||||
/* we pass our 'chunk' struct to the callback function */
|
/* we pass our 'chunk' struct to the callback function */
|
||||||
curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, (void *)&chunk);
|
curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, (void *)&chunk);
|
||||||
|
|
||||||
|
/* some servers don't like requests that are made without a user-agent
|
||||||
|
field, so we provide one */
|
||||||
|
curl_easy_setopt(curl_handle, CURLOPT_USERAGENT, "libcurl-agent/1.0");
|
||||||
|
|
||||||
/* get it! */
|
/* get it! */
|
||||||
curl_easy_perform(curl_handle);
|
curl_easy_perform(curl_handle);
|
||||||
|
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user