Compare commits
	
		
			675 Commits
		
	
	
		
			curl-7_14_
			...
			curl-7_15_
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | c7e9e60b05 | ||
|   | 47f2e1da73 | ||
|   | 5975229919 | ||
|   | 38295e8a75 | ||
|   | f9612b5eaf | ||
|   | 5cf2ef2ef7 | ||
|   | 938b5c886e | ||
|   | 0618e68200 | ||
|   | bac52f3969 | ||
|   | d494d62953 | ||
|   | 7206181385 | ||
|   | 3f22901a43 | ||
|   | f70f11fc70 | ||
|   | cffebd7fd6 | ||
|   | b8c8e7349f | ||
|   | 8bba99ae56 | ||
|   | b5c5f57613 | ||
|   | 33df856925 | ||
|   | ce09cedd2e | ||
|   | 7d68101f83 | ||
|   | aa50a00898 | ||
|   | 26f112ba55 | ||
|   | 159b9162f8 | ||
|   | d7999f9fcb | ||
|   | f13eba4c78 | ||
|   | 050e82e088 | ||
|   | 88377e5b61 | ||
|   | 241af465fd | ||
|   | 59510a554d | ||
|   | b10aa95d28 | ||
|   | 097bee681a | ||
|   | 8548c2fc61 | ||
|   | dc4fbd2e97 | ||
|   | 60b029869f | ||
|   | f592ea6c30 | ||
|   | a39ac3d94a | ||
|   | 4b23ddc002 | ||
|   | 4486d336a6 | ||
|   | 45e4b811b0 | ||
|   | 0e6a1a4420 | ||
|   | b8bf708db9 | ||
|   | 6fdbb01194 | ||
|   | d29147565c | ||
|   | 75c9430559 | ||
|   | 9ac99a80c3 | ||
|   | a15d107dde | ||
|   | 09897b8146 | ||
|   | 29e446e508 | ||
|   | 10beb36b1c | ||
|   | a65a888866 | ||
|   | 98180b5cc7 | ||
|   | 92009181af | ||
|   | 831bdb9f63 | ||
|   | 50a4dbbb5e | ||
|   | ad6511c313 | ||
|   | 7a37fa4aef | ||
|   | dcee24191f | ||
|   | 87bcb6f377 | ||
|   | b0bc2f00d2 | ||
|   | 3b19c7d0d9 | ||
|   | 12f5c67bf5 | ||
|   | d7a83d8995 | ||
|   | 7725729d90 | ||
|   | e96445bd02 | ||
|   | da2c124675 | ||
|   | 8cb695a963 | ||
|   | 54cbd7e154 | ||
|   | 5994b62930 | ||
|   | 2fbf94b0f3 | ||
|   | 32bc30e210 | ||
|   | f3bc8e6ce1 | ||
|   | 16f3a32bec | ||
|   | c44d2498e3 | ||
|   | 2aed209efa | ||
|   | b55b780d7b | ||
|   | 8d4eb2bc1f | ||
|   | 67bf4f28ff | ||
|   | 803582f8ac | ||
|   | 03603f392a | ||
|   | fcfd6d9504 | ||
|   | c31451cf13 | ||
|   | 5deff1a179 | ||
|   | e236a1c99b | ||
|   | a2f3094eb0 | ||
|   | 65afc576ea | ||
|   | 8971f656b4 | ||
|   | 394ce9ee39 | ||
|   | 67a83c1b34 | ||
|   | 1e8d094274 | ||
|   | 4c35a40858 | ||
|   | 802b2aaf6a | ||
|   | 0e79a8944b | ||
|   | bebf70667d | ||
|   | d9bd5de0b1 | ||
|   | 31c7aa0ba4 | ||
|   | fc2388189f | ||
|   | 4431338691 | ||
|   | bda1e9aeab | ||
|   | 4969ca768d | ||
|   | 2acd1c1642 | ||
|   | e1e753179a | ||
|   | f4cc8153ae | ||
|   | e4d8cb4ee0 | ||
|   | 723a78ae3f | ||
|   | cd9d0d7dec | ||
|   | 665d4f08c8 | ||
|   | 00c7780fcb | ||
|   | 15ab13dc42 | ||
|   | 8a0ca3066e | ||
|   | ea01755bb4 | ||
|   | 69c2084a18 | ||
|   | 99c0a1a7d0 | ||
|   | 5acf997e69 | ||
|   | dd87e4ed39 | ||
|   | 2f8c26ba8a | ||
|   | 81b9793807 | ||
|   | 7278f17e8f | ||
|   | 66c7427df0 | ||
|   | c1a06d858d | ||
|   | 53b5fdbe9e | ||
|   | 687cf0235e | ||
|   | b6e9229cf0 | ||
|   | 089e4848d8 | ||
|   | 58d2e7c6d1 | ||
|   | fa18d6fb76 | ||
|   | 4dcb930247 | ||
|   | 74a299fd08 | ||
|   | 532a560d87 | ||
|   | 0040a60559 | ||
|   | cc34342790 | ||
|   | bdbf6e9d19 | ||
|   | db86f765eb | ||
|   | b11dec5dd5 | ||
|   | 86becc7591 | ||
|   | 8922bc038b | ||
|   | 009f5790a4 | ||
|   | 0536b6c459 | ||
|   | 0e3ebd9841 | ||
|   | 598965a606 | ||
|   | d7a2938849 | ||
|   | a683658675 | ||
|   | 25169f68b7 | ||
|   | e5247ae65d | ||
|   | a718cb05ff | ||
|   | b466ef2581 | ||
|   | c7a634641f | ||
|   | e4388643f1 | ||
|   | bc4208201c | ||
|   | a0d69d52a1 | ||
|   | c23a1be139 | ||
|   | 9799f7afb0 | ||
|   | 6358b24fac | ||
|   | b58634316f | ||
|   | e3657644d6 | ||
|   | 7d1e3ebeed | ||
|   | 9e61dfe85e | ||
|   | 7b51aafa86 | ||
|   | 5f487123df | ||
|   | f1f32477e3 | ||
|   | df2b1251a0 | ||
|   | 02c7cf6fa5 | ||
|   | 60006ff993 | ||
|   | f3af5d7b8e | ||
|   | d551412a32 | ||
|   | 6de67a134e | ||
|   | 8ec31398e0 | ||
|   | fd0d560b47 | ||
|   | cc542269a1 | ||
|   | 7b488a3bef | ||
|   | f448168501 | ||
|   | 80a8fb98db | ||
|   | 898bb397b1 | ||
|   | 74ed5b5ebd | ||
|   | 178afd81a9 | ||
|   | d6eb1a7b98 | ||
|   | 4ff56b15e9 | ||
|   | e6b98d3152 | ||
|   | 5fd8dd2dce | ||
|   | 0ad3e046a4 | ||
|   | d6c5d24af3 | ||
|   | 8a3280a2de | ||
|   | 450a0a647a | ||
|   | 676c0cf123 | ||
|   | a731319321 | ||
|   | 81b06a09b7 | ||
|   | 23b34744d9 | ||
|   | bc8590aa12 | ||
|   | 939d368d5f | ||
|   | 336e3b8baf | ||
|   | 47c06fa308 | ||
|   | b7f447f8d8 | ||
|   | 03af76b631 | ||
|   | e105d5c28f | ||
|   | d6ffb4c177 | ||
|   | 6dbfce1031 | ||
|   | fea5ddf585 | ||
|   | b9f39c2711 | ||
|   | 5acac0309a | ||
|   | 78febad718 | ||
|   | a6a5bba0a9 | ||
|   | 51581c034d | ||
|   | 8f25a95b47 | ||
|   | 7f5d092223 | ||
|   | 2e5cccd1b6 | ||
|   | 2645782f89 | ||
|   | 9533092511 | ||
|   | 6005a461bb | ||
|   | e2df946eee | ||
|   | d14588120f | ||
|   | ab31cfa664 | ||
|   | af1c397969 | ||
|   | 947f9deed5 | ||
|   | ce95eee903 | ||
|   | b15f3bb969 | ||
|   | 998e8cba19 | ||
|   | e3f523ab2a | ||
|   | 36485e56ed | ||
|   | b4113360f6 | ||
|   | 2d71e22f08 | ||
|   | 2ae67c431c | ||
|   | 4b1a91b64f | ||
|   | 4f69318e12 | ||
|   | 1cc98ab50f | ||
|   | a6494602fd | ||
|   | 50ec78b488 | ||
|   | 7d044d14f9 | ||
|   | df03d5a8b2 | ||
|   | 6a0ed81e67 | ||
|   | c94f3e8188 | ||
|   | 1e5f6cc1dc | ||
|   | b1fece74e3 | ||
|   | fdbe0df6e7 | ||
|   | 93d59520e4 | ||
|   | b68d3a073b | ||
|   | 2100311f41 | ||
|   | e1269e3156 | ||
|   | c88d61b044 | ||
|   | f49df54a36 | ||
|   | 952bbc4410 | ||
|   | 1eb4b85d72 | ||
|   | 59b6cb9e91 | ||
|   | e06afaeb7a | ||
|   | 8c6f654b26 | ||
|   | 1d8212e53a | ||
|   | 083c5e17e1 | ||
|   | 272231fb09 | ||
|   | 67b4d9b232 | ||
|   | 21709e1557 | ||
|   | 9c312637d1 | ||
|   | feacad7f68 | ||
|   | 6513303498 | ||
|   | 3e2a52b034 | ||
|   | 176d4e85e9 | ||
|   | 84d30dffb6 | ||
|   | 0fd282b078 | ||
|   | cdf4afbe50 | ||
|   | b222b2304e | ||
|   | fdf9900114 | ||
|   | 5867eb2dd2 | ||
|   | 61f145e3de | ||
|   | b97e7fc730 | ||
|   | 01cbf08064 | ||
|   | fec632e948 | ||
|   | 6aab5b57e1 | ||
|   | d2a27e02ce | ||
|   | b55506a76d | ||
|   | afc2aa2b3f | ||
|   | d055b269ed | ||
|   | 8a246a4a9f | ||
|   | 2f684351bf | ||
|   | 74e5beab9d | ||
|   | b41765f441 | ||
|   | 05a6013f42 | ||
|   | cfff544d67 | ||
|   | 599d9642ca | ||
|   | 0264faaa4e | ||
|   | 4022a60ea7 | ||
|   | 39e366fc11 | ||
|   | 096675824f | ||
|   | 80bfa76ac9 | ||
|   | b2e553a82e | ||
|   | 772b64d9d3 | ||
|   | 92c0de518e | ||
|   | ff96456513 | ||
|   | e89adbef51 | ||
|   | 22a6a6cf81 | ||
|   | fd870e4e8a | ||
|   | d52ed3fff2 | ||
|   | bac17ab7d8 | ||
|   | 9ace303528 | ||
|   | 7e81c35cdc | ||
|   | 0f125d9bcf | ||
|   | d4714517c0 | ||
|   | 280e4bf4c3 | ||
|   | adf462fe05 | ||
|   | c2862742ab | ||
|   | 8a712eb5af | ||
|   | d58790af17 | ||
|   | 9ef7a13403 | ||
|   | a5da1219bb | ||
|   | be524fed38 | ||
|   | 042016b85e | ||
|   | f6da574324 | ||
|   | b09d5c3135 | ||
|   | ec65c3fd53 | ||
|   | 7ca2f31c8d | ||
|   | 2275737a5d | ||
|   | 5e3836055f | ||
|   | 37a6a0bb3e | ||
|   | 6bcca3eca9 | ||
|   | ce40b8d531 | ||
|   | 9f109b94b8 | ||
|   | 89024febde | ||
|   | b7a673c6e2 | ||
|   | 7f68be770d | ||
|   | 4f173f35db | ||
|   | ae9fbe573e | ||
|   | 29676f473d | ||
|   | a5fcb26ab1 | ||
|   | d68b1a1e8c | ||
|   | bd8baed138 | ||
|   | 00a7dda273 | ||
|   | 4dba07c384 | ||
|   | 4d39c6b7cc | ||
|   | 7d6f6158c9 | ||
|   | 6863dbbc0c | ||
|   | 28b96efd8b | ||
|   | 0f82af0f49 | ||
|   | f0d839436f | ||
|   | f1aa4b4127 | ||
|   | ccdb43f7f1 | ||
|   | 72900f0f90 | ||
|   | 3ad958ddb1 | ||
|   | 2c77cc90f4 | ||
|   | db4c33b4fb | ||
|   | 3fb04115fc | ||
|   | 4faaa32aef | ||
|   | cab59b4c32 | ||
|   | 931eff89f5 | ||
|   | 175335808b | ||
|   | e00216581e | ||
|   | 23951ec00c | ||
|   | a8fc5d0f9f | ||
|   | f5e85bab1c | ||
|   | 9a44fa83dc | ||
|   | 6b1e54da62 | ||
|   | b91421b107 | ||
|   | 43b3954fa5 | ||
|   | 80f2e3f263 | ||
|   | 9ea423b4c1 | ||
|   | b259c9c535 | ||
|   | 80f481a5f7 | ||
|   | 115fe1b577 | ||
|   | 06d6ea651e | ||
|   | 966fa848a0 | ||
|   | 6f8fe67ace | ||
|   | d49edc8e09 | ||
|   | 3b9c20fe31 | ||
|   | bd72c5eacf | ||
|   | 9d152a77fd | ||
|   | 33dc28b905 | ||
|   | 43ce64dcca | ||
|   | 9e0882ba98 | ||
|   | c890149c8c | ||
|   | 1a1ab2e2e8 | ||
|   | 715b706caa | ||
|   | bfa9c42c25 | ||
|   | 9d98f97e1b | ||
|   | 5eb5ce6ff3 | ||
|   | be9c873a6e | ||
|   | 034d80f6cd | ||
|   | 021e786c71 | ||
|   | 0c6bb8cb66 | ||
|   | 4d7f08a99e | ||
|   | fdef584681 | ||
|   | f335bac8a3 | ||
|   | 51369753bb | ||
|   | 82a4c2bce3 | ||
|   | e73c6e039e | ||
|   | 19bad0844f | ||
|   | 96cec4dfd7 | ||
|   | 943aea6267 | ||
|   | b433e4a1e7 | ||
|   | 20f1966c0e | ||
|   | ab1f5c3edd | ||
|   | b2be6799f2 | ||
|   | ea2618fc6f | ||
|   | 62fdf8eaed | ||
|   | d3569a3572 | ||
|   | 89df76e449 | ||
|   | e5b2f33b4f | ||
|   | 934d312f50 | ||
|   | 68917eb517 | ||
|   | 3beb2f6b5d | ||
|   | b29017f15b | ||
|   | db83a0ebbc | ||
|   | 6d9fddb95d | ||
|   | 4284190cc4 | ||
|   | 5e4cbd2d24 | ||
|   | 06c3bec65d | ||
|   | e8c3bb45ba | ||
|   | 4ec55a964d | ||
|   | b9420864c0 | ||
|   | bf6588b6a7 | ||
|   | e43217e664 | ||
|   | e19ee2d102 | ||
|   | b4c53e2cfd | ||
|   | a2902de67c | ||
|   | da192f7955 | ||
|   | a2210d23c3 | ||
|   | bd5a622400 | ||
|   | b9494cb0d6 | ||
|   | 0f73af4470 | ||
|   | 45e26b5c02 | ||
|   | 6af5ea38ce | ||
|   | b6f0aa4394 | ||
|   | 774dab58f6 | ||
|   | e3bdb98f7a | ||
|   | 58d628c9f8 | ||
|   | 1e69394545 | ||
|   | 1cf798ad14 | ||
|   | da3992d2e9 | ||
|   | 48908e4633 | ||
|   | f5ae149338 | ||
|   | 3fe5311967 | ||
|   | 6a48639c68 | ||
|   | e7093b3ca8 | ||
|   | d0a4104c0c | ||
|   | 90559bed53 | ||
|   | 973a18cf03 | ||
|   | 3c666ce57a | ||
|   | a1287ec64f | ||
|   | 5fbfa1bfa8 | ||
|   | da3ecc91f8 | ||
|   | 09c8f558f7 | ||
|   | 528a149def | ||
|   | 29e36afb6b | ||
|   | 0e39543d35 | ||
|   | 0de20d8ee6 | ||
|   | cd5de5c0e5 | ||
|   | bd5afc26bd | ||
|   | 9542dfdcdc | ||
|   | 97a6d7b1a8 | ||
|   | 209b9d4374 | ||
|   | 0b8ccd0ae7 | ||
|   | 0b7f5ad508 | ||
|   | 8a38805e82 | ||
|   | 836d88a4b8 | ||
|   | d5268ed511 | ||
|   | 0e7d93858d | ||
|   | 2164d760b7 | ||
|   | b9c8de598b | ||
|   | 9889a811db | ||
|   | 9e38d882b9 | ||
|   | e8635044b5 | ||
|   | 56dea0ac9a | ||
|   | e8b77477c7 | ||
|   | 64298e528d | ||
|   | 4f1465e7c7 | ||
|   | 6120041b69 | ||
|   | 8c1213627d | ||
|   | 3e6ae6eeb8 | ||
|   | 291e9aeabd | ||
|   | a3d776187a | ||
|   | e55f502e2f | ||
|   | e369270f88 | ||
|   | 7e845e7cfd | ||
|   | 56d9624b56 | ||
|   | 911d135deb | ||
|   | 8107b90678 | ||
|   | 7722452b98 | ||
|   | 6e1a986e0f | ||
|   | e0785ade35 | ||
|   | 0177ed6f03 | ||
|   | c62635a3b5 | ||
|   | 0177476fd2 | ||
|   | 76d7dface7 | ||
|   | 982ba21460 | ||
|   | 6081c60556 | ||
|   | 2fe3c22108 | ||
|   | 75dbb3189a | ||
|   | 32330300a9 | ||
|   | 64414df27e | ||
|   | f98ec86798 | ||
|   | 87bbd13899 | ||
|   | 51a4493add | ||
|   | 5effe8f336 | ||
|   | 296eb2bd61 | ||
|   | 9853acba66 | ||
|   | 09cb9c782d | ||
|   | 575ce905b2 | ||
|   | 54887af471 | ||
|   | 573350637e | ||
|   | 49a16f7121 | ||
|   | a4773fcbbb | ||
|   | 1e038c4bc6 | ||
|   | 6ba19692a3 | ||
|   | 432dfe2b8f | ||
|   | a142372750 | ||
|   | f14195f786 | ||
|   | 9d54f9a6b7 | ||
|   | ebb91191bf | ||
|   | 8742e294d4 | ||
|   | 8882d1fa1b | ||
|   | 0c37ab5255 | ||
|   | 747a05844d | ||
|   | c7b7bf32f8 | ||
|   | 710ee3b0e0 | ||
|   | 7a8993892d | ||
|   | 5e16a77fa9 | ||
|   | ef35519696 | ||
|   | d5baaf7756 | ||
|   | 2a94387fc3 | ||
|   | 6a5c2b0fc3 | ||
|   | fc281d6440 | ||
|   | e22ac39da4 | ||
|   | 34cadb1e54 | ||
|   | 94692b904e | ||
|   | 18f3087afd | ||
|   | 15bc228ae9 | ||
|   | 2b7a38d032 | ||
|   | 90e1a6905a | ||
|   | c36af24cbd | ||
|   | a676c18502 | ||
|   | 362912ff83 | ||
|   | 46ff13f243 | ||
|   | 340a67a6f8 | ||
|   | 9294c1e76c | ||
|   | fd704f8de0 | ||
|   | d9ca9154d1 | ||
|   | 35110eca73 | ||
|   | 9ad92b3007 | ||
|   | 2f78c96330 | ||
|   | 639857ceb2 | ||
|   | 162f58c53c | ||
|   | 84c4d96e71 | ||
|   | c0d343d56d | ||
|   | 6d14a80608 | ||
|   | f451bb7c49 | ||
|   | 20b17d6b04 | ||
|   | bb2317b63c | ||
|   | 189461dc98 | ||
|   | 69af552bc1 | ||
|   | 0ae6ff9f72 | ||
|   | 8b571fbbb1 | ||
|   | f3fcd409d5 | ||
|   | a47532f88a | ||
|   | 6c157a404b | ||
|   | 4f8a49143d | ||
|   | 493d6033aa | ||
|   | 8f219af884 | ||
|   | aeb04136f7 | ||
|   | 0b8f57bf06 | ||
|   | 6508d446e1 | ||
|   | 82cb462bb4 | ||
|   | 9a264bf610 | ||
|   | 57007e80a9 | ||
|   | b6c876bdb6 | ||
|   | 57afae79eb | ||
|   | 84c2184909 | ||
|   | e358a24a75 | ||
|   | 9da9d00c62 | ||
|   | ec3f269d1f | ||
|   | 1c388a52a5 | ||
|   | 34a827bbfe | ||
|   | 726b9e2240 | ||
|   | 2236ba0d20 | ||
|   | 463c0f7096 | ||
|   | e49a7e361c | ||
|   | 6e87cf5b30 | ||
|   | 5872e8dd7e | ||
|   | e81d4ac8c8 | ||
|   | 4922904991 | ||
|   | decae2dcda | ||
|   | 16bbd13af7 | ||
|   | ee0666c8df | ||
|   | a8a8ae2e92 | ||
|   | fd1148a728 | ||
|   | 74c7b41ee7 | ||
|   | 465e19dbe9 | ||
|   | 86660c73e5 | ||
|   | 6d8a208df2 | ||
|   | c3a826fdce | ||
|   | c5d6a42abf | ||
|   | d49c144297 | ||
|   | e7de7d5eb3 | ||
|   | 20005a83d2 | ||
|   | 27926030f9 | ||
|   | 701de67b79 | ||
|   | 883479f01e | ||
|   | b37a0b0512 | ||
|   | 5c5d5270d2 | ||
|   | 36461fb2aa | ||
|   | d8dcd5e472 | ||
|   | c51b46c982 | ||
|   | b1b63c1dd1 | ||
|   | 30c93d66eb | ||
|   | 3b60bb7259 | ||
|   | c73f8e835f | ||
|   | 93558c4299 | ||
|   | 396cff5779 | ||
|   | 336154e729 | ||
|   | bb0aba34fa | ||
|   | 1dc0ce9562 | ||
|   | e4aee168b5 | ||
|   | 2c10c895da | ||
|   | c04fae3096 | ||
|   | a214af0830 | ||
|   | f21bc46e82 | ||
|   | 044327a488 | ||
|   | c4bbcc83b6 | ||
|   | eb162b73c2 | ||
|   | 29aafb9cea | ||
|   | 40eb7d0d48 | ||
|   | 1dcb2b7e65 | ||
|   | 5470b9aa73 | ||
|   | 050bd7dd0b | ||
|   | f75038634f | ||
|   | 300b4a9158 | ||
|   | 52071f3476 | ||
|   | 42ddd745f8 | ||
|   | a7846189cd | ||
|   | 4762995d1f | ||
|   | e3a530eb61 | ||
|   | d1235ff058 | ||
|   | 4370e92dbd | ||
|   | 50e9522a06 | ||
|   | b5bb9aa8e3 | ||
|   | cf2e365f23 | ||
|   | 72e532cb67 | ||
|   | ac5635f77d | ||
|   | 640d67c119 | ||
|   | 3e79693e3b | ||
|   | d55d3c2fd0 | ||
|   | 3aced17c75 | ||
|   | bac63914db | ||
|   | 6a63c51f7c | ||
|   | 632cf13767 | ||
|   | e7012a515c | ||
|   | 6b638af92f | ||
|   | c654b79c53 | ||
|   | bee7b874ea | ||
|   | 9c3fc592f7 | ||
|   | 4eab7a1ebc | ||
|   | 3d985688e4 | ||
|   | 17ea2631cd | ||
|   | b749910e6c | ||
|   | eff36caea8 | ||
|   | 6ff092f140 | ||
|   | 28bb36e53d | ||
|   | 4a091bbd8a | ||
|   | e99a6b813e | ||
|   | b9e5302f27 | ||
|   | dd7b6aef39 | ||
|   | 910b8b6a69 | ||
|   | c3207e215f | ||
|   | f83be11b85 | ||
|   | 45bce1062a | ||
|   | 8cb344bf3c | ||
|   | fcc4518cdc | ||
|   | c84839eb91 | ||
|   | 1f878aee69 | ||
|   | 84fd4686e2 | ||
|   | ede9fb4fcc | ||
|   | 723aef71e8 | ||
|   | 48964a911e | ||
|   | 6a35cb60fd | ||
|   | 1e51c3a832 | ||
|   | 205dda2b39 | ||
|   | 1c18d19da0 | ||
|   | 645729e943 | ||
|   | f425a25c98 | ||
|   | aaace2e802 | ||
|   | 3f16d9fbc9 | ||
|   | 3afc57bab8 | 
| @@ -12,3 +12,4 @@ depcomp | ||||
| config.guess | ||||
| config.sub | ||||
| ltmain.sh | ||||
| libcurl.pc | ||||
|   | ||||
							
								
								
									
										807
									
								
								CHANGES
									
									
									
									
									
								
							
							
						
						
									
										807
									
								
								CHANGES
									
									
									
									
									
								
							| @@ -6,6 +6,808 @@ | ||||
|  | ||||
|                                   Changelog | ||||
|  | ||||
| Daniel (16 March 2006) | ||||
| - Tor Arntsen provided a RPM spec file for AIX Toolbox, that now is included | ||||
|   in the release archive. | ||||
|  | ||||
| Daniel (14 March 2006) | ||||
| - David McCreedy fixed: | ||||
|  | ||||
|   a bad SSL error message when OpenSSL certificates are verified fine. | ||||
|  | ||||
|   a missing return code assignment in the FTP code | ||||
|  | ||||
| Daniel (7 March 2006) | ||||
| - Markus Koetter filed debian bug report #355715 which identified a problem | ||||
|   with the multi interface and multi-part formposts. The fix from February | ||||
|   22nd could make the Curl_done() function get called twice on the same | ||||
|   connection and it was not designed for that and thus tried to call free() on | ||||
|   an already freed memory area! | ||||
|  | ||||
| - Peter Heuchert made sure the CURLFTPSSL_CONTROL setting for CURLOPT_FTP_SSL | ||||
|   is used properly. | ||||
|  | ||||
| Daniel (6 March 2006) | ||||
| - Lots of users on Windows have reported getting the "SSL: couldn't set | ||||
|   callback" error message so I've now made the setting of that callback not be | ||||
|   as critical as before. The function is only used for additional loggging/ | ||||
|   trace anyway so a failure just means slightly less data. It should still be | ||||
|   able to proceed and connect fine to the server. | ||||
|  | ||||
| Daniel (4 March 2006) | ||||
| - Thomas Klausner provided a patch written by Todd Vierling in bug report | ||||
|   #1442471 that fixes a build problem on Interix. | ||||
|  | ||||
| Daniel (2 March 2006) | ||||
| - FTP upload without a file name part in the URL now causes | ||||
|   curl_easy_perform() to return CURLE_URL_MALFORMAT. Previously it allowed the | ||||
|   upload but named the file "(nil)" (without the quotes). Test case 524 | ||||
|   verifies. | ||||
|  | ||||
| - Added a check for getprotobyname in configure so that it'll be used, thanks | ||||
|   to Gisle Vanem's change the other day. | ||||
|  | ||||
| Daniel (28 February 2006) | ||||
| - Dan Fandrich prevented curl from getting stuck in an endless loop in case we | ||||
|   are out of file handles very early in curl's code where it makes sure that | ||||
|   0, 1 and 2 aren't gonna be used by the lib for transfers. | ||||
|  | ||||
| Daniel (27 February 2006) | ||||
| - Marty Kuhrt pointed out that there were two VMS-specific files missing in | ||||
|   the release archive. | ||||
|  | ||||
| Version 7.15.2 (27 February 2006) | ||||
|  | ||||
| Daniel (22 February 2006) | ||||
| - Lots of work and analysis by "xbx___" in bug #1431750 | ||||
|   (http://curl.haxx.se/bug/view.cgi?id=1431750) helped me identify and fix two | ||||
|   different but related bugs: | ||||
|  | ||||
|   1) Removing an easy handle from a multi handle before the transfer is done | ||||
|      could leave a connection in the connection cache for that handle that is | ||||
|      in a state that isn't suitable for re-use. A subsequent re-use could then | ||||
|      read from a NULL pointer and segfault. | ||||
|  | ||||
|   2) When an easy handle was removed from the multi handle, there could be an | ||||
|      outstanding c-ares DNS name resolve request. When the response arrived, | ||||
|      it caused havoc since the connection struct it "belonged" to could've | ||||
|      been freed already. | ||||
|  | ||||
|   Now Curl_done() is called when an easy handle is removed from a multi handle | ||||
|   pre-maturely (that is, before the transfer was complteted). Curl_done() also | ||||
|   makes sure to cancel all (if any) outstanding c-ares requests. | ||||
|  | ||||
| Daniel (21 February 2006) | ||||
| - Peter Su added support for SOCKS4 proxies. Enable this by setting the proxy | ||||
|   type to the already provided type CURLPROXY_SOCKS4. | ||||
|  | ||||
|   I added a --socks4 option that works like the current --socks5 option but | ||||
|   instead use the socks4 protocol. | ||||
|  | ||||
| Daniel (20 February 2006) | ||||
| - Shmulik Regev fixed an issue with multi-pass authentication and compressed | ||||
|   content when libcurl didn't honor the internal ignorebody flag. | ||||
|  | ||||
| Daniel (18 February 2006) | ||||
| - Ulf H<>rnhammar fixed a format string (printf style) problem in the Negotiate | ||||
|   code. It should however not be the cause of any troubles. He also fixed a | ||||
|   few similar problems in the HTTP test server code. | ||||
|  | ||||
| Daniel (17 February 2006) | ||||
| - Shmulik Regev provided a fix for the DNS cache when using short life times, | ||||
|   as previously it could be holding on to old cached entries longer than | ||||
|   requested. | ||||
|  | ||||
| Daniel (11 February 2006) | ||||
| - Karl Moerder added the CURLOPT_CONNECT_ONLY and CURLINFO_LASTSOCKET options | ||||
|   that an app can use to let libcurl only connect to a remote host and then | ||||
|   extract the socket from libcurl. libcurl will then not attempt to do any | ||||
|   transfer at all after the connect is done. | ||||
|  | ||||
| - Kent Boortz improved the configure check for GnuTLS to properly set LIBS | ||||
|   instead of LDFLAGS. | ||||
|  | ||||
| Daniel (8 February 2006) | ||||
| - Philippe Vaucher provided a brilliant piece of test code that show a problem | ||||
|   with re-used FTP connections. If the second request on the same connection | ||||
|   was set not to fetch a "body", libcurl could get confused and consider it an | ||||
|   attempt to use a dead connection and would go acting mighty strange. | ||||
|  | ||||
| Daniel (2 February 2006) | ||||
| - Make --limit-rate [num] mean bytes. It used to be that but it broke in my | ||||
|   change done in November 2005. | ||||
|  | ||||
| Daniel (30 January 2006) | ||||
| - Added CURLOPT_LOCALPORT and CURLOPT_LOCALPORTRANGE to libcurl. Set with the | ||||
|   curl tool with --local-port. Plain and simply set the range of ports to bind | ||||
|   the local end of connections to. Implemented on to popular demand. | ||||
|  | ||||
| - Based on an error report by Philippe Vaucher, we no longer count a retried | ||||
|   connection setup as a follow-redirect. It turns out 1) this fails when a FTP | ||||
|   connection is re-setup and 2) it does make the max-redirs counter behave | ||||
|   wrong. | ||||
|  | ||||
| Daniel (24 January 2006) | ||||
| - Michal Marek provided a patch for FTP that makes libcurl continue to try | ||||
|   PASV even after EPSV returned a positive response code, if libcurl failed to | ||||
|   connect to the port number the EPSV response said. Obviously some people are | ||||
|   going through protocol-sensitive firewalls (or similar) that don't | ||||
|   understand EPSV and then they don't allow the second connection unless PASV | ||||
|   was used. This also called for a minor fix of test case 238. | ||||
|  | ||||
| Daniel (20 January 2006) | ||||
| - Duane Cathey was one of our friends who reported that curl -P [IP] | ||||
|   (CURLOPT_FTPPORT) didn't work for ipv6-enabed curls if the IP wasn't a | ||||
|   "native" IP while it works fine for ipv6-disabled builds! | ||||
|  | ||||
|   In the process of fixing this, I removed the support for LPRT since I can't | ||||
|   think of many reasons to keep doing it and asking on the mailing list didn't | ||||
|   reveal anyone else that could either. The code that sends EPRT and PORT is | ||||
|   now also a lot simpler than before (IMHO). | ||||
|  | ||||
| Daniel (19 January 2006) | ||||
| - Jon Turner pointed out that doing -P [hostname] (CURLOPT_FTPPORT) with curl | ||||
|   (built ipv4-only) didn't work. | ||||
|  | ||||
| Daniel (18 January 2006) | ||||
| - As reported in bug #1408742 (http://curl.haxx.se/bug/view.cgi?id=1408742), | ||||
|   the configure script complained about a missing "missing" script if you ran | ||||
|   configure within a path whose name included one or more spaces. This is due | ||||
|   to a flaw in automake (1.9.6 and earlier). I've now worked around it by | ||||
|   including an "overloaded" version of the AM_MISSING_HAS_RUN script that'll | ||||
|   be used instead of the one automake ships with. This kludge needs to be | ||||
|   removed once we get an automake version with this problem corrected. | ||||
|   Possibly we'll then need to convert this into a kludge depending on what | ||||
|   automake version that is used and that is gonna be painful and I don't even | ||||
|   want to think about that now...! | ||||
|  | ||||
| Daniel (17 January 2006) | ||||
| - David Shaw: Here is the latest libcurl.m4 autoconf tests. It is updated with | ||||
|   the latest features and protocols that libcurl supports and has a minor fix | ||||
|   to better deal with the obscure case where someone has more than one libcurl | ||||
|   installed at the same time. | ||||
|  | ||||
| Daniel (16 January 2006) | ||||
| - David Shaw finally removed all traces of Gopher and we are now officially | ||||
|   not supporting it. It hasn't been functioning for years anyway, so this is | ||||
|   just finally stating what already was true. And a cleanup at the same time. | ||||
|  | ||||
| - Bryan Henderson turned the 'initialized' variable for curl_global_init() | ||||
|   into a counter, and thus you can now do multiple curl_global_init() and you | ||||
|   are then supposed to do the same amount of calls to curl_global_cleanup(). | ||||
|   Bryan has also updated the docs accordingly. | ||||
|  | ||||
| Daniel (13 January 2006) | ||||
| - Andrew Benham fixed a race condition in the test suite that could cause the | ||||
|   test script to kill all processes in the current process group! | ||||
|  | ||||
| Daniel (12 January 2006) | ||||
| - Michael Jahn: | ||||
|  | ||||
|   Fixed FTP_SKIP_PASV_IP and FTP_USE_EPSV to "do right" when used on FTP thru | ||||
|   HTTP proxy. | ||||
|  | ||||
|   Fixed PROXYTUNNEL to work fine when you do ftp through a proxy.  It would | ||||
|   previously overwrite internal memory and cause unpredicted behaviour! | ||||
|  | ||||
| Daniel (11 January 2006) | ||||
| - I decided to document the "secret option" here now, as I've received *NO* | ||||
|   feedback at all on my mailing list requests from November 2005: | ||||
|  | ||||
|   I'm looking for feedback and comments. I added some experimental code the | ||||
|   other day, that allows a libcurl user to select what method libcurl should | ||||
|   use to reach a file on a FTP(S) server. | ||||
|  | ||||
|   This functionality is available in CVS code and in recent daily snapshots. | ||||
|  | ||||
|   Let me explain... | ||||
|  | ||||
|   The current name for the option is CURLOPT_FTP_FILEMETHOD (--ftp-method for | ||||
|   the command line tool) and you set it to a long (there are currenly no | ||||
|   defines for the argument values, just plain numericals). You can set three | ||||
|   different "methods" that do this: | ||||
|  | ||||
|   1 multicwd - like today, curl will do a single CWD operation for each path | ||||
|            part in the given URL. For deep hierarchies this means very many | ||||
|            commands. This is how RFC1738 says it should be done. This is the | ||||
|            default. | ||||
|  | ||||
|   2 nocwd - no CWD at all is done, curl will do SIZE, RETR, STOR etc and give | ||||
|            a full path to the server. | ||||
|  | ||||
|   3 singlecwd - make one CWD with the full target directory and then operate | ||||
|             on the file "normally". | ||||
|  | ||||
|   (With the command line tool you do --ftp-method [METHOD], where [METHOD] is | ||||
|   one of "multicwd", "nocwd" or "singlecwd".) | ||||
|  | ||||
|   What feedback I'm interested in: | ||||
|  | ||||
|   1 - Do they work at all? Do you find servers where one of these don't work? | ||||
|  | ||||
|   2 - What would proper names for the option and its arguments be, if we | ||||
|       consider this feature good enough to get included and documented in | ||||
|       upcoming releases? | ||||
|  | ||||
|   3 - Should we make libcurl able to "walk through" these options in case of | ||||
|       (path related) failures, or should it fail and let the user redo any | ||||
|       possible retries? | ||||
|  | ||||
|   (This option is not documented in any man page just yet since I'm not sure | ||||
|   these names will be used or if the functionality will end up exactly like | ||||
|   this.  And for the same reasons we have no test cases for these yet.) | ||||
|  | ||||
| Daniel (10 January 2006) | ||||
| - When using a bad path over FTP, as in when libcurl couldn't CWD into all | ||||
|   given subdirs, libcurl would still "remember" the full path as if it is the | ||||
|   current directory libcurl is in so that the next curl_easy_perform() would | ||||
|   get really confused if it tried the same path again - as it would not issue | ||||
|   any CWD commands at all, assuming it is already in the "proper" dir. | ||||
|  | ||||
|   Starting now, a failed CWD command sets a flag that prevents the path to be | ||||
|   "remembered" after returning. | ||||
|  | ||||
| Daniel (7 January 2006) | ||||
| - Michael Jahn fixed so that the second CONNECT when doing FTP over a HTTP | ||||
|   proxy actually used a new connection and not sent the second request on the | ||||
|   first socket! | ||||
|  | ||||
| Daniel (6 January 2006) | ||||
| - Alexander Lazic made the buildconf run the buildconf in the ares dir if that | ||||
|   is present instead of trying to mimic that script in curl's buildconf | ||||
|   script. | ||||
|  | ||||
| Daniel (3 January 2006) | ||||
| - Andres Garcia made the TFTP test server build with mingw. | ||||
|  | ||||
| Daniel (16 December 2005) | ||||
| - Jean Jacques Drouin pointed out that you could only have a user name or | ||||
|   password of 127 bytes or less embedded in a URL, where actually the code | ||||
|   uses a 255 byte buffer for it! Modified now to use the full buffer size. | ||||
|  | ||||
| Daniel (12 December 2005) | ||||
| - Dov Murik corrected the HTTP_ONLY define to disable the TFTP support properly | ||||
|  | ||||
| Version 7.15.1 (7 December 2005) | ||||
|  | ||||
| Daniel (6 December 2005) | ||||
| - Full text here: http://curl.haxx.se/docs/adv_20051207.html Pointed out by | ||||
|   Stefan Esser. | ||||
|  | ||||
|   VULNERABILITY | ||||
|  | ||||
|   libcurl's URL parser function can overflow a malloced buffer in two ways, if | ||||
|   given a too long URL. | ||||
|  | ||||
|   These overflows happen if you | ||||
|   | ||||
|   1 - pass in a URL with no protocol (like "http://") prefix, using no slash | ||||
|       and the string is 256 bytes or longer. This leads to a single zero byte | ||||
|       overflow of the malloced buffer. | ||||
|  | ||||
|   2 - pass in a URL with only a question mark as separator (no slash) between | ||||
|       the host and the query part of the URL. This leads to a single zero byte | ||||
|       overflow of the malloced buffer. | ||||
|  | ||||
|   Both overflows can be made with the same input string, leading to two single | ||||
|   zero byte overwrites. | ||||
|  | ||||
|   The affected flaw cannot be triggered by a redirect, but the long URL must | ||||
|   be passed in "directly" to libcurl. It makes this a "local" problem. Of | ||||
|   course, lots of programs may still pass in user-provided URLs to libcurl | ||||
|   without doing much syntax checking of their own, allowing a user to exploit | ||||
|   this vulnerability. | ||||
|  | ||||
|   There is no known exploit at the time of this writing. | ||||
|  | ||||
|  | ||||
| Daniel (2 December 2005) | ||||
| - Jamie Newton pointed out that libcurl's file:// code would close() a zero | ||||
|   file descriptor if given a non-existing file. | ||||
|  | ||||
| Daniel (24 November 2005) | ||||
| - Doug Kaufman provided a set of patches to make curl build fine on DJGPP | ||||
|   again using configure. | ||||
|  | ||||
| - Yang Tse provided a whole series of patches to clear up compiler warnings on | ||||
|   MSVC 6. | ||||
|  | ||||
| Daniel (17 November 2005) | ||||
| - I extended a patch from David Shaw to make libcurl _always_ provide an error | ||||
|   string in the given error buffer to address the flaw mention on 21 sep 2005. | ||||
|  | ||||
| Daniel (16 November 2005) | ||||
| - Applied Albert Chin's patch that makes the libcurl.pc pkgconfig file get | ||||
|   installed on 'make install' time. | ||||
|  | ||||
| Daniel (14 November 2005) | ||||
| - Quagmire reported that he needed to raise a NTLM buffer for SSPI to work | ||||
|   properly for a case, and so we did. We raised it even for non-SSPI builds | ||||
|   but it should not do any harm. http://curl.haxx.se/bug/view.cgi?id=1356715 | ||||
|  | ||||
| - Jan Kunder's debian bug report | ||||
|   http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=338680 identified a weird | ||||
|   error message for when you try to upload a file and the requested directory | ||||
|   doesn't exist on the target server. | ||||
|  | ||||
| - Yang Tse fixed compiler warnings in lib/ssluse.c with OpenSSL 0.9.8 and in | ||||
|   lib/memdebug.h that showed up in his msvc builds. | ||||
|  | ||||
| Daniel (13 November 2005) | ||||
| - Debian bug report 338681 by Jan Kunder: make curl better detect and report | ||||
|   bad limit-rate units: | ||||
|   http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=338681 Now curl will return | ||||
|   error if a bad unit is used. | ||||
|  | ||||
| - Thanks to this nice summary of poll() implementations: | ||||
|   http://www.greenend.org.uk/rjk/2001/06/poll.html and further tests by Eugene | ||||
|   Kotlyarov, we now know that cygwin's poll returns only POLLHUP on remote | ||||
|   connectin closure so we check for that case (too) and re-enable poll for | ||||
|   cygwin builds. | ||||
|  | ||||
| Daniel (12 November 2005) | ||||
| - Eugene Kotlyarov found out that cygwin's poll() function isn't doing things | ||||
|   right: http://curl.haxx.se/mail/archive-2005-11/0045.html so we now disable | ||||
|   poll() and use select() on cygwin too (we already do the same choice on Mac | ||||
|   OS X) | ||||
|  | ||||
| - Dima Barsky patched problem #1348930: the GnuTLS code completely ignored | ||||
|   client certificates! (http://curl.haxx.se/bug/view.cgi?id=1348930). | ||||
|  | ||||
| Daniel (10 November 2005) | ||||
| - David Lang fixed IPv6 support for TFTP! | ||||
|  | ||||
| - Introducing range stepping to the curl globbing support. Now you can specify | ||||
|   step counter by adding :[num] within the brackets when specifying a range: | ||||
|  | ||||
|    [1-100:10] | ||||
|    [a-z:2] | ||||
|  | ||||
|   If no step counter is set, it defaults to 1 as before: | ||||
|  | ||||
|    [1-100] | ||||
|    [d-h] | ||||
|  | ||||
| Daniel (8 November 2005) | ||||
| - Removed the use of AI_CANONNAME in the IPv6-enabled resolver functions since | ||||
|   we really have no use for reverse lookups of the address. | ||||
|  | ||||
|   I truly hope these are the last reverse lookups we had lingering in the | ||||
|   code! | ||||
|  | ||||
| - Dmitry Bartsevich discovered some issues in compatibilty of SSPI-enabled | ||||
|   version of libcurl with different Windows versions. Current version of | ||||
|   libcurl imports SSPI functions from secur32.dll. However, under Windows NT | ||||
|   4.0 these functions are located in security.dll, under Windows 9x - in | ||||
|   secur32.dll and Windows 2000 and XP contains both these DLLs (security.dll | ||||
|   just forwards calls to secur32.dll). | ||||
|  | ||||
|   Dmitry's patch loads proper library dynamically depending on Windows | ||||
|   version. Function InitSecurityInterface() is used to obtain pointers to all | ||||
|   of SSPI function in one structure. | ||||
|  | ||||
| Daniel (31 October 2005) | ||||
| - Vilmos Nebehaj improved libcurl's LDAP abilities: | ||||
|  | ||||
|   The LDAP code in libcurl can't handle LDAP servers of LDAPv3 nor binary | ||||
|   attributes in LDAP objects. So, I made a quick patch to address these | ||||
|   problems. | ||||
|  | ||||
|   The solution is simple: if we connect to an LDAP server, first try LDAPv3 | ||||
|   (which is the preferred protocol as of now) and then fall back to LDAPv2. | ||||
|   In case of binary attributes, we first convert them to base64, just like the | ||||
|   openldap client does. It uses ldap_get_values_len() instead of | ||||
|   ldap_get_values() to be able to retrieve binary attributes correctly. I | ||||
|   defined the necessary LDAP macros in lib/ldap.c to be able to compile | ||||
|   libcurl without the presence of libldap | ||||
|  | ||||
| Daniel (27 October 2005) | ||||
| - Nis Jorgensen filed bug report #1338648 | ||||
|   (http://curl.haxx.se/bug/view.cgi?id=1338648) which really is more of a | ||||
|   feature request, but anyway. It pointed out that --max-redirs did not allow | ||||
|   it to be set to 0, which then would return an error code on the first | ||||
|   Location: found. Based on Nis' patch, now libcurl supports CURLOPT_MAXREDIRS | ||||
|   set to 0, or -1 for infinity. Added test case 274 to verify. | ||||
|  | ||||
| - tommink[at]post.pl reported in bug report #1337723 | ||||
|   (http://curl.haxx.se/bug/view.cgi?id=1337723) that curl could not upload | ||||
|   binary data from stdin on Windows if the data contained control-Z (hex 1a) | ||||
|   since that is treated as end-of-file when read in text mode. Gisle Vanem | ||||
|   pointed out the fix, and I made both -T and --data-binary take advantage of | ||||
|   it. | ||||
|  | ||||
| - Jaz Fresh pointed out that if you used "-r [number]" as was wrongly described | ||||
|   in the man page, curl would send an invalid HTTP Range: header. The correct | ||||
|   way would be to use "-r [number]-" or even "-r -[number]". Starting now, | ||||
|   curl will warn if this is discovered, and automatically append a dash to the | ||||
|   range before passing it to libcurl. | ||||
|  | ||||
| Daniel (25 October 2005) | ||||
| - Amol Pattekar reported a bug with great detail and a fine example in bug | ||||
|   #1326306 (http://curl.haxx.se/bug/view.cgi?id=1326306). When using the multi | ||||
|   interface and connecting to a host with multiple IP addresses, and one of | ||||
|   the addresses fails to connect (the server must exist and respond, just not | ||||
|   accept connections) libcurl leaks a socket descriptor. Thanks to the fine | ||||
|   report, I could find and fix this. | ||||
|  | ||||
| Daniel (22 October 2005) | ||||
| - Dima Barsky reported a problem with GnuTLS-enabled libcurl in bug report | ||||
|   #1334338 (http://curl.haxx.se/bug/view.cgi?id=1334338). When reading an SSL | ||||
|   stream from a server and the server requests a "rehandshake", the current | ||||
|   code simply returns this as an error. I have no good way to test this, but | ||||
|   I've added a crude attempt of dealing with this situation slightly better - | ||||
|   it makes a blocking handshake if this happens. Done like this because fixing | ||||
|   this the "proper" way (that would handshake asynchronously) will require | ||||
|   quite some work and I really need a good way to test this to do such a | ||||
|   change. | ||||
|  | ||||
| Daniel (21 October 2005) | ||||
| - "Ofer" reported a problem when libcurl re-used a connection and failed to do | ||||
|   it, it could then accidentally actually crash. Presumably, this concerns FTP | ||||
|   connections.  http://curl.haxx.se/bug/view.cgi?id=1330310 | ||||
|  | ||||
| - Temprimus improved the MSVC makefile so that the static debug SSL libs are | ||||
|   linked to the executable and not to the libcurld.lib | ||||
|   http://curl.haxx.se/bug/view.cgi?id=1326676 | ||||
|  | ||||
| - Bradford Bruce made the windows resolver code properly return | ||||
|   CURLE_COULDNT_RESOLVE_PROXY and CURLE_COULDNT_RESOLVE_HOST on resolving | ||||
|   errors (as documented). | ||||
|  | ||||
| Daniel (20 October 2005) | ||||
| - Dave Dribin made libcurl understand and handle cases when the server | ||||
|   (wrongly) sends *two* WWW-Authenticate headers for Digest. While this should | ||||
|   never happen in a sane world, libcurl previously got into an infinite loop | ||||
|   when this occurred. Dave added test 273 to verify this. | ||||
|  | ||||
| - Temprimus improved the MSVC makefile: "makes a build option available so if | ||||
|   you set rtlibcfg=static for the make, then it would build with /MT. The | ||||
|   default behaviour is /MD (the original)." | ||||
|   http://curl.haxx.se/bug/view.cgi?id=1326665 | ||||
|  | ||||
| Daniel (14 October 2005) | ||||
| - Reverted the LIBCURL_VERSION_NUM change from October 6. As Dave Dribin | ||||
|   reported, the define is used by the configure script and is assumed to use | ||||
|   the 0xYYXXZZ format. This made "curl-config --vernum" fail in the 7.15.0 | ||||
|   release version. | ||||
|  | ||||
| Version 7.15.0 (13 October 2005) | ||||
|  | ||||
| Daniel (12 October 2005) | ||||
| - Michael Sutton of iDEFENSE reported and I fixed a securitfy flaw in the NTLM | ||||
|   code that would overflow a buffer if given a too long user name or domain | ||||
|   name. This would happen if you enable NTLM authentication and either | ||||
|  | ||||
|   A - pass in a user name and domain name to libcurl that together are longer | ||||
|       than 192 bytes | ||||
|  | ||||
|   B - allow (lib)curl to follow HTTP "redirects" (Location: and the | ||||
|       appropriate HTTP 30x response code) and the new URL contains a URL with | ||||
|       a user name and domain name that together are longer than 192 bytes | ||||
|  | ||||
|   See http://curl.haxx.se/docs/security.html for further details and updates | ||||
|  | ||||
| Daniel (5 October 2005) | ||||
| - Darryl House reported a problem with using -z to download files from FTP. | ||||
|   It turned out that if the given time stamp was exact the same as the remote | ||||
|   time stamp, the file would still wrongly be downloaded. Added test case 272 | ||||
|   to verify. | ||||
|  | ||||
| Daniel (4 October 2005) | ||||
| - Domenico Andreoli fixed a man page malformat and removed odd (0xa0) bytes | ||||
|   from the configure script. | ||||
|  | ||||
| - Michael Wallner reported that the date parser had wrong offset stored for | ||||
|   the MEST and CEST time zones. | ||||
|  | ||||
| Daniel (27 September 2005) | ||||
| - David Yan filed bug #1299181 (http://curl.haxx.se/bug/view.cgi?id=1299181) | ||||
|   that identified a silly problem with Content-Range: headers with the 'bytes' | ||||
|   keyword written in a different case than all lowercase! It would cause a | ||||
|   segfault! | ||||
|  | ||||
| - TJ Saunders of the proftpd project identified and pointed out problems with | ||||
|   the modified FTPS negotiation change of August 19 2005. Thus, we revert the | ||||
|   change back to pre-7.14.1 status. | ||||
|  | ||||
| Daniel (21 September 2005) | ||||
| - Fixed "cut off" sentence in the libcurl-tutorial man page: | ||||
|   http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=329305 | ||||
|  | ||||
| - Clarified in the curl_easy_setopt man page what the default | ||||
|   CURLOPT_WRITEFUNCTION and CURLOPT_WRITEDATA mean: | ||||
|   http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=329311 | ||||
|  | ||||
| - Clarified in the curl_easy_setopt man page that CURLOPT_ERRORBUFFER | ||||
|   sometimes doesn't fill in the buffer even though it is supposed to: | ||||
|   http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=329313 | ||||
|  | ||||
| - When CURLE_URL_MALFORMAT is returned due to a missing URL, it now has an | ||||
|   error string set. | ||||
|  | ||||
| Daniel (19 September 2005) | ||||
| - Dmitry Bartsevich made the SSPI support work on Windows 9x as well. | ||||
|  | ||||
| Daniel (15 September 2005) | ||||
| - Added a TFTP server to the test suite and made the test suite capable of | ||||
|   using it. | ||||
|  | ||||
| Daniel (7 September 2005) | ||||
| - Ben Madsen's detailed reports that funnily enough only occurred with certain | ||||
|   glibc versions turned out to be curl using an already closed file handle | ||||
|   during certain conditions (like when saving FTP server "headers"). | ||||
|  | ||||
| - Scott Davis helped me track down a problem in the test HTTP server that made | ||||
|   test case 56 wrongly fail at times. It turned out it was due to the server | ||||
|   finding the end of a chunked-encoded POST too early. | ||||
|  | ||||
| Daniel (6 September 2005) | ||||
| - Now curl warns if an unknown variable is used in the -w/--writeout argument. | ||||
|  | ||||
| Daniel (4 September 2005) | ||||
| - I applied Nicolas Fran<61>ois' man page patch he posted to the Debian bug | ||||
|   tracker. It corrected two lines that started with apostrophes, which isn't | ||||
|   legal nroff format. http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=326511 | ||||
|  | ||||
| - Added --ftp-skip-pasv-ip to the command line tool, that sets the new | ||||
|   CURLOPT_FTP_SKIP_PASV_IP option. It makes libcurl re-use the control | ||||
|   connection's IP address when setting up the data connection instead of | ||||
|   extractting the IP address from the PASV response. It has turned out this | ||||
|   feature is frequently needed by people to circumvent silly servers and silly | ||||
|   firewalls, especially when FTPS is used and the PASV command-response is | ||||
|   sent encrtyped. | ||||
|  | ||||
|   Sponsored by CU*Answers | ||||
|  | ||||
| Daniel (1 September 2005) | ||||
| - John Kelly added TFTP support to libcurl. A bunch of new error codes was | ||||
|   added. TODO: add them to docs. add TFTP server to test suite. add TFTP to | ||||
|   list of protocols whereever those are mentioned. | ||||
|  | ||||
| Version 7.14.1 (1 September 2005) | ||||
|  | ||||
| Daniel (29 August 2005) | ||||
| - Kevin Lussier pointed out a problem with curllib.dsp and how to fix it. | ||||
|  | ||||
| - Igor Polyakov fixed a rather nasty problem with the threaded name resolver | ||||
|   for Windows, that could lead to an Access Violation when the multi interface | ||||
|   was used due to an issue with how the resolver thread was and was not | ||||
|   terminated. | ||||
|  | ||||
| - Simon Josefsson brought a patch that allows curl to get built to use GNU GSS | ||||
|   instead of MIT/Heimdal for GSS capabilities. | ||||
|  | ||||
| Daniel (24 August 2005) | ||||
| - Toby Peterson added CURLOPT_IGNORE_CONTENT_LENGTH to the library, accessible | ||||
|   from the command line tool with --ignore-content-length. This will make it | ||||
|   easier to download files from Apache 1.x (and similar) servers that are | ||||
|   still having problems serving files larger than 2 or 4 GB. When this option | ||||
|   is enabled, curl will simply have to wait for the server to close the | ||||
|   connection to signal end of transfer. I wrote test case 269 that runs a | ||||
|   simple test to verify that this works. | ||||
|  | ||||
| - (Trying hard to exclude emotions now.) valgrind version 3 suddenly renamed | ||||
|   the --logfile command line option to --log-file, and thus the test script | ||||
|   valgrind autodetection now has yet another version check to do and then it | ||||
|   alters the valgrind command line accordingly. | ||||
|  | ||||
| - Fixed CA cert verification using GnuTLS with the default bundle, which | ||||
|   previously failed due to GnuTLS not allowing x509 v1 CA certs by default. | ||||
|   Ralph Mitchell reported. | ||||
|  | ||||
| Daniel (19 August 2005) | ||||
| - Norbert Novotny had problems with FTPS and he helped me work out a patch | ||||
|   that made curl run fine in his end. The key was to make sure we do the | ||||
|   SSL/TLS negotiation immediately after the TCP connect is done and not after | ||||
|   a few other commands have been sent like we did previously. I don't consider | ||||
|   this change necessary to obey the standards, I think this server is pickier | ||||
|   than what the specs allow it to be, but I can't see how this modified | ||||
|   libcurl code can add any problems to those who are interpreting the | ||||
|   standards more liberally. | ||||
|  | ||||
| Daniel (17 August 2005) | ||||
| - Jeff Pohlmeyer found out that if you ask libcurl to load a cookiefile (with | ||||
|   CURLOPT_COOKIEFILE), add a cookie (with CURLOPT_COOKIELIST), tell it to | ||||
|   write the result to a given cookie jar and then never actually call | ||||
|   curl_easy_perform() - the given file(s) to read was never read but the | ||||
|   output file was written and thus it caused a "funny" result. | ||||
|  | ||||
| - While doing some tests for the bug above, I noticed that Firefox generates | ||||
|   large numbers (for the expire time) in the cookies.txt file and libcurl | ||||
|   didn't treat them properly. Now it does. | ||||
|  | ||||
| Daniel (15 August 2005) | ||||
| - Added more verbose "warning" messages to the curl client for cases where it | ||||
|   fails to open/read files etc to help users diagnose why it doesn't do what | ||||
|   you'd expect it to. Converted lots of old messages to use the new generic | ||||
|   function I wrote for this purpose. | ||||
|  | ||||
| Daniel (13 August 2005) | ||||
| - James Bursa identified a libcurl HTTP bug and a good way to repeat it. If a | ||||
|   site responds with bad HTTP response that doesn't contain any header at all, | ||||
|   only a response body, and the write callback returns 0 to abort the | ||||
|   transfer, it didn't have any real effect but the write callback would be | ||||
|   called once more anyway. | ||||
|  | ||||
| Daniel (12 August 2005) | ||||
| - Based on Richard Clayton's reports, I found out that using curl -d @filename | ||||
|   when 'filename' was not possible to access made curl use a GET request | ||||
|   instead. | ||||
|  | ||||
| - The time condition illegal syntax warning is now inhibited if -s is used. | ||||
|  | ||||
| Daniel (10 August 2005) | ||||
| - Mario Schroeder found out that one of the debug callbacks calls that regards | ||||
|   SSL data with the CURLINFO_TEXT type claimed that the data was one byte | ||||
|   larger than it actually is, thus falsely telling the application that the | ||||
|   terminating zero was part of the data. | ||||
|  | ||||
| Daniel (9 August 2005) | ||||
| - Christopher R. Palmer fixed the offsets used for date parsings when the time | ||||
|   zone name of a daylight savings time was used. For example, PDT vs PDS. This | ||||
|   flaw was introduced with the new date parser (11 sep 2004 - 7.12.2). | ||||
|   Fortunately, no web server or cookie string etc should be using such time | ||||
|   zone names thus limiting the effect of this bug. | ||||
|  | ||||
| Daniel (8 August 2005) | ||||
| - Jon Grubbs filed bug report #1249962 | ||||
|   (http://curl.haxx.se/bug/view.cgi?id=1249962) which identified a problem | ||||
|   with NTLM on a HTTP proxy if an FTP URL was given. libcurl now properly | ||||
|   switches to pure HTTP internally when an HTTP proxy is used, even for FTP | ||||
|   URLs. The problem would also occur with other multi-pass auth methods. | ||||
|  | ||||
| Daniel (7 August 2005) | ||||
| - When curl is built with GnuTLS, curl-config didn't include "SSL" when | ||||
|   --features was used. | ||||
|  | ||||
| Daniel (28 July 2005) | ||||
| - If any of the options CURLOPT_HTTPGET, CURLOPT_POST and CURLOPT_HTTPPOST is | ||||
|   set to 1, CURLOPT_NOBODY will now automatically be set to 0. | ||||
|  | ||||
| Daniel (27 July 2005) | ||||
| - Dan Fandrich changes over the last week: fixed numerous minor configure | ||||
|   option parsing flaws: --without-gnutls, --without-spnego --without-gssapi | ||||
|   and --without-krb4. Spellfixed several error messages. | ||||
|  | ||||
| - Peteris Krumins added CURLOPT_COOKIELIST and CURLINFO_COOKIELIST, which is a | ||||
|   simple interface to extracting and setting cookies in libcurl's internal | ||||
|   "cookie jar". See the new cookie_interface.c example code. | ||||
|  | ||||
| Daniel (13 July 2005) | ||||
| - Diego Casorran provided patches to make curl build fine on Amiga again. | ||||
|  | ||||
| Daniel (12 July 2005) | ||||
| - Adrian Schuur added trailer support in the chunked encoding stream. The | ||||
|   trailer is then sent to the normal header callback/stream. I wrote up test | ||||
|   case 266 to verify the basic functionality. Do note that test case 34 | ||||
|   contains a flawed chunked encoding stream that still works the same. | ||||
|  | ||||
| Daniel (5 July 2005) | ||||
| - Gisle Vanem came up with a nice little work-around for bug #1230118 | ||||
|   (http://curl.haxx.se/bug/view.cgi?id=1230118). It seems the Windows (MSVC) | ||||
|   libc time functions may return data one hour off if TZ is not set and | ||||
|   automatic DST adjustment is enabled. This made curl_getdate() return wrong | ||||
|   value, and it also concerned internal cookie expirations etc. | ||||
|  | ||||
| Daniel (4 July 2005) | ||||
| - Andrew Bushnell provided enough info for me to tell that we badly needed to | ||||
|   fix the CONNECT authentication code with multi-pass auth methods (such as | ||||
|   NTLM) as it didn't previously properly ignore response-bodies - in fact it | ||||
|   stopped reading after all response headers had been received. This could | ||||
|   lead to libcurl sending the next request and reading the body from the first | ||||
|   request as response to the second request. (I also renamed the function, | ||||
|   which wasn't strictly necessary but...) | ||||
|  | ||||
|   The best fix would to once and for all make the CONNECT code use the | ||||
|   ordinary request sending/receiving code, treating it as any ordinary request | ||||
|   instead of the special-purpose function we have now. It should make it | ||||
|   better for multi-interface too. And possibly lead to less code... | ||||
|  | ||||
|   Added test case 265 for this. It doesn't work as a _really_ good test case | ||||
|   since the test proxy is too stupid, but the test case helps when running the | ||||
|   debugger to verify. | ||||
|  | ||||
| Daniel (30 June 2005) | ||||
| - Dan Fandrich improved the configure script's ability to figure out what kind | ||||
|   of strerror_r() API that is used when cross-compiling. If __GLIB__ is | ||||
|   defined, it assumes the glibc API. If not, it issues a notice as before that | ||||
|   the user needs to manually edit lib/config.h for this. | ||||
|  | ||||
| Daniel (23 June 2005) | ||||
| - David Shaw's fix that unifies proxy string treatment so that a proxy given | ||||
|   with CURLOPT_PROXY can use a http:// prefix and user + password. The user | ||||
|   and password fields are now also URL decoded properly. Test case 264 added | ||||
|   to verify. | ||||
|  | ||||
| Daniel (22 June 2005) | ||||
| - David Shaw updated libcurl.m4 | ||||
|  | ||||
| Daniel (14 June 2005) | ||||
| - Gisle Vanem fixed a potential thread handle leak. Bug report #1216500 | ||||
|   (http://curl.haxx.se/bug/view.cgi?id=1216500).  Comment in | ||||
|   http://curl.haxx.se/mail/lib-2005-06/0059.html | ||||
|  | ||||
| Daniel (13 June 2005) | ||||
| - Made buildconf run libtoolize in the ares dir too (inspired by Tupone's | ||||
|   reverted patch). | ||||
|  | ||||
| Daniel (9 June 2005) | ||||
| - Incorporated Tupone's findtool fix in buildconf (slightly edited) | ||||
|  | ||||
| - Incorporated Tupone's head -n fix in buildconf. | ||||
|  | ||||
| Daniel (8 June 2005) | ||||
| - Reverted Tupone's patch again, it broke numerous autobuilds. Let's apply it | ||||
|   in pieces, one by one and see what we need to adjust to work all over. | ||||
|  | ||||
| Daniel (6 June 2005) | ||||
| - Tupone Alfredo fixed three problems in buildconf: | ||||
|  | ||||
|   1) findtool does look per tool in PATH and think ./perl is the perl | ||||
|   executable, while is just a local directory (I have . in the PATH) | ||||
|  | ||||
|   2) I got several warning for head -1 deprecated in favour of head -n 1 | ||||
|   | ||||
|   3) ares directory is missing some file (missing is missing :-) ) because | ||||
|   automake and friends is not run. | ||||
|  | ||||
| Daniel (3 June 2005) | ||||
| - Added docs/libcurl/getinfo-times, based on feedback from 'Edi': | ||||
|   http://curl.haxx.se/feedback/display.cgi?id=11178325798299&support=yes | ||||
|  | ||||
| - Andres Garcia provided yet another text mode patch for several test cases so | ||||
|   that they do text comparisions better on Windows (newline-wise). | ||||
|  | ||||
| Daniel (1 June 2005) | ||||
| - The configure check for c-ares now adds the cares lib before the other libs, | ||||
|   to make it build fine with mingw. Inspired by Tupone Alfredo's bug report | ||||
|   and patch: http://curl.haxx.se/bug/view.cgi?id=1212940 | ||||
|  | ||||
| Daniel (31 May 2005) | ||||
| - Todd Kulesza reported a flaw in the proxy option, since a numerical IPv6 | ||||
|   address was not possible to use. It is now, but requires it written | ||||
|   RFC2732-style, within brackets - which incidently is how you enter numerical | ||||
|   IPv6 addresses in URLs. Test case 263 added to verify. | ||||
|  | ||||
| Daniel (30 May 2005) | ||||
| - Eric Cooper reported about a problem with HTTP servers that responds with | ||||
|   binary zeroes within the headers. They confused libcurl to do wrong so the | ||||
|   downloaded headers become incomplete. The fix is now verified with test case | ||||
|   262. http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=310948 | ||||
|  | ||||
| Daniel (25 May 2005) | ||||
| - Fixed problems with the test suite, and in particular the FTP test cases | ||||
|   since it previously was failing every now and then in a nonsense manner. | ||||
|  | ||||
| - --trace-time now outputs the full microsecond, all 6 digits. | ||||
|  | ||||
| Daniel (24 May 2005) | ||||
| - Andres Garcia provided a text mode patch for several test cases so that they | ||||
|   do text comparisions better on Windows (newline-wise). | ||||
|  | ||||
| - Any 2xx response (and not just 200) is now considered a fine response to | ||||
|   TYPE, as some servers obviously sends a 226 there. Added test case 261 to | ||||
|   verify. Based on a question/report by Georg Wicherski. | ||||
|  | ||||
| Daniel (20 May 2005) | ||||
| - Improved runtests.pl to allow stdout tests to be mode=text as well, just | ||||
|   as file comparisons already supports. Added this info to the FILEFORMAT | ||||
|   docs. | ||||
|  | ||||
| Daniel (18 May 2005) | ||||
| - John McGowan identified a problem in bug report #1204435 | ||||
|   (http://curl.haxx.se/bug/view.cgi?id=1204435) with malformed URLs like | ||||
|   "http://somehost?data" as it added a slash too much in the request ("GET | ||||
|   /?data/"...). Added test case 260 to verify. | ||||
|  | ||||
| - The configure check for strerror_r() failed to detect the proper API at | ||||
|   times, like on HP-UX 10.20. Then lib/strerror.c badly assumed the glibc | ||||
|   version if the posix define wasn't set (since it _had_ found a strerror_r). | ||||
|  | ||||
| Daniel (16 May 2005) | ||||
| - The gmtime_r() function in HP-UX 10.20 is broken. About 13 test cases fail | ||||
|   due to this. There's now a configure check that attempts to detect the bad | ||||
|   function and not use it on such systems. | ||||
|  | ||||
| Version 7.14.0 (16 May 2005) | ||||
|  | ||||
| @@ -19,8 +821,9 @@ Daniel (12 May 2005) | ||||
| - When doing a second request (after a disconnect) using the same easy handle, | ||||
|   over a proxy that uses NTLM authentication, libcurl failed to use NTLM again | ||||
|   properly (the auth method was accidentally reset to the same as had been set | ||||
|   for host auth, which defaults to Basic). Bug report #1200661 identified the | ||||
|   the problem and the fix. | ||||
|   for host auth, which defaults to Basic). Bug report #1200661 | ||||
|   (http://curl.haxx.se/bug/view.cgi?id=1200661) identified the the problem and | ||||
|   the fix. | ||||
|  | ||||
| - If -z/--time-cond is used with an invalid date syntax, this is no longer | ||||
|   silently discarded. Instead a proper warning message is diplayed that | ||||
|   | ||||
							
								
								
									
										2
									
								
								COPYING
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								COPYING
									
									
									
									
									
								
							| @@ -1,6 +1,6 @@ | ||||
| COPYRIGHT AND PERMISSION NOTICE | ||||
|  | ||||
| Copyright (c) 1996 - 2005, Daniel Stenberg, <daniel@haxx.se>. | ||||
| Copyright (c) 1996 - 2006, Daniel Stenberg, <daniel@haxx.se>. | ||||
|  | ||||
| All rights reserved. | ||||
|  | ||||
|   | ||||
| @@ -31,6 +31,9 @@ bin_SCRIPTS = curl-config | ||||
| SUBDIRS = lib src | ||||
| DIST_SUBDIRS = $(SUBDIRS) tests include packages docs | ||||
|  | ||||
| pkgconfigdir = $(libdir)/pkgconfig | ||||
| pkgconfig_DATA = libcurl.pc | ||||
|  | ||||
| dist-hook: | ||||
| 	rm -rf $(top_builddir)/tests/log | ||||
| 	find $(distdir) -name "*.dist" -exec rm {} \; | ||||
|   | ||||
| @@ -200,9 +200,21 @@ netware: | ||||
| 	$(MAKE) -C lib -f Makefile.netware | ||||
| 	$(MAKE) -C src -f Makefile.netware | ||||
|  | ||||
| netware-ares: | ||||
| 	$(MAKE) -C lib -f Makefile.netware WITH_ARES=1 | ||||
| 	$(MAKE) -C src -f Makefile.netware WITH_ARES=1 | ||||
|  | ||||
| netware-ssl: | ||||
| 	$(MAKE) -C lib -f Makefile.netware SSL=1 | ||||
| 	$(MAKE) -C src -f Makefile.netware SSL=1 | ||||
| 	$(MAKE) -C lib -f Makefile.netware WITH_SSL=1 | ||||
| 	$(MAKE) -C src -f Makefile.netware WITH_SSL=1 | ||||
|  | ||||
| netware-ssl-zlib: | ||||
| 	$(MAKE) -C lib -f Makefile.netware WITH_SSL=1 WITH_ZLIB=1 | ||||
| 	$(MAKE) -C src -f Makefile.netware WITH_SSL=1 WITH_ZLIB=1 | ||||
|  | ||||
| netware-zlib: | ||||
| 	$(MAKE) -C lib -f Makefile.netware WITH_ZLIB=1 | ||||
| 	$(MAKE) -C src -f Makefile.netware WITH_ZLIB=1 | ||||
|  | ||||
| netware-clean: | ||||
| 	$(MAKE) -C lib -f Makefile.netware clean | ||||
|   | ||||
							
								
								
									
										71
									
								
								README
									
									
									
									
									
								
							
							
						
						
									
										71
									
								
								README
									
									
									
									
									
								
							| @@ -26,50 +26,41 @@ CONTACT | ||||
|   If you have problems, questions, ideas or suggestions, please contact us | ||||
|   by posting to a suitable mailing list. See http://curl.haxx.se/mail/ | ||||
|  | ||||
|   Many major contributors to the project are listed in the THANKS document. | ||||
|   All contributors to the project are listed in the THANKS document. | ||||
|  | ||||
| WEB SITE | ||||
|  | ||||
|   Visit the curl web site or mirrors for the latest news: | ||||
|   Visit the curl web site or mirrors for the latest news and downloads: | ||||
|  | ||||
|         Sweden    -- http://curl.haxx.se/ | ||||
|         Australia -- http://curl.planetmirror.com/ | ||||
|         Austria   -- http://curl.gds.tuwien.ac.at/ | ||||
|         Denmark   -- http://curl.cofman.dk/ | ||||
|         Estonia   -- http://curl.wildyou.net/ | ||||
|         France    -- http://curl.mirror.internet.tp/ | ||||
|         Germany   -- http://curl.kgt.org/ | ||||
|         Germany   -- http://curl.mirror.at.stealer.net/ | ||||
|         Germany   -- http://curl.netmirror.org/ | ||||
|         Russia    -- http://curl.tsuren.net/ | ||||
|         Taiwan    -- http://curl.cs.pu.edu.tw/ | ||||
|         Thailand  -- http://curl.siamu.ac.th/ | ||||
|         US (CA)   -- http://curl.mirror.redwire.net/ | ||||
|         US (CA)   -- http://curl.mirrormonster.com/ | ||||
|         US (CA)   -- http://curl.signal42.com/ | ||||
|         US (TX)   -- http://curl.109k.com/ | ||||
|  | ||||
| DOWNLOAD | ||||
|  | ||||
|   The official download mirror sites are: | ||||
|  | ||||
|         Australia -- http://curl.planetmirror.com/download.html | ||||
|         Austria   -- http://curl.gds.tuwien.ac.at/download.html | ||||
|         Estonia   -- http://curl.wildyou.net/download.html | ||||
|         Germany   -- ftp://ftp.fu-berlin.de/pub/unix/network/curl/ | ||||
|         Germany   -- http://curl.mirror.at.stealer.net/download.html | ||||
|         Germany   -- http://curl.netmirror.org/download.html | ||||
|         Germany   -- http://www.mirrorspace.org/curl/ | ||||
|         Hongkong  -- http://www.execve.net/curl/ | ||||
|         Russia    -- http://curl.tsuren.net/download.html | ||||
|         Sweden    -- ftp://ftp.sunet.se/pub/www/utilities/curl/ | ||||
|         Sweden    -- http://cool.haxx.se/curl/ | ||||
|         Taiwan    -- http://curl.cs.pu.edu.tw/download.html | ||||
|         Thailand  -- http://curl.siamu.ac.th/download.html | ||||
|         US (CA)   -- http://curl.mirror.redwire.net/download.html | ||||
|         US (CA)   -- http://curl.mirrormonster.com/download.html | ||||
|         US (CA)   -- http://curl.signal42.com/download.html | ||||
|         US (TX)   -- http://curl.109k.com/download.html | ||||
|         Sweden       http://curl.haxx.se/ | ||||
|         Australia    http://curl.planetmirror.com/ | ||||
|         Austria      http://curl.gds.tuwien.ac.at/ | ||||
|         Denmark      http://curl.cofman.dk/ | ||||
|         France       http://curl.fastmirror.net/ | ||||
|         Germany      http://curl.freemirror.de/ | ||||
|         Germany      http://curl.mirror-server.net/ | ||||
|         Germany      http://curl.mirror.at.stealer.net/ | ||||
|         Germany      http://curl.mirroring.de/ | ||||
|         Germany      http://curl.miscellaneousmirror.org/ | ||||
|         Germany      http://curl.mons-new-media.de/ | ||||
|         Germany      http://curl.storemypix.com/ | ||||
|         Germany      http://curl.triplemind.com/ | ||||
|         Hong Kong    http://curl.hkmirror.org/ | ||||
|         Japan        http://curl.s-lines.net/ | ||||
|         Netherlands  http://curl.nedmirror.nl/ | ||||
|         Russia       http://curl.tsuren.net/ | ||||
|         Taiwan       http://curl.cs.pu.edu.tw/ | ||||
|         Thailand     http://curl.siamu.ac.th/ | ||||
|         US (AZ)      http://curl.islandofpoker.com/ | ||||
|         US (CA)      http://curl.meulie.net/ | ||||
|         US (CA)      http://curl.mirror.redwire.net/ | ||||
|         US (CA)      http://curl.mirrormonster.com/ | ||||
|         US (CA)      http://curl.signal42.com/ | ||||
|         US (FL)      http://curl.hoxt.com/ | ||||
|         US (TX)      http://curl.109k.com/ | ||||
|         US (TX)      http://curl.hostingzero.com/ | ||||
|         US (TX)      http://curl.mirrors.cyberservers.net/ | ||||
|         US (TX)      http://curl.seekmeup.com/ | ||||
|  | ||||
| CVS | ||||
|  | ||||
|   | ||||
| @@ -1,58 +1,40 @@ | ||||
| Curl and libcurl 7.14.0 | ||||
| Curl and libcurl 7.15.3 | ||||
|  | ||||
|  Public curl release number:               88 | ||||
|  Releases counted from the very beginning: 115 | ||||
|  Available command line options:           107 | ||||
|  Available curl_easy_setopt() options:     122 | ||||
|  Public curl release number:               93 | ||||
|  Releases counted from the very beginning: 120 | ||||
|  Available command line options:           112 | ||||
|  Available curl_easy_setopt() options:     129 | ||||
|  Number of public functions in libcurl:    46 | ||||
|  Amount of public web site mirrors:        23 | ||||
|  Number of known libcurl bindings:         31 | ||||
|  Number of contributors:                   437 | ||||
|  Amount of public web site mirrors:        31 | ||||
|  Number of known libcurl bindings:         32 | ||||
|  Number of contributors:                   487 | ||||
|  | ||||
| This release includes the following changes: | ||||
|  | ||||
|  o modified default HTTP request headers | ||||
|  o curl --trace-time added for time stamping trace logs | ||||
|  o curl now respects the SSL_CERT_DIR and SSL_CERT_PATH environment variables | ||||
|  o more search paths for curl's default .curlrc config file check | ||||
|  o GnuTLS support, use configure --with-gnutls. Work on this was sponsored | ||||
|    by The Written Word. | ||||
|  o added docs for --ftp-method and CURLOPT_FTP_FILEMETHOD | ||||
|  | ||||
| This release includes the following bugfixes: | ||||
|  | ||||
|  o uses select() instead of poll() even on Mac OS X 10.4 | ||||
|  o reconnected proxy use with NTLM auth on the same handle | ||||
|  o warns about bad -z date syntax | ||||
|  o docs/THANKS now contains all known contributors | ||||
|  o builds out-of-the-box on (presumably ipv6-enabled) AIX 4.3 hosts | ||||
|  o curl --head could wrongly complain on bad chunked-encoding | ||||
|  o --interface SIGSEGVed on a bad address | ||||
|  o kill the HTTPS server better when stopping the test suite | ||||
|  o builds fine with VS2005 on x64 | ||||
|  o auth fix for HTTP redirects and .netrc usage | ||||
|  o FTP uploads show the progress meter easier | ||||
|  o MSVC makefile fixes for static libcurl builds | ||||
|  o configure fix for static libcurl build on Windows | ||||
|  o --retry-delay | ||||
|  o POST with read callback now uses Expect: 100-continue | ||||
|  o CURLOPT_PORT didn't actually use the set port number | ||||
|  o HTTP 304 response with Content-Length: header | ||||
|  o time-conditioned FTP uploads | ||||
|  o TFTP Packet Buffer Overflow Vulnerability: | ||||
|    http://curl.haxx.se/docs/adv_20060320.html | ||||
|  o properly detecting problems with sending the FTP command USER | ||||
|  o wrong error message shown when certificate verification failed | ||||
|  o multi-part formpost with multi interface crash | ||||
|  o the CURLFTPSSL_CONTROL setting for CURLOPT_FTP_SSL is acknowledged | ||||
|  o "SSL: couldn't set callback" is now treated as a less serious problem | ||||
|  o Interix build fix | ||||
|  o fixed curl "hang" when out of file handles at start | ||||
|  o prevent FTP uploads to URLs with trailing slash | ||||
|  | ||||
| Other curl-related news since the previous public release: | ||||
|  | ||||
|  o http://curl.mirroring.de/ is a new german curl mirror | ||||
|  o pycurl 7.13.2: http://pycurl.sf.net/ | ||||
|  o TclCurl 0.13.2: http://personal1.iddeo.es/andresgarci/tclcurl/english/ | ||||
|  o http://curl.webhosting76.com/ is a new US curl mirror | ||||
|  o http://curl.meulie.net/ is a new Canadian curl mirror | ||||
|  o pycurl-7.15.2 has been released: http://pycurl.sf.net | ||||
|  o http://curl.download.nextag.com/ is a new US curl web mirror! | ||||
|  | ||||
| This release would not have looked like this without help, code, reports and | ||||
| advice from friends like these: | ||||
|  | ||||
|  Christophe Legry, Cory Nelson, Gisle Vanem, Dan Fandrich, Toshiyuki Maezawa, | ||||
|  Olivier, Andres Garcia, Dave Dribin, Alex Suykov, Cory Nelson, Fred New, | ||||
|  Paul Moore, Alexander Zhuravlev, Bryan Henderson, Jeremy Brown, Allan, | ||||
|  Grigory Entin | ||||
|  Gisle Vanem, Dan Fandrich, Thomas Klausner, Todd Vierling, Peter Heuchert, | ||||
|  Markus Koetter, David McCreedy, Tor Arntsen | ||||
|  | ||||
|         Thanks! (and sorry if I forgot to mention someone) | ||||
|   | ||||
							
								
								
									
										40
									
								
								TODO-RELEASE
									
									
									
									
									
								
							
							
						
						
									
										40
									
								
								TODO-RELEASE
									
									
									
									
									
								
							| @@ -1,40 +1,4 @@ | ||||
| Issues not sorted in any particular order. | ||||
|  | ||||
| To get fixed in 7.14.0 (planned release: May/June 2005) | ||||
| To get fixed in 7.15.2 (planned release: Febrary 2006) | ||||
| ====================== | ||||
|  | ||||
|    - Make the tests run better on more platforms. | ||||
|  | ||||
| To get fixed in 7.14.1 (planned release: June 2005) | ||||
| ====================== | ||||
|  | ||||
| 58 - Fix KNOWN_BUGS #19: "FTP 3rd party transfers with the multi interface | ||||
|      doesn't work" | ||||
|  | ||||
| 47 - Peter Sylvester's patch for SRP on the TLS layer | ||||
|      Awaits OpenSSL support for this, no need to support this in libcurl before | ||||
|      there's an OpenSSL release that does it. | ||||
|  | ||||
| To get fixed in 7.15.0 | ||||
| ====================== | ||||
|  | ||||
| 55 - Add a function to the multi interface that gets file descriptors, as an | ||||
|      alternative to the curl_multi_fdset(). This is necessary to allow apps to | ||||
|      properly avoid the FD_SETSIZE problem. | ||||
|  | ||||
| 56 - Make curl_easy_perform() a wrapper-function that simply creates a multi | ||||
|      handle, adds the easy handle to it, runs curl_multi_perform() until the | ||||
|      transfer is done, then detach the easy handle, destroy the multi handle | ||||
|      and return the easy handle's return code. This will thus make everything | ||||
|      internally use and assume the multi interface. The select()-loop should | ||||
|      use the new function from (55). | ||||
|  | ||||
| To get fixed in 7.16.0 | ||||
| ====================== | ||||
|  | ||||
| 57 - Add an interface to libcurl for getting and setting cookies from an easy | ||||
|      handle. One idea: http://curl.haxx.se/mail/lib-2004-12/0195.html the | ||||
|      older idea: http://curl.haxx.se/dev/COOKIES. We need to settle on some | ||||
|      middle ground I guess. | ||||
|  | ||||
| 60 -  | ||||
| 65 -  | ||||
|   | ||||
							
								
								
									
										616
									
								
								acinclude.m4
									
									
									
									
									
								
							
							
						
						
									
										616
									
								
								acinclude.m4
									
									
									
									
									
								
							| @@ -1,3 +1,393 @@ | ||||
| #*************************************************************************** | ||||
| #                                  _   _ ____  _ | ||||
| #  Project                     ___| | | |  _ \| | | ||||
| #                             / __| | | | |_) | | | ||||
| #                            | (__| |_| |  _ <| |___ | ||||
| #                             \___|\___/|_| \_\_____| | ||||
| # | ||||
| # Copyright (C) 1998 - 2005, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
| # | ||||
| # This software is licensed as described in the file COPYING, which | ||||
| # you should have received as part of this distribution. The terms | ||||
| # are also available at http://curl.haxx.se/docs/copyright.html. | ||||
| # | ||||
| # You may opt to use, copy, modify, merge, publish, distribute and/or sell | ||||
| # copies of the Software, and permit persons to whom the Software is | ||||
| # furnished to do so, under the terms of the COPYING file. | ||||
| # | ||||
| # This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||||
| # KIND, either express or implied. | ||||
| # | ||||
| # $Id$ | ||||
| ########################################################################### | ||||
|  | ||||
| dnl CURL_CHECK_HEADER_WINDOWS | ||||
| dnl ------------------------------------------------- | ||||
| dnl Check for compilable and valid windows.h header  | ||||
|  | ||||
| AC_DEFUN([CURL_CHECK_HEADER_WINDOWS], [ | ||||
|   AC_CACHE_CHECK([for windows.h], [ac_cv_header_windows_h], [ | ||||
|     AC_COMPILE_IFELSE([ | ||||
|       AC_LANG_PROGRAM([ | ||||
| #undef inline | ||||
| #ifndef WIN32_LEAN_AND_MEAN | ||||
| #define WIN32_LEAN_AND_MEAN | ||||
| #endif | ||||
| #include <windows.h> | ||||
|       ],[ | ||||
|         int dummy=2*WINVER; | ||||
|       ]) | ||||
|     ],[ | ||||
|       ac_cv_header_windows_h="yes" | ||||
|     ],[ | ||||
|       ac_cv_header_windows_h="no" | ||||
|     ]) | ||||
|   ]) | ||||
|   if test "x$ac_cv_header_windows_h" = "xyes"; then | ||||
|     AC_DEFINE_UNQUOTED(HAVE_WINDOWS_H, 1, | ||||
|       [Define to 1 if you have the windows.h header file.]) | ||||
|     AC_DEFINE_UNQUOTED(WIN32_LEAN_AND_MEAN, 1, | ||||
|       [Define to avoid automatic inclusion of winsock.h]) | ||||
|   fi | ||||
| ]) | ||||
|  | ||||
|  | ||||
| dnl CURL_CHECK_HEADER_WINSOCK | ||||
| dnl ------------------------------------------------- | ||||
| dnl Check for compilable and valid winsock.h header  | ||||
|  | ||||
| AC_DEFUN([CURL_CHECK_HEADER_WINSOCK], [ | ||||
|   AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl | ||||
|   AC_CACHE_CHECK([for winsock.h], [ac_cv_header_winsock_h], [ | ||||
|     AC_COMPILE_IFELSE([ | ||||
|       AC_LANG_PROGRAM([ | ||||
| #undef inline | ||||
| #ifndef WIN32_LEAN_AND_MEAN | ||||
| #define WIN32_LEAN_AND_MEAN | ||||
| #endif | ||||
| #include <windows.h> | ||||
| #include <winsock.h> | ||||
|       ],[ | ||||
|         int dummy=WSACleanup(); | ||||
|       ]) | ||||
|     ],[ | ||||
|       ac_cv_header_winsock_h="yes" | ||||
|     ],[ | ||||
|       ac_cv_header_winsock_h="no" | ||||
|     ]) | ||||
|   ]) | ||||
|   if test "x$ac_cv_header_winsock_h" = "xyes"; then | ||||
|     AC_DEFINE_UNQUOTED(HAVE_WINSOCK_H, 1, | ||||
|       [Define to 1 if you have the winsock.h header file.]) | ||||
|   fi | ||||
| ]) | ||||
|  | ||||
|  | ||||
| dnl CURL_CHECK_HEADER_WINSOCK2 | ||||
| dnl ------------------------------------------------- | ||||
| dnl Check for compilable and valid winsock2.h header  | ||||
|  | ||||
| AC_DEFUN([CURL_CHECK_HEADER_WINSOCK2], [ | ||||
|   AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl | ||||
|   AC_CACHE_CHECK([for winsock2.h], [ac_cv_header_winsock2_h], [ | ||||
|     AC_COMPILE_IFELSE([ | ||||
|       AC_LANG_PROGRAM([ | ||||
| #undef inline | ||||
| #ifndef WIN32_LEAN_AND_MEAN | ||||
| #define WIN32_LEAN_AND_MEAN | ||||
| #endif | ||||
| #include <windows.h> | ||||
| #include <winsock2.h> | ||||
|       ],[ | ||||
|         int dummy=2*IPPROTO_ESP; | ||||
|       ]) | ||||
|     ],[ | ||||
|       ac_cv_header_winsock2_h="yes" | ||||
|     ],[ | ||||
|       ac_cv_header_winsock2_h="no" | ||||
|     ]) | ||||
|   ]) | ||||
|   if test "x$ac_cv_header_winsock2_h" = "xyes"; then | ||||
|     AC_DEFINE_UNQUOTED(HAVE_WINSOCK2_H, 1, | ||||
|       [Define to 1 if you have the winsock2.h header file.]) | ||||
|   fi | ||||
| ]) | ||||
|  | ||||
|  | ||||
| dnl CURL_CHECK_HEADER_WS2TCPIP | ||||
| dnl ------------------------------------------------- | ||||
| dnl Check for compilable and valid ws2tcpip.h header | ||||
|  | ||||
| AC_DEFUN([CURL_CHECK_HEADER_WS2TCPIP], [ | ||||
|   AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl | ||||
|   AC_CACHE_CHECK([for ws2tcpip.h], [ac_cv_header_ws2tcpip_h], [ | ||||
|     AC_COMPILE_IFELSE([ | ||||
|       AC_LANG_PROGRAM([ | ||||
| #undef inline | ||||
| #ifndef WIN32_LEAN_AND_MEAN | ||||
| #define WIN32_LEAN_AND_MEAN | ||||
| #endif | ||||
| #include <windows.h> | ||||
| #include <winsock2.h> | ||||
| #include <ws2tcpip.h> | ||||
|       ],[ | ||||
|         int dummy=2*IP_PKTINFO; | ||||
|       ]) | ||||
|     ],[ | ||||
|       ac_cv_header_ws2tcpip_h="yes" | ||||
|     ],[ | ||||
|       ac_cv_header_ws2tcpip_h="no" | ||||
|     ]) | ||||
|   ]) | ||||
|   if test "x$ac_cv_header_ws2tcpip_h" = "xyes"; then | ||||
|     AC_DEFINE_UNQUOTED(HAVE_WS2TCPIP_H, 1, | ||||
|       [Define to 1 if you have the ws2tcpip.h header file.]) | ||||
|   fi | ||||
| ]) | ||||
|  | ||||
|  | ||||
| dnl CURL_CHECK_TYPE_SOCKLEN_T | ||||
| dnl ------------------------------------------------- | ||||
| dnl Check for existing socklen_t type, and provide | ||||
| dnl an equivalent type if socklen_t not available | ||||
|  | ||||
| AC_DEFUN([CURL_CHECK_TYPE_SOCKLEN_T], [ | ||||
|   AC_REQUIRE([CURL_CHECK_HEADER_WS2TCPIP])dnl | ||||
|   AC_CHECK_TYPE([socklen_t], ,[ | ||||
|     AC_CACHE_CHECK([for socklen_t equivalent],  | ||||
|       [curl_cv_socklen_t_equiv], [ | ||||
|       curl_cv_socklen_t_equiv="unknown" | ||||
|       for arg2 in "struct sockaddr" void; do | ||||
|         for t in int size_t unsigned long "unsigned long"; do | ||||
|           AC_COMPILE_IFELSE([ | ||||
|             AC_LANG_PROGRAM([ | ||||
| #undef inline | ||||
| #ifdef HAVE_WINDOWS_H | ||||
| #ifndef WIN32_LEAN_AND_MEAN | ||||
| #define WIN32_LEAN_AND_MEAN | ||||
| #endif | ||||
| #include <windows.h> | ||||
| #ifdef HAVE_WINSOCK2_H | ||||
| #include <winsock2.h> | ||||
| #else | ||||
| #ifdef HAVE_WINSOCK_H | ||||
| #include <winsock.h> | ||||
| #endif | ||||
| #endif | ||||
| #else | ||||
| #ifdef HAVE_SYS_TYPES_H | ||||
| #include <sys/types.h> | ||||
| #endif | ||||
| #ifdef HAVE_SYS_SOCKET_H | ||||
| #include <sys/socket.h> | ||||
| #endif | ||||
| #endif | ||||
|               int getpeername (int, $arg2 *, $t *); | ||||
|             ],[ | ||||
|               $t len=0; | ||||
|               getpeername(0,0,&len); | ||||
|             ]) | ||||
|           ],[ | ||||
|              curl_cv_socklen_t_equiv="$t" | ||||
|              break 2 | ||||
|           ]) | ||||
|         done | ||||
|       done | ||||
|     ]) | ||||
|     if test "$curl_cv_socklen_t_equiv" = "unknown"; then | ||||
|       AC_MSG_ERROR([Cannot find a type to use in place of socklen_t]) | ||||
|     else | ||||
|       AC_DEFINE_UNQUOTED(socklen_t, $curl_cv_socklen_t_equiv, | ||||
|         [type to use in place of socklen_t if not defined]) | ||||
|     fi | ||||
|   ],[ | ||||
| #undef inline | ||||
| #ifdef HAVE_WINDOWS_H | ||||
| #ifndef WIN32_LEAN_AND_MEAN | ||||
| #define WIN32_LEAN_AND_MEAN | ||||
| #endif | ||||
| #include <windows.h> | ||||
| #ifdef HAVE_WINSOCK2_H | ||||
| #include <winsock2.h> | ||||
| #ifdef HAVE_WS2TCPIP_H | ||||
| #include <ws2tcpip.h> | ||||
| #endif | ||||
| #endif | ||||
| #else | ||||
| #ifdef HAVE_SYS_TYPES_H | ||||
| #include <sys/types.h> | ||||
| #endif | ||||
| #ifdef HAVE_SYS_SOCKET_H | ||||
| #include <sys/socket.h> | ||||
| #endif | ||||
| #endif | ||||
|   ]) | ||||
| ]) | ||||
|  | ||||
|  | ||||
| dnl CURL_CHECK_FUNC_GETNAMEINFO | ||||
| dnl ------------------------------------------------- | ||||
| dnl Test if the getnameinfo function is available,  | ||||
| dnl and check the types of five of its arguments. | ||||
| dnl If the function succeeds HAVE_GETNAMEINFO will be | ||||
| dnl defined, defining the types of the arguments in | ||||
| dnl GETNAMEINFO_TYPE_ARG1, GETNAMEINFO_TYPE_ARG2, | ||||
| dnl GETNAMEINFO_TYPE_ARG46 and GETNAMEINFO_TYPE_ARG7. | ||||
| dnl This function is experimental and its results shall | ||||
| dnl not be trusted while this notice is in place ------ | ||||
|  | ||||
| AC_DEFUN([CURL_CHECK_FUNC_GETNAMEINFO], [ | ||||
|   AC_REQUIRE([CURL_CHECK_HEADER_WS2TCPIP])dnl | ||||
|   AC_REQUIRE([CURL_CHECK_TYPE_SOCKLEN_T])dnl | ||||
|   AC_CHECK_HEADERS(sys/types.h sys/socket.h netdb.h) | ||||
|   # | ||||
|   AC_MSG_CHECKING([for getnameinfo]) | ||||
|   AC_LINK_IFELSE([ | ||||
|       AC_LANG_FUNC_LINK_TRY([getnameinfo]) | ||||
|     ],[ | ||||
|       AC_MSG_RESULT([yes]) | ||||
|       curl_cv_getnameinfo="yes" | ||||
|     ],[ | ||||
|       AC_MSG_RESULT([no]) | ||||
|       curl_cv_getnameinfo="no" | ||||
|   ]) | ||||
|   # | ||||
|   if test "$curl_cv_getnameinfo" != "yes"; then | ||||
|     AC_MSG_CHECKING([deeper for getnameinfo]) | ||||
|     AC_TRY_LINK([ | ||||
|       ],[ | ||||
|         getnameinfo(); | ||||
|       ],[ | ||||
|         AC_MSG_RESULT([yes]) | ||||
|         curl_cv_getnameinfo="yes" | ||||
|       ],[ | ||||
|         AC_MSG_RESULT([but still no]) | ||||
|         curl_cv_getnameinfo="no" | ||||
|     ]) | ||||
|   fi | ||||
|   # | ||||
|   if test "$curl_cv_getnameinfo" != "yes"; then | ||||
|     AC_MSG_CHECKING([deeper and deeper for getnameinfo]) | ||||
|     AC_TRY_LINK([ | ||||
| #undef inline | ||||
| #ifdef HAVE_WINDOWS_H | ||||
| #ifndef WIN32_LEAN_AND_MEAN | ||||
| #define WIN32_LEAN_AND_MEAN | ||||
| #endif | ||||
| #include <windows.h> | ||||
| #ifdef HAVE_WINSOCK2_H | ||||
| #include <winsock2.h> | ||||
| #ifdef HAVE_WS2TCPIP_H | ||||
| #include <ws2tcpip.h> | ||||
| #endif | ||||
| #endif | ||||
| #else | ||||
| #ifdef HAVE_SYS_TYPES_H | ||||
| #include <sys/types.h> | ||||
| #endif | ||||
| #ifdef HAVE_SYS_SOCKET_H | ||||
| #include <sys/socket.h> | ||||
| #endif | ||||
| #ifdef HAVE_NETDB_H | ||||
| #include <netdb.h> | ||||
| #endif | ||||
| #endif | ||||
|       ],[ | ||||
|         getnameinfo(0, 0, 0, 0, 0, 0, 0); | ||||
|       ],[  | ||||
|         AC_MSG_RESULT([yes]) | ||||
|         curl_cv_getnameinfo="yes" | ||||
|       ],[ | ||||
|         AC_MSG_RESULT([but still no]) | ||||
|         curl_cv_getnameinfo="no" | ||||
|     ]) | ||||
|   fi | ||||
|   # | ||||
|   if test "$curl_cv_getnameinfo" = "yes"; then | ||||
|     AC_CACHE_CHECK([types of arguments for getnameinfo], | ||||
|       [curl_cv_func_getnameinfo_args], [ | ||||
|       curl_cv_func_getnameinfo_args="unknown" | ||||
|       for gni_arg1 in 'struct sockaddr *' 'const struct sockaddr *' 'void *'; do | ||||
|         for gni_arg2 in 'socklen_t' 'size_t' 'int'; do | ||||
|           for gni_arg46 in 'size_t' 'int' 'socklen_t' 'unsigned int' 'DWORD'; do | ||||
|             for gni_arg7 in 'int' 'unsigned int'; do | ||||
|               AC_COMPILE_IFELSE([ | ||||
|                 AC_LANG_PROGRAM([ | ||||
| #undef inline  | ||||
| #ifdef HAVE_WINDOWS_H | ||||
| #ifndef WIN32_LEAN_AND_MEAN | ||||
| #define WIN32_LEAN_AND_MEAN | ||||
| #endif | ||||
| #if (!defined(_WIN32_WINNT)) || (_WIN32_WINNT < 0x0501) | ||||
| #undef _WIN32_WINNT | ||||
| #define _WIN32_WINNT 0x0501 | ||||
| #endif | ||||
| #include <windows.h> | ||||
| #ifdef HAVE_WINSOCK2_H | ||||
| #include <winsock2.h>  | ||||
| #ifdef HAVE_WS2TCPIP_H | ||||
| #include <ws2tcpip.h> | ||||
| #endif | ||||
| #endif | ||||
| #define GNICALLCONV WSAAPI | ||||
| #else | ||||
| #ifdef HAVE_SYS_TYPES_H | ||||
| #include <sys/types.h> | ||||
| #endif | ||||
| #ifdef HAVE_SYS_SOCKET_H | ||||
| #include <sys/socket.h> | ||||
| #endif | ||||
| #ifdef HAVE_NETDB_H | ||||
| #include <netdb.h> | ||||
| #endif | ||||
| #define GNICALLCONV | ||||
| #endif | ||||
|                   extern int GNICALLCONV getnameinfo($gni_arg1, $gni_arg2, | ||||
|                                          char *, $gni_arg46, | ||||
|                                          char *, $gni_arg46, | ||||
|                                          $gni_arg7); | ||||
|                 ],[ | ||||
|                   $gni_arg2 salen=0; | ||||
|                   $gni_arg46 hostlen=0; | ||||
|                   $gni_arg46 servlen=0; | ||||
|                   $gni_arg7 flags=0; | ||||
|                   int res = getnameinfo(0, salen, 0, hostlen, 0, servlen, flags); | ||||
|                 ]) | ||||
|               ],[ | ||||
|                  curl_cv_func_getnameinfo_args="$gni_arg1,$gni_arg2,$gni_arg46,$gni_arg7" | ||||
|                  break 4 | ||||
|               ]) | ||||
|             done | ||||
|           done | ||||
|         done | ||||
|       done | ||||
|     ]) # AC_CACHE_CHECK | ||||
|     if test "$curl_cv_func_getnameinfo_args" = "unknown"; then | ||||
|       AC_MSG_WARN([Cannot find proper types to use for getnameinfo args]) | ||||
|       AC_MSG_WARN([HAVE_GETNAMEINFO will not be defined]) | ||||
|     else | ||||
|       gni_prev_IFS=$IFS; IFS=',' | ||||
|       set dummy `echo "$curl_cv_func_getnameinfo_args" | sed 's/\*/\*/g'` | ||||
|       IFS=$gni_prev_IFS | ||||
|       shift | ||||
|       AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG1, $[1], | ||||
|         [Define to the type of arg 1 for getnameinfo.]) | ||||
|       AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG2, $[2], | ||||
|         [Define to the type of arg 2 for getnameinfo.]) | ||||
|       AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG46, $[3], | ||||
|         [Define to the type of args 4 and 6 for getnameinfo.]) | ||||
|       AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG7, $[4], | ||||
|         [Define to the type of arg 7 for getnameinfo.]) | ||||
|       AC_DEFINE_UNQUOTED(HAVE_GETNAMEINFO, 1, | ||||
|         [Define to 1 if you have the getnameinfo function.]) | ||||
|       ac_cv_func_getnameinfo="yes" | ||||
|     fi | ||||
|   fi | ||||
| ]) # AC_DEFUN | ||||
|  | ||||
|  | ||||
| dnl CURL_CHECK_NONBLOCKING_SOCKET | ||||
| dnl ------------------------------------------------- | ||||
| dnl Check for how to set a socket to non-blocking state. There seems to exist | ||||
| dnl four known different ways, with the one used almost everywhere being POSIX | ||||
| dnl and XPG3, while the other different ways for different systems (old BSD, | ||||
| @@ -59,12 +449,27 @@ dnl FIONBIO test was also bad | ||||
| dnl the code was bad, try a different program now, test 3 | ||||
|  | ||||
|   AC_TRY_COMPILE([ | ||||
| /* headers for ioctlsocket test (cygwin?) */ | ||||
| /* headers for ioctlsocket test (Windows) */ | ||||
| #undef inline | ||||
| #ifdef HAVE_WINDOWS_H | ||||
| #ifndef WIN32_LEAN_AND_MEAN | ||||
| #define WIN32_LEAN_AND_MEAN | ||||
| #endif | ||||
| #include <windows.h> | ||||
| #ifdef HAVE_WINSOCK2_H | ||||
| #include <winsock2.h> | ||||
| #else | ||||
| #ifdef HAVE_WINSOCK_H | ||||
| #include <winsock.h> | ||||
| #endif | ||||
| #endif | ||||
| #endif | ||||
| ],[ | ||||
| /* ioctlsocket source code */ | ||||
|  int socket; | ||||
|  unsigned long flags = ioctlsocket(socket, FIONBIO, &flags); | ||||
|  SOCKET sd; | ||||
|  unsigned long flags = 0; | ||||
|  sd = socket(0, 0, 0); | ||||
|  ioctlsocket(sd, FIONBIO, &flags); | ||||
| ],[ | ||||
| dnl ioctlsocket test was good | ||||
| nonblock="ioctlsocket" | ||||
| @@ -122,6 +527,9 @@ dnl end of non-blocking try-compile test | ||||
|   fi | ||||
| ]) | ||||
|  | ||||
|  | ||||
| dnl TYPE_SOCKADDR_STORAGE | ||||
| dnl ------------------------------------------------- | ||||
| dnl Check for struct sockaddr_storage. Most IPv6-enabled hosts have it, but | ||||
| dnl AIX 4.3 is one known exception. | ||||
| AC_DEFUN([TYPE_SOCKADDR_STORAGE], | ||||
| @@ -130,6 +538,16 @@ AC_DEFUN([TYPE_SOCKADDR_STORAGE], | ||||
|         AC_DEFINE(HAVE_STRUCT_SOCKADDR_STORAGE, 1, | ||||
|                   [if struct sockaddr_storage is defined]), , | ||||
|    [ | ||||
| #undef inline | ||||
| #ifdef HAVE_WINDOWS_H | ||||
| #ifndef WIN32_LEAN_AND_MEAN | ||||
| #define WIN32_LEAN_AND_MEAN | ||||
| #endif | ||||
| #include <windows.h> | ||||
| #ifdef HAVE_WINSOCK2_H | ||||
| #include <winsock2.h> | ||||
| #endif | ||||
| #else | ||||
| #ifdef HAVE_SYS_TYPES_H | ||||
| #include <sys/types.h> | ||||
| #endif | ||||
| @@ -141,59 +559,16 @@ AC_DEFUN([TYPE_SOCKADDR_STORAGE], | ||||
| #endif | ||||
| #ifdef HAVE_ARPA_INET_H | ||||
| #include <arpa/inet.h> | ||||
| #endif | ||||
| #endif | ||||
|    ]) | ||||
|  | ||||
| ]) | ||||
|  | ||||
| dnl Check for socklen_t: historically on BSD it is an int, and in | ||||
| dnl POSIX 1g it is a type of its own, but some platforms use different | ||||
| dnl types for the argument to getsockopt, getpeername, etc.  So we | ||||
| dnl have to test to find something that will work. | ||||
| AC_DEFUN([TYPE_SOCKLEN_T], | ||||
| [ | ||||
|    AC_CHECK_TYPE([socklen_t], ,[ | ||||
|       AC_MSG_CHECKING([for socklen_t equivalent]) | ||||
|       AC_CACHE_VAL([curl_cv_socklen_t_equiv], | ||||
|       [ | ||||
|          # Systems have either "struct sockaddr *" or | ||||
|          # "void *" as the second argument to getpeername | ||||
|          curl_cv_socklen_t_equiv= | ||||
|          for arg2 in "struct sockaddr" void; do | ||||
|             for t in int size_t unsigned long "unsigned long"; do | ||||
|                AC_TRY_COMPILE([ | ||||
|                   #ifdef HAVE_SYS_TYPES_H | ||||
|                   #include <sys/types.h> | ||||
|                   #endif | ||||
|                   #ifdef HAVE_SYS_SOCKET_H | ||||
|                   #include <sys/socket.h> | ||||
|                   #endif | ||||
|  | ||||
|                   int getpeername (int, $arg2 *, $t *); | ||||
|                ],[ | ||||
|                   $t len; | ||||
|                   getpeername(0,0,&len); | ||||
|                ],[ | ||||
|                   curl_cv_socklen_t_equiv="$t" | ||||
|                   break | ||||
|                ]) | ||||
|             done | ||||
|          done | ||||
|  | ||||
|          if test "x$curl_cv_socklen_t_equiv" = x; then | ||||
|             AC_MSG_ERROR([Cannot find a type to use in place of socklen_t]) | ||||
|          fi | ||||
|       ]) | ||||
|       AC_MSG_RESULT($curl_cv_socklen_t_equiv) | ||||
|       AC_DEFINE_UNQUOTED(socklen_t, $curl_cv_socklen_t_equiv, | ||||
| 			[type to use in place of socklen_t if not defined])], | ||||
|       [#include <sys/types.h> | ||||
| #include <sys/socket.h>]) | ||||
| ]) | ||||
|  | ||||
| dnl TYPE_IN_ADDR_T | ||||
| dnl ------------------------------------------------- | ||||
| dnl Check for in_addr_t: it is used to receive the return code of inet_addr() | ||||
| dnl and a few other things. If not found, we set it to unsigned int, as even | ||||
| dnl 64-bit implementations use to set it to a 32-bit type. | ||||
| dnl and a few other things. | ||||
| AC_DEFUN([TYPE_IN_ADDR_T], | ||||
| [ | ||||
|    AC_CHECK_TYPE([in_addr_t], ,[ | ||||
| @@ -203,15 +578,33 @@ AC_DEFUN([TYPE_IN_ADDR_T], | ||||
|          curl_cv_in_addr_t_equiv= | ||||
|          for t in "unsigned long" int size_t unsigned long; do | ||||
|             AC_TRY_COMPILE([ | ||||
|                #ifdef HAVE_SYS_TYPES_H | ||||
|                #include <sys/types.h> | ||||
|                #endif | ||||
|                #ifdef HAVE_SYS_SOCKET_H | ||||
|                #include <sys/socket.h> | ||||
|                #endif | ||||
|                #ifdef HAVE_ARPA_INET_H | ||||
|                #include <arpa/inet.h> | ||||
|                #endif | ||||
| #undef inline | ||||
| #ifdef HAVE_WINDOWS_H | ||||
| #ifndef WIN32_LEAN_AND_MEAN | ||||
| #define WIN32_LEAN_AND_MEAN | ||||
| #endif | ||||
| #include <windows.h> | ||||
| #ifdef HAVE_WINSOCK2_H | ||||
| #include <winsock2.h> | ||||
| #else | ||||
| #ifdef HAVE_WINSOCK_H | ||||
| #include <winsock.h> | ||||
| #endif | ||||
| #endif | ||||
| #else | ||||
| #ifdef HAVE_SYS_TYPES_H | ||||
| #include <sys/types.h> | ||||
| #endif | ||||
| #ifdef HAVE_SYS_SOCKET_H | ||||
| #include <sys/socket.h> | ||||
| #endif | ||||
| #ifdef HAVE_NETINET_IN_H | ||||
| #include <netinet/in.h> | ||||
| #endif | ||||
| #ifdef HAVE_ARPA_INET_H | ||||
| #include <arpa/inet.h> | ||||
| #endif | ||||
| #endif | ||||
|             ],[ | ||||
|                $t data = inet_addr ("1.2.3.4"); | ||||
|             ],[ | ||||
| @@ -227,10 +620,36 @@ AC_DEFUN([TYPE_IN_ADDR_T], | ||||
|       AC_MSG_RESULT($curl_cv_in_addr_t_equiv) | ||||
|       AC_DEFINE_UNQUOTED(in_addr_t, $curl_cv_in_addr_t_equiv, | ||||
| 			[type to use in place of in_addr_t if not defined])], | ||||
|       [#include <sys/types.h> | ||||
|       [ | ||||
| #undef inline | ||||
| #ifdef HAVE_WINDOWS_H | ||||
| #ifndef WIN32_LEAN_AND_MEAN | ||||
| #define WIN32_LEAN_AND_MEAN | ||||
| #endif | ||||
| #include <windows.h> | ||||
| #ifdef HAVE_WINSOCK2_H | ||||
| #include <winsock2.h> | ||||
| #else | ||||
| #ifdef HAVE_WINSOCK_H | ||||
| #include <winsock.h> | ||||
| #endif | ||||
| #endif | ||||
| #else | ||||
| #ifdef HAVE_SYS_TYPES_H | ||||
| #include <sys/types.h> | ||||
| #endif | ||||
| #ifdef HAVE_SYS_SOCKET_H | ||||
| #include <sys/socket.h> | ||||
| #include <arpa/inet.h>]) | ||||
| ]) | ||||
| #endif | ||||
| #ifdef HAVE_NETINET_IN_H | ||||
| #include <netinet/in.h> | ||||
| #endif | ||||
| #ifdef HAVE_ARPA_INET_H | ||||
| #include <arpa/inet.h> | ||||
| #endif | ||||
| #endif | ||||
|   ]) dnl AC_CHECK_TYPE | ||||
| ]) dnl AC_DEFUN | ||||
|  | ||||
| dnl ************************************************************ | ||||
| dnl check for "localhost", if it doesn't exist, we can't do the | ||||
| @@ -417,34 +836,25 @@ dnl      int strerror_r(int errnum, char *buf, size_t n); | ||||
| dnl | ||||
| AC_DEFUN([CURL_CHECK_STRERROR_R], | ||||
| [ | ||||
|   dnl determine of strerror_r is present | ||||
|   AC_CHECK_FUNCS(strerror_r,[ | ||||
|   AC_CHECK_FUNCS(strerror_r) | ||||
|  | ||||
|   if test "x$ac_cv_func_strerror_r" = "xyes"; then | ||||
|  | ||||
|     AC_MSG_CHECKING(whether strerror_r is declared) | ||||
|     AC_EGREP_CPP(strerror_r,[ | ||||
| #include <string.h>],[ | ||||
|       strerror_r="yes" | ||||
|       AC_MSG_RESULT(yes)],[ | ||||
|       AC_MSG_RESULT(no) | ||||
|       AC_MSG_CHECKING(whether strerror_r with -D_THREAD_SAFE is declared) | ||||
|       AC_MSG_CHECKING(whether strerror_r with -D_REENTRANT is declared) | ||||
|       AC_EGREP_CPP(strerror_r,[ | ||||
| #define _THREAD_SAFE | ||||
| #define _REENTRANT | ||||
| #include <string.h>],[ | ||||
|         strerror_r="yes" | ||||
| 	CPPFLAGS="-D_THREAD_SAFE $CPPFLAGS" | ||||
| 	CPPFLAGS="-D_REENTRANT $CPPFLAGS" | ||||
| 	AC_MSG_RESULT(yes)], | ||||
| 	AC_MSG_RESULT(no))])]) | ||||
|  | ||||
|   if test "x$strerror_r" = "xyes"; then | ||||
|  | ||||
|     dnl check if strerror_r is properly declared in the headers | ||||
|     AC_CHECK_DECL(strerror_r, , | ||||
|      AC_DEFINE(HAVE_NO_STRERROR_R_DECL, 1, [we have no strerror_r() proto]) | ||||
| , | ||||
| [#include <stdlib.h> | ||||
| #include <stdio.h> | ||||
| #include <string.h> | ||||
| #include <errno.h> | ||||
| ]) | ||||
| 	AC_MSG_RESULT(no) | ||||
|         AC_DEFINE(HAVE_NO_STRERROR_R_DECL, 1, [we have no strerror_r() proto]) | ||||
|        ) dnl with _THREAD_SAFE | ||||
|     ]) dnl plain cpp for it | ||||
|  | ||||
|     dnl determine if this strerror_r() is glibc or POSIX | ||||
|     AC_MSG_CHECKING([for a glibc strerror_r API]) | ||||
| @@ -466,8 +876,20 @@ main () { | ||||
|     AC_DEFINE(HAVE_GLIBC_STRERROR_R, 1, [we have a glibc-style strerror_r()]) | ||||
|     AC_MSG_RESULT([yes]), | ||||
|     AC_MSG_RESULT([no]), | ||||
|     dnl cross-compiling! | ||||
|     AC_MSG_NOTICE([cannot determine strerror_r() style: edit lib/config.h manually!]) | ||||
|  | ||||
|     dnl Use an inferior method of strerror_r detection while cross-compiling | ||||
|     AC_EGREP_CPP(yes, [ | ||||
| #include <features.h> | ||||
| #ifdef __GLIBC__ | ||||
| yes | ||||
| #endif | ||||
| ],  | ||||
|       dnl looks like glibc, so assume a glibc-style strerror_r() | ||||
|       GLIBC_STRERROR_R="1" | ||||
|       AC_DEFINE(HAVE_GLIBC_STRERROR_R, 1, [we have a glibc-style strerror_r()]) | ||||
|       AC_MSG_RESULT([yes]), | ||||
|       AC_MSG_NOTICE([cannot determine strerror_r() style: edit lib/config.h manually!]) | ||||
|     ) dnl while cross-compiling | ||||
|     ) | ||||
|  | ||||
|     if test -z "$GLIBC_STRERROR_R"; then | ||||
| @@ -682,6 +1104,7 @@ if test "$ac_cv_func_gethostbyname_r" = "yes"; then | ||||
| fi | ||||
| ]) | ||||
|  | ||||
|  | ||||
| dnl We create a function for detecting which compiler we use and then set as | ||||
| dnl pendantic compiler options as possible for that particular compiler. The | ||||
| dnl options are only used for debug-builds. | ||||
| @@ -756,15 +1179,18 @@ AC_DEFUN([CURL_CC_DEBUG_OPTS], | ||||
|          fi | ||||
|  | ||||
|          dnl -Wunreachable-code seems totally unreliable on my gcc 3.3.2 on | ||||
|          dnl on i686-Linux as it gives us heaps with false positives | ||||
|          dnl on i686-Linux as it gives us heaps with false positives. | ||||
|          dnl Also, on gcc 4.0.X it is totally unbearable and complains all | ||||
|          dnl over making it unusable for generic purposes. Let's not use it. | ||||
|  | ||||
|          if test "$gccnum" -ge "303"; then | ||||
|            dnl gcc 3.3 and later | ||||
|            WARN="$WARN -Wendif-labels -Wstrict-prototypes" | ||||
|          fi | ||||
|  | ||||
|          if test "$gccnum" -ge "304"; then | ||||
|            # try -Wunreachable-code on gcc 3.4 | ||||
|            WARN="$WARN -Wunreachable-code" | ||||
|            # try these on gcc 3.4 | ||||
|            WARN="$WARN -Wdeclaration-after-statement" | ||||
|          fi | ||||
|  | ||||
|          for flag in $CPPFLAGS; do | ||||
| @@ -876,3 +1302,19 @@ else | ||||
|   AC_MSG_RESULT($DLFOUNDFILE) | ||||
| fi | ||||
| ]) | ||||
|  | ||||
| # This is only a temporary fix. This macro is here to replace the broken one | ||||
| # delivered by the automake project (including the 1.9.6 release). As soon as | ||||
| # they ship a working version we SHOULD remove this work-around. | ||||
|  | ||||
| AC_DEFUN([AM_MISSING_HAS_RUN], | ||||
| [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl | ||||
| test x"${MISSING+set}" = xset || MISSING="\${SHELL} \"$am_aux_dir/missing\"" | ||||
| # Use eval to expand $SHELL | ||||
| if eval "$MISSING --run true"; then | ||||
|   am_missing_run="$MISSING --run " | ||||
| else | ||||
|   am_missing_run= | ||||
|   AC_MSG_WARN([`missing' script is too old or missing]) | ||||
| fi | ||||
| ]) | ||||
|   | ||||
| @@ -11,3 +11,4 @@ Dan Fandrich | ||||
| Gisle Vanem | ||||
| Gunter Knauf | ||||
| Henrik Stoerner | ||||
| Yang Tse | ||||
|   | ||||
							
								
								
									
										72
									
								
								ares/CHANGES
									
									
									
									
									
								
							
							
						
						
									
										72
									
								
								ares/CHANGES
									
									
									
									
									
								
							| @@ -1,5 +1,77 @@ | ||||
|   Changelog for the c-ares project | ||||
|  | ||||
| * January 9, 2006 | ||||
|  | ||||
| - Alexander Lazic improved the getservbyport_r() configure check. | ||||
|  | ||||
| * January 6, 2006 | ||||
|  | ||||
| - Alexander Lazic pointed out that the buildconf should use the ACLOCAL_FLAGS | ||||
|   variable for easier controlling what it does and how it runs. | ||||
|  | ||||
| * January 5, 2006 | ||||
|  | ||||
| - James Bursa fixed c-ares to find the hosts file on RISC OS, and made it | ||||
|   build with newer gcc versions that no longer defines "riscos". | ||||
|  | ||||
| * December 22 | ||||
|  | ||||
| - Daniel Stenberg added ares_getsock() that extracts the set of sockets to | ||||
|   wait for action on. Similar to ares_fds() but not restricted to using | ||||
|   select() for the waiting. | ||||
|  | ||||
| * November 25 | ||||
|  | ||||
| - Yang Tse fixed some send() / recv() compiler warnings | ||||
|  | ||||
| * September 18 | ||||
|  | ||||
| - Added constants that will be used by ares_getaddrinfo | ||||
|  | ||||
| - Made ares_getnameinfo use the reentrant getservbyport (getservbyport_r) if it is | ||||
|   available to ensure it works properly in a threaded environment. | ||||
|  | ||||
| * September 10 | ||||
|  | ||||
| - configure fix for detecting a member in the sockaddr_in6 struct which failed | ||||
|   on ipv6-enabled HP-UX 11.00 | ||||
|  | ||||
| Version 1.3.0 (August 29, 2004) | ||||
|  | ||||
| * August 21 | ||||
|  | ||||
| - Alfredo Tupone provided a fix for the Windows code in get_iphlpapi_dns_info() | ||||
|   when getting the DNS server etc. | ||||
|  | ||||
| * June 19 | ||||
|  | ||||
| - Added some checks for the addrinfo structure. | ||||
|  | ||||
| * June 2 | ||||
|  | ||||
| - William Ahern: | ||||
|  | ||||
|   Make UDP sockets non-blocking. I've confirmed that at least on Linux 2.4 a | ||||
|   read event can come back from poll() on a valid SOCK_DGRAM socket but | ||||
|   recv(2) will still block. This patch doesn't ignore EAGAIN in | ||||
|   read_udp_packets(), though maybe it should. (This patch was edited by Daniel | ||||
|   Stenberg and a new configure test was added (imported from curl's configure) | ||||
|   to properly detect what non-blocking socket approach to use.) | ||||
|  | ||||
|   I'm not quite sure how this was happening, but I've been seeing PTR queries | ||||
|   which seem to return empty responses. At least, they were empty when calling | ||||
|   ares_expand_name() on the record. Here's a patch which guarantees to | ||||
|   NUL-terminate the expanded name. The old behavior failed to NUL-terminate if | ||||
|   len was 0, and this was causing strlen() to run past the end of the buffer | ||||
|   after calling ares_expand_name() and getting ARES_SUCCESS as the return | ||||
|   value. If q is not greater than *s then it's equal and *s is always | ||||
|   allocated with at least one byte. | ||||
|  | ||||
| * May 16 | ||||
|  | ||||
| - Added ares_getnameinfo which mimics the getnameinfo API (another feature | ||||
|   that could use testing). | ||||
|  | ||||
| * May 14 | ||||
|  | ||||
| - Added an inet_ntop function from BIND for systems that do not have it. | ||||
|   | ||||
| @@ -13,6 +13,7 @@ Makefile.in | ||||
| Makefile.dj | ||||
| Makefile.m32 | ||||
| Makefile.netware | ||||
| Makefile.vc6 | ||||
| install-sh | ||||
| mkinstalldirs | ||||
| configure | ||||
|   | ||||
| @@ -4,10 +4,9 @@ lib_LTLIBRARIES = libcares.la | ||||
|  | ||||
| man_MANS = $(MANPAGES) | ||||
|  | ||||
| MSVCFILES = vc/adig/adig.dep vc/adig/adig.dsp vc/adig/adig.mak	\ | ||||
|  vc/adig/adig.plg vc/vc.dsw vc/ahost/ahost.dep vc/ahost/ahost.dsp	\ | ||||
|  vc/ahost/ahost.mak vc/ahost/ahost.plg vc/areslib/areslib.dep		\ | ||||
|  vc/areslib/areslib.dsp vc/areslib/areslib.mak vc/areslib/areslib.plg | ||||
| MSVCFILES = vc/adig/adig.dep vc/adig/adig.dsp vc/vc.dsw vc/ahost/ahost.dep \ | ||||
|  vc/ahost/ahost.dsp vc/areslib/areslib.dep vc/areslib/areslib.dsp	   \ | ||||
|  vc/areslib/areslib.dsw | ||||
|  | ||||
| # adig and ahost are just sample programs and thus not mentioned with the | ||||
| # regular sources and headers | ||||
| @@ -15,7 +14,7 @@ EXTRA_DIST = CHANGES README.cares Makefile.inc adig.c ahost.c $(man_MANS) \ | ||||
|  $(MSVCFILES) AUTHORS | ||||
|  | ||||
|  | ||||
| VER=-version-info 0:0:0 | ||||
| VER=-version-info 1:0:0 | ||||
| # This flag accepts an argument of the form current[:revision[:age]]. So, | ||||
| # passing -version-info 3:12:1 sets current to 3, revision to 12, and age to | ||||
| # 1. | ||||
|   | ||||
| @@ -9,7 +9,12 @@ include Makefile.inc | ||||
| WATT32_ROOT = $(subst \,/,$(WATT_ROOT)) | ||||
|  | ||||
| CC      = gcc | ||||
| CFLAGS  = -O2 -Wall -DWATT32 -Dselect=select_s -I$(WATT32_ROOT)/inc | ||||
| CFLAGS  = -O2 -Wall -DWATT32 -Dselect=select_s -DHAVE_AF_INET6 \ | ||||
|           -DHAVE_PF_INET6 -DHAVE_IOCTLSOCKET -DHAVE_STRUCT_IN6_ADDR \ | ||||
|           -DHAVE_STRUCT_SOCKADDR_IN6 -DHAVE_STRUCT_ADDRINFO \ | ||||
|           -DHAVE_ARPA_NAMESER_H -DNS_INADDRSZ=4 \ | ||||
|           -DHAVE_SOCKADDR_IN6_SIN6_SCOPE_ID -I$(WATT32_ROOT)/inc | ||||
|  | ||||
| LDFLAGS = -s | ||||
| EX_LIBS = $(WATT32_ROOT)/lib/libwatt.a | ||||
|  | ||||
|   | ||||
| @@ -1,17 +1,18 @@ | ||||
| CSOURCES = ares_fds.c ares_process.c ares_free_hostent.c ares_query.c	   \ | ||||
| ares__close_sockets.c ares_free_string.c ares_search.c ares__get_hostent.c \ | ||||
| ares_gethostbyaddr.c ares_send.c ares__read_line.c ares_gethostbyname.c	   \ | ||||
| ares_strerror.c ares_cancel.c ares_init.c ares_timeout.c ares_destroy.c	   \ | ||||
| ares_mkquery.c ares_version.c ares_expand_name.c ares_parse_a_reply.c	   \ | ||||
| windows_port.c ares_expand_string.c ares_parse_ptr_reply.c                 \ | ||||
| ares_parse_aaaa_reply.c inet_net_pton.c bitncmp.c inet_ntop.c | ||||
| CSOURCES = ares_fds.c ares_getsock.c ares_process.c ares_free_hostent.c	\ | ||||
| ares_query.c ares__close_sockets.c ares_free_string.c ares_search.c	\ | ||||
| ares__get_hostent.c ares_gethostbyaddr.c ares_send.c ares__read_line.c	\ | ||||
| ares_gethostbyname.c ares_strerror.c ares_cancel.c ares_init.c		\ | ||||
| ares_timeout.c ares_destroy.c ares_mkquery.c ares_version.c		\ | ||||
| ares_expand_name.c ares_parse_a_reply.c windows_port.c			\ | ||||
| ares_expand_string.c ares_parse_ptr_reply.c ares_parse_aaaa_reply.c	\ | ||||
| ares_getnameinfo.c inet_net_pton.c bitncmp.c inet_ntop.c | ||||
|  | ||||
| HHEADERS = ares.h ares_private.h setup.h ares_dns.h ares_version.h nameser.h \ | ||||
|            inet_net_pton.h ares_ipv6.h bitncmp.h | ||||
| HHEADERS = ares.h ares_private.h setup.h ares_dns.h ares_version.h          \ | ||||
|            nameser.h inet_net_pton.h inet_ntop.h ares_ipv6.h bitncmp.h | ||||
|  | ||||
| MANPAGES= ares_destroy.3 ares_expand_name.3 ares_expand_string.3 ares_fds.3 \ | ||||
|  ares_free_hostent.3 ares_free_string.3 ares_gethostbyaddr.3		    \ | ||||
|  ares_gethostbyname.3 ares_init.3 ares_init_options.3 ares_mkquery.3	    \ | ||||
|  ares_parse_a_reply.3 ares_parse_ptr_reply.3 ares_process.3		    \ | ||||
|  ares_query.3 ares_search.3 ares_send.3 ares_strerror.3 ares_timeout.3	    \ | ||||
|  ares_version.3 ares_cancel.3 ares_parse_aaaa_reply.3 | ||||
|  ares_free_hostent.3 ares_free_string.3 ares_gethostbyaddr.3                \ | ||||
|  ares_gethostbyname.3 ares_init.3 ares_init_options.3 ares_mkquery.3        \ | ||||
|  ares_parse_a_reply.3 ares_parse_ptr_reply.3 ares_process.3                 \ | ||||
|  ares_query.3 ares_search.3 ares_send.3 ares_strerror.3 ares_timeout.3      \ | ||||
|  ares_version.3 ares_cancel.3 ares_parse_aaaa_reply.3 ares_getnameinfo.3 | ||||
|   | ||||
| @@ -7,29 +7,21 @@ | ||||
| ## Quick hack by Guenter; comments to: /dev/nul | ||||
|  | ||||
| CC = gcc | ||||
| AR = ar | ||||
| RANLIB = ranlib | ||||
| STRIP = strip -g | ||||
| #RM = rm -f  | ||||
|  | ||||
| ######################################################## | ||||
| ## Nothing more to do below this line! | ||||
|  | ||||
| LIB=libcares.a | ||||
| CC=gcc | ||||
| #CPPFLAGS=@CPPFLAGS@ | ||||
| WARN_FLAGS=-Wall | ||||
| CFLAGS=-O2 | ||||
| CFLAGS+=${WARN_CFLAGS} ${ERROR_CFLAGS} | ||||
| DEFS=-DMINGW32 | ||||
| CFLAGS=-O2 -Wall | ||||
| LDFLAGS=-s | ||||
| LIBS=-lwsock32 | ||||
| ALL_CFLAGS=${CPPFLAGS} ${CFLAGS} ${DEFS} | ||||
|  | ||||
| MANPAGES := $(patsubst %.c,%.o,$(wildcard ares_*.3)) | ||||
|  | ||||
| OBJS	:= $(patsubst %.c,%.o,$(wildcard ares_*.c)) | ||||
| OBJS	+= windows_port.o | ||||
| OBJS	+= windows_port.o inet_ntop.o inet_net_pton.o bitncmp.o | ||||
|  | ||||
| $(LIB): ${OBJS} | ||||
| 	ar cru $@ ${OBJS} | ||||
| @@ -51,7 +43,7 @@ ahost.exe: ahost.o $(LIB) | ||||
| ${OBJS}: ares.h ares_dns.h ares_private.h | ||||
|  | ||||
| .c.o: | ||||
| 	${CC} -c ${ALL_CFLAGS} $< | ||||
| 	${CC} -c ${CFLAGS} $< | ||||
|  | ||||
| check: | ||||
|  | ||||
| @@ -73,3 +65,4 @@ clean: | ||||
|  | ||||
| distclean: clean | ||||
| 	rm -f config.cache config.log config.status Makefile | ||||
|  | ||||
|   | ||||
| @@ -89,7 +89,7 @@ LDFLAGS	= -T | ||||
| AR	= ar | ||||
| ARFLAGS	= -cq | ||||
| CFLAGS	+= -fno-builtin -fpack-struct -fpcc-struct-return -fno-strict-aliasing | ||||
| CFLAGS	+= -Wall -Wno-format # -pedantic | ||||
| CFLAGS	+= -Wall -Wno-format -Wno-uninitialized # -pedantic | ||||
| ifeq ($(LIBARCH),LIBC) | ||||
| 	PRELUDE = $(SDK_LIBC)/imports/libcpre.gcc.o | ||||
| else | ||||
| @@ -104,7 +104,7 @@ SDK_LIBC = $(NDK_ROOT)/libc | ||||
|  | ||||
| ifeq ($(LIBARCH),LIBC) | ||||
| 	INCLUDES += -I$(SDK_LIBC)/include -I$(SDK_LIBC)/include/nks | ||||
| 	INCLUDES += -I$(SDK_LIBC)/include/winsock | ||||
| 	# INCLUDES += -I$(SDK_LIBC)/include/winsock | ||||
| 	CFLAGS += -D_POSIX_SOURCE | ||||
| #	CFLAGS += -D__ANSIC__ | ||||
| else | ||||
| @@ -304,6 +304,8 @@ config.h: Makefile.netware | ||||
| 	@echo $(DL)#define HAVE_AF_INET6 1$(DL) >> $@ | ||||
| 	@echo $(DL)#define HAVE_PF_INET6 1$(DL) >> $@ | ||||
| 	@echo $(DL)#define HAVE_STRUCT_IN6_ADDR 1$(DL) >> $@ | ||||
| 	@echo $(DL)#define HAVE_STRUCT_SOCKADDR_IN6 1$(DL) >> $@ | ||||
| 	@echo $(DL)#define HAVE_STRUCT_ADDRINFO 1$(DL) >> $@ | ||||
| 	@echo $(DL)#define SIZEOF_STRUCT_IN6_ADDR 16$(DL) >> $@ | ||||
| 	@echo $(DL)#define SIZEOF_STRUCT_IN_ADDR 4$(DL) >> $@ | ||||
| ifdef NW_WINSOCK | ||||
|   | ||||
							
								
								
									
										190
									
								
								ares/Makefile.vc6
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										190
									
								
								ares/Makefile.vc6
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,190 @@ | ||||
| # $Id$ | ||||
| # | ||||
| # C-ares makefile for MSVC6+ | ||||
| # G. Vanem <giva@bgnett.no>. | ||||
| # | ||||
|  | ||||
| CFG_MODEL   = MD | ||||
| DEBUG_MODEL = d | ||||
| USE_WATT32  = 0 | ||||
|  | ||||
| # | ||||
| # Configurations: | ||||
| #  -MD   - msvcrt.dll,  threads, release (normal) | ||||
| #  -MDd  - msvcrtd.dll, threads, debug | ||||
| #  -ML   - libc, no threads,     release | ||||
| #  -MLd  - libc, no threads,     debug | ||||
| #  -MT   - libc, threads,        release | ||||
| #  -MTd  - libc, threads,        debug | ||||
|  | ||||
| CC = cl | ||||
|  | ||||
| CFLAGS  = -nologo -$(CFG_MODEL)$(DEBUG_MODEL) -W3 -Yd -Zi | ||||
| LDFLAGS = -machine:i386 -map | ||||
|  | ||||
| OBJ_DIR  = VC6_obj | ||||
| DEF_FILE = cares.def | ||||
|  | ||||
| !if "$(USE_WATT32)" == "1" | ||||
| CFLAGS  = $(CFLAGS) -UWIN32 -DWATT32 -I$(WATT_ROOT)\inc | ||||
| EX_LIBS = $(WATT_ROOT)\lib\wattcpvc_imp.lib | ||||
|  | ||||
| !else | ||||
| CFLAGS  = $(CFLAGS) -DWIN32 -DWIN32_LEAN_AND_MEAN | ||||
| EX_LIBS = advapi32.lib ws2_32.lib | ||||
| !endif | ||||
|  | ||||
| !if "$(DEBUG_MODEL)" == "d" | ||||
| CFLAGS  = $(CFLAGS) -D_DEBUG -GZ | ||||
| LDFLAGS = $(LDFLAGS) -debug -fixed:no | ||||
|  | ||||
| !else | ||||
| CFLAGS  = $(CFLAGS) -O2 -Og | ||||
| LDFLAGS = $(LDFLAGS) -release | ||||
| !endif | ||||
|  | ||||
| OBJECTS = $(OBJ_DIR)\ares_fds.obj              \ | ||||
|           $(OBJ_DIR)\ares_process.obj          \ | ||||
|           $(OBJ_DIR)\ares_free_hostent.obj     \ | ||||
|           $(OBJ_DIR)\ares_query.obj            \ | ||||
|           $(OBJ_DIR)\ares__close_sockets.obj   \ | ||||
|           $(OBJ_DIR)\ares_free_string.obj      \ | ||||
|           $(OBJ_DIR)\ares_search.obj           \ | ||||
|           $(OBJ_DIR)\ares__get_hostent.obj     \ | ||||
|           $(OBJ_DIR)\ares_gethostbyaddr.obj    \ | ||||
|           $(OBJ_DIR)\ares_getsock.obj          \ | ||||
|           $(OBJ_DIR)\ares_send.obj             \ | ||||
|           $(OBJ_DIR)\ares__read_line.obj       \ | ||||
|           $(OBJ_DIR)\ares_gethostbyname.obj    \ | ||||
|           $(OBJ_DIR)\ares_getnameinfo.obj      \ | ||||
|           $(OBJ_DIR)\ares_strerror.obj         \ | ||||
|           $(OBJ_DIR)\ares_cancel.obj           \ | ||||
|           $(OBJ_DIR)\ares_init.obj             \ | ||||
|           $(OBJ_DIR)\ares_timeout.obj          \ | ||||
|           $(OBJ_DIR)\ares_destroy.obj          \ | ||||
|           $(OBJ_DIR)\ares_mkquery.obj          \ | ||||
|           $(OBJ_DIR)\ares_version.obj          \ | ||||
|           $(OBJ_DIR)\ares_expand_name.obj      \ | ||||
|           $(OBJ_DIR)\ares_parse_a_reply.obj    \ | ||||
|           $(OBJ_DIR)\ares_parse_aaaa_reply.obj \ | ||||
|           $(OBJ_DIR)\windows_port.obj          \ | ||||
|           $(OBJ_DIR)\ares_expand_string.obj    \ | ||||
|           $(OBJ_DIR)\ares_parse_ptr_reply.obj  \ | ||||
|           $(OBJ_DIR)\bitncmp.obj               \ | ||||
|           $(OBJ_DIR)\inet_net_pton.obj         \ | ||||
|           $(OBJ_DIR)\inet_ntop.obj | ||||
|  | ||||
| all: $(OBJ_DIR) cares.lib cares.dll cares_imp.lib ahost.exe adig.exe | ||||
|  | ||||
| $(OBJ_DIR): | ||||
|        mkdir $(OBJ_DIR) | ||||
|  | ||||
| cares.lib: $(OBJ_DIR) $(OBJECTS) | ||||
|        lib -nologo -out:$@ $(OBJECTS) | ||||
|  | ||||
| cares_imp.lib cares.dll: $(OBJ_DIR) $(DEF_FILE) $(OBJECTS) | ||||
|        link $(LDFLAGS) -dll -implib:cares_imp.lib -out:cares.dll \ | ||||
|             -def:$(DEF_FILE) $(OBJECTS) $(EX_LIBS) | ||||
|  | ||||
| $(DEF_FILE): $(OBJECTS) Makefile.VC6 | ||||
|        @echo ; Generated. DO NOT EDIT  > $@ | ||||
|        @echo LIBRARY cares.dll        >> $@ | ||||
|        @echo EXPORTS                  >> $@ | ||||
|        @echo   ares_cancel            >> $@ | ||||
|        @echo   ares_destroy           >> $@ | ||||
|        @echo   ares_expand_name       >> $@ | ||||
|        @echo   ares_expand_string     >> $@ | ||||
|        @echo   ares_fds               >> $@ | ||||
|        @echo   ares_free_hostent      >> $@ | ||||
|        @echo   ares_free_string       >> $@ | ||||
|        @echo   ares_gethostbyaddr     >> $@ | ||||
|        @echo   ares_gethostbyname     >> $@ | ||||
|        @echo   ares_getsock           >> $@ | ||||
|        @echo   ares_init              >> $@ | ||||
|        @echo   ares_init_options      >> $@ | ||||
|        @echo   ares_mkquery           >> $@ | ||||
|        @echo   ares_parse_a_reply     >> $@ | ||||
|        @echo   ares_parse_ptr_reply   >> $@ | ||||
|        @echo   ares_process           >> $@ | ||||
|        @echo   ares_query             >> $@ | ||||
|        @echo   ares_search            >> $@ | ||||
|        @echo   ares_strerror          >> $@ | ||||
|        @echo   ares_strncasecmp       >> $@ | ||||
|        @echo   ares_strcasecmp        >> $@ | ||||
|        @echo   ares_timeout           >> $@ | ||||
|        @echo   ares_version           >> $@ | ||||
|        @echo   ares_inet_net_pton     >> $@ | ||||
|        @echo   ares_inet_ntop         >> $@ | ||||
|        @echo   ares_inet_pton         >> $@ | ||||
|        @echo   ares_writev            >> $@ | ||||
|        @echo   ares_getnameinfo       >> $@ | ||||
|        @echo   ares_gettimeofday      >> $@ | ||||
|        @echo   ares_parse_aaaa_reply  >> $@ | ||||
|  | ||||
| ahost.exe: $(OBJ_DIR) $(OBJ_DIR)\ahost.obj cares_imp.lib | ||||
|        link $(LDFLAGS) -out:$@ $(OBJ_DIR)\ahost.obj cares_imp.lib $(EX_LIBS) | ||||
|  | ||||
| adig.exe: $(OBJ_DIR) $(OBJ_DIR)\adig.obj $(OBJ_DIR)\getopt.obj cares_imp.lib | ||||
|        link $(LDFLAGS) -out:$@ $(OBJ_DIR)\adig.obj $(OBJ_DIR)\getopt.obj cares_imp.lib $(EX_LIBS) | ||||
|  | ||||
| clean: | ||||
|        - del $(OBJ_DIR)\*.obj *.ilk *.pdb *.pbt *.pbi *.pbo *._xe *.map | ||||
|  | ||||
| vclean realclean: clean | ||||
|        - del $(DEF_FILE) cares.lib cares_imp.* cares.dll ahost.exe adig.exe | ||||
|        - rd $(OBJ_DIR) | ||||
|  | ||||
| .c{$(OBJ_DIR)}.obj: | ||||
|        $(CC) $(CFLAGS) -Fo$*.obj -c $< | ||||
|  | ||||
| # | ||||
| # Copyright "gcc -MM .." | ||||
| # | ||||
| $(OBJ_DIR)\ares_fds.obj: ares_fds.c setup.h ares.h ares_private.h ares_ipv6.h | ||||
| $(OBJ_DIR)\ares_process.obj: ares_process.c setup.h nameser.h ares.h ares_dns.h \ | ||||
|   ares_private.h ares_ipv6.h | ||||
| $(OBJ_DIR)\ares_free_hostent.obj: ares_free_hostent.c setup.h ares.h ares_private.h \ | ||||
|   ares_ipv6.h | ||||
| $(OBJ_DIR)\ares_query.obj: ares_query.c setup.h nameser.h ares.h ares_dns.h \ | ||||
|   ares_private.h ares_ipv6.h | ||||
| $(OBJ_DIR)\ares__close_sockets.obj: ares__close_sockets.c setup.h ares.h \ | ||||
|   ares_private.h ares_ipv6.h | ||||
| $(OBJ_DIR)\ares_free_string.obj: ares_free_string.c setup.h ares.h | ||||
| $(OBJ_DIR)\ares_search.obj: ares_search.c setup.h nameser.h ares.h ares_private.h \ | ||||
|   ares_ipv6.h | ||||
| $(OBJ_DIR)\ares__get_hostent.obj: ares__get_hostent.c setup.h ares.h ares_private.h \ | ||||
|   ares_ipv6.h inet_net_pton.h | ||||
| $(OBJ_DIR)\ares_gethostbyaddr.obj: ares_gethostbyaddr.c setup.h nameser.h ares.h \ | ||||
|   ares_private.h ares_ipv6.h inet_net_pton.h | ||||
| $(OBJ_DIR)\ares_send.obj: ares_send.c setup.h nameser.h ares.h ares_dns.h \ | ||||
|   ares_private.h ares_ipv6.h | ||||
| $(OBJ_DIR)\ares__read_line.obj: ares__read_line.c setup.h ares.h ares_private.h \ | ||||
|   ares_ipv6.h | ||||
| $(OBJ_DIR)\ares_gethostbyname.obj: ares_gethostbyname.c setup.h nameser.h ares.h \ | ||||
|   ares_private.h ares_ipv6.h inet_net_pton.h bitncmp.h | ||||
| $(OBJ_DIR)\ares_strerror.obj: ares_strerror.c setup.h ares.h | ||||
| $(OBJ_DIR)\ares_cancel.obj: ares_cancel.c setup.h ares.h ares_private.h ares_ipv6.h | ||||
| $(OBJ_DIR)\ares_init.obj: ares_init.c setup.h nameser.h ares.h ares_private.h \ | ||||
|   ares_ipv6.h inet_net_pton.h | ||||
| $(OBJ_DIR)\ares_timeout.obj: ares_timeout.c setup.h ares.h ares_private.h ares_ipv6.h | ||||
| $(OBJ_DIR)\ares_destroy.obj: ares_destroy.c setup.h ares.h ares_private.h ares_ipv6.h | ||||
| $(OBJ_DIR)\ares_mkquery.obj: ares_mkquery.c setup.h nameser.h ares.h ares_dns.h | ||||
| $(OBJ_DIR)\ares_version.obj: ares_version.c setup.h ares_version.h | ||||
| $(OBJ_DIR)\ares_expand_name.obj: ares_expand_name.c setup.h nameser.h ares.h \ | ||||
|   ares_private.h ares_ipv6.h | ||||
| $(OBJ_DIR)\ares_parse_a_reply.obj: ares_parse_a_reply.c setup.h nameser.h ares.h \ | ||||
|   ares_dns.h ares_private.h ares_ipv6.h | ||||
| $(OBJ_DIR)\windows_port.obj: windows_port.c setup.h nameser.h ares.h ares_private.h \ | ||||
|   ares_ipv6.h | ||||
| $(OBJ_DIR)\ares_expand_string.obj: ares_expand_string.c setup.h nameser.h ares.h \ | ||||
|   ares_private.h ares_ipv6.h | ||||
| $(OBJ_DIR)\ares_parse_ptr_reply.obj: ares_parse_ptr_reply.c setup.h nameser.h ares.h \ | ||||
|   ares_dns.h ares_private.h ares_ipv6.h | ||||
| $(OBJ_DIR)\ares_parse_aaaa_reply.obj: ares_parse_aaaa_reply.c setup.h nameser.h ares.h \ | ||||
|   ares_dns.h inet_net_pton.h ares_private.h ares_ipv6.h | ||||
| $(OBJ_DIR)\ares_getnameinfo.obj: ares_getnameinfo.c setup.h nameser.h ares.h \ | ||||
|   ares_private.h ares_ipv6.h inet_ntop.h | ||||
| $(OBJ_DIR)\inet_net_pton.obj: inet_net_pton.c setup.h nameser.h ares_ipv6.h \ | ||||
|   inet_net_pton.h | ||||
| $(OBJ_DIR)\bitncmp.obj: bitncmp.c bitncmp.h | ||||
| $(OBJ_DIR)\inet_ntop.obj: inet_ntop.c setup.h nameser.h ares_ipv6.h inet_ntop.h | ||||
| @@ -1,4 +1,637 @@ | ||||
|  | ||||
|  | ||||
| dnl CURL_CHECK_HEADER_WINDOWS | ||||
| dnl ------------------------------------------------- | ||||
| dnl Check for compilable and valid windows.h header  | ||||
|  | ||||
| AC_DEFUN([CURL_CHECK_HEADER_WINDOWS], [ | ||||
|   AC_CACHE_CHECK([for windows.h], [ac_cv_header_windows_h], [ | ||||
|     AC_COMPILE_IFELSE([ | ||||
|       AC_LANG_PROGRAM([ | ||||
| #undef inline | ||||
| #ifndef WIN32_LEAN_AND_MEAN | ||||
| #define WIN32_LEAN_AND_MEAN | ||||
| #endif | ||||
| #include <windows.h> | ||||
|       ],[ | ||||
|         int dummy=2*WINVER; | ||||
|       ]) | ||||
|     ],[ | ||||
|       ac_cv_header_windows_h="yes" | ||||
|     ],[ | ||||
|       ac_cv_header_windows_h="no" | ||||
|     ]) | ||||
|   ]) | ||||
|   if test "x$ac_cv_header_windows_h" = "xyes"; then | ||||
|     AC_DEFINE_UNQUOTED(HAVE_WINDOWS_H, 1, | ||||
|       [Define to 1 if you have the windows.h header file.]) | ||||
|     AC_DEFINE_UNQUOTED(WIN32_LEAN_AND_MEAN, 1, | ||||
|       [Define to avoid automatic inclusion of winsock.h]) | ||||
|   fi | ||||
| ]) | ||||
|  | ||||
|  | ||||
| dnl CURL_CHECK_HEADER_WINSOCK | ||||
| dnl ------------------------------------------------- | ||||
| dnl Check for compilable and valid winsock.h header  | ||||
|  | ||||
| AC_DEFUN([CURL_CHECK_HEADER_WINSOCK], [ | ||||
|   AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl | ||||
|   AC_CACHE_CHECK([for winsock.h], [ac_cv_header_winsock_h], [ | ||||
|     AC_COMPILE_IFELSE([ | ||||
|       AC_LANG_PROGRAM([ | ||||
| #undef inline | ||||
| #ifndef WIN32_LEAN_AND_MEAN | ||||
| #define WIN32_LEAN_AND_MEAN | ||||
| #endif | ||||
| #include <windows.h> | ||||
| #include <winsock.h> | ||||
|       ],[ | ||||
|         int dummy=WSACleanup(); | ||||
|       ]) | ||||
|     ],[ | ||||
|       ac_cv_header_winsock_h="yes" | ||||
|     ],[ | ||||
|       ac_cv_header_winsock_h="no" | ||||
|     ]) | ||||
|   ]) | ||||
|   if test "x$ac_cv_header_winsock_h" = "xyes"; then | ||||
|     AC_DEFINE_UNQUOTED(HAVE_WINSOCK_H, 1, | ||||
|       [Define to 1 if you have the winsock.h header file.]) | ||||
|   fi | ||||
| ]) | ||||
|  | ||||
|  | ||||
| dnl CURL_CHECK_HEADER_WINSOCK2 | ||||
| dnl ------------------------------------------------- | ||||
| dnl Check for compilable and valid winsock2.h header  | ||||
|  | ||||
| AC_DEFUN([CURL_CHECK_HEADER_WINSOCK2], [ | ||||
|   AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl | ||||
|   AC_CACHE_CHECK([for winsock2.h], [ac_cv_header_winsock2_h], [ | ||||
|     AC_COMPILE_IFELSE([ | ||||
|       AC_LANG_PROGRAM([ | ||||
| #undef inline | ||||
| #ifndef WIN32_LEAN_AND_MEAN | ||||
| #define WIN32_LEAN_AND_MEAN | ||||
| #endif | ||||
| #include <windows.h> | ||||
| #include <winsock2.h> | ||||
|       ],[ | ||||
|         int dummy=2*IPPROTO_ESP; | ||||
|       ]) | ||||
|     ],[ | ||||
|       ac_cv_header_winsock2_h="yes" | ||||
|     ],[ | ||||
|       ac_cv_header_winsock2_h="no" | ||||
|     ]) | ||||
|   ]) | ||||
|   if test "x$ac_cv_header_winsock2_h" = "xyes"; then | ||||
|     AC_DEFINE_UNQUOTED(HAVE_WINSOCK2_H, 1, | ||||
|       [Define to 1 if you have the winsock2.h header file.]) | ||||
|   fi | ||||
| ]) | ||||
|  | ||||
|  | ||||
| dnl CURL_CHECK_HEADER_WS2TCPIP | ||||
| dnl ------------------------------------------------- | ||||
| dnl Check for compilable and valid ws2tcpip.h header | ||||
|  | ||||
| AC_DEFUN([CURL_CHECK_HEADER_WS2TCPIP], [ | ||||
|   AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl | ||||
|   AC_CACHE_CHECK([for ws2tcpip.h], [ac_cv_header_ws2tcpip_h], [ | ||||
|     AC_COMPILE_IFELSE([ | ||||
|       AC_LANG_PROGRAM([ | ||||
| #undef inline | ||||
| #ifndef WIN32_LEAN_AND_MEAN | ||||
| #define WIN32_LEAN_AND_MEAN | ||||
| #endif | ||||
| #include <windows.h> | ||||
| #include <winsock2.h> | ||||
| #include <ws2tcpip.h> | ||||
|       ],[ | ||||
|         int dummy=2*IP_PKTINFO; | ||||
|       ]) | ||||
|     ],[ | ||||
|       ac_cv_header_ws2tcpip_h="yes" | ||||
|     ],[ | ||||
|       ac_cv_header_ws2tcpip_h="no" | ||||
|     ]) | ||||
|   ]) | ||||
|   if test "x$ac_cv_header_ws2tcpip_h" = "xyes"; then | ||||
|     AC_DEFINE_UNQUOTED(HAVE_WS2TCPIP_H, 1, | ||||
|       [Define to 1 if you have the ws2tcpip.h header file.]) | ||||
|   fi | ||||
| ]) | ||||
|  | ||||
|  | ||||
| dnl CURL_CHECK_TYPE_SOCKLEN_T | ||||
| dnl ------------------------------------------------- | ||||
| dnl Check for existing socklen_t type, and provide | ||||
| dnl an equivalent type if socklen_t not available | ||||
|  | ||||
| AC_DEFUN([CURL_CHECK_TYPE_SOCKLEN_T], [ | ||||
|   AC_REQUIRE([CURL_CHECK_HEADER_WS2TCPIP])dnl | ||||
|   AC_CHECK_TYPE([socklen_t], ,[ | ||||
|     AC_CACHE_CHECK([for socklen_t equivalent],  | ||||
|       [curl_cv_socklen_t_equiv], [ | ||||
|       curl_cv_socklen_t_equiv="unknown" | ||||
|       for arg2 in "struct sockaddr" void; do | ||||
|         for t in int size_t unsigned long "unsigned long"; do | ||||
|           AC_COMPILE_IFELSE([ | ||||
|             AC_LANG_PROGRAM([ | ||||
| #undef inline | ||||
| #ifdef HAVE_WINDOWS_H | ||||
| #ifndef WIN32_LEAN_AND_MEAN | ||||
| #define WIN32_LEAN_AND_MEAN | ||||
| #endif | ||||
| #include <windows.h> | ||||
| #ifdef HAVE_WINSOCK2_H | ||||
| #include <winsock2.h> | ||||
| #else | ||||
| #ifdef HAVE_WINSOCK_H | ||||
| #include <winsock.h> | ||||
| #endif | ||||
| #endif | ||||
| #else | ||||
| #ifdef HAVE_SYS_TYPES_H | ||||
| #include <sys/types.h> | ||||
| #endif | ||||
| #ifdef HAVE_SYS_SOCKET_H | ||||
| #include <sys/socket.h> | ||||
| #endif | ||||
| #endif | ||||
|               int getpeername (int, $arg2 *, $t *); | ||||
|             ],[ | ||||
|               $t len=0; | ||||
|               getpeername(0,0,&len); | ||||
|             ]) | ||||
|           ],[ | ||||
|              curl_cv_socklen_t_equiv="$t" | ||||
|              break 2 | ||||
|           ]) | ||||
|         done | ||||
|       done | ||||
|     ]) | ||||
|     if test "$curl_cv_socklen_t_equiv" = "unknown"; then | ||||
|       AC_MSG_ERROR([Cannot find a type to use in place of socklen_t]) | ||||
|     else | ||||
|       AC_DEFINE_UNQUOTED(socklen_t, $curl_cv_socklen_t_equiv, | ||||
|         [type to use in place of socklen_t if not defined]) | ||||
|     fi | ||||
|   ],[ | ||||
| #undef inline | ||||
| #ifdef HAVE_WINDOWS_H | ||||
| #ifndef WIN32_LEAN_AND_MEAN | ||||
| #define WIN32_LEAN_AND_MEAN | ||||
| #endif | ||||
| #include <windows.h> | ||||
| #ifdef HAVE_WINSOCK2_H | ||||
| #include <winsock2.h> | ||||
| #ifdef HAVE_WS2TCPIP_H | ||||
| #include <ws2tcpip.h> | ||||
| #endif | ||||
| #endif | ||||
| #else | ||||
| #ifdef HAVE_SYS_TYPES_H | ||||
| #include <sys/types.h> | ||||
| #endif | ||||
| #ifdef HAVE_SYS_SOCKET_H | ||||
| #include <sys/socket.h> | ||||
| #endif | ||||
| #endif | ||||
|   ]) | ||||
| ]) | ||||
|  | ||||
|  | ||||
| dnl CURL_CHECK_FUNC_GETNAMEINFO | ||||
| dnl ------------------------------------------------- | ||||
| dnl Test if the getnameinfo function is available,  | ||||
| dnl and check the types of five of its arguments. | ||||
| dnl If the function succeeds HAVE_GETNAMEINFO will be | ||||
| dnl defined, defining the types of the arguments in | ||||
| dnl GETNAMEINFO_TYPE_ARG1, GETNAMEINFO_TYPE_ARG2, | ||||
| dnl GETNAMEINFO_TYPE_ARG46 and GETNAMEINFO_TYPE_ARG7. | ||||
| dnl This function is experimental and its results shall | ||||
| dnl not be trusted while this notice is in place ------ | ||||
|  | ||||
| AC_DEFUN([CURL_CHECK_FUNC_GETNAMEINFO], [ | ||||
|   AC_REQUIRE([CURL_CHECK_HEADER_WS2TCPIP])dnl | ||||
|   AC_REQUIRE([CURL_CHECK_TYPE_SOCKLEN_T])dnl | ||||
|   AC_CHECK_HEADERS(sys/types.h sys/socket.h netdb.h) | ||||
|   # | ||||
|   AC_MSG_CHECKING([for getnameinfo]) | ||||
|   AC_LINK_IFELSE([ | ||||
|       AC_LANG_FUNC_LINK_TRY([getnameinfo]) | ||||
|     ],[ | ||||
|       AC_MSG_RESULT([yes]) | ||||
|       curl_cv_getnameinfo="yes" | ||||
|     ],[ | ||||
|       AC_MSG_RESULT([no]) | ||||
|       curl_cv_getnameinfo="no" | ||||
|   ]) | ||||
|   # | ||||
|   if test "$curl_cv_getnameinfo" != "yes"; then | ||||
|     AC_MSG_CHECKING([deeper for getnameinfo]) | ||||
|     AC_TRY_LINK([ | ||||
|       ],[ | ||||
|         getnameinfo(); | ||||
|       ],[ | ||||
|         AC_MSG_RESULT([yes]) | ||||
|         curl_cv_getnameinfo="yes" | ||||
|       ],[ | ||||
|         AC_MSG_RESULT([but still no]) | ||||
|         curl_cv_getnameinfo="no" | ||||
|     ]) | ||||
|   fi | ||||
|   # | ||||
|   if test "$curl_cv_getnameinfo" != "yes"; then | ||||
|     AC_MSG_CHECKING([deeper and deeper for getnameinfo]) | ||||
|     AC_TRY_LINK([ | ||||
| #undef inline | ||||
| #ifdef HAVE_WINDOWS_H | ||||
| #ifndef WIN32_LEAN_AND_MEAN | ||||
| #define WIN32_LEAN_AND_MEAN | ||||
| #endif | ||||
| #include <windows.h> | ||||
| #ifdef HAVE_WINSOCK2_H | ||||
| #include <winsock2.h> | ||||
| #ifdef HAVE_WS2TCPIP_H | ||||
| #include <ws2tcpip.h> | ||||
| #endif | ||||
| #endif | ||||
| #else | ||||
| #ifdef HAVE_SYS_TYPES_H | ||||
| #include <sys/types.h> | ||||
| #endif | ||||
| #ifdef HAVE_SYS_SOCKET_H | ||||
| #include <sys/socket.h> | ||||
| #endif | ||||
| #ifdef HAVE_NETDB_H | ||||
| #include <netdb.h> | ||||
| #endif | ||||
| #endif | ||||
|       ],[ | ||||
|         getnameinfo(0, 0, 0, 0, 0, 0, 0); | ||||
|       ],[  | ||||
|         AC_MSG_RESULT([yes]) | ||||
|         curl_cv_getnameinfo="yes" | ||||
|       ],[ | ||||
|         AC_MSG_RESULT([but still no]) | ||||
|         curl_cv_getnameinfo="no" | ||||
|     ]) | ||||
|   fi | ||||
|   # | ||||
|   if test "$curl_cv_getnameinfo" = "yes"; then | ||||
|     AC_CACHE_CHECK([types of arguments for getnameinfo], | ||||
|       [curl_cv_func_getnameinfo_args], [ | ||||
|       curl_cv_func_getnameinfo_args="unknown" | ||||
|       for gni_arg1 in 'struct sockaddr *' 'const struct sockaddr *' 'void *'; do | ||||
|         for gni_arg2 in 'socklen_t' 'size_t' 'int'; do | ||||
|           for gni_arg46 in 'size_t' 'int' 'socklen_t' 'unsigned int' 'DWORD'; do | ||||
|             for gni_arg7 in 'int' 'unsigned int'; do | ||||
|               AC_COMPILE_IFELSE([ | ||||
|                 AC_LANG_PROGRAM([ | ||||
| #undef inline  | ||||
| #ifdef HAVE_WINDOWS_H | ||||
| #ifndef WIN32_LEAN_AND_MEAN | ||||
| #define WIN32_LEAN_AND_MEAN | ||||
| #endif | ||||
| #if (!defined(_WIN32_WINNT)) || (_WIN32_WINNT < 0x0501) | ||||
| #undef _WIN32_WINNT | ||||
| #define _WIN32_WINNT 0x0501 | ||||
| #endif | ||||
| #include <windows.h> | ||||
| #ifdef HAVE_WINSOCK2_H | ||||
| #include <winsock2.h>  | ||||
| #ifdef HAVE_WS2TCPIP_H | ||||
| #include <ws2tcpip.h> | ||||
| #endif | ||||
| #endif | ||||
| #define GNICALLCONV WSAAPI | ||||
| #else | ||||
| #ifdef HAVE_SYS_TYPES_H | ||||
| #include <sys/types.h> | ||||
| #endif | ||||
| #ifdef HAVE_SYS_SOCKET_H | ||||
| #include <sys/socket.h> | ||||
| #endif | ||||
| #ifdef HAVE_NETDB_H | ||||
| #include <netdb.h> | ||||
| #endif | ||||
| #define GNICALLCONV | ||||
| #endif | ||||
|                   extern int GNICALLCONV getnameinfo($gni_arg1, $gni_arg2, | ||||
|                                          char *, $gni_arg46, | ||||
|                                          char *, $gni_arg46, | ||||
|                                          $gni_arg7); | ||||
|                 ],[ | ||||
|                   $gni_arg2 salen=0; | ||||
|                   $gni_arg46 hostlen=0; | ||||
|                   $gni_arg46 servlen=0; | ||||
|                   $gni_arg7 flags=0; | ||||
|                   int res = getnameinfo(0, salen, 0, hostlen, 0, servlen, flags); | ||||
|                 ]) | ||||
|               ],[ | ||||
|                  curl_cv_func_getnameinfo_args="$gni_arg1,$gni_arg2,$gni_arg46,$gni_arg7" | ||||
|                  break 4 | ||||
|               ]) | ||||
|             done | ||||
|           done | ||||
|         done | ||||
|       done | ||||
|     ]) # AC_CACHE_CHECK | ||||
|     if test "$curl_cv_func_getnameinfo_args" = "unknown"; then | ||||
|       AC_MSG_WARN([Cannot find proper types to use for getnameinfo args]) | ||||
|       AC_MSG_WARN([HAVE_GETNAMEINFO will not be defined]) | ||||
|     else | ||||
|       gni_prev_IFS=$IFS; IFS=',' | ||||
|       set dummy `echo "$curl_cv_func_getnameinfo_args" | sed 's/\*/\*/g'` | ||||
|       IFS=$gni_prev_IFS | ||||
|       shift | ||||
|       AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG1, $[1], | ||||
|         [Define to the type of arg 1 for getnameinfo.]) | ||||
|       AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG2, $[2], | ||||
|         [Define to the type of arg 2 for getnameinfo.]) | ||||
|       AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG46, $[3], | ||||
|         [Define to the type of args 4 and 6 for getnameinfo.]) | ||||
|       AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG7, $[4], | ||||
|         [Define to the type of arg 7 for getnameinfo.]) | ||||
|       AC_DEFINE_UNQUOTED(HAVE_GETNAMEINFO, 1, | ||||
|         [Define to 1 if you have the getnameinfo function.]) | ||||
|       ac_cv_func_getnameinfo="yes" | ||||
|     fi | ||||
|   fi | ||||
| ]) # AC_DEFUN | ||||
|  | ||||
|  | ||||
| dnl CURL_CHECK_NONBLOCKING_SOCKET | ||||
| dnl ------------------------------------------------- | ||||
| dnl Check for how to set a socket to non-blocking state. There seems to exist | ||||
| dnl four known different ways, with the one used almost everywhere being POSIX | ||||
| dnl and XPG3, while the other different ways for different systems (old BSD, | ||||
| dnl Windows and Amiga). | ||||
| dnl | ||||
| dnl There are two known platforms (AIX 3.x and SunOS 4.1.x) where the | ||||
| dnl O_NONBLOCK define is found but does not work. This condition is attempted | ||||
| dnl to get caught in this script by using an excessive number of #ifdefs... | ||||
| dnl | ||||
| AC_DEFUN([CURL_CHECK_NONBLOCKING_SOCKET], | ||||
| [ | ||||
|   AC_MSG_CHECKING([non-blocking sockets style]) | ||||
|  | ||||
|   AC_TRY_COMPILE([ | ||||
| /* headers for O_NONBLOCK test */ | ||||
| #include <sys/types.h> | ||||
| #include <unistd.h> | ||||
| #include <fcntl.h> | ||||
| ],[ | ||||
| /* try to compile O_NONBLOCK */ | ||||
|  | ||||
| #if defined(sun) || defined(__sun__) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) | ||||
| # if defined(__SVR4) || defined(__srv4__) | ||||
| #  define PLATFORM_SOLARIS | ||||
| # else | ||||
| #  define PLATFORM_SUNOS4 | ||||
| # endif | ||||
| #endif | ||||
| #if (defined(_AIX) || defined(__xlC__)) && !defined(_AIX4) | ||||
| # define PLATFORM_AIX_V3 | ||||
| #endif | ||||
|  | ||||
| #if defined(PLATFORM_SUNOS4) || defined(PLATFORM_AIX_V3) || defined(__BEOS__) | ||||
| #error "O_NONBLOCK does not work on this platform" | ||||
| #endif | ||||
|   int socket; | ||||
|   int flags = fcntl(socket, F_SETFL, flags | O_NONBLOCK); | ||||
| ],[ | ||||
| dnl the O_NONBLOCK test was fine | ||||
| nonblock="O_NONBLOCK" | ||||
| AC_DEFINE(HAVE_O_NONBLOCK, 1, [use O_NONBLOCK for non-blocking sockets]) | ||||
| ],[ | ||||
| dnl the code was bad, try a different program now, test 2 | ||||
|  | ||||
|   AC_TRY_COMPILE([ | ||||
| /* headers for FIONBIO test */ | ||||
| #include <unistd.h> | ||||
| #include <stropts.h> | ||||
| ],[ | ||||
| /* FIONBIO source test (old-style unix) */ | ||||
|  int socket; | ||||
|  int flags = ioctl(socket, FIONBIO, &flags); | ||||
| ],[ | ||||
| dnl FIONBIO test was good | ||||
| nonblock="FIONBIO" | ||||
| AC_DEFINE(HAVE_FIONBIO, 1, [use FIONBIO for non-blocking sockets]) | ||||
| ],[ | ||||
| dnl FIONBIO test was also bad | ||||
| dnl the code was bad, try a different program now, test 3 | ||||
|  | ||||
|   AC_TRY_COMPILE([ | ||||
| /* headers for ioctlsocket test (Windows) */ | ||||
| #undef inline | ||||
| #ifdef HAVE_WINDOWS_H | ||||
| #ifndef WIN32_LEAN_AND_MEAN | ||||
| #define WIN32_LEAN_AND_MEAN | ||||
| #endif | ||||
| #include <windows.h> | ||||
| #ifdef HAVE_WINSOCK2_H | ||||
| #include <winsock2.h> | ||||
| #else | ||||
| #ifdef HAVE_WINSOCK_H | ||||
| #include <winsock.h> | ||||
| #endif | ||||
| #endif | ||||
| #endif | ||||
| ],[ | ||||
| /* ioctlsocket source code */ | ||||
|  SOCKET sd; | ||||
|  unsigned long flags = 0; | ||||
|  sd = socket(0, 0, 0); | ||||
|  ioctlsocket(sd, FIONBIO, &flags); | ||||
| ],[ | ||||
| dnl ioctlsocket test was good | ||||
| nonblock="ioctlsocket" | ||||
| AC_DEFINE(HAVE_IOCTLSOCKET, 1, [use ioctlsocket() for non-blocking sockets]) | ||||
| ],[ | ||||
| dnl ioctlsocket didnt compile!, go to test 4 | ||||
|  | ||||
|   AC_TRY_LINK([ | ||||
| /* headers for IoctlSocket test (Amiga?) */ | ||||
| #include <sys/ioctl.h> | ||||
| ],[ | ||||
| /* IoctlSocket source code */ | ||||
|  int socket; | ||||
|  int flags = IoctlSocket(socket, FIONBIO, (long)1); | ||||
| ],[ | ||||
| dnl ioctlsocket test was good | ||||
| nonblock="IoctlSocket" | ||||
| AC_DEFINE(HAVE_IOCTLSOCKET_CASE, 1, [use Ioctlsocket() for non-blocking sockets]) | ||||
| ],[ | ||||
| dnl Ioctlsocket didnt compile, do test 5! | ||||
|   AC_TRY_COMPILE([ | ||||
| /* headers for SO_NONBLOCK test (BeOS) */ | ||||
| #include <socket.h> | ||||
| ],[ | ||||
| /* SO_NONBLOCK source code */ | ||||
|  long b = 1; | ||||
|  int socket; | ||||
|  int flags = setsockopt(socket, SOL_SOCKET, SO_NONBLOCK, &b, sizeof(b)); | ||||
| ],[ | ||||
| dnl the SO_NONBLOCK test was good | ||||
| nonblock="SO_NONBLOCK" | ||||
| AC_DEFINE(HAVE_SO_NONBLOCK, 1, [use SO_NONBLOCK for non-blocking sockets]) | ||||
| ],[ | ||||
| dnl test 5 didnt compile! | ||||
| nonblock="nada" | ||||
| AC_DEFINE(HAVE_DISABLED_NONBLOCKING, 1, [disabled non-blocking sockets]) | ||||
| ]) | ||||
| dnl end of fifth test | ||||
|  | ||||
| ]) | ||||
| dnl end of forth test | ||||
|  | ||||
| ]) | ||||
| dnl end of third test | ||||
|  | ||||
| ]) | ||||
| dnl end of second test | ||||
|  | ||||
| ]) | ||||
| dnl end of non-blocking try-compile test | ||||
|   AC_MSG_RESULT($nonblock) | ||||
|  | ||||
|   if test "$nonblock" = "nada"; then | ||||
|     AC_MSG_WARN([non-block sockets disabled]) | ||||
|   fi | ||||
| ]) | ||||
|  | ||||
|  | ||||
| dnl TYPE_SOCKADDR_STORAGE | ||||
| dnl ------------------------------------------------- | ||||
| dnl Check for struct sockaddr_storage. Most IPv6-enabled hosts have it, but | ||||
| dnl AIX 4.3 is one known exception. | ||||
| AC_DEFUN([TYPE_SOCKADDR_STORAGE], | ||||
| [ | ||||
|    AC_CHECK_TYPE([struct sockaddr_storage], | ||||
|         AC_DEFINE(HAVE_STRUCT_SOCKADDR_STORAGE, 1, | ||||
|                   [if struct sockaddr_storage is defined]), , | ||||
|    [ | ||||
| #undef inline | ||||
| #ifdef HAVE_WINDOWS_H | ||||
| #ifndef WIN32_LEAN_AND_MEAN | ||||
| #define WIN32_LEAN_AND_MEAN | ||||
| #endif | ||||
| #include <windows.h> | ||||
| #ifdef HAVE_WINSOCK2_H | ||||
| #include <winsock2.h> | ||||
| #endif | ||||
| #else | ||||
| #ifdef HAVE_SYS_TYPES_H | ||||
| #include <sys/types.h> | ||||
| #endif | ||||
| #ifdef HAVE_SYS_SOCKET_H | ||||
| #include <sys/socket.h> | ||||
| #endif | ||||
| #ifdef HAVE_NETINET_IN_H | ||||
| #include <netinet/in.h> | ||||
| #endif | ||||
| #ifdef HAVE_ARPA_INET_H | ||||
| #include <arpa/inet.h> | ||||
| #endif | ||||
| #endif | ||||
|    ]) | ||||
| ]) | ||||
|  | ||||
|  | ||||
| dnl TYPE_IN_ADDR_T | ||||
| dnl ------------------------------------------------- | ||||
| dnl Check for in_addr_t: it is used to receive the return code of inet_addr() | ||||
| dnl and a few other things. | ||||
| AC_DEFUN([TYPE_IN_ADDR_T], | ||||
| [ | ||||
|    AC_CHECK_TYPE([in_addr_t], ,[ | ||||
|       AC_MSG_CHECKING([for in_addr_t equivalent]) | ||||
|       AC_CACHE_VAL([curl_cv_in_addr_t_equiv], | ||||
|       [ | ||||
|          curl_cv_in_addr_t_equiv= | ||||
|          for t in "unsigned long" int size_t unsigned long; do | ||||
|             AC_TRY_COMPILE([ | ||||
| #undef inline | ||||
| #ifdef HAVE_WINDOWS_H | ||||
| #ifndef WIN32_LEAN_AND_MEAN | ||||
| #define WIN32_LEAN_AND_MEAN | ||||
| #endif | ||||
| #include <windows.h> | ||||
| #ifdef HAVE_WINSOCK2_H | ||||
| #include <winsock2.h> | ||||
| #else | ||||
| #ifdef HAVE_WINSOCK_H | ||||
| #include <winsock.h> | ||||
| #endif | ||||
| #endif | ||||
| #else | ||||
| #ifdef HAVE_SYS_TYPES_H | ||||
| #include <sys/types.h> | ||||
| #endif | ||||
| #ifdef HAVE_SYS_SOCKET_H | ||||
| #include <sys/socket.h> | ||||
| #endif | ||||
| #ifdef HAVE_NETINET_IN_H | ||||
| #include <netinet/in.h> | ||||
| #endif | ||||
| #ifdef HAVE_ARPA_INET_H | ||||
| #include <arpa/inet.h> | ||||
| #endif | ||||
| #endif | ||||
|             ],[ | ||||
|                $t data = inet_addr ("1.2.3.4"); | ||||
|             ],[ | ||||
|                curl_cv_in_addr_t_equiv="$t" | ||||
|                break | ||||
|             ]) | ||||
|          done | ||||
|  | ||||
|          if test "x$curl_cv_in_addr_t_equiv" = x; then | ||||
|             AC_MSG_ERROR([Cannot find a type to use in place of in_addr_t]) | ||||
|          fi | ||||
|       ]) | ||||
|       AC_MSG_RESULT($curl_cv_in_addr_t_equiv) | ||||
|       AC_DEFINE_UNQUOTED(in_addr_t, $curl_cv_in_addr_t_equiv, | ||||
| 			[type to use in place of in_addr_t if not defined])], | ||||
|       [ | ||||
| #undef inline | ||||
| #ifdef HAVE_WINDOWS_H | ||||
| #ifndef WIN32_LEAN_AND_MEAN | ||||
| #define WIN32_LEAN_AND_MEAN | ||||
| #endif | ||||
| #include <windows.h> | ||||
| #ifdef HAVE_WINSOCK2_H | ||||
| #include <winsock2.h> | ||||
| #else | ||||
| #ifdef HAVE_WINSOCK_H | ||||
| #include <winsock.h> | ||||
| #endif | ||||
| #endif | ||||
| #else | ||||
| #ifdef HAVE_SYS_TYPES_H | ||||
| #include <sys/types.h> | ||||
| #endif | ||||
| #ifdef HAVE_SYS_SOCKET_H | ||||
| #include <sys/socket.h> | ||||
| #endif | ||||
| #ifdef HAVE_NETINET_IN_H | ||||
| #include <netinet/in.h> | ||||
| #endif | ||||
| #ifdef HAVE_ARPA_INET_H | ||||
| #include <arpa/inet.h> | ||||
| #endif | ||||
|  | ||||
| #endif | ||||
|   ]) dnl AC_CHECK_TYPE | ||||
| ]) dnl AC_DEFUN | ||||
|  | ||||
|  | ||||
| dnl We create a function for detecting which compiler we use and then set as | ||||
| dnl pendantic compiler options as possible for that particular compiler. The | ||||
| dnl options are only used for debug-builds. | ||||
| @@ -146,3 +779,50 @@ AC_DEFUN([CARES_CHECK_CONSTANT], [ | ||||
| ]) | ||||
|  | ||||
|  | ||||
| dnl This macro determines how many parameters getservbyport_r takes | ||||
| AC_DEFUN([CARES_CHECK_GETSERVBYPORT_R], [ | ||||
|   AC_MSG_CHECKING([how many arguments getservbyport_r takes]) | ||||
|   AC_TRY_LINK( | ||||
|     [#include <netdb.h>], | ||||
|     [ | ||||
|       int p1, p5; | ||||
|       char *p2, p4[4096]; | ||||
|       struct servent *p3, *p6; | ||||
|       getservbyport_r(p1, p2, p3, p4, p5, &p6); | ||||
|     ], ac_func_getservbyport_r=6, | ||||
|     [AC_TRY_LINK( | ||||
|       [#include <netdb.h>], | ||||
|       [ | ||||
|         int p1, p5; | ||||
|         char *p2, p4[4096]; | ||||
|         struct servent *p3; | ||||
|         getservbyport_r(p1, p2, p3, p4, p5); | ||||
|       ], ac_func_getservbyport_r=5, | ||||
|       [AC_TRY_LINK( | ||||
|         [#include <netdb.h>], | ||||
|         [ | ||||
|           int p1; | ||||
|           char *p2; | ||||
|           struct servent *p3; | ||||
|           struct servent_data p4; | ||||
|           getservbyport_r(p1, p2, p3, &p4); | ||||
|         ], ac_func_getservbyport_r=4, ac_func_getservbyport_r=0 | ||||
|       )] | ||||
|     )] | ||||
|   ) | ||||
| if test $ac_func_getservbyport_r != "0" ; then | ||||
|   AC_MSG_RESULT($ac_func_getservbyport_r) | ||||
|   AC_DEFINE(HAVE_GETSERVBYPORT_R, 1, [Specifies whether getservbyport_r is present]) | ||||
|   AC_DEFINE_UNQUOTED(GETSERVBYPORT_R_ARGS, $ac_func_getservbyport_r, [Specifies the number of arguments to  | ||||
| getservbyport_r]) | ||||
|   if test $ac_func_getservbyport_r = "4" ; then | ||||
|    AC_DEFINE(GETSERVBYPORT_R_BUFSIZE, sizeof(struct servent_data), [Specifies the size of the buffer to pass to  | ||||
| getservbyport_r]) | ||||
|   else | ||||
|    AC_DEFINE(GETSERVBYPORT_R_BUFSIZE, 4096, [Specifies the size of the buffer to pass to getservbyport_r]) | ||||
|   fi | ||||
| else | ||||
|   AC_MSG_RESULT([not found]) | ||||
| fi | ||||
| ]) | ||||
|  | ||||
|   | ||||
							
								
								
									
										45
									
								
								ares/adig.c
									
									
									
									
									
								
							
							
						
						
									
										45
									
								
								ares/adig.c
									
									
									
									
									
								
							| @@ -27,14 +27,23 @@ | ||||
| #include <unistd.h> | ||||
| #include <netdb.h> | ||||
| #endif | ||||
| #ifdef HAVE_GETOPT_H | ||||
| #include <getopt.h> | ||||
| #endif | ||||
|  | ||||
| #include <stdio.h> | ||||
| #include <stdlib.h> | ||||
| #include <string.h> | ||||
| #include <ctype.h> | ||||
| #include <errno.h> | ||||
|  | ||||
| #include "ares.h" | ||||
| #include "ares_dns.h" | ||||
| #include "inet_ntop.h" | ||||
|  | ||||
| #ifdef WATT32 | ||||
| #undef WIN32  /* Redefined in MingW headers */ | ||||
| #endif | ||||
|  | ||||
| #ifndef INADDR_NONE | ||||
| #define INADDR_NONE 0xffffffff | ||||
| @@ -45,8 +54,10 @@ | ||||
| #define T_SRV 33 /* server selection */ | ||||
| #endif | ||||
|  | ||||
| #ifndef optind | ||||
| extern int optind; | ||||
| extern char *optarg; | ||||
| #endif | ||||
|  | ||||
| struct nv { | ||||
|   const char *name; | ||||
| @@ -216,7 +227,7 @@ int main(int argc, char **argv) | ||||
|           /* Set the TCP port number. */ | ||||
|           if (!isdigit((unsigned char)*optarg)) | ||||
|             usage(); | ||||
|           options.tcp_port = strtol(optarg, NULL, 0); | ||||
|           options.tcp_port = (unsigned short)strtol(optarg, NULL, 0); | ||||
|           optmask |= ARES_OPT_TCP_PORT; | ||||
|           break; | ||||
|  | ||||
| @@ -224,7 +235,7 @@ int main(int argc, char **argv) | ||||
|           /* Set the UDP port number. */ | ||||
|           if (!isdigit((unsigned char)*optarg)) | ||||
|             usage(); | ||||
|           options.udp_port = strtol(optarg, NULL, 0); | ||||
|           options.udp_port = (unsigned short)strtol(optarg, NULL, 0); | ||||
|           optmask |= ARES_OPT_UDP_PORT; | ||||
|           break; | ||||
|         } | ||||
| @@ -412,7 +423,7 @@ static const unsigned char *display_rr(const unsigned char *aptr, | ||||
|   char *name; | ||||
|   int type, dnsclass, ttl, dlen, status; | ||||
|   long len; | ||||
|   struct in_addr addr; | ||||
|   char addr[46]; | ||||
|  | ||||
|   /* Parse the RR name. */ | ||||
|   status = ares_expand_name(aptr, abuf, alen, &name, &len); | ||||
| @@ -474,12 +485,12 @@ static const unsigned char *display_rr(const unsigned char *aptr, | ||||
|       len = *p; | ||||
|       if (p + len + 1 > aptr + dlen) | ||||
|         return NULL; | ||||
|       printf("\t%.*s", len, p + 1); | ||||
|       printf("\t%.*s", (int)len, p + 1); | ||||
|       p += len + 1; | ||||
|       len = *p; | ||||
|       if (p + len + 1 > aptr + dlen) | ||||
|         return NULL; | ||||
|       printf("\t%.*s", len, p + 1); | ||||
|       printf("\t%.*s", (int)len, p + 1); | ||||
|       break; | ||||
|  | ||||
|     case T_MINFO: | ||||
| @@ -504,7 +515,7 @@ static const unsigned char *display_rr(const unsigned char *aptr, | ||||
|        */ | ||||
|       if (dlen < 2) | ||||
|         return NULL; | ||||
|       printf("\t%d", (aptr[0] << 8) | aptr[1]); | ||||
|       printf("\t%d", DNS__16BIT(aptr)); | ||||
|       status = ares_expand_name(aptr + 2, abuf, alen, &name, &len); | ||||
|       if (status != ARES_SUCCESS) | ||||
|         return NULL; | ||||
| @@ -531,12 +542,9 @@ static const unsigned char *display_rr(const unsigned char *aptr, | ||||
|       p += len; | ||||
|       if (p + 20 > aptr + dlen) | ||||
|         return NULL; | ||||
|       printf("\t\t\t\t\t\t( %d %d %d %d %d )", | ||||
|              (p[0] << 24) | (p[1] << 16) | (p[2] << 8) | p[3], | ||||
|              (p[4] << 24) | (p[5] << 16) | (p[6] << 8) | p[7], | ||||
|              (p[8] << 24) | (p[9] << 16) | (p[10] << 8) | p[11], | ||||
|              (p[12] << 24) | (p[13] << 16) | (p[14] << 8) | p[15], | ||||
|              (p[16] << 24) | (p[17] << 16) | (p[18] << 8) | p[19]); | ||||
|       printf("\t\t\t\t\t\t( %lu %lu %lu %lu %lu )", | ||||
|              DNS__32BIT(p), DNS__32BIT(p+4), DNS__32BIT(p+8), | ||||
|              DNS__32BIT(p+12), DNS__32BIT(p+16)); | ||||
|       break; | ||||
|  | ||||
|     case T_TXT: | ||||
| @@ -548,7 +556,7 @@ static const unsigned char *display_rr(const unsigned char *aptr, | ||||
|           len = *p; | ||||
|           if (p + len + 1 > aptr + dlen) | ||||
|             return NULL; | ||||
|           printf("\t%.*s", len, p + 1); | ||||
|           printf("\t%.*s", (int)len, p + 1); | ||||
|           p += len + 1; | ||||
|         } | ||||
|       break; | ||||
| @@ -557,8 +565,14 @@ static const unsigned char *display_rr(const unsigned char *aptr, | ||||
|       /* The RR data is a four-byte Internet address. */ | ||||
|       if (dlen != 4) | ||||
|         return NULL; | ||||
|       memcpy(&addr, aptr, sizeof(struct in_addr)); | ||||
|       printf("\t%s", inet_ntoa(addr)); | ||||
|       printf("\t%s", ares_inet_ntop(AF_INET,aptr,addr,sizeof(addr))); | ||||
|       break; | ||||
|  | ||||
|     case T_AAAA: | ||||
|       /* The RR data is a 16-byte IPv6 address. */ | ||||
|       if (dlen != 16) | ||||
|         return NULL; | ||||
|       printf("\t%s", ares_inet_ntop(AF_INET6,aptr,addr,sizeof(addr))); | ||||
|       break; | ||||
|  | ||||
|     case T_WKS: | ||||
| @@ -583,6 +597,7 @@ static const unsigned char *display_rr(const unsigned char *aptr, | ||||
|  | ||||
|     default: | ||||
|       printf("\t[Unknown RR; cannot parse]"); | ||||
|       break; | ||||
|     } | ||||
|   printf("\n"); | ||||
|  | ||||
|   | ||||
							
								
								
									
										48
									
								
								ares/ahost.c
									
									
									
									
									
								
							
							
						
						
									
										48
									
								
								ares/ahost.c
									
									
									
									
									
								
							| @@ -29,13 +29,23 @@ | ||||
| #include <stdio.h> | ||||
| #include <stdlib.h> | ||||
| #include <string.h> | ||||
|  | ||||
| #include "ares.h" | ||||
| #include "ares_dns.h" | ||||
| #include "inet_ntop.h" | ||||
| #include "inet_net_pton.h" | ||||
|  | ||||
| #ifndef INADDR_NONE | ||||
| #define INADDR_NONE 0xffffffff | ||||
| #endif | ||||
|  | ||||
| #ifndef HAVE_STRUCT_IN6_ADDR | ||||
| struct in6_addr | ||||
| { | ||||
|   unsigned char s6_addr[16]; | ||||
| }; | ||||
| #endif | ||||
|  | ||||
| static void callback(void *arg, int status, struct hostent *host); | ||||
| static void usage(void); | ||||
|  | ||||
| @@ -45,7 +55,8 @@ int main(int argc, char **argv) | ||||
|   int status, nfds; | ||||
|   fd_set read_fds, write_fds; | ||||
|   struct timeval *tvp, tv; | ||||
|   struct in_addr addr; | ||||
|   struct in_addr addr4; | ||||
|   struct in6_addr addr6; | ||||
|  | ||||
| #ifdef WIN32 | ||||
|   WORD wVersionRequested = MAKEWORD(1,1); | ||||
| @@ -66,13 +77,20 @@ int main(int argc, char **argv) | ||||
|   /* Initiate the queries, one per command-line argument. */ | ||||
|   for (argv++; *argv; argv++) | ||||
|     { | ||||
|       addr.s_addr = inet_addr(*argv); | ||||
|       if (addr.s_addr == INADDR_NONE) | ||||
|         ares_gethostbyname(channel, *argv, AF_INET, callback, *argv); | ||||
|       if (ares_inet_pton(AF_INET, *argv, &addr4) == 1) | ||||
|         { | ||||
|           ares_gethostbyaddr(channel, &addr4, sizeof(addr4), AF_INET, callback, | ||||
|                              *argv); | ||||
|         } | ||||
|       else if (ares_inet_pton(AF_INET6, *argv, &addr6) == 1) | ||||
|         { | ||||
|           ares_gethostbyaddr(channel, &addr6, sizeof(addr6), AF_INET6, callback, | ||||
|                              *argv); | ||||
|         } | ||||
|       else | ||||
|         { | ||||
|           ares_gethostbyaddr(channel, &addr, sizeof(addr), AF_INET, callback, | ||||
|                              *argv); | ||||
|           /* assume user wants A-records */ | ||||
|           ares_gethostbyname(channel, *argv, AF_INET, callback, *argv); | ||||
|         } | ||||
|     } | ||||
|  | ||||
| @@ -95,7 +113,6 @@ int main(int argc, char **argv) | ||||
|  | ||||
| static void callback(void *arg, int status, struct hostent *host) | ||||
| { | ||||
|   struct in_addr addr; | ||||
|   char **p; | ||||
|  | ||||
|   if (status != ARES_SUCCESS) | ||||
| @@ -106,8 +123,21 @@ static void callback(void *arg, int status, struct hostent *host) | ||||
|  | ||||
|   for (p = host->h_addr_list; *p; p++) | ||||
|     { | ||||
|       memcpy(&addr, *p, sizeof(struct in_addr)); | ||||
|       printf("%-32s\t%s\n", host->h_name, inet_ntoa(addr)); | ||||
|       char addr_buf[46] = "??"; | ||||
|  | ||||
|       ares_inet_ntop(host->h_addrtype, *p, addr_buf, sizeof(addr_buf)); | ||||
|       printf("%-32s\t%s", host->h_name, addr_buf); | ||||
| #if 0 | ||||
|       if (host->h_aliases[0]) | ||||
|         { | ||||
|            int i; | ||||
|  | ||||
| 	   printf (", Aliases: "); | ||||
| 	   for (i = 0; host->h_aliases[i]; i++) | ||||
|                printf("%s ", host->h_aliases[i]); | ||||
|         } | ||||
| #endif | ||||
|       puts(""); | ||||
|     } | ||||
| } | ||||
|  | ||||
|   | ||||
							
								
								
									
										61
									
								
								ares/ares.h
									
									
									
									
									
								
							
							
						
						
									
										61
									
								
								ares/ares.h
									
									
									
									
									
								
							| @@ -29,12 +29,14 @@ | ||||
|  | ||||
| #if defined(WATT32) | ||||
|   #include <netinet/in.h> | ||||
|   #include <sys/socket.h> | ||||
|   #include <tcp.h> | ||||
| #elif defined(WIN32) | ||||
|   #include <winsock.h> | ||||
|   #include <winsock2.h> | ||||
|   #include <windows.h> | ||||
| #else | ||||
|   #include <netinet/in.h> | ||||
|   #include <sys/socket.h> | ||||
| #endif | ||||
|  | ||||
| #ifdef  __cplusplus | ||||
| @@ -64,6 +66,13 @@ extern "C" { | ||||
| #define ARES_EDESTRUCTION       16 | ||||
| #define ARES_EBADSTR            17 | ||||
|  | ||||
| /* ares_getnameinfo error codes */ | ||||
| #define ARES_EBADFLAGS          18 | ||||
|  | ||||
| /* ares_getaddrinfo error codes */ | ||||
| #define ARES_ENONAME            19 | ||||
| #define ARES_EBADHINTS          20 | ||||
|  | ||||
| /* Flag values */ | ||||
| #define ARES_FLAG_USEVC         (1 << 0) | ||||
| #define ARES_FLAG_PRIMARY       (1 << 1) | ||||
| @@ -85,6 +94,47 @@ extern "C" { | ||||
| #define ARES_OPT_DOMAINS        (1 << 7) | ||||
| #define ARES_OPT_LOOKUPS        (1 << 8) | ||||
|  | ||||
| /* Nameinfo flag values */ | ||||
| #define ARES_NI_NOFQDN                  (1 << 0) | ||||
| #define ARES_NI_NUMERICHOST             (1 << 1) | ||||
| #define ARES_NI_NAMEREQD                (1 << 2) | ||||
| #define ARES_NI_NUMERICSERV             (1 << 3) | ||||
| #define ARES_NI_DGRAM                   (1 << 4) | ||||
| #define ARES_NI_TCP                     0 | ||||
| #define ARES_NI_UDP                     ARES_NI_DGRAM | ||||
| #define ARES_NI_SCTP                    (1 << 5) | ||||
| #define ARES_NI_DCCP                    (1 << 6) | ||||
| #define ARES_NI_NUMERICSCOPE            (1 << 7) | ||||
| #define ARES_NI_LOOKUPHOST              (1 << 8) | ||||
| #define ARES_NI_LOOKUPSERVICE           (1 << 9) | ||||
| /* Reserved for future use */ | ||||
| #define ARES_NI_IDN                     (1 << 10) | ||||
| #define ARES_NI_IDN_ALLOW_UNASSIGNED    (1 << 11) | ||||
| #define ARES_NI_IDN_USE_STD3_ASCII_RULES (1 << 12) | ||||
|  | ||||
| /* Addrinfo flag values */ | ||||
| #define ARES_AI_CANONNAME               (1 << 0) | ||||
| #define ARES_AI_NUMERICHOST             (1 << 1) | ||||
| #define ARES_AI_PASSIVE                 (1 << 2) | ||||
| #define ARES_AI_NUMERICSERV             (1 << 3) | ||||
| #define ARES_AI_V4MAPPED                (1 << 4) | ||||
| #define ARES_AI_ALL                     (1 << 5) | ||||
| #define ARES_AI_ADDRCONFIG              (1 << 6) | ||||
| /* Reserved for future use */ | ||||
| #define ARES_AI_IDN                     (1 << 10) | ||||
| #define ARES_AI_IDN_ALLOW_UNASSIGNED    (1 << 11) | ||||
| #define ARES_AI_IDN_USE_STD3_ASCII_RULES (1 << 12) | ||||
| #define ARES_AI_CANONIDN                (1 << 13) | ||||
|  | ||||
| #define ARES_AI_MASK (ARES_AI_CANONNAME|ARES_AI_NUMERICHOST|ARES_AI_PASSIVE| \ | ||||
|                       ARES_AI_NUMERICSERV|ARES_AI_V4MAPPED|ARES_AI_ALL| \ | ||||
|                       ARES_AI_ADDRCONFIG) | ||||
| #define ARES_GETSOCK_MAXNUM 16 /* ares_getsock() can return info about this | ||||
|                                   many sockets */ | ||||
| #define ARES_GETSOCK_READABLE(bits,num) (bits & (1<< (num))) | ||||
| #define ARES_GETSOCK_WRITABLE(bits,num) (bits & (1 << ((num) + \ | ||||
|                                          ARES_GETSOCK_MAXNUM))) | ||||
|  | ||||
| struct ares_options { | ||||
|   int flags; | ||||
|   int timeout; | ||||
| @@ -101,12 +151,15 @@ struct ares_options { | ||||
|  | ||||
| struct hostent; | ||||
| struct timeval; | ||||
| struct sockaddr; | ||||
| struct ares_channeldata; | ||||
| typedef struct ares_channeldata *ares_channel; | ||||
| typedef void (*ares_callback)(void *arg, int status, unsigned char *abuf, | ||||
|                               int alen); | ||||
| typedef void (*ares_host_callback)(void *arg, int status, | ||||
|                                    struct hostent *hostent); | ||||
| typedef void (*ares_nameinfo_callback)(void *arg, int status, | ||||
|                                        char *node, char *service); | ||||
|  | ||||
| int ares_init(ares_channel *channelptr); | ||||
| int ares_init_options(ares_channel *channelptr, struct ares_options *options, | ||||
| @@ -123,8 +176,12 @@ void ares_gethostbyname(ares_channel channel, const char *name, int family, | ||||
|                         ares_host_callback callback, void *arg); | ||||
| void ares_gethostbyaddr(ares_channel channel, const void *addr, int addrlen, | ||||
|                         int family, ares_host_callback callback, void *arg); | ||||
|  | ||||
| void ares_getnameinfo(ares_channel channel, const struct sockaddr *sa, | ||||
|                       socklen_t salen, int flags, | ||||
|                       ares_nameinfo_callback callback, | ||||
|                       void *arg); | ||||
| int ares_fds(ares_channel channel, fd_set *read_fds, fd_set *write_fds); | ||||
| int ares_getsock(ares_channel channel, int *socks, int numsocks); | ||||
| struct timeval *ares_timeout(ares_channel channel, struct timeval *maxtv, | ||||
|                              struct timeval *tv); | ||||
| void ares_process(ares_channel channel, fd_set *read_fds, fd_set *write_fds); | ||||
|   | ||||
| @@ -50,7 +50,7 @@ int ares__read_line(FILE *fp, char **buf, int *bufsize) | ||||
|       if ((*buf)[len - 1] == '\n') | ||||
|         { | ||||
|           (*buf)[len - 1] = 0; | ||||
|           return ARES_SUCCESS; | ||||
|           break; | ||||
|         } | ||||
|       offset = len; | ||||
|  | ||||
| @@ -61,4 +61,5 @@ int ares__read_line(FILE *fp, char **buf, int *bufsize) | ||||
|       *buf = newbuf; | ||||
|       *bufsize *= 2; | ||||
|     } | ||||
|   return ARES_SUCCESS; | ||||
| } | ||||
|   | ||||
| @@ -34,6 +34,6 @@ might have been stored in their arguments. | ||||
| .BR ares_init (3) | ||||
| .BR ares_destroy (3) | ||||
| .SH NOTES | ||||
| This function is not compatible with ares. | ||||
| This function was added in c-ares 1.2.0 | ||||
| .SH AUTHOR | ||||
| Dirk Manske | ||||
|   | ||||
| @@ -18,6 +18,18 @@ | ||||
| #ifndef ARES__DNS_H | ||||
| #define ARES__DNS_H | ||||
|  | ||||
| #ifdef ARES_BIG_ENDIAN | ||||
| /* big-endian aware versions */ | ||||
| #define DNS__16BIT(p)                   (((p)[1] << 8) | (p)[0]) | ||||
| #define DNS__32BIT(p)                   (((p)[3] << 24) | ((p)[2] << 16) | \ | ||||
|                                          ((p)[1] << 8) | (p)[0]) | ||||
| #define DNS__SET16BIT(p, v)             (((p)[1] = ((v) >> 8) & 0xff), \ | ||||
|                                          ((p)[0] = (v) & 0xff)) | ||||
| #define DNS__SET32BIT(p, v)             (((p)[3] = ((v) >> 24) & 0xff), \ | ||||
|                                          ((p)[2] = ((v) >> 16) & 0xff), \ | ||||
|                                          ((p)[1] = ((v) >> 8) & 0xff), \ | ||||
|                                          ((p)[0] = (v) & 0xff)) | ||||
| #else | ||||
| #define DNS__16BIT(p)                   (((p)[0] << 8) | (p)[1]) | ||||
| #define DNS__32BIT(p)                   (((p)[0] << 24) | ((p)[1] << 16) | \ | ||||
|                                          ((p)[2] << 8) | (p)[3]) | ||||
| @@ -27,6 +39,16 @@ | ||||
|                                          ((p)[1] = ((v) >> 16) & 0xff), \ | ||||
|                                          ((p)[2] = ((v) >> 8) & 0xff), \ | ||||
|                                          ((p)[3] = (v) & 0xff)) | ||||
| #endif | ||||
|  | ||||
| #if 0 | ||||
| /* we cannot use this approach on systems where we can't access 16/32 bit | ||||
|    data on un-aligned addresses */ | ||||
| #define DNS__16BIT(p)                   ntohs(*(unsigned short*)(p)) | ||||
| #define DNS__32BIT(p)                   ntohl(*(unsigned long*)(p)) | ||||
| #define DNS__SET16BIT(p, v)             *(unsigned short*)(p) = htons(v) | ||||
| #define DNS__SET32BIT(p, v)             *(unsigned long*)(p) = htonl(v) | ||||
| #endif | ||||
|  | ||||
| /* Macros for parsing a DNS header */ | ||||
| #define DNS_HEADER_QID(h)               DNS__16BIT(h) | ||||
|   | ||||
| @@ -106,6 +106,8 @@ int ares_expand_name(const unsigned char *encoded, const unsigned char *abuf, | ||||
|   /* Nuke the trailing period if we wrote one. */ | ||||
|   if (q > *s) | ||||
|     *(q - 1) = 0; | ||||
|   else | ||||
|     *q = 0; /* zero terminate */ | ||||
|  | ||||
|   return ARES_SUCCESS; | ||||
| } | ||||
|   | ||||
| @@ -1,3 +1,5 @@ | ||||
| /* $Id$ */ | ||||
|  | ||||
| /* Copyright 1998 by the Massachusetts Institute of Technology. | ||||
|  * | ||||
|  * Permission to use, copy, modify, and distribute this | ||||
| @@ -44,13 +46,13 @@ int ares_fds(ares_channel channel, fd_set *read_fds, fd_set *write_fds) | ||||
|             nfds = server->udp_socket + 1; | ||||
|         } | ||||
|       if (server->tcp_socket != ARES_SOCKET_BAD) | ||||
|         { | ||||
|           FD_SET(server->tcp_socket, read_fds); | ||||
|           if (server->qhead) | ||||
|             FD_SET(server->tcp_socket, write_fds); | ||||
|           if (server->tcp_socket >= nfds) | ||||
|             nfds = server->tcp_socket + 1; | ||||
|         } | ||||
|        { | ||||
|          FD_SET(server->tcp_socket, read_fds); | ||||
|          if (server->qhead) | ||||
|            FD_SET(server->tcp_socket, write_fds); | ||||
|          if (server->tcp_socket >= nfds) | ||||
|            nfds = server->tcp_socket + 1; | ||||
| 	} | ||||
|     } | ||||
|   return (int)nfds; | ||||
| } | ||||
|   | ||||
| @@ -28,8 +28,8 @@ The | ||||
| .I ares_free_hostent | ||||
| function frees a | ||||
| .B struct hostent | ||||
| allocated by one of the functions \fIares_parse_a_reply(3)\fP or | ||||
| \fIares_parse_ptr_reply(3)\fP. | ||||
| allocated by one of the functions \fIares_parse_a_reply(3)\fP, | ||||
| \fIares_parse_aaaa_reply(3)\fP, or \fIares_parse_ptr_reply(3)\fP. | ||||
| .SH NOTES | ||||
| It is not necessary (and is not correct) to free the host structure passed to | ||||
| the callback functions for \fIares_gethostbyname(3)\fP or | ||||
| @@ -37,6 +37,7 @@ the callback functions for \fIares_gethostbyname(3)\fP or | ||||
| host structures when the callback returns. | ||||
| .SH SEE ALSO | ||||
| .BR ares_parse_a_reply (3), | ||||
| .BR ares_parse_aaaa_reply (3), | ||||
| .BR ares_parse_ptr_reply (3) | ||||
| .SH AUTHOR | ||||
| Greg Hudson, MIT Information Systems | ||||
|   | ||||
| @@ -1,3 +1,5 @@ | ||||
| /* $Id$ */ | ||||
|  | ||||
| /* Copyright 1998 by the Massachusetts Institute of Technology. | ||||
|  * | ||||
|  * Permission to use, copy, modify, and distribute this | ||||
| @@ -107,7 +109,7 @@ static void next_lookup(struct addr_query *aquery) | ||||
|       switch (*p) | ||||
|         { | ||||
|         case 'b': | ||||
| 	  if (aquery->family == AF_INET) | ||||
|           if (aquery->family == AF_INET) | ||||
|             { | ||||
|               addr = ntohl(aquery->addr.addr4.s_addr); | ||||
|               a1 = (int)((addr >> 24) & 0xff); | ||||
|   | ||||
| @@ -124,10 +124,10 @@ static void next_lookup(struct host_query *hquery) | ||||
|         case 'b': | ||||
|           /* DNS lookup */ | ||||
|           hquery->remaining_lookups = p + 1; | ||||
| 	  if (hquery->family == AF_INET6) | ||||
| 	    ares_search(hquery->channel, hquery->name, C_IN, T_AAAA, host_callback, | ||||
| 	                hquery); | ||||
| 	  else | ||||
|           if (hquery->family == AF_INET6) | ||||
|             ares_search(hquery->channel, hquery->name, C_IN, T_AAAA, host_callback, | ||||
|                         hquery); | ||||
|           else | ||||
|             ares_search(hquery->channel, hquery->name, C_IN, T_A, host_callback, | ||||
|                         hquery); | ||||
|           return; | ||||
|   | ||||
							
								
								
									
										145
									
								
								ares/ares_getnameinfo.3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										145
									
								
								ares/ares_getnameinfo.3
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,145 @@ | ||||
| .\" $Id$ | ||||
| .\" | ||||
| .\" Copyright 2005 by Dominick Meglio. | ||||
| .\" | ||||
| .\" Permission to use, copy, modify, and distribute this | ||||
| .\" software and its documentation for any purpose and without | ||||
| .\" fee is hereby granted, provided that the above copyright | ||||
| .\" notice appear in all copies and that both that copyright | ||||
| .\" notice and this permission notice appear in supporting | ||||
| .\" documentation, and that the name of M.I.T. not be used in | ||||
| .\" advertising or publicity pertaining to distribution of the | ||||
| .\" software without specific, written prior permission. | ||||
| .\" M.I.T. makes no representations about the suitability of | ||||
| .\" this software for any purpose.  It is provided "as is" | ||||
| .\" without express or implied warranty. | ||||
| .\" | ||||
| .TH ARES_GETNAMEINFO 3 "16 May 2005" | ||||
| .SH NAME | ||||
| ares_getnameinfo \- Address-to-nodename translation in protocol-independent manner | ||||
| .SH SYNOPSIS | ||||
| .nf | ||||
| .B #include <ares.h> | ||||
| .PP | ||||
| .B typedef void (*ares_nameinfo_callback)(void *\fIarg\fP, int \fIstatus\fP, | ||||
| .B	char *\fInode\fP, char *\fIservice\fP) | ||||
| .PP | ||||
| .B void ares_getnameinfo(ares_channel \fIchannel\fP, const struct sockaddr *\fIsa\fP, | ||||
| .B 	socklen_t \fIsalen\fP, int \fIflags\fP, ares_nameinfo_callback \fIcallback\fP, | ||||
| .B 	void *\fIarg\fP) | ||||
| .fi | ||||
| .SH DESCRIPTION | ||||
| The | ||||
| .B ares_getnameinfo | ||||
| function is defined for protocol-independent address translation. The function | ||||
| is a combination of \fIares_gethostbyaddr(3)\fP and \fIgetservbyport(3)\fP. The function will | ||||
| translate the address either by executing a host query on the name service channel | ||||
| identified by | ||||
| .IR channel  | ||||
| or it will attempt to resolve it locally if possible. | ||||
| The parameters | ||||
| .I sa | ||||
| and | ||||
| .I len | ||||
| give the address as a sockaddr structure, and | ||||
| .I flags | ||||
| gives the options that the function will use.  Valid flags are listed below: | ||||
| .TP 19 | ||||
| .B ARES_NI_NOFQDN | ||||
| Only the nodename portion of the FQDN is returned for local hosts. | ||||
| .TP 19 | ||||
| .B ARES_NI_NUMERICHOST | ||||
| The numeric form of the hostname is returned rather than the name. | ||||
| .TP 19 | ||||
| .B ARES_NI_NAMEREQD | ||||
| An error is returned if the hostname cannot be found in the DNS. | ||||
| .TP 19 | ||||
| .B ARES_NI_NUMERICSERV | ||||
| The numeric form of the service is returned rather than the name. | ||||
| .TP 19 | ||||
| .B ARES_NI_TCP | ||||
| The service name is to be looked up for the TCP protocol. | ||||
| .TP 19 | ||||
| .B ARES_NI_UDP | ||||
| The service name is to be looked up for the UDP protocol. | ||||
| .TP 19 | ||||
| .B ARES_NI_SCTP | ||||
| The service name is to be looked up for the SCTP protocol. | ||||
| .TP 19 | ||||
| .B ARES_NI_DCCP | ||||
| The service name is to be looked up for the DCCP protocol. | ||||
| .TP 19 | ||||
| .B ARES_NI_NUMERICSCOPE | ||||
| The numeric form of the scope ID is returned rather than the name. | ||||
| .TP 19 | ||||
| .B ARES_NI_LOOKUPHOST | ||||
| A hostname lookup is being requested. | ||||
| .TP 19 | ||||
| .B ARES_NI_LOOKUPSERVICE | ||||
| A service name lookup is being requested. | ||||
| .PP | ||||
| When the query | ||||
| is complete or has  | ||||
| failed, the ares library will invoke \fIcallback\fP.  Completion or failure of  | ||||
| the query may happen immediately, or may happen during a later call to | ||||
| \fIares_process(3)\fP, \fIares_destroy(3)\fP or \fIares_cancel(3)\fP. | ||||
| .PP | ||||
| The callback argument | ||||
| .I arg | ||||
| is copied from the | ||||
| .B ares_getnameinfo | ||||
| argument | ||||
| .IR arg . | ||||
| The callback argument | ||||
| .I status | ||||
| indicates whether the query succeeded and, if not, how it failed.  It | ||||
| may have any of the following values: | ||||
| .TP 19 | ||||
| .B ARES_SUCCESS | ||||
| The host lookup completed successfully. | ||||
| .TP 19 | ||||
| .B ARES_ENOTIMP | ||||
| The ares library does not know how to look up addresses of type | ||||
| .IR family . | ||||
| .TP 19 | ||||
| .B ARES_ENOTFOUND | ||||
| The address | ||||
| .I addr | ||||
| was not found. | ||||
| .TP 19 | ||||
| .B ARES_ENOMEM | ||||
| Memory was exhausted. | ||||
| .TP 19 | ||||
| .B ARES_EDESTRUCTION | ||||
| The name service channel | ||||
| .I channel | ||||
| is being destroyed; the query will not be completed. | ||||
| .TP 19 | ||||
| .B ARES_EBADFLAGS | ||||
| The | ||||
| .I flags | ||||
| parameter contains an illegal value. | ||||
| .PP | ||||
| On successful completion of the query, the callback argument | ||||
| .I node | ||||
| contains a string representing the hostname (assuming  | ||||
| .B ARES_NI_LOOKUPHOST | ||||
| was specified). Additionally,  | ||||
| .I service | ||||
| contains a string representing the service name (assuming | ||||
| .B ARES_NI_LOOKUPSERVICE | ||||
| was specified). | ||||
| If the query did not complete successfully, or one of the values | ||||
| was not requested,  | ||||
| .I node | ||||
| or | ||||
| .I service | ||||
| will be  | ||||
| .BR NULL . | ||||
| .SH SEE ALSO | ||||
| .BR ares_process (3), | ||||
| .BR ares_getaddrinfo (3) | ||||
| .SH AUTHOR | ||||
| Dominick Meglio | ||||
| .br | ||||
| Copyright 2005 by Dominick Meglio. | ||||
							
								
								
									
										382
									
								
								ares/ares_getnameinfo.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										382
									
								
								ares/ares_getnameinfo.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,382 @@ | ||||
| /* $Id$ */ | ||||
|  | ||||
| /* Copyright 2005 by Dominick Meglio | ||||
|  * | ||||
|  * Permission to use, copy, modify, and distribute this | ||||
|  * software and its documentation for any purpose and without | ||||
|  * fee is hereby granted, provided that the above copyright | ||||
|  * notice appear in all copies and that both that copyright | ||||
|  * notice and this permission notice appear in supporting | ||||
|  * documentation, and that the name of M.I.T. not be used in | ||||
|  * advertising or publicity pertaining to distribution of the | ||||
|  * software without specific, written prior permission. | ||||
|  * M.I.T. makes no representations about the suitability of | ||||
|  * this software for any purpose.  It is provided "as is" | ||||
|  * without express or implied warranty. | ||||
|  */ | ||||
| #include "setup.h" | ||||
| #include <sys/types.h> | ||||
| #include <ctype.h> | ||||
|  | ||||
| #if defined(WIN32) && !defined(WATT32) | ||||
| #include "nameser.h" | ||||
| #else | ||||
| #include <sys/socket.h> | ||||
| #include <netinet/in.h> | ||||
| #include <netdb.h> | ||||
| #include <arpa/inet.h> | ||||
| #include <arpa/nameser.h> | ||||
| #ifdef HAVE_ARPA_NAMESER_COMPAT_H | ||||
| #include <arpa/nameser_compat.h> | ||||
| #endif | ||||
| #endif | ||||
|  | ||||
| #ifdef HAVE_NET_IF_H | ||||
| #include <net/if.h> | ||||
| #endif | ||||
|  | ||||
| #ifdef HAVE_UNISTD_H | ||||
| #include <unistd.h> | ||||
| #endif | ||||
|  | ||||
| #include <stdio.h> | ||||
| #include <stdlib.h> | ||||
| #include <string.h> | ||||
|  | ||||
| #include "ares.h" | ||||
| #include "ares_private.h" | ||||
| #include "ares_ipv6.h" | ||||
| #include "inet_ntop.h" | ||||
|  | ||||
| #ifdef WATT32 | ||||
| #undef WIN32 | ||||
| #endif | ||||
|  | ||||
| struct nameinfo_query { | ||||
|   ares_nameinfo_callback callback; | ||||
|   void *arg; | ||||
|   union { | ||||
|     struct sockaddr_in addr4; | ||||
|     struct sockaddr_in6 addr6; | ||||
|   } addr; | ||||
|   int family; | ||||
|   int flags; | ||||
| }; | ||||
|  | ||||
| #ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID | ||||
| #define IPBUFSIZ 40+IF_NAMESIZE | ||||
| #else | ||||
| #define IPBUFSIZ 40 | ||||
| #endif | ||||
|  | ||||
| static void nameinfo_callback(void *arg, int status, struct hostent *host); | ||||
| static char *lookup_service(unsigned short port, int flags, | ||||
|                             char *buf, size_t buflen); | ||||
| #ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID | ||||
| static void append_scopeid(struct sockaddr_in6 *addr6, unsigned int scopeid, | ||||
|                            char *buf, size_t buflen); | ||||
| #endif | ||||
| static char *ares_striendstr(const char *s1, const char *s2); | ||||
|  | ||||
| void ares_getnameinfo(ares_channel channel, const struct sockaddr *sa, socklen_t salen, | ||||
|                       int flags, ares_nameinfo_callback callback, void *arg) | ||||
| { | ||||
|   struct sockaddr_in *addr = NULL; | ||||
|   struct sockaddr_in6 *addr6 = NULL; | ||||
|   struct nameinfo_query *niquery; | ||||
|  | ||||
|   /* Verify the buffer size */ | ||||
|   if (salen == sizeof(struct sockaddr_in)) | ||||
|     addr = (struct sockaddr_in *)sa; | ||||
|   else if (salen == sizeof(struct sockaddr_in6)) | ||||
|     addr6 = (struct sockaddr_in6 *)sa; | ||||
|   else | ||||
|     { | ||||
|       callback(arg, ARES_ENOTIMP, NULL, NULL); | ||||
|       return; | ||||
|     } | ||||
|  | ||||
|   /* If neither, assume they want a host */ | ||||
|   if (!(flags & ARES_NI_LOOKUPSERVICE) && !(flags & ARES_NI_LOOKUPHOST)) | ||||
|     flags |= ARES_NI_LOOKUPHOST; | ||||
|  | ||||
|   /* All they want is a service, no need for DNS */ | ||||
|   if ((flags & ARES_NI_LOOKUPSERVICE) && !(flags & ARES_NI_LOOKUPHOST)) | ||||
|     { | ||||
|       char buf[33], *service; | ||||
|       unsigned int port = 0; | ||||
|  | ||||
|       if (salen == sizeof(struct sockaddr_in)) | ||||
|         port = addr->sin_port; | ||||
|       else | ||||
|         port = addr6->sin6_port; | ||||
|       service = lookup_service(port, flags, buf, sizeof(buf)); | ||||
|       callback(arg, ARES_SUCCESS, NULL, service); | ||||
|       return; | ||||
|     } | ||||
|  | ||||
|   /* They want a host lookup */ | ||||
|   if ((flags & ARES_NI_LOOKUPHOST)) | ||||
|     { | ||||
|      /* A numeric host can be handled without DNS */ | ||||
|      if ((flags & ARES_NI_NUMERICHOST)) | ||||
|       { | ||||
|         unsigned int port = 0; | ||||
|         char ipbuf[IPBUFSIZ]; | ||||
|         char srvbuf[33]; | ||||
|         char *service = NULL; | ||||
|         ipbuf[0] = 0; | ||||
|  | ||||
|         /* Specifying not to lookup a host, but then saying a host | ||||
|          * is required has to be illegal. | ||||
|          */ | ||||
|         if (flags & ARES_NI_NAMEREQD) | ||||
|           { | ||||
|             callback(arg, ARES_EBADFLAGS, NULL, NULL); | ||||
|             return; | ||||
|           } | ||||
|         if (salen == sizeof(struct sockaddr_in6)) | ||||
|           { | ||||
|             ares_inet_ntop(AF_INET6, &addr6->sin6_addr, ipbuf, IPBUFSIZ); | ||||
|             port = addr6->sin6_port; | ||||
|             /* If the system supports scope IDs, use it */ | ||||
| #ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID | ||||
|             append_scopeid(addr6, flags, ipbuf, sizeof(ipbuf)); | ||||
| #endif | ||||
|           } | ||||
|         else | ||||
|           { | ||||
|             ares_inet_ntop(AF_INET, &addr->sin_addr, ipbuf, IPBUFSIZ); | ||||
|             port = addr->sin_port; | ||||
|           } | ||||
|         /* They also want a service */ | ||||
|         if (flags & ARES_NI_LOOKUPSERVICE) | ||||
|           service = lookup_service(port, flags, srvbuf, sizeof(srvbuf)); | ||||
|         callback(arg, ARES_SUCCESS, ipbuf, service); | ||||
|         return; | ||||
|       } | ||||
|     /* This is where a DNS lookup becomes necessary */ | ||||
|     else | ||||
|       { | ||||
|         niquery = malloc(sizeof(struct nameinfo_query)); | ||||
|         if (!niquery) | ||||
|           { | ||||
|             callback(arg, ARES_ENOMEM, NULL, NULL); | ||||
|             return; | ||||
|           } | ||||
|         niquery->callback = callback; | ||||
|         niquery->arg = arg; | ||||
|         niquery->flags = flags; | ||||
|         if (sa->sa_family == AF_INET) | ||||
|           { | ||||
|             niquery->family = AF_INET; | ||||
|             memcpy(&niquery->addr.addr4, addr, sizeof(addr)); | ||||
|             ares_gethostbyaddr(channel, &addr->sin_addr, sizeof(struct in_addr), AF_INET, | ||||
|                                nameinfo_callback, niquery); | ||||
|           } | ||||
|         else | ||||
|           { | ||||
|             niquery->family = AF_INET6; | ||||
|             memcpy(&niquery->addr.addr6, addr6, sizeof(addr6)); | ||||
|             ares_gethostbyaddr(channel, &addr6->sin6_addr, sizeof(struct in6_addr), AF_INET6, | ||||
|                                nameinfo_callback, niquery); | ||||
|           } | ||||
|       } | ||||
|     } | ||||
| } | ||||
|  | ||||
| static void nameinfo_callback(void *arg, int status, struct hostent *host) | ||||
| { | ||||
|   struct nameinfo_query *niquery = (struct nameinfo_query *) arg; | ||||
|   char srvbuf[33]; | ||||
|   char *service = NULL; | ||||
|  | ||||
|  | ||||
|   if (status == ARES_SUCCESS) | ||||
|     { | ||||
|       /* They want a service too */ | ||||
|       if (niquery->flags & ARES_NI_LOOKUPSERVICE) | ||||
|         { | ||||
|           if (niquery->family == AF_INET) | ||||
|             service = lookup_service(niquery->addr.addr4.sin_port, | ||||
|                                      niquery->flags, srvbuf, sizeof(srvbuf)); | ||||
|           else | ||||
|             service = lookup_service(niquery->addr.addr6.sin6_port, | ||||
|                                      niquery->flags, srvbuf, sizeof(srvbuf)); | ||||
|         } | ||||
|       /* NOFQDN means we have to strip off the domain name portion. | ||||
|          We do this by determining our own domain name, then searching the string | ||||
|          for this domain name and removing it. | ||||
|        */ | ||||
|       if (niquery->flags & ARES_NI_NOFQDN) | ||||
|         { | ||||
|            char buf[255]; | ||||
|            char *domain; | ||||
|            gethostname(buf, 255); | ||||
|            if ((domain = strchr(buf, '.'))) | ||||
|              { | ||||
|                char *end = ares_striendstr(host->h_name, domain); | ||||
|                if (end) | ||||
|                  *end = 0; | ||||
|              } | ||||
|         } | ||||
|       niquery->callback(niquery->arg, ARES_SUCCESS, host->h_name, service); | ||||
|       return; | ||||
|     } | ||||
|   /* We couldn't find the host, but it's OK, we can use the IP */ | ||||
|   else if (status == ARES_ENOTFOUND && !(niquery->flags & ARES_NI_NAMEREQD)) | ||||
|     { | ||||
|       char ipbuf[IPBUFSIZ]; | ||||
|       if (niquery->family == AF_INET) | ||||
|         ares_inet_ntop(AF_INET, &niquery->addr.addr4.sin_addr, ipbuf, IPBUFSIZ); | ||||
|       else | ||||
|         { | ||||
|           ares_inet_ntop(AF_INET6, &niquery->addr.addr6.sin6_addr, ipbuf, IPBUFSIZ); | ||||
| #ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID | ||||
|           append_scopeid(&niquery->addr.addr6, niquery->flags, ipbuf, sizeof(ipbuf)); | ||||
| #endif | ||||
|         } | ||||
|       /* They want a service too */ | ||||
|       if (niquery->flags & ARES_NI_LOOKUPSERVICE) | ||||
|         { | ||||
|           if (niquery->family == AF_INET) | ||||
|             service = lookup_service(niquery->addr.addr4.sin_port, | ||||
|                                      niquery->flags, srvbuf, sizeof(srvbuf)); | ||||
|           else | ||||
|             service = lookup_service(niquery->addr.addr6.sin6_port, | ||||
|                                      niquery->flags, srvbuf, sizeof(srvbuf)); | ||||
|         } | ||||
|       niquery->callback(niquery->arg, ARES_SUCCESS, ipbuf, service); | ||||
|       return; | ||||
|     } | ||||
|   niquery->callback(niquery->arg, status, NULL, NULL); | ||||
|   free(niquery); | ||||
| } | ||||
|  | ||||
| static char *lookup_service(unsigned short port, int flags, | ||||
|                             char *buf, size_t buflen) | ||||
| { | ||||
|   const char *proto; | ||||
|   struct servent *sep; | ||||
| #ifdef HAVE_GETSERVBYPORT_R | ||||
|   struct servent se; | ||||
| #endif | ||||
|   char tmpbuf[4096]; | ||||
|  | ||||
|   if (port) | ||||
|     {  | ||||
|       if (flags & ARES_NI_NUMERICSERV) | ||||
|         sep = NULL; | ||||
|       else | ||||
|         {  | ||||
|           if (flags & ARES_NI_UDP) | ||||
|             proto = "udp"; | ||||
|           else if (flags & ARES_NI_SCTP) | ||||
|             proto = "sctp"; | ||||
|           else if (flags & ARES_NI_DCCP) | ||||
|             proto = "dccp"; | ||||
|           else | ||||
|             proto = "tcp"; | ||||
| #ifdef HAVE_GETSERVBYPORT_R | ||||
|           sep = &se; | ||||
|           memset(tmpbuf, 0, sizeof(tmpbuf)); | ||||
| #if GETSERVBYPORT_R_ARGS == 6 | ||||
|           if (getservbyport_r(port, proto, &se, (void *)tmpbuf, sizeof(tmpbuf), &sep) != 0) | ||||
|             sep = NULL; | ||||
| #elif GETSERVBYPORT_R_ARGS == 5 | ||||
|           sep = getservbyport_r(port, proto, &se, (void *)tmpbuf, sizeof(tmpbuf)); | ||||
| #elif GETSERVBYPORT_R_ARGS == 4 | ||||
|           if (getservbyport_r(port, proto, &se, (void *)tmpbuf) != 0) | ||||
|             sep = NULL; | ||||
| #else      | ||||
|           /* Lets just hope the OS uses TLS! */ | ||||
|           sep = getservbyport(port, proto); | ||||
| #endif     | ||||
| #else      | ||||
|           /* Lets just hope the OS uses TLS! */ | ||||
|           sep = getservbyport(port, proto); | ||||
| #endif     | ||||
|         }  | ||||
|       if (sep && sep->s_name) | ||||
|         /* get service name */ | ||||
|         strcpy(tmpbuf, sep->s_name); | ||||
|       else | ||||
|         /* get port as a string */ | ||||
|         sprintf(tmpbuf, "%u", ntohs(port)); | ||||
|       if (strlen(tmpbuf) < buflen) | ||||
|         /* return it if buffer big enough */ | ||||
|         strcpy(buf, tmpbuf); | ||||
|       else | ||||
|         /* avoid reusing previous one */ | ||||
|         buf[0] = '\0'; | ||||
|       return buf; | ||||
|     } | ||||
|   buf[0] = '\0'; | ||||
|   return NULL; | ||||
| } | ||||
|  | ||||
| #ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID | ||||
| static void append_scopeid(struct sockaddr_in6 *addr6, unsigned int flags, | ||||
|                            char *buf, size_t buflen) | ||||
| { | ||||
|   char fmt_u[] = "%u"; | ||||
|   char fmt_lu[] = "%lu"; | ||||
|   char tmpbuf[IF_NAMESIZE + 2]; | ||||
|   size_t bufl; | ||||
|   char *fmt = (sizeof(addr6->sin6_scope_id) > sizeof(unsigned int))?fmt_lu:fmt_u; | ||||
|  | ||||
|   tmpbuf[0] = '%'; | ||||
|  | ||||
| #ifdef HAVE_IF_INDEXTONAME | ||||
|   if ((flags & ARES_NI_NUMERICSCOPE) || | ||||
|       (!IN6_IS_ADDR_LINKLOCAL(&addr6->sin6_addr) | ||||
|        && !IN6_IS_ADDR_MC_LINKLOCAL(&addr6->sin6_addr))) | ||||
|     { | ||||
|        sprintf(&tmpbuf[1], fmt, addr6->sin6_scope_id); | ||||
|     } | ||||
|   else | ||||
|     { | ||||
|       if (if_indextoname(addr6->sin6_scope_id, &tmpbuf[1]) == NULL) | ||||
|         sprintf(&tmpbuf[1], fmt, addr6->sin6_scope_id); | ||||
|     } | ||||
| #else | ||||
|   sprintf(&tmpbuf[1], fmt, addr6->sin6_scope_id); | ||||
|   (void) flags; | ||||
| #endif | ||||
|   tmpbuf[IF_NAMESIZE + 1] = '\0'; | ||||
|   bufl = strlen(buf); | ||||
|  | ||||
|   if(bufl + strlen(tmpbuf) < buflen) | ||||
|     /* only append the scopeid string if it fits in the target buffer */ | ||||
|     strcpy(&buf[bufl], tmpbuf); | ||||
| } | ||||
| #endif | ||||
|  | ||||
| /* Determines if s1 ends with the string in s2 (case-insensitive) */ | ||||
| static char *ares_striendstr(const char *s1, const char *s2) | ||||
| { | ||||
|   const char *c1, *c2, *c1_begin; | ||||
|   size_t s1_len = strlen(s1), s2_len = strlen(s2); | ||||
|  | ||||
|   /* If the substr is longer than the full str, it can't match */ | ||||
|   if (s2_len > s1_len) | ||||
|     return NULL; | ||||
|  | ||||
|   /* Jump to the end of s1 minus the length of s2 */ | ||||
|   c1_begin = s1+s1_len-s2_len; | ||||
|   c1 = (const char *)c1_begin; | ||||
|   c2 = s2; | ||||
|   while (c2 < s2+s2_len) | ||||
|     { | ||||
|       if (tolower(*c1) != tolower(*c2)) | ||||
|         return NULL; | ||||
|       else | ||||
|         { | ||||
|           c1++; | ||||
|           c2++; | ||||
|         } | ||||
|     } | ||||
|   if (c2 == c1 && c2 == NULL) | ||||
|     return (char *)c1_begin; | ||||
|   return NULL; | ||||
| } | ||||
							
								
								
									
										58
									
								
								ares/ares_getsock.3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								ares/ares_getsock.3
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,58 @@ | ||||
| .\" $Id$ | ||||
| .\" | ||||
| .\" Copyright 1998 by Daniel Stenberg | ||||
| .\" | ||||
| .\" Permission to use, copy, modify, and distribute this | ||||
| .\" software and its documentation for any purpose and without | ||||
| .\" fee is hereby granted, provided that the above copyright | ||||
| .\" notice appear in all copies and that both that copyright | ||||
| .\" notice and this permission notice appear in supporting | ||||
| .\" documentation, and that the name of M.I.T. not be used in | ||||
| .\" advertising or publicity pertaining to distribution of the | ||||
| .\" software without specific, written prior permission. | ||||
| .\" M.I.T. makes no representations about the suitability of | ||||
| .\" this software for any purpose.  It is provided "as is" | ||||
| .\" without express or implied warranty. | ||||
| .\" | ||||
| .TH ARES_GETSOCK 3 "22 December 2005" | ||||
| .SH NAME | ||||
| ares_getsock \- get file descriptors to wait on | ||||
| .SH SYNOPSIS | ||||
| .nf | ||||
| .B #include <ares.h> | ||||
| .PP | ||||
| .B int ares_getsock(ares_channel \fIchannel\fP, int *\fIsocks\fP,  | ||||
| .B int \fInumsocks\fP); | ||||
| .fi | ||||
| .SH DESCRIPTION | ||||
| The | ||||
| .B ares_getsock | ||||
| function retrieves the set of file descriptors which the calling | ||||
| application should wait on for reading and/or writing for the | ||||
| processing of name service queries pending on the name service channel | ||||
| identified by | ||||
| .IR channel . | ||||
| File descriptors will be set in the integer array pointed to by | ||||
| \fIsocks\fP. | ||||
| \fInumsocks\fP is the size of the given array in number of ints. | ||||
|  | ||||
| This function can only return information about up to 16 sockets. If more are | ||||
| in use (however unlikely that is), they are simply not reported back. | ||||
| .SH RETURN VALUES | ||||
| \fBares_getsock\fP returns a bitmask for what actions to wait for on the | ||||
| different sockets. The ares.h header file provides these convenience macros to | ||||
| extract the information appropriately: | ||||
|  | ||||
| .nf | ||||
| #define ARES_GETSOCK_MAXNUM 16 /* ares_getsock() can return info about | ||||
|                                   this many sockets */ | ||||
| #define ARES_GETSOCK_READABLE(bits,num) (bits & (1<< (num))) | ||||
| #define ARES_GETSOCK_WRITABLE(bits,num) (bits & (1 << ((num) + \ | ||||
|                                          ARES_GETSOCK_MAXNUM))) | ||||
| .fi | ||||
| .SH NOTES | ||||
| This function was added in c-ares 1.3.1 | ||||
| .SH SEE ALSO | ||||
| .BR ares_timeout (3), | ||||
| .BR ares_fds (3), | ||||
| .BR ares_process (3) | ||||
							
								
								
									
										71
									
								
								ares/ares_getsock.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								ares/ares_getsock.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,71 @@ | ||||
| /* $Id$ */ | ||||
|  | ||||
| /* Copyright 2005 by Daniel Stenberg. | ||||
|  * | ||||
|  * Permission to use, copy, modify, and distribute this software and its | ||||
|  * documentation for any purpose and without fee is hereby granted, provided | ||||
|  * that the above copyright notice appear in all copies and that both that | ||||
|  * copyright notice and this permission notice appear in supporting | ||||
|  * documentation, and that the name of M.I.T. not be used in advertising or | ||||
|  * publicity pertaining to distribution of the software without specific, | ||||
|  * written prior permission.  M.I.T. makes no representations about the | ||||
|  * suitability of this software for any purpose.  It is provided "as is" | ||||
|  * without express or implied warranty. | ||||
|  */ | ||||
|  | ||||
| #include "setup.h" | ||||
| #include <sys/types.h> | ||||
|  | ||||
| #ifdef HAVE_SYS_TIME_H | ||||
| #include <sys/time.h> | ||||
| #endif | ||||
|  | ||||
| #include "ares.h" | ||||
| #include "ares_private.h" | ||||
|  | ||||
| int ares_getsock(ares_channel channel, | ||||
|                  int *s, | ||||
|                  int numsocks) /* size of the 'socks' array */ | ||||
| { | ||||
|   struct server_state *server; | ||||
|   ares_socket_t nfds; | ||||
|   int i; | ||||
|   int sockindex=0; | ||||
|   int bitmap = 0; | ||||
|   unsigned int setbits = 0xffffffff; | ||||
|  | ||||
|   ares_socket_t *socks = (ares_socket_t *)s; | ||||
|  | ||||
|   /* No queries, no file descriptors. */ | ||||
|   if (!channel->queries) | ||||
|     return 0; | ||||
|  | ||||
|   nfds = 0; | ||||
|   for (i = 0; i < channel->nservers; i++) | ||||
|     { | ||||
|       server = &channel->servers[i]; | ||||
|       if (server->udp_socket != ARES_SOCKET_BAD) | ||||
|         { | ||||
|           if(sockindex >= numsocks) | ||||
|             break; | ||||
|           socks[sockindex] = server->udp_socket; | ||||
|           bitmap |= ARES_GETSOCK_READABLE(setbits, sockindex); | ||||
|           sockindex++; | ||||
|         } | ||||
|       if (server->tcp_socket != ARES_SOCKET_BAD) | ||||
|        { | ||||
|          if(sockindex >= numsocks) | ||||
|            break; | ||||
|          socks[sockindex] = server->tcp_socket; | ||||
|          bitmap |= ARES_GETSOCK_READABLE(setbits, sockindex); | ||||
|          sockindex++; | ||||
|  | ||||
|          if (server->qhead) { | ||||
|            /* then the tcp socket is also writable! */ | ||||
|            bitmap |= ARES_GETSOCK_WRITABLE(setbits, sockindex-1); | ||||
|          } | ||||
|  | ||||
|        } | ||||
|     } | ||||
|   return (int)nfds; | ||||
| } | ||||
| @@ -327,6 +327,7 @@ static int get_iphlpapi_dns_info (char *ret_buf, size_t ret_size) | ||||
|   size_t         ip_size = sizeof("255.255.255.255,")-1; | ||||
|   size_t         left = ret_size; | ||||
|   char          *ret = ret_buf; | ||||
|   HRESULT        res; | ||||
|  | ||||
|   if (!fi) | ||||
|      return (0); | ||||
| @@ -339,7 +340,8 @@ static int get_iphlpapi_dns_info (char *ret_buf, size_t ret_size) | ||||
|   if (!GetNetworkParams) | ||||
|      goto quit; | ||||
|  | ||||
|   if ((*GetNetworkParams) (fi, &size) != ERROR_BUFFER_OVERFLOW) | ||||
|   res = (*GetNetworkParams) (fi, &size); | ||||
|   if ((res != ERROR_BUFFER_OVERFLOW) && (res != ERROR_SUCCESS)) | ||||
|      goto quit; | ||||
|  | ||||
|   fi = alloca (size); | ||||
| @@ -502,7 +504,7 @@ DhcpNameServer | ||||
|   if (status == ARES_SUCCESS) | ||||
|     status = ARES_EOF; | ||||
|  | ||||
| #elif defined(riscos) | ||||
| #elif defined(__riscos__) | ||||
|  | ||||
|   /* Under RISC OS, name servers are listed in the | ||||
|      system variable Inet$Resolvers, space separated. */ | ||||
| @@ -858,7 +860,8 @@ static int config_sortlist(struct apattern **sortlist, int *nsort, | ||||
|         ipbufpfx[0] = 0; | ||||
|       /* Lets see if it is CIDR */ | ||||
|       /* First we'll try IPv6 */ | ||||
|       if ((bits = ares_inet_net_pton(AF_INET6, ipbufpfx ? ipbufpfx : ipbuf, &pat.addr.addr6,  | ||||
|       if ((bits = ares_inet_net_pton(AF_INET6, ipbufpfx ? ipbufpfx : ipbuf, | ||||
|                                      &pat.addr.addr6, | ||||
|                                      sizeof(pat.addr.addr6))) > 0) | ||||
|         { | ||||
|           pat.type = PATTERN_CIDR; | ||||
| @@ -890,7 +893,7 @@ static int config_sortlist(struct apattern **sortlist, int *nsort, | ||||
|           else | ||||
|             natural_mask(&pat); | ||||
|           pat.family = AF_INET; | ||||
| 	  pat.type = PATTERN_MASK; | ||||
|           pat.type = PATTERN_MASK; | ||||
|           if (!sortlist_alloc(sortlist, nsort, &pat)) | ||||
|             return ARES_ENOMEM; | ||||
|         } | ||||
| @@ -1011,7 +1014,8 @@ static const char *try_option(const char *p, const char *q, const char *opt) | ||||
| } | ||||
|  | ||||
| #ifndef WIN32 | ||||
| static int sortlist_alloc(struct apattern **sortlist, int *nsort, struct apattern *pat) | ||||
| static int sortlist_alloc(struct apattern **sortlist, int *nsort, | ||||
|                           struct apattern *pat) | ||||
| { | ||||
|   struct apattern *newsort; | ||||
|   newsort = realloc(*sortlist, (*nsort + 1) * sizeof(struct apattern)); | ||||
|   | ||||
| @@ -28,6 +28,31 @@ struct in6_addr | ||||
| }; | ||||
| #endif | ||||
|  | ||||
| #ifndef HAVE_STRUCT_SOCKADDR_IN6 | ||||
| struct sockaddr_in6 | ||||
| { | ||||
|   unsigned short  sin6_family; | ||||
|   unsigned short  sin6_port; | ||||
|   unsigned long   sin6_flowinfo; | ||||
|   struct in6_addr sin6_addr; | ||||
|   unsigned int    sin6_scope_id; | ||||
| }; | ||||
| #endif | ||||
|  | ||||
| #ifndef HAVE_STRUCT_ADDRINFO | ||||
| struct addrinfo | ||||
| { | ||||
|   int ai_flags; | ||||
|   int ai_family; | ||||
|   int ai_socktype; | ||||
|   int ai_protocol; | ||||
|   size_t ai_addrlen; | ||||
|   char *ai_cannonname; | ||||
|   struct sockaddr *ai_addr; | ||||
|   struct addrinfo *ai_next; | ||||
| }; | ||||
| #endif | ||||
|  | ||||
| #ifndef NS_IN6ADDRSZ | ||||
| #if SIZEOF_STRUCT_IN6_ADDR == 0 | ||||
| /* We cannot have it set to zero, so we pick a fixed value here */ | ||||
| @@ -45,4 +70,12 @@ struct in6_addr | ||||
| #define NS_INT16SZ 2 | ||||
| #endif | ||||
|  | ||||
| #ifndef IF_NAMESIZE | ||||
| #ifdef IFNAMSIZ | ||||
| #define IF_NAMESIZE IFNAMSIZ | ||||
| #else | ||||
| #define IF_NAMESIZE 256 | ||||
| #endif | ||||
| #endif | ||||
|  | ||||
| #endif /* ARES_IPV6_H */ | ||||
|   | ||||
| @@ -33,6 +33,10 @@ | ||||
| #define writev(s,v,c)     writev_s(s,v,c) | ||||
| #endif | ||||
|  | ||||
| #ifdef NETWARE | ||||
| #include <time.h> | ||||
| #endif | ||||
|  | ||||
| #define DEFAULT_TIMEOUT         5 | ||||
| #define DEFAULT_TRIES           4 | ||||
| #ifndef INADDR_NONE | ||||
| @@ -58,6 +62,10 @@ | ||||
| #define PATH_RESOLV_CONF "sys:/etc/resolv.cfg" | ||||
| #define PATH_HOSTS              "sys:/etc/hosts" | ||||
|  | ||||
| #elif defined(__riscos__) | ||||
|  | ||||
| #define PATH_HOSTS             "InetDBase:Hosts" | ||||
|  | ||||
| #else | ||||
|  | ||||
| #define PATH_RESOLV_CONF        "/etc/resolv.conf" | ||||
|   | ||||
| @@ -30,9 +30,16 @@ | ||||
| #ifdef HAVE_ARPA_NAMESER_COMPAT_H | ||||
| #include <arpa/nameser_compat.h> | ||||
| #endif | ||||
| #endif /* WIN32 && !WATT32 */ | ||||
|  | ||||
| #ifdef HAVE_UNISTD_H | ||||
| #include <unistd.h> | ||||
| #endif | ||||
| #ifdef HAVE_SYS_IOCTL_H | ||||
| #include <sys/ioctl.h> | ||||
| #endif | ||||
| #ifdef NETWARE | ||||
| #include <sys/filio.h> | ||||
| #endif | ||||
|  | ||||
| #include <string.h> | ||||
| @@ -45,6 +52,11 @@ | ||||
| #include "ares_dns.h" | ||||
| #include "ares_private.h" | ||||
|  | ||||
| #ifndef TRUE | ||||
| /* at least Solaris 7 does not have TRUE at this point */ | ||||
| #define TRUE 1 | ||||
| #endif | ||||
|  | ||||
| #if (defined(WIN32) || defined(WATT32)) && !defined(MSDOS) | ||||
| #define GET_ERRNO()  WSAGetLastError() | ||||
| #else | ||||
| @@ -92,7 +104,7 @@ static void write_tcp_data(ares_channel channel, fd_set *write_fds, time_t now) | ||||
|   struct iovec *vec; | ||||
|   int i; | ||||
|   ssize_t scount; | ||||
|   int wcount; | ||||
|   ssize_t wcount; | ||||
|   size_t n; | ||||
|  | ||||
|   for (i = 0; i < channel->nservers; i++) | ||||
| @@ -153,7 +165,8 @@ static void write_tcp_data(ares_channel channel, fd_set *write_fds, time_t now) | ||||
|           /* Can't allocate iovecs; just send the first request. */ | ||||
|           sendreq = server->qhead; | ||||
|  | ||||
|           scount = send(server->tcp_socket, sendreq->data, sendreq->len, 0); | ||||
|           scount = send(server->tcp_socket, (void *)sendreq->data, | ||||
|                         sendreq->len, 0); | ||||
|  | ||||
|           if (scount < 0) | ||||
|             { | ||||
| @@ -201,8 +214,8 @@ static void read_tcp_data(ares_channel channel, fd_set *read_fds, time_t now) | ||||
|            * what's left to read of it). | ||||
|            */ | ||||
|           count = recv(server->tcp_socket, | ||||
|                        server->tcp_lenbuf + server->tcp_buffer_pos, | ||||
|                        2 - server->tcp_buffer_pos, 0); | ||||
|                        (void *)(server->tcp_lenbuf + server->tcp_lenbuf_pos), | ||||
|                        2 - server->tcp_lenbuf_pos, 0); | ||||
|           if (count <= 0) | ||||
|             { | ||||
|               handle_error(channel, i, now); | ||||
| @@ -227,7 +240,7 @@ static void read_tcp_data(ares_channel channel, fd_set *read_fds, time_t now) | ||||
|         { | ||||
|           /* Read data into the allocated buffer. */ | ||||
|           count = recv(server->tcp_socket, | ||||
|                        server->tcp_buffer + server->tcp_buffer_pos, | ||||
|                        (void *)(server->tcp_buffer + server->tcp_buffer_pos), | ||||
|                        server->tcp_length - server->tcp_buffer_pos, 0); | ||||
|           if (count <= 0) | ||||
|             { | ||||
| @@ -269,7 +282,7 @@ static void read_udp_packets(ares_channel channel, fd_set *read_fds, | ||||
|           !FD_ISSET(server->udp_socket, read_fds)) | ||||
|         continue; | ||||
|  | ||||
|       count = recv(server->udp_socket, buf, sizeof(buf), 0); | ||||
|       count = recv(server->udp_socket, (void *)buf, sizeof(buf), 0); | ||||
|       if (count <= 0) | ||||
|         handle_error(channel, i, now); | ||||
|  | ||||
| @@ -454,7 +467,8 @@ void ares__send_query(ares_channel channel, struct query *query, time_t now) | ||||
|               return; | ||||
|             } | ||||
|         } | ||||
|       if (send(server->udp_socket, query->qbuf, query->qlen, 0) == -1) | ||||
|       if (send(server->udp_socket, (void *)query->qbuf, | ||||
|                query->qlen, 0) == -1) | ||||
|         { | ||||
|           query->skip_server[query->server] = 1; | ||||
|           next_server(channel, query, now); | ||||
| @@ -466,13 +480,76 @@ void ares__send_query(ares_channel channel, struct query *query, time_t now) | ||||
|     } | ||||
| } | ||||
|  | ||||
| /* | ||||
|  * nonblock() set the given socket to either blocking or non-blocking mode | ||||
|  * based on the 'nonblock' boolean argument. This function is highly portable. | ||||
|  */ | ||||
| static int nonblock(ares_socket_t sockfd,    /* operate on this */ | ||||
|                     int nonblock   /* TRUE or FALSE */) | ||||
| { | ||||
| #undef SETBLOCK | ||||
| #define SETBLOCK 0 | ||||
| #ifdef HAVE_O_NONBLOCK | ||||
|   /* most recent unix versions */ | ||||
|   int flags; | ||||
|  | ||||
|   flags = fcntl(sockfd, F_GETFL, 0); | ||||
|   if (TRUE == nonblock) | ||||
|     return fcntl(sockfd, F_SETFL, flags | O_NONBLOCK); | ||||
|   else | ||||
|     return fcntl(sockfd, F_SETFL, flags & (~O_NONBLOCK)); | ||||
| #undef SETBLOCK | ||||
| #define SETBLOCK 1 | ||||
| #endif | ||||
|  | ||||
| #if defined(HAVE_FIONBIO) && (SETBLOCK == 0) | ||||
|   /* older unix versions */ | ||||
|   int flags; | ||||
|  | ||||
|   flags = nonblock; | ||||
|   return ioctl(sockfd, FIONBIO, &flags); | ||||
| #undef SETBLOCK | ||||
| #define SETBLOCK 2 | ||||
| #endif | ||||
|  | ||||
| #if defined(HAVE_IOCTLSOCKET) && (SETBLOCK == 0) | ||||
|   /* Windows? */ | ||||
|   unsigned long flags; | ||||
|   flags = nonblock; | ||||
|  | ||||
|   return ioctlsocket(sockfd, FIONBIO, &flags); | ||||
| #undef SETBLOCK | ||||
| #define SETBLOCK 3 | ||||
| #endif | ||||
|  | ||||
| #if defined(HAVE_IOCTLSOCKET_CASE) && (SETBLOCK == 0) | ||||
|   /* presumably for Amiga */ | ||||
|   return IoctlSocket(sockfd, FIONBIO, (long)nonblock); | ||||
| #undef SETBLOCK | ||||
| #define SETBLOCK 4 | ||||
| #endif | ||||
|  | ||||
| #if defined(HAVE_SO_NONBLOCK) && (SETBLOCK == 0) | ||||
|   /* BeOS */ | ||||
|   long b = nonblock ? 1 : 0; | ||||
|   return setsockopt(sockfd, SOL_SOCKET, SO_NONBLOCK, &b, sizeof(b)); | ||||
| #undef SETBLOCK | ||||
| #define SETBLOCK 5 | ||||
| #endif | ||||
|  | ||||
| #ifdef HAVE_DISABLED_NONBLOCKING | ||||
|   return 0; /* returns success */ | ||||
| #undef SETBLOCK | ||||
| #define SETBLOCK 6 | ||||
| #endif | ||||
|  | ||||
| #if (SETBLOCK == 0) | ||||
| #error "no non-blocking method was found/used/set" | ||||
| #endif | ||||
| } | ||||
|  | ||||
| static int open_tcp_socket(ares_channel channel, struct server_state *server) | ||||
| { | ||||
| #if defined(WIN32) | ||||
|   u_long flags; | ||||
| #else | ||||
|   int flags; | ||||
| #endif | ||||
|   ares_socket_t s; | ||||
|   struct sockaddr_in sockin; | ||||
|  | ||||
| @@ -482,25 +559,7 @@ static int open_tcp_socket(ares_channel channel, struct server_state *server) | ||||
|     return -1; | ||||
|  | ||||
|   /* Set the socket non-blocking. */ | ||||
|  | ||||
| #if defined(WIN32) || defined(WATT32) | ||||
|   flags = 1; | ||||
|   ioctlsocket(s, FIONBIO, &flags); | ||||
| #else | ||||
|   flags = fcntl(s, F_GETFL, 0); | ||||
|  | ||||
|   if (flags == -1) | ||||
|     { | ||||
|       closesocket(s); | ||||
|       return -1; | ||||
|     } | ||||
|   flags |= O_NONBLOCK; | ||||
|   if (fcntl(s, F_SETFL, flags) == -1) | ||||
|     { | ||||
|       closesocket(s); | ||||
|       return -1; | ||||
|     } | ||||
| #endif | ||||
|   nonblock(s, TRUE); | ||||
|  | ||||
|   /* Connect to the server. */ | ||||
|   memset(&sockin, 0, sizeof(sockin)); | ||||
| @@ -531,6 +590,9 @@ static int open_udp_socket(ares_channel channel, struct server_state *server) | ||||
|   if (s == ARES_SOCKET_BAD) | ||||
|     return -1; | ||||
|  | ||||
|   /* Set the socket non-blocking. */ | ||||
|   nonblock(s, TRUE); | ||||
|  | ||||
|   /* Connect to the server. */ | ||||
|   memset(&sockin, 0, sizeof(sockin)); | ||||
|   sockin.sin_family = AF_INET; | ||||
|   | ||||
| @@ -38,7 +38,8 @@ const char *ares_strerror(int code) | ||||
|     "Error reading file", | ||||
|     "Out of memory", | ||||
|     "Channel is being destroyed", | ||||
|     "Misformatted string" | ||||
|     "Misformatted string", | ||||
|     "Illegal flags specified" | ||||
|   }; | ||||
|  | ||||
|   assert(code >= 0 && code < (int)(sizeof(errtext) / sizeof(*errtext))); | ||||
|   | ||||
| @@ -5,11 +5,11 @@ | ||||
|  | ||||
| #define ARES_VERSION_MAJOR 1 | ||||
| #define ARES_VERSION_MINOR 3 | ||||
| #define ARES_VERSION_PATCH 0 | ||||
| #define ARES_VERSION_PATCH 1 | ||||
| #define ARES_VERSION ((ARES_VERSION_MAJOR<<16)|\ | ||||
|                        (ARES_VERSION_MINOR<<8)|\ | ||||
|                        (ARES_VERSION_PATCH)) | ||||
| #define ARES_VERSION_STR "1.3.0" | ||||
| #define ARES_VERSION_STR "1.3.1" | ||||
|  | ||||
| const char *ares_version(int *version); | ||||
|  | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| #!/bin/sh | ||||
|  | ||||
| ${LIBTOOLIZE:-libtoolize} --copy --automake --force | ||||
| ${ACLOCAL:-aclocal} | ||||
| ${ACLOCAL:-aclocal} $ACLOCAL_FLAGS | ||||
| ${AUTOHEADER:-autoheader} | ||||
| ${AUTOCONF:-autoconf} | ||||
| ${AUTOMAKE:-automake} --add-missing | ||||
|   | ||||
							
								
								
									
										87
									
								
								ares/config-win32.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										87
									
								
								ares/config-win32.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,87 @@ | ||||
| #ifndef __ARES_CONFIG_WIN32_H | ||||
| #define __ARES_CONFIG_WIN32_H | ||||
|  | ||||
| /* $Id$ */ | ||||
|  | ||||
| /* Copyright (C) 2004 - 2005 by Daniel Stenberg et al | ||||
|  * | ||||
|  * Permission to use, copy, modify, and distribute this software and its | ||||
|  * documentation for any purpose and without fee is hereby granted, provided | ||||
|  * that the above copyright notice appear in all copies and that both that | ||||
|  * copyright notice and this permission notice appear in supporting | ||||
|  * documentation, and that the name of M.I.T. not be used in advertising or | ||||
|  * publicity pertaining to distribution of the software without specific, | ||||
|  * written prior permission.  M.I.T. makes no representations about the | ||||
|  * suitability of this software for any purpose.  It is provided "as is" | ||||
|  * without express or implied warranty. | ||||
|  */ | ||||
|  | ||||
| /* ================================================================ */ | ||||
| /*    ares/config-win32.h - Hand crafted config file for windows    */ | ||||
| /* ================================================================ */ | ||||
|  | ||||
| /* ---------------------------------------------------------------- */ | ||||
| /*                          HEADER FILES                            */ | ||||
| /* ---------------------------------------------------------------- */ | ||||
|  | ||||
| /* Define if you have the <getopt.h> header file.  */ | ||||
| #if defined(__MINGW32__) | ||||
| #define HAVE_GETOPT_H 1 | ||||
| #endif | ||||
|  | ||||
| /* Define if you have the <unistd.h> header file.  */ | ||||
| #if defined(__MINGW32__) || defined(__WATCOMC__) || defined(__LCC__) || \ | ||||
|     defined(__POCC__) | ||||
| #define HAVE_UNISTD_H 1 | ||||
| #endif | ||||
|  | ||||
| /* Define if you have the <windows.h> header file.  */ | ||||
| #define HAVE_WINDOWS_H 1 | ||||
|  | ||||
| /* Define if you have the <winsock.h> header file.  */ | ||||
| #define HAVE_WINSOCK_H 1 | ||||
|  | ||||
| /* Define if you have the <winsock2.h> header file.  */ | ||||
| #define HAVE_WINSOCK2_H 1 | ||||
|  | ||||
| /* Define if you have the <ws2tcpip.h> header file.  */ | ||||
| #define HAVE_WS2TCPIP_H 1 | ||||
|  | ||||
| /* ---------------------------------------------------------------- */ | ||||
| /*                             FUNCTIONS                            */ | ||||
| /* ---------------------------------------------------------------- */ | ||||
|  | ||||
| /* Define if you have the ioctlsocket function.  */ | ||||
| #define HAVE_IOCTLSOCKET 1 | ||||
|  | ||||
| /* ---------------------------------------------------------------- */ | ||||
| /*                          STRUCT RELATED                          */ | ||||
| /* ---------------------------------------------------------------- */ | ||||
|  | ||||
| /* Define this if you have struct addrinfo */ | ||||
| #define HAVE_STRUCT_ADDRINFO 1 | ||||
|  | ||||
| /* Define this if you have struct sockaddr_storage */ | ||||
| #define HAVE_STRUCT_SOCKADDR_STORAGE 1 | ||||
|  | ||||
| /* ---------------------------------------------------------------- */ | ||||
| /*                         IPV6 COMPATIBILITY                       */ | ||||
| /* ---------------------------------------------------------------- */ | ||||
|  | ||||
| /* Define this if you have address family AF_INET6 */ | ||||
| #define HAVE_AF_INET6 1 | ||||
|  | ||||
| /* Define this if you have protocol family PF_INET6 */ | ||||
| #define HAVE_PF_INET6 1 | ||||
|  | ||||
| /* Define this if you have struct in6_addr */ | ||||
| #define HAVE_STRUCT_IN6_ADDR 1 | ||||
|  | ||||
| /* Define this if you have struct sockaddr_in6 */ | ||||
| #define HAVE_STRUCT_SOCKADDR_IN6 1 | ||||
|  | ||||
| /* Define this if you have sockaddr_in6 with scopeid */ | ||||
| #define HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID 1 | ||||
|  | ||||
|  | ||||
| #endif  /* __ARES_CONFIG_WIN32_H */ | ||||
| @@ -1,5 +1,8 @@ | ||||
|  | ||||
| dnl Process this file with autoconf to produce a configure script. | ||||
| AC_PREREQ(2.57) | ||||
| AC_INIT(ares_init.c) | ||||
| AC_CONFIG_SRCDIR([ares_ipv6.h]) | ||||
| AM_CONFIG_HEADER(config.h) | ||||
| AM_MAINTAINER_MODE | ||||
| AM_INIT_AUTOMAKE(c-ares, CVS) | ||||
| @@ -13,13 +16,12 @@ solaris*) | ||||
| 	;; | ||||
| esac | ||||
|  | ||||
| # check for ssize_t | ||||
| AC_CHECK_TYPE(ssize_t, , | ||||
|    AC_DEFINE(ssize_t, int, [the signed version of size_t])) | ||||
|  | ||||
| AC_SEARCH_LIBS(gethostbyname, nsl) | ||||
| AC_SEARCH_LIBS(socket, socket) | ||||
|  | ||||
| dnl check for cygwin stuff | ||||
| AC_LIBTOOL_WIN32_DLL | ||||
|  | ||||
| dnl ************************************************************ | ||||
| dnl Option to switch on debug options. This makes an assumption that | ||||
| dnl this is built as an 'ares' subdir in the curl source tree. Subject for | ||||
| @@ -38,9 +40,6 @@ AC_HELP_STRING([--disable-debug],[Disable debug options]), | ||||
|     dnl when doing the debug stuff, use static library only | ||||
|     AC_DISABLE_SHARED | ||||
|  | ||||
|     dnl Checks for standard header files, to make memdebug.h inclusions bettter | ||||
|     AC_HEADER_STDC | ||||
|  | ||||
|     dnl the entire --enable-debug is a hack that lives and runs on top of | ||||
|     dnl libcurl stuff so this BUILDING_LIBCURL is not THAT much uglier | ||||
|     AC_DEFINE(BUILDING_LIBCURL, 1, [when building as static part of libcurl]) | ||||
| @@ -57,45 +56,126 @@ AC_HELP_STRING([--disable-debug],[Disable debug options]), | ||||
|        AC_MSG_RESULT(no) | ||||
| ) | ||||
|  | ||||
| dnl libtool setup | ||||
| AC_PROG_LIBTOOL | ||||
|  | ||||
| dnl Checks for header files. | ||||
| AC_HEADER_STDC | ||||
|  | ||||
| dnl ********************************************************************** | ||||
| dnl Make sure that our checks for headers windows.h winsock.h winsock2.h  | ||||
| dnl and ws2tcpip.h take precedence over any other further checks which  | ||||
| dnl could be done later using AC_CHECK_HEADER or AC_CHECK_HEADERS for | ||||
| dnl this specific header files. And do them before its results are used. | ||||
| dnl ********************************************************************** | ||||
|  | ||||
| CURL_CHECK_HEADER_WINDOWS | ||||
| CURL_CHECK_HEADER_WINSOCK | ||||
| CURL_CHECK_HEADER_WINSOCK2 | ||||
| CURL_CHECK_HEADER_WS2TCPIP | ||||
|  | ||||
| dnl check for a few basic system headers we need | ||||
| AC_CHECK_HEADERS( | ||||
|        sys/types.h \ | ||||
|        sys/time.h \ | ||||
|        sys/select.h \ | ||||
|        sys/socket.h \ | ||||
|        winsock.h \ | ||||
|        sys/ioctl.h \ | ||||
|        netdb.h \ | ||||
|        netinet/in.h \ | ||||
|        net/if.h \ | ||||
|        arpa/nameser.h \ | ||||
|        arpa/nameser_compat.h \ | ||||
|        arpa/inet.h, , , | ||||
|        arpa/inet.h, | ||||
| dnl to do if not found | ||||
| [], | ||||
| dnl to do if found | ||||
| [], | ||||
| dnl default includes | ||||
| [ | ||||
| #ifdef HAVE_SYS_TYPES_H | ||||
| #include <sys/types.h> | ||||
| #endif | ||||
| #ifdef HAVE_SYS_TIME_H | ||||
| #include <sys/time.h> | ||||
| #endif | ||||
| dnl We do this default-include simply to make sure that the nameser_compat.h | ||||
| dnl header *REALLY* can be include after the new nameser.h. It seems AIX 5.1 | ||||
| dnl (and others?) is not designed to allow this. | ||||
| #ifdef HAVE_ARPA_NAMESER_H | ||||
| #include <arpa/nameser.h> | ||||
| #endif | ||||
|  | ||||
| dnl *Sigh* these are needed in order for net/if.h to get properly detected. | ||||
| #ifdef HAVE_SYS_SOCKET_H | ||||
| #include <sys/socket.h> | ||||
| #endif | ||||
| #ifdef HAVE_NETINET_IN_H | ||||
| #include <netinet/in.h> | ||||
| #endif | ||||
| ] | ||||
| ) | ||||
|  | ||||
| dnl Checks for typedefs, structures, and compiler characteristics. | ||||
| AC_C_CONST | ||||
| AC_TYPE_SIZE_T | ||||
| AC_HEADER_TIME | ||||
|  | ||||
| AC_CHECK_SIZEOF(curl_off_t, ,[ | ||||
| #include <stdio.h> | ||||
| #include "$srcdir/include/curl/curl.h" | ||||
| ]) | ||||
| AC_CHECK_SIZEOF(size_t) | ||||
| AC_CHECK_SIZEOF(long) | ||||
| AC_CHECK_SIZEOF(time_t) | ||||
|  | ||||
| AC_CHECK_TYPE(long long, | ||||
|    [AC_DEFINE(HAVE_LONGLONG, 1, [if your compiler supports long long])] | ||||
|    longlong="yes"   | ||||
| ) | ||||
|  | ||||
| if test "xyes" = "x$longlong"; then | ||||
|   AC_MSG_CHECKING([if numberLL works]) | ||||
|   AC_COMPILE_IFELSE([long long val = 1000LL;], | ||||
|    [AC_DEFINE(HAVE_LL, 1, [if your compiler supports LL])] | ||||
|    AC_MSG_RESULT(yes), | ||||
|    AC_MSG_RESULT(no) | ||||
|   ) | ||||
| fi | ||||
|  | ||||
|  | ||||
| # check for ssize_t | ||||
| AC_CHECK_TYPE(ssize_t, , | ||||
|    AC_DEFINE(ssize_t, int, [the signed version of size_t])) | ||||
|  | ||||
| # Check for socklen_t or equivalent | ||||
| CURL_CHECK_TYPE_SOCKLEN_T | ||||
|  | ||||
| TYPE_IN_ADDR_T | ||||
|  | ||||
| TYPE_SOCKADDR_STORAGE | ||||
|  | ||||
|  | ||||
| dnl check for AF_INET6 | ||||
| CARES_CHECK_CONSTANT( | ||||
|   [ | ||||
| #undef inline | ||||
| #ifdef HAVE_WINDOWS_H | ||||
| #ifndef WIN32_LEAN_AND_MEAN | ||||
| #define WIN32_LEAN_AND_MEAN | ||||
| #endif | ||||
| #include <windows.h> | ||||
| #ifdef HAVE_WINSOCK2_H | ||||
| #include <winsock2.h> | ||||
| #endif | ||||
| #else | ||||
| #ifdef HAVE_SYS_TYPES_H | ||||
| #include <sys/types.h> | ||||
| #endif | ||||
| #ifdef HAVE_SYS_SOCKET_H | ||||
| #include <sys/socket.h> | ||||
| #endif | ||||
| #ifdef HAVE_WINSOCK_H | ||||
| #include <winsock.h> | ||||
| #endif | ||||
|  | ||||
|   ], [PF_INET6],  | ||||
|      AC_DEFINE_UNQUOTED(HAVE_PF_INET6,1,[Define to 1 if you have PF_INET6.]) | ||||
| ) | ||||
| @@ -103,16 +183,23 @@ CARES_CHECK_CONSTANT( | ||||
| dnl check for PF_INET6 | ||||
| CARES_CHECK_CONSTANT( | ||||
|   [ | ||||
| #undef inline | ||||
| #ifdef HAVE_WINDOWS_H | ||||
| #ifndef WIN32_LEAN_AND_MEAN | ||||
| #define WIN32_LEAN_AND_MEAN | ||||
| #endif | ||||
| #include <windows.h> | ||||
| #ifdef HAVE_WINSOCK2_H | ||||
| #include <winsock2.h> | ||||
| #endif | ||||
| #else | ||||
| #ifdef HAVE_SYS_TYPES_H | ||||
| #include <sys/types.h> | ||||
| #endif | ||||
| #ifdef HAVE_SYS_SOCKET_H | ||||
| #include <sys/socket.h> | ||||
| #endif | ||||
| #ifdef HAVE_WINSOCK_H | ||||
| #include <winsock.h> | ||||
| #endif | ||||
|  | ||||
|   ], [AF_INET6],  | ||||
|      AC_DEFINE_UNQUOTED(HAVE_AF_INET6,1,[Define to 1 if you have AF_INET6.]) | ||||
| ) | ||||
| @@ -121,19 +208,138 @@ CARES_CHECK_CONSTANT( | ||||
| dnl check for the in6_addr structure | ||||
| CARES_CHECK_STRUCT( | ||||
|   [ | ||||
| #undef inline | ||||
| #ifdef HAVE_WINDOWS_H | ||||
| #ifndef WIN32_LEAN_AND_MEAN | ||||
| #define WIN32_LEAN_AND_MEAN | ||||
| #endif | ||||
| #include <windows.h> | ||||
| #ifdef HAVE_WINSOCK2_H | ||||
| #include <winsock2.h> | ||||
| #ifdef HAVE_WS2TCPIP_H | ||||
| #include <ws2tcpip.h> | ||||
| #endif | ||||
| #endif | ||||
| #else | ||||
| #ifdef HAVE_SYS_TYPES_H | ||||
| #include <sys/types.h> | ||||
| #endif | ||||
| #ifdef HAVE_WINSOCK_H | ||||
| #include <winsock.h> | ||||
| #endif | ||||
| #ifdef HAVE_NETINET_IN_H | ||||
| #include <netinet/in.h> | ||||
| #endif | ||||
| #endif | ||||
|   ], [in6_addr],  | ||||
|      AC_DEFINE_UNQUOTED(HAVE_STRUCT_IN6_ADDR,1,[Define to 1 if you have struct in6_addr.]) | ||||
| ) | ||||
|  | ||||
| dnl check for the sockaddr_in6 structure | ||||
| CARES_CHECK_STRUCT( | ||||
|   [ | ||||
| #undef inline | ||||
| #ifdef HAVE_WINDOWS_H | ||||
| #ifndef WIN32_LEAN_AND_MEAN | ||||
| #define WIN32_LEAN_AND_MEAN | ||||
| #endif | ||||
| #include <windows.h> | ||||
| #ifdef HAVE_WINSOCK2_H | ||||
| #include <winsock2.h> | ||||
| #ifdef HAVE_WS2TCPIP_H | ||||
| #include <ws2tcpip.h> | ||||
| #endif | ||||
| #endif | ||||
| #else | ||||
| #ifdef HAVE_SYS_TYPES_H | ||||
| #include <sys/types.h> | ||||
| #endif | ||||
| #ifdef HAVE_NETINET_IN_H | ||||
| #include <netinet/in.h> | ||||
| #endif | ||||
| #endif | ||||
|   ], [sockaddr_in6],  | ||||
|      AC_DEFINE_UNQUOTED(HAVE_STRUCT_SOCKADDR_IN6,1, | ||||
|        [Define to 1 if you have struct sockaddr_in6.]) ac_have_sockaddr_in6=yes | ||||
| ) | ||||
|  | ||||
| AC_CHECK_MEMBER(struct sockaddr_in6.sin6_scope_id, | ||||
|     AC_DEFINE_UNQUOTED(HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID,1, | ||||
|       [Define to 1 if your struct sockaddr_in6 has sin6_scope_id.]) | ||||
|    , , | ||||
|   [ | ||||
| #undef inline | ||||
| #ifdef HAVE_WINDOWS_H | ||||
| #ifndef WIN32_LEAN_AND_MEAN | ||||
| #define WIN32_LEAN_AND_MEAN | ||||
| #endif | ||||
| #include <windows.h> | ||||
| #ifdef HAVE_WINSOCK2_H | ||||
| #include <winsock2.h> | ||||
| #ifdef HAVE_WS2TCPIP_H | ||||
| #include <ws2tcpip.h> | ||||
| #endif | ||||
| #endif | ||||
| #else | ||||
| #ifdef HAVE_SYS_TYPES_H | ||||
| #include <sys/types.h> | ||||
| #endif | ||||
| #ifdef HAVE_NETINET_IN_H | ||||
| #include <netinet/in.h> | ||||
| #endif | ||||
| #endif | ||||
|   ]) | ||||
|  | ||||
| dnl check for the addrinfo structure | ||||
| AC_CHECK_MEMBER(struct addrinfo.ai_flags, | ||||
|      AC_DEFINE_UNQUOTED(HAVE_STRUCT_ADDRINFO,1, | ||||
|        [Define to 1 if you have struct addrinfo.]),, | ||||
|   [ | ||||
| #undef inline | ||||
| #ifdef HAVE_WINDOWS_H | ||||
| #ifndef WIN32_LEAN_AND_MEAN | ||||
| #define WIN32_LEAN_AND_MEAN | ||||
| #endif | ||||
| #include <windows.h> | ||||
| #ifdef HAVE_WINSOCK2_H | ||||
| #include <winsock2.h> | ||||
| #ifdef HAVE_WS2TCPIP_H | ||||
| #include <ws2tcpip.h> | ||||
| #endif | ||||
| #endif | ||||
| #else | ||||
| #ifdef HAVE_SYS_TYPES_H | ||||
| #include <sys/types.h> | ||||
| #endif | ||||
| #ifdef HAVE_NETINET_IN_H | ||||
| #include <netinet/in.h> | ||||
| #endif | ||||
| #ifdef HAVE_SYS_SOCKET_H | ||||
| #include <sys/socket.h> | ||||
| #endif | ||||
| #ifdef HAVE_NETDB_H | ||||
| #include <netdb.h> | ||||
| #endif | ||||
| #endif | ||||
|   ] | ||||
| ) | ||||
|  | ||||
|  | ||||
| AC_CHECK_FUNCS( bitncmp \ | ||||
|                 if_indextoname, | ||||
| dnl if found | ||||
| [], | ||||
| dnl if not found, $ac_func is the name we check for | ||||
| func="$ac_func" | ||||
| AC_MSG_CHECKING([deeper for $func]) | ||||
| AC_TRY_LINK( [], | ||||
|              [ $func ();], | ||||
|              AC_MSG_RESULT(yes!) | ||||
|              eval "ac_cv_func_$func=yes" | ||||
|              def=`echo "HAVE_$func" | tr 'a-z' 'A-Z'` | ||||
|              AC_DEFINE_UNQUOTED($def, 1, [If you have $func]), | ||||
|              AC_MSG_RESULT(but still no) | ||||
|              ) | ||||
| ) | ||||
|  | ||||
|  | ||||
| dnl check for inet_pton | ||||
| AC_CHECK_FUNCS(inet_pton) | ||||
| dnl Some systems have it, but not IPv6 | ||||
| @@ -147,9 +353,6 @@ AC_TRY_RUN( | ||||
| #ifdef HAVE_SYS_SOCKET_H | ||||
| #include <sys/socket.h> | ||||
| #endif | ||||
| #ifdef HAVE_WINSOCK_H | ||||
| #include <winsock.h> | ||||
| #endif | ||||
| #ifdef HAVE_NETINET_IN_H | ||||
| #include <netinet/in.h> | ||||
| #endif | ||||
| @@ -179,9 +382,6 @@ AC_TRY_RUN( | ||||
| #ifdef HAVE_SYS_SOCKET_H | ||||
| #include <sys/socket.h> | ||||
| #endif | ||||
| #ifdef HAVE_WINSOCK_H | ||||
| #include <winsock.h> | ||||
| #endif | ||||
| #ifdef HAVE_NETINET_IN_H | ||||
| #include <netinet/in.h> | ||||
| #endif | ||||
| @@ -213,9 +413,6 @@ AC_TRY_RUN( | ||||
| #ifdef HAVE_SYS_SOCKET_H | ||||
| #include <sys/socket.h> | ||||
| #endif | ||||
| #ifdef HAVE_WINSOCK_H | ||||
| #include <winsock.h> | ||||
| #endif | ||||
| #ifdef HAVE_NETINET_IN_H | ||||
| #include <netinet/in.h> | ||||
| #endif | ||||
| @@ -237,38 +434,75 @@ fi | ||||
|  | ||||
| AC_CHECK_SIZEOF(struct in6_addr, , | ||||
| [ | ||||
| #undef inline | ||||
| #ifdef HAVE_WINDOWS_H | ||||
| #ifndef WIN32_LEAN_AND_MEAN | ||||
| #define WIN32_LEAN_AND_MEAN | ||||
| #endif | ||||
| #include <windows.h> | ||||
| #ifdef HAVE_WINSOCK2_H | ||||
| #include <winsock2.h> | ||||
| #ifdef HAVE_WS2TCPIP_H | ||||
| #include <ws2tcpip.h> | ||||
| #endif | ||||
| #endif | ||||
| #else | ||||
| #ifdef HAVE_SYS_TYPES_H | ||||
| #include <sys/types.h> | ||||
| #endif | ||||
| #ifdef HAVE_SYS_SOCKET_H | ||||
| #include <sys/socket.h> | ||||
| #endif | ||||
| #ifdef HAVE_WINSOCK_H | ||||
| #include <winsock.h> | ||||
| #endif | ||||
| #ifdef HAVE_NETINET_IN_H | ||||
| #include <netinet/in.h> | ||||
| #endif | ||||
| #endif | ||||
| ] | ||||
| ) | ||||
|  | ||||
| AC_CHECK_SIZEOF(struct in_addr, , | ||||
| [ | ||||
| #undef inline | ||||
| #ifdef HAVE_WINDOWS_H | ||||
| #ifndef WIN32_LEAN_AND_MEAN | ||||
| #define WIN32_LEAN_AND_MEAN | ||||
| #endif | ||||
| #include <windows.h> | ||||
| #ifdef HAVE_WINSOCK2_H | ||||
| #include <winsock2.h> | ||||
| #ifdef HAVE_WS2TCPIP_H | ||||
| #include <ws2tcpip.h> | ||||
| #endif | ||||
| #endif | ||||
| #else | ||||
| #ifdef HAVE_SYS_TYPES_H | ||||
| #include <sys/types.h> | ||||
| #endif | ||||
| #ifdef HAVE_SYS_SOCKET_H | ||||
| #include <sys/socket.h> | ||||
| #endif | ||||
| #ifdef HAVE_WINSOCK_H | ||||
| #include <winsock.h> | ||||
| #endif | ||||
| #ifdef HAVE_NETINET_IN_H | ||||
| #include <netinet/in.h> | ||||
| #endif | ||||
| #endif | ||||
| ] | ||||
| ) | ||||
|  | ||||
| AC_CHECK_FUNCS(bitncmp) | ||||
|  | ||||
| dnl Check if the getnameinfo function is available | ||||
| dnl and get the types of five of its arguments. | ||||
| CURL_CHECK_FUNC_GETNAMEINFO | ||||
|  | ||||
|  | ||||
| dnl God bless non-standardized functions! We need to see which getservbyport_r variant is available | ||||
| CARES_CHECK_GETSERVBYPORT_R | ||||
|  | ||||
| CURL_CHECK_NONBLOCKING_SOCKET | ||||
|  | ||||
| AC_C_BIGENDIAN( | ||||
|     [AC_DEFINE(ARES_BIG_ENDIAN, 1, [define this if ares is built for a big endian system])], | ||||
|     , | ||||
|     [AC_MSG_WARN([couldn't figure out endianess, assuming little endian!])] | ||||
| ) | ||||
|  | ||||
| AC_OUTPUT(Makefile) | ||||
|   | ||||
							
								
								
									
										232
									
								
								ares/inet_ntop.c
									
									
									
									
									
								
							
							
						
						
									
										232
									
								
								ares/inet_ntop.c
									
									
									
									
									
								
							| @@ -1,3 +1,5 @@ | ||||
| /* $Id$ */ | ||||
|  | ||||
| /* Copyright (c) 1996 by Internet Software Consortium. | ||||
|  * | ||||
|  * Permission to use, copy, modify, and distribute this software for any | ||||
| @@ -63,144 +65,156 @@ static const char *inet_ntop6(const unsigned char *src, char *dst, size_t size); | ||||
|  | ||||
| /* char * | ||||
|  * inet_ntop(af, src, dst, size) | ||||
|  *	convert a network format address to presentation format. | ||||
|  *     convert a network format address to presentation format. | ||||
|  * return: | ||||
|  *	pointer to presentation format address (`dst'), or NULL (see errno). | ||||
|  *     pointer to presentation format address (`dst'), or NULL (see errno). | ||||
|  * author: | ||||
|  *	Paul Vixie, 1996. | ||||
|  *     Paul Vixie, 1996. | ||||
|  */ | ||||
| const char * | ||||
| ares_inet_ntop(int af, const void *src, char *dst, size_t size) | ||||
| { | ||||
|  | ||||
| 	switch (af) { | ||||
| 	case AF_INET: | ||||
| 		return (inet_ntop4(src, dst, size)); | ||||
| 	case AF_INET6: | ||||
| 		return (inet_ntop6(src, dst, size)); | ||||
| 	default: | ||||
| 		errno = EAFNOSUPPORT; | ||||
| 		return (NULL); | ||||
| 	} | ||||
| 	/* NOTREACHED */ | ||||
|   switch (af) | ||||
|     { | ||||
|     case AF_INET: | ||||
|       return (inet_ntop4(src, dst, size)); | ||||
|     case AF_INET6: | ||||
|       return (inet_ntop6(src, dst, size)); | ||||
|     default: | ||||
|       errno = EAFNOSUPPORT; | ||||
|       return (NULL); | ||||
|     } | ||||
|   /* NOTREACHED */ | ||||
| } | ||||
|  | ||||
| /* const char * | ||||
|  * inet_ntop4(src, dst, size) | ||||
|  *	format an IPv4 address, more or less like inet_ntoa() | ||||
|  *     format an IPv4 address, more or less like inet_ntoa() | ||||
|  * return: | ||||
|  *	`dst' (as a const) | ||||
|  *     `dst' (as a const) | ||||
|  * notes: | ||||
|  *	(1) uses no statics | ||||
|  *	(2) takes a unsigned char* not an in_addr as input | ||||
|  *     (1) uses no statics | ||||
|  *     (2) takes a unsigned char* not an in_addr as input | ||||
|  * author: | ||||
|  *	Paul Vixie, 1996. | ||||
|  *     Paul Vixie, 1996. | ||||
|  */ | ||||
| static const char * | ||||
| inet_ntop4(const unsigned char *src, char *dst, size_t size) | ||||
| { | ||||
| 	static const char fmt[] = "%u.%u.%u.%u"; | ||||
| 	char tmp[sizeof "255.255.255.255"]; | ||||
|   static const char fmt[] = "%u.%u.%u.%u"; | ||||
|   char tmp[sizeof "255.255.255.255"]; | ||||
|  | ||||
| 	if (SPRINTF((tmp, fmt, src[0], src[1], src[2], src[3])) > size) { | ||||
| 		errno = ENOSPC; | ||||
| 		return (NULL); | ||||
| 	} | ||||
| 	strcpy(dst, tmp); | ||||
| 	return (dst); | ||||
|   if (SPRINTF((tmp, fmt, src[0], src[1], src[2], src[3])) > size) | ||||
|     { | ||||
|       errno = ENOSPC; | ||||
|       return (NULL); | ||||
|     } | ||||
|     strcpy(dst, tmp); | ||||
|     return (dst); | ||||
| } | ||||
|  | ||||
| /* const char * | ||||
|  * inet_ntop6(src, dst, size) | ||||
|  *	convert IPv6 binary address into presentation (printable) format | ||||
|  *    convert IPv6 binary address into presentation (printable) format | ||||
|  * author: | ||||
|  *	Paul Vixie, 1996. | ||||
|  *    Paul Vixie, 1996. | ||||
|  */ | ||||
| static const char * | ||||
| inet_ntop6(const unsigned char *src, char *dst, size_t size) | ||||
| { | ||||
| 	/* | ||||
| 	 * Note that int32_t and int16_t need only be "at least" large enough | ||||
| 	 * to contain a value of the specified size.  On some systems, like | ||||
| 	 * Crays, there is no such thing as an integer variable with 16 bits. | ||||
| 	 * Keep this in mind if you think this function should have been coded | ||||
| 	 * to use pointer overlays.  All the world's not a VAX. | ||||
| 	 */ | ||||
| 	char tmp[sizeof "ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255"], *tp; | ||||
| 	struct { int base, len; } best, cur; | ||||
| 	unsigned int words[NS_IN6ADDRSZ / NS_INT16SZ]; | ||||
| 	int i; | ||||
|   /* | ||||
|    * Note that int32_t and int16_t need only be "at least" large enough | ||||
|    * to contain a value of the specified size.  On some systems, like | ||||
|    * Crays, there is no such thing as an integer variable with 16 bits. | ||||
|    * Keep this in mind if you think this function should have been coded | ||||
|    * to use pointer overlays.  All the world's not a VAX. | ||||
|    */ | ||||
|   char tmp[sizeof "ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255"], *tp; | ||||
|   struct { int base, len; } best = { 0,0 }, cur = { 0,0 }; | ||||
|   unsigned int words[NS_IN6ADDRSZ / NS_INT16SZ]; | ||||
|   int i; | ||||
|  | ||||
| 	/* | ||||
| 	 * Preprocess: | ||||
| 	 *	Copy the input (bytewise) array into a wordwise array. | ||||
| 	 *	Find the longest run of 0x00's in src[] for :: shorthanding. | ||||
| 	 */ | ||||
| 	memset(words, '\0', sizeof words); | ||||
| 	for (i = 0; i < NS_IN6ADDRSZ; i++) | ||||
| 		words[i / 2] |= (src[i] << ((1 - (i % 2)) << 3)); | ||||
| 	best.base = -1; | ||||
| 	cur.base = -1; | ||||
| 	for (i = 0; i < (NS_IN6ADDRSZ / NS_INT16SZ); i++) { | ||||
| 		if (words[i] == 0) { | ||||
| 			if (cur.base == -1) | ||||
| 				cur.base = i, cur.len = 1; | ||||
| 			else | ||||
| 				cur.len++; | ||||
| 		} else { | ||||
| 			if (cur.base != -1) { | ||||
| 				if (best.base == -1 || cur.len > best.len) | ||||
| 					best = cur; | ||||
| 				cur.base = -1; | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 	if (cur.base != -1) { | ||||
| 		if (best.base == -1 || cur.len > best.len) | ||||
| 			best = cur; | ||||
| 	} | ||||
| 	if (best.base != -1 && best.len < 2) | ||||
| 		best.base = -1; | ||||
|   /* | ||||
|    * Preprocess: | ||||
|    *  Copy the input (bytewise) array into a wordwise array. | ||||
|    *  Find the longest run of 0x00's in src[] for :: shorthanding. | ||||
|    */ | ||||
|   memset(words, '\0', sizeof words); | ||||
|   for (i = 0; i < NS_IN6ADDRSZ; i++) | ||||
|       words[i / 2] |= (src[i] << ((1 - (i % 2)) << 3)); | ||||
|   best.base = -1; | ||||
|   cur.base = -1; | ||||
|   for (i = 0; i < (NS_IN6ADDRSZ / NS_INT16SZ); i++) | ||||
|     { | ||||
|       if (words[i] == 0) | ||||
|         { | ||||
|           if (cur.base == -1) | ||||
|             cur.base = i, cur.len = 1; | ||||
|           else | ||||
|             cur.len++; | ||||
|         } | ||||
|       else | ||||
|         { | ||||
|           if (cur.base != -1) | ||||
|             { | ||||
|               if (best.base == -1 || cur.len > best.len) | ||||
|                 best = cur; | ||||
|               cur.base = -1; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|   if (cur.base != -1) | ||||
|     { | ||||
|       if (best.base == -1 || cur.len > best.len) | ||||
|         best = cur; | ||||
|     } | ||||
|   if (best.base != -1 && best.len < 2) | ||||
|     best.base = -1; | ||||
|  | ||||
| 	/* | ||||
| 	 * Format the result. | ||||
| 	 */ | ||||
| 	tp = tmp; | ||||
| 	for (i = 0; i < (NS_IN6ADDRSZ / NS_INT16SZ); i++) { | ||||
| 		/* Are we inside the best run of 0x00's? */ | ||||
| 		if (best.base != -1 && i >= best.base && | ||||
| 		    i < (best.base + best.len)) { | ||||
| 			if (i == best.base) | ||||
| 				*tp++ = ':'; | ||||
| 			continue; | ||||
| 		} | ||||
| 		/* Are we following an initial run of 0x00s or any real hex? */ | ||||
| 		if (i != 0) | ||||
| 			*tp++ = ':'; | ||||
| 		/* Is this address an encapsulated IPv4? */ | ||||
| 		if (i == 6 && best.base == 0 && | ||||
| 		    (best.len == 6 || (best.len == 5 && words[5] == 0xffff))) { | ||||
| 			if (!inet_ntop4(src+12, tp, sizeof tmp - (tp - tmp))) | ||||
| 				return (NULL); | ||||
| 			tp += strlen(tp); | ||||
| 			break; | ||||
| 		} | ||||
| 		tp += SPRINTF((tp, "%x", words[i])); | ||||
| 	} | ||||
| 	/* Was it a trailing run of 0x00's? */ | ||||
| 	if (best.base != -1 && (best.base + best.len) == (NS_IN6ADDRSZ / NS_INT16SZ)) | ||||
| 		*tp++ = ':'; | ||||
| 	*tp++ = '\0'; | ||||
|   /* | ||||
|    * Format the result. | ||||
|    */ | ||||
|   tp = tmp; | ||||
|   for (i = 0; i < (NS_IN6ADDRSZ / NS_INT16SZ); i++) | ||||
|     { | ||||
|       /* Are we inside the best run of 0x00's? */ | ||||
|       if (best.base != -1 && i >= best.base && | ||||
|           i < (best.base + best.len)) | ||||
|         { | ||||
|           if (i == best.base) | ||||
|              *tp++ = ':'; | ||||
|           continue; | ||||
|         } | ||||
|       /* Are we following an initial run of 0x00s or any real hex? */ | ||||
|       if (i != 0) | ||||
|         *tp++ = ':'; | ||||
|       /* Is this address an encapsulated IPv4? */ | ||||
|       if (i == 6 && best.base == 0 && | ||||
|           (best.len == 6 || (best.len == 5 && words[5] == 0xffff))) | ||||
|         { | ||||
|           if (!inet_ntop4(src+12, tp, sizeof tmp - (tp - tmp))) | ||||
|             return (NULL); | ||||
|           tp += strlen(tp); | ||||
|           break; | ||||
|         } | ||||
|         tp += SPRINTF((tp, "%x", words[i])); | ||||
|     } | ||||
|  | ||||
| 	/* | ||||
| 	 * Check for overflow, copy, and we're done. | ||||
| 	 */ | ||||
| 	if ((size_t)(tp - tmp) > size) { | ||||
| 		errno = ENOSPC; | ||||
| 		return (NULL); | ||||
| 	} | ||||
| 	strcpy(dst, tmp); | ||||
| 	return (dst); | ||||
|   /* Was it a trailing run of 0x00's? */ | ||||
|   if (best.base != -1 && (best.base + best.len) == (NS_IN6ADDRSZ / NS_INT16SZ)) | ||||
|     *tp++ = ':'; | ||||
|   *tp++ = '\0'; | ||||
|  | ||||
|   /* | ||||
|    * Check for overflow, copy, and we're done. | ||||
|    */ | ||||
|   if ((size_t)(tp - tmp) > size) | ||||
|     { | ||||
|       errno = ENOSPC; | ||||
|       return (NULL); | ||||
|     } | ||||
|   strcpy(dst, tmp); | ||||
|   return (dst); | ||||
| } | ||||
|  | ||||
| #endif | ||||
|  | ||||
|   | ||||
| @@ -1,3 +1,5 @@ | ||||
| /* $Id$ */ | ||||
|  | ||||
| #ifndef ARES_NAMESER_H | ||||
| #define ARES_NAMESER_H | ||||
|  | ||||
| @@ -16,7 +18,7 @@ | ||||
|  | ||||
| #define EINPROGRESS WSAEINPROGRESS | ||||
| #define EWOULDBLOCK WSAEWOULDBLOCK | ||||
| #define EMSGSIZE WSAEMSGSIZE | ||||
| #define EMSGSIZE     WSAEMSGSIZE | ||||
| #define EAFNOSUPPORT WSAEAFNOSUPPORT | ||||
|  | ||||
| /* Structure for scatter/gather I/O.  */ | ||||
|   | ||||
							
								
								
									
										89
									
								
								ares/setup.h
									
									
									
									
									
								
							
							
						
						
									
										89
									
								
								ares/setup.h
									
									
									
									
									
								
							| @@ -1,5 +1,5 @@ | ||||
| #ifndef ARES_SETUP_H | ||||
| #define ARES_SETUP_H | ||||
| #ifndef __ARES_SETUP_H | ||||
| #define __ARES_SETUP_H | ||||
|  | ||||
| /* Copyright (C) 2004 - 2005 by Daniel Stenberg et al | ||||
|  * | ||||
| @@ -14,16 +14,79 @@ | ||||
|  * without express or implied warranty. | ||||
|  */ | ||||
|  | ||||
| #if !defined(WIN32) && defined(__WIN32__) | ||||
| /* Borland fix */ | ||||
| #define WIN32 | ||||
| #endif | ||||
|  | ||||
| #if !defined(WIN32) && defined(_WIN32) | ||||
| /* VS2005 on x64 fix */ | ||||
| #define WIN32 | ||||
| #endif | ||||
|  | ||||
| /* | ||||
|  * Include configuration script results or hand-crafted | ||||
|  * configuration file for platforms which lack config tool. | ||||
|  */ | ||||
|  | ||||
| #ifdef HAVE_CONFIG_H | ||||
| #include "config.h" | ||||
| #else | ||||
| /* simple work-around for now, for systems without configure support */ | ||||
|  | ||||
| #ifdef WIN32 | ||||
| #include "config-win32.h" | ||||
| #endif | ||||
|  | ||||
| #endif /* HAVE_CONFIG_H */ | ||||
|  | ||||
| /* | ||||
|  * Include header files for windows builds before redefining anything. | ||||
|  * Use this preproessor block only to include or exclude windows.h, | ||||
|  * winsock2.h, ws2tcpip.h or winsock.h. Any other windows thing belongs | ||||
|  * to any other further and independant block. | ||||
|  */ | ||||
|  | ||||
| #ifdef HAVE_WINDOWS_H | ||||
| #  ifndef WIN32_LEAN_AND_MEAN | ||||
| #    define WIN32_LEAN_AND_MEAN | ||||
| #  endif | ||||
| #  include <windows.h> | ||||
| #  ifdef HAVE_WINSOCK2_H | ||||
| #    include <winsock2.h> | ||||
| #    ifdef HAVE_WS2TCPIP_H | ||||
| #       include <ws2tcpip.h> | ||||
| #    endif | ||||
| #  else | ||||
| #    ifdef HAVE_WINSOCK_H | ||||
| #      include <winsock.h> | ||||
| #    endif | ||||
| #  endif | ||||
| #endif | ||||
|  | ||||
| /* | ||||
|  * Work-arounds for systems without configure support | ||||
|  */ | ||||
|  | ||||
| #ifndef HAVE_CONFIG_H | ||||
|  | ||||
| #if defined(__DJGPP__) || (defined(__WATCOMC__) && (__WATCOMC__ >= 1240)) || \ | ||||
|     defined(__POCC__) | ||||
| #else | ||||
| #define ssize_t int | ||||
| #endif | ||||
|  | ||||
| /* Recent autoconf versions define these symbols in config.h. We don't want | ||||
|    them (since they collide with the libcurl ones when we build | ||||
|    --enable-debug) so we undef them again here. */ | ||||
| #ifndef HAVE_WS2TCPIP_H | ||||
| #define socklen_t int | ||||
| #endif | ||||
|  | ||||
| #endif /* HAVE_CONFIG_H */ | ||||
|  | ||||
| /* | ||||
|  * Recent autoconf versions define these symbols in config.h. We don't | ||||
|  * want them (since they collide with the libcurl ones when we build | ||||
|  *  --enable-debug) so we undef them again here. | ||||
|  */ | ||||
|  | ||||
| #undef PACKAGE_STRING | ||||
| #undef PACKAGE_TARNAME | ||||
| #undef PACKAGE_VERSION | ||||
| @@ -32,9 +95,11 @@ | ||||
| #undef VERSION | ||||
| #undef PACKAGE | ||||
|  | ||||
| /* now typedef our socket type */ | ||||
| /* | ||||
|  * Typedef our socket type | ||||
|  */ | ||||
|  | ||||
| #if defined(WIN32) && !defined(WATT32) | ||||
| #include <winsock.h> | ||||
| typedef SOCKET ares_socket_t; | ||||
| #define ARES_SOCKET_BAD INVALID_SOCKET | ||||
| #else | ||||
| @@ -42,8 +107,10 @@ typedef int ares_socket_t; | ||||
| #define ARES_SOCKET_BAD -1 | ||||
| #endif | ||||
|  | ||||
| /* Assume a few thing unless they're set by configure | ||||
| /* | ||||
|  * Assume a few thing unless they're set by configure | ||||
|  */ | ||||
|  | ||||
| #if !defined(HAVE_SYS_TIME_H) && !defined(_MSC_VER) | ||||
| #define HAVE_SYS_TIME_H | ||||
| #endif | ||||
| @@ -57,7 +124,7 @@ typedef int ares_socket_t; | ||||
| #endif | ||||
|  | ||||
| #if (defined(WIN32) || defined(WATT32)) && \ | ||||
|    !(defined(__MINGW32__) || defined(NETWARE)) | ||||
|    !(defined(__MINGW32__) || defined(NETWARE) || defined(__DJGPP__)) | ||||
| /* protos for the functions we provide in windows_port.c */ | ||||
| int ares_strncasecmp(const char *s1, const char *s2, int n); | ||||
| int ares_strcasecmp(const char *s1, const char *s2); | ||||
| @@ -78,4 +145,4 @@ int ares_strcasecmp(const char *s1, const char *s2); | ||||
| #endif | ||||
| #endif | ||||
|  | ||||
| #endif /* ARES_SETUP_H */ | ||||
| #endif /* __ARES_SETUP_H */ | ||||
|   | ||||
| @@ -1,213 +0,0 @@ | ||||
| # Microsoft Developer Studio Generated NMAKE File, Based on adig.dsp | ||||
| !IF "$(CFG)" == "" | ||||
| CFG=adig - Win32 Debug | ||||
| !MESSAGE No configuration specified. Defaulting to adig - Win32 Debug. | ||||
| !ENDIF  | ||||
|  | ||||
| !IF "$(CFG)" != "adig - Win32 Release" && "$(CFG)" != "adig - Win32 Debug" | ||||
| !MESSAGE Invalid configuration "$(CFG)" specified. | ||||
| !MESSAGE You can specify a configuration when running NMAKE | ||||
| !MESSAGE by defining the macro CFG on the command line. For example: | ||||
| !MESSAGE  | ||||
| !MESSAGE NMAKE /f "adig.mak" CFG="adig - Win32 Debug" | ||||
| !MESSAGE  | ||||
| !MESSAGE Possible choices for configuration are: | ||||
| !MESSAGE  | ||||
| !MESSAGE "adig - Win32 Release" (based on "Win32 (x86) Console Application") | ||||
| !MESSAGE "adig - Win32 Debug" (based on "Win32 (x86) Console Application") | ||||
| !MESSAGE  | ||||
| !ERROR An invalid configuration is specified. | ||||
| !ENDIF  | ||||
|  | ||||
| !IF "$(OS)" == "Windows_NT" | ||||
| NULL= | ||||
| !ELSE  | ||||
| NULL=nul | ||||
| !ENDIF  | ||||
|  | ||||
| CPP=cl.exe | ||||
| RSC=rc.exe | ||||
|  | ||||
| !IF  "$(CFG)" == "adig - Win32 Release" | ||||
|  | ||||
| OUTDIR=.\Release | ||||
| INTDIR=.\Release | ||||
| # Begin Custom Macros | ||||
| OutDir=.\Release | ||||
| # End Custom Macros | ||||
|  | ||||
| !IF "$(RECURSE)" == "0"  | ||||
|  | ||||
| ALL : "$(OUTDIR)\adig.exe" | ||||
|  | ||||
| !ELSE  | ||||
|  | ||||
| ALL : "areslib - Win32 Release" "$(OUTDIR)\adig.exe" | ||||
|  | ||||
| !ENDIF  | ||||
|  | ||||
| !IF "$(RECURSE)" == "1"  | ||||
| CLEAN :"areslib - Win32 ReleaseCLEAN"  | ||||
| !ELSE  | ||||
| CLEAN : | ||||
| !ENDIF  | ||||
| 	-@erase "$(INTDIR)\adig.obj" | ||||
| 	-@erase "$(INTDIR)\getopt.obj" | ||||
| 	-@erase "$(INTDIR)\vc60.idb" | ||||
| 	-@erase "$(OUTDIR)\adig.exe" | ||||
|  | ||||
| "$(OUTDIR)" : | ||||
|     if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" | ||||
|  | ||||
| CPP_PROJ=/nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /Fp"$(INTDIR)\adig.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c  | ||||
| BSC32=bscmake.exe | ||||
| BSC32_FLAGS=/nologo /o"$(OUTDIR)\adig.bsc"  | ||||
| BSC32_SBRS= \ | ||||
| 	 | ||||
| LINK32=link.exe | ||||
| LINK32_FLAGS=wsock32.lib areslib.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:no /pdb:"$(OUTDIR)\adig.pdb" /machine:I386 /out:"$(OUTDIR)\adig.exe" /libpath:"..\areslib\Release"  | ||||
| LINK32_OBJS= \ | ||||
| 	"$(INTDIR)\adig.obj" \ | ||||
| 	"$(INTDIR)\getopt.obj" \ | ||||
| 	"..\areslib\Release\areslib.lib" | ||||
|  | ||||
| "$(OUTDIR)\adig.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) | ||||
|     $(LINK32) @<< | ||||
|   $(LINK32_FLAGS) $(LINK32_OBJS) | ||||
| << | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "adig - Win32 Debug" | ||||
|  | ||||
| OUTDIR=.\Debug | ||||
| INTDIR=.\Debug | ||||
| # Begin Custom Macros | ||||
| OutDir=.\Debug | ||||
| # End Custom Macros | ||||
|  | ||||
| !IF "$(RECURSE)" == "0"  | ||||
|  | ||||
| ALL : "$(OUTDIR)\adig.exe" | ||||
|  | ||||
| !ELSE  | ||||
|  | ||||
| ALL : "areslib - Win32 Debug" "$(OUTDIR)\adig.exe" | ||||
|  | ||||
| !ENDIF  | ||||
|  | ||||
| !IF "$(RECURSE)" == "1"  | ||||
| CLEAN :"areslib - Win32 DebugCLEAN"  | ||||
| !ELSE  | ||||
| CLEAN : | ||||
| !ENDIF  | ||||
| 	-@erase "$(INTDIR)\adig.obj" | ||||
| 	-@erase "$(INTDIR)\getopt.obj" | ||||
| 	-@erase "$(INTDIR)\vc60.idb" | ||||
| 	-@erase "$(INTDIR)\vc60.pdb" | ||||
| 	-@erase "$(OUTDIR)\adig.exe" | ||||
| 	-@erase "$(OUTDIR)\adig.ilk" | ||||
| 	-@erase "$(OUTDIR)\adig.pdb" | ||||
|  | ||||
| "$(OUTDIR)" : | ||||
|     if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" | ||||
|  | ||||
| CPP_PROJ=/nologo /MLd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /Fp"$(INTDIR)\adig.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ  /c  | ||||
| BSC32=bscmake.exe | ||||
| BSC32_FLAGS=/nologo /o"$(OUTDIR)\adig.bsc"  | ||||
| BSC32_SBRS= \ | ||||
| 	 | ||||
| LINK32=link.exe | ||||
| LINK32_FLAGS=wsock32.lib areslib.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:yes /pdb:"$(OUTDIR)\adig.pdb" /debug /machine:I386 /out:"$(OUTDIR)\adig.exe" /pdbtype:sept /libpath:"..\areslib\Debug"  | ||||
| LINK32_OBJS= \ | ||||
| 	"$(INTDIR)\adig.obj" \ | ||||
| 	"$(INTDIR)\getopt.obj" \ | ||||
| 	"..\areslib\Debug\areslib.lib" | ||||
|  | ||||
| "$(OUTDIR)\adig.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) | ||||
|     $(LINK32) @<< | ||||
|   $(LINK32_FLAGS) $(LINK32_OBJS) | ||||
| << | ||||
|  | ||||
| !ENDIF  | ||||
|  | ||||
| .c{$(INTDIR)}.obj:: | ||||
|    $(CPP) @<< | ||||
|    $(CPP_PROJ) $<  | ||||
| << | ||||
|  | ||||
| .cpp{$(INTDIR)}.obj:: | ||||
|    $(CPP) @<< | ||||
|    $(CPP_PROJ) $<  | ||||
| << | ||||
|  | ||||
| .cxx{$(INTDIR)}.obj:: | ||||
|    $(CPP) @<< | ||||
|    $(CPP_PROJ) $<  | ||||
| << | ||||
|  | ||||
| .c{$(INTDIR)}.sbr:: | ||||
|    $(CPP) @<< | ||||
|    $(CPP_PROJ) $<  | ||||
| << | ||||
|  | ||||
| .cpp{$(INTDIR)}.sbr:: | ||||
|    $(CPP) @<< | ||||
|    $(CPP_PROJ) $<  | ||||
| << | ||||
|  | ||||
| .cxx{$(INTDIR)}.sbr:: | ||||
|    $(CPP) @<< | ||||
|    $(CPP_PROJ) $<  | ||||
| << | ||||
|  | ||||
|  | ||||
| !IF "$(NO_EXTERNAL_DEPS)" != "1" | ||||
| !IF EXISTS("adig.dep") | ||||
| !INCLUDE "adig.dep" | ||||
| !ELSE  | ||||
| !MESSAGE Warning: cannot find "adig.dep" | ||||
| !ENDIF  | ||||
| !ENDIF  | ||||
|  | ||||
|  | ||||
| !IF "$(CFG)" == "adig - Win32 Release" || "$(CFG)" == "adig - Win32 Debug" | ||||
| SOURCE=..\..\adig.c | ||||
|  | ||||
| "$(INTDIR)\adig.obj" : $(SOURCE) "$(INTDIR)" | ||||
| 	$(CPP) $(CPP_PROJ) $(SOURCE) | ||||
|  | ||||
|  | ||||
| SOURCE=..\..\getopt.c | ||||
|  | ||||
| "$(INTDIR)\getopt.obj" : $(SOURCE) "$(INTDIR)" | ||||
| 	$(CPP) $(CPP_PROJ) $(SOURCE) | ||||
|  | ||||
|  | ||||
| !IF  "$(CFG)" == "adig - Win32 Release" | ||||
|  | ||||
| "areslib - Win32 Release" :  | ||||
|    cd "..\areslib" | ||||
|    $(MAKE) /$(MAKEFLAGS) /F ".\areslib.mak" CFG="areslib - Win32 Release"  | ||||
|    cd "..\adig" | ||||
|  | ||||
| "areslib - Win32 ReleaseCLEAN" :  | ||||
|    cd "..\areslib" | ||||
|    $(MAKE) /$(MAKEFLAGS) /F ".\areslib.mak" CFG="areslib - Win32 Release" RECURSE=1 CLEAN  | ||||
|    cd "..\adig" | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "adig - Win32 Debug" | ||||
|  | ||||
| "areslib - Win32 Debug" :  | ||||
|    cd "..\areslib" | ||||
|    $(MAKE) /$(MAKEFLAGS) /F ".\areslib.mak" CFG="areslib - Win32 Debug"  | ||||
|    cd "..\adig" | ||||
|  | ||||
| "areslib - Win32 DebugCLEAN" :  | ||||
|    cd "..\areslib" | ||||
|    $(MAKE) /$(MAKEFLAGS) /F ".\areslib.mak" CFG="areslib - Win32 Debug" RECURSE=1 CLEAN  | ||||
|    cd "..\adig" | ||||
|  | ||||
| !ENDIF  | ||||
|  | ||||
|  | ||||
| !ENDIF  | ||||
|  | ||||
| @@ -1,77 +0,0 @@ | ||||
| <html> | ||||
| <body> | ||||
| <pre> | ||||
| <h1>Build Log</h1> | ||||
| <h3> | ||||
| --------------------Configuration: areslib - Win32 Release-------------------- | ||||
| </h3> | ||||
| <h3>Command Lines</h3> | ||||
| Creating temporary file "C:\DOCUME~1\liren\LOCALS~1\Temp\RSP615A.tmp" with contents | ||||
| [ | ||||
| /nologo /MD /W3 /GX /O2 /I "..\.." /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /Fp"Release/areslib.pch" /YX /Fo"Release/" /Fd"Release/" /FD /c  | ||||
| "Z:\ARES-1.1.1\ares_gethostbyname.c" | ||||
| "Z:\ARES-1.1.1\ares_init.c" | ||||
| ] | ||||
| Creating command line "cl.exe @C:\DOCUME~1\liren\LOCALS~1\Temp\RSP615A.tmp"  | ||||
| Creating temporary file "C:\DOCUME~1\liren\LOCALS~1\Temp\RSP615B.tmp" with contents | ||||
| [ | ||||
| /nologo /out:"Release\areslib.lib"  | ||||
| ".\Release\ares__close_sockets.obj" | ||||
| ".\Release\ares__get_hostent.obj" | ||||
| ".\Release\ares__read_line.obj" | ||||
| ".\Release\ares_destroy.obj" | ||||
| ".\Release\ares_expand_name.obj" | ||||
| ".\Release\ares_fds.obj" | ||||
| ".\Release\ares_free_errmem.obj" | ||||
| ".\Release\ares_free_hostent.obj" | ||||
| ".\Release\ares_free_string.obj" | ||||
| ".\Release\ares_gethostbyaddr.obj" | ||||
| ".\Release\ares_gethostbyname.obj" | ||||
| ".\Release\ares_init.obj" | ||||
| ".\Release\ares_mkquery.obj" | ||||
| ".\Release\ares_parse_a_reply.obj" | ||||
| ".\Release\ares_parse_ptr_reply.obj" | ||||
| ".\Release\ares_process.obj" | ||||
| ".\Release\ares_query.obj" | ||||
| ".\Release\ares_search.obj" | ||||
| ".\Release\ares_send.obj" | ||||
| ".\Release\ares_strerror.obj" | ||||
| ".\Release\ares_timeout.obj" | ||||
| ".\Release\windows_port.obj" | ||||
| ] | ||||
| Creating command line "link.exe -lib @C:\DOCUME~1\liren\LOCALS~1\Temp\RSP615B.tmp" | ||||
| <h3>Output Window</h3> | ||||
| Compiling... | ||||
| ares_gethostbyname.c | ||||
| Z:\ARES-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition | ||||
|         C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR' | ||||
| ares_init.c | ||||
| Z:\ARES-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition | ||||
|         C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR' | ||||
| Z:\ARES-1.1.1\ares_init.c(141) : warning C4013: '_getpid' undefined; assuming extern returning int | ||||
| Z:\ARES-1.1.1\ares_init.c(236) : warning C4101: 'p' : unreferenced local variable | ||||
| Z:\ARES-1.1.1\ares_init.c(237) : warning C4101: 'linesize' : unreferenced local variable | ||||
| Z:\ARES-1.1.1\ares_init.c(235) : warning C4101: 'fp' : unreferenced local variable | ||||
| Creating library... | ||||
| <h3> | ||||
| --------------------Configuration: adig - Win32 Release-------------------- | ||||
| </h3> | ||||
| <h3>Command Lines</h3> | ||||
| Creating temporary file "C:\DOCUME~1\liren\LOCALS~1\Temp\RSP615C.tmp" with contents | ||||
| [ | ||||
| wsock32.lib areslib.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:no /pdb:"Release/adig.pdb" /machine:I386 /out:"Release/adig.exe" /libpath:"..\areslib\Release"  | ||||
| ".\Release\adig.obj" | ||||
| ".\Release\getopt.obj" | ||||
| "\ARES-1.1.1\vc\areslib\Release\areslib.lib" | ||||
| ] | ||||
| Creating command line "link.exe @C:\DOCUME~1\liren\LOCALS~1\Temp\RSP615C.tmp" | ||||
| <h3>Output Window</h3> | ||||
| Linking... | ||||
|  | ||||
|  | ||||
|  | ||||
| <h3>Results</h3> | ||||
| adig.exe - 0 error(s), 6 warning(s) | ||||
| </pre> | ||||
| </body> | ||||
| </html> | ||||
| @@ -1,223 +0,0 @@ | ||||
| # Microsoft Developer Studio Generated NMAKE File, Based on ahost.dsp | ||||
| !IF "$(CFG)" == "" | ||||
| CFG=ahost - Win32 Debug | ||||
| !MESSAGE No configuration specified. Defaulting to ahost - Win32 Debug. | ||||
| !ENDIF  | ||||
|  | ||||
| !IF "$(CFG)" != "ahost - Win32 Release" && "$(CFG)" != "ahost - Win32 Debug" | ||||
| !MESSAGE Invalid configuration "$(CFG)" specified. | ||||
| !MESSAGE You can specify a configuration when running NMAKE | ||||
| !MESSAGE by defining the macro CFG on the command line. For example: | ||||
| !MESSAGE  | ||||
| !MESSAGE NMAKE /f "ahost.mak" CFG="ahost - Win32 Debug" | ||||
| !MESSAGE  | ||||
| !MESSAGE Possible choices for configuration are: | ||||
| !MESSAGE  | ||||
| !MESSAGE "ahost - Win32 Release" (based on "Win32 (x86) Console Application") | ||||
| !MESSAGE "ahost - Win32 Debug" (based on "Win32 (x86) Console Application") | ||||
| !MESSAGE  | ||||
| !ERROR An invalid configuration is specified. | ||||
| !ENDIF  | ||||
|  | ||||
| !IF "$(OS)" == "Windows_NT" | ||||
| NULL= | ||||
| !ELSE  | ||||
| NULL=nul | ||||
| !ENDIF  | ||||
|  | ||||
| CPP=cl.exe | ||||
| RSC=rc.exe | ||||
|  | ||||
| !IF  "$(CFG)" == "ahost - Win32 Release" | ||||
|  | ||||
| OUTDIR=.\Release | ||||
| INTDIR=.\Release | ||||
| # Begin Custom Macros | ||||
| OutDir=.\Release | ||||
| # End Custom Macros | ||||
|  | ||||
| !IF "$(RECURSE)" == "0"  | ||||
|  | ||||
| ALL : "$(OUTDIR)\ahost.exe" | ||||
|  | ||||
| !ELSE  | ||||
|  | ||||
| ALL : "areslib - Win32 Release" "$(OUTDIR)\ahost.exe" | ||||
|  | ||||
| !ENDIF  | ||||
|  | ||||
| !IF "$(RECURSE)" == "1"  | ||||
| CLEAN :"areslib - Win32 ReleaseCLEAN"  | ||||
| !ELSE  | ||||
| CLEAN : | ||||
| !ENDIF  | ||||
| 	-@erase "$(INTDIR)\ahost.obj" | ||||
| 	-@erase "$(INTDIR)\vc60.idb" | ||||
| 	-@erase "$(OUTDIR)\ahost.exe" | ||||
|  | ||||
| "$(OUTDIR)" : | ||||
|     if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" | ||||
|  | ||||
| CPP_PROJ=/nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /Fp"$(INTDIR)\ahost.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c  | ||||
| BSC32=bscmake.exe | ||||
| BSC32_FLAGS=/nologo /o"$(OUTDIR)\ahost.bsc"  | ||||
| BSC32_SBRS= \ | ||||
| 	 | ||||
| LINK32=link.exe | ||||
| LINK32_FLAGS=wsock32.lib areslib.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:no /pdb:"$(OUTDIR)\ahost.pdb" /machine:I386 /out:"$(OUTDIR)\ahost.exe" /libpath:"..\areslib\Release"  | ||||
| LINK32_OBJS= \ | ||||
| 	"$(INTDIR)\ahost.obj" \ | ||||
| 	"..\areslib\Release\areslib.lib" | ||||
|  | ||||
| "$(OUTDIR)\ahost.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) | ||||
|     $(LINK32) @<< | ||||
|   $(LINK32_FLAGS) $(LINK32_OBJS) | ||||
| << | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "ahost - Win32 Debug" | ||||
|  | ||||
| OUTDIR=.\Debug | ||||
| INTDIR=.\Debug | ||||
| # Begin Custom Macros | ||||
| OutDir=.\Debug | ||||
| # End Custom Macros | ||||
|  | ||||
| !IF "$(RECURSE)" == "0"  | ||||
|  | ||||
| ALL : "$(OUTDIR)\ahost.exe" "$(OUTDIR)\ahost.bsc" | ||||
|  | ||||
| !ELSE  | ||||
|  | ||||
| ALL : "areslib - Win32 Debug" "$(OUTDIR)\ahost.exe" "$(OUTDIR)\ahost.bsc" | ||||
|  | ||||
| !ENDIF  | ||||
|  | ||||
| !IF "$(RECURSE)" == "1"  | ||||
| CLEAN :"areslib - Win32 DebugCLEAN"  | ||||
| !ELSE  | ||||
| CLEAN : | ||||
| !ENDIF  | ||||
| 	-@erase "$(INTDIR)\ahost.obj" | ||||
| 	-@erase "$(INTDIR)\ahost.sbr" | ||||
| 	-@erase "$(INTDIR)\vc60.idb" | ||||
| 	-@erase "$(INTDIR)\vc60.pdb" | ||||
| 	-@erase "$(OUTDIR)\ahost.bsc" | ||||
| 	-@erase "$(OUTDIR)\ahost.exe" | ||||
| 	-@erase "$(OUTDIR)\ahost.ilk" | ||||
| 	-@erase "$(OUTDIR)\ahost.pdb" | ||||
|  | ||||
| "$(OUTDIR)" : | ||||
|     if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" | ||||
|  | ||||
| CPP_PROJ=/nologo /MLd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\ahost.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ  /c  | ||||
| BSC32=bscmake.exe | ||||
| BSC32_FLAGS=/nologo /o"$(OUTDIR)\ahost.bsc"  | ||||
| BSC32_SBRS= \ | ||||
| 	"$(INTDIR)\ahost.sbr" | ||||
|  | ||||
| "$(OUTDIR)\ahost.bsc" : "$(OUTDIR)" $(BSC32_SBRS) | ||||
|     $(BSC32) @<< | ||||
|   $(BSC32_FLAGS) $(BSC32_SBRS) | ||||
| << | ||||
|  | ||||
| LINK32=link.exe | ||||
| LINK32_FLAGS=wsock32.lib areslib.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:yes /pdb:"$(OUTDIR)\ahost.pdb" /debug /machine:I386 /out:"$(OUTDIR)\ahost.exe" /pdbtype:sept /libpath:"..\areslib\Debug"  | ||||
| LINK32_OBJS= \ | ||||
| 	"$(INTDIR)\ahost.obj" \ | ||||
| 	"..\areslib\Debug\areslib.lib" | ||||
|  | ||||
| "$(OUTDIR)\ahost.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) | ||||
|     $(LINK32) @<< | ||||
|   $(LINK32_FLAGS) $(LINK32_OBJS) | ||||
| << | ||||
|  | ||||
| !ENDIF  | ||||
|  | ||||
| .c{$(INTDIR)}.obj:: | ||||
|    $(CPP) @<< | ||||
|    $(CPP_PROJ) $<  | ||||
| << | ||||
|  | ||||
| .cpp{$(INTDIR)}.obj:: | ||||
|    $(CPP) @<< | ||||
|    $(CPP_PROJ) $<  | ||||
| << | ||||
|  | ||||
| .cxx{$(INTDIR)}.obj:: | ||||
|    $(CPP) @<< | ||||
|    $(CPP_PROJ) $<  | ||||
| << | ||||
|  | ||||
| .c{$(INTDIR)}.sbr:: | ||||
|    $(CPP) @<< | ||||
|    $(CPP_PROJ) $<  | ||||
| << | ||||
|  | ||||
| .cpp{$(INTDIR)}.sbr:: | ||||
|    $(CPP) @<< | ||||
|    $(CPP_PROJ) $<  | ||||
| << | ||||
|  | ||||
| .cxx{$(INTDIR)}.sbr:: | ||||
|    $(CPP) @<< | ||||
|    $(CPP_PROJ) $<  | ||||
| << | ||||
|  | ||||
|  | ||||
| !IF "$(NO_EXTERNAL_DEPS)" != "1" | ||||
| !IF EXISTS("ahost.dep") | ||||
| !INCLUDE "ahost.dep" | ||||
| !ELSE  | ||||
| !MESSAGE Warning: cannot find "ahost.dep" | ||||
| !ENDIF  | ||||
| !ENDIF  | ||||
|  | ||||
|  | ||||
| !IF "$(CFG)" == "ahost - Win32 Release" || "$(CFG)" == "ahost - Win32 Debug" | ||||
| SOURCE=..\..\ahost.c | ||||
|  | ||||
| !IF  "$(CFG)" == "ahost - Win32 Release" | ||||
|  | ||||
|  | ||||
| "$(INTDIR)\ahost.obj" : $(SOURCE) "$(INTDIR)" | ||||
| 	$(CPP) $(CPP_PROJ) $(SOURCE) | ||||
|  | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "ahost - Win32 Debug" | ||||
|  | ||||
|  | ||||
| "$(INTDIR)\ahost.obj"	"$(INTDIR)\ahost.sbr" : $(SOURCE) "$(INTDIR)" | ||||
| 	$(CPP) $(CPP_PROJ) $(SOURCE) | ||||
|  | ||||
|  | ||||
| !ENDIF  | ||||
|  | ||||
| !IF  "$(CFG)" == "ahost - Win32 Release" | ||||
|  | ||||
| "areslib - Win32 Release" :  | ||||
|    cd "..\areslib" | ||||
|    $(MAKE) /$(MAKEFLAGS) /F ".\areslib.mak" CFG="areslib - Win32 Release"  | ||||
|    cd "..\ahost" | ||||
|  | ||||
| "areslib - Win32 ReleaseCLEAN" :  | ||||
|    cd "..\areslib" | ||||
|    $(MAKE) /$(MAKEFLAGS) /F ".\areslib.mak" CFG="areslib - Win32 Release" RECURSE=1 CLEAN  | ||||
|    cd "..\ahost" | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "ahost - Win32 Debug" | ||||
|  | ||||
| "areslib - Win32 Debug" :  | ||||
|    cd "..\areslib" | ||||
|    $(MAKE) /$(MAKEFLAGS) /F ".\areslib.mak" CFG="areslib - Win32 Debug"  | ||||
|    cd "..\ahost" | ||||
|  | ||||
| "areslib - Win32 DebugCLEAN" :  | ||||
|    cd "..\areslib" | ||||
|    $(MAKE) /$(MAKEFLAGS) /F ".\areslib.mak" CFG="areslib - Win32 Debug" RECURSE=1 CLEAN  | ||||
|    cd "..\ahost" | ||||
|  | ||||
| !ENDIF  | ||||
|  | ||||
|  | ||||
| !ENDIF  | ||||
|  | ||||
| @@ -1,16 +0,0 @@ | ||||
| <html> | ||||
| <body> | ||||
| <pre> | ||||
| <h1>Build Log</h1> | ||||
| <h3> | ||||
| --------------------Configuration: ahost - Win32 Release-------------------- | ||||
| </h3> | ||||
| <h3>Command Lines</h3> | ||||
|  | ||||
|  | ||||
|  | ||||
| <h3>Results</h3> | ||||
| ahost.exe - 0 error(s), 0 warning(s) | ||||
| </pre> | ||||
| </body> | ||||
| </html> | ||||
| @@ -63,8 +63,8 @@ LIB32=link.exe -lib | ||||
| # PROP Output_Dir "Debug" | ||||
| # PROP Intermediate_Dir "Debug" | ||||
| # PROP Target_Dir "" | ||||
| # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ  /c | ||||
| # ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\.." /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ  /c | ||||
| # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c | ||||
| # ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\.." /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c | ||||
| # ADD BASE RSC /l 0x409 /d "_DEBUG" | ||||
| # ADD RSC /l 0x409 /d "_DEBUG" | ||||
| BSC32=bscmake.exe | ||||
| @@ -97,6 +97,10 @@ SOURCE=..\..\ares__read_line.c | ||||
| # End Source File | ||||
| # Begin Source File | ||||
|  | ||||
| SOURCE=..\..\ares_cancel.c | ||||
| # End Source File | ||||
| # Begin Source File | ||||
|  | ||||
| SOURCE=..\..\ares_destroy.c | ||||
| # End Source File | ||||
| # Begin Source File | ||||
| @@ -137,6 +141,10 @@ SOURCE=..\..\ares_parse_a_reply.c | ||||
| # End Source File | ||||
| # Begin Source File | ||||
|  | ||||
| SOURCE=..\..\ares_parse_aaaa_reply.c | ||||
| # End Source File | ||||
| # Begin Source File | ||||
|  | ||||
| SOURCE=..\..\ares_parse_ptr_reply.c | ||||
| # End Source File | ||||
| # Begin Source File | ||||
| @@ -153,14 +161,6 @@ SOURCE=..\..\ares_search.c | ||||
| # End Source File | ||||
| # Begin Source File | ||||
|  | ||||
| SOURCE=..\..\ares_cancel.c | ||||
| # End Source File | ||||
| # Begin Source File | ||||
|  | ||||
| SOURCE=..\..\ares_version.c | ||||
| # End Source File | ||||
| # Begin Source File | ||||
|  | ||||
| SOURCE=..\..\ares_send.c | ||||
| # End Source File | ||||
| # Begin Source File | ||||
| @@ -173,6 +173,22 @@ SOURCE=..\..\ares_timeout.c | ||||
| # End Source File | ||||
| # Begin Source File | ||||
|  | ||||
| SOURCE=..\..\ares_version.c | ||||
| # End Source File | ||||
| # Begin Source File | ||||
|  | ||||
| SOURCE=..\..\bitncmp.c | ||||
| # End Source File | ||||
| # Begin Source File | ||||
|  | ||||
| SOURCE=..\..\inet_net_pton.c | ||||
| # End Source File | ||||
| # Begin Source File | ||||
|  | ||||
| SOURCE=..\..\inet_ntop.c | ||||
| # End Source File | ||||
| # Begin Source File | ||||
|  | ||||
| SOURCE=..\..\windows_port.c | ||||
| # End Source File | ||||
| # End Group | ||||
| @@ -189,7 +205,7 @@ SOURCE=..\..\ares_dns.h | ||||
| # End Source File | ||||
| # Begin Source File | ||||
|  | ||||
| SOURCE=..\..\ares_version.h | ||||
| SOURCE=..\..\ares_ipv6.h | ||||
| # End Source File | ||||
| # Begin Source File | ||||
|  | ||||
| @@ -197,6 +213,22 @@ SOURCE=..\..\ares_private.h | ||||
| # End Source File | ||||
| # Begin Source File | ||||
|  | ||||
| SOURCE=..\..\ares_version.h | ||||
| # End Source File | ||||
| # Begin Source File | ||||
|  | ||||
| SOURCE=..\..\bitncmp.h | ||||
| # End Source File | ||||
| # Begin Source File | ||||
|  | ||||
| SOURCE=..\..\inet_net_pton.h | ||||
| # End Source File | ||||
| # Begin Source File | ||||
|  | ||||
| SOURCE=..\..\inet_ntop.h | ||||
| # End Source File | ||||
| # Begin Source File | ||||
|  | ||||
| SOURCE=..\..\nameser.h | ||||
| # End Source File | ||||
| # End Group | ||||
|   | ||||
							
								
								
									
										29
									
								
								ares/vc/areslib/areslib.dsw
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								ares/vc/areslib/areslib.dsw
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,29 @@ | ||||
| Microsoft Developer Studio Workspace File, Format Version 6.00 | ||||
| # WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! | ||||
|  | ||||
| ############################################################################### | ||||
|  | ||||
| Project: "areslib"=.\areslib.dsp - Package Owner=<4> | ||||
|  | ||||
| Package=<5> | ||||
| {{{ | ||||
| }}} | ||||
|  | ||||
| Package=<4> | ||||
| {{{ | ||||
| }}} | ||||
|  | ||||
| ############################################################################### | ||||
|  | ||||
| Global: | ||||
|  | ||||
| Package=<5> | ||||
| {{{ | ||||
| }}} | ||||
|  | ||||
| Package=<3> | ||||
| {{{ | ||||
| }}} | ||||
|  | ||||
| ############################################################################### | ||||
|  | ||||
| @@ -1,367 +0,0 @@ | ||||
| # Microsoft Developer Studio Generated NMAKE File, Based on areslib.dsp | ||||
| !IF "$(CFG)" == "" | ||||
| CFG=areslib - Win32 Debug | ||||
| !MESSAGE No configuration specified. Defaulting to areslib - Win32 Debug. | ||||
| !ENDIF | ||||
|  | ||||
| !IF "$(CFG)" != "areslib - Win32 Release" && "$(CFG)" != "areslib - Win32 Debug" | ||||
| !MESSAGE Invalid configuration "$(CFG)" specified. | ||||
| !MESSAGE You can specify a configuration when running NMAKE | ||||
| !MESSAGE by defining the macro CFG on the command line. For example: | ||||
| !MESSAGE | ||||
| !MESSAGE NMAKE /f "areslib.mak" CFG="areslib - Win32 Debug" | ||||
| !MESSAGE | ||||
| !MESSAGE Possible choices for configuration are: | ||||
| !MESSAGE | ||||
| !MESSAGE "areslib - Win32 Release" (based on "Win32 (x86) Static Library") | ||||
| !MESSAGE "areslib - Win32 Debug" (based on "Win32 (x86) Static Library") | ||||
| !MESSAGE | ||||
| !ERROR An invalid configuration is specified. | ||||
| !ENDIF | ||||
|  | ||||
| !IF "$(OS)" == "Windows_NT" | ||||
| NULL= | ||||
| !ELSE | ||||
| NULL=nul | ||||
| !ENDIF | ||||
|  | ||||
| CPP=cl.exe | ||||
| RSC=rc.exe | ||||
|  | ||||
| !IF  "$(CFG)" == "areslib - Win32 Release" | ||||
|  | ||||
| OUTDIR=.\Release | ||||
| INTDIR=.\Release | ||||
| # Begin Custom Macros | ||||
| OutDir=.\Release | ||||
| # End Custom Macros | ||||
|  | ||||
| ALL : "$(OUTDIR)\areslib.lib" | ||||
|  | ||||
|  | ||||
| CLEAN : | ||||
| 	-@erase "$(INTDIR)\ares__close_sockets.obj" | ||||
| 	-@erase "$(INTDIR)\ares__get_hostent.obj" | ||||
| 	-@erase "$(INTDIR)\ares__read_line.obj" | ||||
| 	-@erase "$(INTDIR)\ares_destroy.obj" | ||||
| 	-@erase "$(INTDIR)\ares_expand_name.obj" | ||||
| 	-@erase "$(INTDIR)\ares_fds.obj" | ||||
| 	-@erase "$(INTDIR)\ares_free_hostent.obj" | ||||
| 	-@erase "$(INTDIR)\ares_free_string.obj" | ||||
| 	-@erase "$(INTDIR)\ares_gethostbyaddr.obj" | ||||
| 	-@erase "$(INTDIR)\ares_gethostbyname.obj" | ||||
| 	-@erase "$(INTDIR)\ares_init.obj" | ||||
| 	-@erase "$(INTDIR)\ares_mkquery.obj" | ||||
| 	-@erase "$(INTDIR)\ares_parse_a_reply.obj" | ||||
| 	-@erase "$(INTDIR)\ares_parse_ptr_reply.obj" | ||||
| 	-@erase "$(INTDIR)\ares_process.obj" | ||||
| 	-@erase "$(INTDIR)\ares_query.obj" | ||||
| 	-@erase "$(INTDIR)\ares_search.obj" | ||||
| 	-@erase "$(INTDIR)\ares_send.obj" | ||||
| 	-@erase "$(INTDIR)\ares_strerror.obj" | ||||
| 	-@erase "$(INTDIR)\ares_timeout.obj" | ||||
| 	-@erase "$(INTDIR)\vc60.idb" | ||||
| 	-@erase "$(INTDIR)\windows_port.obj" | ||||
| 	-@erase "$(OUTDIR)\areslib.lib" | ||||
|  | ||||
| "$(OUTDIR)" : | ||||
|     if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" | ||||
|  | ||||
| CPP_PROJ=/nologo /MD /W3 /GX /O2 /I "..\.." /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /Fp"$(INTDIR)\areslib.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c | ||||
| BSC32=bscmake.exe | ||||
| BSC32_FLAGS=/nologo /o"$(OUTDIR)\areslib.bsc" | ||||
| BSC32_SBRS= \ | ||||
|  | ||||
| LIB32=link.exe -lib | ||||
| LIB32_FLAGS=/nologo /out:"$(OUTDIR)\areslib.lib" | ||||
| LIB32_OBJS= \ | ||||
| 	"$(INTDIR)\ares__close_sockets.obj" \ | ||||
| 	"$(INTDIR)\ares__get_hostent.obj" \ | ||||
| 	"$(INTDIR)\ares__read_line.obj" \ | ||||
| 	"$(INTDIR)\ares_destroy.obj" \ | ||||
| 	"$(INTDIR)\ares_expand_name.obj" \ | ||||
| 	"$(INTDIR)\ares_fds.obj" \ | ||||
| 	"$(INTDIR)\ares_free_hostent.obj" \ | ||||
| 	"$(INTDIR)\ares_free_string.obj" \ | ||||
| 	"$(INTDIR)\ares_gethostbyaddr.obj" \ | ||||
| 	"$(INTDIR)\ares_gethostbyname.obj" \ | ||||
| 	"$(INTDIR)\ares_init.obj" \ | ||||
| 	"$(INTDIR)\ares_mkquery.obj" \ | ||||
| 	"$(INTDIR)\ares_parse_a_reply.obj" \ | ||||
| 	"$(INTDIR)\ares_parse_ptr_reply.obj" \ | ||||
| 	"$(INTDIR)\ares_process.obj" \ | ||||
| 	"$(INTDIR)\ares_query.obj" \ | ||||
| 	"$(INTDIR)\ares_search.obj" \ | ||||
| 	"$(INTDIR)\ares_cancel.obj" \ | ||||
| 	"$(INTDIR)\ares_version.obj" \ | ||||
| 	"$(INTDIR)\ares_send.obj" \ | ||||
| 	"$(INTDIR)\ares_strerror.obj" \ | ||||
| 	"$(INTDIR)\ares_timeout.obj" \ | ||||
| 	"$(INTDIR)\windows_port.obj" | ||||
|  | ||||
| "$(OUTDIR)\areslib.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) | ||||
|     $(LIB32) @<< | ||||
|   $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) | ||||
| << | ||||
|  | ||||
| !ELSEIF  "$(CFG)" == "areslib - Win32 Debug" | ||||
|  | ||||
| OUTDIR=.\Debug | ||||
| INTDIR=.\Debug | ||||
| # Begin Custom Macros | ||||
| OutDir=.\Debug | ||||
| # End Custom Macros | ||||
|  | ||||
| ALL : "$(OUTDIR)\areslib.lib" | ||||
|  | ||||
|  | ||||
| CLEAN : | ||||
| 	-@erase "$(INTDIR)\ares__close_sockets.obj" | ||||
| 	-@erase "$(INTDIR)\ares__get_hostent.obj" | ||||
| 	-@erase "$(INTDIR)\ares__read_line.obj" | ||||
| 	-@erase "$(INTDIR)\ares_destroy.obj" | ||||
| 	-@erase "$(INTDIR)\ares_expand_name.obj" | ||||
| 	-@erase "$(INTDIR)\ares_fds.obj" | ||||
| 	-@erase "$(INTDIR)\ares_free_hostent.obj" | ||||
| 	-@erase "$(INTDIR)\ares_free_string.obj" | ||||
| 	-@erase "$(INTDIR)\ares_gethostbyaddr.obj" | ||||
| 	-@erase "$(INTDIR)\ares_gethostbyname.obj" | ||||
| 	-@erase "$(INTDIR)\ares_init.obj" | ||||
| 	-@erase "$(INTDIR)\ares_mkquery.obj" | ||||
| 	-@erase "$(INTDIR)\ares_parse_a_reply.obj" | ||||
| 	-@erase "$(INTDIR)\ares_parse_ptr_reply.obj" | ||||
| 	-@erase "$(INTDIR)\ares_process.obj" | ||||
| 	-@erase "$(INTDIR)\ares_query.obj" | ||||
| 	-@erase "$(INTDIR)\ares_search.obj" | ||||
| 	-@erase "$(INTDIR)\ares_cancel.obj" | ||||
| 	-@erase "$(INTDIR)\ares_version.obj" | ||||
| 	-@erase "$(INTDIR)\ares_send.obj" | ||||
| 	-@erase "$(INTDIR)\ares_strerror.obj" | ||||
| 	-@erase "$(INTDIR)\ares_timeout.obj" | ||||
| 	-@erase "$(INTDIR)\vc60.idb" | ||||
| 	-@erase "$(INTDIR)\vc60.pdb" | ||||
| 	-@erase "$(INTDIR)\windows_port.obj" | ||||
| 	-@erase "$(OUTDIR)\areslib.lib" | ||||
|  | ||||
| "$(OUTDIR)" : | ||||
|     if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" | ||||
|  | ||||
| CPP_PROJ=/nologo /MLd /W3 /Gm /GX /ZI /Od /I "..\.." /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /Fp"$(INTDIR)\areslib.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ  /c | ||||
| BSC32=bscmake.exe | ||||
| BSC32_FLAGS=/nologo /o"$(OUTDIR)\areslib.bsc" | ||||
| BSC32_SBRS= \ | ||||
|  | ||||
| LIB32=link.exe -lib | ||||
| LIB32_FLAGS=/nologo /out:"$(OUTDIR)\areslib.lib" | ||||
| LIB32_OBJS= \ | ||||
| 	"$(INTDIR)\ares__close_sockets.obj" \ | ||||
| 	"$(INTDIR)\ares__get_hostent.obj" \ | ||||
| 	"$(INTDIR)\ares__read_line.obj" \ | ||||
| 	"$(INTDIR)\ares_destroy.obj" \ | ||||
| 	"$(INTDIR)\ares_expand_name.obj" \ | ||||
| 	"$(INTDIR)\ares_fds.obj" \ | ||||
| 	"$(INTDIR)\ares_free_hostent.obj" \ | ||||
| 	"$(INTDIR)\ares_free_string.obj" \ | ||||
| 	"$(INTDIR)\ares_gethostbyaddr.obj" \ | ||||
| 	"$(INTDIR)\ares_gethostbyname.obj" \ | ||||
| 	"$(INTDIR)\ares_init.obj" \ | ||||
| 	"$(INTDIR)\ares_mkquery.obj" \ | ||||
| 	"$(INTDIR)\ares_parse_a_reply.obj" \ | ||||
| 	"$(INTDIR)\ares_parse_ptr_reply.obj" \ | ||||
| 	"$(INTDIR)\ares_process.obj" \ | ||||
| 	"$(INTDIR)\ares_query.obj" \ | ||||
| 	"$(INTDIR)\ares_search.obj" \ | ||||
| 	"$(INTDIR)\ares_send.obj" \ | ||||
| 	"$(INTDIR)\ares_strerror.obj" \ | ||||
| 	"$(INTDIR)\ares_timeout.obj" \ | ||||
| 	"$(INTDIR)\windows_port.obj" | ||||
|  | ||||
| "$(OUTDIR)\areslib.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) | ||||
|     $(LIB32) @<< | ||||
|   $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) | ||||
| << | ||||
|  | ||||
| !ENDIF | ||||
|  | ||||
| .c{$(INTDIR)}.obj:: | ||||
|    $(CPP) @<< | ||||
|    $(CPP_PROJ) $< | ||||
| << | ||||
|  | ||||
| .cpp{$(INTDIR)}.obj:: | ||||
|    $(CPP) @<< | ||||
|    $(CPP_PROJ) $< | ||||
| << | ||||
|  | ||||
| .cxx{$(INTDIR)}.obj:: | ||||
|    $(CPP) @<< | ||||
|    $(CPP_PROJ) $< | ||||
| << | ||||
|  | ||||
| .c{$(INTDIR)}.sbr:: | ||||
|    $(CPP) @<< | ||||
|    $(CPP_PROJ) $< | ||||
| << | ||||
|  | ||||
| .cpp{$(INTDIR)}.sbr:: | ||||
|    $(CPP) @<< | ||||
|    $(CPP_PROJ) $< | ||||
| << | ||||
|  | ||||
| .cxx{$(INTDIR)}.sbr:: | ||||
|    $(CPP) @<< | ||||
|    $(CPP_PROJ) $< | ||||
| << | ||||
|  | ||||
|  | ||||
| !IF "$(NO_EXTERNAL_DEPS)" != "1" | ||||
| !IF EXISTS("areslib.dep") | ||||
| !INCLUDE "areslib.dep" | ||||
| !ELSE | ||||
| !MESSAGE Warning: cannot find "areslib.dep" | ||||
| !ENDIF | ||||
| !ENDIF | ||||
|  | ||||
|  | ||||
| !IF "$(CFG)" == "areslib - Win32 Release" || "$(CFG)" == "areslib - Win32 Debug" | ||||
| SOURCE=..\..\ares__close_sockets.c | ||||
|  | ||||
| "$(INTDIR)\ares__close_sockets.obj" : $(SOURCE) "$(INTDIR)" | ||||
| 	$(CPP) $(CPP_PROJ) $(SOURCE) | ||||
|  | ||||
|  | ||||
| SOURCE=..\..\ares__get_hostent.c | ||||
|  | ||||
| "$(INTDIR)\ares__get_hostent.obj" : $(SOURCE) "$(INTDIR)" | ||||
| 	$(CPP) $(CPP_PROJ) $(SOURCE) | ||||
|  | ||||
|  | ||||
| SOURCE=..\..\ares__read_line.c | ||||
|  | ||||
| "$(INTDIR)\ares__read_line.obj" : $(SOURCE) "$(INTDIR)" | ||||
| 	$(CPP) $(CPP_PROJ) $(SOURCE) | ||||
|  | ||||
|  | ||||
| SOURCE=..\..\ares_destroy.c | ||||
|  | ||||
| "$(INTDIR)\ares_destroy.obj" : $(SOURCE) "$(INTDIR)" | ||||
| 	$(CPP) $(CPP_PROJ) $(SOURCE) | ||||
|  | ||||
|  | ||||
| SOURCE=..\..\ares_expand_name.c | ||||
|  | ||||
| "$(INTDIR)\ares_expand_name.obj" : $(SOURCE) "$(INTDIR)" | ||||
| 	$(CPP) $(CPP_PROJ) $(SOURCE) | ||||
|  | ||||
|  | ||||
| SOURCE=..\..\ares_fds.c | ||||
|  | ||||
| "$(INTDIR)\ares_fds.obj" : $(SOURCE) "$(INTDIR)" | ||||
| 	$(CPP) $(CPP_PROJ) $(SOURCE) | ||||
|  | ||||
|  | ||||
| SOURCE=..\..\ares_free_hostent.c | ||||
|  | ||||
| "$(INTDIR)\ares_free_hostent.obj" : $(SOURCE) "$(INTDIR)" | ||||
| 	$(CPP) $(CPP_PROJ) $(SOURCE) | ||||
|  | ||||
|  | ||||
| SOURCE=..\..\ares_free_string.c | ||||
|  | ||||
| "$(INTDIR)\ares_free_string.obj" : $(SOURCE) "$(INTDIR)" | ||||
| 	$(CPP) $(CPP_PROJ) $(SOURCE) | ||||
|  | ||||
|  | ||||
| SOURCE=..\..\ares_gethostbyaddr.c | ||||
|  | ||||
| "$(INTDIR)\ares_gethostbyaddr.obj" : $(SOURCE) "$(INTDIR)" | ||||
| 	$(CPP) $(CPP_PROJ) $(SOURCE) | ||||
|  | ||||
|  | ||||
| SOURCE=..\..\ares_gethostbyname.c | ||||
|  | ||||
| "$(INTDIR)\ares_gethostbyname.obj" : $(SOURCE) "$(INTDIR)" | ||||
| 	$(CPP) $(CPP_PROJ) $(SOURCE) | ||||
|  | ||||
|  | ||||
| SOURCE=..\..\ares_init.c | ||||
|  | ||||
| "$(INTDIR)\ares_init.obj" : $(SOURCE) "$(INTDIR)" | ||||
| 	$(CPP) $(CPP_PROJ) $(SOURCE) | ||||
|  | ||||
|  | ||||
| SOURCE=..\..\ares_mkquery.c | ||||
|  | ||||
| "$(INTDIR)\ares_mkquery.obj" : $(SOURCE) "$(INTDIR)" | ||||
| 	$(CPP) $(CPP_PROJ) $(SOURCE) | ||||
|  | ||||
|  | ||||
| SOURCE=..\..\ares_parse_a_reply.c | ||||
|  | ||||
| "$(INTDIR)\ares_parse_a_reply.obj" : $(SOURCE) "$(INTDIR)" | ||||
| 	$(CPP) $(CPP_PROJ) $(SOURCE) | ||||
|  | ||||
|  | ||||
| SOURCE=..\..\ares_parse_ptr_reply.c | ||||
|  | ||||
| "$(INTDIR)\ares_parse_ptr_reply.obj" : $(SOURCE) "$(INTDIR)" | ||||
| 	$(CPP) $(CPP_PROJ) $(SOURCE) | ||||
|  | ||||
|  | ||||
| SOURCE=..\..\ares_process.c | ||||
|  | ||||
| "$(INTDIR)\ares_process.obj" : $(SOURCE) "$(INTDIR)" | ||||
| 	$(CPP) $(CPP_PROJ) $(SOURCE) | ||||
|  | ||||
|  | ||||
| SOURCE=..\..\ares_query.c | ||||
|  | ||||
| "$(INTDIR)\ares_query.obj" : $(SOURCE) "$(INTDIR)" | ||||
| 	$(CPP) $(CPP_PROJ) $(SOURCE) | ||||
|  | ||||
|  | ||||
| SOURCE=..\..\ares_search.c | ||||
|  | ||||
| "$(INTDIR)\ares_search.obj" : $(SOURCE) "$(INTDIR)" | ||||
| 	$(CPP) $(CPP_PROJ) $(SOURCE) | ||||
|  | ||||
|  | ||||
| SOURCE=..\..\ares_version.c | ||||
|  | ||||
| "$(INTDIR)\ares_version.obj" : $(SOURCE) "$(INTDIR)" | ||||
| 	$(CPP) $(CPP_PROJ) $(SOURCE) | ||||
|  | ||||
|  | ||||
| SOURCE=..\..\ares_cancel.c | ||||
|  | ||||
| "$(INTDIR)\ares_cancel.obj" : $(SOURCE) "$(INTDIR)" | ||||
| 	$(CPP) $(CPP_PROJ) $(SOURCE) | ||||
|  | ||||
|  | ||||
| SOURCE=..\..\ares_send.c | ||||
|  | ||||
| "$(INTDIR)\ares_send.obj" : $(SOURCE) "$(INTDIR)" | ||||
| 	$(CPP) $(CPP_PROJ) $(SOURCE) | ||||
|  | ||||
|  | ||||
| SOURCE=..\..\ares_strerror.c | ||||
|  | ||||
| "$(INTDIR)\ares_strerror.obj" : $(SOURCE) "$(INTDIR)" | ||||
| 	$(CPP) $(CPP_PROJ) $(SOURCE) | ||||
|  | ||||
|  | ||||
| SOURCE=..\..\ares_timeout.c | ||||
|  | ||||
| "$(INTDIR)\ares_timeout.obj" : $(SOURCE) "$(INTDIR)" | ||||
| 	$(CPP) $(CPP_PROJ) $(SOURCE) | ||||
|  | ||||
|  | ||||
| SOURCE=..\..\windows_port.c | ||||
|  | ||||
| "$(INTDIR)\windows_port.obj" : $(SOURCE) "$(INTDIR)" | ||||
| 	$(CPP) $(CPP_PROJ) $(SOURCE) | ||||
|  | ||||
|  | ||||
|  | ||||
| !ENDIF | ||||
|  | ||||
| @@ -1,125 +0,0 @@ | ||||
| <html> | ||||
| <body> | ||||
| <pre> | ||||
| <h1>Build Log</h1> | ||||
| <h3> | ||||
| --------------------Configuration: areslib - Win32 Release-------------------- | ||||
| </h3> | ||||
| <h3>Command Lines</h3> | ||||
| Creating temporary file "C:\DOCUME~1\liren\LOCALS~1\Temp\RSP603D.tmp" with contents | ||||
| [ | ||||
| /nologo /MD /W3 /GX /O2 /I "..\.." /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /Fp"Release/areslib.pch" /YX /Fo"Release/" /Fd"Release/" /FD /c  | ||||
| "Z:\ares-1.1.1\ares__close_sockets.c" | ||||
| "Z:\ares-1.1.1\ares__get_hostent.c" | ||||
| "Z:\ares-1.1.1\ares__read_line.c" | ||||
| "Z:\ares-1.1.1\ares_destroy.c" | ||||
| "Z:\ares-1.1.1\ares_expand_name.c" | ||||
| "Z:\ares-1.1.1\ares_fds.c" | ||||
| "Z:\ares-1.1.1\ares_free_errmem.c" | ||||
| "Z:\ares-1.1.1\ares_free_hostent.c" | ||||
| "Z:\ares-1.1.1\ares_free_string.c" | ||||
| "Z:\ares-1.1.1\ares_gethostbyaddr.c" | ||||
| "Z:\ares-1.1.1\ares_gethostbyname.c" | ||||
| "Z:\ares-1.1.1\ares_init.c" | ||||
| "Z:\ares-1.1.1\ares_mkquery.c" | ||||
| "Z:\ares-1.1.1\ares_parse_a_reply.c" | ||||
| "Z:\ares-1.1.1\ares_parse_ptr_reply.c" | ||||
| "Z:\ares-1.1.1\ares_process.c" | ||||
| "Z:\ares-1.1.1\ares_query.c" | ||||
| "Z:\ares-1.1.1\ares_search.c" | ||||
| "Z:\ares-1.1.1\ares_send.c" | ||||
| "Z:\ares-1.1.1\ares_strerror.c" | ||||
| "Z:\ares-1.1.1\ares_timeout.c" | ||||
| "Z:\ares-1.1.1\windows_port.c" | ||||
| ] | ||||
| Creating command line "cl.exe @C:\DOCUME~1\liren\LOCALS~1\Temp\RSP603D.tmp"  | ||||
| Creating temporary file "C:\DOCUME~1\liren\LOCALS~1\Temp\RSP603E.tmp" with contents | ||||
| [ | ||||
| /nologo /out:"Release\areslib.lib"  | ||||
| ".\Release\ares__close_sockets.obj" | ||||
| ".\Release\ares__get_hostent.obj" | ||||
| ".\Release\ares__read_line.obj" | ||||
| ".\Release\ares_destroy.obj" | ||||
| ".\Release\ares_expand_name.obj" | ||||
| ".\Release\ares_fds.obj" | ||||
| ".\Release\ares_free_errmem.obj" | ||||
| ".\Release\ares_free_hostent.obj" | ||||
| ".\Release\ares_free_string.obj" | ||||
| ".\Release\ares_gethostbyaddr.obj" | ||||
| ".\Release\ares_gethostbyname.obj" | ||||
| ".\Release\ares_init.obj" | ||||
| ".\Release\ares_mkquery.obj" | ||||
| ".\Release\ares_parse_a_reply.obj" | ||||
| ".\Release\ares_parse_ptr_reply.obj" | ||||
| ".\Release\ares_process.obj" | ||||
| ".\Release\ares_query.obj" | ||||
| ".\Release\ares_search.obj" | ||||
| ".\Release\ares_send.obj" | ||||
| ".\Release\ares_strerror.obj" | ||||
| ".\Release\ares_timeout.obj" | ||||
| ".\Release\windows_port.obj" | ||||
| ] | ||||
| Creating command line "link.exe -lib @C:\DOCUME~1\liren\LOCALS~1\Temp\RSP603E.tmp" | ||||
| <h3>Output Window</h3> | ||||
| Compiling... | ||||
| ares__close_sockets.c | ||||
| Z:\ares-1.1.1\ares__close_sockets.c(46) : warning C4013: 'close' undefined; assuming extern returning int | ||||
| ares__get_hostent.c | ||||
| ares__read_line.c | ||||
| ares_destroy.c | ||||
| ares_expand_name.c | ||||
| Z:\ares-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition | ||||
|         C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR' | ||||
| ares_fds.c | ||||
| ares_free_errmem.c | ||||
| ares_free_hostent.c | ||||
| ares_free_string.c | ||||
| ares_gethostbyaddr.c | ||||
| Z:\ares-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition | ||||
|         C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR' | ||||
| ares_gethostbyname.c | ||||
| Z:\ares-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition | ||||
|         C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR' | ||||
| ares_init.c | ||||
| Z:\ares-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition | ||||
|         C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR' | ||||
| Z:\ares-1.1.1\ares_init.c(141) : warning C4013: '_getpid' undefined; assuming extern returning int | ||||
| Z:\ares-1.1.1\ares_init.c(236) : warning C4101: 'p' : unreferenced local variable | ||||
| Z:\ares-1.1.1\ares_init.c(237) : warning C4101: 'linesize' : unreferenced local variable | ||||
| Z:\ares-1.1.1\ares_init.c(235) : warning C4101: 'fp' : unreferenced local variable | ||||
| ares_mkquery.c | ||||
| Z:\ares-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition | ||||
|         C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR' | ||||
| ares_parse_a_reply.c | ||||
| Z:\ares-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition | ||||
|         C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR' | ||||
| Z:\ares-1.1.1\ares_parse_a_reply.c(90) : warning C4018: '<' : signed/unsigned mismatch | ||||
| ares_parse_ptr_reply.c | ||||
| Z:\ares-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition | ||||
|         C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR' | ||||
| Z:\ares-1.1.1\ares_parse_ptr_reply.c(71) : warning C4018: '<' : signed/unsigned mismatch | ||||
| ares_process.c | ||||
| Z:\ares-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition | ||||
|         C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR' | ||||
| ares_query.c | ||||
| Z:\ares-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition | ||||
|         C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR' | ||||
| ares_search.c | ||||
| Z:\ares-1.1.1\ares_search.c(229) : warning C4013: 'strncasecmp' undefined; assuming extern returning int | ||||
| ares_send.c | ||||
| Z:\ares-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition | ||||
|         C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR' | ||||
| ares_strerror.c | ||||
| ares_timeout.c | ||||
| windows_port.c | ||||
| Z:\ares-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition | ||||
|         C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR' | ||||
| Creating library... | ||||
|  | ||||
|  | ||||
|  | ||||
| <h3>Results</h3> | ||||
| areslib.lib - 0 error(s), 19 warning(s) | ||||
| </pre> | ||||
| </body> | ||||
| </html> | ||||
							
								
								
									
										63
									
								
								buildconf
									
									
									
									
									
								
							
							
						
						
									
										63
									
								
								buildconf
									
									
									
									
									
								
							| @@ -1,4 +1,26 @@ | ||||
| #!/bin/sh | ||||
| #*************************************************************************** | ||||
| #                                  _   _ ____  _ | ||||
| #  Project                     ___| | | |  _ \| | | ||||
| #                             / __| | | | |_) | | | ||||
| #                            | (__| |_| |  _ <| |___ | ||||
| #                             \___|\___/|_| \_\_____| | ||||
| # | ||||
| # Copyright (C) 1998 - 2005, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
| # | ||||
| # This software is licensed as described in the file COPYING, which | ||||
| # you should have received as part of this distribution. The terms | ||||
| # are also available at http://curl.haxx.se/docs/copyright.html. | ||||
| # | ||||
| # You may opt to use, copy, modify, merge, publish, distribute and/or sell | ||||
| # copies of the Software, and permit persons to whom the Software is | ||||
| # furnished to do so, under the terms of the COPYING file. | ||||
| # | ||||
| # This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||||
| # KIND, either express or implied. | ||||
| # | ||||
| # $Id$ | ||||
| ########################################################################### | ||||
|  | ||||
| die(){ | ||||
| 	echo "$@" | ||||
| @@ -13,7 +35,8 @@ findtool(){ | ||||
|   IFS=":" | ||||
|   for path in $PATH | ||||
|   do | ||||
|     if test -r "$path/$file"; then | ||||
|     # echo "checks for $file in $path" >&2 | ||||
|     if test -f "$path/$file"; then | ||||
|       echo "$path/$file" | ||||
|       return | ||||
|     fi | ||||
| @@ -24,7 +47,7 @@ findtool(){ | ||||
| # autoconf 2.57 or newer | ||||
| # | ||||
| need_autoconf="2.57" | ||||
| ac_version=`${AUTOCONF:-autoconf} --version 2>/dev/null|head -1| sed -e 's/^[^0-9]*//' -e 's/[a-z]* *$//'` | ||||
| ac_version=`${AUTOCONF:-autoconf} --version 2>/dev/null|head -n 1| sed -e 's/^[^0-9]*//' -e 's/[a-z]* *$//'` | ||||
| if test -z "$ac_version"; then | ||||
|   echo "buildconf: autoconf not found." | ||||
|   echo "            You need autoconf version $need_autoconf or newer installed." | ||||
| @@ -45,7 +68,7 @@ echo "buildconf: autoconf version $ac_version (ok)" | ||||
| #-------------------------------------------------------------------------- | ||||
| # autoheader 2.50 or newer | ||||
| # | ||||
| ah_version=`${AUTOHEADER:-autoheader} --version 2>/dev/null|head -1| sed -e 's/^[^0-9]*//' -e 's/[a-z]* *$//'` | ||||
| ah_version=`${AUTOHEADER:-autoheader} --version 2>/dev/null|head -n 1| sed -e 's/^[^0-9]*//' -e 's/[a-z]* *$//'` | ||||
| if test -z "$ah_version"; then | ||||
|   echo "buildconf: autoheader not found." | ||||
|   echo "            You need autoheader version 2.50 or newer installed." | ||||
| @@ -67,7 +90,7 @@ echo "buildconf: autoheader version $ah_version (ok)" | ||||
| # automake 1.7 or newer | ||||
| # | ||||
| need_automake="1.7" | ||||
| am_version=`${AUTOMAKE:-automake} --version 2>/dev/null|head -1| sed -e 's/^.* \([0-9]\)/\1/' -e 's/[a-z]* *$//' -e 's/\(.*\)\(-p.*\)/\1/'` | ||||
| am_version=`${AUTOMAKE:-automake} --version 2>/dev/null|head -n 1| sed -e 's/^.* \([0-9]\)/\1/' -e 's/[a-z]* *$//' -e 's/\(.*\)\(-p.*\)/\1/'` | ||||
| if test -z "$am_version"; then | ||||
|   echo "buildconf: automake not found." | ||||
|   echo "            You need automake version $need_automake or newer installed." | ||||
| @@ -85,8 +108,7 @@ fi | ||||
|  | ||||
| echo "buildconf: automake version $am_version (ok)" | ||||
|  | ||||
| ac=`findtool aclocal` | ||||
|  | ||||
| ac=`findtool ${ACLOCAL:-aclocal}` | ||||
| if test -z "$ac"; then | ||||
|   echo "buildconf: aclocal not found. Weird automake installation!" | ||||
|   exit 1 | ||||
| @@ -107,13 +129,18 @@ LIBTOOL_WANTED_VERSION=1.4.2 | ||||
| # glibtool, with 'libtool' being something completely different. | ||||
| libtool=`findtool glibtool 2>/dev/null` | ||||
| if test ! -x "$libtool"; then | ||||
|   libtool=`findtool libtool` | ||||
|   libtool=`findtool ${LIBTOOL:-libtool}` | ||||
| fi | ||||
|  | ||||
| # set the LIBTOOLIZE here so that glibtoolize is used if glibtool was found | ||||
| LIBTOOLIZE="${libtool}ize" | ||||
| if test -z "$LIBTOOLIZE"; then | ||||
|   # set the LIBTOOLIZE here so that glibtoolize is used if glibtool was found | ||||
|   # $libtool is already the full path | ||||
|   libtoolize="${libtool}ize" | ||||
| else | ||||
|   libtoolize=`findtool $LIBTOOLIZE` | ||||
| fi | ||||
|  | ||||
| lt_pversion=`$libtool --version 2>/dev/null|head -1|sed -e 's/^[^0-9]*//g' -e 's/[- ].*//'` | ||||
| lt_pversion=`$libtool --version 2>/dev/null|head -n 1|sed -e 's/^[^0-9]*//g' -e 's/[- ].*//'` | ||||
| if test -z "$lt_pversion"; then | ||||
|   echo "buildconf: libtool not found." | ||||
|   echo "            You need libtool version $LIBTOOL_WANTED_VERSION or newer installed" | ||||
| @@ -150,7 +177,7 @@ fi | ||||
|  | ||||
| echo "buildconf: libtool version $lt_version (ok)" | ||||
|  | ||||
| if test -f "$LIBTOOLIZE"; then | ||||
| if test -f "$libtoolize"; then | ||||
|   echo "buildconf: libtoolize found" | ||||
| else | ||||
|   echo "buildconf: libtoolize not found. Weird libtool installation!" | ||||
| @@ -160,7 +187,7 @@ fi | ||||
| #-------------------------------------------------------------------------- | ||||
| # m4 check | ||||
| # | ||||
| m4=`${M4:-m4} --version 2>/dev/null|head -1`; | ||||
| m4=`${M4:-m4} --version 2>/dev/null|head -n 1`; | ||||
| m4_version=`echo $m4 | sed -e 's/^.* \([0-9]\)/\1/' -e 's/[a-z]* *$//'` | ||||
|  | ||||
| if { echo $m4 | grep "GNU" >/dev/null 2>&1; } then | ||||
| @@ -173,14 +200,14 @@ fi | ||||
| #-------------------------------------------------------------------------- | ||||
| # perl check | ||||
| # | ||||
| PERL=`findtool perl` | ||||
| PERL=`findtool ${PERL:-perl}` | ||||
|  | ||||
| # ------------------------------------------------------------ | ||||
|  | ||||
| # run the correct scripts now | ||||
|  | ||||
| echo "buildconf: running libtoolize" | ||||
| ${LIBTOOLIZE:-libtoolize} --copy --automake --force || die "The libtool command failed" | ||||
| $libtoolize --copy --automake --force || die "The libtoolize command failed" | ||||
| echo "buildconf: running aclocal" | ||||
| ${ACLOCAL:-aclocal} $ACLOCAL_FLAGS || die "The aclocal command line failed" | ||||
| if test -n "$PERL"; then | ||||
| @@ -199,15 +226,13 @@ ${AUTOCONF:-autoconf}     || die "The autoconf command failed" | ||||
|  | ||||
| if test -d ares; then | ||||
|   cd ares | ||||
|   echo "buildconf: running aclocal in the ares directory" | ||||
|   ${ACLOCAL:-aclocal} $ACLOCAL_FLAGS || die "The ares aclocal command failed" | ||||
|   echo "buildconf: running autoconf in the ares directory" | ||||
|   ${AUTOCONF:-autoconf}     || die "The ares autoconf command failed" | ||||
|   echo "buildconf: running in ares" | ||||
|   ./buildconf | ||||
|   cd .. | ||||
| fi | ||||
|  | ||||
| echo "buildconf: running automake" | ||||
| ${AUTOMAKE:-automake} -a  || die "The automake command failed" | ||||
| ${AUTOMAKE:-automake} -a -c  || die "The automake command failed" | ||||
|  | ||||
| echo "buildconf: OK" | ||||
| exit 0 | ||||
|   | ||||
							
								
								
									
										366
									
								
								configure.ac
									
									
									
									
									
								
							
							
						
						
									
										366
									
								
								configure.ac
									
									
									
									
									
								
							| @@ -1,4 +1,25 @@ | ||||
| dnl $Id$ | ||||
| #*************************************************************************** | ||||
| #                                  _   _ ____  _ | ||||
| #  Project                     ___| | | |  _ \| | | ||||
| #                             / __| | | | |_) | | | ||||
| #                            | (__| |_| |  _ <| |___ | ||||
| #                             \___|\___/|_| \_\_____| | ||||
| # | ||||
| # Copyright (C) 1998 - 2006, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
| # | ||||
| # This software is licensed as described in the file COPYING, which | ||||
| # you should have received as part of this distribution. The terms | ||||
| # are also available at http://curl.haxx.se/docs/copyright.html. | ||||
| # | ||||
| # You may opt to use, copy, modify, merge, publish, distribute and/or sell | ||||
| # copies of the Software, and permit persons to whom the Software is | ||||
| # furnished to do so, under the terms of the COPYING file. | ||||
| # | ||||
| # This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||||
| # KIND, either express or implied. | ||||
| # | ||||
| # $Id$ | ||||
| ########################################################################### | ||||
| dnl Process this file with autoconf to produce a configure script. | ||||
|  | ||||
| AC_PREREQ(2.57) | ||||
| @@ -122,13 +143,13 @@ case $host in | ||||
|   *-*-mingw*) | ||||
|     AC_DEFINE(BUILDING_LIBCURL, 1, [when building libcurl itself]) | ||||
|     AC_MSG_RESULT(yes) | ||||
|  <EFBFBD> <20>AC_MSG_CHECKING([if we need CURL_STATICLIB]) | ||||
|     AC_MSG_CHECKING([if we need CURL_STATICLIB]) | ||||
|     if test "X$enable_shared" = "Xno" | ||||
|     then | ||||
|       AC_DEFINE(CURL_STATICLIB, 1, [when not building a shared library]) | ||||
|       AC_MSG_RESULT(yes) | ||||
|  <EFBFBD> <20>else | ||||
|  <EFBFBD> <20> <20>AC_MSG_RESULT(no) | ||||
|     else | ||||
|       AC_MSG_RESULT(no) | ||||
|     fi | ||||
|     ;; | ||||
|   *) | ||||
| @@ -140,6 +161,19 @@ dnl The install stuff has already been taken care of by the automake stuff | ||||
| dnl AC_PROG_INSTALL | ||||
| AC_PROG_MAKE_SET | ||||
|  | ||||
| dnl ********************************************************************** | ||||
| dnl Make sure that our checks for headers windows.h winsock.h winsock2.h  | ||||
| dnl and ws2tcpip.h take precedence over any other further checks which  | ||||
| dnl could be done later using AC_CHECK_HEADER or AC_CHECK_HEADERS for | ||||
| dnl this specific header files. And do them before its results are used. | ||||
| dnl ********************************************************************** | ||||
|  | ||||
| CURL_CHECK_HEADER_WINDOWS | ||||
| CURL_CHECK_HEADER_WINSOCK | ||||
| CURL_CHECK_HEADER_WINSOCK2 | ||||
| CURL_CHECK_HEADER_WS2TCPIP | ||||
|  | ||||
|  | ||||
| dnl ************************************************************ | ||||
| dnl switch off particular protocols | ||||
| dnl | ||||
| @@ -151,10 +185,8 @@ AC_HELP_STRING([--disable-http],[Disable HTTP support]), | ||||
|   no) | ||||
|        AC_MSG_RESULT(no) | ||||
|        AC_DEFINE(CURL_DISABLE_HTTP, 1, [to disable HTTP]) | ||||
|        AC_MSG_WARN([disable HTTP disables FTP over proxy and GOPHER too]) | ||||
|        AC_DEFINE(CURL_DISABLE_GOPHER, 1, [to disable GOPHER]) | ||||
|        AC_MSG_WARN([disable HTTP disables FTP over proxy]) | ||||
|        AC_SUBST(CURL_DISABLE_HTTP, [1]) | ||||
|        AC_SUBST(CURL_DISABLE_GOPHER, [1]) | ||||
|        ;; | ||||
|   *)   AC_MSG_RESULT(yes) | ||||
|        ;; | ||||
| @@ -176,21 +208,6 @@ AC_HELP_STRING([--disable-ftp],[Disable FTP support]), | ||||
|   esac ], | ||||
|        AC_MSG_RESULT(yes) | ||||
| ) | ||||
| AC_MSG_CHECKING([whether to support gopher]) | ||||
| AC_ARG_ENABLE(gopher, | ||||
| AC_HELP_STRING([--enable-gopher],[Enable GOPHER support]) | ||||
| AC_HELP_STRING([--disable-gopher],[Disable GOPHER support]), | ||||
| [ case "$enableval" in | ||||
|   no) | ||||
|        AC_MSG_RESULT(no) | ||||
|        AC_DEFINE(CURL_DISABLE_GOPHER, 1, [to disable GOPHER]) | ||||
|        AC_SUBST(CURL_DISABLE_GOPHER, [1]) | ||||
|        ;; | ||||
|   *)   AC_MSG_RESULT(yes) | ||||
|        ;; | ||||
|   esac ], | ||||
|        AC_MSG_RESULT(yes) | ||||
| ) | ||||
| AC_MSG_CHECKING([whether to support file]) | ||||
| AC_ARG_ENABLE(file, | ||||
| AC_HELP_STRING([--enable-file],[Enable FILE support]) | ||||
| @@ -251,6 +268,21 @@ AC_HELP_STRING([--disable-telnet],[Disable TELNET support]), | ||||
|   esac ], | ||||
|        AC_MSG_RESULT(yes) | ||||
| ) | ||||
| AC_MSG_CHECKING([whether to support tftp]) | ||||
| AC_ARG_ENABLE(tftp, | ||||
| AC_HELP_STRING([--enable-tftp],[Enable TFTP support]) | ||||
| AC_HELP_STRING([--disable-tftp],[Disable TFTP support]), | ||||
| [ case "$enableval" in | ||||
|   no) | ||||
|        AC_MSG_RESULT(no) | ||||
|        AC_DEFINE(CURL_DISABLE_TFTP, 1, [to disable TFTP]) | ||||
|        AC_SUBST(CURL_DISABLE_TFTP, [1]) | ||||
|        ;; | ||||
|   *)   AC_MSG_RESULT(yes) | ||||
|        ;; | ||||
|   esac ], | ||||
|        AC_MSG_RESULT(yes) | ||||
| ) | ||||
|  | ||||
| dnl ********************************************************************** | ||||
| dnl Check for built-in manual | ||||
| @@ -274,7 +306,6 @@ AC_HELP_STRING([--disable-manual],[Disable built-in manual]), | ||||
| dnl The actual use of the USE_MANUAL variable is done much later in this | ||||
| dnl script to allow other actions to disable it as well. | ||||
|  | ||||
|  | ||||
| dnl ********************************************************************** | ||||
| dnl Checks for libraries. | ||||
| dnl ********************************************************************** | ||||
| @@ -567,14 +598,15 @@ OPT_KRB4=off | ||||
| AC_ARG_WITH(krb4,dnl | ||||
| AC_HELP_STRING([--with-krb4=DIR],[where to look for Kerberos4]),[ | ||||
|   OPT_KRB4="$withval" | ||||
|   if test X"$OPT_KRB4" != Xyes | ||||
|   then | ||||
|     LDFLAGS="$LDFLAGS -L$OPT_KRB4/lib$libsuff" | ||||
|     KRB4LIB="$OPT_KRB4/lib$libsuff" | ||||
|     CPPFLAGS="$CPPFLAGS -I$OPT_KRB4/include" | ||||
|     KRB4INC="$OPT_KRB4/include" | ||||
|   if test X"$OPT_KRB4" != Xno; then | ||||
|     want_krb4="yes" | ||||
|     if test X"$OPT_KRB4" != Xyes; then | ||||
|       LDFLAGS="$LDFLAGS -L$OPT_KRB4/lib$libsuff" | ||||
|       KRB4LIB="$OPT_KRB4/lib$libsuff" | ||||
|       CPPFLAGS="$CPPFLAGS -I$OPT_KRB4/include" | ||||
|       KRB4INC="$OPT_KRB4/include" | ||||
|     fi | ||||
|   fi | ||||
|   want_krb4="yes" | ||||
|  ]) | ||||
|  | ||||
| AC_MSG_CHECKING([if Kerberos4 support is requested]) | ||||
| @@ -643,10 +675,13 @@ dnl ********************************************************************** | ||||
|  | ||||
| AC_ARG_WITH(spnego, | ||||
|   AC_HELP_STRING([--with-spnego=DIR], | ||||
|                  [Specify location of SPNEGO library fbopenssl]), | ||||
|   [ SPNEGO_ROOT="$withval" | ||||
|     want_spnego="yes" ] | ||||
| ) | ||||
|                  [Specify location of SPNEGO library fbopenssl]), [ | ||||
|   SPNEGO_ROOT="$withval" | ||||
|   if test x"$SPNEGO_ROOT" != xno; then | ||||
|     want_spnego="yes" | ||||
|   fi | ||||
| ]) | ||||
|  | ||||
| AC_MSG_CHECKING([if SPNEGO support is requested]) | ||||
| if test x"$want_spnego" = xyes; then | ||||
|  | ||||
| @@ -683,19 +718,24 @@ AC_ARG_WITH(gssapi-includes, | ||||
| AC_ARG_WITH(gssapi-libs, | ||||
|   AC_HELP_STRING([--with-gssapi-libs=DIR], | ||||
|   		 [Specify location of GSSAPI libs]), | ||||
|   [ GSSAPI_LIBS="-L$withval -lgssapi" | ||||
|   [ GSSAPI_LIBS="-L$withval" | ||||
|     want_gss="yes" ] | ||||
| ) | ||||
|  | ||||
| AC_ARG_WITH(gssapi, | ||||
|   AC_HELP_STRING([--with-gssapi=DIR], | ||||
|                  [Where to look for GSSAPI]), | ||||
|   [ GSSAPI_ROOT="$withval" | ||||
|     want_gss="yes" ] | ||||
| ) | ||||
|                  [Where to look for GSSAPI]), [ | ||||
|   GSSAPI_ROOT="$withval" | ||||
|   if test x"$GSSAPI_ROOT" != xno; then | ||||
|     want_gss="yes"  | ||||
|   fi | ||||
| ]) | ||||
|  | ||||
| save_CPPFLAGS="$CPPFLAGS" | ||||
| AC_MSG_CHECKING([if GSSAPI support is requested]) | ||||
| if test x"$want_gss" = xyes; then | ||||
|   AC_MSG_RESULT(yes) | ||||
|  | ||||
|   if test -z "$GSSAPI_INCS"; then | ||||
|      if test -f "$GSSAPI_ROOT/bin/krb5-config"; then | ||||
|         GSSAPI_INCS=`$GSSAPI_ROOT/bin/krb5-config --cflags gssapi` | ||||
| @@ -705,7 +745,48 @@ if test x"$want_gss" = xyes; then | ||||
|   fi | ||||
|   CPPFLAGS="$CPPFLAGS $GSSAPI_INCS" | ||||
|  | ||||
|   if test -z "$GSSAPI_LIB_DIR"; then | ||||
|   AC_CHECK_HEADER(gss.h, | ||||
|     [ | ||||
|       dnl found in the given dirs | ||||
|       AC_DEFINE(HAVE_GSSGNU, 1, [if you have the GNU gssapi libraries]) | ||||
|       gnu_gss=yes | ||||
|     ], | ||||
|     [ | ||||
|       dnl not found, check Heimdal | ||||
|       AC_CHECK_HEADER(gssapi.h, | ||||
|         [ | ||||
|           dnl found in the given dirs | ||||
|           AC_DEFINE(HAVE_GSSHEIMDAL, 1, [if you have the Heimdal gssapi libraries]) | ||||
|         ], | ||||
|         [ | ||||
|           dnl not found, check in gssapi/ subdir  | ||||
|           AC_CHECK_HEADER(gssapi/gssapi.h, | ||||
|             [ | ||||
|               dnl found  | ||||
|               AC_DEFINE(HAVE_GSSMIT, 1, [if you have the MIT gssapi libraries]) | ||||
|             ], | ||||
|             [ | ||||
|               dnl no header found, disabling GSS | ||||
|               want_gss=no | ||||
|               AC_MSG_WARN(disabling GSSAPI since no header files was found) | ||||
|             ] | ||||
|           ) | ||||
|         ] | ||||
|       )         | ||||
|     ] | ||||
|   ) | ||||
| else | ||||
|   AC_MSG_RESULT(no) | ||||
| fi | ||||
| if test x"$want_gss" = xyes; then | ||||
|   AC_DEFINE(HAVE_GSSAPI, 1, [if you have the gssapi libraries]) | ||||
|  | ||||
|   curl_gss_msg="enabled (MIT/Heimdal)" | ||||
|  | ||||
|   if test -n "$gnu_gss"; then | ||||
|     curl_gss_msg="enabled (GNU GSS)" | ||||
|     LDFLAGS="$LDFLAGS $GSSAPI_LIB_DIR -lgss" | ||||
|   elif test -z "$GSSAPI_LIB_DIR"; then | ||||
|      if test -f "$GSSAPI_ROOT/bin/krb5-config"; then | ||||
|         gss_ldflags=`$GSSAPI_ROOT/bin/krb5-config --libs gssapi` | ||||
| 	LDFLAGS="$LDFLAGS $gss_ldflags" | ||||
| @@ -715,31 +796,10 @@ if test x"$want_gss" = xyes; then | ||||
|         LDFLAGS="$LDFLAGS -lgssapi" | ||||
|      fi | ||||
|   else | ||||
|      LDFLAGS="$LDFLAGS $GSSAPI_LIB_DIR" | ||||
|      LDFLAGS="$LDFLAGS $GSSAPI_LIB_DIR -lgssapi" | ||||
|   fi | ||||
|  | ||||
|   AC_MSG_RESULT(yes) | ||||
|   AC_DEFINE(HAVE_GSSAPI, 1, [if you have the gssapi libraries]) | ||||
|  | ||||
|   curl_gss_msg="enabled" | ||||
|  | ||||
|   AC_CHECK_HEADER(gssapi.h, | ||||
|     [ | ||||
|        dnl found in the given dirs | ||||
|       AC_DEFINE(HAVE_GSSHEIMDAL, 1, [if you have the Heimdal gssapi libraries]) | ||||
|     ], | ||||
|     [ | ||||
|       dnl not found, check in gssapi/ subdir  | ||||
|       AC_CHECK_HEADER(gssapi/gssapi.h, | ||||
|         dnl found  | ||||
|         AC_DEFINE(HAVE_GSSMIT, 1, [if you have the MIT gssapi libraries]) | ||||
|       ) | ||||
|        | ||||
|     ] | ||||
|   ) | ||||
|  | ||||
| else | ||||
|   AC_MSG_RESULT(no) | ||||
|   CPPFLAGS="$save_CPPFLAGS" | ||||
| fi | ||||
|    | ||||
| dnl ********************************************************************** | ||||
| @@ -751,7 +811,7 @@ OPT_SSL=off | ||||
| dnl Default to no CA bundle | ||||
| ca="no" | ||||
| AC_ARG_WITH(ssl,dnl | ||||
| AC_HELP_STRING([--with-ssl=PATH],[where to look for SSL, PATH points to the SSL installation (default: /usr/local/ssl)]) | ||||
| AC_HELP_STRING([--with-ssl=PATH],[Where to look for OpenSSL, PATH points to the SSL installation (default: /usr/local/ssl); when possible, set the PKG_CONFIG_PATH environment variable instead of using this option]) | ||||
| AC_HELP_STRING([--without-ssl], [disable SSL]), | ||||
|   OPT_SSL=$withval) | ||||
|  | ||||
| @@ -768,20 +828,24 @@ if test X"$OPT_SSL" != Xno; then | ||||
|       dnl only do pkg-config magic when not cross-compiling | ||||
|       PKGTEST="yes" | ||||
|     fi | ||||
|     EXTRA_SSL=/usr/local/ssl ;; | ||||
|     PREFIX_OPENSSL=/usr/local/ssl | ||||
|     LIB_OPENSSL="$PREFIX_OPENSSL/lib$libsuff" | ||||
|     ;; | ||||
|   off) | ||||
|     dnl no --with-ssl option given, just check default places | ||||
|     if test x$cross_compiling != xyes; then | ||||
|       dnl only do pkg-config magic when not cross-compiling | ||||
|       PKGTEST="yes" | ||||
|     fi | ||||
|     EXTRA_SSL= ;; | ||||
|     PREFIX_OPENSSL= | ||||
|     ;; | ||||
|   *) | ||||
|     dnl check the given --with-ssl spot | ||||
|     PKGTEST="no" | ||||
|     EXTRA_SSL=$OPT_SSL | ||||
|     LDFLAGS="$LDFLAGS -L$EXTRA_SSL/lib$libsuff" | ||||
|     CPPFLAGS="$CPPFLAGS -I$EXTRA_SSL/include/openssl -I$EXTRA_SSL/include" | ||||
|     PREFIX_OPENSSL=$OPT_SSL | ||||
|     LIB_OPENSSL="$PREFIX_OPENSSL/lib$libsuff" | ||||
|     LDFLAGS="$LDFLAGS -L$LIB_OPENSSL" | ||||
|     CPPFLAGS="$CPPFLAGS -I$PREFIX_OPENSSL/include/openssl -I$PREFIX_OPENSSL/include" | ||||
|     ;; | ||||
|   esac | ||||
|  | ||||
| @@ -803,6 +867,8 @@ if test X"$OPT_SSL" != Xno; then | ||||
|         SSL_LDFLAGS=`$PKGCONFIG --libs-only-L openssl 2>/dev/null` | ||||
|         SSL_CPPFLAGS=`$PKGCONFIG --cflags-only-I openssl 2>/dev/null` | ||||
|  | ||||
| 	LIB_OPENSSL=`echo $SSL_LDFLAGS | sed -e 's/-L//g'` | ||||
|  | ||||
|         dnl use the values pkg-config reported | ||||
|         LIBS="$LIBS $SSL_LIBS" | ||||
|         CPPFLAGS="$CPPFLAGS $SSL_CPPFLAGS" | ||||
| @@ -832,8 +898,8 @@ if test X"$OPT_SSL" != Xno; then | ||||
|      HAVECRYPTO="yes" | ||||
|      LIBS="-lcrypto $LIBS" | ||||
|      ],[ | ||||
|      LDFLAGS="$CLEANLDFLAGS -L$EXTRA_SSL/lib$libsuff" | ||||
|      CPPFLAGS="$CLEANCPPFLAGS -I$EXTRA_SSL/include/openssl -I$EXTRA_SSL/include" | ||||
|      LDFLAGS="$CLEANLDFLAGS -L$LIB_OPENSSL" | ||||
|      CPPFLAGS="$CLEANCPPFLAGS -I$PREFIX_OPENSSL/include/openssl -I$PREFIX_OPENSSL/include" | ||||
|      AC_CHECK_LIB(crypto, CRYPTO_add_lock,[ | ||||
|        HAVECRYPTO="yes" | ||||
|        LIBS="-lcrypto $LIBS"], [ | ||||
| @@ -918,11 +984,15 @@ if test X"$OPT_SSL" != Xno; then | ||||
|   fi | ||||
|  | ||||
|   if test "$OPENSSL_ENABLED" = "1"; then | ||||
|     dnl when the ssl shared libs were found in a path that the run-time linker | ||||
|     dnl doesn't search through, we need to add it to LD_LIBRARY_PATH to | ||||
|     dnl prevent further configure tests to fail due to this | ||||
|     LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$EXTRA_SSL/lib$libsuff" | ||||
|     export LD_LIBRARY_PATH | ||||
|     if test -n "$LIB_OPENSSL"; then | ||||
|        dnl when the ssl shared libs were found in a path that the run-time | ||||
|        dnl linker doesn't search through, we need to add it to LD_LIBRARY_PATH | ||||
|        dnl to prevent further configure tests to fail due to this | ||||
|  | ||||
|        LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$LIB_OPENSSL" | ||||
|        export LD_LIBRARY_PATH | ||||
|        AC_MSG_NOTICE([Added $LIB_OPENSSL to LD_LIBRARY_PATH]) | ||||
|     fi | ||||
|   fi | ||||
|  | ||||
| fi | ||||
| @@ -964,7 +1034,7 @@ dnl FIX: only check for GnuTLS if OpenSSL is not enabled | ||||
| dnl ---------------------------------------------------- | ||||
|  | ||||
| dnl Default to compiler & linker defaults for GnuTLS files & libraries. | ||||
| OPT_GNUTLS=off | ||||
| OPT_GNUTLS=no | ||||
|  | ||||
| AC_ARG_WITH(gnutls,dnl | ||||
| AC_HELP_STRING([--with-gnutls=PATH],[where to look for GnuTLS, PATH points to the installation root (default: /usr/local/)]) | ||||
| @@ -973,7 +1043,7 @@ AC_HELP_STRING([--without-gnutls], [disable GnuTLS detection]), | ||||
|  | ||||
| if test "$OPENSSL_ENABLED" != "1"; then | ||||
|  | ||||
|   if test X"$OPT_GNUTLS" != Xoff; then | ||||
|   if test X"$OPT_GNUTLS" != Xno; then | ||||
|     if test "x$OPT_GNUTLS" = "xyes"; then | ||||
|      check=`libgnutls-config --version 2>/dev/null` | ||||
|      if test -n "$check"; then | ||||
| @@ -993,10 +1063,10 @@ if test "$OPENSSL_ENABLED" != "1"; then | ||||
|     fi | ||||
|     if test -n "$addlib"; then | ||||
|  | ||||
|       CLEANLDFLAGS="$LDFLAGS" | ||||
|       CLEANLIBS="$LIBS" | ||||
|       CLEANCPPFLAGS="$CPPFLAGS" | ||||
|    | ||||
|       LDFLAGS="$LDFLAGS $addlib" | ||||
|       LIBS="$LIBS $addlib" | ||||
|       if test "$addcflags" != "-I/usr/include"; then | ||||
|          CPPFLAGS="$CPPFLAGS $addcflags" | ||||
|       fi | ||||
| @@ -1009,7 +1079,7 @@ if test "$OPENSSL_ENABLED" != "1"; then | ||||
|        curl_ssl_msg="enabled (GnuTLS)" | ||||
|        ], | ||||
|        [ | ||||
|          LDFLAGS="$CLEANLDFLAGS" | ||||
|          LIBS="$CLEANLIBS" | ||||
|          CPPFLAGS="$CLEANCPPFLAGS" | ||||
|        ]) | ||||
|    | ||||
| @@ -1023,6 +1093,7 @@ if test "$OPENSSL_ENABLED" != "1"; then | ||||
|  | ||||
|         LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$gtlsprefix/lib$libsuff" | ||||
|         export LD_LIBRARY_PATH | ||||
|         AC_MSG_NOTICE([Added $gtlsprefix/lib$libsuff to LD_LIBRARY_PATH]) | ||||
|       fi | ||||
|  | ||||
|     fi | ||||
| @@ -1168,7 +1239,6 @@ case "$LIBIDN" in | ||||
|        dnl if there is a given path, check that FIRST | ||||
|        if test -n "$LIBIDN"; then | ||||
|          if test "x$LIBIDN" != "xyes"; then | ||||
|             AC_MSG_WARN([moo moo $LIBIDN]) | ||||
|             oldLDFLAGS=$LDFLAGS | ||||
|             oldCPPFLAGS=$CPPFLAGS | ||||
|             LDFLAGS="$LDFLAGS -L$LIBIDN/lib" | ||||
| @@ -1234,8 +1304,8 @@ AC_HELP_STRING([--enable-thread],[look for thread-safe functions]), | ||||
|  | ||||
| if test X"$OPT_THREAD" = Xoff | ||||
| then | ||||
|   AC_DEFINE(DISABLED_THREADSAFE, 1, \ | ||||
| Set to explicitly specify we don't want to use thread-safe functions) | ||||
|   AC_DEFINE(DISABLED_THREADSAFE, 1, | ||||
|     [Set to explicitly specify we don't want to use thread-safe functions]) | ||||
| else | ||||
|   if test "$ipv6" != "yes"; then | ||||
|     dnl dig around for gethostbyname_r() | ||||
| @@ -1254,7 +1324,7 @@ else | ||||
|   dnl is there a strerror_r() | ||||
|   CURL_CHECK_STRERROR_R() | ||||
|  | ||||
|   AC_CHECK_FUNCS( gmtime_r ) | ||||
|   checkfor_gmtime_r="yes" | ||||
| fi | ||||
|  | ||||
| dnl for recent AIX versions, we skip all the thread-safe checks above since | ||||
| @@ -1290,7 +1360,47 @@ if test "x$RECENTAIX" = "xyes"; then | ||||
|   dnl is there a strerror_r() | ||||
|   CURL_CHECK_STRERROR_R() | ||||
|  | ||||
|   AC_CHECK_FUNCS( gmtime_r ) | ||||
|   checkfor_gmtime_r="yes" | ||||
| fi | ||||
|  | ||||
| if test x$cross_compiling != xyes; then | ||||
|  | ||||
|   if test x$checkfor_gmtime_r = xyes; then | ||||
|  | ||||
|     dnl if gmtime_r was found, verify that it actuall works, as (at least) HPUX | ||||
|     dnl 10.20 is known to have a buggy one. If it doesn't work, disable use of | ||||
|     dnl it. | ||||
|  | ||||
|     AC_MSG_CHECKING([if gmtime_r exists and works]) | ||||
|     AC_RUN_IFELSE([[ | ||||
|     #include <time.h> | ||||
|     int main(void) | ||||
|     { | ||||
|     time_t local = 1170352587; | ||||
|     struct tm *gmt; | ||||
|     struct tm keeper; | ||||
|     putenv("TZ=CST6CDT"); | ||||
|     tzset(); | ||||
|     gmt = gmtime_r(&local, &keeper); | ||||
|     if(gmt) { | ||||
|       return 0; | ||||
|     } | ||||
|     return 1; /* failure */ | ||||
|     } | ||||
|      ]], | ||||
|      dnl success, do nothing | ||||
|      AC_MSG_RESULT(yes) | ||||
|      AC_DEFINE(HAVE_GMTIME_R, 1, [if you have (a working) gmtime_r]) | ||||
|      , | ||||
|      dnl failure, now disable the function | ||||
|      AC_MSG_RESULT(no) | ||||
|     , | ||||
|     dnl not invoked when crosscompiling) | ||||
|     ]) | ||||
|   fi | ||||
| else | ||||
|   dnl and for crosscompilings | ||||
|   AC_CHECK_FUNCS(gmtime_r) | ||||
| fi | ||||
|  | ||||
|  | ||||
| @@ -1301,7 +1411,8 @@ dnl ********************************************************************** | ||||
| dnl Checks for header files. | ||||
| AC_HEADER_STDC | ||||
|  | ||||
| dnl First check for the very most basic headers. Then we can use these | ||||
|  | ||||
| dnl Now check for the very most basic headers. Then we can use these | ||||
| dnl ones as default-headers when checking for the rest! | ||||
| AC_CHECK_HEADERS( | ||||
|         sys/types.h \ | ||||
| @@ -1328,8 +1439,6 @@ AC_CHECK_HEADERS( | ||||
|         fcntl.h \ | ||||
|         dlfcn.h \ | ||||
|         alloca.h \ | ||||
|         winsock.h \ | ||||
|         winsock2.h \ | ||||
|         time.h \ | ||||
|         io.h \ | ||||
|         pwd.h \ | ||||
| @@ -1340,6 +1449,8 @@ AC_CHECK_HEADERS( | ||||
|         libgen.h \ | ||||
|         locale.h \ | ||||
|         errno.h \ | ||||
|         arpa/tftp.h \ | ||||
|         sys/filio.h \ | ||||
|         setjmp.h, | ||||
| dnl to do if not found | ||||
| [], | ||||
| @@ -1397,7 +1508,9 @@ fi | ||||
| AC_CHECK_TYPE(ssize_t, , | ||||
|    AC_DEFINE(ssize_t, int, [the signed version of size_t])) | ||||
|  | ||||
| TYPE_SOCKLEN_T | ||||
| # Check for socklen_t or equivalent | ||||
| CURL_CHECK_TYPE_SOCKLEN_T | ||||
|  | ||||
| TYPE_IN_ADDR_T | ||||
|  | ||||
| TYPE_SOCKADDR_STORAGE | ||||
| @@ -1408,6 +1521,13 @@ dnl Checks for library functions. | ||||
| dnl AC_PROG_GCC_TRADITIONAL | ||||
| AC_TYPE_SIGNAL | ||||
| dnl AC_FUNC_VPRINTF | ||||
| case $host in | ||||
|   *msdosdjgpp) | ||||
|      ac_cv_func_pipe=no | ||||
|      skipcheck_pipe=yes | ||||
|      AC_MSG_NOTICE([skip check for pipe on msdosdjgpp]) | ||||
|     ;; | ||||
| esac | ||||
| AC_CHECK_FUNCS( strtoll \ | ||||
|                 socket \ | ||||
|                 select \ | ||||
| @@ -1440,12 +1560,15 @@ AC_CHECK_FUNCS( strtoll \ | ||||
|                 ftruncate \ | ||||
|                 pipe \ | ||||
|                 poll \ | ||||
|                 getprotobyname \ | ||||
|                 getrlimit \ | ||||
|                 setrlimit, | ||||
| dnl if found | ||||
| [], | ||||
| dnl if not found, $ac_func is the name we check for | ||||
|   func="$ac_func" | ||||
| func="$ac_func" | ||||
| eval skipcheck=\$skipcheck_$func | ||||
| if test "x$skipcheck" != "xyes"; then | ||||
|   AC_MSG_CHECKING([deeper for $func]) | ||||
|   AC_TRY_LINK( [], | ||||
|                [ $func ();], | ||||
| @@ -1455,21 +1578,38 @@ dnl if not found, $ac_func is the name we check for | ||||
|                AC_DEFINE_UNQUOTED($def, 1, [If you have $func]), | ||||
|                AC_MSG_RESULT(but still no) | ||||
|                ) | ||||
|  | ||||
| fi | ||||
| ) | ||||
|  | ||||
| dnl For some reason, the check above doesn't properly detect select() with | ||||
| dnl Msys/Mingw | ||||
| if test "$ac_cv_func_select" != "yes"; then | ||||
| if test "$ac_cv_func_select" = "no"; then | ||||
|   AC_MSG_CHECKING([for select in ws2_32]) | ||||
|   AC_TRY_LINK([#include <winsock2.h>], | ||||
|                [select(0,(fd_set *)NULL,(fd_set *)NULL,(fd_set *)NULL,(struct timeval *)NULL);], | ||||
|                [ dnl worked! | ||||
|                AC_MSG_RESULT([yes]) | ||||
|                HAVE_SELECT="1" | ||||
|                AC_DEFINE_UNQUOTED(HAVE_SELECT,1)], | ||||
|                [AC_MSG_ERROR(You can't compile without a select)] | ||||
|              ) | ||||
|   AC_TRY_LINK([ | ||||
| #undef inline | ||||
| #ifdef HAVE_WINDOWS_H | ||||
| #ifndef WIN32_LEAN_AND_MEAN | ||||
| #define WIN32_LEAN_AND_MEAN | ||||
| #endif | ||||
| #include <windows.h> | ||||
| #ifdef HAVE_WINSOCK2_H | ||||
| #include <winsock2.h> | ||||
| #else | ||||
| #ifdef HAVE_WINSOCK_H | ||||
| #include <winsock.h> | ||||
| #endif | ||||
| #endif | ||||
| #endif | ||||
|     ],[ | ||||
|       select(0,(fd_set *)NULL,(fd_set *)NULL,(fd_set *)NULL,(struct timeval *)NULL); | ||||
|     ],[  | ||||
|       AC_MSG_RESULT([yes]) | ||||
|       HAVE_SELECT="1" | ||||
|       AC_DEFINE_UNQUOTED(HAVE_SELECT, 1, | ||||
|         [Define to 1 if you have the select function.]) | ||||
|     ],[ | ||||
|       AC_MSG_ERROR([You can't compile without a select]) | ||||
|   ]) | ||||
| fi | ||||
|  | ||||
| dnl sigsetjmp() might be a macro and no function so if it isn't found already | ||||
| @@ -1493,8 +1633,25 @@ AC_CHECK_DECL(basename, , | ||||
| #ifdef HAVE_LIBGEN_H | ||||
| #include <libgen.h> | ||||
| #endif | ||||
| #ifdef HAVE_UNISTD_H | ||||
| #include <unistd.h> | ||||
| #endif | ||||
| ) | ||||
|  | ||||
| AC_CHECK_DECL(inet_pton, , | ||||
|               AC_DEFINE(HAVE_NO_INET_PTON_PROTO, 1, | ||||
|                         [Defined if no inet_pton() prototype available]), | ||||
| [ | ||||
| #ifdef HAVE_ARPA_INET_H | ||||
| #include <arpa/inet.h> | ||||
| #endif | ||||
| ] | ||||
| ) | ||||
|  | ||||
| dnl Check if the getnameinfo function is available | ||||
| dnl and get the types of five of its arguments. | ||||
| CURL_CHECK_FUNC_GETNAMEINFO | ||||
|  | ||||
| AC_MSG_CHECKING([if we are Mac OS X (to disable poll)]) | ||||
| disable_poll=no | ||||
| case $host in | ||||
| @@ -1594,7 +1751,7 @@ AC_HELP_STRING([--disable-ares],[Disable ares for name lookups]), | ||||
|   *)   AC_MSG_RESULT(yes) | ||||
|  | ||||
|        if test "x$IPV6_ENABLED" = "x1"; then | ||||
|          AC_MSG_ERROR([ares doesn't work with ipv6, disable ipv6 to use ares]) | ||||
|          AC_MSG_NOTICE([ares may not work properly with ipv6]) | ||||
|        fi | ||||
|  | ||||
|        AC_DEFINE(USE_ARES, 1, [Define if you want to enable ares support]) | ||||
| @@ -1603,7 +1760,7 @@ AC_HELP_STRING([--disable-ares],[Disable ares for name lookups]), | ||||
|        AC_SUBST(HAVE_ARES) | ||||
|        curl_ares_msg="enabled" | ||||
|  | ||||
|        LIBS="$LIBS -lcares" | ||||
|        LIBS="-lcares $LIBS" | ||||
|  | ||||
|        dnl For backwards compatibility default to includes/lib in srcdir/ares | ||||
|        dnl If a value is specified it is assumed that the libs are in $val/lib | ||||
| @@ -1688,7 +1845,6 @@ AC_HELP_STRING([--disable-sspi],[Disable SSPI]), | ||||
|        AC_MSG_RESULT(yes) | ||||
|        AC_DEFINE(USE_WINDOWS_SSPI, 1, [to enable SSPI support]) | ||||
|        AC_SUBST(USE_WINDOWS_SSPI) | ||||
|        LIBS="$LIBS -lsecur32" | ||||
|        curl_sspi_msg="yes" | ||||
|        ;; | ||||
|   *) | ||||
| @@ -1798,6 +1954,8 @@ AC_CONFIG_FILES([Makefile \ | ||||
|            packages/EPM/curl.list \ | ||||
|            packages/EPM/Makefile \ | ||||
|            packages/vms/Makefile \ | ||||
|            packages/AIX/Makefile \ | ||||
|            packages/AIX/RPM/Makefile \ | ||||
|            curl-config \ | ||||
|            libcurl.pc | ||||
| ]) | ||||
|   | ||||
| @@ -60,7 +60,9 @@ while test $# -gt 0; do | ||||
|     --feature|--features) | ||||
| 	if test "@USE_SSLEAY@" = "1"; then | ||||
|           echo "SSL" | ||||
|           NTLM=1 | ||||
|           NTLM=1 # OpenSSL implies NTLM | ||||
|         elif test -n "@USE_GNUTLS@"; then | ||||
|           echo "SSL" | ||||
|         fi | ||||
| 	if test "@KRB4_ENABLED@" = "1"; then | ||||
|           echo "KRB4" | ||||
| @@ -99,9 +101,6 @@ while test $# -gt 0; do | ||||
|             echo "FTPS" | ||||
|           fi | ||||
|         fi | ||||
| 	if test "@CURL_DISABLE_GOPHER@" != "1"; then | ||||
|           echo "GOPHER" | ||||
|         fi | ||||
| 	if test "@CURL_DISABLE_FILE@" != "1"; then | ||||
|           echo "FILE" | ||||
|         fi | ||||
| @@ -114,6 +113,9 @@ while test $# -gt 0; do | ||||
| 	if test "@CURL_DISABLE_DICT@" != "1"; then | ||||
|           echo "DICT" | ||||
|         fi | ||||
| 	if test "@CURL_DISABLE_TFTP@" != "1"; then | ||||
|           echo "TFTP" | ||||
|         fi | ||||
| 	;; | ||||
|     --version) | ||||
| 	echo libcurl @VERSION@ | ||||
|   | ||||
| @@ -82,8 +82,8 @@ Lisp | ||||
|  | ||||
| Lua | ||||
|  | ||||
|   Written by Steve Dekorte | ||||
|   http://curl.haxx.se/libcurl/lua/ | ||||
|   LuaCURL Written by Alexander Marinov | ||||
|   http://luacurl.luaforge.net/ | ||||
|  | ||||
| Mono | ||||
|  | ||||
| @@ -150,6 +150,11 @@ Scheme | ||||
|   Bigloo binding written by Kirill Lisovsky | ||||
|   http://curl.haxx.se/libcurl/scheme/ | ||||
|  | ||||
| S-Lang | ||||
|  | ||||
|   S-Lang binding written by John E Davis | ||||
|   http://www.jedsoft.org/slang/modules/curl.html | ||||
|  | ||||
| Tcl | ||||
|  | ||||
|   Tclcurl is written by Andr<64>s Garc<72>a | ||||
| @@ -161,7 +166,7 @@ Visual Basic | ||||
|   http://sourceforge.net/projects/libcurl-vb/ | ||||
|  | ||||
| Q | ||||
|  | ||||
|   The libcurl module is part of the default install | ||||
|   http://q-lang.sourceforge.net/ | ||||
|  | ||||
| wxWidgets | ||||
|   | ||||
| @@ -4,11 +4,11 @@ | ||||
|                             | (__| |_| |  _ <| |___ | ||||
|                              \___|\___/|_| \_\_____| | ||||
|  | ||||
| To Think About When Contributing Source Code | ||||
|                         When Contributing Source Code | ||||
|  | ||||
|  This document is intended to offer some simple guidelines that can be useful | ||||
|  to keep in mind when you decide to contribute to the project. This concerns | ||||
|  new features as well as corrections to existing flaws or bugs. | ||||
|  This document is intended to offer guidelines that can be useful to keep in | ||||
|  mind when you decide to contribute to the project. This concerns new features | ||||
|  as well as corrections to existing flaws or bugs. | ||||
|  | ||||
| Join the Community | ||||
|  | ||||
| @@ -20,13 +20,26 @@ Join the Community | ||||
| The License Issue | ||||
|  | ||||
|  When contributing with code, you agree to put your changes and new code under | ||||
|  the same license curl and libcurl is already using unless stated otherwise. | ||||
|  the same license curl and libcurl is already using unless stated and agreed | ||||
|  otherwise. | ||||
|  | ||||
|  If you add a larger piece of code, you can opt to make that file or set of | ||||
|  files to use a different license as long as they don't enforce any changes to | ||||
|  the rest of the package and they make sense. Such "separate parts" can not be | ||||
|  GPL (as we don't want the GPL virus to attack users of libcurl) but they must | ||||
|  use "GPL compatible" licenses. | ||||
|  GPL licensed (as we don't want copyleft to affect users of libcurl) but they | ||||
|  must use "GPL compatible" licenses (as we want to allow users to use libcurl | ||||
|  properly in GPL licensed environments). | ||||
|  | ||||
|  When changing existing source code, you do not alter the copyright of the | ||||
|  original file(s). The copyright will still be owned by the original | ||||
|  creator(s) or those who have been assigned copyright by the original | ||||
|  author(s). | ||||
|  | ||||
|  By submitting a patch to the curl project, you are assumed to have the right | ||||
|  to the code and to be allowed by your employer or whatever to hand over that | ||||
|  patch/code to us. We will credit you for your changes as far as possible, to | ||||
|  give credit but also to keep a trace back to who made what changes. Please | ||||
|  always provide us with your full real name when contributing! | ||||
|  | ||||
| What To Read | ||||
|  | ||||
|   | ||||
							
								
								
									
										226
									
								
								docs/DISTRO-DILEMMA
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										226
									
								
								docs/DISTRO-DILEMMA
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,226 @@ | ||||
|   Date: October 27, 2005 | ||||
|   Author: Daniel Stenberg <daniel@haxx.se> | ||||
|   URL: http://curl.haxx.se/legal/distro-dilemma.html | ||||
|  | ||||
| Condition | ||||
|  | ||||
|  This document is written to describe the situation as it is right | ||||
|  now. libcurl 7.15.0 is currently the latest version available. Things may (or | ||||
|  perhaps will) of course change in the future. | ||||
|  | ||||
|  This document reflects my view and understanding of these things. Please tell | ||||
|  me where and how you think I'm wrong, and I'll try to correct my mistakes. | ||||
|  | ||||
| Background  | ||||
|  | ||||
|  The Free Software Foundation has deemed the Original BSD license[1] to be | ||||
|  "incompatible"[2] with GPL[3]. I'd rather say it is the other way around, but | ||||
|  the point is the same: if you distribute a binary version of a GPL program, | ||||
|  it MUST NOT be linked with any Original BSD-licensed parts or | ||||
|  libraries. Doing so will violate the GPL license. For a long time, very many | ||||
|  GPL licensed programs have avoided this license mess by adding an | ||||
|  exception[8] to their license. And many others have just closed their eyes | ||||
|  for this problem. | ||||
|  | ||||
|  libcurl is MIT-style[4] licensed - how on earth did this dilemma fall onto | ||||
|  our plates? | ||||
|  | ||||
|  libcurl is only a little library. libcurl can be built to use OpenSSL for its | ||||
|  SSL/TLS capabilities. OpenSSL is basically Original BSD licensed[5]. | ||||
|  | ||||
|  If libcurl built to use OpenSSL is used by a GPL-licensed application and you | ||||
|  decide to distribute a binary version of it (Linux distros - for example - | ||||
|  tend to), you have a clash. GPL vs Original BSD. | ||||
|  | ||||
|  This dilemma is not libcurl-specific nor is it specific to any particular | ||||
|  Linux distro. (This article mentions and refers to Debian several times, but | ||||
|  only because Debian seems to be the only Linux distro to have faced this | ||||
|  issue yet since no other distro is shipping libcurl built with two SSL | ||||
|  libraries.) | ||||
|  | ||||
| Part of the Operating System | ||||
|  | ||||
|  This would not be a problem if the used lib would be considered part of the | ||||
|  underlying operating system, as then the GPL license has an exception | ||||
|  clause[6] that allows applications to use such libs without having to be | ||||
|  allowed to distribute it or its sources. Possibly some distros will claim | ||||
|  that OpenSSL is part of their operating system. | ||||
|  | ||||
|  Debian does however not take this stance and has officially(?) claimed that | ||||
|  OpenSSL is not a required part of the Debian operating system | ||||
|  | ||||
| Debian-legal | ||||
|  | ||||
|  In August 2004 I figured I should start pulling people's attention to this to | ||||
|  see if anyone has any bright ideas or if they would dismiss my worries based | ||||
|  on some elegant writing I had missed somewhere: | ||||
|  | ||||
|  My post to debian-legal on August 12 2004: | ||||
|  | ||||
|         http://lists.debian.org/debian-legal/2004/08/msg00279.html | ||||
|  | ||||
|  Several people agreed then that this is a known and rather big problem, but | ||||
|  the following discussion didn't result in much. | ||||
|  | ||||
| GnuTLS | ||||
|  | ||||
|  With the release of libcurl 7.14.0 (May 2005), it can now get built to use | ||||
|  GnuTLS instead of OpenSSL. GnuTLS is a LGPL[7] licensed library that offers a | ||||
|  matching set of features as OpenSSL does. Now, you can build and distribute | ||||
|  an SSL capable libcurl without including any Original BSD licensed code. | ||||
|  | ||||
|  I believe Debian is the first distro to provide libcurl/GnutTLS packages. | ||||
|  | ||||
| GnuTLS vs OpenSSL | ||||
|  | ||||
|  While these two libraries offer similar features, they are not equal. Both | ||||
|  libraries have features the other one lacks. libcurl does not (yet) offer a | ||||
|  standardized stable ABI if you decide to switch from using libcurl-openssl to | ||||
|  libcurl-gnutls or vice versa. The GnuTLS support is very recent in libcurl | ||||
|  and it has not been tested nor used very extensively, while the OpenSSL | ||||
|  equivalent code has been used and thus matured for more than seven (7) years. | ||||
|  | ||||
|  In August 2005, the debian-devel mailing list discovered the license issue as | ||||
|  a GPL licensed application wanted SSL capabilities from libcurl and thus was | ||||
|  forced to use the GnuTLS powered libcurl. For a reason that is unknown to me, | ||||
|  the application authors didn't want to or was unable to add an exception to | ||||
|  their GPL license. Alas, the license problem hit the fan again. | ||||
|  | ||||
|  GnuTLS | ||||
|    - LGPL licensened | ||||
|    - supports SRP | ||||
|    - lacks SSLv2 support | ||||
|    - lacks MD2 support (used by at least some CA certs) | ||||
|  | ||||
|  OpenSSL | ||||
|    - Original BSD licensened | ||||
|    - lacks SRP | ||||
|    - supports SSLv2 | ||||
|    - older and more widely used | ||||
|  | ||||
| The Better License, Original BSD or LGPL? | ||||
|  | ||||
|  It isn't obvious or without debate to any objective interested party that | ||||
|  either of these licenses are the "better" or even the "preferred" one in a | ||||
|  generic situation. | ||||
|  | ||||
|  Instead, I think we should accept the fact that the SSL/TLS libraries and | ||||
|  their different licenses will fit different applications and their authors | ||||
|  differently depending on the applications' licenses and their general usage | ||||
|  pattern (considering how LGPL libraries for example can be burdensome for | ||||
|  embedded systems usage). | ||||
|  | ||||
|  In Debian land, there seems to be a common opinion that LGPL is "maximally | ||||
|  compatible" with apps while Original BSD is not. Like this: | ||||
|  | ||||
|         http://lists.debian.org/debian-devel/2005/09/msg01417.html | ||||
|  | ||||
| More SSL Libraries | ||||
|  | ||||
|  In libcurl, there's no stopping us here. There are at least a few more Open | ||||
|  Source/Free SSL/TLS libraries and we would very much like to support them as | ||||
|  well, to offer application authors an even wider scope of choice. | ||||
|  | ||||
| Application Angle of this Problem | ||||
|  | ||||
|  libcurl is built to use one SSL/TLS library. It uses a single fixed name (by | ||||
|  default), and applications are built/linked to use that single lib. Replacing | ||||
|  one libcurl instance with another one that uses the other SSL/TLS library | ||||
|  might break one or more applications (due to ABI differences and/or different | ||||
|  feature set). You want your application to use the libcurl it was built for. | ||||
|  | ||||
| Project cURL Angle of this Problem | ||||
|  | ||||
|  We distribute libcurl and everyone may build libcurl with either library. At | ||||
|  their choice. This problem is not directly a problem of ours. It merely | ||||
|  affects users - GPL application authors only - of our lib as it comes | ||||
|  included and delivered on some distros. | ||||
|  | ||||
|  libcurl has different ABI when built with different SSL/TLS libraries due to | ||||
|  two reasons: | ||||
|  | ||||
|  1. No one has worked on fixing this. The mutex/lock callbacks should be set | ||||
|     with a generic libcurl function that should use the proper underlying | ||||
|     functions. | ||||
|  | ||||
|  2. The CURLOPT_SSL_CTX_FUNCTION option is not possible to "emulate" on GnuTLS | ||||
|     but simply requires OpenSSL. | ||||
|  | ||||
| Distro Angle of this Problem | ||||
|  | ||||
|  A distro can provide separate libcurls built with different SSL/TLS libraries | ||||
|  to work around this, but at least Debian seems to be very hostile against | ||||
|  such an approach, probably since it makes things like devel packages for the | ||||
|  different libs collide since they would provide the same include files and | ||||
|  man pages etc. | ||||
|  | ||||
| Fixing the Only Problem | ||||
|  | ||||
|  The only problem is thus for distributions that want to offer libcurl | ||||
|  versions built with more than one SSL/TLS library. | ||||
|  | ||||
|  Debian is now (since mid September 2005) providing two different devel | ||||
|  packages, one for libcurl built with OpenSSL and one built with GnuTLS. They | ||||
|  use different .so names and can this both be installed in a single system | ||||
|  simultaneously. This has previously been said as a transitional system not | ||||
|  desired to keep in the long run. | ||||
|  | ||||
|  Since multiple libcurl binaries using different names are ruled out, we need | ||||
|  to come up with a way to have one single libcurl that someone uses different | ||||
|  underlying libraries. The best(?) approach currently suggested involves this: | ||||
|  | ||||
|  A new intermediate library (named lib2 so far in the discussions) with the | ||||
|  single purpose of providing libcurl with SSL/TLS capabilities. It would have | ||||
|  a unified API and ABI no matter what underlying library it would use. | ||||
|  | ||||
|  There would be one lib2 binary provided for each supported SSL/TLS library. | ||||
|  For example: lib2-openssl, lib2-gnutls, lib2-yassl, lib2-matrixssl and | ||||
|  lib2-nossl. Yes, take note of the last one that provides the lib2 ABI but | ||||
|  that lacks the actual powers. | ||||
|  | ||||
|  When libcurl is built and linked, it will be linked against a lib2 with the | ||||
|  set ABI. | ||||
|  | ||||
|  When you link an app against libcurl, it would also need to provide one of | ||||
|  the (many) lib2 libs to decide what approach that fits the app. An app that | ||||
|  doesn't want SSL at all would still need to link with the lib2-nossl lib. | ||||
|  | ||||
|  GPL apps can pick the lib2-gnutls, others may pick the lib2-openssl. | ||||
|  | ||||
|  This concept works equally well both for shared and static libraries. | ||||
|  | ||||
|  A positive side effect of this approach could be a more generic "de facto" | ||||
|  standard API for SSL/TLS libraries. | ||||
|  | ||||
| When Will This Happen | ||||
|  | ||||
|  Note again that this is not a problem in curl, it doesn't solve any actual | ||||
|  technical problems in our project. Don't hold your breath for this to happen | ||||
|  very soon (if at all) unless you step forward and contribute. | ||||
|  | ||||
|  The suggestion that is outlined above is still only a suggestion. Feel free | ||||
|  to bring a better idea! | ||||
|  | ||||
|  Also, to keep in mind: I don't want this new concept to have too much of an | ||||
|  impact on the existing code. Preferably it should be possible to build the | ||||
|  code like today (without the use of lib2), should you decide to ignore the | ||||
|  problems outlined in this document. | ||||
|  | ||||
|  Update: Work on this has been initiated by Richard Atterer: | ||||
|  | ||||
|         http://curl.haxx.se/mail/lib-2005-09/0066.html | ||||
|  | ||||
| Footnotes | ||||
|  | ||||
|  [1] = http://www.xfree86.org/3.3.6/COPYRIGHT2.html#6 | ||||
|  [2] = http://www.fsf.org/licensing/essays/bsd.html | ||||
|  [3] = http://www.fsf.org/licensing/licenses/gpl.html | ||||
|  [4] = http://curl.haxx.se/docs/copyright.html | ||||
|  [5] = http://www.openssl.org/source/license.html | ||||
|  [6] = http://www.fsf.org/licensing/licenses/gpl.html end of section 3 | ||||
|  [7] = http://www.fsf.org/licensing/licenses/lgpl.html | ||||
|  [8] = http://en.wikipedia.org/wiki/OpenSSL_exception | ||||
|  | ||||
| Feedback/Updates provided by | ||||
|  | ||||
|  Eric Cooper | ||||
							
								
								
									
										188
									
								
								docs/FAQ
									
									
									
									
									
								
							
							
						
						
									
										188
									
								
								docs/FAQ
									
									
									
									
									
								
							| @@ -1,4 +1,4 @@ | ||||
| Updated: April 13, 2005 (http://curl.haxx.se/docs/faq.html) | ||||
| Updated: November 2, 2005 (http://curl.haxx.se/docs/faq.html) | ||||
|                                   _   _ ____  _ | ||||
|                               ___| | | |  _ \| | | ||||
|                              / __| | | | |_) | | | ||||
| @@ -16,6 +16,8 @@ FAQ | ||||
|   1.6 What do you get for making curl? | ||||
|   1.7 What about CURL from curl.com? | ||||
|   1.8 I have a problem who do I mail? | ||||
|   1.9 Where do I buy commercial support for curl? | ||||
|   1.10 How many are using curl? | ||||
|  | ||||
|  2. Install Related Problems | ||||
|   2.1 configure doesn't find OpenSSL even when it is installed | ||||
| @@ -64,6 +66,8 @@ FAQ | ||||
|   4.10 My HTTP request using HEAD, PUT or DELETE doesn't work! | ||||
|   4.11 Why does my HTTP range requests return the full document? | ||||
|   4.12 Why do I get "certificate verify failed" ? | ||||
|   4.13 Why is curl -R on Windows one hour off? | ||||
|   4.14 Redirects work in browser but not with curl! | ||||
|  | ||||
|  5. libcurl Issues | ||||
|   5.1 Is libcurl thread-safe? | ||||
| @@ -86,6 +90,7 @@ FAQ | ||||
|   6.4 I have a program that uses LGPL libraries, can I use libcurl? | ||||
|   6.5 Can I modify curl/libcurl for my program and keep the changes secret? | ||||
|   6.6 Can you please change the curl/libcurl license to XXXX? | ||||
|   6.7 What are my obligations when using libcurl in my commerical apps? | ||||
|  | ||||
|  7. PHP/CURL Issues | ||||
|   7.1 What is PHP/CURL? | ||||
| @@ -109,7 +114,7 @@ FAQ | ||||
|   libcurl | ||||
|  | ||||
|     A free and easy-to-use client-side URL transfer library, supporting FTP, | ||||
|     FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE and LDAP.  libcurl supports | ||||
|     FTPS, HTTP, HTTPS, TELNET, DICT, FILE and LDAP.  libcurl supports | ||||
|     HTTPS certificates, HTTP POST, HTTP PUT, FTP uploading, kerberos, HTTP | ||||
|     form based upload, proxies, cookies, user+password authentication, file | ||||
|     transfer resume, http proxy tunneling and more! | ||||
| @@ -127,16 +132,15 @@ FAQ | ||||
|     A command line tool for getting or sending files using URL syntax. | ||||
|  | ||||
|     Since curl uses libcurl, it supports a range of common Internet protocols, | ||||
|     currently including HTTP, HTTPS, FTP, FTPS, GOPHER, LDAP, DICT, TELNET and | ||||
|     FILE. | ||||
|     currently including HTTP, HTTPS, FTP, FTPS, LDAP, DICT, TELNET and FILE. | ||||
|  | ||||
|   We pronounce curl and cURL with an initial k sound: [kurl]. | ||||
|  | ||||
|   NOTE: there are numerous sub-projects and related projects that also use the | ||||
|   word curl in the project names in various combinations, but you should take | ||||
|   There are numerous sub-projects and related projects that also use the word | ||||
|   curl in the project names in various combinations, but you should take | ||||
|   notice that this FAQ is directed at the command-line tool named curl (and | ||||
|   libcurl the library), and may therefore not be valid for other curl-related | ||||
|   projects. | ||||
|   projects. (There is however a small section for the PHP/CURL in this FAQ.) | ||||
|  | ||||
|   1.2 What is libcurl? | ||||
|  | ||||
| @@ -146,6 +150,10 @@ FAQ | ||||
|   You can use libcurl for free in your application, be it open source, | ||||
|   commercial or closed-source. | ||||
|  | ||||
|   libcurl is most probably the most portable, most powerful and most often | ||||
|   used C-based multi-platform file transfer library on this planet - be it | ||||
|   open source or commercial. | ||||
|  | ||||
|   1.3 What is curl not? | ||||
|  | ||||
|   Curl is *not* a wget clone. That is a common misconception.  Never, during | ||||
| @@ -197,15 +205,14 @@ FAQ | ||||
|  | ||||
|   1.5 Who makes curl? | ||||
|  | ||||
|   curl and libcurl are not made by any single individual. Sure, Daniel | ||||
|   Stenberg writes the major parts, but other persons' submissions are | ||||
|   curl and libcurl are not made by any single individual. Daniel Stenberg is | ||||
|   project leader and main developer, but other persons' submissions are | ||||
|   important and crucial. Anyone can contribute and post their changes and | ||||
|   improvements and have them inserted in the main sources (of course on the | ||||
|   condition that developers agree on that the fixes are good). | ||||
|  | ||||
|   The list of contributors in the docs/THANKS file is only a small part of all | ||||
|   the people that every day provide us with bug reports, suggestions, ideas | ||||
|   and source code. | ||||
|   The full list of the more than 450 contributors is found in the docs/THANKS | ||||
|   file. | ||||
|  | ||||
|   curl is developed by a community, with Daniel at the wheel. | ||||
|  | ||||
| @@ -220,12 +227,8 @@ FAQ | ||||
|   have sponsored certain parts of the development in the past and I hope some | ||||
|   will continue to do so in the future. | ||||
|  | ||||
|   If you want to support our project with a donation or similar, one way of | ||||
|   doing that would be to buy "gift certificates" at useful online shopping | ||||
|   sites, such as amazon.com or thinkgeek.com. Another way would be to sponsor | ||||
|   us through a banner-program or even better: by helping us coding, | ||||
|   documenting, testing etc. You're welcome to send us a buck using paypal, as | ||||
|   described here: http://curl.haxx.se/donation.html | ||||
|   If you want to support our project, consider a donation or a banner-program | ||||
|   or even better: by helping us coding, documenting, testing etc. | ||||
|  | ||||
|   1.7 What about CURL from curl.com? | ||||
|  | ||||
| @@ -256,6 +259,58 @@ FAQ | ||||
|   users thanks to the web based archives of the mailing lists), thus saving us | ||||
|   from having to repeat ourselves even more. Thanks for respecting this. | ||||
|  | ||||
|   If you have found or simply suspect a security problem in curl or libcurl, | ||||
|   mail curl-security at haxx.se (closed list of receivers, mails are not | ||||
|   disclosed) and tell. Then we can produce a fix in a timely manner before the | ||||
|   flaw is announced to the world, thus lessen the impact the problem will have | ||||
|   on existing users. | ||||
|  | ||||
|   1.9 Where do I buy commercial support for curl? | ||||
|  | ||||
|   curl is fully open source. It means you can hire any skilled engineer to fix | ||||
|   your curl-related problems. | ||||
|  | ||||
|   We list available alternatives on the curl web site: | ||||
|   http://curl.haxx.se/support.html | ||||
|  | ||||
|   1.10 How many are using curl? | ||||
|  | ||||
|   It is impossible to tell. | ||||
|  | ||||
|   We don't know how many users that knowingly have installed and use curl. | ||||
|  | ||||
|   We don't know how many users that use curl without knowing that they are in | ||||
|   fact using it. | ||||
|  | ||||
|   We don't know how many users that downloaded or installed curl and then | ||||
|   never use it. | ||||
|  | ||||
|   Some facts to use as input to the math: | ||||
|  | ||||
|   curl packages have been downloaded from the curl.haxx.se site well over a | ||||
|   million times. curl is installed by default with most Linux | ||||
|   distributions. curl is installed by default with Mac OS X. curl and libcurl | ||||
|   as used by numerous applications that include libcurl binaries in their | ||||
|   distribution packages (like Adobe Acrobat Reader and Google Earth). | ||||
|  | ||||
|   More than 40 known named companies use curl in commercial environments and | ||||
|   products. More than 100 known named open source projects depend on | ||||
|   (lib)curl. | ||||
|  | ||||
|   In a poll on the curl web site mid-2005, more than 50% of the 300+ answers | ||||
|   estimated a user base of one million users or more. | ||||
|  | ||||
|   In March 2005, the "Linux Counter project" estimated a total Linux user base | ||||
|   of some 29 millions, while Netcraft detected some 4 million "active" Linux | ||||
|   based web servers. A guess is that a fair amount of these Linux | ||||
|   installations have curl installed. | ||||
|  | ||||
|   http://curl.haxx.se/docs/companies.html | ||||
|   http://curl.haxx.se/docs/programs.html | ||||
|   http://curl.haxx.se/libcurl/using/apps.html | ||||
|   http://counter.li.org/estimates.php | ||||
|   http://news.netcraft.com/archives/2005/03/14/fedora_makes_rapid_progress.html | ||||
|  | ||||
|  | ||||
| 2. Install Related Problems | ||||
|  | ||||
| @@ -396,6 +451,8 @@ FAQ | ||||
|  | ||||
|      curl -L http://redirector.com | ||||
|  | ||||
|   Not all redirects are HTTP ones, see 4.14 | ||||
|  | ||||
|   3.9 How do I use curl in my favorite programming language? | ||||
|  | ||||
|   There exist many language interfaces/bindings for curl that integrates it | ||||
| @@ -509,22 +566,24 @@ FAQ | ||||
|   - Server certificate. The server you communicate with has a server | ||||
|     certificate. You can and should verify this certificate to make sure that | ||||
|     you are truly talking to the real server and not a server impersonating | ||||
|     it. The server certificate verification process is made by using a | ||||
|     Certificate Authority certificate ("CA cert") that was used to sign the | ||||
|     server certificate. Server certificate verification is enabled by default | ||||
|     in curl and libcurl and is often the reason for problems as explained in | ||||
|     FAQ entry 4.12 and the SSLCERTS document | ||||
|     (http://curl.haxx.se/docs/sslcerts.html). Server certificates that are | ||||
|     "self-signed" or otherwise signed by a CA that you do not have a CA cert | ||||
|     for, cannot be verified. If the verification during a connect fails, you | ||||
|     are refused access. You then need to explicitly disable the verification | ||||
|     to connect to the server. | ||||
|     it. | ||||
|  | ||||
|   - Certificate Authority certificate ("CA cert"). You often have several CA | ||||
|     certs in a CA cert bundle that can be used to verify a server certificate | ||||
|     that was signed by one of the authorities in the bundle. curl comes with a | ||||
|     default CA cert bundle. You can override the default. | ||||
|  | ||||
|     The server certificate verification process is made by using a Certificate | ||||
|     Authority certificate ("CA cert") that was used to sign the server | ||||
|     certificate. Server certificate verification is enabled by default in curl | ||||
|     and libcurl and is often the reason for problems as explained in FAQ entry | ||||
|     4.12 and the SSLCERTS document | ||||
|     (http://curl.haxx.se/docs/sslcerts.html). Server certificates that are | ||||
|     "self-signed" or otherwise signed by a CA that you do not have a CA cert | ||||
|     for, cannot be verified. If the verification during a connect fails, you | ||||
|     are refused access. You then need to explicitly disable the verification | ||||
|     to connect to the server. | ||||
|  | ||||
|   3.17 How do I list the root dir of an FTP server? | ||||
|  | ||||
|   There are two ways. The way defined in the RFC is to use an encoded slash | ||||
| @@ -541,6 +600,8 @@ FAQ | ||||
|   | ||||
|   No. | ||||
|  | ||||
|   But you could easily write your own program using libcurl to do such stunts. | ||||
|  | ||||
|  | ||||
| 4. Running Problems | ||||
|  | ||||
| @@ -734,6 +795,28 @@ FAQ | ||||
|   Details are also in the SSLCERTS file in the release archives, found online | ||||
|   here: http://curl.haxx.se/docs/sslcerts.html | ||||
|  | ||||
|   4.13 Why is curl -R on Windows one hour off? | ||||
|  | ||||
|   During daylight savings time, when -R is used, curl will set a time that | ||||
|   appears one hour off. This happens due to a flaw in how Windows stores and | ||||
|   uses file modification times and it is not easily worked around. For details | ||||
|   on this problem, read this: http://www.codeproject.com/datetime/dstbugs.asp | ||||
|  | ||||
|   4.14 Redirects work in browser but not with curl! | ||||
|  | ||||
|   curl supports HTTP redirects fine (see item 3.8). Browsers generally support | ||||
|   at least two other ways to perform directs that curl does not: | ||||
|  | ||||
|   - Meta tags. You can write a HTML tag that will cause the browser to | ||||
|     redirect to another given URL after a certain time. | ||||
|  | ||||
|   - Javascript. You can write a javascript program embeded in a HTML page | ||||
|     that redirects the browser to another given URL. | ||||
|  | ||||
|   There is no way to make curl follow these redirects. You must either | ||||
|   manually figure out what the page is set to do, or you write a script that | ||||
|   parses the results and fetches the new URL. | ||||
|  | ||||
|  | ||||
| 5. libcurl Issues | ||||
|  | ||||
| @@ -754,7 +837,7 @@ FAQ | ||||
|   need to provide locking function(s) for libgcrypt (which is used by GnuTLS | ||||
|   for the crypto functions). | ||||
|  | ||||
|     [informative link missing] | ||||
|     http://www.gnu.org/software/gnutls/manual/html_node/Multi_002dthreaded-applications.html | ||||
|  | ||||
|   5.2 How can I receive all data into a large memory chunk? | ||||
|  | ||||
| @@ -766,8 +849,8 @@ FAQ | ||||
|  | ||||
|   One solution to this problem could be to have a pointer to a struct that you | ||||
|   pass to the callback function. You set the pointer using the | ||||
|   curl_easy_setopt(CURLOPT_FILE) function. Then that pointer will be passed to | ||||
|   the callback instead of a FILE * to a file: | ||||
|   CURLOPT_WRITEDATA option. Then that pointer will be passed to the callback | ||||
|   instead of a FILE * to a file: | ||||
|  | ||||
|         /* imaginary struct */ | ||||
|         struct MemoryStruct { | ||||
| @@ -874,7 +957,10 @@ FAQ | ||||
|  | ||||
|   5.9 How does libcurl resolve host names? | ||||
|  | ||||
|   libcurl includes a number of different name resolve functions: | ||||
|   libcurl supports a large a number of different name resolve functions. One | ||||
|   of them is picked at build-time and will be used unconditionally. Thus, if | ||||
|   you want to change name resolver function you must rebuild libcurl and tell | ||||
|   it to use a different function. | ||||
|  | ||||
|   - The non-ipv6 resolver that can use one out of four host name resolve calls | ||||
|     (depending on what your system supports): | ||||
| @@ -887,6 +973,8 @@ FAQ | ||||
|   - The ipv6-resolver that uses getaddrinfo() | ||||
|  | ||||
|   - The c-ares based name resolver that uses the c-ares library for resolves. | ||||
|     Using this offers asynchronous name resolves but it currently has no IPv6 | ||||
|     support. | ||||
|  | ||||
|   - The Windows threaded resolver. It use: | ||||
|  | ||||
| @@ -899,8 +987,8 @@ FAQ | ||||
|   5.10 How do I prevent libcurl from writing the response to stdout? | ||||
|  | ||||
|   libcurl provides a default built-in write function that writes received data | ||||
|   to stdout. Set a WRITEFUNCTION to receive the data, or possibly set | ||||
|   WRITEDATA to a different FILE * handle. | ||||
|   to stdout. Set the CURLOPT_WRITEFUNCTION to receive the data, or possibly | ||||
|   set CURLOPT_WRITEDATA to a different FILE * handle. | ||||
|  | ||||
|   5.11 How do I make libcurl not receive the whole HTTP response? | ||||
|  | ||||
| @@ -929,6 +1017,9 @@ FAQ | ||||
|   is just a brief summary for the cases we get the most questions. (Parts of | ||||
|   this section was much enhanced by Bjorn Reese.) | ||||
|  | ||||
|   We are not lawyers and this is not legal advice. You should probably consult | ||||
|   one if you want true and accurate legal insights without our prejudice. | ||||
|  | ||||
|   6.1 I have a GPL program, can I use the libcurl library? | ||||
|  | ||||
|   Yes! | ||||
| @@ -973,13 +1064,38 @@ FAQ | ||||
|   libraries that use it. It should be possible for everyone to use libcurl or | ||||
|   curl in their projects, no matter what license they already have in use. | ||||
|  | ||||
|   6.7 What are my obligations when using libcurl in my commerical apps? | ||||
|  | ||||
|   Next to none. All you need to adhere to is the MIT-style license (stated in | ||||
|   the COPYING file) which basically says you have to include the copyright | ||||
|   notice in "all copies" and that you may not use the copyright holder's name | ||||
|   when promoting your software. | ||||
|  | ||||
|   You do not have to release any of your source code. | ||||
|  | ||||
|   You do not have to reveal or make public any changes to the libcurl source | ||||
|   code. | ||||
|  | ||||
|   You do not have to reveal or make public that you are using libcurl within | ||||
|   your app. | ||||
|  | ||||
|   As can be seen here: http://curl.haxx.se/docs/companies.html and | ||||
|   elsewhere, more and more companies are dicovering the power | ||||
|   of libcurl and take advantage of it even in commercial environments. | ||||
|  | ||||
|  | ||||
| 7. PHP/CURL Issues | ||||
|  | ||||
|   7.1 What is PHP/CURL? | ||||
|  | ||||
|   The module for PHP that makes it possible for PHP programs to access curl- | ||||
|   functions from within PHP. We often call it PHP/CURL to differentiate from | ||||
|   curl the command line tool and libcurl the library. | ||||
|   functions from within PHP. | ||||
|  | ||||
|   In the cURL project we call this module PHP/CURL to differentiate it from | ||||
|   curl the command line tool and libcurl the library. The PHP team however | ||||
|   does not refer to it like this (for unknown reasons). They call it plain | ||||
|   CURL (often using all caps) which causes much confusion to users which in | ||||
|   turn gives us a higher question load. | ||||
|  | ||||
|   7.2 Who write PHP/CURL? | ||||
|  | ||||
|   | ||||
| @@ -62,11 +62,11 @@ HTTP | ||||
|  | ||||
| HTTPS (*1) | ||||
|  - (all the HTTP features) | ||||
|  - using certificates | ||||
|  - using client certificates | ||||
|  - verify server certificate | ||||
|  - via http-proxy | ||||
|  - select desired encryption | ||||
|  - force usage of a specific SSL version (SSLv2, SSLv3 or TLSv1) | ||||
|  - force usage of a specific SSL version (SSLv2(*7), SSLv3 or TLSv1) | ||||
|  | ||||
| FTP | ||||
|  - download | ||||
| @@ -95,6 +95,9 @@ FTPS (*1) | ||||
|  - implicit "AUTH TSL" and "AUTH SSL" usage to "upgrade" plain ftp:// | ||||
|    connection to use SSL for both or one of the connections | ||||
|  | ||||
| TFTP | ||||
|  - download / upload | ||||
|  | ||||
| TELNET | ||||
|  - connection negotiation | ||||
|  - custom telnet options | ||||
| @@ -106,10 +109,6 @@ LDAP (*2) | ||||
| DICT | ||||
|  - extended DICT URL support | ||||
|  | ||||
| GOPHER | ||||
|  - GET | ||||
|  - via http-proxy | ||||
|  | ||||
| FILE | ||||
|  - URL support | ||||
|  - "uploads" | ||||
| @@ -118,9 +117,10 @@ FILE | ||||
| FOOTNOTES | ||||
| ========= | ||||
|  | ||||
|   *1 = requires OpenSSL | ||||
|   *1 = requires OpenSSL or GnuTLS | ||||
|   *2 = requires OpenLDAP | ||||
|   *3 = requires a GSSAPI-compliant library, such as Heimdal or similar. | ||||
|   *4 = requires FBopenssl | ||||
|   *5 = requires a krb4 library, such as the MIT one or similar. | ||||
|   *6 = requires c-ares | ||||
|   *7 = requires OpenSSL specificly, as GnuTLS only supports SSLv3 and TLSv1 | ||||
|   | ||||
| @@ -145,3 +145,9 @@ August 2004: | ||||
| April 2005: | ||||
|  | ||||
| GnuTLS can now optionally be used for the secure layer when curl is built. | ||||
|  | ||||
| September 2005: | ||||
|  | ||||
| TFTP support was added. | ||||
|  | ||||
| More than 100,000 unique visitors of the curl web site. 25 mirrors. | ||||
|   | ||||
							
								
								
									
										288
									
								
								docs/INSTALL
									
									
									
									
									
								
							
							
						
						
									
										288
									
								
								docs/INSTALL
									
									
									
									
									
								
							| @@ -132,172 +132,150 @@ UNIX | ||||
| Win32 | ||||
| ===== | ||||
|  | ||||
|    Without SSL: | ||||
|    MingW32 | ||||
|    ------- | ||||
|  | ||||
|       MingW32 (GCC-2.95) style | ||||
|       ------------------------ | ||||
|         Run the 'mingw32.bat' file to get the proper environment variables | ||||
|         set, then run 'make mingw32' in the root dir. | ||||
|    Run the 'mingw32.bat' file to get the proper environment variables set, | ||||
|    then run 'make mingw32' in the root dir. Use  'make mingw32-ssl' to build | ||||
|    curl SSL enabled. | ||||
|  | ||||
|         If you have any problems linking libraries or finding header files, be | ||||
|         sure to verify that the provided "Makefile.m32" files use the proper | ||||
|         paths, and adjust as necessary. | ||||
|    If you have any problems linking libraries or finding header files, be sure | ||||
|    to verify that the provided "Makefile.m32" files use the proper paths, and | ||||
|    adjust as necessary. | ||||
|  | ||||
|       Cygwin style | ||||
|       ------------ | ||||
|         Almost identical to the unix installation. Run the configure script in | ||||
|         the curl root with 'sh configure'. Make sure you have the sh | ||||
|         executable in /bin/ or you'll see the configure fail towards the end. | ||||
|    Cygwin | ||||
|    ------ | ||||
|  | ||||
|         Run 'make' | ||||
|    Almost identical to the unix installation. Run the configure script in the | ||||
|    curl root with 'sh configure'. Make sure you have the sh executable in | ||||
|    /bin/ or you'll see the configure fail towards the end. | ||||
|  | ||||
|       Microsoft command line style | ||||
|       ---------------------------- | ||||
|         Run the 'vcvars32.bat' file to get the proper environment variables | ||||
|         set, then run 'nmake vc' in the root dir. | ||||
|    Run 'make' | ||||
|  | ||||
|         The vcvars32.bat file is part of the Microsoft development | ||||
|         environment. | ||||
|    Dev-Cpp | ||||
|    ------- | ||||
|  | ||||
|       IDE-style | ||||
|       ------------------------- | ||||
|         If you use VC++, Borland or similar compilers. Include all lib source | ||||
|         files in a static lib "project" (all .c and .h files that is). | ||||
|         (you should name it libcurl or similar) | ||||
|    See the separate INSTALL.devcpp file for details. | ||||
|  | ||||
|         Make the sources in the src/ drawer be a "win32 console application" | ||||
|         project. Name it curl. | ||||
|    MSVC from command line | ||||
|    ---------------------- | ||||
|  | ||||
|         For VC++ 6, there's an included Makefile.vc6 that should be possible | ||||
|         to use out-of-the-box. | ||||
|    Run the 'vcvars32.bat' file to get a proper environment. The | ||||
|    vcvars32.bat file is part of the Microsoft development environment and | ||||
|    you may find it in 'C:\Program Files\Microsoft Visual Studio\vc98\bin' | ||||
|    provided that you installed Visual C/C++ 6 in the default directory. | ||||
|  | ||||
|    Then run 'nmake vc' in curl's root directory. | ||||
|  | ||||
|    If you want to compile with zlib support, you will need to build | ||||
|    zlib (http://www.gzip.org/zlib/) as well. Please read the zlib | ||||
|    documentation on how to compile zlib. Define the ZLIB_PATH environment | ||||
|    variable to the location of zlib.h and zlib.lib, for example: | ||||
|  | ||||
|      set ZLIB_PATH=c:\zlib-1.2.1 | ||||
|  | ||||
|    Then run 'nmake vc-zlib' in curl's root directory. | ||||
|  | ||||
|    If you want to compile with SSL support you need the OpenSSL package. | ||||
|    Please read the OpenSSL documentation on how to compile and install | ||||
|    the OpenSSL libraries.  The build process of OpenSSL generates the | ||||
|    libeay32.dll and ssleay32.dll files in the out32dll subdirectory in | ||||
|    the OpenSSL home directory.  OpenSSL static libraries (libeay32.lib, | ||||
|    ssleay32.lib, RSAglue.lib) are created in the out32 subdirectory. | ||||
|  | ||||
|    Before running nmake define the OPENSSL_PATH environment variable with | ||||
|    the root/base directory of OpenSSL, for example: | ||||
|  | ||||
|      set OPENSSL_PATH=c:\openssl-0.9.7d | ||||
|  | ||||
|    Then run 'nmake vc-ssl' or 'nmake vc-ssl-dll' in curl's root | ||||
|    directory.  'nmake vc-ssl' will create a libcurl static and dynamic | ||||
|    libraries in the lib subdirectory, as well as a statically linked | ||||
|    version of curl.exe in the src subdirectory.  This statically linked | ||||
|    version is a standalone executable not requiring any DLL at | ||||
|    runtime. This make method requires that you have the static OpenSSL | ||||
|    libraries available in OpenSSL's out32 subdirectory. | ||||
|    'nmake vc-ssl-dll' creates the libcurl dynamic library and | ||||
|    links curl.exe against libcurl and OpenSSL dynamically. | ||||
|    This executable requires libcurl.dll and the OpenSSL DLLs | ||||
|    at runtime. | ||||
|    Run 'nmake vc-ssl-zlib' to build with both ssl and zlib support. | ||||
|  | ||||
|    Borland C++ compiler | ||||
|    --------------------- | ||||
|  | ||||
|    compile openssl | ||||
|  | ||||
|    Make sure you include the paths to curl/include and openssl/inc32 in | ||||
|    your bcc32.cnf file | ||||
|  | ||||
|    eg : -I"c:\Bcc55\include;c:\path_curl\include;c:\path_openssl\inc32" | ||||
|  | ||||
|    Check to make sure that all of the sources listed in lib/Makefile.b32 | ||||
|    are present in the /path_to_curl/lib directory. (Check the src | ||||
|    directory for missing ones.) | ||||
|  | ||||
|    Make sure the environment variable "BCCDIR" is set to the install | ||||
|    location for the compiler eg : c:\Borland\BCC55 | ||||
|  | ||||
|    command line: | ||||
|    make -f /path_to_curl/lib/Makefile-ssl.b32 | ||||
|  | ||||
|    compile simplessl.c with appropriate links | ||||
|  | ||||
|    c:\curl\docs\examples\> bcc32 -L c:\path_to_curl\lib\libcurl.lib | ||||
|                                  -L c:\borland\bcc55\lib\psdk\ws2_32.lib | ||||
|                                  -L c:\openssl\out32\libeay32.lib | ||||
|                                  -L c:\openssl\out32\ssleay32.lib | ||||
|                                  simplessl.c | ||||
|  | ||||
|  | ||||
|    With SSL: | ||||
|    MSVC IDE | ||||
|    -------- | ||||
|  | ||||
|       MingW32 (GCC-2.95) style | ||||
|       ------------------------ | ||||
|         Run the 'mingw32.bat' file to get the proper environment variables | ||||
|         set, then run 'make mingw32-ssl' in the root dir. | ||||
|    If you use VC++, Borland or similar compilers. Include all lib source | ||||
|    files in a static lib "project" (all .c and .h files that is). | ||||
|    (you should name it libcurl or similar) | ||||
|  | ||||
|         If you have any problems linking libraries or finding header files, be | ||||
|         sure to look at the provided "Makefile.m32" files for the proper | ||||
|         paths, and adjust as necessary. | ||||
|    Make the sources in the src/ drawer be a "win32 console application" | ||||
|    project. Name it curl. | ||||
|  | ||||
|       Cygwin style | ||||
|       ------------ | ||||
|         Haven't done, nor got any reports on how to do. It should although be | ||||
|         identical to the unix setup for the same purpose. See above. | ||||
|  | ||||
|       Microsoft command line style | ||||
|       ---------------------------- | ||||
|  | ||||
|         Run the 'vcvars32.bat' file to get a proper environment. The | ||||
|         vcvars32.bat file is part of the Microsoft development environment and | ||||
|         you may find it in 'C:\Program Files\Microsoft Visual Studio\vc98\bin' | ||||
|         provided that you installed Visual C/C++ 6 in the default directory. | ||||
|  | ||||
|         Then run 'nmake vc' in curl's root directory. | ||||
|  | ||||
|         If you want to compile with zlib support, you will need to build | ||||
|         zlib (http://www.gzip.org/zlib/) as well. Please read the zlib | ||||
|         documentation on how to compile zlib. Define the ZLIB_PATH environment | ||||
|         variable to the location of zlib.h and zlib.lib, for example: | ||||
|  | ||||
|           set ZLIB_PATH=c:\zlib-1.2.1 | ||||
|  | ||||
|         Then run 'nmake vc-zlib' in curl's root directory. | ||||
|  | ||||
|         If you want to compile with SSL support you need the OpenSSL package. | ||||
|         Please read the OpenSSL documentation on how to compile and install | ||||
|         the OpenSSL libraries.  The build process of OpenSSL generates the | ||||
|         libeay32.dll and ssleay32.dll files in the out32dll subdirectory in | ||||
|         the OpenSSL home directory.  OpenSSL static libraries (libeay32.lib, | ||||
|         ssleay32.lib, RSAglue.lib) are created in the out32 subdirectory. | ||||
|  | ||||
|         Before running nmake define the OPENSSL_PATH environment variable with | ||||
|         the root/base directory of OpenSSL, for example: | ||||
|  | ||||
|           set OPENSSL_PATH=c:\openssl-0.9.7d | ||||
|  | ||||
|         Then run 'nmake vc-ssl' or 'nmake vc-ssl-dll' in curl's root | ||||
|         directory.  'nmake vc-ssl' will create a libcurl static and dynamic | ||||
|         libraries in the lib subdirectory, as well as a statically linked | ||||
|         version of curl.exe in the src subdirectory.  This statically linked | ||||
|         version is a standalone executable not requiring any DLL at | ||||
|         runtime. This make method requires that you have the static OpenSSL | ||||
|         libraries available in OpenSSL's out32 subdirectory. | ||||
|         'nmake vc-ssl-dll' creates the libcurl dynamic library and | ||||
|         links curl.exe against libcurl and OpenSSL dynamically. | ||||
|         This executable requires libcurl.dll and the OpenSSL DLLs | ||||
|         at runtime. | ||||
|         Run 'nmake vc-ssl-zlib' to build with both ssl and zlib support. | ||||
|  | ||||
|       Microsoft / Borland style | ||||
|       ------------------------- | ||||
|         If you have OpenSSL, and want curl to take advantage of it, edit your | ||||
|         project properties to use the SSL include path, link with the SSL libs | ||||
|         and define the USE_SSLEAY symbol. | ||||
|  | ||||
|       Using Borland C++ compiler version 5.5.1 (available as free download | ||||
|       from Borland's site) | ||||
|       --------------------------------------------------------------------- | ||||
|  | ||||
|         compile openssl | ||||
|  | ||||
|         Make sure you include the paths to curl/include and openssl/inc32 in | ||||
|         your bcc32.cnf file | ||||
|    For VC++ 6, there's an included Makefile.vc6 that should be possible | ||||
|    to use out-of-the-box. | ||||
|  | ||||
|  | ||||
|         eg : -I"c:\Bcc55\include;c:\path_curl\include;c:\path_openssl\inc32" | ||||
|    Disabling Specific Protocols in Win32 builds | ||||
|    -------------------------------------------- | ||||
|  | ||||
|         Check to make sure that all of the sources listed in lib/Makefile.b32 | ||||
|         are present in the /path_to_curl/lib directory. (Check the src | ||||
|         directory for missing ones.) | ||||
|    The configure utility, unfortunately, is not available for the Windows | ||||
|    environment, therefore, you cannot use the various disable-protocol | ||||
|    options of the configure utility on this platform. | ||||
|  | ||||
|         Make sure the environment variable "BCCDIR" is set to the install | ||||
|         location for the compiler eg : c:\Borland\BCC55 | ||||
|    However, you can use the following defines to disable specific | ||||
|    protocols: | ||||
|  | ||||
|         command line: | ||||
|         make -f /path_to_curl/lib/Makefile-ssl.b32 | ||||
|    HTTP_ONLY             disables all protocols except HTTP | ||||
|    CURL_DISABLE_FTP      disables FTP | ||||
|    CURL_DISABLE_LDAP     disables LDAP | ||||
|    CURL_DISABLE_TELNET   disables TELNET | ||||
|    CURL_DISABLE_DICT     disables DICT | ||||
|    CURL_DISABLE_FILE     disables FILE | ||||
|  | ||||
|         compile simplessl.c with appropriate links | ||||
|    If you want to set any of these defines you have the following | ||||
|    possibilities: | ||||
|  | ||||
|         c:\curl\docs\examples\> bcc32 -L c:\path_to_curl\lib\libcurl.lib | ||||
|                                       -L c:\borland\bcc55\lib\psdk\ws2_32.lib | ||||
|                                       -L c:\openssl\out32\libeay32.lib | ||||
|                                       -L c:\openssl\out32\ssleay32.lib | ||||
|                                       simplessl.c | ||||
|  | ||||
|    Disabling Specific Protocols: | ||||
|  | ||||
|       The configure utility, unfortunately, is not available for the Windows | ||||
|       environment, therefore, you cannot use the various disable-protocol | ||||
|       options of the configure utility on this platform. | ||||
|  | ||||
|       However, you can use the following defines to disable specific | ||||
|       protocols: | ||||
|  | ||||
|       HTTP_ONLY             disables all protocols except HTTP | ||||
|       CURL_DISABLE_FTP      disables FTP | ||||
|       CURL_DISABLE_LDAP     disables LDAP | ||||
|       CURL_DISABLE_TELNET   disables TELNET | ||||
|       CURL_DISABLE_DICT     disables DICT | ||||
|       CURL_DISABLE_FILE     disables FILE | ||||
|       CURL_DISABLE_GOPHER   disables GOPHER | ||||
|  | ||||
|       If you want to set any of these defines you have the following | ||||
|       possibilities: | ||||
|  | ||||
|       - Modify lib/setup.h | ||||
|       - Modify lib/Makefile.vc6 | ||||
|       - Add defines to Project/Settings/C/C++/General/Preprocessor Definitions | ||||
|         in the curllib.dsw/curllib.dsp Visual C++ 6 IDE project. | ||||
|    - Modify lib/setup.h | ||||
|    - Modify lib/Makefile.vc6 | ||||
|    - Add defines to Project/Settings/C/C++/General/Preprocessor Definitions | ||||
|      in the curllib.dsw/curllib.dsp Visual C++ 6 IDE project. | ||||
|  | ||||
|  | ||||
|    Important (with SSL or not): | ||||
|       When building an application that uses the static libcurl library, you | ||||
|       must add '-DCURL_STATICLIB' to your CFLAGS.  Otherwise the linker will | ||||
|       look for dynamic import symbols. | ||||
|    Important static libcurl usage note | ||||
|    ----------------------------------- | ||||
|  | ||||
|    When building an application that uses the static libcurl library, you must | ||||
|    add '-DCURL_STATICLIB' to your CFLAGS.  Otherwise the linker will look for | ||||
|    dynamic import symbols. | ||||
|  | ||||
|  | ||||
| IBM OS/2 | ||||
| @@ -462,21 +440,19 @@ NetWare | ||||
|    - optional zlib sources (at the moment only dynamic linking with zlib.imp); | ||||
|      sources with NetWare Makefile can be obtained from: | ||||
|      http://www.gknw.com/mirror/zlib/ | ||||
|    - optional OpenSSL sources (version 0.9.8 or later which builds with BSD); | ||||
|  | ||||
|    Set a search path to your compiler, linker and tools; if you want to have | ||||
|    zlib support then set the environment var ZLIB_PATH pointing to your zlib | ||||
|    sources, on Linux make sure the var OSTYPE contains the string 'linux'; | ||||
|    and finally type 'make netware' from the top source directory... | ||||
|    I found on some Linux systems (RH9) that OS detection didnlt work although | ||||
|    Set a search path to your compiler, linker and tools; on Linux make | ||||
|    sure that the var OSTYPE contains the string 'linux'; and then type | ||||
|    'make netware' from the top source directory; other tagets available | ||||
|    are 'netware-ssl', 'netware-ssl-zlib', 'netware-zlib' and 'netware-ares'; | ||||
|    if you need other combinations you can control the build with the | ||||
|    environment variables WITH_SSL, WITH_ZLIB, WITH_ARES and ENABLE_IPV6. | ||||
|    I found on some Linux systems (RH9) that OS detection didnt work although | ||||
|    a 'set | grep OSTYPE' shows the var present and set; I simply overwrote it | ||||
|    with 'OSTYPE=linux-rh9-gnu' and the detection in the Makefile worked...; | ||||
|    other options are currently not supported, although partly prepared. | ||||
|    The Ares lib builds arlready fine, and both test tools work fine at least | ||||
|    when build with CodeWarrior...; don't know yet why they fail when build with | ||||
|    gcc though; if you want to compile with Ares support then set an env var | ||||
|    WITH_ARES=1; I've not tested yet including libares into curl. | ||||
|    with 'OSTYPE=linux-rh9-gnu' and the detection in the Makefile worked... | ||||
|    Any help in testing appreciated! | ||||
|    Builds automatically created 4 times a day from current CVS are here: | ||||
|    Builds automatically created 8 times a day from current CVS are here: | ||||
|    http://www.gknw.com/mirror/curl/autobuilds/ | ||||
|    the status of these builds can be viewed at the autobuild table: | ||||
|    http://curl.haxx.se/auto/ | ||||
| @@ -588,7 +564,7 @@ PORTS | ||||
|         - Sparc Solaris 2.4, 2.5, 2.5.1, 2.6, 7, 8, 9, 10 | ||||
|         - Sparc SunOS 4.1.X | ||||
|         - StrongARM (and other ARM) RISC OS 3.1, 4.02 | ||||
|         - StrongARM Linux 2.4 | ||||
|         - StrongARM/ARM7/ARM9 Linux 2.4, 2.6 | ||||
|         - StrongARM NetBSD 1.4.1 | ||||
|         - Ultrix 4.3a | ||||
|         - i386 BeOS | ||||
|   | ||||
							
								
								
									
										302
									
								
								docs/INSTALL.devcpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										302
									
								
								docs/INSTALL.devcpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,302 @@ | ||||
| DevCpp-Mingw Install & Compilation                                   Sept 2005 | ||||
| ================================== | ||||
|  | ||||
| Reference Emails available at curl@haxx.se:  | ||||
|  | ||||
|   Libcurl Install and Use Issues | ||||
|   Awaiting an Answer for Win 32 Install  | ||||
|   res = curl_easy_perform(curl); Error | ||||
|   Makefile Issues | ||||
|    | ||||
|  | ||||
| Having previously done a thorough review of what was available that met my | ||||
| requirements under GPL, I settled for Libcurl as the software of choice for | ||||
| many reasons not the least of which was the support. | ||||
|  | ||||
| Background | ||||
| ---------- | ||||
|  | ||||
| This quest started when I innocently tried to incorporate the libcurl library | ||||
| into my simple source code. I figured that a few easy steps would accomplish | ||||
| this without major headaches. I had no idea that I would be facing an almost | ||||
| insurmountable challenge. | ||||
|  | ||||
| The main problem lies in two areas. First the bulk of support for libcurl | ||||
| exists for a Unix/linux command line environments. This is of little help when | ||||
| it comes to Windows O/S. | ||||
|  | ||||
| Secondly the help that does exist for the Windows O/S focused around mingw | ||||
| thru a command line argument environment. | ||||
|  | ||||
| You may ask "Why is this a problem?" | ||||
|  | ||||
| I'm using a Windows O/S with DevCpp. For those of you who are unfamiliar with | ||||
| DevCpp, it is a window shell GUI that replaces the command line environment | ||||
| for gcc. A definite improvement that I am unwilling to give up. However using | ||||
| DevCpp presented its own set of issues. Inadvertently I also made some | ||||
| careless errors such as compiling the 7.14 version of Makefile with an older | ||||
| version of source code. Thanks to Dan Fandrich for picking this up. | ||||
|  | ||||
| I did eventually with the help of Daniel, Phillipe and others manage to | ||||
| implement successfully (the only mingw available version) | ||||
| curl-7.13.0-win32-ssl-devel-mingw32 into the DevCpp environment. Only the | ||||
| dynamic libcurl.dll libcurldll.a libraries worked. The static library which I | ||||
| was interested in did not. Furthermore when I tried to implement one of the | ||||
| examples included with the curl package (get info.c) it caused the executable | ||||
| to crash. Tracing the bug I found it in the code and function res = | ||||
| curl_easy_perform(curl);. | ||||
|  | ||||
| At this point I had to make a choice as to whether invest my limited | ||||
| time-energy resource to fixing the bug or to compile the new version | ||||
| available. After searching the archives I found a very similar or the same bug | ||||
| reported from version 7.12x on. Daniel did inform me that he thought that this | ||||
| bug had been fixed with the latest version. So I proceeded to compile the | ||||
| latest SSL version where I faced other challenges. | ||||
|  | ||||
| In order to make this process unremarkable for others using the same | ||||
| environment I decided to document the process so that others will find it | ||||
| routine. It would be a shame if newbies could not implement this excellent | ||||
| package for their use. | ||||
|  | ||||
| I would like to thank the many others in this forum and in the DevCpp forum | ||||
| for their help. Without your help I may either have given up or it would have | ||||
| taken me many times longer to achieve success. | ||||
|  | ||||
| The Cookbook Approach | ||||
| --------------------- | ||||
|  | ||||
| This discussion will be confined to a SSL static library compilation and | ||||
| installation. Limited mention and comments will be inserted where appropriate | ||||
| to help with non-SSL, dynamic libraries and executables. | ||||
|  | ||||
|  | ||||
|    Using Makefile from DevCpp to compile Libcurl libraries | ||||
|  | ||||
| Preamble | ||||
| -------- | ||||
|  | ||||
| Using the latest version release - curl-7.14.0.tar.gz. Curl source code is | ||||
| platform independent. This simply means that the source code can be compiled | ||||
| for any Operating System (Linux/Unix Windows etc. and variations of thereof). | ||||
|  | ||||
| The first thing to note is that inside curl-7.14.0 you will find two folders | ||||
| lib and src. Both contain Makefile.m32 (required for win mingw library or exe | ||||
| compilation) files which are different. The main difference between these two | ||||
| folders and the makefiles is that the src folder contents are used to compile | ||||
| an executable file(curl.exe) while the lib folder contents are used to compile | ||||
| a static (libcurl.a) and dynamic (libcurl.dll & libcurldll.a) file that can be | ||||
| used to compile libcurl with your own source code so that one can use and | ||||
| access all libcurl functions. | ||||
|  | ||||
| Before we start please make sure that DevCpp is installed properly. In | ||||
| particular make sure you have no spaces in the name of any of the directories | ||||
| and subdirectories where DevCpp is installed. Failure to comply with the | ||||
| install instructions may produce erratic behaviour in DevCpp. For further info | ||||
| check the following sites | ||||
|  | ||||
| http://aditsu.freeunixhost.com/dev-cpp-faq.html | ||||
| http://sourceforge.net/forum/message.php?msg_id=3252213 | ||||
|  | ||||
| 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; | ||||
| just substitute the src folder makefile in its stead. | ||||
|  | ||||
| First use a text processor Notepad, or your own favourite text processor. To | ||||
| engage your favourite text processor, select Makefile.m32 click once with your | ||||
| mouse on file icon; icon turns blue, press the shift key and right-click on | ||||
| mouse, menu appears select "Open with", select your favourite text processor. | ||||
|  | ||||
| Next read the contents of Makefile.m32. It includes instructions on its use. | ||||
|  | ||||
| Method I - DOS Command Line | ||||
| --------------------------- | ||||
|   | ||||
| Note - The only reason I have included this method is that Method II which is | ||||
| the preferred method for compiling does not allow for the setting of option | ||||
| switches (e.g. SSL = 1 or SSL =0). At least that's what they tell me at the | ||||
| Dev-Cpp forum. | ||||
|  | ||||
| 1 - Make a copy of (D:\Dev-Cpp\bin) bin folder and name it "bin Original" | ||||
| place it in the Dev-Cpp installed directory (D:\Dev-Cpp\ for this example) | ||||
|  | ||||
| 2 - Copy the entire contents of the LIB folder of curl-7.14.0.tar.gz or zip | ||||
| version into the bin folder above (D:\Dev-Cpp\bin). The reason being is that | ||||
| the make.exe file resides in this folder. Make.exe will use - Makefile.m32, | ||||
| Makefile.inc, and the source code included in the lib folder to compile the | ||||
| source code. There is a PATH issue with make.exe that remains unresolved at | ||||
| least for me. Unless the entire source code to be compiled is placed entirely | ||||
| within the directory of make.exe an error message will be generated - "file | ||||
| xxxx.yyy not available". | ||||
|  | ||||
| 3- Go to Dev-Cpp\bin and double click on make .exe. You will see a DOS window | ||||
| quickly pop up and close very quickly. Not to worry! Please do not skip this | ||||
| step. | ||||
|  | ||||
| 4- Click on the start button\Programs\MS-DOS Prompt.Once the DOS Window is up | ||||
| Type the disk drive letter (e.g. E: ) engage the enter button. The path should | ||||
| automatically take you to the directory of the make.exe file. | ||||
|  | ||||
| 5- To compile the source code simply type at the DOS prompt make -f | ||||
| Makefile.m32 as per instructions contained in the Makefile.m32 file (use any | ||||
| text processor to read instructions). I don't believe that this makefile | ||||
| allows for the option of non SSL. Ignore any warnings. | ||||
|  | ||||
| 6- Collect and make copies of libcurl.a, libcurl.dll, libcurldll.a and any *.o | ||||
| compilations you might need in another directory outside of the bin directory | ||||
| as you will need this files shortly to set up libcurl for use with | ||||
| Dev-cpp. For most apps *.o is not required. Later on we will show what to do | ||||
| with these files. | ||||
|  | ||||
| 7- You are finished but before closing we need to do cleanup - erase the bin | ||||
| folder and rename the "bin Original" folder created in step 1 to bin. | ||||
|  | ||||
| Note to compile a curl executable the process is probably similar but instead | ||||
| of using the LIB folder contents use the SRC folder contents and Makefiles in | ||||
| curl-7.14.0.tar.gz. File directories relative placements must be respected for | ||||
| compiling to take place successfully. This may not be possible with the PATH | ||||
| problem that make.exe experiences. If anyone has solved this PATH issue and | ||||
| please make sure it actually works on Win 9x/2000/XP before letting me | ||||
| know. Then please let me or Daniel in on the solution so that it can be | ||||
| included with these instructions. Thanks. | ||||
|  | ||||
| or | ||||
|  | ||||
| Method II - Dev-Cpp GUI | ||||
| ----------------------- | ||||
|  | ||||
| 1- Copy the entire contents of the LIB folder of curl-7.14.0.tar.gz or zip | ||||
| version into any folder outside of (Dev-Cpp\bin). | ||||
|  | ||||
| 2- Drop the File/New/click on Project. | ||||
|  | ||||
| 3- New Project Dialogue box appears. Double click on the Static Library. | ||||
|  | ||||
| 4- Create Project Dialogue box appears. Select the LIB folder location to | ||||
| place and locate your Project File Name. Placing the Project File Name | ||||
| elsewhere may cause problems (PATH issue problem again). | ||||
|  | ||||
| 5- Drop down the Project/Project Options. Project Options Dialogue box | ||||
| appears. | ||||
|  | ||||
| 6- Select the Makefile tab in the Project Options Dialogue Box. Check Box - | ||||
| Use Custom Makefile. Click on the Folder icon at the extreme right of the | ||||
| Check Box. Select Makefile.m32 in the folder wherever you have placed the | ||||
| contents of the LIB Folder. Press OK and close the Dialogue Box. | ||||
|  | ||||
| 7- Drop the Menu Project/Click on Add to Project. Open File Dialogue Box | ||||
| appears.  The Dialogue Box should open in the folder wherever you have placed | ||||
| the contents of the LIB Folder. If not go there. | ||||
|  | ||||
| 8- Select Crtl-A to select all files in the LIB folder. Click on open to add | ||||
| files and close box. Wait till all files are added. This may take 30 seconds | ||||
| or longer. | ||||
|  | ||||
| 9- Drop the Menu Execute/Click on Compile.  | ||||
|  | ||||
| 10- That's it. | ||||
|  | ||||
|  | ||||
|    The following steps must be completed if Curl is to work properly | ||||
|    ================================================================= | ||||
|  | ||||
| LIB folder inclusions (*.a placement) | ||||
| ------------------------------------- | ||||
|  | ||||
| 1- Refer to Method I - DOS Command Line point # 6 Take libcurl.a, libcurldll.a | ||||
| and install it in the directory C( or whichever drive Dev is installed) | ||||
| :\Dev-Cpp\lib. | ||||
|  | ||||
|  | ||||
| Include Folder | ||||
| -------------- | ||||
|  | ||||
| 1- Create a new folder by the name of curl (do not change the name curl to | ||||
| some other name as it will cause major issues) in the directory | ||||
| C:\Dev-Cpp\include. | ||||
|  | ||||
| 2- Copy the entire contents of the curl folder of curl-7.14.0.tar.gz or zip | ||||
|  version into the newly created curl directory - C:\Dev-Cpp\include\curl. | ||||
|  | ||||
| Links To Include And Lib Folder | ||||
| ------------------------------- | ||||
|  | ||||
| 1- Drop the Menu - Tools\Compiler Options\Directories\Libraries. Make sure | ||||
| that C( or whichever drive Dev is installed):\DEV-CPP\lib is included. | ||||
|  | ||||
| 2- Next select the Menu - Tools\Compiler Options\Directories\C Includes. Make | ||||
| sure that C:\DEV-CPP\include and C:\Dev-Cpp\include\curl are included. | ||||
|  | ||||
| 3- Next select the Menu - Tools\Compiler Options\Directories\C++ | ||||
| Includes. Make sure that C:\DEV-CPP\include and C:\Dev-Cpp\include\curl are | ||||
| included. | ||||
|  | ||||
| Linker Links | ||||
| ------------ | ||||
|  | ||||
| 1- Drop the Menu - Tools\Compiler Options\Directories\Compiler. | ||||
|  | ||||
| 2- Make sure that the box "Add these commands to the linker command line" is | ||||
| checked. | ||||
|  | ||||
| 3- Include in the white space immediately below the box referred in 2 -lcurl | ||||
| -lws2_32 -lwinmm. | ||||
|  | ||||
| SSL Files | ||||
| --------- | ||||
|  | ||||
| 1- Get the latest openSSL (as of time of this writing) | ||||
| openssl-0.9.7e-win32-bin.zip for the minimalist package of the openssl-0.9.7e | ||||
| binaries ported to MS Windows 95/98/NT/XP using the MingW32/GCC-3.1 | ||||
| development environment. The file may be downloaded at | ||||
| http://curl.haxx.se/download/. | ||||
|  | ||||
| 2- Open the above zip file. You will find two files - SDL.dll, | ||||
| SDL_mixer.dll. Install them in the directory C:\WINDOWS\SYSTEM32 for Win 9x | ||||
| users and c:\winnt\system32 for NT-family users. | ||||
|  | ||||
| Multithreading Files | ||||
| -------------------- | ||||
|  | ||||
| To be completed | ||||
|  | ||||
| #define | ||||
| ------- | ||||
|  | ||||
| 1- Make sure that your program includes the following - #define CURL_STATICLIB | ||||
| must be declared FIRST before any other define functions may be | ||||
| added. Otherwise you may experience link errors. | ||||
|  | ||||
| 2- Don't forget to include   #include "curl/curl.h". | ||||
|  | ||||
| e.g. | ||||
|     #define CURL_STATICLIB  | ||||
| #include <windows.h> | ||||
|     #include "curl/curl.h" | ||||
| #include <fstream> | ||||
| #include <iostream> | ||||
| #include <vector> | ||||
| etc... | ||||
|  | ||||
|  | ||||
| Static or Dynamic Library | ||||
| ------------------------- | ||||
|  | ||||
| The above steps apply for the use by a static library. Should you choose to | ||||
| use a dynamic library you will be required to perform these additional steps. | ||||
|  | ||||
| 1- Refer to Method I - DOS Command Line point # 6. Install libcurl.dll in the | ||||
| directory C:\WINDOWS\SYSTEM32 for Win 9x users and c:\winnt\system32 for | ||||
| NT-family users. | ||||
|  | ||||
| 2- Refer to Linker Links point 3 - Replace -lcurl with -lcurldll. | ||||
|  | ||||
| Voila you're done. | ||||
|  | ||||
| The non-SSL static Library build may not be possible to use at least as of the | ||||
| time of this writing - v7.14. Check reference emails - Phillipe and I found it | ||||
| impossible to fully compile as certain files were missing for linking. No big | ||||
| loss as SSL is a major plus. | ||||
|  | ||||
| Hope this Helps | ||||
|  | ||||
| Tom | ||||
| @@ -3,11 +3,52 @@ 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 | ||||
| may have been fixed since this was written! | ||||
|  | ||||
| 32. (At least on Windows) If libcurl is built with c-ares and there's no DNS | ||||
|   server configured in the system, the ares_init() call fails and thus | ||||
|   curl_easy_init() fails as well. This causes weird effects for people who use | ||||
|   numerical IP addresses only. | ||||
|  | ||||
| 31. "curl-config --libs" will include details set in LDFLAGS when configure is | ||||
|   run that might be needed only for building libcurl. Similarly, it might | ||||
|   include options that perhaps aren't suitable both for static and dynamic | ||||
|   linking. Further, curl-config --cflags suffers from the same effects with | ||||
|   CFLAGS/CPPFLAGS. | ||||
|  | ||||
| 30. You need to use -g to the command line tool in order to use RFC2732-style | ||||
|   IPv6 numerical addresses in URLs. | ||||
|  | ||||
| 29. IPv6 URLs with zone ID is not supported. | ||||
|   http://www.ietf.org/internet-drafts/draft-fenner-literal-zone-02.txt | ||||
|   specifies the use of a plus sign instead of a percent when specifying zone | ||||
|   IDs in URLs to get around the problem of percent signs being | ||||
|   special. According to the reporter, Firefox deals with the URL _with_ a | ||||
|   percent letter (which seems like a blatant URL spec violation). | ||||
|  | ||||
|    See http://curl.haxx.se/bug/view.cgi?id=1371118 | ||||
|  | ||||
| 28. The TFTP code is not portable and will fail on some architectures. | ||||
|  | ||||
| 26. NTLM authentication using SSPI (on Windows) when (lib)curl is running in | ||||
|   "system context" will make it use wrong(?) user name - at least when compared | ||||
|   to what winhttp does. See http://curl.haxx.se/bug/view.cgi?id=1281867 | ||||
|  | ||||
| 25. When doing a CONNECT request with curl it doesn't properly handle if the | ||||
|   proxy closes the connection within the authentication "negotiation phase". | ||||
|   Like if you do HTTPS or similar over a proxy and you use perhaps | ||||
|   --proxy-anyauth. There's work in progress on this problem, and a recent | ||||
|   patch was posted here: http://curl.haxx.se/mail/lib-2005-08/0074.html | ||||
|  | ||||
| 23. We don't support SOCKS for IPv6. We don't support FTPS over a SOCKS proxy. | ||||
|   We don't have any test cases for SOCKS proxy. We probably have even more | ||||
|   bugs and lack of features when a SOCKS proxy is used. And there seem to be a | ||||
|   problem with SOCKS when doing FTP: See | ||||
|   http://curl.haxx.se/bug/view.cgi?id=1371540 | ||||
|  | ||||
| 22. Sending files to a FTP server using curl on VMS, might lead to curl | ||||
|   complaining on "unaligned file size" on completion. The problem is related | ||||
|   to VMS file structures and the perceived file sizes stat() returns. A | ||||
|   possible fix would involve sending a "STRU VMS" command. | ||||
|   http://sourceforge.net/support/tracker.php?aid=1156287 | ||||
|   http://curl.haxx.se/bug/view.cgi?id=1156287 | ||||
|    | ||||
| 21. FTP ASCII transfers do not follow RFC959. They don't convert the data | ||||
|    accordingly (not for sending nor for receiving). RFC 959 section 3.1.1.1 | ||||
| @@ -18,20 +59,9 @@ may have been fixed since this was written! | ||||
|      specification).  The receiver will convert the data from the standard | ||||
|      form to his own internal form. | ||||
|  | ||||
| 20. valgrind errors occur too often when 'make test' is used. It is because | ||||
|   too many third-party libs and tools have problems. When curl is built | ||||
|   without --disable-shared, the testing is done with a front-end script which | ||||
|   makes the valgrind testing include (ba)sh as well and that often causes | ||||
|   valgrind errors. Either we improve the valgrind error scanner a lot to | ||||
|   better identify (lib)curl errors only, or we disable valgrind checking by | ||||
|   default. | ||||
|  | ||||
| 19. FTP 3rd party transfers with the multi interface doesn't work. Test: | ||||
|   define CURL_MULTIEASY, rebuild curl, run test case 230 - 232. | ||||
|  | ||||
| 18. test case 57 has </test> that should be </client> but when corrected, the | ||||
|   test case fails! | ||||
|  | ||||
| 16. FTP URLs passed to curl may contain NUL (0x00) in the RFC 1738 <user>, | ||||
|   <password>, and <fpath> components, encoded as "%00".  The problem is that | ||||
|   curl_unescape does not detect this, but instead returns a shortened C | ||||
| @@ -42,10 +72,6 @@ may have been fixed since this was written! | ||||
|   would not meaningfully support NUL characters within RFC 959 <string>, | ||||
|   anyway (e.g., UNIX pathnames may not contain NUL). | ||||
|  | ||||
| 15. Test case 241 fails on all systems that support IPv6 but that don't have | ||||
|   the host name 'ip6-localhost' in /etc/hosts (or similar) since the test case | ||||
|   uses that host name to test the IPv6 name to address resolver. | ||||
|  | ||||
| 14. Test case 165 might fail on system which has libidn present, but with an | ||||
|   old iconv version (2.1.3 is a known bad version), since it doesn't recognize | ||||
|   the charset when named ISO8859-1. Changing the name to ISO-8859-1 makes the | ||||
| @@ -65,11 +91,12 @@ may have been fixed since this was written! | ||||
| 10. To get HTTP Negotiate authentication to work fine, you need to provide a | ||||
|   (fake) user name (this concerns both curl and the lib) because the code | ||||
|   wrongly only considers authentication if there's a user name provided. | ||||
|   Bug report #1004841. How? http://curl.haxx.se/mail/lib-2004-08/0182.html | ||||
|   http://curl.haxx.se/bug/view.cgi?id=1004841. How? | ||||
|   http://curl.haxx.se/mail/lib-2004-08/0182.html | ||||
|  | ||||
| 9. --limit-rate using -d or -F does not work. This is because the limit logic | ||||
|   is provided by the curl app in its read/write callbacks, and when doing | ||||
|   -d/-F the callbacks aren't used! Bug report #921395. | ||||
|   -d/-F the callbacks aren't used! http://curl.haxx.se/bug/view.cgi?id=921395 | ||||
|  | ||||
| 8. Doing resumed upload over HTTP does not work with '-C -', because curl | ||||
|   doesn't do a HEAD first to get the initial size. This needs to be done | ||||
| @@ -92,8 +119,6 @@ may have been fixed since this was written! | ||||
|   libcurl thinks of it as the *compressed* length. Some explanations are here: | ||||
|   http://curl.haxx.se/mail/lib-2003-06/0146.html | ||||
|  | ||||
| 3. GOPHER transfers seem broken | ||||
|  | ||||
| 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 | ||||
|   | ||||
| @@ -12,12 +12,11 @@ I am not a lawyer and this is not legal advice! | ||||
|  | ||||
| One common dilemma is that GPL[1]-licensed code is not allowed to be linked | ||||
| with code licensed under the Original BSD license (with the announcement | ||||
| clause, unless there's a specified exception in the GPL-licensed module). You | ||||
| may still build your own copies that use them all, but distributing them as | ||||
| binaries would be to violate the GPL license - unless you accompany your | ||||
| license with an exception[2]. This particular problem was addressed when the | ||||
| Modified BSD license was created, which does not have the annoncement clause | ||||
| that collides with GPL. | ||||
| clause). You may still build your own copies that use them all, but | ||||
| distributing them as binaries would be to violate the GPL license - unless you | ||||
| accompany your license with an exception[2]. This particular problem was | ||||
| addressed when the Modified BSD license was created, which does not have the | ||||
| annoncement clause that collides with GPL. | ||||
|  | ||||
| libcurl http://curl.haxx.se/docs/copyright.html | ||||
|  | ||||
| @@ -28,65 +27,76 @@ libcurl http://curl.haxx.se/docs/copyright.html | ||||
|  | ||||
| OpenSSL http://www.openssl.org/source/license.html | ||||
|  | ||||
|         Uses an Original BSD-style license with an announement clause that | ||||
|         makes it "incompatible" with GPL. You are not allowed to ship binaries | ||||
|         that link with OpenSSL that includes GPL code (unless that specific | ||||
|         GPL code includes an exception for OpenSSL - a habit that is growing | ||||
|         more and more common). If OpenSSL's licensing is a problem for you, | ||||
|         consider using GnuTLS instead. | ||||
|         (May be used for SSL/TLS support) Uses an Original BSD-style license | ||||
|         with an announement clause that makes it "incompatible" with GPL. You | ||||
|         are not allowed to ship binaries that link with OpenSSL that includes | ||||
|         GPL code (unless that specific GPL code includes an exception for | ||||
|         OpenSSL - a habit that is growing more and more common). If OpenSSL's | ||||
|         licensing is a problem for you, consider using GnuTLS instead. | ||||
|  | ||||
| GnuTLS  http://www.gnutls.org/ | ||||
|  | ||||
|         Uses the LGPL[3] license. If this is a problem for you, consider using | ||||
|         OpenSSL instead. Also note that GnuTLS itself depends on and uses | ||||
|         other libs (libgcrypt and libgpg-error) and they too are LGPL- or | ||||
|         GPL-licensed. | ||||
|         (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 | ||||
|         GnuTLS itself depends on and uses other libs (libgcrypt and | ||||
|         libgpg-error) and they too are LGPL- or GPL-licensed. | ||||
|  | ||||
| c-ares  http://daniel.haxx.se/projects/c-ares/license.html | ||||
|  | ||||
|         Uses an MIT license that is very liberal and imposes no restrictions | ||||
|         on any other library or part you may link with. | ||||
|         (Used for asynchronous name resolves) Uses an MIT license that is very | ||||
|         liberal and imposes no restrictions on any other library or part you | ||||
|         may link with. | ||||
|  | ||||
| zlib    http://www.gzip.org/zlib/zlib_license.html | ||||
|  | ||||
|         Uses an MIT-style license that shouldn't collide with any other | ||||
|         library. | ||||
|         (Used for compressed Transfer-Encoding support) Uses an MIT-style | ||||
|         license that shouldn't collide with any other library. | ||||
|  | ||||
| krb4 | ||||
|  | ||||
|         While nothing in particular says that a Kerberos4 library must use any | ||||
|         particular license, the one I've tried and used successfully so far | ||||
|         (kth-krb4) is Original BSD-licensed with the announcement clause. Some | ||||
|         of the code in libcurl that is written to deal with Kerberos4 likewise | ||||
|         have such a license. | ||||
|         (kth-krb4) is partly Original BSD-licensed with the announcement | ||||
|         clause. Some of the code in libcurl that is written to deal with | ||||
|         Kerberos4 is Modified BSD-licensed. | ||||
|  | ||||
| GSSAPI | ||||
| MIT Kerberos http://web.mit.edu/kerberos/www/dist/ | ||||
|  | ||||
|         While nothing in particular says that a GSS/Kerberos5 library must use | ||||
|         any particular license, the one I've used (Heimdal) is Original BSD- | ||||
|         licensed with the announcement clause. | ||||
|         (May be used for GSS support) MIT licensed, that shouldn't collide | ||||
|         with any other parts. | ||||
|  | ||||
| Heimdal http://www.pdc.kth.se/heimdal/ | ||||
|  | ||||
|         (May be used for GSS support) Heimdal is Original BSD licensed with | ||||
|         the announcement clause. | ||||
|  | ||||
| GNU GSS http://www.gnu.org/software/gss/ | ||||
|  | ||||
|         (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 | ||||
|         curl to also link and use any Original BSD licensed libraries! | ||||
|  | ||||
| fbopenssl | ||||
|  | ||||
|         Unclear license. Based on its name, I assume that it uses the OpenSSL | ||||
|         license and thus shares the same issues as described for OpenSSL | ||||
|         above. | ||||
|         (Used for SPNEGO support) Unclear license. Based on its name, I assume | ||||
|         that it uses the OpenSSL license and thus shares the same issues as | ||||
|         described for OpenSSL above. | ||||
|  | ||||
| libidn  http://www.gnu.org/licenses/lgpl.html | ||||
|  | ||||
|         Uses the GNU Lesser General Public License. LGPL is a variation of GPL | ||||
|         with slightly less aggressive "copyleft". This license requires more | ||||
|         requirements to be met when distributing binaries, see the license for | ||||
|         details. Also note that if you distribute a binary that includes this | ||||
|         library, you must also include the full LGPL license text. Please | ||||
|         properly point out what parts of the distributed package that the | ||||
|         license addresses. | ||||
|         (Used for IDNA support) Uses the GNU Lesser General Public | ||||
|         License. LGPL is a variation of GPL with slightly less aggressive | ||||
|         "copyleft". This license requires more requirements to be met when | ||||
|         distributing binaries, see the license for details. Also note that if | ||||
|         you distribute a binary that includes this library, you must also | ||||
|         include the full LGPL license text. Please properly point out what | ||||
|         parts of the distributed package that the license addresses. | ||||
|  | ||||
| OpenLDAP http://www.openldap.org/software/release/license.html | ||||
|  | ||||
|         Uses a Modified BSD-style license. Since libcurl uses OpenLDAP as a | ||||
|         shared library only, I have not heard of anyone that ships OpenLDAP | ||||
|         linked with libcurl in an app. | ||||
|         (Used for LDAP support) Uses a Modified BSD-style license. Since | ||||
|         libcurl uses OpenLDAP as a shared library only, I have not heard of | ||||
|         anyone that ships OpenLDAP linked with libcurl in an app. | ||||
|  | ||||
|  | ||||
| [1] = GPL - GNU General Public License: http://www.gnu.org/licenses/gpl.html | ||||
|   | ||||
							
								
								
									
										10
									
								
								docs/MANUAL
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								docs/MANUAL
									
									
									
									
									
								
							| @@ -23,10 +23,6 @@ SIMPLE USAGE | ||||
|  | ||||
|         curl ftp://cool.haxx.se/ | ||||
|  | ||||
|   Get a gopher document from funet's gopher server: | ||||
|  | ||||
|         curl gopher://gopher.funet.fi | ||||
|  | ||||
|   Get the definition of curl from a dictionary: | ||||
|  | ||||
|         curl dict://dict.org/m:curl | ||||
| @@ -94,10 +90,6 @@ USING PASSWORDS | ||||
|  | ||||
|    Probably most commonly used with private certificates, as explained below. | ||||
|  | ||||
|  GOPHER | ||||
|  | ||||
|    Curl features no password support for gopher. | ||||
|  | ||||
| PROXY | ||||
|  | ||||
|  Get an ftp file using a proxy named my-proxy that uses port 888: | ||||
| @@ -748,7 +740,7 @@ ENVIRONMENT VARIABLES | ||||
|  | ||||
|   Curl reads and understands the following environment variables: | ||||
|  | ||||
|         http_proxy, HTTPS_PROXY, FTP_PROXY, GOPHER_PROXY | ||||
|         http_proxy, HTTPS_PROXY, FTP_PROXY | ||||
|  | ||||
|   They should be set for protocol-specific proxies. General proxy should be | ||||
|   set with | ||||
|   | ||||
| @@ -14,10 +14,10 @@ SUBDIRS = examples libcurl | ||||
|  | ||||
| CLEANFILES = $(GENHTMLPAGES) $(PDFPAGES) | ||||
|  | ||||
| EXTRA_DIST = MANUAL BUGS CONTRIBUTE FAQ FEATURES INTERNALS SSLCERTS	\ | ||||
|  README.win32 RESOURCES TODO TheArtOfHttpScripting THANKS VERSIONS	\ | ||||
|  KNOWN_BUGS BINDINGS $(man_MANS) $(HTMLPAGES) HISTORY INSTALL		\ | ||||
|  $(PDFPAGES) LICENSE-MIXING README.netware | ||||
| EXTRA_DIST = MANUAL BUGS CONTRIBUTE FAQ FEATURES INTERNALS SSLCERTS	 \ | ||||
|  README.win32 RESOURCES TODO TheArtOfHttpScripting THANKS VERSIONS	 \ | ||||
|  KNOWN_BUGS BINDINGS $(man_MANS) $(HTMLPAGES) HISTORY INSTALL		 \ | ||||
|  $(PDFPAGES) LICENSE-MIXING README.netware DISTRO-DILEMMA INSTALL.devcpp | ||||
|  | ||||
| MAN2HTML= roffit < $< >$@ | ||||
|  | ||||
|   | ||||
							
								
								
									
										575
									
								
								docs/THANKS
									
									
									
									
									
								
							
							
						
						
									
										575
									
								
								docs/THANKS
									
									
									
									
									
								
							| @@ -4,91 +4,490 @@ | ||||
|  | ||||
|  If you have contributed but are missing here, please let us know! | ||||
|  | ||||
| Alan Pinstein, Albert Chin-A-Young, Albert Choy, Aleksandar Milivojevic, Alex | ||||
| aka WindEagle, Alex Neblett, Alex Suykov, Alexander Kourakos, Alexander | ||||
| Krasnostavsky, Alexander Zhuravlev, Alexis Carvalho, Andi Jahja, Andreas Damm, | ||||
| Andreas Olsson, Andreas Rieke, Andrew Francis, Andrew Fuller, Andr<64>s Garc<72>a, | ||||
| Andy Cedilnik, Andy Serpa, Angus Mackay, Antoine Calando, Anton Kalmykov, | ||||
| Arkadiusz Miskiewicz, Augustus Saunders, Avery Fay, Ben Greear, Benjamin | ||||
| Gerard, Bertrand Demiddelaer, Bjorn Reese, Bj<42>rn Stenberg, Bob Schader, Brad | ||||
| Burdick, Brent Beardsley, Brian Akins, Brian R Duffy, Bruce Mitchener, Bryan | ||||
| Henderson, Bryan Henderson , Bryan Kemp, Caolan McNamara, Casey O'Donnell, | ||||
| Chih-Chung Chang, Chris "Bob Bob", Chris Combes, Chris Gaukroger, Chris | ||||
| Maltby, Christian Kurz, Christian Robottom Reis, Christophe Demory, Christophe | ||||
| Legry, Christopher R. Palmer, Clarence Gardner, Clifford Wolf, Cody Jones, | ||||
| Colin Watson, Colm Buckley, Cory Nelson, Craig Davison, Craig Markwardt, Cris | ||||
| Bailiff, Cyrill Osterwalder, Damien Adant, Dan Becker, Dan C, Dan Fandrich, | ||||
| Dan Torop, Dan Zitter, Daniel at touchtunes, Daniel Stenberg, Dave Dribin, | ||||
| Dave Halbakken, Dave Hamilton, Dave May, David Byron, David Cohen, David | ||||
| Eriksson, David Houlder, David Hull, David J Meyer, David James, David Kimdon, | ||||
| David LeBlanc, David Odin, David Phillips, David Shaw, David Tarendash, David | ||||
| Thiel, Detlef Schmier, Diego Casorran, Dimitris Sarris, Dinar, Dirk | ||||
| Eddelbuettel, Dirk Manske, Dolbneff A.V, Domenico Andreoli, Dominick Meglio, | ||||
| Doug Kaufman, Doug Porter, Douglas E. Wegscheid, Douglas R. Horner, Dustin | ||||
| Boswell, Dylan Ellicott, Dylan Salisbury, Early Ehlinger, Edin Kadribasic, | ||||
| Ellis Pritchard, Emiliano Ida, Enrico Scholz, Enrik Berkhan, Eric Lavigne, | ||||
| Eric Melville, Eric Rautman, Eric Thelin, Eric Vergnaud, Eric Young, Erick | ||||
| Nuwendam, Erwan Legrand, Erwin Authried, Evan Jordan, Fabrizio Ammollo, Fedor | ||||
| Karpelevitch, Felix von Leitner, Florian Schoppmann, Forrest Cahoon, Frank | ||||
| Keeney, Frank Ticheler, Fred New, Fred Noz, Frederic Lepied, Gautam Mani, Gaz | ||||
| Iqbal, Georg Horn, Georg Huettenegger, Gerd v. Egidy, Gerhard Herre, Giaslas | ||||
| Georgios, Gilad, Gilbert Ramirez Jr., Gisle Vanem, Giuseppe Attardi, Giuseppe | ||||
| D'Ambrosio, Glen Nakamura, Glen Scott, Greg Hewgill, Greg Onufer, Grigory | ||||
| Entin, Guenole Bescon, Guillaume Arluison, Gustaf Hui, Gwenole Beauchesne, | ||||
| G<EFBFBD>tz Babin-Ebell, G<>nter Knauf, Hamish Mackenzie, Hanno Kranzhoff, Hans | ||||
| Steegers, Hardeep Singh, Harshal Pradhan, Heikki Korpela, Henrik Storner, | ||||
| Hzhijun, Ian Ford, Ian Gulliver, Ian Wilkes, Ignacio Vazquez-Abrams, Ilguiz | ||||
| Latypov, Ingo Ralf Blum, Ingo Wilken, Jacky Lam, Jacob Meuser, James Bursa, | ||||
| James Clancy, James Cone, James Gallagher, James Griffiths, James MacMillan, | ||||
| Jamie Lokier, Jamie Wilkinson, Jason S. Priebe, Jean-Claude Chauve, Jean-Louis | ||||
| Lemaire, Jean-Marc Ranger, Jean-Philippe Barrette-LaPierre, Jeff Lawson, Jeff | ||||
| Phillips, Jeffrey Pohlmeyer, Jeremy Friesner, Jesper Jensen, Jesse Noller, Jim | ||||
| Drash, Joe Halpin, Joel Chen, Johan Anderson, Johan Nilsson, John Crow, John | ||||
| Janssen, John Lask, John McGowan, Jon Travis, Jon Turner, Jonas Forsman, | ||||
| Jonatan Lander, Jonathan Hseu, Jongki Suwandi, Josh Kapell, Juan F. Codagnone, | ||||
| Juan Ignacio Herv<72>s, Juergen Wilke, Jukka Pihl, Julian Noble, Jun-ichiro | ||||
| itojun Hagino, Jurij Smakov, J<>rg Mueller-Tolk, J<>rn Hartroth, Kai Sommerfeld, | ||||
| Kai-Uwe Rommel, Kang-Jin Lee, Karol Pietrzak, Keith MacDonald, Keith McGuigan, | ||||
| Ken Hirsch, Ken Rastatter, Kevin Fisk, Kevin Roth, Kimmo Kinnunen, Kjell | ||||
| Ericson, Kjetil Jacobsen, Klevtsov Vadim, Kris Kennaway, Krishnendu Majumdar, | ||||
| Kristian K<>hntopp, Kyle Sallee, Lachlan O'Dea, Larry Campbell, Larry Fahnoe, | ||||
| Lars Gustafsson, Lars J. Aas, Lars Nilsson, Lars Torben Wilson, Legoff | ||||
| Vincent, Lehel Bernadt, Len Krause, Linas Vepstas, Ling Thio, Linus Nielsen | ||||
| Feltzing, Loic Dachary, Loren Kirkby, Luca Altea, Luca Alteas, Lucas Adamski, | ||||
| Lukasz Czekierda, Luke Call, Luong Dinh Dung, Maciej W. Rozycki, Marc Boucher, | ||||
| Marcelo Juchem , Marcin Konicki, Marco G. Salvagno, Marcus Webster, Mark | ||||
| Butler, Markus Moeller, Markus Oberhumer, Martijn Koster, Martin C. Martin, | ||||
| Martin Hedenfalk, Marty Kuhrt, Maruko, Massimiliano Ziccardi, Mathias | ||||
| Axelsson, Mats Lidell, Matt Veenstra, Matthew Blain, Matthew Clarke, Maurice | ||||
| Barnum, Mekonikum, Mettgut Jamalla, Michael Benedict, Michael Curtis, Michael | ||||
| Mealling, Michal Bonino, Mihai Ionescu, Mike Bytnar, Mike Dobbs, Miklos | ||||
| Nemeth, Mitz Wark, Mohamed Lrhazi, Mohun Biswas, Moonesamy, Nathan O'Sullivan, | ||||
| Naveen Noel, Neil Dunbar, Neil Spring, Nic Roets, Nick Gimbrone, Nick Humfrey, | ||||
| Nico Baggus, Nicolas Berloquin, Nicolas Croiset, Niels van Tongeren, Nikita | ||||
| Schmidt, nk, Nodak Sodak, Oren Tirosh, P R Schaffner, Patrick Bihan-Faou, | ||||
| Patrick Smith, Paul Harrington, Paul Marquis, Paul Moore, Paul Nolan, Pavel | ||||
| Cenek, Pavel Orehov, Pawel A. Gajda, Pedro Neves, Pete Su, Peter Bray, Peter | ||||
| Forret, Peter Pentchev, Peter Sylvester, Peter Todd, Peter Verhas, Peter | ||||
| Wullinger, Phil Karn, Philip Gladstone, Philippe Hameau, Philippe Raoult, | ||||
| Pierre, Puneet Pawaia, Rafael Sagula, Ralph Beckmann, Ralph Mitchell, Ramana | ||||
| Mokkapati, Randy McMurchy, Reinout van Schouwen, Renaud Chaillat, Renaud | ||||
| Duhaut, Rene Bernhardt, Rene Rebe, Ricardo Cadime, Rich Gray, Richard Archer, | ||||
| Richard Atterer, Richard Bramante, Richard Cooper, Richard Gorton, Richard | ||||
| Prescott, Rick Jones, Rick Richardson, Rob Stanzel, Robert D. Young, Robert | ||||
| Olson, Robert Weaver, Robin Kay, Rodney Simmons, Roland Krikava, Roland | ||||
| Zimmermann, Roman Koifman, Ron Zapp, Rosimildo da Silva, Roy Shan, Rune | ||||
| Kleveland, Ryan Nelson, S. Moonesamy, Salvador D<>vila, Salvatore Sorrentino, | ||||
| Sampo Kellomaki, Samuel D<>az Garc<72>a, Samuel Listopad, Sander Gates, Saul good, | ||||
| Sebastien Willemijns, Sergio Ballestrero, Seshubabu Pasam, Shard, Shawn | ||||
| Poulson, Siddhartha Prakash Jain, Simon Dick, Simon Liu, Spiridonoff A.V, | ||||
| Stadler Stephan, Stefan Ulrich, Stephan Bergmann, Stephen Kick, Stephen More, | ||||
| Sterling Hughes, Steve Green, Steve Lhomme, Steve Marx, Steve Oliphant, Steven | ||||
| Bazyl, Steven G. Johnson, Stoned Elipot, Sven Neuhaus, swalkaus at yahoo.com, | ||||
| S<EFBFBD>bastien Willemijns, T. Bharath, T. Yamada, Thomas Schwinge, Thomas Tonino, | ||||
| Tim Baker, Tim Bartley, Tim Costello, Tim Sneddon, Toby Peterson, Tom Benoist, | ||||
| Tom Lee, Tom Mattison, Tom Moers, Tom Zerucha, Tomas Pospisek, Tomas Szepe, | ||||
| Tomasz Lacki, Tommy Tam, Ton Voon, Tor Arntsen, Torsten Foertsch, Toshiyuki | ||||
| Maezawa, Traian Nicolescu, Troels Walsted Hansen, Troy Engel, Ulrich Zadow, | ||||
| Vincent Bronner, Vincent Penquerc'h, Vincent Sanders, Vojtech Janota, Vojtech | ||||
| Minarik, Walter J. Mack, Wayne Haigh, Werner Koch, Wesley Laxton, Wez Furlong, | ||||
| Wilfredo Sanchez, Wojciech Zwiefka, Yarram Sunil, Zvi Har'El | ||||
| Adrian Schuur | ||||
| Alan Pinstein | ||||
| Albert Chin-A-Young | ||||
| Albert Choy | ||||
| Aleksandar Milivojevic | ||||
| Alex Neblett | ||||
| Alex Suykov | ||||
| Alex aka WindEagle | ||||
| Alexander Kourakos | ||||
| Alexander Krasnostavsky | ||||
| Alexander Lazic | ||||
| Alexander Zhuravlev | ||||
| Alexis Carvalho | ||||
| Amol Pattekar | ||||
| Andi Jahja | ||||
| Andreas Damm | ||||
| Andreas Olsson | ||||
| Andreas Rieke | ||||
| Andres Garcia | ||||
| Andrew Benham | ||||
| Andrew Bushnell | ||||
| Andrew Francis | ||||
| Andrew Fuller | ||||
| Andr<EFBFBD>s Garc<72>a | ||||
| Andy Cedilnik | ||||
| Andy Serpa | ||||
| Angus Mackay | ||||
| Antoine Calando | ||||
| Anton Kalmykov | ||||
| Arkadiusz Miskiewicz | ||||
| Augustus Saunders | ||||
| Avery Fay | ||||
| Ben Greear | ||||
| Ben Madsen | ||||
| Benjamin Gerard | ||||
| Bertrand Demiddelaer | ||||
| Bjorn Reese | ||||
| Bj<EFBFBD>rn Stenberg | ||||
| Bob Schader | ||||
| Brad Burdick | ||||
| Bradford Bruce | ||||
| Brent Beardsley | ||||
| Brian Akins | ||||
| Brian R Duffy | ||||
| Bruce Mitchener | ||||
| Bryan Henderson | ||||
| Bryan Kemp | ||||
| Caolan McNamara | ||||
| Casey O'Donnell | ||||
| Chih-Chung Chang | ||||
| Chris "Bob Bob" | ||||
| Chris Combes | ||||
| Chris Gaukroger | ||||
| Chris Maltby | ||||
| Christian Kurz | ||||
| Christian Robottom Reis | ||||
| Christophe Demory | ||||
| Christophe Legry | ||||
| Christopher R. Palmer | ||||
| Clarence Gardner | ||||
| Clifford Wolf | ||||
| Cody Jones | ||||
| Colin Watson | ||||
| Colm Buckley | ||||
| Cory Nelson | ||||
| Craig Davison | ||||
| Craig Markwardt | ||||
| Cris Bailiff | ||||
| Cyrill Osterwalder | ||||
| Damien Adant | ||||
| Dan Becker | ||||
| Dan C | ||||
| Dan Fandrich | ||||
| Dan Torop | ||||
| Dan Zitter | ||||
| Daniel Stenberg | ||||
| Daniel at touchtunes | ||||
| Darryl House | ||||
| Dave Dribin | ||||
| Dave Halbakken | ||||
| Dave Hamilton | ||||
| Dave May | ||||
| David Byron | ||||
| David Cohen | ||||
| David Eriksson | ||||
| David Houlder | ||||
| David Hull | ||||
| David J Meyer | ||||
| David James | ||||
| David Kimdon | ||||
| David Lang | ||||
| David LeBlanc | ||||
| David Odin | ||||
| David Phillips | ||||
| David Shaw | ||||
| David Tarendash | ||||
| David Thiel | ||||
| David Yan | ||||
| Detlef Schmier | ||||
| Diego Casorran | ||||
| Dima Barsky | ||||
| Dimitris Sarris | ||||
| Dinar | ||||
| Dirk Eddelbuettel | ||||
| Dirk Manske | ||||
| Dmitry Bartsevich | ||||
| Dolbneff A.V | ||||
| Domenico Andreoli | ||||
| Dominick Meglio | ||||
| Doug Kaufman | ||||
| Doug Porter | ||||
| Douglas E. Wegscheid | ||||
| Douglas R. Horner | ||||
| Dov Murik | ||||
| Duane Cathey | ||||
| Dustin Boswell | ||||
| Dylan Ellicott | ||||
| Dylan Salisbury | ||||
| Early Ehlinger | ||||
| Edin Kadribasic | ||||
| Ellis Pritchard | ||||
| Emiliano Ida | ||||
| Enrico Scholz | ||||
| Enrik Berkhan | ||||
| Eric Cooper | ||||
| Eric Lavigne | ||||
| Eric Melville | ||||
| Eric Rautman | ||||
| Eric Thelin | ||||
| Eric Vergnaud | ||||
| Eric Young | ||||
| Erick Nuwendam | ||||
| Erwan Legrand | ||||
| Erwin Authried | ||||
| Eugene Kotlyarov | ||||
| Evan Jordan | ||||
| Fabrizio Ammollo | ||||
| Fedor Karpelevitch | ||||
| Felix von Leitner | ||||
| Florian Schoppmann | ||||
| Forrest Cahoon | ||||
| Frank Keeney | ||||
| Frank Ticheler | ||||
| Fred New | ||||
| Fred Noz | ||||
| Frederic Lepied | ||||
| Gautam Mani | ||||
| Gaz Iqbal | ||||
| Georg Horn | ||||
| Georg Huettenegger | ||||
| Georg Wicherski | ||||
| Gerd v. Egidy | ||||
| Gerhard Herre | ||||
| Giaslas Georgios | ||||
| Gilad | ||||
| Gilbert Ramirez Jr. | ||||
| Gisle Vanem | ||||
| Giuseppe Attardi | ||||
| Giuseppe D'Ambrosio | ||||
| Glen Nakamura | ||||
| Glen Scott | ||||
| Greg Hewgill | ||||
| Greg Onufer | ||||
| Grigory Entin | ||||
| Guenole Bescon | ||||
| Guillaume Arluison | ||||
| Gustaf Hui | ||||
| Gwenole Beauchesne | ||||
| G<EFBFBD>tz Babin-Ebell | ||||
| G<EFBFBD>nter Knauf | ||||
| Hamish Mackenzie | ||||
| Hanno Kranzhoff | ||||
| Hans Steegers | ||||
| Hardeep Singh | ||||
| Harshal Pradhan | ||||
| Heikki Korpela | ||||
| Henrik Storner | ||||
| Hzhijun | ||||
| Ian Ford | ||||
| Ian Gulliver | ||||
| Ian Wilkes | ||||
| Ignacio Vazquez-Abrams | ||||
| Igor Polyakov | ||||
| Ilguiz Latypov | ||||
| Ingo Ralf Blum | ||||
| Ingo Wilken | ||||
| Jacky Lam | ||||
| Jacob Meuser | ||||
| James Bursa | ||||
| James Clancy | ||||
| James Cone | ||||
| James Gallagher | ||||
| James Griffiths | ||||
| James MacMillan | ||||
| Jamie Lokier | ||||
| Jamie Newton | ||||
| Jamie Wilkinson | ||||
| Jan Kunder | ||||
| Jason S. Priebe | ||||
| Jaz Fresh | ||||
| Jean Jacques Drouin | ||||
| Jean-Claude Chauve | ||||
| Jean-Louis Lemaire | ||||
| Jean-Marc Ranger | ||||
| Jean-Philippe Barrette-LaPierre | ||||
| Jeff Lawson | ||||
| Jeff Phillips | ||||
| Jeff Pohlmeyer | ||||
| Jeffrey Pohlmeyer | ||||
| Jeremy Friesner | ||||
| Jesper Jensen | ||||
| Jesse Noller | ||||
| Jim Drash | ||||
| Joe Halpin | ||||
| Joel Chen | ||||
| Johan Anderson | ||||
| Johan Nilsson | ||||
| John Crow | ||||
| John Janssen | ||||
| John Kelly | ||||
| John Lask | ||||
| John McGowan | ||||
| Jon Grubbs | ||||
| Jon Travis | ||||
| Jon Turner | ||||
| Jonas Forsman | ||||
| Jonatan Lander | ||||
| Jonathan Hseu | ||||
| Jongki Suwandi | ||||
| Josh Kapell | ||||
| Juan F. Codagnone | ||||
| Juan Ignacio Herv<72>s | ||||
| Juergen Wilke | ||||
| Jukka Pihl | ||||
| Julian Noble | ||||
| Jun-ichiro itojun Hagino | ||||
| Jurij Smakov | ||||
| J<EFBFBD>rg Mueller-Tolk | ||||
| J<EFBFBD>rn Hartroth | ||||
| Kai Sommerfeld | ||||
| Kai-Uwe Rommel | ||||
| Kang-Jin Lee | ||||
| Karl Moerder | ||||
| Karol Pietrzak | ||||
| Keith MacDonald | ||||
| Keith McGuigan | ||||
| Ken Hirsch | ||||
| Ken Rastatter | ||||
| Kent Boortz | ||||
| Kevin Fisk | ||||
| Kevin Lussier | ||||
| Kevin Roth | ||||
| Kimmo Kinnunen | ||||
| Kjell Ericson | ||||
| Kjetil Jacobsen | ||||
| Klevtsov Vadim | ||||
| Kris Kennaway | ||||
| Krishnendu Majumdar | ||||
| Kristian K<>hntopp | ||||
| Kyle Sallee | ||||
| Lachlan O'Dea | ||||
| Larry Campbell | ||||
| Larry Fahnoe | ||||
| Lars Gustafsson | ||||
| Lars J. Aas | ||||
| Lars Nilsson | ||||
| Lars Torben Wilson | ||||
| Legoff Vincent | ||||
| Lehel Bernadt | ||||
| Len Krause | ||||
| Linas Vepstas | ||||
| Ling Thio | ||||
| Linus Nielsen Feltzing | ||||
| Loic Dachary | ||||
| Loren Kirkby | ||||
| Luca Altea | ||||
| Luca Alteas | ||||
| Lucas Adamski | ||||
| Lukasz Czekierda | ||||
| Luke Call | ||||
| Luong Dinh Dung | ||||
| Maciej W. Rozycki | ||||
| Marc Boucher | ||||
| Marcelo Juchem  | ||||
| Marcin Konicki | ||||
| Marco G. Salvagno | ||||
| Marcus Webster | ||||
| Mario Schroeder | ||||
| Mark Butler | ||||
| Markus Moeller | ||||
| Markus Oberhumer | ||||
| Martijn Koster | ||||
| Martin C. Martin | ||||
| Martin Hedenfalk | ||||
| Marty Kuhrt | ||||
| Maruko | ||||
| Massimiliano Ziccardi | ||||
| Mathias Axelsson | ||||
| Mats Lidell | ||||
| Matt Veenstra | ||||
| Matthew Blain | ||||
| Matthew Clarke | ||||
| Maurice Barnum | ||||
| Mekonikum | ||||
| Mettgut Jamalla | ||||
| Michael Benedict | ||||
| Michael Curtis | ||||
| Michael Jahn | ||||
| Michael Mealling | ||||
| Michael Wallner | ||||
| Michal Bonino | ||||
| Michal Marek | ||||
| Mihai Ionescu | ||||
| Mike Bytnar | ||||
| Mike Dobbs | ||||
| Miklos Nemeth | ||||
| Mitz Wark | ||||
| Mohamed Lrhazi | ||||
| Mohun Biswas | ||||
| Moonesamy | ||||
| Nathan O'Sullivan | ||||
| Naveen Noel | ||||
| Neil Dunbar | ||||
| Neil Spring | ||||
| Nic Roets | ||||
| Nick Gimbrone | ||||
| Nick Humfrey | ||||
| Nico Baggus | ||||
| Nicolas Berloquin | ||||
| Nicolas Croiset | ||||
| Nicolas Fran<61>ois | ||||
| Niels van Tongeren | ||||
| Nikita Schmidt | ||||
| Nis Jorgensen | ||||
| Nodak Sodak | ||||
| Norbert Novotny | ||||
| Ofer | ||||
| Oren Tirosh | ||||
| P R Schaffner | ||||
| Patrick Bihan-Faou | ||||
| Patrick Smith | ||||
| Paul Harrington | ||||
| Paul Marquis | ||||
| Paul Moore | ||||
| Paul Nolan | ||||
| Pavel Cenek | ||||
| Pavel Orehov | ||||
| Pawel A. Gajda | ||||
| Pedro Neves | ||||
| Pete Su | ||||
| Peter Bray | ||||
| Peter Forret | ||||
| Peter Pentchev | ||||
| Peter Su | ||||
| Peter Sylvester | ||||
| Peter Todd | ||||
| Peter Verhas | ||||
| Peter Wullinger | ||||
| Peteris Krumins | ||||
| Phil Karn | ||||
| Philip Gladstone | ||||
| Philippe Hameau | ||||
| Philippe Raoult | ||||
| Philippe Vaucher | ||||
| Pierre | ||||
| Puneet Pawaia | ||||
| Quagmire | ||||
| Rafael Sagula | ||||
| Ralph Beckmann | ||||
| Ralph Mitchell | ||||
| Ramana Mokkapati | ||||
| Randy McMurchy | ||||
| Reinout van Schouwen | ||||
| Renaud Chaillat | ||||
| Renaud Duhaut | ||||
| Rene Bernhardt | ||||
| Rene Rebe | ||||
| Ricardo Cadime | ||||
| Rich Gray | ||||
| Richard Archer | ||||
| Richard Atterer | ||||
| Richard Bramante | ||||
| Richard Clayton | ||||
| Richard Cooper | ||||
| Richard Gorton | ||||
| Richard Prescott | ||||
| Rick Jones | ||||
| Rick Richardson | ||||
| Rob Stanzel | ||||
| Robert D. Young | ||||
| Robert Olson | ||||
| Robert Weaver | ||||
| Robin Kay | ||||
| Rodney Simmons | ||||
| Roland Krikava | ||||
| Roland Zimmermann | ||||
| Roman Koifman | ||||
| Ron Zapp | ||||
| Rosimildo da Silva | ||||
| Roy Shan | ||||
| Rune Kleveland | ||||
| Ryan Nelson | ||||
| S. Moonesamy | ||||
| Salvador D<>vila | ||||
| Salvatore Sorrentino | ||||
| Sampo Kellomaki | ||||
| Samuel D<>az Garc<72>a | ||||
| Samuel Listopad | ||||
| Sander Gates | ||||
| Saul good | ||||
| Scott Davis | ||||
| Sebastien Willemijns | ||||
| Sergio Ballestrero | ||||
| Seshubabu Pasam | ||||
| Shard | ||||
| Shawn Poulson | ||||
| Shmulik Regev | ||||
| Siddhartha Prakash Jain | ||||
| Simon Dick | ||||
| Simon Josefsson | ||||
| Simon Liu | ||||
| Spiridonoff A.V | ||||
| Stadler Stephan | ||||
| Stefan Esser | ||||
| Stefan Ulrich | ||||
| Stephan Bergmann | ||||
| Stephen Kick | ||||
| Stephen More | ||||
| Sterling Hughes | ||||
| Steve Green | ||||
| Steve Lhomme | ||||
| Steve Marx | ||||
| Steve Oliphant | ||||
| Steven Bazyl | ||||
| Steven G. Johnson | ||||
| Stoned Elipot | ||||
| Sven Neuhaus | ||||
| S<EFBFBD>bastien Willemijns | ||||
| T. Bharath | ||||
| T. Yamada | ||||
| Temprimus | ||||
| Thomas Schwinge | ||||
| Thomas Tonino | ||||
| Tim Baker | ||||
| Tim Bartley | ||||
| Tim Costello | ||||
| Tim Sneddon | ||||
| Toby Peterson | ||||
| Todd Kulesza | ||||
| Tom Benoist | ||||
| Tom Lee | ||||
| Tom Mattison | ||||
| Tom Moers | ||||
| Tom Zerucha | ||||
| Tomas Pospisek | ||||
| Tomas Szepe | ||||
| Tomasz Lacki | ||||
| Tommy Tam | ||||
| Ton Voon | ||||
| Tor Arntsen | ||||
| Torsten Foertsch | ||||
| Toshiyuki Maezawa | ||||
| Traian Nicolescu | ||||
| Troels Walsted Hansen | ||||
| Troy Engel | ||||
| Tupone Alfredo | ||||
| Ulf H<>rnhammar | ||||
| Ulrich Zadow | ||||
| Vilmos Nebehaj | ||||
| Vincent Bronner | ||||
| Vincent Penquerc'h | ||||
| Vincent Sanders | ||||
| Vojtech Janota | ||||
| Vojtech Minarik | ||||
| Walter J. Mack | ||||
| Wayne Haigh | ||||
| Werner Koch | ||||
| Wesley Laxton | ||||
| Wez Furlong | ||||
| Wilfredo Sanchez | ||||
| Wojciech Zwiefka | ||||
| Yang Tse | ||||
| Yarram Sunil | ||||
| Zvi Har'El  | ||||
| nk | ||||
| swalkaus at yahoo.com | ||||
| tommink[at]post.pl | ||||
|   | ||||
							
								
								
									
										64
									
								
								docs/TODO
									
									
									
									
									
								
							
							
						
						
									
										64
									
								
								docs/TODO
									
									
									
									
									
								
							| @@ -31,7 +31,7 @@ TODO | ||||
|  * Introduce a new error code indicating authentication problems (for proxy | ||||
|    CONNECT error 407 for example). This cannot be an error code, we must not | ||||
|    return informational stuff as errors, consider a new info returned by | ||||
|    curl_easy_getinfo() #845941 | ||||
|    curl_easy_getinfo() http://curl.haxx.se/bug/view.cgi?id=845941 | ||||
|  | ||||
|  * Use 'struct lifreq' and SIOCGLIFADDR instead of 'struct ifreq' and | ||||
|    SIOCGIFADDR on newer Solaris versions as they claim the latter is obsolete. | ||||
| @@ -40,6 +40,28 @@ TODO | ||||
|  * Add the following to curl_easy_getinfo(): GET_HTTP_IP, GET_FTP_IP and | ||||
|    GET_FTP_DATA_IP. Return a string with the used IP. Suggested by Alan. | ||||
|  | ||||
|  * Add option that changes the interval in which the progress callback is | ||||
|    called at most. | ||||
|  | ||||
|  * Make libcurl built with c-ares use c-ares' IPv6 abilities. They weren't | ||||
|    present when we first added c-ares support but they have been added since! | ||||
|    When this is done and works, we can actually start considering making c-ares | ||||
|    powered libcurl the default build (which of course would require that we'd | ||||
|    bundle the c-ares source code in the libcurl source code releases). | ||||
|  | ||||
|  * Support CONNECT 407 responses that kill the connection and expect the | ||||
|    client to reconnect to complete the authentication. Currently libcurl | ||||
|    assumes that a proxy connection will be kept alive. | ||||
|  | ||||
|  * Make the curl/*.h headers include the proper system includes based on what | ||||
|    was present at the time when configure was run. Currently, the sys/select.h | ||||
|    header is for example included by curl/multi.h only on specific platforms | ||||
|    we know MUST have it. This is error-prone. We therefore want the header | ||||
|    files to adapt to configure results. Those results must be stored in a new | ||||
|    header and they must use a curl name space, i.e not be HAVE_* prefix (as | ||||
|    that would risk collide with other apps that use libcurl and that runs | ||||
|    configure). | ||||
|  | ||||
|  LIBCURL - multi interface | ||||
|  | ||||
|  * Add a curl_multi_fdset() alternative. this allows apps to avoid the | ||||
| @@ -58,6 +80,17 @@ TODO | ||||
|    ready to accept read data. Today libcurl feeds the data as soon as it is | ||||
|    available for reading, no matter what. | ||||
|  | ||||
|  * Add curl_multi_socket() and family to the multi interface that gets file | ||||
|    descriptors, as an alternative to the curl_multi_fdset(). This is necessary | ||||
|    to allow apps to properly avoid the FD_SETSIZE problem. | ||||
|  | ||||
|  * Make curl_easy_perform() a wrapper-function that simply creates a multi | ||||
|    handle, adds the easy handle to it, runs curl_multi_perform() until the | ||||
|    transfer is done, then detach the easy handle, destroy the multi handle and | ||||
|    return the easy handle's return code. This will thus make everything | ||||
|    internally use and assume the multi interface. The select()-loop should use | ||||
|    curl_multi_socket(). | ||||
|  | ||||
|  DOCUMENTATION | ||||
|  | ||||
|  * More and better | ||||
| @@ -69,7 +102,7 @@ TODO | ||||
|  | ||||
|  * Support GSS/Kerberos 5 for ftp file transfer. This will allow user | ||||
|    authentication and file encryption.  Possible libraries and example clients | ||||
|    are available from MIT or Heimdal. Requsted by Markus Moeller. | ||||
|    are available from MIT or Heimdal. Requested by Markus Moeller. | ||||
|  | ||||
|  * REST fix for servers not behaving well on >2GB requests. This should fail | ||||
|    if the server doesn't set the pointer to the requested index. The tricky | ||||
| @@ -149,6 +182,25 @@ TODO | ||||
|    latter two could be alternatives for those looking to reduce the footprint | ||||
|    of libcurl built with OpenSSL or GnuTLS. | ||||
|  | ||||
|  * Peter Sylvester's patch for SRP on the TLS layer. | ||||
|    Awaits OpenSSL support for this, no need to support this in libcurl before | ||||
|    there's an OpenSSL release that does it. | ||||
|  | ||||
|  * make the configure --with-ssl option first check for OpenSSL and then for | ||||
|    GnuTLS if OpenSSL wasn't detected. | ||||
|  | ||||
|  GnuTLS | ||||
|  | ||||
|  * Get NTLM working using the functions provided by libgcrypt, since GnuTLS | ||||
|    already depends on that to function. Not strictly SSL/TLS related, but | ||||
|    hey... Another option is to get available DES and MD4 source code from the | ||||
|    cryptopp library. They are fine license-wise, but are C++. | ||||
|  | ||||
|  * SSL engine stuff? | ||||
|  | ||||
|  * Work out a common method with Peter Sylvester's OpenSSL-patch for SRP | ||||
|    on the TLS to provide name and password | ||||
|  | ||||
|  LDAP | ||||
|  | ||||
|  * Look over the implementation. The looping will have to "go away" from the | ||||
| @@ -157,12 +209,6 @@ TODO | ||||
|  | ||||
|  NEW PROTOCOLS | ||||
|  | ||||
|  * TFTP - RFC1350 (protocol) and RFC3617 (URI format) | ||||
|  | ||||
|    Dan Fandrich: I wrote a tftp protocol module as part of the I-Boot | ||||
|    bootloader under a BSD-style license with attribution clause | ||||
|    http://download.intrinsyc.com/supported/tools/i-boot-lite/i-boot-lite-1.8/src/libs/net/tftp.c | ||||
|  | ||||
|  * RTSP - RFC2326 (protocol - very HTTP-like, also contains URL description) | ||||
|  | ||||
|  * SFTP/SCP/SSH (no RFCs for protocol nor URI/URL format). An implementation | ||||
| @@ -184,7 +230,7 @@ TODO | ||||
|  * Globbing support for -d and -F, as in 'curl -d "name=foo[0-9]" URL'. | ||||
|    Requested by Dane Jensen and others. This is easily scripted though. | ||||
|  | ||||
|  * Add an option that prevents cURL from overwiting existing local files. When | ||||
|  * Add an option that prevents cURL from overwriting existing local files. When | ||||
|    used, and there already is an existing file with the target file name | ||||
|    (either -O or -o), a number should be appended (and increased if already | ||||
|    existing). So that index.html becomes first index.html.1 and then | ||||
|   | ||||
| @@ -53,10 +53,10 @@ in $prefix/lib and its header files are installed in $prefix/include and so | ||||
| on. The prefix is set with "configure --prefix". | ||||
| .IP "--protocols" | ||||
| Lists what particular protocols the installed libcurl was built to support. At | ||||
| the time of writing, this list may include HTTP, HTTPS, FTP, FTPS, GOPHER, | ||||
| FILE, TELNET, LDAP, DICT. Do not assume any particular order. The protocols | ||||
| will be listed using uppercase and are separated by newlines. There may be | ||||
| none, one or several protocols in the list. (Added in 7.13.0) | ||||
| the time of writing, this list may include HTTP, HTTPS, FTP, FTPS, FILE, | ||||
| TELNET, LDAP, DICT. Do not assume any particular order. The protocols will | ||||
| be listed using uppercase and are separated by newlines. There may be none, | ||||
| one or several protocols in the list. (Added in 7.13.0) | ||||
| .IP "--version" | ||||
| Outputs version information about the installed libcurl. | ||||
| .IP "--vernum" | ||||
| @@ -64,7 +64,7 @@ Outputs version information about the installed libcurl, in numerical mode. | ||||
| This outputs the version number, in hexadecimal, with 8 bits for each part; | ||||
| major, minor, patch. So that libcurl 7.7.4 would appear as 070704 and libcurl | ||||
| 12.13.14 would appear as 0c0d0e... Note that the initial zero might be | ||||
| omitted. | ||||
| omitted. (This option was broken in the 7.15.0 release.) | ||||
| .SH "EXAMPLES" | ||||
| What linker options do I need when I link with libcurl? | ||||
|  | ||||
|   | ||||
							
								
								
									
										256
									
								
								docs/curl.1
									
									
									
									
									
								
							
							
						
						
									
										256
									
								
								docs/curl.1
									
									
									
									
									
								
							| @@ -5,7 +5,7 @@ | ||||
| .\" *                            | (__| |_| |  _ <| |___ | ||||
| .\" *                             \___|\___/|_| \_\_____| | ||||
| .\" * | ||||
| .\" * Copyright (C) 1998 - 2005, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
| .\" * Copyright (C) 1998 - 2006, 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 | ||||
| @@ -21,7 +21,7 @@ | ||||
| .\" * $Id$ | ||||
| .\" ************************************************************************** | ||||
| .\" | ||||
| .TH curl 1 "28 Apr 2005" "Curl 7.14.0" "Curl Manual" | ||||
| .TH curl 1 "21 Feb 2006" "Curl 7.15.2" "Curl Manual" | ||||
| .SH NAME | ||||
| curl \- transfer a URL | ||||
| .SH SYNOPSIS | ||||
| @@ -30,8 +30,8 @@ curl \- transfer a URL | ||||
| .SH DESCRIPTION | ||||
| .B curl | ||||
| is a tool to transfer data from or to a server, using one of the supported | ||||
| protocols (HTTP, HTTPS, FTP, FTPS, GOPHER, DICT, TELNET, LDAP or FILE). The | ||||
| command is designed to work without user interaction. | ||||
| protocols (HTTP, HTTPS, FTP, FTPS, TFTP, DICT, TELNET, LDAP or FILE). | ||||
| The command is designed to work without user interaction. | ||||
|  | ||||
| curl offers a busload of useful tricks like proxy support, user | ||||
| authentication, ftp upload, HTTP post, SSL (https:) connections, cookies, file | ||||
| @@ -64,11 +64,40 @@ several ones next to each other: | ||||
| You can specify any amount of URLs on the command line. They will be fetched | ||||
| in a sequential manner in the specified order. | ||||
|  | ||||
| Since curl 7.15.1 you can also specify step counter for the ranges, so that | ||||
| you can get every Nth number or letter: | ||||
|  | ||||
|  http://www.numericals.com/file[1-100:10].txt | ||||
|  http://www.letters.com/file[a-z:2].txt | ||||
|  | ||||
| If you specify URL without protocol:// prefix, curl will attempt to guess what | ||||
| protocol you might want. It will then default to HTTP but try other protocols | ||||
| based on often-used host name prefixes. For example, for host names starting | ||||
| with "ftp." curl will assume you want to speak FTP. | ||||
|  | ||||
| Curl will attempt to re-use connections for multiple file transfers, so that | ||||
| getting many files from the same server will not do multiple connects / | ||||
| handshakes. This improves speed. Of course this is only done on files | ||||
| specified on a single command line and cannot be used between separate curl | ||||
| invokes. | ||||
| .SH "PROGRESS METER" | ||||
| curl normally displays a progress meter during operations, indicating amount | ||||
| of transfered data, transfer speeds and estimated time left etc. | ||||
|  | ||||
| However, since curl displays data to the terminal by default, if you invoke | ||||
| curl to do an operation and it is about to write data to the terminal, it | ||||
| \fIdisables\fP the progress meter as otherwise it would mess up the output | ||||
| mixing progress meter and response data. | ||||
|  | ||||
| If you want a progress meter for HTTP POST or PUT requests, you need to | ||||
| redirect the response output to a file, using shell redirect (>), -o [file] or | ||||
| similar. | ||||
|  | ||||
| It is not the same case for FTP upload as that operation is not spitting out | ||||
| any response data to the terminal. | ||||
|  | ||||
| If you prefer a progress "bar" instead of the regular meter, \fI-#\fP is your | ||||
| friend. | ||||
| .SH OPTIONS | ||||
| .IP "-a/--append" | ||||
| (FTP) When used in an FTP upload, this will tell curl to append to the target | ||||
| @@ -89,7 +118,7 @@ most secure one the remote site claims it supports. This is done by first | ||||
| doing a request and checking the response-headers, thus inducing an extra | ||||
| network round-trip. This is used instead of setting a specific authentication | ||||
| method, which you can do with \fI--basic\fP, \fI--digest\fP, \fI--ntlm\fP, and | ||||
| \fI--negotiate\fP. (Added in 7.10.6) | ||||
| \fI--negotiate\fP. | ||||
|  | ||||
| Note that using --anyauth is not recommended if you do uploads from stdin, | ||||
| since it may require data to be sent twice and then the client must be able to | ||||
| @@ -129,7 +158,7 @@ If this option is used twice, the second one will disable ASCII usage. | ||||
| (HTTP) Tells curl to use HTTP Basic authentication. This is the default and | ||||
| this option is usually pointless, unless you use it to override a previously | ||||
| set option that sets a different authentication method (such as \fI--ntlm\fP, | ||||
| \fI--digest\fP and \fI--negotiate\fP). (Added in 7.10.6) | ||||
| \fI--digest\fP and \fI--negotiate\fP). | ||||
|  | ||||
| If this option is used several times, the following occurrences make no | ||||
| difference. | ||||
| @@ -187,7 +216,8 @@ To create remote directories when using FTP, try \fI--ftp-create-dirs\fP. | ||||
| .IP "--crlf" | ||||
| (FTP) Convert LF to CRLF in upload. Useful for MVS (OS/390). | ||||
|  | ||||
| If this option is used twice, the second will again disable crlf converting. | ||||
| If this option is used several times, the following occurrences make no | ||||
| difference. | ||||
| .IP "-d/--data <data>" | ||||
| (HTTP) Sends the specified data in a POST request to the HTTP server, in a way | ||||
| that can emulate as if a user has filled in a HTML form and pressed the submit | ||||
| @@ -231,7 +261,7 @@ append data. | ||||
| prevents the password from being sent over the wire in clear text. Use this in | ||||
| combination with the normal \fI-u/--user\fP option to set user name and | ||||
| password. See also \fI--ntlm\fP, \fI--negotiate\fP and \fI--anyauth\fP for | ||||
| related options. (Added in curl 7.10.6) | ||||
| related options. | ||||
|  | ||||
| If this option is used several times, the following occurrences make no | ||||
| difference. | ||||
| @@ -241,7 +271,7 @@ active FTP transfers. Curl will normally always first attempt to use EPRT, | ||||
| then LPRT before using PORT, but with this option, it will use PORT right | ||||
| away. EPRT and LPRT are extensions to the original FTP protocol, may not work | ||||
| on all servers but enable more functionality in a better way than the | ||||
| traditional PORT command. (Added in 7.10.5) | ||||
| traditional PORT command. | ||||
|  | ||||
| If this option is used several times, each occurrence will toggle this on/off. | ||||
| .IP "--disable-epsv" | ||||
| @@ -265,9 +295,9 @@ If this option is used several times, the last one will be used. | ||||
| .IP "-e/--referer <URL>" | ||||
| (HTTP) Sends the "Referer Page" information to the HTTP server. This can also | ||||
| be set with the \fI-H/--header\fP flag of course.  When used with | ||||
| \fI-L/--location\fP you can append ";auto" to the referer URL to make curl | ||||
| \fI-L/--location\fP you can append ";auto" to the --referer URL to make curl | ||||
| automatically set the previous URL when it follows a Location: header. The | ||||
| \&";auto" string can be used alone, even if you don't set an initial referer. | ||||
| \&";auto" string can be used alone, even if you don't set an initial --referer. | ||||
|  | ||||
| If this option is used several times, the last one will be used. | ||||
| .IP "--engine <name>" | ||||
| @@ -325,9 +355,9 @@ If this option is used several times, the last one will be used. | ||||
| .IP "-f/--fail" | ||||
| (HTTP) Fail silently (no output at all) on server errors. This is mostly done | ||||
| like this to better enable scripts etc to better deal with failed attempts. In | ||||
| normal cases when a HTTP server fails to deliver a document, it returns a HTML | ||||
| document stating so (which often also describes why and more). This flag will | ||||
| prevent curl from outputting that and fail silently instead. | ||||
| normal cases when a HTTP server fails to deliver a document, it returns an | ||||
| HTML document stating so (which often also describes why and more). This flag | ||||
| will prevent curl from outputting that and return error 22. | ||||
|  | ||||
| If this option is used twice, the second will again disable silent failure. | ||||
| .IP "--ftp-account [data]" | ||||
| @@ -339,15 +369,43 @@ If this option is used twice, the second will override the previous use. | ||||
| .IP "--ftp-create-dirs" | ||||
| (FTP) When an FTP URL/operation uses a path that doesn't currently exist on | ||||
| the server, the standard behavior of curl is to fail. Using this option, curl | ||||
| will instead attempt to create missing directories. (Added in 7.10.7) | ||||
| will instead attempt to create missing directories. | ||||
|  | ||||
| If this option is used twice, the second will again disable silent failure. | ||||
| If this option is used twice, the second will again disable directory creation. | ||||
| .IP "--ftp-method [method]" | ||||
| (FTP) Control what method curl should use to reach a file on a FTP(S) | ||||
| server. The method argument should be one of the following alternatives: | ||||
| .RS | ||||
| .IP multicwd | ||||
| curl does a single CWD operation for each path part in the given URL. For deep | ||||
| hierarchies this means very many commands. This is how RFC1738 says it should | ||||
| be done. This is the default but the slowest behavior. | ||||
| .IP nocwd | ||||
| curl does no CWD at all. curl will do SIZE, RETR, STOR etc and give a full | ||||
| path to the server for all these commands. This is the fastest behavior. | ||||
| .IP singlecwd | ||||
| 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 | ||||
| compliant than 'nocwd' but without the full penalty of 'multicwd'. | ||||
| .RE | ||||
| .IP "--ftp-pasv" | ||||
| (FTP) Use PASV when transferring. PASV is the internal default behavior, but | ||||
| using this option can be used to override a previous --ftp-port option. (Added | ||||
| in 7.11.0) | ||||
|  | ||||
| If this option is used twice, the second will again disable silent failure. | ||||
| If this option is used several times, the following occurrences make no | ||||
| difference. | ||||
|  | ||||
| .IP "--ftp-skip-pasv-ip" | ||||
| (FTP) Tell curl to not use the IP address the server suggests in its response | ||||
| to curl's PASV command when curl connects the data connection. Instead curl | ||||
| will re-use the same IP address it already uses for the control | ||||
| connection. (Added in 7.14.2) | ||||
|  | ||||
| This option has no effect if PORT, EPRT or EPSV is used instead of PASV. | ||||
|  | ||||
| If this option is used twice, the second will again use the server's suggested | ||||
| address. | ||||
| .IP "--ftp-ssl" | ||||
| (FTP) Make the FTP connection switch to use SSL/TLS. (Added in 7.11.0) | ||||
|  | ||||
| @@ -408,7 +466,8 @@ with a '?'  separator. | ||||
| If used in combination with -I, the POST data will instead be appended to the | ||||
| URL with a HEAD request. | ||||
|  | ||||
| If used multiple times, nothing special happens. | ||||
| If this option is used several times, the following occurrences make no | ||||
| difference. | ||||
| .IP "-h/--help" | ||||
| Usage help. | ||||
| .IP "-H/--header <header>" | ||||
| @@ -421,9 +480,19 @@ set headers without knowing perfectly well what you're doing. Replacing an | ||||
| internal header with one without content on the right side of the colon will | ||||
| prevent that header from appearing. | ||||
|  | ||||
| curl will make sure that each header you add/replace get sent with the proper | ||||
| end of line marker, you should thus \fBnot\fP add that as a part of the header | ||||
| content: do not add newlines or carriage returns they will only mess things up | ||||
| for you. | ||||
|  | ||||
| See also the \fI-A/--user-agent\fP and \fI-e/--referer\fP options. | ||||
|  | ||||
| This option can be used multiple times to add/replace/remove multiple headers. | ||||
| .IP "--ignore-content-length" | ||||
| (HTTP) | ||||
| Ignore the Content-Length header. This is particularly useful for servers | ||||
| running Apache 1.x, which will report incorrect Content-Length for files | ||||
| larger than 2 gigabytes. | ||||
| .IP "-i/--include" | ||||
| (HTTP) | ||||
| Include the HTTP-header in the output. The HTTP-header includes things | ||||
| @@ -449,15 +518,14 @@ If this option is used twice, the second will again disable header only. | ||||
| (HTTP) When curl is told to read cookies from a given file, this option will | ||||
| make it discard all "session cookies". This will basically have the same effect | ||||
| as if a new session is started. Typical browsers always discard session | ||||
| cookies when they're closed down. (Added in 7.9.7) | ||||
| cookies when they're closed down. | ||||
|  | ||||
| If this option is used several times, each occurrence will toggle this on/off. | ||||
| .IP "-k/--insecure" | ||||
| (SSL) This option explicitly allows curl to perform "insecure" SSL connections | ||||
| and transfers. Starting with curl 7.10, all SSL connections will be attempted | ||||
| to be made secure by using the CA certificate bundle installed by | ||||
| default. This makes all connections considered "insecure" to fail unless | ||||
| \fI-k/--insecure\fP is used. | ||||
| and transfers. All SSL connections are attempted to be made secure by using | ||||
| the CA certificate bundle installed by default. This makes all connections | ||||
| considered "insecure" to fail unless \fI-k/--insecure\fP is used. | ||||
|  | ||||
| If this option is used twice, the second time will again disable it. | ||||
| .IP "--key <key>" | ||||
| @@ -484,7 +552,7 @@ Specify which config file to read curl arguments from. The config file is a | ||||
| text file in which command line arguments can be written which then will be | ||||
| used as if they were written on the actual command line. Options and their | ||||
| parameters must be specified on the same config file line. If the parameter is | ||||
| to contain white spaces, the parameter must be inclosed within quotes.  If the | ||||
| to contain white spaces, the parameter must be enclosed within quotes.  If the | ||||
| first column of a config line is a '#' character, the rest of the line will be | ||||
| treated as a comment. | ||||
|  | ||||
| @@ -524,8 +592,6 @@ If you are also using the \fI-Y/--speed-limit\fP option, that option will take | ||||
| precedence and might cripple the rate-limiting slightly, to help keeping the | ||||
| speed-limit logic working. | ||||
|  | ||||
| This option was introduced in curl 7.10. | ||||
|  | ||||
| If this option is used several times, the last one will be used. | ||||
| .IP "-l/--list-only" | ||||
| (FTP) | ||||
| @@ -539,15 +605,21 @@ list only files in their response to NLST; they do not include | ||||
| subdirectories and symbolic links. | ||||
|  | ||||
| If this option is used twice, the second will again disable list only. | ||||
| .IP "--local-port <num>[-num]" | ||||
| Set a prefered number or range of local port numbers to use for the | ||||
| connection(s).  Note that port numbers by nature is a scarce resource that | ||||
| will be busy at times so setting this range to something too narrow might | ||||
| cause unnecessary connection setup failures. (Added in 7.15.2) | ||||
| .IP "-L/--location" | ||||
| (HTTP/HTTPS) If the server reports that the requested page has a different | ||||
| location (indicated with the header line Location:) this flag will let curl | ||||
| attempt to reattempt the get on the new place. If used together with | ||||
| \fI-i/--include\fP or \fI-I/--head\fP, headers from all requested pages will | ||||
| be shown. If authentication is used, curl will only send its credentials to | ||||
| the initial host, so if a redirect takes curl to a different host, it won't | ||||
| intercept the user+password. See also \fI--location-trusted\fP on how to | ||||
| change this. | ||||
| (HTTP/HTTPS) If the server reports that the requested page has moved to a | ||||
| different location (indicated with a Location: header and a 3XX response code) | ||||
| this option will make curl redo the request on the new place. If used together | ||||
| with \fI-i/--include\fP or \fI-I/--head\fP, headers from all requested pages | ||||
| will be shown. When authentication is used, curl only sends its credentials to | ||||
| the initial host. If a redirect takes curl to a different host, it won't be | ||||
| able to intercept the user+password. See also \fI--location-trusted\fP on how | ||||
| to change this. You can limit the amount of redirects to follow by using the | ||||
| \fI--max-redirs\fP option. | ||||
|  | ||||
| If this option is used twice, the second will again disable location following. | ||||
| .IP "--location-trusted" | ||||
| @@ -569,8 +641,7 @@ this given limit. This concerns both FTP and HTTP transfers. | ||||
| .IP "-m/--max-time <seconds>" | ||||
| Maximum time in seconds that you allow the whole operation to take.  This is | ||||
| useful for preventing your batch jobs from hanging for hours due to slow | ||||
| networks or links going down.  This doesn't work fully in win32 systems.  See | ||||
| also the \fI--connect-timeout\fP option. | ||||
| networks or links going down.  See also the \fI--connect-timeout\fP option. | ||||
|  | ||||
| If this option is used several times, the last one will be used. | ||||
| .IP "-M/--manual" | ||||
| @@ -589,7 +660,7 @@ directory. | ||||
|  | ||||
| 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 | ||||
| 'secret' should look similar to: | ||||
| \&'secret' should look similar to: | ||||
|  | ||||
| .B "machine host.domain.com login myself password secret" | ||||
|  | ||||
| @@ -602,12 +673,16 @@ Very similar to \fI--netrc\fP, but this option makes the .netrc usage | ||||
| designed by Microsoft and is used in their web applications. It is primarily | ||||
| meant as a support for Kerberos5 authentication but may be also used along | ||||
| with another authentication methods. For more information see IETF draft | ||||
| draft-brezak-spnego-http-04.txt. (Added in 7.10.6) | ||||
| draft-brezak-spnego-http-04.txt. | ||||
|  | ||||
| This option requires that the library was built with GSSAPI support. This is | ||||
| not very common. Use \fI-V/--version\fP to see if your version supports | ||||
| GSS-Negotiate. | ||||
|  | ||||
| When using this option, you must also provide a fake -u/--user option to | ||||
| activate the authentication code properly. Sending a '-u :' is enough as the | ||||
| user name and password from the -u option aren't actually used. | ||||
|  | ||||
| If this option is used several times, the following occurrences make no | ||||
| difference. | ||||
| .IP "-N/--no-buffer" | ||||
| @@ -623,7 +698,7 @@ designed by Microsoft and is used by IIS web servers. It is a proprietary | ||||
| protocol, reversed engineered by clever people and implemented in curl based | ||||
| on their efforts. This kind of behavior should not be endorsed, you should | ||||
| encourage everyone who uses NTLM to switch to a public and documented | ||||
| authentication method instead. Such as Digest. (Added in 7.10.6) | ||||
| authentication method instead. Such as Digest. | ||||
|  | ||||
| If you want to enable NTLM for your proxy authentication, then use | ||||
| \fI--proxy-ntlm\fP. | ||||
| @@ -653,8 +728,8 @@ dynamically. | ||||
| Write output to a local file named like the remote file we get. (Only the file | ||||
| part of the remote file is used, the path is cut off.) | ||||
|  | ||||
| The remote file name to use for saving is extracted from the given URL. | ||||
| Nothing else | ||||
| The remote file name to use for saving is extracted from the given URL, | ||||
| nothing else. | ||||
|  | ||||
| You may use this option as many times as you have number of URLs. | ||||
| .IP "--pass <phrase>" | ||||
| @@ -663,8 +738,8 @@ You may use this option as many times as you have number of URLs. | ||||
| If this option is used several times, the last one will be used. | ||||
| .IP "--proxy-anyauth" | ||||
| Tells curl to pick a suitable authentication method when communicating with | ||||
| the given proxy. This will cause an extra request/response round-trip. Added | ||||
| in curl 7.13.2. | ||||
| the given proxy. This will cause an extra request/response round-trip. (Added | ||||
| in 7.13.2) | ||||
|  | ||||
| If this option is used twice, the second will again disable the proxy use-any | ||||
| authentication. | ||||
| @@ -707,7 +782,8 @@ i.e "192.168.10.1" to specify exact IP number | ||||
| .IP "host name" | ||||
| i.e "my.host.domain" to specify machine | ||||
| .IP "-" | ||||
| (any single-letter string) to make it pick the machine's default | ||||
| make curl pick the same IP address that is already used for the control | ||||
| connection | ||||
| .RE | ||||
|  | ||||
| If this option is used several times, the last one will be used. Disable the | ||||
| @@ -747,7 +823,7 @@ specifies the second 500 bytes | ||||
| .B -500 | ||||
| specifies the last 500 bytes | ||||
| .TP | ||||
| .B 9500 | ||||
| .B 9500- | ||||
| specifies the bytes from offset 9500 and forward | ||||
| .TP | ||||
| .B 0-0,-1 | ||||
| @@ -788,7 +864,7 @@ for all forthcoming retries it will double the waiting time until it reaches | ||||
| 10 minutes which then will be the delay between the rest of the retries.  By | ||||
| using \fI--retry-delay\fP you disable this exponential backoff algorithm. See | ||||
| also \fI--retry-max-time\fP to limit the total time allowed for | ||||
| retries. (Option added in 7.12.3) | ||||
| retries. (Added in 7.12.3) | ||||
|  | ||||
| If this option is used multiple times, the last occurrence decide the amount. | ||||
| .IP "--retry-delay <seconds>" | ||||
| @@ -796,7 +872,7 @@ Make curl sleep this amount of time between each retry when a transfer has | ||||
| failed with a transient error (it changes the default backoff time algorithm | ||||
| between retries). This option is only interesting if \fI--retry\fP is also | ||||
| used. Setting this delay to zero will make curl use the default backoff time. | ||||
| (Option added in 7.12.3) | ||||
| (Added in 7.12.3) | ||||
|  | ||||
| If this option is used multiple times, the last occurrence decide the amount. | ||||
| .IP "--retry-max-time <seconds>" | ||||
| @@ -805,26 +881,36 @@ done as usual (see \fI--retry\fP) as long as the timer hasn't reached this | ||||
| given limit. Notice that if the timer hasn't reached the limit, the request | ||||
| will be made and while performing, it may take longer than this given time | ||||
| period. To limit a single request\'s maximum time, use \fI-m/--max-time\fP. | ||||
| Set this option to zero to not timeout retries. (Option added in 7.12.3) | ||||
| Set this option to zero to not timeout retries. (Added in 7.12.3) | ||||
|  | ||||
| If this option is used multiple times, the last occurrence decide the amount. | ||||
| .IP "-s/--silent" | ||||
| Silent mode. Don't show progress meter or error messages.  Makes | ||||
| Curl mute. | ||||
|  | ||||
| If this option is used twice, the second will again disable mute. | ||||
| If this option is used twice, the second will again disable silent mode. | ||||
| .IP "-S/--show-error" | ||||
| When used with -s it makes curl show error message if it fails. | ||||
|  | ||||
| If this option is used twice, the second will again disable show error. | ||||
| .IP "--socks <host[:port]>" | ||||
| Use the specified SOCKS5 proxy. If the port number is not specified, it is | ||||
| assumed at port 1080. (Option added in 7.11.1) | ||||
| .IP "--socks4 <host[:port]>" | ||||
| Use the specified SOCKS4 proxy. If the port number is not specified, it is | ||||
| assumed at port 1080. (Added in 7.15.2) | ||||
|  | ||||
| This option overrides any previous use of \fI-x/--proxy\fP, as they are | ||||
| mutually exclusive. | ||||
|  | ||||
| If this option is used several times, the last one will be used. | ||||
| .IP "--socks5 <host[:port]>" | ||||
| Use the specified SOCKS5 proxy. If the port number is not specified, it is | ||||
| assumed at port 1080. (Added in 7.11.1) | ||||
|  | ||||
| This option overrides any previous use of \fI-x/--proxy\fP, as they are | ||||
| mutually exclusive. | ||||
|  | ||||
| If this option is used several times, the last one will be used. (This option | ||||
| was previously wrongly documented and used as --socks without the number | ||||
| appended.) | ||||
| .IP "--stderr <file>" | ||||
| Redirect all writes to stderr to the specified file instead. If the file name | ||||
| is a plain '-', it is instead written to stdout. This option has no point when | ||||
| @@ -854,13 +940,10 @@ this is used on a http(s) server, the PUT command will be used. | ||||
|  | ||||
| Use the file name "-" (a single dash) to use stdin instead of a given file. | ||||
|  | ||||
| Before 7.10.8, when this option was used several times, the last one was used. | ||||
|  | ||||
| In curl 7.10.8 and later, you can specify one -T for each URL on the command | ||||
| line. Each -T + URL pair specifies what to upload and to where. curl also | ||||
| supports "globbing" of the -T argument, meaning that you can upload multiple | ||||
| files to a single URL by using the same URL globbing style supported in the | ||||
| URL, like this: | ||||
| You can specify one -T for each URL on the command line. Each -T + URL pair | ||||
| specifies what to upload and to where. curl also supports "globbing" of the -T | ||||
| argument, meaning that you can upload multiple files to a single URL by using | ||||
| the same URL globbing style supported in the URL, like this: | ||||
|  | ||||
| curl -T "{file1,file2}" http://www.uploadtothissite.com | ||||
|  | ||||
| @@ -872,8 +955,7 @@ Enables a full trace dump of all incoming and outgoing data, including | ||||
| descriptive information, to the given output file. Use "-" as filename to have | ||||
| the output sent to stdout. | ||||
|  | ||||
| If this option is used several times, the last one will be used. (Added in | ||||
| 7.9.7) | ||||
| If this option is used several times, the last one will be used. | ||||
| .IP "--trace-ascii <file>" | ||||
| Enables a full trace dump of all incoming and outgoing data, including | ||||
| descriptive information, to the given output file. Use "-" as filename to have | ||||
| @@ -883,21 +965,28 @@ This is very similar to \fI--trace\fP, but leaves out the hex part and only | ||||
| shows the ASCII part of the dump. It makes smaller output that might be easier | ||||
| to read for untrained humans. | ||||
|  | ||||
| If this option is used several times, the last one will be used. (Added in | ||||
| 7.9.7) | ||||
| If this option is used several times, the last one will be used. | ||||
| .IP "--trace-time" | ||||
| Prepends a time stamp to each trace or verbose line that curl displays. | ||||
| (Added in 7.14.0) | ||||
|  | ||||
| If this option is used several times, each occurrence will toggle it on/off. | ||||
| (Added in 7.14.0        ) | ||||
| .IP "-u/--user <user:password>" | ||||
| Specify user and password to use for server authentication. Overrides | ||||
| \fI-n/--netrc\fP and \fI--netrc-optional\fP. | ||||
|  | ||||
| If you use an SSPI-enabled curl binary and do NTLM autentication, you can | ||||
| force curl to pick up the user name and password from your environment by | ||||
| simply specifying a single colon with this option: "-u :". | ||||
|  | ||||
| If this option is used several times, the last one will be used. | ||||
| .IP "-U/--proxy-user <user:password>" | ||||
| Specify user and password to use for proxy authentication. | ||||
|  | ||||
| If you use an SSPI-enabled curl binary and do NTLM autentication, you can | ||||
| force curl to pick up the user name and password from your environment by | ||||
| simply specifying a single colon with this option: "-U :". | ||||
|  | ||||
| If this option is used several times, the last one will be used. | ||||
| .IP "--url <URL>" | ||||
| Specify a URL to fetch. This option is mostly handy when you want to specify | ||||
| @@ -958,11 +1047,11 @@ SSPI is supported. If you use NTLM and set a blank user name, curl will | ||||
| authenticate with your current user and password. | ||||
| .RE | ||||
| .IP "-w/--write-out <format>" | ||||
| Defines what to display after a completed and successful operation. The format | ||||
| is a string that may contain plain text mixed with any number of variables. The | ||||
| string can be specified as "string", to get read from a particular file you | ||||
| specify it "@filename" and to tell curl to read the format from stdin you | ||||
| write "@-". | ||||
| Defines what to display on stdout after a completed and successful | ||||
| operation. The format is a string that may contain plain text mixed with any | ||||
| number of variables. The string can be specified as "string", to get read from | ||||
| a particular file you specify it "@filename" and to tell curl to read the | ||||
| format from stdin you write "@-". | ||||
|  | ||||
| The variables present in the output format will be substituted by the value or | ||||
| text that curl thinks fit, as described below. All variables are specified | ||||
| @@ -1035,7 +1124,7 @@ The average download speed that curl measured for the complete download. | ||||
| The average upload speed that curl measured for the complete upload. | ||||
| .TP | ||||
| .B content_type | ||||
| The Content-Type of the requested document, if there was any. (Added in 7.9.5) | ||||
| The Content-Type of the requested document, if there was any. | ||||
| .TP | ||||
| .B num_connects | ||||
| Number of new connects made in the recent transfer. (Added in 7.12.3) | ||||
| @@ -1058,12 +1147,16 @@ transparently be converted to HTTP. It means that certain protocol specific | ||||
| operations might not be available. This is not the case if you can tunnel | ||||
| through the proxy, as done with the \fI-p/--proxytunnel\fP option. | ||||
|  | ||||
| Starting with 7.14.1, the proxy host can be specified the exact same way as | ||||
| the proxy environment variables, include protocol prefix (http://) and | ||||
| embedded user + password. | ||||
|  | ||||
| If this option is used several times, the last one will be used. | ||||
| .IP "-X/--request <command>" | ||||
| (HTTP) | ||||
| Specifies a custom request to use when communicating with the HTTP server. | ||||
| The specified request will be used instead of the standard GET. Read the | ||||
| HTTP 1.1 specification for details and explanations. | ||||
| (HTTP) Specifies a custom request method to use when communicating with the | ||||
| HTTP server.  The specified request will be used instead of the method | ||||
| otherwise used (which defaults to GET). Read the HTTP 1.1 specification for | ||||
| details and explanations. | ||||
|  | ||||
| (FTP) | ||||
| Specifies a custom FTP command to use instead of LIST when doing file lists | ||||
| @@ -1100,7 +1193,8 @@ If this option is used several times, the last one will be used. | ||||
| .IP "--max-redirs <num>" | ||||
| Set maximum number of redirection-followings allowed. If \fI-L/--location\fP | ||||
| is used, this option can be used to prevent curl from following redirections | ||||
| \&"in absurdum". | ||||
| \&"in absurdum". By default, the limit is set to 50 redirections. Set this | ||||
| option to -1 to make it limitless. | ||||
|  | ||||
| If this option is used several times, the last one will be used. | ||||
| .IP "-0/--http1.0" | ||||
| @@ -1129,11 +1223,11 @@ Note that not all FTP server allow 3rd party transfers. (Added in 7.13.0) | ||||
| .IP "-4/--ipv4" | ||||
| If libcurl is capable of resolving an address to multiple IP versions (which | ||||
| it is if it is ipv6-capable), this option tells libcurl to resolve names to | ||||
| IPv4 addresses only. (Added in 7.10.8) | ||||
| IPv4 addresses only. | ||||
| .IP "-6/--ipv6" | ||||
| If libcurl is capable of resolving an address to multiple IP versions (which | ||||
| it is if it is ipv6-capable), this option tells libcurl to resolve names to | ||||
| IPv6 addresses only. (Added in 7.10.8) | ||||
| IPv6 addresses only. | ||||
| .IP "-#/--progress-bar" | ||||
| Make curl display progress information as a progress bar instead of the | ||||
| default statistics. | ||||
| @@ -1151,13 +1245,11 @@ Sets proxy server to use for HTTP. | ||||
| Sets proxy server to use for HTTPS. | ||||
| .IP "FTP_PROXY [protocol://]<host>[:port]" | ||||
| Sets proxy server to use for FTP. | ||||
| .IP "GOPHER_PROXY [protocol://]<host>[:port]" | ||||
| Sets proxy server to use for GOPHER. | ||||
| .IP "ALL_PROXY [protocol://]<host>[:port]" | ||||
| Sets proxy server to use if no protocol-specific proxy is set. | ||||
| .IP "NO_PROXY <comma-separated list of hosts>" | ||||
| list of host names that shouldn't go through any proxy. If set to a asterisk | ||||
| '*' only, it matches all hosts. | ||||
| \&'*' only, it matches all hosts. | ||||
| .SH EXIT CODES | ||||
| There exists a bunch of different error codes and their corresponding error | ||||
| messages that may appear during bad conditions. At the time of this writing, | ||||
| @@ -1179,7 +1271,9 @@ Failed to connect to host. | ||||
| .IP 8 | ||||
| FTP weird server reply. The server sent data curl couldn't parse. | ||||
| .IP 9 | ||||
| FTP access denied. The server denied login. | ||||
| FTP access denied. The server denied login or denied access to the particular | ||||
| resource or directory you wanted to reach. Most often you tried to change to a | ||||
| directory that doesn't exist on the server. | ||||
| .IP 10 | ||||
| FTP user/password incorrect. Either one or both were not accepted by the | ||||
| server. | ||||
|   | ||||
| @@ -10,7 +10,8 @@ EXTRA_DIST = README curlgtk.c sepheaders.c simple.c postit2.c		\ | ||||
|  post-callback.c multi-app.c multi-double.c multi-single.c		\ | ||||
|  multi-post.c fopen.c simplepost.c makefile.dj curlx.c https.c		\ | ||||
|  multi-debugcallback.c fileupload.c getinfo.c ftp3rdparty.c debug.c	\ | ||||
|  anyauthput.c htmltitle.cc htmltidy.c opensslthreadlock.c | ||||
|  anyauthput.c htmltitle.cc htmltidy.c opensslthreadlock.c		\ | ||||
|  cookie_interface.c cacertinmem.c synctime.c | ||||
|  | ||||
| all: | ||||
| 	@echo "done" | ||||
|   | ||||
| @@ -33,6 +33,8 @@ we expect you to actually torture our web site with your tests! Thanks. | ||||
| EXAMPLES | ||||
|  | ||||
| anyauthput.c   - HTTP PUT using "any" authentication method | ||||
| cacertinmem.c  - Use a built-in PEM certificate to retrieve a https page | ||||
| cookie_interface.c - shows usage of simple cookie interface | ||||
| curlgtk.c      - download using a GTK progress bar | ||||
| curlx.c        - getting file info from the remote cert data | ||||
| debug.c        - showing how to use the debug callback | ||||
| @@ -55,6 +57,7 @@ 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 | ||||
| multithread.c  - an example using multi-treading transfering multiple files | ||||
| opensslthreadlock.c - show how to do locking when using OpenSSL multi-threaded | ||||
| persistant.c   - request two URLs with a persistant connection | ||||
| post-callback.c - send a HTTP POST using a callback | ||||
| postit2.c      - send a HTTP multipart formpost | ||||
| @@ -62,3 +65,4 @@ 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 extracing date from remote HTTP servers | ||||
|   | ||||
							
								
								
									
										138
									
								
								docs/examples/cacertinmem.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										138
									
								
								docs/examples/cacertinmem.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,138 @@ | ||||
| /***************************************************************************** | ||||
|  *                                  _   _ ____  _ | ||||
|  *  Project                     ___| | | |  _ \| | | ||||
|  *                             / __| | | | |_) | | | ||||
|  *                            | (__| |_| |  _ <| |___ | ||||
|  *                             \___|\___/|_| \_\_____| | ||||
|  * | ||||
|  * $Id$ | ||||
|  * | ||||
|  * Example using a "in core" PEM certificate to retrieve a https page. | ||||
|  * Written by Theo Borm | ||||
|  */ | ||||
|  | ||||
| /* 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 <curl/curl.h> | ||||
| #include <stdio.h> | ||||
|  | ||||
| size_t writefunction( void *ptr, size_t size, size_t nmemb, void *stream) | ||||
| { | ||||
|   fwrite(ptr,size,nmemb,stream); | ||||
|   return(nmemb*size); | ||||
| } | ||||
|  | ||||
| static CURLcode sslctx_function(CURL * curl, void * sslctx, void * parm) | ||||
| { | ||||
|   X509_STORE * store; | ||||
|   X509 * cert=NULL; | ||||
|   BIO * bio; | ||||
|   char * mypem = /* www.cacert.org */ | ||||
|     "-----BEGIN CERTIFICATE-----\n"\ | ||||
|     "MIIHPTCCBSWgAwIBAgIBADANBgkqhkiG9w0BAQQFADB5MRAwDgYDVQQKEwdSb290\n"\ | ||||
|     "IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAgBgNVBAMTGUNB\n"\ | ||||
|     "IENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEWEnN1cHBvcnRA\n"\ | ||||
|     "Y2FjZXJ0Lm9yZzAeFw0wMzAzMzAxMjI5NDlaFw0zMzAzMjkxMjI5NDlaMHkxEDAO\n"\ | ||||
|     "BgNVBAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9yZzEi\n"\ | ||||
|     "MCAGA1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJ\n"\ | ||||
|     "ARYSc3VwcG9ydEBjYWNlcnQub3JnMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC\n"\ | ||||
|     "CgKCAgEAziLA4kZ97DYoB1CW8qAzQIxL8TtmPzHlawI229Z89vGIj053NgVBlfkJ\n"\ | ||||
|     "8BLPRoZzYLdufujAWGSuzbCtRRcMY/pnCujW0r8+55jE8Ez64AO7NV1sId6eINm6\n"\ | ||||
|     "zWYyN3L69wj1x81YyY7nDl7qPv4coRQKFWyGhFtkZip6qUtTefWIonvuLwphK42y\n"\ | ||||
|     "fk1WpRPs6tqSnqxEQR5YYGUFZvjARL3LlPdCfgv3ZWiYUQXw8wWRBB0bF4LsyFe7\n"\ | ||||
|     "w2t6iPGwcswlWyCR7BYCEo8y6RcYSNDHBS4CMEK4JZwFaz+qOqfrU0j36NK2B5jc\n"\ | ||||
|     "G8Y0f3/JHIJ6BVgrCFvzOKKrF11myZjXnhCLotLddJr3cQxyYN/Nb5gznZY0dj4k\n"\ | ||||
|     "epKwDpUeb+agRThHqtdB7Uq3EvbXG4OKDy7YCbZZ16oE/9KTfWgu3YtLq1i6L43q\n"\ | ||||
|     "laegw1SJpfvbi1EinbLDvhG+LJGGi5Z4rSDTii8aP8bQUWWHIbEZAWV/RRyH9XzQ\n"\ | ||||
|     "QUxPKZgh/TMfdQwEUfoZd9vUFBzugcMd9Zi3aQaRIt0AUMyBMawSB3s42mhb5ivU\n"\ | ||||
|     "fslfrejrckzzAeVLIL+aplfKkQABi6F1ITe1Yw1nPkZPcCBnzsXWWdsC4PDSy826\n"\ | ||||
|     "YreQQejdIOQpvGQpQsgi3Hia/0PsmBsJUUtaWsJx8cTLc6nloQsCAwEAAaOCAc4w\n"\ | ||||
|     "ggHKMB0GA1UdDgQWBBQWtTIb1Mfz4OaO873SsDrusjkY0TCBowYDVR0jBIGbMIGY\n"\ | ||||
|     "gBQWtTIb1Mfz4OaO873SsDrusjkY0aF9pHsweTEQMA4GA1UEChMHUm9vdCBDQTEe\n"\ | ||||
|     "MBwGA1UECxMVaHR0cDovL3d3dy5jYWNlcnQub3JnMSIwIAYDVQQDExlDQSBDZXJ0\n"\ | ||||
|     "IFNpZ25pbmcgQXV0aG9yaXR5MSEwHwYJKoZIhvcNAQkBFhJzdXBwb3J0QGNhY2Vy\n"\ | ||||
|     "dC5vcmeCAQAwDwYDVR0TAQH/BAUwAwEB/zAyBgNVHR8EKzApMCegJaAjhiFodHRw\n"\ | ||||
|     "czovL3d3dy5jYWNlcnQub3JnL3Jldm9rZS5jcmwwMAYJYIZIAYb4QgEEBCMWIWh0\n"\ | ||||
|     "dHBzOi8vd3d3LmNhY2VydC5vcmcvcmV2b2tlLmNybDA0BglghkgBhvhCAQgEJxYl\n"\ | ||||
|     "aHR0cDovL3d3dy5jYWNlcnQub3JnL2luZGV4LnBocD9pZD0xMDBWBglghkgBhvhC\n"\ | ||||
|     "AQ0ESRZHVG8gZ2V0IHlvdXIgb3duIGNlcnRpZmljYXRlIGZvciBGUkVFIGhlYWQg\n"\ | ||||
|     "b3ZlciB0byBodHRwOi8vd3d3LmNhY2VydC5vcmcwDQYJKoZIhvcNAQEEBQADggIB\n"\ | ||||
|     "ACjH7pyCArpcgBLKNQodgW+JapnM8mgPf6fhjViVPr3yBsOQWqy1YPaZQwGjiHCc\n"\ | ||||
|     "nWKdpIevZ1gNMDY75q1I08t0AoZxPuIrA2jxNGJARjtT6ij0rPtmlVOKTV39O9lg\n"\ | ||||
|     "18p5aTuxZZKmxoGCXJzN600BiqXfEVWqFcofN8CCmHBh22p8lqOOLlQ+TyGpkO/c\n"\ | ||||
|     "gr/c6EWtTZBzCDyUZbAEmXZ/4rzCahWqlwQ3JNgelE5tDlG+1sSPypZt90Pf6DBl\n"\ | ||||
|     "Jzt7u0NDY8RD97LsaMzhGY4i+5jhe1o+ATc7iwiwovOVThrLm82asduycPAtStvY\n"\ | ||||
|     "sONvRUgzEv/+PDIqVPfE94rwiCPCR/5kenHA0R6mY7AHfqQv0wGP3J8rtsYIqQ+T\n"\ | ||||
|     "SCX8Ev2fQtzzxD72V7DX3WnRBnc0CkvSyqD/HMaMyRa+xMwyN2hzXwj7UfdJUzYF\n"\ | ||||
|     "CpUCTPJ5GhD22Dp1nPMd8aINcGeGG7MW9S/lpOt5hvk9C8JzC6WZrG/8Z7jlLwum\n"\ | ||||
|     "GCSNe9FINSkYQKyTYOGWhlC0elnYjyELn8+CkcY7v2vcB5G5l1YjqrZslMZIBjzk\n"\ | ||||
|     "zk6q5PYvCdxTby78dOs6Y5nCpqyJvKeyRKANihDjbPIky/qbn3BHLt4Ui9SyIAmW\n"\ | ||||
|     "omTxJBzcoTWcFbLUvFUufQb1nA5V9FrWk9p2rSVzTMVD\n"\ | ||||
|     "-----END CERTIFICATE-----\n"; | ||||
|   /* get a BIO */ | ||||
|   bio=BIO_new_mem_buf(mypem, -1); | ||||
|   /* use it to read the PEM formatted certificate from memory into an X509 | ||||
|    * structure that SSL can use | ||||
|    */ | ||||
|   PEM_read_bio_X509(bio, &cert, 0, NULL); | ||||
|   if (cert == NULL) | ||||
|     printf("PEM_read_bio_X509 failed...\n"); | ||||
|  | ||||
|   /* get a pointer to the X509 certificate store (which may be empty!) */ | ||||
|   store=SSL_CTX_get_cert_store((SSL_CTX *)sslctx); | ||||
|  | ||||
|   /* add our certificate to this store */ | ||||
|   if (X509_STORE_add_cert(store, cert)==0) | ||||
|     printf("error adding certificate\n"); | ||||
|  | ||||
|   /* all set to go */ | ||||
|   return CURLE_OK ; | ||||
| } | ||||
|  | ||||
| int main(void) | ||||
| { | ||||
|   CURL * ch; | ||||
|   CURLcode rv; | ||||
|  | ||||
|   rv=curl_global_init(CURL_GLOBAL_ALL); | ||||
|   ch=curl_easy_init(); | ||||
|   rv=curl_easy_setopt(ch,CURLOPT_VERBOSE, 0); | ||||
|   rv=curl_easy_setopt(ch,CURLOPT_HEADER, 0); | ||||
|   rv=curl_easy_setopt(ch,CURLOPT_NOPROGRESS, 1); | ||||
|   rv=curl_easy_setopt(ch,CURLOPT_NOSIGNAL, 1); | ||||
|   rv=curl_easy_setopt(ch,CURLOPT_WRITEFUNCTION, *writefunction); | ||||
|   rv=curl_easy_setopt(ch,CURLOPT_WRITEDATA, stdout); | ||||
|   rv=curl_easy_setopt(ch,CURLOPT_HEADERFUNCTION, *writefunction); | ||||
|   rv=curl_easy_setopt(ch,CURLOPT_WRITEHEADER, stderr); | ||||
|   rv=curl_easy_setopt(ch,CURLOPT_SSLCERTTYPE,"PEM"); | ||||
|   rv=curl_easy_setopt(ch,CURLOPT_SSL_VERIFYPEER,1); | ||||
|   rv=curl_easy_setopt(ch, CURLOPT_URL, "https://www.cacert.org/"); | ||||
|  | ||||
|   /* first try: retrieve page without cacerts' certificate -> will fail | ||||
|    */ | ||||
|   rv=curl_easy_perform(ch); | ||||
|   if (rv==CURLE_OK) | ||||
|     printf("*** transfer succeeded ***\n"); | ||||
|   else | ||||
|     printf("*** transfer failed ***\n"); | ||||
|  | ||||
|   /* second try: retrieve page using cacerts' certificate -> will succeed | ||||
|    * load the certificate by installing a function doing the nescessary | ||||
|    * "modifications" to the SSL CONTEXT just before link init | ||||
|    */ | ||||
|   rv=curl_easy_setopt(ch,CURLOPT_SSL_CTX_FUNCTION, *sslctx_function); | ||||
|   rv=curl_easy_perform(ch); | ||||
|   if (rv==CURLE_OK) | ||||
|     printf("*** transfer succeeded ***\n"); | ||||
|   else | ||||
|     printf("*** transfer failed ***\n"); | ||||
|  | ||||
|   curl_easy_cleanup(ch); | ||||
|   curl_global_cleanup(); | ||||
| } | ||||
							
								
								
									
										110
									
								
								docs/examples/cookie_interface.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										110
									
								
								docs/examples/cookie_interface.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,110 @@ | ||||
| /***************************************************************************** | ||||
|  *                                  _   _ ____  _ | ||||
|  *  Project                     ___| | | |  _ \| | | ||||
|  *                             / __| | | | |_) | | | ||||
|  *                            | (__| |_| |  _ <| |___ | ||||
|  *                             \___|\___/|_| \_\_____| | ||||
|  * | ||||
|  *  This example shows usage of simple cookie interface.  | ||||
|  */ | ||||
|  | ||||
| #include <stdio.h> | ||||
| #include <string.h> | ||||
| #include <errno.h> | ||||
| #include <time.h> | ||||
|  | ||||
| #include <curl/curl.h> | ||||
|  | ||||
| static void | ||||
| print_cookies(CURL *curl) | ||||
| { | ||||
|   CURLcode res; | ||||
|   struct curl_slist *cookies; | ||||
|   struct curl_slist *nc; | ||||
|   int i; | ||||
|  | ||||
|   printf("Cookies, curl knows:\n"); | ||||
|   res = curl_easy_getinfo(curl, CURLINFO_COOKIELIST, &cookies); | ||||
|   if (res != CURLE_OK) { | ||||
|     fprintf(stderr, "Curl curl_easy_getinfo failed: %s\n", curl_easy_strerror(res)); | ||||
|     exit(1); | ||||
|   } | ||||
|   nc = cookies, i = 1; | ||||
|   while (nc) { | ||||
|     printf("[%d]: %s\n", i, nc->data); | ||||
|     nc = nc->next; | ||||
|     i++; | ||||
|   } | ||||
|   if (i == 1) { | ||||
|     printf("(none)\n"); | ||||
|   } | ||||
|   curl_slist_free_all(cookies); | ||||
| } | ||||
|  | ||||
| int | ||||
| main(void) | ||||
| { | ||||
|   CURL *curl; | ||||
|   CURLcode res; | ||||
|  | ||||
|   curl_global_init(CURL_GLOBAL_ALL); | ||||
|   curl = curl_easy_init(); | ||||
|   if (curl) { | ||||
|     char nline[256]; | ||||
|  | ||||
|     curl_easy_setopt(curl, CURLOPT_URL, "http://www.google.com/"); /* google.com sets "PREF" cookie */ | ||||
|     curl_easy_setopt(curl, CURLOPT_VERBOSE, 1); | ||||
|     curl_easy_setopt(curl, CURLOPT_COOKIEFILE, ""); /* just to start the cookie engine */ | ||||
|     res = curl_easy_perform(curl); | ||||
|     if (res != CURLE_OK) { | ||||
|       fprintf(stderr, "Curl perform failed: %s\n", curl_easy_strerror(res)); | ||||
|       return 1; | ||||
|     } | ||||
|  | ||||
|     print_cookies(curl); | ||||
|  | ||||
|     printf("Erasing curl's knowledge of cookies!\n"); | ||||
|     curl_easy_setopt(curl, CURLOPT_COOKIELIST, "ALL"); | ||||
|  | ||||
|     print_cookies(curl); | ||||
|  | ||||
|     printf("-----------------------------------------------\n" | ||||
|            "Setting a cookie \"PREF\" via cookie interface:\n"); | ||||
| #ifdef WIN32 | ||||
| #define snprintf _snprintf | ||||
| #endif | ||||
|     /* Netscape format cookie */ | ||||
|     snprintf(nline, 256, "%s\t%s\t%s\t%s\t%u\t%s\t%s", | ||||
|       ".google.com", "TRUE", "/", "FALSE", time(NULL) + 31337, "PREF", "hello google, i like you very much!"); | ||||
|     res = curl_easy_setopt(curl, CURLOPT_COOKIELIST, nline); | ||||
|     if (res != CURLE_OK) { | ||||
|       fprintf(stderr, "Curl curl_easy_setopt failed: %s\n", curl_easy_strerror(res)); | ||||
|       return 1;             | ||||
|     } | ||||
|  | ||||
|     /* HTTP-header style cookie */ | ||||
|     snprintf(nline, 256, | ||||
|       "Set-Cookie: OLD_PREF=3d141414bf4209321; " | ||||
|       "expires=Sun, 17-Jan-2038 19:14:07 GMT; path=/; domain=.google.com"); | ||||
|     res = curl_easy_setopt(curl, CURLOPT_COOKIELIST, nline); | ||||
|     if (res != CURLE_OK) { | ||||
|       fprintf(stderr, "Curl curl_easy_setopt failed: %s\n", curl_easy_strerror(res)); | ||||
|       return 1;             | ||||
|     } | ||||
|  | ||||
|     print_cookies(curl); | ||||
|  | ||||
|     res = curl_easy_perform(curl); | ||||
|     if (res != CURLE_OK) { | ||||
|       fprintf(stderr, "Curl perform failed: %s\n", curl_easy_strerror(res)); | ||||
|       return 1; | ||||
|     } | ||||
|   } | ||||
|   else { | ||||
|     fprintf(stderr, "Curl init failed!\n"); | ||||
|     return 1; | ||||
|   } | ||||
|  | ||||
|   curl_global_cleanup(); | ||||
|   return 0; | ||||
| } | ||||
| @@ -14,6 +14,8 @@ | ||||
|  */ | ||||
|  | ||||
| #include <stdio.h> | ||||
| #include <stdlib.h> | ||||
| #include <string.h> | ||||
|  | ||||
| #include <curl/curl.h> | ||||
| #include <curl/types.h> | ||||
| @@ -93,5 +95,8 @@ int main(int argc, char **argv) | ||||
|    * you're done with it, you should free() it as a nice application. | ||||
|    */ | ||||
|  | ||||
|   if(chunk.memory) | ||||
|     free(chunk.memory); | ||||
|  | ||||
|   return 0; | ||||
| } | ||||
|   | ||||
| @@ -20,7 +20,8 @@ PROGRAMS  = fopen.exe ftpget.exe ftpgetresp.exe ftpupload.exe \ | ||||
|             multi-double.exe multi-post.exe multi-single.exe \ | ||||
|             persistant.exe post-callback.exe postit2.exe \ | ||||
|             sepheaders.exe simple.exe simplessl.exe https.exe \ | ||||
|             ftp3rdparty.exe getinfo.exe anyauthput.exe | ||||
|             ftp3rdparty.exe getinfo.exe anyauthput.exe \ | ||||
|             cookie_interface.exe | ||||
|  | ||||
| all: $(PROGRAMS) | ||||
|  | ||||
|   | ||||
| @@ -78,7 +78,7 @@ int main(void) | ||||
|       curl_slist *chunk = NULL; | ||||
|  | ||||
|       chunk = curl_slist_append(chunk, "Transfer-Encoding: chunked"); | ||||
|       res = curl_easy_setopt(curl, CURLOPT_HTTPHEADER); | ||||
|       res = curl_easy_setopt(curl, CURLOPT_HTTPHEADER, chunk); | ||||
|       /* use curl_slist_free_all() after the *perform() call to free this | ||||
|          list again */ | ||||
|     } | ||||
| @@ -101,7 +101,7 @@ int main(void) | ||||
|       curl_slist *chunk = NULL; | ||||
|  | ||||
|       chunk = curl_slist_append(chunk, "Expect:"); | ||||
|       res = curl_easy_setopt(curl, CURLOPT_HTTPHEADER); | ||||
|       res = curl_easy_setopt(curl, CURLOPT_HTTPHEADER, chunk); | ||||
|       /* use curl_slist_free_all() after the *perform() call to free this | ||||
|          list again */ | ||||
|     } | ||||
|   | ||||
							
								
								
									
										339
									
								
								docs/examples/synctime.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										339
									
								
								docs/examples/synctime.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,339 @@ | ||||
| /***************************************************************************** | ||||
|  *                                  _   _ ____  _ | ||||
|  *  Project                     ___| | | |  _ \| | | ||||
|  *                             / __| | | | |_) | | | ||||
|  *                            | (__| |_| |  _ <| |___ | ||||
|  *                             \___|\___/|_| \_\_____| | ||||
|  * | ||||
|  * $Id$ | ||||
|  * | ||||
|  * This example code only builds as-is on Windows. | ||||
|  * | ||||
|  * Synchronising your computer clock via Internet time server usually relies | ||||
|  * on DAYTIME, TIME, or NTP protocols. These protocols provide good accurate | ||||
|  * time synchronisation but it does not work very well through a | ||||
|  * firewall/proxy. Some adjustment has to be made to the firewall/proxy for | ||||
|  * these protocols to work properly. | ||||
|  * | ||||
|  * There is an indirect method. Since most webserver provide server time in | ||||
|  * their HTTP header, therefore you could synchronise your computer clock | ||||
|  * using HTTP protocol which has no problem with firewall/proxy. | ||||
|  * | ||||
|  * For this software to work, you should take note of these items. | ||||
|  * 1. Your firewall/proxy must allow your computer to surf internet. | ||||
|  * 2. Webserver system time must in sync with the NTP time server, | ||||
|  *    or at least provide an accurate time keeping. | ||||
|  * 3. Webserver HTTP header does not provide the milliseconds units, | ||||
|  *    so there is no way to get very accurate time. | ||||
|  * 4. This software could only provide an accuracy of +- a few seconds, | ||||
|  *    as Round-Trip delay time is not taken into consideration. | ||||
|  *    Compensation of network, firewall/proxy delay cannot be simply divide | ||||
|  *    the Round-Trip delay time by half. | ||||
|  * 5. Win32 SetSystemTime() API will set your computer clock according to | ||||
|  *    GMT/UTC time. Therefore your computer timezone must be properly set. | ||||
|  * 6. Webserver data should not be cached by the proxy server. Some | ||||
|  *    webserver provide Cache-Control to prevent caching. | ||||
|  * | ||||
|  * References: | ||||
|  * http://tf.nist.gov/timefreq/service/its.htm | ||||
|  * http://tf.nist.gov/timefreq/service/firewall.htm | ||||
|  * | ||||
|  * Usage: | ||||
|  * This software will synchronise your computer clock only when you issue | ||||
|  * it with --synctime. By default, it only display the webserver's clock. | ||||
|  * | ||||
|  * Written by: Frank (contributed to libcurl) | ||||
|  * | ||||
|  * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, | ||||
|  * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY | ||||
|  * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. | ||||
|  * | ||||
|  * IN NO EVENT SHALL THE AUTHOR OF THIS SOFTWARE BE LIABLE FOR | ||||
|  * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, | ||||
|  * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, | ||||
|  * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF | ||||
|  * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE | ||||
|  * OF THIS SOFTWARE. | ||||
|  * | ||||
|  */ | ||||
|  | ||||
| #include <stdio.h> | ||||
| #include <time.h> | ||||
| #include <windows.h> | ||||
| #include <curl/curl.h> | ||||
|  | ||||
|  | ||||
| #define MAX_STRING              256 | ||||
| #define MAX_STRING1             MAX_STRING+1 | ||||
|  | ||||
| typedef struct | ||||
| { | ||||
|   char http_proxy[MAX_STRING1]; | ||||
|   char proxy_user[MAX_STRING1]; | ||||
|   char timeserver[MAX_STRING1]; | ||||
| } conf_t; | ||||
|  | ||||
| char DefaultTimeServer[4][MAX_STRING1] = | ||||
| { | ||||
|   "http://nist.time.gov/timezone.cgi?UTC/s/0", | ||||
|   "http://www.google.com/", | ||||
|   "http://www.worldtimeserver.com/current_time_in_UTC.aspx", | ||||
|   "http://www.worldtime.com/cgi-bin/wt.cgi" | ||||
| }; | ||||
|  | ||||
| char *DayStr[] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"}; | ||||
| char *MthStr[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", | ||||
|                   "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}; | ||||
|  | ||||
| int  ShowAllHeader; | ||||
| int  AutoSyncTime; | ||||
| SYSTEMTIME SYSTime; | ||||
| SYSTEMTIME LOCALTime; | ||||
|  | ||||
| #define HTTP_COMMAND_HEAD       0 | ||||
| #define HTTP_COMMAND_GET        1 | ||||
|  | ||||
|  | ||||
| size_t SyncTime_CURL_WriteOutput(void *ptr, size_t size, size_t nmemb, | ||||
|                                  void *stream) | ||||
| { | ||||
|   fwrite(ptr, size, nmemb, stream); | ||||
|   return(nmemb*size); | ||||
| } | ||||
|  | ||||
| size_t SyncTime_CURL_WriteHeader(void *ptr, size_t size, size_t nmemb, | ||||
|                                  void *stream) | ||||
| { | ||||
|   int   i, RetVal; | ||||
|   char  TmpStr1[26], TmpStr2[26]; | ||||
|  | ||||
|   if (ShowAllHeader == 1) | ||||
|     fprintf(stderr, "%s", (char *)(ptr)); | ||||
|  | ||||
|   if (strncmp((char *)(ptr), "Date:", 5) == 0) { | ||||
|     if (ShowAllHeader == 0) | ||||
|       fprintf(stderr, "HTTP Server. %s", (char *)(ptr)); | ||||
|  | ||||
|     if (AutoSyncTime == 1) { | ||||
|       *TmpStr1 = 0; | ||||
|       *TmpStr2 = 0; | ||||
|       if (strlen((char *)(ptr)) > 50) /* Can prevent buffer overflow to | ||||
|                                          TmpStr1 & 2? */ | ||||
|         AutoSyncTime = 0; | ||||
|       else { | ||||
|         RetVal = sscanf ((char *)(ptr), "Date: %s %d %s %d %d:%d:%d", | ||||
|                          TmpStr1, &SYSTime.wDay, TmpStr2, &SYSTime.wYear, | ||||
|                          &SYSTime.wHour, &SYSTime.wMinute, &SYSTime.wSecond); | ||||
|  | ||||
|         if (RetVal == 7) { | ||||
|  | ||||
|           SYSTime.wMilliseconds = 500;    /* adjust to midpoint, 0.5 sec */ | ||||
|           for (i=0; i<12; i++) { | ||||
|             if (strcmp(MthStr[i], TmpStr2) == 0) { | ||||
|               SYSTime.wMonth = i+1; | ||||
|               break; | ||||
|             } | ||||
|           } | ||||
|           AutoSyncTime = 3;       /* Computer clock will be adjusted */ | ||||
|         } | ||||
|         else { | ||||
|           AutoSyncTime = 0;       /* Error in sscanf() fields conversion */ | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   if (strncmp((char *)(ptr), "X-Cache: HIT", 12) == 0) { | ||||
|     fprintf(stderr, "ERROR: HTTP Server data is cached." | ||||
|             " Server Date is no longer valid.\n"); | ||||
|     AutoSyncTime = 0; | ||||
|   } | ||||
|   return(nmemb*size); | ||||
| } | ||||
|  | ||||
| void SyncTime_CURL_Init(CURL *curl, char *proxy_port, | ||||
|                         char *proxy_user_password) | ||||
| { | ||||
|   if (strlen(proxy_port) > 0) | ||||
|     curl_easy_setopt(curl, CURLOPT_PROXY, proxy_port); | ||||
|  | ||||
|   if (strlen(proxy_user_password) > 0) | ||||
|     curl_easy_setopt(curl, CURLOPT_PROXYUSERPWD, proxy_user_password); | ||||
|  | ||||
|   /* Trick Webserver by claiming that you are using Microsoft WinXP SP2, IE6 */ | ||||
|   curl_easy_setopt(curl, CURLOPT_USERAGENT, | ||||
|                    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"); | ||||
|   curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, *SyncTime_CURL_WriteOutput); | ||||
|   curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, *SyncTime_CURL_WriteHeader); | ||||
| } | ||||
|  | ||||
| int SyncTime_CURL_Fetch(CURL *curl, char *URL_Str, char *OutFileName, | ||||
|                         int HttpGetBody) | ||||
| { | ||||
|   FILE *outfile; | ||||
|   CURLcode res; | ||||
|  | ||||
|   outfile = NULL; | ||||
|   if (HttpGetBody == HTTP_COMMAND_HEAD) | ||||
|     curl_easy_setopt(curl, CURLOPT_NOBODY, 1); | ||||
|   else { | ||||
|     outfile = fopen(OutFileName, "wb"); | ||||
|     curl_easy_setopt(curl, CURLOPT_WRITEDATA, outfile); | ||||
|   } | ||||
|  | ||||
|   curl_easy_setopt(curl, CURLOPT_URL, URL_Str); | ||||
|   res = curl_easy_perform(curl); | ||||
|   if (outfile != NULL) | ||||
|     fclose(outfile); | ||||
|   return res;  /* (CURLE_OK) */ | ||||
| } | ||||
|  | ||||
| void showUsage(void) | ||||
| { | ||||
|   fprintf(stderr, "SYNCTIME: Synchronising computer clock with time server" | ||||
|           " using HTTP protocol.\n"); | ||||
|   fprintf(stderr, "Usage   : SYNCTIME [Option]\n"); | ||||
|   fprintf(stderr, "Options :\n"); | ||||
|   fprintf(stderr, " --server=WEBSERVER        Use this time server instead" | ||||
|           " of default.\n"); | ||||
|   fprintf(stderr, " --showall                 Show all HTTP header.\n"); | ||||
|   fprintf(stderr, " --synctime                Synchronising computer clock" | ||||
|           " with time server.\n"); | ||||
|   fprintf(stderr, " --proxy-user=USER[:PASS]  Set proxy username and" | ||||
|           " password.\n"); | ||||
|   fprintf(stderr, " --proxy=HOST[:PORT]       Use HTTP proxy on given" | ||||
|           " port.\n"); | ||||
|   fprintf(stderr, " --help                    Print this help.\n"); | ||||
|   fprintf(stderr, "\n"); | ||||
|   return; | ||||
| } | ||||
|  | ||||
| int conf_init(conf_t *conf) | ||||
| { | ||||
|   int i; | ||||
|  | ||||
|   *conf->http_proxy       = 0; | ||||
|   for (i=0; i<MAX_STRING1; i++) | ||||
|     conf->proxy_user[i]     = 0;    /* Clean up password from memory */ | ||||
|   *conf->timeserver       = 0; | ||||
|   return 1; | ||||
| } | ||||
|  | ||||
| int main(int argc, char *argv[]) | ||||
| { | ||||
|   CURL    *curl; | ||||
|   conf_t  conf[1]; | ||||
|   int     OptionIndex; | ||||
|   struct  tm *lt; | ||||
|   struct  tm *gmt; | ||||
|   time_t  tt; | ||||
|   time_t  tt_local; | ||||
|   time_t  tt_gmt; | ||||
|   double  tzonediffFloat; | ||||
|   int     tzonediffWord; | ||||
|   char    timeBuf[61]; | ||||
|   char    tzoneBuf[16]; | ||||
|   int     RetValue; | ||||
|  | ||||
|   OptionIndex     = 0; | ||||
|   ShowAllHeader   = 0;    /* Do not show HTTP Header */ | ||||
|   AutoSyncTime    = 0;    /* Do not synchronise computer clock */ | ||||
|   RetValue        = 0;    /* Successful Exit */ | ||||
|   conf_init(conf); | ||||
|  | ||||
|   if (argc > 1) { | ||||
|     while (OptionIndex < argc) { | ||||
|       if (strncmp(argv[OptionIndex], "--server=", 9) == 0) | ||||
|         snprintf(conf->timeserver, MAX_STRING, "%s", &argv[OptionIndex][9]); | ||||
|  | ||||
|       if (strcmp(argv[OptionIndex], "--showall") == 0) | ||||
|         ShowAllHeader = 1; | ||||
|  | ||||
|       if (strcmp(argv[OptionIndex], "--synctime") == 0) | ||||
|         AutoSyncTime = 1; | ||||
|  | ||||
|       if (strncmp(argv[OptionIndex], "--proxy-user=", 13) == 0) | ||||
|         snprintf(conf->proxy_user, MAX_STRING, "%s", &argv[OptionIndex][13]); | ||||
|  | ||||
|       if (strncmp(argv[OptionIndex], "--proxy=", 8) == 0) | ||||
|         snprintf(conf->http_proxy, MAX_STRING, "%s", &argv[OptionIndex][8]); | ||||
|  | ||||
|       if ((strcmp(argv[OptionIndex], "--help") == 0) || | ||||
|           (strcmp(argv[OptionIndex], "/?") == 0)) { | ||||
|         showUsage(); | ||||
|         return 0; | ||||
|       } | ||||
|       OptionIndex++; | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   if (*conf->timeserver == 0)     /* Use default server for time information */ | ||||
|     snprintf(conf->timeserver, MAX_STRING, "%s", DefaultTimeServer[0]); | ||||
|  | ||||
|   /* Init CURL before usage */ | ||||
|   curl_global_init(CURL_GLOBAL_ALL); | ||||
|   curl = curl_easy_init(); | ||||
|   if (curl) { | ||||
|     SyncTime_CURL_Init(curl, conf->http_proxy, conf->proxy_user); | ||||
|  | ||||
|     /* Calculating time diff between GMT and localtime */ | ||||
|     tt       = time(0); | ||||
|     lt       = localtime(&tt); | ||||
|     tt_local = mktime(lt); | ||||
|     gmt      = gmtime(&tt); | ||||
|     tt_gmt   = mktime(gmt); | ||||
|     tzonediffFloat = difftime(tt_local, tt_gmt); | ||||
|     tzonediffWord  = (int)(tzonediffFloat/3600.0); | ||||
|  | ||||
|     if ((double)(tzonediffWord * 3600) == tzonediffFloat) | ||||
|       snprintf(tzoneBuf, 15, "%+03d'00'", tzonediffWord); | ||||
|     else | ||||
|       snprintf(tzoneBuf, 15, "%+03d'30'", tzonediffWord); | ||||
|  | ||||
|     /* Get current system time and local time */ | ||||
|     GetSystemTime(&SYSTime); | ||||
|     GetLocalTime(&LOCALTime); | ||||
|     snprintf(timeBuf, 60, "%s, %02d %s %04d %02d:%02d:%02d.%03d, ", | ||||
|              DayStr[LOCALTime.wDayOfWeek], LOCALTime.wDay, | ||||
|              MthStr[LOCALTime.wMonth-1], LOCALTime.wYear, | ||||
|              LOCALTime.wHour, LOCALTime.wMinute, LOCALTime.wSecond, | ||||
|              LOCALTime.wMilliseconds); | ||||
|     fprintf(stderr, "\nBefore HTTP. Date: %s%s\n\n", timeBuf, tzoneBuf); | ||||
|  | ||||
|     /* HTTP HEAD command to the Webserver */ | ||||
|     fprintf(stderr, "Fetch: %s\n", conf->timeserver); | ||||
|     SyncTime_CURL_Fetch(curl, conf->timeserver, "index.htm", | ||||
|                         HTTP_COMMAND_HEAD); | ||||
|  | ||||
|     GetLocalTime(&LOCALTime); | ||||
|     snprintf(timeBuf, 60, "%s, %02d %s %04d %02d:%02d:%02d.%03d, ", | ||||
|              DayStr[LOCALTime.wDayOfWeek], LOCALTime.wDay, | ||||
|              MthStr[LOCALTime.wMonth-1], LOCALTime.wYear, | ||||
|              LOCALTime.wHour, LOCALTime.wMinute, LOCALTime.wSecond, | ||||
|              LOCALTime.wMilliseconds); | ||||
|     fprintf(stderr, "\nAfter  HTTP. Date: %s%s\n", timeBuf, tzoneBuf); | ||||
|  | ||||
|     if (AutoSyncTime == 3) { | ||||
|       /* Synchronising computer clock */ | ||||
|       if (!SetSystemTime(&SYSTime)) {  /* Set system time */ | ||||
|         fprintf(stderr, "ERROR: Unable to set system time.\n"); | ||||
|         RetValue = 1; | ||||
|       } | ||||
|       else { | ||||
|         /* Successfully re-adjusted computer clock */ | ||||
|         GetLocalTime(&LOCALTime); | ||||
|         snprintf(timeBuf, 60, "%s, %02d %s %04d %02d:%02d:%02d.%03d, ", | ||||
|                  DayStr[LOCALTime.wDayOfWeek], LOCALTime.wDay, | ||||
|                  MthStr[LOCALTime.wMonth-1], LOCALTime.wYear, | ||||
|                  LOCALTime.wHour, LOCALTime.wMinute, LOCALTime.wSecond, | ||||
|                  LOCALTime.wMilliseconds); | ||||
|         fprintf(stderr, "\nNew System's Date: %s%s\n", timeBuf, tzoneBuf); | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     /* Cleanup before exit */ | ||||
|     conf_init(conf); | ||||
|     curl_easy_cleanup(curl); | ||||
|   } | ||||
|   return RetValue; | ||||
| } | ||||
| @@ -2,7 +2,7 @@ | ||||
| .\" nroff -man [file] | ||||
| .\" $Id$ | ||||
| .\" | ||||
| .TH curl_easy_getinfo 3 "22 Dec 2004" "libcurl 7.12.3" "libcurl Manual" | ||||
| .TH curl_easy_getinfo 3 "6 Oct 2005" "libcurl 7.12.3" "libcurl Manual" | ||||
| .SH NAME | ||||
| curl_easy_getinfo - extract information from a curl handle | ||||
| .SH SYNOPSIS | ||||
| @@ -15,9 +15,9 @@ Request internal information from the curl session with this function.  The | ||||
| third argument \fBMUST\fP be a pointer to a long, a pointer to a char *, a | ||||
| pointer to a struct curl_slist * or a pointer to a double (as this | ||||
| documentation describes further down).  The data pointed-to will be filled in | ||||
| accordingly and can be relied upon only if the function returns CURLE_OK. | ||||
| This function is intended to get used AFTER a performed transfer, all results | ||||
| from this function are undefined until the transfer is completed. | ||||
| accordingly and can be relied upon only if the function returns CURLE_OK.  Use | ||||
| this function AFTER a performed transfer if you want to get transfer- oriented | ||||
| data. | ||||
|  | ||||
| You should not free the memory returned by this function unless it is | ||||
| explictly mentioned below. | ||||
| @@ -35,12 +35,14 @@ this. | ||||
| Pass a pointer to a long to receive the last received proxy response code to a | ||||
| CONNECT request. | ||||
| .IP CURLINFO_FILETIME | ||||
| Pass a pointer to a long to receive the remote time of the retrieved | ||||
| document. If you get -1, it can be because of many reasons (unknown, the | ||||
| server hides it or the server doesn't support the command that tells document | ||||
| time etc) and the time of the document is unknown. Note that you must tell the | ||||
| server to collect this information before the transfer is made, by using the | ||||
| CURLOPT_FILETIME option to \fIcurl_easy_setopt(3)\fP. (Added in 7.5) | ||||
| Pass a pointer to a long to receive the remote time of the retrieved document | ||||
| (in number of seconds since 1 jan 1970 in the GMT/UTC time zone). If you get | ||||
| -1, it can be because of many reasons (unknown, the server hides it or the | ||||
| server doesn't support the command that tells document time etc) and the time | ||||
| of the document is unknown. Note that you must tell the server to collect this | ||||
| information before the transfer is made, by using the CURLOPT_FILETIME option | ||||
| to \fIcurl_easy_setopt(3)\fP or you will unconditionally get a -1 back. (Added | ||||
| in 7.5) | ||||
| .IP CURLINFO_TOTAL_TIME | ||||
| Pass a pointer to a double to receive the total transaction time in seconds | ||||
| for the previous transfer. This time does not include the connect time, so if | ||||
| @@ -132,6 +134,54 @@ counted).  Combined with \fICURLINFO_REDIRECT_COUNT\fP you are able to know | ||||
| how many times libcurl successfully reused existing connection(s) or not.  See | ||||
| the Connection Options of \fIcurl_easy_setopt(3)\fP to see how libcurl tries | ||||
| to make persistent connections to save time.  (Added in 7.12.3) | ||||
| .IP CURLINFO_COOKIELIST | ||||
| Pass a pointer to a 'struct curl_slist *' to receive a linked-list of all | ||||
| cookies cURL knows (expired ones, too). Don't forget to | ||||
| \fIcurl_slist_free_all(3)\fP the list after it has been used.  If there are no | ||||
| cookies (cookies for the handle have not been enabled or simply none have been | ||||
| received) 'struct curl_slist *' will be set to point to NULL. (Added in | ||||
| 7.14.1) | ||||
| .IP CURLINFO_LASTSOCKET | ||||
| Pass a pointer to a long to receive the last socket used by this curl | ||||
| session. If the socket is no longer valid, -1 is returned. When you finish | ||||
| working with the socket, you must call curl_easy_cleanup() as usual and let | ||||
| libcurl close the socket and cleanup other resources associated with the | ||||
| handle. This is typically used in combination with \fICURLOPT_CONNECT_ONLY\fP. | ||||
| (Added in 7.15.2) | ||||
| .SH TIMES | ||||
| .NF | ||||
| An overview of the six time values available from curl_easy_getinfo() | ||||
|  | ||||
| curl_easy_perform() | ||||
|     | | ||||
|     |--NT | ||||
|     |--|--CT | ||||
|     |--|--|--PT | ||||
|     |--|--|--|--ST | ||||
|           |--|--|--TT | ||||
|     |--|--|--|--|--RT | ||||
| .FI | ||||
| .IP NT | ||||
| \fICURLINFO_NAMELOOKUP_TIME\fP. The time it took from the start until the name | ||||
| resolving was completed. | ||||
| .IP CT | ||||
| \fICURLINFO_CONNECT_TIME\fP. The time it took from the start until the connect | ||||
| to the remote host (or proxy) was completed. | ||||
| .IP PT | ||||
| \fICURLINFO_PRETRANSFER_TIME\fP. The time it took from the start until the | ||||
| file transfer is just about to begin. This includes all pre-transfer commands | ||||
| and negotiations that are specific to the particular protocol(s) involved. | ||||
| .IP ST | ||||
| \fICURLINFO_STARTTRANSFER_TIME\fP. The time it took from the start until the | ||||
| first byte is just about to be transferred. | ||||
| .IP TT | ||||
| \fICURLINFO_TOTAL_TIME\fP. Time of the previous transfer. This time does not | ||||
| include the connect time (CT), so if you want the complete operation time, you | ||||
| should add that. | ||||
| .IP RT | ||||
| \fICURLINFO_REDIRECT_TIME\fP. The time it took for all redirection steps | ||||
| include name lookup, connect, pretransfer and transfer before final | ||||
| transaction was started. So, this is zero if no redirection took place. | ||||
| .SH RETURN VALUE | ||||
| If the operation was successful, CURLE_OK is returned. Otherwise an | ||||
| appropriate error code will be returned. | ||||
|   | ||||
| @@ -14,6 +14,17 @@ handle that you must use as input to other easy-functions. curl_easy_init | ||||
| initializes curl and this call \fBMUST\fP have a corresponding call to | ||||
| \fIcurl_easy_cleanup(3)\fP when the operation is complete. | ||||
|  | ||||
| If you did not already call \fIcurl_global_init(3)\fP,  | ||||
| \fIcurl_easy_init(3)\fP does it automatically. | ||||
| This may be lethal in multi-threaded cases, since \fIcurl_global_init(3)\fP is | ||||
| not thread-safe, and it may result in resource problems because there is | ||||
| no corresponding cleanup. | ||||
|  | ||||
| You are strongly advised to not allow this automatic behaviour, by | ||||
| calling \fIcurl_global_init(3)\fP yourself properly. | ||||
| See the description in \fBlibcurl\fP(3) of global environment | ||||
| requirements for details of how to use this function. | ||||
|  | ||||
| .SH RETURN VALUE | ||||
| If this function returns NULL, something went wrong and you cannot use the | ||||
| other curl functions. | ||||
|   | ||||
| @@ -15,8 +15,8 @@ it was just created with \fIcurl_easy_init(3)\fP. | ||||
|  | ||||
| It does not change the following information kept in the handle: live | ||||
| connections, the Session ID cache, the DNS cache, the cookies and shares. | ||||
|  | ||||
| This function was added in libcurl 7.12.1. | ||||
| .SH AVAILABILITY | ||||
| This function was added in libcurl 7.12.1 | ||||
| .SH RETURN VALUE | ||||
| Nothing | ||||
| .SH "SEE ALSO" | ||||
|   | ||||
| @@ -5,7 +5,7 @@ | ||||
| .\" *                            | (__| |_| |  _ <| |___ | ||||
| .\" *                             \___|\___/|_| \_\_____| | ||||
| .\" * | ||||
| .\" * Copyright (C) 1998 - 2005, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
| .\" * Copyright (C) 1998 - 2006, 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 | ||||
| @@ -21,9 +21,9 @@ | ||||
| .\" * $Id$ | ||||
| .\" ************************************************************************** | ||||
| .\" | ||||
| .TH curl_easy_setopt 3 "12 May 2005" "libcurl 7.14.0" "libcurl Manual" | ||||
| .TH curl_easy_setopt 3 "21 Feb 2006" "libcurl 7.15.2" "libcurl Manual" | ||||
| .SH NAME | ||||
| curl_easy_setopt - set options for a curl easy handle | ||||
| curl_easy_setopt \- set options for a curl easy handle | ||||
| .SH SYNOPSIS | ||||
| #include <curl/curl.h> | ||||
|  | ||||
| @@ -44,11 +44,11 @@ between transfers, so if you want subsequent transfers with different options, | ||||
| you must change them between the transfers. You can optionally reset all | ||||
| options back to internal default with \fIcurl_easy_reset(3)\fP. | ||||
|  | ||||
| \fBNOTE:\fP strings passed to libcurl as 'char *' arguments, will not be | ||||
| copied by the library. Instead you should keep them available until libcurl no | ||||
| longer needs them. Failing to do so will cause very odd behavior or even | ||||
| crashes. libcurl will need them until you call \fIcurl_easy_cleanup(3)\fP or | ||||
| you set the same option again to use a different pointer. | ||||
| Strings passed to libcurl as 'char *' arguments, will not be copied by the | ||||
| library. Instead you should keep them available until libcurl no longer needs | ||||
| them. Failing to do so will cause very odd behavior or even crashes. libcurl | ||||
| will need them until you call \fIcurl_easy_cleanup(3)\fP or you set the same | ||||
| option again to use a different pointer. | ||||
|  | ||||
| The \fIhandle\fP is the return code from a \fIcurl_easy_init(3)\fP or | ||||
| \fIcurl_easy_duphandle(3)\fP call. | ||||
| @@ -70,8 +70,8 @@ preceding the data (like HTTP). | ||||
| A non-zero parameter tells the library to shut off the built-in progress meter | ||||
| completely. | ||||
|  | ||||
| \fBNOTE:\fP future versions of libcurl is likely to not have any built-in | ||||
| progress meter at all. | ||||
| Future versions of libcurl is likely to not have any built-in progress meter | ||||
| at all. | ||||
| .IP CURLOPT_NOSIGNAL | ||||
| Pass a long. If it is non-zero, libcurl will not use any functions that | ||||
| install signal handlers or any functions that cause signals to be sent to the | ||||
| @@ -96,19 +96,26 @@ transfer and return \fICURLE_WRITE_ERROR\fP. | ||||
| This function may be called with zero bytes data if the transfered file is | ||||
| empty. | ||||
|  | ||||
| Set this option to NULL to get the internal default function. The internal | ||||
| default function will write the data to the FILE * given with | ||||
| \fICURLOPT_WRITEDATA\fP. | ||||
|  | ||||
| Set the \fIstream\fP argument with the \fICURLOPT_WRITEDATA\fP option. | ||||
|  | ||||
| \fBNOTE:\fP you will be passed as much data as possible in all invokes, but | ||||
| you cannot possibly make any assumptions. It may be one byte, it may be | ||||
| The callback function will be passed as much data as possible in all invokes, | ||||
| but you cannot possibly make any assumptions. It may be one byte, it may be | ||||
| thousands. The maximum amount of data that can be passed to the write callback | ||||
| is defined in the curl.h header file: CURL_MAX_WRITE_SIZE. | ||||
| .IP CURLOPT_WRITEDATA | ||||
| Data pointer to pass to the file write function. Note that if you specify the | ||||
| \fICURLOPT_WRITEFUNCTION\fP, this is the pointer you'll get as input. If you | ||||
| don't use a callback, you must pass a 'FILE *' as libcurl will pass this to | ||||
| fwrite() when writing data. | ||||
| Data pointer to pass to the file write function. If you use the | ||||
| \fICURLOPT_WRITEFUNCTION\fP option, this is the pointer you'll get as | ||||
| input. If you don't use a callback, you must pass a 'FILE *' as libcurl will | ||||
| pass this to fwrite() when writing data. | ||||
|  | ||||
| \fBNOTE:\fP If you're using libcurl as a win32 DLL, you MUST use the | ||||
| The internal \fICURLOPT_WRITEFUNCTION\fP will write the data to the FILE * | ||||
| given with this option, or to stdout if this option hasn't been set. | ||||
|  | ||||
| If you're using libcurl as a win32 DLL, you \fBMUST\fP use the | ||||
| \fICURLOPT_WRITEFUNCTION\fP if you set this option or you will experience | ||||
| crashes. | ||||
|  | ||||
| @@ -129,15 +136,20 @@ server expected it, like when you've told you will upload N bytes and you | ||||
| upload less than N bytes), you may experience that the server "hangs" waiting | ||||
| for the rest of the data that won't come. | ||||
|  | ||||
| In libcurl 7.12.1 and later, the read callback may return | ||||
| \fICURL_READFUNC_ABORT\fP to stop the current operation at once, with a | ||||
| \fICURLE_ABORTED_BY_CALLBACK\fP error code from the transfer. | ||||
| .IP CURLOPT_READDATA | ||||
| Data pointer to pass to the file read function. Note that if you specify the | ||||
| \fICURLOPT_READFUNCTION\fP, this is the pointer you'll get as input. If you | ||||
| don't specify a read callback, this must be a valid FILE *. | ||||
| The read callback may return \fICURL_READFUNC_ABORT\fP to stop the current | ||||
| operation immediately, resulting in a \fICURLE_ABORTED_BY_CALLBACK\fP error | ||||
| code from the transfer (Added in 7.12.1) | ||||
|  | ||||
| \fBNOTE:\fP If you're using libcurl as a win32 DLL, you MUST use a | ||||
| If you set the callback pointer to NULL, or doesn't set it at all, the default | ||||
| internal read function will be used. It is simply doing an fread() on the FILE | ||||
| * stream set with \fICURLOPT_READDATA\fP. | ||||
| .IP CURLOPT_READDATA | ||||
| Data pointer to pass to the file read function. If you use the | ||||
| \fICURLOPT_READFUNCTION\fP option, this is the pointer you'll get as input. If | ||||
| you don't specify a read callback but instead rely on the default internal | ||||
| read function, this data must be a valid readable FILE *. | ||||
|  | ||||
| If you're using libcurl as a win32 DLL, you MUST use a | ||||
| \fICURLOPT_READFUNCTION\fP if you set this option. | ||||
|  | ||||
| This option is also known with the older name \fICURLOPT_INFILE\fP, the name | ||||
| @@ -157,34 +169,49 @@ added in 7.12.3) | ||||
| .IP CURLOPT_PROGRESSFUNCTION | ||||
| Function pointer that should match the \fIcurl_progress_callback\fP prototype | ||||
| found in \fI<curl/curl.h>\fP. This function gets called by libcurl instead of | ||||
| its internal equivalent with a frequent interval during data transfer. | ||||
| Unknown/unused argument values will be set to zero (like if you only download | ||||
| data, the upload size will remain 0). Returning a non-zero value from this | ||||
| callback will cause libcurl to abort the transfer and return | ||||
| \fICURLE_ABORTED_BY_CALLBACK\fP. | ||||
| its internal equivalent with a frequent interval during data transfer (roughly | ||||
| once per second).  Unknown/unused argument values pass to the callback will be | ||||
| set to zero (like if you only download data, the upload size will remain | ||||
| 0). Returning a non-zero value from this callback will cause libcurl to abort | ||||
| the transfer and return \fICURLE_ABORTED_BY_CALLBACK\fP. | ||||
|  | ||||
| Also note that \fICURLOPT_NOPROGRESS\fP must be set to FALSE to make this | ||||
| function actually get called. | ||||
| If you transfer data with the multi interface, this function will not be | ||||
| called during periods of idleness unless you call the appropriate libcurl | ||||
| function that performs transfers. Usage of the \fBCURLOPT_PROGRESSFUNCTION\fP | ||||
| callback is not recommended when using the multi interface. | ||||
|  | ||||
| \fICURLOPT_NOPROGRESS\fP must be set to FALSE to make this function actually | ||||
| get called. | ||||
| .IP CURLOPT_PROGRESSDATA | ||||
| Pass a pointer that will be untouched by libcurl and passed as the first | ||||
| argument in the progress callback set with \fICURLOPT_PROGRESSFUNCTION\fP. | ||||
| .IP CURLOPT_HEADERFUNCTION | ||||
| Function pointer that should match the following prototype: \fIsize_t | ||||
| function( void *ptr, size_t size, size_t nmemb, void *stream);\fP. This | ||||
| function gets called by libcurl as soon as there is received header data that | ||||
| needs to be written down. The headers are guaranteed to be written one-by-one | ||||
| and only complete lines are written. Parsing headers should be easy enough | ||||
| function gets called by libcurl as soon as it has received header data. The | ||||
| header callback will be called once for each header and only complete header | ||||
| lines are passed on to the callback. Parsing headers should be easy enough | ||||
| using this. The size of the data pointed to by \fIptr\fP is \fIsize\fP | ||||
| multiplied with \fInmemb\fP.  The pointer named \fIstream\fP will be the one | ||||
| you passed to libcurl with the \fICURLOPT_WRITEHEADER\fP option.  Return the | ||||
| number of bytes actually written or return -1 to signal error to the library | ||||
| multiplied with \fInmemb\fP. Do not assume that the header line is zero | ||||
| terminated! The pointer named \fIstream\fP is the one you set with the | ||||
| \fICURLOPT_WRITEHEADER\fP option. The callback function must return the number | ||||
| of bytes actually taken care of, or return -1 to signal error to the library | ||||
| (it will cause it to abort the transfer with a \fICURLE_WRITE_ERROR\fP return | ||||
| code). | ||||
|  | ||||
| Since 7.14.1: When a server sends a chunked encoded transfer, it may contain a | ||||
| trailer. That trailer is identical to a HTTP header and if such a trailer is | ||||
| received it is passed to the application using this callback as well. There | ||||
| are several ways to detect it being a trailer and not an ordinary header: 1) | ||||
| it comes after the response-body. 2) it comes after the final header line (CR | ||||
| LF) 3) a Trailer: header among the response-headers mention what header to | ||||
| expect in the trailer. | ||||
| .IP CURLOPT_WRITEHEADER | ||||
| Pass a pointer to be used to write the header part of the received data to. If | ||||
| you don't use your own callback to take care of the writing, this must be a | ||||
| valid FILE *. See also the \fICURLOPT_HEADERFUNCTION\fP option above on how to | ||||
| set a custom get-all-headers callback. | ||||
| (This option is also known as \fBCURLOPT_HEADERDATA\fP) Pass a pointer to be | ||||
| used to write the header part of the received data to. If you don't use your | ||||
| own callback to take care of the writing, this must be a valid FILE *. See | ||||
| also the \fICURLOPT_HEADERFUNCTION\fP option above on how to set a custom | ||||
| get-all-headers callback. | ||||
| .IP CURLOPT_DEBUGFUNCTION | ||||
| Function pointer that should match the following prototype: \fIint | ||||
| curl_debug_callback (CURL *, curl_infotype, char *, size_t, void *);\fP | ||||
| @@ -223,10 +250,13 @@ perform operation will return the error code from this callback function.  Set | ||||
| the \fIparm\fP argument with the \fICURLOPT_SSL_CTX_DATA\fP option. This | ||||
| option was introduced in 7.11.0. | ||||
|  | ||||
| \fBNOTE:\fP To use this properly, a non-trivial amount of knowledge of the | ||||
| openssl libraries is necessary. Using this function allows for example to use | ||||
| openssl callbacks to add additional validation code for certificates, and even | ||||
| to change the actual URI of an HTTPS request (example used in the lib509 test | ||||
| This function will get called on all new connections made to a server, during | ||||
| the SSL negotiation. The SSL_CTX pointer will be a new one every time. | ||||
|  | ||||
| To use this properly, a non-trivial amount of knowledge of the openssl | ||||
| libraries is necessary. Using this function allows for example to use openssl | ||||
| callbacks to add additional validation code for certificates, and even to | ||||
| change the actual URI of an HTTPS request (example used in the lib509 test | ||||
| case).  See also the example section for a replacement of the key, certificate | ||||
| and trust file settings. | ||||
| .IP CURLOPT_SSL_CTX_DATA | ||||
| @@ -236,20 +266,21 @@ parameter, otherwise \fBNULL\fP. (Added in 7.11.0) | ||||
| .SH ERROR OPTIONS | ||||
| .IP CURLOPT_ERRORBUFFER | ||||
| Pass a char * to a buffer that the libcurl may store human readable error | ||||
| messages in. This may be more helpful than just the return code from the | ||||
| library. The buffer must be at least CURL_ERROR_SIZE big. | ||||
| messages in. This may be more helpful than just the return code from | ||||
| \fIcurl_easy_perform\fP. The buffer must be at least CURL_ERROR_SIZE big. | ||||
|  | ||||
| Use \fICURLOPT_VERBOSE\fP and \fICURLOPT_DEBUGFUNCTION\fP to better | ||||
| debug/trace why errors happen. | ||||
|  | ||||
| \fBNote:\fP if the library does not return an error, the buffer may not have | ||||
| been touched. Do not rely on the contents in those cases. | ||||
| If the library does not return an error, the buffer may not have been | ||||
| touched. Do not rely on the contents in those cases. | ||||
|  | ||||
| .IP CURLOPT_STDERR | ||||
| Pass a FILE * as parameter. Tell libcurl to use this stream instead of stderr | ||||
| when showing the progress meter and displaying \fICURLOPT_VERBOSE\fP data. | ||||
| .IP CURLOPT_FAILONERROR | ||||
| A non-zero parameter tells the library to fail silently if the HTTP code | ||||
| returned is equal to or larger than 300. The default action would be to return | ||||
| returned is equal to or larger than 400. The default action would be to return | ||||
| the page normally, ignoring that code. | ||||
| .SH NETWORK OPTIONS | ||||
| .IP CURLOPT_URL | ||||
| @@ -264,7 +295,7 @@ given protocol of the set URL is not supported, libcurl will return on error | ||||
| \fIcurl_multi_perform(3)\fP. Use \fIcurl_version_info(3)\fP for detailed info | ||||
| on which protocols that are supported. | ||||
|  | ||||
| \fBNOTE:\fP \fICURLOPT_URL\fP is the only option that must be set before | ||||
| \fICURLOPT_URL\fP is the only option that must be set before | ||||
| \fIcurl_easy_perform(3)\fP is called. | ||||
| .IP CURLOPT_PROXY | ||||
| Set HTTP proxy to use. The parameter should be a char * to a zero terminated | ||||
| @@ -274,31 +305,49 @@ be prefixed with [protocol]:// since any such prefix will be ignored. The | ||||
| proxy's port number may optionally be specified with the separate option | ||||
| \fICURLOPT_PROXYPORT\fP. | ||||
|  | ||||
| \fBNOTE:\fP when you tell the library to use an HTTP proxy, libcurl will | ||||
| transparently convert operations to HTTP even if you specify an FTP URL | ||||
| etc. This may have an impact on what other features of the library you can | ||||
| use, such as \fICURLOPT_QUOTE\fP and similar FTP specifics that don't work | ||||
| unless you tunnel through the HTTP proxy. Such tunneling is activated with | ||||
| When you tell the library to use an HTTP proxy, libcurl will transparently | ||||
| convert operations to HTTP even if you specify an FTP URL etc. This may have | ||||
| an impact on what other features of the library you can use, such as | ||||
| \fICURLOPT_QUOTE\fP and similar FTP specifics that don't work unless you | ||||
| tunnel through the HTTP proxy. Such tunneling is activated with | ||||
| \fICURLOPT_HTTPPROXYTUNNEL\fP. | ||||
|  | ||||
| \fBNOTE2:\fP libcurl respects the environment variables \fBhttp_proxy\fP, | ||||
| \fBftp_proxy\fP, \fBall_proxy\fP etc, if any of those is set. | ||||
| libcurl respects the environment variables \fBhttp_proxy\fP, \fBftp_proxy\fP, | ||||
| \fBall_proxy\fP etc, if any of those is set. The \fICURLOPT_PROXY\fP option | ||||
| does however override any possibly set environment variables. | ||||
|  | ||||
| Starting with 7.14.1, the proxy host string can be specified the exact same | ||||
| way as the proxy environment variables, include protocol prefix (http://) and | ||||
| embedded user + password. | ||||
| .IP CURLOPT_PROXYPORT | ||||
| Pass a long with this option to set the proxy port to connect to unless it is | ||||
| specified in the proxy string \fICURLOPT_PROXY\fP. | ||||
| .IP CURLOPT_PROXYTYPE | ||||
| Pass a long with this option to set type of the proxy. Available options for | ||||
| this are \fICURLPROXY_HTTP\fP and \fICURLPROXY_SOCKS5\fP, with the HTTP one | ||||
| being default. (Added in 7.10) | ||||
| this are \fICURLPROXY_HTTP\fP, \fICURLPROXY_SOCKS4\fP (added in 7.15.2) | ||||
| \fICURLPROXY_SOCKS5\fP. The HTTP type is default. (Added in 7.10) | ||||
| .IP CURLOPT_HTTPPROXYTUNNEL | ||||
| Set the parameter to non-zero to get the library to tunnel all operations | ||||
| through a given HTTP proxy. Note that there is a big difference between using | ||||
| a proxy and to tunnel through it. If you don't know what this means, you | ||||
| probably don't want this tunneling option. | ||||
| through a given HTTP proxy. There is a big difference between using a proxy | ||||
| and to tunnel through it. If you don't know what this means, you probably | ||||
| don't want this tunneling option. | ||||
| .IP CURLOPT_INTERFACE | ||||
| Pass a char * as parameter. This set the interface name to use as outgoing | ||||
| network interface. The name can be an interface name, an IP address or a host | ||||
| name. | ||||
| .IP CURLOPT_LOCALPORT | ||||
| Pass a long. This sets the local port number of the socket used for | ||||
| connection. This can be used in combination with \fICURLOPT_INTERFACE\fP and | ||||
| you are recommended to use \fICURLOPT_LOCALPORTRANGE\fP as well when this is | ||||
| set. Note that port numbers are only valid 1 - 65535. (Added in 7.15.2) | ||||
| .IP CURLOPT_LOCALPORTRANGE | ||||
| Pass a long. This is the number of attempts libcurl should do to find a | ||||
| working local port number. It starts with the given \fICURLOPT_LOCALPORT\fP | ||||
| and adds one to the number for each retry. Setting this value to 1 or below | ||||
| will make libcurl do only one try for exact port number. Note that port | ||||
| numbers by nature is a scarce resource that will be busy at times so setting | ||||
| this value to something too low might cause unnecessary connection setup | ||||
| failures. (Added in 7.15.2) | ||||
| .IP CURLOPT_DNS_CACHE_TIMEOUT | ||||
| Pass a long, this sets the timeout in seconds. Name resolves will be kept in | ||||
| memory for this number of seconds. Set to zero (0) to completely disable | ||||
| @@ -313,10 +362,14 @@ thread-safe and this will use a global variable. | ||||
| to using the share interface instead! See \fICURLOPT_SHARE\fP and | ||||
| \fIcurl_share_init(3)\fP. | ||||
| .IP CURLOPT_BUFFERSIZE | ||||
| Pass a long specifying your preferred size for the receive buffer in libcurl. | ||||
| The main point of this would be that the write callback gets called more often | ||||
| and with smaller chunks. This is just treated as a request, not an order. You | ||||
| cannot be guaranteed to actually get the given size. (Added in 7.10) | ||||
| Pass a long specifying your preferred size (in bytes) for the receive buffer | ||||
| in libcurl.  The main point of this would be that the write callback gets | ||||
| called more often and with smaller chunks. This is just treated as a request, | ||||
| not an order. You cannot be guaranteed to actually get the given size. (Added | ||||
| in 7.10) | ||||
|  | ||||
| This size is by default set as big as possible (CURL_MAX_WRITE_SIZE), so it | ||||
| only makse sense to use this option if you want it smaller. | ||||
| .IP CURLOPT_PORT | ||||
| Pass a long specifying what remote port number to connect to, instead of the | ||||
| one specified in the URL or the default port for the used protocol. | ||||
| @@ -342,9 +395,9 @@ This parameter controls the preference of libcurl between using user names and | ||||
| passwords from your \fI~/.netrc\fP file, relative to user names and passwords | ||||
| in the URL supplied with \fICURLOPT_URL\fP. | ||||
|  | ||||
| \fBNote:\fP libcurl uses a user name (and supplied or prompted password) | ||||
| supplied with \fICURLOPT_USERPWD\fP in preference to any of the options | ||||
| controlled by this parameter. | ||||
| libcurl uses a user name (and supplied or prompted password) supplied with | ||||
| \fICURLOPT_USERPWD\fP in preference to any of the options controlled by this | ||||
| parameter. | ||||
|  | ||||
| Pass a long, set to one of the values described below. | ||||
| .RS | ||||
| @@ -368,9 +421,8 @@ and to search the file with the host only. | ||||
| Only machine name, user name and password are taken into account | ||||
| (init macros and similar things aren't supported). | ||||
|  | ||||
| \fBNote:\fP libcurl does not verify that the file has the correct properties | ||||
| set (as the standard Unix ftp client does). It should only be readable by | ||||
| user. | ||||
| libcurl does not verify that the file has the correct properties set (as the | ||||
| standard Unix ftp client does). It should only be readable by user. | ||||
| .IP CURLOPT_NETRC_FILE | ||||
| Pass a char * as parameter, pointing to a zero terminated string containing | ||||
| the full path name to the file you want libcurl to use as .netrc file. If this | ||||
| @@ -380,6 +432,11 @@ find the a .netrc file in the current user's home directory. (Added in 7.10.9) | ||||
| Pass a char * as parameter, which should be [user name]:[password] to use for | ||||
| the connection. Use \fICURLOPT_HTTPAUTH\fP to decide authentication method. | ||||
|  | ||||
| When using NTLM, you can set domain by prepending it to the user name and | ||||
| separating the domain and name with a forward (/) or backward slash (\\). Like | ||||
| this: "domain/user:password" or "domain\\user:password". Some HTTP servers (on | ||||
| Windows) support this style even for Basic authentication. | ||||
|  | ||||
| When using HTTP and \fICURLOPT_FOLLOWLOCATION\fP, libcurl might perform | ||||
| several requests to possibly different hosts. libcurl will only send this user | ||||
| and password information to hosts using the initial host name (unless | ||||
| @@ -395,9 +452,9 @@ Pass a long as parameter, which is set to a bitmask, to tell libcurl what | ||||
| authentication method(s) you want it to use. The available bits are listed | ||||
| below. If more than one bit is set, libcurl will first query the site to see | ||||
| what authentication methods it supports and then pick the best one you allow | ||||
| it to use. Note that for some methods, this will induce an extra network | ||||
| round-trip. Set the actual name and password with the \fICURLOPT_USERPWD\fP | ||||
| option. (Added in 7.10.6) | ||||
| it to use. For some methods, this will induce an extra network round-trip. Set | ||||
| the actual name and password with the \fICURLOPT_USERPWD\fP option. (Added in | ||||
| 7.10.6) | ||||
| .RS | ||||
| .IP CURLAUTH_BASIC | ||||
| HTTP Basic authentication. This is the default choice, and the only method | ||||
| @@ -415,15 +472,14 @@ applications. It is primarily meant as a support for Kerberos5 authentication | ||||
| but may be also used along with another authentication methods. For more | ||||
| information see IETF draft draft-brezak-spnego-http-04.txt. | ||||
|  | ||||
| \fBNOTE\fP that you need to build libcurl with a suitable GSS-API library for | ||||
| this to work. | ||||
| You need to build libcurl with a suitable GSS-API library for this to work. | ||||
| .IP CURLAUTH_NTLM | ||||
| HTTP NTLM authentication. A proprietary protocol invented and used by | ||||
| Microsoft. It uses a challenge-response and hash concept similar to Digest, to | ||||
| prevent the password from being eavesdropped. | ||||
|  | ||||
| \fBNOTE\fP that you need to build libcurl with SSL support for this option to | ||||
| work. | ||||
| You need to build libcurl with OpenSSL support for this option to work, or | ||||
| build libcurl on Windows. | ||||
| .IP CURLAUTH_ANY | ||||
| This is a convenience macro that sets all bits and thus makes libcurl pick any | ||||
| it finds suitable. libcurl will automatically select the one it finds most | ||||
| @@ -438,11 +494,11 @@ Pass a long as parameter, which is set to a bitmask, to tell libcurl what | ||||
| authentication method(s) you want it to use for your proxy authentication.  If | ||||
| more than one bit is set, libcurl will first query the site to see what | ||||
| authentication methods it supports and then pick the best one you allow it to | ||||
| use. Note that for some methods, this will induce an extra network | ||||
| round-trip. Set the actual name and password with the | ||||
| \fICURLOPT_PROXYUSERPWD\fP option. The bitmask can be constructed by or'ing | ||||
| together the bits listed above for the \fICURLOPT_HTTPAUTH\fP option. As of | ||||
| this writing, only Basic, Digest and NTLM work. (Added in 7.10.7) | ||||
| use. For some methods, this will induce an extra network round-trip. Set the | ||||
| actual name and password with the \fICURLOPT_PROXYUSERPWD\fP option. The | ||||
| bitmask can be constructed by or'ing together the bits listed above for the | ||||
| \fICURLOPT_HTTPAUTH\fP option. As of this writing, only Basic, Digest and NTLM | ||||
| work. (Added in 7.10.7) | ||||
| .SH HTTP OPTIONS | ||||
| .IP CURLOPT_AUTOREFERER | ||||
| Pass a non-zero parameter to enable this. When enabled, libcurl will | ||||
| @@ -465,19 +521,21 @@ lib/README.encoding for details. | ||||
| A non-zero parameter tells the library to follow any Location: header that the | ||||
| server sends as part of an HTTP header. | ||||
|  | ||||
| \fBNOTE:\fP this means that the library will re-send the same request on the | ||||
| new location and follow new Location: headers all the way until no more such | ||||
| headers are returned. \fICURLOPT_MAXREDIRS\fP can be used to limit the number | ||||
| of redirects libcurl will follow. | ||||
| This means that the library will re-send the same request on the new location | ||||
| and follow new Location: headers all the way until no more such headers are | ||||
| returned. \fICURLOPT_MAXREDIRS\fP can be used to limit the number of redirects | ||||
| libcurl will follow. | ||||
| .IP CURLOPT_UNRESTRICTED_AUTH | ||||
| A non-zero parameter tells the library it can continue to send authentication | ||||
| (user+password) when following locations, even when hostname changed. Note | ||||
| that this is meaningful only when setting \fICURLOPT_FOLLOWLOCATION\fP. | ||||
| (user+password) when following locations, even when hostname changed. This | ||||
| option is meaningful only when setting \fICURLOPT_FOLLOWLOCATION\fP. | ||||
| .IP CURLOPT_MAXREDIRS | ||||
| Pass a long. The set number will be the redirection limit. If that many | ||||
| redirections have been followed, the next redirect will cause an error | ||||
| (\fICURLE_TOO_MANY_REDIRECTS\fP). This option only makes sense if the | ||||
| \fICURLOPT_FOLLOWLOCATION\fP is used at the same time. | ||||
| \fICURLOPT_FOLLOWLOCATION\fP is used at the same time. Added in 7.15.1: | ||||
| Setting the limit to 0 will make libcurl refuse any redirect. Set it to -1 for | ||||
| an infinite number of redirects (which is the default) | ||||
| .IP CURLOPT_PUT | ||||
| A non-zero parameter tells the library to use HTTP PUT to transfer data. The | ||||
| data should be set with \fICURLOPT_READDATA\fP and \fICURLOPT_INFILESIZE\fP. | ||||
| @@ -511,8 +569,11 @@ adding a header like "Transfer-Encoding: chunked" with | ||||
| \fICURLOPT_HTTPHEADER\fP. With HTTP 1.0 or without chunked transfer, you must | ||||
| specify the size in the request. | ||||
|  | ||||
| NOTE: if you have issued a POST request and want to make a HEAD or GET | ||||
| instead, you must explictly pick the new request type using | ||||
| When setting \fICURLOPT_POST\fP to a non-zero value, it will automatically set | ||||
| \fICURLOPT_NOBODY\fP to 0 (since 7.14.1). | ||||
|  | ||||
| If you issue a POST request and then want to make a HEAD or GET using the same | ||||
| re-used handle, you must explictly set the new request type using | ||||
| \fICURLOPT_NOBODY\fP or \fICURLOPT_HTTPGET\fP or similar. | ||||
| .IP CURLOPT_POSTFIELDS | ||||
| Pass a char * as parameter, which should be the full data to post in an HTTP | ||||
| @@ -528,8 +589,8 @@ commonly used one by HTML forms. See also the \fICURLOPT_POST\fP. Using | ||||
| Using POST with HTTP 1.1 implies the use of a "Expect: 100-continue" header. | ||||
| You can disable this header with \fICURLOPT_HTTPHEADER\fP as usual. | ||||
|  | ||||
| \fBNote:\fP to make multipart/formdata posts (aka rfc1867-posts), check out | ||||
| the \fICURLOPT_HTTPPOST\fP option. | ||||
| To make multipart/formdata posts (aka rfc1867-posts), check out the | ||||
| \fICURLOPT_HTTPPOST\fP option. | ||||
| .IP CURLOPT_POSTFIELDSIZE | ||||
| If you want to post data to the server without letting libcurl do a strlen() | ||||
| to measure the data size, this option must be used. When this option is used | ||||
| @@ -550,6 +611,9 @@ must remain intact until you close this curl handle again with | ||||
|  | ||||
| Using POST with HTTP 1.1 implies the use of a "Expect: 100-continue" header. | ||||
| You can disable this header with \fICURLOPT_HTTPHEADER\fP as usual. | ||||
|  | ||||
| When setting \fICURLOPT_HTTPPOST\fP, it will automatically set | ||||
| \fICURLOPT_NOBODY\fP to 0 (since 7.14.1). | ||||
| .IP CURLOPT_REFERER | ||||
| Pass a pointer to a zero terminated string as parameter. It will be used to | ||||
| set the Referer: header in the http request sent to the remote server. This | ||||
| @@ -569,19 +633,21 @@ list. If you add a header that is otherwise generated and used by libcurl | ||||
| internally, your added one will be used instead. If you add a header with no | ||||
| contents as in 'Accept:' (no data on the right side of the colon), the | ||||
| internally used header will get disabled. Thus, using this option you can add | ||||
| new headers, replace internal headers and remove internal headers. The | ||||
| headers included in the linked list must not be CRLF-terminated, because | ||||
| curl adds CRLF after each header item. Failure to comply with this will | ||||
| result in strange bugs because the server will most likely ignore part | ||||
| of the headers you specified. | ||||
| new headers, replace internal headers and remove internal headers. To add a | ||||
| header with no contents, make the contents be two quotes: \&"". The headers | ||||
| included in the linked list must not be CRLF-terminated, because curl adds | ||||
| CRLF after each header item. Failure to comply with this will result in | ||||
| strange bugs because the server will most likely ignore part of the headers | ||||
| you specified. | ||||
|  | ||||
| The first line in a request (usually containing a GET or POST) is not a header | ||||
| and cannot be replaced using this option. Only the lines following the | ||||
| request-line are headers. | ||||
| The first line in a request (containing the method, usually a GET or POST) is | ||||
| not a header and cannot be replaced using this option. Only the lines | ||||
| following the request-line are headers. Adding this method line in this list | ||||
| of headers will only cause your request to send an invalid header. | ||||
|  | ||||
| Pass a NULL to this to reset back to no custom headers. | ||||
|  | ||||
| \fBNOTE:\fP The most commonly replaced headers have "shortcuts" in the options | ||||
| The most commonly replaced headers have "shortcuts" in the options | ||||
| \fICURLOPT_COOKIE\fP, \fICURLOPT_USERAGENT\fP and \fICURLOPT_REFERER\fP. | ||||
| .IP CURLOPT_HTTP200ALIASES | ||||
| Pass a pointer to a linked list of aliases to be treated as valid HTTP 200 | ||||
| @@ -594,9 +660,9 @@ The linked list should be a fully valid list of struct curl_slist structs, and | ||||
| be properly filled in.  Use \fIcurl_slist_append(3)\fP to create the list and | ||||
| \fIcurl_slist_free_all(3)\fP to clean up an entire list. | ||||
|  | ||||
| \fBNOTE:\fP The alias itself is not parsed for any version strings.  So if your | ||||
| alias is "MYHTTP/9.9", Libcurl will not treat the server as responding with | ||||
| HTTP version 9.9.  Instead Libcurl will use the value set by option | ||||
| The alias itself is not parsed for any version strings.  So if your alias is | ||||
| \&"MYHTTP/9.9", Libcurl will not treat the server as responding with HTTP | ||||
| version 9.9.  Instead Libcurl will use the value set by option | ||||
| \fICURLOPT_HTTP_VERSION\fP. | ||||
| .IP CURLOPT_COOKIE | ||||
| Pass a pointer to a zero terminated string as parameter. It will be used to | ||||
| @@ -620,6 +686,9 @@ dumped to a file. | ||||
| Given an empty or non-existing file or by passing the empty string (""), this | ||||
| option will enable cookies for this curl handle, making it understand and | ||||
| parse received cookies and then use matching cookies in future request. | ||||
|  | ||||
| If you use this option multiple times, you just add more files to read. | ||||
| Subsequent files will add more cookies. | ||||
| .IP CURLOPT_COOKIEJAR | ||||
| Pass a file name as char *, zero terminated. This will make libcurl write all | ||||
| internally known cookies to the specified file when \fIcurl_easy_cleanup(3)\fP | ||||
| @@ -628,7 +697,7 @@ instead have the cookies written to stdout. Using this option also enables | ||||
| cookies for this session, so if you for example follow a location it will make | ||||
| matching cookies get sent accordingly. | ||||
|  | ||||
| \fBNOTE:\fP If the cookie jar file can't be created or written to (when the | ||||
| If the cookie jar file can't be created or written to (when the | ||||
| \fIcurl_easy_cleanup(3)\fP is called), libcurl will not and cannot report an | ||||
| error for this. Using \fICURLOPT_VERBOSE\fP or \fICURLOPT_DEBUGFUNCTION\fP | ||||
| will get a warning to display, but that is the only visible feedback you get | ||||
| @@ -640,10 +709,18 @@ cookies" from the previous session. By default, libcurl always stores and | ||||
| loads all cookies, independent if they are session cookies are not. Session | ||||
| cookies are cookies without expiry date and they are meant to be alive and | ||||
| existing for this "session" only. | ||||
| .IP CURLOPT_COOKIELIST | ||||
| Pass a char * to a cookie string. Cookie can be either in Netscape / Mozilla | ||||
| format or just regular HTTP-style header (Set-Cookie: ...) format. If cURL | ||||
| cookie engine was not enabled it will enable its cookie engine.  Passing a | ||||
| magic string \&"ALL" will erase all cookies known by cURL. (Added in 7.14.1) | ||||
| .IP CURLOPT_HTTPGET | ||||
| Pass a long. If the long is non-zero, this forces the HTTP request to get back | ||||
| to GET. usable if a POST, HEAD, PUT or a custom request have been used | ||||
| previously using the same curl handle. | ||||
|  | ||||
| When setting \fICURLOPT_HTTPGET\fP to a non-zero value, it will automatically | ||||
| set \fICURLOPT_NOBODY\fP to 0 (since 7.14.1). | ||||
| .IP CURLOPT_HTTP_VERSION | ||||
| Pass a long, set to one of the values described below. They force libcurl to | ||||
| use the specific HTTP versions. This is not sensible to do unless you have a | ||||
| @@ -656,6 +733,12 @@ it thinks fit. | ||||
| Enforce HTTP 1.0 requests. | ||||
| .IP CURL_HTTP_VERSION_1_1 | ||||
| Enforce HTTP 1.1 requests. | ||||
| .IP CURLOPT_IGNORE_CONTENT_LENGTH | ||||
| Ignore the Content-Length header. This is useful for Apache 1.x (and similar | ||||
| servers) which will report incorrect content length for files over 2 | ||||
| gigabytes. If this option is used, curl will not be able to accurately report | ||||
| progress, and will simply stop the download when the server ends the | ||||
| connection. (added in 7.14.1) | ||||
| .RE | ||||
| .SH FTP OPTIONS | ||||
| .IP CURLOPT_FTPPORT | ||||
| @@ -721,11 +804,19 @@ directory. (Added in 7.10.7) | ||||
| .IP CURLOPT_FTP_RESPONSE_TIMEOUT | ||||
| Pass a long.  Causes curl to set a timeout period (in seconds) on the amount | ||||
| of time that the server is allowed to take in order to generate a response | ||||
| message for a command before the session is considered hung.  Note that while | ||||
| curl is waiting for a response, this value overrides \fICURLOPT_TIMEOUT\fP. It | ||||
| is recommended that if used in conjunction with \fICURLOPT_TIMEOUT\fP, you set | ||||
| message for a command before the session is considered hung.  While curl is | ||||
| waiting for a response, this value overrides \fICURLOPT_TIMEOUT\fP. It is | ||||
| recommended that if used in conjunction with \fICURLOPT_TIMEOUT\fP, you set | ||||
| \fICURLOPT_FTP_RESPONSE_TIMEOUT\fP to a value smaller than | ||||
| \fICURLOPT_TIMEOUT\fP.  (Added in 7.10.8) | ||||
| .IP CURLOPT_FTP_SKIP_PASV_IP | ||||
| Pass a long. If set to a non-zero value, it instructs libcurl to not use the | ||||
| IP address the server suggests in its 227-response to libcurl's PASV command | ||||
| when libcurl connects the data connection. Instead libcurl will re-use the | ||||
| same IP address it already uses for the control connection. But it will use | ||||
| the port number from the 227-response. (Added in 7.14.2) | ||||
|  | ||||
| This option has no effect if PORT, EPRT or EPSV is used instead of PASV. | ||||
| .IP CURLOPT_FTP_SSL | ||||
| Pass a long using one of the values from below, to make libcurl use your | ||||
| desired level of SSL for the ftp transfer. (Added in 7.11.0) | ||||
| @@ -767,14 +858,34 @@ Exactly like \fICURLOPT_POSTQUOTE\fP, but for the source host. | ||||
| Pass a pointer to a zero-terminated string (or NULL to disable). When an FTP | ||||
| server asks for "account data" after user name and password has been provided, | ||||
| this data is sent off using the ACCT command. (Added in 7.13.0) | ||||
| .IP CURLOPT_FTP_FILEMETHOD | ||||
| Pass a long that should have one of the following values. This option controls | ||||
| what method libcurl should use to reach a file on a FTP(S) server. The | ||||
| argument should be one of the following alternatives: | ||||
| .RS | ||||
| .IP CURLFTPMETHOD_MULTICWD | ||||
| libcurl does a single CWD operation for each path part in the given URL. For | ||||
| deep hierarchies this means very many commands. This is how RFC1738 says it | ||||
| should be done. This is the default but the slowest behavior. | ||||
| .IP CURLFTPMETHOD_NOCWD | ||||
| libcurl does no CWD at all. libcurl will do SIZE, RETR, STOR etc and give a | ||||
| full path to the server for all these commands. This is the fastest behavior. | ||||
| .IP CURLFTPMETHOD_SINGLECWD | ||||
| libcurl 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 | ||||
| compliant than 'nocwd' but without the full penalty of 'multicwd'. | ||||
| .RE | ||||
| .SH PROTOCOL OPTIONS | ||||
| .IP CURLOPT_TRANSFERTEXT | ||||
| A non-zero parameter tells the library to use ASCII mode for ftp transfers, | ||||
| instead of the default binary transfer. For LDAP transfers it gets the data in | ||||
| plain text instead of HTML and for win32 systems it does not set the stdout to | ||||
| binary mode. This option can be usable when transferring text data between | ||||
| systems with different views on certain characters, such as newlines or | ||||
| similar. | ||||
| instead of the default binary transfer. For win32 systems it does not set the | ||||
| stdout to binary mode. This option can be usable when transferring text data | ||||
| between systems with different views on certain characters, such as newlines | ||||
| or similar. | ||||
|  | ||||
| libcurl does not do a complete ASCII conversion when doing ASCII transfers | ||||
| over FTP. This is a known limitation/flaw that nobody has rectified. libcurl | ||||
| simply sets the mode to ascii and performs a standard transfer. | ||||
| .IP CURLOPT_CRLF | ||||
| Convert Unix newlines to CRLF newlines on transfers. | ||||
| .IP CURLOPT_RANGE | ||||
| @@ -800,11 +911,11 @@ server supports the command first. | ||||
|  | ||||
| Restore to the internal default by setting this to NULL. | ||||
|  | ||||
| \fBNOTE:\fP Many people have wrongly used this option to replace the entire | ||||
| request with their own, including multiple headers and POST contents. While | ||||
| that might work in many cases, it will cause libcurl to send invalid requests | ||||
| and it could possibly confuse the remote server badly. Use \fICURLOPT_POST\fP | ||||
| and \fICURLOPT_POSTFIELDS\fP to set POST data. Use \fICURLOPT_HTTPHEADER\fP to | ||||
| Many people have wrongly used this option to replace the entire request with | ||||
| their own, including multiple headers and POST contents. While that might work | ||||
| in many cases, it will cause libcurl to send invalid requests and it could | ||||
| possibly confuse the remote server badly. Use \fICURLOPT_POST\fP and | ||||
| \fICURLOPT_POSTFIELDS\fP to set POST data. Use \fICURLOPT_HTTPHEADER\fP to | ||||
| replace or extend the set of headers sent by libcurl. Use | ||||
| \fICURLOPT_HTTP_VERSION\fP to change HTTP version. | ||||
| .IP CURLOPT_FILETIME | ||||
| @@ -818,9 +929,8 @@ A non-zero parameter tells the library to not include the body-part in the | ||||
| output. This is only relevant for protocols that have separate header and body | ||||
| parts. On HTTP(S) servers, this will make libcurl do a HEAD request. | ||||
|  | ||||
| To change back to GET, you should use \fICURLOPT_HTTPGET\fP. To change back to | ||||
| POST, you should use \fICURLOPT_POST\fP. Setting \fICURLOPT_NOBODY\fP to zero | ||||
| has no effect. | ||||
| To change request to GET, you should use \fICURLOPT_HTTPGET\fP. Change request | ||||
| to POST with \fICURLOPT_POST\fP etc. | ||||
| .IP CURLOPT_INFILESIZE | ||||
| When uploading a file to a remote site, this option should be used to tell | ||||
| libcurl what the expected size of the infile is. This value should be passed | ||||
| @@ -849,26 +959,26 @@ Pass a long as parameter. This allows you to specify the maximum size (in | ||||
| bytes) of a file to download. If the file requested is larger than this value, | ||||
| the transfer will not start and CURLE_FILESIZE_EXCEEDED will be returned. | ||||
|  | ||||
| \fBNOTE:\fP The file size is not always known prior to download, and for such | ||||
| files this option has no effect even if the file transfer ends up being larger | ||||
| than this given limit. This concerns both FTP and HTTP transfers. | ||||
| The file size is not always known prior to download, and for such files this | ||||
| option has no effect even if the file transfer ends up being larger than this | ||||
| given limit. This concerns both FTP and HTTP transfers. | ||||
| .IP CURLOPT_MAXFILESIZE_LARGE | ||||
| Pass a curl_off_t as parameter. This allows you to specify the maximum size | ||||
| (in bytes) of a file to download. If the file requested is larger than this | ||||
| value, the transfer will not start and \fICURLE_FILESIZE_EXCEEDED\fP will be | ||||
| returned. (Added in 7.11.0) | ||||
|  | ||||
| \fBNOTE:\fP The file size is not always known prior to download, and for such | ||||
| files this option has no effect even if the file transfer ends up being larger | ||||
| than this given limit. This concerns both FTP and HTTP transfers. | ||||
| The file size is not always known prior to download, and for such files this | ||||
| option has no effect even if the file transfer ends up being larger than this | ||||
| given limit. This concerns both FTP and HTTP transfers. | ||||
| .IP CURLOPT_TIMECONDITION | ||||
| Pass a long as parameter. This defines how the \fICURLOPT_TIMEVALUE\fP time | ||||
| value is treated. You can set this parameter to \fICURL_TIMECOND_IFMODSINCE\fP | ||||
| or \fICURL_TIMECOND_IFUNMODSINCE\fP. This feature applies to HTTP and FTP. | ||||
|  | ||||
| \fBNOTE:\fP The last modification time of a file is not always known and in such | ||||
| instances this feature will have no effect even if the given time condition | ||||
| would have not been met. | ||||
| The last modification time of a file is not always known and in such instances | ||||
| this feature will have no effect even if the given time condition would have | ||||
| not been met. | ||||
| .IP CURLOPT_TIMEVALUE | ||||
| Pass a long as parameter. This should be the time in seconds since 1 jan 1970, | ||||
| and the time will be used in a condition as specified with | ||||
| @@ -881,8 +991,8 @@ considerable time and limiting operations to less than a few minutes risk | ||||
| aborting perfectly normal operations. This option will cause curl to use the | ||||
| SIGALRM to enable time-outing system calls. | ||||
|  | ||||
| \fBNOTE:\fP this is not recommended to use in unix multi-threaded programs, as | ||||
| it uses signals unless \fICURLOPT_NOSIGNAL\fP (see above) is set. | ||||
| In unix-like systems, this might cause signals to be used unless | ||||
| \fICURLOPT_NOSIGNAL\fP is set. | ||||
| .IP CURLOPT_LOW_SPEED_LIMIT | ||||
| Pass a long as parameter. It contains the transfer speed in bytes per second | ||||
| that the transfer should be below during \fICURLOPT_LOW_SPEED_TIME\fP seconds | ||||
| @@ -903,9 +1013,9 @@ When reaching the maximum limit, curl uses the \fICURLOPT_CLOSEPOLICY\fP to | ||||
| figure out which of the existing connections to close to prevent the number of | ||||
| open connections to increase. | ||||
|  | ||||
| \fBNOTE:\fP if you already have performed transfers with this curl handle, | ||||
| setting a smaller MAXCONNECTS than before may cause open connections to get | ||||
| closed unnecessarily. | ||||
| If you already have performed transfers with this curl handle, setting a | ||||
| smaller MAXCONNECTS than before may cause open connections to get closed | ||||
| unnecessarily. | ||||
| .IP CURLOPT_CLOSEPOLICY | ||||
| Pass a long. This option sets what policy libcurl should use when the | ||||
| connection cache is filled and one of the open connections has to be closed to | ||||
| @@ -937,8 +1047,8 @@ it has connected, this option is of no more use. Set to zero to disable | ||||
| connection timeout (it will then only timeout on the system's internal | ||||
| timeouts). See also the \fICURLOPT_TIMEOUT\fP option. | ||||
|  | ||||
| \fBNOTE:\fP this is not recommended to use in unix multi-threaded programs, as | ||||
| it uses signals unless \fICURLOPT_NOSIGNAL\fP (see above) is set. | ||||
| In unix-like systems, this might cause signals to be used unless | ||||
| \fICURLOPT_NOSIGNAL\fP is set. | ||||
| .IP CURLOPT_IPRESOLVE | ||||
| Allows an application to select what kind of IP addresses to use when | ||||
| resolving host names. This is only interesting when using host names that | ||||
| @@ -951,6 +1061,14 @@ Resolve to ipv4 addresses. | ||||
| .IP CURL_IPRESOLVE_V6 | ||||
| Resolve to ipv6 addresses. | ||||
| .RE | ||||
| .SH CURLOPT_CONNECT_ONLY | ||||
| Pass a long. A non-zero parameter tells the library to perform any required | ||||
| proxy authentication and connection setup, but no data transfer. | ||||
|  | ||||
| This option is useful with the \fICURLINFO_LASTSOCKET\fP option to | ||||
| \fIcurl_easy_getinfo(3)\fP. The library can set up the connection and then the | ||||
| application can obtain the most recently used socket for special data | ||||
| transfers. (Added in 7.15.2) | ||||
| .SH SSL and SECURITY OPTIONS | ||||
| .IP CURLOPT_SSLCERT | ||||
| Pass a pointer to a zero terminated string as parameter. The string should be | ||||
| @@ -975,9 +1093,9 @@ changed with \fICURLOPT_SSLKEYTYPE\fP. | ||||
| Pass a pointer to a zero terminated string as parameter. The string should be | ||||
| the format of your private key. Supported formats are "PEM", "DER" and "ENG". | ||||
|  | ||||
| \fBNOTE:\fP The format "ENG" enables you to load the private key from a crypto | ||||
| engine. In this case \fICURLOPT_SSLKEY\fP is used as an identifier passed to | ||||
| the engine. You have to set the crypto engine with \fICURLOPT_SSLENGINE\fP. | ||||
| The format "ENG" enables you to load the private key from a crypto engine. In | ||||
| this case \fICURLOPT_SSLKEY\fP is used as an identifier passed to the | ||||
| engine. You have to set the crypto engine with \fICURLOPT_SSLENGINE\fP. | ||||
| \&"DER" format key file currently does not work because of a bug in OpenSSL. | ||||
| .IP CURLOPT_SSLKEYPASSWD | ||||
| Pass a pointer to a zero terminated string as parameter. It will be used as | ||||
| @@ -987,14 +1105,14 @@ Pass a pointer to a zero terminated string as parameter. It will be used as | ||||
| the identifier for the crypto engine you want to use for your private | ||||
| key. | ||||
|  | ||||
| \fBNOTE:\fP If the crypto device cannot be loaded, | ||||
| \fICURLE_SSL_ENGINE_NOTFOUND\fP is returned. | ||||
| If the crypto device cannot be loaded, \fICURLE_SSL_ENGINE_NOTFOUND\fP is | ||||
| returned. | ||||
| .IP CURLOPT_SSLENGINE_DEFAULT | ||||
| Sets the actual crypto engine as the default for (asymmetric) crypto | ||||
| operations. | ||||
|  | ||||
| \fBNOTE:\fP If the crypto device cannot be set, | ||||
| \fICURLE_SSL_ENGINE_SETFAILED\fP is returned. | ||||
| If the crypto device cannot be set, \fICURLE_SSL_ENGINE_SETFAILED\fP is | ||||
| returned. | ||||
| .IP CURLOPT_SSLVERSION | ||||
| Pass a long as parameter to control what version of SSL/TLS to attempt to use. | ||||
| The available options are: | ||||
| @@ -1041,6 +1159,9 @@ certificates to verify the peer with.  This makes sense only when used in | ||||
| combination with the \fICURLOPT_SSL_VERIFYPEER\fP option.  If | ||||
| \fICURLOPT_SSL_VERIFYPEER\fP is zero, \fICURLOPT_CAINFO\fP need not | ||||
| even indicate an accessible file. | ||||
|  | ||||
| Note that option is by default set to the system path where libcurl's cacert | ||||
| bundle is assumed to be stored, as established at build time. | ||||
| .IP CURLOPT_CAPATH | ||||
| Pass a char * to a zero terminated string naming a directory holding | ||||
| multiple CA certificates to verify the peer with. The certificate | ||||
| @@ -1060,26 +1181,25 @@ socket. It will be used to seed the random engine for SSL. | ||||
| .IP CURLOPT_SSL_VERIFYHOST | ||||
| Pass a long as parameter. | ||||
|  | ||||
| This option determines whether curl verifies that the server claims to be | ||||
| who you want it to be. | ||||
| This option determines whether libcurl verifies that the server cert is for | ||||
| the server it is known as. | ||||
|  | ||||
| When negotiating an SSL connection, the server sends a certificate | ||||
| indicating its identity. | ||||
| When negotiating an SSL connection, the server sends a certificate indicating | ||||
| its identity. | ||||
|  | ||||
| When \fICURLOPT_SSL_VERIFYHOST\fP is 2, that certificate must indicate | ||||
| that the server is the server to which you meant to connect, or the | ||||
| connection fails. | ||||
| When \fICURLOPT_SSL_VERIFYHOST\fP is 2, that certificate must indicate that | ||||
| the server is the server to which you meant to connect, or the connection | ||||
| fails. | ||||
|  | ||||
| Curl considers the server the intended one when the Common Name field | ||||
| or a Subject Alternate Name field in the certificate matches the host | ||||
| name in the URL to which you told Curl to connect. | ||||
| Curl considers the server the intended one when the Common Name field or a | ||||
| Subject Alternate Name field in the certificate matches the host name in the | ||||
| URL to which you told Curl to connect. | ||||
|  | ||||
| When the value is 1, the certificate must contain a Common Name field, | ||||
| but it doesn't matter what name it says.  (This is not ordinarily a | ||||
| useful setting). | ||||
| When the value is 1, the certificate must contain a Common Name field, but it | ||||
| doesn't matter what name it says.  (This is not ordinarily a useful setting). | ||||
|  | ||||
| When the value is 0, the connection succeeds regardless of the names in | ||||
| the certificate. | ||||
| When the value is 0, the connection succeeds regardless of the names in the | ||||
| certificate. | ||||
|  | ||||
| The default, since 7.10, is 2. | ||||
|  | ||||
|   | ||||
| @@ -12,7 +12,7 @@ curl_easy_strerror - return string describing error code | ||||
| .SH DESCRIPTION | ||||
| The curl_easy_strerror() function returns a string describing the CURLcode | ||||
| error code passed in the argument \fIerrornum\fP. | ||||
|  | ||||
| .SH AVAILABILITY | ||||
| This function was added in libcurl 7.12.0 | ||||
| .SH RETURN VALUE | ||||
| A pointer to a zero terminated string. | ||||
|   | ||||
| @@ -23,4 +23,4 @@ You must curl_free() the returned string when you're done with it. | ||||
| .SH RETURN VALUE | ||||
| A pointer to a zero terminated string or NULL if it failed. | ||||
| .SH "SEE ALSO" | ||||
| .BR curl_unescape(3), curl_free(3), RFC 2396 | ||||
| .BR curl_unescape "(3), " curl_free "(3), " RFC 2396 | ||||
|   | ||||
| @@ -90,7 +90,7 @@ followed by a pointer to a string to a name, will make libcurl use the given | ||||
| name in the file upload part, instead of the actual file name given to | ||||
| \fICURLFORM_FILE\fP. | ||||
|  | ||||
| .IP BCURLFORM_BUFFER | ||||
| .IP CURLFORM_BUFFER | ||||
| followed by a string, tells libcurl that a buffer is to be used to upload data | ||||
| instead of using a file. The given string is used as the value of the file | ||||
| name field in the content header. | ||||
|   | ||||
| @@ -2,7 +2,7 @@ | ||||
| .\" nroff -man [file] | ||||
| .\" $Id$ | ||||
| .\" | ||||
| .TH curl_getdate 3 "5 March 2001" "libcurl 7.0" "libcurl Manual" | ||||
| .TH curl_getdate 3 "12 Aug 2005" "libcurl 7.0" "libcurl Manual" | ||||
| .SH NAME | ||||
| curl_getdate - Convert an date string to number of seconds since January 1, | ||||
| 1970 | ||||
| @@ -26,7 +26,7 @@ order of the items is immaterial.  A date string may contain many flavors of | ||||
| items: | ||||
| .TP 0.8i | ||||
| .B calendar date items | ||||
| Can be specified several ways. Month names can only be three-letter | ||||
| Can be specified several ways. Month names can only be three-letter english | ||||
| abbrivations, numbers can be zero-prefixed and the year may use 2 or 4 digits. | ||||
| Examples: 06 Nov 1994, 06-Nov-94 and Nov-94 6. | ||||
| .TP | ||||
| @@ -94,7 +94,7 @@ crippled mktime(), \fIcurl_getdate\fP will return -1 in this case. | ||||
| .SH REWRITE | ||||
| The former version of this function was built with yacc and was not only very | ||||
| large, it was also never quite understood and it wasn't possible to build with | ||||
| non-GNU tools since only Bison could make it thread-safe! | ||||
| non-GNU tools since only GNU Bison could make it thread-safe! | ||||
|  | ||||
| The rewrite was done for 7.12.2. The new one is much smaller and use simpler | ||||
| code. | ||||
|   | ||||
| @@ -18,10 +18,9 @@ will instead be made "available" by source code access only, and then as | ||||
| curlx_getenv(). | ||||
| .SH RETURN VALUE | ||||
| If successful, curl_getenv() returns a pointer to the value of the specified | ||||
| environment. The memory it refers to is malloc()ed why the application must | ||||
| free() this when the data has completed to serve its purpose. When | ||||
| .I curl_getenv(3) | ||||
| fails to find the specified name, it returns a null pointer. | ||||
| environment. The memory it refers to is malloc()ed so the application must | ||||
| free() this when the data is no longer needed. When \fIcurl_getenv(3)\fP fails | ||||
| to find the specified name, it returns a null pointer. | ||||
| .SH NOTE | ||||
| Under unix operating systems, there isn't any point in returning an allocated | ||||
| memory, although other systems won't work properly if this isn't done. The | ||||
|   | ||||
| @@ -2,7 +2,7 @@ | ||||
| .\" nroff -man [file] | ||||
| .\" $Id$ | ||||
| .\" | ||||
| .TH curl_global_cleanup 3 "28 May 2001" "libcurl 7.8" "libcurl Manual" | ||||
| .TH curl_global_cleanup 3 "17 Feb 2006" "libcurl 7.8" "libcurl Manual" | ||||
| .SH NAME | ||||
| curl_global_cleanup - global libcurl cleanup | ||||
| .SH SYNOPSIS | ||||
| @@ -11,13 +11,22 @@ curl_global_cleanup - global libcurl cleanup | ||||
| .BI "void curl_global_cleanup(void);" | ||||
| .ad | ||||
| .SH DESCRIPTION | ||||
| curl_global_cleanup must be called once (no matter how many threads or libcurl | ||||
| sessions that'll be used) by every application that uses libcurl, after all | ||||
| uses of libcurl is complete. | ||||
| This function releases resources acquired by \fBcurl_global_init(3)\fP. | ||||
|  | ||||
| This is the opposite of \fIcurl_global_init(3)\fP. | ||||
| You should call \fIcurl_global_cleanup(3)\fP once for each call you make to | ||||
| \fIcurl_global_init(3)\fP, after you are done using libcurl. | ||||
|  | ||||
| \fBThis function is not thread safe.\fP You must not call it when any other | ||||
| thread in the program (i.e. a thread sharing the same memory) is running. | ||||
| This doesn't just mean no other thread that is using libcurl.  Because | ||||
| \fBcurl_global_cleanup(3)\fP calls functions of other libraries that are | ||||
| similarly thread unsafe, it could conflict with any other thread that uses | ||||
| these other libraries. | ||||
|  | ||||
| See the description in \fBlibcurl(3)\fP of global environment requirements for | ||||
| details of how to use this function. | ||||
|  | ||||
| Not calling this function may result in memory leaks. | ||||
| .SH "SEE ALSO" | ||||
| .BR curl_global_init "(3), " | ||||
| .BR libcurl "(3), " | ||||
|  | ||||
|   | ||||
| @@ -11,19 +11,30 @@ curl_global_init - Global libcurl initialisation | ||||
| .BI "CURLcode curl_global_init(long " flags ");" | ||||
| .ad | ||||
| .SH DESCRIPTION | ||||
| This function should only be called once (no matter how many threads or | ||||
| libcurl sessions that'll be used) by every application that uses libcurl. | ||||
| This function sets up the program environment that libcurl needs.  Think | ||||
| of it as an extension of the library loader. | ||||
|  | ||||
| If this function hasn't been invoked when \fIcurl_easy_init(3)\fP is called, | ||||
| it will be done automatically by libcurl. | ||||
| This function must be called at least once within a program (a program is | ||||
| all the code that shares a memory space) before the program calls any other | ||||
| function in libcurl.  The environment it sets up is constant for the life | ||||
| of the program and is the same for every program, so multiple calls have | ||||
| the same effect as one call. | ||||
|  | ||||
| The flags option is a bit pattern that tells libcurl exact what features to | ||||
| The flags option is a bit pattern that tells libcurl exactly what features to | ||||
| init, as described below. Set the desired bits by ORing the values together. | ||||
| In normal operation, you must specify CURL_GLOBAL_ALL.  Don't use any other | ||||
| value unless you are familiar with and mean to control internal operations | ||||
| of libcurl. | ||||
|  | ||||
| You must however \fBalways\fP use the \fIcurl_global_cleanup(3)\fP function, | ||||
| as that cannot be called automatically for you by libcurl. | ||||
| \fBThis function is not thread safe.\fP  You must not call it when any | ||||
| other thread in the program (i.e. a thread sharing the same memory) is | ||||
| running.  This doesn't just mean no other thread that is using | ||||
| libcurl.  Because \fIcurl_global_init()\fP calls functions of other | ||||
| libraries that are similarly thread unsafe, it could conflict with any | ||||
| other thread that uses these other libraries. | ||||
|  | ||||
| Calling this function more than once will cause unpredictable results. | ||||
| See the description in \fBlibcurl\fP(3) of global environment | ||||
| requirements for details of how to use this function. | ||||
|  | ||||
| .SH FLAGS | ||||
| .TP 5 | ||||
| @@ -44,3 +55,5 @@ other curl functions. | ||||
| .SH "SEE ALSO" | ||||
| .BR curl_global_init_mem "(3), " | ||||
| .BR curl_global_cleanup "(3), " | ||||
| .BR curl_easy_init "(3) " | ||||
| .BR libcurl "(3) " | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| .\" $Id$ | ||||
| .\" | ||||
| .TH curl_multi_fdset 3 "25 Apr 2005" "libcurl 7.9.5" "libcurl Manual" | ||||
| .TH curl_multi_fdset 3 "2 Jan 2006" "libcurl 7.16.0" "libcurl Manual" | ||||
| .SH NAME | ||||
| curl_multi_fdset - extracts file descriptor information from a multi handle | ||||
| .SH SYNOPSIS | ||||
| @@ -30,8 +30,12 @@ rather small (single-digit number of seconds) timeout and call | ||||
| \fIcurl_multi_perform\fP regularly - even if no activity has been seen on the | ||||
| fd_sets - as otherwise libcurl-internal retries and timeouts may not work as | ||||
| you'd think and want. | ||||
|  | ||||
| Starting with libcurl 7.16.0, you should use \fBcurl_multi_timeout\fP to | ||||
| figure out how long to wait for action. | ||||
| .SH RETURN VALUE | ||||
| CURLMcode type, general libcurl multi interface error code. See | ||||
| \fIlibcurl-errors(3)\fP | ||||
| .SH "SEE ALSO" | ||||
| .BR curl_multi_cleanup "(3)," curl_multi_init "(3)" | ||||
| .BR curl_multi_cleanup "(3)," curl_multi_init "(3), " | ||||
| .BR curl_multi_timeout "(3) " | ||||
|   | ||||
| @@ -36,9 +36,9 @@ NOTE that this only returns errors etc regarding the whole multi stack. There | ||||
| might still have occurred problems on individual transfers even when this | ||||
| function returns OK. | ||||
| .SH "TYPICAL USAGE" | ||||
| Most application will use \fIcurl_multi_fdset(3)\fP to get the multi_handle's | ||||
| file descriptors, then it'll wait for action on them using select() and as | ||||
| soon as one or more of them are ready, \fIcurl_multi_perform(3)\fP gets | ||||
| Most applications will use \fIcurl_multi_fdset(3)\fP to get the multi_handle's | ||||
| file descriptors, then it'll wait for action on them using \fBselect(3)\fP and | ||||
| as soon as one or more of them are ready, \fIcurl_multi_perform(3)\fP gets | ||||
| called. | ||||
| .SH "SEE ALSO" | ||||
| .BR curl_multi_cleanup "(3), " curl_multi_init "(3), " | ||||
|   | ||||
							
								
								
									
										42
									
								
								docs/libcurl/curl_multi_setopt.3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								docs/libcurl/curl_multi_setopt.3
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,42 @@ | ||||
| .\" $Id$ | ||||
| .\" | ||||
| .TH curl_multi_setopt 3 "8 Jan 2006" "libcurl 7.16.0" "libcurl Manual" | ||||
| .SH NAME | ||||
| curl_multi_setopt \- set options for a curl multi handle | ||||
| .SH SYNOPSIS | ||||
| #include <curl/curl.h> | ||||
|  | ||||
| CURLMcode curl_multi_setopt(CURLM * multi_handle, CURLMoption option, param); | ||||
| .SH DESCRIPTION | ||||
| curl_multi_setopt() is used to tell a libcurl multi handle how to behave. By | ||||
| using the appropriate options to \fIcurl_multi_setopt\fP, you can change | ||||
| libcurl's behaviour when using that multi handle.  All options are set with | ||||
| the \fIoption\fP followed by the parameter \fIparam\fP. That parameter can be | ||||
| a \fBlong\fP, a \fBfunction pointer\fP, an \fBobject pointer\fP or a | ||||
| \fBcurl_off_t\fP type, depending on what the specific option expects. Read | ||||
| this manual carefully as bad input values may cause libcurl to behave badly! | ||||
| You can only set one option in each function call. | ||||
|  | ||||
| .SH OPTIONS | ||||
| .IP CURLMOPT_SOCKETFUNCTION | ||||
| Pass a pointer to a function matching the curl_socket_callback prototype. The | ||||
| \fIcurl_multi_socket(3)\fP functions inform the application about updates in | ||||
| the socket (file descriptor) status by doing none, one or multiple calls to | ||||
| the curl_socket_callback given in the \fBparam\fP argument. They update the | ||||
| status with changes since the previous time a \fIcurl_multi_socket(3)\fP | ||||
| function was called. If the given callback pointer is NULL, no callback will | ||||
| be called. Set the callback's fourth argument with \fICURLMOPT_SOCKETDATA\fP. | ||||
| See \fIcurl_multi_socket(3)\fP for more callback details. | ||||
| .IP CURLMOPT_SOCKETDATA | ||||
| Pass a pointer to whatever you want passed to the curl_socket_callback's forth | ||||
| argument, the userp pointer. This is not used by libcurl but only passed-thru | ||||
| as-is. Set the callback pointer with \fICURLMOPT_SOCKETFUNCTION\fP. | ||||
| .SH RETURNS | ||||
| The standard CURLMcode for multi interface error codes. Note that it returns a | ||||
| CURLM_UNKNOWN_OPTION if you try setting an option that this version of libcurl | ||||
| doesn't know of. | ||||
| .SH AVAILABILITY | ||||
| This function was added in libcurl 7.16.0 | ||||
| .SH "SEE ALSO" | ||||
| .BR curl_multi_cleanup "(3), " curl_multi_init "(3), " | ||||
| .BR curl_multi_socket "(3), " curl_multi_info_read "(3)" | ||||
							
								
								
									
										96
									
								
								docs/libcurl/curl_multi_socket.3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										96
									
								
								docs/libcurl/curl_multi_socket.3
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,96 @@ | ||||
| .\" $Id$ | ||||
| .\" | ||||
| .TH curl_multi_socket 3 "21 Dec 2005" "libcurl 7.16.0" "libcurl Manual" | ||||
| .SH NAME | ||||
| curl_multi_socket \- reads/writes available data | ||||
| .SH SYNOPSIS | ||||
| #include <curl/curl.h> | ||||
|  | ||||
| CURLMcode curl_multi_socket(CURLM * multi_handle, curl_socket_t sockfd); | ||||
|  | ||||
| CURLMcode curl_multi_socket_all(CURLM *multi_handle); | ||||
| .SH DESCRIPTION | ||||
| Alternative versions of \fIcurl_multi_perform()\fP that allows the application | ||||
| to pass in one of the file descriptors/sockets that have been detected to have | ||||
| \&"action" on them and let libcurl perform. This allows libcurl to not have to | ||||
| scan through all possible file descriptors to check for action. When the | ||||
| application has detected action on a socket handled by libcurl, it should call | ||||
| \fIcurl_multi_perform()\fP with the \fBsockfd\fP argument set to the socket | ||||
| with the action. | ||||
|  | ||||
| These functions inform the application about updates in the socket (file | ||||
| descriptor) status by doing none, one or multiple calls to the | ||||
| curl_socket_callback given with the CURLMOPT_SOCKETFUNCTION option to | ||||
| \fIcurl_multi_setopt(3)\fP. They update the status with changes since the | ||||
| previous time this function was called. | ||||
|  | ||||
| If you want to force libcurl to (re-)check all its internal sockets and | ||||
| transfers instead of just a single one, you call | ||||
| \fBcurl_multi_socket_all(3)\fP instead. | ||||
|  | ||||
| An application should call \fBcurl_multi_timeout(3)\fP to figure out how long | ||||
| it should wait for socket actions \- at most \- before doing the timeout | ||||
| action: call the \fBcurl_multi_socket(3)\fP function with the \fBsockfd\fP | ||||
| argument set to CURL_SOCKET_TIMEOUT. | ||||
|  | ||||
| The socket \fBcallback\fP function uses a prototype like this | ||||
| .nf | ||||
|  | ||||
|      int curl_socket_callback(CURL *easy,      /* easy handle */ | ||||
|                               curl_socket_t s, /* socket */ | ||||
|                               int action,      /* see values below */ | ||||
|                               void *userp);    /* "private" pointer */ | ||||
|  | ||||
| .fi | ||||
| The callback MUST return 0. | ||||
|  | ||||
| The \fIaction\fP (third) argument to the callback has one of five values: | ||||
| .RS | ||||
| .IP "CURL_POLL_NONE (0)" | ||||
| register, not interested in readiness (yet) | ||||
| .IP "CURL_POLL_IN (1)" | ||||
| register, interested in read readiness | ||||
| .IP "CURL_POLL_OUT (2)" | ||||
| register, interested in write readiness | ||||
| .IP "CURL_POLL_INOUT (3)" | ||||
| register, interested in both read and write readiness | ||||
| .IP "CURL_POLL_REMOVE (4)" | ||||
| deregister | ||||
| .RE | ||||
| .SH "RETURN VALUE" | ||||
| CURLMcode type, general libcurl multi interface error code. | ||||
|  | ||||
| If you receive \fICURLM_CALL_MULTI_PERFORM\fP, this basically means that you | ||||
| should call \fIcurl_multi_perform\fP again, before you wait for more actions | ||||
| on libcurl's sockets. You don't have to do it immediately, but the return code | ||||
| means that libcurl may have more data available to return or that there may be | ||||
| more data to send off before it is "satisfied". | ||||
|  | ||||
| NOTE that this only returns errors etc regarding the whole multi stack. There | ||||
| might still have occurred problems on individual transfers even when this | ||||
| function returns OK. | ||||
| .SH "TYPICAL USAGE" | ||||
| 1. Create a multi handle | ||||
|  | ||||
| 2. Set the socket callback with CURLMOPT_SOCKETFUNCTION | ||||
|  | ||||
| 3. Add easy handles | ||||
|  | ||||
| 4. Call curl_multi_socket_all() first once | ||||
|  | ||||
| 5. Setup a "collection" of sockets to supervise when your socket | ||||
| callback is called. | ||||
|  | ||||
| 6. Use curl_multi_timeout() to figure out how long to wait for action | ||||
|  | ||||
| 7. Wait for action on any of libcurl's sockets | ||||
|  | ||||
| 8, When action happens, call curl_multi_socket() for the socket(s) that got | ||||
| action. | ||||
|  | ||||
| 9. Go back to step 6. | ||||
| .SH AVAILABILITY | ||||
| This function was added in libcurl 7.16.0 | ||||
| .SH "SEE ALSO" | ||||
| .BR curl_multi_cleanup "(3), " curl_multi_init "(3), " | ||||
| .BR curl_multi_fdset "(3), " curl_multi_info_read "(3)" | ||||
							
								
								
									
										1
									
								
								docs/libcurl/curl_multi_socket_all.3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								docs/libcurl/curl_multi_socket_all.3
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| .so man3/curl_multi_socket.3 | ||||
| @@ -12,7 +12,7 @@ curl_multi_strerror - return string describing error code | ||||
| .SH DESCRIPTION | ||||
| The curl_multi_strerror() function returns a string describing the CURLMcode | ||||
| error code passed in the argument \fIerrornum\fP. | ||||
|  | ||||
| .SH AVAILABILITY | ||||
| This function was added in libcurl 7.12.0 | ||||
| .SH RETURN VALUE | ||||
| A pointer to a zero terminated string. | ||||
|   | ||||
							
								
								
									
										38
									
								
								docs/libcurl/curl_multi_timeout.3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								docs/libcurl/curl_multi_timeout.3
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,38 @@ | ||||
| .\" $Id$ | ||||
| .\" | ||||
| .TH curl_multi_timeout 3 "2 Jan 2006" "libcurl 7.16.0" "libcurl Manual" | ||||
| .SH NAME | ||||
| curl_multi_timeout \- how long to wait for action before proceeding | ||||
| .SH SYNOPSIS | ||||
| #include <curl/curl.h> | ||||
|  | ||||
| CURLMcode curl_multi_timeout(CURLM *multi_handle, long *timeout); | ||||
| .SH DESCRIPTION | ||||
|  | ||||
| An application using the libcurl multi interface should call | ||||
| \fBcurl_multi_timeout(3)\fP to figure out how long it should wait for socket | ||||
| actions \- at most \- before proceeding. | ||||
|  | ||||
| Proceeding means either doing the socket-style timeout action: call the | ||||
| \fBcurl_multi_socket(3)\fP function with the \fBsockfd\fP argument set to | ||||
| CURL_SOCKET_TIMEOUT and the \fBeasy\fP argument set to CURL_EASY_TIMEOUT, or | ||||
| simply calling \fBcurl_multi_perform(3)\fP if you're using the simpler and | ||||
| older multi interface approach. | ||||
|  | ||||
| The timeout value returned in the long \fBtimeout\fP points to, is in number | ||||
| of milliseconds at this very moment. If 0, it means you should proceed | ||||
| immediately without waiting for anything. If it returns -1, there's no timeout | ||||
| at all set. | ||||
| .SH "RETURN VALUE" | ||||
| The standard CURLMcode for multi interface error codes. | ||||
| .SH "TYPICAL USAGE" | ||||
| Call \fBcurl_multi_timeout(3)\fP, then wait for action on the sockets. You | ||||
| figure out which sockets to wait for by calling \fBcurl_multi_fdset(3)\fP or | ||||
| by a previous call to \fBcurl_multi_socket(3)\fP. | ||||
| .SH AVAILABILITY | ||||
| This function was added in libcurl 7.16.0 | ||||
| .SH "SEE ALSO" | ||||
| .BR curl_multi_cleanup "(3), " curl_multi_init "(3), " | ||||
| .BR curl_multi_fdset "(3), " curl_multi_info_read "(3), " | ||||
| .BR curl_multi_socket "(3) " | ||||
|  | ||||
| @@ -12,7 +12,7 @@ curl_share_strerror - return string describing error code | ||||
| .SH DESCRIPTION | ||||
| The curl_share_strerror() function returns a string describing the CURLSHcode | ||||
| error code passed in the argument \fIerrornum\fP. | ||||
|  | ||||
| .SH AVAILABILITY | ||||
| This function was added in libcurl 7.12.0 | ||||
| .SH RETURN VALUE | ||||
| A pointer to a zero terminated string. | ||||
|   | ||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user