Compare commits
	
		
			1051 Commits
		
	
	
		
			curl-7_41_
			...
			curl-7_47_
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | 06bf874bbc | ||
|   | 87a5d3d13e | ||
|   | d41dcba4e9 | ||
|   | 3017d8a8d8 | ||
|   | cea1fd7a94 | ||
|   | 14f92f2d2c | ||
|   | 53d1e42c41 | ||
|   | b9da2cfed1 | ||
|   | 5a28126b22 | ||
|   | 1783070801 | ||
|   | b03f01742d | ||
|   | d58ba66eec | ||
|   | d566371130 | ||
|   | 1074cca8cd | ||
|   | be538e0766 | ||
|   | be79d83b00 | ||
|   | 35083ca60e | ||
|   | fdcc4d6daa | ||
|   | 133cd19244 | ||
|   | 4bed87f8fa | ||
|   | 3ea77f6add | ||
|   | 13b6d3b7dd | ||
|   | 3d209b5fb0 | ||
|   | ebfe00c050 | ||
|   | fb7cbf75a5 | ||
|   | 92a20413ac | ||
|   | 5d7c9379ef | ||
|   | 036c465e88 | ||
|   | bf93a1217c | ||
|   | 5da7461a55 | ||
|   | b019af41e7 | ||
|   | 325686ef9e | ||
|   | c338d8cf9c | ||
|   | 984d1e9e23 | ||
|   | d9b4d1ce20 | ||
|   | 336e8feec4 | ||
|   | 89a1eb7b1c | ||
|   | 973ee6bdd3 | ||
|   | 3de2d48d4c | ||
|   | a2cae9aafd | ||
|   | 46cb70e9fa | ||
|   | 19ca40100b | ||
|   | b82359643d | ||
|   | 1d15a509dd | ||
|   | a3b8a9e036 | ||
|   | 2e503441ed | ||
|   | e45059214c | ||
|   | 1c9298ff1b | ||
|   | ddfa0d850b | ||
|   | 752171f016 | ||
|   | 2aec4359db | ||
|   | 38b055446a | ||
|   | 4ca246c3a8 | ||
|   | a9ebd1bddc | ||
|   | 90c2d215d7 | ||
|   | 8fb8e16ea4 | ||
|   | 2eb933e8aa | ||
|   | 08554dff65 | ||
|   | 7bf5f6e054 | ||
|   | 520bd9e49f | ||
|   | 24cf20ec68 | ||
|   | 7cbe4d8d79 | ||
|   | fcabed6cd8 | ||
|   | 18c95d4bc0 | ||
|   | 328771981a | ||
|   | b064ff0c35 | ||
|   | bfe6f1f788 | ||
|   | a464f33843 | ||
|   | 04cb90948e | ||
|   | c208c783f5 | ||
|   | bd431eef04 | ||
|   | 5e0e81a9c4 | ||
|   | 9e093f0e74 | ||
|   | 58ac23dd16 | ||
|   | 28533d3277 | ||
|   | c3eeb526ae | ||
|   | 234abd9013 | ||
|   | f4646b9069 | ||
|   | 151da51404 | ||
|   | 1ff3a07be9 | ||
|   | 15cb03ad84 | ||
|   | 871ad2a0f2 | ||
|   | 6c2c019654 | ||
|   | b4a39491ca | ||
|   | afcab2c2b6 | ||
|   | 18ecdd0430 | ||
|   | 8fbaf6749a | ||
|   | 63a5a756a8 | ||
|   | 15cf5a98b7 | ||
|   | 727f775e59 | ||
|   | 536f5f442e | ||
|   | 4bcc532de5 | ||
|   | 7f683b0ea8 | ||
|   | dd1b44c612 | ||
|   | fa9332d3ca | ||
|   | 3b51652328 | ||
|   | f08fea7169 | ||
|   | 034317d2af | ||
|   | 12f6bf5e58 | ||
|   | b6d5cb40d7 | ||
|   | 6c2a10e963 | ||
|   | df40b20e44 | ||
|   | e1b6b2219d | ||
|   | ec26399bf9 | ||
|   | b1f9424fa7 | ||
|   | 738b0ba09e | ||
|   | a62000ecc9 | ||
|   | f606435419 | ||
|   | 5eba895b4c | ||
|   | e643c5c908 | ||
|   | e7d8d8e257 | ||
|   | e2ae32ff5f | ||
|   | 6623a485d3 | ||
|   | 940c2f51aa | ||
|   | a47137c4a5 | ||
|   | 5648f0a32c | ||
|   | 2fddc4e3e1 | ||
|   | e55f15454e | ||
|   | fe7c39d353 | ||
|   | 8f281fb76d | ||
|   | 8cbd80686e | ||
|   | a14fa8f8ff | ||
|   | 81ae6d01fa | ||
|   | 19a8afb3c0 | ||
|   | 78c25c854a | ||
|   | db05d7a731 | ||
|   | cd2b73b3ed | ||
|   | 5b96b5e79e | ||
|   | 99d17a5e2b | ||
|   | facf2925c7 | ||
|   | be0d4141af | ||
|   | 40c349ada9 | ||
|   | bb9ec5ebb2 | ||
|   | c341311a0e | ||
|   | fc5d783589 | ||
|   | 98acebb526 | ||
|   | 06b288a72d | ||
|   | d55f9071fb | ||
|   | b7f3f1b68f | ||
|   | c2f1730e17 | ||
|   | 8d17117683 | ||
|   | c90e348579 | ||
|   | f024ece8c7 | ||
|   | ad6f6e17d3 | ||
|   | 0ddc59be0a | ||
|   | bbb34b6f15 | ||
|   | 41efdadf09 | ||
|   | 6af80afe49 | ||
|   | 80562083da | ||
|   | ff8d352ae9 | ||
|   | 250d786bd2 | ||
|   | 0cf80c05ea | ||
|   | b27893d15c | ||
|   | 05cd55f229 | ||
|   | b4c39010b5 | ||
|   | a72207ecf0 | ||
|   | 6c5f4303fe | ||
|   | 39904d6f7d | ||
|   | 88f585c3a1 | ||
|   | 051485d9e0 | ||
|   | 3c4065f402 | ||
|   | d0ddfe2216 | ||
|   | ca770d87e2 | ||
|   | ee04bee82b | ||
|   | 6cfd646f58 | ||
|   | 808a17ee67 | ||
|   | ba4d8f7eba | ||
|   | febda2f305 | ||
|   | ceb396c54a | ||
|   | 796c6ef02b | ||
|   | 60cf8157c7 | ||
|   | ad2d517545 | ||
|   | 1ee0aded89 | ||
|   | f322ca7765 | ||
|   | fd0c678e21 | ||
|   | aba281e762 | ||
|   | 64e959ffe3 | ||
|   | 86e2197337 | ||
|   | 6c20a87105 | ||
|   | b430d94fb2 | ||
|   | 0755308a6a | ||
|   | 53b13d0c71 | ||
|   | 431ba85829 | ||
|   | eb3703f052 | ||
|   | d7e352402c | ||
|   | 278ea24a7a | ||
|   | 1f82df9146 | ||
|   | 077fd8f1fa | ||
|   | b6baa108fa | ||
|   | 88702ebb31 | ||
|   | d6d58dd558 | ||
|   | a7c4bcd971 | ||
|   | 3c24400636 | ||
|   | dcf5b614ca | ||
|   | 6479f5a076 | ||
|   | d64add3c71 | ||
|   | a215381c94 | ||
|   | 3e0d64d075 | ||
|   | 01b7d8274c | ||
|   | 7023d8aa37 | ||
|   | eaa98cef8d | ||
|   | 4e3d396900 | ||
|   | f54a4aa9a3 | ||
|   | 6225c48a03 | ||
|   | 9b7f8ab21b | ||
|   | 2200bf6205 | ||
|   | 729b92afbe | ||
|   | 23b8fc15c8 | ||
|   | e3c85405d0 | ||
|   | 2581585961 | ||
|   | 007f3e0971 | ||
|   | 23c4090fd3 | ||
|   | 50bff12ac8 | ||
|   | 1a614c6c37 | ||
|   | 505d966850 | ||
|   | 748ffc77c6 | ||
|   | 60c86297bf | ||
|   | cd3aba1a5c | ||
|   | f6fbbd6dc3 | ||
|   | 210fc95c0f | ||
|   | 3bd7f28000 | ||
|   | 3f7b1bb89f | ||
|   | 1ea3a7d5e4 | ||
|   | cba5bc5854 | ||
|   | ca5f9341ef | ||
|   | 49a991346e | ||
|   | fbf09b7775 | ||
|   | f6ce8c9abb | ||
|   | 4c62066cec | ||
|   | 9b87078d55 | ||
|   | 370ee919b3 | ||
|   | e2f430c74a | ||
|   | ea2c959db4 | ||
|   | ca20ca54b2 | ||
|   | d9a1776b32 | ||
|   | 72d99f2e7b | ||
|   | 2f4f4108d6 | ||
|   | 03b6e07816 | ||
|   | 6288cb9304 | ||
|   | eefd5a95af | ||
|   | b1fc8c0e97 | ||
|   | 529f9310b1 | ||
|   | b1199def8c | ||
|   | b7d894d808 | ||
|   | d31ed6ac71 | ||
|   | 419d410ca0 | ||
|   | 3042cb5043 | ||
|   | 23cc0c00d4 | ||
|   | ace68fdc0c | ||
|   | 9744ef2289 | ||
|   | c238d4da1b | ||
|   | 5fecdc26f7 | ||
|   | 257a1c0d14 | ||
|   | fe7590f729 | ||
|   | 72646c2e48 | ||
|   | 4201e4a9ac | ||
|   | 4c773bcb47 | ||
|   | cb922d47d6 | ||
|   | 06b5fd8fde | ||
|   | 5cf0166636 | ||
|   | 19cb0c4a88 | ||
|   | e77b5b7453 | ||
|   | 684816cd9b | ||
|   | 2b98cb57c4 | ||
|   | 3fde8a4971 | ||
|   | 443e81ea47 | ||
|   | c6aedf680f | ||
|   | 854976ad7b | ||
|   | 14d5a86b3e | ||
|   | db532eff1e | ||
|   | 3ad83bc3a6 | ||
|   | 13ddb9e54a | ||
|   | 7715a70ba2 | ||
|   | 6f8ecea059 | ||
|   | 048f84637f | ||
|   | d30ad55c59 | ||
|   | 08e5fb4465 | ||
|   | 2e373f4a6f | ||
|   | bce689605d | ||
|   | 8256b44e5a | ||
|   | da2d3b5805 | ||
|   | 3771da335b | ||
|   | 8bb43ecd05 | ||
|   | 645fc44764 | ||
|   | 2c000d91f3 | ||
|   | aed57fdc95 | ||
|   | 69ea579700 | ||
|   | b1d55997e5 | ||
|   | 2eb4f5efe9 | ||
|   | 5bf36ea30d | ||
|   | c6ff538ebd | ||
|   | 8fd190c04f | ||
|   | ec9cbb1757 | ||
|   | 69b89050d4 | ||
|   | 963b7bd4f7 | ||
|   | af90becf4b | ||
|   | 46ad4f7f93 | ||
|   | 790d6de485 | ||
|   | 4f037367ed | ||
|   | 32fc638ddf | ||
|   | 119037325d | ||
|   | 710bb89cf3 | ||
|   | 095fe60e27 | ||
|   | 4d60e125de | ||
|   | 7c478cad57 | ||
|   | 0110cced2a | ||
|   | 5f87906e0e | ||
|   | 684bf30802 | ||
|   | 6b56901b56 | ||
|   | 7362008c1c | ||
|   | 1467dec147 | ||
|   | 0583ed3e48 | ||
|   | 67ae07c2e0 | ||
|   | 3f8d4e264d | ||
|   | bb72b9453d | ||
|   | 5fde69cdc3 | ||
|   | 443014e905 | ||
|   | 37af1766e9 | ||
|   | 67dbf8aa9c | ||
|   | 4d95491636 | ||
|   | 47b7d658b4 | ||
|   | f65e07ca59 | ||
|   | 30c131f51f | ||
|   | c979a3d0c4 | ||
|   | c184a5c6bc | ||
|   | c00cec9864 | ||
|   | 958d2ffb19 | ||
|   | a9fd53887b | ||
|   | 65ca3b083c | ||
|   | 82e3e8e31f | ||
|   | 887a4a19aa | ||
|   | b550a1c067 | ||
|   | 202162daeb | ||
|   | a7cb6a28e2 | ||
|   | 3d4ffa71f7 | ||
|   | cdba82e1c2 | ||
|   | 68c620fdc7 | ||
|   | fad9604613 | ||
|   | 0e17369f5b | ||
|   | 481e0de00a | ||
|   | df6a4d3519 | ||
|   | e30763c72e | ||
|   | 6a0bd6ce8b | ||
|   | 4e6f7aee64 | ||
|   | 1b8a5afe78 | ||
|   | 87e533ace0 | ||
|   | 27620171ff | ||
|   | 664398e43b | ||
|   | 3a4f42dd0c | ||
|   | 5ea0004438 | ||
|   | f1ccf68e8c | ||
|   | d36d83ba4b | ||
|   | 5dc556031b | ||
|   | 0e91737615 | ||
|   | 7380433d6a | ||
|   | a60bde79f9 | ||
|   | 82db076d9f | ||
|   | 25a2e8ebaf | ||
|   | 1869164293 | ||
|   | 4ceddcf8ca | ||
|   | e1a4bab86a | ||
|   | 8a0ff1e529 | ||
|   | 668231c309 | ||
|   | cb6a07fed0 | ||
|   | b604b7f040 | ||
|   | 9bb198026e | ||
|   | 749c0ca05b | ||
|   | c764cb4add | ||
|   | 6099f5fcac | ||
|   | 4963948089 | ||
|   | b850437991 | ||
|   | eb8283bb1a | ||
|   | 415f0370ea | ||
|   | 347a6ee597 | ||
|   | 2a59fb25cc | ||
|   | fb0825cb0a | ||
|   | dfeb85a187 | ||
|   | 96a3488eae | ||
|   | 45e918564a | ||
|   | 1abb218fe0 | ||
|   | ac7be02e69 | ||
|   | 37f173cfd0 | ||
|   | 2132708ac2 | ||
|   | 4a889441d3 | ||
|   | ce034356d2 | ||
|   | f21408132a | ||
|   | aec249f89f | ||
|   | e7d171da6b | ||
|   | 874413b3e1 | ||
|   | 62f306ff34 | ||
|   | 36f6f6f4f2 | ||
|   | a78534794e | ||
|   | 110d99c661 | ||
|   | 6d91b70d8b | ||
|   | 2acaf3c804 | ||
|   | 9756d1da76 | ||
|   | 22cb631198 | ||
|   | 613e5022fe | ||
|   | 2c12ac8de2 | ||
|   | 30aa38c818 | ||
|   | 8363656cb4 | ||
|   | 38ef1b3e7f | ||
|   | 1d89fd983a | ||
|   | b3c7f5159a | ||
|   | 1cea72bfde | ||
|   | 14ff86256b | ||
|   | e4fb5f2f61 | ||
|   | e67e71d62b | ||
|   | 618dfd65e4 | ||
|   | 1f1f131e09 | ||
|   | 9518139c73 | ||
|   | 5a136398ed | ||
|   | 7166d91a03 | ||
|   | 31673ff517 | ||
|   | bedf0a588e | ||
|   | 6ba9a1b952 | ||
|   | bc66c21c23 | ||
|   | a9c97fba81 | ||
|   | 1a85c8ef15 | ||
|   | 9e1b1ca606 | ||
|   | 15da07d2f2 | ||
|   | 5be0c88297 | ||
|   | 052a9dfdad | ||
|   | 7332ac565c | ||
|   | 105828a309 | ||
|   | 2bcd3ef7b2 | ||
|   | 1a7f66a3de | ||
|   | c75a1e7750 | ||
|   | daf7f98c11 | ||
|   | bb0acba67d | ||
|   | 5778e6f526 | ||
|   | c8a656d3c7 | ||
|   | 9ee40ce2ab | ||
|   | 0b8e9c8522 | ||
|   | 9a5574ca7b | ||
|   | ade6682f8d | ||
|   | 002d58f1e8 | ||
|   | cde447217f | ||
|   | 9d29afdfe3 | ||
|   | 0cc0b7e268 | ||
|   | aa9ead36a4 | ||
|   | ecece2cfb5 | ||
|   | 4d13b78aec | ||
|   | 39dcf352d2 | ||
|   | 55a255ee9c | ||
|   | 4c47cbf533 | ||
|   | c22fae7ccc | ||
|   | d712da787e | ||
|   | 2b743dcf8e | ||
|   | 333c36b276 | ||
|   | 1ab763acce | ||
|   | a8e9e0c205 | ||
|   | 4a21346ef3 | ||
|   | 4aee1f9cf5 | ||
|   | b9b7ccd04a | ||
|   | 84d122a8d6 | ||
|   | 5b9151231d | ||
|   | cf8975387f | ||
|   | 0342ada31f | ||
|   | 3f5f042e5d | ||
|   | bb6b521f69 | ||
|   | 8279dd7d39 | ||
|   | fe6049f04b | ||
|   | 7f11259eb7 | ||
|   | 473807b95f | ||
|   | f08e30d7bc | ||
|   | 6428b8de42 | ||
|   | 97c9d31884 | ||
|   | 9947f259bf | ||
|   | 33de75ed63 | ||
|   | df5965ebf4 | ||
|   | 6e566451ce | ||
|   | 07f7cdc309 | ||
|   | 3725748599 | ||
|   | 1e67bc5eaf | ||
|   | 12f915ca2a | ||
|   | 4b96240d3f | ||
|   | 1b3d3f9237 | ||
|   | c4eb10e2f0 | ||
|   | 3b4ee0d432 | ||
|   | c092b0f0f3 | ||
|   | f75b6065db | ||
|   | 11ab3f8918 | ||
|   | a1b2a6bd93 | ||
|   | c8331f515e | ||
|   | 23b84e448f | ||
|   | 0da1f5dc5c | ||
|   | 909f0a82b0 | ||
|   | 8b1d00ac1a | ||
|   | f7dcc7c118 | ||
|   | ecf7618e12 | ||
|   | 5b9a006b8f | ||
|   | fc69e2f7ec | ||
|   | bdd8cf4777 | ||
|   | dda81c1d5f | ||
|   | 2d7e165761 | ||
|   | 8356022d17 | ||
|   | 467309406e | ||
|   | b656715da3 | ||
|   | 9b95306d4c | ||
|   | 98e8b050ef | ||
|   | d9efd36907 | ||
|   | 1627930177 | ||
|   | 299b74fcfc | ||
|   | 279965c923 | ||
|   | 7db03e5c21 | ||
|   | a728225a92 | ||
|   | 29e5cf2a2d | ||
|   | 0f645adc95 | ||
|   | 373b77bca2 | ||
|   | 6d62d2c55d | ||
|   | 14b9e780d4 | ||
|   | 8204844f47 | ||
|   | b46a7744bc | ||
|   | a284b0ebc4 | ||
|   | c5d060cab4 | ||
|   | 98835eed29 | ||
|   | cee21eb6a7 | ||
|   | da650c1e54 | ||
|   | 40c921f8b8 | ||
|   | 7a8e861a56 | ||
|   | ad32457623 | ||
|   | 32d4260c2d | ||
|   | 1df8d28381 | ||
|   | fa0eeedf35 | ||
|   | 68d17643f5 | ||
|   | aab76af1fa | ||
|   | 172b2beba6 | ||
|   | 606b29fe0d | ||
|   | 60b19630b0 | ||
|   | de74e856e6 | ||
|   | cd20e81e89 | ||
|   | 79416fb2d6 | ||
|   | 8f0178a56b | ||
|   | 845b011614 | ||
|   | ce1bf87a04 | ||
|   | 5602ad721b | ||
|   | 55b78c5ae9 | ||
|   | c00b18d540 | ||
|   | 4ed8537be6 | ||
|   | 66a5f76583 | ||
|   | 616cecfdb6 | ||
|   | b59f296bf6 | ||
|   | e6749055d6 | ||
|   | 8208dd3b22 | ||
|   | 0c46abd79a | ||
|   | 1f70cdef98 | ||
|   | e3e06e1aee | ||
|   | 37402b5eb8 | ||
|   | 69c77f69a5 | ||
|   | dc2cbfda89 | ||
|   | 1b5eba8324 | ||
|   | ddb106d7f6 | ||
|   | 77044b53f7 | ||
|   | c712aa0ebe | ||
|   | a384f28ca6 | ||
|   | bf445b6e12 | ||
|   | a3a55d80ec | ||
|   | e9f0dd43bc | ||
|   | f65ab8864e | ||
|   | feea9263e9 | ||
|   | ea7134ac87 | ||
|   | 70191958b5 | ||
|   | 5156982377 | ||
|   | 903b6e0556 | ||
|   | f44b803f16 | ||
|   | 6842afbf44 | ||
|   | ea1eec8ea8 | ||
|   | 570076e82c | ||
|   | ef0fdb83b8 | ||
|   | 1c3811f4fd | ||
|   | afbee791d5 | ||
|   | 2546134b97 | ||
|   | 93aacc3050 | ||
|   | 307f212379 | ||
|   | 26ddc536b0 | ||
|   | 0e7d76d6a8 | ||
|   | 26583a62ab | ||
|   | cf6ef2dc92 | ||
|   | 3b93f1a3ec | ||
|   | 46d0eba2e9 | ||
|   | 4a2398627c | ||
|   | b88f980a74 | ||
|   | 85739723ba | ||
|   | f72b30e6fb | ||
|   | 52d83cb0c6 | ||
|   | 38e07886ed | ||
|   | bdf89d80ca | ||
|   | 24a8359b25 | ||
|   | 24f0b6ebf7 | ||
|   | 50c7f17e50 | ||
|   | 3e7ec1e849 | ||
|   | 28f4fc5272 | ||
|   | 45f21e0f37 | ||
|   | f93da27756 | ||
|   | f29f2cbd00 | ||
|   | 4fd187c677 | ||
|   | 496e96c242 | ||
|   | bb5b29ec14 | ||
|   | 75ba107767 | ||
|   | b430cb2a58 | ||
|   | 99eafc49bb | ||
|   | 45bad4ac97 | ||
|   | f3288196ff | ||
|   | ff7097f72c | ||
|   | 55fc47a401 | ||
|   | d186be9510 | ||
|   | 878c5757c0 | ||
|   | dd39a67101 | ||
|   | da08a204c2 | ||
|   | a9ed0fd6cb | ||
|   | a3e5a4371b | ||
|   | 4a7feea31a | ||
|   | 8d0d688296 | ||
|   | a5fb9151ee | ||
|   | f348b2d3bc | ||
|   | 1514f3506b | ||
|   | 55f3eb588d | ||
|   | cbf2920d02 | ||
|   | 0fcfe4d7ac | ||
|   | 20ac345806 | ||
|   | eaeeed2e8f | ||
|   | 56b7663f73 | ||
|   | 025dbe46df | ||
|   | 1a8926d12f | ||
|   | b8673bb9f0 | ||
|   | 8f4791440a | ||
|   | 6befade68f | ||
|   | 3587da9e7c | ||
|   | 1ce14037c0 | ||
|   | 30bd59ba6e | ||
|   | ccfdd5986c | ||
|   | fc16d9cec8 | ||
|   | 7c17b58eec | ||
|   | 3013bb6b1c | ||
|   | 001ab7d860 | ||
|   | 59432503c0 | ||
|   | f6af9aef7e | ||
|   | 46a050e9f5 | ||
|   | 3cac8c9049 | ||
|   | 33ee411848 | ||
|   | 3bbcb4b036 | ||
|   | e8423f9ce1 | ||
|   | 9f5dcab83d | ||
|   | 41db5aed7a | ||
|   | 4bb815a32e | ||
|   | 4e7c3c12d3 | ||
|   | 9a0a16a61c | ||
|   | 2f1eae0f27 | ||
|   | 3628a90852 | ||
|   | a8904b39f3 | ||
|   | 8a7c1c76b3 | ||
|   | f348a6b4ab | ||
|   | d1b1d782f5 | ||
|   | e57f08863a | ||
|   | 44fe4b9029 | ||
|   | 9972666b47 | ||
|   | c005790ff1 | ||
|   | 49a6642f01 | ||
|   | f81d356c21 | ||
|   | b18a1654c1 | ||
|   | 02dfc930b5 | ||
|   | 96c0164b88 | ||
|   | 4bef1c7bf4 | ||
|   | 4a79475b13 | ||
|   | b6e3da5f08 | ||
|   | 28cdc0d82c | ||
|   | 3a973517a9 | ||
|   | f9f22b0d63 | ||
|   | ef02da3156 | ||
|   | e582cd16ff | ||
|   | 1514977bcd | ||
|   | fda0e74c22 | ||
|   | 03e2a9b023 | ||
|   | 817323ed82 | ||
|   | 42ed88e70a | ||
|   | 84d811f6af | ||
|   | d04bab8873 | ||
|   | 640f283bbb | ||
|   | 995c6006fe | ||
|   | 78ac944dc2 | ||
|   | ee04c20b74 | ||
|   | 126e7f7253 | ||
|   | b0143a2a33 | ||
|   | 6a688976f0 | ||
|   | c175d184a2 | ||
|   | d5aab55b33 | ||
|   | 0f6f7c100a | ||
|   | db979fea73 | ||
|   | a393d64456 | ||
|   | 265f83a9f0 | ||
|   | 301ba7772c | ||
|   | 00a770b3f5 | ||
|   | dd23c49546 | ||
|   | 3d38a38012 | ||
|   | d4313b1f01 | ||
|   | 7da064fdd2 | ||
|   | 897a7b3a13 | ||
|   | 155b1f5df9 | ||
|   | 979670988a | ||
|   | 0b26b94bdc | ||
|   | 4883f7019d | ||
|   | 39b9bf60d1 | ||
|   | d69eee0964 | ||
|   | 7ff7e45405 | ||
|   | 4ac6cc3ebd | ||
|   | 077f12b0ae | ||
|   | d6f1c74330 | ||
|   | 7d0df07e48 | ||
|   | 811443754a | ||
|   | df3a970cb4 | ||
|   | 193251794a | ||
|   | 8b38fcf2f6 | ||
|   | 5871affc7a | ||
|   | 3e8a5d88a5 | ||
|   | 522ca8c035 | ||
|   | a66ed407d2 | ||
|   | 61a94d6f77 | ||
|   | 56c362b1a7 | ||
|   | 72105ebf05 | ||
|   | 38bd6bf0bb | ||
|   | be4c8fd1ef | ||
|   | 783b3c7b42 | ||
|   | 02ec1ced9b | ||
|   | 2ce2f03007 | ||
|   | d722138f29 | ||
|   | 0dc0de0351 | ||
|   | d261652d42 | ||
|   | 74a4bd5ecd | ||
|   | 591a6933da | ||
|   | e91aedd840 | ||
|   | ee3ad233a2 | ||
|   | 70b5b698b0 | ||
|   | a28734be09 | ||
|   | 5252f13dfa | ||
|   | 153f940198 | ||
|   | f4b8b39881 | ||
|   | 01e1bdb10c | ||
|   | 7bbac214f5 | ||
|   | 84c6b6561f | ||
|   | 2c238ea1fc | ||
|   | 5fe71975e4 | ||
|   | 77f1029ecd | ||
|   | 7957d2eb92 | ||
|   | 47caff7bdf | ||
|   | d6440d7366 | ||
|   | f858624052 | ||
|   | 6e6b02f398 | ||
|   | 5fa82ca56f | ||
|   | 1c01cee601 | ||
|   | 750d678c0e | ||
|   | a6af3df660 | ||
|   | 2a746f6c28 | ||
|   | fd137786e5 | ||
|   | b419e7ae0c | ||
|   | d37e0160c2 | ||
|   | 640296c95d | ||
|   | c4d6f9163a | ||
|   | c720cd6356 | ||
|   | 3377e692ee | ||
|   | 5bf472fd39 | ||
|   | 8936a23f51 | ||
|   | f010f3e3ca | ||
|   | 33058a1dc3 | ||
|   | 9fcc297ff3 | ||
|   | 8a35211f3e | ||
|   | fa08362a5f | ||
|   | a5e09e9eea | ||
|   | 86bc654532 | ||
|   | 690317aae2 | ||
|   | 3c104448d6 | ||
|   | ae8387b91c | ||
|   | d93619ca5d | ||
|   | aa99a63f03 | ||
|   | 4bb8bad964 | ||
|   | b6c9f5b7ae | ||
|   | 4335b86a10 | ||
|   | 3f88d92e92 | ||
|   | 32606e4f0b | ||
|   | 693422b79b | ||
|   | 6a61285909 | ||
|   | 4271695122 | ||
|   | b23fda76c1 | ||
|   | 926cb9ff65 | ||
|   | 55db5bdff7 | ||
|   | 790d1a4816 | ||
|   | 1c0f70f534 | ||
|   | cd39b944af | ||
|   | 6ba2e88a64 | ||
|   | 1f8a337e41 | ||
|   | b2ea1bfcd6 | ||
|   | 0741271198 | ||
|   | 97c272e5d1 | ||
|   | 54c394699d | ||
|   | 09a31fabe4 | ||
|   | d4f62f6c5d | ||
|   | 1945f99d59 | ||
|   | b55cb2eef2 | ||
|   | c0700e3c7f | ||
|   | 92e754de78 | ||
|   | 9a91e8059b | ||
|   | 3447c973d0 | ||
|   | cae43a10cb | ||
|   | aa8f613e98 | ||
|   | aff153f83a | ||
|   | 59f3f92ba6 | ||
|   | 6a7261359b | ||
|   | f1e0a0aae7 | ||
|   | 047e6aa05c | ||
|   | 48be87e5f0 | ||
|   | 49726926c6 | ||
|   | 710a2e99b5 | ||
|   | 79478fdb68 | ||
|   | 81e25b0e25 | ||
|   | 0675abbc75 | ||
|   | 26cbd7a1d9 | ||
|   | ba4741842e | ||
|   | 27ace9893c | ||
|   | 85c45d153b | ||
|   | fd9d3a1ef1 | ||
|   | d409f094a5 | ||
|   | b47c17d67c | ||
|   | 1fd33e3ec8 | ||
|   | 22691f849a | ||
|   | 00e01fc0a7 | ||
|   | aadda65f5e | ||
|   | 7166fd8a60 | ||
|   | 79b9d5f1a4 | ||
|   | 0583e87ada | ||
|   | b5f947b8ac | ||
|   | 31be461c6b | ||
|   | 6088fbce06 | ||
|   | cf2d21d86f | ||
|   | 875a6d9324 | ||
|   | 1b8f9c95b6 | ||
|   | 9d704b3df9 | ||
|   | cc0e7ebc3b | ||
|   | 3a87bdebd1 | ||
|   | 63c64e05a4 | ||
|   | 1e6d0e06f7 | ||
|   | b6e477890f | ||
|   | 2eb02480ef | ||
|   | f70112522f | ||
|   | 8dc3bbf0f8 | ||
|   | 67a8bbb51a | ||
|   | 691a07dac6 | ||
|   | 05e4137d31 | ||
|   | 82805b56b9 | ||
|   | 1ba6e4c88e | ||
|   | 8f78794fd5 | ||
|   | 0cbbbbdc31 | ||
|   | 78843afb9f | ||
|   | ad48b177c3 | ||
|   | 9430dd583e | ||
|   | 8df4b5af3f | ||
|   | a471a9f3b6 | ||
|   | 27ac643455 | ||
|   | b3175a767d | ||
|   | 58b0a8b059 | ||
|   | 9e7125a1db | ||
|   | 7fe172d3b2 | ||
|   | 72bea7cc65 | ||
|   | 139141f8d7 | ||
|   | e44155156a | ||
|   | 992a731116 | ||
|   | 261a0fedcf | ||
|   | f251417d85 | ||
|   | a9e46749b2 | ||
|   | c3101ae287 | ||
|   | d363c07912 | ||
|   | a30be951d6 | ||
|   | f2a0b2164a | ||
|   | 81ee1e69fe | ||
|   | 846f492053 | ||
|   | b4be97fb67 | ||
|   | 0db831976e | ||
|   | 369430cd17 | ||
|   | abf6bddc14 | ||
|   | f203edc544 | ||
|   | e2a9ebb321 | ||
|   | 0b5efa57ad | ||
|   | 21e82bd635 | ||
|   | 2685041a5c | ||
|   | b121633402 | ||
|   | c84f0250e3 | ||
|   | 049fe7fb53 | ||
|   | 6419aee248 | ||
|   | 5b66860652 | ||
|   | 787c2ae91b | ||
|   | 31987c340e | ||
|   | fcdc597b1a | ||
|   | 623d24f3ee | ||
|   | ae3c985060 | ||
|   | 9a743bc5fc | ||
|   | d2feb71752 | ||
|   | 211f1e3c6b | ||
|   | dab4ff179f | ||
|   | e7a289ebb9 | ||
|   | 488102fc17 | ||
|   | 559e2cc921 | ||
|   | 318ad8d767 | ||
|   | 83835f7185 | ||
|   | eb2a6180fb | ||
|   | 7b223a3a21 | ||
|   | 5b58bface3 | ||
|   | 83b29e43cd | ||
|   | 24908c12d7 | ||
|   | 4e299192ed | ||
|   | e35f2e61ec | ||
|   | d29f8b460c | ||
|   | ec31962640 | ||
|   | aa5808b504 | ||
|   | a45146868b | ||
|   | 35648f2e79 | ||
|   | ac2827ac09 | ||
|   | bd9ac3cff2 | ||
|   | 7e6ca87a72 | ||
|   | 9edf28e12d | ||
|   | bbd0dd3fe2 | ||
|   | e438a9e2f0 | ||
|   | 56ae66d518 | ||
|   | ff4a4dd92e | ||
|   | ab6e6edb9e | ||
|   | f687860936 | ||
|   | 5d23279299 | ||
|   | ecc4940df2 | ||
|   | 4b02b84897 | ||
|   | 145c4692ff | ||
|   | 430006c5e2 | ||
|   | 148207e2d7 | ||
|   | 7f5a170442 | ||
|   | ed429b72d7 | ||
|   | fea13a17d8 | ||
|   | 5f6f9e8b59 | ||
|   | f9251a5c86 | ||
|   | 38c304a58f | ||
|   | 9cd4d6518f | ||
|   | e6917d3b77 | ||
|   | 57dc2f7e40 | ||
|   | b734518371 | ||
|   | 61ff197a27 | ||
|   | 6779c50e26 | ||
|   | 1f651d1d4d | ||
|   | 185914fd31 | ||
|   | 4dcd25e138 | ||
|   | a332922a52 | ||
|   | 8854f8d45a | ||
|   | 9e8f9dbdd3 | ||
|   | 620e0b23c8 | ||
|   | 2b7ac4e710 | ||
|   | 7868dc7103 | ||
|   | abfab1786e | ||
|   | 9e66d3f4d3 | ||
|   | 1977ff811d | ||
|   | 8ecfaad2cc | ||
|   | 431c5261d2 | ||
|   | d260a0aeeb | ||
|   | e3fbdc7c8a | ||
|   | 28de58504e | ||
|   | 7e16aa936f | ||
|   | e539f01567 | ||
|   | 252e9acd50 | ||
|   | 4d6e079dd2 | ||
|   | ef1c3b4648 | ||
|   | 2dc1a5ce93 | ||
|   | 0037eb5805 | ||
|   | 9395999543 | ||
|   | a6b8fe2a5f | ||
|   | 3dbe12a1e9 | ||
|   | 40914fd544 | ||
|   | 8c41f368f5 | ||
|   | 6105029b23 | ||
|   | 9c518a7d95 | ||
|   | 8644a88202 | ||
|   | 76afe14584 | ||
|   | fe02d132e2 | ||
|   | 0f4a03cbb6 | ||
|   | 9e661601fe | ||
|   | 29c655c0a6 | ||
|   | 059b3a5770 | ||
|   | 918e040953 | ||
|   | 9063a7f853 | ||
|   | 851c29269b | ||
|   | 0cf649d9cc | ||
|   | 0911b96399 | ||
|   | 983ccdcead | ||
|   | 186e46d88d | ||
|   | 0d1060f21e | ||
|   | 6d3260af64 | ||
|   | 1d3f1a80d0 | ||
|   | a5d994941c | ||
|   | 143acd6222 | ||
|   | 852d35b6ea | ||
|   | f39b1c0801 | ||
|   | e424a1b3e7 | ||
|   | fa895f2aa2 | ||
|   | a6a264ef2c | ||
|   | 3a757fddbb | ||
|   | d9973eaeb8 | ||
|   | 5a1614cecd | ||
|   | 0f24df6e54 | ||
|   | e662ddff49 | ||
|   | c19349951d | ||
|   | 9da14a96ab | ||
|   | 00ea0e7db0 | ||
|   | df28af8f39 | ||
|   | 44ffe27056 | ||
|   | adb4e41a1a | ||
|   | 42bc45be8e | ||
|   | 870a67e01f | ||
|   | 2e9494b15d | ||
|   | 3ac3331e14 | ||
|   | 163d29826d | ||
|   | 042526c19f | ||
|   | 9fa1abe9fe | ||
|   | 492dfca65d | ||
|   | 64736dd1be | ||
|   | 709cf76f6b | ||
|   | 1a62b6e68c | ||
|   | ae8235571f | ||
|   | ac4d08b5e2 | ||
|   | 6bba85d500 | ||
|   | 8aabbf5f8c | ||
|   | dcf23b0cfe | ||
|   | af838b7d7b | ||
|   | 43eb8b2874 | ||
|   | df5578a7a3 | ||
|   | f2108ec34c | ||
|   | a318e04419 | ||
|   | 1cb227c1f1 | ||
|   | f3f7d37c1d | ||
|   | ca04681c3b | ||
|   | e349a1bf74 | ||
|   | 70523c690b | ||
|   | 17abfd5a4b | ||
|   | f6864697c3 | ||
|   | 921d195187 | ||
|   | 48b5374e65 | ||
|   | c715fa0b60 | ||
|   | adf27bf60f | ||
|   | e71bcb659c | ||
|   | 0d04e859e1 | ||
|   | bc3a44aebc | ||
|   | 1514b718e3 | ||
|   | b9c190ba77 | ||
|   | e47b8306db | ||
|   | 4909f7c795 | ||
|   | 7a1538d9cc | ||
|   | 0409a7d969 | ||
|   | becff7da56 | ||
|   | 4aa9bb6b13 | 
							
								
								
									
										10
									
								
								.dir-locals.el
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								.dir-locals.el
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | |||||||
|  | ;;; Directory Local Variables | ||||||
|  | ;;; See Info node `(emacs) Directory Variables' for more information. | ||||||
|  |  | ||||||
|  | ((nil . ((indent-tabs-mode . nil) | ||||||
|  |          (show-trailing-whitespace . t))) | ||||||
|  |  (c-mode . ((c-basic-offset . 2) | ||||||
|  |             )) | ||||||
|  |  (c++-mode . ((c-basic-offset . 2) | ||||||
|  |               )) | ||||||
|  |  ) | ||||||
							
								
								
									
										62
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										62
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -1,48 +1,52 @@ | |||||||
| .deps | *.asc | ||||||
| .libs |  | ||||||
| *.lib |  | ||||||
| *.pdb |  | ||||||
| *.dll | *.dll | ||||||
| *.exe | *.exe | ||||||
| *.obj |  | ||||||
| *.asc |  | ||||||
| .*.swp |  | ||||||
| Debug |  | ||||||
| Release |  | ||||||
| *.exp | *.exp | ||||||
|  | *.la | ||||||
|  | *.lib | ||||||
|  | *.lo | ||||||
|  | *.o | ||||||
|  | *.obj | ||||||
|  | *.pdb | ||||||
|  | *~ | ||||||
|  | .*.swp | ||||||
|  | .cproject | ||||||
|  | .deps | ||||||
|  | .dirstamp | ||||||
|  | .libs | ||||||
|  | .project | ||||||
|  | .settings | ||||||
|  | /build/ | ||||||
|  | /builds/ | ||||||
|  | CHANGES.dist | ||||||
|  | Debug | ||||||
|  | INSTALL | ||||||
| Makefile | Makefile | ||||||
| Makefile.in | Makefile.in | ||||||
|  | Release | ||||||
|  | TAGS | ||||||
| aclocal.m4 | aclocal.m4 | ||||||
|  | aclocal.m4.bak | ||||||
| autom4te.cache | autom4te.cache | ||||||
|  | compile | ||||||
| config.cache | config.cache | ||||||
| config.guess | config.guess | ||||||
| config.log | config.log | ||||||
| config.status | config.status | ||||||
| config.sub | config.sub | ||||||
| configure | configure | ||||||
| depcomp |  | ||||||
| libtool |  | ||||||
| ltmain.sh |  | ||||||
| compile |  | ||||||
| curl-config |  | ||||||
| libcurl.pc |  | ||||||
| missing |  | ||||||
| curl-*.tar.gz |  | ||||||
| curl-*.tar.bz2 | curl-*.tar.bz2 | ||||||
|  | curl-*.tar.gz | ||||||
| curl-*.tar.lzma | curl-*.tar.lzma | ||||||
| curl-*.zip | curl-*.zip | ||||||
| INSTALL | curl-config | ||||||
|  | depcomp | ||||||
| install-sh | install-sh | ||||||
| *.o | libcurl.pc | ||||||
| *.lo | libtool | ||||||
| *.la | ltmain.sh | ||||||
|  | missing | ||||||
| mkinstalldirs | mkinstalldirs | ||||||
| tags | tags | ||||||
| TAGS | test-driver | ||||||
| *~ | scripts/_curl | ||||||
| aclocal.m4.bak |  | ||||||
| CHANGES.dist |  | ||||||
| .project |  | ||||||
| .cproject |  | ||||||
| .settings |  | ||||||
| .dirstamp |  | ||||||
|   | |||||||
							
								
								
									
										12
									
								
								.travis.yml
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								.travis.yml
									
									
									
									
									
								
							| @@ -1,8 +1,20 @@ | |||||||
|  | os: | ||||||
|  |   - linux | ||||||
|  |   - osx | ||||||
|  |  | ||||||
|  | sudo: false | ||||||
|  |  | ||||||
| language: c | language: c | ||||||
|  |  | ||||||
|  | install: | ||||||
|  |   - if [ "$TRAVIS_OS_NAME" == "osx" ]; then brew update > /dev/null; fi | ||||||
|  |   - if [ "$TRAVIS_OS_NAME" == "osx" ]; then brew install openssl libidn rtmpdump libssh2 c-ares libmetalink libressl nghttp2; fi | ||||||
|  |  | ||||||
| before_script: | before_script: | ||||||
|   - ./buildconf |   - ./buildconf | ||||||
|  |  | ||||||
|  | script: ./configure --enable-debug && make && make test-full | ||||||
|  |  | ||||||
| compiler: | compiler: | ||||||
|   - clang |   - clang | ||||||
|   - gcc |   - gcc | ||||||
|   | |||||||
							
								
								
									
										14
									
								
								CHANGES
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								CHANGES
									
									
									
									
									
								
							| @@ -1,15 +1,7 @@ | |||||||
|                                   _   _ ____  _ | See http://curl.haxx.se/changes.html for the edited and human readable online | ||||||
|                               ___| | | |  _ \| | | version of what has changed over the years in different curl releases. | ||||||
|                              / __| | | | |_) | | |  | ||||||
|                             | (__| |_| |  _ <| |___ |  | ||||||
|                              \___|\___/|_| \_\_____| |  | ||||||
|  |  | ||||||
|                                   Changelog | Generate a CHANGES file like the one present in evey release like this: | ||||||
|  |  | ||||||
| This file no longer holds the changelog. Now you can generate it yourself |  | ||||||
| like this: |  | ||||||
|  |  | ||||||
| $ git log --pretty=fuller --no-color --date=short --decorate=full | \ | $ git log --pretty=fuller --no-color --date=short --decorate=full | \ | ||||||
|   ./log2changes.pl |   ./log2changes.pl | ||||||
|  |  | ||||||
| The older, manually edited, changelog is found in git named CHANGES.0 |  | ||||||
|   | |||||||
| @@ -139,7 +139,7 @@ int main(void) | |||||||
|   rc = gethostbyname_r(address, &h, &hdata); |   rc = gethostbyname_r(address, &h, &hdata); | ||||||
| #elif defined(HAVE_GETHOSTBYNAME_R_5) || \ | #elif defined(HAVE_GETHOSTBYNAME_R_5) || \ | ||||||
|       defined(HAVE_GETHOSTBYNAME_R_5_REENTRANT) |       defined(HAVE_GETHOSTBYNAME_R_5_REENTRANT) | ||||||
|   rc = gethostbyname_r(address, &h, buffer, 8192, 0, &h_errnop); |   rc = gethostbyname_r(address, &h, buffer, 8192, &h_errnop); | ||||||
|   (void)hp; /* not used for test */ |   (void)hp; /* not used for test */ | ||||||
| #elif defined(HAVE_GETHOSTBYNAME_R_6) || \ | #elif defined(HAVE_GETHOSTBYNAME_R_6) || \ | ||||||
|       defined(HAVE_GETHOSTBYNAME_R_6_REENTRANT) |       defined(HAVE_GETHOSTBYNAME_R_6_REENTRANT) | ||||||
|   | |||||||
| @@ -10,8 +10,8 @@ endmacro(add_header_include) | |||||||
|  |  | ||||||
| set(signature_call_conv) | set(signature_call_conv) | ||||||
| if(HAVE_WINDOWS_H) | if(HAVE_WINDOWS_H) | ||||||
|   add_header_include(HAVE_WINDOWS_H "windows.h") |  | ||||||
|   add_header_include(HAVE_WINSOCK2_H "winsock2.h") |   add_header_include(HAVE_WINSOCK2_H "winsock2.h") | ||||||
|  |   add_header_include(HAVE_WINDOWS_H "windows.h") | ||||||
|   add_header_include(HAVE_WINSOCK_H "winsock.h") |   add_header_include(HAVE_WINSOCK_H "winsock.h") | ||||||
|   set(_source_epilogue |   set(_source_epilogue | ||||||
|       "${_source_epilogue}\n#ifndef WIN32_LEAN_AND_MEAN\n#define WIN32_LEAN_AND_MEAN\n#endif") |       "${_source_epilogue}\n#ifndef WIN32_LEAN_AND_MEAN\n#define WIN32_LEAN_AND_MEAN\n#endif") | ||||||
|   | |||||||
| @@ -76,6 +76,24 @@ 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(ENABLE_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) | option(ENABLE_THREADED_RESOLVER "Set to ON to enable POSIX threaded DNS lookup" OFF) | ||||||
|  |  | ||||||
|  | option(ENABLE_DEBUG "Set to ON to enable curl debug features" OFF) | ||||||
|  | option(ENABLE_CURLDEBUG "Set to ON to build with TrackMemory feature enabled" OFF) | ||||||
|  |  | ||||||
|  | if (ENABLE_DEBUG) | ||||||
|  |   # DEBUGBUILD will be defined only for Debug builds | ||||||
|  |   if(NOT CMAKE_VERSION VERSION_LESS 3.0) | ||||||
|  |     set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS $<$<CONFIG:Debug>:DEBUGBUILD>) | ||||||
|  |   else() | ||||||
|  |     set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_DEBUG DEBUGBUILD) | ||||||
|  |   endif() | ||||||
|  |   set(ENABLE_CURLDEBUG ON) | ||||||
|  | endif() | ||||||
|  |  | ||||||
|  | if (ENABLE_CURLDEBUG) | ||||||
|  |   set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS CURLDEBUG) | ||||||
|  | endif() | ||||||
|  |  | ||||||
| # initialize CURL_LIBS | # initialize CURL_LIBS | ||||||
| set(CURL_LIBS "") | set(CURL_LIBS "") | ||||||
|  |  | ||||||
| @@ -104,10 +122,10 @@ endif() | |||||||
| option(CURL_HIDDEN_SYMBOLS "Set to ON to hide libcurl internal symbols (=hide all symbols that aren't officially external)." ON) | option(CURL_HIDDEN_SYMBOLS "Set to ON to hide libcurl internal symbols (=hide all symbols that aren't officially external)." ON) | ||||||
| mark_as_advanced(CURL_HIDDEN_SYMBOLS) | mark_as_advanced(CURL_HIDDEN_SYMBOLS) | ||||||
|  |  | ||||||
| # IF(WIN32) | IF(WIN32) | ||||||
| # OPTION(CURL_WINDOWS_SSPI "Use windows libraries to allow NTLM authentication without openssl" ON) |   OPTION(CURL_WINDOWS_SSPI "Use windows libraries to allow NTLM authentication without openssl" ON) | ||||||
| # MARK_AS_ADVANCED(CURL_WINDOWS_SSPI) |   MARK_AS_ADVANCED(CURL_WINDOWS_SSPI) | ||||||
| # ENDIF() | ENDIF() | ||||||
|  |  | ||||||
| option(HTTP_ONLY "disables all protocols except HTTP (This overrides all CURL_DISABLE_* options)" OFF) | option(HTTP_ONLY "disables all protocols except HTTP (This overrides all CURL_DISABLE_* options)" OFF) | ||||||
| mark_as_advanced(HTTP_ONLY) | mark_as_advanced(HTTP_ONLY) | ||||||
| @@ -168,7 +186,7 @@ option(DISABLED_THREADSAFE "Set to explicitly specify we don't want to use threa | |||||||
| mark_as_advanced(DISABLED_THREADSAFE) | mark_as_advanced(DISABLED_THREADSAFE) | ||||||
| option(ENABLE_IPV6 "Define if you want to enable IPv6 support" ON) | option(ENABLE_IPV6 "Define if you want to enable IPv6 support" ON) | ||||||
| mark_as_advanced(ENABLE_IPV6) | mark_as_advanced(ENABLE_IPV6) | ||||||
| if(ENABLE_IPV6) | if(ENABLE_IPV6 AND NOT WIN32) | ||||||
|   include(CheckStructHasMember) |   include(CheckStructHasMember) | ||||||
|   check_struct_has_member("struct sockaddr_in6" sin6_addr "netinet/in.h" |   check_struct_has_member("struct sockaddr_in6" sin6_addr "netinet/in.h" | ||||||
|                           HAVE_SOCKADDR_IN6_SIN6_ADDR) |                           HAVE_SOCKADDR_IN6_SIN6_ADDR) | ||||||
| @@ -280,7 +298,6 @@ endif() | |||||||
| option(CMAKE_USE_OPENSSL "Use OpenSSL code. Experimental" ON) | option(CMAKE_USE_OPENSSL "Use OpenSSL code. Experimental" ON) | ||||||
| mark_as_advanced(CMAKE_USE_OPENSSL) | mark_as_advanced(CMAKE_USE_OPENSSL) | ||||||
|  |  | ||||||
| set(USE_SSLEAY OFF) |  | ||||||
| set(USE_OPENSSL OFF) | set(USE_OPENSSL OFF) | ||||||
| set(HAVE_LIBCRYPTO OFF) | set(HAVE_LIBCRYPTO OFF) | ||||||
| set(HAVE_LIBSSL OFF) | set(HAVE_LIBSSL OFF) | ||||||
| @@ -289,7 +306,6 @@ if(CMAKE_USE_OPENSSL) | |||||||
|   find_package(OpenSSL) |   find_package(OpenSSL) | ||||||
|   if(OPENSSL_FOUND) |   if(OPENSSL_FOUND) | ||||||
|     list(APPEND CURL_LIBS ${OPENSSL_LIBRARIES}) |     list(APPEND CURL_LIBS ${OPENSSL_LIBRARIES}) | ||||||
|     set(USE_SSLEAY ON) |  | ||||||
|     set(USE_OPENSSL ON) |     set(USE_OPENSSL ON) | ||||||
|     set(HAVE_LIBCRYPTO ON) |     set(HAVE_LIBCRYPTO ON) | ||||||
|     set(HAVE_LIBSSL ON) |     set(HAVE_LIBSSL ON) | ||||||
| @@ -339,9 +355,10 @@ if(NOT CURL_DISABLE_LDAP) | |||||||
|     check_include_file_concat("winber.h"  HAVE_WINBER_H) |     check_include_file_concat("winber.h"  HAVE_WINBER_H) | ||||||
|   endif() |   endif() | ||||||
|    |    | ||||||
|  |   set(CMAKE_REQUIRED_INCLUDES_BAK ${CMAKE_REQUIRED_INCLUDES}) | ||||||
|   set(CMAKE_LDAP_INCLUDE_DIR "" CACHE STRING "Path to LDAP include directory") |   set(CMAKE_LDAP_INCLUDE_DIR "" CACHE STRING "Path to LDAP include directory") | ||||||
|   if(CMAKE_LDAP_INCLUDE_DIR) |   if(CMAKE_LDAP_INCLUDE_DIR) | ||||||
|     set(CMAKE_REQUIRED_INCLUDES ${CMAKE_LDAP_INCLUDE_DIR}) |     list(APPEND CMAKE_REQUIRED_INCLUDES ${CMAKE_LDAP_INCLUDE_DIR}) | ||||||
|   endif() |   endif() | ||||||
|   check_include_file_concat("ldap.h"           HAVE_LDAP_H) |   check_include_file_concat("ldap.h"           HAVE_LDAP_H) | ||||||
|   check_include_file_concat("lber.h"           HAVE_LBER_H) |   check_include_file_concat("lber.h"           HAVE_LBER_H) | ||||||
| @@ -349,9 +366,11 @@ if(NOT CURL_DISABLE_LDAP) | |||||||
|   if(NOT HAVE_LDAP_H) |   if(NOT HAVE_LDAP_H) | ||||||
|     message(STATUS "LDAP_H not found CURL_DISABLE_LDAP set ON") |     message(STATUS "LDAP_H not found CURL_DISABLE_LDAP set ON") | ||||||
|     set(CURL_DISABLE_LDAP ON CACHE BOOL "" FORCE) |     set(CURL_DISABLE_LDAP ON CACHE BOOL "" FORCE) | ||||||
|  |     set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES_BAK}) #LDAP includes won't be used | ||||||
|   elseif(NOT HAVE_LIBLDAP) |   elseif(NOT HAVE_LIBLDAP) | ||||||
|     message(STATUS "LDAP library '${CMAKE_LDAP_LIB}' not found CURL_DISABLE_LDAP set ON") |     message(STATUS "LDAP library '${CMAKE_LDAP_LIB}' not found CURL_DISABLE_LDAP set ON") | ||||||
|     set(CURL_DISABLE_LDAP ON CACHE BOOL "" FORCE) |     set(CURL_DISABLE_LDAP ON CACHE BOOL "" FORCE) | ||||||
|  |     set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES_BAK}) #LDAP includes won't be used | ||||||
|   else() |   else() | ||||||
|     if(CMAKE_USE_OPENLDAP) |     if(CMAKE_USE_OPENLDAP) | ||||||
|       set(USE_OPENLDAP ON) |       set(USE_OPENLDAP ON) | ||||||
| @@ -432,6 +451,7 @@ if(CURL_ZLIB) | |||||||
|     set(HAVE_LIBZ ON) |     set(HAVE_LIBZ ON) | ||||||
|     list(APPEND CURL_LIBS ${ZLIB_LIBRARIES}) |     list(APPEND CURL_LIBS ${ZLIB_LIBRARIES}) | ||||||
|     include_directories(${ZLIB_INCLUDE_DIRS}) |     include_directories(${ZLIB_INCLUDE_DIRS}) | ||||||
|  |     list(APPEND CMAKE_REQUIRED_INCLUDES ${ZLIB_INCLUDE_DIRS}) | ||||||
|   endif() |   endif() | ||||||
| endif() | endif() | ||||||
|  |  | ||||||
| @@ -447,7 +467,7 @@ if(CMAKE_USE_LIBSSH2) | |||||||
|   if(LIBSSH2_FOUND) |   if(LIBSSH2_FOUND) | ||||||
|     list(APPEND CURL_LIBS ${LIBSSH2_LIBRARY}) |     list(APPEND CURL_LIBS ${LIBSSH2_LIBRARY}) | ||||||
|     set(CMAKE_REQUIRED_LIBRARIES ${LIBSSH2_LIBRARY}) |     set(CMAKE_REQUIRED_LIBRARIES ${LIBSSH2_LIBRARY}) | ||||||
|     set(CMAKE_REQUIRED_INCLUDES "${LIBSSH2_INCLUDE_DIR}") |     list(APPEND CMAKE_REQUIRED_INCLUDES "${LIBSSH2_INCLUDE_DIR}") | ||||||
|     include_directories("${LIBSSH2_INCLUDE_DIR}") |     include_directories("${LIBSSH2_INCLUDE_DIR}") | ||||||
|     set(HAVE_LIBSSH2 ON) |     set(HAVE_LIBSSH2 ON) | ||||||
|     set(USE_LIBSSH2 ON) |     set(USE_LIBSSH2 ON) | ||||||
| @@ -475,12 +495,12 @@ mark_as_advanced(CMAKE_USE_GSSAPI) | |||||||
| if(CMAKE_USE_GSSAPI) | if(CMAKE_USE_GSSAPI) | ||||||
|   find_package(GSS) |   find_package(GSS) | ||||||
|  |  | ||||||
|   set(HAVE_GSS_API ${GSS_FOUND}) |   set(HAVE_GSSAPI ${GSS_FOUND}) | ||||||
|   if(GSS_FOUND) |   if(GSS_FOUND) | ||||||
|  |  | ||||||
|     message(STATUS "Found ${GSS_FLAVOUR} GSSAPI version: \"${GSS_VERSION}\"") |     message(STATUS "Found ${GSS_FLAVOUR} GSSAPI version: \"${GSS_VERSION}\"") | ||||||
|  |  | ||||||
|     set(CMAKE_REQUIRED_INCLUDES ${GSS_INCLUDE_DIR}) |     list(APPEND CMAKE_REQUIRED_INCLUDES ${GSS_INCLUDE_DIRECTORIES}) | ||||||
|     check_include_file_concat("gssapi/gssapi.h"  HAVE_GSSAPI_GSSAPI_H) |     check_include_file_concat("gssapi/gssapi.h"  HAVE_GSSAPI_GSSAPI_H) | ||||||
|     check_include_file_concat("gssapi/gssapi_generic.h" HAVE_GSSAPI_GSSAPI_GENERIC_H) |     check_include_file_concat("gssapi/gssapi_generic.h" HAVE_GSSAPI_GSSAPI_GENERIC_H) | ||||||
|     check_include_file_concat("gssapi/gssapi_krb5.h" HAVE_GSSAPI_GSSAPI_KRB5_H) |     check_include_file_concat("gssapi/gssapi_krb5.h" HAVE_GSSAPI_GSSAPI_KRB5_H) | ||||||
| @@ -516,7 +536,7 @@ if(CMAKE_USE_GSSAPI) | |||||||
|  |  | ||||||
|     endif() |     endif() | ||||||
|  |  | ||||||
|     include_directories(${GSS_INCLUDE_DIR}) |     include_directories(${GSS_INCLUDE_DIRECTORIES}) | ||||||
|     link_directories(${GSS_LINK_DIRECTORIES}) |     link_directories(${GSS_LINK_DIRECTORIES}) | ||||||
|     set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${GSS_COMPILER_FLAGS}") |     set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${GSS_COMPILER_FLAGS}") | ||||||
|     set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${GSS_LINKER_FLAGS}") |     set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${GSS_LINKER_FLAGS}") | ||||||
| @@ -536,12 +556,25 @@ else() | |||||||
|   unset(USE_UNIX_SOCKETS CACHE) |   unset(USE_UNIX_SOCKETS CACHE) | ||||||
| endif() | endif() | ||||||
|  |  | ||||||
|  |  | ||||||
| # Check for header files | # Check for header files | ||||||
| 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("ws2tcpip.h"     HAVE_WS2TCPIP_H) | ||||||
|   check_include_file_concat("winsock2.h"     HAVE_WINSOCK2_H) |   check_include_file_concat("winsock2.h"     HAVE_WINSOCK2_H) | ||||||
|  |   if(CURL_WINDOWS_SSPI) | ||||||
|  |     set(CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS} -DSECURITY_WIN32") | ||||||
|  |     check_include_file_concat("sspi.h"       HAVE_SSPI_H) | ||||||
|  |     if(HAVE_SSPI_H) | ||||||
|  |       check_include_file_concat("schannel.h" HAVE_SCHANNEL_H) | ||||||
|  |       set(USE_WINDOWS_SSPI ON) | ||||||
|  |       if(HAVE_SCHANNEL_H) | ||||||
|  |         set(USE_SCHANNEL ON) | ||||||
|  |         set(SSL_ENABLED ON) | ||||||
|  |       endif() | ||||||
|  |     endif() | ||||||
|  |   endif() | ||||||
| endif(NOT UNIX) | endif(NOT UNIX) | ||||||
|  |  | ||||||
| check_include_file_concat("stdio.h"          HAVE_STDIO_H) | check_include_file_concat("stdio.h"          HAVE_STDIO_H) | ||||||
| @@ -736,7 +769,6 @@ if(CMAKE_USE_OPENSSL) | |||||||
|     HAVE_CRYPTO_CLEANUP_ALL_EX_DATA) |     HAVE_CRYPTO_CLEANUP_ALL_EX_DATA) | ||||||
|   if(HAVE_LIBCRYPTO AND HAVE_LIBSSL) |   if(HAVE_LIBCRYPTO AND HAVE_LIBSSL) | ||||||
|     set(USE_OPENSSL 1) |     set(USE_OPENSSL 1) | ||||||
|     set(USE_SSLEAY 1) |  | ||||||
|   endif(HAVE_LIBCRYPTO AND HAVE_LIBSSL) |   endif(HAVE_LIBCRYPTO AND HAVE_LIBSSL) | ||||||
| endif(CMAKE_USE_OPENSSL) | endif(CMAKE_USE_OPENSSL) | ||||||
| check_symbol_exists(gmtime_r      "${CURL_INCLUDES}" HAVE_GMTIME_R) | check_symbol_exists(gmtime_r      "${CURL_INCLUDES}" HAVE_GMTIME_R) | ||||||
| @@ -1031,12 +1063,12 @@ _add_if("AsynchDNS"     USE_ARES OR USE_THREADS_POSIX) | |||||||
| _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) | ||||||
| _add_if("GSS-API"       HAVE_GSS_API) | _add_if("GSS-API"       HAVE_GSSAPI) | ||||||
| # 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_GSSAPI OR USE_WINDOWS_SSPI)) | ||||||
| _add_if("Kerberos"      NOT CURL_DISABLE_CRYPTO_AUTH AND | _add_if("Kerberos"      NOT CURL_DISABLE_CRYPTO_AUTH AND | ||||||
|                         (HAVE_GSS_API OR USE_WINDOWS_SSPI)) |                         (HAVE_GSSAPI 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_CRYPTO_AUTH AND (USE_OPENSSL OR | if(NOT CURL_DISABLE_CRYPTO_AUTH AND (USE_OPENSSL OR | ||||||
| @@ -1121,7 +1153,7 @@ set(VERSIONNUM              "${CURL_VERSION_NUM}") | |||||||
| # Finally generate a "curl-config" matching this config | # Finally generate a "curl-config" matching this config | ||||||
| configure_file("${CURL_SOURCE_DIR}/curl-config.in" | configure_file("${CURL_SOURCE_DIR}/curl-config.in" | ||||||
|                "${CURL_BINARY_DIR}/curl-config" @ONLY) |                "${CURL_BINARY_DIR}/curl-config" @ONLY) | ||||||
| install(FILES "${CMAKE_BINARY_DIR}/curl-config" | install(FILES "${CURL_BINARY_DIR}/curl-config" | ||||||
|         DESTINATION bin |         DESTINATION bin | ||||||
|         PERMISSIONS |         PERMISSIONS | ||||||
|           OWNER_READ OWNER_WRITE OWNER_EXECUTE |           OWNER_READ OWNER_WRITE OWNER_EXECUTE | ||||||
| @@ -1131,7 +1163,7 @@ install(FILES "${CMAKE_BINARY_DIR}/curl-config" | |||||||
| # Finally generate a pkg-config file matching this config | # Finally generate a pkg-config file matching this config | ||||||
| configure_file("${CURL_SOURCE_DIR}/libcurl.pc.in" | configure_file("${CURL_SOURCE_DIR}/libcurl.pc.in" | ||||||
|                "${CURL_BINARY_DIR}/libcurl.pc" @ONLY) |                "${CURL_BINARY_DIR}/libcurl.pc" @ONLY) | ||||||
| install(FILES "${CMAKE_BINARY_DIR}/libcurl.pc" | install(FILES "${CURL_BINARY_DIR}/libcurl.pc" | ||||||
|         DESTINATION lib/pkgconfig) |         DESTINATION lib/pkgconfig) | ||||||
|  |  | ||||||
| # This needs to be run very last so other parts of the scripts can take advantage of this. | # This needs to be run very last so other parts of the scripts can take advantage of this. | ||||||
|   | |||||||
							
								
								
									
										25
									
								
								CONTRIBUTING.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								CONTRIBUTING.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,25 @@ | |||||||
|  | How to contribute to curl | ||||||
|  | ========================= | ||||||
|  |  | ||||||
|  | Join the community | ||||||
|  | ------------------ | ||||||
|  |  | ||||||
|  |  1. Click 'watch' on the github repo | ||||||
|  |  | ||||||
|  |  2. Subscribe to the suitable [mailing lists](http://curl.haxx.se/mail/) | ||||||
|  |  | ||||||
|  | Read [docs/CONTRIBUTE](docs/CONTRIBUTE) | ||||||
|  | --------------------------------------- | ||||||
|  |  | ||||||
|  | Send your suggestions using one of these methods: | ||||||
|  | ------------------------------------------------- | ||||||
|  |  | ||||||
|  |  1. in a mail to the mailing list | ||||||
|  |  | ||||||
|  |  2. as a pull request on github | ||||||
|  |  | ||||||
|  |  3. as an issue on github | ||||||
|  |     | ||||||
|  |  | ||||||
|  | / The cURL team! | ||||||
|  |  | ||||||
							
								
								
									
										2
									
								
								COPYING
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								COPYING
									
									
									
									
									
								
							| @@ -1,6 +1,6 @@ | |||||||
| COPYRIGHT AND PERMISSION NOTICE | COPYRIGHT AND PERMISSION NOTICE | ||||||
|  |  | ||||||
| Copyright (c) 1996 - 2015, Daniel Stenberg, <daniel@haxx.se>. | Copyright (c) 1996 - 2016, Daniel Stenberg, <daniel@haxx.se>. | ||||||
|  |  | ||||||
| All rights reserved. | All rights reserved. | ||||||
|  |  | ||||||
|   | |||||||
| @@ -65,7 +65,7 @@ else | |||||||
|  ARCHES64='-arch x86_64' |  ARCHES64='-arch x86_64' | ||||||
|  #We "know" that 10.4 and earlier do not support 64bit |  #We "know" that 10.4 and earlier do not support 64bit | ||||||
|  OLD_SDK64=`ls  $SDK_PATH|egrep -v "10.[0-4]"|head -1` |  OLD_SDK64=`ls  $SDK_PATH|egrep -v "10.[0-4]"|head -1` | ||||||
|  NEW_SDK64=`ls -r $SDK_PATH|egrep -v "10.[0-4]"|head -1` |  NEW_SDK64=`ls -r $SDK_PATH|egrep -v "10.[0-4][^0-9]" | head -1` | ||||||
|  if test $USE_OLD -gt 0 |  if test $USE_OLD -gt 0 | ||||||
|   then |   then | ||||||
|    SDK64=$OLD_SDK64 |    SDK64=$OLD_SDK64 | ||||||
| @@ -94,7 +94,7 @@ if test ! -z $SDK32; then | |||||||
|   rm -r libcurl.framework |   rm -r libcurl.framework | ||||||
|   mkdir -p libcurl.framework/${FRAMEWORK_VERSION}/Resources |   mkdir -p libcurl.framework/${FRAMEWORK_VERSION}/Resources | ||||||
|   cp lib/.libs/libcurl.dylib libcurl.framework/${FRAMEWORK_VERSION}/libcurl |   cp lib/.libs/libcurl.dylib libcurl.framework/${FRAMEWORK_VERSION}/libcurl | ||||||
|   install_name_tool -id @executable_path/../Frameworks/libcurl.framework/${FRAMEWORK_VERSION}/libcurl libcurl.framework/${FRAMEWORK_VERSION}/libcurl |   install_name_tool -id @rpath/libcurl.framework/${FRAMEWORK_VERSION}/libcurl libcurl.framework/${FRAMEWORK_VERSION}/libcurl | ||||||
|   /usr/bin/sed -e "s/7\.12\.3/$VERSION/" lib/libcurl.plist >libcurl.framework/${FRAMEWORK_VERSION}/Resources/Info.plist |   /usr/bin/sed -e "s/7\.12\.3/$VERSION/" lib/libcurl.plist >libcurl.framework/${FRAMEWORK_VERSION}/Resources/Info.plist | ||||||
|   mkdir -p libcurl.framework/${FRAMEWORK_VERSION}/Headers/curl |   mkdir -p libcurl.framework/${FRAMEWORK_VERSION}/Headers/curl | ||||||
|   cp include/curl/*.h libcurl.framework/${FRAMEWORK_VERSION}/Headers/curl |   cp include/curl/*.h libcurl.framework/${FRAMEWORK_VERSION}/Headers/curl | ||||||
| @@ -121,7 +121,7 @@ if test ! -z $SDK32; then | |||||||
|  |  | ||||||
|     echo "----Appending 64 bit framework to 32 bit framework..." |     echo "----Appending 64 bit framework to 32 bit framework..." | ||||||
|     cp lib/.libs/libcurl.dylib libcurl.framework/${FRAMEWORK_VERSION}/libcurl64 |     cp lib/.libs/libcurl.dylib libcurl.framework/${FRAMEWORK_VERSION}/libcurl64 | ||||||
|     install_name_tool -id @executable_path/../Frameworks/libcurl.framework/${FRAMEWORK_VERSION}/libcurl libcurl.framework/${FRAMEWORK_VERSION}/libcurl64 |     install_name_tool -id @rpath/libcurl.framework/${FRAMEWORK_VERSION}/libcurl libcurl.framework/${FRAMEWORK_VERSION}/libcurl64 | ||||||
|     cp libcurl.framework/${FRAMEWORK_VERSION}/libcurl libcurl.framework/${FRAMEWORK_VERSION}/libcurl32 |     cp libcurl.framework/${FRAMEWORK_VERSION}/libcurl libcurl.framework/${FRAMEWORK_VERSION}/libcurl32 | ||||||
|     pwd |     pwd | ||||||
|     lipo libcurl.framework/${FRAMEWORK_VERSION}/libcurl32 libcurl.framework/${FRAMEWORK_VERSION}/libcurl64 -create -output libcurl.framework/${FRAMEWORK_VERSION}/libcurl |     lipo libcurl.framework/${FRAMEWORK_VERSION}/libcurl32 libcurl.framework/${FRAMEWORK_VERSION}/libcurl64 -create -output libcurl.framework/${FRAMEWORK_VERSION}/libcurl | ||||||
|   | |||||||
							
								
								
									
										97
									
								
								Makefile.am
									
									
									
									
									
								
							
							
						
						
									
										97
									
								
								Makefile.am
									
									
									
									
									
								
							| @@ -32,103 +32,115 @@ CMAKE_DIST = CMakeLists.txt CMake/CMakeConfigurableFile.in	\ | |||||||
| VC6_LIBTMPL = projects/Windows/VC6/lib/libcurl.tmpl | VC6_LIBTMPL = projects/Windows/VC6/lib/libcurl.tmpl | ||||||
| VC6_LIBDSP = projects/Windows/VC6/lib/libcurl.dsp.dist | 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/curl.tmpl | ||||||
| VC6_SRCDSP = projects/Windows/VC6/src/curlsrc.dsp.dist | VC6_SRCDSP = projects/Windows/VC6/src/curl.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.dist | 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/curl.tmpl | ||||||
| VC7_SRCVCPROJ = projects/Windows/VC7/src/curlsrc.vcproj.dist | VC7_SRCVCPROJ = projects/Windows/VC7/src/curl.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.dist | 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/curl.tmpl | ||||||
| VC71_SRCVCPROJ = projects/Windows/VC7.1/src/curlsrc.vcproj.dist | VC71_SRCVCPROJ = projects/Windows/VC7.1/src/curl.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.dist | 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/curl.tmpl | ||||||
| VC8_SRCVCPROJ = projects/Windows/VC8/src/curlsrc.vcproj.dist | VC8_SRCVCPROJ = projects/Windows/VC8/src/curl.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.dist | 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/curl.tmpl | ||||||
| VC9_SRCVCPROJ = projects/Windows/VC9/src/curlsrc.vcproj.dist | VC9_SRCVCPROJ = projects/Windows/VC9/src/curl.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.dist | 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/curl.tmpl | ||||||
| VC10_SRCVCXPROJ = projects/Windows/VC10/src/curlsrc.vcxproj.dist | VC10_SRCVCXPROJ = projects/Windows/VC10/src/curl.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.dist | 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/curl.tmpl | ||||||
| VC11_SRCVCXPROJ = projects/Windows/VC11/src/curlsrc.vcxproj.dist | VC11_SRCVCXPROJ = projects/Windows/VC11/src/curl.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.dist | 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/curl.tmpl | ||||||
| VC12_SRCVCXPROJ = projects/Windows/VC12/src/curlsrc.vcxproj.dist | VC12_SRCVCXPROJ = projects/Windows/VC12/src/curl.vcxproj.dist | ||||||
| VC12_SRCVCXPROJ_DEPS = $(VC12_SRCTMPL) Makefile.am src/Makefile.inc | VC12_SRCVCXPROJ_DEPS = $(VC12_SRCTMPL) Makefile.am src/Makefile.inc | ||||||
|  |  | ||||||
|  | VC14_LIBTMPL = projects/Windows/VC14/lib/libcurl.tmpl | ||||||
|  | VC14_LIBVCXPROJ = projects/Windows/VC14/lib/libcurl.vcxproj.dist | ||||||
|  | VC14_LIBVCXPROJ_DEPS = $(VC14_LIBTMPL) Makefile.am lib/Makefile.inc | ||||||
|  | VC14_SRCTMPL = projects/Windows/VC14/src/curl.tmpl | ||||||
|  | VC14_SRCVCXPROJ = projects/Windows/VC14/src/curl.vcxproj.dist | ||||||
|  | VC14_SRCVCXPROJ_DEPS = $(VC14_SRCTMPL) Makefile.am src/Makefile.inc | ||||||
|  |  | ||||||
| VC_DIST = projects/README	\ | VC_DIST = projects/README	\ | ||||||
|  projects/build-openssl.bat	\ |  projects/build-openssl.bat	\ | ||||||
|  |  projects/build-wolfssl.bat	\ | ||||||
|  projects/checksrc.bat	\ |  projects/checksrc.bat	\ | ||||||
|  projects/Windows/VC6/curl-all.dsw	\ |  projects/Windows/VC6/curl-all.dsw	\ | ||||||
|  projects/Windows/VC6/lib/libcurl.dsw \ |  projects/Windows/VC6/lib/libcurl.dsw \ | ||||||
|  projects/Windows/VC6/src/curlsrc.dsw \ |  projects/Windows/VC6/src/curl.dsw \ | ||||||
|  projects/Windows/VC7/curl-all.sln	\ |  projects/Windows/VC7/curl-all.sln	\ | ||||||
|  projects/Windows/VC7/lib/libcurl.sln 	\ |  projects/Windows/VC7/lib/libcurl.sln 	\ | ||||||
|  projects/Windows/VC7/src/curlsrc.sln 	\ |  projects/Windows/VC7/src/curl.sln 	\ | ||||||
|  projects/Windows/VC7.1/curl-all.sln	\ |  projects/Windows/VC7.1/curl-all.sln	\ | ||||||
|  projects/Windows/VC7.1/lib/libcurl.sln \ |  projects/Windows/VC7.1/lib/libcurl.sln \ | ||||||
|  projects/Windows/VC7.1/src/curlsrc.sln \ |  projects/Windows/VC7.1/src/curl.sln \ | ||||||
|  projects/Windows/VC8/curl-all.sln	\ |  projects/Windows/VC8/curl-all.sln	\ | ||||||
|  projects/Windows/VC8/lib/libcurl.sln 	\ |  projects/Windows/VC8/lib/libcurl.sln 	\ | ||||||
|  projects/Windows/VC8/src/curlsrc.sln 	\ |  projects/Windows/VC8/src/curl.sln 	\ | ||||||
|  projects/Windows/VC9/curl-all.sln	\ |  projects/Windows/VC9/curl-all.sln	\ | ||||||
|  projects/Windows/VC9/lib/libcurl.sln 	\ |  projects/Windows/VC9/lib/libcurl.sln 	\ | ||||||
|  projects/Windows/VC9/src/curlsrc.sln 	\ |  projects/Windows/VC9/src/curl.sln 	\ | ||||||
|  projects/Windows/VC10/curl-all.sln	\ |  projects/Windows/VC10/curl-all.sln	\ | ||||||
|  projects/Windows/VC10/lib/libcurl.sln 	\ |  projects/Windows/VC10/lib/libcurl.sln 	\ | ||||||
|  projects/Windows/VC10/src/curlsrc.sln  \ |  projects/Windows/VC10/src/curl.sln  \ | ||||||
|  projects/Windows/VC11/curl-all.sln	\ |  projects/Windows/VC11/curl-all.sln	\ | ||||||
|  projects/Windows/VC11/lib/libcurl.sln 	\ |  projects/Windows/VC11/lib/libcurl.sln 	\ | ||||||
|  projects/Windows/VC11/src/curlsrc.sln 	\ |  projects/Windows/VC11/src/curl.sln 	\ | ||||||
|  projects/Windows/VC12/curl-all.sln	\ |  projects/Windows/VC12/curl-all.sln	\ | ||||||
|  projects/Windows/VC12/lib/libcurl.sln 	\ |  projects/Windows/VC12/lib/libcurl.sln 	\ | ||||||
|  projects/Windows/VC12/src/curlsrc.sln |  projects/Windows/VC12/src/curl.sln	\ | ||||||
|  |  projects/Windows/VC14/curl-all.sln	\ | ||||||
|  |  projects/Windows/VC14/lib/libcurl.sln 	\ | ||||||
|  |  projects/Windows/VC14/src/curl.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				\ | ||||||
|  winbuild/Makefile.msvc.names |  winbuild/Makefile.msvc.names | ||||||
|  |  | ||||||
| EXTRA_DIST = CHANGES COPYING maketgz Makefile.dist curl-config.in	\ | EXTRA_DIST = CHANGES COPYING maketgz Makefile.dist curl-config.in	\ | ||||||
|  RELEASE-NOTES buildconf libcurl.pc.in MacOSX-Framework	\ |  RELEASE-NOTES buildconf libcurl.pc.in MacOSX-Framework scripts/zsh.pl	\ | ||||||
|  $(CMAKE_DIST) $(VC_DIST) $(WINBUILD_DIST) lib/libcurl.vers.in |  $(CMAKE_DIST) $(VC_DIST) $(WINBUILD_DIST) lib/libcurl.vers.in | ||||||
|  |  | ||||||
| CLEANFILES = $(VC6_LIBDSP) $(VC6_SRCDSP) $(VC7_LIBVCPROJ) $(VC7_SRCVCPROJ)	\ | CLEANFILES = $(VC6_LIBDSP) $(VC6_SRCDSP) $(VC7_LIBVCPROJ) $(VC7_SRCVCPROJ)	\ | ||||||
|  $(VC71_LIBVCPROJ) $(VC71_SRCVCPROJ) $(VC8_LIBVCPROJ) $(VC8_SRCVCPROJ)	\ |  $(VC71_LIBVCPROJ) $(VC71_SRCVCPROJ) $(VC8_LIBVCPROJ) $(VC8_SRCVCPROJ)	\ | ||||||
|  $(VC9_LIBVCPROJ) $(VC9_SRCVCPROJ) $(VC10_LIBVCXPROJ) $(VC10_SRCVCXPROJ)	\ |  $(VC9_LIBVCPROJ) $(VC9_SRCVCPROJ) $(VC10_LIBVCXPROJ) $(VC10_SRCVCXPROJ)	\ | ||||||
|  $(VC11_LIBVCXPROJ) $(VC11_SRCVCXPROJ) $(VC12_LIBVCXPROJ) $(VC12_SRCVCXPROJ) |  $(VC11_LIBVCXPROJ) $(VC11_SRCVCXPROJ) $(VC12_LIBVCXPROJ) $(VC12_SRCVCXPROJ)	\ | ||||||
|  |  $(VC14_LIBVCXPROJ) $(VC14_SRCVCXPROJ) | ||||||
|  |  | ||||||
| bin_SCRIPTS = curl-config | bin_SCRIPTS = curl-config | ||||||
|  |  | ||||||
| SUBDIRS = lib src include | SUBDIRS = lib src include scripts | ||||||
| DIST_SUBDIRS = $(SUBDIRS) tests packages docs | DIST_SUBDIRS = $(SUBDIRS) tests packages docs | ||||||
|  |  | ||||||
| pkgconfigdir = $(libdir)/pkgconfig | pkgconfigdir = $(libdir)/pkgconfig | ||||||
| @@ -148,12 +160,12 @@ dist-hook: | |||||||
| 	done) | 	done) | ||||||
|  |  | ||||||
| html: | html: | ||||||
| 	cd docs; make html | 	cd docs && make html | ||||||
|  |  | ||||||
| pdf: | pdf: | ||||||
| 	cd docs; make pdf | 	cd docs && make pdf | ||||||
|  |  | ||||||
| check: test examples | check: test examples check-docs | ||||||
|  |  | ||||||
| if CROSSCOMPILING | if CROSSCOMPILING | ||||||
| test-full: test | test-full: test | ||||||
| @@ -181,6 +193,9 @@ endif | |||||||
| examples: | examples: | ||||||
| 	@(cd docs/examples; $(MAKE) check) | 	@(cd docs/examples; $(MAKE) check) | ||||||
|  |  | ||||||
|  | check-docs: | ||||||
|  | 	@(cd docs/libcurl; $(MAKE) check) | ||||||
|  |  | ||||||
| # This is a hook to have 'make clean' also clean up the docs and the tests | # This is a hook to have 'make clean' also clean up the docs and the tests | ||||||
| # dir. The extra check for the Makefiles being present is necessary because | # dir. The extra check for the Makefiles being present is necessary because | ||||||
| # 'make distcheck' will make clean first in these directories _before_ it runs | # 'make distcheck' will make clean first in these directories _before_ it runs | ||||||
| @@ -266,7 +281,7 @@ vc-ide: $(VC6_LIBDSP_DEPS) $(VC6_SRCDSP_DEPS) $(VC7_LIBVCPROJ_DEPS)	\ | |||||||
|  $(VC8_LIBVCPROJ_DEPS) $(VC8_SRCVCPROJ_DEPS) $(VC9_LIBVCPROJ_DEPS)	\ |  $(VC8_LIBVCPROJ_DEPS) $(VC8_SRCVCPROJ_DEPS) $(VC9_LIBVCPROJ_DEPS)	\ | ||||||
|  $(VC9_SRCVCPROJ_DEPS) $(VC10_LIBVCXPROJ_DEPS) $(VC10_SRCVCXPROJ_DEPS)	\ |  $(VC9_SRCVCPROJ_DEPS) $(VC10_LIBVCXPROJ_DEPS) $(VC10_SRCVCXPROJ_DEPS)	\ | ||||||
|  $(VC11_LIBVCXPROJ_DEPS) $(VC11_SRCVCXPROJ_DEPS) $(VC12_LIBVCXPROJ_DEPS)	\ |  $(VC11_LIBVCXPROJ_DEPS) $(VC11_SRCVCXPROJ_DEPS) $(VC12_LIBVCXPROJ_DEPS)	\ | ||||||
|  $(VC12_SRCVCXPROJ_DEPS) |  $(VC12_SRCVCXPROJ_DEPS) $(VC14_LIBVCXPROJ_DEPS) $(VC14_SRCVCXPROJ_DEPS) | ||||||
| 	@(win32_lib_srcs='$(LIB_CFILES)'; \ | 	@(win32_lib_srcs='$(LIB_CFILES)'; \ | ||||||
| 	win32_lib_hdrs='$(LIB_HFILES) config-win32.h'; \ | 	win32_lib_hdrs='$(LIB_HFILES) config-win32.h'; \ | ||||||
| 	win32_lib_rc='$(LIB_RCFILES)'; \ | 	win32_lib_rc='$(LIB_RCFILES)'; \ | ||||||
| @@ -527,4 +542,22 @@ function gen_element(type, dir, file)\ | |||||||
| 		-v src_rc="$$win32_src_rc" \ | 		-v src_rc="$$win32_src_rc" \ | ||||||
| 		-v src_x_srcs="$$sorted_src_x_srcs" \ | 		-v src_x_srcs="$$sorted_src_x_srcs" \ | ||||||
| 		-v src_x_hdrs="$$sorted_src_x_hdrs" \ | 		-v src_x_hdrs="$$sorted_src_x_hdrs" \ | ||||||
| 		"$$awk_code" $(srcdir)/$(VC12_SRCTMPL) > $(VC12_SRCVCXPROJ) || { exit 1; };) | 		"$$awk_code" $(srcdir)/$(VC12_SRCTMPL) > $(VC12_SRCVCXPROJ) || { exit 1; }; \ | ||||||
|  | 	\ | ||||||
|  | 	echo "generating '$(VC14_LIBVCXPROJ)'"; \ | ||||||
|  | 	awk -v proj_type=vcxproj \ | ||||||
|  | 		-v lib_srcs="$$sorted_lib_srcs" \ | ||||||
|  | 		-v lib_hdrs="$$sorted_lib_hdrs" \ | ||||||
|  | 		-v lib_rc="$$win32_lib_rc" \ | ||||||
|  | 		-v lib_vtls_srcs="$$sorted_lib_vtls_srcs" \ | ||||||
|  | 		-v lib_vtls_hdrs="$$sorted_lib_vtls_hdrs" \ | ||||||
|  | 		"$$awk_code" $(srcdir)/$(VC14_LIBTMPL) > $(VC14_LIBVCXPROJ) || { exit 1; }; \ | ||||||
|  | 	\ | ||||||
|  | 	echo "generating '$(VC14_SRCVCXPROJ)'"; \ | ||||||
|  | 	awk -v proj_type=vcxproj \ | ||||||
|  | 		-v src_srcs="$$sorted_src_srcs" \ | ||||||
|  | 		-v src_hdrs="$$sorted_src_hdrs" \ | ||||||
|  | 		-v src_rc="$$win32_src_rc" \ | ||||||
|  | 		-v src_x_srcs="$$sorted_src_x_srcs" \ | ||||||
|  | 		-v src_x_hdrs="$$sorted_src_x_hdrs" \ | ||||||
|  | 		"$$awk_code" $(srcdir)/$(VC14_SRCTMPL) > $(VC14_SRCVCXPROJ) || { exit 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 | ||||||
| @@ -566,6 +566,17 @@ src/Makefile.vc12: src/Makefile.vc6 | |||||||
| 	@echo "generate $@" | 	@echo "generate $@" | ||||||
| 	@sed -e "s#/GX /DWIN32 /YX#/EHsc /DWIN32#" -e "s#/GZ#/RTC1#" -e "s/ws2_32.lib/ws2_32.lib/g" -e "s/vc6/vc12/g" -e "s/VC6/VC12/g" src/Makefile.vc6 > src/Makefile.vc12 | 	@sed -e "s#/GX /DWIN32 /YX#/EHsc /DWIN32#" -e "s#/GZ#/RTC1#" -e "s/ws2_32.lib/ws2_32.lib/g" -e "s/vc6/vc12/g" -e "s/VC6/VC12/g" src/Makefile.vc6 > src/Makefile.vc12 | ||||||
|  |  | ||||||
|  | # VC14 makefiles are for use with VS2015 | ||||||
|  | vc14: lib/Makefile.vc14 src/Makefile.vc14 | ||||||
|  |  | ||||||
|  | lib/Makefile.vc14: lib/Makefile.vc6 | ||||||
|  | 	@echo "generate $@" | ||||||
|  | 	@sed -e "s#/GX /DWIN32 /YX#/EHsc /DWIN32#" -e "s#/GZ#/RTC1#" -e "s/ws2_32.lib/ws2_32.lib/g" -e "s/vc6/vc14/g" -e "s/VC6/VC14/g" lib/Makefile.vc6 > lib/Makefile.vc14 | ||||||
|  |  | ||||||
|  | src/Makefile.vc14: src/Makefile.vc6 | ||||||
|  | 	@echo "generate $@" | ||||||
|  | 	@sed -e "s#/GX /DWIN32 /YX#/EHsc /DWIN32#" -e "s#/GZ#/RTC1#" -e "s/ws2_32.lib/ws2_32.lib/g" -e "s/vc6/vc14/g" -e "s/VC6/VC14/g" src/Makefile.vc6 > src/Makefile.vc14 | ||||||
|  |  | ||||||
| ca-bundle: lib/mk-ca-bundle.pl | ca-bundle: lib/mk-ca-bundle.pl | ||||||
| 	@echo "generate a fresh ca-bundle.crt" | 	@echo "generate a fresh ca-bundle.crt" | ||||||
| 	@perl $< -b -l -u lib/ca-bundle.crt | 	@perl $< -b -l -u lib/ca-bundle.crt | ||||||
|   | |||||||
							
								
								
									
										4
									
								
								README
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								README
									
									
									
									
									
								
							| @@ -38,12 +38,12 @@ GIT | |||||||
|  |  | ||||||
|   To download the very latest source off the GIT server do this: |   To download the very latest source off the GIT server do this: | ||||||
|  |  | ||||||
|     git clone git://github.com/bagder/curl.git |     git clone https://github.com/bagder/curl.git | ||||||
|  |  | ||||||
|   (you'll get a directory named curl created, filled with the source code) |   (you'll get a directory named curl created, filled with the source code) | ||||||
|  |  | ||||||
| NOTICE | NOTICE | ||||||
|  |  | ||||||
|   Curl contains pieces of source code that is Copyright (c) 1998, 1999 |   Curl contains pieces of source code that is Copyright (c) 1998, 1999 | ||||||
|   Kungliga Tekniska H<EFBFBD>gskolan. This notice is included here to comply with the |   Kungliga Tekniska Högskolan. This notice is included here to comply with the | ||||||
|   distribution terms. |   distribution terms. | ||||||
|   | |||||||
							
								
								
									
										211
									
								
								RELEASE-NOTES
									
									
									
									
									
								
							
							
						
						
									
										211
									
								
								RELEASE-NOTES
									
									
									
									
									
								
							| @@ -1,89 +1,78 @@ | |||||||
| Curl and libcurl 7.41.0 | Curl and libcurl 7.47.0 | ||||||
|  |  | ||||||
|  Public curl releases:         144 |  Public curl releases:         151 | ||||||
|  Command line options:         163 |  Command line options:         179 | ||||||
|  curl_easy_setopt() options:   209 |  curl_easy_setopt() options:   221 | ||||||
|  Public functions in libcurl:  58 |  Public functions in libcurl:  61 | ||||||
|  Contributors:                 1233 |  Contributors:                 1340 | ||||||
|  |  | ||||||
| This release includes the following changes: | This release includes the following changes: | ||||||
|  |  | ||||||
|  o NetWare build: added TLS-SRP enabled build |  o version: Add flag CURL_VERSION_PSL for libpsl | ||||||
|  o winbuild: Added option to build with c-ares |  o http: added CURL_HTTP_VERSION_2TLS to do HTTP/2 for HTTPS only [8] | ||||||
|  o Added --cert-status [9] |  o curl: use 2TLS by default | ||||||
|  o Added CURLOPT_SSL_VERIFYSTATUS [10] |  o curl --expect100-timeout: added [10] | ||||||
|  o sasl: implement EXTERNAL authentication mechanism |  o Add .dir-locals and set c-basic-offset to 2 (for emacs) [16] | ||||||
|  |  | ||||||
| This release includes the following bugfixes: | This release includes the following bugfixes: | ||||||
|  |  | ||||||
|  o sasl_gssapi: Fixed build on NetBSD with built-in GSS-API [1] |  o curl: avoid local drive traversal when saving file on Windows [33] | ||||||
|  o FTP: fix IPv6 host using link-local address [2] |  o NTLM: do not resuse proxy connections without diff proxy credentials [34] | ||||||
|  o FTP: if EPSV fails on IPV6 connections, bail out |  o tests: Disable the OAUTHBEARER tests when using a non-default port number [1] | ||||||
|  o gssapi: Remove need for duplicated GSS_C_NT_HOSTBASED_SERVICE definitions |  o curl: remove keepalive #ifdef checks done on libcurl's behalf | ||||||
|  o NSS: fix compiler error when built http2-enabled |  o formdata: Check if length is too large for memory [2] | ||||||
|  o mingw build: allow to pass custom CFLAGS [3] |  o lwip: Fix compatibility issues with later versions [3] | ||||||
|  o add -m64 CFLAGS when targeting mingw64, add -m32/-m64 to LDFLAGS [4] |  o openssl: BoringSSL doesn't have CONF_modules_free | ||||||
|  o curl_schannel.c: mark session as removed from cache if not freed [5] |  o config-win32: Fix warning HAVE_WINSOCK2_H undefined | ||||||
|  o Curl_pretransfer: reset expected transfer sizes [6] |  o build: fix compilation error with CURL_DISABLE_VERBOSE_STRINGS [4] | ||||||
|  o curl.h: remove extra space [7] |  o http2: Fix hanging paused stream [5] | ||||||
|  o curl_endian: Fixed build when 64-bit integers are not supported [8] |  o scripts/Makefile: fix GNUism and survive no perl [6] | ||||||
|  o checksrc.bat: Better detection of Perl installation |  o openssl: adapt to 1.1.0+ name changes | ||||||
|  o build-openssl.bat: Added check for Perl installation |  o openssl: adapt to openssl >= 1.1.0 X509 opaque structs [7] | ||||||
|  o http_negotiate: Return CURLcode in Curl_input_negotiate() instead of int |  o HTTP2.md: spell fix and remove TODO now implemented | ||||||
|  o http_negotiate: Added empty decoded challenge message info text |  o setstropt: const-correctness [9] | ||||||
|  o vtls: Removed unimplemented overrides of curlssl_close_all() |  o cyassl: fix compiler warning on type conversion | ||||||
|  o sasl_gssapi: Fixed memory leak with local SPN variable |  o gskit: Fix host subject altname verification [11] | ||||||
|  o http_negotiate: Use dynamic buffer for SPN generation |  o http2: Support trailer fields [12] | ||||||
|  o ldap: Renamed the CURL_LDAP_WIN definition to USE_WIN32_LDAP |  o wolfssl: handle builds without SSLv3 support | ||||||
|  o openssl: do public key pinning check independently [11] |  o cyassl: deal with lack of *get_peer_certificate [13] | ||||||
|  o timeval: typecast for better type (on Amiga) |  o sockfilt: do not wait on unreliable file or pipe handle | ||||||
|  o ipv6: enclose AF_INET6 uses with proper #ifdefs for ipv6 |  o make: build zsh script even in an out-of-tree build | ||||||
|  o SASL: common URL option and auth capabilities decoders for all protocols |  o test 1326: fix getting stuck on Windows | ||||||
|  o BoringSSL: fix build |  o test 87: fix file check on Windows | ||||||
|  o BoringSSL: detected by configure, switches off NTLM |  o configure: allow static builds on mingw [14] | ||||||
|  o openvms: Handle openssl/0.8.9zb version parsing |  o configure: detect IPv6 support on Windows [15] | ||||||
|  o configure: detect libresssl |  o ConnectionExists: with *PIPEWAIT, wait for connections [17] | ||||||
|  o configure: remove detection of the old yassl emulation API |  o Makefile.inc: s/curl_SOURCES/CURL_FILES [18] | ||||||
|  o curl_setup: Disable SMB/CIFS support when HTTP only |  o test 16: fixed for Windows | ||||||
|  o imap: remove automatic password setting: it breaks external sasl authentication |  o test 252-255: use datacheck mode text for ASCII-mode LISTings | ||||||
|  o sasl: remove XOAUTH2 from default enabled authentication mechanism |  o tftpd server: add Windows support by writing files in binary mode | ||||||
|  o runtests: identify BoringSSL and libressl |  o ftplistparser: fix handling of file LISTings using Windows EOL | ||||||
|  o security: avoid compiler warning |  o tests first.c: fix calculation of sleep timeout on Windows | ||||||
|  o ldap: build with BoringSSL |  o tests (several): use datacheck mode text for ASCII-mode LISTings | ||||||
|  o des: Added Curl_des_set_odd_parity() |  o CURLOPT_RANGE.3: for HTTP servers, range support is optional | ||||||
|  o CURLOPT_SEEKFUNCTION.3: also when server closes a connection |  o test 1515: add MSYS support by passing a relative path | ||||||
|  o CURLOPT_HTTP_VERSION.3: CURL_HTTP_VERSION_2_0 added in 7.33.0 |  o curl_global_init.3: Add Windows-specific info for init via DLL [19] | ||||||
|  o build: Removed unused Visual Studio bscmake settings |  o http2: Fix client write for trailers on stream close [20] | ||||||
|  o build: Enabled DEBUGBUILD in Visual Studio debug builds |  o mbedtls: Fix ALPN support | ||||||
|  o build: Renamed top level Visual Studio solution files |  o connection reuse: IDN host names fixed [21] | ||||||
|  o build: Removed Visual Studio SuppressStartupBanner directive for VC8+ |  o http2: Fix PUSH_PROMISE headers being treated as trailers [22] | ||||||
|  o libcurl-symbols: first basic shot for autogenerated docs |  o http2: handle the received SETTINGS frame [23] | ||||||
|  o Makefile.am: fix 'make distcheck' |  o http2: Ensure that http2_handle_stream_close is called [24] | ||||||
|  o getpass_r: read from stdin, not stdout! [12] |  o mbedtls: implement CURLOPT_PINNEDPUBLICKEY | ||||||
|  o getpass: protect include with proper #ifdef |  o runtests: Add mbedTLS to the SSL backends | ||||||
|  o opts: CURLOPT_CAINFO availability depends on SSL engine |  o IDN host names: Remove the port number before converting to ACE [25] | ||||||
|  o more cleanup of 'CURLcode result' return code  |  o zsh.pl: fail if no curl is found | ||||||
|  o MD4: replace implementation |  o scripts: fix zsh completion generation | ||||||
|  o MD5: replace implementation |  o scripts: don't generate and install zsh completion when cross-compiling [26] | ||||||
|  o openssl: SSL_SESSION->ssl_version no longer exist [13] |  o lib: Prefix URLs with lower-case protocol names/schemes [27] | ||||||
|  o md5: use axTLS's own MD5 functions when available |  o ConnectionExists: only do pipelining/multiplexing when asked [28] | ||||||
|  o schannel: Removed curl_ prefix from source files |  o configure: assume IPv6 works when cross-compiled [29] | ||||||
|  o curl.1: add warning when using -H and redirects |  o openssl: for 1.1.0+ they now provide a SSLeay() macro of their own | ||||||
|  o curl.1: clarify that -X is used for all requests |  o openssl: improved error detection/reporting | ||||||
|  o gskit: Fix exclusive SSLv3 option |  o ssh: CURLOPT_SSH_PUBLIC_KEYFILE now treats "" as NULL again [30] | ||||||
|  o polarssl: Fix exclusive SSL protocol version options [14] |  o mbedtls: Fix pinned key return value on fail [31] | ||||||
|  o http2: Fix bug that associated stream canceled on PUSH_PROMISE |  o maketgz: generate date stamp with LC_TIME=C [32] | ||||||
|  o ftp: accept all 2xx responses to the PORT command |  | ||||||
|  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: | ||||||
|  |  | ||||||
| @@ -92,32 +81,48 @@ 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: | ||||||
|  |  | ||||||
|   Alessandro Ghedini, Alexander Peslyak, Ben Boeckel, Brad King, Brad Spencer, |   Alessandro Ghedini, Anders Bakken, Christian Stewart, Dan Fandrich, | ||||||
|   Chris Young, Dan Fandrich, Daniel Stenberg, Gisle Vanem, Guenter Knauf, |   Daniel Schauenberg, Daniel Stenberg, Francisco Moraes, Gisle Vanem, | ||||||
|   Jean-Francois Durand, Joe Mason, John E. Malmberg, Jon Seymour, Julian Ospald, |   Isaac Boukris, Johannes Schindelin, John Kohl, Kamil Dudka, Marc Hoersken, | ||||||
|   Kamil Dudka, Kyle J. McKay, Leith Bade, Marc Hoersken, Michael Kaufmann, |   Michael Kaufmann, Mohammad AlSaleh, Patrick Monnerat, Ray Satiro, Steve Holme, | ||||||
|   Michael Wallner, Mohammad AlSaleh, Nick Zitzmann, Patrick Monnerat, |   Tatsuhiro Tsujikawa, Thomas Glanzmann, Thomas Klausner, | ||||||
|   Ray Satiro, Rich Burridge, Sam Schanken, Sergei Nikulov, Steve Holme, |   (21 contributors) | ||||||
|   Tatsuhiro Tsujikawa, Thomas Klausner, Viktor Szakats, Vojtěch Král, |  | ||||||
|   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/bug/view.cgi?id=1469 |  [1] = http://curl.haxx.se/mail/lib-2015-12/0003.html | ||||||
|  [2] = http://curl.haxx.se/bug/view.cgi?id=1468 |  [2] = https://github.com/bagder/curl/issues/425#issuecomment-154518679 | ||||||
|  [3] = https://github.com/bagder/curl/pull/136 |  [3] = http://curl.haxx.se/mail/lib-2015-12/0023.html | ||||||
|  [4] = https://github.com/bagder/curl/pull/134 |  [4] = http://curl.haxx.se/bug/?i=558 | ||||||
|  [5] = http://curl.haxx.se/mail/lib-2015-01/0036.html |  [5] = http://curl.haxx.se/mail/lib-2015-11/0103.html | ||||||
|  [6] = http://curl.haxx.se/mail/lib-2015-01/0065.html |  [6] = http://curl.haxx.se/bug/?i=555 | ||||||
|  [7] = https://github.com/bagder/curl/pull/137 |  [7] = http://curl.haxx.se/bug/?i=491 | ||||||
|  [8] = http://curl.haxx.se/mail/lib-2015-01/0094.html |  [8] = http://curl.haxx.se/libcurl/c/CURLOPT_HTTP_VERSION.html | ||||||
|  [9] = http://curl.haxx.se/docs/manpage.html#--cert-status |  [9] = http://curl.haxx.se/bug/?i=565 | ||||||
|  [10] = http://curl.haxx.se/libcurl/c/CURLOPT_SSL_VERIFYSTATUS.html |  [10] = http://curl.haxx.se/docs/manpage.html#--expect100-timeout | ||||||
|  [11] = http://curl.haxx.se/bug/view.cgi?id=1471 |  [11] = http://curl.haxx.se/mail/lib-2015-12/0062.html | ||||||
|  [12] = http://curl.haxx.se/bug/view.cgi?id=1476 |  [12] = http://curl.haxx.se/bug/?i=564 | ||||||
|  [13] = http://curl.haxx.se/mail/lib-2015-02/0034.html |  [13] = http://curl.haxx.se/bug/?i=565 | ||||||
|  [14] = http://curl.haxx.se/mail/lib-2015-01/0002.html |  [14] = https://github.com/Alexpux/MINGW-packages/tree/master/mingw-w64-curl | ||||||
|  [15] = https://github.com/bagder/curl/pull/139 |  [15] = https://github.com/Alexpux/MINGW-packages/commit/9253d0bf58a1486e91f7efb5316e7fdb48fa4007 | ||||||
|  [16] = https://bugzilla.redhat.com/1187531 |  [16] = http://curl.haxx.se/bug/?i=574 | ||||||
|  |  [17] = http://curl.haxx.se/bug/?i=575 | ||||||
|  |  [18] = http://curl.haxx.se/bug/?i=577 | ||||||
|  |  [19] = http://curl.haxx.se/bug/?i=586 | ||||||
|  |  [20] = http://curl.haxx.se/bug/?i=564 | ||||||
|  |  [21] = http://curl.haxx.se/bug/?i=592 | ||||||
|  |  [22] = http://curl.haxx.se/bug/?i=564 | ||||||
|  |  [23] = http://curl.haxx.se/mail/lib-2016-01/0031.html | ||||||
|  |  [24] = http://curl.haxx.se/bug/?i=564 | ||||||
|  |  [25] = http://curl.haxx.se/bug/?i=596 | ||||||
|  |  [26] = http://curl.haxx.se/bug/?i=582 | ||||||
|  |  [27] = http://curl.haxx.se/bug/?i=597 | ||||||
|  |  [28] = http://curl.haxx.se/bug/?i=584 | ||||||
|  |  [29] = http://curl.haxx.se/bug/?i=594 | ||||||
|  |  [30] = http://curl.haxx.se/mail/lib-2016-01/0072.html | ||||||
|  |  [31] = http://curl.haxx.se/bug/?i=601 | ||||||
|  |  [32] = http://curl.haxx.se/mail/lib-2016-01/0123.html | ||||||
|  |  [33] = http://curl.haxx.se/docs/adv_20160127B.html | ||||||
|  |  [34] = http://curl.haxx.se/docs/adv_20160127A.html | ||||||
|   | |||||||
							
								
								
									
										81
									
								
								acinclude.m4
									
									
									
									
									
								
							
							
						
						
									
										81
									
								
								acinclude.m4
									
									
									
									
									
								
							| @@ -5,7 +5,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 | ||||||
| @@ -1851,8 +1851,10 @@ AC_DEFUN([CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC], [ | |||||||
|   AC_REQUIRE([AC_HEADER_TIME])dnl |   AC_REQUIRE([AC_HEADER_TIME])dnl | ||||||
|   AC_CHECK_HEADERS(sys/types.h sys/time.h time.h) |   AC_CHECK_HEADERS(sys/types.h sys/time.h time.h) | ||||||
|   AC_MSG_CHECKING([for monotonic clock_gettime]) |   AC_MSG_CHECKING([for monotonic clock_gettime]) | ||||||
|   AC_COMPILE_IFELSE([ |   # | ||||||
|     AC_LANG_PROGRAM([[ |   if test "x$dontwant_rt" == "xno" ; then | ||||||
|  |     AC_COMPILE_IFELSE([ | ||||||
|  |       AC_LANG_PROGRAM([[ | ||||||
| #ifdef HAVE_SYS_TYPES_H | #ifdef HAVE_SYS_TYPES_H | ||||||
| #include <sys/types.h> | #include <sys/types.h> | ||||||
| #endif | #endif | ||||||
| @@ -1866,17 +1868,18 @@ AC_DEFUN([CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC], [ | |||||||
| #include <time.h> | #include <time.h> | ||||||
| #endif | #endif | ||||||
| #endif | #endif | ||||||
|     ]],[[ |       ]],[[ | ||||||
|       struct timespec ts; |         struct timespec ts; | ||||||
|       (void)clock_gettime(CLOCK_MONOTONIC, &ts); |         (void)clock_gettime(CLOCK_MONOTONIC, &ts); | ||||||
|     ]]) |       ]]) | ||||||
|   ],[ |     ],[ | ||||||
|     AC_MSG_RESULT([yes]) |       AC_MSG_RESULT([yes]) | ||||||
|     ac_cv_func_clock_gettime="yes" |       ac_cv_func_clock_gettime="yes" | ||||||
|   ],[ |     ],[ | ||||||
|     AC_MSG_RESULT([no]) |       AC_MSG_RESULT([no]) | ||||||
|     ac_cv_func_clock_gettime="no" |       ac_cv_func_clock_gettime="no" | ||||||
|   ]) |     ]) | ||||||
|  |   fi | ||||||
|   dnl Definition of HAVE_CLOCK_GETTIME_MONOTONIC is intentionally postponed |   dnl Definition of HAVE_CLOCK_GETTIME_MONOTONIC is intentionally postponed | ||||||
|   dnl until library linking and run-time checks for clock_gettime succeed. |   dnl until library linking and run-time checks for clock_gettime succeed. | ||||||
| ]) | ]) | ||||||
| @@ -2452,23 +2455,6 @@ AC_DEFUN([CURL_CHECK_FUNC_SELECT], [ | |||||||
| ]) | ]) | ||||||
|  |  | ||||||
|  |  | ||||||
| # This is only a temporary fix. This macro is here to replace the broken one |  | ||||||
| # delivered by the automake project (including the 1.9.6 release). As soon as |  | ||||||
| # they ship a working version we SHOULD remove this work-around. |  | ||||||
|  |  | ||||||
| AC_DEFUN([AM_MISSING_HAS_RUN], |  | ||||||
| [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl |  | ||||||
| test x"${MISSING+set}" = xset || MISSING="\${SHELL} \"$am_aux_dir/missing\"" |  | ||||||
| # Use eval to expand $SHELL |  | ||||||
| if eval "$MISSING --run true"; then |  | ||||||
|   am_missing_run="$MISSING --run " |  | ||||||
| else |  | ||||||
|   am_missing_run= |  | ||||||
|   AC_MSG_WARN([`missing' script is too old or missing]) |  | ||||||
| fi |  | ||||||
| ]) |  | ||||||
|  |  | ||||||
|  |  | ||||||
| dnl CURL_VERIFY_RUNTIMELIBS | dnl CURL_VERIFY_RUNTIMELIBS | ||||||
| dnl ------------------------------------------------- | dnl ------------------------------------------------- | ||||||
| dnl Verify that the shared libs found so far can be used when running | dnl Verify that the shared libs found so far can be used when running | ||||||
| @@ -2615,8 +2601,8 @@ AC_HELP_STRING([--without-ca-path], [Don't use a default CA path]), | |||||||
|     capath="no" |     capath="no" | ||||||
|   elif test "x$want_capath" != "xno" -a "x$want_capath" != "xunset"; then |   elif test "x$want_capath" != "xno" -a "x$want_capath" != "xunset"; then | ||||||
|     dnl --with-ca-path given |     dnl --with-ca-path given | ||||||
|     if test "x$OPENSSL_ENABLED" != "x1" -a "x$POLARSSL_ENABLED" != "x1"; then |     if test "x$OPENSSL_ENABLED" != "x1" -a "x$GNUTLS_ENABLED" != "x1" -a "x$POLARSSL_ENABLED" != "x1"; then | ||||||
|       AC_MSG_ERROR([--with-ca-path only works with openSSL or PolarSSL]) |       AC_MSG_ERROR([--with-ca-path only works with OpenSSL, GnuTLS or PolarSSL]) | ||||||
|     fi |     fi | ||||||
|     capath="$want_capath" |     capath="$want_capath" | ||||||
|     ca="no" |     ca="no" | ||||||
| @@ -2676,7 +2662,7 @@ AC_HELP_STRING([--without-ca-path], [Don't use a default CA path]), | |||||||
|     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)]) | ||||||
|   fi |   fi | ||||||
|   if test "x$ca" == "xno" && test "x$capath" == "xno"; then |   if test "x$ca" = "xno" && test "x$capath" = "xno"; then | ||||||
|     AC_MSG_RESULT([no]) |     AC_MSG_RESULT([no]) | ||||||
|   fi |   fi | ||||||
| ]) | ]) | ||||||
| @@ -2851,7 +2837,6 @@ AC_DEFUN([CURL_CONFIGURE_CURL_OFF_T], [ | |||||||
|   # |   # | ||||||
|   x_LP64_long="" |   x_LP64_long="" | ||||||
|   x_LP32_long="" |   x_LP32_long="" | ||||||
|   x_LP16_long="" |  | ||||||
|   # |   # | ||||||
|   if test "$ac_cv_sizeof_long" -eq "8" && |   if test "$ac_cv_sizeof_long" -eq "8" && | ||||||
|      test "$ac_cv_sizeof_voidp" -ge "8"; then |      test "$ac_cv_sizeof_voidp" -ge "8"; then | ||||||
| @@ -2859,9 +2844,6 @@ AC_DEFUN([CURL_CONFIGURE_CURL_OFF_T], [ | |||||||
|   elif test "$ac_cv_sizeof_long" -eq "4" && |   elif test "$ac_cv_sizeof_long" -eq "4" && | ||||||
|        test "$ac_cv_sizeof_voidp" -ge "4"; then |        test "$ac_cv_sizeof_voidp" -ge "4"; then | ||||||
|     x_LP32_long="long" |     x_LP32_long="long" | ||||||
|   elif test "$ac_cv_sizeof_long" -eq "2" && |  | ||||||
|        test "$ac_cv_sizeof_voidp" -ge "2"; then |  | ||||||
|     x_LP16_long="long" |  | ||||||
|   fi |   fi | ||||||
|   # |   # | ||||||
|   dnl DO_CURL_OFF_T_CHECK results are stored in next 3 vars |   dnl DO_CURL_OFF_T_CHECK results are stored in next 3 vars | ||||||
| @@ -2895,17 +2877,6 @@ AC_DEFUN([CURL_CONFIGURE_CURL_OFF_T], [ | |||||||
|     done |     done | ||||||
|     AC_MSG_RESULT([$curl_typeof_curl_off_t]) |     AC_MSG_RESULT([$curl_typeof_curl_off_t]) | ||||||
|   fi |   fi | ||||||
|   if test "$curl_typeof_curl_off_t" = "unknown"; then |  | ||||||
|     AC_MSG_CHECKING([for 16-bit curl_off_t data type]) |  | ||||||
|     for t2 in          \ |  | ||||||
|       "$x_LP16_long"   \ |  | ||||||
|       'int16_t'        \ |  | ||||||
|       '__int16'        \ |  | ||||||
|       'int'            ; do |  | ||||||
|       DO_CURL_OFF_T_CHECK([$t2], [2]) |  | ||||||
|     done |  | ||||||
|     AC_MSG_RESULT([$curl_typeof_curl_off_t]) |  | ||||||
|   fi |  | ||||||
|   if test "$curl_typeof_curl_off_t" = "unknown"; then |   if test "$curl_typeof_curl_off_t" = "unknown"; then | ||||||
|     AC_MSG_ERROR([cannot find data type for curl_off_t.]) |     AC_MSG_ERROR([cannot find data type for curl_off_t.]) | ||||||
|   fi |   fi | ||||||
| @@ -3066,12 +3037,14 @@ dnl Optionally PKG_CONFIG_LIBDIR may be given as $pcdir. | |||||||
| dnl | dnl | ||||||
|  |  | ||||||
| AC_DEFUN([CURL_CHECK_PKGCONFIG], [ | AC_DEFUN([CURL_CHECK_PKGCONFIG], [ | ||||||
|  |     if test -n "$PKG_CONFIG"; then | ||||||
|  |       PKGCONFIG="$PKG_CONFIG" | ||||||
|  |     else | ||||||
|  |       AC_PATH_TOOL([PKGCONFIG], [pkg-config], [no], | ||||||
|  |         [$PATH:/usr/bin:/usr/local/bin]) | ||||||
|  |     fi | ||||||
|  |  | ||||||
|     PKGCONFIG="no" |     if test "x$PKGCONFIG" != "xno"; then | ||||||
|  |  | ||||||
|     AC_PATH_TOOL( PKGCONFIG, pkg-config, no, $PATH:/usr/bin:/usr/local/bin) |  | ||||||
|  |  | ||||||
|     if test x$PKGCONFIG != xno; then |  | ||||||
|       AC_MSG_CHECKING([for $1 options with pkg-config]) |       AC_MSG_CHECKING([for $1 options with pkg-config]) | ||||||
|       dnl ask pkg-config about $1 |       dnl ask pkg-config about $1 | ||||||
|       itexists=`CURL_EXPORT_PCDIR([$2]) dnl |       itexists=`CURL_EXPORT_PCDIR([$2]) dnl | ||||||
|   | |||||||
							
								
								
									
										19
									
								
								appveyor.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								appveyor.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | |||||||
|  | version: 7.45.0.{build} | ||||||
|  |  | ||||||
|  | environment: | ||||||
|  |     matrix: | ||||||
|  |       - PRJ_GEN: "Visual Studio 11 2012 Win64" | ||||||
|  |         BDIR: msvc2012 | ||||||
|  |         PRJ_CFG: Release | ||||||
|  |       - PRJ_GEN: "Visual Studio 12 2013 Win64" | ||||||
|  |         BDIR: msvc2013 | ||||||
|  |         PRJ_CFG: Release | ||||||
|  |       - PRJ_GEN: "Visual Studio 14 2015 Win64" | ||||||
|  |         BDIR: msvc2015 | ||||||
|  |         PRJ_CFG: Release | ||||||
|  |  | ||||||
|  | build_script: | ||||||
|  |     - mkdir build.%BDIR% | ||||||
|  |     - cd build.%BDIR% | ||||||
|  |     - cmake .. -G"%PRJ_GEN%" | ||||||
|  |     - cmake --build . --config %PRJ_CFG% --clean-first | ||||||
| @@ -318,6 +318,8 @@ for fname in .deps \ | |||||||
|     ltsugar.m4 \ |     ltsugar.m4 \ | ||||||
|     ltversion.m4 \ |     ltversion.m4 \ | ||||||
|     lt~obsolete.m4 \ |     lt~obsolete.m4 \ | ||||||
|  |     missing \ | ||||||
|  |     install-sh \ | ||||||
|     stamp-h1 \ |     stamp-h1 \ | ||||||
|     stamp-h2 \ |     stamp-h2 \ | ||||||
|     stamp-h3 ; do |     stamp-h3 ; do | ||||||
| @@ -329,7 +331,7 @@ done | |||||||
| # | # | ||||||
|  |  | ||||||
| echo "buildconf: running libtoolize" | echo "buildconf: running libtoolize" | ||||||
| ${libtoolize} --copy --automake --force || die "libtoolize command failed" | ${libtoolize} --copy --force || die "libtoolize command failed" | ||||||
|  |  | ||||||
| # When using libtool 1.5.X (X < 26) we copy libtool.m4 to our local m4 | # When using libtool 1.5.X (X < 26) we copy libtool.m4 to our local m4 | ||||||
| # subdirectory and this local copy is patched to fix some warnings that | # subdirectory and this local copy is patched to fix some warnings that | ||||||
|   | |||||||
							
								
								
									
										374
									
								
								buildconf.bat
									
									
									
									
									
								
							
							
						
						
									
										374
									
								
								buildconf.bat
									
									
									
									
									
								
							| @@ -1,38 +1,352 @@ | |||||||
| @echo off | @echo off | ||||||
| REM | rem *************************************************************************** | ||||||
| REM | rem *                                  _   _ ____  _ | ||||||
| REM This batch file must be used to set up a git tree to build on | rem *  Project                     ___| | | |  _ \| | | ||||||
| REM systems where there is no autotools support (i.e. Microsoft). | rem *                             / __| | | | |_) | | | ||||||
| REM | rem *                            | (__| |_| |  _ <| |___ | ||||||
| REM This file is not included nor needed for curl's release | rem *                             \___|\___/|_| \_\_____| | ||||||
| REM archives, neither for curl's daily snapshot archives. | rem * | ||||||
|  | rem * Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||||
|  | rem * | ||||||
|  | rem * This software is licensed as described in the file COPYING, which | ||||||
|  | rem * you should have received as part of this distribution. The terms | ||||||
|  | rem * are also available at http://curl.haxx.se/docs/copyright.html. | ||||||
|  | rem * | ||||||
|  | rem * You may opt to use, copy, modify, merge, publish, distribute and/or sell | ||||||
|  | rem * copies of the Software, and permit persons to whom the Software is | ||||||
|  | rem * furnished to do so, under the terms of the COPYING file. | ||||||
|  | rem * | ||||||
|  | rem * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||||||
|  | rem * KIND, either express or implied. | ||||||
|  | rem * | ||||||
|  | rem *************************************************************************** | ||||||
|  |  | ||||||
| if exist GIT-INFO goto start_doing | rem NOTES | ||||||
| ECHO ERROR: This file shall only be used with a curl git tree checkout. | rem | ||||||
| goto end_all | rem This batch file must be used to set up a git tree to build on systems where | ||||||
| :start_doing | rem there is no autotools support (i.e. DOS and Windows). | ||||||
|  | rem | ||||||
|  | rem This file is not included or required for curl's release archives or daily  | ||||||
|  | rem snapshot archives. | ||||||
|  |  | ||||||
| REM create tool_hugehelp.c | :begin | ||||||
| if not exist src\tool_hugehelp.c.cvs goto end_hugehelp_c |   rem Set our variables | ||||||
| copy /Y src\tool_hugehelp.c.cvs src\tool_hugehelp.c |   if "%OS%" == "Windows_NT" setlocal | ||||||
| :end_hugehelp_c |   set MODE=GENERATE | ||||||
|  |  | ||||||
| REM create Makefile |   rem Switch to this batch file's directory | ||||||
| if not exist Makefile.dist goto end_makefile |   cd /d "%~0\.." 1>NUL 2>&1 | ||||||
| copy /Y Makefile.dist Makefile |  | ||||||
| :end_makefile |  | ||||||
|  |  | ||||||
| REM create curlbuild.h |   rem Check we are running from a curl git repository | ||||||
| if not exist include\curl\curlbuild.h.dist goto end_curlbuild_h |   if not exist GIT-INFO goto norepo | ||||||
| copy /Y include\curl\curlbuild.h.dist include\curl\curlbuild.h |  | ||||||
| :end_curlbuild_h |  | ||||||
|  |  | ||||||
| REM setup c-ares git tree |   rem Detect programs. HAVE_<PROGNAME> | ||||||
| if not exist ares\buildconf.bat goto end_c_ares |   rem When not found the variable is set undefined. The undefined pattern | ||||||
| cd ares |   rem allows for statements like "if not defined HAVE_PERL (command)" | ||||||
| call buildconf.bat |   groff --version <NUL 1>NUL 2>&1 | ||||||
| cd .. |   if errorlevel 1 (set HAVE_GROFF=) else (set HAVE_GROFF=Y) | ||||||
| :end_c_ares |   nroff --version <NUL 1>NUL 2>&1 | ||||||
|  |   if errorlevel 1 (set HAVE_NROFF=) else (set HAVE_NROFF=Y) | ||||||
|  |   perl --version <NUL 1>NUL 2>&1 | ||||||
|  |   if errorlevel 1 (set HAVE_PERL=) else (set HAVE_PERL=Y) | ||||||
|  |   gzip --version <NUL 1>NUL 2>&1 | ||||||
|  |   if errorlevel 1 (set HAVE_GZIP=) else (set HAVE_GZIP=Y) | ||||||
|  |  | ||||||
| :end_all | :parseArgs | ||||||
|  |   if "%~1" == "" goto start | ||||||
|  |  | ||||||
|  |   if /i "%~1" == "-clean" ( | ||||||
|  |     set MODE=CLEAN | ||||||
|  |   ) else if /i "%~1" == "-?" ( | ||||||
|  |     goto syntax | ||||||
|  |   ) else if /i "%~1" == "-h" ( | ||||||
|  |     goto syntax | ||||||
|  |   ) else if /i "%~1" == "-help" ( | ||||||
|  |     goto syntax | ||||||
|  |   ) else ( | ||||||
|  |     goto unknown | ||||||
|  |   ) | ||||||
|  |  | ||||||
|  |   shift & goto parseArgs | ||||||
|  |  | ||||||
|  | :start | ||||||
|  |   if "%MODE%" == "GENERATE" ( | ||||||
|  |     echo. | ||||||
|  |     echo Generating prerequisite files | ||||||
|  |  | ||||||
|  |     call :generate | ||||||
|  |     if errorlevel 4 goto nogencurlbuild | ||||||
|  |     if errorlevel 3 goto nogenhugehelp | ||||||
|  |     if errorlevel 2 goto nogenmakefile | ||||||
|  |     if errorlevel 1 goto warning | ||||||
|  |  | ||||||
|  |   ) else ( | ||||||
|  |     echo. | ||||||
|  |     echo Removing prerequisite files | ||||||
|  |  | ||||||
|  |     call :clean | ||||||
|  |     if errorlevel 3 goto nocleancurlbuild | ||||||
|  |     if errorlevel 2 goto nocleanhugehelp | ||||||
|  |     if errorlevel 1 goto nocleanmakefile | ||||||
|  |   ) | ||||||
|  |  | ||||||
|  |   goto success | ||||||
|  |  | ||||||
|  | rem Main generate function. | ||||||
|  | rem | ||||||
|  | rem Returns: | ||||||
|  | rem | ||||||
|  | rem 0 - success | ||||||
|  | rem 1 - success with simplified tool_hugehelp.c  | ||||||
|  | rem 2 - failed to generate Makefile | ||||||
|  | rem 3 - failed to generate tool_hugehelp.c | ||||||
|  | rem 4 - failed to generate curlbuild.h | ||||||
|  | rem | ||||||
|  | :generate | ||||||
|  |   if "%OS%" == "Windows_NT" setlocal | ||||||
|  |   set BASIC_HUGEHELP=0 | ||||||
|  |  | ||||||
|  |   rem Create Makefile | ||||||
|  |   echo * %CD%\Makefile | ||||||
|  |   if exist Makefile.dist ( | ||||||
|  |     copy /Y Makefile.dist Makefile 1>NUL 2>&1 | ||||||
|  |     if errorlevel 1 ( | ||||||
|  |       if "%OS%" == "Windows_NT" endlocal | ||||||
|  |       exit /B 2 | ||||||
|  |     ) | ||||||
|  |   ) | ||||||
|  |  | ||||||
|  |   rem Create tool_hugehelp.c | ||||||
|  |   echo * %CD%\src\tool_hugehelp.c | ||||||
|  |   call :genHugeHelp | ||||||
|  |   if errorlevel 2 ( | ||||||
|  |     if "%OS%" == "Windows_NT" endlocal | ||||||
|  |     exit /B 3 | ||||||
|  |   ) | ||||||
|  |   if errorlevel 1 ( | ||||||
|  |     set BASIC_HUGEHELP=1 | ||||||
|  |   ) | ||||||
|  |   cmd /c exit 0 | ||||||
|  |  | ||||||
|  |   rem Create curlbuild.h | ||||||
|  |   echo * %CD%\include\curl\curlbuild.h | ||||||
|  |   if exist include\curl\curlbuild.h.dist ( | ||||||
|  |     copy /Y include\curl\curlbuild.h.dist include\curl\curlbuild.h 1>NUL 2>&1 | ||||||
|  |     if errorlevel 1 ( | ||||||
|  |       if "%OS%" == "Windows_NT" endlocal | ||||||
|  |       exit /B 4 | ||||||
|  |     ) | ||||||
|  |   ) | ||||||
|  |  | ||||||
|  |   rem Setup c-ares git tree | ||||||
|  |   if exist ares\buildconf.bat ( | ||||||
|  |     echo. | ||||||
|  |     echo Configuring c-ares build environment | ||||||
|  |     cd ares | ||||||
|  |     call buildconf.bat | ||||||
|  |     cd .. | ||||||
|  |   ) | ||||||
|  |  | ||||||
|  |   if "%BASIC_HUGEHELP%" == "1" ( | ||||||
|  |     if "%OS%" == "Windows_NT" endlocal | ||||||
|  |     exit /B 1 | ||||||
|  |   ) | ||||||
|  |  | ||||||
|  |   if "%OS%" == "Windows_NT" endlocal | ||||||
|  |   exit /B 0 | ||||||
|  |  | ||||||
|  | rem Main clean function. | ||||||
|  | rem | ||||||
|  | rem Returns: | ||||||
|  | rem | ||||||
|  | rem 0 - success | ||||||
|  | rem 1 - failed to clean Makefile | ||||||
|  | rem 2 - failed to clean tool_hugehelp.c | ||||||
|  | rem 3 - failed to clean curlbuild.h | ||||||
|  | rem | ||||||
|  | :clean | ||||||
|  |   rem Remove Makefile | ||||||
|  |   echo * %CD%\Makefile | ||||||
|  |   if exist Makefile ( | ||||||
|  |     del Makefile 2>NUL | ||||||
|  |     if exist Makefile ( | ||||||
|  |       exit /B 1 | ||||||
|  |     ) | ||||||
|  |   ) | ||||||
|  |  | ||||||
|  |   rem Remove tool_hugehelp.c | ||||||
|  |   echo * %CD%\src\tool_hugehelp.c | ||||||
|  |   if exist src\tool_hugehelp.c ( | ||||||
|  |     del src\tool_hugehelp.c 2>NUL | ||||||
|  |     if exist src\tool_hugehelp.c ( | ||||||
|  |       exit /B 2 | ||||||
|  |     ) | ||||||
|  |   ) | ||||||
|  |  | ||||||
|  |   rem Remove curlbuild.h | ||||||
|  |   echo * %CD%\include\curl\curlbuild.h | ||||||
|  |   if exist include\curl\curlbuild.h ( | ||||||
|  |     del include\curl\curlbuild.h 2>NUL | ||||||
|  |     if exist include\curl\curlbuild.h ( | ||||||
|  |       exit /B 3 | ||||||
|  |     ) | ||||||
|  |   ) | ||||||
|  |  | ||||||
|  |   exit /B | ||||||
|  |  | ||||||
|  | rem Function to generate src\tool_hugehelp.c | ||||||
|  | rem | ||||||
|  | rem Returns: | ||||||
|  | rem | ||||||
|  | rem 0 - full tool_hugehelp.c generated | ||||||
|  | rem 1 - simplified tool_hugehelp.c | ||||||
|  | rem 2 - failure | ||||||
|  | rem | ||||||
|  | :genHugeHelp | ||||||
|  |   if "%OS%" == "Windows_NT" setlocal | ||||||
|  |   set LC_ALL=C | ||||||
|  |   set ROFFCMD= | ||||||
|  |   set BASIC=1 | ||||||
|  |  | ||||||
|  |   if defined HAVE_PERL ( | ||||||
|  |     if defined HAVE_GROFF ( | ||||||
|  |       set ROFFCMD=groff -mtty-char -Tascii -P-c -man | ||||||
|  |     ) else if defined HAVE_NROFF ( | ||||||
|  |       set ROFFCMD=nroff -c -Tascii -man | ||||||
|  |     ) | ||||||
|  |   ) | ||||||
|  |  | ||||||
|  |   if defined ROFFCMD ( | ||||||
|  |     echo #include "tool_setup.h"> src\tool_hugehelp.c | ||||||
|  |     echo #include "tool_hugehelp.h">> src\tool_hugehelp.c  | ||||||
|  |  | ||||||
|  |     if defined HAVE_GZIP ( | ||||||
|  |       echo #ifndef HAVE_LIBZ>> src\tool_hugehelp.c | ||||||
|  |     ) | ||||||
|  |  | ||||||
|  |     %ROFFCMD% docs\curl.1 2>NUL | perl src\mkhelp.pl docs\MANUAL >> src\tool_hugehelp.c | ||||||
|  |     if defined HAVE_GZIP ( | ||||||
|  |       echo #else>> src\tool_hugehelp.c | ||||||
|  |       %ROFFCMD% docs\curl.1 2>NUL | perl src\mkhelp.pl -c docs\MANUAL >> src\tool_hugehelp.c | ||||||
|  |       echo #endif /^* HAVE_LIBZ ^*/>> src\tool_hugehelp.c | ||||||
|  |     ) | ||||||
|  |  | ||||||
|  |     set BASIC=0 | ||||||
|  |   ) else ( | ||||||
|  |     if exist src\tool_hugehelp.c.cvs ( | ||||||
|  |       copy /Y src\tool_hugehelp.c.cvs src\tool_hugehelp.c 1>NUL 2>&1 | ||||||
|  |     ) else ( | ||||||
|  |       echo #include "tool_setup.h"> src\tool_hugehelp.c | ||||||
|  |       echo #include "tool_hugehelp.hd">> src\tool_hugehelp.c | ||||||
|  |       echo.>> src\tool_hugehelp.c | ||||||
|  |       echo void hugehelp(void^)>> src\tool_hugehelp.c | ||||||
|  |       echo {>> src\tool_hugehelp.c | ||||||
|  |       echo #ifdef USE_MANUAL>> src\tool_hugehelp.c | ||||||
|  |       echo   fputs("Built-in manual not included\n", stdout^);>> src\tool_hugehelp.c | ||||||
|  |       echo #endif>> src\tool_hugehelp.c | ||||||
|  |       echo }>> src\tool_hugehelp.c | ||||||
|  |     ) | ||||||
|  |   ) | ||||||
|  |  | ||||||
|  |   findstr "/C:void hugehelp(void)" src\tool_hugehelp.c 1>NUL 2>&1 | ||||||
|  |   if errorlevel 1 ( | ||||||
|  |     if "%OS%" == "Windows_NT" endlocal | ||||||
|  |     exit /B 2 | ||||||
|  |   ) | ||||||
|  |  | ||||||
|  |   if "%BASIC%" == "1" ( | ||||||
|  |     if "%OS%" == "Windows_NT" endlocal | ||||||
|  |     exit /B 1 | ||||||
|  |   ) | ||||||
|  |  | ||||||
|  |   if "%OS%" == "Windows_NT" endlocal | ||||||
|  |   exit /B 0 | ||||||
|  |  | ||||||
|  | rem Function to clean-up local variables under DOS, Windows 3.x and | ||||||
|  | rem Windows 9x as setlocal isn't available until Windows NT | ||||||
|  | rem | ||||||
|  | :dosCleanup | ||||||
|  |   set MODE= | ||||||
|  |   set HAVE_GROFF= | ||||||
|  |   set HAVE_NROFF= | ||||||
|  |   set HAVE_PERL= | ||||||
|  |   set HAVE_GZIP= | ||||||
|  |   set BASIC_HUGEHELP= | ||||||
|  |   set LC_ALL | ||||||
|  |   set ROFFCMD= | ||||||
|  |   set BASIC= | ||||||
|  |  | ||||||
|  |   exit /B | ||||||
|  |  | ||||||
|  | :syntax | ||||||
|  |   rem Display the help | ||||||
|  |   echo. | ||||||
|  |   echo Usage: buildconf [-clean] | ||||||
|  |   echo. | ||||||
|  |   echo -clean    - Removes the files | ||||||
|  |   goto error | ||||||
|  |  | ||||||
|  | :unknown | ||||||
|  |   echo. | ||||||
|  |   echo Error: Unknown argument '%1' | ||||||
|  |   goto error | ||||||
|  |  | ||||||
|  | :norepo | ||||||
|  |   echo. | ||||||
|  |   echo Error: This batch file should only be used with a curl git repository | ||||||
|  |   goto error | ||||||
|  |  | ||||||
|  | :nogenmakefile | ||||||
|  |   echo. | ||||||
|  |   echo Error: Unable to generate Makefile | ||||||
|  |   goto error | ||||||
|  |  | ||||||
|  | :nogenhugehelp | ||||||
|  |   echo. | ||||||
|  |   echo Error: Unable to generate src\tool_hugehelp.c | ||||||
|  |   goto error | ||||||
|  |  | ||||||
|  | :nogencurlbuild | ||||||
|  |   echo. | ||||||
|  |   echo Error: Unable to generate include\curl\curlbuild.h | ||||||
|  |   goto error | ||||||
|  |  | ||||||
|  | :nocleanmakefile | ||||||
|  |   echo. | ||||||
|  |   echo Error: Unable to clean Makefile | ||||||
|  |   goto error | ||||||
|  |  | ||||||
|  | :nocleanhugehelp | ||||||
|  |   echo. | ||||||
|  |   echo Error: Unable to clean src\tool_hugehelp.c | ||||||
|  |   goto error | ||||||
|  |  | ||||||
|  | :nocleancurlbuild | ||||||
|  |   echo. | ||||||
|  |   echo Error: Unable to clean include\curl\curlbuild.h | ||||||
|  |   goto error | ||||||
|  |  | ||||||
|  | :warning | ||||||
|  |   echo. | ||||||
|  |   echo Warning: The curl manual could not be integrated in the source. This means when | ||||||
|  |   echo you build curl the manual will not be available (curl --man^). Integration of | ||||||
|  |   echo the manual is not required and a summary of the options will still be available | ||||||
|  |   echo (curl --help^). To integrate the manual your PATH is required to have | ||||||
|  |   echo groff/nroff, perl and optionally gzip for compression. | ||||||
|  |   goto success | ||||||
|  |  | ||||||
|  | :error | ||||||
|  |   if "%OS%" == "Windows_NT" ( | ||||||
|  |     endlocal | ||||||
|  |   ) else ( | ||||||
|  |     call :dosCleanup | ||||||
|  |   ) | ||||||
|  |   exit /B 1 | ||||||
|  |  | ||||||
|  | :success | ||||||
|  |   if "%OS%" == "Windows_NT" ( | ||||||
|  |     endlocal | ||||||
|  |   ) else ( | ||||||
|  |     call :dosCleanup | ||||||
|  |   ) | ||||||
|  |   exit /B 0 | ||||||
|   | |||||||
							
								
								
									
										493
									
								
								configure.ac
									
									
									
									
									
								
							
							
						
						
									
										493
									
								
								configure.ac
									
									
									
									
									
								
							| @@ -5,7 +5,7 @@ | |||||||
| #                            | (__| |_| |  _ <| |___ | #                            | (__| |_| |  _ <| |___ | ||||||
| #                             \___|\___/|_| \_\_____| | #                             \___|\___/|_| \_\_____| | ||||||
| # | # | ||||||
| # Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. | # Copyright (C) 1998 - 2016, 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 | ||||||
| @@ -39,6 +39,7 @@ AC_CONFIG_SRCDIR([lib/urldata.h]) | |||||||
| AC_CONFIG_HEADERS(lib/curl_config.h include/curl/curlbuild.h) | AC_CONFIG_HEADERS(lib/curl_config.h include/curl/curlbuild.h) | ||||||
| AC_CONFIG_MACRO_DIR([m4]) | AC_CONFIG_MACRO_DIR([m4]) | ||||||
| AM_MAINTAINER_MODE | AM_MAINTAINER_MODE | ||||||
|  | m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) | ||||||
|  |  | ||||||
| CURL_CHECK_OPTION_DEBUG | CURL_CHECK_OPTION_DEBUG | ||||||
| CURL_CHECK_OPTION_OPTIMIZE | CURL_CHECK_OPTION_OPTIMIZE | ||||||
| @@ -47,6 +48,7 @@ CURL_CHECK_OPTION_WERROR | |||||||
| CURL_CHECK_OPTION_CURLDEBUG | CURL_CHECK_OPTION_CURLDEBUG | ||||||
| CURL_CHECK_OPTION_SYMBOL_HIDING | CURL_CHECK_OPTION_SYMBOL_HIDING | ||||||
| CURL_CHECK_OPTION_ARES | CURL_CHECK_OPTION_ARES | ||||||
|  | CURL_CHECK_OPTION_RT | ||||||
|  |  | ||||||
| XC_CHECK_PATH_SEPARATOR | XC_CHECK_PATH_SEPARATOR | ||||||
|  |  | ||||||
| @@ -147,7 +149,7 @@ AC_SUBST(PKGADD_VENDOR) | |||||||
|  |  | ||||||
| dnl | dnl | ||||||
| dnl initialize all the info variables | dnl initialize all the info variables | ||||||
|     curl_ssl_msg="no      (--with-{ssl,gnutls,nss,polarssl,cyassl,axtls,winssl,darwinssl} )" |     curl_ssl_msg="no      (--with-{ssl,gnutls,nss,polarssl,mbedtls,cyassl,axtls,winssl,darwinssl} )" | ||||||
|     curl_ssh_msg="no      (--with-libssh2)" |     curl_ssh_msg="no      (--with-libssh2)" | ||||||
|    curl_zlib_msg="no      (--with-zlib)" |    curl_zlib_msg="no      (--with-zlib)" | ||||||
|     curl_gss_msg="no      (--with-gssapi)" |     curl_gss_msg="no      (--with-gssapi)" | ||||||
| @@ -165,6 +167,7 @@ curl_verbose_msg="enabled (--disable-verbose)" | |||||||
|    curl_rtsp_msg="no      (--enable-rtsp)" |    curl_rtsp_msg="no      (--enable-rtsp)" | ||||||
|    curl_rtmp_msg="no      (--with-librtmp)" |    curl_rtmp_msg="no      (--with-librtmp)" | ||||||
|   curl_mtlnk_msg="no      (--with-libmetalink)" |   curl_mtlnk_msg="no      (--with-libmetalink)" | ||||||
|  |     curl_psl_msg="no      (--with-libpsl)" | ||||||
|  |  | ||||||
|     init_ssl_msg=${curl_ssl_msg} |     init_ssl_msg=${curl_ssl_msg} | ||||||
|  |  | ||||||
| @@ -1080,7 +1083,11 @@ AC_HELP_STRING([--disable-ipv6],[Disable IPv6 support]), | |||||||
|  |  | ||||||
|   AC_TRY_RUN([ /* is AF_INET6 available? */ |   AC_TRY_RUN([ /* is AF_INET6 available? */ | ||||||
| #include <sys/types.h> | #include <sys/types.h> | ||||||
|  | #ifdef HAVE_WINSOCK2_H | ||||||
|  | #include <winsock2.h> | ||||||
|  | #else | ||||||
| #include <sys/socket.h> | #include <sys/socket.h> | ||||||
|  | #endif | ||||||
| #include <stdlib.h> /* for exit() */ | #include <stdlib.h> /* for exit() */ | ||||||
| main() | main() | ||||||
| { | { | ||||||
| @@ -1094,8 +1101,8 @@ main() | |||||||
|   ipv6=yes, |   ipv6=yes, | ||||||
|   AC_MSG_RESULT(no) |   AC_MSG_RESULT(no) | ||||||
|   ipv6=no, |   ipv6=no, | ||||||
|   AC_MSG_RESULT(no) |   AC_MSG_RESULT(yes) | ||||||
|   ipv6=no |   ipv6=yes | ||||||
| )) | )) | ||||||
|  |  | ||||||
| if test "$ipv6" = "yes"; then | if test "$ipv6" = "yes"; then | ||||||
| @@ -1107,7 +1114,12 @@ if test "$ipv6" = yes; then | |||||||
|   AC_MSG_CHECKING([if struct sockaddr_in6 has sin6_scope_id member]) |   AC_MSG_CHECKING([if struct sockaddr_in6 has sin6_scope_id member]) | ||||||
|   AC_TRY_COMPILE([ |   AC_TRY_COMPILE([ | ||||||
| #include <sys/types.h> | #include <sys/types.h> | ||||||
| #include <netinet/in.h>] , | #ifdef HAVE_WINSOCK2_H | ||||||
|  | #include <winsock2.h> | ||||||
|  | #include <ws2tcpip.h> | ||||||
|  | #else | ||||||
|  | #include <netinet/in.h> | ||||||
|  | #endif] , | ||||||
|   struct sockaddr_in6 s; s.sin6_scope_id = 0; , have_sin6_scope_id=yes) |   struct sockaddr_in6 s; s.sin6_scope_id = 0; , have_sin6_scope_id=yes) | ||||||
|   if test "$have_sin6_scope_id" = yes; then |   if test "$have_sin6_scope_id" = yes; then | ||||||
|     AC_MSG_RESULT([yes]) |     AC_MSG_RESULT([yes]) | ||||||
| @@ -1184,6 +1196,8 @@ AC_ARG_WITH(gssapi, | |||||||
|   fi |   fi | ||||||
| ]) | ]) | ||||||
|  |  | ||||||
|  | : ${KRB5CONFIG:="$GSSAPI_ROOT/bin/krb5-config"} | ||||||
|  |  | ||||||
| save_CPPFLAGS="$CPPFLAGS" | save_CPPFLAGS="$CPPFLAGS" | ||||||
| AC_MSG_CHECKING([if GSS-API support is requested]) | AC_MSG_CHECKING([if GSS-API support is requested]) | ||||||
| if test x"$want_gss" = xyes; then | if test x"$want_gss" = xyes; then | ||||||
| @@ -1192,8 +1206,8 @@ if test x"$want_gss" = xyes; then | |||||||
|   if test -z "$GSSAPI_INCS"; then |   if test -z "$GSSAPI_INCS"; then | ||||||
|      if test -n "$host_alias" -a -f "$GSSAPI_ROOT/bin/$host_alias-krb5-config"; then |      if test -n "$host_alias" -a -f "$GSSAPI_ROOT/bin/$host_alias-krb5-config"; then | ||||||
|         GSSAPI_INCS=`$GSSAPI_ROOT/bin/$host_alias-krb5-config --cflags gssapi` |         GSSAPI_INCS=`$GSSAPI_ROOT/bin/$host_alias-krb5-config --cflags gssapi` | ||||||
|      elif test -f "$GSSAPI_ROOT/bin/krb5-config"; then |      elif test -f "$KRB5CONFIG"; then | ||||||
|         GSSAPI_INCS=`$GSSAPI_ROOT/bin/krb5-config --cflags gssapi` |         GSSAPI_INCS=`$KRB5CONFIG --cflags gssapi` | ||||||
|      elif test "$GSSAPI_ROOT" != "yes"; then |      elif test "$GSSAPI_ROOT" != "yes"; then | ||||||
|         GSSAPI_INCS="-I$GSSAPI_ROOT/include" |         GSSAPI_INCS="-I$GSSAPI_ROOT/include" | ||||||
|      fi |      fi | ||||||
| @@ -1283,10 +1297,10 @@ if test x"$want_gss" = xyes; then | |||||||
|            dnl into LIBS |            dnl into LIBS | ||||||
|            gss_libs=`$GSSAPI_ROOT/bin/$host_alias-krb5-config --libs gssapi` |            gss_libs=`$GSSAPI_ROOT/bin/$host_alias-krb5-config --libs gssapi` | ||||||
|            LIBS="$gss_libs $LIBS" |            LIBS="$gss_libs $LIBS" | ||||||
|         elif test -f "$GSSAPI_ROOT/bin/krb5-config"; then |         elif test -f "$KRB5CONFIG"; then | ||||||
|            dnl krb5-config doesn't have --libs-only-L or similar, put everything |            dnl krb5-config doesn't have --libs-only-L or similar, put everything | ||||||
|            dnl into LIBS |            dnl into LIBS | ||||||
|            gss_libs=`$GSSAPI_ROOT/bin/krb5-config --libs gssapi` |            gss_libs=`$KRB5CONFIG --libs gssapi` | ||||||
|            LIBS="$gss_libs $LIBS" |            LIBS="$gss_libs $LIBS" | ||||||
|         else |         else | ||||||
|            case $host in |            case $host in | ||||||
| @@ -1394,6 +1408,24 @@ if test "$curl_ssl_msg" = "$init_ssl_msg" && test X"$OPT_SSL" != Xno; then | |||||||
|   CLEANCPPFLAGS="$CPPFLAGS" |   CLEANCPPFLAGS="$CPPFLAGS" | ||||||
|   CLEANLIBS="$LIBS" |   CLEANLIBS="$LIBS" | ||||||
|  |  | ||||||
|  |   dnl This is for Msys/Mingw | ||||||
|  |   case $host in | ||||||
|  |     *-*-msys* | *-*-mingw*) | ||||||
|  |       AC_MSG_CHECKING([for gdi32]) | ||||||
|  |       my_ac_save_LIBS=$LIBS | ||||||
|  |       LIBS="-lgdi32 $LIBS" | ||||||
|  |       AC_TRY_LINK([#include <windef.h> | ||||||
|  |                    #include <wingdi.h>], | ||||||
|  |                    [GdiFlush();], | ||||||
|  |                    [ dnl worked! | ||||||
|  |                    AC_MSG_RESULT([yes])], | ||||||
|  |                    [ dnl failed, restore LIBS | ||||||
|  |                    LIBS=$my_ac_save_LIBS | ||||||
|  |                    AC_MSG_RESULT(no)] | ||||||
|  |                   ) | ||||||
|  |       ;; | ||||||
|  |   esac | ||||||
|  |  | ||||||
|   case "$OPT_SSL" in |   case "$OPT_SSL" in | ||||||
|   yes) |   yes) | ||||||
|     dnl --with-ssl (without path) used |     dnl --with-ssl (without path) used | ||||||
| @@ -1451,6 +1483,7 @@ if test "$curl_ssl_msg" = "$init_ssl_msg" && test X"$OPT_SSL" != Xno; then | |||||||
|       SSL_CPPFLAGS=`CURL_EXPORT_PCDIR([$OPENSSL_PCDIR]) dnl |       SSL_CPPFLAGS=`CURL_EXPORT_PCDIR([$OPENSSL_PCDIR]) dnl | ||||||
|         $PKGCONFIG --cflags-only-I openssl 2>/dev/null` |         $PKGCONFIG --cflags-only-I openssl 2>/dev/null` | ||||||
|  |  | ||||||
|  |       AC_SUBST(SSL_LIBS) | ||||||
|       AC_MSG_NOTICE([pkg-config: SSL_LIBS: "$SSL_LIBS"]) |       AC_MSG_NOTICE([pkg-config: SSL_LIBS: "$SSL_LIBS"]) | ||||||
|       AC_MSG_NOTICE([pkg-config: SSL_LDFLAGS: "$SSL_LDFLAGS"]) |       AC_MSG_NOTICE([pkg-config: SSL_LDFLAGS: "$SSL_LDFLAGS"]) | ||||||
|       AC_MSG_NOTICE([pkg-config: SSL_CPPFLAGS: "$SSL_CPPFLAGS"]) |       AC_MSG_NOTICE([pkg-config: SSL_CPPFLAGS: "$SSL_CPPFLAGS"]) | ||||||
| @@ -1471,31 +1504,13 @@ if test "$curl_ssl_msg" = "$init_ssl_msg" && test X"$OPT_SSL" != Xno; then | |||||||
|   CPPFLAGS="$CPPFLAGS $SSL_CPPFLAGS" |   CPPFLAGS="$CPPFLAGS $SSL_CPPFLAGS" | ||||||
|   LDFLAGS="$LDFLAGS $SSL_LDFLAGS" |   LDFLAGS="$LDFLAGS $SSL_LDFLAGS" | ||||||
|  |  | ||||||
|   dnl This is for Msys/Mingw |   AC_CHECK_LIB(crypto, HMAC_Update,[ | ||||||
|   case $host in |  | ||||||
|     *-*-msys* | *-*-mingw*) |  | ||||||
|       AC_MSG_CHECKING([for gdi32]) |  | ||||||
|       my_ac_save_LIBS=$LIBS |  | ||||||
|       LIBS="-lgdi32 $LIBS" |  | ||||||
|       AC_TRY_LINK([#include <windef.h> |  | ||||||
|                    #include <wingdi.h>], |  | ||||||
|                    [GdiFlush();], |  | ||||||
|                    [ dnl worked! |  | ||||||
|                    AC_MSG_RESULT([yes])], |  | ||||||
|                    [ dnl failed, restore LIBS |  | ||||||
|                    LIBS=$my_ac_save_LIBS |  | ||||||
|                    AC_MSG_RESULT(no)] |  | ||||||
|                   ) |  | ||||||
|       ;; |  | ||||||
|   esac |  | ||||||
|  |  | ||||||
|   AC_CHECK_LIB(crypto, CRYPTO_lock,[ |  | ||||||
|      HAVECRYPTO="yes" |      HAVECRYPTO="yes" | ||||||
|      LIBS="-lcrypto $LIBS" |      LIBS="-lcrypto $LIBS" | ||||||
|      ],[ |      ],[ | ||||||
|      LDFLAGS="$CLEANLDFLAGS -L$LIB_OPENSSL" |      LDFLAGS="$CLEANLDFLAGS -L$LIB_OPENSSL" | ||||||
|      CPPFLAGS="$CLEANCPPFLAGS -I$PREFIX_OPENSSL/include/openssl -I$PREFIX_OPENSSL/include" |      CPPFLAGS="$CLEANCPPFLAGS -I$PREFIX_OPENSSL/include/openssl -I$PREFIX_OPENSSL/include" | ||||||
|      AC_CHECK_LIB(crypto, CRYPTO_add_lock,[ |      AC_CHECK_LIB(crypto, HMAC_Init_ex,[ | ||||||
|        HAVECRYPTO="yes" |        HAVECRYPTO="yes" | ||||||
|        LIBS="-lcrypto $LIBS"], [ |        LIBS="-lcrypto $LIBS"], [ | ||||||
|        LDFLAGS="$CLEANLDFLAGS" |        LDFLAGS="$CLEANLDFLAGS" | ||||||
| @@ -1505,6 +1520,46 @@ if test "$curl_ssl_msg" = "$init_ssl_msg" && test X"$OPT_SSL" != Xno; then | |||||||
|     ]) |     ]) | ||||||
|  |  | ||||||
|  |  | ||||||
|  |   if test X"$HAVECRYPTO" = X"yes"; then | ||||||
|  |      AC_MSG_CHECKING([OpenSSL linking without -ldl]) | ||||||
|  |      saved_libs=$LIBS | ||||||
|  |      AC_TRY_LINK( | ||||||
|  |         [ | ||||||
|  |           #include <openssl/evp.h> | ||||||
|  |         ], | ||||||
|  |         [ | ||||||
|  |           SSLeay_add_all_algorithms(); | ||||||
|  |         ], | ||||||
|  |         [ | ||||||
|  |           AC_MSG_RESULT(yes) | ||||||
|  |           LIBS="$saved_libs" | ||||||
|  |         ], | ||||||
|  |         [ | ||||||
|  |           AC_MSG_RESULT(no) | ||||||
|  |           AC_MSG_CHECKING([OpenSSL linking with -ldl]) | ||||||
|  |           LIBS="-ldl $LIBS" | ||||||
|  |           AC_TRY_LINK( | ||||||
|  |           [ | ||||||
|  |             #include <openssl/evp.h> | ||||||
|  |           ], | ||||||
|  |           [ | ||||||
|  |             SSLeay_add_all_algorithms(); | ||||||
|  |           ], | ||||||
|  |           [ | ||||||
|  |             AC_MSG_RESULT(yes) | ||||||
|  |             LIBS="$saved_libs -ldl" | ||||||
|  |           ], | ||||||
|  |           [ | ||||||
|  |             AC_MSG_RESULT(no) | ||||||
|  |             LIBS="$saved_libs" | ||||||
|  |           ] | ||||||
|  |           ) | ||||||
|  |  | ||||||
|  |         ] | ||||||
|  |      ) | ||||||
|  |  | ||||||
|  |   fi | ||||||
|  |  | ||||||
|   if test X"$HAVECRYPTO" = X"yes"; then |   if test X"$HAVECRYPTO" = X"yes"; then | ||||||
|     dnl This is only reasonable to do if crypto actually is there: check for |     dnl This is only reasonable to do if crypto actually is there: check for | ||||||
|     dnl SSL libs NOTE: it is important to do this AFTER the crypto lib |     dnl SSL libs NOTE: it is important to do this AFTER the crypto lib | ||||||
| @@ -1527,7 +1582,7 @@ if test "$curl_ssl_msg" = "$init_ssl_msg" && test X"$OPT_SSL" != Xno; then | |||||||
|  |  | ||||||
|     else |     else | ||||||
|  |  | ||||||
|       dnl Have the libraries--check for SSLeay/OpenSSL headers |       dnl Have the libraries--check for OpenSSL headers | ||||||
|       AC_CHECK_HEADERS(openssl/x509.h openssl/rsa.h openssl/crypto.h \ |       AC_CHECK_HEADERS(openssl/x509.h openssl/rsa.h openssl/crypto.h \ | ||||||
|                        openssl/pem.h openssl/ssl.h openssl/err.h, |                        openssl/pem.h openssl/ssl.h openssl/err.h, | ||||||
|         curl_ssl_msg="enabled (OpenSSL)" |         curl_ssl_msg="enabled (OpenSSL)" | ||||||
| @@ -1551,17 +1606,11 @@ if test "$curl_ssl_msg" = "$init_ssl_msg" && test X"$OPT_SSL" != Xno; then | |||||||
|     fi |     fi | ||||||
|  |  | ||||||
|     if test X"$OPENSSL_ENABLED" = X"1"; then |     if test X"$OPENSSL_ENABLED" = X"1"; then | ||||||
|        AC_DEFINE(USE_SSLEAY, 1, [if SSL is enabled]) |  | ||||||
|  |  | ||||||
|        dnl is there a pkcs12.h header present? |        dnl is there a pkcs12.h header present? | ||||||
|        AC_CHECK_HEADERS(openssl/pkcs12.h) |        AC_CHECK_HEADERS(openssl/pkcs12.h) | ||||||
|     else |     else | ||||||
|        LIBS="$CLEANLIBS" |        LIBS="$CLEANLIBS" | ||||||
|     fi |     fi | ||||||
|     dnl USE_SSLEAY is the historical name for what configure calls |  | ||||||
|     dnl OPENSSL_ENABLED; the names should really be unified |  | ||||||
|     USE_SSLEAY="$OPENSSL_ENABLED" |  | ||||||
|     AC_SUBST(USE_SSLEAY) |  | ||||||
|  |  | ||||||
|     if test X"$OPT_SSL" != Xoff && |     if test X"$OPT_SSL" != Xoff && | ||||||
|        test "$OPENSSL_ENABLED" != "1"; then |        test "$OPENSSL_ENABLED" != "1"; then | ||||||
| @@ -1578,9 +1627,12 @@ if test "$curl_ssl_msg" = "$init_ssl_msg" && test X"$OPT_SSL" != Xno; then | |||||||
|                 AC_CHECK_FUNCS( ENGINE_load_builtin_engines ) |                 AC_CHECK_FUNCS( ENGINE_load_builtin_engines ) | ||||||
|               ]) |               ]) | ||||||
|  |  | ||||||
|     dnl these can only exist if openssl exists |     dnl These can only exist if OpenSSL exists | ||||||
|     dnl Cyassl doesn't have SSL_get_shutdown |     dnl Older versions of Cyassl (some time before 2.9.4) don't have | ||||||
|     dnl BoringSSL doesn't have DES_set_odd_parity |     dnl SSL_get_shutdown (but this check won't actually detect it there | ||||||
|  |     dnl as it's a macro that needs the header files be included) | ||||||
|  |     dnl BoringSSL didn't have DES_set_odd_parity for a while but now it is | ||||||
|  |     dnl back again. | ||||||
|  |  | ||||||
|     AC_CHECK_FUNCS( RAND_status \ |     AC_CHECK_FUNCS( RAND_status \ | ||||||
|                     RAND_screen \ |                     RAND_screen \ | ||||||
| @@ -1592,14 +1644,22 @@ if test "$curl_ssl_msg" = "$init_ssl_msg" && test X"$OPT_SSL" != Xno; then | |||||||
|                     DES_set_odd_parity ) |                     DES_set_odd_parity ) | ||||||
|  |  | ||||||
|     AC_MSG_CHECKING([for BoringSSL]) |     AC_MSG_CHECKING([for BoringSSL]) | ||||||
|     if test "x$ac_cv_func_DES_set_odd_parity" != "xyes"; then |     AC_COMPILE_IFELSE([ | ||||||
|       curl_ssl_msg="enabled (BoringSSL)" |         AC_LANG_PROGRAM([[ | ||||||
|       AC_DEFINE_UNQUOTED(HAVE_BORINGSSL, 1, |                 #include <openssl/base.h> | ||||||
|         [Define to 1 if using BoringSSL.]) |                 ]],[[ | ||||||
|       AC_MSG_RESULT([yes]) |                 #ifndef OPENSSL_IS_BORINGSSL | ||||||
|     else |                 #error not boringssl | ||||||
|       AC_MSG_RESULT([no]) |                 #endif | ||||||
|     fi |        ]]) | ||||||
|  |     ],[ | ||||||
|  |         AC_MSG_RESULT([yes]) | ||||||
|  |         AC_DEFINE_UNQUOTED(HAVE_BORINGSSL, 1, | ||||||
|  |                            [Define to 1 if using BoringSSL.]) | ||||||
|  |     ],[ | ||||||
|  |         AC_MSG_RESULT([no]) | ||||||
|  |     ]) | ||||||
|  |  | ||||||
|     AC_MSG_CHECKING([for libressl]) |     AC_MSG_CHECKING([for libressl]) | ||||||
|     AC_COMPILE_IFELSE([ |     AC_COMPILE_IFELSE([ | ||||||
|       AC_LANG_PROGRAM([[ |       AC_LANG_PROGRAM([[ | ||||||
| @@ -1675,8 +1735,8 @@ dnl --- | |||||||
| if test "$OPENSSL_ENABLED" = "1"; then | if test "$OPENSSL_ENABLED" = "1"; then | ||||||
|   AC_CHECK_LIB(crypto, SRP_Calc_client_key, |   AC_CHECK_LIB(crypto, SRP_Calc_client_key, | ||||||
|    [ |    [ | ||||||
|      AC_DEFINE(HAVE_SSLEAY_SRP, 1, [if you have the function SRP_Calc_client_key]) |      AC_DEFINE(HAVE_OPENSSL_SRP, 1, [if you have the function SRP_Calc_client_key]) | ||||||
|      AC_SUBST(HAVE_SSLEAY_SRP, [1]) |      AC_SUBST(HAVE_OPENSSL_SRP, [1]) | ||||||
|    ]) |    ]) | ||||||
| fi | fi | ||||||
|  |  | ||||||
| @@ -1787,6 +1847,7 @@ if test "$curl_ssl_msg" = "$init_ssl_msg"; then | |||||||
|             AC_MSG_NOTICE([Added $gtlslib to LD_LIBRARY_PATH]) |             AC_MSG_NOTICE([Added $gtlslib to LD_LIBRARY_PATH]) | ||||||
|           fi |           fi | ||||||
|         fi |         fi | ||||||
|  |         AC_CHECK_FUNCS(gnutls_certificate_set_x509_key_file2) | ||||||
|       fi |       fi | ||||||
|  |  | ||||||
|     fi |     fi | ||||||
| @@ -1924,6 +1985,93 @@ if test "$curl_ssl_msg" = "$init_ssl_msg"; then | |||||||
|  |  | ||||||
| fi | fi | ||||||
|  |  | ||||||
|  | dnl ---------------------------------------------------- | ||||||
|  | dnl check for mbedTLS | ||||||
|  | dnl ---------------------------------------------------- | ||||||
|  |  | ||||||
|  | OPT_MBEDTLS=no | ||||||
|  |  | ||||||
|  | _cppflags=$CPPFLAGS | ||||||
|  | _ldflags=$LDFLAGS | ||||||
|  | AC_ARG_WITH(mbedtls,dnl | ||||||
|  | AC_HELP_STRING([--with-mbedtls=PATH],[where to look for mbedTLS, PATH points to the installation root]) | ||||||
|  | AC_HELP_STRING([--without-mbedtls], [disable mbedTLS detection]), | ||||||
|  |   OPT_MBEDTLS=$withval) | ||||||
|  |  | ||||||
|  | if test "$curl_ssl_msg" = "$init_ssl_msg"; then | ||||||
|  |  | ||||||
|  |   if test X"$OPT_MBEDTLS" != Xno; then | ||||||
|  |  | ||||||
|  |     if test "$OPT_MBEDTLS" = "yes"; then | ||||||
|  |       OPT_MBEDTLS="" | ||||||
|  |     fi | ||||||
|  |  | ||||||
|  |     if test -z "$OPT_MBEDTLS" ; then | ||||||
|  |       dnl check for lib first without setting any new path | ||||||
|  |  | ||||||
|  |       AC_CHECK_LIB(mbedtls, mbedtls_havege_init, | ||||||
|  |       dnl libmbedtls found, set the variable | ||||||
|  |        [ | ||||||
|  |          AC_DEFINE(USE_MBEDTLS, 1, [if mbedTLS is enabled]) | ||||||
|  |          AC_SUBST(USE_MBEDTLS, [1]) | ||||||
|  |          MBEDTLS_ENABLED=1 | ||||||
|  |          USE_MBEDTLS="yes" | ||||||
|  |          curl_ssl_msg="enabled (mbedTLS)" | ||||||
|  |         ], [], -lmbedx509 -lmbedcrypto) | ||||||
|  |     fi | ||||||
|  |  | ||||||
|  |     addld="" | ||||||
|  |     addlib="" | ||||||
|  |     addcflags="" | ||||||
|  |     mbedtlslib="" | ||||||
|  |  | ||||||
|  |     if test "x$USE_MBEDTLS" != "xyes"; then | ||||||
|  |       dnl add the path and test again | ||||||
|  |       addld=-L$OPT_MBEDTLS/lib$libsuff | ||||||
|  |       addcflags=-I$OPT_MBEDTLS/include | ||||||
|  |       mbedtlslib=$OPT_MBEDTLS/lib$libsuff | ||||||
|  |  | ||||||
|  |       LDFLAGS="$LDFLAGS $addld" | ||||||
|  |       if test "$addcflags" != "-I/usr/include"; then | ||||||
|  |          CPPFLAGS="$CPPFLAGS $addcflags" | ||||||
|  |       fi | ||||||
|  |  | ||||||
|  |       AC_CHECK_LIB(mbedtls, mbedtls_ssl_init, | ||||||
|  |        [ | ||||||
|  |        AC_DEFINE(USE_MBEDTLS, 1, [if mbedTLS is enabled]) | ||||||
|  |        AC_SUBST(USE_MBEDTLS, [1]) | ||||||
|  |        MBEDTLS_ENABLED=1 | ||||||
|  |        USE_MBEDTLS="yes" | ||||||
|  |        curl_ssl_msg="enabled (mbedTLS)" | ||||||
|  |        ], | ||||||
|  |        [ | ||||||
|  |          CPPFLAGS=$_cppflags | ||||||
|  |          LDFLAGS=$_ldflags | ||||||
|  |        ], -lmbedx509 -lmbedcrypto) | ||||||
|  |     fi | ||||||
|  |  | ||||||
|  |     if test "x$USE_MBEDTLS" = "xyes"; then | ||||||
|  |       AC_MSG_NOTICE([detected mbedTLS]) | ||||||
|  |  | ||||||
|  |       LIBS="-lmbedtls -lmbedx509 -lmbedcrypto $LIBS" | ||||||
|  |  | ||||||
|  |       if test -n "$mbedtlslib"; then | ||||||
|  |         dnl when shared libs were found in a path that the run-time | ||||||
|  |         dnl linker doesn't search through, we need to add it to | ||||||
|  |         dnl LD_LIBRARY_PATH to prevent further configure tests to fail | ||||||
|  |         dnl due to this | ||||||
|  |         if test "x$cross_compiling" != "xyes"; then | ||||||
|  |           LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$mbedtlslib" | ||||||
|  |           export LD_LIBRARY_PATH | ||||||
|  |           AC_MSG_NOTICE([Added $mbedtlslib to LD_LIBRARY_PATH]) | ||||||
|  |         fi | ||||||
|  |       fi | ||||||
|  |     fi | ||||||
|  |  | ||||||
|  |   fi dnl mbedTLS not disabled | ||||||
|  |  | ||||||
|  | fi | ||||||
|  |  | ||||||
| dnl ---------------------------------------------------- | dnl ---------------------------------------------------- | ||||||
| dnl check for CyaSSL | dnl check for CyaSSL | ||||||
| dnl ---------------------------------------------------- | dnl ---------------------------------------------------- | ||||||
| @@ -1946,6 +2094,10 @@ if test "$curl_ssl_msg" = "$init_ssl_msg"; then | |||||||
|       OPT_CYASSL="" |       OPT_CYASSL="" | ||||||
|     fi |     fi | ||||||
|  |  | ||||||
|  |     dnl This should be reworked to use pkg-config instead | ||||||
|  |  | ||||||
|  |     cyassllibname=cyassl | ||||||
|  |  | ||||||
|     if test -z "$OPT_CYASSL" ; then |     if test -z "$OPT_CYASSL" ; then | ||||||
|       dnl check for lib in system default first |       dnl check for lib in system default first | ||||||
|  |  | ||||||
| @@ -1987,19 +2139,80 @@ if test "$curl_ssl_msg" = "$init_ssl_msg"; then | |||||||
|        [ |        [ | ||||||
|          CPPFLAGS=$_cppflags |          CPPFLAGS=$_cppflags | ||||||
|          LDFLAGS=$_ldflags |          LDFLAGS=$_ldflags | ||||||
|  |          cyassllib="" | ||||||
|        ]) |        ]) | ||||||
|     fi |     fi | ||||||
|  |  | ||||||
|  |     addld="" | ||||||
|  |     addlib="" | ||||||
|  |     addcflags="" | ||||||
|  |  | ||||||
|  |     if test "x$USE_CYASSL" != "xyes"; then | ||||||
|  |       dnl libcyassl renamed to libwolfssl as of 3.4.0 | ||||||
|  |       addld=-L$OPT_CYASSL/lib$libsuff | ||||||
|  |       addcflags=-I$OPT_CYASSL/include | ||||||
|  |       cyassllib=$OPT_CYASSL/lib$libsuff | ||||||
|  |  | ||||||
|  |       LDFLAGS="$LDFLAGS $addld" | ||||||
|  |       if test "$addcflags" != "-I/usr/include"; then | ||||||
|  |          CPPFLAGS="$CPPFLAGS $addcflags" | ||||||
|  |       fi | ||||||
|  |  | ||||||
|  |       cyassllibname=wolfssl | ||||||
|  |       my_ac_save_LIBS="$LIBS" | ||||||
|  |       LIBS="-l$cyassllibname -lm $LIBS" | ||||||
|  |  | ||||||
|  |       AC_MSG_CHECKING([for CyaSSL_Init in -lwolfssl]) | ||||||
|  |       AC_LINK_IFELSE([ | ||||||
|  | 	AC_LANG_PROGRAM([[ | ||||||
|  | /* These aren't needed for detection and confuse WolfSSL. | ||||||
|  |    They are set up properly later if it is detected.  */ | ||||||
|  | #undef SIZEOF_LONG | ||||||
|  | #undef SIZEOF_LONG_LONG | ||||||
|  | #include <cyassl/ssl.h> | ||||||
|  | 	]],[[ | ||||||
|  | 	  return CyaSSL_Init(); | ||||||
|  | 	]]) | ||||||
|  |       ],[ | ||||||
|  |          AC_MSG_RESULT(yes) | ||||||
|  |          AC_DEFINE(USE_CYASSL, 1, [if CyaSSL/WolfSSL is enabled]) | ||||||
|  |          AC_SUBST(USE_CYASSL, [1]) | ||||||
|  |          CYASSL_ENABLED=1 | ||||||
|  |          USE_CYASSL="yes" | ||||||
|  |          curl_ssl_msg="enabled (WolfSSL)" | ||||||
|  |        ], | ||||||
|  |        [ | ||||||
|  |          AC_MSG_RESULT(no) | ||||||
|  |          CPPFLAGS=$_cppflags | ||||||
|  |          LDFLAGS=$_ldflags | ||||||
|  |          cyassllib="" | ||||||
|  |        ]) | ||||||
|  |       LIBS="$my_ac_save_LIBS" | ||||||
|  |     fi | ||||||
|  |  | ||||||
|     if test "x$USE_CYASSL" = "xyes"; then |     if test "x$USE_CYASSL" = "xyes"; then | ||||||
|       AC_MSG_NOTICE([detected CyaSSL]) |       AC_MSG_NOTICE([detected $cyassllibname]) | ||||||
|  |  | ||||||
|       dnl cyassl/ctaocrypt/types.h needs SIZEOF_LONG_LONG defined! |       dnl cyassl/ctaocrypt/types.h needs SIZEOF_LONG_LONG defined! | ||||||
|       AC_CHECK_SIZEOF(long long) |       AC_CHECK_SIZEOF(long long) | ||||||
|  |  | ||||||
|  |       dnl Versions since at least 2.6.0 may have options.h | ||||||
|  |       AC_CHECK_HEADERS(cyassl/options.h) | ||||||
|  |  | ||||||
|       dnl Versions since at least 2.9.4 renamed error.h to error-ssl.h |       dnl Versions since at least 2.9.4 renamed error.h to error-ssl.h | ||||||
|       AC_CHECK_HEADERS(cyassl/error-ssl.h) |       AC_CHECK_HEADERS(cyassl/error-ssl.h) | ||||||
|  |  | ||||||
|       LIBS="-lcyassl -lm $LIBS" |       LIBS="-l$cyassllibname -lm $LIBS" | ||||||
|  |  | ||||||
|  |       if test "x$cyassllibname" = "xwolfssl"; then | ||||||
|  |         dnl Recent WolfSSL versions build without SSLv3 by default | ||||||
|  |         dnl WolfSSL needs configure --enable-opensslextra to have *get_peer* | ||||||
|  |         AC_CHECK_FUNCS(wolfSSLv3_client_method \ | ||||||
|  |                        wolfSSL_get_peer_certificate) | ||||||
|  |       else | ||||||
|  |         dnl Cyassl needs configure --enable-opensslextra to have *get_peer* | ||||||
|  |         AC_CHECK_FUNCS(CyaSSL_get_peer_certificate) | ||||||
|  |       fi | ||||||
|  |  | ||||||
|       if test -n "$cyassllib"; then |       if test -n "$cyassllib"; then | ||||||
|         dnl when shared libs were found in a path that the run-time |         dnl when shared libs were found in a path that the run-time | ||||||
| @@ -2066,57 +2279,73 @@ if test "$curl_ssl_msg" = "$init_ssl_msg"; then | |||||||
|         fi |         fi | ||||||
|       fi |       fi | ||||||
|     else |     else | ||||||
|         # Without pkg-config, we'll kludge in some defaults |       NSS_PCDIR="$OPT_NSS/lib/pkgconfig" | ||||||
|         addlib="-L$OPT_NSS/lib -lssl3 -lsmime3 -lnss3 -lplds4 -lplc4 -lnspr4 -lpthread -ldl" |       if test -f "$NSS_PCDIR/nss.pc"; then | ||||||
|         addcflags="-I$OPT_NSS/include" |         CURL_CHECK_PKGCONFIG(nss, [$NSS_PCDIR]) | ||||||
|         version="unknown" |         if test "$PKGCONFIG" != "no" ; then | ||||||
|         nssprefix=$OPT_NSS |           addld=`CURL_EXPORT_PCDIR([$NSS_PCDIR]) $PKGCONFIG --libs-only-L nss` | ||||||
|     fi |           addlib=`CURL_EXPORT_PCDIR([$NSS_PCDIR]) $PKGCONFIG --libs-only-l nss` | ||||||
|  |           addcflags=`CURL_EXPORT_PCDIR([$NSS_PCDIR]) $PKGCONFIG --cflags nss` | ||||||
|     if test -n "$addlib"; then |           version=`CURL_EXPORT_PCDIR([$NSS_PCDIR]) $PKGCONFIG --modversion nss` | ||||||
|  |           nssprefix=`CURL_EXPORT_PCDIR([$NSS_PCDIR]) $PKGCONFIG --variable=prefix nss` | ||||||
|       CLEANLIBS="$LIBS" |  | ||||||
|       CLEANCPPFLAGS="$CPPFLAGS" |  | ||||||
|  |  | ||||||
|       LIBS="$addlib $LIBS" |  | ||||||
|       if test "$addcflags" != "-I/usr/include"; then |  | ||||||
|          CPPFLAGS="$CPPFLAGS $addcflags" |  | ||||||
|       fi |  | ||||||
|  |  | ||||||
|       dnl The function SSL_VersionRangeSet() is needed to enable TLS > 1.0 |  | ||||||
|       AC_CHECK_LIB(nss3, SSL_VersionRangeSet, |  | ||||||
|        [ |  | ||||||
|        AC_DEFINE(USE_NSS, 1, [if NSS is enabled]) |  | ||||||
|        AC_SUBST(USE_NSS, [1]) |  | ||||||
|        USE_NSS="yes" |  | ||||||
|        NSS_ENABLED=1 |  | ||||||
|        curl_ssl_msg="enabled (NSS)" |  | ||||||
|        ], |  | ||||||
|        [ |  | ||||||
|          LIBS="$CLEANLIBS" |  | ||||||
|          CPPFLAGS="$CLEANCPPFLAGS" |  | ||||||
|        ]) |  | ||||||
|  |  | ||||||
|       if test "x$USE_NSS" = "xyes"; then |  | ||||||
|         AC_MSG_NOTICE([detected NSS version $version]) |  | ||||||
|  |  | ||||||
|         dnl needed when linking the curl tool without USE_EXPLICIT_LIB_DEPS |  | ||||||
|         NSS_LIBS=$addlib |  | ||||||
|         AC_SUBST([NSS_LIBS]) |  | ||||||
|  |  | ||||||
|         dnl when shared libs were found in a path that the run-time |  | ||||||
|         dnl linker doesn't search through, we need to add it to |  | ||||||
|         dnl LD_LIBRARY_PATH to prevent further configure tests to fail |  | ||||||
|         dnl due to this |  | ||||||
|         if test "x$cross_compiling" != "xyes"; then |  | ||||||
|           LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$nssprefix/lib$libsuff" |  | ||||||
|           export LD_LIBRARY_PATH |  | ||||||
|           AC_MSG_NOTICE([Added $nssprefix/lib$libsuff to LD_LIBRARY_PATH]) |  | ||||||
|         fi |         fi | ||||||
|       fi |       fi | ||||||
|  |  | ||||||
|     fi |     fi | ||||||
|  |  | ||||||
|  |     if test -z "$addlib"; then | ||||||
|  |       # Without pkg-config, we'll kludge in some defaults | ||||||
|  |       AC_MSG_WARN([Using hard-wired libraries and compilation flags for NSS.]) | ||||||
|  |       addld="-L$OPT_NSS/lib" | ||||||
|  |       addlib="-lssl3 -lsmime3 -lnss3 -lplds4 -lplc4 -lnspr4" | ||||||
|  |       addcflags="-I$OPT_NSS/include" | ||||||
|  |       version="unknown" | ||||||
|  |       nssprefix=$OPT_NSS | ||||||
|  |     fi | ||||||
|  |  | ||||||
|  |     CLEANLDFLAGS="$LDFLAGS" | ||||||
|  |     CLEANLIBS="$LIBS" | ||||||
|  |     CLEANCPPFLAGS="$CPPFLAGS" | ||||||
|  |  | ||||||
|  |     LDFLAGS="$addld $LDFLAGS" | ||||||
|  |     LIBS="$addlib $LIBS" | ||||||
|  |     if test "$addcflags" != "-I/usr/include"; then | ||||||
|  |        CPPFLAGS="$CPPFLAGS $addcflags" | ||||||
|  |     fi | ||||||
|  |  | ||||||
|  |     dnl The function SSL_VersionRangeSet() is needed to enable TLS > 1.0 | ||||||
|  |     AC_CHECK_LIB(nss3, SSL_VersionRangeSet, | ||||||
|  |      [ | ||||||
|  |      AC_DEFINE(USE_NSS, 1, [if NSS is enabled]) | ||||||
|  |      AC_SUBST(USE_NSS, [1]) | ||||||
|  |      USE_NSS="yes" | ||||||
|  |      NSS_ENABLED=1 | ||||||
|  |      curl_ssl_msg="enabled (NSS)" | ||||||
|  |      ], | ||||||
|  |      [ | ||||||
|  |        LDFLAGS="$CLEANLDFLAGS" | ||||||
|  |        LIBS="$CLEANLIBS" | ||||||
|  |        CPPFLAGS="$CLEANCPPFLAGS" | ||||||
|  |      ]) | ||||||
|  |  | ||||||
|  |     if test "x$USE_NSS" = "xyes"; then | ||||||
|  |       AC_MSG_NOTICE([detected NSS version $version]) | ||||||
|  |  | ||||||
|  |       dnl needed when linking the curl tool without USE_EXPLICIT_LIB_DEPS | ||||||
|  |       NSS_LIBS=$addlib | ||||||
|  |       AC_SUBST([NSS_LIBS]) | ||||||
|  |  | ||||||
|  |       dnl when shared libs were found in a path that the run-time | ||||||
|  |       dnl linker doesn't search through, we need to add it to | ||||||
|  |       dnl LD_LIBRARY_PATH to prevent further configure tests to fail | ||||||
|  |       dnl due to this | ||||||
|  |       if test "x$cross_compiling" != "xyes"; then | ||||||
|  |         LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$nssprefix/lib$libsuff" | ||||||
|  |         export LD_LIBRARY_PATH | ||||||
|  |         AC_MSG_NOTICE([Added $nssprefix/lib$libsuff to LD_LIBRARY_PATH]) | ||||||
|  |       fi | ||||||
|  |  | ||||||
|  |     fi dnl NSS found | ||||||
|  |  | ||||||
|   fi dnl NSS not disabled |   fi dnl NSS not disabled | ||||||
|  |  | ||||||
| fi dnl curl_ssl_msg = init_ssl_msg | fi dnl curl_ssl_msg = init_ssl_msg | ||||||
| @@ -2177,7 +2406,7 @@ if test "$curl_ssl_msg" = "$init_ssl_msg"; then | |||||||
|   fi |   fi | ||||||
| fi | fi | ||||||
|  |  | ||||||
| if test "x$OPENSSL_ENABLED$GNUTLS_ENABLED$NSS_ENABLED$POLARSSL_ENABLED$AXTLS_ENABLED$CYASSL_ENABLED$WINSSL_ENABLED$DARWINSSL_ENABLED" = "x"; then | if test "x$OPENSSL_ENABLED$GNUTLS_ENABLED$NSS_ENABLED$POLARSSL_ENABLED$MBEDTLS_ENABLED$AXTLS_ENABLED$CYASSL_ENABLED$WINSSL_ENABLED$DARWINSSL_ENABLED" = "x"; then | ||||||
|   AC_MSG_WARN([SSL disabled, you will not be able to use HTTPS, FTPS, NTLM and more.]) |   AC_MSG_WARN([SSL disabled, you will not be able to use HTTPS, FTPS, NTLM and more.]) | ||||||
|   AC_MSG_WARN([Use --with-ssl, --with-gnutls, --with-polarssl, --with-cyassl, --with-nss, --with-axtls, --with-winssl, or --with-darwinssl to address this.]) |   AC_MSG_WARN([Use --with-ssl, --with-gnutls, --with-polarssl, --with-cyassl, --with-nss, --with-axtls, --with-winssl, or --with-darwinssl to address this.]) | ||||||
| else | else | ||||||
| @@ -2192,6 +2421,27 @@ dnl ********************************************************************** | |||||||
|  |  | ||||||
| CURL_CHECK_CA_BUNDLE | CURL_CHECK_CA_BUNDLE | ||||||
|  |  | ||||||
|  | dnl ********************************************************************** | ||||||
|  | dnl Check for libpsl | ||||||
|  | dnl ********************************************************************** | ||||||
|  |  | ||||||
|  | AC_ARG_WITH(libpsl, | ||||||
|  |            AS_HELP_STRING([--without-libpsl], | ||||||
|  |            [disable support for libpsl cookie checking]), | ||||||
|  |            with_libpsl=$withval, | ||||||
|  |            with_libpsl=yes) | ||||||
|  | if test $with_libpsl != "no"; then | ||||||
|  |   AC_SEARCH_LIBS(psl_builtin, psl, | ||||||
|  |     [curl_psl_msg="yes"; | ||||||
|  |      AC_DEFINE([USE_LIBPSL], [1], [PSL support enabled]) | ||||||
|  |      ], | ||||||
|  |     [curl_psl_msg="no      (libpsl not found)"; | ||||||
|  |      AC_MSG_WARN([libpsl was not found]) | ||||||
|  |      ] | ||||||
|  |   ) | ||||||
|  | fi | ||||||
|  | AM_CONDITIONAL([USE_LIBPSL], [test "$curl_psl_msg" = "yes"]) | ||||||
|  |  | ||||||
| dnl ********************************************************************** | dnl ********************************************************************** | ||||||
| dnl Check for libmetalink | dnl Check for libmetalink | ||||||
| dnl ********************************************************************** | dnl ********************************************************************** | ||||||
| @@ -2771,7 +3021,9 @@ if test X"$want_h2" != Xno; then | |||||||
|     CPPFLAGS="$CPPFLAGS $CPP_H2" |     CPPFLAGS="$CPPFLAGS $CPP_H2" | ||||||
|     LIBS="$LIB_H2 $LIBS" |     LIBS="$LIB_H2 $LIBS" | ||||||
|  |  | ||||||
|     AC_CHECK_LIB(nghttp2, nghttp2_session_callbacks_set_send_callback, |     # use nghttp2_option_set_no_recv_client_magic to require nghttp2 | ||||||
|  |     # >= 1.0.0 | ||||||
|  |     AC_CHECK_LIB(nghttp2, nghttp2_option_set_no_recv_client_magic, | ||||||
|       [ |       [ | ||||||
|        AC_CHECK_HEADERS(nghttp2/nghttp2.h, |        AC_CHECK_HEADERS(nghttp2/nghttp2.h, | ||||||
|           curl_h2_msg="enabled (nghttp2)" |           curl_h2_msg="enabled (nghttp2)" | ||||||
| @@ -2797,6 +3049,31 @@ if test X"$want_h2" != Xno; then | |||||||
|  |  | ||||||
| fi | fi | ||||||
|  |  | ||||||
|  | dnl ********************************************************************** | ||||||
|  | dnl Check for zsh completion path | ||||||
|  | dnl ********************************************************************** | ||||||
|  |  | ||||||
|  | OPT_ZSH_FPATH=default | ||||||
|  | AC_ARG_WITH(zsh-functions-dir, | ||||||
|  | AC_HELP_STRING([--with-zsh-functions-dir=PATH],[Install zsh completions to PATH]) | ||||||
|  | AC_HELP_STRING([--without-zsh-functions-dir],[Do not install zsh completions]), | ||||||
|  |   [OPT_ZSH_FPATH=$withval]) | ||||||
|  | case "$OPT_ZSH_FPATH" in | ||||||
|  |   no) | ||||||
|  |     dnl --without-zsh-functions-dir option used | ||||||
|  |     ;; | ||||||
|  |   default|yes) | ||||||
|  |     dnl --with-zsh-functions-dir option used without path | ||||||
|  |     ZSH_FUNCTIONS_DIR="$datarootdir/zsh/site-functions" | ||||||
|  |     AC_SUBST(ZSH_FUNCTIONS_DIR) | ||||||
|  |     ;; | ||||||
|  |   *) | ||||||
|  |     dnl --with-zsh-functions-dir option used with path | ||||||
|  |     ZSH_FUNCTIONS_DIR="$withval" | ||||||
|  |     AC_SUBST(ZSH_FUNCTIONS_DIR) | ||||||
|  |     ;; | ||||||
|  | esac | ||||||
|  |  | ||||||
| dnl ********************************************************************** | dnl ********************************************************************** | ||||||
| dnl Back to "normal" configuring | dnl Back to "normal" configuring | ||||||
| dnl ********************************************************************** | dnl ********************************************************************** | ||||||
| @@ -3145,7 +3422,7 @@ if test "x$want_thres" = xyes && test "x$want_ares" = xyes; then | |||||||
| [Options --enable-threaded-resolver and --enable-ares are mutually exclusive]) | [Options --enable-threaded-resolver and --enable-ares are mutually exclusive]) | ||||||
| fi | fi | ||||||
|  |  | ||||||
| if test "$want_thres" = "yes"; then | if test "$want_thres" = "yes" && test "$dontwant_rt" = "no"; then | ||||||
|   AC_CHECK_HEADER(pthread.h, |   AC_CHECK_HEADER(pthread.h, | ||||||
|     [ AC_DEFINE(HAVE_PTHREAD_H, 1, [if you have <pthread.h>]) |     [ AC_DEFINE(HAVE_PTHREAD_H, 1, [if you have <pthread.h>]) | ||||||
|       save_CFLAGS="$CFLAGS" |       save_CFLAGS="$CFLAGS" | ||||||
| @@ -3271,7 +3548,7 @@ AC_HELP_STRING([--disable-tls-srp],[Disable TLS-SRP authentication]), | |||||||
|        want_tls_srp=yes |        want_tls_srp=yes | ||||||
| ) | ) | ||||||
|  |  | ||||||
| if test "$want_tls_srp" = "yes" && ( test "x$HAVE_GNUTLS_SRP" = "x1" || test "x$HAVE_SSLEAY_SRP" = "x1") ; then | if test "$want_tls_srp" = "yes" && ( test "x$HAVE_GNUTLS_SRP" = "x1" || test "x$HAVE_OPENSSL_SRP" = "x1") ; then | ||||||
|    AC_DEFINE(USE_TLS_SRP, 1, [Use TLS-SRP authentication]) |    AC_DEFINE(USE_TLS_SRP, 1, [Use TLS-SRP authentication]) | ||||||
|    USE_TLS_SRP=1 |    USE_TLS_SRP=1 | ||||||
|    curl_tls_srp_msg="enabled" |    curl_tls_srp_msg="enabled" | ||||||
| @@ -3385,7 +3662,7 @@ dnl For keeping supported features and protocols also in pkg-config file | |||||||
| dnl since it is more cross-compile friendly than curl-config | dnl since it is more cross-compile friendly than curl-config | ||||||
| dnl | dnl | ||||||
|  |  | ||||||
| if test "x$USE_SSLEAY" = "x1"; then | if test "x$OPENSSL_ENABLED" = "x1"; then | ||||||
|   SUPPORT_FEATURES="$SUPPORT_FEATURES SSL" |   SUPPORT_FEATURES="$SUPPORT_FEATURES SSL" | ||||||
| elif test -n "$SSL_ENABLED"; then | elif test -n "$SSL_ENABLED"; then | ||||||
|   SUPPORT_FEATURES="$SUPPORT_FEATURES SSL" |   SUPPORT_FEATURES="$SUPPORT_FEATURES SSL" | ||||||
| @@ -3413,6 +3690,10 @@ if test "x$HAVE_GSSAPI" = "x1"; then | |||||||
|   SUPPORT_FEATURES="$SUPPORT_FEATURES GSS-API" |   SUPPORT_FEATURES="$SUPPORT_FEATURES GSS-API" | ||||||
| fi | fi | ||||||
|  |  | ||||||
|  | if test "x$curl_psl_msg" = "xyes"; then | ||||||
|  |   SUPPORT_FEATURES="$SUPPORT_FEATURES PSL" | ||||||
|  | fi | ||||||
|  |  | ||||||
| if test "x$CURL_DISABLE_CRYPTO_AUTH" != "x1" -a \ | if test "x$CURL_DISABLE_CRYPTO_AUTH" != "x1" -a \ | ||||||
|     \( "x$HAVE_GSSAPI" = "x1" -o "x$USE_WINDOWS_SSPI" = "x1" \); then |     \( "x$HAVE_GSSAPI" = "x1" -o "x$USE_WINDOWS_SSPI" = "x1" \); then | ||||||
|   SUPPORT_FEATURES="$SUPPORT_FEATURES SPNEGO" |   SUPPORT_FEATURES="$SUPPORT_FEATURES SPNEGO" | ||||||
| @@ -3424,7 +3705,7 @@ if test "x$CURL_DISABLE_CRYPTO_AUTH" != "x1" -a \ | |||||||
| fi | fi | ||||||
|  |  | ||||||
| if test "x$CURL_DISABLE_CRYPTO_AUTH" != "x1"; then | if test "x$CURL_DISABLE_CRYPTO_AUTH" != "x1"; then | ||||||
|   if test "x$USE_SSLEAY" = "x1" -o "x$USE_WINDOWS_SSPI" = "x1" \ |   if test "x$OPENSSL_ENABLED" = "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" | ||||||
| @@ -3497,7 +3778,7 @@ if test "x$CURL_DISABLE_IMAP" != "x1"; then | |||||||
| fi | fi | ||||||
| if test "x$CURL_DISABLE_SMB" != "x1" \ | if test "x$CURL_DISABLE_SMB" != "x1" \ | ||||||
|     -a "x$CURL_DISABLE_CRYPTO_AUTH" != "x1" \ |     -a "x$CURL_DISABLE_CRYPTO_AUTH" != "x1" \ | ||||||
|     -a \( "x$USE_SSLEAY" = "x1" -o "x$USE_WINDOWS_SSPI" = "x1" \ |     -a \( "x$OPENSSL_ENABLED" = "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_PROTOCOLS="$SUPPORT_PROTOCOLS SMB" |   SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS SMB" | ||||||
| @@ -3560,6 +3841,7 @@ AC_CONFIG_FILES([Makefile \ | |||||||
|            include/curl/Makefile \ |            include/curl/Makefile \ | ||||||
|            src/Makefile \ |            src/Makefile \ | ||||||
|            lib/Makefile \ |            lib/Makefile \ | ||||||
|  |            scripts/Makefile \ | ||||||
|            lib/libcurl.vers \ |            lib/libcurl.vers \ | ||||||
|            tests/Makefile \ |            tests/Makefile \ | ||||||
|            tests/certs/Makefile \ |            tests/certs/Makefile \ | ||||||
| @@ -3618,6 +3900,7 @@ AC_MSG_NOTICE([Configured to build curl/libcurl: | |||||||
|   RTSP support:     ${curl_rtsp_msg} |   RTSP support:     ${curl_rtsp_msg} | ||||||
|   RTMP support:     ${curl_rtmp_msg} |   RTMP support:     ${curl_rtmp_msg} | ||||||
|   metalink support: ${curl_mtlnk_msg} |   metalink support: ${curl_mtlnk_msg} | ||||||
|  |   PSL support:      ${curl_psl_msg} | ||||||
|   HTTP2 support:    ${curl_h2_msg} |   HTTP2 support:    ${curl_h2_msg} | ||||||
|   Protocols:        ${SUPPORT_PROTOCOLS} |   Protocols:        ${SUPPORT_PROTOCOLS} | ||||||
| ]) | ]) | ||||||
|   | |||||||
| @@ -71,7 +71,7 @@ while test $# -gt 0; do | |||||||
|         ;; |         ;; | ||||||
|  |  | ||||||
|     --ca) |     --ca) | ||||||
|         echo "@CURL_CA_BUNDLE@" |         echo @CURL_CA_BUNDLE@ | ||||||
|         ;; |         ;; | ||||||
|  |  | ||||||
|     --cc) |     --cc) | ||||||
|   | |||||||
| @@ -50,7 +50,7 @@ Cocoa | |||||||
| D | D | ||||||
|  |  | ||||||
|   Written by Kenneth Bogert |   Written by Kenneth Bogert | ||||||
|   http://curl.haxx.se/libcurl/d/ |   http://dlang.org/library/std/net/curl.html | ||||||
|  |  | ||||||
| Dylan | Dylan | ||||||
|  |  | ||||||
| @@ -60,7 +60,7 @@ Dylan | |||||||
| Eiffel | Eiffel | ||||||
|  |  | ||||||
|   Written by Eiffel Software |   Written by Eiffel Software | ||||||
|   http://curl.haxx.se/libcurl/eiffel/ |   https://room.eiffel.com/library/curl | ||||||
|  |  | ||||||
| Euphoria | Euphoria | ||||||
|  |  | ||||||
| @@ -78,7 +78,7 @@ Ferite | |||||||
|  |  | ||||||
| Gambas | Gambas | ||||||
|  |  | ||||||
|   http://gambas.sourceforge.net |   http://gambas.sourceforge.net/ | ||||||
|  |  | ||||||
| glib/GTK+ | glib/GTK+ | ||||||
|  |  | ||||||
| @@ -90,6 +90,11 @@ Guile: | |||||||
|   Written by Michael L. Gran |   Written by Michael L. Gran | ||||||
|   http://www.lonelycactus.com/guile-curl.html |   http://www.lonelycactus.com/guile-curl.html | ||||||
|  |  | ||||||
|  | Harbour | ||||||
|  |  | ||||||
|  |   Written by Viktor Szakáts | ||||||
|  |   https://github.com/vszakats/harbour-core/tree/master/contrib/hbcurl | ||||||
|  |  | ||||||
| Haskell | Haskell | ||||||
|  |  | ||||||
|   Written by Galois, Inc |   Written by Galois, Inc | ||||||
| @@ -97,8 +102,7 @@ Haskell | |||||||
|  |  | ||||||
| Java | Java | ||||||
|  |  | ||||||
|   Maintained by [blank] |   https://github.com/pjlegato/curl-java | ||||||
|   http://curl.haxx.se/libcurl/java/ |  | ||||||
|  |  | ||||||
| Julia | Julia | ||||||
|  |  | ||||||
| @@ -115,7 +119,7 @@ Lua | |||||||
|   luacurl by Alexander Marinov |   luacurl by Alexander Marinov | ||||||
|   http://luacurl.luaforge.net/ |   http://luacurl.luaforge.net/ | ||||||
|  |  | ||||||
|   Lua-cURL by J<EFBFBD>rgen H<EFBFBD>tzel |   Lua-cURL by Jürgen Hötzel | ||||||
|   http://luaforge.net/projects/lua-curl/ |   http://luaforge.net/projects/lua-curl/ | ||||||
|  |  | ||||||
| Mono | Mono | ||||||
| @@ -126,7 +130,7 @@ Mono | |||||||
| .NET | .NET | ||||||
|  |  | ||||||
|   libcurl-net by Jeffrey Phillips |   libcurl-net by Jeffrey Phillips | ||||||
|   http://sourceforge.net/projects/libcurl-net/ |   https://sourceforge.net/projects/libcurl-net/ | ||||||
|  |  | ||||||
| node.js | node.js | ||||||
|  |  | ||||||
| @@ -141,7 +145,7 @@ Object-Pascal | |||||||
| O'Caml | O'Caml | ||||||
|  |  | ||||||
|   Written by Lars Nilsson |   Written by Lars Nilsson | ||||||
|   http://sourceforge.net/projects/ocurl/ |   https://sourceforge.net/projects/ocurl/ | ||||||
|  |  | ||||||
| Pascal | Pascal | ||||||
|  |  | ||||||
| @@ -150,13 +154,13 @@ Pascal | |||||||
|  |  | ||||||
| Perl | Perl | ||||||
|  |  | ||||||
|   Maintained by Cris Bailiff |   Maintained by Cris Bailiff and Bálint Szilakszi | ||||||
|   http://curl.haxx.se/libcurl/perl/ |   https://github.com/szbalint/WWW--Curl | ||||||
|  |  | ||||||
| PHP | PHP | ||||||
|  |  | ||||||
|   Written by Sterling Hughes |   Written by Sterling Hughes | ||||||
|   http://curl.haxx.se/libcurl/php/ |   https://php.net/curl | ||||||
|  |  | ||||||
| PostgreSQL | PostgreSQL | ||||||
|  |  | ||||||
| @@ -170,8 +174,7 @@ Python | |||||||
|  |  | ||||||
| R | R | ||||||
|  |  | ||||||
|   RCurl by Duncan Temple Lang |   http://cran.r-project.org/package=curl | ||||||
|   http://www.omegahat.org/RCurl/ |  | ||||||
|  |  | ||||||
| Rexx | Rexx | ||||||
|  |  | ||||||
| @@ -192,10 +195,15 @@ Ruby | |||||||
|   ruby-curl-multi - written by Kristjan Petursson and Keith Rarick |   ruby-curl-multi - written by Kristjan Petursson and Keith Rarick | ||||||
|   http://curl-multi.rubyforge.org/ |   http://curl-multi.rubyforge.org/ | ||||||
|  |  | ||||||
|  | Rust | ||||||
|  |  | ||||||
|  |   curl-rust - by Carl Lerche | ||||||
|  |   https://github.com/carllerche/curl-rust | ||||||
|  |  | ||||||
| Scheme | Scheme | ||||||
|  |  | ||||||
|   Bigloo binding by Kirill Lisovsky |   Bigloo binding by Kirill Lisovsky | ||||||
|   http://curl.haxx.se/libcurl/scheme/ |   http://www.metapaper.net/lisovsky/web/curl/ | ||||||
|  |  | ||||||
| S-Lang | S-Lang | ||||||
|  |  | ||||||
| @@ -219,13 +227,13 @@ SPL | |||||||
|  |  | ||||||
| Tcl | Tcl | ||||||
|  |  | ||||||
|   Tclcurl by Andr<EFBFBD>s Garc<EFBFBD>a |   Tclcurl by Andrés García | ||||||
|   http://personal1.iddeo.es/andresgarci/tclcurl/english/docs.html |   http://mirror.yellow5.com/tclcurl/ | ||||||
|  |  | ||||||
| Visual Basic | Visual Basic | ||||||
|  |  | ||||||
|   libcurl-vb by Jeffrey Phillips |   libcurl-vb by Jeffrey Phillips | ||||||
|   http://sourceforge.net/projects/libcurl-vb/ |   https://sourceforge.net/projects/libcurl-vb/ | ||||||
|  |  | ||||||
| Visual Foxpro | Visual Foxpro | ||||||
|  |  | ||||||
| @@ -245,3 +253,8 @@ XBLite | |||||||
|  |  | ||||||
|   Written by David Szafranski |   Written by David Szafranski | ||||||
|   http://perso.wanadoo.fr/xblite/libraries.html |   http://perso.wanadoo.fr/xblite/libraries.html | ||||||
|  |  | ||||||
|  | Xojo | ||||||
|  |  | ||||||
|  |   Written by Andrew Lambert | ||||||
|  |   https://github.com/charonn0/RB-libcURL | ||||||
|   | |||||||
| @@ -35,11 +35,9 @@ BUGS | |||||||
|   have a go at a solution. You can optionally also post your bug/problem at |   have a go at a solution. You can optionally also post your bug/problem at | ||||||
|   curl's bug tracking system over at |   curl's bug tracking system over at | ||||||
|  |  | ||||||
|         https://sourceforge.net/p/curl/bugs/ |         https://github.com/bagder/curl/issues | ||||||
|  |  | ||||||
|   Please read the rest of this document below first before doing that! Also, |   Please read the rest of this document below first before doing that! | ||||||
|   you need to login to your sourceforge account before being able to submit a |  | ||||||
|   bug report (necessary evil done to avoid spam). |  | ||||||
|  |  | ||||||
|   If you feel you need to ask around first, find a suitable mailing list and |   If you feel you need to ask around first, find a suitable mailing list and | ||||||
|   post there. The lists are available on http://curl.haxx.se/mail/ |   post there. The lists are available on http://curl.haxx.se/mail/ | ||||||
|   | |||||||
							
								
								
									
										32
									
								
								docs/CODE_OF_CONDUCT.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								docs/CODE_OF_CONDUCT.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,32 @@ | |||||||
|  | Contributor Code of Conduct | ||||||
|  | =========================== | ||||||
|  |  | ||||||
|  | As contributors and maintainers of this project, we pledge to respect all | ||||||
|  | people who contribute through reporting issues, posting feature requests, | ||||||
|  | updating documentation, submitting pull requests or patches, and other | ||||||
|  | activities. | ||||||
|  |  | ||||||
|  | We are committed to making participation in this project a harassment-free | ||||||
|  | experience for everyone, regardless of level of experience, gender, gender | ||||||
|  | identity and expression, sexual orientation, disability, personal appearance, | ||||||
|  | body size, race, ethnicity, age, or religion. | ||||||
|  |  | ||||||
|  | Examples of unacceptable behavior by participants include the use of sexual | ||||||
|  | language or imagery, derogatory comments or personal attacks, trolling, public | ||||||
|  | or private harassment, insults, or other unprofessional conduct. | ||||||
|  |  | ||||||
|  | Project maintainers have the right and responsibility to remove, edit, or | ||||||
|  | reject comments, commits, code, wiki edits, issues, and other contributions | ||||||
|  | that are not aligned to this Code of Conduct. Project maintainers who do not | ||||||
|  | follow the Code of Conduct may be removed from the project team. | ||||||
|  |  | ||||||
|  | This code of conduct applies both within project spaces and in public spaces | ||||||
|  | when an individual is representing the project or its community. | ||||||
|  |  | ||||||
|  | Instances of abusive, harassing, or otherwise unacceptable behavior may be | ||||||
|  | reported by opening an issue or contacting one or more of the project | ||||||
|  | maintainers. | ||||||
|  |  | ||||||
|  | This Code of Conduct is adapted from the [Contributor | ||||||
|  | Covenant](http://contributor-covenant.org), version 1.1.0, available at | ||||||
|  | [http://contributor-covenant.org/version/1/1/0/](http://contributor-covenant.org/version/1/1/0/) | ||||||
| @@ -34,7 +34,7 @@ | |||||||
|  3.3 How To Make a Patch without git |  3.3 How To Make a Patch without git | ||||||
|  3.4 How to get your changes into the main sources |  3.4 How to get your changes into the main sources | ||||||
|  3.5 Write good commit messages |  3.5 Write good commit messages | ||||||
|  3.6 Please don't send pull requests |  3.6 About pull requests | ||||||
|  |  | ||||||
| ============================================================================== | ============================================================================== | ||||||
|  |  | ||||||
| @@ -52,6 +52,10 @@ | |||||||
|  |  | ||||||
|  We also hang out on IRC in #curl on irc.freenode.net |  We also hang out on IRC in #curl on irc.freenode.net | ||||||
|  |  | ||||||
|  |  If you're at all interested in the code side of things, consider clicking | ||||||
|  |  'watch' on the curl repo at github to get notified on pull requests and new | ||||||
|  |  issues posted there. | ||||||
|  |  | ||||||
| 1.2. License | 1.2. License | ||||||
|  |  | ||||||
|  When contributing with code, you agree to put your changes and new code under |  When contributing with code, you agree to put your changes and new code under | ||||||
| @@ -78,10 +82,10 @@ | |||||||
|  |  | ||||||
| 1.3 What To Read | 1.3 What To Read | ||||||
|  |  | ||||||
|  Source code, the man pages, the INTERNALS document, TODO, KNOWN_BUGS, the |  Source code, the man pages, the INTERNALS document, TODO, KNOWN_BUGS and the | ||||||
|  most recent CHANGES. Just lurking on the curl-library mailing list is gonna |  most recent changes in the git log. Just lurking on the curl-library mailing | ||||||
|  give you a lot of insights on what's going on right now. Asking there is a |  list is gonna give you a lot of insights on what's going on right now. Asking | ||||||
|  good idea too. |  there is a good idea too. | ||||||
|  |  | ||||||
| 2. cURL Coding Standards | 2. cURL Coding Standards | ||||||
|  |  | ||||||
| @@ -199,7 +203,7 @@ | |||||||
|  |  | ||||||
|  You need to first checkout the repository: |  You need to first checkout the repository: | ||||||
|  |  | ||||||
|      git clone git://github.com/bagder/curl.git |      git clone https://github.com/bagder/curl.git | ||||||
|  |  | ||||||
|  You then proceed and edit all the files you like and you commit them to your |  You then proceed and edit all the files you like and you commit them to your | ||||||
|  local repository: |  local repository: | ||||||
| @@ -241,8 +245,8 @@ | |||||||
|  |  | ||||||
|  For unix-like operating systems: |  For unix-like operating systems: | ||||||
|  |  | ||||||
|      http://www.gnu.org/software/patch/patch.html |      https://savannah.gnu.org/projects/patch/ | ||||||
|      http://www.gnu.org/directory/diffutils.html |      https://www.gnu.org/software/diffutils/ | ||||||
|  |  | ||||||
|  For Windows: |  For Windows: | ||||||
|  |  | ||||||
| @@ -288,27 +292,15 @@ | |||||||
|  and make sure that you have your own user and email setup correctly in git |  and make sure that you have your own user and email setup correctly in git | ||||||
|  before you commit |  before you commit | ||||||
|  |  | ||||||
| 3.6 Please don't send pull requests | 3.6 About pull requests | ||||||
|  |  | ||||||
|  With git (and especially github) it is easy and tempting to send a pull |  With git (and especially github) it is easy and tempting to send a pull | ||||||
|  request to one or more people in the curl project to have changes merged this |  request to the curl project to have changes merged this way instead of | ||||||
|  way instead of mailing patches to the curl-library mailing list. |  mailing patches to the curl-library mailing list. | ||||||
|  |  | ||||||
|  We don't like that. We want them mailed for these reasons: |  We used to dislike this but we're trying to change that and accept that this | ||||||
|  |  is a frictionless way for people to contribute to the project. We now welcome | ||||||
|  |  pull requests! | ||||||
|  |  | ||||||
|  - Peer review. Anyone and everyone on the list can review, comment and |  We will continue to avoid using github's merge tools to make the history | ||||||
|    improve on the patch. Pull requests limit this ability. |  linear and to make sure commits follow our style guidelines. | ||||||
|  |  | ||||||
|  - Anyone can merge the patch into their own trees for testing and those who |  | ||||||
|    have push rights can push it to the main repo. It doesn't have to be anyone |  | ||||||
|    the patch author knows beforehand. |  | ||||||
|  |  | ||||||
|  - Commit messages can be tweaked and changed if merged locally instead of |  | ||||||
|    using github. Merges directly on github requires the changes to be perfect |  | ||||||
|    already, which they seldom are. |  | ||||||
|  |  | ||||||
|  - Merges on github prevents rebases and even enforces --no-ff which is a git |  | ||||||
|    style we don't otherwise use in the project |  | ||||||
|  |  | ||||||
|  However: once patches have been reviewed and deemed fine on list they are |  | ||||||
|  perfectly OK to be pulled from a published git tree. |  | ||||||
|   | |||||||
| @@ -1,176 +0,0 @@ | |||||||
|   Date: February 11, 2007 |  | ||||||
|   Author: Daniel Stenberg <daniel@haxx.se> |  | ||||||
|   URL: http://curl.haxx.se/legal/distro-dilemma.html |  | ||||||
|  |  | ||||||
| Condition |  | ||||||
|  |  | ||||||
|  This document is written to describe the situation as it is right now. |  | ||||||
|  libcurl 7.16.1 is currently the latest version available. Things may of |  | ||||||
|  course change in the future. |  | ||||||
|  |  | ||||||
|  This document reflects my view and understanding of these things. Please tell |  | ||||||
|  me where and how you think I'm wrong, and I'll try to correct my mistakes. |  | ||||||
|  |  | ||||||
| Background |  | ||||||
|  |  | ||||||
|  The Free Software Foundation has deemed the Original BSD license[1] to be |  | ||||||
|  "incompatible"[2] with GPL[3]. I'd rather say it is the other way around, but |  | ||||||
|  the point is the same: if you distribute a binary version of a GPL program, |  | ||||||
|  it MUST NOT be linked with any Original BSD-licensed parts or libraries. |  | ||||||
|  Doing so will violate the GPL license. For a long time, very many GPL |  | ||||||
|  licensed programs have avoided this license mess by adding an exception[8] to |  | ||||||
|  their license. And many others have just closed their eyes for this problem. |  | ||||||
|  |  | ||||||
|  libcurl is MIT-style[4] licensed - how on earth did this dilemma fall onto |  | ||||||
|  our plates? |  | ||||||
|  |  | ||||||
|  libcurl is only a little library. libcurl can be built to use OpenSSL for its |  | ||||||
|  SSL/TLS capabilities. OpenSSL is basically Original BSD licensed[5]. |  | ||||||
|  |  | ||||||
|  If libcurl built to use OpenSSL is used by a GPL-licensed application and you |  | ||||||
|  decide to distribute a binary version of it (Linux distros - for example - |  | ||||||
|  tend to), you have a clash. GPL vs Original BSD. |  | ||||||
|  |  | ||||||
|  This dilemma is not libcurl-specific nor is it specific to any particular |  | ||||||
|  Linux distro. (This article mentions and refers to Debian several times, but |  | ||||||
|  only because Debian seems to be the only Linux distro to have faced this |  | ||||||
|  issue yet since no other distro is shipping libcurl built with two SSL |  | ||||||
|  libraries.) |  | ||||||
|  |  | ||||||
| Part of the Operating System |  | ||||||
|  |  | ||||||
|  This would not be a problem if the used lib would be considered part of the |  | ||||||
|  underlying operating system, as then the GPL license has an exception |  | ||||||
|  clause[6] that allows applications to use such libs without having to be |  | ||||||
|  allowed to distribute it or its sources. Possibly some distros will claim |  | ||||||
|  that OpenSSL is part of their operating system. |  | ||||||
|  |  | ||||||
|  Debian does however not take this stance and has officially(?) claimed that |  | ||||||
|  OpenSSL is not a required part of the Debian operating system |  | ||||||
|  |  | ||||||
|  Some people claim that this paragraph cannot be exploited this way by a Linux |  | ||||||
|  distro, but I am not a lawyer and that is a discussion left outside of this |  | ||||||
|  document. |  | ||||||
|  |  | ||||||
| GnuTLS |  | ||||||
|  |  | ||||||
|  Since May 2005 libcurl can get built to use GnuTLS instead of OpenSSL. GnuTLS |  | ||||||
|  is an LGPL[7] licensed library that offers a matching set of features as |  | ||||||
|  OpenSSL does. Now, you can build and distribute an TLS/SSL capable libcurl |  | ||||||
|  without including any Original BSD licensed code. |  | ||||||
|  |  | ||||||
|  I believe Debian is the first (only?) distro that provides libcurl/GnuTLS |  | ||||||
|  packages. |  | ||||||
|  |  | ||||||
| yassl |  | ||||||
|  |  | ||||||
|  libcurl can get also get built to use yassl for the TLS/SSL layer. yassl is a |  | ||||||
|  GPL[3] licensed library. |  | ||||||
|  |  | ||||||
|  |  | ||||||
| GnuTLS vs OpenSSL vs yassl |  | ||||||
|  |  | ||||||
|  While these three libraries offer similar features, they are not equal. |  | ||||||
|  libcurl does not (yet) offer a standardized stable ABI if you decide to |  | ||||||
|  switch from using libcurl-openssl to libcurl-gnutls or vice-versa. The GnuTLS |  | ||||||
|  and yassl support is very recent in libcurl and it has not been tested nor |  | ||||||
|  used very extensively, while the OpenSSL equivalent code has been used and |  | ||||||
|  thus matured since 1999. |  | ||||||
|  |  | ||||||
|  GnuTLS |  | ||||||
|    - LGPL licensed |  | ||||||
|    - supports SRP |  | ||||||
|    - lacks SSLv2 support |  | ||||||
|    - lacks MD2 support (used by at least some CA certs) |  | ||||||
|    - lacks the crypto functions libcurl uses for NTLM |  | ||||||
|  |  | ||||||
|  OpenSSL |  | ||||||
|    - Original BSD licensed |  | ||||||
|    - lacks SRP |  | ||||||
|    - supports SSLv2 |  | ||||||
|    - older and more widely used |  | ||||||
|    - provides crypto functions libcurl uses for NTLM |  | ||||||
|    - libcurl can do non-blocking connects with it in 7.15.4 and later |  | ||||||
|  |  | ||||||
|  yassl |  | ||||||
|    - GPL licensed |  | ||||||
|    - much untested and unproven in the real work by (lib)curl users so we don't |  | ||||||
|      know a lot about restrictions or benefits from using this |  | ||||||
|  |  | ||||||
| The Better License, Original BSD, GPL or LGPL? |  | ||||||
|  |  | ||||||
|  It isn't obvious or without debate to any objective interested party that |  | ||||||
|  either of these licenses are the "better" or even the "preferred" one in a |  | ||||||
|  generic situation. |  | ||||||
|  |  | ||||||
|  Instead, I think we should accept the fact that the SSL/TLS libraries and |  | ||||||
|  their different licenses will fit different applications and their authors |  | ||||||
|  differently depending on the applications' licenses and their general usage |  | ||||||
|  pattern (considering how GPL and LGPL libraries for example can be burdensome |  | ||||||
|  for embedded systems usage). |  | ||||||
|  |  | ||||||
|  In Debian land, there seems to be a common opinion that LGPL is "maximally |  | ||||||
|  compatible" with apps while Original BSD is not. Like this: |  | ||||||
|  |  | ||||||
|         http://lists.debian.org/debian-devel/2005/09/msg01417.html |  | ||||||
|  |  | ||||||
| More SSL Libraries |  | ||||||
|  |  | ||||||
|  In libcurl, there's no stopping us here. There are more Open Source/Free |  | ||||||
|  SSL/TLS libraries out there and we would very much like to support them as |  | ||||||
|  well, to offer application authors an even wider scope of choice. |  | ||||||
|  |  | ||||||
| Application Angle of this Problem |  | ||||||
|  |  | ||||||
|  libcurl is built to use one SSL/TLS library. It uses a single fixed name (by |  | ||||||
|  default) on the built/created lib file, and applications are built/linked to |  | ||||||
|  use that single lib. Replacing one libcurl instance with another one that |  | ||||||
|  uses the other SSL/TLS library might break one or more applications (due to |  | ||||||
|  ABI differences and/or different feature set). You want your application to |  | ||||||
|  use the libcurl it was built for. |  | ||||||
|  |  | ||||||
| Project cURL Angle of this Problem |  | ||||||
|  |  | ||||||
|  We distribute libcurl and everyone may build libcurl with either library at |  | ||||||
|  their choice. This problem is not directly a problem of ours. It merely |  | ||||||
|  affects users - GPL application authors only - of our lib as it comes |  | ||||||
|  included and delivered on some distros. |  | ||||||
|  |  | ||||||
|  libcurl has different ABI when built with different SSL/TLS libraries due to |  | ||||||
|  these reasons: |  | ||||||
|  |  | ||||||
|  1. No one has worked on fixing this. The mutex/lock callbacks should be set |  | ||||||
|     with a generic libcurl function that should use the proper underlying |  | ||||||
|     functions. |  | ||||||
|  |  | ||||||
|  2. The CURLOPT_SSL_CTX_FUNCTION option is not possible to "emulate" on GnuTLS |  | ||||||
|     but simply requires OpenSSL. |  | ||||||
|  |  | ||||||
|  3. There might be some other subtle differences just because nobody has yet |  | ||||||
|     tried to make a fixed ABI like this. |  | ||||||
|  |  | ||||||
| Distro Angle of this Problem |  | ||||||
|  |  | ||||||
|  To my knowledge there is only one distro that ships libcurl built with either |  | ||||||
|  OpenSSL or GnuTLS. |  | ||||||
|  |  | ||||||
|  Debian Linux is now (since mid September 2005) providing two different |  | ||||||
|  libcurl packages, one for libcurl built with OpenSSL and one built with |  | ||||||
|  GnuTLS. They use different .so names and can this both be installed in a |  | ||||||
|  single system simultaneously. This has been said to be a transitional system |  | ||||||
|  not desired to keep in the long run. |  | ||||||
|  |  | ||||||
| Footnotes |  | ||||||
|  |  | ||||||
|  [1] = http://www.xfree86.org/3.3.6/COPYRIGHT2.html#6 |  | ||||||
|  [2] = http://www.fsf.org/licensing/essays/bsd.html |  | ||||||
|  [3] = http://www.fsf.org/licensing/licenses/gpl.html |  | ||||||
|  [4] = http://curl.haxx.se/docs/copyright.html |  | ||||||
|  [5] = http://www.openssl.org/source/license.html |  | ||||||
|  [6] = http://www.fsf.org/licensing/licenses/gpl.html end of section 3 |  | ||||||
|  [7] = http://www.fsf.org/licensing/licenses/lgpl.html |  | ||||||
|  [8] = http://en.wikipedia.org/wiki/OpenSSL_exception |  | ||||||
|  |  | ||||||
| Feedback/Updates provided by |  | ||||||
|  |  | ||||||
|  Eric Cooper |  | ||||||
							
								
								
									
										70
									
								
								docs/FAQ
									
									
									
									
									
								
							
							
						
						
									
										70
									
								
								docs/FAQ
									
									
									
									
									
								
							| @@ -21,6 +21,7 @@ FAQ | |||||||
|   1.12 I have a problem who can I chat with? |   1.12 I have a problem who can I chat with? | ||||||
|   1.13 curl's ECCN number? |   1.13 curl's ECCN number? | ||||||
|   1.14 How do I submit my patch? |   1.14 How do I submit my patch? | ||||||
|  |   1.15 How do I port libcurl to my OS? | ||||||
|  |  | ||||||
|  2. Install Related Problems |  2. Install Related Problems | ||||||
|   2.1 configure doesn't find OpenSSL even when it is installed |   2.1 configure doesn't find OpenSSL even when it is installed | ||||||
| @@ -81,6 +82,7 @@ FAQ | |||||||
|   4.18 file:// URLs containing drive letters (Windows, NetWare) |   4.18 file:// URLs containing drive letters (Windows, NetWare) | ||||||
|   4.19 Why doesn't cURL return an error when the network cable is unplugged? |   4.19 Why doesn't cURL return an error when the network cable is unplugged? | ||||||
|   4.20 curl doesn't return error for HTTP non-200 responses! |   4.20 curl doesn't return error for HTTP non-200 responses! | ||||||
|  |   4.21 Why is there a HTTP/1.1 in my HTTP/2 request? | ||||||
|  |  | ||||||
|  5. libcurl Issues |  5. libcurl Issues | ||||||
|   5.1 Is libcurl thread-safe? |   5.1 Is libcurl thread-safe? | ||||||
| @@ -223,7 +225,9 @@ FAQ | |||||||
|   implement it for you, that is not a very friendly attitude. We spend a |   implement it for you, that is not a very friendly attitude. We spend a | ||||||
|   considerable time already on maintaining and developing curl. In order to |   considerable time already on maintaining and developing curl. In order to | ||||||
|   get more out of us, you should consider trading in some of your time and |   get more out of us, you should consider trading in some of your time and | ||||||
|   efforts in return. |   efforts in return. Simply go to the GitHub repo which resides at | ||||||
|  |   https://github.com/bagder/curl, fork the project, and create pull requests | ||||||
|  |   with your proposed changes. | ||||||
|  |  | ||||||
|   If you write the code, chances are bigger that it will get into curl faster. |   If you write the code, chances are bigger that it will get into curl faster. | ||||||
|  |  | ||||||
| @@ -249,9 +253,10 @@ FAQ | |||||||
|  |  | ||||||
|   We still get help from companies. Haxx provides web site, bandwidth, mailing |   We still get help from companies. Haxx provides web site, bandwidth, mailing | ||||||
|   lists etc, sourceforge.net hosts project services we take advantage from, |   lists etc, sourceforge.net hosts project services we take advantage from, | ||||||
|   like the bug tracker and github hosts the primary git repository. Also |   like the bug tracker, and GitHub hosts the primary git repository at | ||||||
|   again, some companies have sponsored certain parts of the development in the |   https://github.com/bagder/curl. Also again, some companies have sponsored | ||||||
|   past and I hope some will continue to do so in the future. |   certain parts of the development in the past and I hope some will continue to | ||||||
|  |   do so in the future. | ||||||
|  |  | ||||||
|   If you want to support our project, consider a donation or a banner-program |   If you want to support our project, consider a donation or a banner-program | ||||||
|   or even better: by helping us coding, documenting, testing etc. |   or even better: by helping us coding, documenting, testing etc. | ||||||
| @@ -350,13 +355,15 @@ FAQ | |||||||
|   cryptography. When doing so, the Export Control Classification Number (ECCN) |   cryptography. When doing so, the Export Control Classification Number (ECCN) | ||||||
|   is used to identify the level of export control etc. |   is used to identify the level of export control etc. | ||||||
|  |  | ||||||
|   ASF gives a good explanation at http://www.apache.org/dev/crypto.html |   Apache Software Foundation gives a good explanation of ECCNs at | ||||||
|  |   https://www.apache.org/dev/crypto.html | ||||||
|  |  | ||||||
|   We believe curl's number might be ECCN 5D002, another possibility is |   We believe curl's number might be ECCN 5D002, another possibility is | ||||||
|   5D992. It seems necessary to write them, asking to confirm. |   5D992. It seems necessary to write them (the authority that administers ECCN | ||||||
|  |   numbers), asking to confirm. | ||||||
|  |  | ||||||
|   Comprehensible explanations of the meaning of such numbers and how to |   Comprehensible explanations of the meaning of such numbers and how to obtain | ||||||
|   obtain them (resp.) are here |   them (resp.) are here | ||||||
|  |  | ||||||
|   http://www.bis.doc.gov/licensing/exportingbasics.htm |   http://www.bis.doc.gov/licensing/exportingbasics.htm | ||||||
|   http://www.bis.doc.gov/licensing/do_i_needaneccn.html |   http://www.bis.doc.gov/licensing/do_i_needaneccn.html | ||||||
| @@ -379,6 +386,19 @@ FAQ | |||||||
|  |  | ||||||
|   Lots of more details are found in the CONTRIBUTE and INTERNALS docs. |   Lots of more details are found in the CONTRIBUTE and INTERNALS docs. | ||||||
|  |  | ||||||
|  |   1.15 How do I port libcurl to my OS? | ||||||
|  |  | ||||||
|  |   Here's a rough step-by-step: | ||||||
|  |  | ||||||
|  |   1. copy a suitable lib/config-*.h file as a start to lib/config-[youros].h | ||||||
|  |  | ||||||
|  |   2. edit lib/config-[youros].h to match your OS and setup | ||||||
|  |  | ||||||
|  |   3. edit lib/curl_setup.h to include config-[youros].h when your OS is | ||||||
|  |      detected by the preprocessor, in the style others already exist | ||||||
|  |  | ||||||
|  |   4. compile lib/*.c and make them into a library | ||||||
|  |  | ||||||
|  |  | ||||||
| 2. Install Related Problems | 2. Install Related Problems | ||||||
|  |  | ||||||
| @@ -1027,7 +1047,7 @@ FAQ | |||||||
|   timeout is set. |   timeout is set. | ||||||
|  |  | ||||||
|   See option TcpMaxConnectRetransmissions on this page: |   See option TcpMaxConnectRetransmissions on this page: | ||||||
|   http://support.microsoft.com/?scid=kb%3Ben-us%3B175523&x=6&y=7 |   https://support.microsoft.com/en-us/kb/175523/en-us | ||||||
|  |  | ||||||
|   Also, even on non-Windows systems there may run a firewall or anti-virus |   Also, even on non-Windows systems there may run a firewall or anti-virus | ||||||
|   software or similar that accepts the connection but does not actually do |   software or similar that accepts the connection but does not actually do | ||||||
| @@ -1044,7 +1064,7 @@ FAQ | |||||||
|   You'll find that even if D:\blah.txt does exist, cURL returns a 'file |   You'll find that even if D:\blah.txt does exist, cURL returns a 'file | ||||||
|   not found' error. |   not found' error. | ||||||
|  |  | ||||||
|   According to RFC 1738 (http://www.faqs.org/rfcs/rfc1738.html), |   According to RFC 1738 (https://www.ietf.org/rfc/rfc1738.txt), | ||||||
|   file:// URLs must contain a host component, but it is ignored by |   file:// URLs must contain a host component, but it is ignored by | ||||||
|   most implementations. In the above example, 'D:' is treated as the |   most implementations. In the above example, 'D:' is treated as the | ||||||
|   host component, and is taken away. Thus, cURL tries to open '/blah.txt'. |   host component, and is taken away. Thus, cURL tries to open '/blah.txt'. | ||||||
| @@ -1072,7 +1092,7 @@ FAQ | |||||||
|  |  | ||||||
|   In such cases, the TCP/IP stack is responsible for detecting when the |   In such cases, the TCP/IP stack is responsible for detecting when the | ||||||
|   network connection is irrevocably lost. Since with some protocols it is |   network connection is irrevocably lost. Since with some protocols it is | ||||||
|   perfectly legal for the client wait indefinitely for data, the stack may |   perfectly legal for the client to wait indefinitely for data, the stack may | ||||||
|   never report a problem, and even when it does, it can take up to 20 minutes |   never report a problem, and even when it does, it can take up to 20 minutes | ||||||
|   for it to detect an issue.  The curl option --keepalive-time enables |   for it to detect an issue.  The curl option --keepalive-time enables | ||||||
|   keep-alive support in the TCP/IP stack which makes it periodically probe the |   keep-alive support in the TCP/IP stack which makes it periodically probe the | ||||||
| @@ -1116,6 +1136,16 @@ FAQ | |||||||
|   You can also use the -w option and the variable %{response_code} to extract |   You can also use the -w option and the variable %{response_code} to extract | ||||||
|   the exact response code that was return in the response. |   the exact response code that was return in the response. | ||||||
|  |  | ||||||
|  |   4.21 Why is there a HTTP/1.1 in my HTTP/2 request? | ||||||
|  |  | ||||||
|  |   If you use verbose to see the HTTP request when you send off a HTTP/2 | ||||||
|  |   request, it will still say 1.1. | ||||||
|  |  | ||||||
|  |   The reason for this is that we first generate the request to send using the | ||||||
|  |   old 1.1 style and show that request in the verbose output, and then we | ||||||
|  |   convert it over to the binary header-compressed HTTP/2 style. The actual | ||||||
|  |   "1.1" part from that request is then not actually used in the transfer. The | ||||||
|  |   binary HTTP/2 headers are not human readable. | ||||||
|  |  | ||||||
| 5. libcurl Issues | 5. libcurl Issues | ||||||
|  |  | ||||||
| @@ -1138,13 +1168,13 @@ FAQ | |||||||
|   If you use a OpenSSL-powered libcurl in a multi-threaded environment, you |   If you use a OpenSSL-powered libcurl in a multi-threaded environment, you | ||||||
|   need to provide one or two locking functions: |   need to provide one or two locking functions: | ||||||
|  |  | ||||||
|     http://www.openssl.org/docs/crypto/threads.html |     https://www.openssl.org/docs/crypto/threads.html | ||||||
|  |  | ||||||
|   If you use a GnuTLS-powered libcurl in a multi-threaded environment, you |   If you use a GnuTLS-powered libcurl in a multi-threaded environment, you | ||||||
|   need to provide locking function(s) for libgcrypt (which is used by GnuTLS |   need to provide locking function(s) for libgcrypt (which is used by GnuTLS | ||||||
|   for the crypto functions). |   for the crypto functions). | ||||||
|  |  | ||||||
|     http://www.gnu.org/software/gnutls/manual/html_node/Multi_002dthreaded-applications.html |     https://web.archive.org/web/20111103083330/http://www.gnu.org/software/gnutls/manual/html_node/Multi_002dthreaded-applications.html | ||||||
|  |  | ||||||
|   No special locking is needed with a NSS-powered libcurl. NSS is thread-safe. |   No special locking is needed with a NSS-powered libcurl. NSS is thread-safe. | ||||||
|  |  | ||||||
| @@ -1320,7 +1350,7 @@ FAQ | |||||||
|   Also note that on many networks NATs or other IP-munging techniques are used |   Also note that on many networks NATs or other IP-munging techniques are used | ||||||
|   that makes you see and use a different IP address locally than what the |   that makes you see and use a different IP address locally than what the | ||||||
|   remote server will see you coming from. You may also consider using |   remote server will see you coming from. You may also consider using | ||||||
|   http://www.torproject.org . |   https://www.torproject.org/ . | ||||||
|  |  | ||||||
|   5.13 How do I stop an ongoing transfer? |   5.13 How do I stop an ongoing transfer? | ||||||
|  |  | ||||||
| @@ -1511,9 +1541,7 @@ FAQ | |||||||
|  |  | ||||||
|   7.2 Who wrote PHP/CURL? |   7.2 Who wrote PHP/CURL? | ||||||
|  |  | ||||||
|   PHP/CURL is a module that comes with the regular PHP package. It depends and |   PHP/CURL was initially written by Sterling Hughes. | ||||||
|   uses libcurl, so you need to have libcurl installed properly first before |  | ||||||
|   PHP/CURL can be used. PHP/CURL was initially written by Sterling Hughes. |  | ||||||
|  |  | ||||||
|   7.3 Can I perform multiple requests using the same handle? |   7.3 Can I perform multiple requests using the same handle? | ||||||
|  |  | ||||||
| @@ -1522,4 +1550,10 @@ FAQ | |||||||
|   unknown to me). |   unknown to me). | ||||||
|  |  | ||||||
|   After a transfer, you just set new options in the handle and make another |   After a transfer, you just set new options in the handle and make another | ||||||
|   transfer. This will make libcurl to re-use the same connection if it can. |   transfer. This will make libcurl re-use the same connection if it can. | ||||||
|  |  | ||||||
|  |   7.4 Does PHP/CURL have dependencies? | ||||||
|  |  | ||||||
|  |   PHP/CURL is a module that comes with the regular PHP package. It depends on | ||||||
|  |   and uses libcurl, so you need to have libcurl installed properly before | ||||||
|  |   PHP/CURL can be used. | ||||||
|   | |||||||
| @@ -36,7 +36,7 @@ HTTP Cookies | |||||||
|   For a very long time, the only spec explaining how to use cookies was the |   For a very long time, the only spec explaining how to use cookies was the | ||||||
|   original Netscape spec from 1994: http://curl.haxx.se/rfc/cookie_spec.html |   original Netscape spec from 1994: http://curl.haxx.se/rfc/cookie_spec.html | ||||||
|  |  | ||||||
|   In 2011, RFC6265 (http://www.ietf.org/rfc/rfc6265.txt) was finally published |   In 2011, RFC6265 (https://www.ietf.org/rfc/rfc6265.txt) was finally published | ||||||
|   and details how cookies work within HTTP. |   and details how cookies work within HTTP. | ||||||
|  |  | ||||||
|   1.2 Cookies saved to disk |   1.2 Cookies saved to disk | ||||||
|   | |||||||
							
								
								
									
										104
									
								
								docs/HTTP2.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										104
									
								
								docs/HTTP2.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,104 @@ | |||||||
|  | HTTP/2 with curl | ||||||
|  | ================ | ||||||
|  |  | ||||||
|  | [HTTP/2 Spec](https://www.rfc-editor.org/rfc/rfc7540.txt) | ||||||
|  | [http2 explained](http://daniel.haxx.se/http2/) | ||||||
|  |  | ||||||
|  | Build prerequisites | ||||||
|  | ------------------- | ||||||
|  |   - nghttp2 | ||||||
|  |   - OpenSSL, NSS, GnutTLS or PolarSSL with a new enough version | ||||||
|  |  | ||||||
|  | [nghttp2](https://nghttp2.org/) | ||||||
|  | ------------------------------- | ||||||
|  |  | ||||||
|  | libcurl uses this 3rd party library for the low level protocol handling | ||||||
|  | parts. The reason for this is that HTTP/2 is much more complex at that layer | ||||||
|  | than HTTP/1.1 (which we implement on our own) and that nghttp2 is an already | ||||||
|  | existing and well functional library. | ||||||
|  |  | ||||||
|  | We require at least version 1.0.0. | ||||||
|  |  | ||||||
|  | Over an http:// URL | ||||||
|  | ------------------- | ||||||
|  |  | ||||||
|  | If `CURLOPT_HTTP_VERSION` is set to `CURL_HTTP_VERSION_2_0`, libcurl will | ||||||
|  | include an upgrade header in the initial request to the host to allow | ||||||
|  | upgrading to HTTP/2. | ||||||
|  |  | ||||||
|  | Possibly we can later introduce an option that will cause libcurl to fail if | ||||||
|  | not possible to upgrade. Possibly we introduce an option that makes libcurl | ||||||
|  | use HTTP/2 at once over http:// | ||||||
|  |  | ||||||
|  | Over an https:// URL | ||||||
|  | -------------------- | ||||||
|  |  | ||||||
|  | If `CURLOPT_HTTP_VERSION` is set to `CURL_HTTP_VERSION_2_0`, libcurl will use | ||||||
|  | ALPN (or NPN) to negotiate which protocol to continue with. Possibly introduce | ||||||
|  | an option that will cause libcurl to fail if not possible to use HTTP/2. | ||||||
|  | Consider options to explicitly disable ALPN and/or NPN. | ||||||
|  |  | ||||||
|  | ALPN is the TLS extension that HTTP/2 is expected to use. The NPN extension is | ||||||
|  | for a similar purpose, was made prior to ALPN and is used for SPDY so early | ||||||
|  | HTTP/2 servers are implemented using NPN before ALPN support is widespread. | ||||||
|  |  | ||||||
|  | SSL libs | ||||||
|  | -------- | ||||||
|  |  | ||||||
|  | The challenge is the ALPN and NPN support and all our different SSL | ||||||
|  | backends. You may need a fairly updated SSL library version for it to | ||||||
|  | provide the necessary TLS features. Right now we support: | ||||||
|  |  | ||||||
|  |   - OpenSSL:  ALPN and NPN | ||||||
|  |   - NSS:      ALPN and NPN | ||||||
|  |   - GnuTLS:   ALPN | ||||||
|  |   - PolarSSL: ALPN | ||||||
|  |  | ||||||
|  | Multiplexing | ||||||
|  | ------------ | ||||||
|  |  | ||||||
|  | Starting in 7.43.0, libcurl fully supports HTTP/2 multiplexing, which is the | ||||||
|  | term for doing multiple independent transfers over the same physical TCP | ||||||
|  | connection. | ||||||
|  |  | ||||||
|  | To take advantage of multiplexing, you need to use the multi interface and set | ||||||
|  | `CURLMOPT_PIPELINING` to `CURLPIPE_MULTIPLEX`. With that bit set, libcurl will | ||||||
|  | attempt to re-use existing HTTP/2 connections and just add a new stream over | ||||||
|  | that when doing subsequent parallel requests. | ||||||
|  |  | ||||||
|  | While libcurl sets up a connection to a HTTP server there is a period during | ||||||
|  | which it doesn't know if it can pipeline or do multiplexing and if you add new | ||||||
|  | transfers in that period, libcurl will default to start new connections for | ||||||
|  | those transfers. With the new option `CURLOPT_PIPEWAIT` (added in 7.43.0), you | ||||||
|  | can ask that a transfer should rather wait and see in case there's a | ||||||
|  | connection for the same host in progress that might end up being possible to | ||||||
|  | multiplex on. It favours keeping the number of connections low to the cost of | ||||||
|  | slightly longer time to first byte transferred. | ||||||
|  |  | ||||||
|  | Applications | ||||||
|  | ------------ | ||||||
|  |  | ||||||
|  | We hide HTTP/2's binary nature and convert received HTTP/2 traffic to headers | ||||||
|  | in HTTP 1.1 style. This allows applications to work unmodified. | ||||||
|  |  | ||||||
|  | curl tool | ||||||
|  | --------- | ||||||
|  |  | ||||||
|  | curl offers the `--http2` command line option to enable use of HTTP/2 | ||||||
|  |  | ||||||
|  | HTTP Alternative Services | ||||||
|  | ------------------------- | ||||||
|  |  | ||||||
|  | Alt-Svc is a suggested extension with a corresponding frame (ALTSVC) in HTTP/2 | ||||||
|  | that tells the client about an alternative "route" to the same content for the | ||||||
|  | same origin server that you get the response from. A browser or long-living | ||||||
|  | client can use that hint to create a new connection asynchronously.  For | ||||||
|  | libcurl, we may introduce a way to bring such clues to the applicaton and/or | ||||||
|  | let a subsequent request use the alternate route | ||||||
|  | automatically. [Spec](https://tools.ietf.org/html/draft-ietf-httpbis-alt-svc-05) | ||||||
|  |  | ||||||
|  | TODO | ||||||
|  | ---- | ||||||
|  |  | ||||||
|  |   - Implement "prior-knowledge" HTTP/2 connections over clear text so that | ||||||
|  |     curl can connect with HTTP/2 at once without 1.1+Upgrade. | ||||||
							
								
								
									
										68
									
								
								docs/INSTALL
									
									
									
									
									
								
							
							
						
						
									
										68
									
								
								docs/INSTALL
									
									
									
									
									
								
							| @@ -173,13 +173,13 @@ Win32 | |||||||
|    advice given above. |    advice given above. | ||||||
|  |  | ||||||
|    KB94248  - How To Use the C Run-Time |    KB94248  - How To Use the C Run-Time | ||||||
|               http://support.microsoft.com/kb/94248/en-us |               https://support.microsoft.com/kb/94248/en-us | ||||||
|  |  | ||||||
|    KB140584 - How to link with the correct C Run-Time (CRT) library |    KB140584 - How to link with the correct C Run-Time (CRT) library | ||||||
|               http://support.microsoft.com/kb/140584/en-us |               https://support.microsoft.com/kb/140584/en-us | ||||||
|  |  | ||||||
|    KB190799 - Potential Errors Passing CRT Objects Across DLL Boundaries |    KB190799 - Potential Errors Passing CRT Objects Across DLL Boundaries | ||||||
|               http://msdn.microsoft.com/en-us/library/ms235460 |               https://msdn.microsoft.com/en-us/library/ms235460 | ||||||
|  |  | ||||||
|    If your app is misbehaving in some strange way, or it is suffering |    If your app is misbehaving in some strange way, or it is suffering | ||||||
|    from memory corruption, before asking for further help, please try |    from memory corruption, before asking for further help, please try | ||||||
| @@ -209,8 +209,8 @@ 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.8zc |      set OPENSSL_PATH=c:\openssl-1.0.2c | ||||||
|      set LIBSSH2_PATH=c:\libssh2-1.4.3 |      set LIBSSH2_PATH=c:\libssh2-1.6.0 | ||||||
|  |  | ||||||
|    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 | ||||||
|    version 0.17 - previous versions will NOT work with 7.17.0 and later! |    version 0.17 - previous versions will NOT work with 7.17.0 and later! | ||||||
| @@ -232,7 +232,7 @@ Win32 | |||||||
|    - optional MingW32-built OpenLDAP SDK available from: |    - optional MingW32-built OpenLDAP SDK available from: | ||||||
|      http://www.gknw.net/mirror/openldap/ |      http://www.gknw.net/mirror/openldap/ | ||||||
|    - optional recent Novell CLDAP SDK available from: |    - optional recent Novell CLDAP SDK available from: | ||||||
|      http://developer.novell.com/ndk/cldap.htm |      https://www.novell.com/developer/ndk/ldap_libraries_for_c.html | ||||||
|  |  | ||||||
|    Cygwin |    Cygwin | ||||||
|    ------ |    ------ | ||||||
| @@ -254,7 +254,7 @@ Win32 | |||||||
|    If you use MSVC 6 it is required that you use the February 2003 edition of |    If you use MSVC 6 it is required that you use the February 2003 edition of | ||||||
|    the 'Platform SDK' which can be downloaded from: |    the 'Platform SDK' which can be downloaded from: | ||||||
|  |  | ||||||
|    http://www.microsoft.com/en-us/download/details.aspx?id=12261 |    https://www.microsoft.com/en-us/download/details.aspx?id=12261 | ||||||
|  |  | ||||||
|    Building any software with MSVC 6 without having PSDK installed is just |    Building any software with MSVC 6 without having PSDK installed is just | ||||||
|    asking for trouble down the road once you have released it, you might notice |    asking for trouble down the road once you have released it, you might notice | ||||||
| @@ -263,7 +263,7 @@ Win32 | |||||||
|    software built in such way will at some point regret having done so. |    software built in such way will at some point regret having done so. | ||||||
|  |  | ||||||
|    If the compiler has been updated with the installation of a service pack as |    If the compiler has been updated with the installation of a service pack as | ||||||
|    those mentioned in http://support.microsoft.com/kb/194022 the compiler can be |    those mentioned in https://support.microsoft.com/kb/194022 the compiler can be | ||||||
|    safely used to read source code, translate and make it object code. |    safely used to read source code, translate and make it object code. | ||||||
|  |  | ||||||
|    But, even with the service packs mentioned above installed, the resulting |    But, even with the service packs mentioned above installed, the resulting | ||||||
| @@ -299,7 +299,7 @@ Win32 | |||||||
|    Then run 'nmake vc' in curl's root directory. |    Then run 'nmake vc' in curl's root directory. | ||||||
|  |  | ||||||
|    If you want to compile with zlib support, you will need to build |    If you want to compile with zlib support, you will need to build | ||||||
|    zlib (http://www.gzip.org/zlib/) as well. Please read the zlib |    zlib (http://www.zlib.net/) as well. Please read the zlib | ||||||
|    documentation on how to compile zlib. Define the ZLIB_PATH environment |    documentation on how to compile zlib. Define the ZLIB_PATH environment | ||||||
|    variable to the location of zlib.h and zlib.lib, for example: |    variable to the location of zlib.h and zlib.lib, for example: | ||||||
|  |  | ||||||
| @@ -471,6 +471,15 @@ Win32 | |||||||
|    add '-DCURL_STATICLIB' to your CFLAGS.  Otherwise the linker will look for |    add '-DCURL_STATICLIB' to your CFLAGS.  Otherwise the linker will look for | ||||||
|    dynamic import symbols. |    dynamic import symbols. | ||||||
|  |  | ||||||
|  |    Legacy Windows and SSL | ||||||
|  |    ---------------------- | ||||||
|  |  | ||||||
|  |    WinSSL (specifically SChannel from Windows SSPI), is the native SSL library | ||||||
|  |    in Windows. However, WinSSL in Windows <= XP is unable to connect to servers | ||||||
|  |    that no longer support the legacy handshakes and algorithms used by those | ||||||
|  |    versions. If you will be using curl in one of those earlier versions of | ||||||
|  |    Windows you should choose another SSL backend such as OpenSSL. | ||||||
|  |  | ||||||
| Apple iOS and Mac OS X | Apple iOS and Mac OS X | ||||||
| ====================== | ====================== | ||||||
|  |  | ||||||
| @@ -665,12 +674,10 @@ NetWare | |||||||
|    - gnu make and awk running on the platform you compile on; |    - gnu make and awk running on the platform you compile on; | ||||||
|      native Win32 versions can be downloaded from: |      native Win32 versions can be downloaded from: | ||||||
|      http://www.gknw.net/development/prgtools/ |      http://www.gknw.net/development/prgtools/ | ||||||
|    - recent Novell LibC SDK available from: |    - recent Novell LibC or Novell CLib SDK available from: | ||||||
|      http://developer.novell.com/ndk/libc.htm |      https://www.novell.com/developer/ndk/ | ||||||
|    - or recent Novell CLib SDK available from: |  | ||||||
|      http://developer.novell.com/ndk/clib.htm |  | ||||||
|    - optional recent Novell CLDAP SDK available from: |    - optional recent Novell CLDAP SDK available from: | ||||||
|      http://developer.novell.com/ndk/cldap.htm |      https://www.novell.com/developer/ndk/ldap_libraries_for_c.html | ||||||
|    - optional zlib sources (static or dynamic linking with zlib.imp); |    - optional zlib sources (static or dynamic linking with zlib.imp); | ||||||
|      sources with NetWare Makefile can be obtained from: |      sources with NetWare Makefile can be obtained from: | ||||||
|      http://www.gknw.net/mirror/zlib/ |      http://www.gknw.net/mirror/zlib/ | ||||||
| @@ -825,7 +832,7 @@ VxWorks | |||||||
|  |  | ||||||
|    To build libcurl for VxWorks you need: |    To build libcurl for VxWorks you need: | ||||||
|  |  | ||||||
|       - CYGWIN (free, http://cygwin.com/) |       - CYGWIN (free, https://cygwin.com/) | ||||||
|       - Wind River Workbench (commercial) |       - Wind River Workbench (commercial) | ||||||
|  |  | ||||||
|    If you have CYGWIN and Workbench installed on you machine |    If you have CYGWIN and Workbench installed on you machine | ||||||
| @@ -943,9 +950,10 @@ REDUCING SIZE | |||||||
|    important factor.  First, be sure to set the CFLAGS variable when |    important factor.  First, be sure to set the CFLAGS variable when | ||||||
|    configuring with any relevant compiler optimization flags to reduce the |    configuring with any relevant compiler optimization flags to reduce the | ||||||
|    size of the binary.  For gcc, this would mean at minimum the -Os option, |    size of the binary.  For gcc, this would mean at minimum the -Os option, | ||||||
|    and potentially the -march=X and -mdynamic-no-pic options as well, e.g. |    and potentially the -march=X, -mdynamic-no-pic and -flto options as well, | ||||||
|  |    e.g. | ||||||
|  |  | ||||||
|       ./configure CFLAGS='-Os' ... |       ./configure CFLAGS='-Os' LDFLAGS='-Wl,-Bsymbolic'... | ||||||
|  |  | ||||||
|    Note that newer compilers often produce smaller code than older versions |    Note that newer compilers often produce smaller code than older versions | ||||||
|    due to improved optimization. |    due to improved optimization. | ||||||
| @@ -963,7 +971,9 @@ REDUCING SIZE | |||||||
|      --disable-ipv6 (disables support for IPv6) |      --disable-ipv6 (disables support for IPv6) | ||||||
|      --disable-manual (disables support for the built-in documentation) |      --disable-manual (disables support for the built-in documentation) | ||||||
|      --disable-proxy (disables support for HTTP and SOCKS proxies) |      --disable-proxy (disables support for HTTP and SOCKS proxies) | ||||||
|  |      --disable-unix-sockets (disables support for UNIX sockets) | ||||||
|      --disable-verbose (eliminates debugging strings and error code strings) |      --disable-verbose (eliminates debugging strings and error code strings) | ||||||
|  |      --disable-versioned-symbols (disables support for versioned symbols) | ||||||
|      --enable-hidden-symbols (eliminates unneeded symbols in the shared library) |      --enable-hidden-symbols (eliminates unneeded symbols in the shared library) | ||||||
|      --without-libidn (disables support for the libidn DNS library) |      --without-libidn (disables support for the libidn DNS library) | ||||||
|      --without-librtmp (disables support for RTMP) |      --without-librtmp (disables support for RTMP) | ||||||
| @@ -976,7 +986,7 @@ REDUCING SIZE | |||||||
|    configure command-line, e.g. |    configure command-line, e.g. | ||||||
|  |  | ||||||
|      CFLAGS="-Os -ffunction-sections -fdata-sections \ |      CFLAGS="-Os -ffunction-sections -fdata-sections \ | ||||||
|              -fno-unwind-tables -fno-asynchronous-unwind-tables" \ |              -fno-unwind-tables -fno-asynchronous-unwind-tables -flto" \ | ||||||
|      LDFLAGS="-Wl,-s -Wl,-Bsymbolic -Wl,--gc-sections" |      LDFLAGS="-Wl,-s -Wl,-Bsymbolic -Wl,--gc-sections" | ||||||
|  |  | ||||||
|    Be sure also to strip debugging symbols from your binaries after |    Be sure also to strip debugging symbols from your binaries after | ||||||
| @@ -986,9 +996,9 @@ REDUCING SIZE | |||||||
|    .comment section). |    .comment section). | ||||||
|  |  | ||||||
|    Using these techniques it is possible to create a basic HTTP-only shared |    Using these techniques it is possible to create a basic HTTP-only shared | ||||||
|    libcurl library for i386 Linux platforms that is only 114 KiB in size, and |    libcurl library for i386 Linux platforms that is only 109 KiB in size, and | ||||||
|    an FTP-only library that is 115 KiB in size (as of libcurl version 7.35.0, |    an FTP-only library that is 109 KiB in size (as of libcurl version 7.45.0, | ||||||
|    using gcc 4.8.2). |    using gcc 4.9.2). | ||||||
|  |  | ||||||
|    You may find that statically linking libcurl to your application will |    You may find that statically linking libcurl to your application will | ||||||
|    result in a lower total size than dynamically linking. |    result in a lower total size than dynamically linking. | ||||||
| @@ -1086,18 +1096,18 @@ Useful URLs | |||||||
|  |  | ||||||
| axTLS        http://axtls.sourceforge.net/ | axTLS        http://axtls.sourceforge.net/ | ||||||
| c-ares       http://c-ares.haxx.se/ | c-ares       http://c-ares.haxx.se/ | ||||||
| GNU GSS      http://www.gnu.org/software/gss/ | GNU GSS      https://www.gnu.org/software/gss/ | ||||||
| GnuTLS       http://www.gnu.org/software/gnutls/ | GnuTLS       https://www.gnu.org/software/gnutls/ | ||||||
| Heimdal      http://www.pdc.kth.se/heimdal/ | Heimdal      http://www.h5l.org/ | ||||||
| libidn       http://www.gnu.org/software/libidn/ | libidn       https://www.gnu.org/software/libidn/ | ||||||
| libmetalink  https://launchpad.net/libmetalink/ | libmetalink  https://launchpad.net/libmetalink/ | ||||||
| libssh2      http://www.libssh2.org/ | libssh2      http://www.libssh2.org/ | ||||||
| MIT Kerberos http://web.mit.edu/kerberos/www/dist/ | MIT Kerberos http://web.mit.edu/kerberos/www/dist/ | ||||||
| NSS          http://www.mozilla.org/projects/security/pki/nss/ | NSS          https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS | ||||||
| OpenLDAP     http://www.openldap.org/ | OpenLDAP     http://www.openldap.org/ | ||||||
| OpenSSL      http://www.openssl.org/ | OpenSSL      https://www.openssl.org/ | ||||||
| PolarSSL     http://polarssl.org/ | PolarSSL     https://tls.mbed.org/ | ||||||
| yassl        http://www.yassl.com/ | wolfSSL      https://www.wolfssl.com/wolfSSL/ | ||||||
| Zlib         http://www.zlib.net/ | Zlib         http://www.zlib.net/ | ||||||
|  |  | ||||||
| MingW        http://www.mingw.org/ | MingW        http://www.mingw.org/ | ||||||
|   | |||||||
| @@ -95,7 +95,7 @@ install instructions may produce erratic behaviour in DevCpp. For further info | |||||||
| check the following sites | check the following sites | ||||||
|  |  | ||||||
| http://aditsu.freeunixhost.com/dev-cpp-faq.html | http://aditsu.freeunixhost.com/dev-cpp-faq.html | ||||||
| http://sourceforge.net/forum/message.php?msg_id=3252213 | https://sourceforge.net/p/dev-cpp/discussion/48211/thread/2a85ea46 | ||||||
|  |  | ||||||
| As I have mentioned before I will confine this to the SSL Library compilations | As I have mentioned before I will confine this to the SSL Library compilations | ||||||
| but the process is very similar for compilation of the executable - curl.exe; | but the process is very similar for compilation of the executable - curl.exe; | ||||||
|   | |||||||
							
								
								
									
										907
									
								
								docs/INTERNALS
									
									
									
									
									
								
							
							
						
						
									
										907
									
								
								docs/INTERNALS
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -3,6 +3,18 @@ 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! | ||||||
|  |  | ||||||
|  | 91. "curl_easy_perform hangs with imap and PolarSSL" | ||||||
|  |   https://github.com/bagder/curl/issues/334 | ||||||
|  |  | ||||||
|  | 90. IMAP "SEARCH ALL" truncates output on large boxes. "A quick search of the | ||||||
|  |   code reveals that pingpong.c contains some truncation code, at line 408, | ||||||
|  |   when it deems the server response to be too large truncating it to 40 | ||||||
|  |   characters" | ||||||
|  |   http://curl.haxx.se/bug/view.cgi?id=1366 | ||||||
|  |  | ||||||
|  | 89. Disabling HTTP Pipelining when there are ongoing transfers can lead to | ||||||
|  |   heap corruption and crash. http://curl.haxx.se/bug/view.cgi?id=1411 | ||||||
|  |  | ||||||
| 88. libcurl doesn't support CURLINFO_FILETIME for SFTP transfers and thus | 88. libcurl doesn't support CURLINFO_FILETIME for SFTP transfers and thus | ||||||
|   curl's -R option also doesn't work then. |   curl's -R option also doesn't work then. | ||||||
|  |  | ||||||
| @@ -23,6 +35,7 @@ may have been fixed since this was written! | |||||||
|   CURLINFO_STARTTRANSFER_TIME is wrong. While using POST |   CURLINFO_STARTTRANSFER_TIME is wrong. While using POST | ||||||
|   CURLINFO_STARTTRANSFER_TIME minus CURLINFO_PRETRANSFER_TIME is near to zero |   CURLINFO_STARTTRANSFER_TIME minus CURLINFO_PRETRANSFER_TIME is near to zero | ||||||
|   every time. |   every time. | ||||||
|  |   https://github.com/bagder/curl/issues/218 | ||||||
|   http://curl.haxx.se/bug/view.cgi?id=1213 |   http://curl.haxx.se/bug/view.cgi?id=1213 | ||||||
|  |  | ||||||
| 84. CURLINFO_SSL_VERIFYRESULT is only implemented for the OpenSSL and NSS | 84. CURLINFO_SSL_VERIFYRESULT is only implemented for the OpenSSL and NSS | ||||||
| @@ -49,16 +62,6 @@ may have been fixed since this was written! | |||||||
|   that can receive data. This is subject for change in the future. |   that can receive data. This is subject for change in the future. | ||||||
|   http://curl.haxx.se/bug/view.cgi?id=1116 |   http://curl.haxx.se/bug/view.cgi?id=1116 | ||||||
|  |  | ||||||
| 78. curl and libcurl don't always signal the client properly when "sending" |  | ||||||
|   zero bytes files - it makes for example the command line client not creating |  | ||||||
|   any file at all. Like when using FTP. |  | ||||||
|   http://curl.haxx.se/bug/view.cgi?id=1063 |  | ||||||
|  |  | ||||||
| 76. The SOCKET type in Win64 is 64 bits large (and thus so is curl_socket_t on |  | ||||||
|   that platform), and long is only 32 bits. It makes it impossible for |  | ||||||
|   curl_easy_getinfo() to return a socket properly with the CURLINFO_LASTSOCKET |  | ||||||
|   option as for all other operating systems. |  | ||||||
|  |  | ||||||
| 75. NTLM authentication involving unicode user name or password only works | 75. NTLM authentication involving unicode user name or password only works | ||||||
|   properly if built with UNICODE defined together with the WinSSL/schannel |   properly if built with UNICODE defined together with the WinSSL/schannel | ||||||
|   backend. The original problem was mentioned in: |   backend. The original problem was mentioned in: | ||||||
| @@ -88,7 +91,7 @@ may have been fixed since this was written! | |||||||
|   something beyond ascii but currently libcurl will only pass in the verbatim |   something beyond ascii but currently libcurl will only pass in the verbatim | ||||||
|   string the app provides. There are several browsers that already do this |   string the app provides. There are several browsers that already do this | ||||||
|   encoding. The key seems to be the updated draft to RFC2231: |   encoding. The key seems to be the updated draft to RFC2231: | ||||||
|   http://tools.ietf.org/html/draft-reschke-rfc2231-in-http-02 |   https://tools.ietf.org/html/draft-reschke-rfc2231-in-http-02 | ||||||
|  |  | ||||||
| 66. When using telnet, the time limitation options don't work. | 66. When using telnet, the time limitation options don't work. | ||||||
|   http://curl.haxx.se/bug/view.cgi?id=846 |   http://curl.haxx.se/bug/view.cgi?id=846 | ||||||
| @@ -236,13 +239,3 @@ may have been fixed since this was written! | |||||||
|   it seems HTTP servers send the *uncompressed* length in that header and |   it seems HTTP servers send the *uncompressed* length in that header and | ||||||
|   libcurl thinks of it as the *compressed* length. Some explanations are here: |   libcurl thinks of it as the *compressed* length. Some explanations are here: | ||||||
|   http://curl.haxx.se/mail/lib-2003-06/0146.html |   http://curl.haxx.se/mail/lib-2003-06/0146.html | ||||||
|  |  | ||||||
| 2. If a HTTP server responds to a HEAD request and includes a body (thus |  | ||||||
|   violating the RFC2616), curl won't wait to read the response but just stop |  | ||||||
|   reading and return back. If a second request (let's assume a GET) is then |  | ||||||
|   immediately made to the same server again, the connection will be re-used |  | ||||||
|   fine of course, and the second request will be sent off but when the |  | ||||||
|   response is to get read, the previous response-body is what curl will read |  | ||||||
|   and havoc is what happens. |  | ||||||
|   More details on this is found in this libcurl mailing list thread: |  | ||||||
|   http://curl.haxx.se/mail/lib-2002-08/0000.html |  | ||||||
|   | |||||||
| @@ -1,245 +0,0 @@ | |||||||
|                                   _   _ ____  _ |  | ||||||
|                               ___| | | |  _ \| | |  | ||||||
|                              / __| | | | |_) | | |  | ||||||
|                             | (__| |_| |  _ <| |___ |  | ||||||
|                              \___|\___/|_| \_\_____| |  | ||||||
|  |  | ||||||
| Structs in libcurl |  | ||||||
|  |  | ||||||
| This document should cover 7.32.0 pretty accurately, but will make sense even |  | ||||||
| for older and later versions as things don't change drastically that often. |  | ||||||
|  |  | ||||||
|  1. The main structs in libcurl |  | ||||||
|   1.1 SessionHandle |  | ||||||
|   1.2 connectdata |  | ||||||
|   1.3 Curl_multi |  | ||||||
|   1.4 Curl_handler |  | ||||||
|   1.5 conncache |  | ||||||
|   1.6 Curl_share |  | ||||||
|   1.7 CookieInfo |  | ||||||
|  |  | ||||||
| ============================================================================== |  | ||||||
|  |  | ||||||
| 1. The main structs in libcurl |  | ||||||
|  |  | ||||||
|   1.1 SessionHandle |  | ||||||
|  |  | ||||||
|   The SessionHandle handle struct is the one returned to the outside in the |  | ||||||
|   external API as a "CURL *". This is usually known as an easy handle in API |  | ||||||
|   documentations and examples. |  | ||||||
|  |  | ||||||
|   Information and state that is related to the actual connection is in the |  | ||||||
|   'connectdata' struct. When a transfer is about to be made, libcurl will |  | ||||||
|   either create a new connection or re-use an existing one. The particular |  | ||||||
|   connectdata that is used by this handle is pointed out by |  | ||||||
|   SessionHandle->easy_conn. |  | ||||||
|  |  | ||||||
|   Data and information that regard this particular single transfer is put in |  | ||||||
|   the SingleRequest sub-struct. |  | ||||||
|  |  | ||||||
|   When the SessionHandle struct is added to a multi handle, as it must be in |  | ||||||
|   order to do any transfer, the ->multi member will point to the Curl_multi |  | ||||||
|   struct it belongs to. The ->prev and ->next members will then be used by the |  | ||||||
|   multi code to keep a linked list of SessionHandle structs that are added to |  | ||||||
|   that same multi handle. libcurl always uses multi so ->multi *will* point to |  | ||||||
|   a Curl_multi when a transfer is in progress. |  | ||||||
|  |  | ||||||
|   ->mstate is the multi state of this particular SessionHandle. When |  | ||||||
|   multi_runsingle() is called, it will act on this handle according to which |  | ||||||
|   state it is in. The mstate is also what tells which sockets to return for a |  | ||||||
|   specific SessionHandle when curl_multi_fdset() is called etc. |  | ||||||
|  |  | ||||||
|   The libcurl source code generally use the name 'data' for the variable that |  | ||||||
|   points to the SessionHandle. |  | ||||||
|  |  | ||||||
|  |  | ||||||
|   1.2 connectdata |  | ||||||
|  |  | ||||||
|   A general idea in libcurl is to keep connections around in a connection |  | ||||||
|   "cache" after they have been used in case they will be used again and then |  | ||||||
|   re-use an existing one instead of creating a new as it creates a significant |  | ||||||
|   performance boost. |  | ||||||
|  |  | ||||||
|   Each 'connectdata' identifies a single physical connection to a server. If |  | ||||||
|   the connection can't be kept alive, the connection will be closed after use |  | ||||||
|   and then this struct can be removed from the cache and freed. |  | ||||||
|  |  | ||||||
|   Thus, the same SessionHandle can be used multiple times and each time select |  | ||||||
|   another connectdata struct to use for the connection. Keep this in mind, as |  | ||||||
|   it is then important to consider if options or choices are based on the |  | ||||||
|   connection or the SessionHandle. |  | ||||||
|  |  | ||||||
|   Functions in libcurl will assume that connectdata->data points to the |  | ||||||
|   SessionHandle that uses this connection. |  | ||||||
|  |  | ||||||
|   As a special complexity, some protocols supported by libcurl require a |  | ||||||
|   special disconnect procedure that is more than just shutting down the |  | ||||||
|   socket. It can involve sending one or more commands to the server before |  | ||||||
|   doing so. Since connections are kept in the connection cache after use, the |  | ||||||
|   original SessionHandle may no longer be around when the time comes to shut |  | ||||||
|   down a particular connection. For this purpose, libcurl holds a special |  | ||||||
|   dummy 'closure_handle' SessionHandle in the Curl_multi struct to  |  | ||||||
|  |  | ||||||
|   FTP uses two TCP connections for a typical transfer but it keeps both in |  | ||||||
|   this single struct and thus can be considered a single connection for most |  | ||||||
|   internal concerns. |  | ||||||
|  |  | ||||||
|   The libcurl source code generally use the name 'conn' for the variable that |  | ||||||
|   points to the connectdata. |  | ||||||
|  |  | ||||||
|  |  | ||||||
|   1.3 Curl_multi |  | ||||||
|  |  | ||||||
|   Internally, the easy interface is implemented as a wrapper around multi |  | ||||||
|   interface functions. This makes everything multi interface. |  | ||||||
|  |  | ||||||
|   Curl_multi is the multi handle struct exposed as "CURLM *" in external APIs. |  | ||||||
|  |  | ||||||
|   This struct holds a list of SessionHandle structs that have been added to |  | ||||||
|   this handle with curl_multi_add_handle(). The start of the list is ->easyp |  | ||||||
|   and ->num_easy is a counter of added SessionHandles. |  | ||||||
|  |  | ||||||
|   ->msglist is a linked list of messages to send back when |  | ||||||
|   curl_multi_info_read() is called. Basically a node is added to that list |  | ||||||
|   when an individual SessionHandle's transfer has completed. |  | ||||||
|  |  | ||||||
|   ->hostcache points to the name cache. It is a hash table for looking up name |  | ||||||
|   to IP. The nodes have a limited life time in there and this cache is meant |  | ||||||
|   to reduce the time for when the same name is wanted within a short period of |  | ||||||
|   time. |  | ||||||
|  |  | ||||||
|   ->timetree points to a tree of SessionHandles, sorted by the remaining time |  | ||||||
|   until it should be checked - normally some sort of timeout. Each |  | ||||||
|   SessionHandle has one node in the tree. |  | ||||||
|  |  | ||||||
|   ->sockhash is a hash table to allow fast lookups of socket descriptor to |  | ||||||
|   which SessionHandle that uses that descriptor. This is necessary for the |  | ||||||
|   multi_socket API. |  | ||||||
|  |  | ||||||
|   ->conn_cache points to the connection cache. It keeps track of all |  | ||||||
|   connections that are kept after use. The cache has a maximum size. |  | ||||||
|  |  | ||||||
|   ->closure_handle is described in the 'connectdata' section. |  | ||||||
|  |  | ||||||
|   The libcurl source code generally use the name 'multi' for the variable that |  | ||||||
|   points to the Curl_multi struct. |  | ||||||
|  |  | ||||||
|  |  | ||||||
|   1.4 Curl_handler |  | ||||||
|  |  | ||||||
|   Each unique protocol that is supported by libcurl needs to provide at least |  | ||||||
|   one Curl_handler struct. It defines what the protocol is called and what |  | ||||||
|   functions the main code should call to deal with protocol specific issues. |  | ||||||
|   In general, there's a source file named [protocol].c in which there's a |  | ||||||
|   "struct Curl_handler Curl_handler_[protocol]" declared. In url.c there's |  | ||||||
|   then the main array with all individual Curl_handler structs pointed to from |  | ||||||
|   a single array which is scanned through when a URL is given to libcurl to |  | ||||||
|   work with. |  | ||||||
|  |  | ||||||
|   ->scheme is the URL scheme name, usually spelled out in uppercase. That's |  | ||||||
|   "HTTP" or "FTP" etc. SSL versions of the protcol need its own Curl_handler |  | ||||||
|   setup so HTTPS separate from HTTP. |  | ||||||
|  |  | ||||||
|   ->setup_connection is called to allow the protocol code to allocate protocol |  | ||||||
|   specific data that then gets associated with that SessionHandle for the rest |  | ||||||
|   of this transfer. It gets freed again at the end of the transfer. It will be |  | ||||||
|   called before the 'connectdata' for the transfer has been selected/created. |  | ||||||
|   Most protocols will allocate its private 'struct [PROTOCOL]' here and assign |  | ||||||
|   SessionHandle->req.protop to point to it. |  | ||||||
|  |  | ||||||
|   ->connect_it allows a protocol to do some specific actions after the TCP |  | ||||||
|   connect is done, that can still be considered part of the connection phase. |  | ||||||
|  |  | ||||||
|   Some protocols will alter the connectdata->recv[] and connectdata->send[] |  | ||||||
|   function pointers in this function. |  | ||||||
|  |  | ||||||
|   ->connecting is similarly a function that keeps getting called as long as the |  | ||||||
|   protocol considers itself still in the connecting phase. |  | ||||||
|  |  | ||||||
|   ->do_it is the function called to issue the transfer request. What we call |  | ||||||
|   the DO action internally. If the DO is not enough and things need to be kept |  | ||||||
|   getting done for the entire DO sequence to complete, ->doing is then usually |  | ||||||
|   also provided. Each protocol that needs to do multiple commands or similar |  | ||||||
|   for do/doing need to implement their own state machines (see SCP, SFTP, |  | ||||||
|   FTP). Some protocols (only FTP and only due to historical reasons) has a |  | ||||||
|   separate piece of the DO state called DO_MORE. |  | ||||||
|  |  | ||||||
|   ->doing keeps getting called while issuing the transfer request command(s) |  | ||||||
|  |  | ||||||
|   ->done gets called when the transfer is complete and DONE. That's after the |  | ||||||
|   main data has been transferred. |  | ||||||
|  |  | ||||||
|   ->do_more gets called during the DO_MORE state. The FTP protocol uses this |  | ||||||
|   state when setting up the second connection. |  | ||||||
|  |  | ||||||
|   ->proto_getsock |  | ||||||
|   ->doing_getsock |  | ||||||
|   ->domore_getsock |  | ||||||
|   ->perform_getsock |  | ||||||
|   Functions that return socket information. Which socket(s) to wait for which |  | ||||||
|   action(s) during the particular multi state. |  | ||||||
|  |  | ||||||
|   ->disconnect is called immediately before the TCP connection is shutdown. |  | ||||||
|  |  | ||||||
|   ->readwrite gets called during transfer to allow the protocol to do extra |  | ||||||
|   reads/writes |  | ||||||
|  |  | ||||||
|   ->defport is the default report TCP or UDP port this protocol uses |  | ||||||
|  |  | ||||||
|   ->protocol is one or more bits in the CURLPROTO_* set. The SSL versions have |  | ||||||
|   their "base" protocol set and then the SSL variation. Like "HTTP|HTTPS". |  | ||||||
|  |  | ||||||
|   ->flags is a bitmask with additional information about the protocol that will |  | ||||||
|   make it get treated differently by the generic engine: |  | ||||||
|  |  | ||||||
|     PROTOPT_SSL - will make it connect and negotiate SSL |  | ||||||
|  |  | ||||||
|     PROTOPT_DUAL - this protocol uses two connections |  | ||||||
|  |  | ||||||
|     PROTOPT_CLOSEACTION - this protocol has actions to do before closing the |  | ||||||
|     connection. This flag is no longer used by code, yet still set for a bunch |  | ||||||
|     protocol handlers. |  | ||||||
|    |  | ||||||
|     PROTOPT_DIRLOCK - "direction lock". The SSH protocols set this bit to |  | ||||||
|     limit which "direction" of socket actions that the main engine will |  | ||||||
|     concern itself about. |  | ||||||
|  |  | ||||||
|     PROTOPT_NONETWORK - a protocol that doesn't use network (read file:) |  | ||||||
|  |  | ||||||
|     PROTOPT_NEEDSPWD - this protocol needs a password and will use a default |  | ||||||
|     one unless one is provided |  | ||||||
|  |  | ||||||
|     PROTOPT_NOURLQUERY - this protocol can't handle a query part on the URL |  | ||||||
|     (?foo=bar) |  | ||||||
|  |  | ||||||
|  |  | ||||||
|   1.5 conncache |  | ||||||
|  |  | ||||||
|   Is a hash table with connections for later re-use. Each SessionHandle has |  | ||||||
|   a pointer to its connection cache. Each multi handle sets up a connection |  | ||||||
|   cache that all added SessionHandles share by default. |  | ||||||
|  |  | ||||||
|  |  | ||||||
|   1.6 Curl_share |  | ||||||
|    |  | ||||||
|   The libcurl share API allocates a Curl_share struct, exposed to the external |  | ||||||
|   API as "CURLSH *". |  | ||||||
|  |  | ||||||
|   The idea is that the struct can have a set of own versions of caches and |  | ||||||
|   pools and then by providing this struct in the CURLOPT_SHARE option, those |  | ||||||
|   specific SessionHandles will use the caches/pools that this share handle |  | ||||||
|   holds. |  | ||||||
|  |  | ||||||
|   Then individual SessionHandle structs can be made to share specific things |  | ||||||
|   that they otherwise wouldn't, such as cookies. |  | ||||||
|  |  | ||||||
|   The Curl_share struct can currently hold cookies, DNS cache and the SSL |  | ||||||
|   session cache. |  | ||||||
|  |  | ||||||
|    |  | ||||||
|   1.7 CookieInfo |  | ||||||
|  |  | ||||||
|   This is the main cookie struct. It holds all known cookies and related |  | ||||||
|   information. Each SessionHandle has its own private CookieInfo even when |  | ||||||
|   they are added to a multi handle. They can be made to share cookies by using |  | ||||||
|   the share API. |  | ||||||
| @@ -23,29 +23,29 @@ libcurl http://curl.haxx.se/docs/copyright.html | |||||||
|         Uses an MIT (or Modified BSD)-style license that is as liberal as |         Uses an MIT (or Modified BSD)-style license that is as liberal as | ||||||
|         possible. |         possible. | ||||||
|  |  | ||||||
| OpenSSL http://www.openssl.org/source/license.html | OpenSSL https://www.openssl.org/source/license.html | ||||||
|  |  | ||||||
|         (May be used for SSL/TLS support) Uses an Original BSD-style license |         (May be used for SSL/TLS support) Uses an Original BSD-style license | ||||||
|         with an announcement clause that makes it "incompatible" with GPL. You |         with an announcement clause that makes it "incompatible" with GPL. You | ||||||
|         are not allowed to ship binaries that link with OpenSSL that includes |         are not allowed to ship binaries that link with OpenSSL that includes | ||||||
|         GPL code (unless that specific GPL code includes an exception for |         GPL code (unless that specific GPL code includes an exception for | ||||||
|         OpenSSL - a habit that is growing more and more common). If OpenSSL's |         OpenSSL - a habit that is growing more and more common). If OpenSSL's | ||||||
|         licensing is a problem for you, consider using GnuTLS or yassl |         licensing is a problem for you, consider using another TLS library. | ||||||
|         instead. |  | ||||||
|  |  | ||||||
| GnuTLS  http://www.gnutls.org/ | GnuTLS  http://www.gnutls.org/ | ||||||
|  |  | ||||||
|         (May be used for SSL/TLS support) Uses the LGPL[3] license. If this is |         (May be used for SSL/TLS support) Uses the LGPL[3] license. If this is | ||||||
|         a problem for you, consider using OpenSSL instead. Also note that |         a problem for you, consider using another TLS library. Also note that | ||||||
|         GnuTLS itself depends on and uses other libs (libgcrypt and |         GnuTLS itself depends on and uses other libs (libgcrypt and | ||||||
|         libgpg-error) and they too are LGPL- or GPL-licensed. |         libgpg-error) and they too are LGPL- or GPL-licensed. | ||||||
|  |  | ||||||
| yassl   http://www.yassl.com/ | WolfSSL   https://www.wolfssl.com/ | ||||||
|  |  | ||||||
|         (May be used for SSL/TLS support) Uses the GPL[1] license. If this is |         (May be used for SSL/TLS support) Uses the GPL[1] license or a | ||||||
|         a problem for you, consider using OpenSSL or GnuTLS instead. |         propietary license. If this is a problem for you, consider using | ||||||
|  |         another TLS library. | ||||||
|  |  | ||||||
| NSS     http://www.mozilla.org/projects/security/pki/nss/ | NSS     https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS | ||||||
|  |  | ||||||
|         (May be used for SSL/TLS support) Is covered by the MPL[4] license, |         (May be used for SSL/TLS support) Is covered by the MPL[4] license, | ||||||
|         the GPL[1] license and the LGPL[3] license. You may choose to license |         the GPL[1] license and the LGPL[3] license. You may choose to license | ||||||
| @@ -57,13 +57,29 @@ axTLS   http://axtls.sourceforge.net/ | |||||||
|  |  | ||||||
|         (May be used for SSL/TLS support) Uses a Modified BSD-style license. |         (May be used for SSL/TLS support) Uses a Modified BSD-style license. | ||||||
|  |  | ||||||
|  | mbedTLS https://tls.mbed.org/ | ||||||
|  |  | ||||||
|  |         (May be used for SSL/TLS support) Uses the GPL[1] license or a | ||||||
|  |         propietary license. If this is a problem for you, consider using | ||||||
|  |         another TLS library. | ||||||
|  |  | ||||||
|  | BoringSSL https://boringssl.googlesource.com/ | ||||||
|  |  | ||||||
|  |         (May be used for SSL/TLS support) As an OpenSSL fork, it has the same | ||||||
|  |         license as that. | ||||||
|  |  | ||||||
|  | libressl http://www.libressl.org/ | ||||||
|  |  | ||||||
|  |         (May be used for SSL/TLS support) As an OpenSSL fork, it has the same | ||||||
|  |         license as that. | ||||||
|  |  | ||||||
| c-ares  http://daniel.haxx.se/projects/c-ares/license.html | c-ares  http://daniel.haxx.se/projects/c-ares/license.html | ||||||
|  |  | ||||||
|         (Used for asynchronous name resolves) Uses an MIT license that is very |         (Used for asynchronous name resolves) Uses an MIT license that is very | ||||||
|         liberal and imposes no restrictions on any other library or part you |         liberal and imposes no restrictions on any other library or part you | ||||||
|         may link with. |         may link with. | ||||||
|  |  | ||||||
| zlib    http://www.gzip.org/zlib/zlib_license.html | zlib    http://www.zlib.net/zlib_license.html | ||||||
|  |  | ||||||
|         (Used for compressed Transfer-Encoding support) Uses an MIT-style |         (Used for compressed Transfer-Encoding support) Uses an MIT-style | ||||||
|         license that shouldn't collide with any other library. |         license that shouldn't collide with any other library. | ||||||
| @@ -73,12 +89,12 @@ MIT Kerberos http://web.mit.edu/kerberos/www/dist/ | |||||||
|         (May be used for GSS support) MIT licensed, that shouldn't collide |         (May be used for GSS support) MIT licensed, that shouldn't collide | ||||||
|         with any other parts. |         with any other parts. | ||||||
|  |  | ||||||
| Heimdal http://www.pdc.kth.se/heimdal/ | Heimdal http://www.h5l.org | ||||||
|  |  | ||||||
|         (May be used for GSS support) Heimdal is Original BSD licensed with |         (May be used for GSS support) Heimdal is Original BSD licensed with | ||||||
|         the announcement clause. |         the announcement clause. | ||||||
|  |  | ||||||
| GNU GSS http://www.gnu.org/software/gss/ | GNU GSS https://www.gnu.org/software/gss/ | ||||||
|  |  | ||||||
|         (May be used for GSS support) GNU GSS is GPL licensed. Note that you |         (May be used for GSS support) GNU GSS is GPL licensed. Note that you | ||||||
|         may not distribute binary curl packages that uses this if you build |         may not distribute binary curl packages that uses this if you build | ||||||
| @@ -105,10 +121,10 @@ libssh2 http://www.libssh2.org/ | |||||||
|         (Used for scp and sftp support) libssh2 uses a Modified BSD-style |         (Used for scp and sftp support) libssh2 uses a Modified BSD-style | ||||||
|         license. |         license. | ||||||
|  |  | ||||||
| [1] = GPL - GNU General Public License: http://www.gnu.org/licenses/gpl.html | [1] = GPL - GNU General Public License: https://www.gnu.org/licenses/gpl.html | ||||||
| [2] = http://www.fsf.org/licenses/gpl-faq.html#GPLIncompatibleLibs details on | [2] = https://www.gnu.org/licenses/gpl-faq.html#GPLIncompatibleLibs details on | ||||||
|       how to write such an exception to the GPL |       how to write such an exception to the GPL | ||||||
| [3] = LGPL - GNU Lesser General Public License: | [3] = LGPL - GNU Lesser General Public License: | ||||||
|       http://www.gnu.org/licenses/lgpl.html |       https://www.gnu.org/licenses/lgpl.html | ||||||
| [4] = MPL - Mozilla Public License: | [4] = MPL - Mozilla Public License: | ||||||
|       http://www.mozilla.org/MPL/ |       https://www.mozilla.org/MPL/ | ||||||
|   | |||||||
| @@ -230,7 +230,7 @@ MAIL ETIQUETTE | |||||||
|   Quote as little as possible. Just enough to provide the context you cannot |   Quote as little as possible. Just enough to provide the context you cannot | ||||||
|   leave out. A lengthy description can be found here: |   leave out. A lengthy description can be found here: | ||||||
|  |  | ||||||
|       http://www.netmeister.org/news/learn2quote.html |       https://www.netmeister.org/news/learn2quote.html | ||||||
|  |  | ||||||
|   2.7 Digest |   2.7 Digest | ||||||
|  |  | ||||||
|   | |||||||
| @@ -470,8 +470,8 @@ COOKIES | |||||||
|   stored cookies which match the request as it follows the location.  The |   stored cookies which match the request as it follows the location.  The | ||||||
|   file "empty.txt" may be a nonexistent file. |   file "empty.txt" may be a nonexistent file. | ||||||
|  |  | ||||||
|   Alas, to both read and write cookies from a netscape cookie file, you can |   To read and write cookies from a netscape cookie file, you can set both -b | ||||||
|   set both -b and -c to use the same file: |   and -c to use the same file: | ||||||
|  |  | ||||||
|         curl -b cookies.txt -c cookies.txt www.example.com |         curl -b cookies.txt -c cookies.txt www.example.com | ||||||
|  |  | ||||||
|   | |||||||
| @@ -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 | ||||||
| @@ -33,22 +33,22 @@ SUBDIRS = examples libcurl | |||||||
|  |  | ||||||
| CLEANFILES = $(GENHTMLPAGES) $(PDFPAGES) | CLEANFILES = $(GENHTMLPAGES) $(PDFPAGES) | ||||||
|  |  | ||||||
| EXTRA_DIST = MANUAL BUGS CONTRIBUTE FAQ FEATURES INTERNALS SSLCERTS	 \ | EXTRA_DIST = MANUAL BUGS CONTRIBUTE FAQ FEATURES INTERNALS SSLCERTS	\ | ||||||
|  README.win32 RESOURCES TODO TheArtOfHttpScripting THANKS VERSIONS	 \ |  README.win32 RESOURCES TODO TheArtOfHttpScripting THANKS VERSIONS	\ | ||||||
|  KNOWN_BUGS BINDINGS $(man_MANS) $(HTMLPAGES) HISTORY INSTALL		 \ |  KNOWN_BUGS BINDINGS $(man_MANS) $(HTMLPAGES) HISTORY INSTALL		\ | ||||||
|  $(PDFPAGES) LICENSE-MIXING README.netware DISTRO-DILEMMA INSTALL.devcpp \ |  $(PDFPAGES) LICENSE-MIXING README.netware INSTALL.devcpp		\ | ||||||
|  MAIL-ETIQUETTE HTTP-COOKIES LIBCURL-STRUCTS SECURITY RELEASE-PROCEDURE  \ |  MAIL-ETIQUETTE HTTP-COOKIES SECURITY RELEASE-PROCEDURE SSL-PROBLEMS	\ | ||||||
|  SSL-PROBLEMS |  HTTP2.md ROADMAP.md CODE_OF_CONDUCT.md | ||||||
|  |  | ||||||
| MAN2HTML= roffit < $< >$@ | MAN2HTML= roffit < $< >$@ | ||||||
|  |  | ||||||
| SUFFIXES = .1 .html .pdf | SUFFIXES = .1 .html .pdf | ||||||
|  |  | ||||||
| html: $(HTMLPAGES) | html: $(HTMLPAGES) | ||||||
| 	cd libcurl; make html | 	cd libcurl && make html | ||||||
|  |  | ||||||
| pdf: $(PDFPAGES) | pdf: $(PDFPAGES) | ||||||
| 	cd libcurl; make pdf | 	cd libcurl && make pdf | ||||||
|  |  | ||||||
| .1.html: | .1.html: | ||||||
| 	$(MAN2HTML) | 	$(MAN2HTML) | ||||||
|   | |||||||
| @@ -1,9 +1,3 @@ | |||||||
|                                   _   _ ____  _ |  | ||||||
|                               ___| | | |  _ \| | |  | ||||||
|                              / __| | | | |_) | | |  | ||||||
|                             | (__| |_| |  _ <| |___ |  | ||||||
|                              \___|\___/|_| \_\_____| |  | ||||||
|  |  | ||||||
| curl release procedure - how to do a release | curl release procedure - how to do a release | ||||||
| ============================================ | ============================================ | ||||||
|  |  | ||||||
| @@ -30,6 +24,8 @@ in the source code repo | |||||||
|  |  | ||||||
| - upload the 8 resulting files to the primary download directory | - upload the 8 resulting files to the primary download directory | ||||||
|  |  | ||||||
|  | - upload the 4 tarballs to github for the HTTPS download | ||||||
|  |  | ||||||
| in the curl-www repo | in the curl-www repo | ||||||
| -------------------- | -------------------- | ||||||
|  |  | ||||||
| @@ -84,11 +80,10 @@ Coming dates | |||||||
| Based on the description above, here are some planned release dates (at the | Based on the description above, here are some planned release dates (at the | ||||||
| time of this writing): | time of this writing): | ||||||
|  |  | ||||||
| - November 5, 2014 (version 7.39.0) | - October 7, 2015 (version 7.45.0) | ||||||
| - December 31, 2014 |  | ||||||
| - February 25, 2015 |  | ||||||
| - April 22, 2015 |  | ||||||
| - June 17, 2015 |  | ||||||
| - August 12, 2015 |  | ||||||
| - October 7, 2015 |  | ||||||
| - December 2, 2015 | - December 2, 2015 | ||||||
|  | - January 27, 2016 | ||||||
|  | - March 23, 2016 | ||||||
|  | - May 18, 2016 | ||||||
|  | - July 13, 2016 | ||||||
|  | - September 7, 2016 | ||||||
|   | |||||||
							
								
								
									
										109
									
								
								docs/ROADMAP.md
									
									
									
									
									
								
							
							
						
						
									
										109
									
								
								docs/ROADMAP.md
									
									
									
									
									
								
							| @@ -5,44 +5,79 @@ Roadmap of things Daniel Stenberg and Steve Holme want to work on next. It is | |||||||
| intended to serve as a guideline for others for information, feedback and | intended to serve as a guideline for others for information, feedback and | ||||||
| possible participation. | possible participation. | ||||||
|  |  | ||||||
| New stuff - libcurl | HTTP/2 | ||||||
|  | ------ | ||||||
|  |  | ||||||
|  | - test suite | ||||||
|  |  | ||||||
|  |    Base this on existing nghttp2 server to start with to make functional | ||||||
|  |    tests. Later on we can adopt that code or work with nghttp2 to provide ways | ||||||
|  |    to have the http2 server respond with broken responses to make sure we deal | ||||||
|  |    with that nicely as well. | ||||||
|  |  | ||||||
|  |    To decide: if we need to bundle parts of the nghttp2 stuff that probably | ||||||
|  |    won't be shipped by many distros. | ||||||
|  |  | ||||||
|  | - provide option for HTTP/2 "prior knowledge" over clear text | ||||||
|  |  | ||||||
|  |    As it would avoid the roundtrip-heavy Upgrade: procedures when you _know_ | ||||||
|  |    it speaks HTTP/2. | ||||||
|  |  | ||||||
|  | SRV records | ||||||
|  | ----------- | ||||||
|  |  | ||||||
|  | How to find services for specific domains/hosts. | ||||||
|  |  | ||||||
|  | HTTPS to proxy | ||||||
|  | -------------- | ||||||
|  |  | ||||||
|  | To avoid network traffic to/from the proxy getting snooped on. | ||||||
|  |  | ||||||
|  | curl_formadd() | ||||||
|  | -------------- | ||||||
|  |  | ||||||
|  | make sure there's an easy handle passed in to `curl_formadd()`, | ||||||
|  | `curl_formget()` and `curl_formfree()` by adding replacement functions and | ||||||
|  | deprecating the old ones to allow custom mallocs and more | ||||||
|  |  | ||||||
|  | third-party SASL | ||||||
|  | ---------------- | ||||||
|  |  | ||||||
|  | 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 | ||||||
|  | reworking HTTP and SASL code | ||||||
|  |  | ||||||
|  | SASL authentication in LDAP | ||||||
|  | --------------------------- | ||||||
|  |  | ||||||
|  | ... | ||||||
|  |  | ||||||
|  | Simplify the SMTP email | ||||||
|  | ----------------------- | ||||||
|  |  | ||||||
|  | Simplify the SMTP email interface so that programmers don't have to | ||||||
|  | construct the body of an email that contains all the headers, alternative | ||||||
|  | content, images and attachments - maintain raw interface so that | ||||||
|  | programmers that want to do this can | ||||||
|  |  | ||||||
|  | email capabilities | ||||||
|  | ------------------ | ||||||
|  |  | ||||||
|  | Allow the email protocols to return the capabilities before | ||||||
|  | authenticating. This will allow an application to decide on the best | ||||||
|  | authentication mechanism | ||||||
|  |  | ||||||
|  | Win32 pthreads | ||||||
|  | -------------- | ||||||
|  |  | ||||||
|  | Allow Windows threading model to be replaced by Win32 pthreads port | ||||||
|  |  | ||||||
|  | dynamic buffer size | ||||||
| ------------------- | ------------------- | ||||||
|  |  | ||||||
| 1. HTTP/2 | 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 memory | ||||||
|  - test suite | when handles are not in use? | ||||||
|  - 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 |  | ||||||
|  |  | ||||||
| 2. SRV records |  | ||||||
|  |  | ||||||
| 3. HTTPS to proxy |  | ||||||
|  |  | ||||||
| 4. make sure there's an easy handle passed in to `curl_formadd()`, |  | ||||||
|    `curl_formget()` and `curl_formfree()` by adding replacement functions and |  | ||||||
|    deprecating the old ones to allow custom mallocs and more |  | ||||||
|  |  | ||||||
| 5. 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 |  | ||||||
|    reworking HTTP and SASL code |  | ||||||
|  |  | ||||||
| 6. SASL authentication in LDAP |  | ||||||
|  |  | ||||||
| 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 |  | ||||||
|    content, images and attachments - maintain raw interface so that |  | ||||||
|    programmers that want to do this can |  | ||||||
|  |  | ||||||
| 8. Allow the email protocols to return the capabilities before |  | ||||||
|     authenticating. This will allow an application to decide on the best |  | ||||||
|     authentication mechanism |  | ||||||
|  |  | ||||||
| 9. Allow Windows threading model to be replaced by Win32 pthreads port |  | ||||||
|  |  | ||||||
| 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 |  | ||||||
|     memory when handles are not in use? |  | ||||||
|  |  | ||||||
| New stuff - curl | New stuff - curl | ||||||
| ---------------- | ---------------- | ||||||
| @@ -61,7 +96,7 @@ Improve | |||||||
|  |  | ||||||
| 2. curl -h output (considered overwhelming to users) | 2. curl -h output (considered overwhelming to users) | ||||||
|  |  | ||||||
| 3. we have > 160 command line options, is there a way to redo things to | 3. we have > 170 command line options, is there a way to redo things to | ||||||
|    simplify or improve the situation as we are likely to keep adding |    simplify or improve the situation as we are likely to keep adding | ||||||
|    features/options in the future too |    features/options in the future too | ||||||
|  |  | ||||||
|   | |||||||
| @@ -26,7 +26,7 @@ CA bundle missing intermediate certificates | |||||||
|   problems if your CA cert does not have the certificates for the |   problems if your CA cert does not have the certificates for the | ||||||
|   intermediates in the whole trust chain. |   intermediates in the whole trust chain. | ||||||
|  |  | ||||||
| SSL version | Protocol version | ||||||
|  |  | ||||||
|   Some broken servers fail to support the protocol negotiation properly that |   Some broken servers fail to support the protocol negotiation properly that | ||||||
|   SSL servers are supposed to handle. This may cause the connection to fail |   SSL servers are supposed to handle. This may cause the connection to fail | ||||||
| @@ -36,7 +36,9 @@ SSL version | |||||||
|   An additional complication can be that modern SSL libraries sometimes are |   An additional complication can be that modern SSL libraries sometimes are | ||||||
|   built with support for older SSL and TLS versions disabled! |   built with support for older SSL and TLS versions disabled! | ||||||
|  |  | ||||||
| SSL ciphers |   All versions of SSL are considered insecure and should be avoided. Use TLS. | ||||||
|  |  | ||||||
|  | Ciphers | ||||||
|  |  | ||||||
|   Clients give servers a list of ciphers to select from. If the list doesn't |   Clients give servers a list of ciphers to select from. If the list doesn't | ||||||
|   include any ciphers the server wants/can use, the connection handshake |   include any ciphers the server wants/can use, the connection handshake | ||||||
| @@ -51,9 +53,13 @@ SSL ciphers | |||||||
|   Note that these weak ciphers are identified as flawed. For example, this |   Note that these weak ciphers are identified as flawed. For example, this | ||||||
|   includes symmetric ciphers with less than 128 bit keys and RC4. |   includes symmetric ciphers with less than 128 bit keys and RC4. | ||||||
|  |  | ||||||
|  |   WinSSL in Windows XP is not able to connect to servers that no longer | ||||||
|  |   support the legacy handshakes and algorithms used by those versions, so we | ||||||
|  |   advice against building curl to use WinSSL on really old Windows versions. | ||||||
|  |  | ||||||
|   References: |   References: | ||||||
|  |  | ||||||
|   http://tools.ietf.org/html/draft-popov-tls-prohibiting-rc4-01 |   https://tools.ietf.org/html/draft-popov-tls-prohibiting-rc4-01 | ||||||
|    |    | ||||||
| Allow BEAST | Allow BEAST | ||||||
|  |  | ||||||
| @@ -65,3 +71,17 @@ Allow BEAST | |||||||
|   introduced. Exactly as it sounds, it re-introduces the BEAST vulnerability |   introduced. Exactly as it sounds, it re-introduces the BEAST vulnerability | ||||||
|   but on the other hand it allows curl to connect to that kind of strange |   but on the other hand it allows curl to connect to that kind of strange | ||||||
|   servers. |   servers. | ||||||
|  |  | ||||||
|  | Disabling certificate revocation checks | ||||||
|  |  | ||||||
|  |   Some SSL backends may do certificate revocation checks (CRL, OCSP, etc) | ||||||
|  |   depending on the OS or build configuration. The --ssl-no-revoke option was | ||||||
|  |   introduced in 7.44.0 to disable revocation checking but currently is only | ||||||
|  |   supported for WinSSL (the native Windows SSL library), with an exception in | ||||||
|  |   the case of Windows' Untrusted Publishers blacklist which it seems can't be | ||||||
|  |   bypassed. This option may have broader support to accommodate other SSL | ||||||
|  |   backends in the future. | ||||||
|  |  | ||||||
|  |   References: | ||||||
|  |  | ||||||
|  |   http://curl.haxx.se/docs/ssl-compared.html | ||||||
|   | |||||||
							
								
								
									
										106
									
								
								docs/THANKS
									
									
									
									
									
								
							
							
						
						
									
										106
									
								
								docs/THANKS
									
									
									
									
									
								
							| @@ -36,10 +36,13 @@ Alex Suykov | |||||||
| Alex Vinnik | Alex Vinnik | ||||||
| Alex aka WindEagle | Alex aka WindEagle | ||||||
| Alexander Beedie | Alexander Beedie | ||||||
|  | Alexander Dyagilev | ||||||
|  | Alexander Elgert | ||||||
| Alexander Klauer | Alexander Klauer | ||||||
| Alexander Kourakos | Alexander Kourakos | ||||||
| Alexander Krasnostavsky | Alexander Krasnostavsky | ||||||
| Alexander Lazic | Alexander Lazic | ||||||
|  | Alexander Pepper | ||||||
| Alexander Peslyak | Alexander Peslyak | ||||||
| Alexander Zhuravlev | Alexander Zhuravlev | ||||||
| Alexey Borzov | Alexey Borzov | ||||||
| @@ -53,6 +56,7 @@ Alona Rossen | |||||||
| Amol Pattekar | Amol Pattekar | ||||||
| Amr Shahin | Amr Shahin | ||||||
| Anatoli Tubman | Anatoli Tubman | ||||||
|  | Anders Bakken | ||||||
| Anders Gustafsson | Anders Gustafsson | ||||||
| Anders Havn | Anders Havn | ||||||
| Andi Jahja | Andi Jahja | ||||||
| @@ -88,6 +92,7 @@ Andy Serpa | |||||||
| Andy Tsouladze | Andy Tsouladze | ||||||
| Angus Mackay | Angus Mackay | ||||||
| Anthon Pang | Anthon Pang | ||||||
|  | Anthony Avina | ||||||
| Anthony Bryan | Anthony Bryan | ||||||
| Anthony G. Basile | Anthony G. Basile | ||||||
| Antoine Calando | Antoine Calando | ||||||
| @@ -102,6 +107,7 @@ Arnaud Ebalard | |||||||
| Arthur Murray | Arthur Murray | ||||||
| Arve Knudsen | Arve Knudsen | ||||||
| Arvid Norberg | Arvid Norberg | ||||||
|  | Ashish Shukla | ||||||
| Ask Bjørn Hansen | Ask Bjørn Hansen | ||||||
| Askar Safin | Askar Safin | ||||||
| Ates Goral | Ates Goral | ||||||
| @@ -125,11 +131,14 @@ Benbuck Nason | |||||||
| Benjamin Gerard | Benjamin Gerard | ||||||
| Benjamin Gilbert | Benjamin Gilbert | ||||||
| Benjamin Johnson | Benjamin Johnson | ||||||
|  | Benjamin Kircher | ||||||
| Benoit Neil | Benoit Neil | ||||||
| Benoit Sigoure | Benoit Sigoure | ||||||
| Bernard Leak | Bernard Leak | ||||||
| Bernhard Reutner-Fischer | Bernhard Reutner-Fischer | ||||||
|  | Bert Huijben | ||||||
| Bertrand Demiddelaer | Bertrand Demiddelaer | ||||||
|  | Bertrand Simonnet | ||||||
| Bill Doyle | Bill Doyle | ||||||
| Bill Egert | Bill Egert | ||||||
| Bill Hoffman | Bill Hoffman | ||||||
| @@ -155,8 +164,10 @@ Brandon Wang | |||||||
| Brendan Jurd | Brendan Jurd | ||||||
| Brent Beardsley | Brent Beardsley | ||||||
| Brian Akins | Brian Akins | ||||||
|  | Brian Chrisman | ||||||
| Brian Dessent | Brian Dessent | ||||||
| Brian J. Murrell | Brian J. Murrell | ||||||
|  | Brian Prodoehl | ||||||
| Brian R Duffy | Brian R Duffy | ||||||
| Brian Ulm | Brian Ulm | ||||||
| Brock Noland | Brock Noland | ||||||
| @@ -176,9 +187,11 @@ Catalin Patulea | |||||||
| Chad Monroe | Chad Monroe | ||||||
| Chandrakant Bagul | Chandrakant Bagul | ||||||
| Charles Kerr | Charles Kerr | ||||||
|  | Charles Romestant | ||||||
| Chen Prog | Chen Prog | ||||||
| Chih-Chung Chang | Chih-Chung Chang | ||||||
| Chris "Bob Bob" | Chris "Bob Bob" | ||||||
|  | Chris Araman | ||||||
| Chris Combes | Chris Combes | ||||||
| Chris Conlon | Chris Conlon | ||||||
| Chris Deidun | Chris Deidun | ||||||
| @@ -194,6 +207,7 @@ Christian Krause | |||||||
| Christian Kurz | Christian Kurz | ||||||
| Christian Robottom Reis | Christian Robottom Reis | ||||||
| Christian Schmitz | Christian Schmitz | ||||||
|  | Christian Stewart | ||||||
| Christian Vogt | Christian Vogt | ||||||
| Christian Weisgerber | Christian Weisgerber | ||||||
| Christophe Demory | Christophe Demory | ||||||
| @@ -223,8 +237,10 @@ Cris Bailiff | |||||||
| Cristian Rodríguez | Cristian Rodríguez | ||||||
| Curt Bogmine | Curt Bogmine | ||||||
| Cyrill Osterwalder | Cyrill Osterwalder | ||||||
|  | Cédric Connes | ||||||
| Cédric Deltheil | Cédric Deltheil | ||||||
| D. Flinkmann | D. Flinkmann | ||||||
|  | Da-Yoon Chung | ||||||
| Dag Ekengren | Dag Ekengren | ||||||
| Dagobert Michelsen | Dagobert Michelsen | ||||||
| Damian Dixon | Damian Dixon | ||||||
| @@ -240,8 +256,15 @@ Dan Zitter | |||||||
| Daniel Black | Daniel Black | ||||||
| Daniel Cater | Daniel Cater | ||||||
| Daniel Egger | Daniel Egger | ||||||
|  | Daniel Hwang | ||||||
| Daniel Johnson | Daniel Johnson | ||||||
|  | Daniel Kahn Gillmor | ||||||
|  | Daniel Lee Hwang | ||||||
|  | Daniel Melani | ||||||
| Daniel Mentz | Daniel Mentz | ||||||
|  | Daniel Schauenberg | ||||||
|  | Daniel Seither | ||||||
|  | Daniel Shahaf | ||||||
| Daniel Steinberg | Daniel Steinberg | ||||||
| Daniel Stenberg | Daniel Stenberg | ||||||
| Daniel Theron | Daniel Theron | ||||||
| @@ -255,6 +278,7 @@ Dave May | |||||||
| Dave Reisner | Dave Reisner | ||||||
| Dave Thompson | Dave Thompson | ||||||
| Dave Vasilevsky | Dave Vasilevsky | ||||||
|  | Davey Shafik | ||||||
| David Bau | David Bau | ||||||
| David Binderman | David Binderman | ||||||
| David Blaikie | David Blaikie | ||||||
| @@ -284,6 +308,7 @@ David Woodhouse | |||||||
| David Wright | David Wright | ||||||
| David Yan | David Yan | ||||||
| Dengminwen | Dengminwen | ||||||
|  | Denis Feklushkin | ||||||
| Dennis Clarke | Dennis Clarke | ||||||
| Derek Higgins | Derek Higgins | ||||||
| Detlef Schmier | Detlef Schmier | ||||||
| @@ -302,21 +327,25 @@ Dirk Manske | |||||||
| Dmitri Shubin | Dmitri Shubin | ||||||
| Dmitriy Sergeyev | Dmitriy Sergeyev | ||||||
| Dmitry Bartsevich | Dmitry Bartsevich | ||||||
|  | Dmitry Eremin-Solenikov | ||||||
| Dmitry Falko | Dmitry Falko | ||||||
| Dmitry Kurochkin | Dmitry Kurochkin | ||||||
| Dmitry Popov | Dmitry Popov | ||||||
| Dmitry Rechkin | Dmitry Rechkin | ||||||
|  | Dmitry S. Baikov | ||||||
| Dolbneff A.V | Dolbneff A.V | ||||||
| Domenico Andreoli | Domenico Andreoli | ||||||
| Dominick Meglio | Dominick Meglio | ||||||
| Dominique Leuenberger | Dominique Leuenberger | ||||||
| Doug Kaufman | Doug Kaufman | ||||||
| Doug Porter | Doug Porter | ||||||
|  | Douglas Creager | ||||||
| Douglas E. Wegscheid | Douglas E. Wegscheid | ||||||
| Douglas Kilpatrick | Douglas Kilpatrick | ||||||
| Douglas R. Horner | Douglas R. Horner | ||||||
| Douglas Steinwand | Douglas Steinwand | ||||||
| Dov Murik | Dov Murik | ||||||
|  | Drake Arconis | ||||||
| Duane Cathey | Duane Cathey | ||||||
| Duncan Mac-Vicar Prett | Duncan Mac-Vicar Prett | ||||||
| Dustin Boswell | Dustin Boswell | ||||||
| @@ -331,10 +360,12 @@ Edward Rudd | |||||||
| Edward Sheldrake | Edward Sheldrake | ||||||
| Eelco Dolstra | Eelco Dolstra | ||||||
| Eetu Ojanen | Eetu Ojanen | ||||||
|  | Egon Eckert | ||||||
| Eldar Zaitov | Eldar Zaitov | ||||||
| Ellis Pritchard | Ellis Pritchard | ||||||
| Elmira A Semenova | Elmira A Semenova | ||||||
| Emanuele Bovisio | Emanuele Bovisio | ||||||
|  | Emil Lerner | ||||||
| Emil Romanus | Emil Romanus | ||||||
| Emiliano Ida | Emiliano Ida | ||||||
| Enrico Scholz | Enrico Scholz | ||||||
| @@ -347,12 +378,14 @@ Eric Lubin | |||||||
| Eric Melville | Eric Melville | ||||||
| Eric Mertens | Eric Mertens | ||||||
| Eric Rautman | Eric Rautman | ||||||
|  | Eric Ridge | ||||||
| Eric S. Raymond | Eric S. Raymond | ||||||
| Eric Thelin | Eric Thelin | ||||||
| Eric Vergnaud | Eric Vergnaud | ||||||
| Eric Wong | Eric Wong | ||||||
| Eric Young | Eric Young | ||||||
| Erick Nuwendam | Erick Nuwendam | ||||||
|  | Erik Janssen | ||||||
| Erik Johansson | Erik Johansson | ||||||
| Ernest Beinrohr | Ernest Beinrohr | ||||||
| Erwan Legrand | Erwan Legrand | ||||||
| @@ -367,12 +400,15 @@ Fabian Hiernaux | |||||||
| Fabian Keil | Fabian Keil | ||||||
| Fabrizio Ammollo | Fabrizio Ammollo | ||||||
| Fedor Karpelevitch | Fedor Karpelevitch | ||||||
|  | Feist Josselin | ||||||
| Felix Yan | Felix Yan | ||||||
| Felix von Leitner | Felix von Leitner | ||||||
| Feng Tu | Feng Tu | ||||||
|  | Flavio Medeiros | ||||||
| Florian Schoppmann | Florian Schoppmann | ||||||
| Florian Weimer | Florian Weimer | ||||||
| Forrest Cahoon | Forrest Cahoon | ||||||
|  | Francisco Moraes | ||||||
| Frank Gevaerts | Frank Gevaerts | ||||||
| Frank Hempel | Frank Hempel | ||||||
| Frank Keeney | Frank Keeney | ||||||
| @@ -385,6 +421,7 @@ François Charlier | |||||||
| Fred Machado | Fred Machado | ||||||
| Fred New | Fred New | ||||||
| Fred Noz | Fred Noz | ||||||
|  | Fred Stluka | ||||||
| Frederic Lepied | Frederic Lepied | ||||||
| Fredrik Thulin | Fredrik Thulin | ||||||
| Gabriel Kuri | Gabriel Kuri | ||||||
| @@ -422,6 +459,7 @@ Glenn Sheridan | |||||||
| Gordon Marler | Gordon Marler | ||||||
| Gorilla Maguila | Gorilla Maguila | ||||||
| Grant Erickson | Grant Erickson | ||||||
|  | Grant Pannell | ||||||
| Greg Hewgill | Greg Hewgill | ||||||
| Greg Morse | Greg Morse | ||||||
| Greg Onufer | Greg Onufer | ||||||
| @@ -434,12 +472,14 @@ Guido Berhoerster | |||||||
| Guillaume Arluison | Guillaume Arluison | ||||||
| Gunter Knauf | Gunter Knauf | ||||||
| Gustaf Hui | Gustaf Hui | ||||||
|  | Gustavo Grieco | ||||||
| Gwenole Beauchesne | Gwenole Beauchesne | ||||||
| Gökhan Şengün | Gökhan Şengün | ||||||
| Götz Babin-Ebell | Götz Babin-Ebell | ||||||
| Hamish Mackenzie | Hamish Mackenzie | ||||||
| Hang Kin Lau | Hang Kin Lau | ||||||
| Hang Su | Hang Su | ||||||
|  | Hanno Böck | ||||||
| Hanno Kranzhoff | Hanno Kranzhoff | ||||||
| Hans Steegers | Hans Steegers | ||||||
| Hans-Jurgen May | Hans-Jurgen May | ||||||
| @@ -477,15 +517,18 @@ Iida Yosiaki | |||||||
| Ilguiz Latypov | Ilguiz Latypov | ||||||
| Ilja van Sprundel | Ilja van Sprundel | ||||||
| Immanuel Gregoire | Immanuel Gregoire | ||||||
|  | Inca R | ||||||
| Ingmar Runge | Ingmar Runge | ||||||
| Ingo Ralf Blum | Ingo Ralf Blum | ||||||
| Ingo Wilken | Ingo Wilken | ||||||
|  | Isaac Boukris | ||||||
| Ishan SinghLevett | Ishan SinghLevett | ||||||
| Ivo Bellin Salarin | Ivo Bellin Salarin | ||||||
| Jack Zhang | Jack Zhang | ||||||
| Jacky Lam | Jacky Lam | ||||||
| Jacob Meuser | Jacob Meuser | ||||||
| Jacob Moshenko | Jacob Moshenko | ||||||
|  | Jactry Zeng | ||||||
| Jad Chamcham | Jad Chamcham | ||||||
| Jakub Zakrzewski | Jakub Zakrzewski | ||||||
| James Bursa | James Bursa | ||||||
| @@ -514,6 +557,7 @@ Jason Liu | |||||||
| Jason McDonald | Jason McDonald | ||||||
| Jason S. Priebe | Jason S. Priebe | ||||||
| Javier Barroso | Javier Barroso | ||||||
|  | Javier G. Sogo | ||||||
| Jay Austin | Jay Austin | ||||||
| Jayesh A Shah | Jayesh A Shah | ||||||
| Jaz Fresh | Jaz Fresh | ||||||
| @@ -533,10 +577,12 @@ Jeff Lawson | |||||||
| Jeff Phillips | Jeff Phillips | ||||||
| Jeff Pohlmeyer | Jeff Pohlmeyer | ||||||
| Jeff Weber | Jeff Weber | ||||||
|  | Jens Rantil | ||||||
| Jeremy Friesner | Jeremy Friesner | ||||||
| Jeremy Huddleston | Jeremy Huddleston | ||||||
| Jeremy Lin | Jeremy Lin | ||||||
| Jeroen Koekkoek | Jeroen Koekkoek | ||||||
|  | Jeroen Ooms | ||||||
| Jerome Muffat-Meridol | Jerome Muffat-Meridol | ||||||
| Jerome Robert | Jerome Robert | ||||||
| Jerome Vouillon | Jerome Vouillon | ||||||
| @@ -550,6 +596,7 @@ Jim Drash | |||||||
| Jim Freeman | Jim Freeman | ||||||
| Jim Hollinger | Jim Hollinger | ||||||
| Jim Meyering | Jim Meyering | ||||||
|  | Jiri Dvorak | ||||||
| Jiri Hruska | Jiri Hruska | ||||||
| Jiri Jaburek | Jiri Jaburek | ||||||
| Jiri Malak | Jiri Malak | ||||||
| @@ -558,6 +605,7 @@ Joe Halpin | |||||||
| Joe Malicki | Joe Malicki | ||||||
| Joe Mason | Joe Mason | ||||||
| Joel Chen | Joel Chen | ||||||
|  | Joel Depooter | ||||||
| Jofell Gallardo | Jofell Gallardo | ||||||
| Johan Anderson | Johan Anderson | ||||||
| Johan Lantz | Johan Lantz | ||||||
| @@ -565,6 +613,7 @@ Johan Nilsson | |||||||
| Johan van Selst | Johan van Selst | ||||||
| Johannes Bauer | Johannes Bauer | ||||||
| Johannes Ernst | Johannes Ernst | ||||||
|  | Johannes Schindelin | ||||||
| John Bradshaw | John Bradshaw | ||||||
| John Coffey | John Coffey | ||||||
| John Crow | John Crow | ||||||
| @@ -575,9 +624,12 @@ John Gardiner Myers | |||||||
| John Janssen | John Janssen | ||||||
| John Joseph Bachir | John Joseph Bachir | ||||||
| John Kelly | John Kelly | ||||||
|  | John Kohl | ||||||
| John Lask | John Lask | ||||||
|  | John Levon | ||||||
| John Lightsey | John Lightsey | ||||||
| John Marino | John Marino | ||||||
|  | John Marshall | ||||||
| John McGowan | John McGowan | ||||||
| John P. McCaskey | John P. McCaskey | ||||||
| John Suprock | John Suprock | ||||||
| @@ -593,10 +645,12 @@ Jon Torrey | |||||||
| Jon Travis | Jon Travis | ||||||
| Jon Turner | Jon Turner | ||||||
| Jonas Forsman | Jonas Forsman | ||||||
|  | Jonas Minnberg | ||||||
| Jonas Schnelli | Jonas Schnelli | ||||||
| Jonatan Lander | Jonatan Lander | ||||||
| Jonatan Vela | Jonatan Vela | ||||||
| Jonathan Cardoso Machado | Jonathan Cardoso Machado | ||||||
|  | Jonathan Cardoso Machado Machado | ||||||
| Jonathan Hseu | Jonathan Hseu | ||||||
| Jonathan Nieder | Jonathan Nieder | ||||||
| Jongki Suwandi | Jongki Suwandi | ||||||
| @@ -620,6 +674,7 @@ Julien Nabet | |||||||
| Julien Royer | Julien Royer | ||||||
| Jun-ichiro itojun Hagino | Jun-ichiro itojun Hagino | ||||||
| Jurij Smakov | Jurij Smakov | ||||||
|  | Justin Ehlert | ||||||
| Justin Fletcher | Justin Fletcher | ||||||
| Justin Karneges | Justin Karneges | ||||||
| Justin Maggard | Justin Maggard | ||||||
| @@ -631,6 +686,7 @@ Kai Sommerfeld | |||||||
| Kai-Uwe Rommel | Kai-Uwe Rommel | ||||||
| Kalle Vahlman | Kalle Vahlman | ||||||
| Kamil Dudka | Kamil Dudka | ||||||
|  | Kang Lin | ||||||
| Kang-Jin Lee | Kang-Jin Lee | ||||||
| Karl Moerder | Karl Moerder | ||||||
| Karol Pietrzak | Karol Pietrzak | ||||||
| @@ -662,6 +718,7 @@ Krishnendu Majumdar | |||||||
| Krister Johansen | Krister Johansen | ||||||
| Kristian Gunstone | Kristian Gunstone | ||||||
| Kristian Köhntopp | Kristian Köhntopp | ||||||
|  | Kurt Fankhauser | ||||||
| Kyle J. McKay | Kyle J. McKay | ||||||
| Kyle L. Huff | Kyle L. Huff | ||||||
| Kyle Sallee | Kyle Sallee | ||||||
| @@ -678,6 +735,7 @@ Lars Nilsson | |||||||
| Lars Torben Wilson | Lars Torben Wilson | ||||||
| Lau Hang Kin | Lau Hang Kin | ||||||
| Laurent Rabret | Laurent Rabret | ||||||
|  | Lauri Kasanen | ||||||
| Legoff Vincent | Legoff Vincent | ||||||
| Lehel Bernadt | Lehel Bernadt | ||||||
| Leif W | Leif W | ||||||
| @@ -693,7 +751,9 @@ Linas Vepstas | |||||||
| Lindley French | Lindley French | ||||||
| Ling Thio | Ling Thio | ||||||
| Linus Nielsen Feltzing | Linus Nielsen Feltzing | ||||||
|  | Lior Kaplan | ||||||
| Lisa Xu | Lisa Xu | ||||||
|  | Liviu Chircu | ||||||
| Liza Alenchery | Liza Alenchery | ||||||
| Lluís Batlle i Rossell | Lluís Batlle i Rossell | ||||||
| Loic Dachary | Loic Dachary | ||||||
| @@ -704,6 +764,7 @@ Lucas Adamski | |||||||
| Lucas Pardue | Lucas Pardue | ||||||
| Ludek Finstrle | Ludek Finstrle | ||||||
| Ludovico Cavedon | Ludovico Cavedon | ||||||
|  | Lukas Ruzicka | ||||||
| Lukasz Czekierda | Lukasz Czekierda | ||||||
| Luke Amery | Luke Amery | ||||||
| Luke Call | Luke Call | ||||||
| @@ -714,6 +775,7 @@ Maciej Karpiuk | |||||||
| Maciej Puzio | Maciej Puzio | ||||||
| Maciej W. Rozycki | Maciej W. Rozycki | ||||||
| Maks Naumov | Maks Naumov | ||||||
|  | Maksim Stsepanenka | ||||||
| Mamoru Tasaka | Mamoru Tasaka | ||||||
| Mandy Wu | Mandy Wu | ||||||
| Manfred Schwarb | Manfred Schwarb | ||||||
| @@ -747,6 +809,7 @@ Mark Salisbury | |||||||
| Mark Snelling | Mark Snelling | ||||||
| Mark Tully | Mark Tully | ||||||
| Markus Duft | Markus Duft | ||||||
|  | Markus Elfring | ||||||
| Markus Koetter | Markus Koetter | ||||||
| Markus Moeller | Markus Moeller | ||||||
| Markus Oberhumer | Markus Oberhumer | ||||||
| @@ -775,6 +838,7 @@ Matt Wixson | |||||||
| Matteo Rocco | Matteo Rocco | ||||||
| Matthew Blain | Matthew Blain | ||||||
| Matthew Clarke | Matthew Clarke | ||||||
|  | Matthew Hall | ||||||
| Matthias Bolte | Matthias Bolte | ||||||
| Maurice Barnum | Maurice Barnum | ||||||
| Mauro Iorio | Mauro Iorio | ||||||
| @@ -795,17 +859,22 @@ Michael Day | |||||||
| Michael Goffioul | Michael Goffioul | ||||||
| Michael Jahn | Michael Jahn | ||||||
| Michael Jerris | Michael Jerris | ||||||
|  | Michael Kalinin | ||||||
| Michael Kaufmann | Michael Kaufmann | ||||||
| Michael Mealling | Michael Mealling | ||||||
| Michael Mueller | Michael Mueller | ||||||
| Michael Osipov | Michael Osipov | ||||||
| Michael Smith | Michael Smith | ||||||
|  | Michael Stapelberg | ||||||
| Michael Stillwell | Michael Stillwell | ||||||
| Michael Wallner | Michael Wallner | ||||||
| Michal Bonino | Michal Bonino | ||||||
| Michal Marek | Michal Marek | ||||||
|  | Michał Fita | ||||||
| Michał Górny | Michał Górny | ||||||
| Michał Kowalczyk | Michał Kowalczyk | ||||||
|  | Michał Piechowski | ||||||
|  | Michel Promonet | ||||||
| Michele Bini | Michele Bini | ||||||
| Miguel Angel | Miguel Angel | ||||||
| Miguel Diaz | Miguel Diaz | ||||||
| @@ -829,12 +898,14 @@ Mitz Wark | |||||||
| Mohamed Lrhazi | Mohamed Lrhazi | ||||||
| Mohammad AlSaleh | Mohammad AlSaleh | ||||||
| Mohun Biswas | Mohun Biswas | ||||||
|  | Mostyn Bramley-Moore | ||||||
| Myk Taylor | Myk Taylor | ||||||
| Nach M. S. | Nach M. S. | ||||||
| Nagai H | Nagai H | ||||||
| Nathan Coulter | Nathan Coulter | ||||||
| Nathan O'Sullivan | Nathan O'Sullivan | ||||||
| Nathanael Nerode | Nathanael Nerode | ||||||
|  | Nathaniel Waisbrot | ||||||
| Naveen Chandran | Naveen Chandran | ||||||
| Naveen Noel | Naveen Noel | ||||||
| Neil Bowers | Neil Bowers | ||||||
| @@ -861,6 +932,7 @@ Nis Jorgensen | |||||||
| Nobuhiro Ban | Nobuhiro Ban | ||||||
| Nodak Sodak | Nodak Sodak | ||||||
| Norbert Frese | Norbert Frese | ||||||
|  | Norbert Kett | ||||||
| Norbert Novotny | Norbert Novotny | ||||||
| Ofer | Ofer | ||||||
| Ola Mork | Ola Mork | ||||||
| @@ -870,7 +942,10 @@ Oliver Gondža | |||||||
| Oliver Kuckertz | Oliver Kuckertz | ||||||
| Oliver Schindler | Oliver Schindler | ||||||
| Olivier Berger | Olivier Berger | ||||||
|  | Orange Tsai | ||||||
|  | Oren Souroujon | ||||||
| Oren Tirosh | Oren Tirosh | ||||||
|  | Orgad Shaneh | ||||||
| Ori Avtalion | Ori Avtalion | ||||||
| Oscar Koeroo | Oscar Koeroo | ||||||
| Oscar Norlander | Oscar Norlander | ||||||
| @@ -886,6 +961,7 @@ Patricia Muscalu | |||||||
| Patrick Bihan-Faou | Patrick Bihan-Faou | ||||||
| Patrick McManus | Patrick McManus | ||||||
| Patrick Monnerat | Patrick Monnerat | ||||||
|  | Patrick Rapin | ||||||
| Patrick Scott | Patrick Scott | ||||||
| Patrick Smith | Patrick Smith | ||||||
| Patrick Watson | Patrick Watson | ||||||
| @@ -898,6 +974,7 @@ Paul Marks | |||||||
| Paul Marquis | Paul Marquis | ||||||
| Paul Moore | Paul Moore | ||||||
| Paul Nolan | Paul Nolan | ||||||
|  | Paul Oliver | ||||||
| Paul Querna | Paul Querna | ||||||
| Paul Saab | Paul Saab | ||||||
| Pavel Cenek | Pavel Cenek | ||||||
| @@ -914,6 +991,7 @@ Peter Heuchert | |||||||
| Peter Hjalmarsson | Peter Hjalmarsson | ||||||
| Peter Korsgaard | Peter Korsgaard | ||||||
| Peter Lamberg | Peter Lamberg | ||||||
|  | Peter Laser | ||||||
| Peter O'Gorman | Peter O'Gorman | ||||||
| Peter Pentchev | Peter Pentchev | ||||||
| Peter Silva | Peter Silva | ||||||
| @@ -954,11 +1032,13 @@ Quinn Slack | |||||||
| Radu Simionescu | Radu Simionescu | ||||||
| Rafa Muyo | Rafa Muyo | ||||||
| Rafael Sagula | Rafael Sagula | ||||||
|  | Rafayel Mkrtchyan | ||||||
| Rafaël Carré | Rafaël Carré | ||||||
| Rainer Canavan | Rainer Canavan | ||||||
| Rainer Jung | Rainer Jung | ||||||
| Rainer Koenig | Rainer Koenig | ||||||
| Rajesh Naganathan | Rajesh Naganathan | ||||||
|  | Rajkumar Mandal | ||||||
| Ralf S. Engelschall | Ralf S. Engelschall | ||||||
| Ralph Beckmann | Ralph Beckmann | ||||||
| Ralph Mitchell | Ralph Mitchell | ||||||
| @@ -968,6 +1048,7 @@ Ravi Pratap | |||||||
| Ray Dassen | Ray Dassen | ||||||
| Ray Pekowski | Ray Pekowski | ||||||
| Ray Satiro | Ray Satiro | ||||||
|  | Razvan Cojocaru | ||||||
| Reinout van Schouwen | Reinout van Schouwen | ||||||
| Remi Gacogne | Remi Gacogne | ||||||
| Renato Botelho | Renato Botelho | ||||||
| @@ -988,10 +1069,12 @@ Richard Bramante | |||||||
| Richard Clayton | Richard Clayton | ||||||
| Richard Cooper | Richard Cooper | ||||||
| Richard Gorton | Richard Gorton | ||||||
|  | Richard Hosking | ||||||
| Richard Michael | Richard Michael | ||||||
| Richard Moore | Richard Moore | ||||||
| Richard Prescott | Richard Prescott | ||||||
| Richard Silverman | Richard Silverman | ||||||
|  | Richard van den Berg | ||||||
| Rick Jones | Rick Jones | ||||||
| Rick Richardson | Rick Richardson | ||||||
| Rob Crittenden | Rob Crittenden | ||||||
| @@ -1015,6 +1098,7 @@ Robson Braga Araujo | |||||||
| Rodney Simmons | Rodney Simmons | ||||||
| Rodric Glaser | Rodric Glaser | ||||||
| Rodrigo Silva | Rodrigo Silva | ||||||
|  | Roger Leigh | ||||||
| Roland Blom | Roland Blom | ||||||
| Roland Krikava | Roland Krikava | ||||||
| Roland Zimmermann | Roland Zimmermann | ||||||
| @@ -1039,6 +1123,7 @@ Salvador Dávila | |||||||
| Salvatore Sorrentino | Salvatore Sorrentino | ||||||
| Sam Deane | Sam Deane | ||||||
| Sam Hurst | Sam Hurst | ||||||
|  | Sam Roth | ||||||
| Sam Schanken | Sam Schanken | ||||||
| Sampo Kellomaki | Sampo Kellomaki | ||||||
| Samuel Díaz García | Samuel Díaz García | ||||||
| @@ -1057,6 +1142,8 @@ Scott Barrett | |||||||
| Scott Cantor | Scott Cantor | ||||||
| Scott Davis | Scott Davis | ||||||
| Scott McCreary | Scott McCreary | ||||||
|  | Sean Boudreau | ||||||
|  | Sebastian Pohlschmidt | ||||||
| Sebastian Rasmussen | Sebastian Rasmussen | ||||||
| Senthil Raja Velu | Senthil Raja Velu | ||||||
| Sergei Nikulov | Sergei Nikulov | ||||||
| @@ -1085,6 +1172,7 @@ Stadler Stephan | |||||||
| Stan van de Burgt | Stan van de Burgt | ||||||
| Stanislav Ivochkin | Stanislav Ivochkin | ||||||
| Stefan Bühler | Stefan Bühler | ||||||
|  | Stefan Eissing | ||||||
| Stefan Esser | Stefan Esser | ||||||
| Stefan Krause | Stefan Krause | ||||||
| Stefan Neis | Stefan Neis | ||||||
| @@ -1099,6 +1187,7 @@ Stephen More | |||||||
| Sterling Hughes | Sterling Hughes | ||||||
| Steve Green | Steve Green | ||||||
| Steve H Truong | Steve H Truong | ||||||
|  | Steve Havelka | ||||||
| Steve Holme | Steve Holme | ||||||
| Steve Lhomme | Steve Lhomme | ||||||
| Steve Little | Steve Little | ||||||
| @@ -1115,22 +1204,28 @@ Sune Ahlgren | |||||||
| Sven Anders | Sven Anders | ||||||
| Sven Neuhaus | Sven Neuhaus | ||||||
| Sven Wegener | Sven Wegener | ||||||
|  | Svyatoslav Mishyn | ||||||
| Symeon Paraschoudis | Symeon Paraschoudis | ||||||
| Sébastien Willemijns | Sébastien Willemijns | ||||||
| T. Bharath | T. Bharath | ||||||
| T. Yamada | T. Yamada | ||||||
|  | TJ Saunders | ||||||
| Tae Hyoung Ahn | Tae Hyoung Ahn | ||||||
| Taneli Vahakangas | Taneli Vahakangas | ||||||
| Tanguy Fautre | Tanguy Fautre | ||||||
| Tatsuhiro Tsujikawa | Tatsuhiro Tsujikawa | ||||||
| Temprimus | Temprimus | ||||||
|  | Terri Oda | ||||||
| Thomas Braun | Thomas Braun | ||||||
|  | Thomas Glanzmann | ||||||
| Thomas J. Moore | Thomas J. Moore | ||||||
| Thomas Klausner | Thomas Klausner | ||||||
| Thomas L. Shinnick | Thomas L. Shinnick | ||||||
| Thomas Lopatic | Thomas Lopatic | ||||||
|  | Thomas Ruecker | ||||||
| Thomas Schwinge | Thomas Schwinge | ||||||
| Thomas Tonino | Thomas Tonino | ||||||
|  | Thorsten Schöning | ||||||
| Tiit Pikma | Tiit Pikma | ||||||
| Till Maas | Till Maas | ||||||
| Tim Ansell | Tim Ansell | ||||||
| @@ -1141,17 +1236,18 @@ Tim Costello | |||||||
| Tim Harder | Tim Harder | ||||||
| Tim Heckman | Tim Heckman | ||||||
| Tim Newsome | Tim Newsome | ||||||
| Tim Ruehsen | Tim Rühsen | ||||||
| Tim Sneddon | Tim Sneddon | ||||||
|  | Tim Stack | ||||||
| Tim Starling | Tim Starling | ||||||
| Timo Sirainen | Timo Sirainen | ||||||
| Tinus van den Berg | Tinus van den Berg | ||||||
| Tobias Markus | Tobias Markus | ||||||
| Tobias Rundström | Tobias Rundström | ||||||
|  | Tobias Stoeckmann | ||||||
| Toby Peterson | Toby Peterson | ||||||
| Todd A Ouska | Todd A Ouska | ||||||
| Todd Kulesza | Todd Kulesza | ||||||
| Todd Ouska |  | ||||||
| Todd Vierling | Todd Vierling | ||||||
| Tom Benoist | Tom Benoist | ||||||
| Tom Donovan | Tom Donovan | ||||||
| @@ -1168,6 +1264,7 @@ Tomas Hoger | |||||||
| Tomas Mlcoch | Tomas Mlcoch | ||||||
| Tomas Pospisek | Tomas Pospisek | ||||||
| Tomas Szepe | Tomas Szepe | ||||||
|  | Tomas Tomecek | ||||||
| Tomasz Kojm | Tomasz Kojm | ||||||
| Tomasz Lacki | Tomasz Lacki | ||||||
| Tommie Gannert | Tommie Gannert | ||||||
| @@ -1195,6 +1292,7 @@ Victor Snezhko | |||||||
| Vijay Panghal | Vijay Panghal | ||||||
| Vikram Saxena | Vikram Saxena | ||||||
| Viktor Szakáts | Viktor Szakáts | ||||||
|  | Ville Skyttä | ||||||
| Vilmos Nebehaj | Vilmos Nebehaj | ||||||
| Vincent Bronner | Vincent Bronner | ||||||
| Vincent Le Normand | Vincent Le Normand | ||||||
| @@ -1209,6 +1307,7 @@ Vojtech Janota | |||||||
| Vojtech Minarik | Vojtech Minarik | ||||||
| Vojtěch Král | Vojtěch Král | ||||||
| Vsevolod Novikov | Vsevolod Novikov | ||||||
|  | W. Mark Kubacki | ||||||
| Waldek Kozba | Waldek Kozba | ||||||
| Walter J. Mack | Walter J. Mack | ||||||
| Ward Willats | Ward Willats | ||||||
| @@ -1226,7 +1325,9 @@ Wojciech Zwiefka | |||||||
| Wouter Van Rooy | Wouter Van Rooy | ||||||
| Wu Yongzheng | Wu Yongzheng | ||||||
| Xavier Bouchoux | Xavier Bouchoux | ||||||
|  | Xiangbin Li | ||||||
| Yaakov Selkowitz | Yaakov Selkowitz | ||||||
|  | Yamada Yasuharu | ||||||
| Yang Tse | Yang Tse | ||||||
| Yarram Sunil | Yarram Sunil | ||||||
| Yasuharu Yamada | Yasuharu Yamada | ||||||
| @@ -1247,4 +1348,5 @@ Zvi Har'El | |||||||
| nk | nk | ||||||
| swalkaus at yahoo.com | swalkaus at yahoo.com | ||||||
| tommink[at]post.pl | tommink[at]post.pl | ||||||
|  | Štefan Kremeň | ||||||
| Никита Дорохин | Никита Дорохин | ||||||
|   | |||||||
| @@ -33,7 +33,8 @@ s/Nick Zitzmann (originally)/Nick Zitzmann/ | |||||||
| s/product-security at Apple// | s/product-security at Apple// | ||||||
| s/IT DOES NOT WORK// | s/IT DOES NOT WORK// | ||||||
| s/Albert Chin/Albert Chin-A-Young/ | s/Albert Chin/Albert Chin-A-Young/ | ||||||
| s/Paras S/Paras Sethia/ | s/Paras S\z/Paras Sethia/ | ||||||
|  | s/Paras Sethiaethia/Paras Sethia/ | ||||||
| s/Дмитрий Фалько/Dmitry Falko/ | s/Дмитрий Фалько/Dmitry Falko/ | ||||||
| s/byte_bucket in the #curl IRC channel// | s/byte_bucket in the #curl IRC channel// | ||||||
| s/Michal Górny and Anthony G. Basile// | s/Michal Górny and Anthony G. Basile// | ||||||
| @@ -47,3 +48,7 @@ s/Rodrigo Silva (MestreLion)/Rodrigo Silva/ | |||||||
| s/tetetest tetetest// | s/tetetest tetetest// | ||||||
| s/Jiří Hruška/Jiri Hruska/ | s/Jiří Hruška/Jiri Hruska/ | ||||||
| s/Viktor Szakats/Viktor Szakáts/ | s/Viktor Szakats/Viktor Szakáts/ | ||||||
|  | s/Jonathan Cardoso/Jonathan Cardoso Machado/ | ||||||
|  | s/Linus Nielsen/Linus Nielsen Feltzing/ | ||||||
|  | s/Todd Ouska$/Todd A Ouska/ | ||||||
|  | s/Tim Ruehsen/Tim Rühsen/ | ||||||
|   | |||||||
							
								
								
									
										204
									
								
								docs/TODO
									
									
									
									
									
								
							
							
						
						
									
										204
									
								
								docs/TODO
									
									
									
									
									
								
							| @@ -9,6 +9,11 @@ | |||||||
|  Things to do in project cURL. Please tell us what you think, contribute and |  Things to do in project cURL. Please tell us what you think, contribute and | ||||||
|  send us patches that improve things! |  send us patches that improve things! | ||||||
|  |  | ||||||
|  |  Be aware that these are things that we could do, or have once been considered | ||||||
|  |  things we could do. If you want to work on any of these areas, please | ||||||
|  |  consider bringing it up for discussions first on the mailing list so that we | ||||||
|  |  all agree it is still a good idea for the project! | ||||||
|  |  | ||||||
|  All bugs documented in the KNOWN_BUGS document are subject for fixing! |  All bugs documented in the KNOWN_BUGS document are subject for fixing! | ||||||
|  |  | ||||||
|  1. libcurl |  1. libcurl | ||||||
| @@ -20,11 +25,19 @@ | |||||||
|  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 |  1.9 Cache negative name resolves | ||||||
|  |  1.10 Support IDNA2008 | ||||||
|  |  1.11 minimize dependencies with dynamicly loaded modules | ||||||
|  |  1.12 have form functions use CURL handle argument | ||||||
|  |  1.13 Add CURLOPT_MAIL_CLIENT option | ||||||
|  |  1.14 Typesafe curl_easy_setopt() | ||||||
|  |  1.15 TCP Fast Open | ||||||
|  |  1.16 Try to URL encode given URL | ||||||
|  |  | ||||||
|  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 Better support for same name resolves | ||||||
|  2.3 Better support for same name resolves |  2.3 Non-blocking curl_multi_remove_handle() | ||||||
|  |  2.4 Split connect and authentication process | ||||||
|  |  | ||||||
|  3. Documentation |  3. Documentation | ||||||
|  3.1 Update date and version in man pages |  3.1 Update date and version in man pages | ||||||
| @@ -44,6 +57,8 @@ | |||||||
|  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 Refuse "downgrade" redirects | ||||||
|  |  5.7 More compressions | ||||||
|  |  | ||||||
|  6. TELNET |  6. TELNET | ||||||
|  6.1 ditch stdin |  6.1 ditch stdin | ||||||
| @@ -69,6 +84,7 @@ | |||||||
|  11.1 File listing support |  11.1 File listing support | ||||||
|  11.2 Honor file timestamps |  11.2 Honor file timestamps | ||||||
|  11.3 Use NTLMv2 |  11.3 Use NTLMv2 | ||||||
|  |  11.4 Create remote directories | ||||||
|   |   | ||||||
|  12. New protocols |  12. New protocols | ||||||
|  12.1 RSYNC |  12.1 RSYNC | ||||||
| @@ -103,6 +119,10 @@ | |||||||
|  17.4 simultaneous parallel transfers |  17.4 simultaneous parallel transfers | ||||||
|  17.5 provide formpost headers |  17.5 provide formpost headers | ||||||
|  17.6 warning when setting an option |  17.6 warning when setting an option | ||||||
|  |  17.7 warning when sending binary output to terminal | ||||||
|  |  17.8 offer color-coded HTTP header output | ||||||
|  |  17.9 Choose the name of file in braces for complex URLs | ||||||
|  |  17.10 improve how curl works in a windows console window | ||||||
|  |  | ||||||
|  18. Build |  18. Build | ||||||
|  18.1 roffit |  18.1 roffit | ||||||
| @@ -128,8 +148,6 @@ | |||||||
|  21.6 remove CURLOPT_DNS_USE_GLOBAL_CACHE |  21.6 remove CURLOPT_DNS_USE_GLOBAL_CACHE | ||||||
|  21.7 remove progress meter from libcurl |  21.7 remove progress meter from libcurl | ||||||
|  21.8 remove 'curl_httppost' from public |  21.8 remove 'curl_httppost' from public | ||||||
|  21.9 have form functions use CURL handle argument |  | ||||||
|  21.10 Add CURLOPT_MAIL_CLIENT option |  | ||||||
|  |  | ||||||
| ============================================================================== | ============================================================================== | ||||||
|  |  | ||||||
| @@ -199,7 +217,7 @@ | |||||||
|  |  | ||||||
|  To prevent local users from snooping on your traffic to the proxy. Supported |  To prevent local users from snooping on your traffic to the proxy. Supported | ||||||
|  by Chrome already: |  by Chrome already: | ||||||
|  http://www.chromium.org/developers/design-documents/secure-web-proxy |  https://www.chromium.org/developers/design-documents/secure-web-proxy | ||||||
|  |  | ||||||
|  ...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 | ||||||
| @@ -209,6 +227,72 @@ | |||||||
|  A name resolve that has failed is likely to fail when made again within a |  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. |  short period of time. Currently we only cache positive responses. | ||||||
|  |  | ||||||
|  | 1.10 Support IDNA2008 | ||||||
|  |  | ||||||
|  |  International Domain Names are supported in libcurl since years back, powered | ||||||
|  |  by libidn. libidn implements IDNA2003 which has been superseded by IDNA2008. | ||||||
|  |  libidn2 is an existing library offering support for IDNA2008. | ||||||
|  |  | ||||||
|  | 1.11 minimize dependencies with dynamicly loaded modules | ||||||
|  |  | ||||||
|  |  We can create a system with loadable modules/plug-ins, where these modules | ||||||
|  |  would be the ones that link to 3rd party libs. That would allow us to avoid | ||||||
|  |  having to load ALL dependencies since only the necessary ones for this | ||||||
|  |  app/invoke/used protocols would be necessary to load.  See | ||||||
|  |  https://github.com/bagder/curl/issues/349 | ||||||
|  |  | ||||||
|  | 1.12 have form functions use CURL handle argument | ||||||
|  |  | ||||||
|  |  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 | ||||||
|  |  thus curl_formget() with callback cannot function without first having | ||||||
|  |  curl_easy_perform() (or similar) called - which is hard to grasp and a design | ||||||
|  |  mistake. | ||||||
|  |  | ||||||
|  |  The curl_formadd() design can probably also be reconsidered to make it easier | ||||||
|  |  to use and less error-prone. Probably easiest by splitting it into several | ||||||
|  |  function calls. | ||||||
|  |  | ||||||
|  | 1.13 Add CURLOPT_MAIL_CLIENT option | ||||||
|  |  | ||||||
|  |  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 | ||||||
|  |  specifying this data as the URL is non-standard and to be honest a bit of a | ||||||
|  |  hack ;-) | ||||||
|  |  | ||||||
|  |  Please see the following thread for more information: | ||||||
|  |  http://curl.haxx.se/mail/lib-2012-05/0178.html | ||||||
|  |  | ||||||
|  | 1.14 Typesafe curl_easy_setopt() | ||||||
|  |  | ||||||
|  |  One of the most common problems in libcurl using applications is the lack of | ||||||
|  |  type checks for curl_easy_setopt() which happens because it accepts varargs | ||||||
|  |  and thus can take any type. | ||||||
|  |  | ||||||
|  |  One possible solution to this is to introduce a few different versions of the | ||||||
|  |  setopt version for the different kinds of data you can set. | ||||||
|  |  | ||||||
|  |   curl_easy_set_num() - sets a long value | ||||||
|  |  | ||||||
|  |   curl_easy_set_large() - sets a curl_off_t value | ||||||
|  |  | ||||||
|  |   curl_easy_set_ptr() - sets a pointer | ||||||
|  |  | ||||||
|  |   curl_easy_set_cb() - sets a callback PLUS its callback data | ||||||
|  |  | ||||||
|  | 1.15 TCP Fast Open | ||||||
|  |  | ||||||
|  |  RFC 7413 defines how to include data already in the TCP SYN handshake to | ||||||
|  |  reduce latency. | ||||||
|  |  | ||||||
|  | 1.16 Try to URL encode given URL | ||||||
|  |  | ||||||
|  |  Given a URL that for example contains spaces, libcurl could have an option | ||||||
|  |  that would try somewhat harder than it does now and convert spaces to %20 and | ||||||
|  |  perhaps URL encoded byte values over 128 etc (basically do what the redirect | ||||||
|  |  following code already does). | ||||||
|  |  | ||||||
|  |  https://github.com/bagder/curl/issues/514 | ||||||
|  |  | ||||||
| 2. libcurl - multi interface | 2. libcurl - multi interface | ||||||
|  |  | ||||||
| @@ -226,13 +310,7 @@ | |||||||
|  - The "DONE" operation (post transfer protocol-specific actions) for the |  - The "DONE" operation (post transfer protocol-specific actions) for the | ||||||
|    protocols SFTP, SMTP, FTP. Fixing Curl_done() for this is a worthy task. |    protocols SFTP, SMTP, FTP. Fixing Curl_done() for this is a worthy task. | ||||||
|  |  | ||||||
| 2.2 Fix HTTP Pipelining for PUT | 2.2 Better support for same name resolves | ||||||
|  |  | ||||||
|  HTTP Pipelining can be a way to greatly enhance performance for multiple |  | ||||||
|  serial requests and currently libcurl only supports that for HEAD and GET |  | ||||||
|  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 |  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 |  wants to resolve that name as well, make it wait for the first resolve to end | ||||||
| @@ -240,6 +318,20 @@ | |||||||
|  especially needed when adding many simultaneous handles using the same host |  especially needed when adding many simultaneous handles using the same host | ||||||
|  name when the DNS resolver can get flooded. |  name when the DNS resolver can get flooded. | ||||||
|  |  | ||||||
|  | 2.3 Non-blocking curl_multi_remove_handle() | ||||||
|  |  | ||||||
|  |  The multi interface has a few API calls that assume a blocking behavior, like | ||||||
|  |  add_handle() and remove_handle() which limits what we can do internally. The | ||||||
|  |  multi API need to be moved even more into a single function that "drives" | ||||||
|  |  everything in a non-blocking manner and signals when something is done. A | ||||||
|  |  remove or add would then only ask for the action to get started and then | ||||||
|  |  multi_perform() etc still be called until the add/remove is completed. | ||||||
|  |  | ||||||
|  | 2.4 Split connect and authentication process | ||||||
|  |  | ||||||
|  |  The multi interface treats the authentication process as part of the connect | ||||||
|  |  phase. As such any failures during authentication won't trigger the relevant | ||||||
|  |  QUIT or LOGOFF for protocols such as IMAP, POP3 and SMTP. | ||||||
|  |  | ||||||
| 3. Documentation | 3. Documentation | ||||||
|  |  | ||||||
| @@ -256,7 +348,7 @@ | |||||||
|  HOST is a command for a client to tell which host name to use, to offer FTP |  HOST is a command for a client to tell which host name to use, to offer FTP | ||||||
|  servers named-based virtual hosting: |  servers named-based virtual hosting: | ||||||
|  |  | ||||||
|  http://tools.ietf.org/html/rfc7151 |  https://tools.ietf.org/html/rfc7151 | ||||||
|  |  | ||||||
| 4.2 Alter passive/active on failure and retry | 4.2 Alter passive/active on failure and retry | ||||||
|  |  | ||||||
| @@ -340,6 +432,22 @@ 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 Refuse "downgrade" redirects | ||||||
|  |  | ||||||
|  |  See https://github.com/bagder/curl/issues/226 | ||||||
|  |  | ||||||
|  |  Consider a way to tell curl to refuse to "downgrade" protocol with a redirect | ||||||
|  |  and/or possibly a bit that refuses redirect to change protocol completely. | ||||||
|  |  | ||||||
|  | 5.7 More compressions | ||||||
|  |  | ||||||
|  |  Compression algorithms that perform better than gzip are being considered for | ||||||
|  |  use and inclusion in existing browsers. For example 'brotli'. If servers | ||||||
|  |  follow along it is a good reason for us to also allow users to take advantage | ||||||
|  |  of this. The algorithm: https://github.com/google/brotli The Firefox bug: | ||||||
|  |  https://bugzilla.mozilla.org/show_bug.cgi?id=366559 | ||||||
|  |  | ||||||
|  |  | ||||||
| 6. TELNET | 6. TELNET | ||||||
|  |  | ||||||
| 6.1 ditch stdin | 6.1 ditch stdin | ||||||
| @@ -412,12 +520,17 @@ be the same as/similar to FTP. | |||||||
|  |  | ||||||
| 11.2 Honor file timestamps | 11.2 Honor file timestamps | ||||||
|  |  | ||||||
| The timestamp of the transfered file should reflect that of the original file. | The timestamp of the transferred file should reflect that of the original file. | ||||||
|  |  | ||||||
| 11.3 Use NTLMv2 | 11.3 Use NTLMv2 | ||||||
|  |  | ||||||
| Currently the SMB authentication uses NTLMv1. | Currently the SMB authentication uses NTLMv1. | ||||||
|  |  | ||||||
|  | 11.4 Create remote directories | ||||||
|  |  | ||||||
|  | Support for creating remote directories when uploading a file to a directory | ||||||
|  | that doesn't exist on the server, just like --ftp-create-dirs. | ||||||
|  |  | ||||||
| 12. New protocols | 12. New protocols | ||||||
|  |  | ||||||
| 12.1 RSYNC | 12.1 RSYNC | ||||||
| @@ -476,7 +589,7 @@ Currently the SMB authentication uses NTLMv1. | |||||||
|  |  | ||||||
|  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. | ||||||
|  http://www.rfc-editor.org/rfc/rfc6698.txt |  https://www.rfc-editor.org/rfc/rfc6698.txt | ||||||
|  |  | ||||||
|  An initial patch was posted by Suresh Krishnaswamy on March 7th 2013 |  An initial patch was posted by Suresh Krishnaswamy on March 7th 2013 | ||||||
|  (http://curl.haxx.se/mail/lib-2013-03/0075.html) but it was a too simple |  (http://curl.haxx.se/mail/lib-2013-03/0075.html) but it was a too simple | ||||||
| @@ -506,7 +619,7 @@ Currently the SMB authentication uses NTLMv1. | |||||||
|  Therefore support for the existing -E/--cert and --key options should be |  Therefore support for the existing -E/--cert and --key options should be | ||||||
|  implemented by supplying a custom certificate to the SChannel APIs, see: |  implemented by supplying a custom certificate to the SChannel APIs, see: | ||||||
|  - Getting a Certificate for Schannel |  - Getting a Certificate for Schannel | ||||||
|    http://msdn.microsoft.com/en-us/library/windows/desktop/aa375447.aspx |    https://msdn.microsoft.com/en-us/library/windows/desktop/aa375447.aspx | ||||||
|  |  | ||||||
| 15.2 Add support for custom server certificate validation | 15.2 Add support for custom server certificate validation | ||||||
|  |  | ||||||
| @@ -517,7 +630,7 @@ Currently the SMB authentication uses NTLMv1. | |||||||
|  Therefore support for the existing --cacert or --capath options should be |  Therefore support for the existing --cacert or --capath options should be | ||||||
|  implemented by supplying a custom certificate to the SChannel APIs, see: |  implemented by supplying a custom certificate to the SChannel APIs, see: | ||||||
|  - Getting a Certificate for Schannel |  - Getting a Certificate for Schannel | ||||||
|    http://msdn.microsoft.com/en-us/library/windows/desktop/aa375447.aspx |    https://msdn.microsoft.com/en-us/library/windows/desktop/aa375447.aspx | ||||||
|  |  | ||||||
| 15.3 Add support for the --ciphers option | 15.3 Add support for the --ciphers option | ||||||
|  |  | ||||||
| @@ -528,7 +641,7 @@ Currently the SMB authentication uses NTLMv1. | |||||||
|  Therefore support for the existing --ciphers option should be implemented |  Therefore support for the existing --ciphers option should be implemented | ||||||
|  by mapping the OpenSSL/GnuTLS cipher suites to the SChannel APIs, see |  by mapping the OpenSSL/GnuTLS cipher suites to the SChannel APIs, see | ||||||
|  - Specifying Schannel Ciphers and Cipher Strengths |  - Specifying Schannel Ciphers and Cipher Strengths | ||||||
|    http://msdn.microsoft.com/en-us/library/windows/desktop/aa380161.aspx |    https://msdn.microsoft.com/en-us/library/windows/desktop/aa380161.aspx | ||||||
|  |  | ||||||
| 16. SASL | 16. SASL | ||||||
|  |  | ||||||
| @@ -591,9 +704,39 @@ Currently the SMB authentication uses NTLMv1. | |||||||
|  |  | ||||||
| 17.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. | ||||||
|  |  | ||||||
|  | 17.7 warning when sending binary output to terminal | ||||||
|  |  | ||||||
|  |  Provide a way that prompts the user for confirmation before binary data is | ||||||
|  |  sent to the terminal, much in the style 'less' does it. | ||||||
|  |  | ||||||
|  | 17.8 offer color-coded HTTP header output | ||||||
|  |  | ||||||
|  |  By offering different color output on the header name and the header | ||||||
|  |  contents, they could be made more readable and thus help users working on | ||||||
|  |  HTTP services. | ||||||
|  |  | ||||||
|  | 17.9 Choose the name of file in braces for complex URLs | ||||||
|  |  | ||||||
|  |  When using braces to download a list of URLs and you use complicated names | ||||||
|  |  in the list of alternatives, it could be handy to allow curl to use other | ||||||
|  |  names when saving. | ||||||
|  |  | ||||||
|  |  Consider a way to offer that. Possibly like | ||||||
|  |  {partURL1:name1,partURL2:name2,partURL3:name3} where the name following the | ||||||
|  |  colon is the output name. | ||||||
|  |  | ||||||
|  |  See https://github.com/bagder/curl/issues/221 | ||||||
|  |  | ||||||
|  | 17.10 improve how curl works in a windows console window | ||||||
|  |  | ||||||
|  |  If you pull the scrollbar when transferring with curl in a Windows console | ||||||
|  |  window, the transfer is interrupted and can get disconnected. This can | ||||||
|  |  probably be improved. See https://github.com/bagder/curl/issues/322 | ||||||
|  |  | ||||||
|  |  | ||||||
| 18. Build | 18. Build | ||||||
|  |  | ||||||
| @@ -743,22 +886,3 @@ Currently the SMB authentication uses NTLMv1. | |||||||
|  |  | ||||||
|  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. | ||||||
|  |  | ||||||
| 21.9 have form functions use CURL handle argument |  | ||||||
|  |  | ||||||
|  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 |  | ||||||
|  thus curl_formget() with callback cannot function without first having |  | ||||||
|  curl_easy_perform() (or similar) called - which is hard to grasp and a design |  | ||||||
|  mistake. |  | ||||||
|  |  | ||||||
| 21.10 Add CURLOPT_MAIL_CLIENT option |  | ||||||
|  |  | ||||||
|  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 |  | ||||||
|  specifying this data as the URL is non-standard and to be honest a bit of a |  | ||||||
|  hack ;-) |  | ||||||
|  |  | ||||||
|  Please see the following thread for more information: |  | ||||||
|  http://curl.haxx.se/mail/lib-2012-05/0178.html |  | ||||||
|   |  | ||||||
|   | |||||||
| @@ -22,6 +22,8 @@ The Art Of Scripting HTTP Requests Using Curl | |||||||
|  3. Fetch a page |  3. Fetch a page | ||||||
|  3.1 GET |  3.1 GET | ||||||
|  3.2 HEAD |  3.2 HEAD | ||||||
|  |  3.3 Multiple URLs in a single command line | ||||||
|  |  3.4 Multiple HTTP methods in a single command line | ||||||
|  4. HTML forms |  4. HTML forms | ||||||
|  4.1 Forms explained |  4.1 Forms explained | ||||||
|  4.2 GET |  4.2 GET | ||||||
| @@ -135,7 +137,7 @@ The Art Of Scripting HTTP Requests Using Curl | |||||||
|  The Uniform Resource Locator format is how you specify the address of a |  The Uniform Resource Locator format is how you specify the address of a | ||||||
|  particular resource on the Internet. You know these, you've seen URLs like |  particular resource on the Internet. You know these, you've seen URLs like | ||||||
|  http://curl.haxx.se or https://yourbank.com a million times. RFC 3986 is the |  http://curl.haxx.se or https://yourbank.com a million times. RFC 3986 is the | ||||||
|  canonical spec. |  canonical spec. And yeah, the formal name is not URL, it is URI. | ||||||
|  |  | ||||||
|  2.2 Host |  2.2 Host | ||||||
|  |  | ||||||
| @@ -192,7 +194,6 @@ The Art Of Scripting HTTP Requests Using Curl | |||||||
|  the associated response. The path is what is to the right side of the slash |  the associated response. The path is what is to the right side of the slash | ||||||
|  that follows the host name and possibly port number. |  that follows the host name and possibly port number. | ||||||
|  |  | ||||||
|  |  | ||||||
| 3. Fetch a page | 3. Fetch a page | ||||||
|  |  | ||||||
|  3.1 GET |  3.1 GET | ||||||
| @@ -223,6 +224,46 @@ The Art Of Scripting HTTP Requests Using Curl | |||||||
|  may see a Content-Length: in the response headers, but there must not be an |  may see a Content-Length: in the response headers, but there must not be an | ||||||
|  actual body in the HEAD response. |  actual body in the HEAD response. | ||||||
|  |  | ||||||
|  |  3.3 Multiple URLs in a single command line | ||||||
|  |  | ||||||
|  |  A single curl command line may involve one or many URLs. The most common case | ||||||
|  |  is probably to just use one, but you can specify any amount of URLs. Yes | ||||||
|  |  any. No limits. You'll then get requests repeated over and over for all the | ||||||
|  |  given URLs. | ||||||
|  |  | ||||||
|  |  Example, send two GETs: | ||||||
|  |  | ||||||
|  |     curl http://url1.example.com http://url2.example.com | ||||||
|  |  | ||||||
|  |  If you use --data to POST to the URL, using multiple URLs means that you send | ||||||
|  |  that same POST to all the given URLs. | ||||||
|  |  | ||||||
|  |  Example, send two POSTs: | ||||||
|  |  | ||||||
|  |     curl --data name=curl http://url1.example.com http://url2.example.com | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  3.4 Multiple HTTP methods in a single command line | ||||||
|  |  | ||||||
|  |  Sometimes you need to operate on several URLs in a single command line and do | ||||||
|  |  different HTTP methods on each. For this, you'll enjoy the --next option. It | ||||||
|  |  is basically a separator that separates a bunch of options from the next. All | ||||||
|  |  the URLs before --next will get the same method and will get all the POST | ||||||
|  |  data merged into one. | ||||||
|  |  | ||||||
|  |  When curl reaches the --next on the command line, it'll sort of reset the | ||||||
|  |  method and the POST data and allow a new set. | ||||||
|  |  | ||||||
|  |  Perhaps this is best shown with a few examples. To send first a HEAD and then | ||||||
|  |  a GET: | ||||||
|  |  | ||||||
|  |    curl -I http://example.com --next http://example.com | ||||||
|  |  | ||||||
|  |  To first send a POST and then a GET: | ||||||
|  |  | ||||||
|  |    curl -d score=10 http://example.com/post.cgi --next http://example.com/results.html | ||||||
|  |  | ||||||
|  |  | ||||||
| 4. HTML forms | 4. HTML forms | ||||||
|  |  | ||||||
|  4.1 Forms explained |  4.1 Forms explained | ||||||
| @@ -301,6 +342,10 @@ The Art Of Scripting HTTP Requests Using Curl | |||||||
|  |  | ||||||
|         curl --data-urlencode "name=I am Daniel" http://www.example.com |         curl --data-urlencode "name=I am Daniel" http://www.example.com | ||||||
|  |  | ||||||
|  |   If you repeat --data several times on the command line, curl will | ||||||
|  |   concatenate all the given data pieces - and put a '&' symbol between each | ||||||
|  |   data segment. | ||||||
|  |  | ||||||
|  4.4 File Upload POST |  4.4 File Upload POST | ||||||
|  |  | ||||||
|   Back in late 1995 they defined an additional way to post data over HTTP. It |   Back in late 1995 they defined an additional way to post data over HTTP. It | ||||||
| @@ -585,6 +630,12 @@ The Art Of Scripting HTTP Requests Using Curl | |||||||
|  |  | ||||||
|         http://curl.haxx.se/docs/sslcerts.html |         http://curl.haxx.se/docs/sslcerts.html | ||||||
|  |  | ||||||
|  |   At times you may end up with your own CA cert store and then you can tell | ||||||
|  |   curl to use that to verify the server's certificate: | ||||||
|  |  | ||||||
|  |         curl --cacert ca-bundle.pem https://example.com/ | ||||||
|  |  | ||||||
|  |  | ||||||
| 11. Custom Request Elements | 11. Custom Request Elements | ||||||
|  |  | ||||||
| 11.1 Modify method and headers | 11.1 Modify method and headers | ||||||
| @@ -693,7 +744,7 @@ The Art Of Scripting HTTP Requests Using Curl | |||||||
|  |  | ||||||
|  14.1 Standards |  14.1 Standards | ||||||
|  |  | ||||||
|  RFC 2616 is a must to read if you want in-depth understanding of the HTTP |  RFC 7230 is a must to read if you want in-depth understanding of the HTTP | ||||||
|  protocol |  protocol | ||||||
|  |  | ||||||
|  RFC 3986 explains the URL syntax |  RFC 3986 explains the URL syntax | ||||||
|   | |||||||
| @@ -1,22 +1,18 @@ | |||||||
|                                   _   _ ____  _ |  | ||||||
|                               ___| | | |  _ \| | |  | ||||||
|                              / __| | | | |_) | | |  | ||||||
|                             | (__| |_| |  _ <| |___ |  | ||||||
|                              \___|\___/|_| \_\_____| |  | ||||||
|  |  | ||||||
| Version Numbers and Releases | Version Numbers and Releases | ||||||
|  | ============================ | ||||||
|  |  | ||||||
|  Curl is not only curl. Curl is also libcurl. They're actually individually |  Curl is not only curl. Curl is also libcurl. They're actually individually | ||||||
|  versioned, but they mostly follow each other rather closely. |  versioned, but they mostly follow each other rather closely. | ||||||
|  |  | ||||||
|  The version numbering is always built up using the same system: |  The version numbering is always built up using the same system: | ||||||
|  |  | ||||||
|         X.Y[.Z] |         X.Y.Z | ||||||
|  |  | ||||||
|  Where |   - X is main version number | ||||||
|    X is main version number |   - Y is release number | ||||||
|    Y is release number |   - Z is patch number | ||||||
|    Z is patch number |  | ||||||
|  | ## Bumping numbers | ||||||
|  |  | ||||||
|  One of these numbers will get bumped in each new release. The numbers to the |  One of these numbers will get bumped in each new release. The numbers to the | ||||||
|  right of a bumped number will be reset to zero. If Z is zero, it may not be |  right of a bumped number will be reset to zero. If Z is zero, it may not be | ||||||
| @@ -57,4 +53,4 @@ Version Numbers and Releases | |||||||
|  release. It makes comparisons with greater than and less than work. |  release. It makes comparisons with greater than and less than work. | ||||||
|  |  | ||||||
|  This number is also available as three separate defines: |  This number is also available as three separate defines: | ||||||
|  LIBCURL_VERSION_MAJOR, LIBCURL_VERSION_MINOR and LIBCURL_VERSION_PATCH. |  `LIBCURL_VERSION_MAJOR`, `LIBCURL_VERSION_MINOR` and `LIBCURL_VERSION_PATCH`. | ||||||
|   | |||||||
							
								
								
									
										194
									
								
								docs/curl.1
									
									
									
									
									
								
							
							
						
						
									
										194
									
								
								docs/curl.1
									
									
									
									
									
								
							| @@ -39,8 +39,7 @@ resume, Metalink, and more. As you will see below, the number of features will | |||||||
| make your head spin! | make your head spin! | ||||||
|  |  | ||||||
| curl is powered by libcurl for all transfer-related features. See | curl is powered by libcurl for all transfer-related features. See | ||||||
| .BR libcurl (3) | \fIlibcurl(3)\fP for details. | ||||||
| for details. |  | ||||||
| .SH URL | .SH URL | ||||||
| The URL syntax is protocol-dependent. You'll find a detailed description in | The URL syntax is protocol-dependent. You'll find a detailed description in | ||||||
| RFC 3986. | RFC 3986. | ||||||
| @@ -172,10 +171,11 @@ a level of control). | |||||||
| .IP "-2, --sslv2" | .IP "-2, --sslv2" | ||||||
| (SSL) Forces curl to use SSL version 2 when negotiating with a remote SSL | (SSL) Forces curl to use SSL version 2 when negotiating with a remote SSL | ||||||
| server. Sometimes curl is built without SSLv2 support. SSLv2 is widely | server. Sometimes curl is built without SSLv2 support. SSLv2 is widely | ||||||
| considered insecure. | considered insecure (see RFC 6176). | ||||||
| .IP "-3, --sslv3" | .IP "-3, --sslv3" | ||||||
| (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. SSLv3 is widely | ||||||
|  | considered insecure (see RFC 7568). | ||||||
| .IP "-4, --ipv4" | .IP "-4, --ipv4" | ||||||
| This 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. | ||||||
| @@ -213,7 +213,7 @@ be in the format "NAME1=VALUE1; NAME2=VALUE2". | |||||||
|  |  | ||||||
| If no '=' symbol is used in the line, it is treated as a filename to use to | If no '=' symbol is used in the line, it is treated as a filename to use to | ||||||
| read previously stored cookie lines from, which should be used in this session | read previously stored cookie lines from, which should be used in this session | ||||||
| if they match. Using this method also activates the "cookie parser" which will | if they match. Using this method also activates the cookie engine which will | ||||||
| make curl record incoming cookies too, which may be handy if you're using this | make curl record incoming cookies too, which may be handy if you're using this | ||||||
| in combination with the \fI-L, --location\fP option. The file format of the | in combination with the \fI-L, --location\fP option. The file format of the | ||||||
| file to read cookies from should be plain HTTP headers or the Netscape/Mozilla | file to read cookies from should be plain HTTP headers or the Netscape/Mozilla | ||||||
| @@ -223,6 +223,15 @@ The file specified with \fI-b, --cookie\fP is only used as input. No cookies | |||||||
| will be written to the file. To store cookies, use the \fI-c, --cookie-jar\fP | will be written to the file. To store cookies, use the \fI-c, --cookie-jar\fP | ||||||
| option. | option. | ||||||
|  |  | ||||||
|  | Exercise caution if you are using this option and multiple transfers may occur. | ||||||
|  | If you use the NAME1=VALUE1; format, or in a file use the Set-Cookie format and | ||||||
|  | don't specify a domain, then the cookie is sent for any domain (even after | ||||||
|  | redirects are followed) and cannot be modified by a server-set cookie. If the | ||||||
|  | cookie engine is enabled and a server sets a cookie of the same name then both | ||||||
|  | will be sent on a future transfer to that server, likely not what you intended. | ||||||
|  | To address these issues set a domain in Set-Cookie (doing that will include | ||||||
|  | sub-domains) or use the Netscape format. | ||||||
|  |  | ||||||
| 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 "-B, --use-ascii" | .IP "-B, --use-ascii" | ||||||
| (FTP/LDAP) Enable ASCII transfer. For FTP, this can also be enforced by using | (FTP/LDAP) Enable ASCII transfer. For FTP, this can also be enforced by using | ||||||
| @@ -254,6 +263,9 @@ won't fail or even report an error clearly. Using -v will get a warning | |||||||
| displayed, but that is the only visible feedback you get about this possibly | displayed, but that is the only visible feedback you get about this possibly | ||||||
| lethal situation. | lethal situation. | ||||||
|  |  | ||||||
|  | Since 7.43.0 cookies that were imported in the Set-Cookie format without a | ||||||
|  | domain name are not exported by this option. | ||||||
|  |  | ||||||
| If this option is used several times, the last specified file name will be | If this option is used several times, the last specified file name will be | ||||||
| used. | used. | ||||||
| .IP "-C, --continue-at <offset>" | .IP "-C, --continue-at <offset>" | ||||||
| @@ -269,11 +281,11 @@ If this option is used several times, the last one will be used. | |||||||
| .IP "--ciphers <list of ciphers>" | .IP "--ciphers <list of ciphers>" | ||||||
| (SSL) Specifies which ciphers to use in the connection. The list of ciphers | (SSL) Specifies which ciphers to use in the connection. The list of ciphers | ||||||
| must specify valid ciphers. Read up on SSL cipher list details on this URL: | must specify valid ciphers. Read up on SSL cipher list details on this URL: | ||||||
| \fIhttp://www.openssl.org/docs/apps/ciphers.html\fP | \fIhttps://www.openssl.org/docs/apps/ciphers.html\fP | ||||||
|  |  | ||||||
| NSS ciphers are done differently than OpenSSL and GnuTLS. The full list of NSS | NSS ciphers are done differently than OpenSSL and GnuTLS. The full list of NSS | ||||||
| ciphers is in the NSSCipherSuite entry at this URL: | ciphers is in the NSSCipherSuite entry at this URL: | ||||||
| \fIhttp://git.fedorahosted.org/cgit/mod_nss.git/plain/docs/mod_nss.html#Directives\fP | \fIhttps://git.fedorahosted.org/cgit/mod_nss.git/plain/docs/mod_nss.html#Directives\fP | ||||||
|  |  | ||||||
| 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 "--compressed" | .IP "--compressed" | ||||||
| @@ -315,9 +327,10 @@ presses the submit button. This will cause curl to pass the data to the server | |||||||
| using the content-type application/x-www-form-urlencoded.  Compare to | using the content-type application/x-www-form-urlencoded.  Compare to | ||||||
| \fI-F, --form\fP. | \fI-F, --form\fP. | ||||||
|  |  | ||||||
| \fI-d, --data\fP is the same as \fI--data-ascii\fP. To post data purely binary, | \fI-d, --data\fP is the same as \fI--data-ascii\fP. \fI--data-raw\fP is almost | ||||||
| you should instead use the \fI--data-binary\fP option. To URL-encode the value | the same but does not have a special interpretation of the @ character. To | ||||||
| of a form field you may use \fI--data-urlencode\fP. | post data purely binary, you should instead use the \fI--data-binary\fP option. | ||||||
|  | To URL-encode the value of a form field you may use \fI--data-urlencode\fP. | ||||||
|  |  | ||||||
| If any of these options is used more than once on the same command line, the | If any of these options is used more than once on the same command line, the | ||||||
| data pieces specified will be merged together with a separating | data pieces specified will be merged together with a separating | ||||||
| @@ -329,7 +342,8 @@ read the data from, or - if you want curl to read the data from | |||||||
| stdin. Multiple files can also be specified. Posting data from a file | stdin. Multiple files can also be specified. Posting data from a file | ||||||
| named 'foobar' would thus be done with \fI--data\fP @foobar. When --data is | named 'foobar' would thus be done with \fI--data\fP @foobar. When --data is | ||||||
| told to read from a file like that, carriage returns and newlines will be | told to read from a file like that, carriage returns and newlines will be | ||||||
| stripped out. | stripped out. If you don't want the @ character to have a special | ||||||
|  | interpretation use \fI--data-raw\fP instead. | ||||||
| .IP "-D, --dump-header <file>" | .IP "-D, --dump-header <file>" | ||||||
| Write the protocol headers to the specified file. | Write the protocol headers to the specified file. | ||||||
|  |  | ||||||
| @@ -354,6 +368,10 @@ and carriage returns are preserved and conversions are never done. | |||||||
|  |  | ||||||
| If this option is used several times, the ones following the first will append | If this option is used several times, the ones following the first will append | ||||||
| data as described in \fI-d, --data\fP. | data as described in \fI-d, --data\fP. | ||||||
|  | .IP "--data-raw <data>" | ||||||
|  | (HTTP) This posts data similarly to \fI--data\fP but without the special | ||||||
|  | interpretation of the @ character. See \fI-d, --data\fP. | ||||||
|  | (Added in 7.43.0) | ||||||
| .IP "--data-urlencode <data>" | .IP "--data-urlencode <data>" | ||||||
| (HTTP) This posts data, similar to the other --data options with the exception | (HTTP) This posts data, similar to the other --data options with the exception | ||||||
| that this performs URL-encoding. (Added in 7.18.0) | that this performs URL-encoding. (Added in 7.18.0) | ||||||
| @@ -470,10 +488,10 @@ If this option is used several times, the last one will be used. | |||||||
| (SSL) Tells curl to use the specified client certificate file when getting a | (SSL) Tells curl to use the specified client certificate file when getting a | ||||||
| file with HTTPS, FTPS or another SSL-based protocol. The certificate must be | file with HTTPS, FTPS or another SSL-based protocol. The certificate must be | ||||||
| in PKCS#12 format if using Secure Transport, or PEM format if using any other | in PKCS#12 format if using Secure Transport, or PEM format if using any other | ||||||
| engine.  If the optional password isn't specified, it will be queried | engine.  If the optional password isn't specified, it will be queried for on | ||||||
| for on the terminal. Note that this option assumes a \&"certificate" file that | the terminal. Note that this option assumes a \&"certificate" file that is the | ||||||
| is the private key and the private certificate concatenated! See \fI--cert\fP | private key and the client certificate concatenated! See \fI--cert\fP and | ||||||
| and \fI--key\fP to specify them independently. | \fI--key\fP to specify them independently. | ||||||
|  |  | ||||||
| If curl is built against the NSS SSL library then this option can tell | If curl is built against the NSS SSL library then this option can tell | ||||||
| curl the nickname of the certificate to use within the NSS database defined | curl the nickname of the certificate to use within the NSS database defined | ||||||
| @@ -505,6 +523,13 @@ after having run curl. | |||||||
| (SSL) Specify the path name to the Entropy Gathering Daemon socket. The socket | (SSL) Specify the path name to the Entropy Gathering Daemon socket. The socket | ||||||
| is used to seed the random engine for SSL connections. See also the | is used to seed the random engine for SSL connections. See also the | ||||||
| \fI--random-file\fP option. | \fI--random-file\fP option. | ||||||
|  | .IP "--expect100-timeout <seconds>" | ||||||
|  | (HTTP) Maximum time in seconds that you allow curl to wait for a 100-continue | ||||||
|  | response when curl emits an Expects: 100-continue header in its request. By | ||||||
|  | default curl will wait one second. This option accepts decimal values! When | ||||||
|  | curl stops waiting, it will continue as if the response has been received. | ||||||
|  |  | ||||||
|  | (Added in 7.47.0) | ||||||
| .IP "--cert-type <type>" | .IP "--cert-type <type>" | ||||||
| (SSL) Tells curl what certificate type the provided certificate is in. PEM, | (SSL) Tells curl what certificate type the provided certificate is in. PEM, | ||||||
| DER and ENG are recognized types.  If not specified, PEM is assumed. | DER and ENG are recognized types.  If not specified, PEM is assumed. | ||||||
| @@ -539,19 +564,22 @@ OpenSSL-powered curl to make SSL-connections much more efficiently than using | |||||||
|  |  | ||||||
| If this option is set, the default capath value will be ignored, and if it is | 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 (hashes)>" | ||||||
| (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 (or hashes) to verify the | ||||||
| file must contain a single public key in PEM or DER format. | peer. This can be a path to a file which contains a single public key in PEM or | ||||||
|  | DER format, or any number of base64 encoded sha256 hashes preceded by | ||||||
|  | \'sha256//\' and separated by \';\' | ||||||
|  |  | ||||||
| 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, GnuTLS and GSKit backends. | Added in 7.39.0 for OpenSSL, GnuTLS and GSKit. Added in 7.43.0 for NSS and | ||||||
|  | wolfSSL/CyaSSL. sha256 support added in 7.44.0 for OpenSSL, | ||||||
|  | GnuTLS, NSS and wolfSSL/CyaSSL. Other SSL backends not supported. | ||||||
|  |  | ||||||
| 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) |  | ||||||
| .IP "--cert-status" | .IP "--cert-status" | ||||||
| (SSL) Tells curl to verify the status of the server certificate by using the | (SSL) Tells curl to verify the status of the server certificate by using the | ||||||
| Certificate Status Request (aka. OCSP stapling) TLS extension. | Certificate Status Request (aka. OCSP stapling) TLS extension. | ||||||
| @@ -562,6 +590,16 @@ or no response at all is received, the verification fails. | |||||||
|  |  | ||||||
| This is currently only implemented in the OpenSSL, GnuTLS and NSS backends. | This is currently only implemented in the OpenSSL, GnuTLS and NSS backends. | ||||||
| (Added in 7.41.0) | (Added in 7.41.0) | ||||||
|  | .IP "--false-start" | ||||||
|  |  | ||||||
|  | (SSL) Tells curl to use false start during the TLS handshake. False start is a | ||||||
|  | mode where a TLS client will start sending application data before verifying | ||||||
|  | the server's Finished message, thus saving a round trip when performing a full | ||||||
|  | handshake. | ||||||
|  |  | ||||||
|  | This is currently only implemented in the NSS and Secure Transport (on iOS 7.0 | ||||||
|  | or later, or OS X 10.9 or later) backends. | ||||||
|  | (Added in 7.42.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 | ||||||
| @@ -589,7 +627,9 @@ input: | |||||||
| \fBcurl\fP -F password=@/etc/passwd www.mypasswords.com | \fBcurl\fP -F password=@/etc/passwd www.mypasswords.com | ||||||
|  |  | ||||||
| To read content from stdin instead of a file, use - as the filename. This goes | To read content from stdin instead of a file, use - as the filename. This goes | ||||||
| for both @ and < constructs. | for both @ and < constructs. Unfortunately it does not support reading the | ||||||
|  | file from a named pipe or similar, as it needs the full size before the | ||||||
|  | transfer starts. | ||||||
|  |  | ||||||
| You can also tell curl what Content-Type to use by using 'type=', in a manner | You can also tell curl what Content-Type to use by using 'type=', in a manner | ||||||
| similar to: | similar to: | ||||||
| @@ -651,6 +691,7 @@ curl does one CWD with the full target directory and then operates on the file | |||||||
| \&"normally" (like in the multicwd case). This is somewhat more standards | \&"normally" (like in the multicwd case). This is somewhat more standards | ||||||
| compliant than 'nocwd' but without the full penalty of 'multicwd'. | compliant than 'nocwd' but without the full penalty of 'multicwd'. | ||||||
| .RE | .RE | ||||||
|  | .IP | ||||||
| (Added in 7.15.1) | (Added in 7.15.1) | ||||||
| .IP "--ftp-pasv" | .IP "--ftp-pasv" | ||||||
| (FTP) Use passive mode for the data connection. Passive is the internal default | (FTP) Use passive mode for the data connection. Passive is the internal default | ||||||
| @@ -755,10 +796,12 @@ This option can be used multiple times to add/replace/remove multiple headers. | |||||||
| be the 128 bit MD5 checksum of the remote host's public key, curl will refuse | be the 128 bit MD5 checksum of the remote host's public key, curl will refuse | ||||||
| the connection with the host unless the md5sums match. (Added in 7.17.1) | the connection with the host unless the md5sums match. (Added in 7.17.1) | ||||||
| .IP "--ignore-content-length" | .IP "--ignore-content-length" | ||||||
| (HTTP) | For HTTP, Ignore the Content-Length header. This is particularly useful for | ||||||
| Ignore the Content-Length header. This is particularly useful for servers | servers running Apache 1.x, which will report incorrect Content-Length for | ||||||
| running Apache 1.x, which will report incorrect Content-Length for files | files larger than 2 gigabytes. | ||||||
| larger than 2 gigabytes. |  | ||||||
|  | For FTP (since 7.46.0), skip the RETR command to figure out the size before | ||||||
|  | downloading a file. | ||||||
| .IP "-i, --include" | .IP "-i, --include" | ||||||
| (HTTP) Include the HTTP-header in the output. The HTTP-header includes things | (HTTP) Include the HTTP-header in the output. The HTTP-header includes things | ||||||
| like server-name, date of the document, HTTP-version and more... | like server-name, date of the document, HTTP-version and more... | ||||||
| @@ -1043,13 +1086,10 @@ in Metalink file, hash check will fail. | |||||||
| 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) | \fInetrc(5)\fP \fIftp(1)\fP for details on the file format. Curl will not | ||||||
| or | complain if that file doesn't have the right permissions (it should not be | ||||||
| .BR ftp(1) | either world- or group-readable). The environment variable "HOME" is used to | ||||||
| for details on the file format. Curl will not complain if that file | find the home directory. | ||||||
| doesn't have the right permissions (it should not be either world- or |  | ||||||
| group-readable). The environment variable "HOME" is used to find the home |  | ||||||
| directory. |  | ||||||
|  |  | ||||||
| A quick and very simple example of how to setup a \fI.netrc\fP to allow curl | A quick and very simple example of how to setup a \fI.netrc\fP to allow curl | ||||||
| to FTP to the machine host.domain.com with user name \&'myself' and password | to FTP to the machine host.domain.com with user name \&'myself' and password | ||||||
| @@ -1211,7 +1251,7 @@ i.e "my.host.domain" to specify the machine | |||||||
| make curl pick the same IP address that is already used for the control | make curl pick the same IP address that is already used for the control | ||||||
| connection | connection | ||||||
| .RE | .RE | ||||||
|  | .IP | ||||||
| If this option is used several times, the last one will be used. Disable the | If this option is used several times, the last one will be used. Disable the | ||||||
| use of PORT with \fI--ftp-pasv\fP. Disable the attempt to use the EPRT command | use of PORT with \fI--ftp-pasv\fP. Disable the attempt to use the EPRT command | ||||||
| instead of PORT by using \fI--disable-eprt\fP. EPRT is really PORT++. | instead of PORT by using \fI--disable-eprt\fP. EPRT is really PORT++. | ||||||
| @@ -1225,22 +1265,28 @@ available. | |||||||
| (SSL/SSH) Passphrase for the private key | (SSL/SSH) Passphrase for the private key | ||||||
|  |  | ||||||
| If this option is used several times, the last one will be used. | If this option is used several times, the last one will be used. | ||||||
|  | .IP "--path-as-is" | ||||||
|  | Tell curl to not handle sequences of /../ or /./ in the given URL | ||||||
|  | path. Normally curl will squash or merge them according to standards but with | ||||||
|  | this option set you tell it not to do that. | ||||||
|  |  | ||||||
|  | (Added in 7.42.0) | ||||||
| .IP "--post301" | .IP "--post301" | ||||||
| (HTTP) Tells curl to respect RFC 2616/10.3.2 and not convert POST requests | (HTTP) Tells curl to respect RFC 7230/6.4.2 and not convert POST requests | ||||||
| into GET requests when following a 301 redirection. The non-RFC behaviour is | into GET requests when following a 301 redirection. The non-RFC behaviour is | ||||||
| ubiquitous in web browsers, so curl does the conversion by default to maintain | ubiquitous in web browsers, so curl does the conversion by default to maintain | ||||||
| consistency. However, a server may require a POST to remain a POST after such | consistency. However, a server may require a POST to remain a POST after such | ||||||
| a redirection. This option is meaningful only when using \fI-L, --location\fP | a redirection. This option is meaningful only when using \fI-L, --location\fP | ||||||
| (Added in 7.17.1) | (Added in 7.17.1) | ||||||
| .IP "--post302" | .IP "--post302" | ||||||
| (HTTP) Tells curl to respect RFC 2616/10.3.2 and not convert POST requests | (HTTP) Tells curl to respect RFC 7230/6.4.3 and not convert POST requests | ||||||
| into GET requests when following a 302 redirection. The non-RFC behaviour is | into GET requests when following a 302 redirection. The non-RFC behaviour is | ||||||
| ubiquitous in web browsers, so curl does the conversion by default to maintain | ubiquitous in web browsers, so curl does the conversion by default to maintain | ||||||
| consistency. However, a server may require a POST to remain a POST after such | consistency. However, a server may require a POST to remain a POST after such | ||||||
| a redirection. This option is meaningful only when using \fI-L, --location\fP | a redirection. This option is meaningful only when using \fI-L, --location\fP | ||||||
| (Added in 7.19.1) | (Added in 7.19.1) | ||||||
| .IP "--post303" | .IP "--post303" | ||||||
| (HTTP) Tells curl to respect RFC 2616/10.3.2 and not convert POST requests | (HTTP) Tells curl to respect RFC 7230/6.4.4 and not convert POST requests | ||||||
| into GET requests when following a 303 redirection. The non-RFC behaviour is | into GET requests when following a 303 redirection. The non-RFC behaviour is | ||||||
| ubiquitous in web browsers, so curl does the conversion by default to maintain | ubiquitous in web browsers, so curl does the conversion by default to maintain | ||||||
| consistency. However, a server may require a POST to remain a POST after such | consistency. However, a server may require a POST to remain a POST after such | ||||||
| @@ -1287,9 +1333,40 @@ This option can be used multiple times, in which case the effect is the same | |||||||
| as concatenating the protocols into one instance of the option. | as concatenating the protocols into one instance of the option. | ||||||
|  |  | ||||||
| (Added in 7.20.2) | (Added in 7.20.2) | ||||||
|  | .IP "--proto-default <protocol>" | ||||||
|  | Tells curl to use \fIprotocol\fP for any URL missing a scheme name. | ||||||
|  |  | ||||||
|  | Example: | ||||||
|  |  | ||||||
|  | .RS | ||||||
|  | .IP "--proto-default https ftp.mozilla.org" | ||||||
|  | https://ftp.mozilla.org | ||||||
|  | .RE | ||||||
|  |  | ||||||
|  | An unknown or unsupported protocol causes error | ||||||
|  | \fICURLE_UNSUPPORTED_PROTOCOL\fP. | ||||||
|  |  | ||||||
|  | This option does not change the default proxy protocol (http). | ||||||
|  |  | ||||||
|  | Without this option curl would make a guess based on the host, see \fI--url\fP | ||||||
|  | for details. | ||||||
|  |  | ||||||
|  | (Added in 7.45.0) | ||||||
| .IP "--proto-redir <protocols>" | .IP "--proto-redir <protocols>" | ||||||
| Tells curl to use the listed protocols after a redirect. See --proto for | Tells curl to use the listed protocols on redirect. See --proto for how | ||||||
| how protocols are represented. | protocols are represented. | ||||||
|  |  | ||||||
|  | Example: | ||||||
|  |  | ||||||
|  | .RS | ||||||
|  | .IP "--proto-redir -all,http,https" | ||||||
|  | Allow only HTTP and HTTPS on redirect. | ||||||
|  | .RE | ||||||
|  |  | ||||||
|  | By default curl will allow all protocols on redirect except several disabled | ||||||
|  | for security reasons: Since 7.19.4 FILE and SCP are disabled, and since 7.40.0 | ||||||
|  | SMB and SMBS are also disabled. Specifying \fIall\fP or \fI+all\fP enables all | ||||||
|  | protocols on redirect, including those disabled for security. | ||||||
|  |  | ||||||
| (Added in 7.20.2) | (Added in 7.20.2) | ||||||
| .IP "--proxy-anyauth" | .IP "--proxy-anyauth" | ||||||
| @@ -1310,6 +1387,11 @@ with a remote host. (Added in 7.17.1) | |||||||
| .IP "--proxy-ntlm" | .IP "--proxy-ntlm" | ||||||
| Tells curl to use HTTP NTLM authentication when communicating with the given | Tells curl to use HTTP NTLM authentication when communicating with the given | ||||||
| proxy. Use \fI--ntlm\fP for enabling NTLM with a remote host. | proxy. Use \fI--ntlm\fP for enabling NTLM with a remote host. | ||||||
|  | .IP "--proxy-service-name <servicename>" | ||||||
|  | This option allows you to change the service name for proxy negotiation. | ||||||
|  |  | ||||||
|  | Examples: --proxy-negotiate proxy-name \fI--proxy-service-name\fP sockd would use | ||||||
|  | sockd/proxy-name.  (Added in 7.43.0). | ||||||
| .IP "--proxy1.0 <proxyhost[:port]>" | .IP "--proxy1.0 <proxyhost[:port]>" | ||||||
| Use the specified HTTP 1.0 proxy. If the port number is not specified, it is | Use the specified HTTP 1.0 proxy. If the port number is not specified, it is | ||||||
| assumed at port 1080. | assumed at port 1080. | ||||||
| @@ -1399,15 +1481,12 @@ specifies the last 500 bytes | |||||||
| specifies the bytes from offset 9500 and forward | specifies the bytes from offset 9500 and forward | ||||||
| .TP | .TP | ||||||
| .B 0-0,-1 | .B 0-0,-1 | ||||||
| specifies the first and last byte only(*)(H) | specifies the first and last byte only(*)(HTTP) | ||||||
| .TP |  | ||||||
| .B 500-700,600-799 |  | ||||||
| specifies 300 bytes from offset 500(H) |  | ||||||
| .TP | .TP | ||||||
| .B 100-199,500-599 | .B 100-199,500-599 | ||||||
| specifies two separate 100-byte ranges(*)(H) | specifies two separate 100-byte ranges(*) (HTTP) | ||||||
| .RE | .RE | ||||||
|  | .IP | ||||||
| (*) = NOTE that this will cause the server to reply with a multipart | (*) = NOTE that this will cause the server to reply with a multipart | ||||||
| response! | response! | ||||||
|  |  | ||||||
| @@ -1491,6 +1570,11 @@ terminal/stdout unless you redirect it. | |||||||
| .IP "--sasl-ir" | .IP "--sasl-ir" | ||||||
| Enable initial response in SASL authentication. | Enable initial response in SASL authentication. | ||||||
| (Added in 7.31.0) | (Added in 7.31.0) | ||||||
|  | .IP "--service-name <servicename>" | ||||||
|  | This option allows you to change the service name for SPNEGO. | ||||||
|  |  | ||||||
|  | Examples: --negotiate \fI--service-name\fP sockd would use | ||||||
|  | sockd/server-name.  (Added in 7.43.0). | ||||||
| .IP "-S, --show-error" | .IP "-S, --show-error" | ||||||
| When used with \fI-s\fP it makes curl show an error message if it fails. | When used with \fI-s\fP it makes curl show an error message if it fails. | ||||||
| .IP "--ssl" | .IP "--ssl" | ||||||
| @@ -1513,6 +1597,10 @@ and TLS1.0 protocols known as BEAST.  If this option isn't used, the SSL layer | |||||||
| may use workarounds known to cause interoperability problems with some older | may use workarounds known to cause interoperability problems with some older | ||||||
| SSL implementations. WARNING: this option loosens the SSL security, and by | SSL implementations. WARNING: this option loosens the SSL security, and by | ||||||
| using this flag you ask for exactly that.  (Added in 7.25.0) | using this flag you ask for exactly that.  (Added in 7.25.0) | ||||||
|  | .IP "--ssl-no-revoke" | ||||||
|  | (WinSSL) This option tells curl to disable certificate revocation checks. | ||||||
|  | WARNING: this option loosens the SSL security, and by using this flag you ask | ||||||
|  | for exactly that.  (Added in 7.44.0) | ||||||
| .IP "--socks4 <host[:port]>" | .IP "--socks4 <host[:port]>" | ||||||
| Use the specified SOCKS4 proxy. If the port number is not specified, it is | Use the specified SOCKS4 proxy. If the port number is not specified, it is | ||||||
| assumed at port 1080. (Added in 7.15.2) | assumed at port 1080. (Added in 7.15.2) | ||||||
| @@ -1692,7 +1780,7 @@ impossible to use a colon in the user name with this option. The password can, | |||||||
| still. | still. | ||||||
|  |  | ||||||
| When using Kerberos V5 with a Windows based server you should include the | When using Kerberos V5 with a Windows based server you should include the | ||||||
| Windows domain name in the user name, in order for the server to succesfully | Windows domain name in the user name, in order for the server to successfully | ||||||
| obtain a Kerberos Ticket. If you don't then the initial authentication | obtain a Kerberos Ticket. If you don't then the initial authentication | ||||||
| handshake may fail. | handshake may fail. | ||||||
|  |  | ||||||
| @@ -1722,6 +1810,12 @@ If this option is used several times, the last one will be used. | |||||||
| Specify a URL to fetch. This option is mostly handy when you want to specify | Specify a URL to fetch. This option is mostly handy when you want to specify | ||||||
| URL(s) in a config file. | URL(s) in a config file. | ||||||
|  |  | ||||||
|  | If the given URL is missing a scheme name (such as "http://" or "ftp://" etc) | ||||||
|  | then curl will make a guess based on the host. If the outermost sub-domain name | ||||||
|  | matches DICT, FTP, IMAP, LDAP, POP3 or SMTP then that protocol will be used, | ||||||
|  | otherwise HTTP will be used. Since 7.45.0 guessing can be disabled by setting a | ||||||
|  | default protocol, see \fI--proto-default\fP for details. | ||||||
|  |  | ||||||
| This option may be used any number of times. To control where this URL is | This option may be used any number of times. To control where this URL is | ||||||
| written, use the \fI-o, --output\fP or the \fI-O, --remote-name\fP options. | written, use the \fI-o, --output\fP or the \fI-O, --remote-name\fP options. | ||||||
| .IP "-v, --verbose" | .IP "-v, --verbose" | ||||||
| @@ -1866,7 +1960,7 @@ displayed with millisecond resolution. | |||||||
| The URL that was fetched last. This is most meaningful if you've told curl | The URL that was fetched last. This is most meaningful if you've told curl | ||||||
| to follow location: headers. | to follow location: headers. | ||||||
| .RE | .RE | ||||||
|  | .IP | ||||||
| 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, --proxy <[protocol://][user:password@]proxyhost[:port]>" | .IP "-x, --proxy <[protocol://][user:password@]proxyhost[:port]>" | ||||||
| Use the specified proxy. | Use the specified proxy. | ||||||
| @@ -1914,10 +2008,10 @@ 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 | The method string you set with -X will be used for all requests, which if you | ||||||
| you for example use \fB-L, --location\fP may cause unintended side-effects | for example use \fB-L, --location\fP may cause unintended side-effects when | ||||||
| when curl doesn't change request method according to the HTTP 30x response | curl doesn't change request method according to the HTTP 30x response codes - | ||||||
| codes - and similar. | 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 | ||||||
|   | |||||||
							
								
								
									
										4
									
								
								docs/examples/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								docs/examples/.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -73,3 +73,7 @@ smtp-vrfy | |||||||
| url2file | url2file | ||||||
| usercertinmem | usercertinmem | ||||||
| xmlstream | xmlstream | ||||||
|  | http2-download | ||||||
|  | http2-serverpush | ||||||
|  | http2-upload | ||||||
|  | imap-lsub | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ | |||||||
|  *                            | (__| |_| |  _ <| |___ |  *                            | (__| |_| |  _ <| |___ | ||||||
|  *                             \___|\___/|_| \_\_____| |  *                             \___|\___/|_| \_\_____| | ||||||
|  * |  * | ||||||
|  * Copyright (C) 1998 - 2011, 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 | ||||||
| @@ -19,9 +19,10 @@ | |||||||
|  * KIND, either express or implied. |  * KIND, either express or implied. | ||||||
|  * |  * | ||||||
|  ***************************************************************************/ |  ***************************************************************************/ | ||||||
| /* Example application source code using the multi interface to download many | /* <DESC> | ||||||
|  * files, but with a capped maximum amount of simultaneous transfers. |  * Source code using the multi interface to download many | ||||||
|  * |  * files, with a capped maximum amount of simultaneous transfers. | ||||||
|  |  * </DESC> | ||||||
|  * Written by Michael Wallner |  * Written by Michael Wallner | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ | |||||||
| #                            | (__| |_| |  _ <| |___ | #                            | (__| |_| |  _ <| |___ | ||||||
| #                             \___|\___/|_| \_\_____| | #                             \___|\___/|_| \_\_____| | ||||||
| # | # | ||||||
| # Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al. | # Copyright (C) 1998 - 2016, 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,7 +31,8 @@ check_PROGRAMS = 10-at-a-time anyauthput cookie_interface debug fileupload \ | |||||||
|   pop3-dele pop3-top pop3-stat pop3-noop pop3-ssl pop3-tls pop3-multi      \ |   pop3-dele pop3-top pop3-stat pop3-noop pop3-ssl pop3-tls pop3-multi      \ | ||||||
|   imap-list imap-lsub imap-fetch imap-store imap-append imap-examine       \ |   imap-list imap-lsub imap-fetch imap-store imap-append imap-examine       \ | ||||||
|   imap-search imap-create imap-delete imap-copy imap-noop imap-ssl         \ |   imap-search imap-create imap-delete imap-copy imap-noop imap-ssl         \ | ||||||
|   imap-tls imap-multi url2file sftpget ftpsget postinmemory |   imap-tls imap-multi url2file sftpget ftpsget postinmemory http2-download \ | ||||||
|  |   http2-upload http2-serverpush getredirect | ||||||
|  |  | ||||||
| # 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. | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ | |||||||
| #                            | (__| |_| |  _ <| |___ | #                            | (__| |_| |  _ <| |___ | ||||||
| #                             \___|\___/|_| \_\_____| | #                             \___|\___/|_| \_\_____| | ||||||
| # | # | ||||||
| # Copyright (C) 1998 - 2011, 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 | ||||||
| @@ -21,7 +21,7 @@ | |||||||
| ########################################################################### | ########################################################################### | ||||||
| # | # | ||||||
| ## Makefile for building curl examples with MingW (GCC-3.2 or later) | ## Makefile for building curl examples with MingW (GCC-3.2 or later) | ||||||
| ## and optionally OpenSSL (0.9.8), libssh2 (1.3), zlib (1.2.5), librtmp (2.3) | ## and optionally OpenSSL (1.0.2a), libssh2 (1.5), zlib (1.2.8), librtmp (2.4) | ||||||
| ## | ## | ||||||
| ## Usage:   mingw32-make -f Makefile.m32 CFG=-feature1[-feature2][-feature3][...] | ## Usage:   mingw32-make -f Makefile.m32 CFG=-feature1[-feature2][-feature3][...] | ||||||
| ## Example: mingw32-make -f Makefile.m32 CFG=-zlib-ssl-spi-winidn | ## Example: mingw32-make -f Makefile.m32 CFG=-zlib-ssl-spi-winidn | ||||||
| @@ -38,23 +38,23 @@ 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.8zc | OPENSSL_PATH = ../../../openssl-1.0.2a | ||||||
| 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 | ||||||
| LIBSSH2_PATH = ../../../libssh2-1.4.3 | LIBSSH2_PATH = ../../../libssh2-1.5.0 | ||||||
| endif | endif | ||||||
| # Edit the path below to point to the base of your librtmp package. | # Edit the path below to point to the base of your librtmp package. | ||||||
| ifndef LIBRTMP_PATH | ifndef LIBRTMP_PATH | ||||||
| LIBRTMP_PATH = ../../../librtmp-2.3 | LIBRTMP_PATH = ../../../librtmp-2.4 | ||||||
| endif | endif | ||||||
| # Edit the path below to point to the base of your libidn package. | # Edit the path below to point to the base of your libidn package. | ||||||
| ifndef LIBIDN_PATH | ifndef LIBIDN_PATH | ||||||
| LIBIDN_PATH = ../../../libidn-1.18 | LIBIDN_PATH = ../../../libidn-1.32 | ||||||
| endif | endif | ||||||
| # Edit the path below to point to the base of your MS IDN package. | # Edit the path below to point to the base of your MS IDN package. | ||||||
| # Microsoft Internationalized Domain Names (IDN) Mitigation APIs 1.1 | # Microsoft Internationalized Domain Names (IDN) Mitigation APIs 1.1 | ||||||
| # http://www.microsoft.com/downloads/en/details.aspx?FamilyID=ad6158d7-ddba-416a-9109-07607425a815 | # https://www.microsoft.com/en-us/download/details.aspx?id=734 | ||||||
| ifndef WINIDN_PATH | ifndef WINIDN_PATH | ||||||
| WINIDN_PATH = ../../../Microsoft IDN Mitigation APIs | WINIDN_PATH = ../../../Microsoft IDN Mitigation APIs | ||||||
| endif | endif | ||||||
| @@ -62,6 +62,10 @@ endif | |||||||
| ifndef LDAP_SDK | ifndef LDAP_SDK | ||||||
| LDAP_SDK = c:/novell/ndk/cldapsdk/win32 | LDAP_SDK = c:/novell/ndk/cldapsdk/win32 | ||||||
| endif | endif | ||||||
|  | # Edit the path below to point to the base of your nghttp2 package. | ||||||
|  | ifndef NGHTTP2_PATH | ||||||
|  | NGHTTP2_PATH = ../../../nghttp2-1.0.0 | ||||||
|  | endif | ||||||
|  |  | ||||||
| PROOT = ../.. | PROOT = ../.. | ||||||
|  |  | ||||||
| @@ -72,14 +76,24 @@ endif | |||||||
|  |  | ||||||
| # Edit the var below to set to your architecture or set environment var. | # Edit the var below to set to your architecture or set environment var. | ||||||
| ifndef ARCH | ifndef ARCH | ||||||
| ARCH = w32 | ifeq ($(findstring x86_64,$(shell $(CC) -dumpmachine)),x86_64) | ||||||
|  | ARCH    = w64 | ||||||
|  | else | ||||||
|  | ARCH    = w32 | ||||||
|  | endif | ||||||
| endif | endif | ||||||
|  |  | ||||||
| CC	= $(CROSSPREFIX)gcc | CC	= $(CROSSPREFIX)gcc | ||||||
| CFLAGS	= -g -O2 -Wall | CFLAGS	= -g -O2 -Wall | ||||||
| CFLAGS	+= -fno-strict-aliasing | CFLAGS	+= -fno-strict-aliasing | ||||||
| ifeq ($(ARCH),w64) | ifeq ($(ARCH),w64) | ||||||
| CFLAGS	+= -D_AMD64_ | CFLAGS	+= -m64 -D_AMD64_ | ||||||
|  | LDFLAGS += -m64 | ||||||
|  | RCFLAGS += -F pe-x86-64 | ||||||
|  | else | ||||||
|  | CFLAGS	+= -m32 | ||||||
|  | LDFLAGS += -m32 | ||||||
|  | RCFLAGS += -F pe-i386 | ||||||
| endif | endif | ||||||
| # comment LDFLAGS below to keep debug info | # comment LDFLAGS below to keep debug info | ||||||
| LDFLAGS	= -s | LDFLAGS	= -s | ||||||
| @@ -158,9 +172,12 @@ ifeq ($(findstring -metalink,$(CFG)),-metalink) | |||||||
| METALINK = 1 | METALINK = 1 | ||||||
| endif | endif | ||||||
| ifeq ($(findstring -winssl,$(CFG)),-winssl) | ifeq ($(findstring -winssl,$(CFG)),-winssl) | ||||||
| SCHANNEL = 1 | WINSSL = 1 | ||||||
| SSPI = 1 | SSPI = 1 | ||||||
| endif | endif | ||||||
|  | ifeq ($(findstring -nghttp2,$(CFG)),-nghttp2) | ||||||
|  | NGHTTP2 = 1 | ||||||
|  | endif | ||||||
|  |  | ||||||
| INCLUDES = -I. -I$(PROOT) -I$(PROOT)/include -I$(PROOT)/lib | INCLUDES = -I. -I$(PROOT) -I$(PROOT)/include -I$(PROOT)/lib | ||||||
|  |  | ||||||
| @@ -184,6 +201,10 @@ ifdef RTMP | |||||||
|   CFLAGS += -DUSE_LIBRTMP |   CFLAGS += -DUSE_LIBRTMP | ||||||
|   curl_LDADD += -L"$(LIBRTMP_PATH)/librtmp" -lrtmp -lwinmm |   curl_LDADD += -L"$(LIBRTMP_PATH)/librtmp" -lrtmp -lwinmm | ||||||
| endif | endif | ||||||
|  | ifdef NGHTTP2 | ||||||
|  |   CFLAGS += -DUSE_NGHTTP2 | ||||||
|  |   curl_LDADD += -L"$(NGHTTP2_PATH)/lib" -lnghttp2 | ||||||
|  | endif | ||||||
| ifdef SSH2 | ifdef SSH2 | ||||||
|   CFLAGS += -DUSE_LIBSSH2 -DHAVE_LIBSSH2_H |   CFLAGS += -DUSE_LIBSSH2 -DHAVE_LIBSSH2_H | ||||||
|   curl_LDADD += -L"$(LIBSSH2_PATH)/win32" -lssh2 |   curl_LDADD += -L"$(LIBSSH2_PATH)/win32" -lssh2 | ||||||
| @@ -204,7 +225,7 @@ ifdef SSL | |||||||
|   ifndef DYN |   ifndef DYN | ||||||
|     OPENSSL_LIBS += -lgdi32 -lcrypt32 |     OPENSSL_LIBS += -lgdi32 -lcrypt32 | ||||||
|   endif |   endif | ||||||
|   CFLAGS += -DUSE_SSLEAY |   CFLAGS += -DUSE_OPENSSL | ||||||
|   curl_LDADD += -L"$(OPENSSL_LIBPATH)" $(OPENSSL_LIBS) |   curl_LDADD += -L"$(OPENSSL_LIBPATH)" $(OPENSSL_LIBS) | ||||||
| endif | endif | ||||||
| ifdef ZLIB | ifdef ZLIB | ||||||
| @@ -223,7 +244,7 @@ endif | |||||||
| endif | endif | ||||||
| ifdef SSPI | ifdef SSPI | ||||||
|   CFLAGS += -DUSE_WINDOWS_SSPI |   CFLAGS += -DUSE_WINDOWS_SSPI | ||||||
|   ifdef SCHANNEL |   ifdef WINSSL | ||||||
|     CFLAGS += -DUSE_SCHANNEL |     CFLAGS += -DUSE_SCHANNEL | ||||||
|   endif |   endif | ||||||
| endif | endif | ||||||
|   | |||||||
| @@ -19,12 +19,12 @@ 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.8zc | OPENSSL_PATH = ../../../openssl-1.0.2a | ||||||
| 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 | ||||||
| LIBSSH2_PATH = ../../../libssh2-1.4.3 | LIBSSH2_PATH = ../../../libssh2-1.5.0 | ||||||
| endif | endif | ||||||
|  |  | ||||||
| # Edit the path below to point to the base of your axTLS package. | # Edit the path below to point to the base of your axTLS package. | ||||||
| @@ -34,12 +34,12 @@ endif | |||||||
|  |  | ||||||
| # Edit the path below to point to the base of your libidn package. | # Edit the path below to point to the base of your libidn package. | ||||||
| ifndef LIBIDN_PATH | ifndef LIBIDN_PATH | ||||||
| LIBIDN_PATH = ../../../libidn-1.18 | LIBIDN_PATH = ../../../libidn-1.32 | ||||||
| endif | endif | ||||||
|  |  | ||||||
| # Edit the path below to point to the base of your librtmp package. | # Edit the path below to point to the base of your librtmp package. | ||||||
| ifndef LIBRTMP_PATH | ifndef LIBRTMP_PATH | ||||||
| LIBRTMP_PATH = ../../../librtmp-2.3 | LIBRTMP_PATH = ../../../librtmp-2.4 | ||||||
| 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. | ||||||
|   | |||||||
| @@ -32,51 +32,7 @@ actually torture our web site with your tests!  Thanks. | |||||||
|  |  | ||||||
| EXAMPLES | EXAMPLES | ||||||
|  |  | ||||||
| anyauthput.c   - HTTP PUT using "any" authentication method | Each example source code file is designed to be and work stand-alone and | ||||||
| cacertinmem.c  - Use a built-in PEM certificate to retrieve a https page | rather self-explanatory. The examples may at times lack the level of error | ||||||
| cookie_interface.c - shows usage of simple cookie interface | checks you need in a real world, but that is then only for the sake of | ||||||
| curlgtk.c      - download using a GTK progress bar | readability: to make the code smaller and easier to follow. | ||||||
| curlx.c        - getting file info from the remote cert data |  | ||||||
| debug.c        - showing how to use the debug callback |  | ||||||
| fileupload.c   - uploading to a file:// URL |  | ||||||
| fopen.c        - fopen() layer that supports opening URLs and files |  | ||||||
| ftpget.c       - simple getting a file from FTP |  | ||||||
| ftpgetresp.c   - get the response strings from the FTP server |  | ||||||
| ftpupload.c    - upload a file to an FTP server |  | ||||||
| ftpuploadresume.c - resume an upload to an FTP server |  | ||||||
| getinfo.c      - get the Content-Type from the recent transfer |  | ||||||
| getinmemory.c  - download a file to memory only |  | ||||||
| ghiper.c       - curl_multi_socket() using code with glib-2 |  | ||||||
| hiperfifo.c    - downloads all URLs written to the fifo, using |  | ||||||
|                  curl_multi_socket() and libevent |  | ||||||
| htmltidy.c     - download a document and use libtidy to parse the HTML |  | ||||||
| htmltitle.cc   - download a HTML file and extract the <title> tag from a HTML |  | ||||||
|                  page using libxml |  | ||||||
| http-post.c    - HTTP POST |  | ||||||
| httpput.c      - HTTP PUT a local file |  | ||||||
| https.c        - simple HTTPS transfer |  | ||||||
| imap.c         - simple IMAP transfer |  | ||||||
| multi-app.c    - a multi-interface app |  | ||||||
| multi-debugcallback.c - a multi-interface app using the debug callback |  | ||||||
| multi-double.c - a multi-interface app doing two simultaneous transfers |  | ||||||
| multi-post.c   - a multi-interface app doing a multipart formpost |  | ||||||
| multi-single.c - a multi-interface app getting a single file |  | ||||||
| multi-uv.c     - a multi-interface app using libuv |  | ||||||
| multithread.c  - an example using multi-treading transferring multiple files |  | ||||||
| opensslthreadlock.c - show how to do locking when using OpenSSL multi-threaded |  | ||||||
| persistant.c   - request two URLs with a persistent connection |  | ||||||
| pop3s.c        - POP3S transfer |  | ||||||
| pop3slist.c    - POP3S LIST |  | ||||||
| post-callback.c - send a HTTP POST using a callback |  | ||||||
| postit2.c      - send a HTTP multipart formpost |  | ||||||
| sampleconv.c   - showing how a program on a non-ASCII platform would invoke |  | ||||||
|                  callbacks to do its own codeset conversions instead of using |  | ||||||
|                  the built-in iconv functions in libcurl |  | ||||||
| sepheaders.c   - download headers to a separate file |  | ||||||
| simple.c       - the most simple download a URL source |  | ||||||
| simplepost.c   - HTTP POST |  | ||||||
| simplessl.c    - HTTPS example with certificates many options set |  | ||||||
| synctime.c     - Sync local time by extracting date from remote HTTP servers |  | ||||||
| url2file.c     - download a document and store it in a file |  | ||||||
| xmlstream.c    - Stream-parse a document using the streaming Expat parser |  | ||||||
| 10-at-a-time.c - Download many files simultaneously, 10 at a time. |  | ||||||
|   | |||||||
| @@ -5,7 +5,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 | ||||||
| @@ -19,6 +19,11 @@ | |||||||
|  * KIND, either express or implied. |  * KIND, either express or implied. | ||||||
|  * |  * | ||||||
|  ***************************************************************************/ |  ***************************************************************************/ | ||||||
|  | /* <DESC> | ||||||
|  |  * HTTP PUT upload with authentiction using "any" method. libcurl picks the | ||||||
|  |  * one the server supports/wants. | ||||||
|  |  * </DESC> | ||||||
|  |  */ | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
| #include <fcntl.h> | #include <fcntl.h> | ||||||
| #ifdef WIN32 | #ifdef WIN32 | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ | |||||||
|  *                            | (__| |_| |  _ <| |___ |  *                            | (__| |_| |  _ <| |___ | ||||||
|  *                             \___|\___/|_| \_\_____| |  *                             \___|\___/|_| \_\_____| | ||||||
|  * |  * | ||||||
|  * Copyright (C) 2012 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al. |  * Copyright (C) 2012 - 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,11 +20,11 @@ | |||||||
|  * |  * | ||||||
|  ***************************************************************************/ |  ***************************************************************************/ | ||||||
|  |  | ||||||
|  | /* <DESC> | ||||||
|  |  * demonstrate the use of multi socket interface with boost::asio | ||||||
|  |  * </DESC> | ||||||
|  |  */ | ||||||
| /* | /* | ||||||
|  * file: asiohiper.cpp |  | ||||||
|  * Example program to demonstrate the use of multi socket interface |  | ||||||
|  * with boost::asio |  | ||||||
|  * |  | ||||||
|  * This program is in c++ and uses boost::asio instead of libevent/libev. |  * This program is in c++ and uses boost::asio instead of libevent/libev. | ||||||
|  * Requires boost::asio, boost::bind and boost::system |  * Requires boost::asio, boost::bind and boost::system | ||||||
|  * |  * | ||||||
|   | |||||||
| @@ -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 | ||||||
| @@ -19,17 +19,11 @@ | |||||||
|  * KIND, either express or implied. |  * KIND, either express or implied. | ||||||
|  * |  * | ||||||
|  ***************************************************************************/ |  ***************************************************************************/ | ||||||
| /* Example using a "in core" PEM certificate to retrieve a https page. | /* <DESC> | ||||||
|  * Written by Theo Borm |  * CA cert in memory with OpenSSL to get a HTTPS page. | ||||||
|  |  * </DESC> | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
| /* on a netBSD system with OPENSSL& LIBCURL installed from |  | ||||||
|  * pkgsrc (using default paths) this program can be compiled using: |  | ||||||
|  * gcc -I/usr/pkg/include -L/usr/pkg/lib -lcurl -Wl,-R/usr/pkg/lib -lssl |  | ||||||
|  * -lcrypto -lz -o curlcacerttest curlcacerttest.c |  | ||||||
|  * on other operating systems you may want to change paths to headers |  | ||||||
|  * and libraries |  | ||||||
| */ |  | ||||||
| #include <openssl/ssl.h> | #include <openssl/ssl.h> | ||||||
| #include <curl/curl.h> | #include <curl/curl.h> | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ | |||||||
|  *                            | (__| |_| |  _ <| |___ |  *                            | (__| |_| |  _ <| |___ | ||||||
|  *                             \___|\___/|_| \_\_____| |  *                             \___|\___/|_| \_\_____| | ||||||
|  * |  * | ||||||
|  * Copyright (C) 1998 - 2011, 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 | ||||||
| @@ -19,6 +19,10 @@ | |||||||
|  * KIND, either express or implied. |  * KIND, either express or implied. | ||||||
|  * |  * | ||||||
|  ***************************************************************************/ |  ***************************************************************************/ | ||||||
|  | /* <DESC> | ||||||
|  |  * Extract lots of TLS certificate info. | ||||||
|  |  * </DESC> | ||||||
|  |  */ | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
|  |  | ||||||
| #include <curl/curl.h> | #include <curl/curl.h> | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ | |||||||
|  *                            | (__| |_| |  _ <| |___ |  *                            | (__| |_| |  _ <| |___ | ||||||
|  *                             \___|\___/|_| \_\_____| |  *                             \___|\___/|_| \_\_____| | ||||||
|  * |  * | ||||||
|  * Copyright (C) 1998 - 2011, 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 | ||||||
| @@ -19,6 +19,10 @@ | |||||||
|  * KIND, either express or implied. |  * KIND, either express or implied. | ||||||
|  * |  * | ||||||
|  ***************************************************************************/ |  ***************************************************************************/ | ||||||
|  | /* <DESC> | ||||||
|  |  * Show transfer timing info after download completes. | ||||||
|  |  * </DESC> | ||||||
|  |  */ | ||||||
| /* Example source code to show how the callback function can be used to | /* Example source code to show how the callback function can be used to | ||||||
|  * download data into a chunk of memory instead of storing it in a file. |  * download data into a chunk of memory instead of storing it in a file. | ||||||
|  * After successful download we use curl_easy_getinfo() calls to get the |  * After successful download we use curl_easy_getinfo() calls to get the | ||||||
|   | |||||||
| @@ -5,7 +5,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 | ||||||
| @@ -19,7 +19,10 @@ | |||||||
|  * KIND, either express or implied. |  * KIND, either express or implied. | ||||||
|  * |  * | ||||||
|  ***************************************************************************/ |  ***************************************************************************/ | ||||||
| /* This example shows usage of simple cookie interface. */ | /* <DESC> | ||||||
|  |  * Import and export cookies with COOKIELIST. | ||||||
|  |  * </DESC> | ||||||
|  |  */ | ||||||
|  |  | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
| #include <string.h> | #include <string.h> | ||||||
| @@ -96,7 +99,12 @@ main(void) | |||||||
|       return 1; |       return 1; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     /* HTTP-header style cookie */ |     /* HTTP-header style cookie. If you use the Set-Cookie format and don't | ||||||
|  |     specify a domain then the cookie is sent for any domain and will not be | ||||||
|  |     modified, likely not what you intended. Starting in 7.43.0 any-domain | ||||||
|  |     cookies will not be exported either. For more information refer to the | ||||||
|  |     CURLOPT_COOKIELIST documentation. | ||||||
|  |     */ | ||||||
|     snprintf(nline, sizeof(nline), |     snprintf(nline, sizeof(nline), | ||||||
|       "Set-Cookie: OLD_PREF=3d141414bf4209321; " |       "Set-Cookie: OLD_PREF=3d141414bf4209321; " | ||||||
|       "expires=Sun, 17-Jan-2038 19:14:07 GMT; path=/; domain=.google.com"); |       "expires=Sun, 17-Jan-2038 19:14:07 GMT; path=/; domain=.google.com"); | ||||||
|   | |||||||
| @@ -5,9 +5,12 @@ | |||||||
|  *                            | (__| |_| |  _ <| |___ |  *                            | (__| |_| |  _ <| |___ | ||||||
|  *                             \___|\___/|_| \_\_____| |  *                             \___|\___/|_| \_\_____| | ||||||
|  * |  * | ||||||
|  |  *  Copyright (c) 2000 David Odin (aka DindinX) for MandrakeSoft | ||||||
|  |  */ | ||||||
|  | /* <DESC> | ||||||
|  |  * use the libcurl in a gtk-threaded application | ||||||
|  |  * </DESC> | ||||||
|  */ |  */ | ||||||
| /* Copyright (c) 2000 David Odin (aka DindinX) for MandrakeSoft */ |  | ||||||
| /* an attempt to use the curl library in concert with a gtk-threaded application */ |  | ||||||
|  |  | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
| #include <gtk/gtk.h> | #include <gtk/gtk.h> | ||||||
|   | |||||||
| @@ -9,7 +9,10 @@ | |||||||
|   certificate presented during ssl session establishment. |   certificate presented during ssl session establishment. | ||||||
|  |  | ||||||
| */ | */ | ||||||
|  | /* <DESC> | ||||||
|  |  * demonstrates use of SSL context callback, requires OpenSSL | ||||||
|  |  * </DESC> | ||||||
|  |  */ | ||||||
|  |  | ||||||
| /* | /* | ||||||
|  * Copyright (c) 2003 The OpenEvidence Project.  All rights reserved. |  * Copyright (c) 2003 The OpenEvidence Project.  All rights reserved. | ||||||
| @@ -490,7 +493,7 @@ int main(int argc, char **argv) { | |||||||
|         BIO_printf(p.errorbio,"the response has a correct mimetype : %s\n", |         BIO_printf(p.errorbio,"the response has a correct mimetype : %s\n", | ||||||
|                    response); |                    response); | ||||||
|       else |       else | ||||||
|         BIO_printf(p.errorbio,"the reponse doesn\'t has an acceptable " |         BIO_printf(p.errorbio,"the response doesn\'t have an acceptable " | ||||||
|                    "mime type, it is %s instead of %s\n", |                    "mime type, it is %s instead of %s\n", | ||||||
|                    response,mimetypeaccept); |                    response,mimetypeaccept); | ||||||
|   } |   } | ||||||
|   | |||||||
| @@ -5,7 +5,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 | ||||||
| @@ -19,6 +19,10 @@ | |||||||
|  * KIND, either express or implied. |  * KIND, either express or implied. | ||||||
|  * |  * | ||||||
|  ***************************************************************************/ |  ***************************************************************************/ | ||||||
|  | /* <DESC> | ||||||
|  |  * Show how CURLOPT_DEBUGFUNCTION can be used. | ||||||
|  |  * </DESC> | ||||||
|  |  */ | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
| #include <curl/curl.h> | #include <curl/curl.h> | ||||||
|  |  | ||||||
|   | |||||||
| @@ -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 | ||||||
| @@ -19,6 +19,10 @@ | |||||||
|  * KIND, either express or implied. |  * KIND, either express or implied. | ||||||
|  * |  * | ||||||
|  ***************************************************************************/ |  ***************************************************************************/ | ||||||
|  | /* <DESC> | ||||||
|  |  * multi socket interface together with libev | ||||||
|  |  * </DESC> | ||||||
|  |  */ | ||||||
| /* Example application source code using the multi socket interface to | /* Example application source code using the multi socket interface to | ||||||
|  * download many files at once. |  * download many files at once. | ||||||
|  * |  * | ||||||
|   | |||||||
| @@ -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 | ||||||
| @@ -19,9 +19,10 @@ | |||||||
|  * KIND, either express or implied. |  * KIND, either express or implied. | ||||||
|  * |  * | ||||||
|  ***************************************************************************/ |  ***************************************************************************/ | ||||||
| /* | /* <DESC> | ||||||
|  * This is an example demonstrating how an application can pass in a custom |  * An example demonstrating how an application can pass in a custom | ||||||
|  * socket to libcurl to use. This example also handles the connect itself. |  * socket to libcurl to use. This example also handles the connect itself. | ||||||
|  |  * </DESC> | ||||||
|  */ |  */ | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
| #include <string.h> | #include <string.h> | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ | |||||||
|  *                            | (__| |_| |  _ <| |___ |  *                            | (__| |_| |  _ <| |___ | ||||||
|  *                             \___|\___/|_| \_\_____| |  *                             \___|\___/|_| \_\_____| | ||||||
|  * |  * | ||||||
|  * Copyright (C) 1998 - 2011, 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 | ||||||
| @@ -19,6 +19,10 @@ | |||||||
|  * KIND, either express or implied. |  * KIND, either express or implied. | ||||||
|  * |  * | ||||||
|  ***************************************************************************/ |  ***************************************************************************/ | ||||||
|  | /* <DESC> | ||||||
|  |  * Upload to a file:// URL | ||||||
|  |  * </DESC> | ||||||
|  |  */ | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
| #include <curl/curl.h> | #include <curl/curl.h> | ||||||
| #include <sys/stat.h> | #include <sys/stat.h> | ||||||
|   | |||||||
| @@ -42,6 +42,10 @@ | |||||||
|  * |  * | ||||||
|  * This example requires libcurl 7.9.7 or later. |  * This example requires libcurl 7.9.7 or later. | ||||||
|  */ |  */ | ||||||
|  | /* <DESC> | ||||||
|  |  * implements an fopen() abstraction allowing reading from URLs | ||||||
|  |  * </DESC> | ||||||
|  |  */ | ||||||
|  |  | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
| #include <string.h> | #include <string.h> | ||||||
| @@ -108,7 +112,7 @@ static size_t write_callback(char *buffer, | |||||||
|       size=rembuff; |       size=rembuff; | ||||||
|     } |     } | ||||||
|     else { |     else { | ||||||
|       /* realloc suceeded increase buffer size*/ |       /* realloc succeeded increase buffer size*/ | ||||||
|       url->buffer_len+=size - rembuff; |       url->buffer_len+=size - rembuff; | ||||||
|       url->buffer=newbuff; |       url->buffer=newbuff; | ||||||
|     } |     } | ||||||
| @@ -131,7 +135,7 @@ static int fill_buffer(URL_FILE *file, size_t want) | |||||||
|   CURLMcode mc; /* curl_multi_fdset() return code */ |   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 |    * doesn't exceed required size already | ||||||
|    */ |    */ | ||||||
|   if((!file->still_running) || (file->buffer_pos > want)) |   if((!file->still_running) || (file->buffer_pos > want)) | ||||||
|     return 0; |     return 0; | ||||||
| @@ -205,14 +209,12 @@ static int fill_buffer(URL_FILE *file, size_t want) | |||||||
| } | } | ||||||
|  |  | ||||||
| /* use to remove want bytes from the front of a files buffer */ | /* use to remove want bytes from the front of a files buffer */ | ||||||
| static int use_buffer(URL_FILE *file,int want) | static int use_buffer(URL_FILE *file, size_t want) | ||||||
| { | { | ||||||
|   /* sort out buffer */ |   /* sort out buffer */ | ||||||
|   if((file->buffer_pos - want) <=0) { |   if((file->buffer_pos - want) <=0) { | ||||||
|     /* ditch buffer - write will recreate */ |     /* ditch buffer - write will recreate */ | ||||||
|     if(file->buffer) |     free(file->buffer); | ||||||
|       free(file->buffer); |  | ||||||
|  |  | ||||||
|     file->buffer=NULL; |     file->buffer=NULL; | ||||||
|     file->buffer_pos=0; |     file->buffer_pos=0; | ||||||
|     file->buffer_len=0; |     file->buffer_len=0; | ||||||
| @@ -231,7 +233,7 @@ static int use_buffer(URL_FILE *file,int want) | |||||||
| URL_FILE *url_fopen(const char *url,const char *operation) | URL_FILE *url_fopen(const char *url,const char *operation) | ||||||
| { | { | ||||||
|   /* this code could check for URLs or types in the 'url' and |   /* this code could check for URLs or types in the 'url' and | ||||||
|      basicly use the real fopen() for standard files */ |      basically use the real fopen() for standard files */ | ||||||
|  |  | ||||||
|   URL_FILE *file; |   URL_FILE *file; | ||||||
|   (void)operation; |   (void)operation; | ||||||
| @@ -302,9 +304,7 @@ int url_fclose(URL_FILE *file) | |||||||
|     break; |     break; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   if(file->buffer) |   free(file->buffer);/* free any allocated buffer space */ | ||||||
|     free(file->buffer);/* free any allocated buffer space */ |  | ||||||
|  |  | ||||||
|   free(file); |   free(file); | ||||||
|  |  | ||||||
|   return ret; |   return ret; | ||||||
| @@ -379,7 +379,7 @@ char *url_fgets(char *ptr, size_t size, URL_FILE *file) | |||||||
|  |  | ||||||
|   switch(file->type) { |   switch(file->type) { | ||||||
|   case CFTYPE_FILE: |   case CFTYPE_FILE: | ||||||
|     ptr = fgets(ptr,size,file->handle.file); |     ptr = fgets(ptr, (int)size, file->handle.file); | ||||||
|     break; |     break; | ||||||
|  |  | ||||||
|   case CFTYPE_CURL: |   case CFTYPE_CURL: | ||||||
| @@ -435,9 +435,7 @@ void url_rewind(URL_FILE *file) | |||||||
|     curl_multi_add_handle(multi_handle, file->handle.curl); |     curl_multi_add_handle(multi_handle, file->handle.curl); | ||||||
|  |  | ||||||
|     /* ditch buffer - write will recreate - resets stream pos*/ |     /* ditch buffer - write will recreate - resets stream pos*/ | ||||||
|     if(file->buffer) |     free(file->buffer); | ||||||
|       free(file->buffer); |  | ||||||
|  |  | ||||||
|     file->buffer=NULL; |     file->buffer=NULL; | ||||||
|     file->buffer_pos=0; |     file->buffer_pos=0; | ||||||
|     file->buffer_len=0; |     file->buffer_len=0; | ||||||
| @@ -457,7 +455,7 @@ int main(int argc, char *argv[]) | |||||||
|   URL_FILE *handle; |   URL_FILE *handle; | ||||||
|   FILE *outf; |   FILE *outf; | ||||||
|  |  | ||||||
|   int nread; |   size_t nread; | ||||||
|   char buffer[256]; |   char buffer[256]; | ||||||
|   const char *url; |   const char *url; | ||||||
|  |  | ||||||
| @@ -505,7 +503,7 @@ int main(int argc, char *argv[]) | |||||||
|   } |   } | ||||||
|  |  | ||||||
|   do { |   do { | ||||||
|     nread = url_fread(buffer, 1,sizeof(buffer), handle); |     nread = url_fread(buffer, 1, sizeof(buffer), handle); | ||||||
|     fwrite(buffer,1,nread,outf); |     fwrite(buffer,1,nread,outf); | ||||||
|   } while(nread); |   } while(nread); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -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 | ||||||
| @@ -19,6 +19,10 @@ | |||||||
|  * KIND, either express or implied. |  * KIND, either express or implied. | ||||||
|  * |  * | ||||||
|  ***************************************************************************/ |  ***************************************************************************/ | ||||||
|  | /* <DESC> | ||||||
|  |  * FTP wildcard pattern matching | ||||||
|  |  * </DESC> | ||||||
|  |  */ | ||||||
| #include <curl/curl.h> | #include <curl/curl.h> | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
|  |  | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ | |||||||
|  *                            | (__| |_| |  _ <| |___ |  *                            | (__| |_| |  _ <| |___ | ||||||
|  *                             \___|\___/|_| \_\_____| |  *                             \___|\___/|_| \_\_____| | ||||||
|  * |  * | ||||||
|  * Copyright (C) 1998 - 2011, 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 | ||||||
| @@ -23,11 +23,9 @@ | |||||||
|  |  | ||||||
| #include <curl/curl.h> | #include <curl/curl.h> | ||||||
|  |  | ||||||
| /* | /* <DESC> | ||||||
|  * This is an example showing how to get a single file from an FTP server. |  * Get a single file from an FTP server. | ||||||
|  * It delays the actual destination file creation until the first write |  * </DESC> | ||||||
|  * callback so that it won't create an empty file in case the remote file |  | ||||||
|  * doesn't exist or something else fails. |  | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
| struct FtpFile { | struct FtpFile { | ||||||
| @@ -53,7 +51,7 @@ int main(void) | |||||||
|   CURL *curl; |   CURL *curl; | ||||||
|   CURLcode res; |   CURLcode res; | ||||||
|   struct FtpFile ftpfile={ |   struct FtpFile ftpfile={ | ||||||
|     "curl.tar.gz", /* name to store the file as if succesful */ |     "curl.tar.gz", /* name to store the file as if successful */ | ||||||
|     NULL |     NULL | ||||||
|   }; |   }; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -5,7 +5,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 | ||||||
| @@ -24,9 +24,9 @@ | |||||||
|  |  | ||||||
| #include <curl/curl.h> | #include <curl/curl.h> | ||||||
|  |  | ||||||
| /* | /* <DESC> | ||||||
|  * This is an example showing how to check a single file's size and mtime |  * Checks a single file's size and mtime from an FTP server. | ||||||
|  * from an FTP server. |  * </DESC> | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
| static size_t throw_away(void *ptr, size_t size, size_t nmemb, void *data) | static size_t throw_away(void *ptr, size_t size, size_t nmemb, void *data) | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ | |||||||
|  *                            | (__| |_| |  _ <| |___ |  *                            | (__| |_| |  _ <| |___ | ||||||
|  *                             \___|\___/|_| \_\_____| |  *                             \___|\___/|_| \_\_____| | ||||||
|  * |  * | ||||||
|  * Copyright (C) 1998 - 2011, 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 | ||||||
| @@ -23,13 +23,11 @@ | |||||||
|  |  | ||||||
| #include <curl/curl.h> | #include <curl/curl.h> | ||||||
|  |  | ||||||
| /* | /* <DESC> | ||||||
|  * Similar to ftpget.c but this also stores the received response-lines |  * Similar to ftpget.c but also stores the received response-lines | ||||||
|  * in a separate file using our own callback! |  * in a separate file using our own callback! | ||||||
|  * |  * </DESC> | ||||||
|  * This functionality was introduced in libcurl 7.9.3. |  | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
| static size_t | static size_t | ||||||
| write_response(void *ptr, size_t size, size_t nmemb, void *data) | write_response(void *ptr, size_t size, size_t nmemb, void *data) | ||||||
| { | { | ||||||
|   | |||||||
| @@ -5,7 +5,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 | ||||||
| @@ -24,11 +24,9 @@ | |||||||
|  |  | ||||||
| #include <curl/curl.h> | #include <curl/curl.h> | ||||||
|  |  | ||||||
| /* | /* <DESC> | ||||||
|  * This is an example showing how to get a single file from an FTPS server. |  * Get a single file from an FTPS server. | ||||||
|  * It delays the actual destination file creation until the first write |  * </DESC> | ||||||
|  * callback so that it won't create an empty file in case the remote file |  | ||||||
|  * doesn't exist or something else fails. |  | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
| struct FtpFile { | struct FtpFile { | ||||||
| @@ -55,7 +53,7 @@ int main(void) | |||||||
|   CURL *curl; |   CURL *curl; | ||||||
|   CURLcode res; |   CURLcode res; | ||||||
|   struct FtpFile ftpfile={ |   struct FtpFile ftpfile={ | ||||||
|     "yourfile.bin", /* name to store the file as if succesful */ |     "yourfile.bin", /* name to store the file as if successful */ | ||||||
|     NULL |     NULL | ||||||
|   }; |   }; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -5,7 +5,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 | ||||||
| @@ -33,11 +33,10 @@ | |||||||
| #include <unistd.h> | #include <unistd.h> | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| /* | /* <DESC> | ||||||
|  * This example shows an FTP upload, with a rename of the file just after |  * Performs an FTP upload and renames the file just after a successful | ||||||
|  * a successful upload. |  * transfer. | ||||||
|  * |  * </DESC> | ||||||
|  * Example based on source code provided by Erick Nuwendam. Thanks! |  | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
| #define LOCAL_FILE      "/tmp/uploadthis.txt" | #define LOCAL_FILE      "/tmp/uploadthis.txt" | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ | |||||||
|  *                            | (__| |_| |  _ <| |___ |  *                            | (__| |_| |  _ <| |___ | ||||||
|  *                             \___|\___/|_| \_\_____| |  *                             \___|\___/|_| \_\_____| | ||||||
|  * |  * | ||||||
|  * Copyright (C) 1998 - 2011, 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 | ||||||
| @@ -19,13 +19,9 @@ | |||||||
|  * KIND, either express or implied. |  * KIND, either express or implied. | ||||||
|  * |  * | ||||||
|  ***************************************************************************/ |  ***************************************************************************/ | ||||||
| /* Upload to FTP, resuming failed transfers | /* <DESC> | ||||||
|  * |  * Upload to FTP, resuming failed transfers. | ||||||
|  * Compile for MinGW like this: |  * </DESC> | ||||||
|  *  gcc -Wall -pedantic -std=c99 ftpuploadwithresume.c -o ftpuploadresume.exe |  | ||||||
|  *  -lcurl -lmsvcr70 |  | ||||||
|  * |  | ||||||
|  * Written by Philip Bock |  | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
| #include <stdlib.h> | #include <stdlib.h> | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ | |||||||
|  *                            | (__| |_| |  _ <| |___ |  *                            | (__| |_| |  _ <| |___ | ||||||
|  *                             \___|\___/|_| \_\_____| |  *                             \___|\___/|_| \_\_____| | ||||||
|  * |  * | ||||||
|  * Copyright (C) 1998 - 2011, 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 | ||||||
| @@ -19,6 +19,10 @@ | |||||||
|  * KIND, either express or implied. |  * KIND, either express or implied. | ||||||
|  * |  * | ||||||
|  ***************************************************************************/ |  ***************************************************************************/ | ||||||
|  | /* <DESC> | ||||||
|  |  * Use getinfo to get content-type after completed transfer. | ||||||
|  |  * </DESC> | ||||||
|  |  */ | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
| #include <curl/curl.h> | #include <curl/curl.h> | ||||||
|  |  | ||||||
| @@ -27,18 +31,14 @@ int main(void) | |||||||
|   CURL *curl; |   CURL *curl; | ||||||
|   CURLcode res; |   CURLcode res; | ||||||
|  |  | ||||||
|   /* http://curl.haxx.se/libcurl/c/curl_easy_init.html */ |  | ||||||
|   curl = curl_easy_init(); |   curl = curl_easy_init(); | ||||||
|   if(curl) { |   if(curl) { | ||||||
|     /* http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTURL */ |  | ||||||
|     curl_easy_setopt(curl, CURLOPT_URL, "http://www.example.com/"); |     curl_easy_setopt(curl, CURLOPT_URL, "http://www.example.com/"); | ||||||
|     /* http://curl.haxx.se/libcurl/c/curl_easy_perform.html */ |  | ||||||
|     res = curl_easy_perform(curl); |     res = curl_easy_perform(curl); | ||||||
|  |  | ||||||
|     if(CURLE_OK == res) { |     if(CURLE_OK == res) { | ||||||
|       char *ct; |       char *ct; | ||||||
|       /* ask for the content-type */ |       /* ask for the content-type */ | ||||||
|       /* http://curl.haxx.se/libcurl/c/curl_easy_getinfo.html */ |  | ||||||
|       res = curl_easy_getinfo(curl, CURLINFO_CONTENT_TYPE, &ct); |       res = curl_easy_getinfo(curl, CURLINFO_CONTENT_TYPE, &ct); | ||||||
|  |  | ||||||
|       if((CURLE_OK == res) && ct) |       if((CURLE_OK == res) && ct) | ||||||
| @@ -46,7 +46,6 @@ int main(void) | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     /* always cleanup */ |     /* always cleanup */ | ||||||
|     /* http://curl.haxx.se/libcurl/c/curl_easy_cleanup.html */ |  | ||||||
|     curl_easy_cleanup(curl); |     curl_easy_cleanup(curl); | ||||||
|   } |   } | ||||||
|   return 0; |   return 0; | ||||||
|   | |||||||
| @@ -5,7 +5,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 | ||||||
| @@ -19,8 +19,10 @@ | |||||||
|  * KIND, either express or implied. |  * KIND, either express or implied. | ||||||
|  * |  * | ||||||
|  ***************************************************************************/ |  ***************************************************************************/ | ||||||
| /* Example source code to show how the callback function can be used to | /* <DESC> | ||||||
|  * download data into a chunk of memory instead of storing it in a file. |  * Shows how the write callback function can be used to download data into a | ||||||
|  |  * chunk of memory instead of storing it in a file. | ||||||
|  |  * </DESC> | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
| @@ -34,7 +36,6 @@ struct MemoryStruct { | |||||||
|   size_t size; |   size_t size; | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  |  | ||||||
| static size_t | static size_t | ||||||
| WriteMemoryCallback(void *contents, size_t size, size_t nmemb, void *userp) | WriteMemoryCallback(void *contents, size_t size, size_t nmemb, void *userp) | ||||||
| { | { | ||||||
| @@ -55,7 +56,6 @@ WriteMemoryCallback(void *contents, size_t size, size_t nmemb, void *userp) | |||||||
|   return realsize; |   return realsize; | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| int main(void) | int main(void) | ||||||
| { | { | ||||||
|   CURL *curl_handle; |   CURL *curl_handle; | ||||||
| @@ -106,8 +106,7 @@ int main(void) | |||||||
|   /* cleanup curl stuff */ |   /* cleanup curl stuff */ | ||||||
|   curl_easy_cleanup(curl_handle); |   curl_easy_cleanup(curl_handle); | ||||||
|  |  | ||||||
|   if(chunk.memory) |   free(chunk.memory); | ||||||
|     free(chunk.memory); |  | ||||||
|  |  | ||||||
|   /* we're done with libcurl, so clean it up */ |   /* we're done with libcurl, so clean it up */ | ||||||
|   curl_global_cleanup(); |   curl_global_cleanup(); | ||||||
|   | |||||||
							
								
								
									
										70
									
								
								docs/examples/getredirect.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										70
									
								
								docs/examples/getredirect.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,70 @@ | |||||||
|  | /*************************************************************************** | ||||||
|  |  *                                  _   _ ____  _ | ||||||
|  |  *  Project                     ___| | | |  _ \| | | ||||||
|  |  *                             / __| | | | |_) | | | ||||||
|  |  *                            | (__| |_| |  _ <| |___ | ||||||
|  |  *                             \___|\___/|_| \_\_____| | ||||||
|  |  * | ||||||
|  |  * Copyright (C) 1998 - 2016, 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. | ||||||
|  |  * | ||||||
|  |  ***************************************************************************/ | ||||||
|  | /* <DESC> | ||||||
|  |  * Show how to extract Location: header and URL to redirect to. | ||||||
|  |  * </DESC> | ||||||
|  |  */ | ||||||
|  | #include <stdio.h> | ||||||
|  | #include <curl/curl.h> | ||||||
|  |  | ||||||
|  | int main(void) | ||||||
|  | { | ||||||
|  |   CURL *curl; | ||||||
|  |   CURLcode res; | ||||||
|  |   char *location; | ||||||
|  |   long response_code; | ||||||
|  |  | ||||||
|  |   curl = curl_easy_init(); | ||||||
|  |   if(curl) { | ||||||
|  |     curl_easy_setopt(curl, CURLOPT_URL, "http://example.com"); | ||||||
|  |  | ||||||
|  |     /* example.com is redirected, figure out the redirection! */ | ||||||
|  |  | ||||||
|  |     /* Perform the request, res will get the return code */ | ||||||
|  |     res = curl_easy_perform(curl); | ||||||
|  |     /* Check for errors */ | ||||||
|  |     if(res != CURLE_OK) | ||||||
|  |       fprintf(stderr, "curl_easy_perform() failed: %s\n", | ||||||
|  |               curl_easy_strerror(res)); | ||||||
|  |     else { | ||||||
|  |       res = curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &response_code); | ||||||
|  |       if((res == CURLE_OK) && | ||||||
|  |          ((code / 100) != 3)) { | ||||||
|  |         /* a redirect implies a 3xx response code */ | ||||||
|  |         fprintf(stderr, "Not a redirect.\n"); | ||||||
|  |       } | ||||||
|  |       else { | ||||||
|  |         res = curl_easy_getinfo(curl, CURLINFO_REDIRECT_URL, &location); | ||||||
|  |  | ||||||
|  |         if((res == CURLE_OK) && location) { | ||||||
|  |           /* This is the new absolute URL that you could redirect to, even if | ||||||
|  |            * the Location: response header may have been a relative URL. */ | ||||||
|  |           printf("Redirected to: %s\n", location); | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /* always cleanup */ | ||||||
|  |     curl_easy_cleanup(curl); | ||||||
|  |   } | ||||||
|  |   return 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 | ||||||
| @@ -19,6 +19,10 @@ | |||||||
|  * KIND, either express or implied. |  * KIND, either express or implied. | ||||||
|  * |  * | ||||||
|  ***************************************************************************/ |  ***************************************************************************/ | ||||||
|  | /* <DESC> | ||||||
|  |  * multi socket API usage together with with glib2 | ||||||
|  |  * </DESC> | ||||||
|  |  */ | ||||||
| /* Example application source code using the multi socket interface to | /* Example application source code using the multi socket interface to | ||||||
|  * download many files at once. |  * download many files at once. | ||||||
|  * |  * | ||||||
|   | |||||||
| @@ -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 | ||||||
| @@ -19,6 +19,10 @@ | |||||||
|  * KIND, either express or implied. |  * KIND, either express or implied. | ||||||
|  * |  * | ||||||
|  ***************************************************************************/ |  ***************************************************************************/ | ||||||
|  | /* <DESC> | ||||||
|  |  * multi socket API usage with libevent 2 | ||||||
|  |  * </DESC> | ||||||
|  |  */ | ||||||
| /* Example application source code using the multi socket interface to | /* Example application source code using the multi socket interface to | ||||||
|    download many files at once. |    download many files at once. | ||||||
|  |  | ||||||
| @@ -326,7 +330,7 @@ static void new_conn(char *url, GlobalInfo *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); | ||||||
|   curl_easy_setopt(conn->easy, CURLOPT_WRITEFUNCTION, write_cb); |   curl_easy_setopt(conn->easy, CURLOPT_WRITEFUNCTION, write_cb); | ||||||
|   curl_easy_setopt(conn->easy, CURLOPT_WRITEDATA, &conn); |   curl_easy_setopt(conn->easy, CURLOPT_WRITEDATA, conn); | ||||||
|   curl_easy_setopt(conn->easy, CURLOPT_VERBOSE, 1L); |   curl_easy_setopt(conn->easy, CURLOPT_VERBOSE, 1L); | ||||||
|   curl_easy_setopt(conn->easy, CURLOPT_ERRORBUFFER, conn->error); |   curl_easy_setopt(conn->easy, CURLOPT_ERRORBUFFER, conn->error); | ||||||
|   curl_easy_setopt(conn->easy, CURLOPT_PRIVATE, conn); |   curl_easy_setopt(conn->easy, CURLOPT_PRIVATE, conn); | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ | |||||||
|  *                            | (__| |_| |  _ <| |___ |  *                            | (__| |_| |  _ <| |___ | ||||||
|  *                             \___|\___/|_| \_\_____| |  *                             \___|\___/|_| \_\_____| | ||||||
|  * |  * | ||||||
|  * Copyright (C) 2012, Daniel Stenberg, <daniel@haxx.se>, et al. |  * Copyright (C) 2012 - 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,13 +20,13 @@ | |||||||
|  * |  * | ||||||
|  ***************************************************************************/ |  ***************************************************************************/ | ||||||
|  |  | ||||||
|  | /* <DESC> | ||||||
|  |  * Uses the "Streaming HTML parser" to extract the href pieces in a streaming | ||||||
|  |  * manner from a downloaded HTML. | ||||||
|  |  * </DESC> | ||||||
|  |  */ | ||||||
| /* | /* | ||||||
|  * This example uses the "Streaming HTML parser" to extract the href pieces in |  * The HTML parser is found at http://code.google.com/p/htmlstreamparser/ | ||||||
|  * a streaming manner from a downloaded HTML. Kindly donated by Michał |  | ||||||
|  * Kowalczyk. |  | ||||||
|  * |  | ||||||
|  * The parser is found at |  | ||||||
|  * http://code.google.com/p/htmlstreamparser/ |  | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ | |||||||
|  *                            | (__| |_| |  _ <| |___ |  *                            | (__| |_| |  _ <| |___ | ||||||
|  *                             \___|\___/|_| \_\_____| |  *                             \___|\___/|_| \_\_____| | ||||||
|  * |  * | ||||||
|  * Copyright (C) 1998 - 2011, 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 | ||||||
| @@ -19,13 +19,12 @@ | |||||||
|  * KIND, either express or implied. |  * KIND, either express or implied. | ||||||
|  * |  * | ||||||
|  ***************************************************************************/ |  ***************************************************************************/ | ||||||
| /* Download a document and use libtidy to parse the HTML. | /* <DESC> | ||||||
|  * Written by Jeff Pohlmeyer |  * Download a document and use libtidy to parse the HTML. | ||||||
|  * |  * </DESC> | ||||||
|  |  */ | ||||||
|  | /* | ||||||
|  * LibTidy => http://tidy.sourceforge.net |  * LibTidy => http://tidy.sourceforge.net | ||||||
|  * |  | ||||||
|  * gcc -Wall -I/usr/local/include tidycurl.c -lcurl -ltidy -o tidycurl |  | ||||||
|  * |  | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ | |||||||
|  *                            | (__| |_| |  _ <| |___ |  *                            | (__| |_| |  _ <| |___ | ||||||
|  *                             \___|\___/|_| \_\_____| |  *                             \___|\___/|_| \_\_____| | ||||||
|  * |  * | ||||||
|  * Copyright (C) 1998 - 2011, 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 | ||||||
| @@ -19,8 +19,10 @@ | |||||||
|  * KIND, either express or implied. |  * KIND, either express or implied. | ||||||
|  * |  * | ||||||
|  ***************************************************************************/ |  ***************************************************************************/ | ||||||
| // Get a web page, parse it with libxml. | /* <DESC> | ||||||
| // |  * Get a web page, extract the title with libxml. | ||||||
|  |  * </DESC> | ||||||
|  |  */ | ||||||
| // Written by Lars Nilsson | // Written by Lars Nilsson | ||||||
| // | // | ||||||
| // GNU C++ compile command line suggestion (edit paths accordingly): | // GNU C++ compile command line suggestion (edit paths accordingly): | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ | |||||||
|  *                            | (__| |_| |  _ <| |___ |  *                            | (__| |_| |  _ <| |___ | ||||||
|  *                             \___|\___/|_| \_\_____| |  *                             \___|\___/|_| \_\_____| | ||||||
|  * |  * | ||||||
|  * Copyright (C) 1998 - 2011, 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 | ||||||
| @@ -19,6 +19,10 @@ | |||||||
|  * KIND, either express or implied. |  * KIND, either express or implied. | ||||||
|  * |  * | ||||||
|  ***************************************************************************/ |  ***************************************************************************/ | ||||||
|  | /* <DESC> | ||||||
|  |  * simple HTTP POST using the easy interface | ||||||
|  |  * </DESC> | ||||||
|  |  */ | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
| #include <curl/curl.h> | #include <curl/curl.h> | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										293
									
								
								docs/examples/http2-download.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										293
									
								
								docs/examples/http2-download.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,293 @@ | |||||||
|  | /*************************************************************************** | ||||||
|  |  *                                  _   _ ____  _ | ||||||
|  |  *  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. | ||||||
|  |  * | ||||||
|  |  ***************************************************************************/ | ||||||
|  | /* <DESC> | ||||||
|  |  * Multiplexed HTTP/2 downloads over a single connection | ||||||
|  |  * </DESC> | ||||||
|  |  */ | ||||||
|  | #include <stdio.h> | ||||||
|  | #include <stdlib.h> | ||||||
|  | #include <string.h> | ||||||
|  |  | ||||||
|  | /* somewhat unix-specific */ | ||||||
|  | #include <sys/time.h> | ||||||
|  | #include <unistd.h> | ||||||
|  |  | ||||||
|  | /* curl stuff */ | ||||||
|  | #include <curl/curl.h> | ||||||
|  |  | ||||||
|  | #ifndef CURLPIPE_MULTIPLEX | ||||||
|  | /* This little trick will just make sure that we don't enable pipelining for | ||||||
|  |    libcurls old enough to not have this symbol. It is _not_ defined to zero in | ||||||
|  |    a recent libcurl header. */ | ||||||
|  | #define CURLPIPE_MULTIPLEX 0 | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #define NUM_HANDLES 1000 | ||||||
|  |  | ||||||
|  | void *curl_hnd[NUM_HANDLES]; | ||||||
|  | int num_transfers; | ||||||
|  |  | ||||||
|  | /* a handle to number lookup, highly ineffective when we do many | ||||||
|  |    transfers... */ | ||||||
|  | static int hnd2num(CURL *hnd) | ||||||
|  | { | ||||||
|  |   int i; | ||||||
|  |   for(i=0; i< num_transfers; i++) { | ||||||
|  |     if(curl_hnd[i] == hnd) | ||||||
|  |       return i; | ||||||
|  |   } | ||||||
|  |   return 0; /* weird, but just a fail-safe */ | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static | ||||||
|  | void dump(const char *text, int num, unsigned char *ptr, size_t size, | ||||||
|  |           char nohex) | ||||||
|  | { | ||||||
|  |   size_t i; | ||||||
|  |   size_t c; | ||||||
|  |  | ||||||
|  |   unsigned int width=0x10; | ||||||
|  |  | ||||||
|  |   if(nohex) | ||||||
|  |     /* without the hex output, we can fit more on screen */ | ||||||
|  |     width = 0x40; | ||||||
|  |  | ||||||
|  |   fprintf(stderr, "%d %s, %ld bytes (0x%lx)\n", | ||||||
|  |           num, text, (long)size, (long)size); | ||||||
|  |  | ||||||
|  |   for(i=0; i<size; i+= width) { | ||||||
|  |  | ||||||
|  |     fprintf(stderr, "%4.4lx: ", (long)i); | ||||||
|  |  | ||||||
|  |     if(!nohex) { | ||||||
|  |       /* hex not disabled, show it */ | ||||||
|  |       for(c = 0; c < width; c++) | ||||||
|  |         if(i+c < size) | ||||||
|  |           fprintf(stderr, "%02x ", ptr[i+c]); | ||||||
|  |         else | ||||||
|  |           fputs("   ", stderr); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     for(c = 0; (c < width) && (i+c < size); c++) { | ||||||
|  |       /* check for 0D0A; if found, skip past and start a new line of output */ | ||||||
|  |       if (nohex && (i+c+1 < size) && ptr[i+c]==0x0D && ptr[i+c+1]==0x0A) { | ||||||
|  |         i+=(c+2-width); | ||||||
|  |         break; | ||||||
|  |       } | ||||||
|  |       fprintf(stderr, "%c", | ||||||
|  |               (ptr[i+c]>=0x20) && (ptr[i+c]<0x80)?ptr[i+c]:'.'); | ||||||
|  |       /* check again for 0D0A, to avoid an extra \n if it's at width */ | ||||||
|  |       if (nohex && (i+c+2 < size) && ptr[i+c+1]==0x0D && ptr[i+c+2]==0x0A) { | ||||||
|  |         i+=(c+3-width); | ||||||
|  |         break; | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |     fputc('\n', stderr); /* newline */ | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static | ||||||
|  | int my_trace(CURL *handle, curl_infotype type, | ||||||
|  |              char *data, size_t size, | ||||||
|  |              void *userp) | ||||||
|  | { | ||||||
|  |   const char *text; | ||||||
|  |   int num = hnd2num(handle); | ||||||
|  |   (void)handle; /* prevent compiler warning */ | ||||||
|  |   (void)userp; | ||||||
|  |   switch (type) { | ||||||
|  |   case CURLINFO_TEXT: | ||||||
|  |     fprintf(stderr, "== %d Info: %s", num, data); | ||||||
|  |   default: /* in case a new one is introduced to shock us */ | ||||||
|  |     return 0; | ||||||
|  |  | ||||||
|  |   case CURLINFO_HEADER_OUT: | ||||||
|  |     text = "=> Send header"; | ||||||
|  |     break; | ||||||
|  |   case CURLINFO_DATA_OUT: | ||||||
|  |     text = "=> Send data"; | ||||||
|  |     break; | ||||||
|  |   case CURLINFO_SSL_DATA_OUT: | ||||||
|  |     text = "=> Send SSL data"; | ||||||
|  |     break; | ||||||
|  |   case CURLINFO_HEADER_IN: | ||||||
|  |     text = "<= Recv header"; | ||||||
|  |     break; | ||||||
|  |   case CURLINFO_DATA_IN: | ||||||
|  |     text = "<= Recv data"; | ||||||
|  |     break; | ||||||
|  |   case CURLINFO_SSL_DATA_IN: | ||||||
|  |     text = "<= Recv SSL data"; | ||||||
|  |     break; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   dump(text, num, (unsigned char *)data, size, 1); | ||||||
|  |   return 0; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static void setup(CURL *hnd, int num) | ||||||
|  | { | ||||||
|  |   FILE *out; | ||||||
|  |   char filename[128]; | ||||||
|  |  | ||||||
|  |   sprintf(filename, "dl-%d", num); | ||||||
|  |  | ||||||
|  |   out = fopen(filename, "wb"); | ||||||
|  |  | ||||||
|  |   /* write to this file */ | ||||||
|  |   curl_easy_setopt(hnd, CURLOPT_WRITEDATA, out); | ||||||
|  |  | ||||||
|  |   /* set the same URL */ | ||||||
|  |   curl_easy_setopt(hnd, CURLOPT_URL, "https://localhost:8443/index.html"); | ||||||
|  |  | ||||||
|  |   /* send it verbose for max debuggaility */ | ||||||
|  |   curl_easy_setopt(hnd, CURLOPT_VERBOSE, 1L); | ||||||
|  |   curl_easy_setopt(hnd, CURLOPT_DEBUGFUNCTION, my_trace); | ||||||
|  |  | ||||||
|  |   /* HTTP/2 please */ | ||||||
|  |   curl_easy_setopt(hnd, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_2_0); | ||||||
|  |  | ||||||
|  |   /* we use a self-signed test server, skip verification during debugging */ | ||||||
|  |   curl_easy_setopt(hnd, CURLOPT_SSL_VERIFYPEER, 0L); | ||||||
|  |   curl_easy_setopt(hnd, CURLOPT_SSL_VERIFYHOST, 0L); | ||||||
|  |  | ||||||
|  | #if (CURLPIPE_MULTIPLEX > 0) | ||||||
|  |   /* wait for pipe connection to confirm */ | ||||||
|  |   curl_easy_setopt(hnd, CURLOPT_PIPEWAIT, 1L); | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  |   curl_hnd[num] = hnd; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * Simply download two files over HTTP/2, using the same physical connection! | ||||||
|  |  */ | ||||||
|  | int main(int argc, char **argv) | ||||||
|  | { | ||||||
|  |   CURL *easy[NUM_HANDLES]; | ||||||
|  |   CURLM *multi_handle; | ||||||
|  |   int i; | ||||||
|  |   int still_running; /* keep number of running handles */ | ||||||
|  |  | ||||||
|  |   if(argc > 1) | ||||||
|  |     /* if given a number, do that many transfers */ | ||||||
|  |     num_transfers = atoi(argv[1]); | ||||||
|  |  | ||||||
|  |   if(!num_transfers || (num_transfers > NUM_HANDLES)) | ||||||
|  |     num_transfers = 3; /* a suitable low default */ | ||||||
|  |  | ||||||
|  |   /* init a multi stack */ | ||||||
|  |   multi_handle = curl_multi_init(); | ||||||
|  |  | ||||||
|  |   for(i=0; i<num_transfers; i++) { | ||||||
|  |     easy[i] = curl_easy_init(); | ||||||
|  |     /* set options */ | ||||||
|  |     setup(easy[i], i); | ||||||
|  |  | ||||||
|  |     /* add the individual transfer */ | ||||||
|  |     curl_multi_add_handle(multi_handle, easy[i]); | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   curl_multi_setopt(multi_handle, CURLMOPT_PIPELINING, CURLPIPE_MULTIPLEX); | ||||||
|  |  | ||||||
|  |   /* we start some action by calling perform right away */ | ||||||
|  |   curl_multi_perform(multi_handle, &still_running); | ||||||
|  |  | ||||||
|  |   do { | ||||||
|  |     struct timeval timeout; | ||||||
|  |     int rc; /* select() return code */ | ||||||
|  |     CURLMcode mc; /* curl_multi_fdset() return code */ | ||||||
|  |  | ||||||
|  |     fd_set fdread; | ||||||
|  |     fd_set fdwrite; | ||||||
|  |     fd_set fdexcep; | ||||||
|  |     int maxfd = -1; | ||||||
|  |  | ||||||
|  |     long curl_timeo = -1; | ||||||
|  |  | ||||||
|  |     FD_ZERO(&fdread); | ||||||
|  |     FD_ZERO(&fdwrite); | ||||||
|  |     FD_ZERO(&fdexcep); | ||||||
|  |  | ||||||
|  |     /* set a suitable timeout to play around with */ | ||||||
|  |     timeout.tv_sec = 1; | ||||||
|  |     timeout.tv_usec = 0; | ||||||
|  |  | ||||||
|  |     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 | ||||||
|  |         timeout.tv_usec = (curl_timeo % 1000) * 1000; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /* get file descriptors from the transfers */ | ||||||
|  |     mc = curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd); | ||||||
|  |  | ||||||
|  |     if(mc != CURLM_OK) | ||||||
|  |     { | ||||||
|  |       fprintf(stderr, "curl_multi_fdset() failed, code %d.\n", mc); | ||||||
|  |       break; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /* 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); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     switch(rc) { | ||||||
|  |     case -1: | ||||||
|  |       /* select error */ | ||||||
|  |       break; | ||||||
|  |     case 0: | ||||||
|  |     default: | ||||||
|  |       /* timeout or readable/writable sockets */ | ||||||
|  |       curl_multi_perform(multi_handle, &still_running); | ||||||
|  |       break; | ||||||
|  |     } | ||||||
|  |   } while(still_running); | ||||||
|  |  | ||||||
|  |   curl_multi_cleanup(multi_handle); | ||||||
|  |  | ||||||
|  |   for(i=0; i<num_transfers; i++) | ||||||
|  |     curl_easy_cleanup(easy[i]); | ||||||
|  |  | ||||||
|  |   return 0; | ||||||
|  | } | ||||||
							
								
								
									
										318
									
								
								docs/examples/http2-serverpush.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										318
									
								
								docs/examples/http2-serverpush.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,318 @@ | |||||||
|  | /*************************************************************************** | ||||||
|  |  *                                  _   _ ____  _ | ||||||
|  |  *  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. | ||||||
|  |  * | ||||||
|  |  ***************************************************************************/ | ||||||
|  | /* <DESC> | ||||||
|  |  * HTTP/2 server push | ||||||
|  |  * </DESC> | ||||||
|  |  */ | ||||||
|  | #include <stdio.h> | ||||||
|  | #include <stdlib.h> | ||||||
|  | #include <string.h> | ||||||
|  |  | ||||||
|  | /* somewhat unix-specific */ | ||||||
|  | #include <sys/time.h> | ||||||
|  | #include <unistd.h> | ||||||
|  |  | ||||||
|  | /* curl stuff */ | ||||||
|  | #include <curl/curl.h> | ||||||
|  |  | ||||||
|  | #ifndef CURLPIPE_MULTIPLEX | ||||||
|  | #error "too old libcurl, can't do HTTP/2 server push!" | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | static | ||||||
|  | void dump(const char *text, unsigned char *ptr, size_t size, | ||||||
|  |           char nohex) | ||||||
|  | { | ||||||
|  |   size_t i; | ||||||
|  |   size_t c; | ||||||
|  |  | ||||||
|  |   unsigned int width=0x10; | ||||||
|  |  | ||||||
|  |   if(nohex) | ||||||
|  |     /* without the hex output, we can fit more on screen */ | ||||||
|  |     width = 0x40; | ||||||
|  |  | ||||||
|  |   fprintf(stderr, "%s, %ld bytes (0x%lx)\n", | ||||||
|  |           text, (long)size, (long)size); | ||||||
|  |  | ||||||
|  |   for(i=0; i<size; i+= width) { | ||||||
|  |  | ||||||
|  |     fprintf(stderr, "%4.4lx: ", (long)i); | ||||||
|  |  | ||||||
|  |     if(!nohex) { | ||||||
|  |       /* hex not disabled, show it */ | ||||||
|  |       for(c = 0; c < width; c++) | ||||||
|  |         if(i+c < size) | ||||||
|  |           fprintf(stderr, "%02x ", ptr[i+c]); | ||||||
|  |         else | ||||||
|  |           fputs("   ", stderr); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     for(c = 0; (c < width) && (i+c < size); c++) { | ||||||
|  |       /* check for 0D0A; if found, skip past and start a new line of output */ | ||||||
|  |       if (nohex && (i+c+1 < size) && ptr[i+c]==0x0D && ptr[i+c+1]==0x0A) { | ||||||
|  |         i+=(c+2-width); | ||||||
|  |         break; | ||||||
|  |       } | ||||||
|  |       fprintf(stderr, "%c", | ||||||
|  |               (ptr[i+c]>=0x20) && (ptr[i+c]<0x80)?ptr[i+c]:'.'); | ||||||
|  |       /* check again for 0D0A, to avoid an extra \n if it's at width */ | ||||||
|  |       if (nohex && (i+c+2 < size) && ptr[i+c+1]==0x0D && ptr[i+c+2]==0x0A) { | ||||||
|  |         i+=(c+3-width); | ||||||
|  |         break; | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |     fputc('\n', stderr); /* newline */ | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static | ||||||
|  | int my_trace(CURL *handle, curl_infotype type, | ||||||
|  |              char *data, size_t size, | ||||||
|  |              void *userp) | ||||||
|  | { | ||||||
|  |   const char *text; | ||||||
|  |   (void)handle; /* prevent compiler warning */ | ||||||
|  |   (void)userp; | ||||||
|  |   switch (type) { | ||||||
|  |   case CURLINFO_TEXT: | ||||||
|  |     fprintf(stderr, "== Info: %s", data); | ||||||
|  |   default: /* in case a new one is introduced to shock us */ | ||||||
|  |     return 0; | ||||||
|  |  | ||||||
|  |   case CURLINFO_HEADER_OUT: | ||||||
|  |     text = "=> Send header"; | ||||||
|  |     break; | ||||||
|  |   case CURLINFO_DATA_OUT: | ||||||
|  |     text = "=> Send data"; | ||||||
|  |     break; | ||||||
|  |   case CURLINFO_SSL_DATA_OUT: | ||||||
|  |     text = "=> Send SSL data"; | ||||||
|  |     break; | ||||||
|  |   case CURLINFO_HEADER_IN: | ||||||
|  |     text = "<= Recv header"; | ||||||
|  |     break; | ||||||
|  |   case CURLINFO_DATA_IN: | ||||||
|  |     text = "<= Recv data"; | ||||||
|  |     break; | ||||||
|  |   case CURLINFO_SSL_DATA_IN: | ||||||
|  |     text = "<= Recv SSL data"; | ||||||
|  |     break; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   dump(text, (unsigned char *)data, size, 1); | ||||||
|  |   return 0; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static void setup(CURL *hnd) | ||||||
|  | { | ||||||
|  |   FILE *out = fopen("dl", "wb"); | ||||||
|  |  | ||||||
|  |   /* write to this file */ | ||||||
|  |   curl_easy_setopt(hnd, CURLOPT_WRITEDATA, out); | ||||||
|  |  | ||||||
|  |   /* set the same URL */ | ||||||
|  |   curl_easy_setopt(hnd, CURLOPT_URL, "https://localhost:8443/index.html"); | ||||||
|  |  | ||||||
|  |   /* send it verbose for max debuggaility */ | ||||||
|  |   curl_easy_setopt(hnd, CURLOPT_VERBOSE, 1L); | ||||||
|  |   curl_easy_setopt(hnd, CURLOPT_DEBUGFUNCTION, my_trace); | ||||||
|  |  | ||||||
|  |   /* HTTP/2 please */ | ||||||
|  |   curl_easy_setopt(hnd, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_2_0); | ||||||
|  |  | ||||||
|  |   /* we use a self-signed test server, skip verification during debugging */ | ||||||
|  |   curl_easy_setopt(hnd, CURLOPT_SSL_VERIFYPEER, 0L); | ||||||
|  |   curl_easy_setopt(hnd, CURLOPT_SSL_VERIFYHOST, 0L); | ||||||
|  |  | ||||||
|  | #if (CURLPIPE_MULTIPLEX > 0) | ||||||
|  |   /* wait for pipe connection to confirm */ | ||||||
|  |   curl_easy_setopt(hnd, CURLOPT_PIPEWAIT, 1L); | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /* called when there's an incoming push */ | ||||||
|  | static int server_push_callback(CURL *parent, | ||||||
|  |                                 CURL *easy, | ||||||
|  |                                 size_t num_headers, | ||||||
|  |                                 struct curl_pushheaders *headers, | ||||||
|  |                                 void *userp) | ||||||
|  | { | ||||||
|  |   char *headp; | ||||||
|  |   size_t i; | ||||||
|  |   int *transfers = (int *)userp; | ||||||
|  |   char filename[128]; | ||||||
|  |   FILE *out; | ||||||
|  |   static unsigned int count = 0; | ||||||
|  |  | ||||||
|  |   (void)parent; /* we have no use for this */ | ||||||
|  |  | ||||||
|  |   sprintf(filename, "push%u", count++); | ||||||
|  |  | ||||||
|  |   /* here's a new stream, save it in a new file for each new push */ | ||||||
|  |   out = fopen(filename, "wb"); | ||||||
|  |  | ||||||
|  |   /* write to this file */ | ||||||
|  |   curl_easy_setopt(easy, CURLOPT_WRITEDATA, out); | ||||||
|  |  | ||||||
|  |   fprintf(stderr, "**** push callback approves stream %u, got %d headers!\n", | ||||||
|  |           count, (int)num_headers); | ||||||
|  |  | ||||||
|  |   for(i=0; i<num_headers; i++) { | ||||||
|  |     headp = curl_pushheader_bynum(headers, i); | ||||||
|  |     fprintf(stderr, "**** header %u: %s\n", (int)i, headp); | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   headp = curl_pushheader_byname(headers, ":path"); | ||||||
|  |   if(headp) { | ||||||
|  |     fprintf(stderr, "**** The PATH is %s\n", headp /* skip :path + colon */ ); | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   (*transfers)++; /* one more */ | ||||||
|  |   return CURL_PUSH_OK; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * Download a file over HTTP/2, take care of server push. | ||||||
|  |  */ | ||||||
|  | int main(void) | ||||||
|  | { | ||||||
|  |   CURL *easy; | ||||||
|  |   CURLM *multi_handle; | ||||||
|  |   int still_running; /* keep number of running handles */ | ||||||
|  |   int transfers=1; /* we start with one */ | ||||||
|  |   struct CURLMsg *m; | ||||||
|  |  | ||||||
|  |   /* init a multi stack */ | ||||||
|  |   multi_handle = curl_multi_init(); | ||||||
|  |  | ||||||
|  |   easy = curl_easy_init(); | ||||||
|  |  | ||||||
|  |   /* set options */ | ||||||
|  |   setup(easy); | ||||||
|  |  | ||||||
|  |   /* add the easy transfer */ | ||||||
|  |   curl_multi_add_handle(multi_handle, easy); | ||||||
|  |  | ||||||
|  |   curl_multi_setopt(multi_handle, CURLMOPT_PIPELINING, CURLPIPE_MULTIPLEX); | ||||||
|  |   curl_multi_setopt(multi_handle, CURLMOPT_PUSHFUNCTION, server_push_callback); | ||||||
|  |   curl_multi_setopt(multi_handle, CURLMOPT_PUSHDATA, &transfers); | ||||||
|  |  | ||||||
|  |   /* we start some action by calling perform right away */ | ||||||
|  |   curl_multi_perform(multi_handle, &still_running); | ||||||
|  |  | ||||||
|  |   do { | ||||||
|  |     struct timeval timeout; | ||||||
|  |     int rc; /* select() return code */ | ||||||
|  |     CURLMcode mc; /* curl_multi_fdset() return code */ | ||||||
|  |  | ||||||
|  |     fd_set fdread; | ||||||
|  |     fd_set fdwrite; | ||||||
|  |     fd_set fdexcep; | ||||||
|  |     int maxfd = -1; | ||||||
|  |  | ||||||
|  |     long curl_timeo = -1; | ||||||
|  |  | ||||||
|  |     FD_ZERO(&fdread); | ||||||
|  |     FD_ZERO(&fdwrite); | ||||||
|  |     FD_ZERO(&fdexcep); | ||||||
|  |  | ||||||
|  |     /* set a suitable timeout to play around with */ | ||||||
|  |     timeout.tv_sec = 1; | ||||||
|  |     timeout.tv_usec = 0; | ||||||
|  |  | ||||||
|  |     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 | ||||||
|  |         timeout.tv_usec = (curl_timeo % 1000) * 1000; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /* get file descriptors from the transfers */ | ||||||
|  |     mc = curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd); | ||||||
|  |  | ||||||
|  |     if(mc != CURLM_OK) { | ||||||
|  |       fprintf(stderr, "curl_multi_fdset() failed, code %d.\n", mc); | ||||||
|  |       break; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /* 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); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     switch(rc) { | ||||||
|  |     case -1: | ||||||
|  |       /* select error */ | ||||||
|  |       break; | ||||||
|  |     case 0: | ||||||
|  |     default: | ||||||
|  |       /* timeout or readable/writable sockets */ | ||||||
|  |       curl_multi_perform(multi_handle, &still_running); | ||||||
|  |       break; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /* | ||||||
|  |      * A little caution when doing server push is that libcurl itself has | ||||||
|  |      * created and added one or more easy handles but we need to clean them up | ||||||
|  |      * when we are done. | ||||||
|  |      */ | ||||||
|  |  | ||||||
|  |     do { | ||||||
|  |       int msgq = 0;; | ||||||
|  |       m = curl_multi_info_read(multi_handle, &msgq); | ||||||
|  |       if(m && (m->msg == CURLMSG_DONE)) { | ||||||
|  |         CURL *e = m->easy_handle; | ||||||
|  |         transfers--; | ||||||
|  |         curl_multi_remove_handle(multi_handle, e); | ||||||
|  |         curl_easy_cleanup(e); | ||||||
|  |       } | ||||||
|  |     } while(m); | ||||||
|  |  | ||||||
|  |   } while(transfers); /* as long as we have transfers going */ | ||||||
|  |  | ||||||
|  |   curl_multi_cleanup(multi_handle); | ||||||
|  |  | ||||||
|  |  | ||||||
|  |   return 0; | ||||||
|  | } | ||||||
							
								
								
									
										357
									
								
								docs/examples/http2-upload.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										357
									
								
								docs/examples/http2-upload.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,357 @@ | |||||||
|  | /*************************************************************************** | ||||||
|  |  *                                  _   _ ____  _ | ||||||
|  |  *  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. | ||||||
|  |  * | ||||||
|  |  ***************************************************************************/ | ||||||
|  | /* <DESC> | ||||||
|  |  * Multiplexed HTTP/2 uploads over a single connection | ||||||
|  |  * </DESC> | ||||||
|  |  */ | ||||||
|  | #include <stdio.h> | ||||||
|  | #include <stdlib.h> | ||||||
|  | #include <string.h> | ||||||
|  | #include <fcntl.h> | ||||||
|  | #include <sys/stat.h> | ||||||
|  |  | ||||||
|  | /* somewhat unix-specific */ | ||||||
|  | #include <sys/time.h> | ||||||
|  | #include <unistd.h> | ||||||
|  |  | ||||||
|  | /* curl stuff */ | ||||||
|  | #include <curl/curl.h> | ||||||
|  |  | ||||||
|  | #ifndef CURLPIPE_MULTIPLEX | ||||||
|  | /* This little trick will just make sure that we don't enable pipelining for | ||||||
|  |    libcurls old enough to not have this symbol. It is _not_ defined to zero in | ||||||
|  |    a recent libcurl header. */ | ||||||
|  | #define CURLPIPE_MULTIPLEX 0 | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #define NUM_HANDLES 1000 | ||||||
|  |  | ||||||
|  | void *curl_hnd[NUM_HANDLES]; | ||||||
|  | int num_transfers; | ||||||
|  |  | ||||||
|  | /* a handle to number lookup, highly ineffective when we do many | ||||||
|  |    transfers... */ | ||||||
|  | static int hnd2num(CURL *hnd) | ||||||
|  | { | ||||||
|  |   int i; | ||||||
|  |   for(i=0; i< num_transfers; i++) { | ||||||
|  |     if(curl_hnd[i] == hnd) | ||||||
|  |       return i; | ||||||
|  |   } | ||||||
|  |   return 0; /* weird, but just a fail-safe */ | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static | ||||||
|  | void dump(const char *text, int num, unsigned char *ptr, size_t size, | ||||||
|  |           char nohex) | ||||||
|  | { | ||||||
|  |   size_t i; | ||||||
|  |   size_t c; | ||||||
|  |   unsigned int width=0x10; | ||||||
|  |  | ||||||
|  |   if(nohex) | ||||||
|  |     /* without the hex output, we can fit more on screen */ | ||||||
|  |     width = 0x40; | ||||||
|  |  | ||||||
|  |   fprintf(stderr, "%d %s, %ld bytes (0x%lx)\n", | ||||||
|  |           num, text, (long)size, (long)size); | ||||||
|  |  | ||||||
|  |   for(i=0; i<size; i+= width) { | ||||||
|  |  | ||||||
|  |     fprintf(stderr, "%4.4lx: ", (long)i); | ||||||
|  |  | ||||||
|  |     if(!nohex) { | ||||||
|  |       /* hex not disabled, show it */ | ||||||
|  |       for(c = 0; c < width; c++) | ||||||
|  |         if(i+c < size) | ||||||
|  |           fprintf(stderr, "%02x ", ptr[i+c]); | ||||||
|  |         else | ||||||
|  |           fputs("   ", stderr); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     for(c = 0; (c < width) && (i+c < size); c++) { | ||||||
|  |       /* check for 0D0A; if found, skip past and start a new line of output */ | ||||||
|  |       if (nohex && (i+c+1 < size) && ptr[i+c]==0x0D && ptr[i+c+1]==0x0A) { | ||||||
|  |         i+=(c+2-width); | ||||||
|  |         break; | ||||||
|  |       } | ||||||
|  |       fprintf(stderr, "%c", | ||||||
|  |               (ptr[i+c]>=0x20) && (ptr[i+c]<0x80)?ptr[i+c]:'.'); | ||||||
|  |       /* check again for 0D0A, to avoid an extra \n if it's at width */ | ||||||
|  |       if (nohex && (i+c+2 < size) && ptr[i+c+1]==0x0D && ptr[i+c+2]==0x0A) { | ||||||
|  |         i+=(c+3-width); | ||||||
|  |         break; | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |     fputc('\n', stderr); /* newline */ | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static | ||||||
|  | int my_trace(CURL *handle, curl_infotype type, | ||||||
|  |              char *data, size_t size, | ||||||
|  |              void *userp) | ||||||
|  | { | ||||||
|  |   char timebuf[20]; | ||||||
|  |   const char *text; | ||||||
|  |   int num = hnd2num(handle); | ||||||
|  |   static time_t epoch_offset; | ||||||
|  |   static int    known_offset; | ||||||
|  |   struct timeval tv; | ||||||
|  |   time_t secs; | ||||||
|  |   struct tm *now; | ||||||
|  |  | ||||||
|  |   (void)handle; /* prevent compiler warning */ | ||||||
|  |   (void)userp; | ||||||
|  |  | ||||||
|  |   gettimeofday(&tv, NULL); | ||||||
|  |   if(!known_offset) { | ||||||
|  |     epoch_offset = time(NULL) - tv.tv_sec; | ||||||
|  |     known_offset = 1; | ||||||
|  |   } | ||||||
|  |   secs = epoch_offset + tv.tv_sec; | ||||||
|  |   now = localtime(&secs);  /* not thread safe but we don't care */ | ||||||
|  |   snprintf(timebuf, sizeof(timebuf), "%02d:%02d:%02d.%06ld", | ||||||
|  |            now->tm_hour, now->tm_min, now->tm_sec, (long)tv.tv_usec); | ||||||
|  |  | ||||||
|  |   switch (type) { | ||||||
|  |   case CURLINFO_TEXT: | ||||||
|  |     fprintf(stderr, "%s [%d] Info: %s", timebuf, num, data); | ||||||
|  |   default: /* in case a new one is introduced to shock us */ | ||||||
|  |     return 0; | ||||||
|  |  | ||||||
|  |   case CURLINFO_HEADER_OUT: | ||||||
|  |     text = "=> Send header"; | ||||||
|  |     break; | ||||||
|  |   case CURLINFO_DATA_OUT: | ||||||
|  |     text = "=> Send data"; | ||||||
|  |     break; | ||||||
|  |   case CURLINFO_SSL_DATA_OUT: | ||||||
|  |     text = "=> Send SSL data"; | ||||||
|  |     break; | ||||||
|  |   case CURLINFO_HEADER_IN: | ||||||
|  |     text = "<= Recv header"; | ||||||
|  |     break; | ||||||
|  |   case CURLINFO_DATA_IN: | ||||||
|  |     text = "<= Recv data"; | ||||||
|  |     break; | ||||||
|  |   case CURLINFO_SSL_DATA_IN: | ||||||
|  |     text = "<= Recv SSL data"; | ||||||
|  |     break; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   dump(text, num, (unsigned char *)data, size, 1); | ||||||
|  |   return 0; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | struct input { | ||||||
|  |   FILE *in; | ||||||
|  |   size_t bytes_read; /* count up */ | ||||||
|  |   CURL *hnd; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | static size_t read_callback(void *ptr, size_t size, size_t nmemb, void *userp) | ||||||
|  | { | ||||||
|  |   struct input *i = userp; | ||||||
|  |   size_t retcode = fread(ptr, size, nmemb, i->in); | ||||||
|  |   i->bytes_read += retcode; | ||||||
|  |   return retcode; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | struct input indata[NUM_HANDLES]; | ||||||
|  |  | ||||||
|  | static void setup(CURL *hnd, int num, const char *upload) | ||||||
|  | { | ||||||
|  |   FILE *out; | ||||||
|  |   char url[256]; | ||||||
|  |   char filename[128]; | ||||||
|  |   struct stat file_info; | ||||||
|  |   curl_off_t uploadsize; | ||||||
|  |  | ||||||
|  |   sprintf(filename, "dl-%d", num); | ||||||
|  |   out = fopen(filename, "wb"); | ||||||
|  |  | ||||||
|  |   sprintf(url, "https://localhost:8443/upload-%d", num); | ||||||
|  |  | ||||||
|  |   /* get the file size of the local file */ | ||||||
|  |   stat(upload, &file_info); | ||||||
|  |   uploadsize = file_info.st_size; | ||||||
|  |  | ||||||
|  |   indata[num].in = fopen(upload, "rb"); | ||||||
|  |   indata[num].hnd = hnd; | ||||||
|  |  | ||||||
|  |   /* write to this file */ | ||||||
|  |   curl_easy_setopt(hnd, CURLOPT_WRITEDATA, out); | ||||||
|  |  | ||||||
|  |   /* we want to use our own read function */ | ||||||
|  |   curl_easy_setopt(hnd, CURLOPT_READFUNCTION, read_callback); | ||||||
|  |   /* read from this file */ | ||||||
|  |   curl_easy_setopt(hnd, CURLOPT_READDATA, &indata[num]); | ||||||
|  |   /* provide the size of the upload */ | ||||||
|  |   curl_easy_setopt(hnd, CURLOPT_INFILESIZE_LARGE, uploadsize); | ||||||
|  |  | ||||||
|  |   /* send in the URL to store the upload as */ | ||||||
|  |   curl_easy_setopt(hnd, CURLOPT_URL, url); | ||||||
|  |  | ||||||
|  |   /* upload please */ | ||||||
|  |   curl_easy_setopt(hnd, CURLOPT_UPLOAD, 1L); | ||||||
|  |  | ||||||
|  |   /* send it verbose for max debuggaility */ | ||||||
|  |   curl_easy_setopt(hnd, CURLOPT_VERBOSE, 1L); | ||||||
|  |   curl_easy_setopt(hnd, CURLOPT_DEBUGFUNCTION, my_trace); | ||||||
|  |  | ||||||
|  |   /* HTTP/2 please */ | ||||||
|  |   curl_easy_setopt(hnd, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_2_0); | ||||||
|  |  | ||||||
|  |   /* we use a self-signed test server, skip verification during debugging */ | ||||||
|  |   curl_easy_setopt(hnd, CURLOPT_SSL_VERIFYPEER, 0L); | ||||||
|  |   curl_easy_setopt(hnd, CURLOPT_SSL_VERIFYHOST, 0L); | ||||||
|  |  | ||||||
|  | #if (CURLPIPE_MULTIPLEX > 0) | ||||||
|  |   /* wait for pipe connection to confirm */ | ||||||
|  |   curl_easy_setopt(hnd, CURLOPT_PIPEWAIT, 1L); | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  |   curl_hnd[num] = hnd; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * Upload all files over HTTP/2, using the same physical connection! | ||||||
|  |  */ | ||||||
|  | int main(int argc, char **argv) | ||||||
|  | { | ||||||
|  |   CURL *easy[NUM_HANDLES]; | ||||||
|  |   CURLM *multi_handle; | ||||||
|  |   int i; | ||||||
|  |   int still_running; /* keep number of running handles */ | ||||||
|  |   const char *filename = "index.html"; | ||||||
|  |  | ||||||
|  |   if(argc > 1) | ||||||
|  |     /* if given a number, do that many transfers */ | ||||||
|  |     num_transfers = atoi(argv[1]); | ||||||
|  |  | ||||||
|  |   if(argc > 2) | ||||||
|  |     /* if given a file name, upload this! */ | ||||||
|  |     filename = argv[2]; | ||||||
|  |  | ||||||
|  |   if(!num_transfers || (num_transfers > NUM_HANDLES)) | ||||||
|  |     num_transfers = 3; /* a suitable low default */ | ||||||
|  |  | ||||||
|  |   /* init a multi stack */ | ||||||
|  |   multi_handle = curl_multi_init(); | ||||||
|  |  | ||||||
|  |   for(i=0; i<num_transfers; i++) { | ||||||
|  |     easy[i] = curl_easy_init(); | ||||||
|  |     /* set options */ | ||||||
|  |     setup(easy[i], i, filename); | ||||||
|  |  | ||||||
|  |     /* add the individual transfer */ | ||||||
|  |     curl_multi_add_handle(multi_handle, easy[i]); | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   curl_multi_setopt(multi_handle, CURLMOPT_PIPELINING, CURLPIPE_MULTIPLEX); | ||||||
|  |  | ||||||
|  |   /* We do HTTP/2 so let's stick to one connection per host */ | ||||||
|  |   curl_multi_setopt(multi_handle, CURLMOPT_MAX_HOST_CONNECTIONS, 1L); | ||||||
|  |  | ||||||
|  |   /* we start some action by calling perform right away */ | ||||||
|  |   curl_multi_perform(multi_handle, &still_running); | ||||||
|  |  | ||||||
|  |   do { | ||||||
|  |     struct timeval timeout; | ||||||
|  |     int rc; /* select() return code */ | ||||||
|  |     CURLMcode mc; /* curl_multi_fdset() return code */ | ||||||
|  |  | ||||||
|  |     fd_set fdread; | ||||||
|  |     fd_set fdwrite; | ||||||
|  |     fd_set fdexcep; | ||||||
|  |     int maxfd = -1; | ||||||
|  |  | ||||||
|  |     long curl_timeo = -1; | ||||||
|  |  | ||||||
|  |     FD_ZERO(&fdread); | ||||||
|  |     FD_ZERO(&fdwrite); | ||||||
|  |     FD_ZERO(&fdexcep); | ||||||
|  |  | ||||||
|  |     /* set a suitable timeout to play around with */ | ||||||
|  |     timeout.tv_sec = 1; | ||||||
|  |     timeout.tv_usec = 0; | ||||||
|  |  | ||||||
|  |     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 | ||||||
|  |         timeout.tv_usec = (curl_timeo % 1000) * 1000; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /* get file descriptors from the transfers */ | ||||||
|  |     mc = curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd); | ||||||
|  |  | ||||||
|  |     if(mc != CURLM_OK) | ||||||
|  |     { | ||||||
|  |       fprintf(stderr, "curl_multi_fdset() failed, code %d.\n", mc); | ||||||
|  |       break; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /* 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); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     switch(rc) { | ||||||
|  |     case -1: | ||||||
|  |       /* select error */ | ||||||
|  |       break; | ||||||
|  |     case 0: | ||||||
|  |     default: | ||||||
|  |       /* timeout or readable/writable sockets */ | ||||||
|  |       curl_multi_perform(multi_handle, &still_running); | ||||||
|  |       break; | ||||||
|  |     } | ||||||
|  |   } while(still_running); | ||||||
|  |  | ||||||
|  |   curl_multi_cleanup(multi_handle); | ||||||
|  |  | ||||||
|  |   for(i=0; i<num_transfers; i++) | ||||||
|  |     curl_easy_cleanup(easy[i]); | ||||||
|  |  | ||||||
|  |   return 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 | ||||||
| @@ -19,6 +19,10 @@ | |||||||
|  * KIND, either express or implied. |  * KIND, either express or implied. | ||||||
|  * |  * | ||||||
|  ***************************************************************************/ |  ***************************************************************************/ | ||||||
|  | /* <DESC> | ||||||
|  |  * HTTP request with custom modified, removed and added headers | ||||||
|  |  * </DESC> | ||||||
|  |  */ | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
| #include <curl/curl.h> | #include <curl/curl.h> | ||||||
|  |  | ||||||
|   | |||||||
| @@ -5,7 +5,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 | ||||||
| @@ -19,6 +19,10 @@ | |||||||
|  * KIND, either express or implied. |  * KIND, either express or implied. | ||||||
|  * |  * | ||||||
|  ***************************************************************************/ |  ***************************************************************************/ | ||||||
|  | /* <DESC> | ||||||
|  |  * HTTP PUT with easy interface and read callback | ||||||
|  |  * </DESC> | ||||||
|  |  */ | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
| #include <fcntl.h> | #include <fcntl.h> | ||||||
| #include <sys/stat.h> | #include <sys/stat.h> | ||||||
|   | |||||||
| @@ -5,7 +5,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 | ||||||
| @@ -19,6 +19,10 @@ | |||||||
|  * KIND, either express or implied. |  * KIND, either express or implied. | ||||||
|  * |  * | ||||||
|  ***************************************************************************/ |  ***************************************************************************/ | ||||||
|  | /* <DESC> | ||||||
|  |  * Simple HTTPS GET | ||||||
|  |  * </DESC> | ||||||
|  |  */ | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
| #include <curl/curl.h> | #include <curl/curl.h> | ||||||
|  |  | ||||||
|   | |||||||
| @@ -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 | ||||||
| @@ -19,6 +19,12 @@ | |||||||
|  * KIND, either express or implied. |  * KIND, either express or implied. | ||||||
|  * |  * | ||||||
|  ***************************************************************************/ |  ***************************************************************************/ | ||||||
|  |  | ||||||
|  | /* <DESC> | ||||||
|  |  * IMAP example showing how to send e-mails | ||||||
|  |  * </DESC> | ||||||
|  |  */ | ||||||
|  |  | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
| #include <string.h> | #include <string.h> | ||||||
| #include <curl/curl.h> | #include <curl/curl.h> | ||||||
|   | |||||||
| @@ -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 | ||||||
| @@ -19,6 +19,12 @@ | |||||||
|  * KIND, either express or implied. |  * KIND, either express or implied. | ||||||
|  * |  * | ||||||
|  ***************************************************************************/ |  ***************************************************************************/ | ||||||
|  |  | ||||||
|  | /* <DESC> | ||||||
|  |  * IMAP example showing how to copy an e-mail from one folder to another | ||||||
|  |  * </DESC> | ||||||
|  |  */ | ||||||
|  |  | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
| #include <curl/curl.h> | #include <curl/curl.h> | ||||||
|  |  | ||||||
|   | |||||||
| @@ -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 | ||||||
| @@ -19,6 +19,12 @@ | |||||||
|  * KIND, either express or implied. |  * KIND, either express or implied. | ||||||
|  * |  * | ||||||
|  ***************************************************************************/ |  ***************************************************************************/ | ||||||
|  |  | ||||||
|  | /* <DESC> | ||||||
|  |  * IMAP example showing how to create a new folder | ||||||
|  |  * </DESC> | ||||||
|  |  */ | ||||||
|  |  | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
| #include <curl/curl.h> | #include <curl/curl.h> | ||||||
|  |  | ||||||
|   | |||||||
| @@ -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 | ||||||
| @@ -19,6 +19,12 @@ | |||||||
|  * KIND, either express or implied. |  * KIND, either express or implied. | ||||||
|  * |  * | ||||||
|  ***************************************************************************/ |  ***************************************************************************/ | ||||||
|  |  | ||||||
|  | /* <DESC> | ||||||
|  |  * IMAP example showing how to delete a folder | ||||||
|  |  * </DESC> | ||||||
|  |  */ | ||||||
|  |  | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
| #include <curl/curl.h> | #include <curl/curl.h> | ||||||
|  |  | ||||||
|   | |||||||
| @@ -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 | ||||||
| @@ -19,6 +19,12 @@ | |||||||
|  * KIND, either express or implied. |  * KIND, either express or implied. | ||||||
|  * |  * | ||||||
|  ***************************************************************************/ |  ***************************************************************************/ | ||||||
|  |  | ||||||
|  | /* <DESC> | ||||||
|  |  * IMAP example showing how to obtain information about a folder | ||||||
|  |  * </DESC> | ||||||
|  |  */ | ||||||
|  |  | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
| #include <curl/curl.h> | #include <curl/curl.h> | ||||||
|  |  | ||||||
|   | |||||||
| @@ -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 | ||||||
| @@ -19,6 +19,12 @@ | |||||||
|  * KIND, either express or implied. |  * KIND, either express or implied. | ||||||
|  * |  * | ||||||
|  ***************************************************************************/ |  ***************************************************************************/ | ||||||
|  |  | ||||||
|  | /* <DESC> | ||||||
|  |  * IMAP example showing how to retreieve e-mails | ||||||
|  |  * </DESC> | ||||||
|  |  */ | ||||||
|  |  | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
| #include <curl/curl.h> | #include <curl/curl.h> | ||||||
|  |  | ||||||
|   | |||||||
| @@ -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 | ||||||
| @@ -19,6 +19,12 @@ | |||||||
|  * KIND, either express or implied. |  * KIND, either express or implied. | ||||||
|  * |  * | ||||||
|  ***************************************************************************/ |  ***************************************************************************/ | ||||||
|  |  | ||||||
|  | /* <DESC> | ||||||
|  |  * IMAP example to list the folders within a mailbox | ||||||
|  |  * </DESC> | ||||||
|  |  */ | ||||||
|  |  | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
| #include <curl/curl.h> | #include <curl/curl.h> | ||||||
|  |  | ||||||
|   | |||||||
| @@ -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 | ||||||
| @@ -19,6 +19,12 @@ | |||||||
|  * KIND, either express or implied. |  * KIND, either express or implied. | ||||||
|  * |  * | ||||||
|  ***************************************************************************/ |  ***************************************************************************/ | ||||||
|  |  | ||||||
|  | /* <DESC> | ||||||
|  |  * IMAP example to list the subscribed folders | ||||||
|  |  * </DESC> | ||||||
|  |  */ | ||||||
|  |  | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
| #include <curl/curl.h> | #include <curl/curl.h> | ||||||
|  |  | ||||||
|   | |||||||
| @@ -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 | ||||||
| @@ -19,7 +19,14 @@ | |||||||
|  * KIND, either express or implied. |  * KIND, either express or implied. | ||||||
|  * |  * | ||||||
|  ***************************************************************************/ |  ***************************************************************************/ | ||||||
|  |  | ||||||
|  | /* <DESC> | ||||||
|  |  * IMAP example using the multi interface | ||||||
|  |  * </DESC> | ||||||
|  |  */ | ||||||
|  |  | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
|  | #include <string.h> | ||||||
| #include <curl/curl.h> | #include <curl/curl.h> | ||||||
|  |  | ||||||
| /* This is a simple example showing how to fetch mail using libcurl's IMAP | /* This is a simple example showing how to fetch mail using libcurl's IMAP | ||||||
|   | |||||||
| @@ -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 | ||||||
| @@ -19,6 +19,12 @@ | |||||||
|  * KIND, either express or implied. |  * KIND, either express or implied. | ||||||
|  * |  * | ||||||
|  ***************************************************************************/ |  ***************************************************************************/ | ||||||
|  |  | ||||||
|  | /* <DESC> | ||||||
|  |  * IMAP example showing how to perform a noop | ||||||
|  |  * </DESC> | ||||||
|  |  */ | ||||||
|  |  | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
| #include <curl/curl.h> | #include <curl/curl.h> | ||||||
|  |  | ||||||
|   | |||||||
| @@ -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 | ||||||
| @@ -19,6 +19,12 @@ | |||||||
|  * KIND, either express or implied. |  * KIND, either express or implied. | ||||||
|  * |  * | ||||||
|  ***************************************************************************/ |  ***************************************************************************/ | ||||||
|  |  | ||||||
|  | /* <DESC> | ||||||
|  |  * IMAP example showing how to search for new e-mails | ||||||
|  |  * </DESC> | ||||||
|  |  */ | ||||||
|  |  | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
| #include <curl/curl.h> | #include <curl/curl.h> | ||||||
|  |  | ||||||
|   | |||||||
| @@ -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 | ||||||
| @@ -19,6 +19,12 @@ | |||||||
|  * KIND, either express or implied. |  * KIND, either express or implied. | ||||||
|  * |  * | ||||||
|  ***************************************************************************/ |  ***************************************************************************/ | ||||||
|  |  | ||||||
|  | /* <DESC> | ||||||
|  |  * IMAP example using SSL | ||||||
|  |  * </DESC> | ||||||
|  |  */ | ||||||
|  |  | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
| #include <curl/curl.h> | #include <curl/curl.h> | ||||||
|  |  | ||||||
| @@ -60,7 +66,7 @@ int main(void) | |||||||
|      * they have mentioned in their server certificate's commonName (or |      * they have mentioned in their server certificate's commonName (or | ||||||
|      * subjectAltName) fields, libcurl will refuse to connect. You can skip |      * subjectAltName) fields, libcurl will refuse to connect. You can skip | ||||||
|      * this check, but this will make the connection less secure. */ |      * this check, but this will make the connection less secure. */ | ||||||
| #ifdef SKIP_HOSTNAME_VERFICATION | #ifdef SKIP_HOSTNAME_VERIFICATION | ||||||
|     curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L); |     curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L); | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|   | |||||||
| @@ -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 | ||||||
| @@ -19,6 +19,12 @@ | |||||||
|  * KIND, either express or implied. |  * KIND, either express or implied. | ||||||
|  * |  * | ||||||
|  ***************************************************************************/ |  ***************************************************************************/ | ||||||
|  |  | ||||||
|  | /* <DESC> | ||||||
|  |  * IMAP example showing how to modify the properties of an e-mail | ||||||
|  |  * </DESC> | ||||||
|  |  */ | ||||||
|  |  | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
| #include <curl/curl.h> | #include <curl/curl.h> | ||||||
|  |  | ||||||
|   | |||||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user