Compare commits
	
		
			620 Commits
		
	
	
		
			curl-7_39_
			...
			curl-7_41_
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | ff837422ee | ||
|   | 2e880e29bf | ||
|   | ffc2aeec6e | ||
|   | b3bcdaf01a | ||
|   | 03fa576833 | ||
|   | 0c050662b7 | ||
|   | da39f380a4 | ||
|   | e08a12dab1 | ||
|   | 92835ca5d8 | ||
|   | 5d87b1f22c | ||
|   | 5e4395eab8 | ||
|   | 689061e3f2 | ||
|   | 90314100e0 | ||
|   | 20112ed846 | ||
|   | 63b4b8c7bd | ||
|   | 633b3895d7 | ||
|   | b723ec9905 | ||
|   | ec80b1f414 | ||
|   | 676ac46ff5 | ||
|   | 31c8f8ac11 | ||
|   | b1c7fc050b | ||
|   | fce3f8f487 | ||
|   | 6f89f86c3d | ||
|   | 49655a6822 | ||
|   | 1385199e80 | ||
|   | aba2c4dca2 | ||
|   | c1878e8f52 | ||
|   | ab85ac5eda | ||
|   | d771b44e53 | ||
|   | 7eebf9a3fb | ||
|   | 20c727ec4c | ||
|   | 9956ef2d33 | ||
|   | 0daf1ef729 | ||
|   | 499024d208 | ||
|   | 761d5166af | ||
|   | 05792d6936 | ||
|   | 2a15e594ef | ||
|   | d557da5d79 | ||
|   | 600ccb2237 | ||
|   | 45b9b62de4 | ||
|   | d37b58274d | ||
|   | 0d41c3e46b | ||
|   | 57d6d253a1 | ||
|   | 7f1d76f7ee | ||
|   | 211d5329f4 | ||
|   | cfc6d460cb | ||
|   | 0ebe2c15d1 | ||
|   | 28c9e1edf4 | ||
|   | b3cbf4500d | ||
|   | 83bb07027d | ||
|   | 6b68aa989c | ||
|   | 8f027aa0bf | ||
|   | ac100f1624 | ||
|   | f91a7bc992 | ||
|   | 859a82a85c | ||
|   | 8f369c53cf | ||
|   | 6f494c5e34 | ||
|   | 0a7182f6ad | ||
|   | ae9963776a | ||
|   | 7b5348415f | ||
|   | c49e228916 | ||
|   | 957fcd9049 | ||
|   | f826bf37ea | ||
|   | 564b7b6dd0 | ||
|   | ca51ac4017 | ||
|   | 4161624e94 | ||
|   | 04f246f8c7 | ||
|   | 8ca3b05624 | ||
|   | 6fdc8651bd | ||
|   | 8cc70db2db | ||
|   | c469369b86 | ||
|   | 58e39b4da5 | ||
|   | 300876a7a6 | ||
|   | ef782d726e | ||
|   | 26d4e0ad4e | ||
|   | e3558a551b | ||
|   | 595a66ce0f | ||
|   | 3cc9e9383b | ||
|   | 9d964e5477 | ||
|   | 153e9c0278 | ||
|   | 980ba2202c | ||
|   | 7b2012f262 | ||
|   | ed9a4b9fc4 | ||
|   | fe79f20957 | ||
|   | 0d24f64473 | ||
|   | e1bb13c09f | ||
|   | a268a804b7 | ||
|   | 5691325440 | ||
|   | db6bcbd83f | ||
|   | 37824498a3 | ||
|   | 23c6f0a344 | ||
|   | d1cf5d5706 | ||
|   | e888e30476 | ||
|   | 3d5648f9ee | ||
|   | 12e45b8462 | ||
|   | c260c9fad3 | ||
|   | 731e6a6662 | ||
|   | eb748f159a | ||
|   | d6c4695dcd | ||
|   | 261208d432 | ||
|   | 795f013006 | ||
|   | 71f8fdee81 | ||
|   | 6005b0d99c | ||
|   | 7a8b2885e2 | ||
|   | 79543caf90 | ||
|   | e1ea18f90e | ||
|   | 5f09cbcdbd | ||
|   | 960b04e137 | ||
|   | 089783c838 | ||
|   | be57f689b0 | ||
|   | fca58f6212 | ||
|   | 2cc571f9e3 | ||
|   | 1cbc8fd3d1 | ||
|   | 9c4fa400cf | ||
|   | b9fd757d03 | ||
|   | 3a9419f65a | ||
|   | 1d25acb038 | ||
|   | 5d5c78b47f | ||
|   | 8bb3443a21 | ||
|   | 30ef1a0779 | ||
|   | 81b98dafa1 | ||
|   | 47438daa60 | ||
|   | 36e6404228 | ||
|   | 930be07067 | ||
|   | 30eb6bbdc9 | ||
|   | a2f8887b79 | ||
|   | b2c01f02d5 | ||
|   | c807ce73ed | ||
|   | af8928a23b | ||
|   | 14a6cfaddb | ||
|   | 0b1f37e77c | ||
|   | a4065ebf1c | ||
|   | bd0c3b3c66 | ||
|   | f46c6fbee0 | ||
|   | f13669a375 | ||
|   | 3af90a6e19 | ||
|   | 5e113a18c5 | ||
|   | 5940e06f01 | ||
|   | 5c73cdef62 | ||
|   | 251a349055 | ||
|   | 5f09947d28 | ||
|   | 224cf1c274 | ||
|   | bb12d44471 | ||
|   | bcf07f8a4b | ||
|   | cc28bc472e | ||
|   | e9834808e9 | ||
|   | 710c38d7a4 | ||
|   | d21b66835f | ||
|   | 4e58589b0e | ||
|   | e6b4b4b66d | ||
|   | 355bf01c82 | ||
|   | b4f13a4952 | ||
|   | 99e71e6a84 | ||
|   | 9a452ba3a1 | ||
|   | 659d252b6f | ||
|   | c712fe01a9 | ||
|   | 5c0e66d632 | ||
|   | acc8089bc2 | ||
|   | 34636fa47e | ||
|   | 003076e17c | ||
|   | 9ce2d70019 | ||
|   | 4ce22c607b | ||
|   | 3df8e78860 | ||
|   | 178bd7db34 | ||
|   | f7d5ecec9c | ||
|   | 4e420600c1 | ||
|   | 9547954978 | ||
|   | 4626f31d0e | ||
|   | c07857e063 | ||
|   | 39217edb12 | ||
|   | 241a67f73b | ||
|   | ea93252ef1 | ||
|   | f6b168de4c | ||
|   | 4113ad50e4 | ||
|   | c37dcf0edb | ||
|   | 5359936d07 | ||
|   | ea4f98dca6 | ||
|   | f9b50910e0 | ||
|   | 84143dc57d | ||
|   | 747bad7c09 | ||
|   | 3a805c5cc1 | ||
|   | 7241527956 | ||
|   | 825b0c7968 | ||
|   | 2948954535 | ||
|   | efb64fdf80 | ||
|   | 6416dc998b | ||
|   | 0f26148423 | ||
|   | f460f12c9d | ||
|   | 23bb054129 | ||
|   | d4b540f85a | ||
|   | 4967109ffc | ||
|   | a68aa81320 | ||
|   | 0ea9381b7d | ||
|   | 1cb17b2a5d | ||
|   | 1dd57bd783 | ||
|   | 34f0bd110f | ||
|   | a75ede4b9b | ||
|   | a3daf542ad | ||
|   | 4bb5a351b2 | ||
|   | 43792592ca | ||
|   | 5fbcb9a1fa | ||
|   | 6e3af5424b | ||
|   | 7635577ad7 | ||
|   | 0df2ed85fd | ||
|   | 5eae12fc80 | ||
|   | b40e37f93d | ||
|   | ee0941a0b7 | ||
|   | e86a6151f4 | ||
|   | f4413ca65a | ||
|   | 7873f9bdbd | ||
|   | 920e684d40 | ||
|   | 81951d9874 | ||
|   | 4c8a053855 | ||
|   | 8a3c0fbed1 | ||
|   | e9d0c7a6f3 | ||
|   | 56603e2770 | ||
|   | 89cce1e458 | ||
|   | b4433a8ba6 | ||
|   | 1933f9d33c | ||
|   | cfa0ac7aff | ||
|   | cfc863869f | ||
|   | 4088721726 | ||
|   | d8273e198c | ||
|   | 8f40145384 | ||
|   | 6e7904f9aa | ||
|   | 037cd0d991 | ||
|   | 6d79722d78 | ||
|   | 0d037cfdce | ||
|   | 9459ee99ae | ||
|   | 29726951b0 | ||
|   | 097fc121e6 | ||
|   | 325a64d8a2 | ||
|   | e9e48a6ff2 | ||
|   | 2728caa613 | ||
|   | 0943045108 | ||
|   | b235c29366 | ||
|   | f0a9221897 | ||
|   | fd281e9c4b | ||
|   | e0d265d3eb | ||
|   | 98d37c5a0c | ||
|   | e5a8a26bcb | ||
|   | a9eadc9f91 | ||
|   | 193ba7b46e | ||
|   | 151ae59436 | ||
|   | bde08d216c | ||
|   | 1abe65d928 | ||
|   | b7f740f2fc | ||
|   | cdc1cc22e7 | ||
|   | fe43a662a2 | ||
|   | 1ac4db23f7 | ||
|   | 7f99e12e98 | ||
|   | 62a018762e | ||
|   | 6dd9c3909c | ||
|   | 6cb7b0c0ac | ||
|   | 38aaf6c380 | ||
|   | ed4c0b53cc | ||
|   | 95f78b2b56 | ||
|   | 4ff5d32a6b | ||
|   | ed16a1695f | ||
|   | 7c66ab5029 | ||
|   | 8830df8b66 | ||
|   | a89ec793d0 | ||
|   | ce2a80b482 | ||
|   | 93e6273b68 | ||
|   | 68cc1e0c77 | ||
|   | 2568928070 | ||
|   | 383a4d0990 | ||
|   | 0beccdf580 | ||
|   | a4d9158509 | ||
|   | 8627618540 | ||
|   | d9166028e5 | ||
|   | 6dae798824 | ||
|   | 577286e0e2 | ||
|   | 003dd2e7de | ||
|   | 03e206d18a | ||
|   | 2c5f346d3a | ||
|   | f9cf3de70b | ||
|   | 6f1f5a7506 | ||
|   | ed68159d19 | ||
|   | 0114889456 | ||
|   | 2c7f099253 | ||
|   | ee9de01665 | ||
|   | f2a5283cbc | ||
|   | 3e1625c787 | ||
|   | e96d7f1df4 | ||
|   | 6a76d3eb53 | ||
|   | 3b7bf29385 | ||
|   | a390329f60 | ||
|   | 14c3601583 | ||
|   | 9081014c2c | ||
|   | 759d049ae8 | ||
|   | 1befebc950 | ||
|   | ae56df82c1 | ||
|   | 088b9b2a97 | ||
|   | b0670ff12b | ||
|   | 9b61060ffc | ||
|   | 5590a3f179 | ||
|   | 7b3afc952f | ||
|   | 93227ddca5 | ||
|   | cedf996073 | ||
|   | dc19789444 | ||
|   | 64854c0364 | ||
|   | d8efde07e5 | ||
|   | 2ffbd7afac | ||
|   | 8676ce68e3 | ||
|   | 91669584cf | ||
|   | 7fc1cbb640 | ||
|   | b9950e3b33 | ||
|   | b13923f0f7 | ||
|   | 212e3e26bc | ||
|   | 125f655131 | ||
|   | c98b50753f | ||
|   | 96d3c9363f | ||
|   | 4d2c539b6c | ||
|   | 35fae251dd | ||
|   | 52a4d6b8ae | ||
|   | 18f58c437f | ||
|   | 2924dd6703 | ||
|   | c0fc9066a9 | ||
|   | bd7d7f4523 | ||
|   | 172963005a | ||
|   | 834608c39d | ||
|   | 157c9752d5 | ||
|   | e98b7b1cb3 | ||
|   | 5f5814ca5e | ||
|   | 2ecce667a6 | ||
|   | 783b5c3b11 | ||
|   | 7dfbbae3d4 | ||
|   | 6291a16b20 | ||
|   | 24b30d259c | ||
|   | 82fdb87b27 | ||
|   | 97e90d7b89 | ||
|   | 10be4ec2c3 | ||
|   | bd2231104b | ||
|   | 8a4ce7d0f5 | ||
|   | f0ecdd04d3 | ||
|   | 2f5c70b2b0 | ||
|   | f4b5f8cdf0 | ||
|   | 8ff3bb5000 | ||
|   | 1cc5194337 | ||
|   | 0da4524a22 | ||
|   | 664b9baf67 | ||
|   | cd6c13c2b3 | ||
|   | 086ad79970 | ||
|   | 0e8158eabc | ||
|   | f768be0a25 | ||
|   | 41f1f6e830 | ||
|   | c3b85c12a9 | ||
|   | fc32b81382 | ||
|   | 6ea4ee94f9 | ||
|   | e63d18fbd1 | ||
|   | 145c263a4b | ||
|   | 680d5fd041 | ||
|   | 65d141e6da | ||
|   | 0d99cdbeed | ||
|   | dca257f27e | ||
|   | dcd484a238 | ||
|   | 090232ea19 | ||
|   | 526603ff05 | ||
|   | eb88d778e7 | ||
|   | 2adf294602 | ||
|   | e05de4f46d | ||
|   | f5e9c636e8 | ||
|   | ef91f04927 | ||
|   | befe9a10b9 | ||
|   | 36d45eabc0 | ||
|   | 864f17d894 | ||
|   | 58b317c9da | ||
|   | 4bdb1ca8d6 | ||
|   | d89285e8d6 | ||
|   | e17220ffcb | ||
|   | 9b0b9f209e | ||
|   | adbee7ecf5 | ||
|   | ccfa139c71 | ||
|   | aa0e2ac451 | ||
|   | f4ca16058e | ||
|   | af937c441b | ||
|   | 45229fae8e | ||
|   | ef5b98742f | ||
|   | 697592b3dd | ||
|   | ee1d729ce0 | ||
|   | 7b29c2803f | ||
|   | 576ac00eb3 | ||
|   | 87c4abb611 | ||
|   | 5dc68dd609 | ||
|   | 557ca620e4 | ||
|   | 0b311834eb | ||
|   | 7b5ca30917 | ||
|   | d3cca934ee | ||
|   | 750203bde4 | ||
|   | 0fcd74b836 | ||
|   | 1b3a398ec1 | ||
|   | 2e557de094 | ||
|   | 4fd0add1cd | ||
|   | 4ce87e33ee | ||
|   | 86fe7e502b | ||
|   | b216427e73 | ||
|   | 9730c9fb70 | ||
|   | 7853c1cfe6 | ||
|   | c8644d1f63 | ||
|   | 970c22f970 | ||
|   | 479abdd32e | ||
|   | f1cc2a2c0c | ||
|   | 99fb36797a | ||
|   | e9c7a86220 | ||
|   | fb7d7e0022 | ||
|   | 8ef77547d0 | ||
|   | fa437e14a4 | ||
|   | 61e71a8bc8 | ||
|   | 71dd581127 | ||
|   | 26b57832fe | ||
|   | 884df3a51f | ||
|   | 86b889485d | ||
|   | d784000a14 | ||
|   | 2b604eada5 | ||
|   | 018b9d421a | ||
|   | f9b7132175 | ||
|   | bbccbfe9d1 | ||
|   | 2ad1df7327 | ||
|   | 228f1ee9f2 | ||
|   | cf6c5c222d | ||
|   | aba5888f6b | ||
|   | 397a634ebd | ||
|   | b14ebbcb17 | ||
|   | 96c3b1a1bb | ||
|   | c8996bab1c | ||
|   | b359badd49 | ||
|   | 6b8e5c0e8a | ||
|   | ce2d84b3bb | ||
|   | 6f2419342f | ||
|   | d95cb3edc8 | ||
|   | 99c2bad222 | ||
|   | 069f63c893 | ||
|   | 676f79f8d2 | ||
|   | cef28131f7 | ||
|   | 02d2c0a08d | ||
|   | aec2e865f0 | ||
|   | 56120ca04b | ||
|   | 785d76d681 | ||
|   | 9afd97022e | ||
|   | 5409f32984 | ||
|   | 733686e430 | ||
|   | 557658776f | ||
|   | 0627c48dde | ||
|   | 7c00ba10da | ||
|   | e80d9d5902 | ||
|   | 3529903afb | ||
|   | 86981ac9f5 | ||
|   | bb6047cd64 | ||
|   | 93e080cbaa | ||
|   | 72703aa9f3 | ||
|   | c5399c827d | ||
|   | 982a649aa5 | ||
|   | 854049f962 | ||
|   | 4bd860a001 | ||
|   | aa3e8dd3da | ||
|   | 0beda1a388 | ||
|   | 7eb7f7c32d | ||
|   | b486d1ce05 | ||
|   | 29aa9a37cc | ||
|   | bc860548c2 | ||
|   | 9cfa822fea | ||
|   | c1e8744177 | ||
|   | 700843d69f | ||
|   | be1a505189 | ||
|   | 2008c92513 | ||
|   | 53e2e4c721 | ||
|   | dcc01123f2 | ||
|   | 1450712e76 | ||
|   | bfdef6301c | ||
|   | 33be9e29be | ||
|   | 8ed2420dbb | ||
|   | 409265a571 | ||
|   | 885119bf50 | ||
|   | 85070e46cc | ||
|   | 9ce5e89fcc | ||
|   | 2e2f981bcc | ||
|   | 8cc7e74a8f | ||
|   | 5b437c7637 | ||
|   | 84d752d1ad | ||
|   | 10cbc33a4c | ||
|   | d62706ec6d | ||
|   | 4c3cfc7558 | ||
|   | ac5eb7fdfb | ||
|   | 52655b4c90 | ||
|   | 07e0957e1f | ||
|   | 7d1f2ac769 | ||
|   | 416cd9ac11 | ||
|   | 804e462305 | ||
|   | 34cb17b930 | ||
|   | 64291e989e | ||
|   | c5b225c8ca | ||
|   | 831312febe | ||
|   | cb13fad733 | ||
|   | 9406ab91a2 | ||
|   | 2933698677 | ||
|   | cf510ad781 | ||
|   | 140ca2dcc2 | ||
|   | a08decdfed | ||
|   | fba9f41b84 | ||
|   | 54fc885efd | ||
|   | 013d5c18c3 | ||
|   | b77ff4d589 | ||
|   | 36f7b399de | ||
|   | c068284882 | ||
|   | e05f801271 | ||
|   | e04ccbd506 | ||
|   | 1342a96ecf | ||
|   | 4bc47bec57 | ||
|   | e126ec4fc4 | ||
|   | 46ae340f24 | ||
|   | 6cc79dc79d | ||
|   | 62a6230e1c | ||
|   | 43da5b2066 | ||
|   | 591d5ca41b | ||
|   | 4be80d5109 | ||
|   | 23e70e1cc6 | ||
|   | 800094802e | ||
|   | 9669794e7a | ||
|   | 30892709d7 | ||
|   | a3fead9706 | ||
|   | 201d0df50b | ||
|   | 9f10e45e42 | ||
|   | a607f8a20c | ||
|   | ed77fdf389 | ||
|   | 08f9c90981 | ||
|   | 532efa9ce9 | ||
|   | a4b7f716d3 | ||
|   | 2e16100609 | ||
|   | d54b551f6c | ||
|   | 2e05db347e | ||
|   | cca12abf6e | ||
|   | 18e53fa91a | ||
|   | 8c58dea899 | ||
|   | 9dfbcef272 | ||
|   | 7faaca7118 | ||
|   | 5f3824a5aa | ||
|   | 1ae06e002d | ||
|   | 8bdecd3617 | ||
|   | c4a7eedc16 | ||
|   | 2ee3c63b13 | ||
|   | 7b7f0da4a7 | ||
|   | 676d62fa0e | ||
|   | f64dbb08c2 | ||
|   | dd469eec40 | ||
|   | 17d27805f9 | ||
|   | 767aaf587c | ||
|   | 10286f45e7 | ||
|   | 7bdfdd09e4 | ||
|   | a5ad43afe8 | ||
|   | fe0f8967bf | ||
|   | bfc63bfb19 | ||
|   | 95c7cfb025 | ||
|   | 2fbf23875f | ||
|   | 48d19acb7c | ||
|   | 9dbbba9976 | ||
|   | 18e1a3022d | ||
|   | 5d427004c6 | ||
|   | 0106575728 | ||
|   | f0d860d35f | ||
|   | 520dc64369 | ||
|   | 8145f92dcc | ||
|   | 40ee1ba0dc | ||
|   | 474442dd56 | ||
|   | 79931c5aeb | ||
|   | dc867bbf3a | ||
|   | 71d66f3678 | ||
|   | ba82e1ef54 | ||
|   | 612ecf934f | ||
|   | 66e60c6553 | ||
|   | e7bcfb368c | ||
|   | eda919f4dc | ||
|   | 7599143dcc | ||
|   | f28c856e33 | ||
|   | b7daa665ba | ||
|   | dcad09e125 | ||
|   | 338b641370 | ||
|   | 0a925d7834 | ||
|   | 70100d5509 | ||
|   | e2828af607 | ||
|   | b5c496f109 | ||
|   | 9f59fb6d33 | ||
|   | cfe4252744 | ||
|   | 500d2db302 | ||
|   | 6d45f952e6 | ||
|   | 3aa0e57ce6 | ||
|   | a10976b961 | ||
|   | 93859e2c9a | ||
|   | 2d2a62e3d9 | ||
|   | f0d3be29f2 | ||
|   | 21fa0d86b1 | ||
|   | 3d6b865654 | ||
|   | 1033acd92d | ||
|   | 36bf141333 | ||
|   | 49559c04f6 | ||
|   | 68542e72a9 | ||
|   | 3aa51450c4 | ||
|   | 8a2dda312c | ||
|   | e5a4d1d9e5 | ||
|   | 14de67fc77 | ||
|   | 783c7f97ba | ||
|   | f4af38120a | ||
|   | 259f4f3d01 | ||
|   | f697d7fdd5 | ||
|   | 6f8d8131b1 | ||
|   | 7e6d51a73c | ||
|   | 25264131e2 | ||
|   | d7bfce3951 | ||
|   | 3cfe3bc001 | ||
|   | 92e7e346f3 | ||
|   | e8cea8d70f | ||
|   | efe4bab29b | ||
|   | 54c8728cd7 | ||
|   | 08f10fcd02 | ||
|   | 5babaf7491 | ||
|   | d62cb0f5d0 | ||
|   | 1c05b9359d | ||
|   | ad63f8a53c | ||
|   | f4781fc3cb | ||
|   | f222778489 | 
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -45,5 +45,4 @@ CHANGES.dist | |||||||
| .project | .project | ||||||
| .cproject | .cproject | ||||||
| .settings | .settings | ||||||
| /[0-9]*.patch |  | ||||||
| .dirstamp | .dirstamp | ||||||
|   | |||||||
							
								
								
									
										62
									
								
								CHANGES.0
									
									
									
									
									
								
							
							
						
						
									
										62
									
								
								CHANGES.0
									
									
									
									
									
								
							| @@ -267,7 +267,7 @@ Daniel Stenberg (16 Apr 2010) | |||||||
| Daniel Stenberg (15 Apr 2010) | Daniel Stenberg (15 Apr 2010) | ||||||
| - Rainer Canavan filed bug report #2987196 that identified libcurl doing | - Rainer Canavan filed bug report #2987196 that identified libcurl doing | ||||||
|   unnecesary reverse name lookups in many cases when built to use IPv4 and |   unnecesary reverse name lookups in many cases when built to use IPv4 and | ||||||
|   getaddrinfo(). The logic for ipv6 is now used for ipv4 too. |   getaddrinfo(). The logic for IPv6 is now used for IPv4 too. | ||||||
|  |  | ||||||
|   (http://curl.haxx.se/bug/view.cgi?id=2963679) |   (http://curl.haxx.se/bug/view.cgi?id=2963679) | ||||||
|  |  | ||||||
| @@ -4271,7 +4271,7 @@ Daniel S (15 Nov 2007) | |||||||
|   list. |   list. | ||||||
|  |  | ||||||
| - Michal Marek fixed the test suite to better deal with the case when the HTTP | - Michal Marek fixed the test suite to better deal with the case when the HTTP | ||||||
|   ipv6 server can't run. |   IPv6 server can't run. | ||||||
|  |  | ||||||
| Yang Tse (14 Nov 2007) | Yang Tse (14 Nov 2007) | ||||||
| - Fix a variable potential wrapping in add_buffer() when using absolutely | - Fix a variable potential wrapping in add_buffer() when using absolutely | ||||||
| @@ -6109,7 +6109,7 @@ Daniel (22 August 2006) | |||||||
| - David McCreedy fixed a remaining mistake from the August 19 TYPE change. | - David McCreedy fixed a remaining mistake from the August 19 TYPE change. | ||||||
|  |  | ||||||
| - Peter Sylvester pointed out a flaw in the AllowServerConnect() in the FTP | - Peter Sylvester pointed out a flaw in the AllowServerConnect() in the FTP | ||||||
|   code when doing pure ipv6 EPRT connections. |   code when doing pure IPv6 EPRT connections. | ||||||
|  |  | ||||||
| Daniel (19 August 2006) | Daniel (19 August 2006) | ||||||
| - Based on a patch by Armel Asselin, the FTP code no longer re-issues the TYPE | - Based on a patch by Armel Asselin, the FTP code no longer re-issues the TYPE | ||||||
| @@ -6666,8 +6666,8 @@ Daniel (24 January 2006) | |||||||
|  |  | ||||||
| Daniel (20 January 2006) | Daniel (20 January 2006) | ||||||
| - Duane Cathey was one of our friends who reported that curl -P [IP] | - Duane Cathey was one of our friends who reported that curl -P [IP] | ||||||
|   (CURLOPT_FTPPORT) didn't work for ipv6-enabed curls if the IP wasn't a |   (CURLOPT_FTPPORT) didn't work for IPv6-enabed curls if the IP wasn't a | ||||||
|   "native" IP while it works fine for ipv6-disabled builds! |   "native" IP while it works fine for IPv6-disabled builds! | ||||||
|  |  | ||||||
|   In the process of fixing this, I removed the support for LPRT since I can't |   In the process of fixing this, I removed the support for LPRT since I can't | ||||||
|   think of many reasons to keep doing it and asking on the mailing list didn't |   think of many reasons to keep doing it and asking on the mailing list didn't | ||||||
| @@ -6676,7 +6676,7 @@ Daniel (20 January 2006) | |||||||
|  |  | ||||||
| Daniel (19 January 2006) | Daniel (19 January 2006) | ||||||
| - Jon Turner pointed out that doing -P [hostname] (CURLOPT_FTPPORT) with curl | - Jon Turner pointed out that doing -P [hostname] (CURLOPT_FTPPORT) with curl | ||||||
|   (built ipv4-only) didn't work. |   (built IPv4-only) didn't work. | ||||||
|  |  | ||||||
| Daniel (18 January 2006) | Daniel (18 January 2006) | ||||||
| - As reported in bug #1408742 (http://curl.haxx.se/bug/view.cgi?id=1408742), | - As reported in bug #1408742 (http://curl.haxx.se/bug/view.cgi?id=1408742), | ||||||
| @@ -7557,7 +7557,7 @@ Daniel (29 March 2005) | |||||||
| Daniel (16 March 2005) | Daniel (16 March 2005) | ||||||
| - Tru64 and some IRIX boxes seem to not like test 237 as it is. Their | - Tru64 and some IRIX boxes seem to not like test 237 as it is. Their | ||||||
|   inet_addr() functions seems to use &255 on all numericals in a ipv4 dotted |   inet_addr() functions seems to use &255 on all numericals in a ipv4 dotted | ||||||
|   address which makes a different failure... Now I've modified the ipv4 |   address which makes a different failure... Now I've modified the IPv4 | ||||||
|   resolve code to use inet_pton() instead in an attempt to make these systems |   resolve code to use inet_pton() instead in an attempt to make these systems | ||||||
|   better detect this as a bad IP address rather than creating a toally bogus |   better detect this as a bad IP address rather than creating a toally bogus | ||||||
|   address that is then passed on and used. |   address that is then passed on and used. | ||||||
| @@ -7750,7 +7750,7 @@ Daniel (7 February 2005) | |||||||
|  |  | ||||||
| Daniel (5 February 2005) | Daniel (5 February 2005) | ||||||
| - Eric Vergnaud found a use of an uninitialised variable in the ftp when doing | - Eric Vergnaud found a use of an uninitialised variable in the ftp when doing | ||||||
|   PORT on ipv6-enabled hosts. |   PORT on IPv6-enabled hosts. | ||||||
|  |  | ||||||
| - David Byron pointed out we could use BUFSIZE to read data (in | - David Byron pointed out we could use BUFSIZE to read data (in | ||||||
|   lib/transfer.c) instead of using BUFSIZE -1. |   lib/transfer.c) instead of using BUFSIZE -1. | ||||||
| @@ -7822,7 +7822,7 @@ Daniel (28 January 2005) | |||||||
|   8. fetch a URL from the same server as before (re-using the connection) |   8. fetch a URL from the same server as before (re-using the connection) | ||||||
|  |  | ||||||
| - Stephen More pointed out that CURLOPT_FTPPORT and the -P option didn't work | - Stephen More pointed out that CURLOPT_FTPPORT and the -P option didn't work | ||||||
|   when built ipv6-enabled. I've now made a fix for it. Writing test cases for |   when built IPv6-enabled. I've now made a fix for it. Writing test cases for | ||||||
|   custom port hosts turned too tricky so unfortunately there's none. |   custom port hosts turned too tricky so unfortunately there's none. | ||||||
|  |  | ||||||
| Daniel (25 January 2005) | Daniel (25 January 2005) | ||||||
| @@ -8560,9 +8560,9 @@ Daniel (20 August 2004) | |||||||
|   byte file is downloaded. |   byte file is downloaded. | ||||||
|  |  | ||||||
| Daniel (18 August 2004) | Daniel (18 August 2004) | ||||||
| - Ling Thio pointed out that when libcurl is built ipv6-enabled, it still did | - Ling Thio pointed out that when libcurl is built IPv6-enabled, it still did | ||||||
|   reverse DNS lookups when fed with a numerical IP-address (like |   reverse DNS lookups when fed with a numerical IP-address (like | ||||||
|   http://127.0.0.1/), although it doesn't when built ipv6-disabled. libcurl |   http://127.0.0.1/), although it doesn't when built IPv6-disabled. libcurl | ||||||
|   should never do reverse lookups. |   should never do reverse lookups. | ||||||
|  |  | ||||||
| Daniel (17 August 2004) | Daniel (17 August 2004) | ||||||
| @@ -8714,7 +8714,7 @@ Daniel (27 June 2004) | |||||||
| Daniel (24 June 2004) | Daniel (24 June 2004) | ||||||
| - The standard curl_version() string now only includes version info about | - The standard curl_version() string now only includes version info about | ||||||
|   involved libraries and not about particular features. Thus it will no longer |   involved libraries and not about particular features. Thus it will no longer | ||||||
|   include info about ipv6 nor GSS. That info is of course still available in |   include info about IPv6 nor GSS. That info is of course still available in | ||||||
|   the feature bitmask curl_version_info() offers. |   the feature bitmask curl_version_info() offers. | ||||||
|  |  | ||||||
| - Replaced all occurances of sprintf() with snprintf(). This is mostly because | - Replaced all occurances of sprintf() with snprintf(). This is mostly because | ||||||
| @@ -8729,8 +8729,8 @@ Daniel (24 June 2004) | |||||||
|  |  | ||||||
|   Internally, this means amongst other things that we can stop doing the weird |   Internally, this means amongst other things that we can stop doing the weird | ||||||
|   "increase buffer size until it works" trick when resolving hosts on |   "increase buffer size until it works" trick when resolving hosts on | ||||||
|   ipv4-only with gethostbyname_r(), we support socks even on libcurls built |   IPv4-only with gethostbyname_r(), we support socks even on libcurls built | ||||||
|   with ipv6 enabled (but only to socks servers that resolve to an ipv4 |   with IPv6 enabled (but only to socks servers that resolve to an IPv4 | ||||||
|   address) and we no longer deep-copy or relocate hostent structs (we create |   address) and we no longer deep-copy or relocate hostent structs (we create | ||||||
|   Curl_addrinfo chains instead). |   Curl_addrinfo chains instead). | ||||||
|  |  | ||||||
| @@ -9074,7 +9074,7 @@ Daniel (27 April 2004) | |||||||
|   and proxy name to the ACE encoded version to use internally for resolves and |   and proxy name to the ACE encoded version to use internally for resolves and | ||||||
|   cookies etc. They are now using one 'struct hostname' each that keep both |   cookies etc. They are now using one 'struct hostname' each that keep both | ||||||
|   the original name and the possibly encoded name. IDN resolves work for me |   the original name and the possibly encoded name. IDN resolves work for me | ||||||
|   now using ipv6, ipv4 and ares resolving. Even cookies on IDN sites seem to |   now using IPv6, IPv4 and ares resolving. Even cookies on IDN sites seem to | ||||||
|   do right. I got some failures at first when CHARSET wasn't set at all which |   do right. I got some failures at first when CHARSET wasn't set at all which | ||||||
|   confused libidn completely and it decided by encoding of choice was |   confused libidn completely and it decided by encoding of choice was | ||||||
|   'ANSI_X3.4-1968'... |   'ANSI_X3.4-1968'... | ||||||
| @@ -9115,7 +9115,7 @@ Daniel (25 April 2004) | |||||||
|  |  | ||||||
|   CURLRES_ARES - is defined if libcurl is built to use c-ares for asynchronous |   CURLRES_ARES - is defined if libcurl is built to use c-ares for asynchronous | ||||||
|   name resolves. It cannot have ENABLE_IPV6 defined at the same time, as |   name resolves. It cannot have ENABLE_IPV6 defined at the same time, as | ||||||
|   c-ares has no ipv6 support. This can be Windows or *nix. |   c-ares has no IPv6 support. This can be Windows or *nix. | ||||||
|  |  | ||||||
|   CURLRES_THREADED - is defined if libcurl is built to run under (native) |   CURLRES_THREADED - is defined if libcurl is built to run under (native) | ||||||
|   Windows, and then the name resolve will be done in a new thread, and the |   Windows, and then the name resolve will be done in a new thread, and the | ||||||
| @@ -9132,8 +9132,8 @@ Daniel (25 April 2004) | |||||||
|   hostsyn.c  - functions for synchronous name resolves |   hostsyn.c  - functions for synchronous name resolves | ||||||
|   hostares.c - functions for ares-using name resolves |   hostares.c - functions for ares-using name resolves | ||||||
|   hostthre.c - functions for threaded name resolves |   hostthre.c - functions for threaded name resolves | ||||||
|   hostip4.c  - ipv4-specific functions |   hostip4.c  - IPv4 specific functions | ||||||
|   hostip6.c  - ipv6-specific functions |   hostip6.c  - IPv6 specific functions | ||||||
|  |  | ||||||
|   The hostip.h is the single united header file for all this. It defines the |   The hostip.h is the single united header file for all this. It defines the | ||||||
|   CURLRES_* defines based on the config*.h and setup.h defines. |   CURLRES_* defines based on the config*.h and setup.h defines. | ||||||
| @@ -9225,7 +9225,7 @@ Daniel (15 April 2004) | |||||||
|   for the typical (not very deep) case. |   for the typical (not very deep) case. | ||||||
|  |  | ||||||
| Daniel (14 April 2004) | Daniel (14 April 2004) | ||||||
| - Asking for CURL_IPRESOLVE_V6 when ipv6 addresses can't be resolved will | - Asking for CURL_IPRESOLVE_V6 when IPv6 addresses can't be resolved will | ||||||
|   now cause the resolve function to return NULL immediately. This flaw was |   now cause the resolve function to return NULL immediately. This flaw was | ||||||
|   pointed out by Gisle Vanem. |   pointed out by Gisle Vanem. | ||||||
|  |  | ||||||
| @@ -9380,7 +9380,7 @@ Daniel (29 March 2004) | |||||||
| - The postit2.c source example used the wrong struct name for the post data. | - The postit2.c source example used the wrong struct name for the post data. | ||||||
|  |  | ||||||
| Daniel (26 March 2004) | Daniel (26 March 2004) | ||||||
| - Gisle Vanem improved ipv6 support on windows by making the curl build to use | - Gisle Vanem improved IPv6 support on Windows by making the curl build use | ||||||
|   the correct getaddrinfo() function. |   the correct getaddrinfo() function. | ||||||
|  |  | ||||||
| Daniel (25 March 2004) | Daniel (25 March 2004) | ||||||
| @@ -9673,7 +9673,7 @@ Daniel (16 February 2004) | |||||||
|   and re-use that same handle during the entire curl handle's life-time. It |   and re-use that same handle during the entire curl handle's life-time. It | ||||||
|   improves performance. |   improves performance. | ||||||
|  |  | ||||||
| - Fixed a problem when displaying verbose for ipv6-enabled libcurls and | - Fixed a problem when displaying verbose for IPv6-enabled libcurls and | ||||||
|   re-used connections. Problem reported and fix verified by Grigory Entin. |   re-used connections. Problem reported and fix verified by Grigory Entin. | ||||||
|  |  | ||||||
| - Jeff Lawson fixed the version-check in the SOCKS5 code. | - Jeff Lawson fixed the version-check in the SOCKS5 code. | ||||||
| @@ -9725,7 +9725,7 @@ Daniel (9 February 2004) | |||||||
|  |  | ||||||
| - Tor Arntsen provided a patch that makes libcurl work-around a bug in the | - Tor Arntsen provided a patch that makes libcurl work-around a bug in the | ||||||
|   AIX5 implementation of getaddrinfo(). This makes the FTP PORT stuff work on |   AIX5 implementation of getaddrinfo(). This makes the FTP PORT stuff work on | ||||||
|   ipv6-enabled AIX builds. |   IPv6-enabled AIX builds. | ||||||
|  |  | ||||||
| - Ken Rastatter provided portability fixes for the curlgtk.c example, and now | - Ken Rastatter provided portability fixes for the curlgtk.c example, and now | ||||||
|   it runs on windows with GTK as well! |   it runs on windows with GTK as well! | ||||||
| @@ -9754,7 +9754,7 @@ Daniel (5 February 2004) | |||||||
|   verifies this functionality. |   verifies this functionality. | ||||||
|  |  | ||||||
| - Tor Arntsen fixed a weird getaddrinfo() usage in the FTP code, preventing | - Tor Arntsen fixed a weird getaddrinfo() usage in the FTP code, preventing | ||||||
|   the ipv6-code for PORT work on AIX 5.2. We now also provide (better) error |   the IPv6-code for PORT work on AIX 5.2. We now also provide (better) error | ||||||
|   messages when bailing out in the that function. |   messages when bailing out in the that function. | ||||||
|  |  | ||||||
| - Tor Arntsen now provides AIX and IRIX (using gcc, xlc and the MIPSPro | - Tor Arntsen now provides AIX and IRIX (using gcc, xlc and the MIPSPro | ||||||
| @@ -10133,10 +10133,10 @@ Daniel (13 November) | |||||||
|   possibly other platforms too. |   possibly other platforms too. | ||||||
|  |  | ||||||
| - Peter Sylvester identified a problem in the connect code, which made the | - Peter Sylvester identified a problem in the connect code, which made the | ||||||
|   multi interface on a ipv6-enabled solaris box do bad. Test case 504 to be |   multi interface on a IPv6-enabled Solaris box do bad. Test case 504 to be | ||||||
|   specific. I've spent some time to clean-up the Curl_connecthost() function |   specific. I've spent some time to clean-up the Curl_connecthost() function | ||||||
|   now to use less duplicated code for the two different sections: ipv6 and |   now to use less duplicated code for the two different sections: IPv6 and | ||||||
|   ipv4. |   IPv4. | ||||||
|  |  | ||||||
| Daniel (11 November) | Daniel (11 November) | ||||||
| - Added CURLOPT_NETRC_FILE. Use this to tell libcurl which file to use instead | - Added CURLOPT_NETRC_FILE. Use this to tell libcurl which file to use instead | ||||||
| @@ -10234,7 +10234,7 @@ Daniel (29 October) | |||||||
| Daniel (28 October) | Daniel (28 October) | ||||||
| - Dan C tracked down yet another weird behavior in the glibc gethostbyname_r() | - Dan C tracked down yet another weird behavior in the glibc gethostbyname_r() | ||||||
|   function for some specific versions (reported on 2.2.5 and 2.1.1), and |   function for some specific versions (reported on 2.2.5 and 2.1.1), and | ||||||
|   provided a fix. On Linux machines with these glibc versions, non-ipv6 |   provided a fix. On Linux machines with these glibc versions, non-IPv6 | ||||||
|   builds of libcurl would often fail to resolve perfectly resolvable host |   builds of libcurl would often fail to resolve perfectly resolvable host | ||||||
|   names. |   names. | ||||||
|  |  | ||||||
| @@ -10353,7 +10353,7 @@ Version 7.10.8-pre3 (8 October 2003) | |||||||
|  |  | ||||||
| Daniel (8 October) | Daniel (8 October) | ||||||
| - Frank Ticheler provided a patch that fixes how libcurl connects to multiple | - Frank Ticheler provided a patch that fixes how libcurl connects to multiple | ||||||
|   addresses, if one of them fails (ipv4-code). |   addresses, if one of them fails (IPv4 code). | ||||||
|  |  | ||||||
| Daniel (7 October) | Daniel (7 October) | ||||||
| - Neil Dunbar provided a patch that now makes libcurl check SSL | - Neil Dunbar provided a patch that now makes libcurl check SSL | ||||||
| @@ -11865,7 +11865,7 @@ Daniel (30 Sep 2002) | |||||||
|   updated the man page accordingly. |   updated the man page accordingly. | ||||||
|  |  | ||||||
| - Cris Bailiff found out that the pre-releases crashed on name lookups on | - Cris Bailiff found out that the pre-releases crashed on name lookups on | ||||||
|   names such as "a:" or "baz:" (on Linux versions not being ipv6-enabled) due |   names such as "a:" or "baz:" (on Linux versions not being IPv6-enabled) due | ||||||
|   to some weird return codes from gethostbyname_r(). I'll blame the complete |   to some weird return codes from gethostbyname_r(). I'll blame the complete | ||||||
|   lack of docs in that department. Cris provided a fix, which I modified only |   lack of docs in that department. Cris provided a fix, which I modified only | ||||||
|   slightly. |   slightly. | ||||||
| @@ -17598,7 +17598,7 @@ Version 4.8.4 | |||||||
|  - As Julian Romero Nieto reported, curl reported wrong version number. |  - As Julian Romero Nieto reported, curl reported wrong version number. | ||||||
|  - As Teemu Yli-Elsila pointed out, the win32 version of 4.8 (and probably all |  - As Teemu Yli-Elsila pointed out, the win32 version of 4.8 (and probably all | ||||||
|    other versions for win32) didn't work with binary files since I'm too used |    other versions for win32) didn't work with binary files since I'm too used | ||||||
|    to the UNIX style fopen() where binary and text don't differ... |    to the Unix style fopen() where binary and text don't differ... | ||||||
|  - Ralph Beckmann brought me some changes that lets curl compile error and |  - Ralph Beckmann brought me some changes that lets curl compile error and | ||||||
|    warning free with -Wall -pedantic with g++. I also took the opportunity to |    warning free with -Wall -pedantic with g++. I also took the opportunity to | ||||||
|    clean off some unused variables and similar. |    clean off some unused variables and similar. | ||||||
| @@ -17851,7 +17851,7 @@ Version 2.7 | |||||||
|    rewrite the former -l kludge in an external script that'll use urlget to |    rewrite the former -l kludge in an external script that'll use urlget to | ||||||
|    fetch multipart files like that. |    fetch multipart files like that. | ||||||
|  - '-f' is introduced, it means Fail without output in case of HTTP server |  - '-f' is introduced, it means Fail without output in case of HTTP server | ||||||
|    errors (return code >=300). |    errors (return code >=400). | ||||||
|  - Added support for -r, ranges. Specify which part of a document you |  - Added support for -r, ranges. Specify which part of a document you | ||||||
|    want, and only that part is returned. Only with HTTP/1.1-servers. |    want, and only that part is returned. Only with HTTP/1.1-servers. | ||||||
|  - Split up the source in 3 parts. Now all pure URL functions are in |  - Split up the source in 3 parts. Now all pure URL functions are in | ||||||
|   | |||||||
| @@ -155,7 +155,7 @@ message(STATUS "LDFLAGS: ${_GSS_LIB_FLAGS}") | |||||||
|                 set(GSS_FLAVOUR "MIT") |                 set(GSS_FLAVOUR "MIT") | ||||||
|             else() |             else() | ||||||
|                 # prevent compiling the header - just check if we can include it |                 # prevent compiling the header - just check if we can include it | ||||||
|                 set(CMAKE_REQUIRED_DEFINITIONS "-D__ROKEN_H__") |                 set(CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS} -D__ROKEN_H__") | ||||||
|                 check_include_file( "roken.h" _GSS_HAVE_ROKEN_H) |                 check_include_file( "roken.h" _GSS_HAVE_ROKEN_H) | ||||||
|  |  | ||||||
|                 check_include_file( "heimdal/roken.h" _GSS_HAVE_HEIMDAL_ROKEN_H) |                 check_include_file( "heimdal/roken.h" _GSS_HAVE_HEIMDAL_ROKEN_H) | ||||||
|   | |||||||
| @@ -1,18 +1,24 @@ | |||||||
| #File defines convenience macros for available feature testing | #File defines convenience macros for available feature testing | ||||||
|  |  | ||||||
| # This macro checks if the symbol exists in the library and if it | # This macro checks if the symbol exists in the library and if it | ||||||
| # does, it appends library to the list. | # does, it prepends library to the list.  It is intended to be called | ||||||
|  | # multiple times with a sequence of possibly dependent libraries in | ||||||
|  | # order of least-to-most-dependent.  Some libraries depend on others | ||||||
|  | # to link correctly. | ||||||
| macro(CHECK_LIBRARY_EXISTS_CONCAT LIBRARY SYMBOL VARIABLE) | macro(CHECK_LIBRARY_EXISTS_CONCAT LIBRARY SYMBOL VARIABLE) | ||||||
|   check_library_exists("${CURL_LIBS};${LIBRARY}" ${SYMBOL} "${CMAKE_LIBRARY_PATH}" |   check_library_exists("${LIBRARY};${CURL_LIBS}" ${SYMBOL} "${CMAKE_LIBRARY_PATH}" | ||||||
|     ${VARIABLE}) |     ${VARIABLE}) | ||||||
|   if(${VARIABLE}) |   if(${VARIABLE}) | ||||||
|     list(APPEND CURL_LIBS ${LIBRARY}) |     set(CURL_LIBS ${LIBRARY} ${CURL_LIBS}) | ||||||
|   endif(${VARIABLE}) |   endif(${VARIABLE}) | ||||||
| endmacro(CHECK_LIBRARY_EXISTS_CONCAT) | endmacro(CHECK_LIBRARY_EXISTS_CONCAT) | ||||||
|  |  | ||||||
| # Check if header file exists and add it to the list. | # Check if header file exists and add it to the list. | ||||||
|  | # This macro is intended to be called multiple times with a sequence of | ||||||
|  | # possibly dependent header files.  Some headers depend on others to be | ||||||
|  | # compiled correctly. | ||||||
| macro(CHECK_INCLUDE_FILE_CONCAT FILE VARIABLE) | macro(CHECK_INCLUDE_FILE_CONCAT FILE VARIABLE) | ||||||
|   check_include_file("${FILE}" ${VARIABLE}) |   check_include_files("${CURL_INCLUDES};${FILE}" ${VARIABLE}) | ||||||
|   if(${VARIABLE}) |   if(${VARIABLE}) | ||||||
|     set(CURL_INCLUDES ${CURL_INCLUDES} ${FILE}) |     set(CURL_INCLUDES ${CURL_INCLUDES} ${FILE}) | ||||||
|     set(CURL_TEST_DEFINES "${CURL_TEST_DEFINES} -D${VARIABLE}") |     set(CURL_TEST_DEFINES "${CURL_TEST_DEFINES} -D${VARIABLE}") | ||||||
| @@ -21,7 +27,7 @@ endmacro(CHECK_INCLUDE_FILE_CONCAT) | |||||||
|  |  | ||||||
| # For other curl specific tests, use this macro. | # For other curl specific tests, use this macro. | ||||||
| macro(CURL_INTERNAL_TEST CURL_TEST) | macro(CURL_INTERNAL_TEST CURL_TEST) | ||||||
|   if("${CURL_TEST}" MATCHES "^${CURL_TEST}$") |   if(NOT DEFINED "${CURL_TEST}") | ||||||
|     set(MACRO_CHECK_FUNCTION_DEFINITIONS |     set(MACRO_CHECK_FUNCTION_DEFINITIONS | ||||||
|       "-D${CURL_TEST} ${CURL_TEST_DEFINES} ${CMAKE_REQUIRED_FLAGS}") |       "-D${CURL_TEST} ${CURL_TEST_DEFINES} ${CMAKE_REQUIRED_FLAGS}") | ||||||
|     if(CMAKE_REQUIRED_LIBRARIES) |     if(CMAKE_REQUIRED_LIBRARIES) | ||||||
| @@ -49,11 +55,11 @@ macro(CURL_INTERNAL_TEST CURL_TEST) | |||||||
|         "Performing Curl Test ${CURL_TEST} failed with the following output:\n" |         "Performing Curl Test ${CURL_TEST} failed with the following output:\n" | ||||||
|         "${OUTPUT}\n") |         "${OUTPUT}\n") | ||||||
|     endif(${CURL_TEST}) |     endif(${CURL_TEST}) | ||||||
|   endif("${CURL_TEST}" MATCHES "^${CURL_TEST}$") |   endif() | ||||||
| endmacro(CURL_INTERNAL_TEST) | endmacro(CURL_INTERNAL_TEST) | ||||||
|  |  | ||||||
| macro(CURL_INTERNAL_TEST_RUN CURL_TEST) | macro(CURL_INTERNAL_TEST_RUN CURL_TEST) | ||||||
|   if("${CURL_TEST}_COMPILE" MATCHES "^${CURL_TEST}_COMPILE$") |   if(NOT DEFINED "${CURL_TEST}_COMPILE") | ||||||
|     set(MACRO_CHECK_FUNCTION_DEFINITIONS |     set(MACRO_CHECK_FUNCTION_DEFINITIONS | ||||||
|       "-D${CURL_TEST} ${CMAKE_REQUIRED_FLAGS}") |       "-D${CURL_TEST} ${CMAKE_REQUIRED_FLAGS}") | ||||||
|     if(CMAKE_REQUIRED_LIBRARIES) |     if(CMAKE_REQUIRED_LIBRARIES) | ||||||
| @@ -85,5 +91,5 @@ macro(CURL_INTERNAL_TEST_RUN CURL_TEST) | |||||||
|       file(APPEND "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log" |       file(APPEND "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log" | ||||||
|         "\n\n") |         "\n\n") | ||||||
|     endif(${CURL_TEST}_COMPILE AND NOT ${CURL_TEST}) |     endif(${CURL_TEST}_COMPILE AND NOT ${CURL_TEST}) | ||||||
|   endif("${CURL_TEST}_COMPILE" MATCHES "^${CURL_TEST}_COMPILE$") |   endif() | ||||||
| endmacro(CURL_INTERNAL_TEST_RUN) | endmacro(CURL_INTERNAL_TEST_RUN) | ||||||
|   | |||||||
| @@ -5,6 +5,7 @@ if(NOT UNIX) | |||||||
|     set(HAVE_LIBSOCKET 0) |     set(HAVE_LIBSOCKET 0) | ||||||
|     set(NOT_NEED_LIBNSL 0) |     set(NOT_NEED_LIBNSL 0) | ||||||
|     set(HAVE_LIBNSL 0) |     set(HAVE_LIBNSL 0) | ||||||
|  |     set(HAVE_GETHOSTNAME 1) | ||||||
|     set(HAVE_LIBZ 0) |     set(HAVE_LIBZ 0) | ||||||
|     set(HAVE_LIBCRYPTO 0) |     set(HAVE_LIBCRYPTO 0) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ | |||||||
| #                            | (__| |_| |  _ <| |___ | #                            | (__| |_| |  _ <| |___ | ||||||
| #                             \___|\___/|_| \_\_____| | #                             \___|\___/|_| \_\_____| | ||||||
| # | # | ||||||
| # Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al. | # Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||||
| # | # | ||||||
| # This software is licensed as described in the file COPYING, which | # This software is licensed as described in the file COPYING, which | ||||||
| # you should have received as part of this distribution. The terms | # you should have received as part of this distribution. The terms | ||||||
| @@ -74,12 +74,17 @@ include_directories( ${CURL_SOURCE_DIR}/include ) | |||||||
| option(BUILD_CURL_EXE "Set to ON to build cURL executable." ON) | option(BUILD_CURL_EXE "Set to ON to build cURL executable." ON) | ||||||
| option(BUILD_CURL_TESTS "Set to ON to build cURL tests." ON) | option(BUILD_CURL_TESTS "Set to ON to build cURL tests." ON) | ||||||
| option(CURL_STATICLIB "Set to ON to build libcurl with static linking." OFF) | option(CURL_STATICLIB "Set to ON to build libcurl with static linking." OFF) | ||||||
| option(CURL_USE_ARES "Set to ON to enable c-ares support" OFF) | option(ENABLE_ARES "Set to ON to enable c-ares support" OFF) | ||||||
|  | option(ENABLE_THREADED_RESOLVER "Set to ON to enable POSIX threaded DNS lookup" OFF) | ||||||
| # initialize CURL_LIBS | # initialize CURL_LIBS | ||||||
| set(CURL_LIBS "") | set(CURL_LIBS "") | ||||||
|  |  | ||||||
| if(CURL_USE_ARES) | if(ENABLE_THREADED_RESOLVER AND ENABLE_ARES) | ||||||
|   set(USE_ARES ${CURL_USE_ARES}) |   message(FATAL_ERROR "Options ENABLE_THREADED_RESOLVER and ENABLE_ARES are mutually exclusive") | ||||||
|  | endif() | ||||||
|  |  | ||||||
|  | if(ENABLE_ARES) | ||||||
|  |   set(USE_ARES 1) | ||||||
|   find_package(CARES REQUIRED) |   find_package(CARES REQUIRED) | ||||||
|   list(APPEND CURL_LIBS ${CARES_LIBRARY} ) |   list(APPEND CURL_LIBS ${CARES_LIBRARY} ) | ||||||
|   set(CURL_LIBS ${CURL_LIBS} ${CARES_LIBRARY}) |   set(CURL_LIBS ${CURL_LIBS} ${CARES_LIBRARY}) | ||||||
| @@ -233,9 +238,22 @@ include (CheckCSourceCompiles) | |||||||
|  |  | ||||||
| # On windows preload settings | # On windows preload settings | ||||||
| if(WIN32) | if(WIN32) | ||||||
|  |   set(CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS} -D_WINSOCKAPI_") | ||||||
|   include(${CMAKE_CURRENT_SOURCE_DIR}/CMake/Platforms/WindowsCache.cmake) |   include(${CMAKE_CURRENT_SOURCE_DIR}/CMake/Platforms/WindowsCache.cmake) | ||||||
| endif(WIN32) | endif(WIN32) | ||||||
|  |  | ||||||
|  | if(ENABLE_THREADED_RESOLVER) | ||||||
|  |   check_include_file_concat("pthread.h" HAVE_PTHREAD_H) | ||||||
|  |   if(HAVE_PTHREAD_H) | ||||||
|  |     set(CMAKE_THREAD_PREFER_PTHREAD 1) | ||||||
|  |     find_package(Threads) | ||||||
|  |     if(CMAKE_USE_PTHREADS_INIT) | ||||||
|  |       set(CURL_LIBS ${CURL_LIBS} ${CMAKE_THREAD_LIBS_INIT}) | ||||||
|  |       set(USE_THREADS_POSIX 1) | ||||||
|  |     endif() | ||||||
|  |   endif() | ||||||
|  | endif() | ||||||
|  |  | ||||||
| # Check for all needed libraries | # Check for all needed libraries | ||||||
| check_library_exists_concat("dl"     dlopen       HAVE_LIBDL) | check_library_exists_concat("dl"     dlopen       HAVE_LIBDL) | ||||||
| check_library_exists_concat("socket" connect      HAVE_LIBSOCKET) | check_library_exists_concat("socket" connect      HAVE_LIBSOCKET) | ||||||
| @@ -252,6 +270,8 @@ if(NOT NOT_NEED_LIBNSL) | |||||||
|   check_library_exists_concat("nsl"    gethostbyname  HAVE_LIBNSL) |   check_library_exists_concat("nsl"    gethostbyname  HAVE_LIBNSL) | ||||||
| endif(NOT NOT_NEED_LIBNSL) | endif(NOT NOT_NEED_LIBNSL) | ||||||
|  |  | ||||||
|  | check_function_exists(gethostname HAVE_GETHOSTNAME) | ||||||
|  |  | ||||||
| if(WIN32) | if(WIN32) | ||||||
|   check_library_exists_concat("ws2_32" getch        HAVE_LIBWS2_32) |   check_library_exists_concat("ws2_32" getch        HAVE_LIBWS2_32) | ||||||
|   check_library_exists_concat("winmm"  getch        HAVE_LIBWINMM) |   check_library_exists_concat("winmm"  getch        HAVE_LIBWINMM) | ||||||
| @@ -275,26 +295,26 @@ if(CMAKE_USE_OPENSSL) | |||||||
|     set(HAVE_LIBSSL ON) |     set(HAVE_LIBSSL ON) | ||||||
|     include_directories(${OPENSSL_INCLUDE_DIR}) |     include_directories(${OPENSSL_INCLUDE_DIR}) | ||||||
|     set(CMAKE_REQUIRED_INCLUDES ${OPENSSL_INCLUDE_DIR}) |     set(CMAKE_REQUIRED_INCLUDES ${OPENSSL_INCLUDE_DIR}) | ||||||
|     check_include_file_concat("openssl/crypto.h" HAVE_OPENSSL_CRYPTO_H) |     check_include_file("openssl/crypto.h" HAVE_OPENSSL_CRYPTO_H) | ||||||
|     check_include_file_concat("openssl/engine.h" HAVE_OPENSSL_ENGINE_H) |     check_include_file("openssl/engine.h" HAVE_OPENSSL_ENGINE_H) | ||||||
|     check_include_file_concat("openssl/err.h"    HAVE_OPENSSL_ERR_H) |     check_include_file("openssl/err.h"    HAVE_OPENSSL_ERR_H) | ||||||
|     check_include_file_concat("openssl/pem.h"    HAVE_OPENSSL_PEM_H) |     check_include_file("openssl/pem.h"    HAVE_OPENSSL_PEM_H) | ||||||
|     check_include_file_concat("openssl/pkcs12.h" HAVE_OPENSSL_PKCS12_H) |     check_include_file("openssl/pkcs12.h" HAVE_OPENSSL_PKCS12_H) | ||||||
|     check_include_file_concat("openssl/rsa.h"    HAVE_OPENSSL_RSA_H) |     check_include_file("openssl/rsa.h"    HAVE_OPENSSL_RSA_H) | ||||||
|     check_include_file_concat("openssl/ssl.h"    HAVE_OPENSSL_SSL_H) |     check_include_file("openssl/ssl.h"    HAVE_OPENSSL_SSL_H) | ||||||
|     check_include_file_concat("openssl/x509.h"   HAVE_OPENSSL_X509_H) |     check_include_file("openssl/x509.h"   HAVE_OPENSSL_X509_H) | ||||||
|     check_include_file_concat("openssl/rand.h"   HAVE_OPENSSL_RAND_H) |     check_include_file("openssl/rand.h"   HAVE_OPENSSL_RAND_H) | ||||||
|   endif() |   endif() | ||||||
| endif() | endif() | ||||||
|  |  | ||||||
| if(NOT CURL_DISABLE_LDAP) | if(NOT CURL_DISABLE_LDAP) | ||||||
|  |  | ||||||
|   if(WIN32) |   if(WIN32) | ||||||
|     option(CURL_LDAP_WIN "Use Windows LDAP implementation" ON) |     option(USE_WIN32_LDAP "Use Windows LDAP implementation" ON) | ||||||
|     if(CURL_LDAP_WIN) |     if(USE_WIN32_LDAP) | ||||||
|       check_library_exists("wldap32" cldap_open "" HAVE_WLDAP32) |       check_library_exists("wldap32" cldap_open "" HAVE_WLDAP32) | ||||||
|       if(NOT HAVE_WLDAP32) |       if(NOT HAVE_WLDAP32) | ||||||
|         set(CURL_LDAP_WIN OFF) |         set(USE_WIN32_LDAP OFF) | ||||||
|       endif() |       endif() | ||||||
|     endif() |     endif() | ||||||
|   endif() |   endif() | ||||||
| @@ -304,12 +324,12 @@ if(NOT CURL_DISABLE_LDAP) | |||||||
|   set(CMAKE_LDAP_LIB "ldap" CACHE STRING "Name or full path to ldap library") |   set(CMAKE_LDAP_LIB "ldap" CACHE STRING "Name or full path to ldap library") | ||||||
|   set(CMAKE_LBER_LIB "lber" CACHE STRING "Name or full path to lber library") |   set(CMAKE_LBER_LIB "lber" CACHE STRING "Name or full path to lber library") | ||||||
|  |  | ||||||
|   if(CMAKE_USE_OPENLDAP AND CURL_LDAP_WIN) |   if(CMAKE_USE_OPENLDAP AND USE_WIN32_LDAP) | ||||||
|     message(FATAL_ERROR "Cannot use CURL_LDAP_WIN and CMAKE_USE_OPENLDAP at the same time") |     message(FATAL_ERROR "Cannot use USE_WIN32_LDAP and CMAKE_USE_OPENLDAP at the same time") | ||||||
|   endif() |   endif() | ||||||
|    |    | ||||||
|   # Now that we know, we're not using windows LDAP... |   # Now that we know, we're not using windows LDAP... | ||||||
|   if(NOT CURL_LDAP_WIN) |   if(NOT USE_WIN32_LDAP) | ||||||
|     # Check for LDAP |     # Check for LDAP | ||||||
|     set(CMAKE_REQUIRED_LIBRARIES ${OPENSSL_LIBRARIES}) |     set(CMAKE_REQUIRED_LIBRARIES ${OPENSSL_LIBRARIES}) | ||||||
|     check_library_exists_concat(${CMAKE_LDAP_LIB} ldap_init HAVE_LIBLDAP) |     check_library_exists_concat(${CMAKE_LDAP_LIB} ldap_init HAVE_LIBLDAP) | ||||||
| @@ -365,7 +385,7 @@ if(NOT CURL_DISABLE_LDAP) | |||||||
|         return 0; |         return 0; | ||||||
|       }" |       }" | ||||||
|     ) |     ) | ||||||
|     set(CMAKE_REQUIRED_DEFINITIONS "-DLDAP_DEPRECATED=1" "-DWIN32_LEAN_AND_MEAN") |     set(CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS} -DLDAP_DEPRECATED=1") | ||||||
|     list(APPEND CMAKE_REQUIRED_LIBRARIES ${CMAKE_LDAP_LIB}) |     list(APPEND CMAKE_REQUIRED_LIBRARIES ${CMAKE_LDAP_LIB}) | ||||||
|     if(HAVE_LIBLBER) |     if(HAVE_LIBLBER) | ||||||
|       list(APPEND CMAKE_REQUIRED_LIBRARIES ${CMAKE_LBER_LIB}) |       list(APPEND CMAKE_REQUIRED_LIBRARIES ${CMAKE_LBER_LIB}) | ||||||
| @@ -508,17 +528,23 @@ if(CMAKE_USE_GSSAPI) | |||||||
|   endif() |   endif() | ||||||
| endif() | endif() | ||||||
|  |  | ||||||
|  | option(ENABLE_UNIX_SOCKETS "Define if you want Unix domain sockets support" ON) | ||||||
|  | if(ENABLE_UNIX_SOCKETS) | ||||||
|  |   include(CheckStructHasMember) | ||||||
|  |   check_struct_has_member("struct sockaddr_un" sun_path "sys/un.h" USE_UNIX_SOCKETS) | ||||||
|  | else() | ||||||
|  |   unset(USE_UNIX_SOCKETS CACHE) | ||||||
|  | endif() | ||||||
|  |  | ||||||
| # Check for header files | # Check for header files | ||||||
| if(NOT UNIX) |  | ||||||
|   check_include_file_concat("ws2tcpip.h"     HAVE_WS2TCPIP_H) |  | ||||||
|   check_include_file_concat("winsock2.h"     HAVE_WINSOCK2_H) |  | ||||||
| endif(NOT UNIX) |  | ||||||
| check_include_file_concat("stdio.h"          HAVE_STDIO_H) |  | ||||||
| if(NOT UNIX) | if(NOT UNIX) | ||||||
|   check_include_file_concat("windows.h"      HAVE_WINDOWS_H) |   check_include_file_concat("windows.h"      HAVE_WINDOWS_H) | ||||||
|   check_include_file_concat("winsock.h"      HAVE_WINSOCK_H) |   check_include_file_concat("winsock.h"      HAVE_WINSOCK_H) | ||||||
|  |   check_include_file_concat("ws2tcpip.h"     HAVE_WS2TCPIP_H) | ||||||
|  |   check_include_file_concat("winsock2.h"     HAVE_WINSOCK2_H) | ||||||
| endif(NOT UNIX) | endif(NOT UNIX) | ||||||
|  |  | ||||||
|  | check_include_file_concat("stdio.h"          HAVE_STDIO_H) | ||||||
| check_include_file_concat("inttypes.h"       HAVE_INTTYPES_H) | check_include_file_concat("inttypes.h"       HAVE_INTTYPES_H) | ||||||
| check_include_file_concat("sys/filio.h"      HAVE_SYS_FILIO_H) | check_include_file_concat("sys/filio.h"      HAVE_SYS_FILIO_H) | ||||||
| check_include_file_concat("sys/ioctl.h"      HAVE_SYS_IOCTL_H) | check_include_file_concat("sys/ioctl.h"      HAVE_SYS_IOCTL_H) | ||||||
| @@ -1001,9 +1027,7 @@ _add_if("SSL"           SSL_ENABLED) | |||||||
| _add_if("IPv6"          ENABLE_IPV6) | _add_if("IPv6"          ENABLE_IPV6) | ||||||
| _add_if("unix-sockets"  USE_UNIX_SOCKETS) | _add_if("unix-sockets"  USE_UNIX_SOCKETS) | ||||||
| _add_if("libz"          HAVE_LIBZ) | _add_if("libz"          HAVE_LIBZ) | ||||||
| find_package(Threads) | _add_if("AsynchDNS"     USE_ARES OR USE_THREADS_POSIX) | ||||||
| # AsynchDNS depends or USE_ARES or pthreads (mutually exclusive) |  | ||||||
| _add_if("AsynchDNS"     USE_ARES OR CMAKE_USE_PTHREADS_INIT) |  | ||||||
| _add_if("IDN"           HAVE_LIBIDN) | _add_if("IDN"           HAVE_LIBIDN) | ||||||
| # TODO SSP1 (WinSSL) check is missing | # TODO SSP1 (WinSSL) check is missing | ||||||
| _add_if("SSPI"          USE_WINDOWS_SSPI) | _add_if("SSPI"          USE_WINDOWS_SSPI) | ||||||
| @@ -1011,13 +1035,15 @@ _add_if("GSS-API"       HAVE_GSS_API) | |||||||
| # TODO SSP1 missing for SPNEGO | # TODO SSP1 missing for SPNEGO | ||||||
| _add_if("SPNEGO"        NOT CURL_DISABLE_CRYPTO_AUTH AND | _add_if("SPNEGO"        NOT CURL_DISABLE_CRYPTO_AUTH AND | ||||||
|                         (HAVE_GSS_API OR USE_WINDOWS_SSPI)) |                         (HAVE_GSS_API OR USE_WINDOWS_SSPI)) | ||||||
|  | _add_if("Kerberos"      NOT CURL_DISABLE_CRYPTO_AUTH AND | ||||||
|  |                         (HAVE_GSS_API OR USE_WINDOWS_SSPI)) | ||||||
| # NTLM support requires crypto function adaptions from various SSL libs | # NTLM support requires crypto function adaptions from various SSL libs | ||||||
| # TODO alternative SSL libs tests for SSP1, GNUTLS, NSS, DARWINSSL | # TODO alternative SSL libs tests for SSP1, GNUTLS, NSS, DARWINSSL | ||||||
| if(NOT CURL_DISABLE_HTTP AND NOT CURL_DISABLE_CRYPTO_AUTH AND (USE_OPENSSL OR | if(NOT CURL_DISABLE_CRYPTO_AUTH AND (USE_OPENSSL OR | ||||||
|    USE_WINDOWS_SSPI OR GNUTLS_ENABLED OR NSS_ENABLED OR DARWINSSL_ENABLED)) |    USE_WINDOWS_SSPI OR GNUTLS_ENABLED OR NSS_ENABLED OR DARWINSSL_ENABLED)) | ||||||
|   _add_if("NTLM"        1) |   _add_if("NTLM"        1) | ||||||
|   # TODO missing option (autoconf: --enable-ntlm-wb) |   # TODO missing option (autoconf: --enable-ntlm-wb) | ||||||
|   _add_if("NTLM_WB"     NTLM_WB_ENABLED) |   _add_if("NTLM_WB"     NOT CURL_DISABLE_HTTP AND NTLM_WB_ENABLED) | ||||||
| endif() | endif() | ||||||
| # TODO missing option (--enable-tls-srp), depends on GNUTLS_SRP/OPENSSL_SRP | # TODO missing option (--enable-tls-srp), depends on GNUTLS_SRP/OPENSSL_SRP | ||||||
| _add_if("TLS-SRP"       USE_TLS_SRP) | _add_if("TLS-SRP"       USE_TLS_SRP) | ||||||
|   | |||||||
							
								
								
									
										2
									
								
								COPYING
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								COPYING
									
									
									
									
									
								
							| @@ -1,6 +1,6 @@ | |||||||
| COPYRIGHT AND PERMISSION NOTICE | COPYRIGHT AND PERMISSION NOTICE | ||||||
|  |  | ||||||
| Copyright (c) 1996 - 2014, Daniel Stenberg, <daniel@haxx.se>. | Copyright (c) 1996 - 2015, Daniel Stenberg, <daniel@haxx.se>. | ||||||
|  |  | ||||||
| All rights reserved. | All rights reserved. | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										82
									
								
								Makefile.am
									
									
									
									
									
								
							
							
						
						
									
										82
									
								
								Makefile.am
									
									
									
									
									
								
							| @@ -5,7 +5,7 @@ | |||||||
| #                            | (__| |_| |  _ <| |___ | #                            | (__| |_| |  _ <| |___ | ||||||
| #                             \___|\___/|_| \_\_____| | #                             \___|\___/|_| \_\_____| | ||||||
| # | # | ||||||
| # Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al. | # Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||||
| # | # | ||||||
| # This software is licensed as described in the file COPYING, which | # This software is licensed as described in the file COPYING, which | ||||||
| # you should have received as part of this distribution. The terms | # you should have received as part of this distribution. The terms | ||||||
| @@ -30,88 +30,88 @@ CMAKE_DIST = CMakeLists.txt CMake/CMakeConfigurableFile.in	\ | |||||||
|  include/curl/curlbuild.h.cmake CMake/Macros.cmake |  include/curl/curlbuild.h.cmake CMake/Macros.cmake | ||||||
|  |  | ||||||
| VC6_LIBTMPL = projects/Windows/VC6/lib/libcurl.tmpl | VC6_LIBTMPL = projects/Windows/VC6/lib/libcurl.tmpl | ||||||
| VC6_LIBDSP = projects/Windows/VC6/lib/libcurl.dsp | VC6_LIBDSP = projects/Windows/VC6/lib/libcurl.dsp.dist | ||||||
| VC6_LIBDSP_DEPS = $(VC6_LIBTMPL) Makefile.am lib/Makefile.inc | VC6_LIBDSP_DEPS = $(VC6_LIBTMPL) Makefile.am lib/Makefile.inc | ||||||
| VC6_SRCTMPL = projects/Windows/VC6/src/curlsrc.tmpl | VC6_SRCTMPL = projects/Windows/VC6/src/curlsrc.tmpl | ||||||
| VC6_SRCDSP = projects/Windows/VC6/src/curlsrc.dsp | VC6_SRCDSP = projects/Windows/VC6/src/curlsrc.dsp.dist | ||||||
| VC6_SRCDSP_DEPS = $(VC6_SRCTMPL) Makefile.am src/Makefile.inc | VC6_SRCDSP_DEPS = $(VC6_SRCTMPL) Makefile.am src/Makefile.inc | ||||||
|  |  | ||||||
| VC7_LIBTMPL = projects/Windows/VC7/lib/libcurl.tmpl | VC7_LIBTMPL = projects/Windows/VC7/lib/libcurl.tmpl | ||||||
| VC7_LIBVCPROJ = projects/Windows/VC7/lib/libcurl.vcproj | VC7_LIBVCPROJ = projects/Windows/VC7/lib/libcurl.vcproj.dist | ||||||
| VC7_LIBVCPROJ_DEPS = $(VC7_LIBTMPL) Makefile.am lib/Makefile.inc | VC7_LIBVCPROJ_DEPS = $(VC7_LIBTMPL) Makefile.am lib/Makefile.inc | ||||||
| VC7_SRCTMPL = projects/Windows/VC7/src/curlsrc.tmpl | VC7_SRCTMPL = projects/Windows/VC7/src/curlsrc.tmpl | ||||||
| VC7_SRCVCPROJ = projects/Windows/VC7/src/curlsrc.vcproj | VC7_SRCVCPROJ = projects/Windows/VC7/src/curlsrc.vcproj.dist | ||||||
| VC7_SRCVCPROJ_DEPS = $(VC7_SRCTMPL) Makefile.am src/Makefile.inc | VC7_SRCVCPROJ_DEPS = $(VC7_SRCTMPL) Makefile.am src/Makefile.inc | ||||||
|  |  | ||||||
| VC71_LIBTMPL = projects/Windows/VC7.1/lib/libcurl.tmpl | VC71_LIBTMPL = projects/Windows/VC7.1/lib/libcurl.tmpl | ||||||
| VC71_LIBVCPROJ = projects/Windows/VC7.1/lib/libcurl.vcproj | VC71_LIBVCPROJ = projects/Windows/VC7.1/lib/libcurl.vcproj.dist | ||||||
| VC71_LIBVCPROJ_DEPS = $(VC71_LIBTMPL) Makefile.am lib/Makefile.inc | VC71_LIBVCPROJ_DEPS = $(VC71_LIBTMPL) Makefile.am lib/Makefile.inc | ||||||
| VC71_SRCTMPL = projects/Windows/VC7.1/src/curlsrc.tmpl | VC71_SRCTMPL = projects/Windows/VC7.1/src/curlsrc.tmpl | ||||||
| VC71_SRCVCPROJ = projects/Windows/VC7.1/src/curlsrc.vcproj | VC71_SRCVCPROJ = projects/Windows/VC7.1/src/curlsrc.vcproj.dist | ||||||
| VC71_SRCVCPROJ_DEPS = $(VC71_SRCTMPL) Makefile.am src/Makefile.inc | VC71_SRCVCPROJ_DEPS = $(VC71_SRCTMPL) Makefile.am src/Makefile.inc | ||||||
|  |  | ||||||
| VC8_LIBTMPL = projects/Windows/VC8/lib/libcurl.tmpl | VC8_LIBTMPL = projects/Windows/VC8/lib/libcurl.tmpl | ||||||
| VC8_LIBVCPROJ = projects/Windows/VC8/lib/libcurl.vcproj | VC8_LIBVCPROJ = projects/Windows/VC8/lib/libcurl.vcproj.dist | ||||||
| VC8_LIBVCPROJ_DEPS = $(VC8_LIBTMPL) Makefile.am lib/Makefile.inc | VC8_LIBVCPROJ_DEPS = $(VC8_LIBTMPL) Makefile.am lib/Makefile.inc | ||||||
| VC8_SRCTMPL = projects/Windows/VC8/src/curlsrc.tmpl | VC8_SRCTMPL = projects/Windows/VC8/src/curlsrc.tmpl | ||||||
| VC8_SRCVCPROJ = projects/Windows/VC8/src/curlsrc.vcproj | VC8_SRCVCPROJ = projects/Windows/VC8/src/curlsrc.vcproj.dist | ||||||
| VC8_SRCVCPROJ_DEPS = $(VC8_SRCTMPL) Makefile.am src/Makefile.inc | VC8_SRCVCPROJ_DEPS = $(VC8_SRCTMPL) Makefile.am src/Makefile.inc | ||||||
|  |  | ||||||
| VC9_LIBTMPL = projects/Windows/VC9/lib/libcurl.tmpl | VC9_LIBTMPL = projects/Windows/VC9/lib/libcurl.tmpl | ||||||
| VC9_LIBVCPROJ = projects/Windows/VC9/lib/libcurl.vcproj | VC9_LIBVCPROJ = projects/Windows/VC9/lib/libcurl.vcproj.dist | ||||||
| VC9_LIBVCPROJ_DEPS = $(VC9_LIBTMPL) Makefile.am lib/Makefile.inc | VC9_LIBVCPROJ_DEPS = $(VC9_LIBTMPL) Makefile.am lib/Makefile.inc | ||||||
| VC9_SRCTMPL = projects/Windows/VC9/src/curlsrc.tmpl | VC9_SRCTMPL = projects/Windows/VC9/src/curlsrc.tmpl | ||||||
| VC9_SRCVCPROJ = projects/Windows/VC9/src/curlsrc.vcproj | VC9_SRCVCPROJ = projects/Windows/VC9/src/curlsrc.vcproj.dist | ||||||
| VC9_SRCVCPROJ_DEPS = $(VC9_SRCTMPL) Makefile.am src/Makefile.inc | VC9_SRCVCPROJ_DEPS = $(VC9_SRCTMPL) Makefile.am src/Makefile.inc | ||||||
|  |  | ||||||
| VC10_LIBTMPL = projects/Windows/VC10/lib/libcurl.tmpl | VC10_LIBTMPL = projects/Windows/VC10/lib/libcurl.tmpl | ||||||
| VC10_LIBVCXPROJ = projects/Windows/VC10/lib/libcurl.vcxproj | VC10_LIBVCXPROJ = projects/Windows/VC10/lib/libcurl.vcxproj.dist | ||||||
| VC10_LIBVCXPROJ_DEPS = $(VC10_LIBTMPL) Makefile.am lib/Makefile.inc | VC10_LIBVCXPROJ_DEPS = $(VC10_LIBTMPL) Makefile.am lib/Makefile.inc | ||||||
| VC10_SRCTMPL = projects/Windows/VC10/src/curlsrc.tmpl | VC10_SRCTMPL = projects/Windows/VC10/src/curlsrc.tmpl | ||||||
| VC10_SRCVCXPROJ = projects/Windows/VC10/src/curlsrc.vcxproj | VC10_SRCVCXPROJ = projects/Windows/VC10/src/curlsrc.vcxproj.dist | ||||||
| VC10_SRCVCXPROJ_DEPS = $(VC10_SRCTMPL) Makefile.am src/Makefile.inc | VC10_SRCVCXPROJ_DEPS = $(VC10_SRCTMPL) Makefile.am src/Makefile.inc | ||||||
|  |  | ||||||
| VC11_LIBTMPL = projects/Windows/VC11/lib/libcurl.tmpl | VC11_LIBTMPL = projects/Windows/VC11/lib/libcurl.tmpl | ||||||
| VC11_LIBVCXPROJ = projects/Windows/VC11/lib/libcurl.vcxproj | VC11_LIBVCXPROJ = projects/Windows/VC11/lib/libcurl.vcxproj.dist | ||||||
| VC11_LIBVCXPROJ_DEPS = $(VC11_LIBTMPL) Makefile.am lib/Makefile.inc | VC11_LIBVCXPROJ_DEPS = $(VC11_LIBTMPL) Makefile.am lib/Makefile.inc | ||||||
| VC11_SRCTMPL = projects/Windows/VC11/src/curlsrc.tmpl | VC11_SRCTMPL = projects/Windows/VC11/src/curlsrc.tmpl | ||||||
| VC11_SRCVCXPROJ = projects/Windows/VC11/src/curlsrc.vcxproj | VC11_SRCVCXPROJ = projects/Windows/VC11/src/curlsrc.vcxproj.dist | ||||||
| VC11_SRCVCXPROJ_DEPS = $(VC11_SRCTMPL) Makefile.am src/Makefile.inc | VC11_SRCVCXPROJ_DEPS = $(VC11_SRCTMPL) Makefile.am src/Makefile.inc | ||||||
|  |  | ||||||
| VC12_LIBTMPL = projects/Windows/VC12/lib/libcurl.tmpl | VC12_LIBTMPL = projects/Windows/VC12/lib/libcurl.tmpl | ||||||
| VC12_LIBVCXPROJ = projects/Windows/VC12/lib/libcurl.vcxproj | VC12_LIBVCXPROJ = projects/Windows/VC12/lib/libcurl.vcxproj.dist | ||||||
| VC12_LIBVCXPROJ_DEPS = $(VC12_LIBTMPL) Makefile.am lib/Makefile.inc | VC12_LIBVCXPROJ_DEPS = $(VC12_LIBTMPL) Makefile.am lib/Makefile.inc | ||||||
| VC12_SRCTMPL = projects/Windows/VC12/src/curlsrc.tmpl | VC12_SRCTMPL = projects/Windows/VC12/src/curlsrc.tmpl | ||||||
| VC12_SRCVCXPROJ = projects/Windows/VC12/src/curlsrc.vcxproj | VC12_SRCVCXPROJ = projects/Windows/VC12/src/curlsrc.vcxproj.dist | ||||||
| VC12_SRCVCXPROJ_DEPS = $(VC12_SRCTMPL) Makefile.am src/Makefile.inc | VC12_SRCVCXPROJ_DEPS = $(VC12_SRCTMPL) Makefile.am src/Makefile.inc | ||||||
|  |  | ||||||
| VC_DIST = projects/README	\ | VC_DIST = projects/README	\ | ||||||
|  projects/build-openssl.bat	\ |  projects/build-openssl.bat	\ | ||||||
|  projects/checksrc.bat	\ |  projects/checksrc.bat	\ | ||||||
|  projects/Windows/VC6/curl.dsw	\ |  projects/Windows/VC6/curl-all.dsw	\ | ||||||
|  projects/Windows/VC6/lib/libcurl.dsw $(VC6_LIBDSP)	\ |  projects/Windows/VC6/lib/libcurl.dsw \ | ||||||
|  projects/Windows/VC6/src/curlsrc.dsw $(VC6_SRCDSP)	\ |  projects/Windows/VC6/src/curlsrc.dsw \ | ||||||
|  projects/Windows/VC7/curl.sln	\ |  projects/Windows/VC7/curl-all.sln	\ | ||||||
|  projects/Windows/VC7/lib/libcurl.sln $(VC7_LIBVCPROJ)	\ |  projects/Windows/VC7/lib/libcurl.sln 	\ | ||||||
|  projects/Windows/VC7/src/curlsrc.sln $(VC7_SRCVCPROJ)	\ |  projects/Windows/VC7/src/curlsrc.sln 	\ | ||||||
|  projects/Windows/VC7.1/curl.sln	\ |  projects/Windows/VC7.1/curl-all.sln	\ | ||||||
|  projects/Windows/VC7.1/lib/libcurl.sln $(VC71_LIBVCPROJ)	\ |  projects/Windows/VC7.1/lib/libcurl.sln \ | ||||||
|  projects/Windows/VC7.1/src/curlsrc.sln $(VC71_SRCVCPROJ)	\ |  projects/Windows/VC7.1/src/curlsrc.sln \ | ||||||
|  projects/Windows/VC8/curl.sln	\ |  projects/Windows/VC8/curl-all.sln	\ | ||||||
|  projects/Windows/VC8/lib/libcurl.sln $(VC8_LIBVCPROJ)	\ |  projects/Windows/VC8/lib/libcurl.sln 	\ | ||||||
|  projects/Windows/VC8/src/curlsrc.sln $(VC8_SRCVCPROJ)	\ |  projects/Windows/VC8/src/curlsrc.sln 	\ | ||||||
|  projects/Windows/VC9/curl.sln	\ |  projects/Windows/VC9/curl-all.sln	\ | ||||||
|  projects/Windows/VC9/lib/libcurl.sln $(VC9_LIBVCPROJ)	\ |  projects/Windows/VC9/lib/libcurl.sln 	\ | ||||||
|  projects/Windows/VC9/src/curlsrc.sln $(VC9_SRCVCPROJ)	\ |  projects/Windows/VC9/src/curlsrc.sln 	\ | ||||||
|  projects/Windows/VC10/curl.sln	\ |  projects/Windows/VC10/curl-all.sln	\ | ||||||
|  projects/Windows/VC10/lib/libcurl.sln $(VC10_LIBVCXPROJ)	\ |  projects/Windows/VC10/lib/libcurl.sln 	\ | ||||||
|  projects/Windows/VC10/src/curlsrc.sln $(VC10_SRCVCXPROJ)	\ |  projects/Windows/VC10/src/curlsrc.sln  \ | ||||||
|  projects/Windows/VC11/curl.sln	\ |  projects/Windows/VC11/curl-all.sln	\ | ||||||
|  projects/Windows/VC11/lib/libcurl.sln $(VC11_LIBVCXPROJ)	\ |  projects/Windows/VC11/lib/libcurl.sln 	\ | ||||||
|  projects/Windows/VC11/src/curlsrc.sln $(VC11_SRCVCXPROJ)	\ |  projects/Windows/VC11/src/curlsrc.sln 	\ | ||||||
|  projects/Windows/VC12/curl.sln	\ |  projects/Windows/VC12/curl-all.sln	\ | ||||||
|  projects/Windows/VC12/lib/libcurl.sln $(VC12_LIBVCXPROJ)	\ |  projects/Windows/VC12/lib/libcurl.sln 	\ | ||||||
|  projects/Windows/VC12/src/curlsrc.sln $(VC12_SRCVCXPROJ) |  projects/Windows/VC12/src/curlsrc.sln | ||||||
|  |  | ||||||
| WINBUILD_DIST = winbuild/BUILD.WINDOWS.txt winbuild/gen_resp_file.bat	\ | WINBUILD_DIST = winbuild/BUILD.WINDOWS.txt winbuild/gen_resp_file.bat	\ | ||||||
|  winbuild/MakefileBuild.vc winbuild/Makefile.vc				\ |  winbuild/MakefileBuild.vc winbuild/Makefile.vc				\ | ||||||
|   | |||||||
							
								
								
									
										256
									
								
								Makefile.dist
									
									
									
									
									
								
							
							
						
						
									
										256
									
								
								Makefile.dist
									
									
									
									
									
								
							| @@ -130,6 +130,42 @@ vc-x64: $(VC) | |||||||
| 	cd ..\src | 	cd ..\src | ||||||
| 	nmake /f Makefile.$(VC) MACHINE=x64 cfg=release | 	nmake /f Makefile.$(VC) MACHINE=x64 cfg=release | ||||||
|  |  | ||||||
|  | vc-sspi: $(VC) | ||||||
|  | 	cd lib | ||||||
|  | 	nmake /f Makefile.$(VC) cfg=release WINDOWS_SSPI=1 | ||||||
|  | 	cd ..\src | ||||||
|  | 	nmake /f Makefile.$(VC) cfg=release WINDOWS_SSPI=1 | ||||||
|  |  | ||||||
|  | vc-x64-sspi: $(VC) | ||||||
|  | 	cd lib | ||||||
|  | 	nmake /f Makefile.$(VC) MACHINE=x64 cfg=release WINDOWS_SSPI=1 | ||||||
|  | 	cd ..\src | ||||||
|  | 	nmake /f Makefile.$(VC) MACHINE=x64 cfg=release WINDOWS_SSPI=1 | ||||||
|  |  | ||||||
|  | vc-idn: $(VC) | ||||||
|  | 	cd lib | ||||||
|  | 	nmake /f Makefile.$(VC) cfg=release USE_IDN=1 | ||||||
|  | 	cd ..\src | ||||||
|  | 	nmake /f Makefile.$(VC) cfg=release USE_IDN=1 | ||||||
|  |  | ||||||
|  | vc-x64-idn: $(VC) | ||||||
|  | 	cd lib | ||||||
|  | 	nmake /f Makefile.$(VC) MACHINE=x64 cfg=release USE_IDN=1 | ||||||
|  | 	cd ..\src | ||||||
|  | 	nmake /f Makefile.$(VC) MACHINE=x64 cfg=release USE_IDN=1 | ||||||
|  |  | ||||||
|  | vc-idn-sspi: $(VC) | ||||||
|  | 	cd lib | ||||||
|  | 	nmake /f Makefile.$(VC) cfg=release USE_IDN=1 WINDOWS_SSPI=1 | ||||||
|  | 	cd ..\src | ||||||
|  | 	nmake /f Makefile.$(VC) cfg=release USE_IDN=1 WINDOWS_SSPI=1 | ||||||
|  |  | ||||||
|  | vc-x64-idn-sspi: $(VC) | ||||||
|  | 	cd lib | ||||||
|  | 	nmake /f Makefile.$(VC) MACHINE=x64 cfg=release USE_IDN=1 WINDOWS_SSPI=1 | ||||||
|  | 	cd ..\src | ||||||
|  | 	nmake /f Makefile.$(VC) MACHINE=x64 cfg=release USE_IDN=1 WINDOWS_SSPI=1 | ||||||
|  |  | ||||||
| vc-zlib: $(VC) | vc-zlib: $(VC) | ||||||
| 	cd lib | 	cd lib | ||||||
| 	nmake /f Makefile.$(VC) cfg=release-zlib | 	nmake /f Makefile.$(VC) cfg=release-zlib | ||||||
| @@ -142,29 +178,89 @@ vc-x64-zlib: $(VC) | |||||||
| 	cd ..\src | 	cd ..\src | ||||||
| 	nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-zlib | 	nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-zlib | ||||||
|  |  | ||||||
|  | vc-zlib-sspi: $(VC) | ||||||
|  | 	cd lib | ||||||
|  | 	nmake /f Makefile.$(VC) cfg=release-zlib WINDOWS_SSPI=1 | ||||||
|  | 	cd ..\src | ||||||
|  | 	nmake /f Makefile.$(VC) cfg=release-zlib WINDOWS_SSPI=1 | ||||||
|  |  | ||||||
|  | vc-x64-zlib-sspi: $(VC) | ||||||
|  | 	cd lib | ||||||
|  | 	nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-zlib WINDOWS_SSPI=1 | ||||||
|  | 	cd ..\src | ||||||
|  | 	nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-zlib WINDOWS_SSPI=1 | ||||||
|  |  | ||||||
|  | vc-zlib-idn: $(VC) | ||||||
|  | 	cd lib | ||||||
|  | 	nmake /f Makefile.$(VC) cfg=release-zlib USE_IDN=1 | ||||||
|  | 	cd ..\src | ||||||
|  | 	nmake /f Makefile.$(VC) cfg=release-zlib USE_IDN=1 | ||||||
|  |  | ||||||
|  | vc-x64-zlib-idn: $(VC) | ||||||
|  | 	cd lib | ||||||
|  | 	nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-zlib USE_IDN=1 | ||||||
|  | 	cd ..\src | ||||||
|  | 	nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-zlib USE_IDN=1 | ||||||
|  |  | ||||||
|  | vc-zlib-idn-sspi: $(VC) | ||||||
|  | 	cd lib | ||||||
|  | 	nmake /f Makefile.$(VC) cfg=release-zlib USE_IDN=1 WINDOWS_SSPI=1 | ||||||
|  | 	cd ..\src | ||||||
|  | 	nmake /f Makefile.$(VC) cfg=release-zlib USE_IDN=1 WINDOWS_SSPI=1 | ||||||
|  |  | ||||||
|  | vc-x64-zlib-idn-sspi: $(VC) | ||||||
|  | 	cd lib | ||||||
|  | 	nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-zlib USE_IDN=1 WINDOWS_SSPI=1 | ||||||
|  | 	cd ..\src | ||||||
|  | 	nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-zlib USE_IDN=1 WINDOWS_SSPI=1 | ||||||
|  |  | ||||||
| vc-ssl: $(VC) | vc-ssl: $(VC) | ||||||
| 	cd lib | 	cd lib | ||||||
| 	nmake /f Makefile.$(VC) cfg=release-ssl | 	nmake /f Makefile.$(VC) cfg=release-ssl | ||||||
| 	cd ..\src | 	cd ..\src | ||||||
| 	nmake /f Makefile.$(VC) cfg=release-ssl | 	nmake /f Makefile.$(VC) cfg=release-ssl | ||||||
|  |  | ||||||
| vc-winssl: $(VC) |  | ||||||
| 	cd lib |  | ||||||
| 	nmake /f Makefile.$(VC) cfg=release-winssl WINDOWS_SSPI=1 |  | ||||||
| 	cd ..\src |  | ||||||
| 	nmake /f Makefile.$(VC) cfg=release-winssl WINDOWS_SSPI=1 |  | ||||||
|  |  | ||||||
| vc-x64-ssl: $(VC) | vc-x64-ssl: $(VC) | ||||||
| 	cd lib | 	cd lib | ||||||
| 	nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl | 	nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl | ||||||
| 	cd ..\src | 	cd ..\src | ||||||
| 	nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl | 	nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl | ||||||
|  |  | ||||||
| vc-x64-winssl: $(VC) | vc-ssl-sspi: $(VC) | ||||||
| 	cd lib | 	cd lib | ||||||
| 	nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-winssl WINDOWS_SSPI=1 | 	nmake /f Makefile.$(VC) cfg=release-ssl WINDOWS_SSPI=1 | ||||||
| 	cd ..\src | 	cd ..\src | ||||||
| 	nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-winssl WINDOWS_SSPI=1 | 	nmake /f Makefile.$(VC) cfg=release-ssl WINDOWS_SSPI=1 | ||||||
|  |  | ||||||
|  | vc-x64-ssl-sspi: $(VC) | ||||||
|  | 	cd lib | ||||||
|  | 	nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl WINDOWS_SSPI=1 | ||||||
|  | 	cd ..\src | ||||||
|  | 	nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl WINDOWS_SSPI=1 | ||||||
|  |  | ||||||
|  | vc-ssl-idn: $(VC) | ||||||
|  | 	cd lib | ||||||
|  | 	nmake /f Makefile.$(VC) cfg=release-ssl USE_IDN=1 | ||||||
|  | 	cd ..\src | ||||||
|  | 	nmake /f Makefile.$(VC) cfg=release-ssl USE_IDN=1 | ||||||
|  |  | ||||||
|  | vc-x64-ssl-idn: $(VC) | ||||||
|  | 	cd lib | ||||||
|  | 	nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl USE_IDN=1 | ||||||
|  | 	cd ..\src | ||||||
|  | 	nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl USE_IDN=1 | ||||||
|  |  | ||||||
|  | vc-ssl-idn-sspi: $(VC) | ||||||
|  | 	cd lib | ||||||
|  | 	nmake /f Makefile.$(VC) cfg=release-ssl USE_IDN=1 WINDOWS_SSPI=1 | ||||||
|  | 	cd ..\src | ||||||
|  | 	nmake /f Makefile.$(VC) cfg=release-ssl USE_IDN=1 WINDOWS_SSPI=1 | ||||||
|  |  | ||||||
|  | vc-x64-ssl-idn-sspi: $(VC) | ||||||
|  | 	cd lib | ||||||
|  | 	nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl USE_IDN=1 WINDOWS_SSPI=1 | ||||||
|  | 	cd ..\src | ||||||
|  | 	nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl USE_IDN=1 WINDOWS_SSPI=1 | ||||||
|  |  | ||||||
| vc-ssl-zlib: $(VC) | vc-ssl-zlib: $(VC) | ||||||
| 	cd lib | 	cd lib | ||||||
| @@ -172,35 +268,143 @@ vc-ssl-zlib: $(VC) | |||||||
| 	cd ..\src | 	cd ..\src | ||||||
| 	nmake /f Makefile.$(VC) cfg=release-ssl-zlib | 	nmake /f Makefile.$(VC) cfg=release-ssl-zlib | ||||||
|  |  | ||||||
| vc-ssl-ssh2-zlib: $(VC) |  | ||||||
| 	cd lib |  | ||||||
| 	nmake /f Makefile.$(VC) cfg=release-ssl-ssh2-zlib |  | ||||||
| 	cd ..\src |  | ||||||
| 	nmake /f Makefile.$(VC) cfg=release-ssl-ssh2-zlib |  | ||||||
|  |  | ||||||
| vc-winssl-zlib: $(VC) |  | ||||||
| 	cd lib |  | ||||||
| 	nmake /f Makefile.$(VC) cfg=release-winssl-zlib |  | ||||||
| 	cd ..\src |  | ||||||
| 	nmake /f Makefile.$(VC) cfg=release-winssl-zlib |  | ||||||
|  |  | ||||||
| vc-x64-ssl-zlib: $(VC) | vc-x64-ssl-zlib: $(VC) | ||||||
| 	cd lib | 	cd lib | ||||||
| 	nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl-zlib | 	nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl-zlib | ||||||
| 	cd ..\src | 	cd ..\src | ||||||
| 	nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl-zlib | 	nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl-zlib | ||||||
|  |  | ||||||
|  | vc-ssl-zlib-sspi: $(VC) | ||||||
|  | 	cd lib | ||||||
|  | 	nmake /f Makefile.$(VC) cfg=release-ssl-zlib WINDOWS_SSPI=1 | ||||||
|  | 	cd ..\src | ||||||
|  | 	nmake /f Makefile.$(VC) cfg=release-ssl-zlib WINDOWS_SSPI=1 | ||||||
|  |  | ||||||
|  | vc-x64-ssl-zlib-sspi: $(VC) | ||||||
|  | 	cd lib | ||||||
|  | 	nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl-zlib WINDOWS_SSPI=1 | ||||||
|  | 	cd ..\src | ||||||
|  | 	nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl-zlib WINDOWS_SSPI=1 | ||||||
|  |  | ||||||
|  | vc-ssl-zlib-idn: $(VC) | ||||||
|  | 	cd lib | ||||||
|  | 	nmake /f Makefile.$(VC) cfg=release-ssl-zlib USE_IDN=1 | ||||||
|  | 	cd ..\src | ||||||
|  | 	nmake /f Makefile.$(VC) cfg=release-ssl-zlib USE_IDN=1 | ||||||
|  |  | ||||||
|  | vc-x64-ssl-zlib-idn: $(VC) | ||||||
|  | 	cd lib | ||||||
|  | 	nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl-zlib USE_IDN=1 | ||||||
|  | 	cd ..\src | ||||||
|  | 	nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl-zlib USE_IDN=1 | ||||||
|  |  | ||||||
|  | vc-ssl-zlib-idn-sspi: $(VC) | ||||||
|  | 	cd lib | ||||||
|  | 	nmake /f Makefile.$(VC) cfg=release-ssl-zlib USE_IDN=1 WINDOWS_SSPI=1 | ||||||
|  | 	cd ..\src | ||||||
|  | 	nmake /f Makefile.$(VC) cfg=release-ssl-zlib USE_IDN=1 WINDOWS_SSPI=1 | ||||||
|  |  | ||||||
|  | vc-x64-ssl-zlib-idn-sspi: $(VC) | ||||||
|  | 	cd lib | ||||||
|  | 	nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl-zlib USE_IDN=1 WINDOWS_SSPI=1 | ||||||
|  | 	cd ..\src | ||||||
|  | 	nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl-zlib USE_IDN=1 WINDOWS_SSPI=1 | ||||||
|  |  | ||||||
|  | vc-ssl-ssh2-zlib: $(VC) | ||||||
|  | 	cd lib | ||||||
|  | 	nmake /f Makefile.$(VC) cfg=release-ssl-ssh2-zlib | ||||||
|  | 	cd ..\src | ||||||
|  | 	nmake /f Makefile.$(VC) cfg=release-ssl-ssh2-zlib | ||||||
|  |  | ||||||
| vc-x64-ssl-ssh2-zlib: $(VC) | vc-x64-ssl-ssh2-zlib: $(VC) | ||||||
| 	cd lib | 	cd lib | ||||||
| 	nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl-ssh2-zlib | 	nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl-ssh2-zlib | ||||||
| 	cd ..\src | 	cd ..\src | ||||||
| 	nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl-ssh2-zlib | 	nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl-ssh2-zlib | ||||||
|  |  | ||||||
|  | vc-ssl-ssh2-zlib-sspi: $(VC) | ||||||
|  | 	cd lib | ||||||
|  | 	nmake /f Makefile.$(VC) cfg=release-ssl-ssh2-zlib WINDOWS_SSPI=1 | ||||||
|  | 	cd ..\src | ||||||
|  | 	nmake /f Makefile.$(VC) cfg=release-ssl-ssh2-zlib WINDOWS_SSPI=1 | ||||||
|  |  | ||||||
|  | vc-x64-ssl-ssh2-zlib-sspi: $(VC) | ||||||
|  | 	cd lib | ||||||
|  | 	nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl-ssh2-zlib WINDOWS_SSPI=1 | ||||||
|  | 	cd ..\src | ||||||
|  | 	nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl-ssh2-zlib WINDOWS_SSPI=1 | ||||||
|  |  | ||||||
|  | vc-ssl-ssh2-zlib-idn: $(VC) | ||||||
|  | 	cd lib | ||||||
|  | 	nmake /f Makefile.$(VC) cfg=release-ssl-ssh2-zlib USE_IDN=1 | ||||||
|  | 	cd ..\src | ||||||
|  | 	nmake /f Makefile.$(VC) cfg=release-ssl-ssh2-zlib USE_IDN=1 | ||||||
|  |  | ||||||
|  | vc-x64-ssl-ssh2-zlib-idn: $(VC) | ||||||
|  | 	cd lib | ||||||
|  | 	nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl-ssh2-zlib USE_IDN=1 | ||||||
|  | 	cd ..\src | ||||||
|  | 	nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl-ssh2-zlib USE_IDN=1 | ||||||
|  |  | ||||||
|  | vc-ssl-ssh2-zlib-idn-sspi: $(VC) | ||||||
|  | 	cd lib | ||||||
|  | 	nmake /f Makefile.$(VC) cfg=release-ssl-ssh2-zlib USE_IDN=1 WINDOWS_SSPI=1 | ||||||
|  | 	cd ..\src | ||||||
|  | 	nmake /f Makefile.$(VC) cfg=release-ssl-ssh2-zlib USE_IDN=1 WINDOWS_SSPI=1 | ||||||
|  |  | ||||||
|  | vc-x64-ssl-ssh2-zlib-idn-sspi: $(VC) | ||||||
|  | 	cd lib | ||||||
|  | 	nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl-ssh2-zlib USE_IDN=1 WINDOWS_SSPI=1 | ||||||
|  | 	cd ..\src | ||||||
|  | 	nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl-ssh2-zlib USE_IDN=1 WINDOWS_SSPI=1 | ||||||
|  |  | ||||||
|  | vc-winssl: $(VC) | ||||||
|  | 	cd lib | ||||||
|  | 	nmake /f Makefile.$(VC) cfg=release-winssl WINDOWS_SSPI=1 | ||||||
|  | 	cd ..\src | ||||||
|  | 	nmake /f Makefile.$(VC) cfg=release-winssl WINDOWS_SSPI=1 | ||||||
|  |  | ||||||
|  | vc-x64-winssl: $(VC) | ||||||
|  | 	cd lib | ||||||
|  | 	nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-winssl WINDOWS_SSPI=1 | ||||||
|  | 	cd ..\src | ||||||
|  | 	nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-winssl WINDOWS_SSPI=1 | ||||||
|  |  | ||||||
|  | vc-winssl-idn: $(VC) | ||||||
|  | 	cd lib | ||||||
|  | 	nmake /f Makefile.$(VC) cfg=release-winssl USE_IDN=1 WINDOWS_SSPI=1 | ||||||
|  | 	cd ..\src | ||||||
|  | 	nmake /f Makefile.$(VC) cfg=release-winssl USE_IDN=1 WINDOWS_SSPI=1 | ||||||
|  |  | ||||||
|  | vc-x64-winssl-idn: $(VC) | ||||||
|  | 	cd lib | ||||||
|  | 	nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-winssl USE_IDN=1 WINDOWS_SSPI=1 | ||||||
|  | 	cd ..\src | ||||||
|  | 	nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-winssl USE_IDN=1 WINDOWS_SSPI=1 | ||||||
|  |  | ||||||
|  | vc-winssl-zlib: $(VC) | ||||||
|  | 	cd lib | ||||||
|  | 	nmake /f Makefile.$(VC) cfg=release-winssl-zlib WINDOWS_SSPI=1 | ||||||
|  | 	cd ..\src | ||||||
|  | 	nmake /f Makefile.$(VC) cfg=release-winssl-zlib WINDOWS_SSPI=1 | ||||||
|  |  | ||||||
| vc-x64-winssl-zlib: $(VC) | vc-x64-winssl-zlib: $(VC) | ||||||
| 	cd lib | 	cd lib | ||||||
| 	nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-winssl-zlib | 	nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-winssl-zlib WINDOWS_SSPI=1 | ||||||
| 	cd ..\src | 	cd ..\src | ||||||
| 	nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-winssl-zlib | 	nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-winssl-zlib WINDOWS_SSPI=1 | ||||||
|  |  | ||||||
|  | vc-winssl-zlib-idn: $(VC) | ||||||
|  | 	cd lib | ||||||
|  | 	nmake /f Makefile.$(VC) cfg=release-winssl-zlib USE_IDN=1 WINDOWS_SSPI=1 | ||||||
|  | 	cd ..\src | ||||||
|  | 	nmake /f Makefile.$(VC) cfg=release-winssl-zlib USE_IDN=1 WINDOWS_SSPI=1 | ||||||
|  |  | ||||||
|  | vc-x64-winssl-zlib-idn: $(VC) | ||||||
|  | 	cd lib | ||||||
|  | 	nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-winssl-zlib USE_IDN=1 WINDOWS_SSPI=1 | ||||||
|  | 	cd ..\src | ||||||
|  | 	nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-winssl-zlib USE_IDN=1 WINDOWS_SSPI=1 | ||||||
|  |  | ||||||
| vc-ssl-dll: $(VC) | vc-ssl-dll: $(VC) | ||||||
| 	cd lib | 	cd lib | ||||||
| @@ -244,12 +448,6 @@ vc-zlib-dll: $(VC) | |||||||
| 	cd ..\src | 	cd ..\src | ||||||
| 	nmake /f Makefile.$(VC) cfg=release-zlib-dll | 	nmake /f Makefile.$(VC) cfg=release-zlib-dll | ||||||
|  |  | ||||||
| vc-sspi: $(VC) |  | ||||||
| 	cd lib |  | ||||||
| 	nmake /f Makefile.$(VC) cfg=release WINDOWS_SSPI=1 |  | ||||||
| 	cd ..\src |  | ||||||
| 	nmake /f Makefile.$(VC) cfg=release WINDOWS_SSPI=1 |  | ||||||
|  |  | ||||||
| djgpp: | djgpp: | ||||||
| 	$(MAKE) -C lib -f Makefile.dj | 	$(MAKE) -C lib -f Makefile.dj | ||||||
| 	$(MAKE) -C src -f Makefile.dj | 	$(MAKE) -C src -f Makefile.dj | ||||||
|   | |||||||
							
								
								
									
										197
									
								
								RELEASE-NOTES
									
									
									
									
									
								
							
							
						
						
									
										197
									
								
								RELEASE-NOTES
									
									
									
									
									
								
							| @@ -1,88 +1,89 @@ | |||||||
| Curl and libcurl 7.39.0 | Curl and libcurl 7.41.0 | ||||||
|  |  | ||||||
|  Public curl releases:         142 |  Public curl releases:         144 | ||||||
|  Command line options:         162 |  Command line options:         163 | ||||||
|  curl_easy_setopt() options:   208 |  curl_easy_setopt() options:   209 | ||||||
|  Public functions in libcurl:  58 |  Public functions in libcurl:  58 | ||||||
|  Contributors:                 1216 |  Contributors:                 1233 | ||||||
|  |  | ||||||
| This release includes the following changes: | This release includes the following changes: | ||||||
|  |  | ||||||
|  o SSLv3 is disabled by default |  o NetWare build: added TLS-SRP enabled build | ||||||
|  o CURLOPT_COOKIELIST: Added "RELOAD" command [5] |  o winbuild: Added option to build with c-ares | ||||||
|  o build: Added WinIDN build configuration options to Visual Studio projects |  o Added --cert-status [9] | ||||||
|  o ssh: improve key file search |  o Added CURLOPT_SSL_VERIFYSTATUS [10] | ||||||
|  o SSL: public key pinning. Use CURLOPT_PINNEDPUBLICKEY and --pinnedpubkey |  o sasl: implement EXTERNAL authentication mechanism | ||||||
|  o vtls: remove QsoSSL support, use gskit! |  | ||||||
|  o mk-ca-bundle: added SHA-384 signature algorithm |  | ||||||
|  o docs: added many examples for libcurl opts and other doc improvements |  | ||||||
|  o build: Added VC ssh2 target to main Makefile |  | ||||||
|  o MinGW: Added support to build with nghttp2 |  | ||||||
|  o NetWare: Added support to build with nghttp2 |  | ||||||
|  o build: added Watcom support to build with WinSSL |  | ||||||
|  o build: Added optional specific version generation of VC project files |  | ||||||
|  |  | ||||||
| This release includes the following bugfixes: | This release includes the following bugfixes: | ||||||
|  |  | ||||||
|  o curl_easy_duphandle: CURLOPT_COPYPOSTFIELDS read out of bounds [9] |  o sasl_gssapi: Fixed build on NetBSD with built-in GSS-API [1] | ||||||
|  o openssl: build fix for versions < 0.9.8e [1] |  o FTP: fix IPv6 host using link-local address [2] | ||||||
|  o newlines: fix mixed newlines to LF-only [2] |  o FTP: if EPSV fails on IPV6 connections, bail out | ||||||
|  o ntlm: Fixed HTTP proxy authentication when using Windows SSPI [3] |  o gssapi: Remove need for duplicated GSS_C_NT_HOSTBASED_SERVICE definitions | ||||||
|  o sasl_sspi: Fixed Unicode build [4] |  o NSS: fix compiler error when built http2-enabled | ||||||
|  o file: reject paths using embedded %00 |  o mingw build: allow to pass custom CFLAGS [3] | ||||||
|  o threaded-resolver: revert Curl_expire_latest() switch [6] |  o add -m64 CFLAGS when targeting mingw64, add -m32/-m64 to LDFLAGS [4] | ||||||
|  o configure: allow --with-ca-path with PolarSSL too |  o curl_schannel.c: mark session as removed from cache if not freed [5] | ||||||
|  o HTTP/2: Fix busy loop when EOF is encountered |  o Curl_pretransfer: reset expected transfer sizes [6] | ||||||
|  o CURLOPT_CAPATH: return failure if set without backend support |  o curl.h: remove extra space [7] | ||||||
|  o nss: do not fail if a CRL is already cached |  o curl_endian: Fixed build when 64-bit integers are not supported [8] | ||||||
|  o smtp: Fixed intermittent "SSL3_WRITE_PENDING: bad write retry" error |  o checksrc.bat: Better detection of Perl installation | ||||||
|  o fixed 20+ nits/memory leaks identified by Coverity scans |  o build-openssl.bat: Added check for Perl installation | ||||||
|  o curl_schannel.c: Fixed possible memory or handle leak |  o http_negotiate: Return CURLcode in Curl_input_negotiate() instead of int | ||||||
|  o multi-uv.c: call curl_multi_info_read() better |  o http_negotiate: Added empty decoded challenge message info text | ||||||
|  o Cmake: Check for OpenSSL before OpenLDAP |  o vtls: Removed unimplemented overrides of curlssl_close_all() | ||||||
|  o Cmake: Fix library list provided to cURL tests |  o sasl_gssapi: Fixed memory leak with local SPN variable | ||||||
|  o Cmake: Avoid cycle directory dependencies |  o http_negotiate: Use dynamic buffer for SPN generation | ||||||
|  o Cmake: Build with GSS-API libraries (MIT or Heimdal) |  o ldap: Renamed the CURL_LDAP_WIN definition to USE_WIN32_LDAP | ||||||
|  o vtls: provide backend defines for internal source code |  o openssl: do public key pinning check independently [11] | ||||||
|  o nss: fix a connection failure when FTPS handle is reused |  o timeval: typecast for better type (on Amiga) | ||||||
|  o tests/http_pipe.py: Python 3 support |  o ipv6: enclose AF_INET6 uses with proper #ifdefs for ipv6 | ||||||
|  o cmake: build tool_hugehelp (ENABLE_MANUAL) |  o SASL: common URL option and auth capabilities decoders for all protocols | ||||||
|  o cmake: enable IPv6 by default if available |  o BoringSSL: fix build | ||||||
|  o tests: move TESTCASES to Makefile.inc, add show for cmake |  o BoringSSL: detected by configure, switches off NTLM | ||||||
|  o ntlm: Avoid unnecessary buffer allocation for SSPI based type-2 token |  o openvms: Handle openssl/0.8.9zb version parsing | ||||||
|  o ntlm: Fixed empty/bad base-64 decoded buffer return codes |  o configure: detect libresssl | ||||||
|  o ntlm: Fixed empty type-2 decoded message info text |  o configure: remove detection of the old yassl emulation API | ||||||
|  o cmake: add CMake/Macros.cmake to the release tarball |  o curl_setup: Disable SMB/CIFS support when HTTP only | ||||||
|  o cmake: add SUPPORT_FEATURES and SUPPORT_PROTOCOLS |  o imap: remove automatic password setting: it breaks external sasl authentication | ||||||
|  o cmake: use LIBCURL_VERSION from curlver.h |  o sasl: remove XOAUTH2 from default enabled authentication mechanism | ||||||
|  o cmake: generate pkg-config and curl-config |  o runtests: identify BoringSSL and libressl | ||||||
|  o fixed several superfluous variable assignements identified by cppcheck |  o security: avoid compiler warning | ||||||
|  o cleanup of 'CURLcode result' return code |  o ldap: build with BoringSSL | ||||||
|  o pipelining: only output "is not blacklisted" in debug builds |  o des: Added Curl_des_set_odd_parity() | ||||||
|  o SSL: Remove SSLv3 from SSL default due to POODLE attack |  o CURLOPT_SEEKFUNCTION.3: also when server closes a connection | ||||||
|  o gskit.c: remove SSLv3 from SSL default |  o CURLOPT_HTTP_VERSION.3: CURL_HTTP_VERSION_2_0 added in 7.33.0 | ||||||
|  o darwinssl: detect possible future removal of SSLv3 from the framework |  o build: Removed unused Visual Studio bscmake settings | ||||||
|  o ntlm: Only define ntlm data structure when USE_NTLM is defined |  o build: Enabled DEBUGBUILD in Visual Studio debug builds | ||||||
|  o ntlm: Return CURLcode from Curl_ntlm_core_mk_lm_hash() |  o build: Renamed top level Visual Studio solution files | ||||||
|  o ntlm: Return all errors from Curl_ntlm_core_mk_nt_hash() |  o build: Removed Visual Studio SuppressStartupBanner directive for VC8+ | ||||||
|  o sspi: Only call CompleteAuthToken() when complete is needed |  o libcurl-symbols: first basic shot for autogenerated docs | ||||||
|  o http_negotiate: Fixed missing check for USE_SPNEGO |  o Makefile.am: fix 'make distcheck' | ||||||
|  o HTTP: return larger than 3 digit response codes too [7] |  o getpass_r: read from stdin, not stdout! [12] | ||||||
|  o openssl: Check for NPN / ALPN via OpenSSL version number |  o getpass: protect include with proper #ifdef | ||||||
|  o openssl: enable NPN separately from ALPN |  o opts: CURLOPT_CAINFO availability depends on SSL engine | ||||||
|  o sasl_sspi: Allow DIGEST-MD5 to use current windows credentials |  o more cleanup of 'CURLcode result' return code  | ||||||
|  o sspi: Return CURLE_LOGIN_DENIED on AcquireCredentialsHandle() failure |  o MD4: replace implementation | ||||||
|  o resume: consider a resume from [content-length] to be OK [8] |  o MD5: replace implementation | ||||||
|  o sasl: Fixed Kerberos V5 inclusion when CURL_DISABLE_CRYPTO_AUTH is used |  o openssl: SSL_SESSION->ssl_version no longer exist [13] | ||||||
|  o build-openssl.bat: Fix x64 release build |  o md5: use axTLS's own MD5 functions when available | ||||||
|  o cmake: drop _BSD_SOURCE macro usage |  o schannel: Removed curl_ prefix from source files | ||||||
|  o cmake: fix gethostby{addr,name}_r in CurlTests |  o curl.1: add warning when using -H and redirects | ||||||
|  o cmake: clean OtherTests, fixing -Werror |  o curl.1: clarify that -X is used for all requests | ||||||
|  o cmake: fix struct sockaddr_storage check |  o gskit: Fix exclusive SSLv3 option | ||||||
|  o Curl_single_getsock: fix hold/pause sock handling |  o polarssl: Fix exclusive SSL protocol version options [14] | ||||||
|  o SSL: PolarSSL default min SSL version TLS 1.0 |  o http2: Fix bug that associated stream canceled on PUSH_PROMISE | ||||||
|  o cmake: fix ZLIB_INCLUDE_DIRS use [10] |  o ftp: accept all 2xx responses to the PORT command | ||||||
|  o buildconf: stop checking for libtool |  o configure: allow both --with-ca-bundle and --with-ca-path [15] | ||||||
|  |  o cmake: install the dll file to the correct directory | ||||||
|  |  o nss: fix NPN/ALPN protocol negotiation | ||||||
|  |  o polarssl: fix ALPN protocol negotiation | ||||||
|  |  o cmake: Fix generation of tool_hugehelp.c on windows | ||||||
|  |  o cmake: fix winsock2 detection on windows | ||||||
|  |  o gnutls: fix build with HTTP2 | ||||||
|  |  o connect: fix a spurious connect failure on dual-stacked hosts [16] | ||||||
|  |  o test: test 530 is now less timing dependent | ||||||
|  |  o telnet: invalid use of custom read function if not set | ||||||
|  |  | ||||||
| This release includes the following known bugs: | This release includes the following known bugs: | ||||||
|  |  | ||||||
| @@ -91,26 +92,32 @@ This release includes the following known bugs: | |||||||
| 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: | ||||||
|  |  | ||||||
|   Askar Safin, Balaji Salunke, Bill Nagel, Bruno Thomsen, Carlo Wood, |   Alessandro Ghedini, Alexander Peslyak, Ben Boeckel, Brad King, Brad Spencer, | ||||||
|   Catalin Patulea, Dan Fandrich, Daniel Stenberg, Dimitar Boevski, Fabian Keil, |   Chris Young, Dan Fandrich, Daniel Stenberg, Gisle Vanem, Guenter Knauf, | ||||||
|   Guenter Knauf, Jakub Zakrzewski, Jeremy Lin, Jonathan Cardoso Machado, |   Jean-Francois Durand, Joe Mason, John E. Malmberg, Jon Seymour, Julian Ospald, | ||||||
|   Kamil Dudka, K. R. Walker, Luan Cestari, Lucas Pardue, Marcel Raad, |   Kamil Dudka, Kyle J. McKay, Leith Bade, Marc Hoersken, Michael Kaufmann, | ||||||
|   Marc Hoersken, Michael Wallner, Nick Zitzmann, Patrick Monnerat, |   Michael Wallner, Mohammad AlSaleh, Nick Zitzmann, Patrick Monnerat, | ||||||
|   Paul Howarth, Peter Wu, Ray Satiro, Steve Holme, Symeon Paraschoudis, |   Ray Satiro, Rich Burridge, Sam Schanken, Sergei Nikulov, Steve Holme, | ||||||
|   Tatsuhiro Tsujikawa, Ulrich Telle, Viktor Szakáts, Waldek Kozba, |   Tatsuhiro Tsujikawa, Thomas Klausner, Viktor Szakats, Vojtěch Král, | ||||||
|   Yousuke Kimoto, |   Yun SangHo | ||||||
|  |  | ||||||
|         Thanks! (and sorry if I forgot to mention someone) |         Thanks! (and sorry if I forgot to mention someone) | ||||||
|  |  | ||||||
| References to bug reports and discussions on issues: | References to bug reports and discussions on issues: | ||||||
|  |  | ||||||
|  [1] = http://curl.haxx.se/mail/lib-2014-09/0064.html |  [1] = http://curl.haxx.se/bug/view.cgi?id=1469 | ||||||
|  [2] = http://curl.haxx.se/mail/lib-2014-09/0075.html |  [2] = http://curl.haxx.se/bug/view.cgi?id=1468 | ||||||
|  [3] = http://curl.haxx.se/mail/lib-2014-08/0273.html |  [3] = https://github.com/bagder/curl/pull/136 | ||||||
|  [4] = http://curl.haxx.se/bug/view.cgi?id=1422 |  [4] = https://github.com/bagder/curl/pull/134 | ||||||
|  [5] = http://curl.haxx.se/libcurl/c/CURLOPT_COOKIELIST.html |  [5] = http://curl.haxx.se/mail/lib-2015-01/0036.html | ||||||
|  [6] = http://curl.haxx.se/bug/view.cgi?id=1426 |  [6] = http://curl.haxx.se/mail/lib-2015-01/0065.html | ||||||
|  [7] = http://curl.haxx.se/bug/view.cgi?id=1441 |  [7] = https://github.com/bagder/curl/pull/137 | ||||||
|  [8] = http://curl.haxx.se/bug/view.cgi?id=1443 |  [8] = http://curl.haxx.se/mail/lib-2015-01/0094.html | ||||||
|  [9] = http://curl.haxx.se/docs/adv_20141105.html |  [9] = http://curl.haxx.se/docs/manpage.html#--cert-status | ||||||
|  [10] = https://github.com/bagder/curl/pull/123 |  [10] = http://curl.haxx.se/libcurl/c/CURLOPT_SSL_VERIFYSTATUS.html | ||||||
|  |  [11] = http://curl.haxx.se/bug/view.cgi?id=1471 | ||||||
|  |  [12] = http://curl.haxx.se/bug/view.cgi?id=1476 | ||||||
|  |  [13] = http://curl.haxx.se/mail/lib-2015-02/0034.html | ||||||
|  |  [14] = http://curl.haxx.se/mail/lib-2015-01/0002.html | ||||||
|  |  [15] = https://github.com/bagder/curl/pull/139 | ||||||
|  |  [16] = https://bugzilla.redhat.com/1187531 | ||||||
|   | |||||||
| @@ -1,4 +0,0 @@ | |||||||
| To be addressed in ... |  | ||||||
| ======================= |  | ||||||
|  |  | ||||||
| 327 -  |  | ||||||
| @@ -2607,7 +2607,8 @@ AC_HELP_STRING([--without-ca-path], [Don't use a default CA path]), | |||||||
|   if test "x$want_ca" != "xno" -a "x$want_ca" != "xunset" -a \ |   if test "x$want_ca" != "xno" -a "x$want_ca" != "xunset" -a \ | ||||||
|           "x$want_capath" != "xno" -a "x$want_capath" != "xunset"; then |           "x$want_capath" != "xno" -a "x$want_capath" != "xunset"; then | ||||||
|     dnl both given |     dnl both given | ||||||
|     AC_MSG_ERROR([Can't specify both --with-ca-bundle and --with-ca-path.]) |     ca="$want_ca" | ||||||
|  |     capath="$want_capath" | ||||||
|   elif test "x$want_ca" != "xno" -a "x$want_ca" != "xunset"; then |   elif test "x$want_ca" != "xno" -a "x$want_ca" != "xunset"; then | ||||||
|     dnl --with-ca-bundle given |     dnl --with-ca-bundle given | ||||||
|     ca="$want_ca" |     ca="$want_ca" | ||||||
| @@ -2669,11 +2670,13 @@ AC_HELP_STRING([--without-ca-path], [Don't use a default CA path]), | |||||||
|     AC_DEFINE_UNQUOTED(CURL_CA_BUNDLE, "$ca", [Location of default ca bundle]) |     AC_DEFINE_UNQUOTED(CURL_CA_BUNDLE, "$ca", [Location of default ca bundle]) | ||||||
|     AC_SUBST(CURL_CA_BUNDLE) |     AC_SUBST(CURL_CA_BUNDLE) | ||||||
|     AC_MSG_RESULT([$ca]) |     AC_MSG_RESULT([$ca]) | ||||||
|   elif test "x$capath" != "xno"; then |   fi | ||||||
|  |   if test "x$capath" != "xno"; then | ||||||
|     CURL_CA_PATH="\"$capath\"" |     CURL_CA_PATH="\"$capath\"" | ||||||
|     AC_DEFINE_UNQUOTED(CURL_CA_PATH, "$capath", [Location of default ca path]) |     AC_DEFINE_UNQUOTED(CURL_CA_PATH, "$capath", [Location of default ca path]) | ||||||
|     AC_MSG_RESULT([$capath (capath)]) |     AC_MSG_RESULT([$capath (capath)]) | ||||||
|   else |   fi | ||||||
|  |   if test "x$ca" == "xno" && test "x$capath" == "xno"; then | ||||||
|     AC_MSG_RESULT([no]) |     AC_MSG_RESULT([no]) | ||||||
|   fi |   fi | ||||||
| ]) | ]) | ||||||
|   | |||||||
							
								
								
									
										130
									
								
								configure.ac
									
									
									
									
									
								
							
							
						
						
									
										130
									
								
								configure.ac
									
									
									
									
									
								
							| @@ -5,7 +5,7 @@ | |||||||
| #                            | (__| |_| |  _ <| |___ | #                            | (__| |_| |  _ <| |___ | ||||||
| #                             \___|\___/|_| \_\_____| | #                             \___|\___/|_| \_\_____| | ||||||
| # | # | ||||||
| # Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al. | # Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||||
| # | # | ||||||
| # This software is licensed as described in the file COPYING, which | # This software is licensed as described in the file COPYING, which | ||||||
| # you should have received as part of this distribution. The terms | # you should have received as part of this distribution. The terms | ||||||
| @@ -154,6 +154,7 @@ dnl initialize all the info variables | |||||||
| curl_tls_srp_msg="no      (--enable-tls-srp)" | curl_tls_srp_msg="no      (--enable-tls-srp)" | ||||||
|     curl_res_msg="default (--enable-ares / --enable-threaded-resolver)" |     curl_res_msg="default (--enable-ares / --enable-threaded-resolver)" | ||||||
|    curl_ipv6_msg="no      (--enable-ipv6)" |    curl_ipv6_msg="no      (--enable-ipv6)" | ||||||
|  | curl_unix_sockets_msg="no      (--enable-unix-sockets)" | ||||||
|     curl_idn_msg="no      (--with-{libidn,winidn})" |     curl_idn_msg="no      (--with-{libidn,winidn})" | ||||||
|  curl_manual_msg="no      (--enable-manual)" |  curl_manual_msg="no      (--enable-manual)" | ||||||
| curl_libcurl_msg="enabled (--disable-libcurl-option)" | curl_libcurl_msg="enabled (--disable-libcurl-option)" | ||||||
| @@ -574,6 +575,22 @@ AC_HELP_STRING([--disable-imap],[Disable IMAP support]), | |||||||
| ) | ) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | AC_MSG_CHECKING([whether to support smb]) | ||||||
|  | AC_ARG_ENABLE(smb, | ||||||
|  | AC_HELP_STRING([--enable-smb],[Enable SMB/CIFS support]) | ||||||
|  | AC_HELP_STRING([--disable-smb],[Disable SMB/CIFS support]), | ||||||
|  | [ case "$enableval" in | ||||||
|  |   no) | ||||||
|  |        AC_MSG_RESULT(no) | ||||||
|  |        AC_DEFINE(CURL_DISABLE_SMB, 1, [to disable SMB/CIFS]) | ||||||
|  |        AC_SUBST(CURL_DISABLE_SMB, [1]) | ||||||
|  |        ;; | ||||||
|  |   *)   AC_MSG_RESULT(yes) | ||||||
|  |        ;; | ||||||
|  |   esac ], | ||||||
|  |        AC_MSG_RESULT(yes) | ||||||
|  | ) | ||||||
|  |  | ||||||
| AC_MSG_CHECKING([whether to support smtp]) | AC_MSG_CHECKING([whether to support smtp]) | ||||||
| AC_ARG_ENABLE(smtp, | AC_ARG_ENABLE(smtp, | ||||||
| AC_HELP_STRING([--enable-smtp],[Enable SMTP support]) | AC_HELP_STRING([--enable-smtp],[Enable SMTP support]) | ||||||
| @@ -1029,7 +1046,7 @@ if test x$CURL_DISABLE_LDAP != x1 ; then | |||||||
|  |  | ||||||
|   if test "$LDAPLIBNAME" = "wldap32"; then |   if test "$LDAPLIBNAME" = "wldap32"; then | ||||||
|     curl_ldap_msg="enabled (winldap)" |     curl_ldap_msg="enabled (winldap)" | ||||||
|     AC_DEFINE(CURL_LDAP_WIN, 1, [Use Windows LDAP implementation]) |     AC_DEFINE(USE_WIN32_LDAP, 1, [Use Windows LDAP implementation]) | ||||||
|   else |   else | ||||||
|     curl_ldap_msg="enabled (OpenLDAP)" |     curl_ldap_msg="enabled (OpenLDAP)" | ||||||
|     if test "x$ac_cv_func_ldap_init_fd" = "xyes"; then |     if test "x$ac_cv_func_ldap_init_fd" = "xyes"; then | ||||||
| @@ -1047,10 +1064,10 @@ dnl ********************************************************************** | |||||||
| dnl Checks for IPv6 | dnl Checks for IPv6 | ||||||
| dnl ********************************************************************** | dnl ********************************************************************** | ||||||
|  |  | ||||||
| AC_MSG_CHECKING([whether to enable ipv6]) | AC_MSG_CHECKING([whether to enable IPv6]) | ||||||
| AC_ARG_ENABLE(ipv6, | AC_ARG_ENABLE(ipv6, | ||||||
| AC_HELP_STRING([--enable-ipv6],[Enable ipv6 (with ipv4) support]) | AC_HELP_STRING([--enable-ipv6],[Enable IPv6 (with IPv4) support]) | ||||||
| AC_HELP_STRING([--disable-ipv6],[Disable ipv6 support]), | AC_HELP_STRING([--disable-ipv6],[Disable IPv6 support]), | ||||||
| [ case "$enableval" in | [ case "$enableval" in | ||||||
|   no) |   no) | ||||||
|        AC_MSG_RESULT(no) |        AC_MSG_RESULT(no) | ||||||
| @@ -1562,7 +1579,8 @@ if test "$curl_ssl_msg" = "$init_ssl_msg" && test X"$OPT_SSL" != Xno; then | |||||||
|               ]) |               ]) | ||||||
|  |  | ||||||
|     dnl these can only exist if openssl exists |     dnl these can only exist if openssl exists | ||||||
|     dnl yassl doesn't have SSL_get_shutdown |     dnl Cyassl doesn't have SSL_get_shutdown | ||||||
|  |     dnl BoringSSL doesn't have DES_set_odd_parity | ||||||
|  |  | ||||||
|     AC_CHECK_FUNCS( RAND_status \ |     AC_CHECK_FUNCS( RAND_status \ | ||||||
|                     RAND_screen \ |                     RAND_screen \ | ||||||
| @@ -1570,28 +1588,30 @@ if test "$curl_ssl_msg" = "$init_ssl_msg" && test X"$OPT_SSL" != Xno; then | |||||||
|                     ENGINE_cleanup \ |                     ENGINE_cleanup \ | ||||||
|                     CRYPTO_cleanup_all_ex_data \ |                     CRYPTO_cleanup_all_ex_data \ | ||||||
|                     SSL_get_shutdown \ |                     SSL_get_shutdown \ | ||||||
|                     SSLv2_client_method ) |                     SSLv2_client_method \ | ||||||
|  |                     DES_set_odd_parity ) | ||||||
|  |  | ||||||
|     dnl Make an attempt to detect if this is actually yassl's headers and |     AC_MSG_CHECKING([for BoringSSL]) | ||||||
|     dnl OpenSSL emulation layer. We still leave everything else believing |     if test "x$ac_cv_func_DES_set_odd_parity" != "xyes"; then | ||||||
|     dnl and acting like OpenSSL. |       curl_ssl_msg="enabled (BoringSSL)" | ||||||
|  |       AC_DEFINE_UNQUOTED(HAVE_BORINGSSL, 1, | ||||||
|     AC_MSG_CHECKING([for yaSSL using OpenSSL compatibility mode]) |         [Define to 1 if using BoringSSL.]) | ||||||
|  |       AC_MSG_RESULT([yes]) | ||||||
|  |     else | ||||||
|  |       AC_MSG_RESULT([no]) | ||||||
|  |     fi | ||||||
|  |     AC_MSG_CHECKING([for libressl]) | ||||||
|     AC_COMPILE_IFELSE([ |     AC_COMPILE_IFELSE([ | ||||||
|       AC_LANG_PROGRAM([[ |       AC_LANG_PROGRAM([[ | ||||||
| #include <openssl/ssl.h> | #include <openssl/opensslv.h> | ||||||
|       ]],[[ |       ]],[[ | ||||||
| #if defined(YASSL_VERSION) && defined(OPENSSL_VERSION_NUMBER) |         int dummy = LIBRESSL_VERSION_NUMBER; | ||||||
|         int dummy = SSL_ERROR_NONE; |  | ||||||
| #else |  | ||||||
|         Not the yaSSL OpenSSL compatibility header. |  | ||||||
| #endif |  | ||||||
|       ]]) |       ]]) | ||||||
|     ],[ |     ],[ | ||||||
|       AC_MSG_RESULT([yes]) |       AC_MSG_RESULT([yes]) | ||||||
|       AC_DEFINE_UNQUOTED(USE_YASSLEMUL, 1, |       AC_DEFINE_UNQUOTED(HAVE_LIBRESSL, 1, | ||||||
|         [Define to 1 if using yaSSL in OpenSSL compatibility mode.]) |         [Define to 1 if using libressl.]) | ||||||
|       curl_ssl_msg="enabled (OpenSSL emulation by yaSSL)" |       curl_ssl_msg="enabled (libressl)" | ||||||
|     ],[ |     ],[ | ||||||
|       AC_MSG_RESULT([no]) |       AC_MSG_RESULT([no]) | ||||||
|     ]) |     ]) | ||||||
| @@ -2332,12 +2352,6 @@ if test X"$OPT_LIBSSH2" != Xno; then | |||||||
|        dnl linker doesn't search through, we need to add it to LD_LIBRARY_PATH |        dnl linker doesn't search through, we need to add it to LD_LIBRARY_PATH | ||||||
|        dnl to prevent further configure tests to fail due to this |        dnl to prevent further configure tests to fail due to this | ||||||
|  |  | ||||||
|        dnl libssh2_version is a post 1.0 addition |  | ||||||
|        dnl libssh2_init and libssh2_exit were added in 1.2.5 |  | ||||||
|        dnl libssh2_scp_send64 was added in 1.2.6 |  | ||||||
|        dnl libssh2_session_handshake was added in 1.2.8 |  | ||||||
|        AC_CHECK_FUNCS( libssh2_version libssh2_init libssh2_exit \ |  | ||||||
|                        libssh2_scp_send64 libssh2_session_handshake) |  | ||||||
|        if test "x$cross_compiling" != "xyes"; then |        if test "x$cross_compiling" != "xyes"; then | ||||||
|          LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$DIR_SSH2" |          LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$DIR_SSH2" | ||||||
|          export LD_LIBRARY_PATH |          export LD_LIBRARY_PATH | ||||||
| @@ -3263,6 +3277,39 @@ if test "$want_tls_srp" = "yes" && ( test "x$HAVE_GNUTLS_SRP" = "x1" || test "x$ | |||||||
|    curl_tls_srp_msg="enabled" |    curl_tls_srp_msg="enabled" | ||||||
| fi | fi | ||||||
|  |  | ||||||
|  | dnl ************************************************************ | ||||||
|  | dnl disable Unix domain sockets support | ||||||
|  | dnl | ||||||
|  | AC_MSG_CHECKING([whether to enable Unix domain sockets]) | ||||||
|  | AC_ARG_ENABLE(unix-sockets, | ||||||
|  | AC_HELP_STRING([--enable-unix-sockets],[Enable Unix domain sockets]) | ||||||
|  | AC_HELP_STRING([--disable-unix-sockets],[Disable Unix domain sockets]), | ||||||
|  | [ case "$enableval" in | ||||||
|  |   no)  AC_MSG_RESULT(no) | ||||||
|  |        want_unix_sockets=no | ||||||
|  |        ;; | ||||||
|  |   *)   AC_MSG_RESULT(yes) | ||||||
|  |        want_unix_sockets=yes | ||||||
|  |        ;; | ||||||
|  |   esac ], [ | ||||||
|  |        AC_MSG_RESULT(auto) | ||||||
|  |        want_unix_sockets=auto | ||||||
|  |        ] | ||||||
|  | ) | ||||||
|  | if test "x$want_unix_sockets" != "xno"; then | ||||||
|  |   AC_CHECK_MEMBER([struct sockaddr_un.sun_path], [ | ||||||
|  |     AC_DEFINE(USE_UNIX_SOCKETS, 1, [Use Unix domain sockets]) | ||||||
|  |     AC_SUBST(USE_UNIX_SOCKETS, [1]) | ||||||
|  |     curl_unix_sockets_msg="enabled" | ||||||
|  |   ], [ | ||||||
|  |     if test "x$want_unix_sockets" = "xyes"; then | ||||||
|  |       AC_MSG_ERROR([--enable-unix-sockets is not available on this platform!]) | ||||||
|  |     fi | ||||||
|  |   ], [ | ||||||
|  |     #include <sys/un.h> | ||||||
|  |   ]) | ||||||
|  | fi | ||||||
|  |  | ||||||
| dnl ************************************************************ | dnl ************************************************************ | ||||||
| dnl disable cookies support | dnl disable cookies support | ||||||
| dnl | dnl | ||||||
| @@ -3346,6 +3393,9 @@ fi | |||||||
| if test "x$IPV6_ENABLED" = "x1"; then | if test "x$IPV6_ENABLED" = "x1"; then | ||||||
|   SUPPORT_FEATURES="$SUPPORT_FEATURES IPv6" |   SUPPORT_FEATURES="$SUPPORT_FEATURES IPv6" | ||||||
| fi | fi | ||||||
|  | if test "x$USE_UNIX_SOCKETS" = "x1"; then | ||||||
|  |   SUPPORT_FEATURES="$SUPPORT_FEATURES UnixSockets" | ||||||
|  | fi | ||||||
| if test "x$HAVE_LIBZ" = "x1"; then | if test "x$HAVE_LIBZ" = "x1"; then | ||||||
|   SUPPORT_FEATURES="$SUPPORT_FEATURES libz" |   SUPPORT_FEATURES="$SUPPORT_FEATURES libz" | ||||||
| fi | fi | ||||||
| @@ -3368,17 +3418,24 @@ if test "x$CURL_DISABLE_CRYPTO_AUTH" != "x1" -a \ | |||||||
|   SUPPORT_FEATURES="$SUPPORT_FEATURES SPNEGO" |   SUPPORT_FEATURES="$SUPPORT_FEATURES SPNEGO" | ||||||
| fi | fi | ||||||
|  |  | ||||||
| if test "x$CURL_DISABLE_HTTP" != "x1" -a \ | if test "x$CURL_DISABLE_CRYPTO_AUTH" != "x1" -a \ | ||||||
|     "x$CURL_DISABLE_CRYPTO_AUTH" != "x1"; then |     \( "x$HAVE_GSSAPI" = "x1" -o "x$USE_WINDOWS_SSPI" = "x1" \); then | ||||||
|  |   SUPPORT_FEATURES="$SUPPORT_FEATURES Kerberos" | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | if test "x$CURL_DISABLE_CRYPTO_AUTH" != "x1"; then | ||||||
|   if test "x$USE_SSLEAY" = "x1" -o "x$USE_WINDOWS_SSPI" = "x1" \ |   if test "x$USE_SSLEAY" = "x1" -o "x$USE_WINDOWS_SSPI" = "x1" \ | ||||||
|       -o "x$GNUTLS_ENABLED" = "x1" -o "x$NSS_ENABLED" = "x1" \ |       -o "x$GNUTLS_ENABLED" = "x1" -o "x$NSS_ENABLED" = "x1" \ | ||||||
|       -o "x$DARWINSSL_ENABLED" = "x1"; then |       -o "x$DARWINSSL_ENABLED" = "x1"; then | ||||||
|     SUPPORT_FEATURES="$SUPPORT_FEATURES NTLM" |     SUPPORT_FEATURES="$SUPPORT_FEATURES NTLM" | ||||||
|     if test "x$NTLM_WB_ENABLED" = "x1"; then |  | ||||||
|  |     if test "x$CURL_DISABLE_HTTP" != "x1" -a \ | ||||||
|  |         "x$NTLM_WB_ENABLED" = "x1"; then | ||||||
|       SUPPORT_FEATURES="$SUPPORT_FEATURES NTLM_WB" |       SUPPORT_FEATURES="$SUPPORT_FEATURES NTLM_WB" | ||||||
|     fi |     fi | ||||||
|   fi |   fi | ||||||
| fi | fi | ||||||
|  |  | ||||||
| if test "x$USE_TLS_SRP" = "x1"; then | if test "x$USE_TLS_SRP" = "x1"; then | ||||||
|   SUPPORT_FEATURES="$SUPPORT_FEATURES TLS-SRP" |   SUPPORT_FEATURES="$SUPPORT_FEATURES TLS-SRP" | ||||||
| fi | fi | ||||||
| @@ -3438,6 +3495,16 @@ if test "x$CURL_DISABLE_IMAP" != "x1"; then | |||||||
|     SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS IMAPS" |     SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS IMAPS" | ||||||
|   fi |   fi | ||||||
| fi | fi | ||||||
|  | if test "x$CURL_DISABLE_SMB" != "x1" \ | ||||||
|  |     -a "x$CURL_DISABLE_CRYPTO_AUTH" != "x1" \ | ||||||
|  |     -a \( "x$USE_SSLEAY" = "x1" -o "x$USE_WINDOWS_SSPI" = "x1" \ | ||||||
|  |       -o "x$GNUTLS_ENABLED" = "x1" -o "x$NSS_ENABLED" = "x1" \ | ||||||
|  |       -o "x$DARWINSSL_ENABLED" = "x1" \); then | ||||||
|  |   SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS SMB" | ||||||
|  |   if test "x$SSL_ENABLED" = "x1"; then | ||||||
|  |     SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS SMBS" | ||||||
|  |   fi | ||||||
|  | fi | ||||||
| if test "x$CURL_DISABLE_SMTP" != "x1"; then | if test "x$CURL_DISABLE_SMTP" != "x1"; then | ||||||
|   SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS SMTP" |   SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS SMTP" | ||||||
|   if test "x$SSL_ENABLED" = "x1"; then |   if test "x$SSL_ENABLED" = "x1"; then | ||||||
| @@ -3536,7 +3603,8 @@ AC_MSG_NOTICE([Configured to build curl/libcurl: | |||||||
|   GSS-API support:  ${curl_gss_msg} |   GSS-API support:  ${curl_gss_msg} | ||||||
|   TLS-SRP support:  ${curl_tls_srp_msg} |   TLS-SRP support:  ${curl_tls_srp_msg} | ||||||
|   resolver:         ${curl_res_msg} |   resolver:         ${curl_res_msg} | ||||||
|   ipv6 support:     ${curl_ipv6_msg} |   IPv6 support:     ${curl_ipv6_msg} | ||||||
|  |   Unix sockets support: ${curl_unix_sockets_msg} | ||||||
|   IDN support:      ${curl_idn_msg} |   IDN support:      ${curl_idn_msg} | ||||||
|   Build libcurl:    Shared=${enable_shared}, Static=${enable_static} |   Build libcurl:    Shared=${enable_shared}, Static=${enable_static} | ||||||
|   Built-in manual:  ${curl_manual_msg} |   Built-in manual:  ${curl_manual_msg} | ||||||
|   | |||||||
| @@ -25,6 +25,10 @@ | |||||||
| # This script shows all mentioned contributors from <hash> until HEAD. To aid | # This script shows all mentioned contributors from <hash> until HEAD. To aid | ||||||
| # when writing RELEASE-NOTES and THANKS. | # when writing RELEASE-NOTES and THANKS. | ||||||
| # | # | ||||||
|  | # Use --releasenotes to also include the names from the existing RELEASE-NOTES | ||||||
|  | # file, which is handy when we've added names manually in there that should be | ||||||
|  | # included in an updated list. | ||||||
|  | # | ||||||
|  |  | ||||||
| start=$1 | start=$1 | ||||||
|  |  | ||||||
| @@ -35,18 +39,34 @@ fi | |||||||
| # filter out Author:, Commit: and *by: lines | # filter out Author:, Commit: and *by: lines | ||||||
| # cut off the email parts | # cut off the email parts | ||||||
| # split list of names at comma | # split list of names at comma | ||||||
|  | # split list of names at " and " | ||||||
| # cut off spaces first and last on the line | # cut off spaces first and last on the line | ||||||
|  | # filter alternatives through THANKS-filter | ||||||
| # only count names with a space (ie more than one word) | # only count names with a space (ie more than one word) | ||||||
| # sort all unique names | # sort all unique names | ||||||
| # awk them into RELEASE-NOTES format | # awk them into RELEASE-NOTES format | ||||||
|  | ( | ||||||
| git log $start..HEAD | \ | git log $start..HEAD | \ | ||||||
| egrep -i '(Author|Commit|by):' | \ | egrep -i '(Author|Commit|by):' | \ | ||||||
| cut -d: -f2- | \ | cut -d: -f2- | \ | ||||||
| cut '-d<' -f1 | \ | cut '-d<' -f1 | \ | ||||||
| tr , '\012' | \ | tr , '\012' | \ | ||||||
| sed -e 's/^ //' -e 's/ $//g' | \ | sed 's/ and /\n/' | \ | ||||||
|  | sed -e 's/^ //' -e 's/ $//g' | ||||||
|  |  | ||||||
|  | if echo "$*" | grep -qw -- '--releasenotes';then | ||||||
|  |     # if --releasenotes was used | ||||||
|  |     # grep out the list of names from RELEASE-NOTES | ||||||
|  |     # split on ", " | ||||||
|  |     # remove leading white spaces | ||||||
|  | grep "^  [^ ]" RELEASE-NOTES| \ | ||||||
|  | sed 's/, */\n/g'| \ | ||||||
|  | sed 's/^ *//' | ||||||
|  | fi | ||||||
|  | )| \ | ||||||
|  | sed -f ./docs/THANKS-filter | \ | ||||||
| grep ' ' | \ | grep ' ' | \ | ||||||
| sort -fu | | sort -fu | \ | ||||||
| awk '{ | awk '{ | ||||||
|  num++; |  num++; | ||||||
|  n = sprintf("%s%s%s,", n, length(n)?" ":"", $0); |  n = sprintf("%s%s%s,", n, length(n)?" ":"", $0); | ||||||
|   | |||||||
							
								
								
									
										15
									
								
								docs/FAQ
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								docs/FAQ
									
									
									
									
									
								
							| @@ -134,7 +134,7 @@ FAQ | |||||||
|  |  | ||||||
|     A free and easy-to-use client-side URL transfer library, supporting DICT, |     A free and easy-to-use client-side URL transfer library, supporting DICT, | ||||||
|     FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, |     FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, | ||||||
|     POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, TELNET and TFTP. |     POP3S, RTMP, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET and TFTP. | ||||||
|  |  | ||||||
|     libcurl supports HTTPS certificates, HTTP POST, HTTP PUT, FTP uploading, |     libcurl supports HTTPS certificates, HTTP POST, HTTP PUT, FTP uploading, | ||||||
|     Kerberos, SPNEGO, HTTP form based upload, proxies, cookies, user+password |     Kerberos, SPNEGO, HTTP form based upload, proxies, cookies, user+password | ||||||
| @@ -764,8 +764,9 @@ FAQ | |||||||
|   request-body in a GET request with something like "curl -X GET -d data |   request-body in a GET request with something like "curl -X GET -d data | ||||||
|   [URL]" |   [URL]" | ||||||
|  |  | ||||||
|   Note that -X doesn't change curl's behavior. It only modifies the actual |   Note that -X doesn't actually change curl's behavior as it only modifies the | ||||||
|   string sent in the request. |   actual string sent in the request, but that may of course trigger a | ||||||
|  |   different set of events. | ||||||
|  |  | ||||||
|   Accordingly, by using -XPOST on a command line that for example would follow |   Accordingly, by using -XPOST on a command line that for example would follow | ||||||
|   a 303 redirect, you will effectively prevent curl from behaving |   a 303 redirect, you will effectively prevent curl from behaving | ||||||
| @@ -1274,7 +1275,7 @@ FAQ | |||||||
|   you want to change name resolver function you must rebuild libcurl and tell |   you want to change name resolver function you must rebuild libcurl and tell | ||||||
|   it to use a different function. |   it to use a different function. | ||||||
|  |  | ||||||
|   - The non-ipv6 resolver that can use one out of four host name resolve calls |   - The non-IPv6 resolver that can use one out of four host name resolve calls | ||||||
|     (depending on what your system supports): |     (depending on what your system supports): | ||||||
|  |  | ||||||
|       A - gethostbyname() |       A - gethostbyname() | ||||||
| @@ -1282,15 +1283,15 @@ FAQ | |||||||
|       C - gethostbyname_r() with 5 arguments |       C - gethostbyname_r() with 5 arguments | ||||||
|       D - gethostbyname_r() with 6 arguments |       D - gethostbyname_r() with 6 arguments | ||||||
|  |  | ||||||
|   - The ipv6-resolver that uses getaddrinfo() |   - The IPv6-resolver that uses getaddrinfo() | ||||||
|  |  | ||||||
|   - The c-ares based name resolver that uses the c-ares library for resolves. |   - The c-ares based name resolver that uses the c-ares library for resolves. | ||||||
|     Using this offers asynchronous name resolves. |     Using this offers asynchronous name resolves. | ||||||
|  |  | ||||||
|   - The threaded resolver (default option on Windows). It uses: |   - The threaded resolver (default option on Windows). It uses: | ||||||
|  |  | ||||||
|       A - gethostbyname() on plain ipv4 hosts |       A - gethostbyname() on plain IPv4 hosts | ||||||
|       B - getaddrinfo() on ipv6-enabled hosts |       B - getaddrinfo() on IPv6 enabled hosts | ||||||
|  |  | ||||||
|   Also note that libcurl never resolves or reverse-lookups addresses given as |   Also note that libcurl never resolves or reverse-lookups addresses given as | ||||||
|   pure numbers, such as 127.0.0.1 or ::1. |   pure numbers, such as 127.0.0.1 or ::1. | ||||||
|   | |||||||
| @@ -127,9 +127,15 @@ FILE | |||||||
|  - upload |  - upload | ||||||
|  - resume |  - resume | ||||||
|  |  | ||||||
|  | SMB | ||||||
|  |  - SMBv1 over TCP and SSL | ||||||
|  |  - download | ||||||
|  |  - upload | ||||||
|  |  - authentication with NTLMv1 | ||||||
|  |  | ||||||
| SMTP | SMTP | ||||||
|  - authentication: Plain, Login, CRAM-MD5, Digest-MD5, NTLM (*9) and Kerberos 5 |  - authentication: Plain, Login, CRAM-MD5, Digest-MD5, NTLM (*9), Kerberos 5 | ||||||
|    (*4) |    (*4) and External. | ||||||
|  - send e-mails |  - send e-mails | ||||||
|  - mail from support |  - mail from support | ||||||
|  - mail size support |  - mail size support | ||||||
| @@ -144,8 +150,8 @@ SMTPS (*1) | |||||||
|  |  | ||||||
| POP3 | POP3 | ||||||
|  - authentication: Clear Text, APOP and SASL |  - authentication: Clear Text, APOP and SASL | ||||||
|  - SASL based authentication: Plain, Login, CRAM-MD5, Digest-MD5, NTLM (*9) and |  - SASL based authentication: Plain, Login, CRAM-MD5, Digest-MD5, NTLM (*9), | ||||||
|    Kerberos 5 (*4) |    Kerberos 5 (*4) and External. | ||||||
|  - list e-mails |  - list e-mails | ||||||
|  - retrieve e-mails |  - retrieve e-mails | ||||||
|  - enhanced command support for: CAPA, DELE, TOP, STAT, UIDL and NOOP via |  - enhanced command support for: CAPA, DELE, TOP, STAT, UIDL and NOOP via | ||||||
| @@ -159,8 +165,8 @@ POP3S (*1) | |||||||
|  |  | ||||||
| IMAP | IMAP | ||||||
|  - authentication: Clear Text and SASL |  - authentication: Clear Text and SASL | ||||||
|  - SASL based authentication: Plain, Login, CRAM-MD5, Digest-MD5, NTLM (*9) and |  - SASL based authentication: Plain, Login, CRAM-MD5, Digest-MD5, NTLM (*9), | ||||||
|    Kerberos 5 (*4) |    Kerberos 5 (*4) and External. | ||||||
|  - list the folders of a mailbox |  - list the folders of a mailbox | ||||||
|  - select a mailbox with support for verifying the UIDVALIDITY |  - select a mailbox with support for verifying the UIDVALIDITY | ||||||
|  - fetch e-mails with support for specifying the UID and SECTION |  - fetch e-mails with support for specifying the UID and SECTION | ||||||
|   | |||||||
							
								
								
									
										30
									
								
								docs/INSTALL
									
									
									
									
									
								
							
							
						
						
									
										30
									
								
								docs/INSTALL
									
									
									
									
									
								
							| @@ -20,10 +20,10 @@ Building from git | |||||||
|    If you get your code off a git repository, see the GIT-INFO file in the |    If you get your code off a git repository, see the GIT-INFO file in the | ||||||
|    root directory for specific instructions on how to proceed. |    root directory for specific instructions on how to proceed. | ||||||
|  |  | ||||||
| UNIX | Unix | ||||||
| ==== | ==== | ||||||
|  |  | ||||||
|    A normal unix installation is made in three or four steps (after you've |    A normal Unix installation is made in three or four steps (after you've | ||||||
|    unpacked the source archive): |    unpacked the source archive): | ||||||
|  |  | ||||||
|         ./configure |         ./configure | ||||||
| @@ -209,7 +209,7 @@ Win32 | |||||||
|    environment variables, for example: |    environment variables, for example: | ||||||
|  |  | ||||||
|      set ZLIB_PATH=c:\zlib-1.2.8 |      set ZLIB_PATH=c:\zlib-1.2.8 | ||||||
|      set OPENSSL_PATH=c:\openssl-0.9.8y |      set OPENSSL_PATH=c:\openssl-0.9.8zc | ||||||
|      set LIBSSH2_PATH=c:\libssh2-1.4.3 |      set LIBSSH2_PATH=c:\libssh2-1.4.3 | ||||||
|  |  | ||||||
|    ATTENTION: if you want to build with libssh2 support you have to use latest |    ATTENTION: if you want to build with libssh2 support you have to use latest | ||||||
| @@ -317,7 +317,7 @@ Win32 | |||||||
|    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.8y |      set OPENSSL_PATH=c:\openssl-0.9.8zc | ||||||
|  |  | ||||||
|    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 | ||||||
| @@ -416,15 +416,21 @@ Win32 | |||||||
|    CURL_DISABLE_FILE     disables FILE |    CURL_DISABLE_FILE     disables FILE | ||||||
|    CURL_DISABLE_TFTP     disables TFTP |    CURL_DISABLE_TFTP     disables TFTP | ||||||
|    CURL_DISABLE_HTTP     disables HTTP |    CURL_DISABLE_HTTP     disables HTTP | ||||||
|  |    CURL_DISABLE_IMAP     disables IMAP | ||||||
|  |    CURL_DISABLE_POP3     disables POP3 | ||||||
|  |    CURL_DISABLE_SMTP     disables SMTP | ||||||
|  |  | ||||||
|    If you want to set any of these defines you have the following |    If you want to set any of these defines you have the following options: | ||||||
|    possibilities: |  | ||||||
|  |  | ||||||
|    - Modify lib/config-win32.h |    - Modify lib/config-win32.h | ||||||
|    - Modify lib/curl_setup.h |    - Modify lib/curl_setup.h | ||||||
|    - Modify lib/Makefile.vc6 |    - Modify lib/Makefile.vc6 | ||||||
|    - Add defines to Project/Settings/C/C++/General/Preprocessor Definitions |    - Modify the "Preprocessor Definitions" in the libcurl project | ||||||
|      in the vc6libcurl.dsw/vc6libcurl.dsp Visual C++ 6 IDE project. |  | ||||||
|  |    Note: The pre-processor settings can be found using the Visual Studio IDE | ||||||
|  |    under "Project -> Settings -> C/C++ -> General" in VC6 and "Project -> | ||||||
|  |    Properties -> Configuration Properties -> C/C++ -> Preprocessor" in later | ||||||
|  |    versions. | ||||||
|  |  | ||||||
|    Using BSD-style lwIP instead of Winsock TCP/IP stack in Win32 builds |    Using BSD-style lwIP instead of Winsock TCP/IP stack in Win32 builds | ||||||
|    -------------------------------------------------------------------- |    -------------------------------------------------------------------- | ||||||
| @@ -436,8 +442,12 @@ Win32 | |||||||
|  |  | ||||||
|    - Modify lib/config-win32.h and src/config-win32.h |    - Modify lib/config-win32.h and src/config-win32.h | ||||||
|    - Modify lib/Makefile.vc6 |    - Modify lib/Makefile.vc6 | ||||||
|    - Add definition to Project/Settings/C/C++/General/Preprocessor Definitions |    - Modify the "Preprocessor Definitions" in the libcurl project | ||||||
|      in the vc6libcurl.dsw/vc6libcurl.dsp Visual C++ 6 IDE project. |  | ||||||
|  |    Note: The pre-processor settings can be found using the Visual Studio IDE | ||||||
|  |    under "Project -> Settings -> C/C++ -> General" in VC6 and "Project -> | ||||||
|  |    Properties -> Configuration Properties -> C/C++ -> Preprocessor" in later | ||||||
|  |    versions. | ||||||
|  |  | ||||||
|    Once that libcurl has been built with BSD-style lwIP TCP/IP stack support, |    Once that libcurl has been built with BSD-style lwIP TCP/IP stack support, | ||||||
|    in order to use it with your program it is mandatory that your program |    in order to use it with your program it is mandatory that your program | ||||||
|   | |||||||
| @@ -42,7 +42,7 @@ Portability | |||||||
|  libidn       0.4.1 |  libidn       0.4.1 | ||||||
|  cyassl       2.0.0 |  cyassl       2.0.0 | ||||||
|  openldap     2.0 |  openldap     2.0 | ||||||
|  MIT krb5 lib 1.2.4 |  MIT Kerberos 1.2.4 | ||||||
|  GSKit        V5R3M0 |  GSKit        V5R3M0 | ||||||
|  NSS          3.14.x |  NSS          3.14.x | ||||||
|  axTLS        1.2.7 |  axTLS        1.2.7 | ||||||
| @@ -252,9 +252,9 @@ Library | |||||||
|  |  | ||||||
|  Kerberos |  Kerberos | ||||||
|  |  | ||||||
|  The kerberos support is mainly in lib/krb5.c and lib/security.c but also |  Kerberos support is mainly in lib/krb5.c and lib/security.c but also | ||||||
|  curl_sasl_sspi.c for the email protocols and socks_gssapi.c & socks_sspi.c for |  curl_sasl_sspi.c and curl_sasl_gssapi.c for the email protocols and | ||||||
|  SOCKS5 proxy specifics. |  socks_gssapi.c & socks_sspi.c for SOCKS5 proxy specifics. | ||||||
|  |  | ||||||
|  TELNET |  TELNET | ||||||
|  |  | ||||||
| @@ -264,6 +264,10 @@ Library | |||||||
|  |  | ||||||
|  The file:// protocol is dealt with in lib/file.c. |  The file:// protocol is dealt with in lib/file.c. | ||||||
|  |  | ||||||
|  |  SMB | ||||||
|  |  | ||||||
|  |  The smb:// protocol is dealt with in lib/smb.c. | ||||||
|  |  | ||||||
|  LDAP |  LDAP | ||||||
|  |  | ||||||
|  Everything LDAP is in lib/ldap.c and lib/openldap.c |  Everything LDAP is in lib/ldap.c and lib/openldap.c | ||||||
|   | |||||||
| @@ -3,6 +3,9 @@ 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! | ||||||
|  |  | ||||||
|  | 88. libcurl doesn't support CURLINFO_FILETIME for SFTP transfers and thus | ||||||
|  |   curl's -R option also doesn't work then. | ||||||
|  |  | ||||||
| 87. -J/--remote-header-name doesn't decode %-encoded file names. RFC6266 | 87. -J/--remote-header-name doesn't decode %-encoded file names. RFC6266 | ||||||
|   details how it should be done. The can of worm is basically that we have no |   details how it should be done. The can of worm is basically that we have no | ||||||
|   charset handling in curl and ascii >=128 is a challenge for us. Not to |   charset handling in curl and ascii >=128 is a challenge for us. Not to | ||||||
| @@ -197,7 +200,7 @@ may have been fixed since this was written! | |||||||
|   be to use a data structure other than a plain C string, one that can handle |   be to use a data structure other than a plain C string, one that can handle | ||||||
|   embedded NUL characters.  From a practical standpoint, most FTP servers |   embedded NUL characters.  From a practical standpoint, most FTP servers | ||||||
|   would not meaningfully support NUL characters within RFC 959 <string>, |   would not meaningfully support NUL characters within RFC 959 <string>, | ||||||
|   anyway (e.g., UNIX pathnames may not contain NUL). |   anyway (e.g., Unix pathnames may not contain NUL). | ||||||
|  |  | ||||||
| 14. Test case 165 might fail on a system which has libidn present, but with an | 14. Test case 165 might fail on a system which has libidn present, but with an | ||||||
|   old iconv version (2.1.3 is a known bad version), since it doesn't recognize |   old iconv version (2.1.3 is a known bad version), since it doesn't recognize | ||||||
|   | |||||||
| @@ -59,6 +59,10 @@ SIMPLE USAGE | |||||||
|  |  | ||||||
|         curl "http://[2001:1890:1112:1::20]/" |         curl "http://[2001:1890:1112:1::20]/" | ||||||
|  |  | ||||||
|  |   Get a file from an SMB server: | ||||||
|  |  | ||||||
|  |         curl -u "domain\username:passwd" smb://server.example.com/share/file.txt | ||||||
|  |  | ||||||
| DOWNLOAD TO A FILE | DOWNLOAD TO A FILE | ||||||
|  |  | ||||||
|   Get a web page and store in a local file with a specific name: |   Get a web page and store in a local file with a specific name: | ||||||
| @@ -228,6 +232,11 @@ UPLOADING | |||||||
|  |  | ||||||
|         curl --proxytunnel -x proxy:port -T localfile ftp.upload.com |         curl --proxytunnel -x proxy:port -T localfile ftp.upload.com | ||||||
|  |  | ||||||
|  | SMB / SMBS | ||||||
|  |  | ||||||
|  |         curl -T file.txt -u "domain\username:passwd"  | ||||||
|  |          smb://server.example.com/share/ | ||||||
|  |  | ||||||
|  HTTP |  HTTP | ||||||
|  |  | ||||||
|   Upload all data on stdin to a specified HTTP site: |   Upload all data on stdin to a specified HTTP site: | ||||||
|   | |||||||
| @@ -8,42 +8,39 @@ possible participation. | |||||||
| New stuff - libcurl | New stuff - libcurl | ||||||
| ------------------- | ------------------- | ||||||
|  |  | ||||||
| 1. http2 test suite | 1. HTTP/2 | ||||||
|  |  | ||||||
| 2. http2 multiplexing/pipelining |  - test suite | ||||||
|  |  - http2 multiplexing/pipelining | ||||||
|  |  - provide option for HTTP/2 "prior knowledge" over clear text | ||||||
|  |  - provide option to allow curl to default to HTTP/2 only when using HTTPS | ||||||
|  |  | ||||||
| 3. SPDY | 2. SRV records | ||||||
|  |  | ||||||
| 4. SRV records | 3. HTTPS to proxy | ||||||
|  |  | ||||||
| 5. HTTPS to proxy | 4. make sure there's an easy handle passed in to `curl_formadd()`, | ||||||
|  |  | ||||||
| 6. make sure there's an easy handle passed in to `curl_formadd()`, |  | ||||||
|    `curl_formget()` and `curl_formfree()` by adding replacement functions and |    `curl_formget()` and `curl_formfree()` by adding replacement functions and | ||||||
|    deprecating the old ones to allow custom mallocs and more |    deprecating the old ones to allow custom mallocs and more | ||||||
|  |  | ||||||
| 7. HTTP Digest authentication via Windows SSPI | 5. add support for third-party SASL libraries such as Cyrus SASL - may need to | ||||||
|  |  | ||||||
| 8. SASL GSSAPI (Kerberos 5) authentication via a GSS-API library |  | ||||||
|  |  | ||||||
| 9. add support for third-party SASL libraries such as Cyrus SASL - may need to |  | ||||||
|    move existing native and SSPI based authentication into vsasl folder after |    move existing native and SSPI based authentication into vsasl folder after | ||||||
|    reworking HTTP and SASL code |    reworking HTTP and SASL code | ||||||
|  |  | ||||||
| 10. SASL authentication in LDAP | 6. SASL authentication in LDAP | ||||||
|  |  | ||||||
| 11. Simplify the SMTP email interface so that programmers don't have to | 7. Simplify the SMTP email interface so that programmers don't have to | ||||||
|    construct the body of an email that contains all the headers, alternative |    construct the body of an email that contains all the headers, alternative | ||||||
|    content, images and attachments - maintain raw interface so that |    content, images and attachments - maintain raw interface so that | ||||||
|    programmers that want to do this can |    programmers that want to do this can | ||||||
|  |  | ||||||
| 12. Allow the email protocols to return the capabilities before | 8. Allow the email protocols to return the capabilities before | ||||||
|     authenticating. This will allow an application to decide on the best |     authenticating. This will allow an application to decide on the best | ||||||
|     authentication mechanism |     authentication mechanism | ||||||
|  |  | ||||||
| 13. Allow Windows threading model to be replaced by Win32 pthreads port | 9. Allow Windows threading model to be replaced by Win32 pthreads port | ||||||
|  |  | ||||||
| 14. Implement a dynamic buffer size to allow SFTP to use much larger buffers | 10. Implement a dynamic buffer size to allow SFTP to use much larger buffers | ||||||
|     and possibly allow the size to be customizable by applications. Use less |     and possibly allow the size to be customizable by applications. Use less | ||||||
|     memory when handles are not in use? |     memory when handles are not in use? | ||||||
|  |  | ||||||
| @@ -70,7 +67,6 @@ Improve | |||||||
|  |  | ||||||
| 4. docs (considered "bad" by users but how do we make it better?) | 4. docs (considered "bad" by users but how do we make it better?) | ||||||
|  |  | ||||||
|   - split up `curl_easy_setopt.3` |  | ||||||
|   - split up curl.1 |   - split up curl.1 | ||||||
|  |  | ||||||
| 5. authentication framework (consider merging HTTP and SASL authentication to | 5. authentication framework (consider merging HTTP and SASL authentication to | ||||||
| @@ -83,7 +79,5 @@ Improve | |||||||
| Remove | Remove | ||||||
| ------ | ------ | ||||||
|  |  | ||||||
| 1. cmake support (nobody maintains it) | 1. makefile.vc files as there is no point in maintaining two sets of Windows | ||||||
|  |  | ||||||
| 2. makefile.vc files as there is no point in maintaining two sets of Windows |  | ||||||
|    makefiles. Note: These are currently being used by the Windows autobuilds |    makefiles. Note: These are currently being used by the Windows autobuilds | ||||||
|   | |||||||
							
								
								
									
										55
									
								
								docs/THANKS
									
									
									
									
									
								
							
							
						
						
									
										55
									
								
								docs/THANKS
									
									
									
									
									
								
							| @@ -40,6 +40,7 @@ Alexander Klauer | |||||||
| Alexander Kourakos | Alexander Kourakos | ||||||
| Alexander Krasnostavsky | Alexander Krasnostavsky | ||||||
| Alexander Lazic | Alexander Lazic | ||||||
|  | Alexander Peslyak | ||||||
| Alexander Zhuravlev | Alexander Zhuravlev | ||||||
| Alexey Borzov | Alexey Borzov | ||||||
| Alexey Pesternikov | Alexey Pesternikov | ||||||
| @@ -70,7 +71,6 @@ Andrei Benea | |||||||
| Andrei Cipu | Andrei Cipu | ||||||
| Andrei Kurushin | Andrei Kurushin | ||||||
| Andrej E Baranov | Andrej E Baranov | ||||||
| Andres Garcia |  | ||||||
| Andrew Benham | Andrew Benham | ||||||
| Andrew Biggs | Andrew Biggs | ||||||
| Andrew Bushnell | Andrew Bushnell | ||||||
| @@ -80,6 +80,7 @@ Andrew Kurushin | |||||||
| Andrew Moise | Andrew Moise | ||||||
| Andrew Wansink | Andrew Wansink | ||||||
| Andrew de los Reyes | Andrew de los Reyes | ||||||
|  | Andrey Labunets | ||||||
| Andrii Moiseiev | Andrii Moiseiev | ||||||
| Andrés García | Andrés García | ||||||
| Andy Cedilnik | Andy Cedilnik | ||||||
| @@ -108,10 +109,12 @@ Augustus Saunders | |||||||
| Avery Fay | Avery Fay | ||||||
| Axel Tillequin | Axel Tillequin | ||||||
| Balaji Parasuram | Balaji Parasuram | ||||||
|  | Balaji Salunke | ||||||
| Balint Szilakszi | Balint Szilakszi | ||||||
| Barry Abrahamson | Barry Abrahamson | ||||||
| Bart Whiteley | Bart Whiteley | ||||||
| Bas Mevissen | Bas Mevissen | ||||||
|  | Ben Boeckel | ||||||
| Ben Darnell | Ben Darnell | ||||||
| Ben Greear | Ben Greear | ||||||
| Ben Madsen | Ben Madsen | ||||||
| @@ -131,6 +134,7 @@ Bill Doyle | |||||||
| Bill Egert | Bill Egert | ||||||
| Bill Hoffman | Bill Hoffman | ||||||
| Bill Middlecamp | Bill Middlecamp | ||||||
|  | Bill Nagel | ||||||
| Bjoern Sikora | Bjoern Sikora | ||||||
| Bjorn Augustsson | Bjorn Augustsson | ||||||
| Bjorn Reese | Bjorn Reese | ||||||
| @@ -141,6 +145,7 @@ Bob Richmond | |||||||
| Bob Schader | Bob Schader | ||||||
| Bogdan Nicula | Bogdan Nicula | ||||||
| Brad Burdick | Brad Burdick | ||||||
|  | Brad Harder | ||||||
| Brad Hards | Brad Hards | ||||||
| Brad King | Brad King | ||||||
| Brad Spencer | Brad Spencer | ||||||
| @@ -156,6 +161,7 @@ Brian R Duffy | |||||||
| Brian Ulm | Brian Ulm | ||||||
| Brock Noland | Brock Noland | ||||||
| Bruce Mitchener | Bruce Mitchener | ||||||
|  | Bruno Thomsen | ||||||
| Bruno de Carvalho | Bruno de Carvalho | ||||||
| Bryan Henderson | Bryan Henderson | ||||||
| Bryan Kemp | Bryan Kemp | ||||||
| @@ -163,10 +169,10 @@ Byrial Jensen | |||||||
| Cameron Kaiser | Cameron Kaiser | ||||||
| Camille Moncelier | Camille Moncelier | ||||||
| Caolan McNamara | Caolan McNamara | ||||||
|  | Carlo Wood | ||||||
| Carsten Lange | Carsten Lange | ||||||
| Casey O'Donnell | Casey O'Donnell | ||||||
| Catalin Patulea | Catalin Patulea | ||||||
| Cedric Deltheil |  | ||||||
| Chad Monroe | Chad Monroe | ||||||
| Chandrakant Bagul | Chandrakant Bagul | ||||||
| Charles Kerr | Charles Kerr | ||||||
| @@ -175,7 +181,6 @@ Chih-Chung Chang | |||||||
| Chris "Bob Bob" | Chris "Bob Bob" | ||||||
| Chris Combes | Chris Combes | ||||||
| Chris Conlon | Chris Conlon | ||||||
| Chris Conroy |  | ||||||
| Chris Deidun | Chris Deidun | ||||||
| Chris Flerackers | Chris Flerackers | ||||||
| Chris Gaukroger | Chris Gaukroger | ||||||
| @@ -287,6 +292,7 @@ Diego Casorran | |||||||
| Dilyan Palauzov | Dilyan Palauzov | ||||||
| Dima Barsky | Dima Barsky | ||||||
| Dima Tisnek | Dima Tisnek | ||||||
|  | Dimitar Boevski | ||||||
| Dimitre Dimitrov | Dimitre Dimitrov | ||||||
| Dimitrios Siganos | Dimitrios Siganos | ||||||
| Dimitris Sarris | Dimitris Sarris | ||||||
| @@ -367,7 +373,7 @@ Feng Tu | |||||||
| Florian Schoppmann | Florian Schoppmann | ||||||
| Florian Weimer | Florian Weimer | ||||||
| Forrest Cahoon | Forrest Cahoon | ||||||
| Francois Charlier | Frank Gevaerts | ||||||
| Frank Hempel | Frank Hempel | ||||||
| Frank Keeney | Frank Keeney | ||||||
| Frank McGeough | Frank McGeough | ||||||
| @@ -413,7 +419,6 @@ Glen A Johnson Jr. | |||||||
| Glen Nakamura | Glen Nakamura | ||||||
| Glen Scott | Glen Scott | ||||||
| Glenn Sheridan | Glenn Sheridan | ||||||
| Gokhan Sengun |  | ||||||
| Gordon Marler | Gordon Marler | ||||||
| Gorilla Maguila | Gorilla Maguila | ||||||
| Grant Erickson | Grant Erickson | ||||||
| @@ -515,6 +520,7 @@ Jaz Fresh | |||||||
| Jean Jacques Drouin | Jean Jacques Drouin | ||||||
| Jean-Claude Chauve | Jean-Claude Chauve | ||||||
| Jean-Francois Bertrand | Jean-Francois Bertrand | ||||||
|  | Jean-Francois Durand | ||||||
| Jean-Louis Lemaire | Jean-Louis Lemaire | ||||||
| Jean-Marc Ranger | Jean-Marc Ranger | ||||||
| Jean-Noël Rouvignac | Jean-Noël Rouvignac | ||||||
| @@ -529,6 +535,7 @@ Jeff Pohlmeyer | |||||||
| Jeff Weber | Jeff Weber | ||||||
| Jeremy Friesner | Jeremy Friesner | ||||||
| Jeremy Huddleston | Jeremy Huddleston | ||||||
|  | Jeremy Lin | ||||||
| Jeroen Koekkoek | Jeroen Koekkoek | ||||||
| Jerome Muffat-Meridol | Jerome Muffat-Meridol | ||||||
| Jerome Robert | Jerome Robert | ||||||
| @@ -553,6 +560,7 @@ Joe Mason | |||||||
| Joel Chen | Joel Chen | ||||||
| Jofell Gallardo | Jofell Gallardo | ||||||
| Johan Anderson | Johan Anderson | ||||||
|  | Johan Lantz | ||||||
| Johan Nilsson | Johan Nilsson | ||||||
| Johan van Selst | Johan van Selst | ||||||
| Johannes Bauer | Johannes Bauer | ||||||
| @@ -569,7 +577,6 @@ John Joseph Bachir | |||||||
| John Kelly | John Kelly | ||||||
| John Lask | John Lask | ||||||
| John Lightsey | John Lightsey | ||||||
| John Malmberg |  | ||||||
| John Marino | John Marino | ||||||
| John McGowan | John McGowan | ||||||
| John P. McCaskey | John P. McCaskey | ||||||
| @@ -580,6 +587,8 @@ Johnny Luong | |||||||
| Jon Grubbs | Jon Grubbs | ||||||
| Jon Nelson | Jon Nelson | ||||||
| Jon Sargeant | Jon Sargeant | ||||||
|  | Jon Seymour | ||||||
|  | Jon Spencer | ||||||
| Jon Torrey | Jon Torrey | ||||||
| Jon Travis | Jon Travis | ||||||
| Jon Turner | Jon Turner | ||||||
| @@ -604,8 +613,10 @@ Judson Bishop | |||||||
| Juergen Wilke | Juergen Wilke | ||||||
| Jukka Pihl | Jukka Pihl | ||||||
| Julian Noble | Julian Noble | ||||||
|  | Julian Ospald | ||||||
| Julian Taylor | Julian Taylor | ||||||
| Julien Chaffraix | Julien Chaffraix | ||||||
|  | Julien Nabet | ||||||
| Julien Royer | Julien Royer | ||||||
| Jun-ichiro itojun Hagino | Jun-ichiro itojun Hagino | ||||||
| Jurij Smakov | Jurij Smakov | ||||||
| @@ -614,13 +625,13 @@ Justin Karneges | |||||||
| Justin Maggard | Justin Maggard | ||||||
| Jörg Mueller-Tolk | Jörg Mueller-Tolk | ||||||
| Jörn Hartroth | Jörn Hartroth | ||||||
|  | K. R. Walker | ||||||
| Kai Engert | Kai Engert | ||||||
| Kai Sommerfeld | Kai Sommerfeld | ||||||
| Kai-Uwe Rommel | Kai-Uwe Rommel | ||||||
| Kalle Vahlman | Kalle Vahlman | ||||||
| Kamil Dudka | Kamil Dudka | ||||||
| Kang-Jin Lee | Kang-Jin Lee | ||||||
| Karl M |  | ||||||
| Karl Moerder | Karl Moerder | ||||||
| Karol Pietrzak | Karol Pietrzak | ||||||
| Kaspar Brand | Kaspar Brand | ||||||
| @@ -651,6 +662,7 @@ Krishnendu Majumdar | |||||||
| Krister Johansen | Krister Johansen | ||||||
| Kristian Gunstone | Kristian Gunstone | ||||||
| Kristian Köhntopp | Kristian Köhntopp | ||||||
|  | Kyle J. McKay | ||||||
| Kyle L. Huff | Kyle L. Huff | ||||||
| Kyle Sallee | Kyle Sallee | ||||||
| Lachlan O'Dea | Lachlan O'Dea | ||||||
| @@ -669,6 +681,7 @@ Laurent Rabret | |||||||
| Legoff Vincent | Legoff Vincent | ||||||
| Lehel Bernadt | Lehel Bernadt | ||||||
| Leif W | Leif W | ||||||
|  | Leith Bade | ||||||
| Len Krause | Len Krause | ||||||
| Lenaic Lefever | Lenaic Lefever | ||||||
| Lenny Rachitsky | Lenny Rachitsky | ||||||
| @@ -685,9 +698,10 @@ Liza Alenchery | |||||||
| Lluís Batlle i Rossell | Lluís Batlle i Rossell | ||||||
| Loic Dachary | Loic Dachary | ||||||
| Loren Kirkby | Loren Kirkby | ||||||
|  | Luan Cestari | ||||||
| Luca Altea | Luca Altea | ||||||
| Luca Alteas |  | ||||||
| Lucas Adamski | Lucas Adamski | ||||||
|  | Lucas Pardue | ||||||
| Ludek Finstrle | Ludek Finstrle | ||||||
| Ludovico Cavedon | Ludovico Cavedon | ||||||
| Lukasz Czekierda | Lukasz Czekierda | ||||||
| @@ -707,8 +721,10 @@ Manuel Massing | |||||||
| Marc Boucher | Marc Boucher | ||||||
| Marc Deslauriers | Marc Deslauriers | ||||||
| Marc Doughty | Marc Doughty | ||||||
|  | Marc Hesse | ||||||
| Marc Hoersken | Marc Hoersken | ||||||
| Marc Kleine-Budde | Marc Kleine-Budde | ||||||
|  | Marc Renault | ||||||
| Marcel Raad | Marcel Raad | ||||||
| Marcel Roelofs | Marcel Roelofs | ||||||
| Marcelo Juchem | Marcelo Juchem | ||||||
| @@ -779,6 +795,7 @@ Michael Day | |||||||
| Michael Goffioul | Michael Goffioul | ||||||
| Michael Jahn | Michael Jahn | ||||||
| Michael Jerris | Michael Jerris | ||||||
|  | Michael Kaufmann | ||||||
| Michael Mealling | Michael Mealling | ||||||
| Michael Mueller | Michael Mueller | ||||||
| Michael Osipov | Michael Osipov | ||||||
| @@ -786,7 +803,6 @@ Michael Smith | |||||||
| Michael Stillwell | Michael Stillwell | ||||||
| Michael Wallner | Michael Wallner | ||||||
| Michal Bonino | Michal Bonino | ||||||
| Michal Gorny |  | ||||||
| Michal Marek | Michal Marek | ||||||
| Michał Górny | Michał Górny | ||||||
| Michał Kowalczyk | Michał Kowalczyk | ||||||
| @@ -813,9 +829,9 @@ Mitz Wark | |||||||
| Mohamed Lrhazi | Mohamed Lrhazi | ||||||
| Mohammad AlSaleh | Mohammad AlSaleh | ||||||
| Mohun Biswas | Mohun Biswas | ||||||
| Moonesamy |  | ||||||
| Myk Taylor | Myk Taylor | ||||||
| Nach M. S. | Nach M. S. | ||||||
|  | Nagai H | ||||||
| Nathan Coulter | Nathan Coulter | ||||||
| Nathan O'Sullivan | Nathan O'Sullivan | ||||||
| Nathanael Nerode | Nathanael Nerode | ||||||
| @@ -842,6 +858,7 @@ Nikos Mavrogiannopoulos | |||||||
| Ning Dong | Ning Dong | ||||||
| Nir Soffer | Nir Soffer | ||||||
| Nis Jorgensen | Nis Jorgensen | ||||||
|  | Nobuhiro Ban | ||||||
| Nodak Sodak | Nodak Sodak | ||||||
| Norbert Frese | Norbert Frese | ||||||
| Norbert Novotny | Norbert Novotny | ||||||
| @@ -890,7 +907,6 @@ Pawel A. Gajda | |||||||
| Pawel Kierski | Pawel Kierski | ||||||
| Pedro Larroy | Pedro Larroy | ||||||
| Pedro Neves | Pedro Neves | ||||||
| Pete Su |  | ||||||
| Peter Bray | Peter Bray | ||||||
| Peter Forret | Peter Forret | ||||||
| Peter Gal | Peter Gal | ||||||
| @@ -906,6 +922,7 @@ Peter Sylvester | |||||||
| Peter Todd | Peter Todd | ||||||
| Peter Verhas | Peter Verhas | ||||||
| Peter Wang | Peter Wang | ||||||
|  | Peter Wu | ||||||
| Peter Wullinger | Peter Wullinger | ||||||
| Peteris Krumins | Peteris Krumins | ||||||
| Petr Bahula | Petr Bahula | ||||||
| @@ -962,6 +979,7 @@ Rene Rebe | |||||||
| Reuven Wachtfogel | Reuven Wachtfogel | ||||||
| Reza Arbab | Reza Arbab | ||||||
| Ricardo Cadime | Ricardo Cadime | ||||||
|  | Rich Burridge | ||||||
| Rich Gray | Rich Gray | ||||||
| Rich Rauenzahn | Rich Rauenzahn | ||||||
| Richard Archer | Richard Archer | ||||||
| @@ -1020,7 +1038,8 @@ S. Moonesamy | |||||||
| Salvador Dávila | Salvador Dávila | ||||||
| Salvatore Sorrentino | Salvatore Sorrentino | ||||||
| Sam Deane | Sam Deane | ||||||
| Sam Listopad | Sam Hurst | ||||||
|  | Sam Schanken | ||||||
| Sampo Kellomaki | Sampo Kellomaki | ||||||
| Samuel Díaz García | Samuel Díaz García | ||||||
| Samuel Listopad | Samuel Listopad | ||||||
| @@ -1039,7 +1058,6 @@ Scott Cantor | |||||||
| Scott Davis | Scott Davis | ||||||
| Scott McCreary | Scott McCreary | ||||||
| Sebastian Rasmussen | Sebastian Rasmussen | ||||||
| Sebastien Willemijns |  | ||||||
| Senthil Raja Velu | Senthil Raja Velu | ||||||
| Sergei Nikulov | Sergei Nikulov | ||||||
| Sergey Tatarincev | Sergey Tatarincev | ||||||
| @@ -1066,6 +1084,7 @@ Spork Schivago | |||||||
| Stadler Stephan | Stadler Stephan | ||||||
| Stan van de Burgt | Stan van de Burgt | ||||||
| Stanislav Ivochkin | Stanislav Ivochkin | ||||||
|  | Stefan Bühler | ||||||
| Stefan Esser | Stefan Esser | ||||||
| Stefan Krause | Stefan Krause | ||||||
| Stefan Neis | Stefan Neis | ||||||
| @@ -1096,9 +1115,11 @@ Sune Ahlgren | |||||||
| Sven Anders | Sven Anders | ||||||
| Sven Neuhaus | Sven Neuhaus | ||||||
| Sven Wegener | Sven Wegener | ||||||
|  | Symeon Paraschoudis | ||||||
| Sébastien Willemijns | Sébastien Willemijns | ||||||
| T. Bharath | T. Bharath | ||||||
| T. Yamada | T. Yamada | ||||||
|  | Tae Hyoung Ahn | ||||||
| Taneli Vahakangas | Taneli Vahakangas | ||||||
| Tanguy Fautre | Tanguy Fautre | ||||||
| Tatsuhiro Tsujikawa | Tatsuhiro Tsujikawa | ||||||
| @@ -1120,6 +1141,7 @@ Tim Costello | |||||||
| Tim Harder | Tim Harder | ||||||
| Tim Heckman | Tim Heckman | ||||||
| Tim Newsome | Tim Newsome | ||||||
|  | Tim Ruehsen | ||||||
| Tim Sneddon | Tim Sneddon | ||||||
| Tim Starling | Tim Starling | ||||||
| Timo Sirainen | Timo Sirainen | ||||||
| @@ -1146,6 +1168,7 @@ Tomas Hoger | |||||||
| Tomas Mlcoch | Tomas Mlcoch | ||||||
| Tomas Pospisek | Tomas Pospisek | ||||||
| Tomas Szepe | Tomas Szepe | ||||||
|  | Tomasz Kojm | ||||||
| Tomasz Lacki | Tomasz Lacki | ||||||
| Tommie Gannert | Tommie Gannert | ||||||
| Tommy Tam | Tommy Tam | ||||||
| @@ -1165,6 +1188,7 @@ Török Edwin | |||||||
| Ulf Härnhammar | Ulf Härnhammar | ||||||
| Ulf Samuelsson | Ulf Samuelsson | ||||||
| Ulrich Doehner | Ulrich Doehner | ||||||
|  | Ulrich Telle | ||||||
| Ulrich Zadow | Ulrich Zadow | ||||||
| Venkat Akella | Venkat Akella | ||||||
| Victor Snezhko | Victor Snezhko | ||||||
| @@ -1183,9 +1207,12 @@ Vladimir Grishchenko | |||||||
| Vladimir Lazarenko | Vladimir Lazarenko | ||||||
| Vojtech Janota | Vojtech Janota | ||||||
| Vojtech Minarik | Vojtech Minarik | ||||||
|  | Vojtěch Král | ||||||
| Vsevolod Novikov | Vsevolod Novikov | ||||||
|  | Waldek Kozba | ||||||
| Walter J. Mack | Walter J. Mack | ||||||
| Ward Willats | Ward Willats | ||||||
|  | Warren Menzer | ||||||
| Wayne Haigh | Wayne Haigh | ||||||
| Werner Koch | Werner Koch | ||||||
| Wesley Laxton | Wesley Laxton | ||||||
| @@ -1200,7 +1227,6 @@ Wouter Van Rooy | |||||||
| Wu Yongzheng | Wu Yongzheng | ||||||
| Xavier Bouchoux | Xavier Bouchoux | ||||||
| Yaakov Selkowitz | Yaakov Selkowitz | ||||||
| Yamada Yasuharu |  | ||||||
| Yang Tse | Yang Tse | ||||||
| Yarram Sunil | Yarram Sunil | ||||||
| Yasuharu Yamada | Yasuharu Yamada | ||||||
| @@ -1210,6 +1236,7 @@ Yi Huang | |||||||
| Yingwei Liu | Yingwei Liu | ||||||
| Yousuke Kimoto | Yousuke Kimoto | ||||||
| Yukihiro Kawada | Yukihiro Kawada | ||||||
|  | Yun SangHo | ||||||
| Yuriy Sosov | Yuriy Sosov | ||||||
| Yves Arrouye | Yves Arrouye | ||||||
| Yves Lejeune | Yves Lejeune | ||||||
|   | |||||||
							
								
								
									
										49
									
								
								docs/THANKS-filter
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								docs/THANKS-filter
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,49 @@ | |||||||
|  | # This is a list of names we have recorded that already are thanked | ||||||
|  | # appropriately in THANKS. This list contains variations of their names and | ||||||
|  | # their "canonical" name. This file is used for scripting purposes to avoid | ||||||
|  | # duplicate entries and will not be included in release tarballs. | ||||||
|  | # When removing dupes that aren't identical names from THANKS, add a line | ||||||
|  | # here! | ||||||
|  | # | ||||||
|  | # Used-by: contributor.sh | ||||||
|  | s/Andres Garcia/Andrés García/ | ||||||
|  | s/Chris Conroy/Christopher Conroy/ | ||||||
|  | s/Francois Charlier/François Charlier/ | ||||||
|  | s/Gokhan Sengun/Gökhan Şengün/ | ||||||
|  | s/John Malmberg/John E. Malmberg/ | ||||||
|  | s/Luca Alteas/Luca Altea/ | ||||||
|  | s/Michal Gorny/Michał Górny/ | ||||||
|  | s/Michal Górny/Michał Górny/ | ||||||
|  | s/Moonesamy/S. Moonesamy/ | ||||||
|  | s/Pete Su$/Peter Su/ | ||||||
|  | s/Sam Listopad/Samuel Listopad/ | ||||||
|  | s/Sebastien Willemijns/Sébastien Willemijns/ | ||||||
|  | s/YAMADA Yasuharu/Yasuharu Yamada/ | ||||||
|  | s/Karl M$/Karl Moerder/ | ||||||
|  | s/Bjorn Stenberg/Björn Stenberg/ | ||||||
|  | s/upstream tests 305 and 404// | ||||||
|  | s/Gaël PORTAY/Gaël Portay/ | ||||||
|  | s/Romulo Ceccon/Romulo A. Ceccon/ | ||||||
|  | s/Nach M. S$/Nach M. S./ | ||||||
|  | s/Jay Satiro/Ray Satiro/ | ||||||
|  | s/Richard J. Moore/Richard Moore/ | ||||||
|  | s/Sergey Nikulov/Sergei Nikulov/ | ||||||
|  | s/Petr Písař/Petr Pisar/ | ||||||
|  | s/Nick Zitzmann (originally)/Nick Zitzmann/ | ||||||
|  | s/product-security at Apple// | ||||||
|  | s/IT DOES NOT WORK// | ||||||
|  | s/Albert Chin/Albert Chin-A-Young/ | ||||||
|  | s/Paras S/Paras Sethia/ | ||||||
|  | s/Дмитрий Фалько/Dmitry Falko/ | ||||||
|  | s/byte_bucket in the #curl IRC channel// | ||||||
|  | s/Michal Górny and Anthony G. Basile// | ||||||
|  | s/Alejandro Alvarez$/Alejandro Alvarez Ayllon/ | ||||||
|  | s/Ant Bryan/Anthony Bryan/ | ||||||
|  | s/Cédric Deltheil/Cédric Deltheil/ | ||||||
|  | s/Christian Hagele/Christian Hägele/ | ||||||
|  | s/douglas steinwand/Douglas Steinwand/ | ||||||
|  | s/Frank Van Uffelen and Fabian Hiernaux// | ||||||
|  | s/Rodrigo Silva (MestreLion)/Rodrigo Silva/ | ||||||
|  | s/tetetest tetetest// | ||||||
|  | s/Jiří Hruška/Jiri Hruska/ | ||||||
|  | s/Viktor Szakats/Viktor Szakáts/ | ||||||
							
								
								
									
										282
									
								
								docs/TODO
									
									
									
									
									
								
							
							
						
						
									
										282
									
								
								docs/TODO
									
									
									
									
									
								
							| @@ -19,10 +19,12 @@ | |||||||
|  1.6 Modified buffer size approach |  1.6 Modified buffer size approach | ||||||
|  1.7 Detect when called from within callbacks |  1.7 Detect when called from within callbacks | ||||||
|  1.8 Allow SSL (HTTPS) to proxy |  1.8 Allow SSL (HTTPS) to proxy | ||||||
|  |  1.9 Cache negative name resolves | ||||||
|  |  | ||||||
|  2. libcurl - multi interface |  2. libcurl - multi interface | ||||||
|  2.1 More non-blocking |  2.1 More non-blocking | ||||||
|  2.2 Fix HTTP Pipelining for PUT |  2.2 Fix HTTP Pipelining for PUT | ||||||
|  |  2.3 Better support for same name resolves | ||||||
|  |  | ||||||
|  3. Documentation |  3. Documentation | ||||||
|  3.1 Update date and version in man pages |  3.1 Update date and version in man pages | ||||||
| @@ -42,7 +44,6 @@ | |||||||
|  5.3 Rearrange request header order |  5.3 Rearrange request header order | ||||||
|  5.4 SPDY |  5.4 SPDY | ||||||
|  5.5 auth= in URLs |  5.5 auth= in URLs | ||||||
|  5.6 Digest via Windows SSPI |  | ||||||
|  |  | ||||||
|  6. TELNET |  6. TELNET | ||||||
|  6.1 ditch stdin |  6.1 ditch stdin | ||||||
| @@ -64,61 +65,71 @@ | |||||||
|  10. LDAP |  10. LDAP | ||||||
|  10.1 SASL based authentication mechanisms |  10.1 SASL based authentication mechanisms | ||||||
|   |   | ||||||
|  11. New protocols |  11. SMB | ||||||
|  11.1 RSYNC |  11.1 File listing support | ||||||
|  |  11.2 Honor file timestamps | ||||||
|  |  11.3 Use NTLMv2 | ||||||
|   |   | ||||||
|  12. SSL |  12. New protocols | ||||||
|  12.1 Disable specific versions |  12.1 RSYNC | ||||||
|  12.2 Provide mutex locking API |  | ||||||
|  12.3 Evaluate SSL patches |  | ||||||
|  12.4 Cache OpenSSL contexts |  | ||||||
|  12.5 Export session ids |  | ||||||
|  12.6 Provide callback for cert verification |  | ||||||
|  12.7 improve configure --with-ssl |  | ||||||
|  12.8 Support DANE |  | ||||||
|  |  | ||||||
|  13. GnuTLS |  13. SSL | ||||||
|  13.1 SSL engine stuff |  13.1 Disable specific versions | ||||||
|  13.2 check connection |  13.2 Provide mutex locking API | ||||||
|  |  13.3 Evaluate SSL patches | ||||||
|  |  13.4 Cache OpenSSL contexts | ||||||
|  |  13.5 Export session ids | ||||||
|  |  13.6 Provide callback for cert verification | ||||||
|  |  13.7 improve configure --with-ssl | ||||||
|  |  13.8 Support DANE | ||||||
|  |  | ||||||
|  14. SASL |  14. GnuTLS | ||||||
|  14.1 Other authentication mechanisms |  14.1 SSL engine stuff | ||||||
|  14.2 GSSAPI via GSS-API libraries |  14.2 check connection | ||||||
|  |  | ||||||
|  15. Client |  15. WinSSL/SChannel | ||||||
|  15.1 sync |  15.1 Add support for client certificate authentication | ||||||
|  15.2 glob posts |  15.2 Add support for custom server certificate validation | ||||||
|  15.3 prevent file overwriting |  15.3 Add support for the --ciphers option | ||||||
|  15.4 simultaneous parallel transfers |  | ||||||
|  15.5 provide formpost headers |  | ||||||
|  15.6 warning when setting an option |  | ||||||
|  |  | ||||||
|  16. Build |  16. SASL | ||||||
|  16.1 roffit |  16.1 Other authentication mechanisms | ||||||
|  |  16.2 Add QOP support to GSSAPI authentication | ||||||
|   |   | ||||||
|  17. Test suite |  17. Client | ||||||
|  17.1 SSL tunnel |  17.1 sync | ||||||
|  17.2 nicer lacking perl message |  17.2 glob posts | ||||||
|  17.3 more protocols supported |  17.3 prevent file overwriting | ||||||
|  17.4 more platforms supported |  17.4 simultaneous parallel transfers | ||||||
|  17.5 Add support for concurrent connections |  17.5 provide formpost headers | ||||||
|  |  17.6 warning when setting an option | ||||||
|  |  | ||||||
|  18. Next SONAME bump |  18. Build | ||||||
|  18.1 http-style HEAD output for FTP |  18.1 roffit | ||||||
|  18.2 combine error codes |  | ||||||
|  18.3 extend CURLOPT_SOCKOPTFUNCTION prototype |  | ||||||
|  |  | ||||||
|  19. Next major release |  19. Test suite | ||||||
|  19.1 cleanup return codes |  19.1 SSL tunnel | ||||||
|  19.2 remove obsolete defines |  19.2 nicer lacking perl message | ||||||
|  19.3 size_t |  19.3 more protocols supported | ||||||
|  19.4 remove several functions |  19.4 more platforms supported | ||||||
|  19.5 remove CURLOPT_FAILONERROR |  19.5 Add support for concurrent connections | ||||||
|  19.6 remove CURLOPT_DNS_USE_GLOBAL_CACHE |  | ||||||
|  19.7 remove progress meter from libcurl |  20. Next SONAME bump | ||||||
|  19.8 remove 'curl_httppost' from public |  20.1 http-style HEAD output for FTP | ||||||
|  19.9 have form functions use CURL handle argument |  20.2 combine error codes | ||||||
|  19.10 Add CURLOPT_MAIL_CLIENT option |  20.3 extend CURLOPT_SOCKOPTFUNCTION prototype | ||||||
|  |  | ||||||
|  |  21. Next major release | ||||||
|  |  21.1 cleanup return codes | ||||||
|  |  21.2 remove obsolete defines | ||||||
|  |  21.3 size_t | ||||||
|  |  21.4 remove several functions | ||||||
|  |  21.5 remove CURLOPT_FAILONERROR | ||||||
|  |  21.6 remove CURLOPT_DNS_USE_GLOBAL_CACHE | ||||||
|  |  21.7 remove progress meter from libcurl | ||||||
|  |  21.8 remove 'curl_httppost' from public | ||||||
|  |  21.9 have form functions use CURL handle argument | ||||||
|  |  21.10 Add CURLOPT_MAIL_CLIENT option | ||||||
|  |  | ||||||
| ============================================================================== | ============================================================================== | ||||||
|  |  | ||||||
| @@ -134,7 +145,7 @@ | |||||||
|  |  | ||||||
|  Use 'struct lifreq' and SIOCGLIFADDR instead of 'struct ifreq' and |  Use 'struct lifreq' and SIOCGLIFADDR instead of 'struct ifreq' and | ||||||
|  SIOCGIFADDR on newer Solaris versions as they claim the latter is obsolete. |  SIOCGIFADDR on newer Solaris versions as they claim the latter is obsolete. | ||||||
|  To support ipv6 interface addresses for network interfaces properly. |  To support IPv6 interface addresses for network interfaces properly. | ||||||
|  |  | ||||||
| 1.4 signal-based resolver timeouts | 1.4 signal-based resolver timeouts | ||||||
|  |  | ||||||
| @@ -193,6 +204,12 @@ | |||||||
|  ...and by Firefox soon: |  ...and by Firefox soon: | ||||||
|  https://bugzilla.mozilla.org/show_bug.cgi?id=378637 |  https://bugzilla.mozilla.org/show_bug.cgi?id=378637 | ||||||
|  |  | ||||||
|  | 1.9 Cache negative name resolves | ||||||
|  |  | ||||||
|  |  A name resolve that has failed is likely to fail when made again within a | ||||||
|  |  short period of time. Currently we only cache positive responses. | ||||||
|  |  | ||||||
|  |  | ||||||
| 2. libcurl - multi interface | 2. libcurl - multi interface | ||||||
|  |  | ||||||
| 2.1 More non-blocking | 2.1 More non-blocking | ||||||
| @@ -215,6 +232,15 @@ | |||||||
|  serial requests and currently libcurl only supports that for HEAD and GET |  serial requests and currently libcurl only supports that for HEAD and GET | ||||||
|  requests but it should also be possible for PUT. |  requests but it should also be possible for PUT. | ||||||
|  |  | ||||||
|  | 2.3 Better support for same name resolves | ||||||
|  |  | ||||||
|  |  If a name resolve has been initiated for name NN and a second easy handle | ||||||
|  |  wants to resolve that name as well, make it wait for the first resolve to end | ||||||
|  |  up in the cache instead of doing a second separate resolve. This is | ||||||
|  |  especially needed when adding many simultaneous handles using the same host | ||||||
|  |  name when the DNS resolver can get flooded. | ||||||
|  |  | ||||||
|  |  | ||||||
| 3. Documentation | 3. Documentation | ||||||
|  |  | ||||||
| 3.1 Update date and version in man pages | 3.1 Update date and version in man pages | ||||||
| @@ -314,12 +340,6 @@ This is not detailed in any FTP specification. | |||||||
|  |  | ||||||
|  Additionally this should be implemented for proxy base URLs as well. |  Additionally this should be implemented for proxy base URLs as well. | ||||||
|  |  | ||||||
| 5.6 Digest via Windows SSPI |  | ||||||
|  |  | ||||||
|  libcurl already supports HTTP Digest Authentication via native routines as well |  | ||||||
|  as SASL Digest via both Windows SSPI and native routines. In addition to this |  | ||||||
|  libcurl should also support HTTP Digest Authentication via Windows SSPI. |  | ||||||
|  |  | ||||||
| 6. TELNET | 6. TELNET | ||||||
|  |  | ||||||
| 6.1 ditch stdin | 6.1 ditch stdin | ||||||
| @@ -383,32 +403,47 @@ to provide the data to send. | |||||||
|  be possible to use ldap_bind_s() instead specifying the security context |  be possible to use ldap_bind_s() instead specifying the security context | ||||||
|  information ourselves. |  information ourselves. | ||||||
|  |  | ||||||
| 11. New protocols | 11. SMB | ||||||
|  |  | ||||||
| 11.1 RSYNC | 11.1 File listing support | ||||||
|  |  | ||||||
|  | Add support for listing the contents of a SMB share. The output should probably | ||||||
|  | be the same as/similar to FTP. | ||||||
|  |  | ||||||
|  | 11.2 Honor file timestamps | ||||||
|  |  | ||||||
|  | The timestamp of the transfered file should reflect that of the original file. | ||||||
|  |  | ||||||
|  | 11.3 Use NTLMv2 | ||||||
|  |  | ||||||
|  | Currently the SMB authentication uses NTLMv1. | ||||||
|  |  | ||||||
|  | 12. New protocols | ||||||
|  |  | ||||||
|  | 12.1 RSYNC | ||||||
|  |  | ||||||
|  There's no RFC for the protocol or an URI/URL format.  An implementation |  There's no RFC for the protocol or an URI/URL format.  An implementation | ||||||
|  should most probably use an existing rsync library, such as librsync. |  should most probably use an existing rsync library, such as librsync. | ||||||
|  |  | ||||||
| 12. SSL | 13. SSL | ||||||
|  |  | ||||||
| 12.1 Disable specific versions | 13.1 Disable specific versions | ||||||
|  |  | ||||||
|  Provide an option that allows for disabling specific SSL versions, such as |  Provide an option that allows for disabling specific SSL versions, such as | ||||||
|  SSLv2 http://curl.haxx.se/bug/feature.cgi?id=1767276 |  SSLv2 http://curl.haxx.se/bug/feature.cgi?id=1767276 | ||||||
|  |  | ||||||
| 12.2 Provide mutex locking API | 13.2 Provide mutex locking API | ||||||
|  |  | ||||||
|  Provide a libcurl API for setting mutex callbacks in the underlying SSL |  Provide a libcurl API for setting mutex callbacks in the underlying SSL | ||||||
|  library, so that the same application code can use mutex-locking |  library, so that the same application code can use mutex-locking | ||||||
|  independently of OpenSSL or GnutTLS being used. |  independently of OpenSSL or GnutTLS being used. | ||||||
|  |  | ||||||
| 12.3 Evaluate SSL patches | 13.3 Evaluate SSL patches | ||||||
|  |  | ||||||
|  Evaluate/apply Gertjan van Wingerde's SSL patches: |  Evaluate/apply Gertjan van Wingerde's SSL patches: | ||||||
|  http://curl.haxx.se/mail/lib-2004-03/0087.html |  http://curl.haxx.se/mail/lib-2004-03/0087.html | ||||||
|  |  | ||||||
| 12.4 Cache OpenSSL contexts | 13.4 Cache OpenSSL contexts | ||||||
|  |  | ||||||
|  "Look at SSL cafile - quick traces look to me like these are done on every |  "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 |  request as well, when they should only be necessary once per SSL context (or | ||||||
| @@ -418,7 +453,7 @@ to provide the data to send. | |||||||
|  style connections are re-used. It will make us use slightly more memory but |  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. |  it will libcurl do less creations and deletions of SSL contexts. | ||||||
|  |  | ||||||
| 12.5 Export session ids | 13.5 Export session ids | ||||||
|  |  | ||||||
|  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 | ||||||
| @@ -426,18 +461,18 @@ to provide the data to send. | |||||||
|  the state from such a buffer at a later date - this is used by mod_ssl for |  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". |  apache to implement and SSL session ID cache". | ||||||
|  |  | ||||||
| 12.6 Provide callback for cert verification | 13.6 Provide callback for cert verification | ||||||
|  |  | ||||||
|  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 | ||||||
|  it be? There's so much that could be done if it were! |  it be? There's so much that could be done if it were! | ||||||
|  |  | ||||||
| 12.7 improve configure --with-ssl | 13.7 improve configure --with-ssl | ||||||
|  |  | ||||||
|  make the configure --with-ssl option first check for OpenSSL, then GnuTLS, |  make the configure --with-ssl option first check for OpenSSL, then GnuTLS, | ||||||
|  then NSS... |  then NSS... | ||||||
|  |  | ||||||
| 12.8 Support DANE | 13.8 Support DANE | ||||||
|  |  | ||||||
|  DNS-Based Authentication of Named Entities (DANE) is a way to provide SSL |  DNS-Based Authentication of Named Entities (DANE) is a way to provide SSL | ||||||
|  keys and certs over DNS using DNSSEC as an alternative to the CA model. |  keys and certs over DNS using DNSSEC as an alternative to the CA model. | ||||||
| @@ -449,32 +484,69 @@ to provide the data to send. | |||||||
|  http://curl.haxx.se/mail/lib-2013-03/0103.html . libunbound may be the |  http://curl.haxx.se/mail/lib-2013-03/0103.html . libunbound may be the | ||||||
|  correct library to base this development on. |  correct library to base this development on. | ||||||
|  |  | ||||||
| 13. GnuTLS | 14. GnuTLS | ||||||
|  |  | ||||||
| 13.1 SSL engine stuff | 14.1 SSL engine stuff | ||||||
|  |  | ||||||
|  Is this even possible? |  Is this even possible? | ||||||
|  |  | ||||||
| 13.2 check connection | 14.2 check connection | ||||||
|  |  | ||||||
|  Add a way to check if the connection seems to be alive, to correspond to the |  Add a way to check if the connection seems to be alive, to correspond to the | ||||||
|  SSL_peak() way we use with OpenSSL. |  SSL_peak() way we use with OpenSSL. | ||||||
|  |  | ||||||
| 14. SASL | 15. WinSSL/SChannel | ||||||
|  |  | ||||||
| 14.1 Other authentication mechanisms | 15.1 Add support for client certificate authentication | ||||||
|  |  | ||||||
|  Add support for other authentication mechanisms such as EXTERNAL, OLP, |  WinSSL/SChannel currently makes use of the OS-level system and user | ||||||
|  |  certificate and private key stores. This does not allow the application | ||||||
|  |  or the user to supply a custom client certificate using curl or libcurl. | ||||||
|  |  | ||||||
|  |  Therefore support for the existing -E/--cert and --key options should be | ||||||
|  |  implemented by supplying a custom certificate to the SChannel APIs, see: | ||||||
|  |  - Getting a Certificate for Schannel | ||||||
|  |    http://msdn.microsoft.com/en-us/library/windows/desktop/aa375447.aspx | ||||||
|  |  | ||||||
|  | 15.2 Add support for custom server certificate validation | ||||||
|  |  | ||||||
|  |  WinSSL/SChannel currently makes use of the OS-level system and user | ||||||
|  |  certificate trust store. This does not allow the application or user to | ||||||
|  |  customize the server certificate validation process using curl or libcurl. | ||||||
|  |  | ||||||
|  |  Therefore support for the existing --cacert or --capath options should be | ||||||
|  |  implemented by supplying a custom certificate to the SChannel APIs, see: | ||||||
|  |  - Getting a Certificate for Schannel | ||||||
|  |    http://msdn.microsoft.com/en-us/library/windows/desktop/aa375447.aspx | ||||||
|  |  | ||||||
|  | 15.3 Add support for the --ciphers option | ||||||
|  |  | ||||||
|  |  The cipher suites used by WinSSL/SChannel are configured on an OS-level | ||||||
|  |  instead of an application-level. This does not allow the application or | ||||||
|  |  the user to customize the configured cipher suites using curl or libcurl. | ||||||
|  |  | ||||||
|  |  Therefore support for the existing --ciphers option should be implemented | ||||||
|  |  by mapping the OpenSSL/GnuTLS cipher suites to the SChannel APIs, see | ||||||
|  |  - Specifying Schannel Ciphers and Cipher Strengths | ||||||
|  |    http://msdn.microsoft.com/en-us/library/windows/desktop/aa380161.aspx | ||||||
|  |  | ||||||
|  | 16. SASL | ||||||
|  |  | ||||||
|  | 16.1 Other authentication mechanisms | ||||||
|  |  | ||||||
|  |  Add support for other authentication mechanisms such as OLP, | ||||||
|  GSS-SPNEGO and others. |  GSS-SPNEGO and others. | ||||||
|   |   | ||||||
| 14.2 GSSAPI via GSS-API libraries | 16.2 Add QOP support to GSSAPI authentication | ||||||
|  |  | ||||||
|  Add support for GSSAPI authentication via third-party GSS-API libraries, such |  Currently the GSSAPI authentication only supports the default QOP of auth | ||||||
|  as Heimdal and MIT Kerberos. |  (Authentication), whilst Kerberos V5 supports both auth-int (Authentication | ||||||
|  |  with integrity protection) and auth-conf (Authentication with integrity and | ||||||
|  |  privacy protection). | ||||||
|  |  | ||||||
| 15. Client | 17. Client | ||||||
|  |  | ||||||
| 15.1 sync | 17.1 sync | ||||||
|  |  | ||||||
|  "curl --sync http://example.com/feed[1-100].rss" or |  "curl --sync http://example.com/feed[1-100].rss" or | ||||||
|  "curl --sync http://example.net/{index,calendar,history}.html" |  "curl --sync http://example.net/{index,calendar,history}.html" | ||||||
| @@ -483,12 +555,12 @@ to provide the data to send. | |||||||
|  remote file is newer than the local file. A Last-Modified HTTP date header |  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. |  should also be used to set the mod date on the downloaded file. | ||||||
|  |  | ||||||
| 15.2 glob posts | 17.2 glob posts | ||||||
|  |  | ||||||
|  Globbing support for -d and -F, as in 'curl -d "name=foo[0-9]" URL'. |  Globbing support for -d and -F, as in 'curl -d "name=foo[0-9]" URL'. | ||||||
|  This is easily scripted though. |  This is easily scripted though. | ||||||
|  |  | ||||||
| 15.3 prevent file overwriting | 17.3 prevent file overwriting | ||||||
|  |  | ||||||
|  Add an option that prevents cURL from overwriting existing local files. When |  Add an option that prevents cURL from overwriting existing local files. When | ||||||
|  used, and there already is an existing file with the target file name |  used, and there already is an existing file with the target file name | ||||||
| @@ -496,14 +568,14 @@ to provide the data to send. | |||||||
|  existing). So that index.html becomes first index.html.1 and then |  existing). So that index.html becomes first index.html.1 and then | ||||||
|  index.html.2 etc. |  index.html.2 etc. | ||||||
|  |  | ||||||
| 15.4 simultaneous parallel transfers | 17.4 simultaneous parallel transfers | ||||||
|  |  | ||||||
|  The client could be told to use maximum N simultaneous parallel transfers and |  The client could be told to use maximum N simultaneous parallel transfers and | ||||||
|  then just make sure that happens. It should of course not make more than one |  then just make sure that happens. It should of course not make more than one | ||||||
|  connection to the same remote host. This would require the client to use the |  connection to the same remote host. This would require the client to use the | ||||||
|  multi interface. http://curl.haxx.se/bug/feature.cgi?id=1558595 |  multi interface. http://curl.haxx.se/bug/feature.cgi?id=1558595 | ||||||
|  |  | ||||||
| 15.5 provide formpost headers | 17.5 provide formpost headers | ||||||
|  |  | ||||||
|  Extending the capabilities of the multipart formposting. How about leaving |  Extending the capabilities of the multipart formposting. How about leaving | ||||||
|  the ';type=foo' syntax as it is and adding an extra tag (headers) which |  the ';type=foo' syntax as it is and adding an extra tag (headers) which | ||||||
| @@ -517,43 +589,43 @@ to provide the data to send. | |||||||
|  which should overwrite the program reasonable defaults (plain/text, |  which should overwrite the program reasonable defaults (plain/text, | ||||||
|  8bit...) |  8bit...) | ||||||
|  |  | ||||||
| 15.6 warning when setting an option | 17.6 warning when setting an option | ||||||
|  |  | ||||||
|   Display a warning when libcurl returns an error when setting an option. |   Display a warning when libcurl returns an error when setting an option. | ||||||
|   This can be useful to tell when support for a particular feature hasn't been |   This can be useful to tell when support for a particular feature hasn't been | ||||||
|   compiled into the library. |   compiled into the library. | ||||||
|  |  | ||||||
| 16. Build | 18. Build | ||||||
|  |  | ||||||
| 16.1 roffit | 18.1 roffit | ||||||
|  |  | ||||||
|  Consider extending 'roffit' to produce decent ASCII output, and use that |  Consider extending 'roffit' to produce decent ASCII output, and use that | ||||||
|  instead of (g)nroff when building src/tool_hugehelp.c |  instead of (g)nroff when building src/tool_hugehelp.c | ||||||
|  |  | ||||||
| 17. Test suite | 19. Test suite | ||||||
|  |  | ||||||
| 17.1 SSL tunnel | 19.1 SSL tunnel | ||||||
|  |  | ||||||
|  Make our own version of stunnel for simple port forwarding to enable HTTPS |  Make our own version of stunnel for simple port forwarding to enable HTTPS | ||||||
|  and FTP-SSL tests without the stunnel dependency, and it could allow us to |  and FTP-SSL tests without the stunnel dependency, and it could allow us to | ||||||
|  provide test tools built with either OpenSSL or GnuTLS |  provide test tools built with either OpenSSL or GnuTLS | ||||||
|  |  | ||||||
| 17.2 nicer lacking perl message | 19.2 nicer lacking perl message | ||||||
|  |  | ||||||
|  If perl wasn't found by the configure script, don't attempt to run the tests |  If perl wasn't found by the configure script, don't attempt to run the tests | ||||||
|  but explain something nice why it doesn't. |  but explain something nice why it doesn't. | ||||||
|  |  | ||||||
| 17.3 more protocols supported | 19.3 more protocols supported | ||||||
|  |  | ||||||
|  Extend the test suite to include more protocols. The telnet could just do FTP |  Extend the test suite to include more protocols. The telnet could just do FTP | ||||||
|  or http operations (for which we have test servers). |  or http operations (for which we have test servers). | ||||||
|  |  | ||||||
| 17.4 more platforms supported | 19.4 more platforms supported | ||||||
|  |  | ||||||
|  Make the test suite work on more platforms. OpenBSD and Mac OS. Remove |  Make the test suite work on more platforms. OpenBSD and Mac OS. Remove | ||||||
|  fork()s and it should become even more portable. |  fork()s and it should become even more portable. | ||||||
|  |  | ||||||
| 17.5 Add support for concurrent connections | 19.5 Add support for concurrent connections | ||||||
|  |  | ||||||
|  Tests 836, 882 and 938 were designed to verify that separate connections aren't |  Tests 836, 882 and 938 were designed to verify that separate connections aren't | ||||||
|  used when using different login credentials in protocols that shouldn't re-use |  used when using different login credentials in protocols that shouldn't re-use | ||||||
| @@ -567,14 +639,14 @@ to provide the data to send. | |||||||
|  and thus the wait for connections loop is never entered to receive the second |  and thus the wait for connections loop is never entered to receive the second | ||||||
|  connection. |  connection. | ||||||
|  |  | ||||||
| 18. Next SONAME bump | 20. Next SONAME bump | ||||||
|  |  | ||||||
| 18.1 http-style HEAD output for FTP | 20.1 http-style HEAD output for FTP | ||||||
|  |  | ||||||
|  #undef CURL_FTP_HTTPSTYLE_HEAD in lib/ftp.c to remove the HTTP-style headers |  #undef CURL_FTP_HTTPSTYLE_HEAD in lib/ftp.c to remove the HTTP-style headers | ||||||
|  from being output in NOBODY requests over FTP |  from being output in NOBODY requests over FTP | ||||||
|  |  | ||||||
| 18.2 combine error codes | 20.2 combine error codes | ||||||
|  |  | ||||||
|  Combine some of the error codes to remove duplicates.  The original |  Combine some of the error codes to remove duplicates.  The original | ||||||
|  numbering should not be changed, and the old identifiers would be |  numbering should not be changed, and the old identifiers would be | ||||||
| @@ -599,29 +671,29 @@ to provide the data to send. | |||||||
|  |  | ||||||
|     CURLE_TFTP_PERM => CURLE_REMOTE_ACCESS_DENIED |     CURLE_TFTP_PERM => CURLE_REMOTE_ACCESS_DENIED | ||||||
|  |  | ||||||
| 18.3 extend CURLOPT_SOCKOPTFUNCTION prototype | 20.3 extend CURLOPT_SOCKOPTFUNCTION prototype | ||||||
|  |  | ||||||
|  The current prototype only provides 'purpose' that tells what the |  The current prototype only provides 'purpose' that tells what the | ||||||
|  connection/socket is for, but not any protocol or similar. It makes it hard |  connection/socket is for, but not any protocol or similar. It makes it hard | ||||||
|  for applications to differentiate on TCP vs UDP and even HTTP vs FTP and |  for applications to differentiate on TCP vs UDP and even HTTP vs FTP and | ||||||
|  similar. |  similar. | ||||||
|  |  | ||||||
| 19. Next major release | 21. Next major release | ||||||
|  |  | ||||||
| 19.1 cleanup return codes | 21.1 cleanup return codes | ||||||
|  |  | ||||||
|  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. | ||||||
|  |  | ||||||
| 19.2 remove obsolete defines | 21.2 remove obsolete defines | ||||||
|  |  | ||||||
|  remove obsolete defines from curl/curl.h |  remove obsolete defines from curl/curl.h | ||||||
|  |  | ||||||
| 19.3 size_t | 21.3 size_t | ||||||
|  |  | ||||||
|  make several functions use size_t instead of int in their APIs |  make several functions use size_t instead of int in their APIs | ||||||
|  |  | ||||||
| 19.4 remove several functions | 21.4 remove several functions | ||||||
|  |  | ||||||
|  remove the following functions from the public API: |  remove the following functions from the public API: | ||||||
|  |  | ||||||
| @@ -642,18 +714,18 @@ to provide the data to send. | |||||||
|  |  | ||||||
|  curl_multi_socket_all |  curl_multi_socket_all | ||||||
|  |  | ||||||
| 19.5 remove CURLOPT_FAILONERROR | 21.5 remove CURLOPT_FAILONERROR | ||||||
|  |  | ||||||
|  Remove support for CURLOPT_FAILONERROR, it has gotten too kludgy and weird |  Remove support for CURLOPT_FAILONERROR, it has gotten too kludgy and weird | ||||||
|  internally. Let the app judge success or not for itself. |  internally. Let the app judge success or not for itself. | ||||||
|  |  | ||||||
| 19.6 remove CURLOPT_DNS_USE_GLOBAL_CACHE | 21.6 remove CURLOPT_DNS_USE_GLOBAL_CACHE | ||||||
|  |  | ||||||
|  Remove support for a global DNS cache. Anything global is silly, and we |  Remove support for a global DNS cache. Anything global is silly, and we | ||||||
|  already offer the share interface for the same functionality but done |  already offer the share interface for the same functionality but done | ||||||
|  "right". |  "right". | ||||||
|  |  | ||||||
| 19.7 remove progress meter from libcurl | 21.7 remove progress meter from libcurl | ||||||
|  |  | ||||||
|  The internally provided progress meter output doesn't belong in the library. |  The internally provided progress meter output doesn't belong in the library. | ||||||
|  Basically no application wants it (apart from curl) but instead applications |  Basically no application wants it (apart from curl) but instead applications | ||||||
| @@ -663,7 +735,7 @@ to provide the data to send. | |||||||
|  variable types passed to it instead of doubles so that big files work |  variable types passed to it instead of doubles so that big files work | ||||||
|  correctly. |  correctly. | ||||||
|  |  | ||||||
| 19.8 remove 'curl_httppost' from public | 21.8 remove 'curl_httppost' from public | ||||||
|  |  | ||||||
|  curl_formadd() was made to fill in a public struct, but the fact that the |  curl_formadd() was made to fill in a public struct, but the fact that the | ||||||
|  struct is public is never really used by application for their own advantage |  struct is public is never really used by application for their own advantage | ||||||
| @@ -672,7 +744,7 @@ to provide the data to send. | |||||||
|  Changing them to return a private handle will benefit the implementation and |  Changing them to return a private handle will benefit the implementation and | ||||||
|  allow us much greater freedoms while still maintaining a solid API and ABI. |  allow us much greater freedoms while still maintaining a solid API and ABI. | ||||||
|  |  | ||||||
| 19.9 have form functions use CURL handle argument | 21.9 have form functions use CURL handle argument | ||||||
|  |  | ||||||
|  curl_formadd() and curl_formget() both currently have no CURL handle |  curl_formadd() and curl_formget() both currently have no CURL handle | ||||||
|  argument, but both can use a callback that is set in the easy handle, and |  argument, but both can use a callback that is set in the easy handle, and | ||||||
| @@ -680,7 +752,7 @@ to provide the data to send. | |||||||
|  curl_easy_perform() (or similar) called - which is hard to grasp and a design |  curl_easy_perform() (or similar) called - which is hard to grasp and a design | ||||||
|  mistake. |  mistake. | ||||||
|  |  | ||||||
| 19.10 Add CURLOPT_MAIL_CLIENT option | 21.10 Add CURLOPT_MAIL_CLIENT option | ||||||
|  |  | ||||||
|  Rather than use the URL to specify the mail client string to present in the |  Rather than use the URL to specify the mail client string to present in the | ||||||
|  HELO and EHLO commands, libcurl should support a new CURLOPT specifically for |  HELO and EHLO commands, libcurl should support a new CURLOPT specifically for | ||||||
|   | |||||||
| @@ -1,4 +1,3 @@ | |||||||
| Updated: Dec 24, 2013 (http://curl.haxx.se/docs/httpscripting.html) |  | ||||||
|                                   _   _ ____  _ |                                   _   _ ____  _ | ||||||
|                               ___| | | |  _ \| | |                               ___| | | |  _ \| | | ||||||
|                              / __| | | | |_) | | |                              / __| | | | |_) | | | ||||||
| @@ -557,8 +556,10 @@ The Art Of Scripting HTTP Requests Using Curl | |||||||
|  truckload of advanced features to allow all those encryptions and key |  truckload of advanced features to allow all those encryptions and key | ||||||
|  infrastructure mechanisms encrypted HTTP requires. |  infrastructure mechanisms encrypted HTTP requires. | ||||||
|  |  | ||||||
|  Curl supports encrypted fetches thanks to the freely available OpenSSL |  Curl supports encrypted fetches when built to use a TLS library and it can be | ||||||
|  libraries. To get a page from a HTTPS server, simply run curl like: |  built to use one out of a fairly large set of libraries - "curl -V" will show | ||||||
|  |  which one your curl was built to use (if any!). To get a page from a HTTPS | ||||||
|  |  server, simply run curl like: | ||||||
|  |  | ||||||
|         curl https://secure.example.com |         curl https://secure.example.com | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										57
									
								
								docs/curl.1
									
									
									
									
									
								
							
							
						
						
									
										57
									
								
								docs/curl.1
									
									
									
									
									
								
							| @@ -5,7 +5,7 @@ | |||||||
| .\" *                            | (__| |_| |  _ <| |___ | .\" *                            | (__| |_| |  _ <| |___ | ||||||
| .\" *                             \___|\___/|_| \_\_____| | .\" *                             \___|\___/|_| \_\_____| | ||||||
| .\" * | .\" * | ||||||
| .\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al. | .\" * Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||||
| .\" * | .\" * | ||||||
| .\" * This software is licensed as described in the file COPYING, which | .\" * This software is licensed as described in the file COPYING, which | ||||||
| .\" * you should have received as part of this distribution. The terms | .\" * you should have received as part of this distribution. The terms | ||||||
| @@ -20,7 +20,7 @@ | |||||||
| .\" * | .\" * | ||||||
| .\" ************************************************************************** | .\" ************************************************************************** | ||||||
| .\" | .\" | ||||||
| .TH curl 1 "2 Aug 2014" "Curl 7.38.0" "Curl Manual" | .TH curl 1 "30 Nov 2014" "Curl 7.40.0" "Curl Manual" | ||||||
| .SH NAME | .SH NAME | ||||||
| curl \- transfer a URL | curl \- transfer a URL | ||||||
| .SH SYNOPSIS | .SH SYNOPSIS | ||||||
| @@ -30,8 +30,8 @@ curl \- transfer a URL | |||||||
| .B curl | .B curl | ||||||
| is a tool to transfer data from or to a server, using one of the supported | is a tool to transfer data from or to a server, using one of the supported | ||||||
| protocols (DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, | protocols (DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, | ||||||
| LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, TELNET and TFTP).  The | LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET | ||||||
| command is designed to work without user interaction. | and TFTP). The command is designed to work without user interaction. | ||||||
|  |  | ||||||
| curl offers a busload of useful tricks like proxy support, user | curl offers a busload of useful tricks like proxy support, user | ||||||
| authentication, FTP upload, HTTP post, SSL connections, cookies, file transfer | authentication, FTP upload, HTTP post, SSL connections, cookies, file transfer | ||||||
| @@ -78,6 +78,11 @@ probably have to put the full URL within double quotes to avoid the shell from | |||||||
| interfering with it. This also goes for other characters treated special, like | interfering with it. This also goes for other characters treated special, like | ||||||
| for example '&', '?' and '*'. | for example '&', '?' and '*'. | ||||||
|  |  | ||||||
|  | Provide the IPv6 zone index in the URL with an escaped percentage sign and the | ||||||
|  | interface name. Like in | ||||||
|  |  | ||||||
|  |   http://[fe80::3%25eth0]/ | ||||||
|  |  | ||||||
| If you specify URL without protocol:// prefix, curl will attempt to guess what | If you specify URL without protocol:// prefix, curl will attempt to guess what | ||||||
| protocol you might want. It will then default to HTTP but try other protocols | protocol you might want. It will then default to HTTP but try other protocols | ||||||
| based on often-used host name prefixes. For example, for host names starting | based on often-used host name prefixes. For example, for host names starting | ||||||
| @@ -172,7 +177,7 @@ considered insecure. | |||||||
| (SSL) Forces curl to use SSL version 3 when negotiating with a remote SSL | (SSL) Forces curl to use SSL version 3 when negotiating with a remote SSL | ||||||
| server. Sometimes curl is built without SSLv3 support. | server. Sometimes curl is built without SSLv3 support. | ||||||
| .IP "-4, --ipv4" | .IP "-4, --ipv4" | ||||||
| Tis option tells curl to resolve names to IPv4 addresses only, and not for | This option tells curl to resolve names to IPv4 addresses only, and not for | ||||||
| example try IPv6. | example try IPv6. | ||||||
| .IP "-6, --ipv6" | .IP "-6, --ipv6" | ||||||
| This option tells curl to resolve names to IPv6 addresses only, and not for | This option tells curl to resolve names to IPv6 addresses only, and not for | ||||||
| @@ -293,7 +298,9 @@ uses no dir or if the dirs it mentions already exist, no dir will be created. | |||||||
| To create remote directories when using FTP or SFTP, try | To create remote directories when using FTP or SFTP, try | ||||||
| \fI--ftp-create-dirs\fP. | \fI--ftp-create-dirs\fP. | ||||||
| .IP "--crlf" | .IP "--crlf" | ||||||
| (FTP) Convert LF to CRLF in upload. Useful for MVS (OS/390). | Convert LF to CRLF in upload. Useful for MVS (OS/390). | ||||||
|  |  | ||||||
|  | (SMTP added in 7.40.0) | ||||||
| .IP "--crlfile <file>" | .IP "--crlfile <file>" | ||||||
| (HTTPS/FTPS) Provide a file using PEM format with a Certificate Revocation | (HTTPS/FTPS) Provide a file using PEM format with a Certificate Revocation | ||||||
| List that may specify peer certificates that are to be considered revoked. | List that may specify peer certificates that are to be considered revoked. | ||||||
| @@ -534,17 +541,27 @@ If this option is set, the default capath value will be ignored, and if it is | |||||||
| used several times, the last one will be used. | used several times, the last one will be used. | ||||||
| .IP "--pinnedpubkey <pinned public key>" | .IP "--pinnedpubkey <pinned public key>" | ||||||
| (SSL) Tells curl to use the specified public key file to verify the peer. The | (SSL) Tells curl to use the specified public key file to verify the peer. The | ||||||
| file must contain a single public key in DER format. | file must contain a single public key in PEM or DER format. | ||||||
|  |  | ||||||
| When negotiating a TLS or SSL connection, the server sends a certificate | When negotiating a TLS or SSL connection, the server sends a certificate | ||||||
| indicating its identity. A public key is extracted from this certificate and | indicating its identity. A public key is extracted from this certificate and | ||||||
| if it does not exactly match the public key provided to this option, curl will | if it does not exactly match the public key provided to this option, curl will | ||||||
| abort the connection before sending or receiving any data. | abort the connection before sending or receiving any data. | ||||||
|  |  | ||||||
| This is currently only implemented in the OpenSSL and GnuTLS backends. | This is currently only implemented in the OpenSSL, GnuTLS and GSKit backends. | ||||||
|  |  | ||||||
| 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. | ||||||
| (Added in 7.39.0) | (Added in 7.39.0) | ||||||
|  | .IP "--cert-status" | ||||||
|  | (SSL) Tells curl to verify the status of the server certificate by using the | ||||||
|  | Certificate Status Request (aka. OCSP stapling) TLS extension. | ||||||
|  |  | ||||||
|  | If this option is enabled and the server sends an invalid (e.g. expired) | ||||||
|  | response, if the response suggests that the server certificate has been revoked, | ||||||
|  | or no response at all is received, the verification fails. | ||||||
|  |  | ||||||
|  | This is currently only implemented in the OpenSSL, GnuTLS and NSS backends. | ||||||
|  | (Added in 7.41.0) | ||||||
| .IP "-f, --fail" | .IP "-f, --fail" | ||||||
| (HTTP) Fail silently (no output at all) on server errors. This is mostly done | (HTTP) Fail silently (no output at all) on server errors. This is mostly done | ||||||
| to better enable scripts etc to better deal with failed attempts. In normal | to better enable scripts etc to better deal with failed attempts. In normal | ||||||
| @@ -726,6 +743,12 @@ Example: | |||||||
|  |  | ||||||
| \&# curl -H "X-First-Name: Joe" http://192.168.0.1/ | \&# curl -H "X-First-Name: Joe" http://192.168.0.1/ | ||||||
|  |  | ||||||
|  | \fBWARNING\fP: headers set with this option will be set in all requests - even | ||||||
|  | after redirects are followed, like when told with \fB-L, --location\fP. This | ||||||
|  | can lead to the header being sent to other hosts than the original host, so | ||||||
|  | sensitive headers should be used with caution combined with following | ||||||
|  | redirects. | ||||||
|  |  | ||||||
| This option can be used multiple times to add/replace/remove multiple headers. | This option can be used multiple times to add/replace/remove multiple headers. | ||||||
| .IP "--hostpubmd5 <md5>" | .IP "--hostpubmd5 <md5>" | ||||||
| (SCP/SFTP) Pass a string containing 32 hexadecimal digits. The string should | (SCP/SFTP) Pass a string containing 32 hexadecimal digits. The string should | ||||||
| @@ -806,12 +829,12 @@ the following places in this order: | |||||||
|  |  | ||||||
| 1) curl tries to find the "home dir": It first checks for the CURL_HOME and | 1) curl tries to find the "home dir": It first checks for the CURL_HOME and | ||||||
| then the HOME environment variables. Failing that, it uses getpwuid() on | then the HOME environment variables. Failing that, it uses getpwuid() on | ||||||
| UNIX-like systems (which returns the home dir given the current user in your | Unix-like systems (which returns the home dir given the current user in your | ||||||
| system). On Windows, it then checks for the APPDATA variable, or as a last | system). On Windows, it then checks for the APPDATA variable, or as a last | ||||||
| resort the '%USERPROFILE%\\Application Data'. | resort the '%USERPROFILE%\\Application Data'. | ||||||
|  |  | ||||||
| 2) On windows, if there is no _curlrc file in the home dir, it checks for one | 2) On windows, if there is no _curlrc file in the home dir, it checks for one | ||||||
| in the same dir the curl executable is placed. On UNIX-like systems, it will | in the same dir the curl executable is placed. On Unix-like systems, it will | ||||||
| simply try to load .curlrc from the determined home dir. | simply try to load .curlrc from the determined home dir. | ||||||
|  |  | ||||||
| .nf | .nf | ||||||
| @@ -1019,7 +1042,7 @@ in Metalink file, hash check will fail. | |||||||
| .IP "-n, --netrc" | .IP "-n, --netrc" | ||||||
| Makes curl scan the \fI.netrc\fP (\fI_netrc\fP on Windows) file in the user's | Makes curl scan the \fI.netrc\fP (\fI_netrc\fP on Windows) file in the user's | ||||||
| home directory for login name and password. This is typically used for FTP on | home directory for login name and password. This is typically used for FTP on | ||||||
| UNIX. If used with HTTP, curl will enable user authentication. See | Unix. If used with HTTP, curl will enable user authentication. See | ||||||
| .BR netrc(4) | .BR netrc(4) | ||||||
| or | or | ||||||
| .BR ftp(1) | .BR ftp(1) | ||||||
| @@ -1655,6 +1678,9 @@ If this option is used several times, the last one will be used. | |||||||
| .IP "--trace-time" | .IP "--trace-time" | ||||||
| Prepends a time stamp to each trace or verbose line that curl displays. | Prepends a time stamp to each trace or verbose line that curl displays. | ||||||
| (Added in 7.14.0) | (Added in 7.14.0) | ||||||
|  | .IP "--unix-socket <path>" | ||||||
|  | (HTTP) Connect through this Unix domain socket, instead of using the | ||||||
|  | network. (Added in 7.40.0) | ||||||
| .IP "-u, --user <user:password>" | .IP "-u, --user <user:password>" | ||||||
| Specify the user name and password to use for server authentication. Overrides | Specify the user name and password to use for server authentication. Overrides | ||||||
| \fI-n, --netrc\fP and \fI--netrc-optional\fP. | \fI-n, --netrc\fP and \fI--netrc-optional\fP. | ||||||
| @@ -1679,7 +1705,7 @@ Principal Name) formats. For example, EXAMPLE\\user and user@example.com | |||||||
| respectively. | respectively. | ||||||
|  |  | ||||||
| If you use a Windows SSPI-enabled curl binary and perform Kerberos V5, | If you use a Windows SSPI-enabled curl binary and perform Kerberos V5, | ||||||
| Negotiate, NTLM or DIGEST-MD5 authentication then you can tell curl to select | Negotiate, NTLM or Digest authentication then you can tell curl to select | ||||||
| the user name and password from your environment by specifying a single colon | the user name and password from your environment by specifying a single colon | ||||||
| with this option: "-u :". | with this option: "-u :". | ||||||
|  |  | ||||||
| @@ -1874,7 +1900,7 @@ password. | |||||||
| 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 "-X, --request <command>" | .IP "-X, --request <command>" | ||||||
| (HTTP) Specifies a custom request method to use when communicating with the | (HTTP) Specifies a custom request method to use when communicating with the | ||||||
| HTTP server.  The specified request will be used instead of the method | HTTP server.  The specified request method will be used instead of the method | ||||||
| otherwise used (which defaults to GET). Read the HTTP 1.1 specification for | otherwise used (which defaults to GET). Read the HTTP 1.1 specification for | ||||||
| details and explanations. Common additional HTTP requests include PUT and | details and explanations. Common additional HTTP requests include PUT and | ||||||
| DELETE, but related technologies like WebDAV offers PROPFIND, COPY, MOVE and | DELETE, but related technologies like WebDAV offers PROPFIND, COPY, MOVE and | ||||||
| @@ -1888,6 +1914,11 @@ alter the way curl behaves. So for example if you want to make a proper HEAD | |||||||
| request, using -X HEAD will not suffice. You need to use the \fI-I, --head\fP | request, using -X HEAD will not suffice. You need to use the \fI-I, --head\fP | ||||||
| option. | option. | ||||||
|  |  | ||||||
|  | The the method string you set with -X will be used for all requests, which if | ||||||
|  | you for example use \fB-L, --location\fP may cause unintended side-effects | ||||||
|  | when curl doesn't change request method according to the HTTP 30x response | ||||||
|  | codes - and similar. | ||||||
|  |  | ||||||
| (FTP) | (FTP) | ||||||
| Specifies a custom FTP command to use instead of LIST when doing file lists | Specifies a custom FTP command to use instead of LIST when doing file lists | ||||||
| with FTP. | with FTP. | ||||||
|   | |||||||
| @@ -62,7 +62,6 @@ static const char *urls[] = { | |||||||
|   "http://www.uefa.com", |   "http://www.uefa.com", | ||||||
|   "http://www.ieee.org", |   "http://www.ieee.org", | ||||||
|   "http://www.apple.com", |   "http://www.apple.com", | ||||||
|   "http://www.sony.com", |  | ||||||
|   "http://www.symantec.com", |   "http://www.symantec.com", | ||||||
|   "http://www.zdnet.com", |   "http://www.zdnet.com", | ||||||
|   "http://www.fujitsu.com", |   "http://www.fujitsu.com", | ||||||
|   | |||||||
| @@ -1,3 +1,25 @@ | |||||||
|  | #*************************************************************************** | ||||||
|  | #                                  _   _ ____  _ | ||||||
|  | #  Project                     ___| | | |  _ \| | | ||||||
|  | #                             / __| | | | |_) | | | ||||||
|  | #                            | (__| |_| |  _ <| |___ | ||||||
|  | #                             \___|\___/|_| \_\_____| | ||||||
|  | # | ||||||
|  | # Copyright (C) 1998 - 2014, 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. | ||||||
|  | # | ||||||
|  | ########################################################################### | ||||||
|  |  | ||||||
| # These are all libcurl example programs to be test compiled | # These are all libcurl example programs to be test compiled | ||||||
| check_PROGRAMS = 10-at-a-time anyauthput cookie_interface debug fileupload \ | check_PROGRAMS = 10-at-a-time anyauthput cookie_interface debug fileupload \ | ||||||
|   fopen ftpget ftpgetresp ftpupload getinfo getinmemory http-post httpput  \ |   fopen ftpget ftpgetresp ftpupload getinfo getinmemory http-post httpput  \ | ||||||
| @@ -5,11 +27,11 @@ check_PROGRAMS = 10-at-a-time anyauthput cookie_interface debug fileupload \ | |||||||
|   persistant post-callback postit2 sepheaders simple simplepost simplessl  \ |   persistant post-callback postit2 sepheaders simple simplepost simplessl  \ | ||||||
|   sendrecv httpcustomheader certinfo chkspeed ftpgetinfo ftp-wildcard      \ |   sendrecv httpcustomheader certinfo chkspeed ftpgetinfo ftp-wildcard      \ | ||||||
|   smtp-mail smtp-multi smtp-ssl smtp-tls smtp-vrfy smtp-expn rtsp          \ |   smtp-mail smtp-multi smtp-ssl smtp-tls smtp-vrfy smtp-expn rtsp          \ | ||||||
|   externalsocket resolve progressfunc pop3-retr pop3-list pop3-uidl pop3-dele \ |   externalsocket resolve progressfunc pop3-retr pop3-list pop3-uidl        \ | ||||||
|   pop3-top pop3-stat pop3-noop pop3-ssl pop3-tls pop3-multi imap-list \ |   pop3-dele pop3-top pop3-stat pop3-noop pop3-ssl pop3-tls pop3-multi      \ | ||||||
|   imap-lsub imap-fetch imap-store imap-append imap-examine imap-search \ |   imap-list imap-lsub imap-fetch imap-store imap-append imap-examine       \ | ||||||
|   imap-create imap-delete imap-copy imap-noop imap-ssl imap-tls imap-multi \ |   imap-search imap-create imap-delete imap-copy imap-noop imap-ssl         \ | ||||||
|   url2file sftpget ftpsget postinmemory |   imap-tls imap-multi url2file sftpget ftpsget postinmemory | ||||||
|  |  | ||||||
| # These examples require external dependencies that may not be commonly | # These examples require external dependencies that may not be commonly | ||||||
| # available on POSIX systems, so don't bother attempting to compile them here. | # available on POSIX systems, so don't bother attempting to compile them here. | ||||||
|   | |||||||
| @@ -38,7 +38,7 @@ ZLIB_PATH = ../../../zlib-1.2.8 | |||||||
| endif | endif | ||||||
| # Edit the path below to point to the base of your OpenSSL package. | # Edit the path below to point to the base of your OpenSSL package. | ||||||
| ifndef OPENSSL_PATH | ifndef OPENSSL_PATH | ||||||
| OPENSSL_PATH = ../../../openssl-0.9.8y | OPENSSL_PATH = ../../../openssl-0.9.8zc | ||||||
| endif | endif | ||||||
| # Edit the path below to point to the base of your LibSSH2 package. | # Edit the path below to point to the base of your LibSSH2 package. | ||||||
| ifndef LIBSSH2_PATH | ifndef LIBSSH2_PATH | ||||||
|   | |||||||
| @@ -19,7 +19,7 @@ endif | |||||||
|  |  | ||||||
| # Edit the path below to point to the base of your OpenSSL package. | # Edit the path below to point to the base of your OpenSSL package. | ||||||
| ifndef OPENSSL_PATH | ifndef OPENSSL_PATH | ||||||
| OPENSSL_PATH = ../../../openssl-0.9.8y | OPENSSL_PATH = ../../../openssl-0.9.8zc | ||||||
| endif | endif | ||||||
|  |  | ||||||
| # Edit the path below to point to the base of your LibSSH2 package. | # Edit the path below to point to the base of your LibSSH2 package. | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ | |||||||
|  *                            | (__| |_| |  _ <| |___ |  *                            | (__| |_| |  _ <| |___ | ||||||
|  *                             \___|\___/|_| \_\_____| |  *                             \___|\___/|_| \_\_____| | ||||||
|  * |  * | ||||||
|  * Copyright (C) 2012, Daniel Stenberg, <daniel@haxx.se>, et al. |  * Copyright (C) 2012 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||||
|  * |  * | ||||||
|  * This software is licensed as described in the file COPYING, which |  * This software is licensed as described in the file COPYING, which | ||||||
|  * you should have received as part of this distribution. The terms |  * you should have received as part of this distribution. The terms | ||||||
| @@ -108,21 +108,39 @@ static void mcode_or_die(const char *where, CURLMcode code) | |||||||
|     const char *s; |     const char *s; | ||||||
|     switch(code) |     switch(code) | ||||||
|     { |     { | ||||||
|     case CURLM_CALL_MULTI_PERFORM: s="CURLM_CALL_MULTI_PERFORM"; break; |     case CURLM_CALL_MULTI_PERFORM: | ||||||
|     case CURLM_BAD_HANDLE:         s="CURLM_BAD_HANDLE";         break; |       s = "CURLM_CALL_MULTI_PERFORM"; | ||||||
|     case CURLM_BAD_EASY_HANDLE:    s="CURLM_BAD_EASY_HANDLE";    break; |  | ||||||
|     case CURLM_OUT_OF_MEMORY:      s="CURLM_OUT_OF_MEMORY";      break; |  | ||||||
|     case CURLM_INTERNAL_ERROR:     s="CURLM_INTERNAL_ERROR";     break; |  | ||||||
|     case CURLM_UNKNOWN_OPTION:     s="CURLM_UNKNOWN_OPTION";     break; |  | ||||||
|     case CURLM_LAST:               s="CURLM_LAST";               break; |  | ||||||
|     default: s="CURLM_unknown"; |  | ||||||
|       break; |       break; | ||||||
|     case     CURLM_BAD_SOCKET:         s="CURLM_BAD_SOCKET"; |     case CURLM_BAD_HANDLE: | ||||||
|  |       s = "CURLM_BAD_HANDLE"; | ||||||
|  |       break; | ||||||
|  |     case CURLM_BAD_EASY_HANDLE: | ||||||
|  |       s = "CURLM_BAD_EASY_HANDLE"; | ||||||
|  |       break; | ||||||
|  |     case CURLM_OUT_OF_MEMORY: | ||||||
|  |       s = "CURLM_OUT_OF_MEMORY"; | ||||||
|  |       break; | ||||||
|  |     case CURLM_INTERNAL_ERROR: | ||||||
|  |       s = "CURLM_INTERNAL_ERROR"; | ||||||
|  |       break; | ||||||
|  |     case CURLM_UNKNOWN_OPTION: | ||||||
|  |       s = "CURLM_UNKNOWN_OPTION"; | ||||||
|  |       break; | ||||||
|  |     case CURLM_LAST: | ||||||
|  |       s = "CURLM_LAST"; | ||||||
|  |       break; | ||||||
|  |     default: | ||||||
|  |       s = "CURLM_unknown"; | ||||||
|  |       break; | ||||||
|  |     case CURLM_BAD_SOCKET: | ||||||
|  |       s = "CURLM_BAD_SOCKET"; | ||||||
|       fprintf(MSG_OUT, "\nERROR: %s returns %s", where, s); |       fprintf(MSG_OUT, "\nERROR: %s returns %s", where, s); | ||||||
|       /* ignore this error */ |       /* ignore this error */ | ||||||
|       return; |       return; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     fprintf(MSG_OUT, "\nERROR: %s returns %s", where, s); |     fprintf(MSG_OUT, "\nERROR: %s returns %s", where, s); | ||||||
|  |  | ||||||
|     exit(code); |     exit(code); | ||||||
|   } |   } | ||||||
| } | } | ||||||
| @@ -157,12 +175,14 @@ static void check_multi_info(GlobalInfo *g) | |||||||
| } | } | ||||||
|  |  | ||||||
| /* Called by asio when there is an action on a socket */ | /* Called by asio when there is an action on a socket */ | ||||||
| static void event_cb(GlobalInfo * g, boost::asio::ip::tcp::socket * tcp_socket, int action) | static void event_cb(GlobalInfo *g, boost::asio::ip::tcp::socket *tcp_socket, | ||||||
|  |                      int action) | ||||||
| { | { | ||||||
|   fprintf(MSG_OUT, "\nevent_cb: action=%d", action); |   fprintf(MSG_OUT, "\nevent_cb: action=%d", action); | ||||||
|  |  | ||||||
|   CURLMcode rc; |   CURLMcode rc; | ||||||
|   rc = curl_multi_socket_action(g->multi, tcp_socket->native_handle(), action, &g->still_running); |   rc = curl_multi_socket_action(g->multi, tcp_socket->native_handle(), action, | ||||||
|  |                                 &g->still_running); | ||||||
|  |  | ||||||
|   mcode_or_die("event_cb: curl_multi_socket_action", rc); |   mcode_or_die("event_cb: curl_multi_socket_action", rc); | ||||||
|   check_multi_info(g); |   check_multi_info(g); | ||||||
| @@ -209,6 +229,7 @@ static void setsock(int *fdp, curl_socket_t s, CURL*e, int act, GlobalInfo*g) | |||||||
|   if(it == socket_map.end()) |   if(it == socket_map.end()) | ||||||
|   { |   { | ||||||
|     fprintf(MSG_OUT, "\nsocket %d is a c-ares socket, ignoring", s); |     fprintf(MSG_OUT, "\nsocket %d is a c-ares socket, ignoring", s); | ||||||
|  |  | ||||||
|     return; |     return; | ||||||
|   } |   } | ||||||
|  |  | ||||||
| @@ -221,39 +242,31 @@ static void setsock(int *fdp, curl_socket_t s, CURL*e, int act, GlobalInfo*g) | |||||||
|     fprintf(MSG_OUT, "\nwatching for socket to become readable"); |     fprintf(MSG_OUT, "\nwatching for socket to become readable"); | ||||||
|  |  | ||||||
|     tcp_socket->async_read_some(boost::asio::null_buffers(), |     tcp_socket->async_read_some(boost::asio::null_buffers(), | ||||||
|                              boost::bind(&event_cb, g, |                                 boost::bind(&event_cb, g, tcp_socket, act)); | ||||||
|                                tcp_socket, |  | ||||||
|                                act)); |  | ||||||
|   } |   } | ||||||
|   else if (act == CURL_POLL_OUT) |   else if (act == CURL_POLL_OUT) | ||||||
|   { |   { | ||||||
|     fprintf(MSG_OUT, "\nwatching for socket to become writable"); |     fprintf(MSG_OUT, "\nwatching for socket to become writable"); | ||||||
|  |  | ||||||
|     tcp_socket->async_write_some(boost::asio::null_buffers(), |     tcp_socket->async_write_some(boost::asio::null_buffers(), | ||||||
|                               boost::bind(&event_cb, g, |                                  boost::bind(&event_cb, g, tcp_socket, act)); | ||||||
|                                 tcp_socket, |  | ||||||
|                                 act)); |  | ||||||
|   } |   } | ||||||
|   else if(act == CURL_POLL_INOUT) |   else if(act == CURL_POLL_INOUT) | ||||||
|   { |   { | ||||||
|     fprintf(MSG_OUT, "\nwatching for socket to become readable & writable"); |     fprintf(MSG_OUT, "\nwatching for socket to become readable & writable"); | ||||||
|  |  | ||||||
|     tcp_socket->async_read_some(boost::asio::null_buffers(), |     tcp_socket->async_read_some(boost::asio::null_buffers(), | ||||||
|                              boost::bind(&event_cb, g, |                                 boost::bind(&event_cb, g, tcp_socket, act)); | ||||||
|                                tcp_socket, |  | ||||||
|                                act)); |  | ||||||
|  |  | ||||||
|     tcp_socket->async_write_some(boost::asio::null_buffers(), |     tcp_socket->async_write_some(boost::asio::null_buffers(), | ||||||
|                               boost::bind(&event_cb, g, |                                  boost::bind(&event_cb, g, tcp_socket, act)); | ||||||
|                                 tcp_socket, |  | ||||||
|                                 act)); |  | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| static void addsock(curl_socket_t s, CURL *easy, int action, GlobalInfo *g) | static void addsock(curl_socket_t s, CURL *easy, int action, GlobalInfo *g) | ||||||
| { | { | ||||||
|   int *fdp = (int *)calloc(sizeof(int), 1); /* fdp is used to store current action */ |   /* fdp is used to store current action */ | ||||||
|  |   int *fdp = (int *) calloc(sizeof(int), 1); | ||||||
|  |  | ||||||
|   setsock(fdp, s, easy, action, g); |   setsock(fdp, s, easy, action, g); | ||||||
|   curl_multi_assign(g->multi, s, fdp); |   curl_multi_assign(g->multi, s, fdp); | ||||||
| @@ -291,10 +304,10 @@ static int sock_cb(CURL *e, curl_socket_t s, int what, void *cbp, void *sockp) | |||||||
|       setsock(actionp, s, e, what, g); |       setsock(actionp, s, e, what, g); | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   return 0; |   return 0; | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| /* CURLOPT_WRITEFUNCTION */ | /* CURLOPT_WRITEFUNCTION */ | ||||||
| static size_t write_cb(void *ptr, size_t size, size_t nmemb, void *data) | static size_t write_cb(void *ptr, size_t size, size_t nmemb, void *data) | ||||||
| { | { | ||||||
| @@ -312,12 +325,12 @@ static size_t write_cb(void *ptr, size_t size, size_t nmemb, void *data) | |||||||
|   return written; |   return written; | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| /* CURLOPT_PROGRESSFUNCTION */ | /* CURLOPT_PROGRESSFUNCTION */ | ||||||
| static int prog_cb(void *p, double dltotal, double dlnow, double ult, | static int prog_cb(void *p, double dltotal, double dlnow, double ult, | ||||||
|                    double uln) |                    double uln) | ||||||
| { | { | ||||||
|   ConnInfo *conn = (ConnInfo *)p; |   ConnInfo *conn = (ConnInfo *)p; | ||||||
|  |  | ||||||
|   (void)ult; |   (void)ult; | ||||||
|   (void)uln; |   (void)uln; | ||||||
|  |  | ||||||
| @@ -328,15 +341,14 @@ static int prog_cb (void *p, double dltotal, double dlnow, double ult, | |||||||
| } | } | ||||||
|  |  | ||||||
| /* CURLOPT_OPENSOCKETFUNCTION */ | /* CURLOPT_OPENSOCKETFUNCTION */ | ||||||
| static curl_socket_t opensocket(void *clientp, | static curl_socket_t opensocket(void *clientp, curlsocktype purpose, | ||||||
|                                 curlsocktype purpose, |  | ||||||
|                                 struct curl_sockaddr *address) |                                 struct curl_sockaddr *address) | ||||||
| { | { | ||||||
|   fprintf(MSG_OUT, "\nopensocket :"); |   fprintf(MSG_OUT, "\nopensocket :"); | ||||||
|  |  | ||||||
|   curl_socket_t sockfd = CURL_SOCKET_BAD; |   curl_socket_t sockfd = CURL_SOCKET_BAD; | ||||||
|  |  | ||||||
|   /* restrict to ipv4 */ |   /* restrict to IPv4 */ | ||||||
|   if(purpose == CURLSOCKTYPE_IPCXN && address->family == AF_INET) |   if(purpose == CURLSOCKTYPE_IPCXN && address->family == AF_INET) | ||||||
|   { |   { | ||||||
|     /* create a tcp socket object */ |     /* create a tcp socket object */ | ||||||
| @@ -348,7 +360,7 @@ static curl_socket_t opensocket(void *clientp, | |||||||
|  |  | ||||||
|     if(ec) |     if(ec) | ||||||
|     { |     { | ||||||
|       //An error occurred |       /* An error occurred */ | ||||||
|       std::cout << std::endl << "Couldn't open socket [" << ec << "][" << ec.message() << "]"; |       std::cout << std::endl << "Couldn't open socket [" << ec << "][" << ec.message() << "]"; | ||||||
|       fprintf(MSG_OUT, "\nERROR: Returning CURL_SOCKET_BAD to signal error"); |       fprintf(MSG_OUT, "\nERROR: Returning CURL_SOCKET_BAD to signal error"); | ||||||
|     } |     } | ||||||
| @@ -388,16 +400,15 @@ static void new_conn(char *url, GlobalInfo *g ) | |||||||
|   CURLMcode rc; |   CURLMcode rc; | ||||||
|  |  | ||||||
|   conn = (ConnInfo *) calloc(1, sizeof(ConnInfo)); |   conn = (ConnInfo *) calloc(1, sizeof(ConnInfo)); | ||||||
|   memset(conn, 0, sizeof(ConnInfo)); |  | ||||||
|   conn->error[0]='\0'; |  | ||||||
|  |  | ||||||
|   conn->easy = curl_easy_init(); |   conn->easy = curl_easy_init(); | ||||||
|  |  | ||||||
|   if(!conn->easy) |   if(!conn->easy) | ||||||
|   { |   { | ||||||
|     fprintf(MSG_OUT, "\ncurl_easy_init() failed, exiting!"); |     fprintf(MSG_OUT, "\ncurl_easy_init() failed, exiting!"); | ||||||
|  |  | ||||||
|     exit(2); |     exit(2); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   conn->global = g; |   conn->global = g; | ||||||
|   conn->url = strdup(url); |   conn->url = strdup(url); | ||||||
|   curl_easy_setopt(conn->easy, CURLOPT_URL, conn->url); |   curl_easy_setopt(conn->easy, CURLOPT_URL, conn->url); | ||||||
| @@ -431,6 +442,7 @@ int main(int argc, char **argv) | |||||||
| { | { | ||||||
|   GlobalInfo g; |   GlobalInfo g; | ||||||
|   CURLMcode rc; |   CURLMcode rc; | ||||||
|  |  | ||||||
|   (void)argc; |   (void)argc; | ||||||
|   (void)argv; |   (void)argv; | ||||||
|  |  | ||||||
| @@ -450,5 +462,6 @@ int main(int argc, char **argv) | |||||||
|   curl_multi_cleanup(g.multi); |   curl_multi_cleanup(g.multi); | ||||||
|  |  | ||||||
|   fprintf(MSG_OUT, "\ndone.\n"); |   fprintf(MSG_OUT, "\ndone.\n"); | ||||||
|  |  | ||||||
|   return 0; |   return 0; | ||||||
| } | } | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ | |||||||
|  *                            | (__| |_| |  _ <| |___ |  *                            | (__| |_| |  _ <| |___ | ||||||
|  *                             \___|\___/|_| \_\_____| |  *                             \___|\___/|_| \_\_____| | ||||||
|  * |  * | ||||||
|  * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al. |  * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||||
|  * |  * | ||||||
|  * This software is licensed as described in the file COPYING, which |  * This software is licensed as described in the file COPYING, which | ||||||
|  * you should have received as part of this distribution. The terms |  * you should have received as part of this distribution. The terms | ||||||
| @@ -38,7 +38,7 @@ | |||||||
| #include <sys/socket.h>       /*  socket definitions        */ | #include <sys/socket.h>       /*  socket definitions        */ | ||||||
| #include <netinet/in.h> | #include <netinet/in.h> | ||||||
| #include <arpa/inet.h>        /*  inet (3) funtions         */ | #include <arpa/inet.h>        /*  inet (3) funtions         */ | ||||||
| #include <unistd.h>           /*  misc. UNIX functions      */ | #include <unistd.h>           /*  misc. Unix functions      */ | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| #include <errno.h> | #include <errno.h> | ||||||
|   | |||||||
| @@ -128,6 +128,7 @@ static int fill_buffer(URL_FILE *file, size_t want) | |||||||
|   fd_set fdexcep; |   fd_set fdexcep; | ||||||
|   struct timeval timeout; |   struct timeval timeout; | ||||||
|   int rc; |   int rc; | ||||||
|  |   CURLMcode mc; /* curl_multi_fdset() return code */ | ||||||
|  |  | ||||||
|   /* only attempt to fill buffer if transactions still running and buffer |   /* only attempt to fill buffer if transactions still running and buffer | ||||||
|    * doesnt exceed required size already |    * doesnt exceed required size already | ||||||
| @@ -158,15 +159,35 @@ static int fill_buffer(URL_FILE *file, size_t want) | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     /* get file descriptors from the transfers */ |     /* get file descriptors from the transfers */ | ||||||
|     curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd); |     mc = curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd); | ||||||
|  |  | ||||||
|     /* In a real-world program you OF COURSE check the return code of the |     if(mc != CURLM_OK) | ||||||
|        function calls.  On success, the value of maxfd is guaranteed to be |     { | ||||||
|        greater or equal than -1.  We call select(maxfd + 1, ...), specially |       fprintf(stderr, "curl_multi_fdset() failed, code %d.\n", mc); | ||||||
|        in case of (maxfd == -1), we call select(0, ...), which is basically |       break; | ||||||
|        equal to sleep. */ |     } | ||||||
|  |  | ||||||
|  |     /* On success the value of maxfd is guaranteed to be >= -1. We call | ||||||
|  |        select(maxfd + 1, ...); specially in case of (maxfd == -1) there are | ||||||
|  |        no fds ready yet so we call select(0, ...) --or Sleep() on Windows-- | ||||||
|  |        to sleep 100ms, which is the minimum suggested value in the | ||||||
|  |        curl_multi_fdset() doc. */ | ||||||
|  |  | ||||||
|  |     if(maxfd == -1) { | ||||||
|  | #ifdef _WIN32 | ||||||
|  |       Sleep(100); | ||||||
|  |       rc = 0; | ||||||
|  | #else | ||||||
|  |       /* Portable sleep for platforms other than Windows. */ | ||||||
|  |       struct timeval wait = { 0, 100 * 1000 }; /* 100ms */ | ||||||
|  |       rc = select(0, NULL, NULL, NULL, &wait); | ||||||
|  | #endif | ||||||
|  |     } | ||||||
|  |     else { | ||||||
|  |       /* Note that on some platforms 'timeout' may be modified by select(). | ||||||
|  |          If you need access to the original value save a copy beforehand. */ | ||||||
|       rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout); |       rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     switch(rc) { |     switch(rc) { | ||||||
|     case -1: |     case -1: | ||||||
|   | |||||||
| @@ -88,6 +88,7 @@ int main(void) | |||||||
|     fd_set fdexcep; |     fd_set fdexcep; | ||||||
|     int maxfd = -1; |     int maxfd = -1; | ||||||
|     int rc; |     int rc; | ||||||
|  |     CURLMcode mc; /* curl_multi_fdset() return code */ | ||||||
|  |  | ||||||
|     long curl_timeo = -1; |     long curl_timeo = -1; | ||||||
|  |  | ||||||
| @@ -109,15 +110,36 @@ int main(void) | |||||||
|         timeout.tv_usec = (curl_timeo % 1000) * 1000; |         timeout.tv_usec = (curl_timeo % 1000) * 1000; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     /* Get file descriptors from the transfers */ |     /* get file descriptors from the transfers */ | ||||||
|     curl_multi_fdset(mcurl, &fdread, &fdwrite, &fdexcep, &maxfd); |     mc = curl_multi_fdset(mcurl, &fdread, &fdwrite, &fdexcep, &maxfd); | ||||||
|  |  | ||||||
|     /* In a real-world program you OF COURSE check the return code of the |     if(mc != CURLM_OK) | ||||||
|        function calls.  On success, the value of maxfd is guaranteed to be |     { | ||||||
|        greater or equal than -1.  We call select(maxfd + 1, ...), specially in |       fprintf(stderr, "curl_multi_fdset() failed, code %d.\n", mc); | ||||||
|        case of (maxfd == -1), we call select(0, ...), which is basically equal |       break; | ||||||
|        to sleep. */ |     } | ||||||
|  |  | ||||||
|  |     /* On success the value of maxfd is guaranteed to be >= -1. We call | ||||||
|  |        select(maxfd + 1, ...); specially in case of (maxfd == -1) there are | ||||||
|  |        no fds ready yet so we call select(0, ...) --or Sleep() on Windows-- | ||||||
|  |        to sleep 100ms, which is the minimum suggested value in the | ||||||
|  |        curl_multi_fdset() doc. */ | ||||||
|  |  | ||||||
|  |     if(maxfd == -1) { | ||||||
|  | #ifdef _WIN32 | ||||||
|  |       Sleep(100); | ||||||
|  |       rc = 0; | ||||||
|  | #else | ||||||
|  |       /* Portable sleep for platforms other than Windows. */ | ||||||
|  |       struct timeval wait = { 0, 100 * 1000 }; /* 100ms */ | ||||||
|  |       rc = select(0, NULL, NULL, NULL, &wait); | ||||||
|  | #endif | ||||||
|  |     } | ||||||
|  |     else { | ||||||
|  |       /* Note that on some platforms 'timeout' may be modified by select(). | ||||||
|  |          If you need access to the original value save a copy beforehand. */ | ||||||
|       rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout); |       rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     if(tvdiff(tvnow(), mp_start) > MULTI_PERFORM_HANG_TIMEOUT) { |     if(tvdiff(tvnow(), mp_start) > MULTI_PERFORM_HANG_TIMEOUT) { | ||||||
|       fprintf(stderr, |       fprintf(stderr, | ||||||
|   | |||||||
| @@ -73,6 +73,7 @@ int main(void) | |||||||
|   do { |   do { | ||||||
|     struct timeval timeout; |     struct timeval timeout; | ||||||
|     int rc; /* select() return code */ |     int rc; /* select() return code */ | ||||||
|  |     CURLMcode mc; /* curl_multi_fdset() return code */ | ||||||
|  |  | ||||||
|     fd_set fdread; |     fd_set fdread; | ||||||
|     fd_set fdwrite; |     fd_set fdwrite; | ||||||
| @@ -99,15 +100,35 @@ int main(void) | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     /* get file descriptors from the transfers */ |     /* get file descriptors from the transfers */ | ||||||
|     curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd); |     mc = curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd); | ||||||
|  |  | ||||||
|     /* In a real-world program you OF COURSE check the return code of the |     if(mc != CURLM_OK) | ||||||
|        function calls.  On success, the value of maxfd is guaranteed to be |     { | ||||||
|        greater or equal than -1.  We call select(maxfd + 1, ...), specially in |       fprintf(stderr, "curl_multi_fdset() failed, code %d.\n", mc); | ||||||
|        case of (maxfd == -1), we call select(0, ...), which is basically equal |       break; | ||||||
|        to sleep. */ |     } | ||||||
|  |  | ||||||
|  |     /* On success the value of maxfd is guaranteed to be >= -1. We call | ||||||
|  |        select(maxfd + 1, ...); specially in case of (maxfd == -1) there are | ||||||
|  |        no fds ready yet so we call select(0, ...) --or Sleep() on Windows-- | ||||||
|  |        to sleep 100ms, which is the minimum suggested value in the | ||||||
|  |        curl_multi_fdset() doc. */ | ||||||
|  |  | ||||||
|  |     if(maxfd == -1) { | ||||||
|  | #ifdef _WIN32 | ||||||
|  |       Sleep(100); | ||||||
|  |       rc = 0; | ||||||
|  | #else | ||||||
|  |       /* Portable sleep for platforms other than Windows. */ | ||||||
|  |       struct timeval wait = { 0, 100 * 1000 }; /* 100ms */ | ||||||
|  |       rc = select(0, NULL, NULL, NULL, &wait); | ||||||
|  | #endif | ||||||
|  |     } | ||||||
|  |     else { | ||||||
|  |       /* Note that on some platforms 'timeout' may be modified by select(). | ||||||
|  |          If you need access to the original value save a copy beforehand. */ | ||||||
|       rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout); |       rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     switch(rc) { |     switch(rc) { | ||||||
|     case -1: |     case -1: | ||||||
|   | |||||||
| @@ -147,6 +147,7 @@ int main(void) | |||||||
|   do { |   do { | ||||||
|     struct timeval timeout; |     struct timeval timeout; | ||||||
|     int rc; /* select() return code */ |     int rc; /* select() return code */ | ||||||
|  |     CURLMcode mc; /* curl_multi_fdset() return code */ | ||||||
|  |  | ||||||
|     fd_set fdread; |     fd_set fdread; | ||||||
|     fd_set fdwrite; |     fd_set fdwrite; | ||||||
| @@ -173,15 +174,35 @@ int main(void) | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     /* get file descriptors from the transfers */ |     /* get file descriptors from the transfers */ | ||||||
|     curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd); |     mc = curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd); | ||||||
|  |  | ||||||
|     /* In a real-world program you OF COURSE check the return code of the |     if(mc != CURLM_OK) | ||||||
|        function calls.  On success, the value of maxfd is guaranteed to be |     { | ||||||
|        greater or equal than -1.  We call select(maxfd + 1, ...), specially in |       fprintf(stderr, "curl_multi_fdset() failed, code %d.\n", mc); | ||||||
|        case of (maxfd == -1), we call select(0, ...), which is basically equal |       break; | ||||||
|        to sleep. */ |     } | ||||||
|  |  | ||||||
|  |     /* On success the value of maxfd is guaranteed to be >= -1. We call | ||||||
|  |        select(maxfd + 1, ...); specially in case of (maxfd == -1) there are | ||||||
|  |        no fds ready yet so we call select(0, ...) --or Sleep() on Windows-- | ||||||
|  |        to sleep 100ms, which is the minimum suggested value in the | ||||||
|  |        curl_multi_fdset() doc. */ | ||||||
|  |  | ||||||
|  |     if(maxfd == -1) { | ||||||
|  | #ifdef _WIN32 | ||||||
|  |       Sleep(100); | ||||||
|  |       rc = 0; | ||||||
|  | #else | ||||||
|  |       /* Portable sleep for platforms other than Windows. */ | ||||||
|  |       struct timeval wait = { 0, 100 * 1000 }; /* 100ms */ | ||||||
|  |       rc = select(0, NULL, NULL, NULL, &wait); | ||||||
|  | #endif | ||||||
|  |     } | ||||||
|  |     else { | ||||||
|  |       /* Note that on some platforms 'timeout' may be modified by select(). | ||||||
|  |          If you need access to the original value save a copy beforehand. */ | ||||||
|       rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout); |       rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     switch(rc) { |     switch(rc) { | ||||||
|     case -1: |     case -1: | ||||||
|   | |||||||
| @@ -62,6 +62,7 @@ int main(void) | |||||||
|   do { |   do { | ||||||
|     struct timeval timeout; |     struct timeval timeout; | ||||||
|     int rc; /* select() return code */ |     int rc; /* select() return code */ | ||||||
|  |     CURLMcode mc; /* curl_multi_fdset() return code */ | ||||||
|  |  | ||||||
|     fd_set fdread; |     fd_set fdread; | ||||||
|     fd_set fdwrite; |     fd_set fdwrite; | ||||||
| @@ -88,15 +89,35 @@ int main(void) | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     /* get file descriptors from the transfers */ |     /* get file descriptors from the transfers */ | ||||||
|     curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd); |     mc = curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd); | ||||||
|  |  | ||||||
|     /* In a real-world program you OF COURSE check the return code of the |     if(mc != CURLM_OK) | ||||||
|        function calls.  On success, the value of maxfd is guaranteed to be |     { | ||||||
|        greater or equal than -1.  We call select(maxfd + 1, ...), specially in |       fprintf(stderr, "curl_multi_fdset() failed, code %d.\n", mc); | ||||||
|        case of (maxfd == -1), we call select(0, ...), which is basically equal |       break; | ||||||
|        to sleep. */ |     } | ||||||
|  |  | ||||||
|  |     /* On success the value of maxfd is guaranteed to be >= -1. We call | ||||||
|  |        select(maxfd + 1, ...); specially in case of (maxfd == -1) there are | ||||||
|  |        no fds ready yet so we call select(0, ...) --or Sleep() on Windows-- | ||||||
|  |        to sleep 100ms, which is the minimum suggested value in the | ||||||
|  |        curl_multi_fdset() doc. */ | ||||||
|  |  | ||||||
|  |     if(maxfd == -1) { | ||||||
|  | #ifdef _WIN32 | ||||||
|  |       Sleep(100); | ||||||
|  |       rc = 0; | ||||||
|  | #else | ||||||
|  |       /* Portable sleep for platforms other than Windows. */ | ||||||
|  |       struct timeval wait = { 0, 100 * 1000 }; /* 100ms */ | ||||||
|  |       rc = select(0, NULL, NULL, NULL, &wait); | ||||||
|  | #endif | ||||||
|  |     } | ||||||
|  |     else { | ||||||
|  |       /* Note that on some platforms 'timeout' may be modified by select(). | ||||||
|  |          If you need access to the original value save a copy beforehand. */ | ||||||
|       rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout); |       rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     switch(rc) { |     switch(rc) { | ||||||
|     case -1: |     case -1: | ||||||
|   | |||||||
| @@ -83,6 +83,7 @@ int main(void) | |||||||
|     do { |     do { | ||||||
|       struct timeval timeout; |       struct timeval timeout; | ||||||
|       int rc; /* select() return code */ |       int rc; /* select() return code */ | ||||||
|  |       CURLMcode mc; /* curl_multi_fdset() return code */ | ||||||
|  |  | ||||||
|       fd_set fdread; |       fd_set fdread; | ||||||
|       fd_set fdwrite; |       fd_set fdwrite; | ||||||
| @@ -109,15 +110,35 @@ int main(void) | |||||||
|       } |       } | ||||||
|  |  | ||||||
|       /* get file descriptors from the transfers */ |       /* get file descriptors from the transfers */ | ||||||
|       curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd); |       mc = curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd); | ||||||
|  |  | ||||||
|       /* In a real-world program you OF COURSE check the return code of the |       if(mc != CURLM_OK) | ||||||
|          function calls.  On success, the value of maxfd is guaranteed to be |       { | ||||||
|          greater or equal than -1.  We call select(maxfd + 1, ...), specially in |         fprintf(stderr, "curl_multi_fdset() failed, code %d.\n", mc); | ||||||
|          case of (maxfd == -1), we call select(0, ...), which is basically equal |         break; | ||||||
|          to sleep. */ |       } | ||||||
|  |  | ||||||
|  |       /* On success the value of maxfd is guaranteed to be >= -1. We call | ||||||
|  |          select(maxfd + 1, ...); specially in case of (maxfd == -1) there are | ||||||
|  |          no fds ready yet so we call select(0, ...) --or Sleep() on Windows-- | ||||||
|  |          to sleep 100ms, which is the minimum suggested value in the | ||||||
|  |          curl_multi_fdset() doc. */ | ||||||
|  |  | ||||||
|  |       if(maxfd == -1) { | ||||||
|  | #ifdef _WIN32 | ||||||
|  |         Sleep(100); | ||||||
|  |         rc = 0; | ||||||
|  | #else | ||||||
|  |         /* Portable sleep for platforms other than Windows. */ | ||||||
|  |         struct timeval wait = { 0, 100 * 1000 }; /* 100ms */ | ||||||
|  |         rc = select(0, NULL, NULL, NULL, &wait); | ||||||
|  | #endif | ||||||
|  |       } | ||||||
|  |       else { | ||||||
|  |         /* Note that on some platforms 'timeout' may be modified by select(). | ||||||
|  |            If you need access to the original value save a copy beforehand. */ | ||||||
|         rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout); |         rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout); | ||||||
|  |       } | ||||||
|  |  | ||||||
|       switch(rc) { |       switch(rc) { | ||||||
|       case -1: |       case -1: | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ | |||||||
|  *                            | (__| |_| |  _ <| |___ |  *                            | (__| |_| |  _ <| |___ | ||||||
|  *                             \___|\___/|_| \_\_____| |  *                             \___|\___/|_| \_\_____| | ||||||
|  * |  * | ||||||
|  * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al. |  * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||||
|  * |  * | ||||||
|  * This software is licensed as described in the file COPYING, which |  * This software is licensed as described in the file COPYING, which | ||||||
|  * you should have received as part of this distribution. The terms |  * you should have received as part of this distribution. The terms | ||||||
| @@ -31,6 +31,15 @@ | |||||||
| /* curl stuff */ | /* curl stuff */ | ||||||
| #include <curl/curl.h> | #include <curl/curl.h> | ||||||
|  |  | ||||||
|  | #ifdef _WIN32 | ||||||
|  | #define WAITMS(x) Sleep(x) | ||||||
|  | #else | ||||||
|  | /* Portable sleep for platforms other than Windows. */ | ||||||
|  | #define WAITMS(x)                               \ | ||||||
|  |   struct timeval wait = { 0, (x) * 1000 };      \ | ||||||
|  |   (void)select(0, NULL, NULL, NULL, &wait); | ||||||
|  | #endif | ||||||
|  |  | ||||||
| /* | /* | ||||||
|  * Simply download a HTTP file. |  * Simply download a HTTP file. | ||||||
|  */ |  */ | ||||||
| @@ -40,6 +49,7 @@ int main(void) | |||||||
|   CURLM *multi_handle; |   CURLM *multi_handle; | ||||||
|  |  | ||||||
|   int still_running; /* keep number of running handles */ |   int still_running; /* keep number of running handles */ | ||||||
|  |   int repeats = 0; | ||||||
|  |  | ||||||
|   curl_global_init(CURL_GLOBAL_DEFAULT); |   curl_global_init(CURL_GLOBAL_DEFAULT); | ||||||
|  |  | ||||||
| @@ -58,56 +68,33 @@ int main(void) | |||||||
|   curl_multi_perform(multi_handle, &still_running); |   curl_multi_perform(multi_handle, &still_running); | ||||||
|  |  | ||||||
|   do { |   do { | ||||||
|     struct timeval timeout; |     CURLMcode mc; /* curl_multi_wait() return code */ | ||||||
|     int rc; /* select() return code */ |     int numfds; | ||||||
|  |  | ||||||
|     fd_set fdread; |     /* wait for activity, timeout or "nothing" */ | ||||||
|     fd_set fdwrite; |     mc = curl_multi_wait(multi_handle, NULL, 0, 1000, &numfds); | ||||||
|     fd_set fdexcep; |  | ||||||
|     int maxfd = -1; |  | ||||||
|  |  | ||||||
|     long curl_timeo = -1; |     if(mc != CURLM_OK) | ||||||
|  |     { | ||||||
|  |       fprintf(stderr, "curl_multi_fdset() failed, code %d.\n", mc); | ||||||
|  |       break; | ||||||
|  |     } | ||||||
|  |  | ||||||
|     FD_ZERO(&fdread); |     /* 'numfds' being zero means either a timeout or no file descriptors to | ||||||
|     FD_ZERO(&fdwrite); |        wait for. Try timeout on first occurance, then assume no file | ||||||
|     FD_ZERO(&fdexcep); |        descriptors and no file descriptors to wait for means wait for 100 | ||||||
|  |        milliseconds. */ | ||||||
|  |  | ||||||
|     /* set a suitable timeout to play around with */ |     if(!numfds) { | ||||||
|     timeout.tv_sec = 1; |       repeats++; /* count number of repeated zero numfds */ | ||||||
|     timeout.tv_usec = 0; |       if(repeats > 1) { | ||||||
|  |         WAITMS(100); /* sleep 100 milliseconds */ | ||||||
|     curl_multi_timeout(multi_handle, &curl_timeo); |       } | ||||||
|     if(curl_timeo >= 0) { |     } | ||||||
|       timeout.tv_sec = curl_timeo / 1000; |  | ||||||
|       if(timeout.tv_sec > 1) |  | ||||||
|         timeout.tv_sec = 1; |  | ||||||
|     else |     else | ||||||
|         timeout.tv_usec = (curl_timeo % 1000) * 1000; |       repeats = 0; | ||||||
|     } |  | ||||||
|  |  | ||||||
|     /* get file descriptors from the transfers */ |  | ||||||
|     curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd); |  | ||||||
|  |  | ||||||
|     /* In a real-world program you OF COURSE check the return code of the |  | ||||||
|        function calls.  On success, the value of maxfd is guaranteed to be |  | ||||||
|        greater or equal than -1.  We call select(maxfd + 1, ...), specially in |  | ||||||
|        case of (maxfd == -1), we call select(0, ...), which is basically equal |  | ||||||
|        to sleep. */ |  | ||||||
|  |  | ||||||
|     rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout); |  | ||||||
|  |  | ||||||
|     switch(rc) { |  | ||||||
|     case -1: |  | ||||||
|       /* select error */ |  | ||||||
|       still_running = 0; |  | ||||||
|       printf("select() returns error, this is badness\n"); |  | ||||||
|       break; |  | ||||||
|     case 0: |  | ||||||
|     default: |  | ||||||
|       /* timeout or readable/writable sockets */ |  | ||||||
|     curl_multi_perform(multi_handle, &still_running); |     curl_multi_perform(multi_handle, &still_running); | ||||||
|       break; |  | ||||||
|     } |  | ||||||
|   } while(still_running); |   } while(still_running); | ||||||
|  |  | ||||||
|   curl_multi_remove_handle(multi_handle, http_handle); |   curl_multi_remove_handle(multi_handle, http_handle); | ||||||
|   | |||||||
| @@ -83,13 +83,14 @@ void add_download(const char *url, int num) | |||||||
|   sprintf(filename, "%d.download", num); |   sprintf(filename, "%d.download", num); | ||||||
|  |  | ||||||
|   file = fopen(filename, "w"); |   file = fopen(filename, "w"); | ||||||
|   if (file == NULL) { |   if(!file) { | ||||||
|     fprintf(stderr, "Error opening %s\n", filename); |     fprintf(stderr, "Error opening %s\n", filename); | ||||||
|     return; |     return; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   handle = curl_easy_init(); |   handle = curl_easy_init(); | ||||||
|   curl_easy_setopt(handle, CURLOPT_WRITEDATA, file); |   curl_easy_setopt(handle, CURLOPT_WRITEDATA, file); | ||||||
|  |   curl_easy_setopt(handle, CURLOPT_PRIVATE, file); | ||||||
|   curl_easy_setopt(handle, CURLOPT_URL, url); |   curl_easy_setopt(handle, CURLOPT_URL, url); | ||||||
|   curl_multi_add_handle(curl_handle, handle); |   curl_multi_add_handle(curl_handle, handle); | ||||||
|   fprintf(stderr, "Added download %s -> %s\n", url, filename); |   fprintf(stderr, "Added download %s -> %s\n", url, filename); | ||||||
| @@ -101,16 +102,21 @@ static void check_multi_info(void) | |||||||
|   char *done_url; |   char *done_url; | ||||||
|   CURLMsg *message; |   CURLMsg *message; | ||||||
|   int pending; |   int pending; | ||||||
|  |   FILE *file; | ||||||
|  |  | ||||||
|   while((message = curl_multi_info_read(curl_handle, &pending))) { |   while((message = curl_multi_info_read(curl_handle, &pending))) { | ||||||
|     switch(message->msg) { |     switch(message->msg) { | ||||||
|     case CURLMSG_DONE: |     case CURLMSG_DONE: | ||||||
|       curl_easy_getinfo(message->easy_handle, CURLINFO_EFFECTIVE_URL, |       curl_easy_getinfo(message->easy_handle, CURLINFO_EFFECTIVE_URL, | ||||||
|                         &done_url); |                         &done_url); | ||||||
|  |       curl_easy_getinfo(message->easy_handle, CURLINFO_PRIVATE, &file); | ||||||
|       printf("%s DONE\n", done_url); |       printf("%s DONE\n", done_url); | ||||||
|  |  | ||||||
|       curl_multi_remove_handle(curl_handle, message->easy_handle); |       curl_multi_remove_handle(curl_handle, message->easy_handle); | ||||||
|       curl_easy_cleanup(message->easy_handle); |       curl_easy_cleanup(message->easy_handle); | ||||||
|  |       if(file) { | ||||||
|  |         fclose(file); | ||||||
|  |       } | ||||||
|       break; |       break; | ||||||
|  |  | ||||||
|     default: |     default: | ||||||
| @@ -219,5 +225,6 @@ int main(int argc, char **argv) | |||||||
|  |  | ||||||
|   uv_run(loop, UV_RUN_DEFAULT); |   uv_run(loop, UV_RUN_DEFAULT); | ||||||
|   curl_multi_cleanup(curl_handle); |   curl_multi_cleanup(curl_handle); | ||||||
|  |  | ||||||
|   return 0; |   return 0; | ||||||
| } | } | ||||||
|   | |||||||
| @@ -88,6 +88,7 @@ int main(void) | |||||||
|     fd_set fdexcep; |     fd_set fdexcep; | ||||||
|     int maxfd = -1; |     int maxfd = -1; | ||||||
|     int rc; |     int rc; | ||||||
|  |     CURLMcode mc; /* curl_multi_fdset() return code */ | ||||||
|  |  | ||||||
|     long curl_timeo = -1; |     long curl_timeo = -1; | ||||||
|  |  | ||||||
| @@ -109,15 +110,36 @@ int main(void) | |||||||
|         timeout.tv_usec = (curl_timeo % 1000) * 1000; |         timeout.tv_usec = (curl_timeo % 1000) * 1000; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     /* Get file descriptors from the transfers */ |     /* get file descriptors from the transfers */ | ||||||
|     curl_multi_fdset(mcurl, &fdread, &fdwrite, &fdexcep, &maxfd); |     mc = curl_multi_fdset(mcurl, &fdread, &fdwrite, &fdexcep, &maxfd); | ||||||
|  |  | ||||||
|     /* In a real-world program you OF COURSE check the return code of the |     if(mc != CURLM_OK) | ||||||
|        function calls. On success, the value of maxfd is guaranteed to be |     { | ||||||
|        greater or equal than -1. We call select(maxfd + 1, ...), specially in |       fprintf(stderr, "curl_multi_fdset() failed, code %d.\n", mc); | ||||||
|        case of (maxfd == -1), we call select(0, ...), which is basically equal |       break; | ||||||
|        to sleep. */ |     } | ||||||
|  |  | ||||||
|  |     /* On success the value of maxfd is guaranteed to be >= -1. We call | ||||||
|  |        select(maxfd + 1, ...); specially in case of (maxfd == -1) there are | ||||||
|  |        no fds ready yet so we call select(0, ...) --or Sleep() on Windows-- | ||||||
|  |        to sleep 100ms, which is the minimum suggested value in the | ||||||
|  |        curl_multi_fdset() doc. */ | ||||||
|  |  | ||||||
|  |     if(maxfd == -1) { | ||||||
|  | #ifdef _WIN32 | ||||||
|  |       Sleep(100); | ||||||
|  |       rc = 0; | ||||||
|  | #else | ||||||
|  |       /* Portable sleep for platforms other than Windows. */ | ||||||
|  |       struct timeval wait = { 0, 100 * 1000 }; /* 100ms */ | ||||||
|  |       rc = select(0, NULL, NULL, NULL, &wait); | ||||||
|  | #endif | ||||||
|  |     } | ||||||
|  |     else { | ||||||
|  |       /* Note that on some platforms 'timeout' may be modified by select(). | ||||||
|  |          If you need access to the original value save a copy beforehand. */ | ||||||
|       rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout); |       rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     if(tvdiff(tvnow(), mp_start) > MULTI_PERFORM_HANG_TIMEOUT) { |     if(tvdiff(tvnow(), mp_start) > MULTI_PERFORM_HANG_TIMEOUT) { | ||||||
|       fprintf(stderr, |       fprintf(stderr, | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ | |||||||
|  *                            | (__| |_| |  _ <| |___ |  *                            | (__| |_| |  _ <| |___ | ||||||
|  *                             \___|\___/|_| \_\_____| |  *                             \___|\___/|_| \_\_____| | ||||||
|  * |  * | ||||||
|  * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al. |  * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||||
|  * |  * | ||||||
|  * This software is licensed as described in the file COPYING, which |  * This software is licensed as described in the file COPYING, which | ||||||
|  * you should have received as part of this distribution. The terms |  * you should have received as part of this distribution. The terms | ||||||
| @@ -53,15 +53,18 @@ int main(void) | |||||||
|   /* send all data to this function  */ |   /* send all data to this function  */ | ||||||
|   curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, write_data); |   curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, write_data); | ||||||
|  |  | ||||||
|   /* open the files */ |   /* open the header file */ | ||||||
|   headerfile = fopen(headerfilename, "wb"); |   headerfile = fopen(headerfilename, "wb"); | ||||||
|   if (headerfile == NULL) { |   if(!headerfile) { | ||||||
|     curl_easy_cleanup(curl_handle); |     curl_easy_cleanup(curl_handle); | ||||||
|     return -1; |     return -1; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   /* open the body file */ | ||||||
|   bodyfile = fopen(bodyfilename, "wb"); |   bodyfile = fopen(bodyfilename, "wb"); | ||||||
|   if (bodyfile == NULL) { |   if(!bodyfile) { | ||||||
|     curl_easy_cleanup(curl_handle); |     curl_easy_cleanup(curl_handle); | ||||||
|  |     fclose(headerfile); | ||||||
|     return -1; |     return -1; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -155,6 +155,7 @@ int main(void) | |||||||
|     fd_set fdexcep; |     fd_set fdexcep; | ||||||
|     int maxfd = -1; |     int maxfd = -1; | ||||||
|     int rc; |     int rc; | ||||||
|  |     CURLMcode mc; /* curl_multi_fdset() return code */ | ||||||
|  |  | ||||||
|     long curl_timeo = -1; |     long curl_timeo = -1; | ||||||
|  |  | ||||||
| @@ -176,15 +177,36 @@ int main(void) | |||||||
|         timeout.tv_usec = (curl_timeo % 1000) * 1000; |         timeout.tv_usec = (curl_timeo % 1000) * 1000; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     /* Get file descriptors from the transfers */ |     /* get file descriptors from the transfers */ | ||||||
|     curl_multi_fdset(mcurl, &fdread, &fdwrite, &fdexcep, &maxfd); |     mc = curl_multi_fdset(mcurl, &fdread, &fdwrite, &fdexcep, &maxfd); | ||||||
|  |  | ||||||
|     /* In a real-world program you OF COURSE check the return code of the |     if(mc != CURLM_OK) | ||||||
|        function calls.  On success, the value of maxfd is guaranteed to be |     { | ||||||
|        greater or equal than -1.  We call select(maxfd + 1, ...), specially in |       fprintf(stderr, "curl_multi_fdset() failed, code %d.\n", mc); | ||||||
|        case of (maxfd == -1), we call select(0, ...), which is basically equal |       break; | ||||||
|        to sleep. */ |     } | ||||||
|  |  | ||||||
|  |     /* On success the value of maxfd is guaranteed to be >= -1. We call | ||||||
|  |        select(maxfd + 1, ...); specially in case of (maxfd == -1) there are | ||||||
|  |        no fds ready yet so we call select(0, ...) --or Sleep() on Windows-- | ||||||
|  |        to sleep 100ms, which is the minimum suggested value in the | ||||||
|  |        curl_multi_fdset() doc. */ | ||||||
|  |  | ||||||
|  |     if(maxfd == -1) { | ||||||
|  | #ifdef _WIN32 | ||||||
|  |       Sleep(100); | ||||||
|  |       rc = 0; | ||||||
|  | #else | ||||||
|  |       /* Portable sleep for platforms other than Windows. */ | ||||||
|  |       struct timeval wait = { 0, 100 * 1000 }; /* 100ms */ | ||||||
|  |       rc = select(0, NULL, NULL, NULL, &wait); | ||||||
|  | #endif | ||||||
|  |     } | ||||||
|  |     else { | ||||||
|  |       /* Note that on some platforms 'timeout' may be modified by select(). | ||||||
|  |          If you need access to the original value save a copy beforehand. */ | ||||||
|       rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout); |       rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     if(tvdiff(tvnow(), mp_start) > MULTI_PERFORM_HANG_TIMEOUT) { |     if(tvdiff(tvnow(), mp_start) > MULTI_PERFORM_HANG_TIMEOUT) { | ||||||
|       fprintf(stderr, |       fprintf(stderr, | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ | |||||||
|  *                            | (__| |_| |  _ <| |___ |  *                            | (__| |_| |  _ <| |___ | ||||||
|  *                             \___|\___/|_| \_\_____| |  *                             \___|\___/|_| \_\_____| | ||||||
|  * |  * | ||||||
|  * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al. |  * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||||
|  * |  * | ||||||
|  * This software is licensed as described in the file COPYING, which |  * This software is licensed as described in the file COPYING, which | ||||||
|  * you should have received as part of this distribution. The terms |  * you should have received as part of this distribution. The terms | ||||||
| @@ -92,6 +92,8 @@ | |||||||
| #define MAX_STRING              256 | #define MAX_STRING              256 | ||||||
| #define MAX_STRING1             MAX_STRING+1 | #define MAX_STRING1             MAX_STRING+1 | ||||||
|  |  | ||||||
|  | #define SYNCTIME_UA "synctime/1.0" | ||||||
|  |  | ||||||
| typedef struct | typedef struct | ||||||
| { | { | ||||||
|   char http_proxy[MAX_STRING1]; |   char http_proxy[MAX_STRING1]; | ||||||
| @@ -99,12 +101,11 @@ typedef struct | |||||||
|   char timeserver[MAX_STRING1]; |   char timeserver[MAX_STRING1]; | ||||||
| } conf_t; | } conf_t; | ||||||
|  |  | ||||||
| const char DefaultTimeServer[4][MAX_STRING1] = | const char DefaultTimeServer[3][MAX_STRING1] = | ||||||
| { | { | ||||||
|   "http://nist.time.gov/timezone.cgi?UTC/s/0", |   "http://pool.ntp.org/", | ||||||
|   "http://www.google.com/", |   "http://nist.time.gov/", | ||||||
|   "http://www.worldtimeserver.com/current_time_in_UTC.aspx", |   "http://www.google.com/" | ||||||
|   "http://www.worldtime.com/cgi-bin/wt.cgi" |  | ||||||
| }; | }; | ||||||
|  |  | ||||||
| const char *DayStr[] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"}; | const char *DayStr[] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"}; | ||||||
| @@ -186,9 +187,9 @@ void SyncTime_CURL_Init(CURL *curl, char *proxy_port, | |||||||
|   if (strlen(proxy_user_password) > 0) |   if (strlen(proxy_user_password) > 0) | ||||||
|     curl_easy_setopt(curl, CURLOPT_PROXYUSERPWD, proxy_user_password); |     curl_easy_setopt(curl, CURLOPT_PROXYUSERPWD, proxy_user_password); | ||||||
|  |  | ||||||
|   /* Trick Webserver by claiming that you are using Microsoft WinXP SP2, IE6 */ | #ifdef SYNCTIME_UA | ||||||
|   curl_easy_setopt(curl, CURLOPT_USERAGENT, |   curl_easy_setopt(curl, CURLOPT_USERAGENT, SYNCTIME_UA); | ||||||
|                    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"); | #endif | ||||||
|   curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, *SyncTime_CURL_WriteOutput); |   curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, *SyncTime_CURL_WriteOutput); | ||||||
|   curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, *SyncTime_CURL_WriteHeader); |   curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, *SyncTime_CURL_WriteHeader); | ||||||
| } | } | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ | |||||||
| #                            | (__| |_| |  _ <| |___ | #                            | (__| |_| |  _ <| |___ | ||||||
| #                             \___|\___/|_| \_\_____| | #                             \___|\___/|_| \_\_____| | ||||||
| # | # | ||||||
| # Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al. | # Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||||
| # | # | ||||||
| # This software is licensed as described in the file COPYING, which | # This software is licensed as described in the file COPYING, which | ||||||
| # you should have received as part of this distribution. The terms | # you should have received as part of this distribution. The terms | ||||||
| @@ -40,7 +40,7 @@ man_MANS = curl_easy_cleanup.3 curl_easy_getinfo.3 curl_easy_init.3	 \ | |||||||
|  curl_easy_unescape.3 curl_multi_setopt.3 curl_multi_socket.3		 \ |  curl_easy_unescape.3 curl_multi_setopt.3 curl_multi_socket.3		 \ | ||||||
|  curl_multi_timeout.3 curl_formget.3 curl_multi_assign.3		 \ |  curl_multi_timeout.3 curl_formget.3 curl_multi_assign.3		 \ | ||||||
|  curl_easy_pause.3 curl_easy_recv.3 curl_easy_send.3			 \ |  curl_easy_pause.3 curl_easy_recv.3 curl_easy_send.3			 \ | ||||||
|  curl_multi_socket_action.3 curl_multi_wait.3 |  curl_multi_socket_action.3 curl_multi_wait.3 libcurl-symbols.3 | ||||||
|  |  | ||||||
| HTMLPAGES = curl_easy_cleanup.html curl_easy_getinfo.html		\ | HTMLPAGES = curl_easy_cleanup.html curl_easy_getinfo.html		\ | ||||||
|  curl_easy_init.html curl_easy_perform.html curl_easy_setopt.html	\ |  curl_easy_init.html curl_easy_perform.html curl_easy_setopt.html	\ | ||||||
| @@ -60,7 +60,7 @@ HTMLPAGES = curl_easy_cleanup.html curl_easy_getinfo.html		\ | |||||||
|  curl_easy_unescape.html curl_multi_setopt.html curl_multi_socket.html	\ |  curl_easy_unescape.html curl_multi_setopt.html curl_multi_socket.html	\ | ||||||
|  curl_multi_timeout.html curl_formget.html curl_multi_assign.html	\ |  curl_multi_timeout.html curl_formget.html curl_multi_assign.html	\ | ||||||
|  curl_easy_pause.html curl_easy_recv.html curl_easy_send.html		\ |  curl_easy_pause.html curl_easy_recv.html curl_easy_send.html		\ | ||||||
|  curl_multi_socket_action.html curl_multi_wait.html |  curl_multi_socket_action.html curl_multi_wait.html libcurl-symbols.html | ||||||
|  |  | ||||||
| PDFPAGES = curl_easy_cleanup.pdf curl_easy_getinfo.pdf			 \ | PDFPAGES = curl_easy_cleanup.pdf curl_easy_getinfo.pdf			 \ | ||||||
|  curl_easy_init.pdf curl_easy_perform.pdf curl_easy_setopt.pdf		 \ |  curl_easy_init.pdf curl_easy_perform.pdf curl_easy_setopt.pdf		 \ | ||||||
| @@ -79,7 +79,8 @@ PDFPAGES = curl_easy_cleanup.pdf curl_easy_getinfo.pdf			 \ | |||||||
|  curl_easy_escape.pdf curl_easy_unescape.pdf curl_multi_setopt.pdf	 \ |  curl_easy_escape.pdf curl_easy_unescape.pdf curl_multi_setopt.pdf	 \ | ||||||
|  curl_multi_socket.pdf curl_multi_timeout.pdf curl_formget.pdf		 \ |  curl_multi_socket.pdf curl_multi_timeout.pdf curl_formget.pdf		 \ | ||||||
|  curl_multi_assign.pdf curl_easy_pause.pdf curl_easy_recv.pdf		 \ |  curl_multi_assign.pdf curl_easy_pause.pdf curl_easy_recv.pdf		 \ | ||||||
|  curl_easy_send.pdf curl_multi_socket_action.pdf curl_multi_wait.pdf |  curl_easy_send.pdf curl_multi_socket_action.pdf curl_multi_wait.pdf     \ | ||||||
|  |  libcurl-symbols.pdf | ||||||
|  |  | ||||||
| m4macrodir = $(datadir)/aclocal | m4macrodir = $(datadir)/aclocal | ||||||
| dist_m4macro_DATA = libcurl.m4 | dist_m4macro_DATA = libcurl.m4 | ||||||
| @@ -87,11 +88,14 @@ dist_m4macro_DATA = libcurl.m4 | |||||||
| CLEANFILES = $(HTMLPAGES) $(PDFPAGES) | CLEANFILES = $(HTMLPAGES) $(PDFPAGES) | ||||||
|  |  | ||||||
| EXTRA_DIST = $(man_MANS) $(HTMLPAGES) index.html $(PDFPAGES) ABI \ | EXTRA_DIST = $(man_MANS) $(HTMLPAGES) index.html $(PDFPAGES) ABI \ | ||||||
|   symbols-in-versions symbols.pl |   symbols-in-versions symbols.pl mksymbolsmanpage.pl | ||||||
| MAN2HTML= roffit --mandir=. < $< >$@ | MAN2HTML= roffit --mandir=. < $< >$@ | ||||||
|  |  | ||||||
| SUFFIXES = .3 .html | SUFFIXES = .3 .html | ||||||
|  |  | ||||||
|  | libcurl-symbols.3: $(srcdir)/symbols-in-versions $(srcdir)/mksymbolsmanpage.pl | ||||||
|  | 	perl $(srcdir)/mksymbolsmanpage.pl < $< > $@ | ||||||
|  |  | ||||||
| html: $(HTMLPAGES) | html: $(HTMLPAGES) | ||||||
| 	cd opts; make html | 	cd opts; make html | ||||||
|  |  | ||||||
|   | |||||||
| @@ -52,6 +52,16 @@ safely remove all the strings you've previously told libcurl to use, as it | |||||||
| won't use them anymore now. | won't use them anymore now. | ||||||
| .SH RETURN VALUE | .SH RETURN VALUE | ||||||
| None | None | ||||||
|  | .SH EXAMPLE | ||||||
|  | .nf | ||||||
|  | CURL *curl = curl_easy_init(); | ||||||
|  | if(curl) { | ||||||
|  |   CURLcode res; | ||||||
|  |   curl_easy_setopt(curl, CURLOPT_URL, "http://example.com"); | ||||||
|  |   res = curl_easy_perform(curl); | ||||||
|  |   curl_easy_cleanup(curl); | ||||||
|  | } | ||||||
|  | .fi | ||||||
| .SH "SEE ALSO" | .SH "SEE ALSO" | ||||||
| .BR curl_easy_init "(3), " | .BR curl_easy_init "(3), " | ||||||
|  |  | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ | |||||||
| .\" *                            | (__| |_| |  _ <| |___ | .\" *                            | (__| |_| |  _ <| |___ | ||||||
| .\" *                             \___|\___/|_| \_\_____| | .\" *                             \___|\___/|_| \_\_____| | ||||||
| .\" * | .\" * | ||||||
| .\" * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al. | .\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||||
| .\" * | .\" * | ||||||
| .\" * This software is licensed as described in the file COPYING, which | .\" * This software is licensed as described in the file COPYING, which | ||||||
| .\" * you should have received as part of this distribution. The terms | .\" * you should have received as part of this distribution. The terms | ||||||
| @@ -26,13 +26,13 @@ curl_easy_escape - URL encodes the given string | |||||||
| .SH SYNOPSIS | .SH SYNOPSIS | ||||||
| .B #include <curl/curl.h> | .B #include <curl/curl.h> | ||||||
| .sp | .sp | ||||||
| .BI "char *curl_easy_escape( CURL *" curl ", char *" url ", int "length " );" | .BI "char *curl_easy_escape( CURL *" curl ", char *" string ", int "length " );" | ||||||
| .ad | .ad | ||||||
| .SH DESCRIPTION | .SH DESCRIPTION | ||||||
| This function converts the given input string to an URL encoded string and | This function converts the given input \fBstring\fP to an URL encoded string | ||||||
| returns that as a new allocated string. All input characters that are not a-z, | and returns that as a new allocated string. All input characters that are not | ||||||
| A-Z, 0-9, '-', '.', '_' or '~' are converted to their "URL escaped" version | a-z, A-Z, 0-9, '-', '.', '_' or '~' are converted to their "URL escaped" | ||||||
| (%NN where NN is a two-digit hexadecimal number). | version (%NN where NN is a two-digit hexadecimal number). | ||||||
|  |  | ||||||
| If the \fBlength\fP argument is set to 0 (zero), \fIcurl_easy_escape(3)\fP | If the \fBlength\fP argument is set to 0 (zero), \fIcurl_easy_escape(3)\fP | ||||||
| uses strlen() on the input \fBurl\fP to find out the size. | uses strlen() on the input \fBurl\fP to find out the size. | ||||||
| @@ -42,5 +42,16 @@ You must \fIcurl_free(3)\fP the returned string when you're done with it. | |||||||
| Added in 7.15.4 and replaces the old \fIcurl_escape(3)\fP function. | Added in 7.15.4 and replaces the old \fIcurl_escape(3)\fP function. | ||||||
| .SH RETURN VALUE | .SH RETURN VALUE | ||||||
| A pointer to a zero terminated string or NULL if it failed. | A pointer to a zero terminated string or NULL if it failed. | ||||||
|  | .SH EXAMPLE | ||||||
|  | .nf | ||||||
|  | CURL *curl = curl_easy_init(); | ||||||
|  | if(curl) { | ||||||
|  |   char *output = curl_easy_escape(curl, "data to convert", 15); | ||||||
|  |   if(output) { | ||||||
|  |     printf("Encoded: %s\n", output); | ||||||
|  |     curl_free(output); | ||||||
|  |   } | ||||||
|  | }} | ||||||
|  | .fi | ||||||
| .SH "SEE ALSO" | .SH "SEE ALSO" | ||||||
| .BR curl_easy_unescape "(3), " curl_free "(3), " RFC 2396 | .BR curl_easy_unescape "(3), " curl_free "(3), " RFC 3986 | ||||||
|   | |||||||
| @@ -44,5 +44,16 @@ this function. | |||||||
| .SH RETURN VALUE | .SH RETURN VALUE | ||||||
| If this function returns NULL, something went wrong and you cannot use the | If this function returns NULL, something went wrong and you cannot use the | ||||||
| other curl functions. | other curl functions. | ||||||
|  | .SH EXAMPLE | ||||||
|  | .nf | ||||||
|  | CURL *curl = curl_easy_init(); | ||||||
|  | if(curl) { | ||||||
|  |   CURLcode res; | ||||||
|  |   curl_easy_setopt(curl, CURLOPT_URL, "http://example.com"); | ||||||
|  |   res = curl_easy_perform(curl); | ||||||
|  |   curl_easy_cleanup(curl); | ||||||
|  | } | ||||||
|  | .fi | ||||||
| .SH "SEE ALSO" | .SH "SEE ALSO" | ||||||
| .BR curl_easy_cleanup "(3), " curl_global_init "(3), " curl_easy_reset "(3)" | .BR curl_easy_cleanup "(3), " curl_global_init "(3), " curl_easy_reset "(3), " | ||||||
|  | .BR curl_easy_perform "(3) " | ||||||
|   | |||||||
| @@ -21,7 +21,7 @@ | |||||||
| .\" ************************************************************************** | .\" ************************************************************************** | ||||||
| .TH curl_easy_perform 3 "5 Mar 2001" "libcurl 7.7" "libcurl Manual" | .TH curl_easy_perform 3 "5 Mar 2001" "libcurl 7.7" "libcurl Manual" | ||||||
| .SH NAME | .SH NAME | ||||||
| curl_easy_perform - Perform a file transfer | curl_easy_perform - perform a blocking file transfer | ||||||
| .SH SYNOPSIS | .SH SYNOPSIS | ||||||
| .B #include <curl/curl.h> | .B #include <curl/curl.h> | ||||||
| .sp | .sp | ||||||
| @@ -58,6 +58,16 @@ CURLE_OK (0) means everything was ok, non-zero means an error occurred as | |||||||
| defines - see \fIlibcurl-errors(3)\fP. If the \fBCURLOPT_ERRORBUFFER(3)\fP was | defines - see \fIlibcurl-errors(3)\fP. If the \fBCURLOPT_ERRORBUFFER(3)\fP was | ||||||
| set with \fIcurl_easy_setopt(3)\fP there will be a readable error message in | set with \fIcurl_easy_setopt(3)\fP there will be a readable error message in | ||||||
| the error buffer when non-zero is returned. | the error buffer when non-zero is returned. | ||||||
|  | .SH EXAMPLE | ||||||
|  | .nf | ||||||
|  | CURL *curl = curl_easy_init(); | ||||||
|  | if(curl) { | ||||||
|  |   CURLcode res; | ||||||
|  |   curl_easy_setopt(curl, CURLOPT_URL, "http://example.com"); | ||||||
|  |   res = curl_easy_perform(curl); | ||||||
|  |   curl_easy_cleanup(curl); | ||||||
|  | }} | ||||||
|  | .fi | ||||||
| .SH "SEE ALSO" | .SH "SEE ALSO" | ||||||
| .BR curl_easy_init "(3), " curl_easy_setopt "(3), " | .BR curl_easy_init "(3), " curl_easy_setopt "(3), " | ||||||
| .BR curl_multi_add_handle "(3), " curl_multi_perform "(3), " | .BR curl_multi_add_handle "(3), " curl_multi_perform "(3), " | ||||||
|   | |||||||
| @@ -187,6 +187,8 @@ Enable TCP keep-alive. See \fICURLOPT_TCP_KEEPALIVE(3)\fP | |||||||
| Idle time before sending keep-alive. See \fICURLOPT_TCP_KEEPIDLE(3)\fP | Idle time before sending keep-alive. See \fICURLOPT_TCP_KEEPIDLE(3)\fP | ||||||
| .IP CURLOPT_TCP_KEEPINTVL | .IP CURLOPT_TCP_KEEPINTVL | ||||||
| Interval between keep-alive probes. See \fICURLOPT_TCP_KEEPINTVL(3)\fP | Interval between keep-alive probes. See \fICURLOPT_TCP_KEEPINTVL(3)\fP | ||||||
|  | .IP CURLOPT_UNIX_SOCKET_PATH | ||||||
|  | Path to a Unix domain socket. See \fICURLOPT_UNIX_SOCKET_PATH(3)\fP | ||||||
| .SH NAMES and PASSWORDS OPTIONS (Authentication) | .SH NAMES and PASSWORDS OPTIONS (Authentication) | ||||||
| .IP CURLOPT_NETRC | .IP CURLOPT_NETRC | ||||||
| Enable .netrc parsing. See \fICURLOPT_NETRC(3)\fP | Enable .netrc parsing. See \fICURLOPT_NETRC(3)\fP | ||||||
| @@ -446,6 +448,8 @@ Certificate Revocation List. See \fICURLOPT_CRLFILE(3)\fP | |||||||
| Verify the host name in the SSL certificate. See \fICURLOPT_SSL_VERIFYHOST(3)\fP | Verify the host name in the SSL certificate. See \fICURLOPT_SSL_VERIFYHOST(3)\fP | ||||||
| .IP CURLOPT_CERTINFO | .IP CURLOPT_CERTINFO | ||||||
| Extract certificate info. See \fICURLOPT_CERTINFO(3)\fP | Extract certificate info. See \fICURLOPT_CERTINFO(3)\fP | ||||||
|  | .IP CURLOPT_PINNEDPUBLICKEY | ||||||
|  | Set pinned SSL public key . See \fICURLOPT_PINNEDPUBLICKEY(3)\fP | ||||||
| .IP CURLOPT_RANDOM_FILE | .IP CURLOPT_RANDOM_FILE | ||||||
| Provide source for entropy random data. See \fICURLOPT_RANDOM_FILE(3)\fP | Provide source for entropy random data. See \fICURLOPT_RANDOM_FILE(3)\fP | ||||||
| .IP CURLOPT_EGDSOCKET | .IP CURLOPT_EGDSOCKET | ||||||
| @@ -497,6 +501,16 @@ the library is too old to support it or the option was removed in a recent | |||||||
| version, this function will return \fICURLE_UNKNOWN_OPTION\fP. If support for | version, this function will return \fICURLE_UNKNOWN_OPTION\fP. If support for | ||||||
| the option was disabled at compile-time, it will return | the option was disabled at compile-time, it will return | ||||||
| \fICURLE_NOT_BUILT_IN\fP. | \fICURLE_NOT_BUILT_IN\fP. | ||||||
|  | .SH EXAMPLE | ||||||
|  | .nf | ||||||
|  | CURL *curl = curl_easy_init(); | ||||||
|  | if(curl) { | ||||||
|  |   CURLcode res; | ||||||
|  |   curl_easy_setopt(curl, CURLOPT_URL, "http://example.com"); | ||||||
|  |   res = curl_easy_perform(curl); | ||||||
|  |   curl_easy_cleanup(curl); | ||||||
|  | }} | ||||||
|  | .fi | ||||||
| .SH "SEE ALSO" | .SH "SEE ALSO" | ||||||
| .BR curl_easy_init "(3), " curl_easy_cleanup "(3), " curl_easy_reset "(3), " | .BR curl_easy_init "(3), " curl_easy_cleanup "(3), " curl_easy_reset "(3), " | ||||||
| .BR curl_multi_setopt "(3), " | .BR curl_multi_setopt "(3), " | ||||||
|   | |||||||
| @@ -62,10 +62,10 @@ proceed and call \fIcurl_multi_perform(3)\fP anyway. How long to wait? We | |||||||
| suggest 100 milliseconds at least, but you may want to test it out in your own | suggest 100 milliseconds at least, but you may want to test it out in your own | ||||||
| particular conditions to find a suitable value. | particular conditions to find a suitable value. | ||||||
|  |  | ||||||
| When doing select(), you should use \fBcurl_multi_timeout\fP to figure out how | When doing select(), you should use \fIcurl_multi_timeout(3)\fP to figure out | ||||||
| long to wait for action. Call \fIcurl_multi_perform(3)\fP even if no activity | how long to wait for action. Call \fIcurl_multi_perform(3)\fP even if no | ||||||
| has been seen on the fd_sets after the timeout expires as otherwise internal | activity has been seen on the fd_sets after the timeout expires as otherwise | ||||||
| retries and timeouts may not work as you'd think and want. | internal retries and timeouts may not work as you'd think and want. | ||||||
|  |  | ||||||
| If one of the sockets used by libcurl happens to be larger than what can be | If one of the sockets used by libcurl happens to be larger than what can be | ||||||
| set in an fd_set, which on POSIX systems means that the file descriptor is | set in an fd_set, which on POSIX systems means that the file descriptor is | ||||||
| @@ -79,4 +79,5 @@ CURLMcode type, general libcurl multi interface error code. See | |||||||
| \fIlibcurl-errors(3)\fP | \fIlibcurl-errors(3)\fP | ||||||
| .SH "SEE ALSO" | .SH "SEE ALSO" | ||||||
| .BR curl_multi_cleanup "(3), " curl_multi_init "(3), " | .BR curl_multi_cleanup "(3), " curl_multi_init "(3), " | ||||||
|  | .BR curl_multi_wait "(3), " | ||||||
| .BR curl_multi_timeout "(3), " curl_multi_perform "(3), " select "(2) " | .BR curl_multi_timeout "(3), " curl_multi_perform "(3), " select "(2) " | ||||||
|   | |||||||
| @@ -74,5 +74,6 @@ period, then it'll wait for action on the file descriptors using | |||||||
| \fIcurl_multi_perform(3)\fP gets called. | \fIcurl_multi_perform(3)\fP gets called. | ||||||
| .SH "SEE ALSO" | .SH "SEE ALSO" | ||||||
| .BR curl_multi_cleanup "(3), " curl_multi_init "(3), " | .BR curl_multi_cleanup "(3), " curl_multi_init "(3), " | ||||||
|  | .BR curl_multi_wait "(3), " | ||||||
| .BR curl_multi_fdset "(3), " curl_multi_info_read "(3), " | .BR curl_multi_fdset "(3), " curl_multi_info_read "(3), " | ||||||
| .BR libcurl-errors "(3)" | .BR libcurl-errors "(3)" | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ | |||||||
| .\" *                            | (__| |_| |  _ <| |___ | .\" *                            | (__| |_| |  _ <| |___ | ||||||
| .\" *                             \___|\___/|_| \_\_____| | .\" *                             \___|\___/|_| \_\_____| | ||||||
| .\" * | .\" * | ||||||
| .\" * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al. | .\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||||
| .\" * | .\" * | ||||||
| .\" * This software is licensed as described in the file COPYING, which | .\" * This software is licensed as described in the file COPYING, which | ||||||
| .\" * you should have received as part of this distribution. The terms | .\" * you should have received as part of this distribution. The terms | ||||||
| @@ -33,9 +33,9 @@ CURLMcode curl_multi_wait(CURLM *multi_handle, | |||||||
|                           int *numfds); |                           int *numfds); | ||||||
| .ad | .ad | ||||||
| .SH DESCRIPTION | .SH DESCRIPTION | ||||||
| This function polls on all file descriptors used by the curl easy handles | \fIcurl_multi_wait(3)\fP polls all file descriptors used by the curl easy | ||||||
| contained in the given multi handle set.  It will block until activity is | handles contained in the given multi handle set.  It will block until activity | ||||||
| detected on at least one of the handles or \fItimeout_ms\fP has passed. | is detected on at least one of the handles or \fItimeout_ms\fP has passed. | ||||||
| Alternatively, if the multi handle has a pending internal timeout that has a | Alternatively, if the multi handle has a pending internal timeout that has a | ||||||
| shorter expiry time than \fItimeout_ms\fP, that shorter time will be used | shorter expiry time than \fItimeout_ms\fP, that shorter time will be used | ||||||
| instead to make sure timeout accuracy is reasonably kept. | instead to make sure timeout accuracy is reasonably kept. | ||||||
| @@ -43,7 +43,7 @@ instead to make sure timeout accuracy is reasonably kept. | |||||||
| The calling application may pass additional curl_waitfd structures which are | The calling application may pass additional curl_waitfd structures which are | ||||||
| similar to \fIpoll(2)\fP's pollfd structure to be waited on in the same call. | similar to \fIpoll(2)\fP's pollfd structure to be waited on in the same call. | ||||||
|  |  | ||||||
| On completion, if \fInumfds\fP is supplied, it will be populated with the | On completion, if \fInumfds\fP is non-NULL, it will be populated with the | ||||||
| total number of file descriptors on which interesting events occured. This | total number of file descriptors on which interesting events occured. This | ||||||
| number can include both libcurl internal descriptors as well as descriptors | number can include both libcurl internal descriptors as well as descriptors | ||||||
| provided in \fIextra_fds\fP. | provided in \fIextra_fds\fP. | ||||||
|   | |||||||
| @@ -20,7 +20,7 @@ | |||||||
| .\" * | .\" * | ||||||
| .\" ************************************************************************** | .\" ************************************************************************** | ||||||
| .\" | .\" | ||||||
| .TH curl_version_info 3 "2 Aug 2014" "libcurl 7.38.0" "libcurl Manual" | .TH curl_version_info 3 "2 Nov 2014" "libcurl 7.40.0" "libcurl Manual" | ||||||
| .SH NAME | .SH NAME | ||||||
| curl_version_info - returns run-time libcurl version info | curl_version_info - returns run-time libcurl version info | ||||||
| .SH SYNOPSIS | .SH SYNOPSIS | ||||||
| @@ -96,7 +96,10 @@ bits are: | |||||||
| .IP CURL_VERSION_IPV6 | .IP CURL_VERSION_IPV6 | ||||||
| supports IPv6 | supports IPv6 | ||||||
| .IP CURL_VERSION_KERBEROS4 | .IP CURL_VERSION_KERBEROS4 | ||||||
| supports kerberos4 (when using FTP) | supports Kerberos V4 (when using FTP) | ||||||
|  | .IP CURL_VERSION_KERBEROS5 | ||||||
|  | supports Kerberos V5 authentication for FTP, IMAP, POP3, SMTP and SOCKSv5 proxy | ||||||
|  | (Added in 7.40.0) | ||||||
| .IP CURL_VERSION_SSL | .IP CURL_VERSION_SSL | ||||||
| supports SSL (HTTPS/FTPS) (Added in 7.10) | supports SSL (HTTPS/FTPS) (Added in 7.10) | ||||||
| .IP CURL_VERSION_LIBZ | .IP CURL_VERSION_LIBZ | ||||||
| @@ -125,7 +128,7 @@ letters. (Added in 7.12.0) | |||||||
| .IP CURL_VERSION_SSPI | .IP CURL_VERSION_SSPI | ||||||
| libcurl was built with support for SSPI. This is only available on Windows and | libcurl was built with support for SSPI. This is only available on Windows and | ||||||
| makes libcurl use Windows-provided functions for Kerberos, NTLM, SPNEGO and | makes libcurl use Windows-provided functions for Kerberos, NTLM, SPNEGO and | ||||||
| SASL DIGEST-MD5 authentication. It also allows libcurl to use the current user | Digest authentication. It also allows libcurl to use the current user | ||||||
| credentials without the app having to pass them on. (Added in 7.13.2) | credentials without the app having to pass them on. (Added in 7.13.2) | ||||||
| .IP CURL_VERSION_GSSAPI | .IP CURL_VERSION_GSSAPI | ||||||
| libcurl was built with support for GSS-API. This makes libcurl use provided | libcurl was built with support for GSS-API. This makes libcurl use provided | ||||||
| @@ -143,6 +146,9 @@ libcurl was built with support for NTLM delegation to a winbind helper. | |||||||
| .IP CURL_VERSION_HTTP2 | .IP CURL_VERSION_HTTP2 | ||||||
| libcurl was built with support for HTTP2. | libcurl was built with support for HTTP2. | ||||||
| (Added in 7.33.0) | (Added in 7.33.0) | ||||||
|  | .IP CURL_VERSION_UNIX_SOCKETS | ||||||
|  | libcurl was built with support for Unix domain sockets. | ||||||
|  | (Added in 7.40.0) | ||||||
| .RE | .RE | ||||||
| \fIssl_version\fP is an ASCII string for the OpenSSL version used. If libcurl | \fIssl_version\fP is an ASCII string for the OpenSSL version used. If libcurl | ||||||
| has no SSL support, this is NULL. | has no SSL support, this is NULL. | ||||||
|   | |||||||
| @@ -40,7 +40,7 @@ refer to their respective man pages. | |||||||
|  |  | ||||||
| .SH "Building" | .SH "Building" | ||||||
| There are many different ways to build C programs. This chapter will assume a | There are many different ways to build C programs. This chapter will assume a | ||||||
| UNIX-style build process. If you use a different build system, you can still | Unix style build process. If you use a different build system, you can still | ||||||
| read this to get general information that may apply to your environment as | read this to get general information that may apply to your environment as | ||||||
| well. | well. | ||||||
| .IP "Compiling the Program" | .IP "Compiling the Program" | ||||||
| @@ -412,7 +412,7 @@ similar to the \fICURLOPT_USERPWD(3)\fP option like this: | |||||||
|  |  | ||||||
|  curl_easy_setopt(easyhandle, CURLOPT_PROXYUSERPWD, "myname:thesecret"); |  curl_easy_setopt(easyhandle, CURLOPT_PROXYUSERPWD, "myname:thesecret"); | ||||||
|  |  | ||||||
| There's a long time UNIX "standard" way of storing ftp user names and | There's a long time Unix "standard" way of storing FTP user names and | ||||||
| passwords, namely in the $HOME/.netrc file. The file should be made private | passwords, namely in the $HOME/.netrc file. The file should be made private | ||||||
| so that only the user may read it (see also the "Security Considerations" | so that only the user may read it (see also the "Security Considerations" | ||||||
| chapter), as it might contain the password in plain text. libcurl has the | chapter), as it might contain the password in plain text. libcurl has the | ||||||
| @@ -1129,9 +1129,9 @@ analyzer tool and eavesdrop on your passwords. Don't let the fact that HTTP | |||||||
| Basic uses base64 encoded passwords fool you. They may not look readable at a | Basic uses base64 encoded passwords fool you. They may not look readable at a | ||||||
| first glance, but they very easily "deciphered" by anyone within seconds. | first glance, but they very easily "deciphered" by anyone within seconds. | ||||||
|  |  | ||||||
| To avoid this problem, use HTTP authentication methods or other protocols that | To avoid this problem, use an authentication mechanism or other protocol that | ||||||
| don't let snoopers see your password: HTTP with Digest, NTLM or GSS | doesn't let snoopers see your password: Digest, CRAM-MD5, Kerberos, SPNEGO or | ||||||
| authentication, HTTPS, FTPS, SCP, SFTP and FTP-Kerberos are a few examples. | NTLM authentication, HTTPS, FTPS, SCP and SFTP are a few examples. | ||||||
|  |  | ||||||
| .IP "Redirects" | .IP "Redirects" | ||||||
| The \fICURLOPT_FOLLOWLOCATION(3)\fP option automatically follows HTTP | The \fICURLOPT_FOLLOWLOCATION(3)\fP option automatically follows HTTP | ||||||
| @@ -1402,7 +1402,7 @@ This happens on Windows machines when libcurl is built and used as a | |||||||
| DLL. However, you can still do this on Windows if you link with a static | DLL. However, you can still do this on Windows if you link with a static | ||||||
| library. | library. | ||||||
| .IP "[3]" | .IP "[3]" | ||||||
| The curl-config tool is generated at build-time (on UNIX-like systems) and | The curl-config tool is generated at build-time (on Unix-like systems) and | ||||||
| should be installed with the 'make install' or similar instruction that | should be installed with the 'make install' or similar instruction that | ||||||
| installs the library, header files, man pages etc. | installs the library, header files, man pages etc. | ||||||
| .IP "[4]" | .IP "[4]" | ||||||
|   | |||||||
| @@ -148,18 +148,16 @@ the library code.  For example, when libcurl is built for SSL | |||||||
| capability via the GNU TLS library, there is an elaborate tree inside | capability via the GNU TLS library, there is an elaborate tree inside | ||||||
| that library that describes the SSL protocol. | that library that describes the SSL protocol. | ||||||
|  |  | ||||||
| \fIcurl_global_init()\fP is the function that you must call.  This may | \fIcurl_global_init(3)\fP is the function that you must call.  This may | ||||||
| allocate resources (e.g. the memory for the GNU TLS tree mentioned | allocate resources (e.g. the memory for the GNU TLS tree mentioned above), so | ||||||
| above), so the companion function \fIcurl_global_cleanup()\fP releases | the companion function \fIcurl_global_cleanup(3)\fP releases them. | ||||||
| them. |  | ||||||
|  |  | ||||||
| The basic rule for constructing a program that uses libcurl is this: | The basic rule for constructing a program that uses libcurl is this: Call | ||||||
| Call \fIcurl_global_init()\fP, with a \fICURL_GLOBAL_ALL\fP argument, | \fIcurl_global_init(3)\fP, with a \fICURL_GLOBAL_ALL\fP argument, immediately | ||||||
| immediately after the program starts, while it is still only one | after the program starts, while it is still only one thread and before it uses | ||||||
| thread and before it uses libcurl at all.  Call | libcurl at all.  Call \fIcurl_global_cleanup(3)\fP immediately before the | ||||||
| \fIcurl_global_cleanup()\fP immediately before the program exits, when | program exits, when the program is again only one thread and after its last | ||||||
| the program is again only one thread and after its last use of | use of libcurl. | ||||||
| libcurl. |  | ||||||
|  |  | ||||||
| You can call both of these multiple times, as long as all calls meet | You can call both of these multiple times, as long as all calls meet | ||||||
| these requirements and the number of calls to each is the same. | these requirements and the number of calls to each is the same. | ||||||
| @@ -184,48 +182,42 @@ your code doesn't know about other parts of the program -- it doesn't | |||||||
| know whether they use libcurl or not.  And its code doesn't necessarily | know whether they use libcurl or not.  And its code doesn't necessarily | ||||||
| run at the start and end of the whole program. | run at the start and end of the whole program. | ||||||
|  |  | ||||||
| A module like this must have global constant functions of its own, | A module like this must have global constant functions of its own, just like | ||||||
| just like \fIcurl_global_init()\fP and \fIcurl_global_cleanup()\fP. | \fIcurl_global_init(3)\fP and \fIcurl_global_cleanup(3)\fP.  The module thus | ||||||
| The module thus has control at the beginning and end of the program | has control at the beginning and end of the program and has a place to call | ||||||
| and has a place to call the libcurl functions.  Note that if multiple | the libcurl functions.  Note that if multiple modules in the program use | ||||||
| modules in the program use libcurl, they all will separately call the | libcurl, they all will separately call the libcurl functions, and that's OK | ||||||
| libcurl functions, and that's OK because only the first | because only the first \fIcurl_global_init(3)\fP and the last | ||||||
| \fIcurl_global_init()\fP and the last \fIcurl_global_cleanup()\fP in a | \fIcurl_global_cleanup(3)\fP in a program change anything.  (libcurl uses a | ||||||
| program change anything.  (libcurl uses a reference count in static | reference count in static memory). | ||||||
| memory). |  | ||||||
|  |  | ||||||
| In a C++ module, it is common to deal with the global constant | In a C++ module, it is common to deal with the global constant situation by | ||||||
| situation by defining a special class that represents the global | defining a special class that represents the global constant environment of | ||||||
| constant environment of the module.  A program always has exactly one | the module.  A program always has exactly one object of the class, in static | ||||||
| object of the class, in static storage.  That way, the program | storage.  That way, the program automatically calls the constructor of the | ||||||
| automatically calls the constructor of the object as the program | object as the program starts up and the destructor as it terminates.  As the | ||||||
| starts up and the destructor as it terminates.  As the author of this | author of this libcurl-using module, you can make the constructor call | ||||||
| libcurl-using module, you can make the constructor call | \fIcurl_global_init(3)\fP and the destructor call \fIcurl_global_cleanup(3)\fP | ||||||
| \fIcurl_global_init()\fP and the destructor call | and satisfy libcurl's requirements without your user having to think about it. | ||||||
| \fIcurl_global_cleanup()\fP and satisfy libcurl's requirements without |  | ||||||
| your user having to think about it. |  | ||||||
|  |  | ||||||
| \fIcurl_global_init()\fP has an argument that tells what particular | \fIcurl_global_init(3)\fP has an argument that tells what particular parts of | ||||||
| parts of the global constant environment to set up.  In order to | the global constant environment to set up.  In order to successfully use any | ||||||
| successfully use any value except \fICURL_GLOBAL_ALL\fP (which says to | value except \fICURL_GLOBAL_ALL\fP (which says to set up the whole thing), you | ||||||
| set up the whole thing), you must have specific knowledge of internal | must have specific knowledge of internal workings of libcurl and all other | ||||||
| workings of libcurl and all other parts of the program of which it is | parts of the program of which it is part. | ||||||
| part. |  | ||||||
|  |  | ||||||
| A special part of the global constant environment is the identity of | A special part of the global constant environment is the identity of the | ||||||
| the memory allocator.  \fIcurl_global_init()\fP selects the system | memory allocator.  \fIcurl_global_init(3)\fP selects the system default memory | ||||||
| default memory allocator, but you can use \fIcurl_global_init_mem()\fP | allocator, but you can use \fIcurl_global_init_mem(3)\fP to supply one of your | ||||||
| to supply one of your own.  However, there is no way to use | own.  However, there is no way to use \fIcurl_global_init_mem(3)\fP in a | ||||||
| \fIcurl_global_init_mem()\fP in a modular program -- all modules in | modular program -- all modules in the program that might use libcurl would | ||||||
| the program that might use libcurl would have to agree on one | have to agree on one allocator. | ||||||
| allocator. |  | ||||||
|  |  | ||||||
| There is a failsafe in libcurl that makes it usable in simple | There is a failsafe in libcurl that makes it usable in simple situations | ||||||
| situations without you having to worry about the global constant | without you having to worry about the global constant environment at all: | ||||||
| environment at all: \fIcurl_easy_init()\fP sets up the environment | \fIcurl_easy_init(3)\fP sets up the environment itself if it hasn't been done | ||||||
| itself if it hasn't been done yet.  The resources it acquires to do so | yet.  The resources it acquires to do so get released by the operating system | ||||||
| get released by the operating system automatically when the program | automatically when the program exits. | ||||||
| exits. |  | ||||||
|  |  | ||||||
| This failsafe feature exists mainly for backward compatibility because | This failsafe feature exists mainly for backward compatibility because | ||||||
| there was a time when the global functions didn't exist.  Because it | there was a time when the global functions didn't exist.  Because it | ||||||
|   | |||||||
							
								
								
									
										72
									
								
								docs/libcurl/mksymbolsmanpage.pl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										72
									
								
								docs/libcurl/mksymbolsmanpage.pl
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,72 @@ | |||||||
|  | #!/usr/bin/perl | ||||||
|  |  | ||||||
|  | my $version="7.41.0"; | ||||||
|  |  | ||||||
|  | use POSIX qw(strftime); | ||||||
|  | my $date = strftime "%b %e, %Y", localtime; | ||||||
|  | my $year = strftime "%Y", localtime; | ||||||
|  |  | ||||||
|  | print <<HEADER | ||||||
|  | .\" ************************************************************************** | ||||||
|  | .\" *                                  _   _ ____  _ | ||||||
|  | .\" *  Project                     ___| | | |  _ \| | | ||||||
|  | .\" *                             / __| | | | |_) | | | ||||||
|  | .\" *                            | (__| |_| |  _ <| |___ | ||||||
|  | .\" *                             \___|\___/|_| \_\_____| | ||||||
|  | .\" * | ||||||
|  | .\" * Copyright (C) 1998 - $year, 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. | ||||||
|  | .\" * | ||||||
|  | .\" ************************************************************************** | ||||||
|  | .TH libcurl-symbols 3 "$date" "libcurl $version" "libcurl symbols" | ||||||
|  | .SH NAME | ||||||
|  | libcurl-symbols \- libcurl symbol version information | ||||||
|  | .SH "libcurl symbols" | ||||||
|  | This man page details version information for public symbols provided in the | ||||||
|  | libcurl header files. This lists the first version in which the symbol was | ||||||
|  | introduced and for some symbols two additional information pieces: | ||||||
|  |  | ||||||
|  | The first version in which the symbol is marked "deprecated" - meaning that | ||||||
|  | since that version no new code should be written to use the symbol as it is | ||||||
|  | marked for getting removed in a future. | ||||||
|  |  | ||||||
|  | The last version that featured the specific symbol. Using the symbol in source | ||||||
|  | code will make it no longer compile error-free after that specified version. | ||||||
|  |  | ||||||
|  | This man page is automatically generated from the symbols-in-versions file. | ||||||
|  | HEADER | ||||||
|  |     ; | ||||||
|  |  | ||||||
|  | while(<STDIN>) { | ||||||
|  |     if($_ =~ /^(CURL[A-Z0-9_.]*) *(.*)/) { | ||||||
|  |         my ($symbol, $rest)=($1,$2); | ||||||
|  |         my ($intro, $dep, $rem); | ||||||
|  |         if($rest =~ s/^([0-9.]*) *//) { | ||||||
|  |            $intro = $1; | ||||||
|  |         } | ||||||
|  |         if($rest =~ s/^([0-9.]*) *//) { | ||||||
|  |            $dep = $1; | ||||||
|  |         } | ||||||
|  |         if($rest =~ s/^([0-9.]*) *//) { | ||||||
|  |            $rem = $1; | ||||||
|  |         } | ||||||
|  |         print ".IP $symbol\nIntroduced in $intro\n"; | ||||||
|  |         if($dep) { | ||||||
|  |           print "Deprecated since $dep\n"; | ||||||
|  |         } | ||||||
|  |         if($rem) { | ||||||
|  |           print "Last used in $dep\n"; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  | } | ||||||
| @@ -47,7 +47,8 @@ All TLS based protocols: HTTPS, FTPS, IMAPS, POP3, SMTPS etc. | |||||||
| .SH EXAMPLE | .SH EXAMPLE | ||||||
| TODO | TODO | ||||||
| .SH AVAILABILITY | .SH AVAILABILITY | ||||||
| If built TLS enabled | For SSL engines that don't support certificate files the CURLOPT_CAINFO option | ||||||
|  | is ignored. Refer to http://curl.haxx.se/docs/ssl-compared.html | ||||||
| .SH RETURN VALUE | .SH RETURN VALUE | ||||||
| Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or | Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or | ||||||
| CURLE_OUT_OF_MEMORY if there was insufficient heap space. | CURLE_OUT_OF_MEMORY if there was insufficient heap space. | ||||||
|   | |||||||
| @@ -40,7 +40,7 @@ All | |||||||
| .SH EXAMPLE | .SH EXAMPLE | ||||||
| TODO | TODO | ||||||
| .SH AVAILABILITY | .SH AVAILABILITY | ||||||
| Always | SMTP since 7.40.0, other protocols since they were introduced | ||||||
| .SH RETURN VALUE | .SH RETURN VALUE | ||||||
| Returns CURLE_OK | Returns CURLE_OK | ||||||
| .SH "SEE ALSO" | .SH "SEE ALSO" | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ | |||||||
| .\" *                            | (__| |_| |  _ <| |___ | .\" *                            | (__| |_| |  _ <| |___ | ||||||
| .\" *                             \___|\___/|_| \_\_____| | .\" *                             \___|\___/|_| \_\_____| | ||||||
| .\" * | .\" * | ||||||
| .\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al. | .\" * Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||||
| .\" * | .\" * | ||||||
| .\" * This software is licensed as described in the file COPYING, which | .\" * This software is licensed as described in the file COPYING, which | ||||||
| .\" * you should have received as part of this distribution. The terms | .\" * you should have received as part of this distribution. The terms | ||||||
| @@ -41,8 +41,8 @@ Enforce HTTP 1.0 requests. | |||||||
| .IP CURL_HTTP_VERSION_1_1 | .IP CURL_HTTP_VERSION_1_1 | ||||||
| Enforce HTTP 1.1 requests. | Enforce HTTP 1.1 requests. | ||||||
| .IP CURL_HTTP_VERSION_2_0 | .IP CURL_HTTP_VERSION_2_0 | ||||||
| Attempt HTTP 2.0 requests. libcurl will fall back to HTTP 1.x if HTTP 2.0 | Attempt HTTP 2 requests. libcurl will fall back to HTTP 1.x if HTTP 2 can't be | ||||||
| can't be negotiated with the server. | negotiated with the server. (Added in 7.33.0) | ||||||
| .SH DEFAULT | .SH DEFAULT | ||||||
| CURL_HTTP_VERSION_NONE | CURL_HTTP_VERSION_NONE | ||||||
| .SH PROTOCOLS | .SH PROTOCOLS | ||||||
|   | |||||||
| @@ -29,7 +29,7 @@ CURLOPT_PINNEDPUBLICKEY \- set pinned public key | |||||||
| CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PINNEDPUBLICKEY, char *pinnedpubkey); | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PINNEDPUBLICKEY, char *pinnedpubkey); | ||||||
| .SH DESCRIPTION | .SH DESCRIPTION | ||||||
| Pass a pointer to a zero terminated string as parameter. The string should be | Pass a pointer to a zero terminated string as parameter. The string should be | ||||||
| the file name of your pinned public key. The format expected is "DER". | the file name of your pinned public key. The format expected is "PEM" or "DER". | ||||||
|  |  | ||||||
| When negotiating a TLS or SSL connection, the server sends a certificate | When negotiating a TLS or SSL connection, the server sends a certificate | ||||||
| indicating its identity. A public key is extracted from this certificate and | indicating its identity. A public key is extracted from this certificate and | ||||||
|   | |||||||
| @@ -35,6 +35,8 @@ way. For example, the web server may assume that this data is url-encoded. | |||||||
|  |  | ||||||
| The data pointed to is NOT copied by the library: as a consequence, it must be | The data pointed to is NOT copied by the library: as a consequence, it must be | ||||||
| preserved by the calling application until the associated transfer finishes. | preserved by the calling application until the associated transfer finishes. | ||||||
|  | This behaviour can be changed (so libcurl does copy the data) by setting the | ||||||
|  | \fICURLOPT_COPYPOSTFIELDS(3)\fP option. | ||||||
|  |  | ||||||
| This POST is a normal application/x-www-form-urlencoded kind (and libcurl will | This POST is a normal application/x-www-form-urlencoded kind (and libcurl will | ||||||
| set that Content-Type by default when this option is used), which is commonly | set that Content-Type by default when this option is used), which is commonly | ||||||
|   | |||||||
| @@ -59,6 +59,7 @@ CURLPROTO_RTMPTS | |||||||
| CURLPROTO_RTSP | CURLPROTO_RTSP | ||||||
| CURLPROTO_SCP | CURLPROTO_SCP | ||||||
| CURLPROTO_SFTP | CURLPROTO_SFTP | ||||||
|  | CURLPROTO_SMB | ||||||
| CURLPROTO_SMTP | CURLPROTO_SMTP | ||||||
| CURLPROTO_SMTPS | CURLPROTO_SMTPS | ||||||
| CURLPROTO_TELNET | CURLPROTO_TELNET | ||||||
|   | |||||||
| @@ -59,13 +59,14 @@ CURLPROTO_RTMPTS | |||||||
| CURLPROTO_RTSP | CURLPROTO_RTSP | ||||||
| CURLPROTO_SCP | CURLPROTO_SCP | ||||||
| CURLPROTO_SFTP | CURLPROTO_SFTP | ||||||
|  | CURLPROTO_SMB | ||||||
| CURLPROTO_SMTP | CURLPROTO_SMTP | ||||||
| CURLPROTO_SMTPS | CURLPROTO_SMTPS | ||||||
| CURLPROTO_TELNET | CURLPROTO_TELNET | ||||||
| CURLPROTO_TFTP | CURLPROTO_TFTP | ||||||
| .fi | .fi | ||||||
| .SH DEFAULT | .SH DEFAULT | ||||||
| All protocols except for FILE and SCP | All protocols except for FILE, SCP and SMB. | ||||||
| .SH PROTOCOLS | .SH PROTOCOLS | ||||||
| All | All | ||||||
| .SH EXAMPLE | .SH EXAMPLE | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ | |||||||
| .\" *                            | (__| |_| |  _ <| |___ | .\" *                            | (__| |_| |  _ <| |___ | ||||||
| .\" *                             \___|\___/|_| \_\_____| | .\" *                             \___|\___/|_| \_\_____| | ||||||
| .\" * | .\" * | ||||||
| .\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al. | .\" * Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||||
| .\" * | .\" * | ||||||
| .\" * This software is licensed as described in the file COPYING, which | .\" * This software is licensed as described in the file COPYING, which | ||||||
| .\" * you should have received as part of this distribution. The terms | .\" * you should have received as part of this distribution. The terms | ||||||
| @@ -43,10 +43,13 @@ shown above. | |||||||
| This function gets called by libcurl to seek to a certain position in the | This function gets called by libcurl to seek to a certain position in the | ||||||
| input stream and can be used to fast forward a file in a resumed upload | input stream and can be used to fast forward a file in a resumed upload | ||||||
| (instead of reading all uploaded bytes with the normal read | (instead of reading all uploaded bytes with the normal read | ||||||
| function/callback). It is also called to rewind a stream when doing a HTTP PUT | function/callback). It is also called to rewind a stream when data has already | ||||||
| or POST with a multi-pass authentication method. The function shall work like | been sent to the server and needs to be sent again. This may happen when doing | ||||||
| fseek(3) or lseek(3) and it gets SEEK_SET, SEEK_CUR or SEEK_END as argument | a HTTP PUT or POST with a multi-pass authentication method, or when an | ||||||
| for \fIorigin\fP, although libcurl currently only passes SEEK_SET. | existing HTTP connection is reused too late and the server closes the | ||||||
|  | connection. The function shall work like fseek(3) or lseek(3) and it gets | ||||||
|  | SEEK_SET, SEEK_CUR or SEEK_END as argument for \fIorigin\fP, although libcurl | ||||||
|  | currently only passes SEEK_SET. | ||||||
|  |  | ||||||
| \fIuserp\fP is the pointer you set with \fICURLOPT_SEEKDATA(3)\fP. | \fIuserp\fP is the pointer you set with \fICURLOPT_SEEKDATA(3)\fP. | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										53
									
								
								docs/libcurl/opts/CURLOPT_SSL_VERIFYSTATUS.3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								docs/libcurl/opts/CURLOPT_SSL_VERIFYSTATUS.3
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,53 @@ | |||||||
|  | .\" ************************************************************************** | ||||||
|  | .\" *                                  _   _ ____  _ | ||||||
|  | .\" *  Project                     ___| | | |  _ \| | | ||||||
|  | .\" *                             / __| | | | |_) | | | ||||||
|  | .\" *                            | (__| |_| |  _ <| |___ | ||||||
|  | .\" *                             \___|\___/|_| \_\_____| | ||||||
|  | .\" * | ||||||
|  | .\" * Copyright (C) 1998 - 2015, 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. | ||||||
|  | .\" * | ||||||
|  | .\" ************************************************************************** | ||||||
|  | .\" | ||||||
|  | .TH CURLOPT_SSL_VERIFYSTATUS 3 "04 Dec 2014" "libcurl 7.40.0" "curl_easy_setopt options" | ||||||
|  | .SH NAME | ||||||
|  | CURLOPT_SSL_VERIFYSTATUS \- verify the certificate's status | ||||||
|  | .SH SYNOPSIS | ||||||
|  | #include <curl/curl.h> | ||||||
|  |  | ||||||
|  | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSL_VERIFYSTATUS, long verify); | ||||||
|  | .SH DESCRIPTION | ||||||
|  | Pass a long as parameter set to 1 to enable or 0 to disable. | ||||||
|  |  | ||||||
|  | This option determines whether libcurl verifies the status of the server cert | ||||||
|  | using the "Certificate Status Request" TLS extension (aka. OCSP stapling). | ||||||
|  |  | ||||||
|  | Note that if this option is enabled but the server does not support the TLS | ||||||
|  | extension, the verification will fail. | ||||||
|  | .SH DEFAULT | ||||||
|  | 0 | ||||||
|  | .SH PROTOCOLS | ||||||
|  | All TLS based protocols: HTTPS, FTPS, IMAPS, POP3, SMTPS etc. | ||||||
|  | .SH EXAMPLE | ||||||
|  | TODO | ||||||
|  | .SH AVAILABILITY | ||||||
|  | Added in 7.41.0. This option is currently only supported by the OpenSSL, GnuTLS | ||||||
|  | and NSS TLS backends. | ||||||
|  | .SH RETURN VALUE | ||||||
|  | Returns CURLE_OK if OCSP stapling is supported by the SSL backend, otherwise | ||||||
|  | returns CURLE_NOT_BUILT_IN. | ||||||
|  | .SH "SEE ALSO" | ||||||
|  | .BR CURLOPT_SSL_VERIFYHOST "(3), " | ||||||
|  | .BR CURLOPT_SSL_VERIFYPEER "(3), " | ||||||
|  | .BR CURLOPT_CAINFO "(3), " | ||||||
| @@ -37,6 +37,9 @@ libcurl to use the SIGALRM signal to timeout system calls. | |||||||
| In unix-like systems, this might cause signals to be used unless | In unix-like systems, this might cause signals to be used unless | ||||||
| \fICURLOPT_NOSIGNAL(3)\fP is set. | \fICURLOPT_NOSIGNAL(3)\fP is set. | ||||||
|  |  | ||||||
|  | If both \fICURLOPT_TIMEOUT(3)\fP and \fICURLOPT_TIMEOUT_MS(3)\fP are set, the | ||||||
|  | value set last will be used. | ||||||
|  |  | ||||||
| Since this puts a hard limit for how long time a request is allowed to take, | Since this puts a hard limit for how long time a request is allowed to take, | ||||||
| it has limited use in dynamic use cases with varying transfer times. You are | it has limited use in dynamic use cases with varying transfer times. You are | ||||||
| then advised to explore \fICURLOPT_LOW_SPEED_LIMIT(3)\fP, | then advised to explore \fICURLOPT_LOW_SPEED_LIMIT(3)\fP, | ||||||
|   | |||||||
							
								
								
									
										78
									
								
								docs/libcurl/opts/CURLOPT_UNIX_SOCKET_PATH.3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										78
									
								
								docs/libcurl/opts/CURLOPT_UNIX_SOCKET_PATH.3
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,78 @@ | |||||||
|  | .\" ************************************************************************** | ||||||
|  | .\" *                                  _   _ ____  _ | ||||||
|  | .\" *  Project                     ___| | | |  _ \| | | ||||||
|  | .\" *                             / __| | | | |_) | | | ||||||
|  | .\" *                            | (__| |_| |  _ <| |___ | ||||||
|  | .\" *                             \___|\___/|_| \_\_____| | ||||||
|  | .\" * | ||||||
|  | .\" * Copyright (C) 1998 - 2014, 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. | ||||||
|  | .\" * | ||||||
|  | .\" ************************************************************************** | ||||||
|  | .\" | ||||||
|  | .TH CURLOPT_UNIX_SOCKET_PATH 3 "09 Oct 2014" "libcurl 7.40.0" "curl_easy_setopt options" | ||||||
|  | .SH NAME | ||||||
|  | CURLOPT_UNIX_SOCKET_PATH \- set Unix domain socket | ||||||
|  | .SH SYNOPSIS | ||||||
|  | #include <curl/curl.h> | ||||||
|  |  | ||||||
|  | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_UNIX_SOCKET_PATH, char *path); | ||||||
|  | .SH DESCRIPTION | ||||||
|  | Enables the use of Unix domain sockets as connection endpoint and sets the path | ||||||
|  | to \fIpath\fP. If \fIpath\fP is NULL, then Unix domain sockets are disabled. An | ||||||
|  | empty string will result in an error at some point, it will not disable use of | ||||||
|  | Unix domain sockets. | ||||||
|  |  | ||||||
|  | When enabled, cURL will connect to the Unix domain socket instead of | ||||||
|  | establishing a TCP connection to a host. Since no TCP connection is created, | ||||||
|  | cURL does not need to resolve the DNS hostname in the URL. | ||||||
|  |  | ||||||
|  | The maximum path length on Cygwin, Linux and Solaris is 107. On other platforms | ||||||
|  | it might be even less. | ||||||
|  |  | ||||||
|  | Proxy and TCP options such as | ||||||
|  | .BR CURLOPT_TCP_NODELAY "(3) | ||||||
|  | are not supported. Proxy options such as | ||||||
|  | .BR CURLOPT_PROXY "(3) | ||||||
|  | have no effect either as these are TCP-oriented, and asking a proxy server to | ||||||
|  | connect to a certain Unix domain socket is not possible. | ||||||
|  | .SH DEFAULT | ||||||
|  | Default is NULL, meaning that no Unix domain sockets are used. | ||||||
|  | .SH PROTOCOLS | ||||||
|  | All protocols except for file:// and FTP are supported in theory. HTTP, IMAP, | ||||||
|  | POP3 and SMTP should in particular work (including their SSL/TLS variants). | ||||||
|  | .SH EXAMPLE | ||||||
|  | Given that you have an nginx server running, listening on /tmp/nginx.sock, you | ||||||
|  | can request a HTTP resource with: | ||||||
|  |  | ||||||
|  | .nf | ||||||
|  |     curl_easy_setopt(curl_handle, CURLOPT_UNIX_SOCKET_PATH, "/tmp/nginx.sock"); | ||||||
|  |     curl_easy_setopt(curl_handle, CURLOPT_URL, "http://localhost/"); | ||||||
|  | .fi | ||||||
|  |  | ||||||
|  | If you are on Linux and somehow have a need for paths larger than 107 bytes, you | ||||||
|  | could use the proc filesystem to bypass the limitation: | ||||||
|  |  | ||||||
|  | .nf | ||||||
|  |     int dirfd = open(long_directory_path_to_socket, O_DIRECTORY | O_RDONLY); | ||||||
|  |     char path[108]; | ||||||
|  |     snprintf(path, sizeof(path), "/proc/self/fd/%d/nginx.sock", dirfd); | ||||||
|  |     curl_easy_setopt(curl_handle, CURLOPT_UNIX_SOCKET_PATH, path); | ||||||
|  |     /* Be sure to keep dirfd valid until you discard the handle */ | ||||||
|  | .fi | ||||||
|  | .SH AVAILABILITY | ||||||
|  | Since 7.40.0. | ||||||
|  | .SH RETURN VALUE | ||||||
|  | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. | ||||||
|  | .SH "SEE ALSO" | ||||||
|  | .BR CURLOPT_OPENSOCKETFUNCTION "(3), " unix "(7), " | ||||||
| @@ -80,6 +80,8 @@ http://user:password@www.example.com | |||||||
|  |  | ||||||
| ftp://user:password@ftp.example.com | ftp://user:password@ftp.example.com | ||||||
|  |  | ||||||
|  | smb://domain%2fuser:password@server.example.com | ||||||
|  |  | ||||||
| imap://user:password;options@mail.example.com | imap://user:password;options@mail.example.com | ||||||
|  |  | ||||||
| pop3://user:password;options@mail.example.com | pop3://user:password;options@mail.example.com | ||||||
| @@ -236,6 +238,20 @@ user's home directory | |||||||
| sftp://ssh.example.com/~/Documents/ - This requests a directory listing | sftp://ssh.example.com/~/Documents/ - This requests a directory listing | ||||||
| of the Documents directory under the user's home directory | of the Documents directory under the user's home directory | ||||||
|  |  | ||||||
|  | .IP SMB | ||||||
|  | The path part of a SMB request specifies the file to retrieve and from what | ||||||
|  | share and directory or the share to upload to and as such, may not be omitted. | ||||||
|  | If the user name is not embedded in the URL, it can be set with the | ||||||
|  | \fICURLOPT_USERPWD(3)\fP or \fICURLOPT_USERNAME(3)\fP option. If the user name | ||||||
|  | is embedded in the URL then it must contain the domain name and as such, the | ||||||
|  | backslash must be URL encoded as %2f. | ||||||
|  |  | ||||||
|  | smb://server.example.com/files/issue - This specifies the file "issue" located | ||||||
|  | in the root of the "files" share | ||||||
|  |  | ||||||
|  | smb://server.example.com/files/ -T issue - This specifies the file "issue" will | ||||||
|  | be uploaded to the root of the "files" share. | ||||||
|  |  | ||||||
| .IP LDAP | .IP LDAP | ||||||
| The path part of a LDAP request can be used to specify the: Distinguished | The path part of a LDAP request can be used to specify the: Distinguished | ||||||
| Name, Attributes, Scope, Filter and Extension for a LDAP search. Each field | Name, Attributes, Scope, Filter and Extension for a LDAP search. Each field | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ | |||||||
| #                            | (__| |_| |  _ <| |___ | #                            | (__| |_| |  _ <| |___ | ||||||
| #                             \___|\___/|_| \_\_____| | #                             \___|\___/|_| \_\_____| | ||||||
| # | # | ||||||
| # Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al. | # Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||||
| # | # | ||||||
| # This software is licensed as described in the file COPYING, which | # This software is licensed as described in the file COPYING, which | ||||||
| # you should have received as part of this distribution. The terms | # you should have received as part of this distribution. The terms | ||||||
| @@ -92,15 +92,15 @@ man_MANS = CURLOPT_ACCEPT_ENCODING.3 CURLOPT_ACCEPTTIMEOUT_MS.3		\ | |||||||
|  CURLOPT_SSL_ENABLE_ALPN.3 CURLOPT_SSL_ENABLE_NPN.3 CURLOPT_SSLENGINE.3	\ |  CURLOPT_SSL_ENABLE_ALPN.3 CURLOPT_SSL_ENABLE_NPN.3 CURLOPT_SSLENGINE.3	\ | ||||||
|  CURLOPT_SSLENGINE_DEFAULT.3 CURLOPT_SSLKEY.3 CURLOPT_SSLKEYTYPE.3	\ |  CURLOPT_SSLENGINE_DEFAULT.3 CURLOPT_SSLKEY.3 CURLOPT_SSLKEYTYPE.3	\ | ||||||
|  CURLOPT_SSL_OPTIONS.3 CURLOPT_SSL_SESSIONID_CACHE.3			\ |  CURLOPT_SSL_OPTIONS.3 CURLOPT_SSL_SESSIONID_CACHE.3			\ | ||||||
|  CURLOPT_SSL_VERIFYHOST.3 CURLOPT_SSL_VERIFYPEER.3 CURLOPT_SSLVERSION.3	\ |  CURLOPT_SSL_VERIFYHOST.3 CURLOPT_SSL_VERIFYPEER.3			\ | ||||||
|  CURLOPT_STDERR.3 CURLOPT_TCP_KEEPALIVE.3 CURLOPT_TCP_KEEPIDLE.3	\ |  CURLOPT_SSL_VERIFYSTATUS.3 CURLOPT_SSLVERSION.3 CURLOPT_STDERR.3	\ | ||||||
|  CURLOPT_TCP_KEEPINTVL.3 CURLOPT_TCP_NODELAY.3 CURLOPT_TELNETOPTIONS.3	\ |  CURLOPT_TCP_KEEPALIVE.3 CURLOPT_TCP_KEEPIDLE.3 CURLOPT_TCP_KEEPINTVL.3	\ | ||||||
|  CURLOPT_TFTP_BLKSIZE.3 CURLOPT_TIMECONDITION.3 CURLOPT_TIMEOUT.3	\ |  CURLOPT_TCP_NODELAY.3 CURLOPT_TELNETOPTIONS.3 CURLOPT_TFTP_BLKSIZE.3	\ | ||||||
|  CURLOPT_TIMEOUT_MS.3 CURLOPT_TIMEVALUE.3 CURLOPT_TLSAUTH_PASSWORD.3	\ |  CURLOPT_TIMECONDITION.3 CURLOPT_TIMEOUT.3 CURLOPT_TIMEOUT_MS.3		\ | ||||||
|  CURLOPT_TLSAUTH_TYPE.3 CURLOPT_TLSAUTH_USERNAME.3			\ |  CURLOPT_TIMEVALUE.3 CURLOPT_TLSAUTH_PASSWORD.3 CURLOPT_TLSAUTH_TYPE.3	\ | ||||||
|  CURLOPT_TRANSFER_ENCODING.3 CURLOPT_TRANSFERTEXT.3			\ |  CURLOPT_TLSAUTH_USERNAME.3 CURLOPT_TRANSFER_ENCODING.3			\ | ||||||
|  CURLOPT_UNRESTRICTED_AUTH.3 CURLOPT_UPLOAD.3 CURLOPT_URL.3		\ |  CURLOPT_TRANSFERTEXT.3 CURLOPT_UNRESTRICTED_AUTH.3 CURLOPT_UPLOAD.3	\ | ||||||
|  CURLOPT_USERAGENT.3 CURLOPT_USERNAME.3 CURLOPT_USERPWD.3		\ |  CURLOPT_URL.3 CURLOPT_USERAGENT.3 CURLOPT_USERNAME.3 CURLOPT_USERPWD.3	\ | ||||||
|  CURLOPT_USE_SSL.3 CURLOPT_VERBOSE.3 CURLOPT_WILDCARDMATCH.3		\ |  CURLOPT_USE_SSL.3 CURLOPT_VERBOSE.3 CURLOPT_WILDCARDMATCH.3		\ | ||||||
|  CURLOPT_WRITEDATA.3 CURLOPT_WRITEFUNCTION.3 CURLOPT_XFERINFODATA.3	\ |  CURLOPT_WRITEDATA.3 CURLOPT_WRITEFUNCTION.3 CURLOPT_XFERINFODATA.3	\ | ||||||
|  CURLOPT_XFERINFOFUNCTION.3 CURLOPT_XOAUTH2_BEARER.3			\ |  CURLOPT_XFERINFOFUNCTION.3 CURLOPT_XOAUTH2_BEARER.3			\ | ||||||
| @@ -110,7 +110,7 @@ man_MANS = CURLOPT_ACCEPT_ENCODING.3 CURLOPT_ACCEPTTIMEOUT_MS.3		\ | |||||||
|  CURLMOPT_MAX_TOTAL_CONNECTIONS.3 CURLMOPT_PIPELINING.3			\ |  CURLMOPT_MAX_TOTAL_CONNECTIONS.3 CURLMOPT_PIPELINING.3			\ | ||||||
|  CURLMOPT_PIPELINING_SERVER_BL.3 CURLMOPT_PIPELINING_SITE_BL.3		\ |  CURLMOPT_PIPELINING_SERVER_BL.3 CURLMOPT_PIPELINING_SITE_BL.3		\ | ||||||
|  CURLMOPT_SOCKETDATA.3 CURLMOPT_SOCKETFUNCTION.3 CURLMOPT_TIMERDATA.3	\ |  CURLMOPT_SOCKETDATA.3 CURLMOPT_SOCKETFUNCTION.3 CURLMOPT_TIMERDATA.3	\ | ||||||
|  CURLMOPT_TIMERFUNCTION.3 |  CURLMOPT_TIMERFUNCTION.3 CURLOPT_UNIX_SOCKET_PATH.3 | ||||||
|  |  | ||||||
|  |  | ||||||
| HTMLPAGES = CURLOPT_ACCEPT_ENCODING.html CURLOPT_ACCEPTTIMEOUT_MS.html	\ | HTMLPAGES = CURLOPT_ACCEPT_ENCODING.html CURLOPT_ACCEPTTIMEOUT_MS.html	\ | ||||||
| @@ -196,8 +196,8 @@ HTMLPAGES = CURLOPT_ACCEPT_ENCODING.html CURLOPT_ACCEPTTIMEOUT_MS.html	\ | |||||||
|  CURLOPT_SSLENGINE_DEFAULT.html CURLOPT_SSLKEY.html			\ |  CURLOPT_SSLENGINE_DEFAULT.html CURLOPT_SSLKEY.html			\ | ||||||
|  CURLOPT_SSLKEYTYPE.html CURLOPT_SSL_OPTIONS.html			\ |  CURLOPT_SSLKEYTYPE.html CURLOPT_SSL_OPTIONS.html			\ | ||||||
|  CURLOPT_SSL_SESSIONID_CACHE.html CURLOPT_SSL_VERIFYHOST.html		\ |  CURLOPT_SSL_SESSIONID_CACHE.html CURLOPT_SSL_VERIFYHOST.html		\ | ||||||
|  CURLOPT_SSL_VERIFYPEER.html CURLOPT_SSLVERSION.html			\ |  CURLOPT_SSL_VERIFYPEER.html CURLOPT_SSL_VERIFYSTATUS.html		\ | ||||||
|  CURLOPT_STDERR.html CURLOPT_TCP_KEEPALIVE.html				\ |  CURLOPT_SSLVERSION.html CURLOPT_STDERR.html CURLOPT_TCP_KEEPALIVE.html	\ | ||||||
|  CURLOPT_TCP_KEEPIDLE.html CURLOPT_TCP_KEEPINTVL.html			\ |  CURLOPT_TCP_KEEPIDLE.html CURLOPT_TCP_KEEPINTVL.html			\ | ||||||
|  CURLOPT_TCP_NODELAY.html CURLOPT_TELNETOPTIONS.html			\ |  CURLOPT_TCP_NODELAY.html CURLOPT_TELNETOPTIONS.html			\ | ||||||
|  CURLOPT_TFTP_BLKSIZE.html CURLOPT_TIMECONDITION.html			\ |  CURLOPT_TFTP_BLKSIZE.html CURLOPT_TIMECONDITION.html			\ | ||||||
| @@ -216,7 +216,8 @@ HTMLPAGES = CURLOPT_ACCEPT_ENCODING.html CURLOPT_ACCEPTTIMEOUT_MS.html	\ | |||||||
|  CURLMOPT_MAX_TOTAL_CONNECTIONS.html CURLMOPT_PIPELINING.html		\ |  CURLMOPT_MAX_TOTAL_CONNECTIONS.html CURLMOPT_PIPELINING.html		\ | ||||||
|  CURLMOPT_PIPELINING_SERVER_BL.html CURLMOPT_PIPELINING_SITE_BL.html	\ |  CURLMOPT_PIPELINING_SERVER_BL.html CURLMOPT_PIPELINING_SITE_BL.html	\ | ||||||
|  CURLMOPT_SOCKETDATA.html CURLMOPT_SOCKETFUNCTION.html			\ |  CURLMOPT_SOCKETDATA.html CURLMOPT_SOCKETFUNCTION.html			\ | ||||||
|  CURLMOPT_TIMERDATA.html CURLMOPT_TIMERFUNCTION.html |  CURLMOPT_TIMERDATA.html CURLMOPT_TIMERFUNCTION.html			\ | ||||||
|  |  CURLOPT_UNIX_SOCKET_PATH.html | ||||||
|  |  | ||||||
| PDFPAGES = CURLOPT_ACCEPT_ENCODING.pdf CURLOPT_ACCEPTTIMEOUT_MS.pdf	\ | PDFPAGES = CURLOPT_ACCEPT_ENCODING.pdf CURLOPT_ACCEPTTIMEOUT_MS.pdf	\ | ||||||
|  CURLOPT_ADDRESS_SCOPE.pdf CURLOPT_APPEND.pdf CURLOPT_AUTOREFERER.pdf	\ |  CURLOPT_ADDRESS_SCOPE.pdf CURLOPT_APPEND.pdf CURLOPT_AUTOREFERER.pdf	\ | ||||||
| @@ -298,26 +299,28 @@ PDFPAGES = CURLOPT_ACCEPT_ENCODING.pdf CURLOPT_ACCEPTTIMEOUT_MS.pdf	\ | |||||||
|  CURLOPT_SSLENGINE_DEFAULT.pdf CURLOPT_SSLKEY.pdf			\ |  CURLOPT_SSLENGINE_DEFAULT.pdf CURLOPT_SSLKEY.pdf			\ | ||||||
|  CURLOPT_SSLKEYTYPE.pdf CURLOPT_SSL_OPTIONS.pdf				\ |  CURLOPT_SSLKEYTYPE.pdf CURLOPT_SSL_OPTIONS.pdf				\ | ||||||
|  CURLOPT_SSL_SESSIONID_CACHE.pdf CURLOPT_SSL_VERIFYHOST.pdf		\ |  CURLOPT_SSL_SESSIONID_CACHE.pdf CURLOPT_SSL_VERIFYHOST.pdf		\ | ||||||
|  CURLOPT_SSL_VERIFYPEER.pdf CURLOPT_SSLVERSION.pdf CURLOPT_STDERR.pdf	\ |  CURLOPT_SSL_VERIFYPEER.pdf CURLOPT_SSL_VERIFYSTATUS.pdf		\ | ||||||
|  CURLOPT_TCP_KEEPALIVE.pdf CURLOPT_TCP_KEEPIDLE.pdf			\ |  CURLOPT_SSLVERSION.pdf CURLOPT_STDERR.pdf CURLOPT_TCP_KEEPALIVE.pdf	\ | ||||||
|  CURLOPT_TCP_KEEPINTVL.pdf CURLOPT_TCP_NODELAY.pdf			\ |  CURLOPT_TCP_KEEPIDLE.pdf CURLOPT_TCP_KEEPINTVL.pdf			\ | ||||||
|  CURLOPT_TELNETOPTIONS.pdf CURLOPT_TFTP_BLKSIZE.pdf			\ |  CURLOPT_TCP_NODELAY.pdf CURLOPT_TELNETOPTIONS.pdf			\ | ||||||
|  CURLOPT_TIMECONDITION.pdf CURLOPT_TIMEOUT.pdf CURLOPT_TIMEOUT_MS.pdf	\ |  CURLOPT_TFTP_BLKSIZE.pdf CURLOPT_TIMECONDITION.pdf CURLOPT_TIMEOUT.pdf	\ | ||||||
|  CURLOPT_TIMEVALUE.pdf CURLOPT_TLSAUTH_PASSWORD.pdf			\ |  CURLOPT_TIMEOUT_MS.pdf CURLOPT_TIMEVALUE.pdf				\ | ||||||
|  CURLOPT_TLSAUTH_TYPE.pdf CURLOPT_TLSAUTH_USERNAME.pdf			\ |  CURLOPT_TLSAUTH_PASSWORD.pdf CURLOPT_TLSAUTH_TYPE.pdf			\ | ||||||
|  CURLOPT_TRANSFER_ENCODING.pdf CURLOPT_TRANSFERTEXT.pdf			\ |  CURLOPT_TLSAUTH_USERNAME.pdf CURLOPT_TRANSFER_ENCODING.pdf		\ | ||||||
|  CURLOPT_UNRESTRICTED_AUTH.pdf CURLOPT_UPLOAD.pdf CURLOPT_URL.pdf	\ |  CURLOPT_TRANSFERTEXT.pdf CURLOPT_UNRESTRICTED_AUTH.pdf			\ | ||||||
|  CURLOPT_USERAGENT.pdf CURLOPT_USERNAME.pdf CURLOPT_USERPWD.pdf		\ |  CURLOPT_UPLOAD.pdf CURLOPT_URL.pdf CURLOPT_USERAGENT.pdf		\ | ||||||
|  CURLOPT_USE_SSL.pdf CURLOPT_VERBOSE.pdf CURLOPT_WILDCARDMATCH.pdf	\ |  CURLOPT_USERNAME.pdf CURLOPT_USERPWD.pdf CURLOPT_USE_SSL.pdf		\ | ||||||
|  CURLOPT_WRITEDATA.pdf CURLOPT_WRITEFUNCTION.pdf			\ |  CURLOPT_VERBOSE.pdf CURLOPT_WILDCARDMATCH.pdf CURLOPT_WRITEDATA.pdf	\ | ||||||
|  CURLOPT_XFERINFODATA.pdf CURLOPT_XFERINFOFUNCTION.pdf			\ |  CURLOPT_WRITEFUNCTION.pdf CURLOPT_XFERINFODATA.pdf			\ | ||||||
|  CURLOPT_XOAUTH2_BEARER.pdf CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE.pdf	\ |  CURLOPT_XFERINFOFUNCTION.pdf CURLOPT_XOAUTH2_BEARER.pdf		\ | ||||||
|  |  CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE.pdf					\ | ||||||
|  CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE.pdf CURLMOPT_MAXCONNECTS.pdf	\ |  CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE.pdf CURLMOPT_MAXCONNECTS.pdf	\ | ||||||
|  CURLMOPT_MAX_HOST_CONNECTIONS.pdf CURLMOPT_MAX_PIPELINE_LENGTH.pdf	\ |  CURLMOPT_MAX_HOST_CONNECTIONS.pdf CURLMOPT_MAX_PIPELINE_LENGTH.pdf	\ | ||||||
|  CURLMOPT_MAX_TOTAL_CONNECTIONS.pdf CURLMOPT_PIPELINING.pdf		\ |  CURLMOPT_MAX_TOTAL_CONNECTIONS.pdf CURLMOPT_PIPELINING.pdf		\ | ||||||
|  CURLMOPT_PIPELINING_SERVER_BL.pdf CURLMOPT_PIPELINING_SITE_BL.pdf	\ |  CURLMOPT_PIPELINING_SERVER_BL.pdf CURLMOPT_PIPELINING_SITE_BL.pdf	\ | ||||||
|  CURLMOPT_SOCKETDATA.pdf CURLMOPT_SOCKETFUNCTION.pdf			\ |  CURLMOPT_SOCKETDATA.pdf CURLMOPT_SOCKETFUNCTION.pdf			\ | ||||||
|  CURLMOPT_TIMERDATA.pdf CURLMOPT_TIMERFUNCTION.pdf |  CURLMOPT_TIMERDATA.pdf CURLMOPT_TIMERFUNCTION.pdf			\ | ||||||
|  |  CURLOPT_UNIX_SOCKET_PATH.pdf | ||||||
|  |  | ||||||
| CLEANFILES = $(HTMLPAGES) $(PDFPAGES) | CLEANFILES = $(HTMLPAGES) $(PDFPAGES) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -118,6 +118,7 @@ CURLE_SSL_CRL_BADFILE           7.19.0 | |||||||
| CURLE_SSL_ENGINE_INITFAILED     7.12.3 | CURLE_SSL_ENGINE_INITFAILED     7.12.3 | ||||||
| CURLE_SSL_ENGINE_NOTFOUND       7.9.3 | CURLE_SSL_ENGINE_NOTFOUND       7.9.3 | ||||||
| CURLE_SSL_ENGINE_SETFAILED      7.9.3 | CURLE_SSL_ENGINE_SETFAILED      7.9.3 | ||||||
|  | CURLE_SSL_INVALIDCERTSTATUS     7.41.0 | ||||||
| CURLE_SSL_ISSUER_ERROR          7.19.0 | CURLE_SSL_ISSUER_ERROR          7.19.0 | ||||||
| CURLE_SSL_PEER_CERTIFICATE      7.8           7.17.1 | CURLE_SSL_PEER_CERTIFICATE      7.8           7.17.1 | ||||||
| CURLE_SSL_PINNEDPUBKEYNOTMATCH  7.39.0 | CURLE_SSL_PINNEDPUBKEYNOTMATCH  7.39.0 | ||||||
| @@ -513,6 +514,7 @@ CURLOPT_SSL_OPTIONS             7.25.0 | |||||||
| CURLOPT_SSL_SESSIONID_CACHE     7.16.0 | CURLOPT_SSL_SESSIONID_CACHE     7.16.0 | ||||||
| CURLOPT_SSL_VERIFYHOST          7.8.1 | CURLOPT_SSL_VERIFYHOST          7.8.1 | ||||||
| CURLOPT_SSL_VERIFYPEER          7.4.2 | CURLOPT_SSL_VERIFYPEER          7.4.2 | ||||||
|  | CURLOPT_SSL_VERIFYSTATUS        7.41.0 | ||||||
| CURLOPT_STDERR                  7.1 | CURLOPT_STDERR                  7.1 | ||||||
| CURLOPT_TCP_KEEPALIVE           7.25.0 | CURLOPT_TCP_KEEPALIVE           7.25.0 | ||||||
| CURLOPT_TCP_KEEPIDLE            7.25.0 | CURLOPT_TCP_KEEPIDLE            7.25.0 | ||||||
| @@ -529,6 +531,7 @@ CURLOPT_TLSAUTH_TYPE            7.21.4 | |||||||
| CURLOPT_TLSAUTH_USERNAME        7.21.4 | CURLOPT_TLSAUTH_USERNAME        7.21.4 | ||||||
| CURLOPT_TRANSFERTEXT            7.1.1 | CURLOPT_TRANSFERTEXT            7.1.1 | ||||||
| CURLOPT_TRANSFER_ENCODING       7.21.6 | CURLOPT_TRANSFER_ENCODING       7.21.6 | ||||||
|  | CURLOPT_UNIX_SOCKET_PATH        7.40.0 | ||||||
| CURLOPT_UNRESTRICTED_AUTH       7.10.4 | CURLOPT_UNRESTRICTED_AUTH       7.10.4 | ||||||
| CURLOPT_UPLOAD                  7.1 | CURLOPT_UPLOAD                  7.1 | ||||||
| CURLOPT_URL                     7.1 | CURLOPT_URL                     7.1 | ||||||
| @@ -574,6 +577,8 @@ CURLPROTO_RTMPTS                7.21.0 | |||||||
| CURLPROTO_RTSP                  7.20.0 | CURLPROTO_RTSP                  7.20.0 | ||||||
| CURLPROTO_SCP                   7.19.4 | CURLPROTO_SCP                   7.19.4 | ||||||
| CURLPROTO_SFTP                  7.19.4 | CURLPROTO_SFTP                  7.19.4 | ||||||
|  | CURLPROTO_SMB                   7.40.0 | ||||||
|  | CURLPROTO_SMBS                  7.40.0 | ||||||
| CURLPROTO_SMTP                  7.20.0 | CURLPROTO_SMTP                  7.20.0 | ||||||
| CURLPROTO_SMTPS                 7.20.0 | CURLPROTO_SMTPS                 7.20.0 | ||||||
| CURLPROTO_TELNET                7.19.4 | CURLPROTO_TELNET                7.19.4 | ||||||
| @@ -738,6 +743,7 @@ CURL_VERSION_HTTP2              7.33.0 | |||||||
| CURL_VERSION_IDN                7.12.0 | CURL_VERSION_IDN                7.12.0 | ||||||
| CURL_VERSION_IPV6               7.10 | CURL_VERSION_IPV6               7.10 | ||||||
| CURL_VERSION_KERBEROS4          7.10          7.33.0 | CURL_VERSION_KERBEROS4          7.10          7.33.0 | ||||||
|  | CURL_VERSION_KERBEROS5          7.40.0 | ||||||
| CURL_VERSION_LARGEFILE          7.11.1 | CURL_VERSION_LARGEFILE          7.11.1 | ||||||
| CURL_VERSION_LIBZ               7.10 | CURL_VERSION_LIBZ               7.10 | ||||||
| CURL_VERSION_NTLM               7.10.6 | CURL_VERSION_NTLM               7.10.6 | ||||||
| @@ -746,6 +752,7 @@ CURL_VERSION_SPNEGO             7.10.8 | |||||||
| CURL_VERSION_SSL                7.10 | CURL_VERSION_SSL                7.10 | ||||||
| CURL_VERSION_SSPI               7.13.2 | CURL_VERSION_SSPI               7.13.2 | ||||||
| CURL_VERSION_TLSAUTH_SRP        7.21.4 | CURL_VERSION_TLSAUTH_SRP        7.21.4 | ||||||
|  | CURL_VERSION_UNIX_SOCKETS       7.40.0 | ||||||
| CURL_WAIT_POLLIN                7.28.0 | CURL_WAIT_POLLIN                7.28.0 | ||||||
| CURL_WAIT_POLLOUT               7.28.0 | CURL_WAIT_POLLOUT               7.28.0 | ||||||
| CURL_WAIT_POLLPRI               7.28.0 | CURL_WAIT_POLLPRI               7.28.0 | ||||||
|   | |||||||
| @@ -523,6 +523,7 @@ typedef enum { | |||||||
|                                     session will be queued */ |                                     session will be queued */ | ||||||
|   CURLE_SSL_PINNEDPUBKEYNOTMATCH, /* 90 - specified pinned public key did not |   CURLE_SSL_PINNEDPUBKEYNOTMATCH, /* 90 - specified pinned public key did not | ||||||
|                                      match */ |                                      match */ | ||||||
|  |   CURLE_SSL_INVALIDCERTSTATUS,   /* 91 - invalid certificate status */ | ||||||
|   CURL_LAST /* never use! */ |   CURL_LAST /* never use! */ | ||||||
| } CURLcode; | } CURLcode; | ||||||
|  |  | ||||||
| @@ -805,6 +806,8 @@ typedef enum { | |||||||
| #define CURLPROTO_RTMPS  (1<<23) | #define CURLPROTO_RTMPS  (1<<23) | ||||||
| #define CURLPROTO_RTMPTS (1<<24) | #define CURLPROTO_RTMPTS (1<<24) | ||||||
| #define CURLPROTO_GOPHER (1<<25) | #define CURLPROTO_GOPHER (1<<25) | ||||||
|  | #define CURLPROTO_SMB    (1<<26) | ||||||
|  | #define CURLPROTO_SMBS   (1<<27) | ||||||
| #define CURLPROTO_ALL    (~0) /* enable everything */ | #define CURLPROTO_ALL    (~0) /* enable everything */ | ||||||
|  |  | ||||||
| /* long may be 32 or 64 bits, but we should never depend on anything else | /* long may be 32 or 64 bits, but we should never depend on anything else | ||||||
| @@ -987,7 +990,7 @@ typedef enum { | |||||||
|   CINIT(HEADER, LONG, 42),       /* throw the header out too */ |   CINIT(HEADER, LONG, 42),       /* throw the header out too */ | ||||||
|   CINIT(NOPROGRESS, LONG, 43),   /* shut off the progress meter */ |   CINIT(NOPROGRESS, LONG, 43),   /* shut off the progress meter */ | ||||||
|   CINIT(NOBODY, LONG, 44),       /* use HEAD to get http document */ |   CINIT(NOBODY, LONG, 44),       /* use HEAD to get http document */ | ||||||
|   CINIT(FAILONERROR, LONG, 45),  /* no output on http error codes >= 300 */ |   CINIT(FAILONERROR, LONG, 45),  /* no output on http error codes >= 400 */ | ||||||
|   CINIT(UPLOAD, LONG, 46),       /* this is an upload */ |   CINIT(UPLOAD, LONG, 46),       /* this is an upload */ | ||||||
|   CINIT(POST, LONG, 47),         /* HTTP POST method */ |   CINIT(POST, LONG, 47),         /* HTTP POST method */ | ||||||
|   CINIT(DIRLISTONLY, LONG, 48),  /* bare names when listing directories */ |   CINIT(DIRLISTONLY, LONG, 48),  /* bare names when listing directories */ | ||||||
| @@ -1617,6 +1620,12 @@ typedef enum { | |||||||
|      this option is used only if SSL_VERIFYPEER is true */ |      this option is used only if SSL_VERIFYPEER is true */ | ||||||
|   CINIT(PINNEDPUBLICKEY, OBJECTPOINT, 230), |   CINIT(PINNEDPUBLICKEY, OBJECTPOINT, 230), | ||||||
|  |  | ||||||
|  |   /* Path to Unix domain socket */ | ||||||
|  |   CINIT(UNIX_SOCKET_PATH, OBJECTPOINT, 231), | ||||||
|  |  | ||||||
|  |   /* Set if we should verify the certificate status. */ | ||||||
|  |   CINIT(SSL_VERIFYSTATUS, LONG, 232), | ||||||
|  |  | ||||||
|   CURLOPT_LASTENTRY /* the last unused */ |   CURLOPT_LASTENTRY /* the last unused */ | ||||||
| } CURLoption; | } CURLoption; | ||||||
|  |  | ||||||
| @@ -1653,8 +1662,8 @@ typedef enum { | |||||||
|      option might be handy to force libcurl to use a specific IP version. */ |      option might be handy to force libcurl to use a specific IP version. */ | ||||||
| #define CURL_IPRESOLVE_WHATEVER 0 /* default, resolves addresses to all IP | #define CURL_IPRESOLVE_WHATEVER 0 /* default, resolves addresses to all IP | ||||||
|                                      versions that your system allows */ |                                      versions that your system allows */ | ||||||
| #define CURL_IPRESOLVE_V4       1 /* resolve to ipv4 addresses */ | #define CURL_IPRESOLVE_V4       1 /* resolve to IPv4 addresses */ | ||||||
| #define CURL_IPRESOLVE_V6       2 /* resolve to ipv6 addresses */ | #define CURL_IPRESOLVE_V6       2 /* resolve to IPv6 addresses */ | ||||||
|  |  | ||||||
|   /* three convenient "aliases" that follow the name scheme better */ |   /* three convenient "aliases" that follow the name scheme better */ | ||||||
| #define CURLOPT_RTSPHEADER CURLOPT_HTTPHEADER | #define CURLOPT_RTSPHEADER CURLOPT_HTTPHEADER | ||||||
| @@ -2247,20 +2256,24 @@ typedef struct { | |||||||
| #define CURL_VERSION_SSL          (1<<2)  /* SSL options are present */ | #define CURL_VERSION_SSL          (1<<2)  /* SSL options are present */ | ||||||
| #define CURL_VERSION_LIBZ         (1<<3)  /* libz features are present */ | #define CURL_VERSION_LIBZ         (1<<3)  /* libz features are present */ | ||||||
| #define CURL_VERSION_NTLM         (1<<4)  /* NTLM auth is supported */ | #define CURL_VERSION_NTLM         (1<<4)  /* NTLM auth is supported */ | ||||||
| #define CURL_VERSION_GSSNEGOTIATE (1<<5) /* Negotiate auth support | #define CURL_VERSION_GSSNEGOTIATE (1<<5)  /* Negotiate auth is supported | ||||||
|                                              (deprecated) */ |                                              (deprecated) */ | ||||||
| #define CURL_VERSION_DEBUG     (1<<6)  /* built with debug capabilities */ | #define CURL_VERSION_DEBUG        (1<<6)  /* Built with debug capabilities */ | ||||||
| #define CURL_VERSION_ASYNCHDNS (1<<7)  /* asynchronous dns resolves */ | #define CURL_VERSION_ASYNCHDNS    (1<<7)  /* Asynchronous DNS resolves */ | ||||||
| #define CURL_VERSION_SPNEGO       (1<<8)  /* SPNEGO auth is supported */ | #define CURL_VERSION_SPNEGO       (1<<8)  /* SPNEGO auth is supported */ | ||||||
| #define CURL_VERSION_LARGEFILE (1<<9)  /* supports files bigger than 2GB */ | #define CURL_VERSION_LARGEFILE    (1<<9)  /* Supports files larger than 2GB */ | ||||||
| #define CURL_VERSION_IDN       (1<<10) /* International Domain Names support */ | #define CURL_VERSION_IDN          (1<<10) /* Internationized Domain Names are | ||||||
| #define CURL_VERSION_SSPI      (1<<11) /* SSPI is supported */ |                                              supported */ | ||||||
| #define CURL_VERSION_CONV      (1<<12) /* character conversions supported */ | #define CURL_VERSION_SSPI         (1<<11) /* Built against Windows SSPI */ | ||||||
| #define CURL_VERSION_CURLDEBUG (1<<13) /* debug memory tracking supported */ | #define CURL_VERSION_CONV         (1<<12) /* Character conversions supported */ | ||||||
|  | #define CURL_VERSION_CURLDEBUG    (1<<13) /* Debug memory tracking supported */ | ||||||
| #define CURL_VERSION_TLSAUTH_SRP  (1<<14) /* TLS-SRP auth is supported */ | #define CURL_VERSION_TLSAUTH_SRP  (1<<14) /* TLS-SRP auth is supported */ | ||||||
| #define CURL_VERSION_NTLM_WB   (1<<15) /* NTLM delegating to winbind helper */ | #define CURL_VERSION_NTLM_WB      (1<<15) /* NTLM delegation to winbind helper | ||||||
|  |                                              is suported */ | ||||||
| #define CURL_VERSION_HTTP2        (1<<16) /* HTTP2 support built-in */ | #define CURL_VERSION_HTTP2        (1<<16) /* HTTP2 support built-in */ | ||||||
| #define CURL_VERSION_GSSAPI    (1<<17) /* GSS-API is supported */ | #define CURL_VERSION_GSSAPI       (1<<17) /* Built against a GSS-API library */ | ||||||
|  | #define CURL_VERSION_KERBEROS5    (1<<18) /* Kerberos V5 auth is supported */ | ||||||
|  | #define CURL_VERSION_UNIX_SOCKETS (1<<19) /* Unix domain sockets support */ | ||||||
|  |  | ||||||
|  /* |  /* | ||||||
|  * NAME curl_version_info() |  * NAME curl_version_info() | ||||||
|   | |||||||
| @@ -7,7 +7,7 @@ | |||||||
|  *                            | (__| |_| |  _ <| |___ |  *                            | (__| |_| |  _ <| |___ | ||||||
|  *                             \___|\___/|_| \_\_____| |  *                             \___|\___/|_| \_\_____| | ||||||
|  * |  * | ||||||
|  * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al. |  * Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||||
|  * |  * | ||||||
|  * This software is licensed as described in the file COPYING, which |  * This software is licensed as described in the file COPYING, which | ||||||
|  * you should have received as part of this distribution. The terms |  * you should have received as part of this distribution. The terms | ||||||
| @@ -26,17 +26,17 @@ | |||||||
|    a script at release-time. This was made its own header file in 7.11.2 */ |    a script at release-time. This was made its own header file in 7.11.2 */ | ||||||
|  |  | ||||||
| /* This is the global package copyright */ | /* This is the global package copyright */ | ||||||
| #define LIBCURL_COPYRIGHT "1996 - 2014 Daniel Stenberg, <daniel@haxx.se>." | #define LIBCURL_COPYRIGHT "1996 - 2015 Daniel Stenberg, <daniel@haxx.se>." | ||||||
|  |  | ||||||
| /* This is the version number of the libcurl package from which this header | /* This is the version number of the libcurl package from which this header | ||||||
|    file origins: */ |    file origins: */ | ||||||
| #define LIBCURL_VERSION "7.38.1-DEV" | #define LIBCURL_VERSION "7.41.0-DEV" | ||||||
|  |  | ||||||
| /* The numeric version number is also available "in parts" by using these | /* The numeric version number is also available "in parts" by using these | ||||||
|    defines: */ |    defines: */ | ||||||
| #define LIBCURL_VERSION_MAJOR 7 | #define LIBCURL_VERSION_MAJOR 7 | ||||||
| #define LIBCURL_VERSION_MINOR 38 | #define LIBCURL_VERSION_MINOR 41 | ||||||
| #define LIBCURL_VERSION_PATCH 1 | #define LIBCURL_VERSION_PATCH 0 | ||||||
|  |  | ||||||
| /* This is the numeric version of the libcurl version number, meant for easier | /* This is the numeric version of the libcurl version number, meant for easier | ||||||
|    parsing and comparions by programs. The LIBCURL_VERSION_NUM define will |    parsing and comparions by programs. The LIBCURL_VERSION_NUM define will | ||||||
| @@ -53,7 +53,7 @@ | |||||||
|    and it is always a greater number in a more recent release. It makes |    and it is always a greater number in a more recent release. It makes | ||||||
|    comparisons with greater than and less than work. |    comparisons with greater than and less than work. | ||||||
| */ | */ | ||||||
| #define LIBCURL_VERSION_NUM 0x072601 | #define LIBCURL_VERSION_NUM 0x072900 | ||||||
|  |  | ||||||
| /* | /* | ||||||
|  * This is the date and time when the full source package was created. The |  * This is the date and time when the full source package was created. The | ||||||
|   | |||||||
| @@ -57,7 +57,7 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../include) | |||||||
| include_directories(${CMAKE_CURRENT_BINARY_DIR}/..) | include_directories(${CMAKE_CURRENT_BINARY_DIR}/..) | ||||||
| include_directories(${CMAKE_CURRENT_SOURCE_DIR}) | include_directories(${CMAKE_CURRENT_SOURCE_DIR}) | ||||||
| include_directories(${CMAKE_CURRENT_BINARY_DIR}) | include_directories(${CMAKE_CURRENT_BINARY_DIR}) | ||||||
| if(CURL_USE_ARES) | if(USE_ARES) | ||||||
|   include_directories(${CARES_INCLUDE_DIR}) |   include_directories(${CARES_INCLUDE_DIR}) | ||||||
| endif() | endif() | ||||||
|  |  | ||||||
| @@ -98,4 +98,7 @@ if(WIN32) | |||||||
|   endif() |   endif() | ||||||
| endif() | endif() | ||||||
|  |  | ||||||
| install(TARGETS ${LIB_NAME} DESTINATION lib) | install(TARGETS ${LIB_NAME} | ||||||
|  |   ARCHIVE DESTINATION lib | ||||||
|  |   LIBRARY DESTINATION lib | ||||||
|  |   RUNTIME DESTINATION bin) | ||||||
|   | |||||||
| @@ -113,7 +113,7 @@ LIBRTMP_ROOT = ../../rtmpdump-2.3 | |||||||
| !ifdef %openssl_root | !ifdef %openssl_root | ||||||
| OPENSSL_ROOT = $(%openssl_root) | OPENSSL_ROOT = $(%openssl_root) | ||||||
| !else | !else | ||||||
| OPENSSL_ROOT = ../../openssl-0.9.8y | OPENSSL_ROOT = ../../openssl-0.9.8zc | ||||||
| !endif | !endif | ||||||
|  |  | ||||||
| !ifdef %ares_root | !ifdef %ares_root | ||||||
|   | |||||||
| @@ -27,7 +27,7 @@ ZLIB_PATH = ..\..\zlib-1.2.8 | |||||||
|  |  | ||||||
| # Edit the path below to point to the base of your OpenSSL package. | # Edit the path below to point to the base of your OpenSSL package. | ||||||
| !ifndef OPENSSL_PATH | !ifndef OPENSSL_PATH | ||||||
| OPENSSL_PATH = ..\..\openssl-0.9.8y | OPENSSL_PATH = ..\..\openssl-0.9.8zc | ||||||
| !endif | !endif | ||||||
|  |  | ||||||
| # Set libcurl static lib, dll and import lib | # Set libcurl static lib, dll and import lib | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ | |||||||
| #                            | (__| |_| |  _ <| |___ | #                            | (__| |_| |  _ <| |___ | ||||||
| #                             \___|\___/|_| \_\_____| | #                             \___|\___/|_| \_\_____| | ||||||
| # | # | ||||||
| # Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al. | # Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||||
| # | # | ||||||
| # This software is licensed as described in the file COPYING, which | # This software is licensed as described in the file COPYING, which | ||||||
| # you should have received as part of this distribution. The terms | # you should have received as part of this distribution. The terms | ||||||
| @@ -22,11 +22,11 @@ | |||||||
|  |  | ||||||
| LIB_VTLS_CFILES = vtls/openssl.c vtls/gtls.c vtls/vtls.c vtls/nss.c     \ | LIB_VTLS_CFILES = vtls/openssl.c vtls/gtls.c vtls/vtls.c vtls/nss.c     \ | ||||||
|   vtls/polarssl.c vtls/polarssl_threadlock.c vtls/axtls.c               \ |   vtls/polarssl.c vtls/polarssl_threadlock.c vtls/axtls.c               \ | ||||||
|   vtls/cyassl.c vtls/curl_schannel.c vtls/curl_darwinssl.c vtls/gskit.c |   vtls/cyassl.c vtls/schannel.c vtls/darwinssl.c vtls/gskit.c | ||||||
|  |  | ||||||
| LIB_VTLS_HFILES = vtls/openssl.h vtls/vtls.h vtls/gtls.h                \ | LIB_VTLS_HFILES = vtls/openssl.h vtls/vtls.h vtls/gtls.h                \ | ||||||
|   vtls/nssg.h vtls/polarssl.h vtls/polarssl_threadlock.h vtls/axtls.h   \ |   vtls/nssg.h vtls/polarssl.h vtls/polarssl_threadlock.h vtls/axtls.h   \ | ||||||
|   vtls/cyassl.h vtls/curl_schannel.h vtls/curl_darwinssl.h vtls/gskit.h |   vtls/cyassl.h vtls/schannel.h vtls/darwinssl.h vtls/gskit.h | ||||||
|  |  | ||||||
| LIB_CFILES = file.c timeval.c base64.c hostip.c progress.c formdata.c   \ | LIB_CFILES = file.c timeval.c base64.c hostip.c progress.c formdata.c   \ | ||||||
|   cookie.c http.c sendf.c ftp.c url.c dict.c if2ip.c speedcheck.c       \ |   cookie.c http.c sendf.c ftp.c url.c dict.c if2ip.c speedcheck.c       \ | ||||||
| @@ -45,7 +45,8 @@ LIB_CFILES = file.c timeval.c base64.c hostip.c progress.c formdata.c	\ | |||||||
|   asyn-thread.c curl_gssapi.c curl_ntlm.c curl_ntlm_wb.c                \ |   asyn-thread.c curl_gssapi.c curl_ntlm.c curl_ntlm_wb.c                \ | ||||||
|   curl_ntlm_core.c curl_ntlm_msgs.c curl_sasl.c curl_multibyte.c        \ |   curl_ntlm_core.c curl_ntlm_msgs.c curl_sasl.c curl_multibyte.c        \ | ||||||
|   hostcheck.c bundles.c conncache.c pipeline.c dotdot.c x509asn1.c      \ |   hostcheck.c bundles.c conncache.c pipeline.c dotdot.c x509asn1.c      \ | ||||||
|   http2.c curl_sasl_sspi.c |   http2.c curl_sasl_sspi.c smb.c curl_sasl_gssapi.c curl_endian.c       \ | ||||||
|  |   curl_des.c | ||||||
|  |  | ||||||
| LIB_HFILES = arpa_telnet.h netrc.h file.h timeval.h hostip.h progress.h \ | LIB_HFILES = arpa_telnet.h netrc.h file.h timeval.h hostip.h progress.h \ | ||||||
|   formdata.h cookie.h http.h sendf.h ftp.h url.h dict.h if2ip.h         \ |   formdata.h cookie.h http.h sendf.h ftp.h url.h dict.h if2ip.h         \ | ||||||
| @@ -63,7 +64,7 @@ LIB_HFILES = arpa_telnet.h netrc.h file.h timeval.h hostip.h progress.h	\ | |||||||
|   curl_ntlm.h curl_gssapi.h curl_ntlm_wb.h curl_ntlm_core.h             \ |   curl_ntlm.h curl_gssapi.h curl_ntlm_wb.h curl_ntlm_core.h             \ | ||||||
|   curl_ntlm_msgs.h curl_sasl.h curl_multibyte.h hostcheck.h bundles.h   \ |   curl_ntlm_msgs.h curl_sasl.h curl_multibyte.h hostcheck.h bundles.h   \ | ||||||
|   conncache.h curl_setup_once.h multihandle.h setup-vms.h pipeline.h    \ |   conncache.h curl_setup_once.h multihandle.h setup-vms.h pipeline.h    \ | ||||||
|   dotdot.h x509asn1.h http2.h sigpipe.h |   dotdot.h x509asn1.h http2.h sigpipe.h smb.h curl_endian.h curl_des.h | ||||||
|  |  | ||||||
| LIB_RCFILES = libcurl.rc | LIB_RCFILES = libcurl.rc | ||||||
|  |  | ||||||
|   | |||||||
| @@ -18,7 +18,7 @@ ZLIB_PATH = ../../zlib-1.2.8 | |||||||
| endif | endif | ||||||
| # Edit the path below to point to the base of your OpenSSL package. | # Edit the path below to point to the base of your OpenSSL package. | ||||||
| ifndef OPENSSL_PATH | ifndef OPENSSL_PATH | ||||||
| OPENSSL_PATH = ../../openssl-0.9.8y | OPENSSL_PATH = ../../openssl-0.9.8zc | ||||||
| endif | endif | ||||||
| # Edit the path below to point to the base of your LibSSH2 package. | # Edit the path below to point to the base of your LibSSH2 package. | ||||||
| ifndef LIBSSH2_PATH | ifndef LIBSSH2_PATH | ||||||
| @@ -44,7 +44,7 @@ LDAP_SDK = c:/novell/ndk/cldapsdk/win32 | |||||||
| endif | endif | ||||||
| # Edit the path below to point to the base of your nghttp2 package. | # Edit the path below to point to the base of your nghttp2 package. | ||||||
| ifndef NGHTTP2_PATH | ifndef NGHTTP2_PATH | ||||||
| NGHTTP2_PATH = ../../nghttp2-0.6.4 | NGHTTP2_PATH = ../../nghttp2-0.6.7 | ||||||
| endif | endif | ||||||
|  |  | ||||||
| PROOT = .. | PROOT = .. | ||||||
| @@ -54,25 +54,34 @@ ifndef LIBCARES_PATH | |||||||
| LIBCARES_PATH = $(PROOT)/ares | LIBCARES_PATH = $(PROOT)/ares | ||||||
| endif | endif | ||||||
|  |  | ||||||
| # Edit the var below to set to your architecture or set environment var. |  | ||||||
| ifndef ARCH |  | ||||||
| ARCH = w32 |  | ||||||
| endif |  | ||||||
|  |  | ||||||
| CC	= $(CROSSPREFIX)gcc | CC	= $(CROSSPREFIX)gcc | ||||||
| CFLAGS	= -g -O2 -Wall | CFLAGS	= $(CURL_CFLAG_EXTRAS) -g -O2 -Wall | ||||||
| CFLAGS	+= -fno-strict-aliasing | CFLAGS	+= -fno-strict-aliasing | ||||||
| ifeq ($(ARCH),w64) |  | ||||||
| CFLAGS	+= -D_AMD64_ |  | ||||||
| endif |  | ||||||
| # comment LDFLAGS below to keep debug info | # comment LDFLAGS below to keep debug info | ||||||
| LDFLAGS	= -s | LDFLAGS	= -s | ||||||
| AR	= $(CROSSPREFIX)ar | AR	= $(CROSSPREFIX)ar | ||||||
| RANLIB	= $(CROSSPREFIX)ranlib | RANLIB	= $(CROSSPREFIX)ranlib | ||||||
| RC	= $(CROSSPREFIX)windres | RC	= $(CROSSPREFIX)windres | ||||||
| RCFLAGS	= --include-dir=$(PROOT)/include -DDEBUGBUILD=0 -O COFF -i | RCFLAGS	= --include-dir=$(PROOT)/include -DDEBUGBUILD=0 -O COFF | ||||||
| STRIP	= $(CROSSPREFIX)strip -g | STRIP	= $(CROSSPREFIX)strip -g | ||||||
|  |  | ||||||
|  | # Set environment var ARCH to your architecture to override autodetection. | ||||||
|  | ifndef ARCH | ||||||
|  | ifeq ($(findstring x86_64,$(shell $(CC) -dumpmachine)),x86_64) | ||||||
|  | ARCH	= w64 | ||||||
|  | else | ||||||
|  | ARCH	= w32 | ||||||
|  | endif | ||||||
|  | endif | ||||||
|  |  | ||||||
|  | ifeq ($(ARCH),w64) | ||||||
|  | CFLAGS  += -m64 -D_AMD64_ | ||||||
|  | RCFLAGS += -F pe-x86-64 | ||||||
|  | else | ||||||
|  | CFLAGS  += -m32 | ||||||
|  | RCFLAGS += -F pe-i386 | ||||||
|  | endif | ||||||
|  |  | ||||||
| # Platform-dependent helper tool macros | # Platform-dependent helper tool macros | ||||||
| ifeq ($(findstring /sh,$(SHELL)),/sh) | ifeq ($(findstring /sh,$(SHELL)),/sh) | ||||||
| DEL	= rm -f $1 | DEL	= rm -f $1 | ||||||
| @@ -297,7 +306,7 @@ $(libcurl_dll_LIBRARY): $(libcurl_a_OBJECTS) $(RESOURCE) $(libcurl_dll_DEPENDENC | |||||||
| 	$(CC) $(INCLUDES) $(CFLAGS) -c $< -o $@ | 	$(CC) $(INCLUDES) $(CFLAGS) -c $< -o $@ | ||||||
|  |  | ||||||
| %.res: %.rc | %.res: %.rc | ||||||
| 	$(RC) $(RCFLAGS) $< -o $@ | 	$(RC) $(RCFLAGS) -i $< -o $@ | ||||||
|  |  | ||||||
| clean: | clean: | ||||||
| ifeq "$(wildcard $(PROOT)/include/curl/curlbuild.h.dist)" "$(PROOT)/include/curl/curlbuild.h.dist" | ifeq "$(wildcard $(PROOT)/include/curl/curlbuild.h.dist)" "$(PROOT)/include/curl/curlbuild.h.dist" | ||||||
| @@ -314,5 +323,3 @@ $(PROOT)/include/curl/curlbuild.h: | |||||||
|  |  | ||||||
| $(LIBCARES_PATH)/libcares.a: | $(LIBCARES_PATH)/libcares.a: | ||||||
| 	$(MAKE) -C $(LIBCARES_PATH) -f Makefile.m32 | 	$(MAKE) -C $(LIBCARES_PATH) -f Makefile.m32 | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
| @@ -19,7 +19,7 @@ endif | |||||||
|  |  | ||||||
| # Edit the path below to point to the base of your OpenSSL package. | # Edit the path below to point to the base of your OpenSSL package. | ||||||
| ifndef OPENSSL_PATH | ifndef OPENSSL_PATH | ||||||
| OPENSSL_PATH = ../../openssl-0.9.8y | OPENSSL_PATH = ../../openssl-0.9.8zc | ||||||
| endif | endif | ||||||
|  |  | ||||||
| # Edit the path below to point to the base of your LibSSH2 package. | # Edit the path below to point to the base of your LibSSH2 package. | ||||||
| @@ -44,7 +44,7 @@ endif | |||||||
|  |  | ||||||
| # Edit the path below to point to the base of your nghttp2 package. | # Edit the path below to point to the base of your nghttp2 package. | ||||||
| ifndef NGHTTP2_PATH | ifndef NGHTTP2_PATH | ||||||
| NGHTTP2_PATH = ../../nghttp2-0.6.4 | NGHTTP2_PATH = ../../nghttp2-0.6.7 | ||||||
| endif | endif | ||||||
|  |  | ||||||
| # Edit the path below to point to the base of your fbopenssl package. | # Edit the path below to point to the base of your fbopenssl package. | ||||||
| @@ -214,6 +214,11 @@ WITH_SSL = | |||||||
| else | else | ||||||
| ifeq ($(findstring -ssl,$(CFG)),-ssl) | ifeq ($(findstring -ssl,$(CFG)),-ssl) | ||||||
| WITH_SSL = 1 | WITH_SSL = 1 | ||||||
|  | ifeq ($(findstring -srp,$(CFG)),-srp) | ||||||
|  | ifeq "$(wildcard $(OPENSSL_PATH)/outinc_nw_$(LIBARCH_L)/openssl/srp.h)" "$(OPENSSL_PATH)/outinc_nw_$(LIBARCH_L)/openssl/srp.h" | ||||||
|  | WITH_SRP = 1 | ||||||
|  | endif | ||||||
|  | endif | ||||||
| endif | endif | ||||||
| endif | endif | ||||||
| ifeq ($(findstring -zlib,$(CFG)),-zlib) | ifeq ($(findstring -zlib,$(CFG)),-zlib) | ||||||
| @@ -638,6 +643,10 @@ ifdef WITH_SSL | |||||||
| 	@echo $(DL)#define HAVE_LIBSSL 1$(DL) >> $@ | 	@echo $(DL)#define HAVE_LIBSSL 1$(DL) >> $@ | ||||||
| 	@echo $(DL)#define HAVE_LIBCRYPTO 1$(DL) >> $@ | 	@echo $(DL)#define HAVE_LIBCRYPTO 1$(DL) >> $@ | ||||||
| 	@echo $(DL)#define OPENSSL_NO_KRB5 1$(DL) >> $@ | 	@echo $(DL)#define OPENSSL_NO_KRB5 1$(DL) >> $@ | ||||||
|  | ifdef WITH_SRP | ||||||
|  | 	@echo $(DL)#define HAVE_SSLEAY_SRP 1$(DL) >> $@ | ||||||
|  | 	@echo $(DL)#define USE_TLS_SRP 1$(DL) >> $@ | ||||||
|  | endif | ||||||
| ifdef WITH_SPNEGO | ifdef WITH_SPNEGO | ||||||
| 	@echo $(DL)#define HAVE_SPNEGO 1$(DL) >> $@ | 	@echo $(DL)#define HAVE_SPNEGO 1$(DL) >> $@ | ||||||
| endif | endif | ||||||
| @@ -690,6 +699,11 @@ ifdef WITH_SSL | |||||||
| else | else | ||||||
| 	@echo SSL support:     no | 	@echo SSL support:     no | ||||||
| endif | endif | ||||||
|  | ifdef WITH_SRP | ||||||
|  | 	@echo SRP support:     enabled | ||||||
|  | else | ||||||
|  | 	@echo SRP support:     no | ||||||
|  | endif | ||||||
| ifdef WITH_SSH2 | ifdef WITH_SSH2 | ||||||
| 	@echo SSH2 support:    enabled (libssh2) | 	@echo SSH2 support:    enabled (libssh2) | ||||||
| else | else | ||||||
| @@ -711,9 +725,9 @@ else | |||||||
| 	@echo c-ares support:  no | 	@echo c-ares support:  no | ||||||
| endif | endif | ||||||
| ifdef ENABLE_IPV6 | ifdef ENABLE_IPV6 | ||||||
| 	@echo ipv6 support:    enabled | 	@echo IPv6 support:    enabled | ||||||
| else | else | ||||||
| 	@echo ipv6 support:    no | 	@echo IPv6 support:    no | ||||||
| endif | endif | ||||||
|  |  | ||||||
| $(CURL_INC)/curl/curlbuild.h: Makefile.netware FORCE | $(CURL_INC)/curl/curlbuild.h: Makefile.netware FORCE | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ | |||||||
| #                            | (__| |_| |  _ <| |___ | #                            | (__| |_| |  _ <| |___ | ||||||
| #                             \___|\___/|_| \_\_____| | #                             \___|\___/|_| \_\_____| | ||||||
| # | # | ||||||
| # Copyright (C) 1999 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al. | # Copyright (C) 1999 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||||
| # | # | ||||||
| # This software is licensed as described in the file COPYING, which | # This software is licensed as described in the file COPYING, which | ||||||
| # you should have received as part of this distribution. The terms | # you should have received as part of this distribution. The terms | ||||||
| @@ -65,7 +65,7 @@ | |||||||
| !INCLUDE ..\winbuild\Makefile.msvc.names | !INCLUDE ..\winbuild\Makefile.msvc.names | ||||||
|  |  | ||||||
| !IFNDEF OPENSSL_PATH | !IFNDEF OPENSSL_PATH | ||||||
| OPENSSL_PATH   = ../../openssl-0.9.8y | OPENSSL_PATH   = ../../openssl-0.9.8zc | ||||||
| !ENDIF | !ENDIF | ||||||
|  |  | ||||||
| !IFNDEF LIBSSH2_PATH | !IFNDEF LIBSSH2_PATH | ||||||
| @@ -130,6 +130,10 @@ CFLAGS = $(CFLAGS) /DUSE_WINDOWS_SSPI /I$(WINDOWS_SDK_PATH)\include | |||||||
| CFLAGS = $(CFLAGS) /DUSE_IPV6 | CFLAGS = $(CFLAGS) /DUSE_IPV6 | ||||||
| !ENDIF | !ENDIF | ||||||
|  |  | ||||||
|  | !IFDEF USE_IDN | ||||||
|  | CFLAGS = $(CFLAGS) /DUSE_WIN32_IDN /DWANT_IDN_PROTOTYPES | ||||||
|  | !ENDIF | ||||||
|  |  | ||||||
| ############################################################## | ############################################################## | ||||||
| # Runtime library configuration | # Runtime library configuration | ||||||
|  |  | ||||||
| @@ -530,7 +534,8 @@ X_OBJS= \ | |||||||
| 	$(DIROBJ)\content_encoding.obj \ | 	$(DIROBJ)\content_encoding.obj \ | ||||||
| 	$(DIROBJ)\cookie.obj \ | 	$(DIROBJ)\cookie.obj \ | ||||||
| 	$(DIROBJ)\curl_addrinfo.obj \ | 	$(DIROBJ)\curl_addrinfo.obj \ | ||||||
| 	$(DIROBJ)\curl_darwinssl.obj \ | 	$(DIROBJ)\curl_des.obj \ | ||||||
|  | 	$(DIROBJ)\curl_endian.obj \ | ||||||
| 	$(DIROBJ)\curl_fnmatch.obj \ | 	$(DIROBJ)\curl_fnmatch.obj \ | ||||||
| 	$(DIROBJ)\curl_gethostname.obj \ | 	$(DIROBJ)\curl_gethostname.obj \ | ||||||
| 	$(DIROBJ)\curl_gssapi.obj \ | 	$(DIROBJ)\curl_gssapi.obj \ | ||||||
| @@ -542,11 +547,12 @@ X_OBJS= \ | |||||||
| 	$(DIROBJ)\curl_ntlm_wb.obj \ | 	$(DIROBJ)\curl_ntlm_wb.obj \ | ||||||
| 	$(DIROBJ)\curl_rtmp.obj \ | 	$(DIROBJ)\curl_rtmp.obj \ | ||||||
| 	$(DIROBJ)\curl_sasl.obj \ | 	$(DIROBJ)\curl_sasl.obj \ | ||||||
|  | 	$(DIROBJ)\curl_sasl_gssapi.obj \ | ||||||
| 	$(DIROBJ)\curl_sasl_sspi.obj \ | 	$(DIROBJ)\curl_sasl_sspi.obj \ | ||||||
| 	$(DIROBJ)\curl_schannel.obj \ |  | ||||||
| 	$(DIROBJ)\curl_sspi.obj \ | 	$(DIROBJ)\curl_sspi.obj \ | ||||||
| 	$(DIROBJ)\curl_threads.obj \ | 	$(DIROBJ)\curl_threads.obj \ | ||||||
| 	$(DIROBJ)\cyassl.obj \ | 	$(DIROBJ)\cyassl.obj \ | ||||||
|  | 	$(DIROBJ)\darwinssl.obj \ | ||||||
| 	$(DIROBJ)\dict.obj \ | 	$(DIROBJ)\dict.obj \ | ||||||
| 	$(DIROBJ)\dotdot.obj \ | 	$(DIROBJ)\dotdot.obj \ | ||||||
| 	$(DIROBJ)\easy.obj \ | 	$(DIROBJ)\easy.obj \ | ||||||
| @@ -601,11 +607,13 @@ X_OBJS= \ | |||||||
| 	$(DIROBJ)\progress.obj \ | 	$(DIROBJ)\progress.obj \ | ||||||
| 	$(DIROBJ)\rawstr.obj \ | 	$(DIROBJ)\rawstr.obj \ | ||||||
| 	$(DIROBJ)\rtsp.obj \ | 	$(DIROBJ)\rtsp.obj \ | ||||||
|  | 	$(DIROBJ)\schannel.obj \ | ||||||
| 	$(DIROBJ)\security.obj \ | 	$(DIROBJ)\security.obj \ | ||||||
| 	$(DIROBJ)\select.obj \ | 	$(DIROBJ)\select.obj \ | ||||||
| 	$(DIROBJ)\sendf.obj \ | 	$(DIROBJ)\sendf.obj \ | ||||||
| 	$(DIROBJ)\share.obj \ | 	$(DIROBJ)\share.obj \ | ||||||
| 	$(DIROBJ)\slist.obj \ | 	$(DIROBJ)\slist.obj \ | ||||||
|  | 	$(DIROBJ)\smb.obj \ | ||||||
| 	$(DIROBJ)\smtp.obj \ | 	$(DIROBJ)\smtp.obj \ | ||||||
| 	$(DIROBJ)\socks.obj \ | 	$(DIROBJ)\socks.obj \ | ||||||
| 	$(DIROBJ)\socks_gssapi.obj \ | 	$(DIROBJ)\socks_gssapi.obj \ | ||||||
|   | |||||||
| @@ -33,8 +33,8 @@ BUILD_TYPE := debug | |||||||
| USER_CFLAGS:= | USER_CFLAGS:= | ||||||
|  |  | ||||||
| # directories where to seek for includes and libraries | # directories where to seek for includes and libraries | ||||||
| OPENSSL_INC := D:/libraries/openssl/openssl-0.9.8y-vxWorks6.3/include | OPENSSL_INC := D:/libraries/openssl/openssl-0.9.8zc-vxWorks6.3/include | ||||||
| OPENSSL_LIB := D:/libraries/openssl/openssl-0.9.8y-vxWorks6.3 | OPENSSL_LIB := D:/libraries/openssl/openssl-0.9.8zc-vxWorks6.3 | ||||||
| ZLIB_INC    := D:/libraries/zlib/zlib-1.2.8-VxWorks6.3/zlib-1.2.8 | ZLIB_INC    := D:/libraries/zlib/zlib-1.2.8-VxWorks6.3/zlib-1.2.8 | ||||||
| ZLIB_LIB    := D:/libraries/zlib/zlib-1.2.8-VxWorks6.3/binaries/vxworks_3.1_gnu/Debug/lib | ZLIB_LIB    := D:/libraries/zlib/zlib-1.2.8-VxWorks6.3/binaries/vxworks_3.1_gnu/Debug/lib | ||||||
| ARES_INC    := | ARES_INC    := | ||||||
|   | |||||||
| @@ -28,8 +28,8 @@ | |||||||
|  hostsyn.c     - functions for synchronous name resolves |  hostsyn.c     - functions for synchronous name resolves | ||||||
|  asyn-ares.c   - functions for asynchronous name resolves using c-ares |  asyn-ares.c   - functions for asynchronous name resolves using c-ares | ||||||
|  asyn-thread.c - functions for asynchronous name resolves using threads |  asyn-thread.c - functions for asynchronous name resolves using threads | ||||||
|  hostip4.c     - ipv4-specific functions |  hostip4.c     - IPv4 specific functions | ||||||
|  hostip6.c     - ipv6-specific functions |  hostip6.c     - IPv6 specific functions | ||||||
|  |  | ||||||
|  The hostip.h is the single united header file for all this. It defines the |  The hostip.h is the single united header file for all this. It defines the | ||||||
|  CURLRES_* defines based on the config*.h and curl_setup.h defines. |  CURLRES_* defines based on the config*.h and curl_setup.h defines. | ||||||
|   | |||||||
| @@ -315,7 +315,7 @@ CURLcode Curl_resolver_is_resolved(struct connectdata *conn, | |||||||
|   struct SessionHandle *data = conn->data; |   struct SessionHandle *data = conn->data; | ||||||
|   struct ResolverResults *res = (struct ResolverResults *) |   struct ResolverResults *res = (struct ResolverResults *) | ||||||
|     conn->async.os_specific; |     conn->async.os_specific; | ||||||
|   CURLcode rc = CURLE_OK; |   CURLcode result = CURLE_OK; | ||||||
|  |  | ||||||
|   *dns = NULL; |   *dns = NULL; | ||||||
|  |  | ||||||
| @@ -329,7 +329,7 @@ CURLcode Curl_resolver_is_resolved(struct connectdata *conn, | |||||||
|     if(!conn->async.dns) { |     if(!conn->async.dns) { | ||||||
|       failf(data, "Could not resolve: %s (%s)", |       failf(data, "Could not resolve: %s (%s)", | ||||||
|             conn->async.hostname, ares_strerror(conn->async.status)); |             conn->async.hostname, ares_strerror(conn->async.status)); | ||||||
|       rc = conn->bits.proxy?CURLE_COULDNT_RESOLVE_PROXY: |       result = conn->bits.proxy?CURLE_COULDNT_RESOLVE_PROXY: | ||||||
|         CURLE_COULDNT_RESOLVE_HOST; |         CURLE_COULDNT_RESOLVE_HOST; | ||||||
|     } |     } | ||||||
|     else |     else | ||||||
| @@ -338,7 +338,7 @@ CURLcode Curl_resolver_is_resolved(struct connectdata *conn, | |||||||
|     destroy_async_data(&conn->async); |     destroy_async_data(&conn->async); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   return rc; |   return result; | ||||||
| } | } | ||||||
|  |  | ||||||
| /* | /* | ||||||
| @@ -355,7 +355,7 @@ CURLcode Curl_resolver_is_resolved(struct connectdata *conn, | |||||||
| CURLcode Curl_resolver_wait_resolv(struct connectdata *conn, | CURLcode Curl_resolver_wait_resolv(struct connectdata *conn, | ||||||
|                                    struct Curl_dns_entry **entry) |                                    struct Curl_dns_entry **entry) | ||||||
| { | { | ||||||
|   CURLcode rc=CURLE_OK; |   CURLcode result = CURLE_OK; | ||||||
|   struct SessionHandle *data = conn->data; |   struct SessionHandle *data = conn->data; | ||||||
|   long timeout; |   long timeout; | ||||||
|   struct timeval now = Curl_tvnow(); |   struct timeval now = Curl_tvnow(); | ||||||
| @@ -394,7 +394,7 @@ CURLcode Curl_resolver_wait_resolv(struct connectdata *conn, | |||||||
|       break; |       break; | ||||||
|  |  | ||||||
|     if(Curl_pgrsUpdate(conn)) { |     if(Curl_pgrsUpdate(conn)) { | ||||||
|       rc = CURLE_ABORTED_BY_CALLBACK; |       result = CURLE_ABORTED_BY_CALLBACK; | ||||||
|       timeout = -1; /* trigger the cancel below */ |       timeout = -1; /* trigger the cancel below */ | ||||||
|     } |     } | ||||||
|     else { |     else { | ||||||
| @@ -403,6 +403,7 @@ CURLcode Curl_resolver_wait_resolv(struct connectdata *conn, | |||||||
|       timeout -= timediff?timediff:1; /* always deduct at least 1 */ |       timeout -= timediff?timediff:1; /* always deduct at least 1 */ | ||||||
|       now = now2; /* for next loop */ |       now = now2; /* for next loop */ | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     if(timeout < 0) { |     if(timeout < 0) { | ||||||
|       /* our timeout, so we cancel the ares operation */ |       /* our timeout, so we cancel the ares operation */ | ||||||
|       ares_cancel((ares_channel)data->state.resolver); |       ares_cancel((ares_channel)data->state.resolver); | ||||||
| @@ -412,18 +413,17 @@ CURLcode Curl_resolver_wait_resolv(struct connectdata *conn, | |||||||
|  |  | ||||||
|   /* Operation complete, if the lookup was successful we now have the entry |   /* Operation complete, if the lookup was successful we now have the entry | ||||||
|      in the cache. */ |      in the cache. */ | ||||||
|  |  | ||||||
|   if(entry) |   if(entry) | ||||||
|     *entry = conn->async.dns; |     *entry = conn->async.dns; | ||||||
|  |  | ||||||
|   if(rc) |   if(result) | ||||||
|     /* close the connection, since we can't return failure here without |     /* close the connection, since we can't return failure here without | ||||||
|        cleaning up this connection properly. |        cleaning up this connection properly. | ||||||
|        TODO: remove this action from here, it is not a name resolver decision. |        TODO: remove this action from here, it is not a name resolver decision. | ||||||
|     */ |     */ | ||||||
|     connclose(conn, "c-ares resolve failed"); |     connclose(conn, "c-ares resolve failed"); | ||||||
|  |  | ||||||
|   return rc; |   return result; | ||||||
| } | } | ||||||
|  |  | ||||||
| /* Connects results to the list */ | /* Connects results to the list */ | ||||||
|   | |||||||
| @@ -434,19 +434,21 @@ static bool init_resolve_thread (struct connectdata *conn, | |||||||
| static CURLcode resolver_error(struct connectdata *conn) | static CURLcode resolver_error(struct connectdata *conn) | ||||||
| { | { | ||||||
|   const char *host_or_proxy; |   const char *host_or_proxy; | ||||||
|   CURLcode rc; |   CURLcode result; | ||||||
|  |  | ||||||
|   if(conn->bits.httpproxy) { |   if(conn->bits.httpproxy) { | ||||||
|     host_or_proxy = "proxy"; |     host_or_proxy = "proxy"; | ||||||
|     rc = CURLE_COULDNT_RESOLVE_PROXY; |     result = CURLE_COULDNT_RESOLVE_PROXY; | ||||||
|   } |   } | ||||||
|   else { |   else { | ||||||
|     host_or_proxy = "host"; |     host_or_proxy = "host"; | ||||||
|     rc = CURLE_COULDNT_RESOLVE_HOST; |     result = CURLE_COULDNT_RESOLVE_HOST; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   failf(conn->data, "Could not resolve %s: %s", host_or_proxy, |   failf(conn->data, "Could not resolve %s: %s", host_or_proxy, | ||||||
|         conn->async.hostname); |         conn->async.hostname); | ||||||
|   return rc; |  | ||||||
|  |   return result; | ||||||
| } | } | ||||||
|  |  | ||||||
| /* | /* | ||||||
| @@ -463,13 +465,13 @@ CURLcode Curl_resolver_wait_resolv(struct connectdata *conn, | |||||||
|                                    struct Curl_dns_entry **entry) |                                    struct Curl_dns_entry **entry) | ||||||
| { | { | ||||||
|   struct thread_data   *td = (struct thread_data*) conn->async.os_specific; |   struct thread_data   *td = (struct thread_data*) conn->async.os_specific; | ||||||
|   CURLcode rc = CURLE_OK; |   CURLcode result = CURLE_OK; | ||||||
|  |  | ||||||
|   DEBUGASSERT(conn && td); |   DEBUGASSERT(conn && td); | ||||||
|  |  | ||||||
|   /* wait for the thread to resolve the name */ |   /* wait for the thread to resolve the name */ | ||||||
|   if(Curl_thread_join(&td->thread_hnd)) |   if(Curl_thread_join(&td->thread_hnd)) | ||||||
|     rc = getaddrinfo_complete(conn); |     result = getaddrinfo_complete(conn); | ||||||
|   else |   else | ||||||
|     DEBUGASSERT(0); |     DEBUGASSERT(0); | ||||||
|  |  | ||||||
| @@ -480,14 +482,14 @@ CURLcode Curl_resolver_wait_resolv(struct connectdata *conn, | |||||||
|  |  | ||||||
|   if(!conn->async.dns) |   if(!conn->async.dns) | ||||||
|     /* a name was not resolved, report error */ |     /* a name was not resolved, report error */ | ||||||
|     rc = resolver_error(conn); |     result = resolver_error(conn); | ||||||
|  |  | ||||||
|   destroy_async_data(&conn->async); |   destroy_async_data(&conn->async); | ||||||
|  |  | ||||||
|   if(!conn->async.dns) |   if(!conn->async.dns) | ||||||
|     connclose(conn, "asynch resolve failed"); |     connclose(conn, "asynch resolve failed"); | ||||||
|  |  | ||||||
|   return (rc); |   return result; | ||||||
| } | } | ||||||
|  |  | ||||||
| /* | /* | ||||||
| @@ -517,9 +519,9 @@ CURLcode Curl_resolver_is_resolved(struct connectdata *conn, | |||||||
|     getaddrinfo_complete(conn); |     getaddrinfo_complete(conn); | ||||||
|  |  | ||||||
|     if(!conn->async.dns) { |     if(!conn->async.dns) { | ||||||
|       CURLcode rc = resolver_error(conn); |       CURLcode result = resolver_error(conn); | ||||||
|       destroy_async_data(&conn->async); |       destroy_async_data(&conn->async); | ||||||
|       return rc; |       return result; | ||||||
|     } |     } | ||||||
|     destroy_async_data(&conn->async); |     destroy_async_data(&conn->async); | ||||||
|     *entry = conn->async.dns; |     *entry = conn->async.dns; | ||||||
| @@ -633,7 +635,7 @@ Curl_addrinfo *Curl_resolver_getaddrinfo(struct connectdata *conn, | |||||||
|   } |   } | ||||||
|  |  | ||||||
|   if((pf != PF_INET) && !Curl_ipv6works()) |   if((pf != PF_INET) && !Curl_ipv6works()) | ||||||
|     /* the stack seems to be a non-ipv6 one */ |     /* The stack seems to be a non-IPv6 one */ | ||||||
|     pf = PF_INET; |     pf = PF_INET; | ||||||
|  |  | ||||||
| #endif /* CURLRES_IPV6 */ | #endif /* CURLRES_IPV6 */ | ||||||
|   | |||||||
| @@ -540,6 +540,12 @@ | |||||||
| /* Define to use the GSKit package. */ | /* Define to use the GSKit package. */ | ||||||
| #define USE_GSKIT | #define USE_GSKIT | ||||||
|  |  | ||||||
|  | /* Define to use the OS/400 crypto library. */ | ||||||
|  | #define USE_OS400CRYPTO | ||||||
|  |  | ||||||
|  | /* Define to use Unix sockets. */ | ||||||
|  | #define USE_UNIX_SOCKETS | ||||||
|  |  | ||||||
| /* Use the system keyring as the default CA bundle. */ | /* Use the system keyring as the default CA bundle. */ | ||||||
| #define CURL_CA_BUNDLE  "/QIBM/UserData/ICSS/Cert/Server/DEFAULT.KDB" | #define CURL_CA_BUNDLE  "/QIBM/UserData/ICSS/Cert/Server/DEFAULT.KDB" | ||||||
|  |  | ||||||
|   | |||||||
| @@ -7,7 +7,7 @@ | |||||||
|  *                            | (__| |_| |  _ <| |___ |  *                            | (__| |_| |  _ <| |___ | ||||||
|  *                             \___|\___/|_| \_\_____| |  *                             \___|\___/|_| \_\_____| | ||||||
|  * |  * | ||||||
|  * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al. |  * Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||||
|  * |  * | ||||||
|  * This software is licensed as described in the file COPYING, which |  * This software is licensed as described in the file COPYING, which | ||||||
|  * you should have received as part of this distribution. The terms |  * you should have received as part of this distribution. The terms | ||||||
| @@ -69,7 +69,7 @@ | |||||||
| /* #undef CURL_EXTERN_SYMBOL */ | /* #undef CURL_EXTERN_SYMBOL */ | ||||||
|  |  | ||||||
| /* Use Windows LDAP implementation */ | /* Use Windows LDAP implementation */ | ||||||
| /* #undef CURL_LDAP_WIN */ | /* #undef USE_WIN32_LDAP */ | ||||||
|  |  | ||||||
| /* your Entropy Gathering Daemon socket pathname */ | /* your Entropy Gathering Daemon socket pathname */ | ||||||
| /* #undef EGD_SOCKET */ | /* #undef EGD_SOCKET */ | ||||||
|   | |||||||
| @@ -7,7 +7,7 @@ | |||||||
|  *                            | (__| |_| |  _ <| |___ |  *                            | (__| |_| |  _ <| |___ | ||||||
|  *                             \___|\___/|_| \_\_____| |  *                             \___|\___/|_| \_\_____| | ||||||
|  * |  * | ||||||
|  * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al. |  * Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||||
|  * |  * | ||||||
|  * This software is licensed as described in the file COPYING, which |  * This software is licensed as described in the file COPYING, which | ||||||
|  * you should have received as part of this distribution. The terms |  * you should have received as part of this distribution. The terms | ||||||
| @@ -75,7 +75,7 @@ | |||||||
| /* #undef CURL_EXTERN_SYMBOL */ | /* #undef CURL_EXTERN_SYMBOL */ | ||||||
|  |  | ||||||
| /* Use Windows LDAP implementation */ | /* Use Windows LDAP implementation */ | ||||||
| /* #undef CURL_LDAP_WIN */ | /* #undef USE_WIN32_LDAP */ | ||||||
|  |  | ||||||
| /* your Entropy Gathering Daemon socket pathname */ | /* your Entropy Gathering Daemon socket pathname */ | ||||||
| /* #undef EGD_SOCKET */ | /* #undef EGD_SOCKET */ | ||||||
|   | |||||||
| @@ -7,7 +7,7 @@ | |||||||
|  *                            | (__| |_| |  _ <| |___ |  *                            | (__| |_| |  _ <| |___ | ||||||
|  *                             \___|\___/|_| \_\_____| |  *                             \___|\___/|_| \_\_____| | ||||||
|  * |  * | ||||||
|  * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al. |  * Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||||
|  * |  * | ||||||
|  * This software is licensed as described in the file COPYING, which |  * This software is licensed as described in the file COPYING, which | ||||||
|  * you should have received as part of this distribution. The terms |  * you should have received as part of this distribution. The terms | ||||||
| @@ -502,26 +502,39 @@ | |||||||
| #  endif | #  endif | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| /* Officially, Microsoft's Windows SDK versions 6.X do not support Windows | /* Define some minimum and default build targets for Visual Studio */ | ||||||
|    2000 as a supported build target. VS2008 default installations provide | #if defined(_MSC_VER) | ||||||
|    an embedded Windows SDK v6.0A along with the claim that Windows 2000 is |    /* Officially, Microsoft's Windows SDK versions 6.X does not support Windows | ||||||
|    a valid build target for VS2008. Popular belief is that binaries built |       2000 as a supported build target. VS2008 default installations provides | ||||||
|    with VS2008 using Windows SDK versions 6.X and Windows 2000 as a build |       an embedded Windows SDK v6.0A along with the claim that Windows 2000 is a | ||||||
|    target are functional. */ |       valid build target for VS2008. Popular belief is that binaries built with | ||||||
| #if defined(_MSC_VER) && (_MSC_VER >= 1500) |       VS2008 using Windows SDK versions v6.X and Windows 2000 as a build target | ||||||
|  |       are functional. */ | ||||||
| #  define VS2008_MIN_TARGET 0x0500 | #  define VS2008_MIN_TARGET 0x0500 | ||||||
|  |  | ||||||
|  |    /* The minimum build target for VS2012 is Vista unless Update 1 is installed | ||||||
|  |       and the v110_xp toolset is choosen. */ | ||||||
|  | #  if defined(_USING_V110_SDK71_) | ||||||
|  | #    define VS2012_MIN_TARGET 0x0501 | ||||||
|  | #  else | ||||||
|  | #    define VS2012_MIN_TARGET 0x0600 | ||||||
| #  endif | #  endif | ||||||
|  |  | ||||||
| /* When no build target is specified VS2008 default build target is Windows |    /* VS2008 default build target is Windows Vista. We override default target | ||||||
|    Vista, which leaves out even Winsows XP. If no build target has been given |       to be Windows XP. */ | ||||||
|    for VS2008 we will target the minimum Officially supported build target, |  | ||||||
|    which happens to be Windows XP. */ |  | ||||||
| #if defined(_MSC_VER) && (_MSC_VER >= 1500) |  | ||||||
| #  define VS2008_DEF_TARGET 0x0501 | #  define VS2008_DEF_TARGET 0x0501 | ||||||
|  |  | ||||||
|  |    /* VS2012 default build target is Windows Vista unless Update 1 is installed | ||||||
|  |       and the v110_xp toolset is choosen. */ | ||||||
|  | #  if defined(_USING_V110_SDK71_) | ||||||
|  | #    define VS2012_DEF_TARGET 0x0501 | ||||||
|  | #  else | ||||||
|  | #    define VS2012_DEF_TARGET 0x0600 | ||||||
|  | #  endif | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| /* VS2008 default target settings and minimum build target check. */ | /* VS2008 default target settings and minimum build target check. */ | ||||||
| #if defined(_MSC_VER) && (_MSC_VER >= 1500) | #if defined(_MSC_VER) && (_MSC_VER >= 1500) && (_MSC_VER <= 1600) | ||||||
| #  ifndef _WIN32_WINNT | #  ifndef _WIN32_WINNT | ||||||
| #    define _WIN32_WINNT VS2008_DEF_TARGET | #    define _WIN32_WINNT VS2008_DEF_TARGET | ||||||
| #  endif | #  endif | ||||||
| @@ -533,6 +546,24 @@ | |||||||
| #  endif | #  endif | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  | /* VS2012 default target settings and minimum build target check. */ | ||||||
|  | #if defined(_MSC_VER) && (_MSC_VER >= 1700) | ||||||
|  | #  ifndef _WIN32_WINNT | ||||||
|  | #    define _WIN32_WINNT VS2012_DEF_TARGET | ||||||
|  | #  endif | ||||||
|  | #  ifndef WINVER | ||||||
|  | #    define WINVER VS2012_DEF_TARGET | ||||||
|  | #  endif | ||||||
|  | #  if (_WIN32_WINNT < VS2012_MIN_TARGET) || (WINVER < VS2012_MIN_TARGET) | ||||||
|  | #    if defined(_USING_V110_SDK71_) | ||||||
|  | #      error VS2012 does not support Windows build targets prior to Windows XP | ||||||
|  | #    else | ||||||
|  | #      error VS2012 does not support Windows build targets prior to Windows \ | ||||||
|  | Vista | ||||||
|  | #    endif | ||||||
|  | #  endif | ||||||
|  | #endif | ||||||
|  |  | ||||||
| /* When no build target is specified Pelles C 5.00 and later default build | /* When no build target is specified Pelles C 5.00 and later default build | ||||||
|    target is Windows Vista. We override default target to be Windows 2000. */ |    target is Windows Vista. We override default target to be Windows 2000. */ | ||||||
| #if defined(__POCC__) && (__POCC__ >= 500) | #if defined(__POCC__) && (__POCC__ >= 500) | ||||||
| @@ -647,28 +678,33 @@ | |||||||
| /* ---------------------------------------------------------------- */ | /* ---------------------------------------------------------------- */ | ||||||
|  |  | ||||||
| #if defined(CURL_HAS_NOVELL_LDAPSDK) || defined(CURL_HAS_MOZILLA_LDAPSDK) | #if defined(CURL_HAS_NOVELL_LDAPSDK) || defined(CURL_HAS_MOZILLA_LDAPSDK) | ||||||
| #undef CURL_LDAP_WIN | #undef USE_WIN32_LDAP | ||||||
| #define HAVE_LDAP_SSL_H 1 | #define HAVE_LDAP_SSL_H 1 | ||||||
| #define HAVE_LDAP_URL_PARSE 1 | #define HAVE_LDAP_URL_PARSE 1 | ||||||
| #elif defined(CURL_HAS_OPENLDAP_LDAPSDK) | #elif defined(CURL_HAS_OPENLDAP_LDAPSDK) | ||||||
| #undef CURL_LDAP_WIN | #undef USE_WIN32_LDAP | ||||||
| #define HAVE_LDAP_URL_PARSE 1 | #define HAVE_LDAP_URL_PARSE 1 | ||||||
| #else | #else | ||||||
| #undef HAVE_LDAP_URL_PARSE | #undef HAVE_LDAP_URL_PARSE | ||||||
| #define CURL_LDAP_WIN 1 | #define USE_WIN32_LDAP 1 | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| #if defined(__WATCOMC__) && defined(CURL_LDAP_WIN) | #if defined(__WATCOMC__) && defined(USE_WIN32_LDAP) | ||||||
| #if __WATCOMC__ < 1280 | #if __WATCOMC__ < 1280 | ||||||
| #define WINBERAPI  __declspec(cdecl) | #define WINBERAPI  __declspec(cdecl) | ||||||
| #define WINLDAPAPI __declspec(cdecl) | #define WINLDAPAPI __declspec(cdecl) | ||||||
| #endif | #endif | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| #if defined(__POCC__) && defined(CURL_LDAP_WIN) | #if defined(__POCC__) && defined(USE_WIN32_LDAP) | ||||||
| #  define CURL_DISABLE_LDAP 1 | #  define CURL_DISABLE_LDAP 1 | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  | /* Define to use the Windows crypto library. */ | ||||||
|  | #if !defined(USE_SSLEAY) && !defined(USE_NSS) | ||||||
|  | #define USE_WIN32_CRYPTO | ||||||
|  | #endif | ||||||
|  |  | ||||||
| /* ---------------------------------------------------------------- */ | /* ---------------------------------------------------------------- */ | ||||||
| /*                       ADDITIONAL DEFINITIONS                     */ | /*                       ADDITIONAL DEFINITIONS                     */ | ||||||
| /* ---------------------------------------------------------------- */ | /* ---------------------------------------------------------------- */ | ||||||
|   | |||||||
| @@ -7,7 +7,7 @@ | |||||||
|  *                            | (__| |_| |  _ <| |___ |  *                            | (__| |_| |  _ <| |___ | ||||||
|  *                             \___|\___/|_| \_\_____| |  *                             \___|\___/|_| \_\_____| | ||||||
|  * |  * | ||||||
|  * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al. |  * Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||||
|  * |  * | ||||||
|  * This software is licensed as described in the file COPYING, which |  * This software is licensed as described in the file COPYING, which | ||||||
|  * you should have received as part of this distribution. The terms |  * you should have received as part of this distribution. The terms | ||||||
| @@ -409,7 +409,7 @@ | |||||||
| /*                           LDAP SUPPORT                           */ | /*                           LDAP SUPPORT                           */ | ||||||
| /* ---------------------------------------------------------------- */ | /* ---------------------------------------------------------------- */ | ||||||
|  |  | ||||||
| #define CURL_LDAP_WIN 1 | #define USE_WIN32_LDAP 1 | ||||||
| #undef HAVE_LDAP_URL_PARSE | #undef HAVE_LDAP_URL_PARSE | ||||||
|  |  | ||||||
| /* ---------------------------------------------------------------- */ | /* ---------------------------------------------------------------- */ | ||||||
|   | |||||||
| @@ -152,6 +152,10 @@ CURLcode Curl_conncache_add_conn(struct conncache *connc, | |||||||
|   conn->connection_id = connc->next_connection_id++; |   conn->connection_id = connc->next_connection_id++; | ||||||
|   connc->num_connections++; |   connc->num_connections++; | ||||||
|  |  | ||||||
|  |   DEBUGF(infof(conn->data, "Added connection %ld. " | ||||||
|  |                "The cache now contains %" CURL_FORMAT_CURL_OFF_TU " members\n", | ||||||
|  |                conn->connection_id, (curl_off_t) connc->num_connections)); | ||||||
|  |  | ||||||
|   return CURLE_OK; |   return CURLE_OK; | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -171,8 +175,9 @@ void Curl_conncache_remove_conn(struct conncache *connc, | |||||||
|     if(connc) { |     if(connc) { | ||||||
|       connc->num_connections--; |       connc->num_connections--; | ||||||
|  |  | ||||||
|       DEBUGF(infof(conn->data, "The cache now contains %d members\n", |       DEBUGF(infof(conn->data, "The cache now contains %" | ||||||
|                    connc->num_connections)); |                    CURL_FORMAT_CURL_OFF_TU " members\n", | ||||||
|  |                    (curl_off_t) connc->num_connections)); | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ | |||||||
|  *                            | (__| |_| |  _ <| |___ |  *                            | (__| |_| |  _ <| |___ | ||||||
|  *                             \___|\___/|_| \_\_____| |  *                             \___|\___/|_| \_\_____| | ||||||
|  * |  * | ||||||
|  * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al. |  * Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||||
|  * |  * | ||||||
|  * This software is licensed as described in the file COPYING, which |  * This software is licensed as described in the file COPYING, which | ||||||
|  * you should have received as part of this distribution. The terms |  * you should have received as part of this distribution. The terms | ||||||
| @@ -238,7 +238,7 @@ long Curl_timeleft(struct SessionHandle *data, | |||||||
| } | } | ||||||
|  |  | ||||||
| static CURLcode bindlocal(struct connectdata *conn, | static CURLcode bindlocal(struct connectdata *conn, | ||||||
|                           curl_socket_t sockfd, int af) |                           curl_socket_t sockfd, int af, unsigned int scope) | ||||||
| { | { | ||||||
|   struct SessionHandle *data = conn->data; |   struct SessionHandle *data = conn->data; | ||||||
|  |  | ||||||
| @@ -286,7 +286,8 @@ static CURLcode bindlocal(struct connectdata *conn, | |||||||
|  |  | ||||||
|     /* interface */ |     /* interface */ | ||||||
|     if(!is_host) { |     if(!is_host) { | ||||||
|       switch(Curl_if2ip(af, conn->scope, dev, myhost, sizeof(myhost))) { |       switch(Curl_if2ip(af, scope, conn->scope_id, dev, | ||||||
|  |                         myhost, sizeof(myhost))) { | ||||||
|         case IF2IP_NOT_FOUND: |         case IF2IP_NOT_FOUND: | ||||||
|           if(is_interface) { |           if(is_interface) { | ||||||
|             /* Do not fall back to treating it as a host name */ |             /* Do not fall back to treating it as a host name */ | ||||||
| @@ -375,7 +376,7 @@ static CURLcode bindlocal(struct connectdata *conn, | |||||||
|  |  | ||||||
|     if(done > 0) { |     if(done > 0) { | ||||||
| #ifdef ENABLE_IPV6 | #ifdef ENABLE_IPV6 | ||||||
|       /* ipv6 address */ |       /* IPv6 address */ | ||||||
|       if(af == AF_INET6) { |       if(af == AF_INET6) { | ||||||
| #ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID | #ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID | ||||||
|         char *scope_ptr = strchr(myhost, '%'); |         char *scope_ptr = strchr(myhost, '%'); | ||||||
| @@ -398,7 +399,7 @@ static CURLcode bindlocal(struct connectdata *conn, | |||||||
|       } |       } | ||||||
|       else |       else | ||||||
| #endif | #endif | ||||||
|       /* ipv4 address */ |       /* IPv4 address */ | ||||||
|       if((af == AF_INET) && |       if((af == AF_INET) && | ||||||
|          (Curl_inet_pton(AF_INET, myhost, &si4->sin_addr) > 0)) { |          (Curl_inet_pton(AF_INET, myhost, &si4->sin_addr) > 0)) { | ||||||
|         si4->sin_family = AF_INET; |         si4->sin_family = AF_INET; | ||||||
| @@ -541,6 +542,7 @@ static CURLcode trynextip(struct connectdata *conn, | |||||||
|                           int sockindex, |                           int sockindex, | ||||||
|                           int tempindex) |                           int tempindex) | ||||||
| { | { | ||||||
|  |   const int other = tempindex ^ 1; | ||||||
|   CURLcode result = CURLE_COULDNT_CONNECT; |   CURLcode result = CURLE_COULDNT_CONNECT; | ||||||
|  |  | ||||||
|   /* First clean up after the failed socket. |   /* First clean up after the failed socket. | ||||||
| @@ -571,8 +573,11 @@ static CURLcode trynextip(struct connectdata *conn, | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     while(ai) { |     while(ai) { | ||||||
|  |       if(conn->tempaddr[other]) { | ||||||
|  |         /* we can safely skip addresses of the other protocol family */ | ||||||
|         while(ai && ai->ai_family != family) |         while(ai && ai->ai_family != family) | ||||||
|           ai = ai->ai_next; |           ai = ai->ai_next; | ||||||
|  |       } | ||||||
|  |  | ||||||
|       if(ai) { |       if(ai) { | ||||||
|         result = singleipconnect(conn, ai, &conn->tempsock[tempindex]); |         result = singleipconnect(conn, ai, &conn->tempsock[tempindex]); | ||||||
| @@ -679,6 +684,7 @@ void Curl_updateconninfo(struct connectdata *conn, curl_socket_t sockfd) | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     len = sizeof(struct Curl_sockaddr_storage); |     len = sizeof(struct Curl_sockaddr_storage); | ||||||
|  |     memset(&ssloc, 0, sizeof(ssloc)); | ||||||
|     if(getsockname(sockfd, (struct sockaddr*) &ssloc, &len)) { |     if(getsockname(sockfd, (struct sockaddr*) &ssloc, &len)) { | ||||||
|       error = SOCKERRNO; |       error = SOCKERRNO; | ||||||
|       failf(data, "getsockname() failed with errno %d: %s", |       failf(data, "getsockname() failed with errno %d: %s", | ||||||
| @@ -747,6 +753,7 @@ CURLcode Curl_is_connected(struct connectdata *conn, | |||||||
|   } |   } | ||||||
|  |  | ||||||
|   for(i=0; i<2; i++) { |   for(i=0; i<2; i++) { | ||||||
|  |     const int other = i ^ 1; | ||||||
|     if(conn->tempsock[i] == CURL_SOCKET_BAD) |     if(conn->tempsock[i] == CURL_SOCKET_BAD) | ||||||
|       continue; |       continue; | ||||||
|  |  | ||||||
| @@ -776,7 +783,6 @@ CURLcode Curl_is_connected(struct connectdata *conn, | |||||||
|     else if(rc == CURL_CSELECT_OUT) { |     else if(rc == CURL_CSELECT_OUT) { | ||||||
|       if(verifyconnect(conn->tempsock[i], &error)) { |       if(verifyconnect(conn->tempsock[i], &error)) { | ||||||
|         /* we are connected with TCP, awesome! */ |         /* we are connected with TCP, awesome! */ | ||||||
|         int other = i ^ 1; |  | ||||||
|  |  | ||||||
|         /* use this socket from now on */ |         /* use this socket from now on */ | ||||||
|         conn->sock[sockindex] = conn->tempsock[i]; |         conn->sock[sockindex] = conn->tempsock[i]; | ||||||
| @@ -818,6 +824,7 @@ CURLcode Curl_is_connected(struct connectdata *conn, | |||||||
|       data->state.os_errno = error; |       data->state.os_errno = error; | ||||||
|       SET_SOCKERRNO(error); |       SET_SOCKERRNO(error); | ||||||
|       if(conn->tempaddr[i]) { |       if(conn->tempaddr[i]) { | ||||||
|  |         CURLcode status; | ||||||
|         char ipaddress[MAX_IPADR_LEN]; |         char ipaddress[MAX_IPADR_LEN]; | ||||||
|         Curl_printable_address(conn->tempaddr[i], ipaddress, MAX_IPADR_LEN); |         Curl_printable_address(conn->tempaddr[i], ipaddress, MAX_IPADR_LEN); | ||||||
|         infof(data, "connect to %s port %ld failed: %s\n", |         infof(data, "connect to %s port %ld failed: %s\n", | ||||||
| @@ -826,7 +833,11 @@ CURLcode Curl_is_connected(struct connectdata *conn, | |||||||
|         conn->timeoutms_per_addr = conn->tempaddr[i]->ai_next == NULL ? |         conn->timeoutms_per_addr = conn->tempaddr[i]->ai_next == NULL ? | ||||||
|                                    allow : allow / 2; |                                    allow : allow / 2; | ||||||
|  |  | ||||||
|         result = trynextip(conn, sockindex, i); |         status = trynextip(conn, sockindex, i); | ||||||
|  |         if(status != CURLE_COULDNT_CONNECT | ||||||
|  |             || conn->tempsock[other] == CURL_SOCKET_BAD) | ||||||
|  |           /* the last attempt failed and no other sockets remain open */ | ||||||
|  |           result = status; | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| @@ -991,6 +1002,7 @@ static CURLcode singleipconnect(struct connectdata *conn, | |||||||
|   CURLcode result; |   CURLcode result; | ||||||
|   char ipaddress[MAX_IPADR_LEN]; |   char ipaddress[MAX_IPADR_LEN]; | ||||||
|   long port; |   long port; | ||||||
|  |   bool is_tcp; | ||||||
|  |  | ||||||
|   *sockp = CURL_SOCKET_BAD; |   *sockp = CURL_SOCKET_BAD; | ||||||
|  |  | ||||||
| @@ -1013,14 +1025,20 @@ static CURLcode singleipconnect(struct connectdata *conn, | |||||||
|   } |   } | ||||||
|   infof(data, "  Trying %s...\n", ipaddress); |   infof(data, "  Trying %s...\n", ipaddress); | ||||||
|  |  | ||||||
|   if(data->set.tcp_nodelay) | #ifdef ENABLE_IPV6 | ||||||
|  |   is_tcp = (addr.family == AF_INET || addr.family == AF_INET6) && | ||||||
|  |     addr.socktype == SOCK_STREAM; | ||||||
|  | #else | ||||||
|  |   is_tcp = (addr.family == AF_INET) && addr.socktype == SOCK_STREAM; | ||||||
|  | #endif | ||||||
|  |   if(is_tcp && data->set.tcp_nodelay) | ||||||
|     tcpnodelay(conn, sockfd); |     tcpnodelay(conn, sockfd); | ||||||
|  |  | ||||||
|   nosigpipe(conn, sockfd); |   nosigpipe(conn, sockfd); | ||||||
|  |  | ||||||
|   Curl_sndbufset(sockfd); |   Curl_sndbufset(sockfd); | ||||||
|  |  | ||||||
|   if(data->set.tcp_keepalive) |   if(is_tcp && data->set.tcp_keepalive) | ||||||
|     tcpkeepalive(data, sockfd); |     tcpkeepalive(data, sockfd); | ||||||
|  |  | ||||||
|   if(data->set.fsockopt) { |   if(data->set.fsockopt) { | ||||||
| @@ -1038,17 +1056,23 @@ static CURLcode singleipconnect(struct connectdata *conn, | |||||||
|   } |   } | ||||||
|  |  | ||||||
|   /* possibly bind the local end to an IP, interface or port */ |   /* possibly bind the local end to an IP, interface or port */ | ||||||
|   result = bindlocal(conn, sockfd, addr.family); |   if(addr.family == AF_INET | ||||||
|  | #ifdef ENABLE_IPV6 | ||||||
|  |      || addr.family == AF_INET6 | ||||||
|  | #endif | ||||||
|  |     ) { | ||||||
|  |     result = bindlocal(conn, sockfd, addr.family, | ||||||
|  |                        Curl_ipv6_scope((struct sockaddr*)&addr.sa_addr)); | ||||||
|     if(result) { |     if(result) { | ||||||
|       Curl_closesocket(conn, sockfd); /* close socket and bail out */ |       Curl_closesocket(conn, sockfd); /* close socket and bail out */ | ||||||
|       if(result == CURLE_UNSUPPORTED_PROTOCOL) { |       if(result == CURLE_UNSUPPORTED_PROTOCOL) { | ||||||
|         /* The address family is not supported on this interface. |         /* The address family is not supported on this interface. | ||||||
|            We can continue trying addresses */ |            We can continue trying addresses */ | ||||||
|       return CURLE_OK; |         return CURLE_COULDNT_CONNECT; | ||||||
|       } |       } | ||||||
|  |  | ||||||
|       return result; |       return result; | ||||||
|     } |     } | ||||||
|  |   } | ||||||
|  |  | ||||||
|   /* set socket non-blocking */ |   /* set socket non-blocking */ | ||||||
|   (void)curlx_nonblock(sockfd, TRUE); |   (void)curlx_nonblock(sockfd, TRUE); | ||||||
| @@ -1244,12 +1268,13 @@ int Curl_closesocket(struct connectdata *conn, | |||||||
|     else |     else | ||||||
|       return conn->fclosesocket(conn->closesocket_client, sock); |       return conn->fclosesocket(conn->closesocket_client, sock); | ||||||
|   } |   } | ||||||
|   sclose(sock); |  | ||||||
|  |  | ||||||
|   if(conn) |   if(conn) | ||||||
|     /* tell the multi-socket code about this */ |     /* tell the multi-socket code about this */ | ||||||
|     Curl_multi_closed(conn, sock); |     Curl_multi_closed(conn, sock); | ||||||
|  |  | ||||||
|  |   sclose(sock); | ||||||
|  |  | ||||||
|   return 0; |   return 0; | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -1313,9 +1338,9 @@ CURLcode Curl_socket(struct connectdata *conn, | |||||||
|     return CURLE_COULDNT_CONNECT; |     return CURLE_COULDNT_CONNECT; | ||||||
|  |  | ||||||
| #if defined(ENABLE_IPV6) && defined(HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID) | #if defined(ENABLE_IPV6) && defined(HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID) | ||||||
|   if(conn->scope && (addr->family == AF_INET6)) { |   if(conn->scope_id && (addr->family == AF_INET6)) { | ||||||
|     struct sockaddr_in6 * const sa6 = (void *)&addr->sa_addr; |     struct sockaddr_in6 * const sa6 = (void *)&addr->sa_addr; | ||||||
|     sa6->sin6_scope_id = conn->scope; |     sa6->sin6_scope_id = conn->scope_id; | ||||||
|   } |   } | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| @@ -1326,15 +1351,20 @@ CURLcode Curl_socket(struct connectdata *conn, | |||||||
| #ifdef CURLDEBUG | #ifdef CURLDEBUG | ||||||
| /* | /* | ||||||
|  * Curl_conncontrol() is used to set the conn->bits.close bit on or off. It |  * Curl_conncontrol() is used to set the conn->bits.close bit on or off. It | ||||||
|  * MUST be called with the connclose() or connclose() macros with a stated |  * MUST be called with the connclose() or connkeep() macros with a stated | ||||||
|  * reason. The reason is only shown in debug builds but helps to figure out |  * reason. The reason is only shown in debug builds but helps to figure out | ||||||
|  * decision paths when connections are or aren't re-used as expected. |  * decision paths when connections are or aren't re-used as expected. | ||||||
|  */ |  */ | ||||||
| void Curl_conncontrol(struct connectdata *conn, bool closeit, | void Curl_conncontrol(struct connectdata *conn, bool closeit, | ||||||
|                       const char *reason) |                       const char *reason) | ||||||
| { | { | ||||||
|  | #if defined(CURL_DISABLE_VERBOSE_STRINGS) | ||||||
|  |   (void) reason; | ||||||
|  | #endif | ||||||
|  |  | ||||||
|   infof(conn->data, "Marked for [%s]: %s\n", closeit?"closure":"keep alive", |   infof(conn->data, "Marked for [%s]: %s\n", closeit?"closure":"keep alive", | ||||||
|         reason); |         reason); | ||||||
|  |  | ||||||
|   conn->bits.close = closeit; /* the only place in the source code that should |   conn->bits.close = closeit; /* the only place in the source code that should | ||||||
|                                  assign this bit */ |                                  assign this bit */ | ||||||
| } | } | ||||||
|   | |||||||
| @@ -41,7 +41,7 @@ long Curl_timeleft(struct SessionHandle *data, | |||||||
|  |  | ||||||
| #define DEFAULT_CONNECT_TIMEOUT 300000 /* milliseconds == five minutes */ | #define DEFAULT_CONNECT_TIMEOUT 300000 /* milliseconds == five minutes */ | ||||||
| #define HAPPY_EYEBALLS_TIMEOUT     200 /* milliseconds to wait between | #define HAPPY_EYEBALLS_TIMEOUT     200 /* milliseconds to wait between | ||||||
|                                           ipv4/ipv6 connection attempts */ |                                           IPv4/IPv6 connection attempts */ | ||||||
|  |  | ||||||
| /* | /* | ||||||
|  * Used to extract socket and connectdata struct for the most recent |  * Used to extract socket and connectdata struct for the most recent | ||||||
|   | |||||||
							
								
								
									
										61
									
								
								lib/cookie.c
									
									
									
									
									
								
							
							
						
						
									
										61
									
								
								lib/cookie.c
									
									
									
									
									
								
							| @@ -26,14 +26,17 @@ | |||||||
| RECEIVING COOKIE INFORMATION | RECEIVING COOKIE INFORMATION | ||||||
| ============================ | ============================ | ||||||
|  |  | ||||||
| struct CookieInfo *cookie_init(char *file); | struct CookieInfo *Curl_cookie_init(struct SessionHandle *data, | ||||||
|  |                     const char *file, struct CookieInfo *inc, bool newsession); | ||||||
|  |  | ||||||
|         Inits a cookie struct to store data in a local file. This is always |         Inits a cookie struct to store data in a local file. This is always | ||||||
|         called before any cookies are set. |         called before any cookies are set. | ||||||
|  |  | ||||||
| int cookies_set(struct CookieInfo *cookie, char *cookie_line); | struct Cookie *Curl_cookie_add(struct SessionHandle *data, | ||||||
|  |                  struct CookieInfo *c, bool httpheader, char *lineptr, | ||||||
|  |                  const char *domain, const char *path); | ||||||
|  |  | ||||||
|         The 'cookie_line' parameter is a full "Set-cookie:" line as |         The 'lineptr' parameter is a full "Set-cookie:" line as | ||||||
|         received from a server. |         received from a server. | ||||||
|  |  | ||||||
|         The function need to replace previously stored lines that this new |         The function need to replace previously stored lines that this new | ||||||
| @@ -47,7 +50,7 @@ int cookies_set(struct CookieInfo *cookie, char *cookie_line); | |||||||
| SENDING COOKIE INFORMATION | SENDING COOKIE INFORMATION | ||||||
| ========================== | ========================== | ||||||
|  |  | ||||||
| struct Cookies *cookie_getlist(struct CookieInfo *cookie, | struct Cookies *Curl_cookie_getlist(struct CookieInfo *cookie, | ||||||
|                                     char *host, char *path, bool secure); |                                     char *host, char *path, bool secure); | ||||||
|  |  | ||||||
|         For a given host and path, return a linked list of cookies that |         For a given host and path, return a linked list of cookies that | ||||||
| @@ -259,6 +262,8 @@ static char *sanitize_cookie_path(const char *cookie_path) | |||||||
|  |  | ||||||
| /* | /* | ||||||
|  * Load cookies from all given cookie files (CURLOPT_COOKIEFILE). |  * Load cookies from all given cookie files (CURLOPT_COOKIEFILE). | ||||||
|  |  * | ||||||
|  |  * NOTE: OOM or cookie parsing failures are ignored. | ||||||
|  */ |  */ | ||||||
| void Curl_cookie_loadfiles(struct SessionHandle *data) | void Curl_cookie_loadfiles(struct SessionHandle *data) | ||||||
| { | { | ||||||
| @@ -266,10 +271,17 @@ void Curl_cookie_loadfiles(struct SessionHandle *data) | |||||||
|   if(list) { |   if(list) { | ||||||
|     Curl_share_lock(data, CURL_LOCK_DATA_COOKIE, CURL_LOCK_ACCESS_SINGLE); |     Curl_share_lock(data, CURL_LOCK_DATA_COOKIE, CURL_LOCK_ACCESS_SINGLE); | ||||||
|     while(list) { |     while(list) { | ||||||
|       data->cookies = Curl_cookie_init(data, |       struct CookieInfo *newcookies = Curl_cookie_init(data, | ||||||
|                                         list->data, |                                         list->data, | ||||||
|                                         data->cookies, |                                         data->cookies, | ||||||
|                                         data->set.cookiesession); |                                         data->set.cookiesession); | ||||||
|  |       if(!newcookies) | ||||||
|  |         /* Failure may be due to OOM or a bad cookie; both are ignored | ||||||
|  |          * but only the first should be | ||||||
|  |          */ | ||||||
|  |         infof(data, "ignoring failed cookie_init for %s\n", list->data); | ||||||
|  |       else | ||||||
|  |         data->cookies = newcookies; | ||||||
|       list = list->next; |       list = list->next; | ||||||
|     } |     } | ||||||
|     curl_slist_free_all(data->change.cookielist); /* clean up list */ |     curl_slist_free_all(data->change.cookielist); /* clean up list */ | ||||||
| @@ -351,6 +363,8 @@ static bool isip(const char *domain) | |||||||
|  * Be aware that sometimes we get an IP-only host name, and that might also be |  * Be aware that sometimes we get an IP-only host name, and that might also be | ||||||
|  * a numerical IPv6 address. |  * a numerical IPv6 address. | ||||||
|  * |  * | ||||||
|  |  * Returns NULL on out of memory or invalid cookie. This is suboptimal, | ||||||
|  |  * as they should be treated separately. | ||||||
|  ***************************************************************************/ |  ***************************************************************************/ | ||||||
|  |  | ||||||
| struct Cookie * | struct Cookie * | ||||||
| @@ -882,6 +896,7 @@ Curl_cookie_add(struct SessionHandle *data, | |||||||
|  * |  * | ||||||
|  * If 'newsession' is TRUE, discard all "session cookies" on read from file. |  * If 'newsession' is TRUE, discard all "session cookies" on read from file. | ||||||
|  * |  * | ||||||
|  |  * Returns NULL on out of memory. Invalid cookies are ignored. | ||||||
|  ****************************************************************************/ |  ****************************************************************************/ | ||||||
| struct CookieInfo *Curl_cookie_init(struct SessionHandle *data, | struct CookieInfo *Curl_cookie_init(struct SessionHandle *data, | ||||||
|                                     const char *file, |                                     const char *file, | ||||||
| @@ -889,8 +904,9 @@ struct CookieInfo *Curl_cookie_init(struct SessionHandle *data, | |||||||
|                                     bool newsession) |                                     bool newsession) | ||||||
| { | { | ||||||
|   struct CookieInfo *c; |   struct CookieInfo *c; | ||||||
|   FILE *fp; |   FILE *fp = NULL; | ||||||
|   bool fromfile=TRUE; |   bool fromfile=TRUE; | ||||||
|  |   char *line = NULL; | ||||||
|  |  | ||||||
|   if(NULL == inc) { |   if(NULL == inc) { | ||||||
|     /* we didn't get a struct, create one */ |     /* we didn't get a struct, create one */ | ||||||
| @@ -898,6 +914,8 @@ struct CookieInfo *Curl_cookie_init(struct SessionHandle *data, | |||||||
|     if(!c) |     if(!c) | ||||||
|       return NULL; /* failed to get memory */ |       return NULL; /* failed to get memory */ | ||||||
|     c->filename = strdup(file?file:"none"); /* copy the name just in case */ |     c->filename = strdup(file?file:"none"); /* copy the name just in case */ | ||||||
|  |     if(!c->filename) | ||||||
|  |       goto fail; /* failed to get memory */ | ||||||
|   } |   } | ||||||
|   else { |   else { | ||||||
|     /* we got an already existing one, use that */ |     /* we got an already existing one, use that */ | ||||||
| @@ -922,8 +940,9 @@ struct CookieInfo *Curl_cookie_init(struct SessionHandle *data, | |||||||
|     char *lineptr; |     char *lineptr; | ||||||
|     bool headerline; |     bool headerline; | ||||||
|  |  | ||||||
|     char *line = malloc(MAX_COOKIE_LINE); |     line = malloc(MAX_COOKIE_LINE); | ||||||
|     if(line) { |     if(!line) | ||||||
|  |       goto fail; | ||||||
|     while(fgets(line, MAX_COOKIE_LINE, fp)) { |     while(fgets(line, MAX_COOKIE_LINE, fp)) { | ||||||
|       if(checkprefix("Set-Cookie:", line)) { |       if(checkprefix("Set-Cookie:", line)) { | ||||||
|         /* This is a cookie line, get it! */ |         /* This is a cookie line, get it! */ | ||||||
| @@ -940,7 +959,7 @@ struct CookieInfo *Curl_cookie_init(struct SessionHandle *data, | |||||||
|       Curl_cookie_add(data, c, headerline, lineptr, NULL, NULL); |       Curl_cookie_add(data, c, headerline, lineptr, NULL, NULL); | ||||||
|     } |     } | ||||||
|     free(line); /* free the line buffer */ |     free(line); /* free the line buffer */ | ||||||
|     } |  | ||||||
|     if(fromfile) |     if(fromfile) | ||||||
|       fclose(fp); |       fclose(fp); | ||||||
|   } |   } | ||||||
| @@ -948,6 +967,16 @@ struct CookieInfo *Curl_cookie_init(struct SessionHandle *data, | |||||||
|   c->running = TRUE;          /* now, we're running */ |   c->running = TRUE;          /* now, we're running */ | ||||||
|  |  | ||||||
|   return c; |   return c; | ||||||
|  |  | ||||||
|  | fail: | ||||||
|  |   Curl_safefree(line); | ||||||
|  |   if(!inc) | ||||||
|  |     /* Only clean up if we allocated it here, as the original could still be in | ||||||
|  |      * use by a share handle */ | ||||||
|  |     Curl_cookie_cleanup(c); | ||||||
|  |   if(fromfile && fp) | ||||||
|  |     fclose(fp); | ||||||
|  |   return NULL; /* out of memory */ | ||||||
| } | } | ||||||
|  |  | ||||||
| /* sort this so that the longest path gets before the shorter path */ | /* sort this so that the longest path gets before the shorter path */ | ||||||
| @@ -1127,7 +1156,6 @@ void Curl_cookie_clearall(struct CookieInfo *cookies) | |||||||
| void Curl_cookie_freelist(struct Cookie *co, bool cookiestoo) | void Curl_cookie_freelist(struct Cookie *co, bool cookiestoo) | ||||||
| { | { | ||||||
|   struct Cookie *next; |   struct Cookie *next; | ||||||
|   if(co) { |  | ||||||
|   while(co) { |   while(co) { | ||||||
|     next = co->next; |     next = co->next; | ||||||
|     if(cookiestoo) |     if(cookiestoo) | ||||||
| @@ -1138,7 +1166,6 @@ void Curl_cookie_freelist(struct Cookie *co, bool cookiestoo) | |||||||
|     co = next; |     co = next; | ||||||
|   } |   } | ||||||
| } | } | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /***************************************************************************** | /***************************************************************************** | ||||||
| @@ -1183,23 +1210,15 @@ void Curl_cookie_clearsess(struct CookieInfo *cookies) | |||||||
|  * |  * | ||||||
|  * Curl_cookie_cleanup() |  * Curl_cookie_cleanup() | ||||||
|  * |  * | ||||||
|  * Free a "cookie object" previous created with cookie_init(). |  * Free a "cookie object" previous created with Curl_cookie_init(). | ||||||
|  * |  * | ||||||
|  ****************************************************************************/ |  ****************************************************************************/ | ||||||
| void Curl_cookie_cleanup(struct CookieInfo *c) | void Curl_cookie_cleanup(struct CookieInfo *c) | ||||||
| { | { | ||||||
|   struct Cookie *co; |  | ||||||
|   struct Cookie *next; |  | ||||||
|   if(c) { |   if(c) { | ||||||
|     if(c->filename) |     if(c->filename) | ||||||
|       free(c->filename); |       free(c->filename); | ||||||
|     co = c->cookies; |     Curl_cookie_freelist(c->cookies, TRUE); | ||||||
|  |  | ||||||
|     while(co) { |  | ||||||
|       next = co->next; |  | ||||||
|       freecookie(co); |  | ||||||
|       co = next; |  | ||||||
|     } |  | ||||||
|     free(c); /* free the base struct as well */ |     free(c); /* free the base struct as well */ | ||||||
|   } |   } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -33,6 +33,9 @@ | |||||||
| #ifdef HAVE_ARPA_INET_H | #ifdef HAVE_ARPA_INET_H | ||||||
| #  include <arpa/inet.h> | #  include <arpa/inet.h> | ||||||
| #endif | #endif | ||||||
|  | #ifdef HAVE_SYS_UN_H | ||||||
|  | #  include <sys/un.h> | ||||||
|  | #endif | ||||||
|  |  | ||||||
| #ifdef __VMS | #ifdef __VMS | ||||||
| #  include <in.h> | #  include <in.h> | ||||||
| @@ -477,6 +480,42 @@ Curl_addrinfo *Curl_str2addr(char *address, int port) | |||||||
|   return NULL; /* bad input format */ |   return NULL; /* bad input format */ | ||||||
| } | } | ||||||
|  |  | ||||||
|  | #ifdef USE_UNIX_SOCKETS | ||||||
|  | /** | ||||||
|  |  * Given a path to a Unix domain socket, return a newly allocated Curl_addrinfo | ||||||
|  |  * struct initialized with this path. | ||||||
|  |  */ | ||||||
|  | Curl_addrinfo *Curl_unix2addr(const char *path) | ||||||
|  | { | ||||||
|  |   Curl_addrinfo *ai; | ||||||
|  |   struct sockaddr_un *sa_un; | ||||||
|  |   size_t path_len; | ||||||
|  |  | ||||||
|  |   ai = calloc(1, sizeof(Curl_addrinfo)); | ||||||
|  |   if(!ai) | ||||||
|  |     return NULL; | ||||||
|  |   if((ai->ai_addr = calloc(1, sizeof(struct sockaddr_un))) == NULL) { | ||||||
|  |     free(ai); | ||||||
|  |     return NULL; | ||||||
|  |   } | ||||||
|  |   /* sun_path must be able to store the NUL-terminated path */ | ||||||
|  |   path_len = strlen(path); | ||||||
|  |   if(path_len >= sizeof(sa_un->sun_path)) { | ||||||
|  |     free(ai->ai_addr); | ||||||
|  |     free(ai); | ||||||
|  |     return NULL; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   ai->ai_family = AF_UNIX; | ||||||
|  |   ai->ai_socktype = SOCK_STREAM; /* assume reliable transport for HTTP */ | ||||||
|  |   ai->ai_addrlen = (curl_socklen_t) sizeof(struct sockaddr_un); | ||||||
|  |   sa_un = (void *) ai->ai_addr; | ||||||
|  |   sa_un->sun_family = AF_UNIX; | ||||||
|  |   memcpy(sa_un->sun_path, path, path_len + 1); /* copy NUL byte */ | ||||||
|  |   return ai; | ||||||
|  | } | ||||||
|  | #endif | ||||||
|  |  | ||||||
| #if defined(CURLDEBUG) && defined(HAVE_FREEADDRINFO) | #if defined(CURLDEBUG) && defined(HAVE_FREEADDRINFO) | ||||||
| /* | /* | ||||||
|  * curl_dofreeaddrinfo() |  * curl_dofreeaddrinfo() | ||||||
|   | |||||||
| @@ -79,6 +79,10 @@ Curl_ip2addr(int af, const void *inaddr, const char *hostname, int port); | |||||||
|  |  | ||||||
| Curl_addrinfo *Curl_str2addr(char *dotted, int port); | Curl_addrinfo *Curl_str2addr(char *dotted, int port); | ||||||
|  |  | ||||||
|  | #ifdef USE_UNIX_SOCKETS | ||||||
|  | Curl_addrinfo *Curl_unix2addr(const char *path); | ||||||
|  | #endif | ||||||
|  |  | ||||||
| #if defined(CURLDEBUG) && defined(HAVE_FREEADDRINFO) | #if defined(CURLDEBUG) && defined(HAVE_FREEADDRINFO) | ||||||
| void | void | ||||||
| curl_dofreeaddrinfo(struct addrinfo *freethis, | curl_dofreeaddrinfo(struct addrinfo *freethis, | ||||||
|   | |||||||
| @@ -53,7 +53,7 @@ | |||||||
| #endif | #endif | ||||||
|  |  | ||||||
| /* Use Windows LDAP implementation */ | /* Use Windows LDAP implementation */ | ||||||
| #cmakedefine CURL_LDAP_WIN 1 | #cmakedefine USE_WIN32_LDAP 1 | ||||||
|  |  | ||||||
| /* when not building a shared library */ | /* when not building a shared library */ | ||||||
| #cmakedefine CURL_STATICLIB 1 | #cmakedefine CURL_STATICLIB 1 | ||||||
| @@ -467,6 +467,9 @@ | |||||||
| /* Define to 1 if you have a working POSIX-style strerror_r function. */ | /* Define to 1 if you have a working POSIX-style strerror_r function. */ | ||||||
| #cmakedefine HAVE_POSIX_STRERROR_R 1 | #cmakedefine HAVE_POSIX_STRERROR_R 1 | ||||||
|  |  | ||||||
|  | /* Define to 1 if you have the <pthread.h> header file */ | ||||||
|  | #cmakedefine HAVE_PTHREAD_H 1 | ||||||
|  |  | ||||||
| /* Define to 1 if you have the <pwd.h> header file. */ | /* Define to 1 if you have the <pwd.h> header file. */ | ||||||
| #cmakedefine HAVE_PWD_H 1 | #cmakedefine HAVE_PWD_H 1 | ||||||
|  |  | ||||||
| @@ -879,6 +882,9 @@ | |||||||
| /* Define if you want to enable c-ares support */ | /* Define if you want to enable c-ares support */ | ||||||
| #cmakedefine USE_ARES 1 | #cmakedefine USE_ARES 1 | ||||||
|  |  | ||||||
|  | /* Define if you want to enable POSIX threaded DNS lookup */ | ||||||
|  | #cmakedefine USE_THREADS_POSIX 1 | ||||||
|  |  | ||||||
| /* Define to disable non-blocking sockets. */ | /* Define to disable non-blocking sockets. */ | ||||||
| #cmakedefine USE_BLOCKING_SOCKETS 1 | #cmakedefine USE_BLOCKING_SOCKETS 1 | ||||||
|  |  | ||||||
| @@ -906,6 +912,9 @@ | |||||||
| /* if SSL is enabled */ | /* if SSL is enabled */ | ||||||
| #cmakedefine USE_SSLEAY 1 | #cmakedefine USE_SSLEAY 1 | ||||||
|  |  | ||||||
|  | /* if Unix domain sockets are enabled  */ | ||||||
|  | #cmakedefine USE_UNIX_SOCKETS | ||||||
|  |  | ||||||
| /* Define to 1 if you are building a Windows target without large file | /* Define to 1 if you are building a Windows target without large file | ||||||
|    support. */ |    support. */ | ||||||
| #cmakedefine USE_WIN32_LARGE_FILES 1 | #cmakedefine USE_WIN32_LARGE_FILES 1 | ||||||
|   | |||||||
							
								
								
									
										63
									
								
								lib/curl_des.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								lib/curl_des.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,63 @@ | |||||||
|  | /*************************************************************************** | ||||||
|  |  *                                  _   _ ____  _ | ||||||
|  |  *  Project                     ___| | | |  _ \| | | ||||||
|  |  *                             / __| | | | |_) | | | ||||||
|  |  *                            | (__| |_| |  _ <| |___ | ||||||
|  |  *                             \___|\___/|_| \_\_____| | ||||||
|  |  * | ||||||
|  |  * Copyright (C) 2015, Steve Holme, <steve_holme@hotmail.com>. | ||||||
|  |  * | ||||||
|  |  * 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. | ||||||
|  |  * | ||||||
|  |  ***************************************************************************/ | ||||||
|  |  | ||||||
|  | #include "curl_setup.h" | ||||||
|  |  | ||||||
|  | #if defined(USE_NTLM) && (!defined(USE_SSLEAY) || defined(HAVE_BORINGSSL)) | ||||||
|  |  | ||||||
|  | #include "curl_des.h" | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * Curl_des_set_odd_parity() | ||||||
|  |  * | ||||||
|  |  * This is used to apply odd parity to the given byte array. It is typically | ||||||
|  |  * used by when a cryptography engines doesn't have it's own version. | ||||||
|  |  * | ||||||
|  |  * The function is a port of the Java based oddParity() function over at: | ||||||
|  |  * | ||||||
|  |  * http://davenport.sourceforge.net/ntlm.html | ||||||
|  |  * | ||||||
|  |  * Parameters: | ||||||
|  |  * | ||||||
|  |  * bytes       [in/out] - The data whose parity bits are to be adjusted for | ||||||
|  |  *                        odd parity. | ||||||
|  |  * len         [out]    - The length of the data. | ||||||
|  |  */ | ||||||
|  | void Curl_des_set_odd_parity(unsigned char *bytes, size_t len) | ||||||
|  | { | ||||||
|  |   size_t i; | ||||||
|  |  | ||||||
|  |   for(i = 0; i < len; i++) { | ||||||
|  |     unsigned char b = bytes[i]; | ||||||
|  |  | ||||||
|  |     bool needs_parity = (((b >> 7) ^ (b >> 6) ^ (b >> 5) ^ | ||||||
|  |                           (b >> 4) ^ (b >> 3) ^ (b >> 2) ^ | ||||||
|  |                           (b >> 1)) & 0x01) == 0; | ||||||
|  |  | ||||||
|  |     if(needs_parity) | ||||||
|  |       bytes[i] |= 0x01; | ||||||
|  |     else | ||||||
|  |       bytes[i] &= 0xfe; | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | #endif /* USE_NTLM && (!USE_SSLEAY || HAVE_BORINGSSL) */ | ||||||
							
								
								
									
										34
									
								
								lib/curl_des.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								lib/curl_des.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,34 @@ | |||||||
|  | #ifndef HEADER_CURL_DES_H | ||||||
|  | #define HEADER_CURL_DES_H | ||||||
|  | /*************************************************************************** | ||||||
|  |  *                                  _   _ ____  _ | ||||||
|  |  *  Project                     ___| | | |  _ \| | | ||||||
|  |  *                             / __| | | | |_) | | | ||||||
|  |  *                            | (__| |_| |  _ <| |___ | ||||||
|  |  *                             \___|\___/|_| \_\_____| | ||||||
|  |  * | ||||||
|  |  * Copyright (C) 2015, Steve Holme, <steve_holme@hotmail.com>. | ||||||
|  |  * | ||||||
|  |  * 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. | ||||||
|  |  * | ||||||
|  |  ***************************************************************************/ | ||||||
|  |  | ||||||
|  | #include "curl_setup.h" | ||||||
|  |  | ||||||
|  | #if defined(USE_NTLM) && (!defined(USE_SSLEAY) || defined(HAVE_BORINGSSL)) | ||||||
|  |  | ||||||
|  | /* Applies odd parity to the given byte array */ | ||||||
|  | void Curl_des_set_odd_parity(unsigned char *bytes, size_t length); | ||||||
|  |  | ||||||
|  | #endif /* USE_NTLM && (!USE_SSLEAY || HAVE_BORINGSSL) */ | ||||||
|  |  | ||||||
|  | #endif /* HEADER_CURL_DES_H */ | ||||||
							
								
								
									
										236
									
								
								lib/curl_endian.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										236
									
								
								lib/curl_endian.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,236 @@ | |||||||
|  | /*************************************************************************** | ||||||
|  |  *                                  _   _ ____  _ | ||||||
|  |  *  Project                     ___| | | |  _ \| | | ||||||
|  |  *                             / __| | | | |_) | | | ||||||
|  |  *                            | (__| |_| |  _ <| |___ | ||||||
|  |  *                             \___|\___/|_| \_\_____| | ||||||
|  |  * | ||||||
|  |  * Copyright (C) 1998 - 2015, 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. | ||||||
|  |  * | ||||||
|  |  ***************************************************************************/ | ||||||
|  |  | ||||||
|  | #include "curl_setup.h" | ||||||
|  |  | ||||||
|  | #include "curl_endian.h" | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * Curl_read16_le() | ||||||
|  |  * | ||||||
|  |  * This function converts a 16-bit integer from the little endian format, as | ||||||
|  |  * used in the incoming package to whatever endian format we're using | ||||||
|  |  * natively. | ||||||
|  |  * | ||||||
|  |  * Parameters: | ||||||
|  |  * | ||||||
|  |  * buf      [in]     - A pointer to a 2 byte buffer. | ||||||
|  |  * | ||||||
|  |  * Returns the integer. | ||||||
|  |  */ | ||||||
|  | unsigned short Curl_read16_le(unsigned char *buf) | ||||||
|  | { | ||||||
|  |   return (unsigned short)(((unsigned short)buf[0]) | | ||||||
|  |                           ((unsigned short)buf[1] << 8)); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * Curl_read32_le() | ||||||
|  |  * | ||||||
|  |  * This function converts a 32-bit integer from the little endian format, as | ||||||
|  |  * used in the incoming package to whatever endian format we're using | ||||||
|  |  * natively. | ||||||
|  |  * | ||||||
|  |  * Parameters: | ||||||
|  |  * | ||||||
|  |  * buf      [in]     - A pointer to a 4 byte buffer. | ||||||
|  |  * | ||||||
|  |  * Returns the integer. | ||||||
|  |  */ | ||||||
|  | unsigned int Curl_read32_le(unsigned char *buf) | ||||||
|  | { | ||||||
|  |   return ((unsigned int)buf[0]) | ((unsigned int)buf[1] << 8) | | ||||||
|  |          ((unsigned int)buf[2] << 16) | ((unsigned int)buf[3] << 24); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | #if (CURL_SIZEOF_CURL_OFF_T > 4) | ||||||
|  | /* | ||||||
|  |  * Curl_read64_le() | ||||||
|  |  * | ||||||
|  |  * This function converts a 64-bit integer from the little endian format, as | ||||||
|  |  * used in the incoming package to whatever endian format we're using | ||||||
|  |  * natively. | ||||||
|  |  * | ||||||
|  |  * Parameters: | ||||||
|  |  * | ||||||
|  |  * buf      [in]     - A pointer to a 8 byte buffer. | ||||||
|  |  * | ||||||
|  |  * Returns the integer. | ||||||
|  |  */ | ||||||
|  | #if defined(HAVE_LONGLONG) | ||||||
|  | unsigned long long Curl_read64_le(unsigned char *buf) | ||||||
|  | { | ||||||
|  |   return ((unsigned long long)buf[0]) | | ||||||
|  |          ((unsigned long long)buf[1] << 8) | | ||||||
|  |          ((unsigned long long)buf[2] << 16) | | ||||||
|  |          ((unsigned long long)buf[3] << 24) | | ||||||
|  |          ((unsigned long long)buf[4] << 32) | | ||||||
|  |          ((unsigned long long)buf[5] << 40) | | ||||||
|  |          ((unsigned long long)buf[6] << 48) | | ||||||
|  |          ((unsigned long long)buf[7] << 56); | ||||||
|  | } | ||||||
|  | #else | ||||||
|  | unsigned __int64 Curl_read64_le(unsigned char *buf) | ||||||
|  | { | ||||||
|  |   return ((unsigned __int64)buf[0]) | ((unsigned __int64)buf[1] << 8) | | ||||||
|  |          ((unsigned __int64)buf[2] << 16) | ((unsigned __int64)buf[3] << 24) | | ||||||
|  |          ((unsigned __int64)buf[4] << 32) | ((unsigned __int64)buf[5] << 40) | | ||||||
|  |          ((unsigned __int64)buf[6] << 48) | ((unsigned __int64)buf[7] << 56); | ||||||
|  | } | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #endif /* CURL_SIZEOF_CURL_OFF_T > 4 */ | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * Curl_read16_be() | ||||||
|  |  * | ||||||
|  |  * This function converts a 16-bit integer from the big endian format, as | ||||||
|  |  * used in the incoming package to whatever endian format we're using | ||||||
|  |  * natively. | ||||||
|  |  * | ||||||
|  |  * Parameters: | ||||||
|  |  * | ||||||
|  |  * buf      [in]     - A pointer to a 2 byte buffer. | ||||||
|  |  * | ||||||
|  |  * Returns the integer. | ||||||
|  |  */ | ||||||
|  | unsigned short Curl_read16_be(unsigned char *buf) | ||||||
|  | { | ||||||
|  |   return (unsigned short)(((unsigned short)buf[0] << 8) | | ||||||
|  |                           ((unsigned short)buf[1])); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * Curl_read32_be() | ||||||
|  |  * | ||||||
|  |  * This function converts a 32-bit integer from the big endian format, as | ||||||
|  |  * used in the incoming package to whatever endian format we're using | ||||||
|  |  * natively. | ||||||
|  |  * | ||||||
|  |  * Parameters: | ||||||
|  |  * | ||||||
|  |  * buf      [in]     - A pointer to a 4 byte buffer. | ||||||
|  |  * | ||||||
|  |  * Returns the integer. | ||||||
|  |  */ | ||||||
|  | unsigned int Curl_read32_be(unsigned char *buf) | ||||||
|  | { | ||||||
|  |   return ((unsigned int)buf[0] << 24) | ((unsigned int)buf[1] << 16) | | ||||||
|  |          ((unsigned int)buf[2] << 8) | ((unsigned int)buf[3]); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | #if (CURL_SIZEOF_CURL_OFF_T > 4) | ||||||
|  | /* | ||||||
|  |  * Curl_read64_be() | ||||||
|  |  * | ||||||
|  |  * This function converts a 64-bit integer from the big endian format, as | ||||||
|  |  * used in the incoming package to whatever endian format we're using | ||||||
|  |  * natively. | ||||||
|  |  * | ||||||
|  |  * Parameters: | ||||||
|  |  * | ||||||
|  |  * buf      [in]     - A pointer to a 8 byte buffer. | ||||||
|  |  * | ||||||
|  |  * Returns the integer. | ||||||
|  |  */ | ||||||
|  | #if defined(HAVE_LONGLONG) | ||||||
|  | unsigned long long Curl_read64_be(unsigned char *buf) | ||||||
|  | { | ||||||
|  |   return ((unsigned long long)buf[0] << 56) | | ||||||
|  |          ((unsigned long long)buf[1] << 48) | | ||||||
|  |          ((unsigned long long)buf[2] << 40) | | ||||||
|  |          ((unsigned long long)buf[3] << 32) | | ||||||
|  |          ((unsigned long long)buf[4] << 24) | | ||||||
|  |          ((unsigned long long)buf[5] << 16) | | ||||||
|  |          ((unsigned long long)buf[6] << 8) | | ||||||
|  |          ((unsigned long long)buf[7]); | ||||||
|  | } | ||||||
|  | #else | ||||||
|  | unsigned __int64 Curl_read64_be(unsigned char *buf) | ||||||
|  | { | ||||||
|  |   return ((unsigned __int64)buf[0] << 56) | ((unsigned __int64)buf[1] << 48) | | ||||||
|  |          ((unsigned __int64)buf[2] << 40) | ((unsigned __int64)buf[3] << 32) | | ||||||
|  |          ((unsigned __int64)buf[4] << 24) | ((unsigned __int64)buf[5] << 16) | | ||||||
|  |          ((unsigned __int64)buf[6] << 8) | ((unsigned __int64)buf[7]); | ||||||
|  | } | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #endif /* CURL_SIZEOF_CURL_OFF_T > 4 */ | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * Curl_write16_le() | ||||||
|  |  * | ||||||
|  |  * This function converts a 16-bit integer from the native endian format, | ||||||
|  |  * to little endian format ready for sending down the wire. | ||||||
|  |  * | ||||||
|  |  * Parameters: | ||||||
|  |  * | ||||||
|  |  * value    [in]     - The 16-bit integer value. | ||||||
|  |  * buffer   [in]     - A pointer to the output buffer. | ||||||
|  |  */ | ||||||
|  | void Curl_write16_le(const short value, unsigned char *buffer) | ||||||
|  | { | ||||||
|  |   buffer[0] = (char)(value & 0x00FF); | ||||||
|  |   buffer[1] = (char)((value & 0xFF00) >> 8); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * Curl_write32_le() | ||||||
|  |  * | ||||||
|  |  * This function converts a 32-bit integer from the native endian format, | ||||||
|  |  * to little endian format ready for sending down the wire. | ||||||
|  |  * | ||||||
|  |  * Parameters: | ||||||
|  |  * | ||||||
|  |  * value    [in]     - The 32-bit integer value. | ||||||
|  |  * buffer   [in]     - A pointer to the output buffer. | ||||||
|  |  */ | ||||||
|  | void Curl_write32_le(const int value, unsigned char *buffer) | ||||||
|  | { | ||||||
|  |   buffer[0] = (char)(value & 0x000000FF); | ||||||
|  |   buffer[1] = (char)((value & 0x0000FF00) >> 8); | ||||||
|  |   buffer[2] = (char)((value & 0x00FF0000) >> 16); | ||||||
|  |   buffer[3] = (char)((value & 0xFF000000) >> 24); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | #if (CURL_SIZEOF_CURL_OFF_T > 4) | ||||||
|  | /* | ||||||
|  |  * Curl_write64_le() | ||||||
|  |  * | ||||||
|  |  * This function converts a 64-bit integer from the native endian format, | ||||||
|  |  * to little endian format ready for sending down the wire. | ||||||
|  |  * | ||||||
|  |  * Parameters: | ||||||
|  |  * | ||||||
|  |  * value    [in]     - The 64-bit integer value. | ||||||
|  |  * buffer   [in]     - A pointer to the output buffer. | ||||||
|  |  */ | ||||||
|  | #if defined(HAVE_LONGLONG) | ||||||
|  | void Curl_write64_le(const long long value, unsigned char *buffer) | ||||||
|  | #else | ||||||
|  | void Curl_write64_le(const __int64 value, unsigned char *buffer) | ||||||
|  | #endif | ||||||
|  | { | ||||||
|  |   Curl_write32_le((int)value, buffer); | ||||||
|  |   Curl_write32_le((int)(value >> 32), buffer + 4); | ||||||
|  | } | ||||||
|  | #endif /* CURL_SIZEOF_CURL_OFF_T > 4 */ | ||||||
							
								
								
									
										70
									
								
								lib/curl_endian.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										70
									
								
								lib/curl_endian.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,70 @@ | |||||||
|  | #ifndef HEADER_CURL_ENDIAN_H | ||||||
|  | #define HEADER_CURL_ENDIAN_H | ||||||
|  | /*************************************************************************** | ||||||
|  |  *                                  _   _ ____  _ | ||||||
|  |  *  Project                     ___| | | |  _ \| | | ||||||
|  |  *                             / __| | | | |_) | | | ||||||
|  |  *                            | (__| |_| |  _ <| |___ | ||||||
|  |  *                             \___|\___/|_| \_\_____| | ||||||
|  |  * | ||||||
|  |  * Copyright (C) 1998 - 2015, 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. | ||||||
|  |  * | ||||||
|  |  ***************************************************************************/ | ||||||
|  |  | ||||||
|  | /* Converts a 16-bit integer from little endian */ | ||||||
|  | unsigned short Curl_read16_le(unsigned char *buf); | ||||||
|  |  | ||||||
|  | /* Converts a 32-bit integer from little endian */ | ||||||
|  | unsigned int Curl_read32_le(unsigned char *buf); | ||||||
|  |  | ||||||
|  | #if (CURL_SIZEOF_CURL_OFF_T > 4) | ||||||
|  | /* Converts a 64-bit integer from little endian */ | ||||||
|  | #if defined(HAVE_LONGLONG) | ||||||
|  | unsigned long long Curl_read64_le(unsigned char *buf); | ||||||
|  | #else | ||||||
|  | unsigned __int64 Curl_read64_le(unsigned char *buf); | ||||||
|  | #endif | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | /* Converts a 16-bit integer from big endian */ | ||||||
|  | unsigned short Curl_read16_be(unsigned char *buf); | ||||||
|  |  | ||||||
|  | /* Converts a 32-bit integer from big endian */ | ||||||
|  | unsigned int Curl_read32_be(unsigned char *buf); | ||||||
|  |  | ||||||
|  | #if (CURL_SIZEOF_CURL_OFF_T > 4) | ||||||
|  | /* Converts a 64-bit integer from big endian */ | ||||||
|  | #if defined(HAVE_LONGLONG) | ||||||
|  | unsigned long long Curl_read64_be(unsigned char *buf); | ||||||
|  | #else | ||||||
|  | unsigned __int64 Curl_read64_be(unsigned char *buf); | ||||||
|  | #endif | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | /* Converts a 16-bit integer to little endian */ | ||||||
|  | void Curl_write16_le(const short value, unsigned char *buffer); | ||||||
|  |  | ||||||
|  | /* Converts a 32-bit integer to little endian */ | ||||||
|  | void Curl_write32_le(const int value, unsigned char *buffer); | ||||||
|  |  | ||||||
|  | #if (CURL_SIZEOF_CURL_OFF_T > 4) | ||||||
|  | /* Converts a 64-bit integer to little endian */ | ||||||
|  | #if defined(HAVE_LONGLONG) | ||||||
|  | void Curl_write64_le(const long long value, unsigned char *buffer); | ||||||
|  | #else | ||||||
|  | void Curl_write64_le(const __int64 value, unsigned char *buffer); | ||||||
|  | #endif | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #endif /* HEADER_CURL_ENDIAN_H */ | ||||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user